mgv-backoffice 1.18.0 → 1.20.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 (80) hide show
  1. package/README.md +152 -9
  2. package/dist/{src/components → components}/BaseActionButton.vue.d.ts +9 -13
  3. package/dist/{src/components → components}/BaseAlert.vue.d.ts +3 -2
  4. package/dist/components/BaseAppLayout.vue.d.ts +28 -0
  5. package/dist/{src/components → components}/BaseBadge.vue.d.ts +7 -11
  6. package/dist/{src/components → components}/BaseBreadcrumb.vue.d.ts +3 -2
  7. package/dist/{src/components → components}/BaseButton.vue.d.ts +9 -12
  8. package/dist/{src/components → components}/BaseCollapsibleSection.vue.d.ts +7 -11
  9. package/dist/{src/components → components}/BaseConfirmModal.vue.d.ts +9 -12
  10. package/dist/{src/components → components}/BaseCopyButton.vue.d.ts +2 -1
  11. package/dist/{src/components → components}/BaseEntityPickerModal.vue.d.ts +8 -16
  12. package/dist/components/BaseGoogleSignInButton.vue.d.ts +22 -0
  13. package/dist/{src/components → components}/BaseLine.vue.d.ts +2 -1
  14. package/dist/components/BaseLoginForm.vue.d.ts +51 -0
  15. package/dist/{src/components → components}/BaseLogo.vue.d.ts +2 -1
  16. package/dist/{src/components → components}/BaseModal.vue.d.ts +7 -11
  17. package/dist/{src/components → components}/BaseModalShell.vue.d.ts +19 -17
  18. package/dist/{src/components → components}/BaseNotFoundPage.vue.d.ts +3 -2
  19. package/dist/components/BaseNotificationPanel.vue.d.ts +19 -0
  20. package/dist/components/BasePageHeader.vue.d.ts +28 -0
  21. package/dist/{src/components → components}/BaseRow.vue.d.ts +8 -12
  22. package/dist/components/BaseSidebar.vue.d.ts +47 -0
  23. package/dist/{src/components → components}/BaseSpinner.vue.d.ts +2 -1
  24. package/dist/{src/components → components}/BaseTextInputModal.vue.d.ts +8 -16
  25. package/dist/{src/components → components}/BaseToast.vue.d.ts +2 -1
  26. package/dist/{src/components → components}/BaseToolbarButton.vue.d.ts +9 -13
  27. package/dist/components/ColoredSquares.vue.d.ts +23 -0
  28. package/dist/{src/components → components}/EarningsCard.vue.d.ts +3 -2
  29. package/dist/{src/components → components}/EuroAmount.vue.d.ts +2 -1
  30. package/dist/{src/components → components}/Pagination.vue.d.ts +3 -2
  31. package/dist/{src/components → components}/TrendArrow.vue.d.ts +2 -1
  32. package/dist/composables/useNotifications.d.ts +29 -0
  33. package/dist/composables/useSidebarCollapse.d.ts +22 -0
  34. package/dist/index.d.ts +62 -1
  35. package/dist/types/auth.d.ts +11 -0
  36. package/dist/types/notification.d.ts +20 -0
  37. package/dist/ui-lib.css +2 -2
  38. package/dist/ui-lib.js +1088 -671
  39. package/dist/ui-lib.umd.cjs +1 -1
  40. package/package.json +14 -13
  41. package/src/components/BaseAppLayout.vue +4 -1
  42. package/src/components/BaseGoogleSignInButton.vue +83 -0
  43. package/src/components/BaseLoginForm.test.ts +52 -0
  44. package/src/components/BaseLoginForm.vue +204 -0
  45. package/src/components/BaseNotificationPanel.vue +183 -0
  46. package/src/components/BaseSidebar.vue +140 -31
  47. package/src/composables/useNotifications.test.ts +64 -0
  48. package/src/composables/useNotifications.ts +81 -0
  49. package/src/composables/useSidebarCollapse.ts +64 -0
  50. package/src/index.ts +8 -0
  51. package/src/types/auth.ts +11 -0
  52. package/src/types/notification.ts +20 -0
  53. package/dist/src/components/BaseAppLayout.vue.d.ts +0 -31
  54. package/dist/src/components/BasePageHeader.vue.d.ts +0 -31
  55. package/dist/src/components/BaseSidebar.vue.d.ts +0 -46
  56. package/dist/src/components/ColoredSquares.vue.d.ts +0 -27
  57. package/dist/src/index.d.ts +0 -54
  58. /package/dist/{src/composables → composables}/useDebounce.d.ts +0 -0
  59. /package/dist/{src/composables → composables}/useEscapeKey.d.ts +0 -0
  60. /package/dist/{src/composables → composables}/useMobileSidebar.d.ts +0 -0
  61. /package/dist/{src/composables → composables}/useTheme.d.ts +0 -0
  62. /package/dist/{src/composables → composables}/useThemeClasses.d.ts +0 -0
  63. /package/dist/{src/composables → composables}/useToast.d.ts +0 -0
  64. /package/dist/{src/enums → enums}/AlertEnum.d.ts +0 -0
  65. /package/dist/{src/enums → enums}/BaseBadgeEnum.d.ts +0 -0
  66. /package/dist/{src/enums → enums}/BaseButtonEnum.d.ts +0 -0
  67. /package/dist/{src/enums → enums}/BaseButtonSizeEnum.d.ts +0 -0
  68. /package/dist/{src/enums → enums}/BaseLogoEnum.d.ts +0 -0
  69. /package/dist/{src/enums → enums}/BaseModalEnum.d.ts +0 -0
  70. /package/dist/{src/enums → enums}/BaseToastEnum.d.ts +0 -0
  71. /package/dist/{src/enums → enums}/ColorsEnums.d.ts +0 -0
  72. /package/dist/{src/enums → enums}/LineEnum.d.ts +0 -0
  73. /package/dist/{src/enums → enums}/PositioningEnum.d.ts +0 -0
  74. /package/dist/{src/types → types}/entityPicker.d.ts +0 -0
  75. /package/dist/{src/types → types}/sidebar.d.ts +0 -0
  76. /package/dist/{src/utils → utils}/format.d.ts +0 -0
  77. /package/dist/{src/utils → utils}/httpColors.d.ts +0 -0
  78. /package/dist/{src/utils → utils}/pnl.d.ts +0 -0
  79. /package/dist/{src/utils → utils}/sanitizeHtml.d.ts +0 -0
  80. /package/dist/{src/utils → utils}/util.d.ts +0 -0
package/dist/ui-lib.js CHANGED
@@ -1,55 +1,55 @@
1
- import { Fragment as e, Teleport as t, computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createTextVNode as s, createVNode as c, defineComponent as l, effectScope as u, nextTick as d, normalizeClass as f, onBeforeUnmount as p, onMounted as m, onScopeDispose as h, onUnmounted as g, openBlock as _, ref as v, renderList as y, renderSlot as b, resolveComponent as x, resolveDynamicComponent as S, toDisplayString as C, unref as w, useSlots as T, vModelText as E, vShow as D, watch as O, withCtx as k, withDirectives as A, withKeys as j, withModifiers as M } from "vue";
2
- import { ArrowDownIcon as ee, ArrowUpIcon as te, Bars3Icon as N, CheckCircleIcon as P, ChevronRightIcon as F, ClipboardDocumentCheckIcon as ne, ClipboardDocumentIcon as re, DocumentDuplicateIcon as ie, ExclamationCircleIcon as ae, ExclamationTriangleIcon as I, FolderIcon as oe, InformationCircleIcon as se, MagnifyingGlassIcon as ce, MinusIcon as le, XMarkIcon as ue } from "@heroicons/vue/24/outline";
3
- import { HomeIcon as de } from "@heroicons/vue/24/solid";
4
- import { useRoute as fe, useRouter as pe } from "vue-router";
1
+ import { Fragment as e, Teleport as t, Transition as n, computed as r, createBlock as i, createCommentVNode as a, createElementBlock as o, createElementVNode as s, createStaticVNode as c, createTextVNode as l, createVNode as u, defineComponent as d, effectScope as f, nextTick as p, normalizeClass as m, onBeforeUnmount as h, onMounted as g, onScopeDispose as _, onUnmounted as v, openBlock as y, ref as b, renderList as x, renderSlot as S, resolveComponent as C, resolveDynamicComponent as w, toDisplayString as T, unref as E, useSlots as D, vModelCheckbox as O, vModelDynamic as k, vModelText as A, vShow as ee, watch as j, withCtx as M, withDirectives as N, withKeys as P, withModifiers as F } from "vue";
2
+ import { ArrowDownIcon as te, ArrowUpIcon as ne, Bars3Icon as re, BellIcon as ie, CheckCircleIcon as ae, ChevronDoubleLeftIcon as oe, ChevronDoubleRightIcon as se, ChevronRightIcon as ce, ClipboardDocumentCheckIcon as le, ClipboardDocumentIcon as ue, DocumentDuplicateIcon as de, ExclamationCircleIcon as fe, ExclamationTriangleIcon as pe, FolderIcon as me, InformationCircleIcon as he, MagnifyingGlassIcon as ge, MinusIcon as _e, MoonIcon as ve, SunIcon as ye, XMarkIcon as be } from "@heroicons/vue/24/outline";
3
+ import { HomeIcon as xe } from "@heroicons/vue/24/solid";
4
+ import { useRoute as Se, useRouter as Ce } from "vue-router";
5
5
  //#region src/enums/AlertEnum.ts
6
- var L = /* @__PURE__ */ function(e) {
6
+ var I = /* @__PURE__ */ function(e) {
7
7
  return e.WARNING = "WARNING", e.ERROR = "ERROR", e.SUCCESS = "SUCCESS", e.INFO = "INFO", e;
8
- }({}), R = /* @__PURE__ */ function(e) {
8
+ }({}), L = /* @__PURE__ */ function(e) {
9
9
  return e.NONE = "NONE", e.RED = "RED", e.YELLOW = "YELLOW", e.BLACK = "BLACK", e.GRAY = "GRAY", e.GREEN = "GREEN", e.BLUE = "BLUE", e;
10
10
  }({});
11
11
  //#endregion
12
12
  //#region src/utils/util.ts
13
- function me(e) {
13
+ function we(e) {
14
14
  let t = "red";
15
15
  switch (e) {
16
- case L.ERROR:
16
+ case I.ERROR:
17
17
  t = "red";
18
18
  break;
19
- case L.SUCCESS:
19
+ case I.SUCCESS:
20
20
  t = "green";
21
21
  break;
22
- case L.INFO:
22
+ case I.INFO:
23
23
  t = "gray";
24
24
  break;
25
- case L.WARNING:
25
+ case I.WARNING:
26
26
  t = "yellow";
27
27
  break;
28
28
  }
29
29
  return t;
30
30
  }
31
- function he(e) {
31
+ function Te(e) {
32
32
  let t = "red";
33
33
  switch (e) {
34
- case R.GREEN:
34
+ case L.GREEN:
35
35
  t = "green";
36
36
  break;
37
- case R.RED:
37
+ case L.RED:
38
38
  t = "red";
39
39
  break;
40
- case R.BLUE:
40
+ case L.BLUE:
41
41
  t = "blue";
42
42
  break;
43
- case R.YELLOW:
43
+ case L.YELLOW:
44
44
  t = "yellow";
45
45
  break;
46
- case R.BLACK:
46
+ case L.BLACK:
47
47
  t = "black";
48
48
  break;
49
- case R.GRAY:
49
+ case L.GRAY:
50
50
  t = "gray";
51
51
  break;
52
- case R.NONE:
52
+ case L.NONE:
53
53
  t = "";
54
54
  break;
55
55
  }
@@ -57,7 +57,7 @@ function he(e) {
57
57
  }
58
58
  //#endregion
59
59
  //#region src/components/BaseAlert.vue?vue&type=script&setup=true&lang.ts
60
- var ge = { class: "font-medium pl-1" }, _e = /* @__PURE__ */ l({
60
+ var Ee = { class: "font-medium pl-1" }, De = /* @__PURE__ */ d({
61
61
  __name: "BaseAlert",
62
62
  props: {
63
63
  title: {
@@ -68,62 +68,62 @@ var ge = { class: "font-medium pl-1" }, _e = /* @__PURE__ */ l({
68
68
  color: {
69
69
  type: String,
70
70
  required: !1,
71
- default: L.ERROR
71
+ default: I.ERROR
72
72
  }
73
73
  },
74
74
  setup(e) {
75
- let t = e, i = n(() => {
75
+ let t = e, n = r(() => {
76
76
  switch (t.color) {
77
- case L.SUCCESS: return P;
78
- case L.WARNING: return I;
79
- case L.INFO: return se;
80
- default: return ae;
77
+ case I.SUCCESS: return ae;
78
+ case I.WARNING: return pe;
79
+ case I.INFO: return he;
80
+ default: return fe;
81
81
  }
82
- }), s = n(() => {
82
+ }), a = r(() => {
83
83
  switch (t.color) {
84
- case L.SUCCESS: return "text-green-500";
85
- case L.WARNING: return "text-yellow-500";
86
- case L.INFO: return "text-gray-500";
84
+ case I.SUCCESS: return "text-green-500";
85
+ case I.WARNING: return "text-yellow-500";
86
+ case I.INFO: return "text-gray-500";
87
87
  default: return "text-red-500";
88
88
  }
89
89
  });
90
90
  function c() {
91
- let e = me(t.color);
91
+ let e = we(t.color);
92
92
  return "flex items-center p-4 mb-4 text-sm text-" + e + "-800 border border-" + e + "-300 rounded-lg bg-" + e + "-50 dark:bg-gray-800 dark:text-" + e + "-400 dark:border-" + e + "-800";
93
93
  }
94
- return (t, n) => (_(), a("div", {
95
- class: f(c()),
94
+ return (t, r) => (y(), o("div", {
95
+ class: m(c()),
96
96
  role: "alert"
97
- }, [(_(), r(S(i.value), { class: f(["w-6 h-6 flex-shrink-0", s.value]) }, null, 8, ["class"])), o("div", null, [o("span", ge, C(e.title), 1)])], 2));
97
+ }, [(y(), i(w(n.value), { class: m(["w-6 h-6 flex-shrink-0", a.value]) }, null, 8, ["class"])), s("div", null, [s("span", Ee, T(e.title), 1)])], 2));
98
98
  }
99
- }), ve = "bg-red-100 text-red-700 border-red-200", z = /* @__PURE__ */ l({
99
+ }), Oe = "bg-red-100 text-red-700 border-red-200", ke = /* @__PURE__ */ d({
100
100
  __name: "BaseBadge",
101
101
  props: { color: {
102
102
  type: String,
103
103
  required: !1
104
104
  } },
105
105
  setup(e) {
106
- let t = T(), r = n(() => !!t.default), o = e, s = {
107
- [R.RED]: "bg-red-100 text-red-700 border-red-200",
108
- [R.GREEN]: "bg-green-100 text-green-700 border-green-200",
109
- [R.BLUE]: "bg-blue-100 text-blue-700 border-blue-200",
110
- [R.YELLOW]: "bg-yellow-100 text-yellow-700 border-yellow-200",
111
- [R.GRAY]: "bg-gray-100 text-gray-700 border-gray-200",
112
- [R.BLACK]: "bg-gray-800 text-gray-100 border-gray-700",
113
- [R.NONE]: "bg-gray-50 text-gray-600 border-gray-200"
114
- }, c = n(() => `inline-flex items-center gap-1 font-semibold text-xs leading-none px-3 py-1.5 rounded-full border ${o.color && s[o.color] || ve}`);
115
- return (e, t) => r.value ? (_(), a("span", {
106
+ let t = D(), n = r(() => !!t.default), i = e, s = {
107
+ [L.RED]: "bg-red-100 text-red-700 border-red-200",
108
+ [L.GREEN]: "bg-green-100 text-green-700 border-green-200",
109
+ [L.BLUE]: "bg-blue-100 text-blue-700 border-blue-200",
110
+ [L.YELLOW]: "bg-yellow-100 text-yellow-700 border-yellow-200",
111
+ [L.GRAY]: "bg-gray-100 text-gray-700 border-gray-200",
112
+ [L.BLACK]: "bg-gray-800 text-gray-100 border-gray-700",
113
+ [L.NONE]: "bg-gray-50 text-gray-600 border-gray-200"
114
+ }, c = r(() => `inline-flex items-center gap-1 font-semibold text-xs leading-none px-3 py-1.5 rounded-full border ${i.color && s[i.color] || Oe}`);
115
+ return (e, t) => n.value ? (y(), o("span", {
116
116
  key: 0,
117
- class: f(c.value)
118
- }, [b(e.$slots, "default")], 2)) : i("", !0);
117
+ class: m(c.value)
118
+ }, [S(e.$slots, "default")], 2)) : a("", !0);
119
119
  }
120
- }), ye = {
120
+ }), Ae = {
121
121
  class: "flex px-5 py-3 text-gray-700 border border-gray-200 rounded-lg bg-gray-50 dark:bg-gray-800 dark:border-gray-700",
122
122
  "aria-label": "Breadcrumb"
123
- }, be = { class: "inline-flex items-center space-x-1 md:space-x-3" }, xe = {
123
+ }, je = { class: "inline-flex items-center space-x-1 md:space-x-3" }, Me = {
124
124
  class: "inline-flex items-center",
125
125
  style: { "margin-left": "0" }
126
- }, Se = /* @__PURE__ */ l({
126
+ }, Ne = /* @__PURE__ */ d({
127
127
  __name: "BaseBreadcrumb",
128
128
  props: {
129
129
  items: {
@@ -138,81 +138,81 @@ var ge = { class: "font-medium pl-1" }, _e = /* @__PURE__ */ l({
138
138
  }
139
139
  },
140
140
  setup(t) {
141
- let r = t, i = n(() => {
142
- if (r.items && r.items.length > 0) return r.items;
143
- let e = (r.path ?? (typeof window < "u" ? window.location.pathname : "/")).split("/").filter((e) => e !== ""), t = "";
141
+ let n = t, i = r(() => {
142
+ if (n.items && n.items.length > 0) return n.items;
143
+ let e = (n.path ?? (typeof window < "u" ? window.location.pathname : "/")).split("/").filter((e) => e !== ""), t = "";
144
144
  return e.map((e) => (t += "/" + e, {
145
145
  name: Number.isNaN(Number(e)) ? (e.charAt(0).toUpperCase() + e.slice(1)).replaceAll("-", " ") : e,
146
146
  url: t
147
147
  }));
148
148
  });
149
149
  return (t, n) => {
150
- let r = x("router-link");
151
- return _(), a("nav", ye, [o("ol", be, [o("li", xe, [c(r, {
150
+ let r = C("router-link");
151
+ return y(), o("nav", Ae, [s("ol", je, [s("li", Me, [u(r, {
152
152
  to: "/",
153
153
  class: "inline-flex items-center text-sm font-medium text-gray-700 hover:text-blue-600 dark:text-gray-400 dark:hover:text-white"
154
154
  }, {
155
- default: k(() => [c(w(de), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= s(" Home ", -1)]),
155
+ default: M(() => [u(E(xe), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= l(" Home ", -1)]),
156
156
  _: 1
157
- })]), (_(!0), a(e, null, y(i.value, (e, t) => (_(), a("li", {
157
+ })]), (y(!0), o(e, null, x(i.value, (e, t) => (y(), o("li", {
158
158
  key: t,
159
159
  class: "inline-flex items-center",
160
160
  style: { "margin-left": "0" }
161
- }, [c(w(F), { class: "h-4 w-4 text-gray-500" }), c(r, {
161
+ }, [u(E(ce), { class: "h-4 w-4 text-gray-500" }), u(r, {
162
162
  to: e.url,
163
163
  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"
164
164
  }, {
165
- default: k(() => [s(C(e.name), 1)]),
165
+ default: M(() => [l(T(e.name), 1)]),
166
166
  _: 2
167
167
  }, 1032, ["to"])]))), 128))])]);
168
168
  };
169
169
  }
170
- }), B = /* @__PURE__ */ function(e) {
170
+ }), R = /* @__PURE__ */ function(e) {
171
171
  return e.RED = "RED", e.BLUE = "BLUE", e.WHITE = "WHITE", e.DARK = "DARK", e.GREEN = "GREEN", e.EMERALD = "EMERALD", e.YELLOW = "YELLOW", e.PURPLE = "PURPLE", e.SKY = "SKY", e.GRAY = "GRAY", e.AMBER = "AMBER", e;
172
- }({}), V = /* @__PURE__ */ function(e) {
172
+ }({}), z = /* @__PURE__ */ function(e) {
173
173
  return e.EXTRA_SMALL = "EXTRA_SMALL", e.SMALL = "SMALL", e.BASE = "BASE", e.LARGE = "LARGE", e.EXTRA_LARGE = "EXTRA_LARGE", e;
174
- }({}), H = v(!1), Ce = !1, U = "mgv-theme";
175
- function we(e) {
176
- if (Ce) {
177
- e !== U && console.warn(`[ui-lib] useTheme: storage key "${e}" ignored — theme already initialized with "${U}". Call initTheme({ storageKey }) before mounting any component.`);
174
+ }({}), B = b(!1), Pe = !1, V = "mgv-theme";
175
+ function Fe(e) {
176
+ if (Pe) {
177
+ e !== V && console.warn(`[ui-lib] useTheme: storage key "${e}" ignored — theme already initialized with "${V}". Call initTheme({ storageKey }) before mounting any component.`);
178
178
  return;
179
179
  }
180
- if (Ce = !0, U = e, typeof window < "u") {
181
- let e = window.localStorage?.getItem(U);
182
- e ? H.value = e === "dark" : typeof window.matchMedia == "function" && (H.value = window.matchMedia("(prefers-color-scheme: dark)").matches);
180
+ if (Pe = !0, V = e, typeof window < "u") {
181
+ let e = window.localStorage?.getItem(V);
182
+ e ? B.value = e === "dark" : typeof window.matchMedia == "function" && (B.value = window.matchMedia("(prefers-color-scheme: dark)").matches);
183
183
  }
184
- typeof document < "u" && u(!0).run(() => {
185
- O(H, (e) => {
186
- document.documentElement.classList.toggle("dark", e), window.localStorage?.setItem(U, e ? "dark" : "light");
184
+ typeof document < "u" && f(!0).run(() => {
185
+ j(B, (e) => {
186
+ document.documentElement.classList.toggle("dark", e), window.localStorage?.setItem(V, e ? "dark" : "light");
187
187
  }, { immediate: !0 });
188
188
  });
189
189
  }
190
- function Te(e) {
191
- we(e?.storageKey ?? U);
190
+ function Ie(e) {
191
+ Fe(e?.storageKey ?? V);
192
192
  }
193
- function W(e) {
194
- we(e?.storageKey ?? U);
193
+ function H(e) {
194
+ Fe(e?.storageKey ?? V);
195
195
  function t() {
196
- H.value = !H.value;
196
+ B.value = !B.value;
197
197
  }
198
198
  return {
199
- isDark: H,
199
+ isDark: B,
200
200
  toggleTheme: t
201
201
  };
202
202
  }
203
203
  //#endregion
204
204
  //#region src/components/BaseButton.vue?vue&type=script&setup=true&lang.ts
205
- var Ee = [
205
+ var Le = [
206
206
  "type",
207
207
  "disabled",
208
208
  "onClick"
209
- ], De = {
209
+ ], Re = {
210
210
  key: 0,
211
211
  class: "inline-flex items-center"
212
- }, Oe = { key: 1 }, ke = { key: 2 }, Ae = ["type", "disabled"], je = {
212
+ }, ze = { key: 1 }, Be = { key: 2 }, Ve = ["type", "disabled"], He = {
213
213
  key: 0,
214
214
  class: "inline-flex items-center"
215
- }, Me = { key: 1 }, Ne = { key: 2 }, G = /* @__PURE__ */ l({
215
+ }, Ue = { key: 1 }, We = { key: 2 }, U = /* @__PURE__ */ d({
216
216
  __name: "BaseButton",
217
217
  props: {
218
218
  description: {
@@ -222,7 +222,7 @@ var Ee = [
222
222
  color: {
223
223
  type: String,
224
224
  required: !1,
225
- default: B.BLUE
225
+ default: R.BLUE
226
226
  },
227
227
  to: {
228
228
  type: String,
@@ -266,297 +266,297 @@ var Ee = [
266
266
  }
267
267
  },
268
268
  setup(e) {
269
- let { isDark: t } = W(), n = e;
270
- function s() {
269
+ let { isDark: t } = H(), n = e;
270
+ function r() {
271
271
  let e = {
272
- [B.BLUE]: {
272
+ [R.BLUE]: {
273
273
  light: "text-blue-700 border-blue-300 hover:bg-blue-50",
274
274
  dark: "text-blue-400 border-blue-500/40 hover:bg-blue-500/10"
275
275
  },
276
- [B.GREEN]: {
276
+ [R.GREEN]: {
277
277
  light: "text-green-700 border-green-300 hover:bg-green-50",
278
278
  dark: "text-green-400 border-green-500/40 hover:bg-green-500/10"
279
279
  },
280
- [B.EMERALD]: {
280
+ [R.EMERALD]: {
281
281
  light: "text-emerald-700 border-emerald-300 hover:bg-emerald-50",
282
282
  dark: "text-emerald-400 border-emerald-500/40 hover:bg-emerald-500/10"
283
283
  },
284
- [B.RED]: {
284
+ [R.RED]: {
285
285
  light: "text-red-700 border-red-300 hover:bg-red-50",
286
286
  dark: "text-red-400 border-red-500/40 hover:bg-red-500/10"
287
287
  },
288
- [B.YELLOW]: {
288
+ [R.YELLOW]: {
289
289
  light: "text-yellow-700 border-yellow-300 hover:bg-yellow-50",
290
290
  dark: "text-yellow-400 border-yellow-500/40 hover:bg-yellow-500/10"
291
291
  },
292
- [B.PURPLE]: {
292
+ [R.PURPLE]: {
293
293
  light: "text-purple-700 border-purple-300 hover:bg-purple-50",
294
294
  dark: "text-purple-400 border-purple-500/40 hover:bg-purple-500/10"
295
295
  },
296
- [B.SKY]: {
296
+ [R.SKY]: {
297
297
  light: "text-sky-700 border-sky-300 hover:bg-sky-50",
298
298
  dark: "text-sky-400 border-sky-500/40 hover:bg-sky-500/10"
299
299
  },
300
- [B.AMBER]: {
300
+ [R.AMBER]: {
301
301
  light: "text-amber-700 border-amber-300 hover:bg-amber-50",
302
302
  dark: "text-amber-400 border-amber-500/40 hover:bg-amber-500/10"
303
303
  },
304
- [B.GRAY]: {
304
+ [R.GRAY]: {
305
305
  light: "text-gray-700 border-gray-300 hover:bg-gray-50",
306
306
  dark: "text-gray-300 border-gray-600 hover:bg-gray-800"
307
307
  },
308
- [B.DARK]: {
308
+ [R.DARK]: {
309
309
  light: "text-gray-700 border-gray-300 hover:bg-gray-50",
310
310
  dark: "text-gray-300 border-gray-600 hover:bg-gray-800"
311
311
  },
312
- [B.WHITE]: {
312
+ [R.WHITE]: {
313
313
  light: "text-gray-700 border-gray-300 hover:bg-gray-50",
314
314
  dark: "text-gray-300 border-gray-600 hover:bg-gray-800"
315
315
  }
316
- }, r = e[n.color] ?? e[B.BLUE], i = t.value ? r.dark : r.light;
316
+ }, r = e[n.color] ?? e[R.BLUE], i = t.value ? r.dark : r.light;
317
317
  return n.isDisable || n.isLoading ? `border bg-transparent ${i} opacity-50 cursor-not-allowed` : `focus:outline-none border bg-transparent ${i}`;
318
318
  }
319
319
  function c() {
320
320
  let e = {
321
- [B.BLUE]: {
321
+ [R.BLUE]: {
322
322
  light: "text-blue-600 hover:bg-blue-50",
323
323
  dark: "text-blue-400 hover:bg-blue-500/10"
324
324
  },
325
- [B.GREEN]: {
325
+ [R.GREEN]: {
326
326
  light: "text-green-600 hover:bg-green-50",
327
327
  dark: "text-green-400 hover:bg-green-500/10"
328
328
  },
329
- [B.EMERALD]: {
329
+ [R.EMERALD]: {
330
330
  light: "text-emerald-600 hover:bg-emerald-50",
331
331
  dark: "text-emerald-400 hover:bg-emerald-500/10"
332
332
  },
333
- [B.SKY]: {
333
+ [R.SKY]: {
334
334
  light: "text-sky-600 hover:bg-sky-50",
335
335
  dark: "text-sky-400 hover:bg-sky-500/10"
336
336
  },
337
- [B.RED]: {
337
+ [R.RED]: {
338
338
  light: "text-red-500 hover:bg-red-50",
339
339
  dark: "text-red-400 hover:bg-red-500/10"
340
340
  },
341
- [B.AMBER]: {
341
+ [R.AMBER]: {
342
342
  light: "text-amber-700 hover:bg-amber-50",
343
343
  dark: "text-amber-300 hover:bg-amber-500/10"
344
344
  },
345
- [B.YELLOW]: {
345
+ [R.YELLOW]: {
346
346
  light: "text-yellow-600 hover:bg-yellow-50",
347
347
  dark: "text-yellow-400 hover:bg-yellow-500/10"
348
348
  },
349
- [B.PURPLE]: {
349
+ [R.PURPLE]: {
350
350
  light: "text-purple-600 hover:bg-purple-50",
351
351
  dark: "text-purple-400 hover:bg-purple-500/10"
352
352
  },
353
- [B.GRAY]: {
353
+ [R.GRAY]: {
354
354
  light: "text-gray-500 hover:bg-gray-100",
355
355
  dark: "text-gray-400 hover:bg-gray-800"
356
356
  },
357
- [B.DARK]: {
357
+ [R.DARK]: {
358
358
  light: "text-gray-500 hover:bg-gray-100",
359
359
  dark: "text-gray-400 hover:bg-gray-800"
360
360
  },
361
- [B.WHITE]: {
361
+ [R.WHITE]: {
362
362
  light: "text-gray-500 hover:bg-gray-100",
363
363
  dark: "text-gray-400 hover:bg-gray-800"
364
364
  }
365
- }, r = e[n.color] ?? e[B.GRAY], i = t.value ? r.dark : r.light;
365
+ }, r = e[n.color] ?? e[R.GRAY], i = t.value ? r.dark : r.light;
366
366
  return n.isDisable || n.isLoading ? `bg-transparent ${i} opacity-60 cursor-not-allowed` : `focus:outline-none bg-transparent ${i} cursor-pointer`;
367
367
  }
368
368
  function l() {
369
369
  let e = n.isDisable || n.isLoading, t;
370
370
  switch (n.color) {
371
- case B.BLUE:
371
+ case R.BLUE:
372
372
  t = e ? "text-white bg-blue-400 cursor-not-allowed" : "focus:outline-none text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300";
373
373
  break;
374
- case B.WHITE:
374
+ case R.WHITE:
375
375
  t = e ? "text-gray-900 bg-gray-200 border border-gray-200 cursor-not-allowed" : "focus:outline-none text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-200";
376
376
  break;
377
- case B.DARK:
377
+ case R.DARK:
378
378
  t = e ? "text-white bg-gray-400 cursor-not-allowed" : "focus:outline-none text-white bg-gray-800 hover:bg-gray-900 focus:ring-4 focus:ring-gray-300";
379
379
  break;
380
- case B.GREEN:
380
+ case R.GREEN:
381
381
  t = e ? "text-white bg-green-400 cursor-not-allowed" : "focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300";
382
382
  break;
383
- case B.EMERALD:
383
+ case R.EMERALD:
384
384
  t = e ? "text-white bg-emerald-400 cursor-not-allowed" : "focus:outline-none text-white bg-emerald-600 hover:bg-emerald-700 focus:ring-4 focus:ring-emerald-300";
385
385
  break;
386
- case B.RED:
386
+ case R.RED:
387
387
  t = e ? "text-white bg-red-400 cursor-not-allowed" : "focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300";
388
388
  break;
389
- case B.YELLOW:
389
+ case R.YELLOW:
390
390
  t = e ? "text-white bg-yellow-300 cursor-not-allowed" : "focus:outline-none text-white bg-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300";
391
391
  break;
392
- case B.PURPLE:
392
+ case R.PURPLE:
393
393
  t = e ? "text-white bg-purple-400 cursor-not-allowed" : "focus:outline-none text-white bg-purple-700 hover:bg-purple-800 focus:ring-4 focus:ring-purple-300";
394
394
  break;
395
- case B.SKY:
395
+ case R.SKY:
396
396
  t = e ? "text-white bg-sky-400 cursor-not-allowed" : "focus:outline-none text-white bg-sky-600 hover:bg-sky-700 focus:ring-4 focus:ring-sky-300";
397
397
  break;
398
- case B.AMBER:
398
+ case R.AMBER:
399
399
  t = e ? "text-white bg-amber-300 cursor-not-allowed" : "focus:outline-none text-white bg-amber-500 hover:bg-amber-600 focus:ring-4 focus:ring-amber-300";
400
400
  break;
401
- case B.GRAY:
401
+ case R.GRAY:
402
402
  t = e ? "text-white bg-gray-400 cursor-not-allowed" : "focus:outline-none text-white bg-gray-600 hover:bg-gray-700 focus:ring-4 focus:ring-gray-300";
403
403
  break;
404
404
  default:
405
405
  t = e ? "text-white bg-blue-400 cursor-not-allowed" : "focus:outline-none text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300";
406
406
  break;
407
407
  }
408
- n.outline && (t = s()), n.ghost && (t = c());
409
- let r = "px-5 py-2.5 mr-2 mb-2 text-sm";
408
+ n.outline && (t = r()), n.ghost && (t = c());
409
+ let i = "px-5 py-2.5 mr-2 mb-2 text-sm";
410
410
  switch (n.size) {
411
- case V.EXTRA_SMALL:
412
- r = "px-3 py-2 text-xs";
411
+ case z.EXTRA_SMALL:
412
+ i = "px-3 py-2 text-xs";
413
413
  break;
414
- case V.SMALL:
415
- r = "px-3 py-2 text-sm";
414
+ case z.SMALL:
415
+ i = "px-3 py-2 text-sm";
416
416
  break;
417
- case V.BASE:
418
- r = "px-5 py-2.5 text-sm";
417
+ case z.BASE:
418
+ i = "px-5 py-2.5 text-sm";
419
419
  break;
420
- case V.LARGE:
421
- r = "px-5 py-3 text-base";
420
+ case z.LARGE:
421
+ i = "px-5 py-3 text-base";
422
422
  break;
423
- case V.EXTRA_LARGE:
424
- r = "px-6 py-3.5 text-base";
423
+ case z.EXTRA_LARGE:
424
+ i = "px-6 py-3.5 text-base";
425
425
  break;
426
426
  }
427
- let i = "rounded-lg";
428
- return n.isRounded && (i = "rounded-full"), "inline-flex items-center " + r + " " + t + " font-medium " + i;
427
+ let a = "rounded-lg";
428
+ return n.isRounded && (a = "rounded-full"), "inline-flex items-center " + i + " " + t + " font-medium " + a;
429
429
  }
430
- return (t, s) => {
431
- let c = x("router-link");
432
- return e.to ? (_(), r(c, {
430
+ return (t, r) => {
431
+ let c = C("router-link");
432
+ return e.to ? (y(), i(c, {
433
433
  key: 0,
434
434
  to: e.to,
435
435
  custom: ""
436
436
  }, {
437
- default: k(({ navigate: r }) => [o("button", {
437
+ default: M(({ navigate: i }) => [s("button", {
438
438
  type: n.type,
439
- class: f(l()),
439
+ class: m(l()),
440
440
  disabled: e.isDisable || e.isLoading,
441
- onClick: r
441
+ onClick: i
442
442
  }, [
443
- e.isLoading ? (_(), a("div", De, [...s[0] ||= [o("svg", {
443
+ e.isLoading ? (y(), o("div", Re, [...r[0] ||= [s("svg", {
444
444
  "aria-hidden": "true",
445
445
  role: "status",
446
446
  class: "inline w-4 h-4 me-3 animate-spin",
447
447
  viewBox: "0 0 100 101",
448
448
  fill: "none",
449
449
  xmlns: "http://www.w3.org/2000/svg"
450
- }, [o("path", {
450
+ }, [s("path", {
451
451
  d: "M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z",
452
452
  fill: "#E5E7EB"
453
- }), o("path", {
453
+ }), s("path", {
454
454
  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",
455
455
  fill: "currentColor"
456
- })], -1)]])) : i("", !0),
457
- e.iconLeft ? i("", !0) : (_(), a("span", Oe, C(e.description), 1)),
458
- b(t.$slots, "default"),
459
- e.iconLeft ? (_(), a("span", ke, C(e.description), 1)) : i("", !0)
460
- ], 10, Ee)]),
456
+ })], -1)]])) : a("", !0),
457
+ e.iconLeft ? a("", !0) : (y(), o("span", ze, T(e.description), 1)),
458
+ S(t.$slots, "default"),
459
+ e.iconLeft ? (y(), o("span", Be, T(e.description), 1)) : a("", !0)
460
+ ], 10, Le)]),
461
461
  _: 3
462
- }, 8, ["to"])) : (_(), a("button", {
462
+ }, 8, ["to"])) : (y(), o("button", {
463
463
  key: 1,
464
464
  type: n.type,
465
- class: f(l()),
465
+ class: m(l()),
466
466
  disabled: e.isDisable || e.isLoading
467
467
  }, [
468
- e.isLoading ? (_(), a("div", je, [...s[1] ||= [o("svg", {
468
+ e.isLoading ? (y(), o("div", He, [...r[1] ||= [s("svg", {
469
469
  "aria-hidden": "true",
470
470
  role: "status",
471
471
  class: "inline w-4 h-4 me-3 animate-spin",
472
472
  viewBox: "0 0 100 101",
473
473
  fill: "none",
474
474
  xmlns: "http://www.w3.org/2000/svg"
475
- }, [o("path", {
475
+ }, [s("path", {
476
476
  d: "M100 50.5908C100 78.2051 77.6142 100.591 50 100.591C22.3858 100.591 0 78.2051 0 50.5908C0 22.9766 22.3858 0.59082 50 0.59082C77.6142 0.59082 100 22.9766 100 50.5908ZM9.08144 50.5908C9.08144 73.1895 27.4013 91.5094 50 91.5094C72.5987 91.5094 90.9186 73.1895 90.9186 50.5908C90.9186 27.9921 72.5987 9.67226 50 9.67226C27.4013 9.67226 9.08144 27.9921 9.08144 50.5908Z",
477
477
  fill: "#E5E7EB"
478
- }), o("path", {
478
+ }), s("path", {
479
479
  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",
480
480
  fill: "currentColor"
481
- })], -1)]])) : i("", !0),
482
- e.iconLeft ? i("", !0) : (_(), a("span", Me, C(e.description), 1)),
483
- b(t.$slots, "default"),
484
- e.iconLeft ? (_(), a("span", Ne, C(e.description), 1)) : i("", !0)
485
- ], 10, Ae));
481
+ })], -1)]])) : a("", !0),
482
+ e.iconLeft ? a("", !0) : (y(), o("span", Ue, T(e.description), 1)),
483
+ S(t.$slots, "default"),
484
+ e.iconLeft ? (y(), o("span", We, T(e.description), 1)) : a("", !0)
485
+ ], 10, Ve));
486
486
  };
487
487
  }
488
- }), K = /* @__PURE__ */ function(e) {
488
+ }), W = /* @__PURE__ */ function(e) {
489
489
  return e.BASE = "BASE", e.BASE_SHORTER = "BASE_SHORTER", e.SQUARE = "SQUARE", e;
490
- }({}), Pe = {
490
+ }({}), Ge = {
491
491
  key: 0,
492
492
  class: "h-px my-8 bg-gray-200 border-0 dark:bg-gray-700"
493
- }, Fe = {
493
+ }, Ke = {
494
494
  key: 1,
495
495
  class: "w-48 h-1 mx-auto my-4 bg-gray-100 border-0 rounded md:my-10 dark:bg-gray-700"
496
- }, Ie = {
496
+ }, qe = {
497
497
  key: 2,
498
498
  class: "w-8 h-8 mx-auto my-8 bg-gray-200 border-0 rounded md:my-12 dark:bg-gray-700"
499
- }, Le = /* @__PURE__ */ l({
499
+ }, Je = /* @__PURE__ */ d({
500
500
  __name: "BaseLine",
501
501
  props: { mode: {
502
502
  type: String,
503
503
  required: !1,
504
- default: K.BASE
504
+ default: W.BASE
505
505
  } },
506
506
  setup(t) {
507
- return (n, r) => (_(), a(e, null, [
508
- t.mode === w(K).BASE ? (_(), a("hr", Pe)) : i("", !0),
509
- t.mode === w(K).BASE_SHORTER ? (_(), a("hr", Fe)) : i("", !0),
510
- t.mode === w(K).SQUARE ? (_(), a("hr", Ie)) : i("", !0)
507
+ return (n, r) => (y(), o(e, null, [
508
+ t.mode === E(W).BASE ? (y(), o("hr", Ge)) : a("", !0),
509
+ t.mode === E(W).BASE_SHORTER ? (y(), o("hr", Ke)) : a("", !0),
510
+ t.mode === E(W).SQUARE ? (y(), o("hr", qe)) : a("", !0)
511
511
  ], 64));
512
512
  }
513
- }), q = /* @__PURE__ */ function(e) {
513
+ }), G = /* @__PURE__ */ function(e) {
514
514
  return e.SMALL = "SMALL", e.MEDIUM = "MEDIUM", e.LARGE = "LARGE", e;
515
- }({}), Re = q, ze = ["height", "width"], Be = /* @__PURE__ */ l({
515
+ }({}), Ye = G, Xe = ["height", "width"], Ze = /* @__PURE__ */ d({
516
516
  __name: "BaseLogo",
517
517
  props: { size: {
518
518
  type: String,
519
519
  required: !1,
520
- default: q.MEDIUM
520
+ default: G.MEDIUM
521
521
  } },
522
522
  setup(e) {
523
523
  let t = e;
524
524
  function n() {
525
525
  let e = "";
526
526
  switch (t.size) {
527
- case q.SMALL:
527
+ case G.SMALL:
528
528
  e = "50px";
529
529
  break;
530
- case q.MEDIUM:
530
+ case G.MEDIUM:
531
531
  e = "100px";
532
532
  break;
533
- case q.LARGE:
533
+ case G.LARGE:
534
534
  e = "150px";
535
535
  break;
536
536
  }
537
537
  return e;
538
538
  }
539
539
  return (e, t) => {
540
- let i = x("router-link");
541
- return _(), r(i, {
540
+ let r = C("router-link");
541
+ return y(), i(r, {
542
542
  to: "/",
543
543
  class: "flex items-center mb-6 text-2xl font-semibold text-gray-900 dark:text-white"
544
544
  }, {
545
- default: k(() => [(_(), a("svg", {
545
+ default: M(() => [(y(), o("svg", {
546
546
  height: n(),
547
547
  width: n(),
548
548
  viewBox: "33.6 130.6 499.7 242.9",
549
549
  xmlns: "http://www.w3.org/2000/svg",
550
550
  "xmlns:xlink": "http://www.w3.org/1999/xlink"
551
551
  }, [...t[0] ||= [
552
- o("linearGradient", { id: "a" }, [o("stop", {
552
+ s("linearGradient", { id: "a" }, [s("stop", {
553
553
  offset: ".085",
554
554
  "stop-color": "#469e43"
555
- }), o("stop", {
555
+ }), s("stop", {
556
556
  offset: "1",
557
557
  "stop-color": "#132d13"
558
558
  })], -1),
559
- o("linearGradient", {
559
+ s("linearGradient", {
560
560
  id: "b",
561
561
  gradientUnits: "userSpaceOnUse",
562
562
  x1: "64.863",
@@ -565,7 +565,7 @@ var Ee = [
565
565
  y1: "288.291",
566
566
  y2: "369.4"
567
567
  }, null, -1),
568
- o("linearGradient", {
568
+ s("linearGradient", {
569
569
  id: "c",
570
570
  gradientUnits: "userSpaceOnUse",
571
571
  x1: "138.367",
@@ -574,7 +574,7 @@ var Ee = [
574
574
  y1: "308.454",
575
575
  y2: "370.601"
576
576
  }, null, -1),
577
- o("linearGradient", {
577
+ s("linearGradient", {
578
578
  id: "d",
579
579
  gradientUnits: "userSpaceOnUse",
580
580
  x1: "195.475",
@@ -583,7 +583,7 @@ var Ee = [
583
583
  y1: "288.291",
584
584
  y2: "369.85"
585
585
  }, null, -1),
586
- o("linearGradient", {
586
+ s("linearGradient", {
587
587
  id: "e",
588
588
  gradientUnits: "userSpaceOnUse",
589
589
  x1: "249.634",
@@ -592,7 +592,7 @@ var Ee = [
592
592
  y1: "307.312",
593
593
  y2: "369.511"
594
594
  }, null, -1),
595
- o("linearGradient", {
595
+ s("linearGradient", {
596
596
  id: "f",
597
597
  gradientUnits: "userSpaceOnUse",
598
598
  x1: "302.884",
@@ -601,7 +601,7 @@ var Ee = [
601
601
  y1: "288.291",
602
602
  y2: "367.857"
603
603
  }, null, -1),
604
- o("linearGradient", {
604
+ s("linearGradient", {
605
605
  id: "g",
606
606
  gradientUnits: "userSpaceOnUse",
607
607
  x1: "354.118",
@@ -610,7 +610,7 @@ var Ee = [
610
610
  y1: "307.312",
611
611
  y2: "369.511"
612
612
  }, null, -1),
613
- o("linearGradient", {
613
+ s("linearGradient", {
614
614
  id: "h",
615
615
  gradientUnits: "userSpaceOnUse",
616
616
  x1: "428.02",
@@ -619,7 +619,7 @@ var Ee = [
619
619
  y1: "306.156",
620
620
  y2: "367.742"
621
621
  }, null, -1),
622
- o("linearGradient", {
622
+ s("linearGradient", {
623
623
  id: "i",
624
624
  gradientUnits: "userSpaceOnUse",
625
625
  x1: "502.066",
@@ -628,7 +628,7 @@ var Ee = [
628
628
  y1: "288.291",
629
629
  y2: "369.4"
630
630
  }, null, -1),
631
- o("linearGradient", {
631
+ s("linearGradient", {
632
632
  id: "j",
633
633
  gradientUnits: "userSpaceOnUse",
634
634
  x1: "283.264",
@@ -637,78 +637,78 @@ var Ee = [
637
637
  y1: "131.629",
638
638
  y2: "232.559"
639
639
  }, null, -1),
640
- o("linearGradient", {
640
+ s("linearGradient", {
641
641
  id: "k",
642
642
  gradientUnits: "userSpaceOnUse",
643
643
  x1: "283.46",
644
644
  x2: "283.46",
645
645
  y1: "202.275",
646
646
  y2: "183.785"
647
- }, [o("stop", {
647
+ }, [s("stop", {
648
648
  offset: "0",
649
649
  "stop-color": "#969799",
650
650
  "stop-opacity": "0"
651
- }), o("stop", {
651
+ }), s("stop", {
652
652
  offset: "1",
653
653
  "stop-color": "#808183"
654
654
  })], -1),
655
- o("path", {
655
+ s("path", {
656
656
  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",
657
657
  fill: "url(#b)"
658
658
  }, null, -1),
659
- o("path", {
659
+ s("path", {
660
660
  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",
661
661
  fill: "url(#c)"
662
662
  }, null, -1),
663
- o("path", {
663
+ s("path", {
664
664
  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",
665
665
  fill: "url(#d)"
666
666
  }, null, -1),
667
- o("path", {
667
+ s("path", {
668
668
  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",
669
669
  fill: "url(#e)"
670
670
  }, null, -1),
671
- o("path", {
671
+ s("path", {
672
672
  d: "m296.4 288.3h13v79.6h-13z",
673
673
  fill: "url(#f)"
674
674
  }, null, -1),
675
- o("path", {
675
+ s("path", {
676
676
  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",
677
677
  fill: "url(#g)"
678
678
  }, null, -1),
679
- o("path", {
679
+ s("path", {
680
680
  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",
681
681
  fill: "url(#h)"
682
682
  }, null, -1),
683
- o("path", {
683
+ s("path", {
684
684
  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",
685
685
  fill: "url(#i)"
686
686
  }, null, -1),
687
- o("path", {
687
+ s("path", {
688
688
  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",
689
689
  fill: "url(#j)"
690
690
  }, null, -1),
691
- o("path", {
691
+ s("path", {
692
692
  d: "m281.7 183.8h3.6v18.5h-3.6z",
693
693
  fill: "url(#k)"
694
694
  }, null, -1)
695
- ]], 8, ze))]),
695
+ ]], 8, Xe))]),
696
696
  _: 1
697
697
  });
698
698
  };
699
699
  }
700
- }), J = /* @__PURE__ */ function(e) {
700
+ }), Qe = /* @__PURE__ */ function(e) {
701
701
  return e.DELETE = "DELETE", e.SUCCESS = "SUCCESS", e;
702
- }({}), Ve = {
702
+ }({}), $e = {
703
703
  key: 0,
704
704
  class: "p-6 text-center"
705
- }, He = { class: "flex justify-center" }, Ue = {
705
+ }, et = { class: "flex justify-center" }, tt = {
706
706
  key: 1,
707
707
  class: "p-6 text-center"
708
- }, We = {
708
+ }, nt = {
709
709
  key: 0,
710
710
  class: "mb-5 text-sm text-gray-500"
711
- }, Ge = { class: "flex justify-center" }, Ke = /* @__PURE__ */ l({
711
+ }, rt = { class: "flex justify-center" }, it = /* @__PURE__ */ d({
712
712
  __name: "BaseModal",
713
713
  props: {
714
714
  title: {
@@ -727,58 +727,58 @@ var Ee = [
727
727
  mode: {
728
728
  type: String,
729
729
  required: !1,
730
- default: J.SUCCESS
730
+ default: Qe.SUCCESS
731
731
  }
732
732
  },
733
733
  emits: ["closeModal", "confirmModal"],
734
734
  setup(t, { emit: n }) {
735
- let r = n, s = `modal-title-${Math.random().toString(36).slice(2, 9)}`;
736
- function l(e) {
735
+ let r = n, i = `modal-title-${Math.random().toString(36).slice(2, 9)}`;
736
+ function c(e) {
737
737
  e.key === "Escape" && r("closeModal");
738
738
  }
739
- return m(() => {
740
- document.addEventListener("keydown", l);
741
- }), g(() => {
742
- document.removeEventListener("keydown", l);
743
- }), (n, r) => (_(), a(e, null, [o("div", {
739
+ return g(() => {
740
+ document.addEventListener("keydown", c);
741
+ }), v(() => {
742
+ document.removeEventListener("keydown", c);
743
+ }), (n, r) => (y(), o(e, null, [s("div", {
744
744
  class: "fixed inset-0 w-full h-screen bg-black/75 z-40",
745
745
  onClick: r[0] ||= (e) => n.$emit("closeModal")
746
- }), o("div", {
746
+ }), s("div", {
747
747
  class: "fixed top-[20vh] left-1/2 -translate-x-1/2 w-96 z-50 rounded-xl shadow-lg bg-white overflow-hidden",
748
748
  role: "dialog",
749
749
  "aria-modal": "true",
750
- "aria-labelledby": s
751
- }, [t.mode === w(J).DELETE ? (_(), a("div", Ve, [
752
- c(w(ae), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
753
- o("h3", {
754
- id: s,
750
+ "aria-labelledby": i
751
+ }, [t.mode === E(Qe).DELETE ? (y(), o("div", $e, [
752
+ u(E(fe), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
753
+ s("h3", {
754
+ id: i,
755
755
  class: "mb-5 text-lg font-normal text-gray-500 dark:text-gray-400"
756
- }, " Are you sure you want to delete this " + C(t.title) + "? ", 1),
757
- o("div", He, [c(G, {
758
- color: w(B).RED,
756
+ }, " Are you sure you want to delete this " + T(t.title) + "? ", 1),
757
+ s("div", et, [u(U, {
758
+ color: E(R).RED,
759
759
  onClick: r[1] ||= (e) => n.$emit("confirmModal"),
760
760
  description: "Yes, I'm sure"
761
- }, null, 8, ["color"]), c(G, {
762
- color: w(B).WHITE,
761
+ }, null, 8, ["color"]), u(U, {
762
+ color: E(R).WHITE,
763
763
  onClick: r[2] ||= (e) => n.$emit("closeModal"),
764
764
  description: "No, cancel"
765
765
  }, null, 8, ["color"])])
766
- ])) : (_(), a("div", Ue, [
767
- c(w(P), { class: "w-12 h-12 text-green-500 mx-auto mb-4" }),
768
- o("h3", {
769
- id: s,
766
+ ])) : (y(), o("div", tt, [
767
+ u(E(ae), { class: "w-12 h-12 text-green-500 mx-auto mb-4" }),
768
+ s("h3", {
769
+ id: i,
770
770
  class: "mb-2 text-lg font-medium text-gray-900"
771
- }, C(t.title), 1),
772
- t.description ? (_(), a("p", We, C(t.description), 1)) : i("", !0),
773
- b(n.$slots, "default"),
774
- o("div", Ge, [c(G, {
775
- color: w(B).BLUE,
771
+ }, T(t.title), 1),
772
+ t.description ? (y(), o("p", nt, T(t.description), 1)) : a("", !0),
773
+ S(n.$slots, "default"),
774
+ s("div", rt, [u(U, {
775
+ color: E(R).BLUE,
776
776
  onClick: r[3] ||= (e) => n.$emit("closeModal"),
777
777
  description: "OK"
778
778
  }, null, 8, ["color"])])
779
779
  ]))])], 64));
780
780
  }
781
- }), qe = /* @__PURE__ */ l({
781
+ }), at = /* @__PURE__ */ d({
782
782
  __name: "BaseRow",
783
783
  props: { bgColor: {
784
784
  type: String,
@@ -790,21 +790,21 @@ var Ee = [
790
790
  function n() {
791
791
  return "block p-8 border border-gray-200 rounded-xl shadow-sm dark:bg-gray-800 dark:border-gray-700 " + t.bgColor;
792
792
  }
793
- return (e, t) => (_(), a("div", { class: f(n()) }, [b(e.$slots, "default")], 2));
793
+ return (e, t) => (y(), o("div", { class: m(n()) }, [S(e.$slots, "default")], 2));
794
794
  }
795
- }), Je = /* @__PURE__ */ l({
795
+ }), ot = /* @__PURE__ */ d({
796
796
  __name: "BaseSpinner",
797
797
  props: {
798
798
  size: { default: "sm" },
799
799
  color: { default: "blue" }
800
800
  },
801
801
  setup(e) {
802
- let t = e, r = n(() => ({
802
+ let t = e, n = r(() => ({
803
803
  sm: "w-4 h-4 border-2",
804
804
  md: "w-6 h-6 border-2",
805
805
  lg: "w-8 h-8 border-4",
806
806
  xl: "w-12 h-12 border-4"
807
- })[t.size]), i = n(() => ({
807
+ })[t.size]), i = r(() => ({
808
808
  blue: "border-t-blue-500",
809
809
  emerald: "border-t-emerald-500",
810
810
  sky: "border-t-sky-500",
@@ -814,17 +814,17 @@ var Ee = [
814
814
  red: "border-t-red-500",
815
815
  amber: "border-t-amber-500"
816
816
  })[t.color]);
817
- return (e, t) => (_(), a("div", {
818
- class: f(["border-gray-200 rounded-full animate-spin", [r.value, i.value]]),
817
+ return (e, t) => (y(), o("div", {
818
+ class: m(["border-gray-200 rounded-full animate-spin", [n.value, i.value]]),
819
819
  role: "status",
820
820
  "aria-label": "Loading"
821
821
  }, null, 2));
822
822
  }
823
- }), Y = /* @__PURE__ */ function(e) {
823
+ }), K = /* @__PURE__ */ function(e) {
824
824
  return e.SUCCESS = "SUCCESS", e.WARNING = "WARNING", e.ERROR = "ERROR", e;
825
- }({}), X = /* @__PURE__ */ function(e) {
825
+ }({}), q = /* @__PURE__ */ function(e) {
826
826
  return e.TOP_LEFT = "TOP_LEFT", e.TOP_RIGHT = "TOP_RIGHT", e.BOTTOM_LEFT = "BOTTOM_LEFT", e.BOTTOM_RIGHT = "BOTTOM_RIGHT", e;
827
- }({}), Ye = { 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" }, Xe = { class: "ml-3 text-sm font-normal" }, Ze = /* @__PURE__ */ l({
827
+ }({}), st = { class: "flex items-center w-full max-w-md p-4 mb-4 text-gray-500 bg-white rounded-lg shadow dark:text-gray-400 dark:bg-gray-800" }, ct = { class: "ml-3 text-sm font-normal" }, lt = /* @__PURE__ */ d({
828
828
  __name: "BaseToast",
829
829
  props: {
830
830
  mode: {
@@ -843,7 +843,7 @@ var Ee = [
843
843
  positioning: {
844
844
  type: String,
845
845
  required: !1,
846
- default: X.TOP_RIGHT
846
+ default: q.TOP_RIGHT
847
847
  },
848
848
  duration: {
849
849
  type: Number,
@@ -852,25 +852,25 @@ var Ee = [
852
852
  }
853
853
  },
854
854
  setup(e) {
855
- let t = e, n = v(!0), r = null;
856
- function s() {
855
+ let t = e, n = b(!0), r = null;
856
+ function i() {
857
857
  n.value = !1, r &&= (clearTimeout(r), null);
858
858
  }
859
- m(() => {
859
+ g(() => {
860
860
  r = setTimeout(() => n.value = !1, t.duration);
861
- }), g(() => {
861
+ }), v(() => {
862
862
  r && clearTimeout(r);
863
863
  });
864
- function l() {
864
+ function c() {
865
865
  let e = "";
866
866
  switch (t.mode) {
867
- case Y.ERROR:
867
+ case K.ERROR:
868
868
  e = "text-red-500 bg-red-100 dark:bg-red-800 dark:text-red-200";
869
869
  break;
870
- case Y.SUCCESS:
870
+ case K.SUCCESS:
871
871
  e = "text-green-500 bg-green-100 dark:bg-green-800 dark:text-green-200";
872
872
  break;
873
- case Y.WARNING:
873
+ case K.WARNING:
874
874
  e = "text-orange-500 bg-orange-100 dark:bg-orange-700 dark:text-orange-200";
875
875
  break;
876
876
  default:
@@ -879,51 +879,51 @@ var Ee = [
879
879
  }
880
880
  return "inline-flex items-center justify-center flex-shrink-0 w-8 h-8 rounded-lg " + e;
881
881
  }
882
- function u() {
882
+ function l() {
883
883
  let e = "top-5 right-5";
884
884
  switch (t.positioning) {
885
- case X.BOTTOM_LEFT:
885
+ case q.BOTTOM_LEFT:
886
886
  e = "bottom-5 left-5";
887
887
  break;
888
- case X.TOP_LEFT:
888
+ case q.TOP_LEFT:
889
889
  e = "top-5 left-5";
890
890
  break;
891
- case X.TOP_RIGHT:
891
+ case q.TOP_RIGHT:
892
892
  e = "top-5 right-5";
893
893
  break;
894
- case X.BOTTOM_RIGHT:
894
+ case q.BOTTOM_RIGHT:
895
895
  e = "bottom-5 right-5";
896
896
  break;
897
897
  }
898
898
  return "fixed flex items-center w-full max-w-md p-4 space-x-4 divide-x rounded-lg " + e;
899
899
  }
900
- return (t, r) => n.value ? (_(), a("div", {
900
+ return (t, r) => n.value ? (y(), o("div", {
901
901
  key: 0,
902
902
  id: "toast-top-right",
903
- class: f(u()),
903
+ class: m(l()),
904
904
  role: "alert"
905
- }, [o("div", Ye, [
906
- e.mode == w(Y).ERROR ? (_(), a("div", {
905
+ }, [s("div", st, [
906
+ e.mode == E(K).ERROR ? (y(), o("div", {
907
907
  key: 0,
908
- class: f(l())
909
- }, [c(w(ae), { class: "h-6 w-6 text-red-500" }), r[0] ||= o("span", { class: "sr-only" }, "Error icon", -1)], 2)) : e.mode == w(Y).SUCCESS ? (_(), a("div", {
908
+ class: m(c())
909
+ }, [u(E(fe), { class: "h-6 w-6 text-red-500" }), r[0] ||= s("span", { class: "sr-only" }, "Error icon", -1)], 2)) : e.mode == E(K).SUCCESS ? (y(), o("div", {
910
910
  key: 1,
911
- class: f(l())
912
- }, [c(w(P), { class: "h-6 w-6 text-green-500" }), r[1] ||= o("span", { class: "sr-only" }, "Check icon", -1)], 2)) : e.mode == w(Y).WARNING ? (_(), a("div", {
911
+ class: m(c())
912
+ }, [u(E(ae), { class: "h-6 w-6 text-green-500" }), r[1] ||= s("span", { class: "sr-only" }, "Check icon", -1)], 2)) : e.mode == E(K).WARNING ? (y(), o("div", {
913
913
  key: 2,
914
- class: f(l())
915
- }, [c(w(I), { class: "h-6 w-6 text-yellow-500" }), r[2] ||= o("span", { class: "sr-only" }, "Warning icon", -1)], 2)) : i("", !0),
916
- o("div", Xe, C(e.description), 1),
917
- e.hasCloseIcon ? (_(), a("button", {
914
+ class: m(c())
915
+ }, [u(E(pe), { class: "h-6 w-6 text-yellow-500" }), r[2] ||= s("span", { class: "sr-only" }, "Warning icon", -1)], 2)) : a("", !0),
916
+ s("div", ct, T(e.description), 1),
917
+ e.hasCloseIcon ? (y(), o("button", {
918
918
  key: 3,
919
919
  type: "button",
920
920
  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",
921
921
  "aria-label": "Close",
922
- onClick: s
923
- }, [r[3] ||= o("span", { class: "sr-only" }, "Close", -1), c(w(ue), { class: "h-6 w-6 text-gray-500" })])) : i("", !0)
924
- ])], 2)) : i("", !0);
922
+ onClick: i
923
+ }, [r[3] ||= s("span", { class: "sr-only" }, "Close", -1), u(E(be), { class: "h-6 w-6 text-gray-500" })])) : a("", !0)
924
+ ])], 2)) : a("", !0);
925
925
  }
926
- }), Qe = { class: "w-13" }, $e = /* @__PURE__ */ l({
926
+ }), ut = { class: "w-13" }, dt = /* @__PURE__ */ d({
927
927
  __name: "ColoredSquares",
928
928
  props: { color: {
929
929
  type: String,
@@ -940,29 +940,29 @@ var Ee = [
940
940
  "bg-yellow-300",
941
941
  "bg-purple-300",
942
942
  "bg-pink-300"
943
- ], r = v(n[Math.floor(Math.random() * n.length)]);
943
+ ], r = b(n[Math.floor(Math.random() * n.length)]);
944
944
  function i() {
945
- let e = "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full", n = "gray";
945
+ let e = "gray";
946
946
  switch (t.color) {
947
- case R.GREEN:
948
- n = "green";
947
+ case L.GREEN:
948
+ e = "green";
949
949
  break;
950
- case R.RED:
951
- n = "red";
950
+ case L.RED:
951
+ e = "red";
952
952
  break;
953
- case R.BLUE:
954
- n = "blue";
953
+ case L.BLUE:
954
+ e = "blue";
955
955
  break;
956
- case R.YELLOW:
957
- n = "yellow";
956
+ case L.YELLOW:
957
+ e = "yellow";
958
958
  break;
959
- case R.NONE: return e;
959
+ case L.NONE: return "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full";
960
960
  }
961
- return e + " bg-" + n + "-100 text-" + n + "-800";
961
+ return "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full bg-" + e + "-100 text-" + e + "-800";
962
962
  }
963
- return (e, t) => (_(), a("div", Qe, [o("div", { class: f(["border border-gray-300 relative aspect-square rounded-lg bg-white shadow-sm overflow-hidden flex items-center justify-center text-center", i()]) }, [b(e.$slots, "default"), o("div", { class: f(["absolute bottom-0 left-0 h-1 w-full", r.value]) }, null, 2)], 2)]));
963
+ return (e, t) => (y(), o("div", ut, [s("div", { class: m(["border border-gray-300 relative aspect-square rounded-lg bg-white shadow-sm overflow-hidden flex items-center justify-center text-center", i()]) }, [S(e.$slots, "default"), s("div", { class: m(["absolute bottom-0 left-0 h-1 w-full", r.value]) }, null, 2)], 2)]));
964
964
  }
965
- }), et = { class: "flex items-start justify-between" }, tt = { class: "text-sm font-bold tracking-wide text-gray-800 dark:text-slate-200" }, nt = /* @__PURE__ */ l({
965
+ }), ft = { class: "flex items-start justify-between" }, pt = { class: "text-sm font-bold tracking-wide text-gray-800 dark:text-slate-200" }, mt = /* @__PURE__ */ d({
966
966
  __name: "EarningsCard",
967
967
  props: {
968
968
  title: { default: "TOTAL EARNINGS" },
@@ -974,7 +974,7 @@ var Ee = [
974
974
  accent: { default: "orange" }
975
975
  },
976
976
  setup(e) {
977
- let t = e, r = {
977
+ let t = e, n = {
978
978
  orange: {
979
979
  border: "border-orange-300 dark:border-orange-700",
980
980
  badge: "bg-orange-100 text-orange-500 dark:bg-orange-900/40 dark:text-orange-400",
@@ -991,34 +991,34 @@ var Ee = [
991
991
  iconBox: "bg-emerald-50 dark:bg-emerald-900/30",
992
992
  icon: "text-emerald-500"
993
993
  }
994
- }, s = n(() => r[t.accent]), c = n(() => {
994
+ }, i = r(() => n[t.accent]), c = r(() => {
995
995
  let e = Number.isFinite(t.amount) ? t.amount : 0;
996
996
  return t.currency + e.toLocaleString("en-US", {
997
997
  minimumFractionDigits: t.decimals,
998
998
  maximumFractionDigits: t.decimals
999
999
  });
1000
1000
  });
1001
- return (t, n) => (_(), a("div", { class: f(["relative rounded-xl border-2 border-dashed bg-white p-6 dark:bg-slate-800", s.value.border]) }, [e.badge ? (_(), a("div", {
1001
+ return (t, n) => (y(), o("div", { class: m(["relative rounded-xl border-2 border-dashed bg-white p-6 dark:bg-slate-800", i.value.border]) }, [e.badge ? (y(), o("div", {
1002
1002
  key: 0,
1003
- class: f(["absolute right-4 top-4 rounded-md px-3 py-1 text-xs font-bold tracking-wide", s.value.badge])
1004
- }, C(e.badge), 3)) : i("", !0), o("div", et, [o("div", null, [
1005
- o("p", tt, C(e.title), 1),
1006
- o("p", { class: f(["mt-1 text-4xl font-bold", s.value.amount]) }, C(c.value), 3),
1007
- o("p", { class: f(["mt-1 text-sm font-medium", s.value.subtitle]) }, C(e.subtitle), 3)
1008
- ]), o("div", { class: f(["mt-6 flex h-12 w-12 items-center justify-center rounded-xl", s.value.iconBox]) }, [(_(), a("svg", {
1009
- class: f(["h-6 w-6", s.value.icon]),
1003
+ class: m(["absolute right-4 top-4 rounded-md px-3 py-1 text-xs font-bold tracking-wide", i.value.badge])
1004
+ }, T(e.badge), 3)) : a("", !0), s("div", ft, [s("div", null, [
1005
+ s("p", pt, T(e.title), 1),
1006
+ s("p", { class: m(["mt-1 text-4xl font-bold", i.value.amount]) }, T(c.value), 3),
1007
+ s("p", { class: m(["mt-1 text-sm font-medium", i.value.subtitle]) }, T(e.subtitle), 3)
1008
+ ]), s("div", { class: m(["mt-6 flex h-12 w-12 items-center justify-center rounded-xl", i.value.iconBox]) }, [(y(), o("svg", {
1009
+ class: m(["h-6 w-6", i.value.icon]),
1010
1010
  viewBox: "0 0 24 24",
1011
1011
  fill: "none",
1012
1012
  stroke: "currentColor",
1013
1013
  "stroke-width": "2.5",
1014
1014
  "stroke-linecap": "round",
1015
1015
  "stroke-linejoin": "round"
1016
- }, [...n[0] ||= [o("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }, null, -1), o("polyline", { points: "16 7 22 7 22 13" }, null, -1)]], 2))], 2)])], 2));
1016
+ }, [...n[0] ||= [s("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }, null, -1), s("polyline", { points: "16 7 22 7 22 13" }, null, -1)]], 2))], 2)])], 2));
1017
1017
  }
1018
- }), rt = {
1018
+ }), ht = {
1019
1019
  key: 0,
1020
1020
  class: "font-bold text-green-800"
1021
- }, it = { key: 0 }, at = { key: 0 }, ot = "font-bold", st = /* @__PURE__ */ l({
1021
+ }, gt = { key: 0 }, _t = { key: 0 }, vt = "font-bold", yt = /* @__PURE__ */ d({
1022
1022
  __name: "EuroAmount",
1023
1023
  props: {
1024
1024
  amount: {
@@ -1037,16 +1037,16 @@ var Ee = [
1037
1037
  }
1038
1038
  },
1039
1039
  setup(t) {
1040
- let r = t, o = n(() => r.amount !== null && r.amount !== void 0), c = n(() => o.value && r.amount < 0), l = n(() => r.beforeAmount === null || r.beforeAmount === void 0 ? !1 : r.amount < r.beforeAmount), u = n(() => c.value || l.value), d = n(() => !c.value && !l.value && !(r.beforeAmount === null || r.beforeAmount === void 0));
1041
- return (n, r) => (_(), a(e, null, [o.value && d.value ? (_(), a("span", rt, [s(C(t.amount) + " ", 1), t.showCurrency ? (_(), a("span", it, "€")) : i("", !0)])) : i("", !0), o.value && !d.value ? (_(), a("span", {
1040
+ let n = t, i = r(() => n.amount !== null && n.amount !== void 0), s = r(() => i.value && n.amount < 0), c = r(() => n.beforeAmount === null || n.beforeAmount === void 0 ? !1 : n.amount < n.beforeAmount), u = r(() => s.value || c.value), d = r(() => !s.value && !c.value && !(n.beforeAmount === null || n.beforeAmount === void 0));
1041
+ return (n, r) => (y(), o(e, null, [i.value && d.value ? (y(), o("span", ht, [l(T(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", gt, "€")) : a("", !0)])) : a("", !0), i.value && !d.value ? (y(), o("span", {
1042
1042
  key: 1,
1043
- class: f([ot, u.value ? "text-red-800" : "text-gray-800"])
1044
- }, [s(C(t.amount) + " ", 1), t.showCurrency ? (_(), a("span", at, "€")) : i("", !0)], 2)) : i("", !0)], 64));
1043
+ class: m([vt, u.value ? "text-red-800" : "text-gray-800"])
1044
+ }, [l(T(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", _t, "€")) : a("", !0)], 2)) : a("", !0)], 64));
1045
1045
  }
1046
- }), ct = { class: "flex list-none p-0 m-0" }, lt = ["onClick", "onKeydown"], ut = {
1046
+ }), bt = { class: "flex list-none p-0 m-0" }, xt = ["onClick", "onKeydown"], St = {
1047
1047
  key: 1,
1048
1048
  class: "inline-block border border-gray-300 rounded-lg p-3 text-black cursor-not-allowed"
1049
- }, dt = /* @__PURE__ */ l({
1049
+ }, Ct = /* @__PURE__ */ d({
1050
1050
  __name: "Pagination",
1051
1051
  props: {
1052
1052
  totalItems: {
@@ -1060,44 +1060,44 @@ var Ee = [
1060
1060
  },
1061
1061
  emits: ["page-changed"],
1062
1062
  setup(t, { emit: n }) {
1063
- let r = t, i = v(1), s = v(0), c = v([]), l = n;
1063
+ let r = t, i = b(1), a = b(0), c = b([]), l = n;
1064
1064
  function u(e) {
1065
- if (s.value <= 5) {
1066
- c.value = Array.from({ length: s.value }, (e, t) => t + 1);
1065
+ if (a.value <= 5) {
1066
+ c.value = Array.from({ length: a.value }, (e, t) => t + 1);
1067
1067
  return;
1068
1068
  }
1069
- let t = [], n = Math.max(1, e - 2), r = Math.min(s.value, e + 2);
1069
+ let t = [], n = Math.max(1, e - 2), r = Math.min(a.value, e + 2);
1070
1070
  n > 1 && (t.push(1), n > 2 && t.push(0));
1071
1071
  for (let e = n; e <= r; e++) t.push(e);
1072
- r < s.value && (r < s.value - 1 && t.push(0), t.push(s.value)), c.value = t;
1072
+ r < a.value && (r < a.value - 1 && t.push(0), t.push(a.value)), c.value = t;
1073
1073
  }
1074
1074
  function d(e) {
1075
- e === i.value || e < 1 || e > s.value || (i.value = e, u(e), l("page-changed", e));
1075
+ e === i.value || e < 1 || e > a.value || (i.value = e, u(e), l("page-changed", e));
1076
1076
  }
1077
- return O(() => [r.totalItems, r.itemsPerPage], () => {
1078
- s.value = Math.ceil(r.totalItems / r.itemsPerPage), i.value > s.value && (i.value = Math.max(1, s.value)), u(i.value);
1079
- }, { immediate: !0 }), (t, n) => (_(), a("div", null, [o("ul", ct, [(_(!0), a(e, null, y(c.value, (e, t) => (_(), a("li", {
1077
+ return j(() => [r.totalItems, r.itemsPerPage], () => {
1078
+ a.value = Math.ceil(r.totalItems / r.itemsPerPage), i.value > a.value && (i.value = Math.max(1, a.value)), u(i.value);
1079
+ }, { immediate: !0 }), (t, n) => (y(), o("div", null, [s("ul", bt, [(y(!0), o(e, null, x(c.value, (e, t) => (y(), o("li", {
1080
1080
  key: t,
1081
1081
  class: "mr-1"
1082
- }, [e === 0 ? (_(), a("span", ut, "...")) : (_(), a("a", {
1082
+ }, [e === 0 ? (y(), o("span", St, "...")) : (y(), o("a", {
1083
1083
  key: 0,
1084
1084
  role: "button",
1085
1085
  tabindex: "0",
1086
1086
  onClick: (t) => d(e),
1087
- onKeydown: j((t) => d(e), ["enter"]),
1088
- class: f(["inline-block border border-gray-300 rounded-lg p-3 no-underline text-black cursor-pointer hover:bg-gray-300", { "active font-bold bg-gray-200": e === i.value }])
1089
- }, C(e), 43, lt))]))), 128))])]));
1087
+ onKeydown: P((t) => d(e), ["enter"]),
1088
+ class: m(["inline-block border border-gray-300 rounded-lg p-3 no-underline text-black cursor-pointer hover:bg-gray-300", { "active font-bold bg-gray-200": e === i.value }])
1089
+ }, T(e), 43, xt))]))), 128))])]));
1090
1090
  }
1091
- }), ft = { key: 0 }, pt = {
1091
+ }), wt = { key: 0 }, Tt = {
1092
1092
  key: 0,
1093
1093
  class: "flex items-center space-x-2"
1094
- }, mt = {
1094
+ }, Et = {
1095
1095
  key: 1,
1096
1096
  class: "flex items-center space-x-2"
1097
- }, ht = {
1097
+ }, Dt = {
1098
1098
  key: 2,
1099
1099
  class: "flex items-center space-x-2"
1100
- }, gt = /* @__PURE__ */ l({
1100
+ }, Ot = /* @__PURE__ */ d({
1101
1101
  __name: "TrendArrow",
1102
1102
  props: {
1103
1103
  number: {
@@ -1110,58 +1110,58 @@ var Ee = [
1110
1110
  }
1111
1111
  },
1112
1112
  setup(e) {
1113
- let t = e, r = n(() => t.number !== null && t.number !== void 0 && t.number < 0), o = n(() => t.number === 0);
1114
- return (n, l) => e.number !== null && e.number !== void 0 ? (_(), a("div", ft, [r.value ? (_(), a("span", pt, [c(z, { color: w(R).RED }, {
1115
- default: k(() => [s(C(e.number) + C(t.icon), 1)]),
1113
+ let t = e, n = r(() => t.number !== null && t.number !== void 0 && t.number < 0), i = r(() => t.number === 0);
1114
+ return (r, s) => e.number !== null && e.number !== void 0 ? (y(), o("div", wt, [n.value ? (y(), o("span", Tt, [u(ke, { color: E(L).RED }, {
1115
+ default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1116
1116
  _: 1
1117
- }, 8, ["color"]), c(w(ee), { class: "h-5 w-5 text-red-500" })])) : o.value ? (_(), a("span", mt, [c(z, { color: w(R).GRAY }, {
1118
- default: k(() => [s(C(e.number) + C(t.icon), 1)]),
1117
+ }, 8, ["color"]), u(E(te), { class: "h-5 w-5 text-red-500" })])) : i.value ? (y(), o("span", Et, [u(ke, { color: E(L).GRAY }, {
1118
+ default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1119
1119
  _: 1
1120
- }, 8, ["color"]), c(w(le), { class: "h-5 w-5 text-gray-400" })])) : (_(), a("span", ht, [c(z, { color: w(R).GREEN }, {
1121
- default: k(() => [s(C(e.number) + C(t.icon), 1)]),
1120
+ }, 8, ["color"]), u(E(_e), { class: "h-5 w-5 text-gray-400" })])) : (y(), o("span", Dt, [u(ke, { color: E(L).GREEN }, {
1121
+ default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1122
1122
  _: 1
1123
- }, 8, ["color"]), c(w(te), { class: "h-5 w-5 text-green-500" })]))])) : i("", !0);
1123
+ }, 8, ["color"]), u(E(ne), { class: "h-5 w-5 text-green-500" })]))])) : a("", !0);
1124
1124
  }
1125
1125
  });
1126
1126
  //#endregion
1127
1127
  //#region src/composables/useThemeClasses.ts
1128
- function Z() {
1129
- let { isDark: e } = W();
1128
+ function J() {
1129
+ let { isDark: e } = H();
1130
1130
  return {
1131
- card: n(() => e.value ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"),
1132
- cardAlt: n(() => e.value ? "bg-gray-900 border-gray-700" : "bg-white border-gray-200"),
1133
- pageBg: n(() => e.value ? "bg-gray-900" : "bg-gray-50"),
1134
- border: n(() => e.value ? "border-gray-700" : "border-gray-200"),
1135
- divider: n(() => e.value ? "border-gray-800" : "border-gray-100"),
1136
- primaryText: n(() => e.value ? "text-white" : "text-gray-900"),
1137
- primaryTextSoft: n(() => e.value ? "text-gray-100" : "text-gray-800"),
1138
- bodyText: n(() => e.value ? "text-gray-200" : "text-gray-700"),
1139
- label: n(() => e.value ? "text-gray-300" : "text-gray-700"),
1140
- mutedText: n(() => e.value ? "text-gray-400" : "text-gray-600"),
1141
- subtleText: n(() => e.value ? "text-gray-500" : "text-gray-600"),
1142
- dimText: n(() => e.value ? "text-gray-500" : "text-gray-400"),
1143
- dimTextAlt: n(() => e.value ? "text-gray-400" : "text-gray-500"),
1144
- illustration: n(() => e.value ? "text-gray-600" : "text-gray-300"),
1145
- input: n(() => e.value ? "bg-gray-700 border-gray-600 text-white" : "bg-gray-50 border-gray-300 text-gray-900"),
1146
- inputWithPlaceholder: n(() => e.value ? "bg-gray-700 border-gray-600 text-white placeholder-gray-400" : "bg-gray-50 border-gray-300 text-gray-900 placeholder-gray-500"),
1147
- ghostButton: n(() => e.value ? "bg-gray-800 text-gray-200 border-gray-600 hover:bg-gray-700" : "bg-white text-gray-700 border-gray-300 hover:bg-gray-50"),
1148
- emeraldText: n(() => e.value ? "text-emerald-400" : "text-emerald-600"),
1149
- amberText: n(() => e.value ? "text-amber-400" : "text-amber-600"),
1150
- amberTextStrong: n(() => e.value ? "text-amber-300" : "text-amber-700"),
1151
- redText: n(() => e.value ? "text-red-400" : "text-red-500")
1131
+ card: r(() => e.value ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"),
1132
+ cardAlt: r(() => e.value ? "bg-gray-900 border-gray-700" : "bg-white border-gray-200"),
1133
+ pageBg: r(() => e.value ? "bg-gray-900" : "bg-gray-50"),
1134
+ border: r(() => e.value ? "border-gray-700" : "border-gray-200"),
1135
+ divider: r(() => e.value ? "border-gray-800" : "border-gray-100"),
1136
+ primaryText: r(() => e.value ? "text-white" : "text-gray-900"),
1137
+ primaryTextSoft: r(() => e.value ? "text-gray-100" : "text-gray-800"),
1138
+ bodyText: r(() => e.value ? "text-gray-200" : "text-gray-700"),
1139
+ label: r(() => e.value ? "text-gray-300" : "text-gray-700"),
1140
+ mutedText: r(() => e.value ? "text-gray-400" : "text-gray-600"),
1141
+ subtleText: r(() => e.value ? "text-gray-500" : "text-gray-600"),
1142
+ dimText: r(() => e.value ? "text-gray-500" : "text-gray-400"),
1143
+ dimTextAlt: r(() => e.value ? "text-gray-400" : "text-gray-500"),
1144
+ illustration: r(() => e.value ? "text-gray-600" : "text-gray-300"),
1145
+ input: r(() => e.value ? "bg-gray-700 border-gray-600 text-white" : "bg-gray-50 border-gray-300 text-gray-900"),
1146
+ inputWithPlaceholder: r(() => e.value ? "bg-gray-700 border-gray-600 text-white placeholder-gray-400" : "bg-gray-50 border-gray-300 text-gray-900 placeholder-gray-500"),
1147
+ ghostButton: r(() => e.value ? "bg-gray-800 text-gray-200 border-gray-600 hover:bg-gray-700" : "bg-white text-gray-700 border-gray-300 hover:bg-gray-50"),
1148
+ emeraldText: r(() => e.value ? "text-emerald-400" : "text-emerald-600"),
1149
+ amberText: r(() => e.value ? "text-amber-400" : "text-amber-600"),
1150
+ amberTextStrong: r(() => e.value ? "text-amber-300" : "text-amber-700"),
1151
+ redText: r(() => e.value ? "text-red-400" : "text-red-500")
1152
1152
  };
1153
1153
  }
1154
1154
  //#endregion
1155
1155
  //#region src/composables/useEscapeKey.ts
1156
- function _t(e) {
1156
+ function Y(e) {
1157
1157
  function t(t) {
1158
1158
  t.key === "Escape" && e();
1159
1159
  }
1160
- m(() => document.addEventListener("keydown", t)), p(() => document.removeEventListener("keydown", t));
1160
+ g(() => document.addEventListener("keydown", t)), h(() => document.removeEventListener("keydown", t));
1161
1161
  }
1162
1162
  //#endregion
1163
1163
  //#region src/components/BaseModalShell.vue?vue&type=script&setup=true&lang.ts
1164
- var vt = { class: "flex items-start gap-4 min-w-0" }, yt = { class: "flex-1 min-w-0" }, bt = { class: "p-6 overflow-y-auto flex-1" }, xt = { class: "p-6" }, St = { class: "flex items-start gap-4" }, Ct = { class: "flex-1" }, wt = { class: "mt-4" }, Tt = { class: "mt-6 flex gap-3 justify-end" }, Q = /* @__PURE__ */ l({
1164
+ var kt = { class: "flex items-start gap-4 min-w-0" }, At = { class: "flex-1 min-w-0" }, jt = { class: "p-6 overflow-y-auto flex-1" }, Mt = { class: "p-6" }, Nt = { class: "flex items-start gap-4" }, Pt = { class: "flex-1" }, Ft = { class: "mt-4" }, It = { class: "mt-6 flex gap-3 justify-end" }, Lt = /* @__PURE__ */ d({
1165
1165
  __name: "BaseModalShell",
1166
1166
  props: {
1167
1167
  title: {},
@@ -1177,50 +1177,50 @@ var vt = { class: "flex items-start gap-4 min-w-0" }, yt = { class: "flex-1 min-
1177
1177
  subtitle: { default: "" }
1178
1178
  },
1179
1179
  emits: ["cancel", "backdrop"],
1180
- setup(e, { emit: s }) {
1181
- let c = e, l = s, { isDark: u } = W(), d = Z(), p = `modal-title-${Math.random().toString(36).slice(2, 9)}`, m = n(() => u.value ? "bg-gray-900 border border-gray-700" : "bg-white border border-gray-200");
1180
+ setup(e, { emit: n }) {
1181
+ let c = e, l = n, { isDark: u } = H(), d = J(), f = `modal-title-${Math.random().toString(36).slice(2, 9)}`, p = r(() => u.value ? "bg-gray-900 border border-gray-700" : "bg-white border border-gray-200");
1182
1182
  function h() {
1183
1183
  l("backdrop"), c.manualClose || l("cancel");
1184
1184
  }
1185
- return _t(() => {
1185
+ return Y(() => {
1186
1186
  c.manualClose || l("cancel");
1187
- }), (n, s) => (_(), r(t, { to: "body" }, [o("div", {
1187
+ }), (n, r) => (y(), i(t, { to: "body" }, [s("div", {
1188
1188
  class: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
1189
1189
  role: "dialog",
1190
1190
  "aria-modal": "true",
1191
- "aria-labelledby": p,
1191
+ "aria-labelledby": f,
1192
1192
  onClick: h
1193
- }, [e.scrollable ? (_(), a("div", {
1193
+ }, [e.scrollable ? (y(), o("div", {
1194
1194
  key: 0,
1195
- class: f(["relative w-full mx-4 rounded-lg shadow-xl max-h-[90vh] flex flex-col", [e.maxWidthClass, m.value]]),
1196
- onClick: s[0] ||= M(() => {}, ["stop"])
1195
+ class: m(["relative w-full mx-4 rounded-lg shadow-xl max-h-[90vh] flex flex-col", [e.maxWidthClass, p.value]]),
1196
+ onClick: r[0] ||= F(() => {}, ["stop"])
1197
1197
  }, [
1198
- o("div", { class: f(["flex items-start justify-between gap-4 p-6 border-b shrink-0", w(d).border]) }, [o("div", vt, [b(n.$slots, "icon"), o("div", yt, [o("h3", {
1199
- id: p,
1200
- class: f(["text-lg font-medium", w(d).primaryText])
1201
- }, C(e.title), 3), e.subtitle ? (_(), a("p", {
1198
+ s("div", { class: m(["flex items-start justify-between gap-4 p-6 border-b shrink-0", E(d).border]) }, [s("div", kt, [S(n.$slots, "icon"), s("div", At, [s("h3", {
1199
+ id: f,
1200
+ class: m(["text-lg font-medium", E(d).primaryText])
1201
+ }, T(e.title), 3), e.subtitle ? (y(), o("p", {
1202
1202
  key: 0,
1203
- class: f(["text-sm mt-1 break-all", w(d).mutedText])
1204
- }, C(e.subtitle), 3)) : i("", !0)])]), b(n.$slots, "header-actions")], 2),
1205
- o("div", bt, [b(n.$slots, "default")]),
1206
- n.$slots.footer ? (_(), a("div", {
1203
+ class: m(["text-sm mt-1 break-all", E(d).mutedText])
1204
+ }, T(e.subtitle), 3)) : a("", !0)])]), S(n.$slots, "header-actions")], 2),
1205
+ s("div", jt, [S(n.$slots, "default")]),
1206
+ n.$slots.footer ? (y(), o("div", {
1207
1207
  key: 0,
1208
- class: f(["flex gap-3 justify-end p-6 border-t shrink-0", w(d).border])
1209
- }, [b(n.$slots, "footer")], 2)) : i("", !0)
1210
- ], 2)) : (_(), a("div", {
1208
+ class: m(["flex gap-3 justify-end p-6 border-t shrink-0", E(d).border])
1209
+ }, [S(n.$slots, "footer")], 2)) : a("", !0)
1210
+ ], 2)) : (y(), o("div", {
1211
1211
  key: 1,
1212
- class: f(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, m.value]]),
1213
- onClick: s[1] ||= M(() => {}, ["stop"])
1214
- }, [o("div", xt, [
1215
- o("div", St, [b(n.$slots, "icon"), o("div", Ct, [o("h3", {
1216
- id: p,
1217
- class: f(["text-lg font-medium", w(d).primaryText])
1218
- }, C(e.title), 3)])]),
1219
- o("div", wt, [b(n.$slots, "default")]),
1220
- o("div", Tt, [b(n.$slots, "footer")])
1212
+ class: m(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, p.value]]),
1213
+ onClick: r[1] ||= F(() => {}, ["stop"])
1214
+ }, [s("div", Mt, [
1215
+ s("div", Nt, [S(n.$slots, "icon"), s("div", Pt, [s("h3", {
1216
+ id: f,
1217
+ class: m(["text-lg font-medium", E(d).primaryText])
1218
+ }, T(e.title), 3)])]),
1219
+ s("div", Ft, [S(n.$slots, "default")]),
1220
+ s("div", It, [S(n.$slots, "footer")])
1221
1221
  ])], 2))])]));
1222
1222
  }
1223
- }), Et = ["aria-expanded"], Dt = { class: "flex items-center gap-3" }, Ot = /* @__PURE__ */ l({
1223
+ }), Rt = ["aria-expanded"], zt = { class: "flex items-center gap-3" }, Bt = /* @__PURE__ */ d({
1224
1224
  __name: "BaseCollapsibleSection",
1225
1225
  props: {
1226
1226
  title: {},
@@ -1230,35 +1230,35 @@ var vt = { class: "flex items-start gap-4 min-w-0" }, yt = { class: "flex-1 min-
1230
1230
  },
1231
1231
  emits: ["toggle"],
1232
1232
  setup(e, { emit: t }) {
1233
- let r = e, s = t, { isDark: c } = W(), l = Z(), u = n(() => c.value ? "text-gray-100" : "text-gray-700"), d = n(() => c.value ? "bg-gray-800/50 hover:bg-gray-800 border-gray-700" : "bg-gray-50 hover:bg-gray-100 border-gray-200"), p = n(() => c.value ? "bg-emerald-500/15 text-emerald-400" : "bg-emerald-50 text-emerald-700"), m = n(() => r.bodyClass === void 0 ? c.value ? "bg-gray-800" : "bg-white" : r.bodyClass);
1234
- return (t, n) => (_(), a("section", { class: f(["rounded-xl border overflow-hidden transition-colors", w(l).cardAlt]) }, [o("button", {
1233
+ let n = e, i = t, { isDark: c } = H(), l = J(), u = r(() => c.value ? "text-gray-100" : "text-gray-700"), d = r(() => c.value ? "bg-gray-800/50 hover:bg-gray-800 border-gray-700" : "bg-gray-50 hover:bg-gray-100 border-gray-200"), f = r(() => c.value ? "bg-emerald-500/15 text-emerald-400" : "bg-emerald-50 text-emerald-700"), p = r(() => n.bodyClass === void 0 ? c.value ? "bg-gray-800" : "bg-white" : n.bodyClass);
1234
+ return (t, n) => (y(), o("section", { class: m(["rounded-xl border overflow-hidden transition-colors", E(l).cardAlt]) }, [s("button", {
1235
1235
  type: "button",
1236
- class: f(["w-full flex items-center justify-between p-4 text-left transition-colors", d.value]),
1236
+ class: m(["w-full flex items-center justify-between p-4 text-left transition-colors", d.value]),
1237
1237
  "aria-expanded": !e.collapsed,
1238
- onClick: n[0] ||= (e) => s("toggle")
1239
- }, [o("div", Dt, [o("h2", { class: f(["text-base font-semibold", u.value]) }, C(e.title), 3), e.badge ? (_(), a("span", {
1238
+ onClick: n[0] ||= (e) => i("toggle")
1239
+ }, [s("div", zt, [s("h2", { class: m(["text-base font-semibold", u.value]) }, T(e.title), 3), e.badge ? (y(), o("span", {
1240
1240
  key: 0,
1241
- class: f(["text-xs px-2 py-0.5 rounded-full", p.value])
1242
- }, C(e.badge), 3)) : i("", !0)]), (_(), a("svg", {
1243
- class: f(["w-5 h-5 transition-transform", [e.collapsed ? "" : "rotate-180", w(l).dimTextAlt]]),
1241
+ class: m(["text-xs px-2 py-0.5 rounded-full", f.value])
1242
+ }, T(e.badge), 3)) : a("", !0)]), (y(), o("svg", {
1243
+ class: m(["w-5 h-5 transition-transform", [e.collapsed ? "" : "rotate-180", E(l).dimTextAlt]]),
1244
1244
  fill: "none",
1245
1245
  viewBox: "0 0 24 24",
1246
1246
  stroke: "currentColor",
1247
1247
  "stroke-width": "2",
1248
1248
  "aria-hidden": "true"
1249
- }, [...n[1] ||= [o("path", {
1249
+ }, [...n[1] ||= [s("path", {
1250
1250
  "stroke-linecap": "round",
1251
1251
  "stroke-linejoin": "round",
1252
1252
  d: "M19 9l-7 7-7-7"
1253
- }, null, -1)]], 2))], 10, Et), A(o("div", { class: f(["p-6 border-t", [w(l).border, m.value]]) }, [b(t.$slots, "default")], 2), [[D, !e.collapsed]])], 2));
1253
+ }, null, -1)]], 2))], 10, Rt), N(s("div", { class: m(["p-6 border-t", [E(l).border, p.value]]) }, [S(t.$slots, "default")], 2), [[ee, !e.collapsed]])], 2));
1254
1254
  }
1255
- }), kt = ["disabled"], At = ["disabled"], jt = {
1255
+ }), Vt = ["disabled"], Ht = ["disabled"], Ut = {
1256
1256
  key: 0,
1257
1257
  class: "w-4 h-4 animate-spin",
1258
1258
  fill: "none",
1259
1259
  viewBox: "0 0 24 24",
1260
1260
  "aria-hidden": "true"
1261
- }, Mt = /* @__PURE__ */ l({
1261
+ }, Wt = /* @__PURE__ */ d({
1262
1262
  __name: "BaseConfirmModal",
1263
1263
  props: {
1264
1264
  title: {},
@@ -1274,49 +1274,49 @@ var vt = { class: "flex items-start gap-4 min-w-0" }, yt = { class: "flex-1 min-
1274
1274
  },
1275
1275
  emits: ["confirm", "cancel"],
1276
1276
  setup(e, { emit: t }) {
1277
- let n = e, l = t, { isDark: u } = W(), d = Z();
1278
- function p() {
1279
- n.submitting || l("confirm");
1277
+ let n = e, r = t, { isDark: c } = H(), d = J();
1278
+ function f() {
1279
+ n.submitting || r("confirm");
1280
1280
  }
1281
- function m() {
1282
- n.submitting || l("cancel");
1281
+ function p() {
1282
+ n.submitting || r("cancel");
1283
1283
  }
1284
- return (t, n) => (_(), r(Q, {
1284
+ return (t, n) => (y(), i(Lt, {
1285
1285
  title: e.title,
1286
1286
  "manual-close": e.submitting,
1287
- onCancel: m
1287
+ onCancel: p
1288
1288
  }, {
1289
- icon: k(() => [o("div", { class: f(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", [e.variant === "danger" ? w(u) ? "bg-red-900/30" : "bg-red-50" : w(u) ? "bg-amber-900/30" : "bg-amber-50"]]) }, [c(w(I), {
1290
- class: f(["h-6 w-6", e.variant === "danger" ? "text-red-600" : "text-amber-600"]),
1289
+ icon: M(() => [s("div", { class: m(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", [e.variant === "danger" ? E(c) ? "bg-red-900/30" : "bg-red-50" : E(c) ? "bg-amber-900/30" : "bg-amber-50"]]) }, [u(E(pe), {
1290
+ class: m(["h-6 w-6", e.variant === "danger" ? "text-red-600" : "text-amber-600"]),
1291
1291
  "aria-hidden": "true"
1292
1292
  }, null, 8, ["class"])], 2)]),
1293
- footer: k(() => [o("button", {
1293
+ footer: M(() => [s("button", {
1294
1294
  type: "button",
1295
1295
  disabled: e.submitting,
1296
- class: f(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150", [w(d).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1297
- onClick: m
1298
- }, C(e.cancelText), 11, kt), o("button", {
1296
+ class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150", [E(d).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1297
+ onClick: p
1298
+ }, T(e.cancelText), 11, Vt), s("button", {
1299
1299
  type: "button",
1300
1300
  disabled: e.submitting,
1301
- class: f(["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", [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"]]),
1302
- onClick: p
1303
- }, [e.submitting ? (_(), a("svg", jt, [...n[0] ||= [o("circle", {
1301
+ class: m(["inline-flex items-center justify-center gap-2 px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150", [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"]]),
1302
+ onClick: f
1303
+ }, [e.submitting ? (y(), o("svg", Ut, [...n[0] ||= [s("circle", {
1304
1304
  class: "opacity-25",
1305
1305
  cx: "12",
1306
1306
  cy: "12",
1307
1307
  r: "10",
1308
1308
  stroke: "currentColor",
1309
1309
  "stroke-width": "4"
1310
- }, null, -1), o("path", {
1310
+ }, null, -1), s("path", {
1311
1311
  class: "opacity-75",
1312
1312
  fill: "currentColor",
1313
1313
  d: "M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"
1314
- }, null, -1)]])) : i("", !0), s(" " + C(e.submitting ? e.submittingText : e.confirmText), 1)], 10, At)]),
1315
- default: k(() => [b(t.$slots, "message", {}, () => [o("p", { class: f(["text-sm", w(u) ? "text-gray-300" : "text-gray-600"]) }, C(e.message), 3)]), b(t.$slots, "default")]),
1314
+ }, null, -1)]])) : a("", !0), l(" " + T(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Ht)]),
1315
+ default: M(() => [S(t.$slots, "message", {}, () => [s("p", { class: m(["text-sm", E(c) ? "text-gray-300" : "text-gray-600"]) }, T(e.message), 3)]), S(t.$slots, "default")]),
1316
1316
  _: 3
1317
1317
  }, 8, ["title", "manual-close"]));
1318
1318
  }
1319
- }), Nt = { class: "mt-4" }, Pt = ["placeholder"], Ft = ["disabled"], It = /* @__PURE__ */ l({
1319
+ }), Gt = { class: "mt-4" }, Kt = ["placeholder"], qt = ["disabled"], Jt = /* @__PURE__ */ d({
1320
1320
  __name: "BaseTextInputModal",
1321
1321
  props: {
1322
1322
  title: {},
@@ -1334,51 +1334,51 @@ var vt = { class: "flex items-start gap-4 min-w-0" }, yt = { class: "flex-1 min-
1334
1334
  },
1335
1335
  emits: ["confirm", "cancel"],
1336
1336
  setup(e, { emit: t }) {
1337
- let n = e, i = t, { isDark: a } = W(), s = Z(), l = v(n.initialValue), u = v(null);
1338
- m(async () => {
1339
- await d(), u.value?.focus();
1337
+ let n = e, r = t, { isDark: a } = H(), o = J(), c = b(n.initialValue), l = b(null);
1338
+ g(async () => {
1339
+ await p(), l.value?.focus();
1340
1340
  });
1341
- function p() {
1342
- !l.value.trim() || n.submitting || i("confirm", l.value.trim());
1341
+ function d() {
1342
+ !c.value.trim() || n.submitting || r("confirm", c.value.trim());
1343
1343
  }
1344
- function h() {
1345
- i("cancel");
1344
+ function f() {
1345
+ r("cancel");
1346
1346
  }
1347
- function g() {
1348
- l.value.trim() === (n.initialValue ?? "").trim() && h();
1347
+ function h() {
1348
+ c.value.trim() === (n.initialValue ?? "").trim() && f();
1349
1349
  }
1350
- return _t(h), (t, n) => (_(), r(Q, {
1350
+ return Y(f), (t, n) => (y(), i(Lt, {
1351
1351
  title: e.title,
1352
1352
  "manual-close": "",
1353
- onBackdrop: g
1353
+ onBackdrop: h
1354
1354
  }, {
1355
- icon: k(() => [b(t.$slots, "icon", {}, () => [o("div", { class: f(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", w(a) ? "bg-emerald-900/30" : "bg-emerald-50"]) }, [c(w(ie), {
1355
+ icon: M(() => [S(t.$slots, "icon", {}, () => [s("div", { class: m(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", E(a) ? "bg-emerald-900/30" : "bg-emerald-50"]) }, [u(E(de), {
1356
1356
  class: "h-6 w-6 text-emerald-600",
1357
1357
  "aria-hidden": "true"
1358
1358
  })], 2)])]),
1359
- footer: k(() => [o("button", {
1359
+ footer: M(() => [s("button", {
1360
1360
  type: "button",
1361
- class: f(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150", w(s).ghostButton]),
1362
- onClick: h
1363
- }, C(e.cancelText), 3), o("button", {
1361
+ class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150", E(o).ghostButton]),
1362
+ onClick: f
1363
+ }, T(e.cancelText), 3), s("button", {
1364
1364
  type: "button",
1365
- disabled: !l.value.trim() || e.submitting,
1366
- class: f(["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", [!l.value.trim() || e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1367
- onClick: p
1368
- }, C(e.submitting ? e.submittingText : e.confirmText), 11, Ft)]),
1369
- default: k(() => [o("p", { class: f(["text-sm", w(a) ? "text-gray-300" : "text-gray-600"]) }, C(e.message), 3), o("div", Nt, [o("label", { class: f(["block text-sm font-medium mb-1", w(s).label]) }, C(e.inputLabel), 3), A(o("input", {
1365
+ disabled: !c.value.trim() || e.submitting,
1366
+ class: m(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150", [!c.value.trim() || e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1367
+ onClick: d
1368
+ }, T(e.submitting ? e.submittingText : e.confirmText), 11, qt)]),
1369
+ default: M(() => [s("p", { class: m(["text-sm", E(a) ? "text-gray-300" : "text-gray-600"]) }, T(e.message), 3), s("div", Gt, [s("label", { class: m(["block text-sm font-medium mb-1", E(o).label]) }, T(e.inputLabel), 3), N(s("input", {
1370
1370
  ref_key: "nameInput",
1371
- ref: u,
1372
- "onUpdate:modelValue": n[0] ||= (e) => l.value = e,
1371
+ ref: l,
1372
+ "onUpdate:modelValue": n[0] ||= (e) => c.value = e,
1373
1373
  type: "text",
1374
1374
  placeholder: e.placeholder,
1375
- class: f(["w-full px-3 py-2 rounded-md border text-sm transition-colors", w(a) ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:outline-none focus:border-emerald-500" : "bg-white border-gray-300 text-gray-900 placeholder-gray-400 focus:outline-none focus:border-emerald-500"]),
1376
- onKeyup: j(p, ["enter"])
1377
- }, null, 42, Pt), [[E, l.value]])])]),
1375
+ class: m(["w-full px-3 py-2 rounded-md border text-sm transition-colors", E(a) ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:outline-none focus:border-emerald-500" : "bg-white border-gray-300 text-gray-900 placeholder-gray-400 focus:outline-none focus:border-emerald-500"]),
1376
+ onKeyup: P(d, ["enter"])
1377
+ }, null, 42, Kt), [[A, c.value]])])]),
1378
1378
  _: 3
1379
1379
  }, 8, ["title"]));
1380
1380
  }
1381
- }), Lt = { class: "flex items-center justify-center min-h-[60vh]" }, Rt = { class: "text-center px-6" }, zt = /* @__PURE__ */ l({
1381
+ }), Yt = { class: "flex items-center justify-center min-h-[60vh]" }, Xt = { class: "text-center px-6" }, Zt = /* @__PURE__ */ d({
1382
1382
  __name: "BaseNotFoundPage",
1383
1383
  props: {
1384
1384
  code: { default: "404" },
@@ -1387,49 +1387,143 @@ var vt = { class: "flex items-start gap-4 min-w-0" }, yt = { class: "flex-1 min-
1387
1387
  homeLabel: { default: "Go home" }
1388
1388
  },
1389
1389
  setup(e) {
1390
- let t = e, n = pe(), { isDark: r } = W(), i = Z();
1391
- function s() {
1390
+ let t = e, n = Ce(), { isDark: r } = H(), i = J();
1391
+ function a() {
1392
1392
  n.push({ name: t.homeRouteName });
1393
1393
  }
1394
- return (t, n) => (_(), a("div", Lt, [o("div", Rt, [
1395
- c(w(I), { class: f(["w-16 h-16 mx-auto mb-4", w(i).illustration]) }, null, 8, ["class"]),
1396
- o("h1", { class: f(["text-4xl font-bold mb-2", w(r) ? "text-gray-200" : "text-gray-800"]) }, C(e.code), 3),
1397
- o("p", { class: f(["text-lg mb-6", w(i).dimTextAlt]) }, C(e.message), 3),
1398
- o("button", {
1399
- onClick: s,
1400
- class: f(["inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors cursor-pointer", w(r) ? "bg-emerald-600 hover:bg-emerald-500" : "bg-emerald-600 hover:bg-emerald-700"])
1401
- }, C(e.homeLabel), 3)
1394
+ return (t, n) => (y(), o("div", Yt, [s("div", Xt, [
1395
+ u(E(pe), { class: m(["w-16 h-16 mx-auto mb-4", E(i).illustration]) }, null, 8, ["class"]),
1396
+ s("h1", { class: m(["text-4xl font-bold mb-2", E(r) ? "text-gray-200" : "text-gray-800"]) }, T(e.code), 3),
1397
+ s("p", { class: m(["text-lg mb-6", E(i).dimTextAlt]) }, T(e.message), 3),
1398
+ s("button", {
1399
+ onClick: a,
1400
+ class: m(["inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors cursor-pointer", E(r) ? "bg-emerald-600 hover:bg-emerald-500" : "bg-emerald-600 hover:bg-emerald-700"])
1401
+ }, T(e.homeLabel), 3)
1402
1402
  ])]));
1403
1403
  }
1404
- }), $ = v(!1);
1405
- function Bt() {
1404
+ }), X = b(!1);
1405
+ function Qt() {
1406
1406
  function e() {
1407
- $.value = !0;
1407
+ X.value = !0;
1408
1408
  }
1409
1409
  function t() {
1410
- $.value = !1;
1410
+ X.value = !1;
1411
1411
  }
1412
1412
  function n() {
1413
- $.value = !$.value;
1413
+ X.value = !X.value;
1414
1414
  }
1415
1415
  return {
1416
- mobileOpen: $,
1416
+ mobileOpen: X,
1417
1417
  open: e,
1418
1418
  close: t,
1419
1419
  toggle: n
1420
1420
  };
1421
1421
  }
1422
1422
  //#endregion
1423
+ //#region src/composables/useSidebarCollapse.ts
1424
+ var Z = b(!1), $t = !1, en = "mgv-sidebar-collapsed";
1425
+ function tn(e) {
1426
+ if (!$t && ($t = !0, en = e, typeof window < "u")) {
1427
+ let e = window.localStorage?.getItem(en);
1428
+ e && (Z.value = e === "true"), f(!0).run(() => {
1429
+ j(Z, (e) => {
1430
+ window.localStorage?.setItem(en, String(e));
1431
+ });
1432
+ });
1433
+ }
1434
+ }
1435
+ function nn(e) {
1436
+ tn(e?.storageKey ?? en);
1437
+ function t() {
1438
+ Z.value = !0;
1439
+ }
1440
+ function n() {
1441
+ Z.value = !1;
1442
+ }
1443
+ function r() {
1444
+ Z.value = !Z.value;
1445
+ }
1446
+ return {
1447
+ collapsed: Z,
1448
+ collapse: t,
1449
+ expand: n,
1450
+ toggle: r
1451
+ };
1452
+ }
1453
+ //#endregion
1454
+ //#region src/composables/useNotifications.ts
1455
+ var Q = b([]), $ = b(!1), rn = r(() => Q.value.filter((e) => !e.read).length);
1456
+ function an() {
1457
+ function e() {
1458
+ $.value = !0;
1459
+ }
1460
+ function t() {
1461
+ $.value = !1;
1462
+ }
1463
+ function n() {
1464
+ $.value = !$.value;
1465
+ }
1466
+ function r(e) {
1467
+ Q.value = e;
1468
+ }
1469
+ function i(e) {
1470
+ Q.value = [e, ...Q.value];
1471
+ }
1472
+ function a(e) {
1473
+ Q.value = Q.value.filter((t) => t.id !== e);
1474
+ }
1475
+ function o(e) {
1476
+ Q.value = Q.value.map((t) => t.id === e ? {
1477
+ ...t,
1478
+ read: !0
1479
+ } : t);
1480
+ }
1481
+ function s() {
1482
+ Q.value = Q.value.map((e) => e.read ? e : {
1483
+ ...e,
1484
+ read: !0
1485
+ });
1486
+ }
1487
+ function c() {
1488
+ Q.value = [];
1489
+ }
1490
+ return {
1491
+ notifications: Q,
1492
+ unreadCount: rn,
1493
+ open: $,
1494
+ openPanel: e,
1495
+ closePanel: t,
1496
+ togglePanel: n,
1497
+ setNotifications: r,
1498
+ add: i,
1499
+ remove: a,
1500
+ markRead: o,
1501
+ markAllRead: s,
1502
+ clear: c
1503
+ };
1504
+ }
1505
+ //#endregion
1423
1506
  //#region src/components/BaseSidebar.vue?vue&type=script&setup=true&lang.ts
1424
- var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }, Ut = { class: "px-5 pt-5 pb-4 flex items-center justify-center relative" }, Wt = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, Gt = { class: "px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500" }, Kt = { class: "space-y-0.5" }, qt = ["aria-current", "onClick"], Jt = [
1507
+ var on = ["aria-label", "aria-expanded"], sn = { class: "flex flex-col h-full" }, cn = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, ln = { class: "space-y-0.5" }, un = [
1508
+ "aria-current",
1509
+ "title",
1510
+ "onClick"
1511
+ ], dn = ["aria-label"], fn = { class: "relative shrink-0" }, pn = {
1512
+ key: 0,
1513
+ 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"
1514
+ }, mn = [
1515
+ "title",
1516
+ "aria-label",
1517
+ "aria-pressed"
1518
+ ], hn = [
1425
1519
  "title",
1426
1520
  "aria-label",
1427
1521
  "aria-pressed"
1428
- ], Yt = /* @__PURE__ */ ((e, t) => {
1522
+ ], gn = /*#__PURE__*/ ((e, t) => {
1429
1523
  let n = e.__vccOpts || e;
1430
1524
  for (let [e, r] of t) n[e] = r;
1431
1525
  return n;
1432
- })(/* @__PURE__ */ l({
1526
+ })(/* @__PURE__ */ d({
1433
1527
  __name: "BaseSidebar",
1434
1528
  props: {
1435
1529
  sections: {},
@@ -1439,119 +1533,162 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1439
1533
  showThemeToggle: {
1440
1534
  type: Boolean,
1441
1535
  default: !0
1536
+ },
1537
+ collapsible: {
1538
+ type: Boolean,
1539
+ default: !0
1540
+ },
1541
+ showNotifications: {
1542
+ type: Boolean,
1543
+ default: !1
1442
1544
  }
1443
1545
  },
1444
1546
  setup(t) {
1445
- let n = t, l = pe(), u = fe(), { isDark: p, toggleTheme: m } = W(), { mobileOpen: h, close: g, toggle: x } = Bt(), T = v(null), E = null;
1446
- O(h, async (e) => {
1447
- e ? (E = document.activeElement instanceof HTMLElement ? document.activeElement : null, await d(), T.value?.focus()) : (E?.focus(), E = null);
1547
+ let n = t, c = Ce(), d = Se(), { isDark: f, toggleTheme: h } = H(), { mobileOpen: g, close: _, toggle: v } = Qt(), { collapsed: C, toggle: D } = nn(), { unreadCount: O, togglePanel: k } = an(), A = r(() => n.collapsible && C.value), ee = b(null), M = null;
1548
+ j(g, async (e) => {
1549
+ e ? (M = document.activeElement instanceof HTMLElement ? document.activeElement : null, await p(), ee.value?.focus()) : (M?.focus(), M = null);
1448
1550
  });
1449
- function D() {
1450
- l.push({ name: n.homeRouteName }), g();
1551
+ function N() {
1552
+ c.push({ name: n.homeRouteName }), _();
1451
1553
  }
1452
- function k(e) {
1453
- return u.name === e;
1554
+ function P(e) {
1555
+ return d.name === e;
1454
1556
  }
1455
- function A(e) {
1456
- l.push({ name: e }), g();
1557
+ function F(e) {
1558
+ c.push({ name: e }), _();
1457
1559
  }
1458
- return (n, l) => (_(), a("div", null, [
1459
- o("div", { class: f(["mobile-topbar fixed top-0 inset-x-0 z-30 flex items-center justify-between px-4 py-3 border-b transition-colors", w(p) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"]) }, [o("button", {
1560
+ return (n, r) => (y(), o("div", null, [
1561
+ s("div", { class: m(["mobile-topbar fixed top-0 inset-x-0 z-30 flex items-center justify-between px-4 py-3 border-b transition-colors", E(f) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"]) }, [s("button", {
1460
1562
  type: "button",
1461
- onClick: D,
1563
+ onClick: N,
1462
1564
  class: "cursor-pointer",
1463
1565
  "aria-label": "Go to home"
1464
- }, [b(n.$slots, "logo", { size: 28 }, void 0, !0)]), o("button", {
1566
+ }, [S(n.$slots, "logo", { size: 28 }, void 0, !0)]), s("button", {
1465
1567
  type: "button",
1466
- onClick: l[0] ||= (...e) => w(x) && w(x)(...e),
1467
- class: f(["p-2 rounded-lg cursor-pointer", w(p) ? "text-gray-400 hover:bg-gray-800" : "text-gray-600 hover:bg-gray-100"]),
1468
- "aria-label": w(h) ? "Close navigation menu" : "Open navigation menu",
1469
- "aria-expanded": w(h)
1470
- }, [w(h) ? (_(), r(w(ue), {
1568
+ onClick: r[0] ||= (...e) => E(v) && E(v)(...e),
1569
+ class: m(["p-2 rounded-lg cursor-pointer", E(f) ? "text-gray-400 hover:bg-gray-800" : "text-gray-600 hover:bg-gray-100"]),
1570
+ "aria-label": E(g) ? "Close navigation menu" : "Open navigation menu",
1571
+ "aria-expanded": E(g)
1572
+ }, [E(g) ? (y(), i(E(be), {
1471
1573
  key: 1,
1472
1574
  class: "w-6 h-6",
1473
1575
  "aria-hidden": "true"
1474
- })) : (_(), r(w(N), {
1576
+ })) : (y(), i(E(re), {
1475
1577
  key: 0,
1476
1578
  class: "w-6 h-6",
1477
1579
  "aria-hidden": "true"
1478
- }))], 10, Vt)], 2),
1479
- w(h) ? (_(), a("div", {
1580
+ }))], 10, on)], 2),
1581
+ E(g) ? (y(), o("div", {
1480
1582
  key: 0,
1481
1583
  class: "mobile-overlay fixed inset-0 z-40 bg-black/50",
1482
1584
  "aria-hidden": "true",
1483
- onClick: l[1] ||= (...e) => w(g) && w(g)(...e)
1484
- })) : i("", !0),
1485
- o("aside", {
1585
+ onClick: r[1] ||= (...e) => E(_) && E(_)(...e)
1586
+ })) : a("", !0),
1587
+ s("aside", {
1486
1588
  role: "navigation",
1487
1589
  "aria-label": "Main navigation",
1488
- class: f(["fixed top-0 left-0 h-screen w-60 flex flex-col border-r transition-transform duration-300 lg:pointer-events-auto", [w(p) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200", w(h) ? "translate-x-0 z-50" : "-translate-x-full max-lg:pointer-events-none lg:translate-x-0 z-50"]])
1489
- }, [o("div", Ht, [
1490
- o("div", Ut, [o("button", {
1590
+ class: m(["fixed top-0 left-0 h-screen w-60 flex flex-col border-r transition-all duration-300 lg:pointer-events-auto", [
1591
+ E(f) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200",
1592
+ E(g) ? "translate-x-0 z-50" : "-translate-x-full max-lg:pointer-events-none lg:translate-x-0 z-50",
1593
+ t.collapsible && E(C) ? "lg:w-16" : "lg:w-60"
1594
+ ]])
1595
+ }, [s("div", sn, [
1596
+ s("div", { class: m(["px-5 pt-5 pb-4 flex items-center justify-center relative", { "lg:px-2": A.value }]) }, [s("button", {
1491
1597
  type: "button",
1492
- onClick: D,
1598
+ onClick: N,
1493
1599
  class: "cursor-pointer",
1494
1600
  "aria-label": "Go to home"
1495
- }, [b(n.$slots, "logo", { size: 52 }, void 0, !0)]), o("button", {
1601
+ }, [S(n.$slots, "logo", { size: A.value ? 36 : 52 }, void 0, !0)]), s("button", {
1496
1602
  ref_key: "closeMobileButton",
1497
- ref: T,
1603
+ ref: ee,
1498
1604
  type: "button",
1499
- onClick: l[2] ||= (...e) => w(g) && w(g)(...e),
1500
- class: f(["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", w(p) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"]),
1605
+ onClick: r[2] ||= (...e) => E(_) && E(_)(...e),
1606
+ class: m(["lg:hidden p-1.5 rounded-lg cursor-pointer absolute right-3 top-4 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", E(f) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"]),
1501
1607
  "aria-label": "Close navigation menu"
1502
- }, [c(w(ue), {
1608
+ }, [u(E(be), {
1503
1609
  class: "w-5 h-5",
1504
1610
  "aria-hidden": "true"
1505
- })], 2)]),
1506
- o("nav", Wt, [(_(!0), a(e, null, y(t.sections, (t) => (_(), a("div", { key: t.title }, [o("p", Gt, C(t.title), 1), o("ul", Kt, [(_(!0), a(e, null, y(t.items, (e) => (_(), a("li", { key: e.name }, [o("button", {
1611
+ })], 2)], 2),
1612
+ s("nav", cn, [(y(!0), o(e, null, x(t.sections, (t) => (y(), o("div", { key: t.title }, [s("p", { class: m(["px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500", { "lg:hidden": A.value }]) }, T(t.title), 3), s("ul", ln, [(y(!0), o(e, null, x(t.items, (e) => (y(), o("li", { key: e.name }, [s("button", {
1507
1613
  type: "button",
1508
- "aria-current": k(e.name) ? "page" : void 0,
1509
- onClick: (t) => A(e.name),
1510
- class: f(["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", k(e.name) ? w(p) ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-50 text-emerald-700" : w(p) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100"])
1511
- }, [(_(), r(S(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), s(" " + C(e.label), 1)], 10, qt)]))), 128))])]))), 128))]),
1512
- o("div", { class: f(["px-4 py-4 border-t transition-colors space-y-3", w(p) ? "border-gray-800" : "border-gray-200"]) }, [
1513
- t.showThemeToggle ? (_(), a("button", {
1614
+ "aria-current": P(e.name) ? "page" : void 0,
1615
+ title: A.value ? e.label : void 0,
1616
+ onClick: (t) => F(e.name),
1617
+ class: m(["flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-colors w-full text-left cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [P(e.name) ? E(f) ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-50 text-emerald-700" : E(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": A.value }]])
1618
+ }, [(y(), i(w(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), s("span", { class: m({ "lg:hidden": A.value }) }, T(e.label), 3)], 10, un)]))), 128))])]))), 128))]),
1619
+ s("div", { class: m(["px-4 py-4 border-t transition-colors space-y-3", E(f) ? "border-gray-800" : "border-gray-200"]) }, [
1620
+ t.showNotifications ? (y(), o("button", {
1514
1621
  key: 0,
1515
1622
  type: "button",
1516
- onClick: l[3] ||= (...e) => w(m) && w(m)(...e),
1517
- title: w(p) ? "Switch to light mode" : "Switch to dark mode",
1518
- "aria-label": w(p) ? "Switch to light mode" : "Switch to dark mode",
1519
- "aria-pressed": w(p),
1520
- class: f(["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", w(p) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100"])
1521
- }, [s(C(w(p) ? "Switch to light" : "Switch to dark") + " ", 1), o("span", { class: f(["ml-auto relative w-9 h-5 rounded-full transition-colors", w(p) ? "bg-emerald-600" : "bg-gray-300"]) }, [o("span", { class: f(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", w(p) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)], 10, Jt)) : i("", !0),
1522
- b(n.$slots, "status", {}, void 0, !0),
1523
- b(n.$slots, "footer", {}, () => [t.appName || t.version ? (_(), a("div", {
1623
+ onClick: r[3] ||= (...e) => E(k) && E(k)(...e),
1624
+ title: "Notifications",
1625
+ "aria-label": E(O) > 0 ? `Notifications, ${E(O)} unread` : "Notifications",
1626
+ class: m(["relative flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [E(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": A.value }]])
1627
+ }, [s("span", fn, [u(E(ie), {
1628
+ class: "w-[18px] h-[18px]",
1629
+ "aria-hidden": "true"
1630
+ }), E(O) > 0 ? (y(), o("span", pn, T(E(O) > 99 ? "99+" : E(O)), 1)) : a("", !0)]), s("span", { class: m({ "lg:hidden": A.value }) }, "Notifications", 2)], 10, dn)) : a("", !0),
1631
+ t.showThemeToggle ? (y(), o("button", {
1632
+ key: 1,
1633
+ type: "button",
1634
+ onClick: r[4] ||= (...e) => E(h) && E(h)(...e),
1635
+ title: E(f) ? "Switch to light mode" : "Switch to dark mode",
1636
+ "aria-label": E(f) ? "Switch to light mode" : "Switch to dark mode",
1637
+ "aria-pressed": E(f),
1638
+ class: m(["flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [E(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": A.value }]])
1639
+ }, [
1640
+ (y(), i(w(E(f) ? E(ye) : E(ve)), {
1641
+ class: m(["hidden w-[18px] h-[18px] shrink-0", { "lg:block": A.value }]),
1642
+ "aria-hidden": "true"
1643
+ }, null, 8, ["class"])),
1644
+ s("span", { class: m({ "lg:hidden": A.value }) }, T(E(f) ? "Switch to light" : "Switch to dark"), 3),
1645
+ s("span", { class: m(["ml-auto relative w-9 h-5 rounded-full transition-colors", [E(f) ? "bg-emerald-600" : "bg-gray-300", { "lg:hidden": A.value }]]) }, [s("span", { class: m(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", E(f) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)
1646
+ ], 10, mn)) : a("", !0),
1647
+ t.collapsible ? (y(), o("button", {
1648
+ key: 2,
1649
+ type: "button",
1650
+ onClick: r[5] ||= (...e) => E(D) && E(D)(...e),
1651
+ title: E(C) ? "Expand sidebar" : "Collapse sidebar",
1652
+ "aria-label": E(C) ? "Expand sidebar" : "Collapse sidebar",
1653
+ "aria-pressed": E(C),
1654
+ class: m(["hidden lg:flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [E(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": A.value }]])
1655
+ }, [(y(), i(w(E(C) ? E(se) : E(oe)), {
1656
+ class: "w-[18px] h-[18px] shrink-0",
1657
+ "aria-hidden": "true"
1658
+ })), s("span", { class: m({ "lg:hidden": A.value }) }, "Collapse", 2)], 10, hn)) : a("", !0),
1659
+ s("div", { class: m({ "lg:hidden": A.value }) }, [S(n.$slots, "status", {}, void 0, !0)], 2),
1660
+ s("div", { class: m({ "lg:hidden": A.value }) }, [S(n.$slots, "footer", {}, () => [t.appName || t.version ? (y(), o("div", {
1524
1661
  key: 0,
1525
- class: f(["flex items-center justify-center gap-2 text-xs", (w(p), "text-gray-500")])
1526
- }, [o("span", null, [
1527
- s(C(t.appName), 1),
1528
- t.appName && t.version ? (_(), a(e, { key: 0 }, [], 64)) : i("", !0),
1529
- t.version ? (_(), a(e, { key: 1 }, [s("v" + C(t.version), 1)], 64)) : i("", !0)
1530
- ])], 2)) : i("", !0)], !0)
1662
+ class: m(["flex items-center justify-center gap-2 text-xs", (E(f), "text-gray-500")])
1663
+ }, [s("span", null, [
1664
+ l(T(t.appName), 1),
1665
+ t.appName && t.version ? (y(), o(e, { key: 0 }, [], 64)) : a("", !0),
1666
+ t.version ? (y(), o(e, { key: 1 }, [l("v" + T(t.version), 1)], 64)) : a("", !0)
1667
+ ])], 2)) : a("", !0)], !0)], 2)
1531
1668
  ], 2)
1532
1669
  ])], 2)
1533
1670
  ]));
1534
1671
  }
1535
- }), [["__scopeId", "data-v-1a9948c5"]]), Xt = {
1672
+ }), [["__scopeId", "data-v-6fca021f"]]), _n = {
1536
1673
  key: 1,
1537
1674
  class: "mt-4 flex justify-center py-6"
1538
- }, Zt = {
1675
+ }, vn = {
1539
1676
  key: 2,
1540
1677
  class: "mt-4 text-sm text-red-500",
1541
1678
  role: "alert"
1542
- }, Qt = {
1679
+ }, yn = {
1543
1680
  key: 3,
1544
1681
  class: "mt-4"
1545
- }, $t = { class: "relative" }, en = ["placeholder"], tn = {
1682
+ }, bn = { class: "relative" }, xn = ["placeholder"], Sn = {
1546
1683
  key: 4,
1547
1684
  class: "mt-3 max-h-64 overflow-y-auto"
1548
- }, nn = ["onClick"], rn = { class: "flex-1 min-w-0" }, an = {
1685
+ }, Cn = ["onClick"], wn = { class: "flex-1 min-w-0" }, Tn = {
1549
1686
  key: 0,
1550
1687
  class: "text-center py-6"
1551
- }, on = {
1688
+ }, En = {
1552
1689
  key: 1,
1553
1690
  class: "text-center py-6"
1554
- }, sn = ["disabled"], cn = ["disabled"], ln = /* @__PURE__ */ l({
1691
+ }, Dn = ["disabled"], On = ["disabled"], kn = /* @__PURE__ */ d({
1555
1692
  __name: "BaseEntityPickerModal",
1556
1693
  props: {
1557
1694
  title: {},
@@ -1572,11 +1709,11 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1572
1709
  }
1573
1710
  },
1574
1711
  emits: ["confirm", "cancel"],
1575
- setup(t, { emit: s }) {
1576
- let l = t, u = s, { isDark: p } = W(), h = Z(), g = v([]), x = v(!1), S = v(""), T = v(null), D = v(""), O = v(null), j = n(() => {
1577
- let e = l.loader ? g.value : l.items;
1578
- return l.excludeId ? e.filter((e) => e.id !== l.excludeId) : e;
1579
- }), M = n(() => j.value.filter((e) => e.label.toLowerCase().includes(D.value.toLowerCase()))), ee = {
1712
+ setup(t, { emit: n }) {
1713
+ let c = t, l = n, { isDark: d } = H(), f = J(), h = b([]), _ = b(!1), v = b(""), C = b(null), w = b(""), D = b(null), O = r(() => {
1714
+ let e = c.loader ? h.value : c.items;
1715
+ return c.excludeId ? e.filter((e) => e.id !== c.excludeId) : e;
1716
+ }), k = r(() => O.value.filter((e) => e.label.toLowerCase().includes(w.value.toLowerCase()))), ee = {
1580
1717
  emerald: {
1581
1718
  iconBg: "bg-emerald-50",
1582
1719
  iconText: "text-emerald-600",
@@ -1622,7 +1759,7 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1622
1759
  confirmActive: "bg-amber-600 hover:bg-amber-700 cursor-pointer",
1623
1760
  confirmDisabled: "bg-amber-400 cursor-not-allowed"
1624
1761
  }
1625
- }, te = {
1762
+ }, j = {
1626
1763
  emerald: {
1627
1764
  iconBg: "bg-emerald-900/30",
1628
1765
  iconText: "text-emerald-400",
@@ -1668,94 +1805,94 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1668
1805
  confirmActive: "bg-amber-600 hover:bg-amber-700 cursor-pointer",
1669
1806
  confirmDisabled: "bg-amber-400 cursor-not-allowed"
1670
1807
  }
1671
- }, N = n(() => (p.value ? te : ee)[l.variant]);
1672
- m(async () => {
1673
- if (l.loader) {
1674
- x.value = !0;
1808
+ }, P = r(() => (d.value ? j : ee)[c.variant]);
1809
+ g(async () => {
1810
+ if (c.loader) {
1811
+ _.value = !0;
1675
1812
  try {
1676
- g.value = await l.loader();
1813
+ h.value = await c.loader();
1677
1814
  } catch {
1678
- S.value = "Failed to load items";
1815
+ v.value = "Failed to load items";
1679
1816
  } finally {
1680
- x.value = !1;
1817
+ _.value = !1;
1681
1818
  }
1682
1819
  }
1683
- await d(), O.value?.focus();
1820
+ await p(), D.value?.focus();
1684
1821
  });
1685
- function P() {
1686
- !T.value || l.submitting || u("confirm", T.value);
1687
- }
1688
1822
  function F() {
1689
- l.submitting || u("cancel");
1823
+ !C.value || c.submitting || l("confirm", C.value);
1824
+ }
1825
+ function te() {
1826
+ c.submitting || l("cancel");
1690
1827
  }
1691
- return (n, s) => (_(), r(Q, {
1828
+ return (n, r) => (y(), i(Lt, {
1692
1829
  title: t.title,
1693
1830
  "manual-close": t.submitting,
1694
- onCancel: F
1831
+ onCancel: te
1695
1832
  }, {
1696
- icon: k(() => [b(n.$slots, "icon", {}, () => [o("div", { class: f(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", N.value.iconBg]) }, [c(w(oe), {
1697
- class: f(["h-6 w-6", N.value.iconText]),
1833
+ icon: M(() => [S(n.$slots, "icon", {}, () => [s("div", { class: m(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", P.value.iconBg]) }, [u(E(me), {
1834
+ class: m(["h-6 w-6", P.value.iconText]),
1698
1835
  "aria-hidden": "true"
1699
1836
  }, null, 8, ["class"])], 2)])]),
1700
- footer: k(() => [o("button", {
1837
+ footer: M(() => [s("button", {
1701
1838
  type: "button",
1702
1839
  disabled: t.submitting,
1703
- class: f(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed", w(h).ghostButton]),
1704
- onClick: F
1705
- }, C(t.cancelText), 11, sn), o("button", {
1840
+ class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed", E(f).ghostButton]),
1841
+ onClick: te
1842
+ }, T(t.cancelText), 11, Dn), s("button", {
1706
1843
  type: "button",
1707
- disabled: !T.value || t.submitting,
1708
- class: f(["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", !T.value || t.submitting ? N.value.confirmDisabled : N.value.confirmActive]),
1709
- onClick: P
1710
- }, C(t.submitting ? t.submittingText : t.confirmText), 11, cn)]),
1711
- default: k(() => [
1712
- t.message ? (_(), a("p", {
1844
+ disabled: !C.value || t.submitting,
1845
+ class: m(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150", !C.value || t.submitting ? P.value.confirmDisabled : P.value.confirmActive]),
1846
+ onClick: F
1847
+ }, T(t.submitting ? t.submittingText : t.confirmText), 11, On)]),
1848
+ default: M(() => [
1849
+ t.message ? (y(), o("p", {
1713
1850
  key: 0,
1714
- class: f(["text-sm", w(p) ? "text-gray-300" : "text-gray-600"])
1715
- }, C(t.message), 3)) : i("", !0),
1716
- x.value ? (_(), a("div", Xt, [c(Je, { color: "emerald" })])) : S.value ? (_(), a("div", Zt, C(S.value), 1)) : i("", !0),
1717
- !x.value && !S.value && j.value.length > 0 ? (_(), a("div", Qt, [o("div", $t, [c(w(ce), {
1718
- class: f(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", w(h).dimText]),
1851
+ class: m(["text-sm", E(d) ? "text-gray-300" : "text-gray-600"])
1852
+ }, T(t.message), 3)) : a("", !0),
1853
+ _.value ? (y(), o("div", _n, [u(ot, { color: "emerald" })])) : v.value ? (y(), o("div", vn, T(v.value), 1)) : a("", !0),
1854
+ !_.value && !v.value && O.value.length > 0 ? (y(), o("div", yn, [s("div", bn, [u(E(ge), {
1855
+ class: m(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", E(f).dimText]),
1719
1856
  "aria-hidden": "true"
1720
- }, null, 8, ["class"]), A(o("input", {
1857
+ }, null, 8, ["class"]), N(s("input", {
1721
1858
  ref_key: "searchInputRef",
1722
- ref: O,
1723
- "onUpdate:modelValue": s[0] ||= (e) => D.value = e,
1859
+ ref: D,
1860
+ "onUpdate:modelValue": r[0] ||= (e) => w.value = e,
1724
1861
  type: "text",
1725
1862
  placeholder: t.searchPlaceholder,
1726
- class: f(["w-full pl-9 pr-3 py-2 text-sm rounded-md border outline-none transition-colors", [w(p) ? "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500" : "bg-white border-gray-300 text-gray-700 placeholder-gray-400", N.value.inputFocus]])
1727
- }, null, 10, en), [[E, D.value]])])])) : i("", !0),
1728
- !x.value && !S.value ? (_(), a("div", tn, [(_(!0), a(e, null, y(M.value, (e) => (_(), a("div", {
1863
+ class: m(["w-full pl-9 pr-3 py-2 text-sm rounded-md border outline-none transition-colors", [E(d) ? "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500" : "bg-white border-gray-300 text-gray-700 placeholder-gray-400", P.value.inputFocus]])
1864
+ }, null, 10, xn), [[A, w.value]])])])) : a("", !0),
1865
+ !_.value && !v.value ? (y(), o("div", Sn, [(y(!0), o(e, null, x(k.value, (e) => (y(), o("div", {
1729
1866
  key: e.id,
1730
- class: f(["flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-colors", [T.value === e.id ? N.value.selectedRow : w(p) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1731
- onClick: (t) => T.value = e.id
1867
+ class: m(["flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-colors", [C.value === e.id ? P.value.selectedRow : E(d) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1868
+ onClick: (t) => C.value = e.id
1732
1869
  }, [
1733
- c(w(oe), { class: f(["w-5 h-5 flex-shrink-0", w(h).dimText]) }, null, 8, ["class"]),
1734
- o("div", rn, [o("p", { class: f(["text-sm font-medium truncate", w(h).bodyText]) }, C(e.label), 3)]),
1735
- T.value === e.id ? (_(), a("div", {
1870
+ u(E(me), { class: m(["w-5 h-5 flex-shrink-0", E(f).dimText]) }, null, 8, ["class"]),
1871
+ s("div", wn, [s("p", { class: m(["text-sm font-medium truncate", E(f).bodyText]) }, T(e.label), 3)]),
1872
+ C.value === e.id ? (y(), o("div", {
1736
1873
  key: 0,
1737
- class: f(["w-5 h-5 rounded-full flex items-center justify-center", N.value.checkBg])
1738
- }, [...s[1] ||= [o("svg", {
1874
+ class: m(["w-5 h-5 rounded-full flex items-center justify-center", P.value.checkBg])
1875
+ }, [...r[1] ||= [s("svg", {
1739
1876
  class: "w-3 h-3 text-white",
1740
1877
  fill: "none",
1741
1878
  viewBox: "0 0 24 24",
1742
1879
  stroke: "currentColor",
1743
1880
  "stroke-width": "3",
1744
1881
  "aria-hidden": "true"
1745
- }, [o("path", {
1882
+ }, [s("path", {
1746
1883
  "stroke-linecap": "round",
1747
1884
  "stroke-linejoin": "round",
1748
1885
  d: "M5 13l4 4L19 7"
1749
- })], -1)]], 2)) : i("", !0)
1750
- ], 10, nn))), 128)), j.value.length === 0 ? (_(), a("div", an, [o("p", { class: f(["text-sm", w(h).dimText]) }, C(t.emptyMessage), 3)])) : M.value.length === 0 ? (_(), a("div", on, [o("p", { class: f(["text-sm", w(h).dimText]) }, C(t.noMatchMessage), 3)])) : i("", !0)])) : i("", !0)
1886
+ })], -1)]], 2)) : a("", !0)
1887
+ ], 10, Cn))), 128)), O.value.length === 0 ? (y(), o("div", Tn, [s("p", { class: m(["text-sm", E(f).dimText]) }, T(t.emptyMessage), 3)])) : k.value.length === 0 ? (y(), o("div", En, [s("p", { class: m(["text-sm", E(f).dimText]) }, T(t.noMatchMessage), 3)])) : a("", !0)])) : a("", !0)
1751
1888
  ]),
1752
1889
  _: 3
1753
1890
  }, 8, ["title", "manual-close"]));
1754
1891
  }
1755
- }), un = {
1892
+ }), An = {
1756
1893
  href: "#main-content",
1757
1894
  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"
1758
- }, dn = ["inert"], fn = /* @__PURE__ */ l({
1895
+ }, jn = ["inert"], Mn = /* @__PURE__ */ d({
1759
1896
  __name: "BaseAppLayout",
1760
1897
  props: {
1761
1898
  showSidebar: {
@@ -1765,19 +1902,19 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1765
1902
  skipLinkLabel: { default: "Skip to main content" }
1766
1903
  },
1767
1904
  setup(e) {
1768
- let t = e, { isDark: r } = W(), { mobileOpen: s } = Bt(), c = n(() => t.showSidebar);
1769
- return (t, n) => (_(), a("div", { class: f(["min-h-screen transition-colors duration-300", w(r) ? "bg-gray-950 text-gray-100" : "bg-gray-50 text-gray-800"]) }, [
1770
- o("a", un, C(e.skipLinkLabel), 1),
1771
- c.value ? b(t.$slots, "sidebar", { key: 0 }) : i("", !0),
1772
- o("main", {
1905
+ let t = e, { isDark: n } = H(), { mobileOpen: i } = Qt(), { collapsed: c } = nn(), l = r(() => t.showSidebar);
1906
+ return (t, r) => (y(), o("div", { class: m(["min-h-screen transition-colors duration-300", E(n) ? "bg-gray-950 text-gray-100" : "bg-gray-50 text-gray-800"]) }, [
1907
+ s("a", An, T(e.skipLinkLabel), 1),
1908
+ l.value ? S(t.$slots, "sidebar", { key: 0 }) : a("", !0),
1909
+ s("main", {
1773
1910
  id: "main-content",
1774
1911
  tabindex: "-1",
1775
- inert: c.value && w(s) ? !0 : void 0,
1776
- class: f(c.value ? "pt-14 lg:pt-0 lg:ml-60" : "")
1777
- }, [b(t.$slots, "default")], 10, dn)
1912
+ inert: l.value && E(i) ? !0 : void 0,
1913
+ class: m(["transition-all duration-300", l.value ? E(c) ? "pt-14 lg:pt-0 lg:ml-16" : "pt-14 lg:pt-0 lg:ml-60" : ""])
1914
+ }, [S(t.$slots, "default")], 10, jn)
1778
1915
  ], 2));
1779
1916
  }
1780
- }), pn = { class: "flex flex-wrap items-center justify-between gap-3 mb-8" }, mn = { class: "flex items-center gap-3 min-w-0" }, hn = { class: "flex items-center gap-2" }, gn = /* @__PURE__ */ l({
1917
+ }), Nn = { class: "flex flex-wrap items-center justify-between gap-3 mb-8" }, Pn = { class: "flex items-center gap-3 min-w-0" }, Fn = { class: "flex items-center gap-2" }, In = /* @__PURE__ */ d({
1781
1918
  __name: "BasePageHeader",
1782
1919
  props: {
1783
1920
  title: {},
@@ -1786,7 +1923,7 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1786
1923
  maxWidthClass: { default: "max-w-4xl" }
1787
1924
  },
1788
1925
  setup(e) {
1789
- let t = e, { isDark: r } = W(), s = Z(), c = n(() => {
1926
+ let t = e, { isDark: n } = H(), i = J(), c = r(() => {
1790
1927
  let e = {
1791
1928
  emerald: {
1792
1929
  dark: "bg-emerald-500/10",
@@ -1805,8 +1942,8 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1805
1942
  light: "bg-amber-50"
1806
1943
  }
1807
1944
  }[t.iconColor];
1808
- return r.value ? e.dark : e.light;
1809
- }), l = n(() => {
1945
+ return n.value ? e.dark : e.light;
1946
+ }), l = r(() => {
1810
1947
  let e = {
1811
1948
  emerald: {
1812
1949
  dark: "text-emerald-400",
@@ -1825,18 +1962,18 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1825
1962
  light: "text-amber-600"
1826
1963
  }
1827
1964
  }[t.iconColor];
1828
- return r.value ? e.dark : e.light;
1965
+ return n.value ? e.dark : e.light;
1829
1966
  });
1830
- return (t, n) => (_(), a("div", { class: f(["mx-auto px-4 sm:px-6", e.maxWidthClass]) }, [o("div", pn, [o("div", mn, [o("div", { class: f(["w-10 h-10 rounded-lg flex items-center justify-center", c.value]) }, [b(t.$slots, "icon", { iconClass: l.value })], 2), o("div", null, [o("h1", { class: f(["text-2xl font-bold", w(s).primaryTextSoft]) }, C(e.title), 3), e.subtitle ? (_(), a("p", {
1967
+ return (t, n) => (y(), o("div", { class: m(["mx-auto px-4 sm:px-6", e.maxWidthClass]) }, [s("div", Nn, [s("div", Pn, [s("div", { class: m(["w-10 h-10 rounded-lg flex items-center justify-center", c.value]) }, [S(t.$slots, "icon", { iconClass: l.value })], 2), s("div", null, [s("h1", { class: m(["text-2xl font-bold", E(i).primaryTextSoft]) }, T(e.title), 3), e.subtitle ? (y(), o("p", {
1831
1968
  key: 0,
1832
- class: f(["text-sm", w(s).dimTextAlt])
1833
- }, C(e.subtitle), 3)) : i("", !0)])]), o("div", hn, [b(t.$slots, "actions")])])], 2));
1969
+ class: m(["text-sm", E(i).dimTextAlt])
1970
+ }, T(e.subtitle), 3)) : a("", !0)])]), s("div", Fn, [S(t.$slots, "actions")])])], 2));
1834
1971
  }
1835
- }), _n = [
1972
+ }), Ln = [
1836
1973
  "type",
1837
1974
  "disabled",
1838
1975
  "title"
1839
- ], vn = { key: 0 }, yn = /* @__PURE__ */ l({
1976
+ ], Rn = { key: 0 }, zn = /* @__PURE__ */ d({
1840
1977
  __name: "BaseToolbarButton",
1841
1978
  props: {
1842
1979
  label: { default: "" },
@@ -1850,7 +1987,7 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1850
1987
  },
1851
1988
  emits: ["click"],
1852
1989
  setup(e) {
1853
- let t = e, { isDark: r } = W(), o = n(() => {
1990
+ let t = e, { isDark: n } = H(), i = r(() => {
1854
1991
  let e = {
1855
1992
  neutral: {
1856
1993
  dark: "bg-gray-800 text-gray-100 border-gray-700 hover:bg-gray-700",
@@ -1861,22 +1998,22 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1861
1998
  light: "bg-red-600 text-white border-red-600 hover:bg-red-700"
1862
1999
  }
1863
2000
  }[t.variant];
1864
- return r.value ? e.dark : e.light;
2001
+ return n.value ? e.dark : e.light;
1865
2002
  });
1866
- return (t, n) => (_(), a("button", {
2003
+ return (t, n) => (y(), o("button", {
1867
2004
  type: e.type,
1868
2005
  disabled: e.disabled,
1869
2006
  title: e.title,
1870
- class: f(["inline-flex shrink-0 items-center gap-2 px-3 py-2 rounded-lg text-sm font-medium border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap", o.value]),
2007
+ class: m(["inline-flex shrink-0 items-center gap-2 px-3 py-2 rounded-lg text-sm font-medium border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap", i.value]),
1871
2008
  onClick: n[0] ||= (e) => t.$emit("click", e)
1872
- }, [b(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (_(), a("span", vn, C(e.label), 1)) : i("", !0)], 10, _n));
2009
+ }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Rn, T(e.label), 1)) : a("", !0)], 10, Ln));
1873
2010
  }
1874
- }), bn = [
2011
+ }), Bn = [
1875
2012
  "type",
1876
2013
  "disabled",
1877
2014
  "title",
1878
2015
  "aria-label"
1879
- ], xn = { key: 0 }, Sn = /* @__PURE__ */ l({
2016
+ ], Vn = { key: 0 }, Hn = /* @__PURE__ */ d({
1880
2017
  __name: "BaseActionButton",
1881
2018
  props: {
1882
2019
  label: { default: "" },
@@ -1895,7 +2032,7 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1895
2032
  },
1896
2033
  emits: ["click"],
1897
2034
  setup(e) {
1898
- let t = e, { isDark: r } = W(), o = n(() => {
2035
+ let t = e, { isDark: n } = H(), i = r(() => {
1899
2036
  let e = {
1900
2037
  emerald: {
1901
2038
  dark: "text-emerald-400 hover:bg-emerald-500/10",
@@ -1930,8 +2067,8 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1930
2067
  light: "text-amber-700 hover:bg-amber-50"
1931
2068
  }
1932
2069
  }[t.color];
1933
- return r.value ? e.dark : e.light;
1934
- }), s = n(() => {
2070
+ return n.value ? e.dark : e.light;
2071
+ }), s = r(() => {
1935
2072
  let e = {
1936
2073
  emerald: {
1937
2074
  dark: "text-emerald-400",
@@ -1966,18 +2103,18 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1966
2103
  light: "text-amber-700"
1967
2104
  }
1968
2105
  }[t.color];
1969
- return r.value ? e.dark : e.light;
1970
- }), c = n(() => t.disabled ? `${s.value} opacity-50 cursor-not-allowed` : `${o.value} cursor-pointer`);
1971
- return (t, n) => (_(), a("button", {
2106
+ return n.value ? e.dark : e.light;
2107
+ }), c = r(() => t.disabled ? `${s.value} opacity-50 cursor-not-allowed` : `${i.value} cursor-pointer`);
2108
+ return (t, n) => (y(), o("button", {
1972
2109
  type: e.type,
1973
2110
  disabled: e.disabled,
1974
2111
  title: e.title,
1975
2112
  "aria-label": e.ariaLabel,
1976
- class: f(["inline-flex items-center justify-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors", [e.fullWidth ? "flex-1" : "", c.value]]),
2113
+ class: m(["inline-flex items-center justify-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors", [e.fullWidth ? "flex-1" : "", c.value]]),
1977
2114
  onClick: n[0] ||= (e) => t.$emit("click", e)
1978
- }, [b(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (_(), a("span", xn, C(e.label), 1)) : i("", !0)], 10, bn));
2115
+ }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Vn, T(e.label), 1)) : a("", !0)], 10, Bn));
1979
2116
  }
1980
- }), Cn = ["title", "aria-label"], wn = /* @__PURE__ */ l({
2117
+ }), Un = ["title", "aria-label"], Wn = /* @__PURE__ */ d({
1981
2118
  __name: "BaseCopyButton",
1982
2119
  props: {
1983
2120
  text: {},
@@ -1988,8 +2125,8 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
1988
2125
  },
1989
2126
  emits: ["copied", "error"],
1990
2127
  setup(e, { emit: t }) {
1991
- let i = e, o = t, { isDark: s } = W(), c = v(!1), l = null, u = n(() => c.value ? "Copied!" : i.label ? `Copy ${i.label}` : "Copy"), d = n(() => i.label ? `Copy ${i.label}` : "Copy"), p = n(() => i.variant === "bordered" ? `inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-colors cursor-pointer shrink-0 ${c.value ? s.value ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-emerald-300 bg-emerald-50 text-emerald-600" : s.value ? "border-gray-600 text-gray-400 hover:text-gray-200 hover:bg-gray-800" : "border-gray-300 text-gray-400 hover:text-gray-600 hover:bg-gray-50"}` : `p-1 rounded transition-colors cursor-pointer ${s.value ? "text-gray-400 hover:text-emerald-300 hover:bg-emerald-500/10" : "text-gray-500 hover:text-emerald-600 hover:bg-emerald-50"}`);
1992
- async function m(e) {
2128
+ let n = e, a = t, { isDark: s } = H(), c = b(!1), l = null, u = r(() => c.value ? "Copied!" : n.label ? `Copy ${n.label}` : "Copy"), d = r(() => n.label ? `Copy ${n.label}` : "Copy"), f = r(() => n.variant === "bordered" ? `inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-colors cursor-pointer shrink-0 ${c.value ? s.value ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-emerald-300 bg-emerald-50 text-emerald-600" : s.value ? "border-gray-600 text-gray-400 hover:text-gray-200 hover:bg-gray-800" : "border-gray-300 text-gray-400 hover:text-gray-600 hover:bg-gray-50"}` : `p-1 rounded transition-colors cursor-pointer ${s.value ? "text-gray-400 hover:text-emerald-300 hover:bg-emerald-500/10" : "text-gray-500 hover:text-emerald-600 hover:bg-emerald-50"}`);
2129
+ async function p(e) {
1993
2130
  try {
1994
2131
  if (navigator.clipboard?.writeText) {
1995
2132
  await navigator.clipboard.writeText(e);
@@ -2003,57 +2140,337 @@ var Vt = ["aria-label", "aria-expanded"], Ht = { class: "flex flex-col h-full" }
2003
2140
  }
2004
2141
  async function h() {
2005
2142
  try {
2006
- await m(i.text), c.value = !0, l && clearTimeout(l), l = setTimeout(() => {
2143
+ await p(n.text), c.value = !0, l && clearTimeout(l), l = setTimeout(() => {
2007
2144
  c.value = !1;
2008
- }, i.resetMs), o("copied");
2145
+ }, n.resetMs), a("copied");
2009
2146
  } catch (e) {
2010
- o("error", e);
2147
+ a("error", e);
2011
2148
  }
2012
2149
  }
2013
- return g(() => {
2150
+ return v(() => {
2014
2151
  l && clearTimeout(l);
2015
- }), (t, n) => (_(), a("button", {
2152
+ }), (t, n) => (y(), o("button", {
2016
2153
  type: "button",
2017
2154
  title: u.value,
2018
2155
  "aria-label": d.value,
2019
- class: f(p.value),
2156
+ class: m(f.value),
2020
2157
  onClick: h
2021
- }, [c.value ? (_(), r(w(ne), {
2158
+ }, [c.value ? (y(), i(E(le), {
2022
2159
  key: 0,
2023
- class: f(e.iconClass),
2160
+ class: m(e.iconClass),
2024
2161
  "aria-hidden": "true"
2025
- }, null, 8, ["class"])) : (_(), r(w(re), {
2162
+ }, null, 8, ["class"])) : (y(), i(E(ue), {
2026
2163
  key: 1,
2027
- class: f(e.iconClass),
2164
+ class: m(e.iconClass),
2028
2165
  "aria-hidden": "true"
2029
- }, null, 8, ["class"]))], 10, Cn));
2166
+ }, null, 8, ["class"]))], 10, Un));
2167
+ }
2168
+ }), Gn = ["disabled", "aria-busy"], Kn = {
2169
+ key: 0,
2170
+ class: "w-5 h-5 animate-spin shrink-0",
2171
+ viewBox: "0 0 24 24",
2172
+ fill: "none",
2173
+ "aria-hidden": "true"
2174
+ }, qn = {
2175
+ key: 1,
2176
+ class: "w-5 h-5 shrink-0",
2177
+ viewBox: "0 0 48 48",
2178
+ "aria-hidden": "true"
2179
+ }, Jn = /* @__PURE__ */ d({
2180
+ __name: "BaseGoogleSignInButton",
2181
+ props: {
2182
+ label: { default: "Sign in with Google" },
2183
+ loading: {
2184
+ type: Boolean,
2185
+ default: !1
2186
+ },
2187
+ disabled: {
2188
+ type: Boolean,
2189
+ default: !1
2190
+ },
2191
+ block: {
2192
+ type: Boolean,
2193
+ default: !0
2194
+ }
2195
+ },
2196
+ emits: ["click"],
2197
+ setup(e, { emit: t }) {
2198
+ let n = e, i = t, { isDark: a } = H(), l = r(() => n.disabled || n.loading);
2199
+ function u() {
2200
+ l.value || i("click");
2201
+ }
2202
+ return (t, n) => (y(), o("button", {
2203
+ type: "button",
2204
+ disabled: l.value,
2205
+ "aria-busy": e.loading,
2206
+ onClick: u,
2207
+ class: m(["inline-flex items-center justify-center gap-3 h-11 px-4 rounded-lg border text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", E(a) ? "bg-gray-900 border-gray-700 text-gray-100 hover:bg-gray-800" : "bg-white border-gray-300 text-gray-700 hover:bg-gray-50"]])
2208
+ }, [e.loading ? (y(), o("svg", Kn, [...n[0] ||= [s("circle", {
2209
+ class: "opacity-25",
2210
+ cx: "12",
2211
+ cy: "12",
2212
+ r: "10",
2213
+ stroke: "currentColor",
2214
+ "stroke-width": "4"
2215
+ }, null, -1), s("path", {
2216
+ class: "opacity-75",
2217
+ fill: "currentColor",
2218
+ d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2219
+ }, null, -1)]])) : (y(), o("svg", qn, [...n[1] ||= [c("<path fill=\"#EA4335\" d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"></path><path fill=\"#4285F4\" d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"></path><path fill=\"#FBBC05\" d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"></path><path fill=\"#34A853\" d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"></path><path fill=\"none\" d=\"M0 0h48v48H0z\"></path>", 5)]])), s("span", null, T(e.label), 1)], 10, Gn));
2220
+ }
2221
+ }), Yn = {
2222
+ key: 0,
2223
+ class: "flex justify-center mb-6"
2224
+ }, Xn = { class: "mb-6 text-center" }, Zn = { class: "flex items-center gap-3 my-5" }, Qn = ["disabled"], $n = { class: "flex items-center justify-between mb-1.5" }, er = { class: "relative" }, tr = ["type", "disabled"], nr = ["aria-label", "aria-pressed"], rr = ["disabled"], ir = ["disabled", "aria-busy"], ar = {
2225
+ key: 0,
2226
+ class: "w-4 h-4 animate-spin",
2227
+ viewBox: "0 0 24 24",
2228
+ fill: "none",
2229
+ "aria-hidden": "true"
2230
+ }, or = /* @__PURE__ */ d({
2231
+ __name: "BaseLoginForm",
2232
+ props: {
2233
+ title: { default: "Sign in" },
2234
+ subtitle: { default: "" },
2235
+ submitLabel: { default: "Sign in" },
2236
+ loading: {
2237
+ type: Boolean,
2238
+ default: !1
2239
+ },
2240
+ googleLoading: {
2241
+ type: Boolean,
2242
+ default: !1
2243
+ },
2244
+ error: { default: "" },
2245
+ showGoogle: {
2246
+ type: Boolean,
2247
+ default: !0
2248
+ },
2249
+ showRemember: {
2250
+ type: Boolean,
2251
+ default: !1
2252
+ }
2253
+ },
2254
+ emits: ["submit", "google-sign-in"],
2255
+ setup(t, { emit: n }) {
2256
+ let i = t, c = n, { isDark: d } = H(), f = J(), p = b(""), h = b(""), g = b(!1), _ = b(!1), v = r(() => i.loading || i.googleLoading);
2257
+ function x() {
2258
+ v.value || c("submit", {
2259
+ email: p.value,
2260
+ password: h.value,
2261
+ ...i.showRemember ? { remember: g.value } : {}
2262
+ });
2263
+ }
2264
+ return (n, r) => (y(), o("div", { class: m(["w-full max-w-sm mx-auto rounded-xl border shadow-sm p-6 sm:p-8", E(f).card]) }, [
2265
+ n.$slots.logo ? (y(), o("div", Yn, [S(n.$slots, "logo")])) : a("", !0),
2266
+ s("div", Xn, [s("h1", { class: m(["text-xl font-semibold", E(f).primaryText]) }, T(t.title), 3), t.subtitle ? (y(), o("p", {
2267
+ key: 0,
2268
+ class: m(["mt-1 text-sm", E(f).mutedText])
2269
+ }, T(t.subtitle), 3)) : a("", !0)]),
2270
+ t.error ? (y(), o("div", {
2271
+ key: 1,
2272
+ role: "alert",
2273
+ class: m(["mb-4 rounded-lg border px-3 py-2 text-sm", E(d) ? "bg-red-500/10 border-red-500/30 text-red-300" : "bg-red-50 border-red-200 text-red-700"])
2274
+ }, T(t.error), 3)) : a("", !0),
2275
+ t.showGoogle ? (y(), o(e, { key: 2 }, [u(Jn, {
2276
+ loading: t.googleLoading,
2277
+ disabled: t.loading,
2278
+ onClick: r[0] ||= (e) => c("google-sign-in")
2279
+ }, null, 8, ["loading", "disabled"]), s("div", Zn, [
2280
+ s("span", { class: m(["h-px flex-1", E(d) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2),
2281
+ s("span", { class: m(["text-xs uppercase tracking-wider", E(f).dimTextAlt]) }, "or", 2),
2282
+ s("span", { class: m(["h-px flex-1", E(d) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2)
2283
+ ])], 64)) : a("", !0),
2284
+ s("form", {
2285
+ class: "space-y-4",
2286
+ onSubmit: F(x, ["prevent"])
2287
+ }, [
2288
+ s("div", null, [s("label", {
2289
+ for: "login-email",
2290
+ class: m(["block mb-1.5 text-sm font-medium", E(f).label])
2291
+ }, " Email ", 2), N(s("input", {
2292
+ id: "login-email",
2293
+ "onUpdate:modelValue": r[1] ||= (e) => p.value = e,
2294
+ type: "email",
2295
+ name: "email",
2296
+ autocomplete: "email",
2297
+ required: "",
2298
+ disabled: v.value,
2299
+ placeholder: "you@example.com",
2300
+ class: m(["w-full h-11 px-3 rounded-lg border text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60", E(f).inputWithPlaceholder])
2301
+ }, null, 10, Qn), [[A, p.value]])]),
2302
+ s("div", null, [s("div", $n, [s("label", {
2303
+ for: "login-password",
2304
+ class: m(["block text-sm font-medium", E(f).label])
2305
+ }, " Password ", 2), S(n.$slots, "forgot")]), s("div", er, [N(s("input", {
2306
+ id: "login-password",
2307
+ "onUpdate:modelValue": r[2] ||= (e) => h.value = e,
2308
+ type: _.value ? "text" : "password",
2309
+ name: "password",
2310
+ autocomplete: "current-password",
2311
+ required: "",
2312
+ disabled: v.value,
2313
+ placeholder: "••••••••",
2314
+ class: m(["w-full h-11 pl-3 pr-16 rounded-lg border text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60", E(f).inputWithPlaceholder])
2315
+ }, null, 10, tr), [[k, h.value]]), s("button", {
2316
+ type: "button",
2317
+ onClick: r[3] ||= (e) => _.value = !_.value,
2318
+ "aria-label": _.value ? "Hide password" : "Show password",
2319
+ "aria-pressed": _.value,
2320
+ class: m(["absolute inset-y-0 right-0 px-3 text-xs font-medium cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 rounded-r-lg", E(f).mutedText])
2321
+ }, T(_.value ? "Hide" : "Show"), 11, nr)])]),
2322
+ t.showRemember ? (y(), o("label", {
2323
+ key: 0,
2324
+ class: m(["flex items-center gap-2 text-sm cursor-pointer select-none", E(f).bodyText])
2325
+ }, [N(s("input", {
2326
+ "onUpdate:modelValue": r[4] ||= (e) => g.value = e,
2327
+ type: "checkbox",
2328
+ disabled: v.value,
2329
+ class: "w-4 h-4 rounded border-gray-300 text-emerald-600 focus:ring-emerald-500"
2330
+ }, null, 8, rr), [[O, g.value]]), r[5] ||= l(" Remember me ", -1)], 2)) : a("", !0),
2331
+ s("button", {
2332
+ type: "submit",
2333
+ disabled: v.value,
2334
+ "aria-busy": t.loading,
2335
+ 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"
2336
+ }, [t.loading ? (y(), o("svg", ar, [...r[6] ||= [s("circle", {
2337
+ class: "opacity-25",
2338
+ cx: "12",
2339
+ cy: "12",
2340
+ r: "10",
2341
+ stroke: "currentColor",
2342
+ "stroke-width": "4"
2343
+ }, null, -1), s("path", {
2344
+ class: "opacity-75",
2345
+ fill: "currentColor",
2346
+ d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2347
+ }, null, -1)]])) : a("", !0), l(" " + T(t.submitLabel), 1)], 8, ir)
2348
+ ], 32),
2349
+ n.$slots.footer ? (y(), o("div", {
2350
+ key: 3,
2351
+ class: m(["mt-6 text-center text-sm", E(f).mutedText])
2352
+ }, [S(n.$slots, "footer")], 2)) : a("", !0)
2353
+ ], 2));
2354
+ }
2355
+ }), sr = ["aria-label"], cr = { class: "flex-1 overflow-y-auto" }, lr = {
2356
+ key: 0,
2357
+ class: "flex flex-col items-center justify-center text-center px-6 py-16 gap-3"
2358
+ }, ur = ["onClick"], dr = { class: "min-w-0 flex-1" }, fr = { class: "flex items-baseline justify-between gap-2" }, pr = /* @__PURE__ */ d({
2359
+ __name: "BaseNotificationPanel",
2360
+ props: {
2361
+ title: { default: "Notifications" },
2362
+ emptyText: { default: "You have no notifications." },
2363
+ showMarkAllRead: {
2364
+ type: Boolean,
2365
+ default: !0
2366
+ }
2367
+ },
2368
+ emits: ["select"],
2369
+ setup(c, { emit: d }) {
2370
+ let f = d, { isDark: p } = H(), h = J(), { notifications: g, unreadCount: _, open: v, closePanel: b, markAllRead: S, markRead: C } = an(), w = {
2371
+ info: "bg-sky-500",
2372
+ success: "bg-emerald-500",
2373
+ warning: "bg-amber-500",
2374
+ error: "bg-red-500"
2375
+ }, D = r(() => g.value.length);
2376
+ function O(e) {
2377
+ C(e), f("select", e);
2378
+ }
2379
+ return Y(() => {
2380
+ v.value && b();
2381
+ }), (r, d) => (y(), i(t, { to: "body" }, [u(n, {
2382
+ "enter-active-class": "transition-opacity duration-200",
2383
+ "enter-from-class": "opacity-0",
2384
+ "leave-active-class": "transition-opacity duration-200",
2385
+ "leave-to-class": "opacity-0"
2386
+ }, {
2387
+ default: M(() => [E(v) ? (y(), o("div", {
2388
+ key: 0,
2389
+ class: "fixed inset-0 z-[60] bg-black/50",
2390
+ "aria-hidden": "true",
2391
+ onClick: d[0] ||= (...e) => E(b) && E(b)(...e)
2392
+ })) : a("", !0)]),
2393
+ _: 1
2394
+ }), u(n, {
2395
+ "enter-active-class": "transition-transform duration-300 ease-out",
2396
+ "enter-from-class": "-translate-x-full",
2397
+ "leave-active-class": "transition-transform duration-300 ease-in",
2398
+ "leave-to-class": "-translate-x-full"
2399
+ }, {
2400
+ default: M(() => [E(v) ? (y(), o("aside", {
2401
+ key: 0,
2402
+ role: "dialog",
2403
+ "aria-modal": "true",
2404
+ "aria-label": c.title,
2405
+ class: m(["fixed top-0 left-0 z-[70] h-screen w-full max-w-sm flex flex-col border-r shadow-xl", E(p) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"])
2406
+ }, [
2407
+ s("div", { class: m(["flex items-center justify-between gap-3 px-5 py-4 border-b shrink-0", E(h).border]) }, [s("h2", { class: m(["text-lg font-semibold flex items-center gap-2", E(h).primaryText]) }, [l(T(c.title) + " ", 1), s("span", { class: m(["text-sm font-normal", E(h).dimTextAlt]) }, "— " + T(D.value), 3)], 2), s("button", {
2408
+ type: "button",
2409
+ onClick: d[1] ||= (...e) => E(b) && E(b)(...e),
2410
+ "aria-label": "Close notifications",
2411
+ class: m(["p-1.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", E(p) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"])
2412
+ }, [u(E(be), {
2413
+ class: "w-5 h-5",
2414
+ "aria-hidden": "true"
2415
+ })], 2)], 2),
2416
+ c.showMarkAllRead && E(_) > 0 ? (y(), o("div", {
2417
+ key: 0,
2418
+ class: m(["px-5 py-2 border-b shrink-0 flex justify-end", E(h).border])
2419
+ }, [s("button", {
2420
+ type: "button",
2421
+ onClick: d[2] ||= (...e) => E(S) && E(S)(...e),
2422
+ class: m(["text-xs font-medium cursor-pointer transition-colors focus:outline-none focus-visible:underline", E(h).emeraldText])
2423
+ }, " Mark all as read ", 2)], 2)) : a("", !0),
2424
+ s("div", cr, [D.value === 0 ? (y(), o("div", lr, [u(E(ie), {
2425
+ class: m(["w-10 h-10", E(h).illustration]),
2426
+ "aria-hidden": "true"
2427
+ }, null, 8, ["class"]), s("p", { class: m(["text-sm", E(h).mutedText]) }, T(c.emptyText), 3)])) : (y(), o("ul", {
2428
+ key: 1,
2429
+ class: m(["divide-y", E(p) ? "divide-gray-800" : "divide-gray-100"])
2430
+ }, [(y(!0), o(e, null, x(E(g), (e) => (y(), o("li", { key: e.id }, [s("button", {
2431
+ type: "button",
2432
+ onClick: (t) => O(e.id),
2433
+ class: m(["w-full text-left px-5 py-4 flex gap-3 transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [e.read ? "" : E(p) ? "bg-emerald-500/5" : "bg-emerald-50/60", E(p) ? "hover:bg-gray-800" : "hover:bg-gray-50"]])
2434
+ }, [s("span", {
2435
+ class: m(["mt-1.5 w-2 h-2 rounded-full shrink-0", e.read ? E(p) ? "bg-gray-700" : "bg-gray-300" : w[e.type ?? "info"]]),
2436
+ "aria-hidden": "true"
2437
+ }, null, 2), s("span", dr, [s("span", fr, [s("span", { class: m(["text-sm truncate", [e.read ? "font-medium" : "font-semibold", E(h).primaryTextSoft]]) }, T(e.title), 3), e.time ? (y(), o("span", {
2438
+ key: 0,
2439
+ class: m(["text-xs shrink-0", E(h).dimText])
2440
+ }, T(e.time), 3)) : a("", !0)]), e.message ? (y(), o("span", {
2441
+ key: 0,
2442
+ class: m(["mt-0.5 block text-sm", E(h).mutedText])
2443
+ }, T(e.message), 3)) : a("", !0)])], 10, ur)]))), 128))], 2))])
2444
+ ], 10, sr)) : a("", !0)]),
2445
+ _: 1
2446
+ })]));
2030
2447
  }
2031
2448
  });
2032
2449
  //#endregion
2033
2450
  //#region src/composables/useDebounce.ts
2034
- function Tn(e, t = 300) {
2035
- let n = v(e.value), r = null;
2036
- return O(e, (e) => {
2451
+ function mr(e, t = 300) {
2452
+ let n = b(e.value), r = null;
2453
+ return j(e, (e) => {
2037
2454
  r && clearTimeout(r), r = setTimeout(() => {
2038
2455
  n.value = e, r = null;
2039
2456
  }, t);
2040
- }), h(() => {
2457
+ }), _(() => {
2041
2458
  r &&= (clearTimeout(r), null);
2042
2459
  }), n;
2043
2460
  }
2044
2461
  //#endregion
2045
2462
  //#region src/composables/useToast.ts
2046
- function En(e = 3e3) {
2047
- let t = v(!1), n = v(""), r = v(Y.SUCCESS), i = null;
2463
+ function hr(e = 3e3) {
2464
+ let t = b(!1), n = b(""), r = b(K.SUCCESS), i = null;
2048
2465
  function a() {
2049
2466
  i &&= (clearTimeout(i), null);
2050
2467
  }
2051
- function o(o, s = Y.SUCCESS, c = e) {
2468
+ function o(o, s = K.SUCCESS, c = e) {
2052
2469
  n.value = o, r.value = s, t.value = !0, a(), i = setTimeout(() => {
2053
2470
  t.value = !1, i = null;
2054
2471
  }, c);
2055
2472
  }
2056
- return h(() => {
2473
+ return _(() => {
2057
2474
  a();
2058
2475
  }), {
2059
2476
  showToast: t,
@@ -2064,16 +2481,16 @@ function En(e = 3e3) {
2064
2481
  }
2065
2482
  //#endregion
2066
2483
  //#region src/enums/BaseBadgeEnum.ts
2067
- var Dn = /* @__PURE__ */ function(e) {
2484
+ var gr = /* @__PURE__ */ function(e) {
2068
2485
  return e.WIN = "WIN", e.LOSE = "LOSE", e;
2069
- }({}), On = {
2486
+ }({}), _r = {
2070
2487
  GET: "bg-blue-600",
2071
2488
  POST: "bg-emerald-600",
2072
2489
  PUT: "bg-amber-600",
2073
2490
  DELETE: "bg-red-600",
2074
2491
  PATCH: "bg-purple-600",
2075
2492
  HEAD: "bg-gray-600"
2076
- }, kn = {
2493
+ }, vr = {
2077
2494
  GET: "bg-blue-500",
2078
2495
  POST: "bg-green-500",
2079
2496
  PUT: "bg-yellow-500",
@@ -2081,23 +2498,23 @@ var Dn = /* @__PURE__ */ function(e) {
2081
2498
  PATCH: "bg-purple-500",
2082
2499
  HEAD: "bg-gray-500"
2083
2500
  };
2084
- function An(e) {
2085
- return e ? On[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
2501
+ function yr(e) {
2502
+ return e ? _r[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
2086
2503
  }
2087
- function jn(e) {
2088
- return e ? kn[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
2504
+ function br(e) {
2505
+ return e ? vr[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
2089
2506
  }
2090
- function Mn(e) {
2507
+ function xr(e) {
2091
2508
  let t = e ?? 0;
2092
2509
  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";
2093
2510
  }
2094
- function Nn(e, t) {
2511
+ function Sr(e, t) {
2095
2512
  let n = e ?? 200;
2096
2513
  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";
2097
2514
  }
2098
2515
  //#endregion
2099
2516
  //#region src/utils/sanitizeHtml.ts
2100
- var Pn = new Set([
2517
+ var Cr = /* @__PURE__ */ new Set([
2101
2518
  "A",
2102
2519
  "B",
2103
2520
  "STRONG",
@@ -2112,7 +2529,7 @@ var Pn = new Set([
2112
2529
  "LI",
2113
2530
  "SPAN",
2114
2531
  "DIV"
2115
- ]), Fn = new Set([
2532
+ ]), wr = /* @__PURE__ */ new Set([
2116
2533
  "SCRIPT",
2117
2534
  "STYLE",
2118
2535
  "IFRAME",
@@ -2120,53 +2537,53 @@ var Pn = new Set([
2120
2537
  "EMBED",
2121
2538
  "NOSCRIPT",
2122
2539
  "TEMPLATE"
2123
- ]), In = { A: new Set(["href", "title"]) };
2124
- function Ln(e) {
2540
+ ]), Tr = { A: /* @__PURE__ */ new Set(["href", "title"]) };
2541
+ function Er(e) {
2125
2542
  let t = e.trim().toLowerCase();
2126
2543
  return t.startsWith("http://") || t.startsWith("https://") || t.startsWith("mailto:") || t.startsWith("tel:") || t.startsWith("/") || t.startsWith("#") || t === "";
2127
2544
  }
2128
- function Rn(e) {
2545
+ function Dr(e) {
2129
2546
  if (e.nodeType !== Node.ELEMENT_NODE) return;
2130
2547
  let t = e, n = t.tagName.toUpperCase();
2131
- if (!Pn.has(n)) {
2132
- Fn.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2548
+ if (!Cr.has(n)) {
2549
+ wr.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2133
2550
  return;
2134
2551
  }
2135
- let r = In[n] ?? /* @__PURE__ */ new Set();
2552
+ let r = Tr[n] ?? /* @__PURE__ */ new Set();
2136
2553
  for (let e of Array.from(t.attributes)) {
2137
2554
  if (!r.has(e.name.toLowerCase())) {
2138
2555
  t.removeAttribute(e.name);
2139
2556
  continue;
2140
2557
  }
2141
- n === "A" && e.name.toLowerCase() === "href" && !Ln(e.value) && t.removeAttribute(e.name);
2558
+ n === "A" && e.name.toLowerCase() === "href" && !Er(e.value) && t.removeAttribute(e.name);
2142
2559
  }
2143
2560
  n === "A" && t.hasAttribute("href") && (t.setAttribute("rel", "noopener noreferrer"), t.setAttribute("target", "_blank"));
2144
- for (let e of Array.from(t.childNodes)) Rn(e);
2561
+ for (let e of Array.from(t.childNodes)) Dr(e);
2145
2562
  }
2146
- function zn(e) {
2563
+ function Or(e) {
2147
2564
  if (!e) return "";
2148
2565
  let t = new DOMParser().parseFromString(`<div>${e}</div>`, "text/html").body.firstElementChild;
2149
2566
  if (!t) return "";
2150
- for (let e of Array.from(t.childNodes)) Rn(e);
2567
+ for (let e of Array.from(t.childNodes)) Dr(e);
2151
2568
  return t.innerHTML;
2152
2569
  }
2153
2570
  //#endregion
2154
2571
  //#region src/utils/format.ts
2155
- var Bn = "—";
2156
- function Vn(e, t = 4) {
2157
- if (e == null || typeof e == "string" && e.trim() === "") return Bn;
2572
+ var kr = "—";
2573
+ function Ar(e, t = 4) {
2574
+ if (e == null || typeof e == "string" && e.trim() === "") return kr;
2158
2575
  let n = typeof e == "string" ? Number(e) : e;
2159
2576
  return isFinite(n) ? n.toLocaleString(void 0, {
2160
2577
  minimumFractionDigits: t,
2161
2578
  maximumFractionDigits: t
2162
- }) : Bn;
2579
+ }) : kr;
2163
2580
  }
2164
- function Hn(e) {
2165
- if (e == null || e === "") return Bn;
2581
+ function jr(e) {
2582
+ if (e == null || e === "") return kr;
2166
2583
  let t = new Date(e);
2167
2584
  return isNaN(t.getTime()) ? String(e) : t.toLocaleString();
2168
2585
  }
2169
- function Un(e) {
2586
+ function Mr(e) {
2170
2587
  return new Date(e).toLocaleString(void 0, {
2171
2588
  month: "short",
2172
2589
  day: "numeric",
@@ -2174,13 +2591,13 @@ function Un(e) {
2174
2591
  minute: "2-digit"
2175
2592
  });
2176
2593
  }
2177
- function Wn(e) {
2594
+ function Nr(e) {
2178
2595
  return new Date(e).toLocaleDateString(void 0, {
2179
2596
  month: "short",
2180
2597
  day: "numeric"
2181
2598
  });
2182
2599
  }
2183
- function Gn(e) {
2600
+ function Pr(e) {
2184
2601
  if (!isFinite(e) || e === 0) return e.toFixed(2);
2185
2602
  let t = Math.abs(e), n = 2;
2186
2603
  return t < 1e-4 ? n = 8 : t < .01 ? n = 6 : t < 1 ? n = 4 : t < 100 && (n = 3), e.toLocaleString(void 0, {
@@ -2188,15 +2605,15 @@ function Gn(e) {
2188
2605
  maximumFractionDigits: n
2189
2606
  });
2190
2607
  }
2191
- function Kn(e, t = 2) {
2608
+ function Fr(e, t = 2) {
2192
2609
  return `${e >= 0 ? "+" : ""}${e.toFixed(t)}%`;
2193
2610
  }
2194
- function qn(e) {
2611
+ function Ir(e) {
2195
2612
  return `${e < 0 ? "-" : "+"}$${Math.abs(e).toFixed(2)}`;
2196
2613
  }
2197
2614
  //#endregion
2198
2615
  //#region src/utils/pnl.ts
2199
- function Jn(e) {
2616
+ function Lr(e) {
2200
2617
  if (e.buyPrice == null || e.lastPrice == null || e.filledQty == null) return {
2201
2618
  pnlUsd: null,
2202
2619
  pnlPct: null
@@ -2211,4 +2628,4 @@ function Jn(e) {
2211
2628
  };
2212
2629
  }
2213
2630
  //#endregion
2214
- export { L as AlertEnum, Sn as BaseActionButton, _e as BaseAlert, fn as BaseAppLayout, z as BaseBadge, Dn as BaseBadgeEnum, Se as BaseBreadcrumb, G as BaseButton, B as BaseButtonEnum, V as BaseButtonSizeEnum, Ot as BaseCollapsibleSection, Mt as BaseConfirmModal, wn as BaseCopyButton, ln as BaseEntityPickerModal, Le as BaseLine, Re as BaseLoginEnum, Be as BaseLogo, q as BaseLogoEnum, Ke as BaseModal, J as BaseModalEnum, Q as BaseModalShell, zt as BaseNotFoundPage, gn as BasePageHeader, qe as BaseRow, Yt as BaseSidebar, Je as BaseSpinner, It as BaseTextInputModal, Ze as BaseToast, Y as BaseToastEnum, yn as BaseToolbarButton, $e as ColoredSquares, R as ColorsEnums, nt as EarningsCard, st as EuroAmount, K as LineEnum, dt as Pagination, X as PositioningEnum, gt as TrendArrow, Jn as computePnL, Hn as fmtDate, Wn as fmtDateShort, Un as fmtDateTime, Vn as fmtNumber, Kn as fmtPct, Gn as fmtPrice, qn as fmtUsd, me as getBaseColor, he as getBaseColorOf, Te as initTheme, Ln as isSafeHref, jn as methodBadgeBright, An as methodBadgeSolid, zn as sanitizeHtml, Mn as statusBadgeSolid, Nn as statusBadgeTinted, Tn as useDebouncedRef, _t as useEscapeKey, Bt as useMobileSidebar, W as useTheme, Z as useThemeClasses, En as useToast };
2631
+ export { I as AlertEnum, Hn as BaseActionButton, De as BaseAlert, Mn as BaseAppLayout, ke as BaseBadge, gr as BaseBadgeEnum, Ne as BaseBreadcrumb, U as BaseButton, R as BaseButtonEnum, z as BaseButtonSizeEnum, Bt as BaseCollapsibleSection, Wt as BaseConfirmModal, Wn as BaseCopyButton, kn as BaseEntityPickerModal, Jn as BaseGoogleSignInButton, Je as BaseLine, Ye as BaseLoginEnum, or as BaseLoginForm, Ze as BaseLogo, G as BaseLogoEnum, it as BaseModal, Qe as BaseModalEnum, Lt as BaseModalShell, Zt as BaseNotFoundPage, pr as BaseNotificationPanel, In as BasePageHeader, at as BaseRow, gn as BaseSidebar, ot as BaseSpinner, Jt as BaseTextInputModal, lt as BaseToast, K as BaseToastEnum, zn as BaseToolbarButton, dt as ColoredSquares, L as ColorsEnums, mt as EarningsCard, yt as EuroAmount, W as LineEnum, Ct as Pagination, q as PositioningEnum, Ot as TrendArrow, Lr as computePnL, jr as fmtDate, Nr as fmtDateShort, Mr as fmtDateTime, Ar as fmtNumber, Fr as fmtPct, Pr as fmtPrice, Ir as fmtUsd, we as getBaseColor, Te as getBaseColorOf, Ie as initTheme, Er as isSafeHref, br as methodBadgeBright, yr as methodBadgeSolid, Or as sanitizeHtml, xr as statusBadgeSolid, Sr as statusBadgeTinted, mr as useDebouncedRef, Y as useEscapeKey, Qt as useMobileSidebar, an as useNotifications, nn as useSidebarCollapse, H as useTheme, J as useThemeClasses, hr as useToast };