mgv-backoffice 1.40.0 → 1.42.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/ui-lib.js CHANGED
@@ -1,32 +1,32 @@
1
- import { Fragment as e, Teleport as t, Text as n, Transition as r, computed as i, createBlock as a, createCommentVNode as o, createElementBlock as s, createElementVNode as c, createSlots as l, createStaticVNode as u, createTextVNode as d, createVNode as f, defineComponent as p, effectScope as m, guardReactiveProps as h, mergeProps as g, nextTick as _, normalizeClass as v, normalizeProps as y, normalizeStyle as b, onBeforeUnmount as x, onMounted as S, onScopeDispose as C, onUnmounted as w, openBlock as T, reactive as E, readonly as D, ref as O, renderList as k, renderSlot as A, resolveComponent as j, resolveDynamicComponent as M, toDisplayString as N, unref as P, useId as ee, useSlots as F, vModelCheckbox as te, vModelDynamic as ne, vModelText as re, vShow as ie, watch as I, withCtx as L, withDirectives as R, withKeys as ae, withModifiers as z } from "vue";
2
- import { ArrowDownIcon as oe, ArrowUpIcon as se, Bars3Icon as ce, BellIcon as le, CheckCircleIcon as ue, CheckIcon as de, ChevronDoubleLeftIcon as fe, ChevronDoubleRightIcon as pe, ChevronDownIcon as me, ChevronRightIcon as he, ClipboardDocumentCheckIcon as ge, ClipboardDocumentIcon as _e, DocumentDuplicateIcon as ve, ExclamationCircleIcon as ye, ExclamationTriangleIcon as be, FolderIcon as xe, InformationCircleIcon as Se, MagnifyingGlassIcon as Ce, MinusIcon as we, MoonIcon as Te, SunIcon as Ee, XMarkIcon as B } from "@heroicons/vue/24/outline";
3
- import { HomeIcon as De } from "@heroicons/vue/24/solid";
4
- import { RouterLink as Oe, useRoute as ke, useRouter as Ae } from "vue-router";
5
- import { VueDatePicker as je } from "@vuepic/vue-datepicker";
1
+ import { Fragment as e, Teleport as t, Text as n, Transition as r, cloneVNode as i, computed as a, createBlock as o, createCommentVNode as s, createElementBlock as c, createElementVNode as l, createSlots as u, createStaticVNode as d, createTextVNode as f, createVNode as p, defineComponent as m, effectScope as h, guardReactiveProps as g, mergeProps as _, nextTick as v, normalizeClass as y, normalizeProps as b, normalizeStyle as x, onBeforeUnmount as S, onMounted as C, onScopeDispose as w, onUnmounted as T, openBlock as E, reactive as D, readonly as O, ref as k, renderList as A, renderSlot as j, resolveComponent as M, resolveDynamicComponent as N, toDisplayString as P, unref as F, useId as ee, useSlots as te, vModelCheckbox as ne, vModelDynamic as re, vModelText as ie, vShow as ae, watch as I, withCtx as L, withDirectives as R, withKeys as oe, withModifiers as z } from "vue";
2
+ import { ArrowDownIcon as se, ArrowRightStartOnRectangleIcon as ce, ArrowUpIcon as le, Bars3Icon as ue, BellIcon as de, CheckCircleIcon as fe, CheckIcon as pe, ChevronDoubleLeftIcon as me, ChevronDoubleRightIcon as he, ChevronDownIcon as ge, ChevronRightIcon as _e, ClipboardDocumentCheckIcon as ve, ClipboardDocumentIcon as ye, DocumentDuplicateIcon as be, ExclamationCircleIcon as xe, ExclamationTriangleIcon as Se, FolderIcon as Ce, InformationCircleIcon as we, MagnifyingGlassIcon as Te, MinusIcon as Ee, MoonIcon as De, SunIcon as Oe, XMarkIcon as B } from "@heroicons/vue/24/outline";
3
+ import { HomeIcon as ke } from "@heroicons/vue/24/solid";
4
+ import { RouterLink as Ae, useRoute as je, useRouter as Me } from "vue-router";
5
+ import { VueDatePicker as Ne } from "@vuepic/vue-datepicker";
6
6
  //#region src/enums/AlertEnum.ts
7
7
  var V = /* @__PURE__ */ function(e) {
8
8
  return e.WARNING = "WARNING", e.ERROR = "ERROR", e.SUCCESS = "SUCCESS", e.INFO = "INFO", e;
9
- }({}), H = O(!1), Me = !1, U = "mgv-theme";
10
- function Ne(e) {
11
- if (Me) {
9
+ }({}), H = k(!1), Pe = !1, U = "mgv-theme";
10
+ function Fe(e) {
11
+ if (Pe) {
12
12
  e !== U && console.warn(`[ui-lib] useTheme: storage key "${e}" ignored — theme already initialized with "${U}". Call initTheme({ storageKey }) before mounting any component.`);
13
13
  return;
14
14
  }
15
- if (Me = !0, U = e, typeof window < "u") {
15
+ if (Pe = !0, U = e, typeof window < "u") {
16
16
  let e = window.localStorage?.getItem(U);
17
17
  e ? H.value = e === "dark" : typeof window.matchMedia == "function" && (H.value = window.matchMedia("(prefers-color-scheme: dark)").matches);
18
18
  }
19
- typeof document < "u" && m(!0).run(() => {
19
+ typeof document < "u" && h(!0).run(() => {
20
20
  I(H, (e) => {
21
21
  document.documentElement.classList.toggle("dark", e), window.localStorage?.setItem(U, e ? "dark" : "light");
22
22
  }, { immediate: !0 });
23
23
  });
24
24
  }
25
- function Pe(e) {
26
- Ne(e?.storageKey ?? U);
25
+ function Ie(e) {
26
+ Fe(e?.storageKey ?? U);
27
27
  }
28
28
  function W(e) {
29
- Ne(e?.storageKey ?? U);
29
+ Fe(e?.storageKey ?? U);
30
30
  function t() {
31
31
  H.value = !H.value;
32
32
  }
@@ -37,10 +37,10 @@ function W(e) {
37
37
  }
38
38
  //#endregion
39
39
  //#region src/components/BaseAlert.vue?vue&type=script&setup=true&lang.ts
40
- var Fe = { class: "min-w-0 flex-1" }, Ie = {
40
+ var Le = { class: "min-w-0 flex-1" }, Re = {
41
41
  key: 0,
42
42
  class: "font-medium"
43
- }, Le = /* @__PURE__ */ p({
43
+ }, ze = /* @__PURE__ */ m({
44
44
  __name: "BaseAlert",
45
45
  props: {
46
46
  title: { default: "" },
@@ -68,14 +68,14 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
68
68
  light: "bg-sky-50 border-sky-200 text-sky-700",
69
69
  dark: "bg-sky-500/10 border-sky-500/30 text-sky-300"
70
70
  }
71
- }, l = i(() => n.value ? r[t.color].dark : r[t.color].light), u = i(() => {
71
+ }, i = a(() => n.value ? r[t.color].dark : r[t.color].light), u = a(() => {
72
72
  switch (t.color) {
73
- case V.SUCCESS: return ue;
74
- case V.WARNING: return be;
75
- case V.INFO: return Se;
76
- default: return ye;
73
+ case V.SUCCESS: return fe;
74
+ case V.WARNING: return Se;
75
+ case V.INFO: return we;
76
+ default: return xe;
77
77
  }
78
- }), d = i(() => {
78
+ }), d = a(() => {
79
79
  switch (t.color) {
80
80
  case V.SUCCESS: return "text-emerald-500";
81
81
  case V.WARNING: return "text-amber-500";
@@ -83,24 +83,46 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
83
83
  default: return "text-red-500";
84
84
  }
85
85
  });
86
- return (t, n) => (T(), s("div", {
86
+ return (t, n) => (E(), c("div", {
87
87
  role: "alert",
88
- class: v(["flex gap-3 mb-4 rounded-lg border text-sm transition-colors", [e.compact ? "items-start px-3 py-2 text-xs" : "items-start p-4", l.value]])
89
- }, [(T(), a(M(u.value), {
90
- class: v(["shrink-0", [e.compact ? "w-4 h-4 mt-px" : "w-5 h-5 mt-0.5", d.value]]),
88
+ class: y(["flex gap-3 mb-4 rounded-lg border text-sm transition-colors", [e.compact ? "items-start px-3 py-2 text-xs" : "items-start p-4", i.value]])
89
+ }, [(E(), o(N(u.value), {
90
+ class: y(["shrink-0", [e.compact ? "w-4 h-4 mt-px" : "w-5 h-5 mt-0.5", d.value]]),
91
91
  "aria-hidden": "true"
92
- }, null, 8, ["class"])), c("div", Fe, [e.title ? (T(), s("p", Ie, N(e.title), 1)) : o("", !0), A(t.$slots, "default")])], 2));
92
+ }, null, 8, ["class"])), l("div", Le, [e.title ? (E(), c("p", Re, P(e.title), 1)) : s("", !0), j(t.$slots, "default")])], 2));
93
93
  }
94
94
  }), G = /* @__PURE__ */ function(e) {
95
95
  return e.NONE = "NONE", e.RED = "RED", e.YELLOW = "YELLOW", e.BLACK = "BLACK", e.GRAY = "GRAY", e.GREEN = "GREEN", e.BLUE = "BLUE", e;
96
- }({}), Re = "bg-red-100 text-red-700 border-red-200", ze = /* @__PURE__ */ p({
96
+ }({});
97
+ //#endregion
98
+ //#region src/utils/humanize.ts
99
+ function Be(e) {
100
+ return e == null ? "" : String(e).replace(/_/g, " ");
101
+ }
102
+ function Ve(t, r = []) {
103
+ return t.map((t) => {
104
+ if (t.type === n && typeof t.children == "string") return f(Be(t.children));
105
+ if (t.type === e && Array.isArray(t.children)) {
106
+ let e = i(t);
107
+ return e.children = Ve(t.children, r), e;
108
+ }
109
+ if (typeof t.type == "string" && r.includes(t.type)) {
110
+ let e = i(t);
111
+ return typeof t.children == "string" ? e.children = Be(t.children) : Array.isArray(t.children) && (e.children = Ve(t.children, r)), e;
112
+ }
113
+ return t;
114
+ });
115
+ }
116
+ //#endregion
117
+ //#region src/components/BaseBadge.vue?vue&type=script&setup=true&lang.ts
118
+ var He = "bg-red-100 text-red-700 border-red-200", Ue = /* @__PURE__ */ m({
97
119
  __name: "BaseBadge",
98
120
  props: { color: {
99
121
  type: String,
100
122
  required: !1
101
123
  } },
102
124
  setup(e) {
103
- let t = F(), r = i(() => !!t.default), a = () => (t.default?.() ?? []).map((e) => e.type === n && typeof e.children == "string" ? d(e.children.replace(/_/g, " ")) : e), c = e, l = {
125
+ let t = te(), n = a(() => !!t.default), r = () => Ve(t.default?.() ?? []), i = e, o = {
104
126
  [G.RED]: "bg-red-100 text-red-700 border-red-200",
105
127
  [G.GREEN]: "bg-green-100 text-green-700 border-green-200",
106
128
  [G.BLUE]: "bg-blue-100 text-blue-700 border-blue-200",
@@ -108,19 +130,19 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
108
130
  [G.GRAY]: "bg-gray-100 text-gray-700 border-gray-200",
109
131
  [G.BLACK]: "bg-gray-800 text-gray-100 border-gray-700",
110
132
  [G.NONE]: "bg-gray-50 text-gray-600 border-gray-200"
111
- }, u = i(() => `inline-flex items-center gap-1 font-semibold text-xs leading-none px-3 py-1.5 rounded-full border ${c.color && l[c.color] || Re}`);
112
- return (e, t) => r.value ? (T(), s("span", {
133
+ }, l = a(() => `inline-flex items-center gap-1 font-semibold text-xs leading-none px-3 py-1.5 rounded-full border ${i.color && o[i.color] || He}`);
134
+ return (e, t) => n.value ? (E(), c("span", {
113
135
  key: 0,
114
- class: v(u.value)
115
- }, [f(a)], 2)) : o("", !0);
136
+ class: y(l.value)
137
+ }, [p(r)], 2)) : s("", !0);
116
138
  }
117
- }), Be = {
139
+ }), We = {
118
140
  class: "flex overflow-x-auto px-5 py-3 text-gray-700 border border-slate-200 rounded-xl bg-white shadow-sm dark:bg-slate-900 dark:border-slate-700",
119
141
  "aria-label": "Breadcrumb"
120
- }, Ve = { class: "inline-flex items-center whitespace-nowrap space-x-1 md:space-x-3" }, He = {
142
+ }, Ge = { class: "inline-flex items-center whitespace-nowrap space-x-1 md:space-x-3" }, Ke = {
121
143
  class: "inline-flex items-center",
122
144
  style: { "margin-left": "0" }
123
- }, Ue = /* @__PURE__ */ p({
145
+ }, qe = /* @__PURE__ */ m({
124
146
  __name: "BaseBreadcrumb",
125
147
  props: {
126
148
  items: {
@@ -135,7 +157,7 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
135
157
  }
136
158
  },
137
159
  setup(t) {
138
- let n = t, r = i(() => {
160
+ let n = t, r = a(() => {
139
161
  if (n.items && n.items.length > 0) return n.items;
140
162
  let e = (n.path ?? (typeof window < "u" ? window.location.pathname : "/")).split("/").filter((e) => e !== ""), t = "";
141
163
  return e.map((e) => (t += "/" + e, {
@@ -144,22 +166,22 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
144
166
  }));
145
167
  });
146
168
  return (t, n) => {
147
- let i = j("router-link");
148
- return T(), s("nav", Be, [c("ol", Ve, [c("li", He, [f(i, {
169
+ let i = M("router-link");
170
+ return E(), c("nav", We, [l("ol", Ge, [l("li", Ke, [p(i, {
149
171
  to: "/",
150
172
  class: "inline-flex items-center text-sm font-medium text-gray-700 hover:text-blue-600 dark:text-gray-400 dark:hover:text-white transition-colors rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500"
151
173
  }, {
152
- default: L(() => [f(P(De), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= d(" Home ", -1)]),
174
+ default: L(() => [p(F(ke), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= f(" Home ", -1)]),
153
175
  _: 1
154
- })]), (T(!0), s(e, null, k(r.value, (e, t) => (T(), s("li", {
176
+ })]), (E(!0), c(e, null, A(r.value, (e, t) => (E(), c("li", {
155
177
  key: t,
156
178
  class: "inline-flex items-center",
157
179
  style: { "margin-left": "0" }
158
- }, [f(P(he), { class: "h-4 w-4 text-gray-500" }), f(i, {
180
+ }, [p(F(_e), { class: "h-4 w-4 text-gray-500" }), p(i, {
159
181
  to: e.url,
160
182
  class: "ml-1 text-sm font-medium text-gray-700 hover:text-blue-600 md:ml-2 dark:text-gray-400 dark:hover:text-white transition-colors rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500"
161
183
  }, {
162
- default: L(() => [d(N(e.name), 1)]),
184
+ default: L(() => [f(P(e.name), 1)]),
163
185
  _: 2
164
186
  }, 1032, ["to"])]))), 128))])]);
165
187
  };
@@ -168,17 +190,17 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
168
190
  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;
169
191
  }({}), q = /* @__PURE__ */ function(e) {
170
192
  return e.EXTRA_SMALL = "EXTRA_SMALL", e.SMALL = "SMALL", e.BASE = "BASE", e.LARGE = "LARGE", e.EXTRA_LARGE = "EXTRA_LARGE", e;
171
- }({}), We = [
193
+ }({}), Je = [
172
194
  "type",
173
195
  "disabled",
174
196
  "onClick"
175
- ], Ge = {
197
+ ], Ye = {
176
198
  key: 0,
177
199
  class: "inline-flex items-center"
178
- }, Ke = { key: 1 }, qe = { key: 2 }, Je = ["type", "disabled"], Ye = {
200
+ }, Xe = { key: 1 }, Ze = { key: 2 }, Qe = ["type", "disabled"], $e = {
179
201
  key: 0,
180
202
  class: "inline-flex items-center"
181
- }, Xe = { key: 1 }, Ze = { key: 2 }, Qe = /* @__PURE__ */ p({
203
+ }, et = { key: 1 }, tt = { key: 2 }, nt = /* @__PURE__ */ m({
182
204
  __name: "BaseButton",
183
205
  props: {
184
206
  description: {
@@ -331,7 +353,7 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
331
353
  }, r = e[n.color] ?? e[K.GRAY], i = t.value ? r.dark : r.light;
332
354
  return n.isDisable || n.isLoading ? `bg-transparent ${i} opacity-60 cursor-not-allowed` : `focus:outline-none focus-visible:ring-2 focus-visible:ring-current bg-transparent ${i} cursor-pointer`;
333
355
  }
334
- function l() {
356
+ function a() {
335
357
  let e = n.isDisable || n.isLoading, t = "inline-flex items-center transition-colors duration-150";
336
358
  e || (t += " cursor-pointer");
337
359
  let a;
@@ -392,91 +414,91 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
392
414
  return n.isRounded && (s = "rounded-full"), t + " " + o + " " + a + " font-medium " + s;
393
415
  }
394
416
  return (t, r) => {
395
- let i = j("router-link");
396
- return e.to ? (T(), a(i, {
417
+ let i = M("router-link");
418
+ return e.to ? (E(), o(i, {
397
419
  key: 0,
398
420
  to: e.to,
399
421
  custom: ""
400
422
  }, {
401
- default: L(({ navigate: i }) => [c("button", {
423
+ default: L(({ navigate: i }) => [l("button", {
402
424
  type: n.type,
403
- class: v(l()),
425
+ class: y(a()),
404
426
  disabled: e.isDisable || e.isLoading,
405
427
  onClick: i
406
428
  }, [
407
- e.isLoading ? (T(), s("div", Ge, [...r[0] ||= [c("svg", {
429
+ e.isLoading ? (E(), c("div", Ye, [...r[0] ||= [l("svg", {
408
430
  "aria-hidden": "true",
409
431
  role: "status",
410
432
  class: "inline w-4 h-4 me-3 animate-spin",
411
433
  viewBox: "0 0 100 101",
412
434
  fill: "none",
413
435
  xmlns: "http://www.w3.org/2000/svg"
414
- }, [c("path", {
436
+ }, [l("path", {
415
437
  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",
416
438
  fill: "#E5E7EB"
417
- }), c("path", {
439
+ }), l("path", {
418
440
  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",
419
441
  fill: "currentColor"
420
- })], -1)]])) : o("", !0),
421
- e.iconLeft ? o("", !0) : (T(), s("span", Ke, N(e.description), 1)),
422
- A(t.$slots, "default"),
423
- e.iconLeft ? (T(), s("span", qe, N(e.description), 1)) : o("", !0)
424
- ], 10, We)]),
442
+ })], -1)]])) : s("", !0),
443
+ e.iconLeft ? s("", !0) : (E(), c("span", Xe, P(e.description), 1)),
444
+ j(t.$slots, "default"),
445
+ e.iconLeft ? (E(), c("span", Ze, P(e.description), 1)) : s("", !0)
446
+ ], 10, Je)]),
425
447
  _: 3
426
- }, 8, ["to"])) : (T(), s("button", {
448
+ }, 8, ["to"])) : (E(), c("button", {
427
449
  key: 1,
428
450
  type: n.type,
429
- class: v(l()),
451
+ class: y(a()),
430
452
  disabled: e.isDisable || e.isLoading
431
453
  }, [
432
- e.isLoading ? (T(), s("div", Ye, [...r[1] ||= [c("svg", {
454
+ e.isLoading ? (E(), c("div", $e, [...r[1] ||= [l("svg", {
433
455
  "aria-hidden": "true",
434
456
  role: "status",
435
457
  class: "inline w-4 h-4 me-3 animate-spin",
436
458
  viewBox: "0 0 100 101",
437
459
  fill: "none",
438
460
  xmlns: "http://www.w3.org/2000/svg"
439
- }, [c("path", {
461
+ }, [l("path", {
440
462
  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",
441
463
  fill: "#E5E7EB"
442
- }), c("path", {
464
+ }), l("path", {
443
465
  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",
444
466
  fill: "currentColor"
445
- })], -1)]])) : o("", !0),
446
- e.iconLeft ? o("", !0) : (T(), s("span", Xe, N(e.description), 1)),
447
- A(t.$slots, "default"),
448
- e.iconLeft ? (T(), s("span", Ze, N(e.description), 1)) : o("", !0)
449
- ], 10, Je));
467
+ })], -1)]])) : s("", !0),
468
+ e.iconLeft ? s("", !0) : (E(), c("span", et, P(e.description), 1)),
469
+ j(t.$slots, "default"),
470
+ e.iconLeft ? (E(), c("span", tt, P(e.description), 1)) : s("", !0)
471
+ ], 10, Qe));
450
472
  };
451
473
  }
452
- }), $e = /* @__PURE__ */ function(e) {
474
+ }), rt = /* @__PURE__ */ function(e) {
453
475
  return e.BASE = "BASE", e.BASE_SHORTER = "BASE_SHORTER", e.SQUARE = "SQUARE", e;
454
- }({}), et = {
476
+ }({}), it = {
455
477
  key: 0,
456
478
  class: "h-px my-8 bg-gray-200 border-0 dark:bg-gray-700"
457
- }, tt = {
479
+ }, at = {
458
480
  key: 1,
459
481
  class: "w-48 h-1 mx-auto my-4 bg-gray-100 border-0 rounded md:my-10 dark:bg-gray-700"
460
- }, nt = {
482
+ }, ot = {
461
483
  key: 2,
462
484
  class: "w-8 h-8 mx-auto my-8 bg-gray-200 border-0 rounded md:my-12 dark:bg-gray-700"
463
- }, rt = /* @__PURE__ */ p({
485
+ }, st = /* @__PURE__ */ m({
464
486
  __name: "BaseLine",
465
487
  props: { mode: {
466
488
  type: String,
467
489
  required: !1,
468
- default: $e.BASE
490
+ default: rt.BASE
469
491
  } },
470
492
  setup(t) {
471
- return (n, r) => (T(), s(e, null, [
472
- t.mode === P($e).BASE ? (T(), s("hr", et)) : o("", !0),
473
- t.mode === P($e).BASE_SHORTER ? (T(), s("hr", tt)) : o("", !0),
474
- t.mode === P($e).SQUARE ? (T(), s("hr", nt)) : o("", !0)
493
+ return (n, r) => (E(), c(e, null, [
494
+ t.mode === F(rt).BASE ? (E(), c("hr", it)) : s("", !0),
495
+ t.mode === F(rt).BASE_SHORTER ? (E(), c("hr", at)) : s("", !0),
496
+ t.mode === F(rt).SQUARE ? (E(), c("hr", ot)) : s("", !0)
475
497
  ], 64));
476
498
  }
477
499
  }), J = /* @__PURE__ */ function(e) {
478
500
  return e.SMALL = "SMALL", e.MEDIUM = "MEDIUM", e.LARGE = "LARGE", e;
479
- }({}), it = J, at = ["height", "width"], ot = ["id"], st = ["id", "href"], ct = ["id", "href"], lt = ["id", "href"], ut = ["id", "href"], dt = ["id", "href"], ft = ["id", "href"], pt = ["id", "href"], mt = ["id", "href"], ht = ["id", "href"], gt = ["id"], _t = ["fill"], vt = ["fill"], yt = ["fill"], bt = ["fill"], xt = ["fill"], St = ["fill"], Ct = ["fill"], wt = ["fill"], Tt = ["fill"], Et = ["fill"], Dt = /* @__PURE__ */ p({
501
+ }({}), ct = J, lt = ["height", "width"], ut = ["id"], dt = ["id", "href"], ft = ["id", "href"], pt = ["id", "href"], mt = ["id", "href"], ht = ["id", "href"], gt = ["id", "href"], _t = ["id", "href"], vt = ["id", "href"], yt = ["id", "href"], bt = ["id"], xt = ["fill"], St = ["fill"], Ct = ["fill"], wt = ["fill"], Tt = ["fill"], Et = ["fill"], Dt = ["fill"], Ot = ["fill"], kt = ["fill"], At = ["fill"], jt = /* @__PURE__ */ m({
480
502
  __name: "BaseLogo",
481
503
  props: { size: {
482
504
  type: String,
@@ -499,26 +521,26 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
499
521
  return e;
500
522
  }
501
523
  return (e, n) => {
502
- let i = j("router-link");
503
- return T(), a(i, {
524
+ let i = M("router-link");
525
+ return E(), o(i, {
504
526
  to: "/",
505
527
  class: "flex items-center mb-6 text-2xl font-semibold text-gray-900 dark:text-white"
506
528
  }, {
507
- default: L(() => [(T(), s("svg", {
529
+ default: L(() => [(E(), c("svg", {
508
530
  height: r(),
509
531
  width: r(),
510
532
  viewBox: "33.6 130.6 499.7 242.9",
511
533
  xmlns: "http://www.w3.org/2000/svg",
512
534
  "xmlns:xlink": "http://www.w3.org/1999/xlink"
513
535
  }, [
514
- c("linearGradient", { id: `${t}-a` }, [...n[0] ||= [c("stop", {
536
+ l("linearGradient", { id: `${t}-a` }, [...n[0] ||= [l("stop", {
515
537
  offset: ".085",
516
538
  "stop-color": "#469e43"
517
- }, null, -1), c("stop", {
539
+ }, null, -1), l("stop", {
518
540
  offset: "1",
519
541
  "stop-color": "#132d13"
520
- }, null, -1)]], 8, ot),
521
- c("linearGradient", {
542
+ }, null, -1)]], 8, ut),
543
+ l("linearGradient", {
522
544
  id: `${t}-b`,
523
545
  gradientUnits: "userSpaceOnUse",
524
546
  x1: "64.863",
@@ -526,8 +548,8 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
526
548
  href: `#${t}-a`,
527
549
  y1: "288.291",
528
550
  y2: "369.4"
529
- }, null, 8, st),
530
- c("linearGradient", {
551
+ }, null, 8, dt),
552
+ l("linearGradient", {
531
553
  id: `${t}-c`,
532
554
  gradientUnits: "userSpaceOnUse",
533
555
  x1: "138.367",
@@ -535,8 +557,8 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
535
557
  href: `#${t}-a`,
536
558
  y1: "308.454",
537
559
  y2: "370.601"
538
- }, null, 8, ct),
539
- c("linearGradient", {
560
+ }, null, 8, ft),
561
+ l("linearGradient", {
540
562
  id: `${t}-d`,
541
563
  gradientUnits: "userSpaceOnUse",
542
564
  x1: "195.475",
@@ -544,8 +566,8 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
544
566
  href: `#${t}-a`,
545
567
  y1: "288.291",
546
568
  y2: "369.85"
547
- }, null, 8, lt),
548
- c("linearGradient", {
569
+ }, null, 8, pt),
570
+ l("linearGradient", {
549
571
  id: `${t}-e`,
550
572
  gradientUnits: "userSpaceOnUse",
551
573
  x1: "249.634",
@@ -553,8 +575,8 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
553
575
  href: `#${t}-a`,
554
576
  y1: "307.312",
555
577
  y2: "369.511"
556
- }, null, 8, ut),
557
- c("linearGradient", {
578
+ }, null, 8, mt),
579
+ l("linearGradient", {
558
580
  id: `${t}-f`,
559
581
  gradientUnits: "userSpaceOnUse",
560
582
  x1: "302.884",
@@ -562,8 +584,8 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
562
584
  href: `#${t}-a`,
563
585
  y1: "288.291",
564
586
  y2: "367.857"
565
- }, null, 8, dt),
566
- c("linearGradient", {
587
+ }, null, 8, ht),
588
+ l("linearGradient", {
567
589
  id: `${t}-g`,
568
590
  gradientUnits: "userSpaceOnUse",
569
591
  x1: "354.118",
@@ -571,8 +593,8 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
571
593
  href: `#${t}-a`,
572
594
  y1: "307.312",
573
595
  y2: "369.511"
574
- }, null, 8, ft),
575
- c("linearGradient", {
596
+ }, null, 8, gt),
597
+ l("linearGradient", {
576
598
  id: `${t}-h`,
577
599
  gradientUnits: "userSpaceOnUse",
578
600
  x1: "428.02",
@@ -580,8 +602,8 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
580
602
  href: `#${t}-a`,
581
603
  y1: "306.156",
582
604
  y2: "367.742"
583
- }, null, 8, pt),
584
- c("linearGradient", {
605
+ }, null, 8, _t),
606
+ l("linearGradient", {
585
607
  id: `${t}-i`,
586
608
  gradientUnits: "userSpaceOnUse",
587
609
  x1: "502.066",
@@ -589,8 +611,8 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
589
611
  href: `#${t}-a`,
590
612
  y1: "288.291",
591
613
  y2: "369.4"
592
- }, null, 8, mt),
593
- c("linearGradient", {
614
+ }, null, 8, vt),
615
+ l("linearGradient", {
594
616
  id: `${t}-j`,
595
617
  gradientUnits: "userSpaceOnUse",
596
618
  x1: "283.264",
@@ -598,79 +620,79 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
598
620
  href: `#${t}-a`,
599
621
  y1: "131.629",
600
622
  y2: "232.559"
601
- }, null, 8, ht),
602
- c("linearGradient", {
623
+ }, null, 8, yt),
624
+ l("linearGradient", {
603
625
  id: `${t}-k`,
604
626
  gradientUnits: "userSpaceOnUse",
605
627
  x1: "283.46",
606
628
  x2: "283.46",
607
629
  y1: "202.275",
608
630
  y2: "183.785"
609
- }, [...n[1] ||= [c("stop", {
631
+ }, [...n[1] ||= [l("stop", {
610
632
  offset: "0",
611
633
  "stop-color": "#969799",
612
634
  "stop-opacity": "0"
613
- }, null, -1), c("stop", {
635
+ }, null, -1), l("stop", {
614
636
  offset: "1",
615
637
  "stop-color": "#808183"
616
- }, null, -1)]], 8, gt),
617
- c("path", {
638
+ }, null, -1)]], 8, bt),
639
+ l("path", {
618
640
  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",
619
641
  fill: `url(#${t}-b)`
620
- }, null, 8, _t),
621
- c("path", {
642
+ }, null, 8, xt),
643
+ l("path", {
622
644
  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",
623
645
  fill: `url(#${t}-c)`
624
- }, null, 8, vt),
625
- c("path", {
646
+ }, null, 8, St),
647
+ l("path", {
626
648
  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",
627
649
  fill: `url(#${t}-d)`
628
- }, null, 8, yt),
629
- c("path", {
650
+ }, null, 8, Ct),
651
+ l("path", {
630
652
  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",
631
653
  fill: `url(#${t}-e)`
632
- }, null, 8, bt),
633
- c("path", {
654
+ }, null, 8, wt),
655
+ l("path", {
634
656
  d: "m296.4 288.3h13v79.6h-13z",
635
657
  fill: `url(#${t}-f)`
636
- }, null, 8, xt),
637
- c("path", {
658
+ }, null, 8, Tt),
659
+ l("path", {
638
660
  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",
639
661
  fill: `url(#${t}-g)`
640
- }, null, 8, St),
641
- c("path", {
662
+ }, null, 8, Et),
663
+ l("path", {
642
664
  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",
643
665
  fill: `url(#${t}-h)`
644
- }, null, 8, Ct),
645
- c("path", {
666
+ }, null, 8, Dt),
667
+ l("path", {
646
668
  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",
647
669
  fill: `url(#${t}-i)`
648
- }, null, 8, wt),
649
- c("path", {
670
+ }, null, 8, Ot),
671
+ l("path", {
650
672
  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",
651
673
  fill: `url(#${t}-j)`
652
- }, null, 8, Tt),
653
- c("path", {
674
+ }, null, 8, kt),
675
+ l("path", {
654
676
  d: "m281.7 183.8h3.6v18.5h-3.6z",
655
677
  fill: `url(#${t}-k)`
656
- }, null, 8, Et)
657
- ], 8, at))]),
678
+ }, null, 8, At)
679
+ ], 8, lt))]),
658
680
  _: 1
659
681
  });
660
682
  };
661
683
  }
662
- }), Ot = /* @__PURE__ */ function(e) {
684
+ }), Mt = /* @__PURE__ */ function(e) {
663
685
  return e.DELETE = "DELETE", e.SUCCESS = "SUCCESS", e;
664
- }({}), kt = {
686
+ }({}), Nt = {
665
687
  key: 0,
666
688
  class: "p-6 text-center"
667
- }, At = { class: "flex justify-center" }, jt = {
689
+ }, Pt = { class: "flex justify-center" }, Ft = {
668
690
  key: 1,
669
691
  class: "p-6 text-center"
670
- }, Mt = {
692
+ }, It = {
671
693
  key: 0,
672
694
  class: "mb-5 text-sm text-gray-500"
673
- }, Nt = { class: "flex justify-center" }, Pt = /* @__PURE__ */ p({
695
+ }, Lt = { class: "flex justify-center" }, Rt = /* @__PURE__ */ m({
674
696
  __name: "BaseModal",
675
697
  props: {
676
698
  title: {
@@ -689,7 +711,7 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
689
711
  mode: {
690
712
  type: String,
691
713
  required: !1,
692
- default: Ot.SUCCESS
714
+ default: Mt.SUCCESS
693
715
  }
694
716
  },
695
717
  emits: ["closeModal", "confirmModal"],
@@ -698,49 +720,49 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
698
720
  function a(e) {
699
721
  e.key === "Escape" && r("closeModal");
700
722
  }
701
- return S(() => {
723
+ return C(() => {
702
724
  document.addEventListener("keydown", a);
703
- }), w(() => {
725
+ }), T(() => {
704
726
  document.removeEventListener("keydown", a);
705
- }), (n, r) => (T(), s(e, null, [c("div", {
727
+ }), (n, r) => (E(), c(e, null, [l("div", {
706
728
  class: "fixed inset-0 w-full h-screen bg-black/75 z-40",
707
729
  onClick: r[0] ||= (e) => n.$emit("closeModal")
708
- }), c("div", {
730
+ }), l("div", {
709
731
  class: "fixed top-[20vh] left-1/2 -translate-x-1/2 w-96 z-50 rounded-xl shadow-lg bg-white overflow-hidden",
710
732
  role: "dialog",
711
733
  "aria-modal": "true",
712
734
  "aria-labelledby": i
713
- }, [t.mode === P(Ot).DELETE ? (T(), s("div", kt, [
714
- f(P(ye), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
715
- c("h3", {
735
+ }, [t.mode === F(Mt).DELETE ? (E(), c("div", Nt, [
736
+ p(F(xe), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
737
+ l("h3", {
716
738
  id: i,
717
739
  class: "mb-5 text-lg font-normal text-gray-500 dark:text-gray-400"
718
- }, " Are you sure you want to delete this " + N(t.title) + "? ", 1),
719
- c("div", At, [f(Qe, {
720
- color: P(K).RED,
740
+ }, " Are you sure you want to delete this " + P(t.title) + "? ", 1),
741
+ l("div", Pt, [p(nt, {
742
+ color: F(K).RED,
721
743
  onClick: r[1] ||= (e) => n.$emit("confirmModal"),
722
744
  description: "Yes, I'm sure"
723
- }, null, 8, ["color"]), f(Qe, {
724
- color: P(K).WHITE,
745
+ }, null, 8, ["color"]), p(nt, {
746
+ color: F(K).WHITE,
725
747
  onClick: r[2] ||= (e) => n.$emit("closeModal"),
726
748
  description: "No, cancel"
727
749
  }, null, 8, ["color"])])
728
- ])) : (T(), s("div", jt, [
729
- f(P(ue), { class: "w-12 h-12 text-green-500 mx-auto mb-4" }),
730
- c("h3", {
750
+ ])) : (E(), c("div", Ft, [
751
+ p(F(fe), { class: "w-12 h-12 text-green-500 mx-auto mb-4" }),
752
+ l("h3", {
731
753
  id: i,
732
754
  class: "mb-2 text-lg font-medium text-gray-900"
733
- }, N(t.title), 1),
734
- t.description ? (T(), s("p", Mt, N(t.description), 1)) : o("", !0),
735
- A(n.$slots, "default"),
736
- c("div", Nt, [f(Qe, {
737
- color: P(K).BLUE,
755
+ }, P(t.title), 1),
756
+ t.description ? (E(), c("p", It, P(t.description), 1)) : s("", !0),
757
+ j(n.$slots, "default"),
758
+ l("div", Lt, [p(nt, {
759
+ color: F(K).BLUE,
738
760
  onClick: r[3] ||= (e) => n.$emit("closeModal"),
739
761
  description: "OK"
740
762
  }, null, 8, ["color"])])
741
763
  ]))])], 64));
742
764
  }
743
- }), Ft = /* @__PURE__ */ p({
765
+ }), zt = /* @__PURE__ */ m({
744
766
  __name: "BaseRow",
745
767
  props: { bgColor: {
746
768
  type: String,
@@ -752,21 +774,21 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
752
774
  function n() {
753
775
  return "block p-8 border border-gray-200 rounded-xl shadow-sm dark:bg-gray-800 dark:border-gray-700 " + t.bgColor;
754
776
  }
755
- return (e, t) => (T(), s("div", { class: v(n()) }, [A(e.$slots, "default")], 2));
777
+ return (e, t) => (E(), c("div", { class: y(n()) }, [j(e.$slots, "default")], 2));
756
778
  }
757
- }), It = /* @__PURE__ */ p({
779
+ }), Bt = /* @__PURE__ */ m({
758
780
  __name: "BaseSpinner",
759
781
  props: {
760
782
  size: { default: "sm" },
761
- color: { default: "blue" }
783
+ color: { default: "emerald" }
762
784
  },
763
785
  setup(e) {
764
- let t = e, n = i(() => ({
786
+ let t = e, n = a(() => ({
765
787
  sm: "w-4 h-4 border-2",
766
788
  md: "w-6 h-6 border-2",
767
789
  lg: "w-8 h-8 border-4",
768
790
  xl: "w-12 h-12 border-4"
769
- })[t.size]), r = i(() => ({
791
+ })[t.size]), r = a(() => ({
770
792
  blue: "border-t-blue-500",
771
793
  emerald: "border-t-emerald-500",
772
794
  sky: "border-t-sky-500",
@@ -776,8 +798,8 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
776
798
  red: "border-t-red-500",
777
799
  amber: "border-t-amber-500"
778
800
  })[t.color]);
779
- return (e, t) => (T(), s("div", {
780
- class: v(["border-gray-200 rounded-full animate-spin", [n.value, r.value]]),
801
+ return (e, t) => (E(), c("div", {
802
+ class: y(["border-gray-200 dark:border-slate-700 rounded-full animate-spin", [n.value, r.value]]),
781
803
  role: "status",
782
804
  "aria-label": "Loading"
783
805
  }, null, 2));
@@ -786,7 +808,7 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
786
808
  return e.SUCCESS = "SUCCESS", e.WARNING = "WARNING", e.ERROR = "ERROR", e;
787
809
  }({}), X = /* @__PURE__ */ function(e) {
788
810
  return e.TOP_LEFT = "TOP_LEFT", e.TOP_RIGHT = "TOP_RIGHT", e.BOTTOM_LEFT = "BOTTOM_LEFT", e.BOTTOM_RIGHT = "BOTTOM_RIGHT", e;
789
- }({}), Lt = { 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" }, Rt = { class: "ml-3 text-sm font-normal" }, zt = /* @__PURE__ */ p({
811
+ }({}), Vt = { 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" }, Ht = { class: "ml-3 text-sm font-normal" }, Ut = /* @__PURE__ */ m({
790
812
  __name: "BaseToast",
791
813
  props: {
792
814
  mode: {
@@ -814,13 +836,13 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
814
836
  }
815
837
  },
816
838
  setup(e) {
817
- let t = e, n = O(!0), r = null;
839
+ let t = e, n = k(!0), r = null;
818
840
  function i() {
819
841
  n.value = !1, r &&= (clearTimeout(r), null);
820
842
  }
821
- S(() => {
843
+ C(() => {
822
844
  r = setTimeout(() => n.value = !1, t.duration);
823
- }), w(() => {
845
+ }), T(() => {
824
846
  r && clearTimeout(r);
825
847
  });
826
848
  function a() {
@@ -839,7 +861,7 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
839
861
  }
840
862
  return "inline-flex items-center justify-center flex-shrink-0 w-8 h-8 rounded-lg " + e;
841
863
  }
842
- function l() {
864
+ function o() {
843
865
  let e = "top-5 right-5";
844
866
  switch (t.positioning) {
845
867
  case X.BOTTOM_LEFT:
@@ -855,33 +877,33 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
855
877
  }
856
878
  return "fixed flex items-center w-full max-w-md p-4 space-x-4 divide-x rounded-lg " + e;
857
879
  }
858
- return (t, r) => n.value ? (T(), s("div", {
880
+ return (t, r) => n.value ? (E(), c("div", {
859
881
  key: 0,
860
882
  id: "toast-top-right",
861
- class: v(l()),
883
+ class: y(o()),
862
884
  role: "alert"
863
- }, [c("div", Lt, [
864
- e.mode == P(Y).ERROR ? (T(), s("div", {
885
+ }, [l("div", Vt, [
886
+ e.mode == F(Y).ERROR ? (E(), c("div", {
865
887
  key: 0,
866
- class: v(a())
867
- }, [f(P(ye), { class: "h-6 w-6 text-red-500" }), r[0] ||= c("span", { class: "sr-only" }, "Error icon", -1)], 2)) : e.mode == P(Y).SUCCESS ? (T(), s("div", {
888
+ class: y(a())
889
+ }, [p(F(xe), { class: "h-6 w-6 text-red-500" }), r[0] ||= l("span", { class: "sr-only" }, "Error icon", -1)], 2)) : e.mode == F(Y).SUCCESS ? (E(), c("div", {
868
890
  key: 1,
869
- class: v(a())
870
- }, [f(P(ue), { class: "h-6 w-6 text-green-500" }), r[1] ||= c("span", { class: "sr-only" }, "Check icon", -1)], 2)) : e.mode == P(Y).WARNING ? (T(), s("div", {
891
+ class: y(a())
892
+ }, [p(F(fe), { class: "h-6 w-6 text-green-500" }), r[1] ||= l("span", { class: "sr-only" }, "Check icon", -1)], 2)) : e.mode == F(Y).WARNING ? (E(), c("div", {
871
893
  key: 2,
872
- class: v(a())
873
- }, [f(P(be), { class: "h-6 w-6 text-yellow-500" }), r[2] ||= c("span", { class: "sr-only" }, "Warning icon", -1)], 2)) : o("", !0),
874
- c("div", Rt, N(e.description), 1),
875
- e.hasCloseIcon ? (T(), s("button", {
894
+ class: y(a())
895
+ }, [p(F(Se), { class: "h-6 w-6 text-yellow-500" }), r[2] ||= l("span", { class: "sr-only" }, "Warning icon", -1)], 2)) : s("", !0),
896
+ l("div", Ht, P(e.description), 1),
897
+ e.hasCloseIcon ? (E(), c("button", {
876
898
  key: 3,
877
899
  type: "button",
878
900
  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",
879
901
  "aria-label": "Close",
880
902
  onClick: i
881
- }, [r[3] ||= c("span", { class: "sr-only" }, "Close", -1), f(P(B), { class: "h-6 w-6 text-gray-500" })])) : o("", !0)
882
- ])], 2)) : o("", !0);
903
+ }, [r[3] ||= l("span", { class: "sr-only" }, "Close", -1), p(F(B), { class: "h-6 w-6 text-gray-500" })])) : s("", !0)
904
+ ])], 2)) : s("", !0);
883
905
  }
884
- }), Bt = { class: "w-13" }, Vt = /* @__PURE__ */ p({
906
+ }), Wt = { class: "w-13" }, Gt = /* @__PURE__ */ m({
885
907
  __name: "ColoredSquares",
886
908
  props: { color: {
887
909
  type: String,
@@ -898,7 +920,7 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
898
920
  "bg-yellow-300",
899
921
  "bg-purple-300",
900
922
  "bg-pink-300"
901
- ], r = O(n[Math.floor(Math.random() * n.length)]);
923
+ ], r = k(n[Math.floor(Math.random() * n.length)]);
902
924
  function i() {
903
925
  let e = "font-bold text-xs mr-2 px-2.5 py-0.5 rounded-full", n = "gray";
904
926
  switch (t.color) {
@@ -918,9 +940,9 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
918
940
  }
919
941
  return e + " bg-" + n + "-100 text-" + n + "-800";
920
942
  }
921
- return (e, t) => (T(), s("div", Bt, [c("div", { class: v(["border border-gray-300 relative aspect-square rounded-lg bg-white shadow-sm overflow-hidden flex items-center justify-center text-center", i()]) }, [A(e.$slots, "default"), c("div", { class: v(["absolute bottom-0 left-0 h-1 w-full", r.value]) }, null, 2)], 2)]));
943
+ return (e, t) => (E(), c("div", Wt, [l("div", { class: y(["border border-gray-300 relative aspect-square rounded-lg bg-white shadow-sm overflow-hidden flex items-center justify-center text-center", i()]) }, [j(e.$slots, "default"), l("div", { class: y(["absolute bottom-0 left-0 h-1 w-full", r.value]) }, null, 2)], 2)]));
922
944
  }
923
- }), Ht = { class: "flex items-start justify-between" }, Ut = { class: "min-w-0" }, Wt = /* @__PURE__ */ p({
945
+ }), Kt = { class: "flex items-start justify-between" }, qt = { class: "min-w-0" }, Jt = /* @__PURE__ */ m({
924
946
  __name: "EarningsCard",
925
947
  props: {
926
948
  title: { default: "TOTAL EARNINGS" },
@@ -965,34 +987,34 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
965
987
  iconBox: "bg-red-50 dark:bg-red-900/30",
966
988
  icon: "text-red-500"
967
989
  }
968
- }, a = i(() => {
990
+ }, i = a(() => {
969
991
  let e = Number(n.amount);
970
992
  return Number.isFinite(e) ? e : 0;
971
- }), l = i(() => n.signed && a.value < 0), u = i(() => l.value ? "red" : n.accent), d = i(() => r[u.value]), f = i(() => n.currency + a.value.toLocaleString("en-US", {
993
+ }), o = a(() => n.signed && i.value < 0), u = a(() => o.value ? "red" : n.accent), d = a(() => r[u.value]), f = a(() => n.currency + i.value.toLocaleString("en-US", {
972
994
  minimumFractionDigits: n.decimals,
973
995
  maximumFractionDigits: n.decimals
974
996
  }));
975
- return (n, r) => (T(), s("div", { class: v(["relative rounded-xl border-2 border-dashed bg-white dark:bg-slate-800", [d.value.border, t.compact ? "p-3" : "p-6"]]) }, [t.badge ? (T(), s("div", {
997
+ return (n, r) => (E(), c("div", { class: y(["relative rounded-xl border-2 border-dashed bg-white dark:bg-slate-800", [d.value.border, t.compact ? "p-3" : "p-6"]]) }, [t.badge ? (E(), c("div", {
976
998
  key: 0,
977
- class: v(["absolute right-4 top-4 rounded-md px-3 py-1 text-xs font-bold tracking-wide", d.value.badge])
978
- }, N(t.badge), 3)) : o("", !0), c("div", Ht, [c("div", Ut, [
979
- c("p", { class: v(["font-bold tracking-wide text-gray-800 dark:text-slate-200", t.compact ? "pr-8 text-xs" : "text-sm"]) }, N(t.title), 3),
980
- c("p", { class: v(["mt-1 font-bold truncate", [d.value.amount, t.compact ? "text-lg" : "text-4xl"]]) }, N(f.value), 3),
981
- c("p", { class: v(["mt-1 font-medium", [d.value.subtitle, t.compact ? "text-xs" : "text-sm"]]) }, N(t.subtitle), 3)
982
- ]), c("div", { class: v(["flex items-center justify-center", [d.value.iconBox, t.compact ? "absolute right-2 top-2 h-6 w-6 rounded-lg" : "mt-6 h-12 w-12 rounded-xl"]]) }, [(T(), s("svg", {
983
- class: v([d.value.icon, t.compact ? "h-3.5 w-3.5" : "h-6 w-6"]),
999
+ class: y(["absolute right-4 top-4 rounded-md px-3 py-1 text-xs font-bold tracking-wide", d.value.badge])
1000
+ }, P(t.badge), 3)) : s("", !0), l("div", Kt, [l("div", qt, [
1001
+ l("p", { class: y(["font-bold tracking-wide text-gray-800 dark:text-slate-200", t.compact ? "pr-8 text-xs" : "text-sm"]) }, P(t.title), 3),
1002
+ l("p", { class: y(["mt-1 font-bold truncate", [d.value.amount, t.compact ? "text-lg" : "text-4xl"]]) }, P(f.value), 3),
1003
+ l("p", { class: y(["mt-1 font-medium", [d.value.subtitle, t.compact ? "text-xs" : "text-sm"]]) }, P(t.subtitle), 3)
1004
+ ]), l("div", { class: y(["flex items-center justify-center", [d.value.iconBox, t.compact ? "absolute right-2 top-2 h-6 w-6 rounded-lg" : "mt-6 h-12 w-12 rounded-xl"]]) }, [(E(), c("svg", {
1005
+ class: y([d.value.icon, t.compact ? "h-3.5 w-3.5" : "h-6 w-6"]),
984
1006
  viewBox: "0 0 24 24",
985
1007
  fill: "none",
986
1008
  stroke: "currentColor",
987
1009
  "stroke-width": "2.5",
988
1010
  "stroke-linecap": "round",
989
1011
  "stroke-linejoin": "round"
990
- }, [l.value ? (T(), s(e, { key: 0 }, [r[0] ||= c("polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7" }, null, -1), r[1] ||= c("polyline", { points: "16 17 22 17 22 11" }, null, -1)], 64)) : (T(), s(e, { key: 1 }, [r[2] ||= c("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }, null, -1), r[3] ||= c("polyline", { points: "16 7 22 7 22 13" }, null, -1)], 64))], 2))], 2)])], 2));
1012
+ }, [o.value ? (E(), c(e, { key: 0 }, [r[0] ||= l("polyline", { points: "22 17 13.5 8.5 8.5 13.5 2 7" }, null, -1), r[1] ||= l("polyline", { points: "16 17 22 17 22 11" }, null, -1)], 64)) : (E(), c(e, { key: 1 }, [r[2] ||= l("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }, null, -1), r[3] ||= l("polyline", { points: "16 7 22 7 22 13" }, null, -1)], 64))], 2))], 2)])], 2));
991
1013
  }
992
- }), Gt = {
1014
+ }), Yt = {
993
1015
  key: 0,
994
1016
  class: "font-bold text-green-800 dark:text-green-400"
995
- }, Kt = { key: 0 }, qt = { key: 0 }, Jt = "font-bold", Yt = /* @__PURE__ */ p({
1017
+ }, Xt = { key: 0 }, Zt = { key: 0 }, Qt = "font-bold", $t = /* @__PURE__ */ m({
996
1018
  __name: "EuroAmount",
997
1019
  props: {
998
1020
  amount: {
@@ -1011,21 +1033,21 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
1011
1033
  }
1012
1034
  },
1013
1035
  setup(t) {
1014
- let n = t, r = i(() => n.amount !== null && n.amount !== void 0), a = i(() => r.value && n.amount < 0), c = i(() => n.beforeAmount === null || n.beforeAmount === void 0 ? !1 : n.amount < n.beforeAmount), l = i(() => a.value || c.value), u = i(() => !a.value && !c.value && n.beforeAmount !== null && n.beforeAmount !== void 0);
1015
- return (n, i) => (T(), s(e, null, [r.value && u.value ? (T(), s("span", Gt, [d(N(t.amount) + " ", 1), t.showCurrency ? (T(), s("span", Kt, "€")) : o("", !0)])) : o("", !0), r.value && !u.value ? (T(), s("span", {
1036
+ let n = t, r = a(() => n.amount !== null && n.amount !== void 0), i = a(() => r.value && n.amount < 0), o = a(() => n.beforeAmount === null || n.beforeAmount === void 0 ? !1 : n.amount < n.beforeAmount), l = a(() => i.value || o.value), u = a(() => !i.value && !o.value && n.beforeAmount !== null && n.beforeAmount !== void 0);
1037
+ return (n, i) => (E(), c(e, null, [r.value && u.value ? (E(), c("span", Yt, [f(P(t.amount) + " ", 1), t.showCurrency ? (E(), c("span", Xt, "€")) : s("", !0)])) : s("", !0), r.value && !u.value ? (E(), c("span", {
1016
1038
  key: 1,
1017
- class: v([Jt, l.value ? "text-red-800 dark:text-red-400" : "text-gray-800 dark:text-gray-200"])
1018
- }, [d(N(t.amount) + " ", 1), t.showCurrency ? (T(), s("span", qt, "€")) : o("", !0)], 2)) : o("", !0)], 64));
1039
+ class: y([Qt, l.value ? "text-red-800 dark:text-red-400" : "text-gray-800 dark:text-gray-200"])
1040
+ }, [f(P(t.amount) + " ", 1), t.showCurrency ? (E(), c("span", Zt, "€")) : s("", !0)], 2)) : s("", !0)], 64));
1019
1041
  }
1020
- }), Xt = { "aria-label": "Pagination" }, Zt = { class: "flex list-none p-0 m-0" }, Qt = [
1042
+ }), en = { "aria-label": "Pagination" }, tn = { class: "flex list-none p-0 m-0" }, nn = [
1021
1043
  "aria-current",
1022
1044
  "aria-label",
1023
1045
  "onClick"
1024
- ], $t = {
1046
+ ], rn = {
1025
1047
  key: 1,
1026
1048
  "aria-hidden": "true",
1027
1049
  class: "inline-block border border-gray-300 dark:border-gray-600 rounded-lg p-3 text-black dark:text-gray-200 cursor-not-allowed"
1028
- }, en = /* @__PURE__ */ p({
1050
+ }, an = /* @__PURE__ */ m({
1029
1051
  __name: "Pagination",
1030
1052
  props: {
1031
1053
  totalItems: {
@@ -1039,7 +1061,7 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
1039
1061
  },
1040
1062
  emits: ["page-changed"],
1041
1063
  setup(t, { emit: n }) {
1042
- let r = t, i = O(1), a = O(0), o = O([]), l = n;
1064
+ let r = t, i = k(1), a = k(0), o = k([]), s = n;
1043
1065
  function u(e) {
1044
1066
  if (a.value <= 5) {
1045
1067
  o.value = Array.from({ length: a.value }, (e, t) => t + 1);
@@ -1051,33 +1073,33 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
1051
1073
  r < a.value && (r < a.value - 1 && t.push(0), t.push(a.value)), o.value = t;
1052
1074
  }
1053
1075
  function d(e) {
1054
- e === i.value || e < 1 || e > a.value || (i.value = e, u(e), l("page-changed", e));
1076
+ e === i.value || e < 1 || e > a.value || (i.value = e, u(e), s("page-changed", e));
1055
1077
  }
1056
1078
  return I(() => [r.totalItems, r.itemsPerPage], () => {
1057
1079
  let e = Number(r.itemsPerPage) > 0 ? Number(r.itemsPerPage) : 20, t = Number(r.totalItems) > 0 ? Number(r.totalItems) : 0;
1058
1080
  a.value = Math.ceil(t / e), i.value > a.value && (i.value = Math.max(1, a.value)), u(i.value);
1059
- }, { immediate: !0 }), (t, n) => (T(), s("nav", Xt, [c("ul", Zt, [(T(!0), s(e, null, k(o.value, (e, t) => (T(), s("li", {
1081
+ }, { immediate: !0 }), (t, n) => (E(), c("nav", en, [l("ul", tn, [(E(!0), c(e, null, A(o.value, (e, t) => (E(), c("li", {
1060
1082
  key: t,
1061
1083
  class: "mr-1"
1062
- }, [e === 0 ? (T(), s("span", $t, "...")) : (T(), s("button", {
1084
+ }, [e === 0 ? (E(), c("span", rn, "...")) : (E(), c("button", {
1063
1085
  key: 0,
1064
1086
  type: "button",
1065
1087
  "aria-current": e === i.value ? "page" : void 0,
1066
1088
  "aria-label": `Go to page ${e}`,
1067
1089
  onClick: (t) => d(e),
1068
- class: v(["inline-block min-w-[44px] border border-gray-300 dark:border-gray-600 rounded-lg p-3 text-black dark:text-gray-200 cursor-pointer transition-colors hover:bg-gray-300 dark:hover:bg-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", { "active font-bold bg-gray-200 dark:bg-gray-700": e === i.value }])
1069
- }, N(e), 11, Qt))]))), 128))])]));
1090
+ class: y(["inline-block min-w-[44px] border border-gray-300 dark:border-gray-600 rounded-lg p-3 text-black dark:text-gray-200 cursor-pointer transition-colors hover:bg-gray-300 dark:hover:bg-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", { "active font-bold bg-gray-200 dark:bg-gray-700": e === i.value }])
1091
+ }, P(e), 11, nn))]))), 128))])]));
1070
1092
  }
1071
- }), tn = { key: 0 }, nn = {
1093
+ }), on = { key: 0 }, sn = {
1072
1094
  key: 0,
1073
1095
  class: "flex items-center space-x-2"
1074
- }, rn = {
1096
+ }, cn = {
1075
1097
  key: 1,
1076
1098
  class: "flex items-center space-x-2"
1077
- }, an = {
1099
+ }, ln = {
1078
1100
  key: 2,
1079
1101
  class: "flex items-center space-x-2"
1080
- }, on = /* @__PURE__ */ p({
1102
+ }, un = /* @__PURE__ */ m({
1081
1103
  __name: "TrendArrow",
1082
1104
  props: {
1083
1105
  number: {
@@ -1090,58 +1112,58 @@ var Fe = { class: "min-w-0 flex-1" }, Ie = {
1090
1112
  }
1091
1113
  },
1092
1114
  setup(e) {
1093
- let t = e, n = i(() => t.number !== null && t.number !== void 0 && t.number < 0), r = i(() => t.number === 0);
1094
- return (i, a) => e.number !== null && e.number !== void 0 ? (T(), s("div", tn, [n.value ? (T(), s("span", nn, [f(ze, { color: P(G).RED }, {
1095
- default: L(() => [d(N(e.number) + N(t.icon), 1)]),
1115
+ let t = e, n = a(() => t.number !== null && t.number !== void 0 && t.number < 0), r = a(() => t.number === 0);
1116
+ return (i, a) => e.number !== null && e.number !== void 0 ? (E(), c("div", on, [n.value ? (E(), c("span", sn, [p(Ue, { color: F(G).RED }, {
1117
+ default: L(() => [f(P(e.number) + P(t.icon), 1)]),
1096
1118
  _: 1
1097
- }, 8, ["color"]), f(P(oe), { class: "h-5 w-5 text-red-500" })])) : r.value ? (T(), s("span", rn, [f(ze, { color: P(G).GRAY }, {
1098
- default: L(() => [d(N(e.number) + N(t.icon), 1)]),
1119
+ }, 8, ["color"]), p(F(se), { class: "h-5 w-5 text-red-500" })])) : r.value ? (E(), c("span", cn, [p(Ue, { color: F(G).GRAY }, {
1120
+ default: L(() => [f(P(e.number) + P(t.icon), 1)]),
1099
1121
  _: 1
1100
- }, 8, ["color"]), f(P(we), { class: "h-5 w-5 text-gray-400" })])) : (T(), s("span", an, [f(ze, { color: P(G).GREEN }, {
1101
- default: L(() => [d(N(e.number) + N(t.icon), 1)]),
1122
+ }, 8, ["color"]), p(F(Ee), { class: "h-5 w-5 text-gray-400" })])) : (E(), c("span", ln, [p(Ue, { color: F(G).GREEN }, {
1123
+ default: L(() => [f(P(e.number) + P(t.icon), 1)]),
1102
1124
  _: 1
1103
- }, 8, ["color"]), f(P(se), { class: "h-5 w-5 text-green-500" })]))])) : o("", !0);
1125
+ }, 8, ["color"]), p(F(le), { class: "h-5 w-5 text-green-500" })]))])) : s("", !0);
1104
1126
  }
1105
1127
  });
1106
1128
  //#endregion
1107
1129
  //#region src/composables/useThemeClasses.ts
1108
1130
  function Z() {
1109
1131
  let { isDark: e } = W();
1110
- return E({
1111
- card: i(() => e.value ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"),
1112
- cardAlt: i(() => e.value ? "bg-gray-900 border-gray-700" : "bg-white border-gray-200"),
1113
- pageBg: i(() => e.value ? "bg-gray-900" : "bg-gray-50"),
1114
- border: i(() => e.value ? "border-gray-700" : "border-gray-200"),
1115
- divider: i(() => e.value ? "border-gray-800" : "border-gray-100"),
1116
- primaryText: i(() => e.value ? "text-white" : "text-gray-900"),
1117
- primaryTextSoft: i(() => e.value ? "text-gray-100" : "text-gray-800"),
1118
- bodyText: i(() => e.value ? "text-gray-200" : "text-gray-700"),
1119
- label: i(() => e.value ? "text-gray-300" : "text-gray-700"),
1120
- mutedText: i(() => e.value ? "text-gray-400" : "text-gray-600"),
1121
- subtleText: i(() => e.value ? "text-gray-500" : "text-gray-600"),
1122
- dimText: i(() => e.value ? "text-gray-500" : "text-gray-400"),
1123
- dimTextAlt: i(() => e.value ? "text-gray-400" : "text-gray-500"),
1124
- illustration: i(() => e.value ? "text-gray-600" : "text-gray-300"),
1125
- input: i(() => e.value ? "bg-gray-700 border-gray-600 text-white" : "bg-gray-50 border-gray-300 text-gray-900"),
1126
- inputWithPlaceholder: i(() => 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"),
1127
- ghostButton: i(() => 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"),
1128
- emeraldText: i(() => e.value ? "text-emerald-400" : "text-emerald-600"),
1129
- amberText: i(() => e.value ? "text-amber-400" : "text-amber-600"),
1130
- amberTextStrong: i(() => e.value ? "text-amber-300" : "text-amber-700"),
1131
- redText: i(() => e.value ? "text-red-400" : "text-red-500")
1132
+ return D({
1133
+ card: a(() => e.value ? "bg-gray-800 border-gray-700" : "bg-white border-gray-200"),
1134
+ cardAlt: a(() => e.value ? "bg-gray-900 border-gray-700" : "bg-white border-gray-200"),
1135
+ pageBg: a(() => e.value ? "bg-gray-900" : "bg-gray-50"),
1136
+ border: a(() => e.value ? "border-gray-700" : "border-gray-200"),
1137
+ divider: a(() => e.value ? "border-gray-800" : "border-gray-100"),
1138
+ primaryText: a(() => e.value ? "text-white" : "text-gray-900"),
1139
+ primaryTextSoft: a(() => e.value ? "text-gray-100" : "text-gray-800"),
1140
+ bodyText: a(() => e.value ? "text-gray-200" : "text-gray-700"),
1141
+ label: a(() => e.value ? "text-gray-300" : "text-gray-700"),
1142
+ mutedText: a(() => e.value ? "text-gray-400" : "text-gray-600"),
1143
+ subtleText: a(() => e.value ? "text-gray-500" : "text-gray-600"),
1144
+ dimText: a(() => e.value ? "text-gray-500" : "text-gray-400"),
1145
+ dimTextAlt: a(() => e.value ? "text-gray-400" : "text-gray-500"),
1146
+ illustration: a(() => e.value ? "text-gray-600" : "text-gray-300"),
1147
+ input: a(() => e.value ? "bg-gray-700 border-gray-600 text-white" : "bg-gray-50 border-gray-300 text-gray-900"),
1148
+ inputWithPlaceholder: a(() => 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"),
1149
+ ghostButton: a(() => 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"),
1150
+ emeraldText: a(() => e.value ? "text-emerald-400" : "text-emerald-600"),
1151
+ amberText: a(() => e.value ? "text-amber-400" : "text-amber-600"),
1152
+ amberTextStrong: a(() => e.value ? "text-amber-300" : "text-amber-700"),
1153
+ redText: a(() => e.value ? "text-red-400" : "text-red-500")
1132
1154
  });
1133
1155
  }
1134
1156
  //#endregion
1135
1157
  //#region src/composables/useEscapeKey.ts
1136
- function sn(e) {
1158
+ function dn(e) {
1137
1159
  function t(t) {
1138
1160
  t.key === "Escape" && e();
1139
1161
  }
1140
- S(() => document.addEventListener("keydown", t)), x(() => document.removeEventListener("keydown", t));
1162
+ C(() => document.addEventListener("keydown", t)), S(() => document.removeEventListener("keydown", t));
1141
1163
  }
1142
1164
  //#endregion
1143
1165
  //#region src/components/BaseModalShell.vue?vue&type=script&setup=true&lang.ts
1144
- var cn = { class: "flex items-start gap-4 min-w-0" }, ln = { class: "flex-1 min-w-0" }, un = { class: "p-6 overflow-y-auto flex-1" }, dn = { class: "p-6" }, fn = { class: "flex items-start gap-4" }, pn = { class: "flex-1" }, mn = { class: "mt-4" }, hn = { class: "mt-6 flex gap-3 justify-end" }, gn = /* @__PURE__ */ p({
1166
+ var fn = { class: "flex items-start gap-4 min-w-0" }, pn = { class: "flex-1 min-w-0" }, mn = { class: "p-6 overflow-y-auto flex-1" }, hn = { class: "p-6" }, gn = { class: "flex items-start gap-4" }, _n = { class: "flex-1" }, vn = { class: "mt-4" }, yn = { class: "mt-6 flex gap-3 justify-end" }, bn = /* @__PURE__ */ m({
1145
1167
  __name: "BaseModalShell",
1146
1168
  props: {
1147
1169
  title: {},
@@ -1161,55 +1183,55 @@ var cn = { class: "flex items-start gap-4 min-w-0" }, ln = { class: "flex-1 min-
1161
1183
  },
1162
1184
  emits: ["cancel", "backdrop"],
1163
1185
  setup(e, { emit: n }) {
1164
- let r = e, l = n, { isDark: u } = W(), d = Z(), f = `modal-title-${Math.random().toString(36).slice(2, 9)}`, p = i(() => u.value ? "bg-gray-900 border border-gray-700" : "bg-white border border-gray-200"), m = i(() => r.iconBgClass || (u.value ? "bg-emerald-900/30" : "bg-emerald-50"));
1186
+ let r = e, i = n, { isDark: u } = W(), d = Z(), f = `modal-title-${Math.random().toString(36).slice(2, 9)}`, p = a(() => u.value ? "bg-gray-900 border border-gray-700" : "bg-white border border-gray-200"), m = a(() => r.iconBgClass || (u.value ? "bg-emerald-900/30" : "bg-emerald-50"));
1165
1187
  function h() {
1166
- l("backdrop"), r.manualClose || l("cancel");
1188
+ i("backdrop"), r.manualClose || i("cancel");
1167
1189
  }
1168
- return sn(() => {
1169
- r.manualClose || l("cancel");
1170
- }), (n, r) => (T(), a(t, { to: "body" }, [c("div", {
1190
+ return dn(() => {
1191
+ r.manualClose || i("cancel");
1192
+ }), (n, r) => (E(), o(t, { to: "body" }, [l("div", {
1171
1193
  class: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
1172
1194
  role: "dialog",
1173
1195
  "aria-modal": "true",
1174
1196
  "aria-labelledby": f,
1175
1197
  onClick: h
1176
- }, [e.scrollable ? (T(), s("div", {
1198
+ }, [e.scrollable ? (E(), c("div", {
1177
1199
  key: 0,
1178
- class: v(["relative w-full mx-4 rounded-lg shadow-xl max-h-[90vh] flex flex-col", [e.maxWidthClass, p.value]]),
1200
+ class: y(["relative w-full mx-4 rounded-lg shadow-xl max-h-[90vh] flex flex-col", [e.maxWidthClass, p.value]]),
1179
1201
  onClick: r[0] ||= z(() => {}, ["stop"])
1180
1202
  }, [
1181
- c("div", { class: v(["flex items-start justify-between gap-4 p-6 border-b shrink-0", P(d).border]) }, [c("div", cn, [A(n.$slots, "icon", {}, () => [c("div", { class: v(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", m.value]) }, [(T(), a(M(e.icon), {
1182
- class: v(["h-6 w-6", e.iconClass]),
1203
+ l("div", { class: y(["flex items-start justify-between gap-4 p-6 border-b shrink-0", F(d).border]) }, [l("div", fn, [j(n.$slots, "icon", {}, () => [l("div", { class: y(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", m.value]) }, [(E(), o(N(e.icon), {
1204
+ class: y(["h-6 w-6", e.iconClass]),
1183
1205
  "aria-hidden": "true"
1184
- }, null, 8, ["class"]))], 2)]), c("div", ln, [c("h3", {
1206
+ }, null, 8, ["class"]))], 2)]), l("div", pn, [l("h3", {
1185
1207
  id: f,
1186
- class: v(["text-lg font-medium", P(d).primaryText])
1187
- }, N(e.title), 3), e.subtitle ? (T(), s("p", {
1208
+ class: y(["text-lg font-medium", F(d).primaryText])
1209
+ }, P(e.title), 3), e.subtitle ? (E(), c("p", {
1188
1210
  key: 0,
1189
- class: v(["text-sm mt-1 break-all", P(d).mutedText])
1190
- }, N(e.subtitle), 3)) : o("", !0)])]), A(n.$slots, "header-actions")], 2),
1191
- c("div", un, [A(n.$slots, "default")]),
1192
- n.$slots.footer ? (T(), s("div", {
1211
+ class: y(["text-sm mt-1 break-all", F(d).mutedText])
1212
+ }, P(e.subtitle), 3)) : s("", !0)])]), j(n.$slots, "header-actions")], 2),
1213
+ l("div", mn, [j(n.$slots, "default")]),
1214
+ n.$slots.footer ? (E(), c("div", {
1193
1215
  key: 0,
1194
- class: v(["flex gap-3 justify-end p-6 border-t shrink-0", P(d).border])
1195
- }, [A(n.$slots, "footer")], 2)) : o("", !0)
1196
- ], 2)) : (T(), s("div", {
1216
+ class: y(["flex gap-3 justify-end p-6 border-t shrink-0", F(d).border])
1217
+ }, [j(n.$slots, "footer")], 2)) : s("", !0)
1218
+ ], 2)) : (E(), c("div", {
1197
1219
  key: 1,
1198
- class: v(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, p.value]]),
1220
+ class: y(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, p.value]]),
1199
1221
  onClick: r[1] ||= z(() => {}, ["stop"])
1200
- }, [c("div", dn, [
1201
- c("div", fn, [A(n.$slots, "icon", {}, () => [c("div", { class: v(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", m.value]) }, [(T(), a(M(e.icon), {
1202
- class: v(["h-6 w-6", e.iconClass]),
1222
+ }, [l("div", hn, [
1223
+ l("div", gn, [j(n.$slots, "icon", {}, () => [l("div", { class: y(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", m.value]) }, [(E(), o(N(e.icon), {
1224
+ class: y(["h-6 w-6", e.iconClass]),
1203
1225
  "aria-hidden": "true"
1204
- }, null, 8, ["class"]))], 2)]), c("div", pn, [c("h3", {
1226
+ }, null, 8, ["class"]))], 2)]), l("div", _n, [l("h3", {
1205
1227
  id: f,
1206
- class: v(["text-lg font-medium", P(d).primaryText])
1207
- }, N(e.title), 3)])]),
1208
- c("div", mn, [A(n.$slots, "default")]),
1209
- c("div", hn, [A(n.$slots, "footer")])
1228
+ class: y(["text-lg font-medium", F(d).primaryText])
1229
+ }, P(e.title), 3)])]),
1230
+ l("div", vn, [j(n.$slots, "default")]),
1231
+ l("div", yn, [j(n.$slots, "footer")])
1210
1232
  ])], 2))])]));
1211
1233
  }
1212
- }), _n = ["aria-expanded"], vn = { class: "flex items-center gap-3" }, yn = /* @__PURE__ */ p({
1234
+ }), xn = ["aria-expanded"], Sn = { class: "flex items-center gap-3" }, Cn = /* @__PURE__ */ m({
1213
1235
  __name: "BaseCollapsibleSection",
1214
1236
  props: {
1215
1237
  title: {},
@@ -1219,35 +1241,35 @@ var cn = { class: "flex items-start gap-4 min-w-0" }, ln = { class: "flex-1 min-
1219
1241
  },
1220
1242
  emits: ["toggle"],
1221
1243
  setup(e, { emit: t }) {
1222
- let n = e, r = t, { isDark: a } = W(), l = Z(), u = i(() => a.value ? "text-gray-100" : "text-gray-700"), d = i(() => a.value ? "bg-gray-800/50 hover:bg-gray-800 border-gray-700" : "bg-gray-50 hover:bg-gray-100 border-gray-200"), f = i(() => a.value ? "bg-emerald-500/15 text-emerald-400" : "bg-emerald-50 text-emerald-700"), p = i(() => n.bodyClass === void 0 ? a.value ? "bg-gray-800" : "bg-white" : n.bodyClass);
1223
- return (t, n) => (T(), s("section", { class: v(["rounded-xl border transition-colors", P(l).cardAlt]) }, [c("button", {
1244
+ let n = e, r = t, { isDark: i } = W(), o = Z(), u = a(() => i.value ? "text-gray-100" : "text-gray-700"), d = a(() => i.value ? "bg-gray-800/50 hover:bg-gray-800 border-gray-700" : "bg-gray-50 hover:bg-gray-100 border-gray-200"), f = a(() => i.value ? "bg-emerald-500/15 text-emerald-400" : "bg-emerald-50 text-emerald-700"), p = a(() => n.bodyClass === void 0 ? i.value ? "bg-gray-800" : "bg-white" : n.bodyClass);
1245
+ return (t, n) => (E(), c("section", { class: y(["rounded-xl border transition-colors", F(o).cardAlt]) }, [l("button", {
1224
1246
  type: "button",
1225
- class: v(["w-full flex items-center justify-between p-4 text-left transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [d.value, e.collapsed ? "rounded-xl" : "rounded-t-xl"]]),
1247
+ class: y(["w-full flex items-center justify-between p-4 text-left transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [d.value, e.collapsed ? "rounded-xl" : "rounded-t-xl"]]),
1226
1248
  "aria-expanded": !e.collapsed,
1227
1249
  onClick: n[0] ||= (e) => r("toggle")
1228
- }, [c("div", vn, [c("h2", { class: v(["text-base font-semibold", u.value]) }, N(e.title), 3), e.badge ? (T(), s("span", {
1250
+ }, [l("div", Sn, [l("h2", { class: y(["text-base font-semibold", u.value]) }, P(e.title), 3), e.badge ? (E(), c("span", {
1229
1251
  key: 0,
1230
- class: v(["text-xs px-2 py-0.5 rounded-full", f.value])
1231
- }, N(e.badge), 3)) : o("", !0)]), (T(), s("svg", {
1232
- class: v(["w-5 h-5 transition-transform", [e.collapsed ? "" : "rotate-180", P(l).dimTextAlt]]),
1252
+ class: y(["text-xs px-2 py-0.5 rounded-full", f.value])
1253
+ }, P(e.badge), 3)) : s("", !0)]), (E(), c("svg", {
1254
+ class: y(["w-5 h-5 transition-transform", [e.collapsed ? "" : "rotate-180", F(o).dimTextAlt]]),
1233
1255
  fill: "none",
1234
1256
  viewBox: "0 0 24 24",
1235
1257
  stroke: "currentColor",
1236
1258
  "stroke-width": "2",
1237
1259
  "aria-hidden": "true"
1238
- }, [...n[1] ||= [c("path", {
1260
+ }, [...n[1] ||= [l("path", {
1239
1261
  "stroke-linecap": "round",
1240
1262
  "stroke-linejoin": "round",
1241
1263
  d: "M19 9l-7 7-7-7"
1242
- }, null, -1)]], 2))], 10, _n), R(c("div", { class: v(["p-6 border-t rounded-b-xl", [P(l).border, p.value]]) }, [A(t.$slots, "default")], 2), [[ie, !e.collapsed]])], 2));
1264
+ }, null, -1)]], 2))], 10, xn), R(l("div", { class: y(["p-6 border-t rounded-b-xl", [F(o).border, p.value]]) }, [j(t.$slots, "default")], 2), [[ae, !e.collapsed]])], 2));
1243
1265
  }
1244
- }), bn = ["disabled"], xn = ["disabled"], Sn = {
1266
+ }), wn = ["disabled"], Tn = ["disabled"], En = {
1245
1267
  key: 0,
1246
1268
  class: "w-4 h-4 animate-spin",
1247
1269
  fill: "none",
1248
1270
  viewBox: "0 0 24 24",
1249
1271
  "aria-hidden": "true"
1250
- }, Cn = /* @__PURE__ */ p({
1272
+ }, Dn = /* @__PURE__ */ m({
1251
1273
  __name: "BaseConfirmModal",
1252
1274
  props: {
1253
1275
  title: {},
@@ -1263,44 +1285,44 @@ var cn = { class: "flex items-start gap-4 min-w-0" }, ln = { class: "flex-1 min-
1263
1285
  },
1264
1286
  emits: ["confirm", "cancel"],
1265
1287
  setup(e, { emit: t }) {
1266
- let n = e, r = t, { isDark: i } = W(), l = Z();
1288
+ let n = e, r = t, { isDark: i } = W(), a = Z();
1267
1289
  function u() {
1268
1290
  n.submitting || r("confirm");
1269
1291
  }
1270
- function f() {
1292
+ function d() {
1271
1293
  n.submitting || r("cancel");
1272
1294
  }
1273
- return (t, n) => (T(), a(gn, {
1295
+ return (t, n) => (E(), o(bn, {
1274
1296
  title: e.title,
1275
- icon: P(be),
1276
- "icon-bg-class": e.variant === "danger" ? P(i) ? "bg-red-900/30" : "bg-red-50" : P(i) ? "bg-amber-900/30" : "bg-amber-50",
1297
+ icon: F(Se),
1298
+ "icon-bg-class": e.variant === "danger" ? F(i) ? "bg-red-900/30" : "bg-red-50" : F(i) ? "bg-amber-900/30" : "bg-amber-50",
1277
1299
  "icon-class": e.variant === "danger" ? "text-red-600" : "text-amber-600",
1278
1300
  "manual-close": e.submitting,
1279
- onCancel: f
1301
+ onCancel: d
1280
1302
  }, {
1281
- footer: L(() => [c("button", {
1303
+ footer: L(() => [l("button", {
1282
1304
  type: "button",
1283
1305
  disabled: e.submitting,
1284
- class: v(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [P(l).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1285
- onClick: f
1286
- }, N(e.cancelText), 11, bn), c("button", {
1306
+ class: y(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [F(a).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1307
+ onClick: d
1308
+ }, P(e.cancelText), 11, wn), l("button", {
1287
1309
  type: "button",
1288
1310
  disabled: e.submitting,
1289
- class: v(["inline-flex items-center justify-center gap-2 px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2", [e.variant === "danger" ? "focus-visible:ring-red-500" : "focus-visible:ring-emerald-500", e.variant === "danger" ? e.submitting ? "bg-red-400 cursor-not-allowed" : "bg-red-600 hover:bg-red-700 cursor-pointer" : e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1311
+ class: y(["inline-flex items-center justify-center gap-2 px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2", [e.variant === "danger" ? "focus-visible:ring-red-500" : "focus-visible:ring-emerald-500", e.variant === "danger" ? e.submitting ? "bg-red-400 cursor-not-allowed" : "bg-red-600 hover:bg-red-700 cursor-pointer" : e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1290
1312
  onClick: u
1291
- }, [e.submitting ? (T(), s("svg", Sn, [...n[0] ||= [c("circle", {
1313
+ }, [e.submitting ? (E(), c("svg", En, [...n[0] ||= [l("circle", {
1292
1314
  class: "opacity-25",
1293
1315
  cx: "12",
1294
1316
  cy: "12",
1295
1317
  r: "10",
1296
1318
  stroke: "currentColor",
1297
1319
  "stroke-width": "4"
1298
- }, null, -1), c("path", {
1320
+ }, null, -1), l("path", {
1299
1321
  class: "opacity-75",
1300
1322
  fill: "currentColor",
1301
1323
  d: "M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"
1302
- }, null, -1)]])) : o("", !0), d(" " + N(e.submitting ? e.submittingText : e.confirmText), 1)], 10, xn)]),
1303
- default: L(() => [A(t.$slots, "message", {}, () => [c("p", { class: v(["text-sm", P(i) ? "text-gray-300" : "text-gray-600"]) }, N(e.message), 3)]), A(t.$slots, "default")]),
1324
+ }, null, -1)]])) : s("", !0), f(" " + P(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Tn)]),
1325
+ default: L(() => [j(t.$slots, "message", {}, () => [l("p", { class: y(["text-sm", F(i) ? "text-gray-300" : "text-gray-600"]) }, P(e.message), 3)]), j(t.$slots, "default")]),
1304
1326
  _: 3
1305
1327
  }, 8, [
1306
1328
  "title",
@@ -1310,7 +1332,7 @@ var cn = { class: "flex items-start gap-4 min-w-0" }, ln = { class: "flex-1 min-
1310
1332
  "manual-close"
1311
1333
  ]));
1312
1334
  }
1313
- }), wn = { class: "mt-4" }, Tn = ["placeholder"], En = ["disabled"], Dn = /* @__PURE__ */ p({
1335
+ }), On = { class: "mt-4" }, kn = ["placeholder"], An = ["disabled"], jn = /* @__PURE__ */ m({
1314
1336
  __name: "BaseTextInputModal",
1315
1337
  props: {
1316
1338
  title: {},
@@ -1328,9 +1350,9 @@ var cn = { class: "flex items-start gap-4 min-w-0" }, ln = { class: "flex-1 min-
1328
1350
  },
1329
1351
  emits: ["confirm", "cancel"],
1330
1352
  setup(e, { emit: t }) {
1331
- let n = e, r = t, { isDark: i } = W(), o = Z(), s = O(n.initialValue), u = O(null);
1332
- S(async () => {
1333
- await _(), u.value?.focus();
1353
+ let n = e, r = t, { isDark: i } = W(), a = Z(), s = k(n.initialValue), c = k(null);
1354
+ C(async () => {
1355
+ await v(), c.value?.focus();
1334
1356
  });
1335
1357
  function d() {
1336
1358
  s.value.trim() && !n.submitting && r("confirm", s.value.trim());
@@ -1341,39 +1363,39 @@ var cn = { class: "flex items-start gap-4 min-w-0" }, ln = { class: "flex-1 min-
1341
1363
  function p() {
1342
1364
  s.value.trim() === (n.initialValue ?? "").trim() && f();
1343
1365
  }
1344
- return sn(f), (t, n) => (T(), a(gn, {
1366
+ return dn(f), (t, n) => (E(), o(bn, {
1345
1367
  title: e.title,
1346
- icon: P(ve),
1368
+ icon: F(be),
1347
1369
  "manual-close": "",
1348
1370
  onBackdrop: p
1349
- }, l({
1350
- footer: L(() => [c("button", {
1371
+ }, u({
1372
+ footer: L(() => [l("button", {
1351
1373
  type: "button",
1352
- class: v(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", P(o).ghostButton]),
1374
+ class: y(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(a).ghostButton]),
1353
1375
  onClick: f
1354
- }, N(e.cancelText), 3), c("button", {
1376
+ }, P(e.cancelText), 3), l("button", {
1355
1377
  type: "button",
1356
1378
  disabled: !s.value.trim() || e.submitting,
1357
- class: v(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", [!s.value.trim() || e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1379
+ class: y(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", [!s.value.trim() || e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1358
1380
  onClick: d
1359
- }, N(e.submitting ? e.submittingText : e.confirmText), 11, En)]),
1360
- default: L(() => [c("p", { class: v(["text-sm", P(i) ? "text-gray-300" : "text-gray-600"]) }, N(e.message), 3), c("div", wn, [c("label", { class: v(["block text-sm font-medium mb-1", P(o).label]) }, N(e.inputLabel), 3), R(c("input", {
1381
+ }, P(e.submitting ? e.submittingText : e.confirmText), 11, An)]),
1382
+ default: L(() => [l("p", { class: y(["text-sm", F(i) ? "text-gray-300" : "text-gray-600"]) }, P(e.message), 3), l("div", On, [l("label", { class: y(["block text-sm font-medium mb-1", F(a).label]) }, P(e.inputLabel), 3), R(l("input", {
1361
1383
  ref_key: "nameInput",
1362
- ref: u,
1384
+ ref: c,
1363
1385
  "onUpdate:modelValue": n[0] ||= (e) => s.value = e,
1364
1386
  type: "text",
1365
1387
  placeholder: e.placeholder,
1366
- class: v(["w-full px-3 py-2 rounded-md border text-sm transition-colors", P(i) ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:outline-none focus:border-emerald-500" : "bg-white border-gray-300 text-gray-900 placeholder-gray-400 focus:outline-none focus:border-emerald-500"]),
1367
- onKeyup: ae(d, ["enter"])
1368
- }, null, 42, Tn), [[re, s.value]])])]),
1388
+ class: y(["w-full px-3 py-2 rounded-md border text-sm transition-colors", F(i) ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:outline-none focus:border-emerald-500" : "bg-white border-gray-300 text-gray-900 placeholder-gray-400 focus:outline-none focus:border-emerald-500"]),
1389
+ onKeyup: oe(d, ["enter"])
1390
+ }, null, 42, kn), [[ie, s.value]])])]),
1369
1391
  _: 2
1370
1392
  }, [t.$slots.icon ? {
1371
1393
  name: "icon",
1372
- fn: L(() => [A(t.$slots, "icon")]),
1394
+ fn: L(() => [j(t.$slots, "icon")]),
1373
1395
  key: "0"
1374
1396
  } : void 0]), 1032, ["title", "icon"]));
1375
1397
  }
1376
- }), On = { class: "flex items-center justify-center min-h-[60vh]" }, kn = { class: "text-center px-6" }, An = /* @__PURE__ */ p({
1398
+ }), Mn = { class: "flex items-center justify-center min-h-[60vh]" }, Nn = { class: "text-center px-6" }, Pn = /* @__PURE__ */ m({
1377
1399
  __name: "BaseNotFoundPage",
1378
1400
  props: {
1379
1401
  code: { default: "404" },
@@ -1382,33 +1404,33 @@ var cn = { class: "flex items-start gap-4 min-w-0" }, ln = { class: "flex-1 min-
1382
1404
  homeLabel: { default: "Go home" }
1383
1405
  },
1384
1406
  setup(e) {
1385
- let t = e, n = Ae(), { isDark: r } = W(), i = Z();
1407
+ let t = e, n = Me(), { isDark: r } = W(), i = Z();
1386
1408
  function a() {
1387
1409
  n.push({ name: t.homeRouteName });
1388
1410
  }
1389
- return (t, n) => (T(), s("div", On, [c("div", kn, [
1390
- f(P(be), { class: v(["w-16 h-16 mx-auto mb-4", P(i).illustration]) }, null, 8, ["class"]),
1391
- c("h1", { class: v(["text-4xl font-bold mb-2", P(r) ? "text-gray-200" : "text-gray-800"]) }, N(e.code), 3),
1392
- c("p", { class: v(["text-lg mb-6", P(i).dimTextAlt]) }, N(e.message), 3),
1393
- c("button", {
1411
+ return (t, n) => (E(), c("div", Mn, [l("div", Nn, [
1412
+ p(F(Se), { class: y(["w-16 h-16 mx-auto mb-4", F(i).illustration]) }, null, 8, ["class"]),
1413
+ l("h1", { class: y(["text-4xl font-bold mb-2", F(r) ? "text-gray-200" : "text-gray-800"]) }, P(e.code), 3),
1414
+ l("p", { class: y(["text-lg mb-6", F(i).dimTextAlt]) }, P(e.message), 3),
1415
+ l("button", {
1394
1416
  onClick: a,
1395
- class: v(["inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", P(r) ? "bg-emerald-600 hover:bg-emerald-500" : "bg-emerald-600 hover:bg-emerald-700"])
1396
- }, N(e.homeLabel), 3)
1417
+ class: y(["inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", F(r) ? "bg-emerald-600 hover:bg-emerald-500" : "bg-emerald-600 hover:bg-emerald-700"])
1418
+ }, P(e.homeLabel), 3)
1397
1419
  ])]));
1398
1420
  }
1399
- }), jn = O(!1);
1400
- function Mn() {
1421
+ }), Fn = k(!1);
1422
+ function In() {
1401
1423
  function e() {
1402
- jn.value = !0;
1424
+ Fn.value = !0;
1403
1425
  }
1404
1426
  function t() {
1405
- jn.value = !1;
1427
+ Fn.value = !1;
1406
1428
  }
1407
1429
  function n() {
1408
- jn.value = !jn.value;
1430
+ Fn.value = !Fn.value;
1409
1431
  }
1410
1432
  return {
1411
- mobileOpen: jn,
1433
+ mobileOpen: Fn,
1412
1434
  open: e,
1413
1435
  close: t,
1414
1436
  toggle: n
@@ -1416,19 +1438,19 @@ function Mn() {
1416
1438
  }
1417
1439
  //#endregion
1418
1440
  //#region src/composables/useSidebarCollapse.ts
1419
- var Q = O(!1), Nn = !1, Pn = "mgv-sidebar-collapsed";
1420
- function Fn(e) {
1421
- if (!Nn && (Nn = !0, Pn = e, typeof window < "u")) {
1422
- let e = window.localStorage?.getItem(Pn);
1423
- e && (Q.value = e === "true"), m(!0).run(() => {
1441
+ var Q = k(!1), Ln = !1, Rn = "mgv-sidebar-collapsed";
1442
+ function zn(e) {
1443
+ if (!Ln && (Ln = !0, Rn = e, typeof window < "u")) {
1444
+ let e = window.localStorage?.getItem(Rn);
1445
+ e && (Q.value = e === "true"), h(!0).run(() => {
1424
1446
  I(Q, (e) => {
1425
- window.localStorage?.setItem(Pn, String(e));
1447
+ window.localStorage?.setItem(Rn, String(e));
1426
1448
  });
1427
1449
  });
1428
1450
  }
1429
1451
  }
1430
- function In(e) {
1431
- Fn(e?.storageKey ?? Pn);
1452
+ function Bn(e) {
1453
+ zn(e?.storageKey ?? Rn);
1432
1454
  function t() {
1433
1455
  Q.value = !0;
1434
1456
  }
@@ -1447,16 +1469,16 @@ function In(e) {
1447
1469
  }
1448
1470
  //#endregion
1449
1471
  //#region src/composables/useNotifications.ts
1450
- var $ = O([]), Ln = O(!1), Rn = i(() => $.value.filter((e) => !e.read).length);
1451
- function zn() {
1472
+ var $ = k([]), Vn = k(!1), Hn = a(() => $.value.filter((e) => !e.read).length);
1473
+ function Un() {
1452
1474
  function e() {
1453
- Ln.value = !0;
1475
+ Vn.value = !0;
1454
1476
  }
1455
1477
  function t() {
1456
- Ln.value = !1;
1478
+ Vn.value = !1;
1457
1479
  }
1458
1480
  function n() {
1459
- Ln.value = !Ln.value;
1481
+ Vn.value = !Vn.value;
1460
1482
  }
1461
1483
  function r(e) {
1462
1484
  $.value = e;
@@ -1484,8 +1506,8 @@ function zn() {
1484
1506
  }
1485
1507
  return {
1486
1508
  notifications: $,
1487
- unreadCount: Rn,
1488
- open: Ln,
1509
+ unreadCount: Hn,
1510
+ open: Vn,
1489
1511
  openPanel: e,
1490
1512
  closePanel: t,
1491
1513
  togglePanel: n,
@@ -1499,26 +1521,26 @@ function zn() {
1499
1521
  }
1500
1522
  //#endregion
1501
1523
  //#region src/components/BaseSidebar.vue?vue&type=script&setup=true&lang.ts
1502
- var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }, Hn = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, Un = { class: "space-y-0.5" }, Wn = [
1524
+ var Wn = ["aria-label", "aria-expanded"], Gn = { class: "flex flex-col h-full" }, Kn = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, qn = { class: "space-y-0.5" }, Jn = [
1503
1525
  "aria-current",
1504
1526
  "title",
1505
1527
  "onClick"
1506
- ], Gn = ["aria-label"], Kn = { class: "relative shrink-0" }, qn = {
1528
+ ], Yn = ["aria-label"], Xn = { class: "relative shrink-0" }, Zn = {
1507
1529
  key: 0,
1508
1530
  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"
1509
- }, Jn = [
1531
+ }, Qn = [
1510
1532
  "title",
1511
1533
  "aria-label",
1512
1534
  "aria-pressed"
1513
- ], Yn = [
1535
+ ], $n = [
1514
1536
  "title",
1515
1537
  "aria-label",
1516
1538
  "aria-pressed"
1517
- ], Xn = /*#__PURE__*/ ((e, t) => {
1539
+ ], er = /*#__PURE__*/ ((e, t) => {
1518
1540
  let n = e.__vccOpts || e;
1519
1541
  for (let [e, r] of t) n[e] = r;
1520
1542
  return n;
1521
- })(/* @__PURE__ */ p({
1543
+ })(/* @__PURE__ */ m({
1522
1544
  __name: "BaseSidebar",
1523
1545
  props: {
1524
1546
  sections: {},
@@ -1539,151 +1561,151 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
1539
1561
  }
1540
1562
  },
1541
1563
  setup(t) {
1542
- let n = t, r = Ae(), l = ke(), { isDark: u, toggleTheme: p } = W(), { mobileOpen: m, close: h, toggle: g } = Mn(), { collapsed: y, toggle: b } = In(), { unreadCount: x, togglePanel: S } = zn(), C = i(() => n.collapsible && y.value), w = O(null), E = null;
1564
+ let n = t, r = Me(), i = je(), { isDark: u, toggleTheme: d } = W(), { mobileOpen: m, close: h, toggle: g } = In(), { collapsed: _, toggle: b } = Bn(), { unreadCount: x, togglePanel: S } = Un(), C = a(() => n.collapsible && _.value), w = k(null), T = null;
1543
1565
  I(m, async (e) => {
1544
- e ? (E = document.activeElement instanceof HTMLElement ? document.activeElement : null, await _(), w.value?.focus()) : (E?.focus(), E = null);
1566
+ e ? (T = document.activeElement instanceof HTMLElement ? document.activeElement : null, await v(), w.value?.focus()) : (T?.focus(), T = null);
1545
1567
  });
1546
1568
  function D() {
1547
1569
  r.push({ name: n.homeRouteName }), h();
1548
1570
  }
1549
- function j(e) {
1550
- return l.name === e;
1571
+ function O(e) {
1572
+ return i.name === e;
1551
1573
  }
1552
- function ee(e) {
1574
+ function M(e) {
1553
1575
  r.push({ name: e }), h();
1554
1576
  }
1555
- return (n, r) => (T(), s("div", null, [
1556
- c("div", { class: v(["mobile-topbar fixed top-0 inset-x-0 z-30 flex items-center justify-between px-4 py-3 border-b transition-colors", P(u) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"]) }, [c("button", {
1577
+ return (n, r) => (E(), c("div", null, [
1578
+ l("div", { class: y(["mobile-topbar fixed top-0 inset-x-0 z-30 flex items-center justify-between px-4 py-3 border-b transition-colors", F(u) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"]) }, [l("button", {
1557
1579
  type: "button",
1558
1580
  onClick: D,
1559
1581
  class: "cursor-pointer rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500",
1560
1582
  "aria-label": "Go to home"
1561
- }, [A(n.$slots, "logo", { size: 28 }, void 0, !0)]), c("button", {
1583
+ }, [j(n.$slots, "logo", { size: 28 }, void 0, !0)]), l("button", {
1562
1584
  type: "button",
1563
- onClick: r[0] ||= (...e) => P(g) && P(g)(...e),
1564
- class: v(["p-2 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", P(u) ? "text-gray-400 hover:bg-gray-800" : "text-gray-600 hover:bg-gray-100"]),
1565
- "aria-label": P(m) ? "Close navigation menu" : "Open navigation menu",
1566
- "aria-expanded": P(m)
1567
- }, [P(m) ? (T(), a(P(B), {
1585
+ onClick: r[0] ||= (...e) => F(g) && F(g)(...e),
1586
+ class: y(["p-2 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(u) ? "text-gray-400 hover:bg-gray-800" : "text-gray-600 hover:bg-gray-100"]),
1587
+ "aria-label": F(m) ? "Close navigation menu" : "Open navigation menu",
1588
+ "aria-expanded": F(m)
1589
+ }, [F(m) ? (E(), o(F(B), {
1568
1590
  key: 1,
1569
1591
  class: "w-6 h-6",
1570
1592
  "aria-hidden": "true"
1571
- })) : (T(), a(P(ce), {
1593
+ })) : (E(), o(F(ue), {
1572
1594
  key: 0,
1573
1595
  class: "w-6 h-6",
1574
1596
  "aria-hidden": "true"
1575
- }))], 10, Bn)], 2),
1576
- P(m) ? (T(), s("div", {
1597
+ }))], 10, Wn)], 2),
1598
+ F(m) ? (E(), c("div", {
1577
1599
  key: 0,
1578
1600
  class: "mobile-overlay fixed inset-0 z-40 bg-black/50",
1579
1601
  "aria-hidden": "true",
1580
- onClick: r[1] ||= (...e) => P(h) && P(h)(...e)
1581
- })) : o("", !0),
1582
- c("aside", {
1602
+ onClick: r[1] ||= (...e) => F(h) && F(h)(...e)
1603
+ })) : s("", !0),
1604
+ l("aside", {
1583
1605
  role: "navigation",
1584
1606
  "aria-label": "Main navigation",
1585
- class: v(["fixed top-0 left-0 h-screen w-60 flex flex-col border-r transition-all duration-300 lg:pointer-events-auto", [
1586
- P(u) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200",
1587
- P(m) ? "translate-x-0 z-50" : "-translate-x-full max-lg:pointer-events-none lg:translate-x-0 z-50",
1588
- t.collapsible && P(y) ? "lg:w-16" : "lg:w-60"
1607
+ class: y(["fixed top-0 left-0 h-screen w-60 flex flex-col border-r transition-all duration-300 lg:pointer-events-auto", [
1608
+ F(u) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200",
1609
+ F(m) ? "translate-x-0 z-50" : "-translate-x-full max-lg:pointer-events-none lg:translate-x-0 z-50",
1610
+ t.collapsible && F(_) ? "lg:w-16" : "lg:w-60"
1589
1611
  ]])
1590
- }, [c("div", Vn, [
1591
- c("div", { class: v(["px-5 pt-5 pb-4 flex items-center justify-center relative", { "lg:px-2": C.value }]) }, [c("button", {
1612
+ }, [l("div", Gn, [
1613
+ l("div", { class: y(["px-5 pt-5 pb-4 flex items-center justify-center relative", { "lg:px-2": C.value }]) }, [l("button", {
1592
1614
  type: "button",
1593
1615
  onClick: D,
1594
1616
  class: "cursor-pointer rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500",
1595
1617
  "aria-label": "Go to home"
1596
- }, [A(n.$slots, "logo", { size: C.value ? 36 : 52 }, void 0, !0)]), c("button", {
1618
+ }, [j(n.$slots, "logo", { size: C.value ? 36 : 52 }, void 0, !0)]), l("button", {
1597
1619
  ref_key: "closeMobileButton",
1598
1620
  ref: w,
1599
1621
  type: "button",
1600
- onClick: r[2] ||= (...e) => P(h) && P(h)(...e),
1601
- class: v(["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", P(u) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"]),
1622
+ onClick: r[2] ||= (...e) => F(h) && F(h)(...e),
1623
+ class: y(["lg:hidden p-1.5 rounded-lg cursor-pointer absolute right-3 top-4 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(u) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"]),
1602
1624
  "aria-label": "Close navigation menu"
1603
- }, [f(P(B), {
1625
+ }, [p(F(B), {
1604
1626
  class: "w-5 h-5",
1605
1627
  "aria-hidden": "true"
1606
1628
  })], 2)], 2),
1607
- c("nav", Hn, [(T(!0), s(e, null, k(t.sections, (t) => (T(), s("div", { key: t.title }, [c("p", { class: v(["px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500", { "lg:hidden": C.value }]) }, N(t.title), 3), c("ul", Un, [(T(!0), s(e, null, k(t.items, (e) => (T(), s("li", { key: e.name }, [c("button", {
1629
+ l("nav", Kn, [(E(!0), c(e, null, A(t.sections, (t) => (E(), c("div", { key: t.title }, [l("p", { class: y(["px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500", { "lg:hidden": C.value }]) }, P(t.title), 3), l("ul", qn, [(E(!0), c(e, null, A(t.items, (e) => (E(), c("li", { key: e.name }, [l("button", {
1608
1630
  type: "button",
1609
- "aria-current": j(e.name) ? "page" : void 0,
1631
+ "aria-current": O(e.name) ? "page" : void 0,
1610
1632
  title: C.value ? e.label : void 0,
1611
- onClick: (t) => ee(e.name),
1612
- class: v(["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", [j(e.name) ? P(u) ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-50 text-emerald-700" : P(u) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": C.value }]])
1613
- }, [(T(), a(M(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), c("span", { class: v({ "lg:hidden": C.value }) }, N(e.label), 3)], 10, Wn)]))), 128))])]))), 128))]),
1614
- c("div", { class: v(["px-4 py-4 border-t transition-colors space-y-3", P(u) ? "border-gray-800" : "border-gray-200"]) }, [
1615
- t.showNotifications ? (T(), s("button", {
1633
+ onClick: (t) => M(e.name),
1634
+ class: y(["flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-colors w-full text-left cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [O(e.name) ? F(u) ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-50 text-emerald-700" : F(u) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": C.value }]])
1635
+ }, [(E(), o(N(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), l("span", { class: y({ "lg:hidden": C.value }) }, P(e.label), 3)], 10, Jn)]))), 128))])]))), 128))]),
1636
+ l("div", { class: y(["px-4 py-4 border-t transition-colors space-y-3", F(u) ? "border-gray-800" : "border-gray-200"]) }, [
1637
+ t.showNotifications ? (E(), c("button", {
1616
1638
  key: 0,
1617
1639
  type: "button",
1618
- onClick: r[3] ||= (...e) => P(S) && P(S)(...e),
1640
+ onClick: r[3] ||= (...e) => F(S) && F(S)(...e),
1619
1641
  title: "Notifications",
1620
- "aria-label": P(x) > 0 ? `Notifications, ${P(x)} unread` : "Notifications",
1621
- class: v(["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", [P(u) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": C.value }]])
1622
- }, [c("span", Kn, [f(P(le), {
1642
+ "aria-label": F(x) > 0 ? `Notifications, ${F(x)} unread` : "Notifications",
1643
+ class: y(["relative flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [F(u) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": C.value }]])
1644
+ }, [l("span", Xn, [p(F(de), {
1623
1645
  class: "w-[18px] h-[18px]",
1624
1646
  "aria-hidden": "true"
1625
- }), P(x) > 0 ? (T(), s("span", qn, N(P(x) > 99 ? "99+" : P(x)), 1)) : o("", !0)]), c("span", { class: v({ "lg:hidden": C.value }) }, "Notifications", 2)], 10, Gn)) : o("", !0),
1626
- t.showThemeToggle ? (T(), s("button", {
1647
+ }), F(x) > 0 ? (E(), c("span", Zn, P(F(x) > 99 ? "99+" : F(x)), 1)) : s("", !0)]), l("span", { class: y({ "lg:hidden": C.value }) }, "Notifications", 2)], 10, Yn)) : s("", !0),
1648
+ t.showThemeToggle ? (E(), c("button", {
1627
1649
  key: 1,
1628
1650
  type: "button",
1629
- onClick: r[4] ||= (...e) => P(p) && P(p)(...e),
1630
- title: P(u) ? "Switch to light mode" : "Switch to dark mode",
1631
- "aria-label": P(u) ? "Switch to light mode" : "Switch to dark mode",
1632
- "aria-pressed": P(u),
1633
- class: v(["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", [P(u) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": C.value }]])
1651
+ onClick: r[4] ||= (...e) => F(d) && F(d)(...e),
1652
+ title: F(u) ? "Switch to light mode" : "Switch to dark mode",
1653
+ "aria-label": F(u) ? "Switch to light mode" : "Switch to dark mode",
1654
+ "aria-pressed": F(u),
1655
+ class: y(["flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [F(u) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": C.value }]])
1634
1656
  }, [
1635
- (T(), a(M(P(u) ? P(Ee) : P(Te)), {
1636
- class: v(["hidden w-[18px] h-[18px] shrink-0", { "lg:block": C.value }]),
1657
+ (E(), o(N(F(u) ? F(Oe) : F(De)), {
1658
+ class: y(["hidden w-[18px] h-[18px] shrink-0", { "lg:block": C.value }]),
1637
1659
  "aria-hidden": "true"
1638
1660
  }, null, 8, ["class"])),
1639
- c("span", { class: v({ "lg:hidden": C.value }) }, N(P(u) ? "Switch to light" : "Switch to dark"), 3),
1640
- c("span", { class: v(["ml-auto relative w-9 h-5 rounded-full transition-colors", [P(u) ? "bg-emerald-600" : "bg-gray-300", { "lg:hidden": C.value }]]) }, [c("span", { class: v(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", P(u) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)
1641
- ], 10, Jn)) : o("", !0),
1642
- t.collapsible ? (T(), s("button", {
1661
+ l("span", { class: y({ "lg:hidden": C.value }) }, P(F(u) ? "Switch to light" : "Switch to dark"), 3),
1662
+ l("span", { class: y(["ml-auto relative w-9 h-5 rounded-full transition-colors", [F(u) ? "bg-emerald-600" : "bg-gray-300", { "lg:hidden": C.value }]]) }, [l("span", { class: y(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", F(u) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)
1663
+ ], 10, Qn)) : s("", !0),
1664
+ t.collapsible ? (E(), c("button", {
1643
1665
  key: 2,
1644
1666
  type: "button",
1645
- onClick: r[5] ||= (...e) => P(b) && P(b)(...e),
1646
- title: P(y) ? "Expand sidebar" : "Collapse sidebar",
1647
- "aria-label": P(y) ? "Expand sidebar" : "Collapse sidebar",
1648
- "aria-pressed": P(y),
1649
- class: v(["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", [P(u) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": C.value }]])
1650
- }, [(T(), a(M(P(y) ? P(pe) : P(fe)), {
1667
+ onClick: r[5] ||= (...e) => F(b) && F(b)(...e),
1668
+ title: F(_) ? "Expand sidebar" : "Collapse sidebar",
1669
+ "aria-label": F(_) ? "Expand sidebar" : "Collapse sidebar",
1670
+ "aria-pressed": F(_),
1671
+ class: y(["hidden lg:flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [F(u) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": C.value }]])
1672
+ }, [(E(), o(N(F(_) ? F(he) : F(me)), {
1651
1673
  class: "w-[18px] h-[18px] shrink-0",
1652
1674
  "aria-hidden": "true"
1653
- })), c("span", { class: v({ "lg:hidden": C.value }) }, "Collapse", 2)], 10, Yn)) : o("", !0),
1654
- c("div", { class: v({ "lg:hidden": C.value }) }, [A(n.$slots, "status", {}, void 0, !0)], 2),
1655
- c("div", { class: v({ "lg:hidden": C.value }) }, [A(n.$slots, "footer", {}, () => [t.appName || t.version ? (T(), s("div", {
1675
+ })), l("span", { class: y({ "lg:hidden": C.value }) }, "Collapse", 2)], 10, $n)) : s("", !0),
1676
+ l("div", { class: y({ "lg:hidden": C.value }) }, [j(n.$slots, "status", {}, void 0, !0)], 2),
1677
+ l("div", { class: y({ "lg:hidden": C.value }) }, [j(n.$slots, "footer", {}, () => [t.appName || t.version ? (E(), c("div", {
1656
1678
  key: 0,
1657
- class: v(["flex items-center justify-center gap-2 text-xs", (P(u), "text-gray-500")])
1658
- }, [c("span", null, [
1659
- d(N(t.appName), 1),
1660
- t.appName && t.version ? (T(), s(e, { key: 0 }, [d(N(" "))], 64)) : o("", !0),
1661
- t.version ? (T(), s(e, { key: 1 }, [d("v" + N(t.version), 1)], 64)) : o("", !0)
1662
- ])], 2)) : o("", !0)], !0)], 2)
1679
+ class: y(["flex items-center justify-center gap-2 text-xs", (F(u), "text-gray-500")])
1680
+ }, [l("span", null, [
1681
+ f(P(t.appName), 1),
1682
+ t.appName && t.version ? (E(), c(e, { key: 0 }, [f(P(" "))], 64)) : s("", !0),
1683
+ t.version ? (E(), c(e, { key: 1 }, [f("v" + P(t.version), 1)], 64)) : s("", !0)
1684
+ ])], 2)) : s("", !0)], !0)], 2)
1663
1685
  ], 2)
1664
1686
  ])], 2)
1665
1687
  ]));
1666
1688
  }
1667
- }), [["__scopeId", "data-v-bfce9dd7"]]), Zn = {
1689
+ }), [["__scopeId", "data-v-bfce9dd7"]]), tr = {
1668
1690
  key: 1,
1669
1691
  class: "mt-4 flex justify-center py-6"
1670
- }, Qn = {
1692
+ }, nr = {
1671
1693
  key: 2,
1672
1694
  class: "mt-4 text-sm text-red-500",
1673
1695
  role: "alert"
1674
- }, $n = {
1696
+ }, rr = {
1675
1697
  key: 3,
1676
1698
  class: "mt-4"
1677
- }, er = { class: "relative" }, tr = ["placeholder"], nr = {
1699
+ }, ir = { class: "relative" }, ar = ["placeholder"], or = {
1678
1700
  key: 4,
1679
1701
  class: "mt-3 max-h-64 overflow-y-auto"
1680
- }, rr = ["aria-pressed", "onClick"], ir = { class: "flex-1 min-w-0" }, ar = {
1702
+ }, sr = ["aria-pressed", "onClick"], cr = { class: "flex-1 min-w-0" }, lr = {
1681
1703
  key: 0,
1682
1704
  class: "text-center py-6"
1683
- }, or = {
1705
+ }, ur = {
1684
1706
  key: 1,
1685
1707
  class: "text-center py-6"
1686
- }, sr = ["disabled"], cr = ["disabled"], lr = /* @__PURE__ */ p({
1708
+ }, dr = ["disabled"], fr = ["disabled"], pr = /* @__PURE__ */ m({
1687
1709
  __name: "BaseEntityPickerModal",
1688
1710
  props: {
1689
1711
  title: {},
@@ -1705,10 +1727,10 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
1705
1727
  },
1706
1728
  emits: ["confirm", "cancel"],
1707
1729
  setup(t, { emit: n }) {
1708
- let r = t, u = n, { isDark: d } = W(), p = Z(), m = O([]), h = O(!1), g = O(""), y = O(null), b = O(""), x = O(null), C = i(() => {
1730
+ let r = t, i = n, { isDark: d } = W(), f = Z(), m = k([]), h = k(!1), g = k(""), _ = k(null), b = k(""), x = k(null), S = a(() => {
1709
1731
  let e = r.loader ? m.value : r.items;
1710
1732
  return r.excludeId ? e.filter((e) => e.id !== r.excludeId) : e;
1711
- }), w = i(() => C.value.filter((e) => e.label.toLowerCase().includes(b.value.toLowerCase()))), E = {
1733
+ }), w = a(() => S.value.filter((e) => e.label.toLowerCase().includes(b.value.toLowerCase()))), T = {
1712
1734
  emerald: {
1713
1735
  iconBg: "bg-emerald-50",
1714
1736
  iconText: "text-emerald-600",
@@ -1800,8 +1822,8 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
1800
1822
  confirmActive: "bg-amber-600 hover:bg-amber-700 cursor-pointer",
1801
1823
  confirmDisabled: "bg-amber-400 cursor-not-allowed"
1802
1824
  }
1803
- }, j = i(() => (d.value ? D : E)[r.variant]);
1804
- S(async () => {
1825
+ }, O = a(() => (d.value ? D : T)[r.variant]);
1826
+ C(async () => {
1805
1827
  if (r.loader) {
1806
1828
  h.value = !0;
1807
1829
  try {
@@ -1812,80 +1834,80 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
1812
1834
  h.value = !1;
1813
1835
  }
1814
1836
  }
1815
- await _(), x.value?.focus();
1837
+ await v(), x.value?.focus();
1816
1838
  });
1817
1839
  function M() {
1818
- y.value && !r.submitting && u("confirm", y.value);
1840
+ _.value && !r.submitting && i("confirm", _.value);
1819
1841
  }
1820
- function ee() {
1821
- r.submitting || u("cancel");
1842
+ function N() {
1843
+ r.submitting || i("cancel");
1822
1844
  }
1823
- return (n, r) => (T(), a(gn, {
1845
+ return (n, r) => (E(), o(bn, {
1824
1846
  title: t.title,
1825
- icon: P(xe),
1826
- "icon-bg-class": j.value.iconBg,
1827
- "icon-class": j.value.iconText,
1847
+ icon: F(Ce),
1848
+ "icon-bg-class": O.value.iconBg,
1849
+ "icon-class": O.value.iconText,
1828
1850
  "manual-close": t.submitting,
1829
- onCancel: ee
1830
- }, l({
1831
- footer: L(() => [c("button", {
1851
+ onCancel: N
1852
+ }, u({
1853
+ footer: L(() => [l("button", {
1832
1854
  type: "button",
1833
1855
  disabled: t.submitting,
1834
- class: v(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", P(p).ghostButton]),
1835
- onClick: ee
1836
- }, N(t.cancelText), 11, sr), c("button", {
1856
+ class: y(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(f).ghostButton]),
1857
+ onClick: N
1858
+ }, P(t.cancelText), 11, dr), l("button", {
1837
1859
  type: "button",
1838
- disabled: !y.value || t.submitting,
1839
- class: v(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", !y.value || t.submitting ? j.value.confirmDisabled : j.value.confirmActive]),
1860
+ disabled: !_.value || t.submitting,
1861
+ class: y(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", !_.value || t.submitting ? O.value.confirmDisabled : O.value.confirmActive]),
1840
1862
  onClick: M
1841
- }, N(t.submitting ? t.submittingText : t.confirmText), 11, cr)]),
1863
+ }, P(t.submitting ? t.submittingText : t.confirmText), 11, fr)]),
1842
1864
  default: L(() => [
1843
- t.message ? (T(), s("p", {
1865
+ t.message ? (E(), c("p", {
1844
1866
  key: 0,
1845
- class: v(["text-sm", P(d) ? "text-gray-300" : "text-gray-600"])
1846
- }, N(t.message), 3)) : o("", !0),
1847
- h.value ? (T(), s("div", Zn, [f(It, { color: "emerald" })])) : g.value ? (T(), s("div", Qn, N(g.value), 1)) : o("", !0),
1848
- !h.value && !g.value && C.value.length > 0 ? (T(), s("div", $n, [c("div", er, [f(P(Ce), {
1849
- class: v(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", P(p).dimText]),
1867
+ class: y(["text-sm", F(d) ? "text-gray-300" : "text-gray-600"])
1868
+ }, P(t.message), 3)) : s("", !0),
1869
+ h.value ? (E(), c("div", tr, [p(Bt, { color: "emerald" })])) : g.value ? (E(), c("div", nr, P(g.value), 1)) : s("", !0),
1870
+ !h.value && !g.value && S.value.length > 0 ? (E(), c("div", rr, [l("div", ir, [p(F(Te), {
1871
+ class: y(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", F(f).dimText]),
1850
1872
  "aria-hidden": "true"
1851
- }, null, 8, ["class"]), R(c("input", {
1873
+ }, null, 8, ["class"]), R(l("input", {
1852
1874
  ref_key: "searchInputRef",
1853
1875
  ref: x,
1854
1876
  "onUpdate:modelValue": r[0] ||= (e) => b.value = e,
1855
1877
  type: "text",
1856
1878
  placeholder: t.searchPlaceholder,
1857
- class: v(["w-full pl-9 pr-3 py-2 text-sm rounded-md border outline-none transition-colors", [P(d) ? "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500" : "bg-white border-gray-300 text-gray-700 placeholder-gray-400", j.value.inputFocus]])
1858
- }, null, 10, tr), [[re, b.value]])])])) : o("", !0),
1859
- !h.value && !g.value ? (T(), s("div", nr, [(T(!0), s(e, null, k(w.value, (e) => (T(), s("button", {
1879
+ class: y(["w-full pl-9 pr-3 py-2 text-sm rounded-md border outline-none transition-colors", [F(d) ? "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500" : "bg-white border-gray-300 text-gray-700 placeholder-gray-400", O.value.inputFocus]])
1880
+ }, null, 10, ar), [[ie, b.value]])])])) : s("", !0),
1881
+ !h.value && !g.value ? (E(), c("div", or, [(E(!0), c(e, null, A(w.value, (e) => (E(), c("button", {
1860
1882
  key: e.id,
1861
1883
  type: "button",
1862
- "aria-pressed": y.value === e.id,
1863
- class: v(["w-full text-left flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [y.value === e.id ? j.value.selectedRow : P(d) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1864
- onClick: (t) => y.value = e.id
1884
+ "aria-pressed": _.value === e.id,
1885
+ class: y(["w-full text-left flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [_.value === e.id ? O.value.selectedRow : F(d) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1886
+ onClick: (t) => _.value = e.id
1865
1887
  }, [
1866
- f(P(xe), { class: v(["w-5 h-5 flex-shrink-0", P(p).dimText]) }, null, 8, ["class"]),
1867
- c("div", ir, [c("p", { class: v(["text-sm font-medium truncate", P(p).bodyText]) }, N(e.label), 3)]),
1868
- y.value === e.id ? (T(), s("div", {
1888
+ p(F(Ce), { class: y(["w-5 h-5 flex-shrink-0", F(f).dimText]) }, null, 8, ["class"]),
1889
+ l("div", cr, [l("p", { class: y(["text-sm font-medium truncate", F(f).bodyText]) }, P(e.label), 3)]),
1890
+ _.value === e.id ? (E(), c("div", {
1869
1891
  key: 0,
1870
- class: v(["w-5 h-5 rounded-full flex items-center justify-center", j.value.checkBg])
1871
- }, [...r[1] ||= [c("svg", {
1892
+ class: y(["w-5 h-5 rounded-full flex items-center justify-center", O.value.checkBg])
1893
+ }, [...r[1] ||= [l("svg", {
1872
1894
  class: "w-3 h-3 text-white",
1873
1895
  fill: "none",
1874
1896
  viewBox: "0 0 24 24",
1875
1897
  stroke: "currentColor",
1876
1898
  "stroke-width": "3",
1877
1899
  "aria-hidden": "true"
1878
- }, [c("path", {
1900
+ }, [l("path", {
1879
1901
  "stroke-linecap": "round",
1880
1902
  "stroke-linejoin": "round",
1881
1903
  d: "M5 13l4 4L19 7"
1882
- })], -1)]], 2)) : o("", !0)
1883
- ], 10, rr))), 128)), C.value.length === 0 ? (T(), s("div", ar, [c("p", { class: v(["text-sm", P(p).dimText]) }, N(t.emptyMessage), 3)])) : w.value.length === 0 ? (T(), s("div", or, [c("p", { class: v(["text-sm", P(p).dimText]) }, N(t.noMatchMessage), 3)])) : o("", !0)])) : o("", !0)
1904
+ })], -1)]], 2)) : s("", !0)
1905
+ ], 10, sr))), 128)), S.value.length === 0 ? (E(), c("div", lr, [l("p", { class: y(["text-sm", F(f).dimText]) }, P(t.emptyMessage), 3)])) : w.value.length === 0 ? (E(), c("div", ur, [l("p", { class: y(["text-sm", F(f).dimText]) }, P(t.noMatchMessage), 3)])) : s("", !0)])) : s("", !0)
1884
1906
  ]),
1885
1907
  _: 2
1886
1908
  }, [n.$slots.icon ? {
1887
1909
  name: "icon",
1888
- fn: L(() => [A(n.$slots, "icon")]),
1910
+ fn: L(() => [j(n.$slots, "icon")]),
1889
1911
  key: "0"
1890
1912
  } : void 0]), 1032, [
1891
1913
  "title",
@@ -1895,10 +1917,10 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
1895
1917
  "manual-close"
1896
1918
  ]));
1897
1919
  }
1898
- }), ur = {
1920
+ }), mr = {
1899
1921
  href: "#main-content",
1900
1922
  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"
1901
- }, dr = ["inert"], fr = /* @__PURE__ */ p({
1923
+ }, hr = ["inert"], gr = /* @__PURE__ */ m({
1902
1924
  __name: "BaseAppLayout",
1903
1925
  props: {
1904
1926
  showSidebar: {
@@ -1908,23 +1930,23 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
1908
1930
  skipLinkLabel: { default: "Skip to main content" }
1909
1931
  },
1910
1932
  setup(e) {
1911
- let t = e, { isDark: n } = W(), { mobileOpen: r } = Mn(), { collapsed: a } = In(), l = i(() => t.showSidebar);
1912
- return (t, i) => (T(), s("div", { class: v(["min-h-screen transition-colors duration-300", P(n) ? "bg-gray-950 text-gray-100" : "bg-gray-50 text-gray-800"]) }, [
1913
- c("a", ur, N(e.skipLinkLabel), 1),
1914
- l.value ? A(t.$slots, "sidebar", {}, void 0, void 0, 0) : o("", !0),
1915
- c("main", {
1933
+ let t = e, { isDark: n } = W(), { mobileOpen: r } = In(), { collapsed: i } = Bn(), o = a(() => t.showSidebar);
1934
+ return (t, a) => (E(), c("div", { class: y(["min-h-screen transition-colors duration-300", F(n) ? "bg-gray-950 text-gray-100" : "bg-gray-50 text-gray-800"]) }, [
1935
+ l("a", mr, P(e.skipLinkLabel), 1),
1936
+ o.value ? j(t.$slots, "sidebar", {}, void 0, void 0, 0) : s("", !0),
1937
+ l("main", {
1916
1938
  id: "main-content",
1917
1939
  tabindex: "-1",
1918
- inert: l.value && P(r) ? !0 : void 0,
1919
- class: v(["transition-all duration-300", l.value ? P(a) ? "pt-14 lg:pt-0 lg:ml-16" : "pt-14 lg:pt-0 lg:ml-60" : ""])
1920
- }, [A(t.$slots, "default")], 10, dr)
1940
+ inert: o.value && F(r) ? !0 : void 0,
1941
+ class: y(["transition-all duration-300", o.value ? F(i) ? "pt-14 lg:pt-0 lg:ml-16" : "pt-14 lg:pt-0 lg:ml-60" : ""])
1942
+ }, [j(t.$slots, "default")], 10, hr)
1921
1943
  ], 2));
1922
1944
  }
1923
- }), pr = { class: "flex items-center gap-3 min-w-0" }, mr = {
1945
+ }), _r = { class: "flex items-center gap-3 min-w-0" }, vr = {
1924
1946
  key: 0,
1925
1947
  class: "absolute left-0 top-[0.14em] h-[1.1em] w-1 rounded-full bg-gradient-to-b from-emerald-400 to-emerald-600",
1926
1948
  "aria-hidden": "true"
1927
- }, hr = { class: "flex items-center gap-2" }, gr = /* @__PURE__ */ p({
1949
+ }, yr = { class: "flex items-center gap-2" }, br = /* @__PURE__ */ m({
1928
1950
  __name: "BasePageHeader",
1929
1951
  props: {
1930
1952
  title: {},
@@ -1939,7 +1961,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
1939
1961
  }
1940
1962
  },
1941
1963
  setup(e) {
1942
- let t = e, { isDark: n } = W(), r = Z(), a = i(() => {
1964
+ let t = e, { isDark: n } = W(), r = Z(), i = a(() => {
1943
1965
  let e = {
1944
1966
  emerald: {
1945
1967
  dark: "bg-emerald-500/10",
@@ -1959,7 +1981,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
1959
1981
  }
1960
1982
  }[t.iconColor];
1961
1983
  return n.value ? e.dark : e.light;
1962
- }), l = i(() => {
1984
+ }), o = a(() => {
1963
1985
  let e = {
1964
1986
  emerald: {
1965
1987
  dark: "text-emerald-400",
@@ -1980,19 +2002,19 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
1980
2002
  }[t.iconColor];
1981
2003
  return n.value ? e.dark : e.light;
1982
2004
  });
1983
- return (t, n) => (T(), s("header", { class: v(e.maxWidthClass ? ["mx-auto px-4 sm:px-6", e.maxWidthClass] : void 0) }, [c("div", { class: v(["flex flex-wrap justify-between gap-3", [e.align === "end" ? "items-end" : "items-center", e.marginClass]]) }, [c("div", pr, [t.$slots.icon ? (T(), s("div", {
2005
+ return (t, n) => (E(), c("header", { class: y(e.maxWidthClass ? ["mx-auto px-4 sm:px-6", e.maxWidthClass] : void 0) }, [l("div", { class: y(["flex flex-wrap justify-between gap-3", [e.align === "end" ? "items-end" : "items-center", e.marginClass]]) }, [l("div", _r, [t.$slots.icon ? (E(), c("div", {
1984
2006
  key: 0,
1985
- class: v(["w-10 h-10 rounded-lg flex items-center justify-center", a.value])
1986
- }, [A(t.$slots, "icon", { iconClass: l.value })], 2)) : o("", !0), c("div", null, [c("h1", { class: v(["text-2xl font-bold", [P(r).primaryTextSoft, e.accent ? "relative pl-3.5 tracking-tight" : ""]]) }, [e.accent ? (T(), s("span", mr)) : o("", !0), d(" " + N(e.title), 1)], 2), e.subtitle || t.$slots.subtitle ? (T(), s("p", {
2007
+ class: y(["w-10 h-10 rounded-lg flex items-center justify-center", i.value])
2008
+ }, [j(t.$slots, "icon", { iconClass: o.value })], 2)) : s("", !0), l("div", null, [l("h1", { class: y(["text-2xl font-bold", [F(r).primaryTextSoft, e.accent ? "relative pl-3.5 tracking-tight" : ""]]) }, [e.accent ? (E(), c("span", vr)) : s("", !0), f(" " + P(e.title), 1)], 2), e.subtitle || t.$slots.subtitle ? (E(), c("p", {
1987
2009
  key: 0,
1988
- class: v(["max-w-[72ch] text-sm", P(r).dimTextAlt])
1989
- }, [A(t.$slots, "subtitle", {}, () => [d(N(e.subtitle), 1)])], 2)) : o("", !0)])]), c("div", hr, [A(t.$slots, "actions")])], 2)], 2));
2010
+ class: y(["max-w-[72ch] text-sm", F(r).dimTextAlt])
2011
+ }, [j(t.$slots, "subtitle", {}, () => [f(P(e.subtitle), 1)])], 2)) : s("", !0)])]), l("div", yr, [j(t.$slots, "actions")])], 2)], 2));
1990
2012
  }
1991
- }), _r = [
2013
+ }), xr = [
1992
2014
  "type",
1993
2015
  "disabled",
1994
2016
  "title"
1995
- ], vr = { key: 0 }, yr = /* @__PURE__ */ p({
2017
+ ], Sr = { key: 0 }, Cr = /* @__PURE__ */ m({
1996
2018
  __name: "BaseToolbarButton",
1997
2019
  props: {
1998
2020
  label: { default: "" },
@@ -2010,7 +2032,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2010
2032
  neutral: "px-3 py-2 rounded-lg font-medium disabled:opacity-50",
2011
2033
  danger: "px-3 py-2 rounded-lg font-medium disabled:opacity-50",
2012
2034
  ghost: "h-9 px-4 rounded-md font-semibold disabled:opacity-40 disabled:hover:bg-slate-50 dark:disabled:hover:bg-slate-900"
2013
- }, a = i(() => {
2035
+ }, i = a(() => {
2014
2036
  let e = {
2015
2037
  neutral: {
2016
2038
  dark: "bg-gray-800 text-gray-100 border-gray-700 hover:bg-gray-700",
@@ -2027,20 +2049,20 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2027
2049
  }[t.variant];
2028
2050
  return [r[t.variant], n.value ? e.dark : e.light];
2029
2051
  });
2030
- return (t, n) => (T(), s("button", {
2052
+ return (t, n) => (E(), c("button", {
2031
2053
  type: e.type,
2032
2054
  disabled: e.disabled,
2033
2055
  title: e.title,
2034
- class: v(["inline-flex shrink-0 items-center gap-2 text-sm border transition-colors cursor-pointer disabled:cursor-not-allowed whitespace-nowrap focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", a.value]),
2056
+ class: y(["inline-flex shrink-0 items-center gap-2 text-sm border transition-colors cursor-pointer disabled:cursor-not-allowed whitespace-nowrap focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", i.value]),
2035
2057
  onClick: n[0] ||= (e) => t.$emit("click", e)
2036
- }, [A(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (T(), s("span", vr, N(e.label), 1)) : o("", !0)], 10, _r));
2058
+ }, [j(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (E(), c("span", Sr, P(e.label), 1)) : s("", !0)], 10, xr));
2037
2059
  }
2038
- }), br = [
2060
+ }), wr = [
2039
2061
  "type",
2040
2062
  "disabled",
2041
2063
  "title",
2042
2064
  "aria-label"
2043
- ], xr = { key: 0 }, Sr = /* @__PURE__ */ p({
2065
+ ], Tr = { key: 0 }, Er = /* @__PURE__ */ m({
2044
2066
  __name: "BaseActionButton",
2045
2067
  props: {
2046
2068
  label: { default: "" },
@@ -2059,7 +2081,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2059
2081
  },
2060
2082
  emits: ["click"],
2061
2083
  setup(e) {
2062
- let t = e, { isDark: n } = W(), r = i(() => {
2084
+ let t = e, { isDark: n } = W(), r = a(() => {
2063
2085
  let e = {
2064
2086
  emerald: {
2065
2087
  dark: "text-emerald-400 hover:bg-emerald-500/10",
@@ -2095,7 +2117,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2095
2117
  }
2096
2118
  }[t.color];
2097
2119
  return n.value ? e.dark : e.light;
2098
- }), a = i(() => {
2120
+ }), i = a(() => {
2099
2121
  let e = {
2100
2122
  emerald: {
2101
2123
  dark: "text-emerald-400",
@@ -2131,17 +2153,17 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2131
2153
  }
2132
2154
  }[t.color];
2133
2155
  return n.value ? e.dark : e.light;
2134
- }), c = i(() => t.disabled ? `${a.value} opacity-50 cursor-not-allowed` : `${r.value} cursor-pointer`);
2135
- return (t, n) => (T(), s("button", {
2156
+ }), o = a(() => t.disabled ? `${i.value} opacity-50 cursor-not-allowed` : `${r.value} cursor-pointer`);
2157
+ return (t, n) => (E(), c("button", {
2136
2158
  type: e.type,
2137
2159
  disabled: e.disabled,
2138
2160
  title: e.title,
2139
2161
  "aria-label": e.ariaLabel,
2140
- class: v(["inline-flex items-center justify-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-current", [e.fullWidth ? "flex-1" : "", c.value]]),
2162
+ class: y(["inline-flex items-center justify-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-current", [e.fullWidth ? "flex-1" : "", o.value]]),
2141
2163
  onClick: n[0] ||= (e) => t.$emit("click", e)
2142
- }, [A(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (T(), s("span", xr, N(e.label), 1)) : o("", !0)], 10, br));
2164
+ }, [j(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (E(), c("span", Tr, P(e.label), 1)) : s("", !0)], 10, wr));
2143
2165
  }
2144
- }), Cr = ["title", "aria-label"], wr = /* @__PURE__ */ p({
2166
+ }), Dr = ["title", "aria-label"], Or = /* @__PURE__ */ m({
2145
2167
  __name: "BaseCopyButton",
2146
2168
  props: {
2147
2169
  text: {},
@@ -2152,7 +2174,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2152
2174
  },
2153
2175
  emits: ["copied", "error"],
2154
2176
  setup(e, { emit: t }) {
2155
- let n = e, r = t, { isDark: o } = W(), c = O(!1), l = null, u = i(() => c.value ? "Copied!" : n.label ? `Copy ${n.label}` : "Copy"), d = i(() => n.label ? `Copy ${n.label}` : "Copy"), f = i(() => n.variant === "bordered" ? `inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-colors cursor-pointer shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 ${c.value ? o.value ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-emerald-300 bg-emerald-50 text-emerald-600" : o.value ? "border-gray-600 text-gray-400 hover:text-gray-200 hover:bg-gray-800" : "border-gray-300 text-gray-400 hover:text-gray-600 hover:bg-gray-50"}` : `p-1 rounded transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 ${o.value ? "text-gray-400 hover:text-emerald-300 hover:bg-emerald-500/10" : "text-gray-500 hover:text-emerald-600 hover:bg-emerald-50"}`);
2177
+ let n = e, r = t, { isDark: i } = W(), s = k(!1), l = null, u = a(() => s.value ? "Copied!" : n.label ? `Copy ${n.label}` : "Copy"), d = a(() => n.label ? `Copy ${n.label}` : "Copy"), f = a(() => n.variant === "bordered" ? `inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-colors cursor-pointer shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 ${s.value ? i.value ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-emerald-300 bg-emerald-50 text-emerald-600" : i.value ? "border-gray-600 text-gray-400 hover:text-gray-200 hover:bg-gray-800" : "border-gray-300 text-gray-400 hover:text-gray-600 hover:bg-gray-50"}` : `p-1 rounded transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 ${i.value ? "text-gray-400 hover:text-emerald-300 hover:bg-emerald-500/10" : "text-gray-500 hover:text-emerald-600 hover:bg-emerald-50"}`);
2156
2178
  async function p(e) {
2157
2179
  try {
2158
2180
  if (navigator.clipboard?.writeText) {
@@ -2167,43 +2189,43 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2167
2189
  }
2168
2190
  async function m() {
2169
2191
  try {
2170
- await p(n.text), c.value = !0, l && clearTimeout(l), l = setTimeout(() => {
2171
- c.value = !1;
2192
+ await p(n.text), s.value = !0, l && clearTimeout(l), l = setTimeout(() => {
2193
+ s.value = !1;
2172
2194
  }, n.resetMs), r("copied");
2173
2195
  } catch (e) {
2174
2196
  r("error", e);
2175
2197
  }
2176
2198
  }
2177
- return w(() => {
2199
+ return T(() => {
2178
2200
  l && clearTimeout(l);
2179
- }), (t, n) => (T(), s("button", {
2201
+ }), (t, n) => (E(), c("button", {
2180
2202
  type: "button",
2181
2203
  title: u.value,
2182
2204
  "aria-label": d.value,
2183
- class: v(f.value),
2205
+ class: y(f.value),
2184
2206
  onClick: m
2185
- }, [c.value ? (T(), a(P(ge), {
2207
+ }, [s.value ? (E(), o(F(ve), {
2186
2208
  key: 0,
2187
- class: v(e.iconClass),
2209
+ class: y(e.iconClass),
2188
2210
  "aria-hidden": "true"
2189
- }, null, 8, ["class"])) : (T(), a(P(_e), {
2211
+ }, null, 8, ["class"])) : (E(), o(F(ye), {
2190
2212
  key: 1,
2191
- class: v(e.iconClass),
2213
+ class: y(e.iconClass),
2192
2214
  "aria-hidden": "true"
2193
- }, null, 8, ["class"]))], 10, Cr));
2215
+ }, null, 8, ["class"]))], 10, Dr));
2194
2216
  }
2195
- }), Tr = ["disabled", "aria-busy"], Er = {
2217
+ }), kr = ["disabled", "aria-busy"], Ar = {
2196
2218
  key: 0,
2197
2219
  class: "w-5 h-5 animate-spin shrink-0",
2198
2220
  viewBox: "0 0 24 24",
2199
2221
  fill: "none",
2200
2222
  "aria-hidden": "true"
2201
- }, Dr = {
2223
+ }, jr = {
2202
2224
  key: 1,
2203
2225
  class: "w-5 h-5 shrink-0",
2204
2226
  viewBox: "0 0 48 48",
2205
2227
  "aria-hidden": "true"
2206
- }, Or = /* @__PURE__ */ p({
2228
+ }, Mr = /* @__PURE__ */ m({
2207
2229
  __name: "BaseGoogleSignInButton",
2208
2230
  props: {
2209
2231
  label: { default: "Sign in with Google" },
@@ -2222,39 +2244,39 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2222
2244
  },
2223
2245
  emits: ["click"],
2224
2246
  setup(e, { emit: t }) {
2225
- let n = e, r = t, { isDark: a } = W(), o = i(() => n.disabled || n.loading);
2226
- function l() {
2247
+ let n = e, r = t, { isDark: i } = W(), o = a(() => n.disabled || n.loading);
2248
+ function s() {
2227
2249
  o.value || r("click");
2228
2250
  }
2229
- return (t, n) => (T(), s("button", {
2251
+ return (t, n) => (E(), c("button", {
2230
2252
  type: "button",
2231
2253
  disabled: o.value,
2232
2254
  "aria-busy": e.loading,
2233
- onClick: l,
2234
- class: v(["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" : "", P(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"]])
2235
- }, [e.loading ? (T(), s("svg", Er, [...n[0] ||= [c("circle", {
2255
+ onClick: s,
2256
+ class: y(["inline-flex items-center justify-center gap-3 h-11 px-4 rounded-lg border text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", F(i) ? "bg-gray-900 border-gray-700 text-gray-100 hover:bg-gray-800" : "bg-white border-gray-300 text-gray-700 hover:bg-gray-50"]])
2257
+ }, [e.loading ? (E(), c("svg", Ar, [...n[0] ||= [l("circle", {
2236
2258
  class: "opacity-25",
2237
2259
  cx: "12",
2238
2260
  cy: "12",
2239
2261
  r: "10",
2240
2262
  stroke: "currentColor",
2241
2263
  "stroke-width": "4"
2242
- }, null, -1), c("path", {
2264
+ }, null, -1), l("path", {
2243
2265
  class: "opacity-75",
2244
2266
  fill: "currentColor",
2245
2267
  d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2246
- }, null, -1)]])) : (T(), s("svg", Dr, [...n[1] ||= [u("<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)]])), c("span", null, N(e.label), 1)], 10, Tr));
2268
+ }, null, -1)]])) : (E(), c("svg", jr, [...n[1] ||= [d("<path fill=\"#EA4335\" d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"></path><path fill=\"#4285F4\" d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"></path><path fill=\"#FBBC05\" d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"></path><path fill=\"#34A853\" d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"></path><path fill=\"none\" d=\"M0 0h48v48H0z\"></path>", 5)]])), l("span", null, P(e.label), 1)], 10, kr));
2247
2269
  }
2248
- }), kr = {
2270
+ }), Nr = {
2249
2271
  key: 0,
2250
2272
  class: "flex justify-center mb-6"
2251
- }, Ar = { class: "mb-6 text-center" }, jr = { class: "flex items-center gap-3 my-5" }, Mr = ["disabled"], Nr = { class: "flex items-center justify-between mb-1.5" }, Pr = { class: "relative" }, Fr = ["type", "disabled"], Ir = ["aria-label", "aria-pressed"], Lr = ["disabled"], Rr = ["disabled", "aria-busy"], zr = {
2273
+ }, Pr = { class: "mb-6 text-center" }, Fr = { class: "flex items-center gap-3 my-5" }, Ir = ["disabled"], Lr = { class: "flex items-center justify-between mb-1.5" }, Rr = { class: "relative" }, zr = ["type", "disabled"], Br = ["aria-label", "aria-pressed"], Vr = ["disabled"], Hr = ["disabled", "aria-busy"], Ur = {
2252
2274
  key: 0,
2253
2275
  class: "w-4 h-4 animate-spin",
2254
2276
  viewBox: "0 0 24 24",
2255
2277
  fill: "none",
2256
2278
  "aria-hidden": "true"
2257
- }, Br = /* @__PURE__ */ p({
2279
+ }, Wr = /* @__PURE__ */ m({
2258
2280
  __name: "BaseLoginForm",
2259
2281
  props: {
2260
2282
  title: { default: "Sign in" },
@@ -2280,56 +2302,56 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2280
2302
  },
2281
2303
  emits: ["submit", "google-sign-in"],
2282
2304
  setup(t, { emit: n }) {
2283
- let r = t, a = n, { isDark: l } = W(), u = Z(), p = O(""), m = O(""), h = O(!1), g = O(!1), _ = i(() => r.loading || r.googleLoading);
2284
- function y() {
2285
- _.value || a("submit", {
2286
- email: p.value,
2305
+ let r = t, i = n, { isDark: o } = W(), u = Z(), d = k(""), m = k(""), h = k(!1), g = k(!1), _ = a(() => r.loading || r.googleLoading);
2306
+ function v() {
2307
+ _.value || i("submit", {
2308
+ email: d.value,
2287
2309
  password: m.value,
2288
2310
  ...r.showRemember ? { remember: h.value } : {}
2289
2311
  });
2290
2312
  }
2291
- return (n, r) => (T(), s("div", { class: v(["w-full max-w-sm mx-auto rounded-xl border shadow-sm p-6 sm:p-8", P(u).card]) }, [
2292
- n.$slots.logo ? (T(), s("div", kr, [A(n.$slots, "logo")])) : o("", !0),
2293
- c("div", Ar, [c("h1", { class: v(["text-xl font-semibold", P(u).primaryText]) }, N(t.title), 3), t.subtitle ? (T(), s("p", {
2313
+ return (n, r) => (E(), c("div", { class: y(["w-full max-w-sm mx-auto rounded-xl border shadow-sm p-6 sm:p-8", F(u).card]) }, [
2314
+ n.$slots.logo ? (E(), c("div", Nr, [j(n.$slots, "logo")])) : s("", !0),
2315
+ l("div", Pr, [l("h1", { class: y(["text-xl font-semibold", F(u).primaryText]) }, P(t.title), 3), t.subtitle ? (E(), c("p", {
2294
2316
  key: 0,
2295
- class: v(["mt-1 text-sm", P(u).mutedText])
2296
- }, N(t.subtitle), 3)) : o("", !0)]),
2297
- t.error ? (T(), s("div", {
2317
+ class: y(["mt-1 text-sm", F(u).mutedText])
2318
+ }, P(t.subtitle), 3)) : s("", !0)]),
2319
+ t.error ? (E(), c("div", {
2298
2320
  key: 1,
2299
2321
  role: "alert",
2300
- class: v(["mb-4 rounded-lg border px-3 py-2 text-sm", P(l) ? "bg-red-500/10 border-red-500/30 text-red-300" : "bg-red-50 border-red-200 text-red-700"])
2301
- }, N(t.error), 3)) : o("", !0),
2302
- t.showGoogle ? (T(), s(e, { key: 2 }, [f(Or, {
2322
+ class: y(["mb-4 rounded-lg border px-3 py-2 text-sm", F(o) ? "bg-red-500/10 border-red-500/30 text-red-300" : "bg-red-50 border-red-200 text-red-700"])
2323
+ }, P(t.error), 3)) : s("", !0),
2324
+ t.showGoogle ? (E(), c(e, { key: 2 }, [p(Mr, {
2303
2325
  loading: t.googleLoading,
2304
2326
  disabled: t.loading,
2305
- onClick: r[0] ||= (e) => a("google-sign-in")
2306
- }, null, 8, ["loading", "disabled"]), c("div", jr, [
2307
- c("span", { class: v(["h-px flex-1", P(l) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2),
2308
- c("span", { class: v(["text-xs uppercase tracking-wider", P(u).dimTextAlt]) }, "or", 2),
2309
- c("span", { class: v(["h-px flex-1", P(l) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2)
2310
- ])], 64)) : o("", !0),
2311
- c("form", {
2327
+ onClick: r[0] ||= (e) => i("google-sign-in")
2328
+ }, null, 8, ["loading", "disabled"]), l("div", Fr, [
2329
+ l("span", { class: y(["h-px flex-1", F(o) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2),
2330
+ l("span", { class: y(["text-xs uppercase tracking-wider", F(u).dimTextAlt]) }, "or", 2),
2331
+ l("span", { class: y(["h-px flex-1", F(o) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2)
2332
+ ])], 64)) : s("", !0),
2333
+ l("form", {
2312
2334
  class: "space-y-4",
2313
- onSubmit: z(y, ["prevent"])
2335
+ onSubmit: z(v, ["prevent"])
2314
2336
  }, [
2315
- c("div", null, [c("label", {
2337
+ l("div", null, [l("label", {
2316
2338
  for: "login-email",
2317
- class: v(["block mb-1.5 text-sm font-medium", P(u).label])
2318
- }, " Email ", 2), R(c("input", {
2339
+ class: y(["block mb-1.5 text-sm font-medium", F(u).label])
2340
+ }, " Email ", 2), R(l("input", {
2319
2341
  id: "login-email",
2320
- "onUpdate:modelValue": r[1] ||= (e) => p.value = e,
2342
+ "onUpdate:modelValue": r[1] ||= (e) => d.value = e,
2321
2343
  type: "email",
2322
2344
  name: "email",
2323
2345
  autocomplete: "email",
2324
2346
  required: "",
2325
2347
  disabled: _.value,
2326
2348
  placeholder: "you@example.com",
2327
- class: v(["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", P(u).inputWithPlaceholder])
2328
- }, null, 10, Mr), [[re, p.value]])]),
2329
- c("div", null, [c("div", Nr, [c("label", {
2349
+ class: y(["w-full h-11 px-3 rounded-lg border text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60", F(u).inputWithPlaceholder])
2350
+ }, null, 10, Ir), [[ie, d.value]])]),
2351
+ l("div", null, [l("div", Lr, [l("label", {
2330
2352
  for: "login-password",
2331
- class: v(["block text-sm font-medium", P(u).label])
2332
- }, " Password ", 2), A(n.$slots, "forgot")]), c("div", Pr, [R(c("input", {
2353
+ class: y(["block text-sm font-medium", F(u).label])
2354
+ }, " Password ", 2), j(n.$slots, "forgot")]), l("div", Rr, [R(l("input", {
2333
2355
  id: "login-password",
2334
2356
  "onUpdate:modelValue": r[2] ||= (e) => m.value = e,
2335
2357
  type: g.value ? "text" : "password",
@@ -2338,51 +2360,51 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2338
2360
  required: "",
2339
2361
  disabled: _.value,
2340
2362
  placeholder: "••••••••",
2341
- class: v(["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", P(u).inputWithPlaceholder])
2342
- }, null, 10, Fr), [[ne, m.value]]), c("button", {
2363
+ class: y(["w-full h-11 pl-3 pr-16 rounded-lg border text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60", F(u).inputWithPlaceholder])
2364
+ }, null, 10, zr), [[re, m.value]]), l("button", {
2343
2365
  type: "button",
2344
2366
  onClick: r[3] ||= (e) => g.value = !g.value,
2345
2367
  "aria-label": g.value ? "Hide password" : "Show password",
2346
2368
  "aria-pressed": g.value,
2347
- class: v(["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", P(u).mutedText])
2348
- }, N(g.value ? "Hide" : "Show"), 11, Ir)])]),
2349
- t.showRemember ? (T(), s("label", {
2369
+ class: y(["absolute inset-y-0 right-0 px-3 text-xs font-medium cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 rounded-r-lg", F(u).mutedText])
2370
+ }, P(g.value ? "Hide" : "Show"), 11, Br)])]),
2371
+ t.showRemember ? (E(), c("label", {
2350
2372
  key: 0,
2351
- class: v(["flex items-center gap-2 text-sm cursor-pointer select-none", P(u).bodyText])
2352
- }, [R(c("input", {
2373
+ class: y(["flex items-center gap-2 text-sm cursor-pointer select-none", F(u).bodyText])
2374
+ }, [R(l("input", {
2353
2375
  "onUpdate:modelValue": r[4] ||= (e) => h.value = e,
2354
2376
  type: "checkbox",
2355
2377
  disabled: _.value,
2356
2378
  class: "w-4 h-4 rounded border-gray-300 text-emerald-600 focus:ring-emerald-500"
2357
- }, null, 8, Lr), [[te, h.value]]), r[5] ||= d(" Remember me ", -1)], 2)) : o("", !0),
2358
- c("button", {
2379
+ }, null, 8, Vr), [[ne, h.value]]), r[5] ||= f(" Remember me ", -1)], 2)) : s("", !0),
2380
+ l("button", {
2359
2381
  type: "submit",
2360
2382
  disabled: _.value,
2361
2383
  "aria-busy": t.loading,
2362
2384
  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"
2363
- }, [t.loading ? (T(), s("svg", zr, [...r[6] ||= [c("circle", {
2385
+ }, [t.loading ? (E(), c("svg", Ur, [...r[6] ||= [l("circle", {
2364
2386
  class: "opacity-25",
2365
2387
  cx: "12",
2366
2388
  cy: "12",
2367
2389
  r: "10",
2368
2390
  stroke: "currentColor",
2369
2391
  "stroke-width": "4"
2370
- }, null, -1), c("path", {
2392
+ }, null, -1), l("path", {
2371
2393
  class: "opacity-75",
2372
2394
  fill: "currentColor",
2373
2395
  d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2374
- }, null, -1)]])) : o("", !0), d(" " + N(t.submitLabel), 1)], 8, Rr)
2396
+ }, null, -1)]])) : s("", !0), f(" " + P(t.submitLabel), 1)], 8, Hr)
2375
2397
  ], 32),
2376
- n.$slots.footer ? (T(), s("div", {
2398
+ n.$slots.footer ? (E(), c("div", {
2377
2399
  key: 3,
2378
- class: v(["mt-6 text-center text-sm", P(u).mutedText])
2379
- }, [A(n.$slots, "footer")], 2)) : o("", !0)
2400
+ class: y(["mt-6 text-center text-sm", F(u).mutedText])
2401
+ }, [j(n.$slots, "footer")], 2)) : s("", !0)
2380
2402
  ], 2));
2381
2403
  }
2382
- }), Vr = ["aria-label"], Hr = { class: "flex-1 overflow-y-auto" }, Ur = {
2404
+ }), Gr = ["aria-label"], Kr = { class: "flex-1 overflow-y-auto" }, qr = {
2383
2405
  key: 0,
2384
2406
  class: "flex flex-col items-center justify-center text-center px-6 py-16 gap-3"
2385
- }, Wr = ["onClick"], Gr = { class: "min-w-0 flex-1" }, Kr = { class: "flex items-baseline justify-between gap-2" }, qr = /* @__PURE__ */ p({
2407
+ }, Jr = ["onClick"], Yr = { class: "min-w-0 flex-1" }, Xr = { class: "flex items-baseline justify-between gap-2" }, Zr = /* @__PURE__ */ m({
2386
2408
  __name: "BaseNotificationPanel",
2387
2409
  props: {
2388
2410
  title: { default: "Notifications" },
@@ -2393,86 +2415,86 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2393
2415
  }
2394
2416
  },
2395
2417
  emits: ["select"],
2396
- setup(n, { emit: l }) {
2397
- let u = l, { isDark: p } = W(), m = Z(), { notifications: h, unreadCount: g, open: _, closePanel: y, markAllRead: b, markRead: x } = zn(), S = {
2418
+ setup(n, { emit: i }) {
2419
+ let u = i, { isDark: d } = W(), m = Z(), { notifications: h, unreadCount: g, open: _, closePanel: v, markAllRead: b, markRead: x } = Un(), S = {
2398
2420
  info: "bg-sky-500",
2399
2421
  success: "bg-emerald-500",
2400
2422
  warning: "bg-amber-500",
2401
2423
  error: "bg-red-500"
2402
- }, C = i(() => h.value.length);
2424
+ }, C = a(() => h.value.length);
2403
2425
  function w(e) {
2404
2426
  x(e), u("select", e);
2405
2427
  }
2406
- return sn(() => {
2407
- _.value && y();
2408
- }), (i, l) => (T(), a(t, { to: "body" }, [f(r, {
2428
+ return dn(() => {
2429
+ _.value && v();
2430
+ }), (i, a) => (E(), o(t, { to: "body" }, [p(r, {
2409
2431
  "enter-active-class": "transition-opacity duration-200",
2410
2432
  "enter-from-class": "opacity-0",
2411
2433
  "leave-active-class": "transition-opacity duration-200",
2412
2434
  "leave-to-class": "opacity-0"
2413
2435
  }, {
2414
- default: L(() => [P(_) ? (T(), s("div", {
2436
+ default: L(() => [F(_) ? (E(), c("div", {
2415
2437
  key: 0,
2416
2438
  class: "fixed inset-0 z-[60] bg-black/50",
2417
2439
  "aria-hidden": "true",
2418
- onClick: l[0] ||= (...e) => P(y) && P(y)(...e)
2419
- })) : o("", !0)]),
2440
+ onClick: a[0] ||= (...e) => F(v) && F(v)(...e)
2441
+ })) : s("", !0)]),
2420
2442
  _: 1
2421
- }), f(r, {
2443
+ }), p(r, {
2422
2444
  "enter-active-class": "transition-transform duration-300 ease-out",
2423
2445
  "enter-from-class": "-translate-x-full",
2424
2446
  "leave-active-class": "transition-transform duration-300 ease-in",
2425
2447
  "leave-to-class": "-translate-x-full"
2426
2448
  }, {
2427
- default: L(() => [P(_) ? (T(), s("aside", {
2449
+ default: L(() => [F(_) ? (E(), c("aside", {
2428
2450
  key: 0,
2429
2451
  role: "dialog",
2430
2452
  "aria-modal": "true",
2431
2453
  "aria-label": n.title,
2432
- class: v(["fixed top-0 left-0 z-[70] h-screen w-full max-w-sm flex flex-col border-r shadow-xl", P(p) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"])
2454
+ class: y(["fixed top-0 left-0 z-[70] h-screen w-full max-w-sm flex flex-col border-r shadow-xl", F(d) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"])
2433
2455
  }, [
2434
- c("div", { class: v(["flex items-center justify-between gap-3 px-5 py-4 border-b shrink-0", P(m).border]) }, [c("h2", { class: v(["text-lg font-semibold flex items-center gap-2", P(m).primaryText]) }, [d(N(n.title) + " ", 1), c("span", { class: v(["text-sm font-normal", P(m).dimTextAlt]) }, "— " + N(C.value), 3)], 2), c("button", {
2456
+ l("div", { class: y(["flex items-center justify-between gap-3 px-5 py-4 border-b shrink-0", F(m).border]) }, [l("h2", { class: y(["text-lg font-semibold flex items-center gap-2", F(m).primaryText]) }, [f(P(n.title) + " ", 1), l("span", { class: y(["text-sm font-normal", F(m).dimTextAlt]) }, "— " + P(C.value), 3)], 2), l("button", {
2435
2457
  type: "button",
2436
- onClick: l[1] ||= (...e) => P(y) && P(y)(...e),
2458
+ onClick: a[1] ||= (...e) => F(v) && F(v)(...e),
2437
2459
  "aria-label": "Close notifications",
2438
- class: v(["p-1.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", P(p) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"])
2439
- }, [f(P(B), {
2460
+ class: y(["p-1.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", F(d) ? "text-gray-400 hover:bg-gray-800" : "text-gray-500 hover:bg-gray-100"])
2461
+ }, [p(F(B), {
2440
2462
  class: "w-5 h-5",
2441
2463
  "aria-hidden": "true"
2442
2464
  })], 2)], 2),
2443
- n.showMarkAllRead && P(g) > 0 ? (T(), s("div", {
2465
+ n.showMarkAllRead && F(g) > 0 ? (E(), c("div", {
2444
2466
  key: 0,
2445
- class: v(["px-5 py-2 border-b shrink-0 flex justify-end", P(m).border])
2446
- }, [c("button", {
2467
+ class: y(["px-5 py-2 border-b shrink-0 flex justify-end", F(m).border])
2468
+ }, [l("button", {
2447
2469
  type: "button",
2448
- onClick: l[2] ||= (...e) => P(b) && P(b)(...e),
2449
- class: v(["text-xs font-medium cursor-pointer transition-colors focus:outline-none focus-visible:underline", P(m).emeraldText])
2450
- }, " Mark all as read ", 2)], 2)) : o("", !0),
2451
- c("div", Hr, [C.value === 0 ? (T(), s("div", Ur, [f(P(le), {
2452
- class: v(["w-10 h-10", P(m).illustration]),
2470
+ onClick: a[2] ||= (...e) => F(b) && F(b)(...e),
2471
+ class: y(["text-xs font-medium cursor-pointer transition-colors focus:outline-none focus-visible:underline", F(m).emeraldText])
2472
+ }, " Mark all as read ", 2)], 2)) : s("", !0),
2473
+ l("div", Kr, [C.value === 0 ? (E(), c("div", qr, [p(F(de), {
2474
+ class: y(["w-10 h-10", F(m).illustration]),
2453
2475
  "aria-hidden": "true"
2454
- }, null, 8, ["class"]), c("p", { class: v(["text-sm", P(m).mutedText]) }, N(n.emptyText), 3)])) : (T(), s("ul", {
2476
+ }, null, 8, ["class"]), l("p", { class: y(["text-sm", F(m).mutedText]) }, P(n.emptyText), 3)])) : (E(), c("ul", {
2455
2477
  key: 1,
2456
- class: v(["divide-y", P(p) ? "divide-gray-800" : "divide-gray-100"])
2457
- }, [(T(!0), s(e, null, k(P(h), (e) => (T(), s("li", { key: e.id }, [c("button", {
2478
+ class: y(["divide-y", F(d) ? "divide-gray-800" : "divide-gray-100"])
2479
+ }, [(E(!0), c(e, null, A(F(h), (e) => (E(), c("li", { key: e.id }, [l("button", {
2458
2480
  type: "button",
2459
2481
  onClick: (t) => w(e.id),
2460
- class: v(["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 ? "" : P(p) ? "bg-emerald-500/5" : "bg-emerald-50/60", P(p) ? "hover:bg-gray-800" : "hover:bg-gray-50"]])
2461
- }, [c("span", {
2462
- class: v(["mt-1.5 w-2 h-2 rounded-full shrink-0", e.read ? P(p) ? "bg-gray-700" : "bg-gray-300" : S[e.type ?? "info"]]),
2482
+ class: y(["w-full text-left px-5 py-4 flex gap-3 transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [e.read ? "" : F(d) ? "bg-emerald-500/5" : "bg-emerald-50/60", F(d) ? "hover:bg-gray-800" : "hover:bg-gray-50"]])
2483
+ }, [l("span", {
2484
+ class: y(["mt-1.5 w-2 h-2 rounded-full shrink-0", e.read ? F(d) ? "bg-gray-700" : "bg-gray-300" : S[e.type ?? "info"]]),
2463
2485
  "aria-hidden": "true"
2464
- }, null, 2), c("span", Gr, [c("span", Kr, [c("span", { class: v(["text-sm truncate", [e.read ? "font-medium" : "font-semibold", P(m).primaryTextSoft]]) }, N(e.title), 3), e.time ? (T(), s("span", {
2486
+ }, null, 2), l("span", Yr, [l("span", Xr, [l("span", { class: y(["text-sm truncate", [e.read ? "font-medium" : "font-semibold", F(m).primaryTextSoft]]) }, P(e.title), 3), e.time ? (E(), c("span", {
2465
2487
  key: 0,
2466
- class: v(["text-xs shrink-0", P(m).dimText])
2467
- }, N(e.time), 3)) : o("", !0)]), e.message ? (T(), s("span", {
2488
+ class: y(["text-xs shrink-0", F(m).dimText])
2489
+ }, P(e.time), 3)) : s("", !0)]), e.message ? (E(), c("span", {
2468
2490
  key: 0,
2469
- class: v(["mt-0.5 block text-sm", P(m).mutedText])
2470
- }, N(e.message), 3)) : o("", !0)])], 10, Wr)]))), 128))], 2))])
2471
- ], 10, Vr)) : o("", !0)]),
2491
+ class: y(["mt-0.5 block text-sm", F(m).mutedText])
2492
+ }, P(e.message), 3)) : s("", !0)])], 10, Jr)]))), 128))], 2))])
2493
+ ], 10, Gr)) : s("", !0)]),
2472
2494
  _: 1
2473
2495
  })]));
2474
2496
  }
2475
- }), Jr = ["disabled"], Yr = /* @__PURE__ */ p({
2497
+ }), Qr = ["disabled"], $r = /* @__PURE__ */ m({
2476
2498
  __name: "BaseChipButton",
2477
2499
  props: {
2478
2500
  size: { default: "sm" },
@@ -2484,55 +2506,55 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2484
2506
  emits: ["click"],
2485
2507
  setup(e, { emit: t }) {
2486
2508
  let n = t, { isDark: r } = W();
2487
- return (t, i) => (T(), s("button", {
2509
+ return (t, i) => (E(), c("button", {
2488
2510
  type: "button",
2489
2511
  disabled: e.disabled,
2490
- class: v(["inline-flex items-center gap-1 font-medium rounded-md border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [e.size === "xs" ? "text-xs px-2 py-0.5" : "text-xs px-2.5 py-1", P(r) ? "text-emerald-300 border-emerald-700 bg-emerald-900/30 hover:bg-emerald-800/50" : "text-emerald-700 border-emerald-200 bg-emerald-50 hover:bg-emerald-100"]]),
2512
+ class: y(["inline-flex items-center gap-1 font-medium rounded-md border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [e.size === "xs" ? "text-xs px-2 py-0.5" : "text-xs px-2.5 py-1", F(r) ? "text-emerald-300 border-emerald-700 bg-emerald-900/30 hover:bg-emerald-800/50" : "text-emerald-700 border-emerald-200 bg-emerald-50 hover:bg-emerald-100"]]),
2491
2513
  onClick: i[0] ||= (e) => n("click")
2492
- }, [A(t.$slots, "default")], 10, Jr));
2514
+ }, [j(t.$slots, "default")], 10, Qr));
2493
2515
  }
2494
- }), Xr = /* @__PURE__ */ p({
2516
+ }), ei = /* @__PURE__ */ m({
2495
2517
  __name: "BaseRemoveButton",
2496
2518
  emits: ["click"],
2497
2519
  setup(e, { emit: t }) {
2498
2520
  let n = t;
2499
- return (e, t) => (T(), s("button", {
2521
+ return (e, t) => (E(), c("button", {
2500
2522
  type: "button",
2501
2523
  class: "px-2 text-lg leading-none text-red-400 hover:text-red-600 transition-colors cursor-pointer rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-red-400 disabled:cursor-not-allowed disabled:text-gray-400 disabled:hover:text-gray-400",
2502
2524
  onClick: t[0] ||= (e) => n("click")
2503
2525
  }, " × "));
2504
2526
  }
2505
- }), Zr = { class: "relative flex h-2 w-2" }, Qr = {
2527
+ }), ti = { class: "relative flex h-2 w-2" }, ni = {
2506
2528
  key: 0,
2507
2529
  class: "animate-ping absolute inline-flex h-full w-full rounded-full bg-emerald-400 opacity-75",
2508
2530
  "aria-hidden": "true"
2509
- }, $r = /* @__PURE__ */ p({
2531
+ }, ri = /* @__PURE__ */ m({
2510
2532
  __name: "BaseStatusPill",
2511
2533
  props: {
2512
2534
  status: {},
2513
2535
  label: {}
2514
2536
  },
2515
2537
  setup(e) {
2516
- let t = e, { isDark: n } = W(), r = i(() => {
2538
+ let t = e, { isDark: n } = W(), r = a(() => {
2517
2539
  switch (t.status) {
2518
2540
  case "ok": return n.value ? "bg-emerald-500/10 text-emerald-400" : "bg-emerald-50 text-emerald-700";
2519
2541
  case "error": return n.value ? "bg-red-500/10 text-red-400" : "bg-red-50 text-red-700";
2520
2542
  default: return n.value ? "bg-gray-700 text-gray-400" : "bg-gray-100 text-gray-500";
2521
2543
  }
2522
- }), a = i(() => {
2544
+ }), i = a(() => {
2523
2545
  switch (t.status) {
2524
2546
  case "ok": return "bg-emerald-500";
2525
2547
  case "error": return "bg-red-500";
2526
2548
  default: return "bg-gray-400";
2527
2549
  }
2528
2550
  });
2529
- return (t, n) => (T(), s("div", { class: v(["flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs", r.value]) }, [c("span", Zr, [e.status === "ok" ? (T(), s("span", Qr)) : o("", !0), c("span", { class: v(["relative inline-flex rounded-full h-2 w-2", a.value]) }, null, 2)]), d(" " + N(e.label), 1)], 2));
2551
+ return (t, n) => (E(), c("div", { class: y(["flex items-center gap-2 px-3 py-1.5 rounded-lg text-xs", r.value]) }, [l("span", ti, [e.status === "ok" ? (E(), c("span", ni)) : s("", !0), l("span", { class: y(["relative inline-flex rounded-full h-2 w-2", i.value]) }, null, 2)]), f(" " + P(e.label), 1)], 2));
2530
2552
  }
2531
- }), ei = { class: "text-sm font-medium" }, ti = [
2553
+ }), ii = { class: "text-sm font-medium" }, ai = [
2532
2554
  "accept",
2533
2555
  "multiple",
2534
2556
  "disabled"
2535
- ], ni = /* @__PURE__ */ p({
2557
+ ], oi = /* @__PURE__ */ m({
2536
2558
  __name: "BaseFileDropzone",
2537
2559
  props: {
2538
2560
  label: {},
@@ -2549,8 +2571,8 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2549
2571
  },
2550
2572
  emits: ["files"],
2551
2573
  setup(e, { emit: t }) {
2552
- let n = e, r = t, { isDark: i } = W(), a = O(!1);
2553
- function l(e) {
2574
+ let n = e, r = t, { isDark: i } = W(), a = k(!1);
2575
+ function o(e) {
2554
2576
  let t = e.target, n = Array.from(t.files ?? []);
2555
2577
  t.value = "", n.length && r("files", n);
2556
2578
  }
@@ -2562,40 +2584,40 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2562
2584
  let t = Array.from(e.dataTransfer?.files ?? []);
2563
2585
  t.length && r("files", n.multiple ? t : t.slice(0, 1));
2564
2586
  }
2565
- return (t, n) => (T(), s("label", {
2566
- class: v(["flex flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed px-6 py-10 text-center transition-colors", [e.disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer", a.value ? P(i) ? "border-emerald-500 text-emerald-400" : "border-emerald-500 text-emerald-600" : P(i) ? "border-gray-700 hover:border-emerald-500 text-gray-400 hover:text-emerald-400" : "border-gray-300 hover:border-emerald-500 text-gray-500 hover:text-emerald-600"]]),
2587
+ return (t, n) => (E(), c("label", {
2588
+ class: y(["flex flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed px-6 py-10 text-center transition-colors", [e.disabled ? "opacity-50 cursor-not-allowed" : "cursor-pointer", a.value ? F(i) ? "border-emerald-500 text-emerald-400" : "border-emerald-500 text-emerald-600" : F(i) ? "border-gray-700 hover:border-emerald-500 text-gray-400 hover:text-emerald-400" : "border-gray-300 hover:border-emerald-500 text-gray-500 hover:text-emerald-600"]]),
2567
2589
  onDragover: z(u, ["prevent"]),
2568
2590
  onDragleave: n[0] ||= z((e) => a.value = !1, ["prevent"]),
2569
2591
  onDrop: z(d, ["prevent"])
2570
2592
  }, [
2571
- A(t.$slots, "icon", {}, () => [n[1] ||= c("svg", {
2593
+ j(t.$slots, "icon", {}, () => [n[1] ||= l("svg", {
2572
2594
  class: "w-10 h-10",
2573
2595
  fill: "none",
2574
2596
  viewBox: "0 0 24 24",
2575
2597
  stroke: "currentColor",
2576
2598
  "stroke-width": "1.5",
2577
2599
  "aria-hidden": "true"
2578
- }, [c("path", {
2600
+ }, [l("path", {
2579
2601
  "stroke-linecap": "round",
2580
2602
  "stroke-linejoin": "round",
2581
2603
  d: "M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m6.75 12-3-3m0 0-3 3m3-3v6m-1.5-15H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z"
2582
2604
  })], -1)]),
2583
- c("p", ei, N(e.label), 1),
2584
- e.hint ? (T(), s("p", {
2605
+ l("p", ii, P(e.label), 1),
2606
+ e.hint ? (E(), c("p", {
2585
2607
  key: 0,
2586
- class: v(["text-xs", P(i) ? "text-gray-500" : "text-gray-400"])
2587
- }, N(e.hint), 3)) : o("", !0),
2588
- c("input", {
2608
+ class: y(["text-xs", F(i) ? "text-gray-500" : "text-gray-400"])
2609
+ }, P(e.hint), 3)) : s("", !0),
2610
+ l("input", {
2589
2611
  type: "file",
2590
2612
  class: "hidden",
2591
2613
  accept: e.accept,
2592
2614
  multiple: e.multiple,
2593
2615
  disabled: e.disabled,
2594
- onChange: l
2595
- }, null, 40, ti)
2616
+ onChange: o
2617
+ }, null, 40, ai)
2596
2618
  ], 34));
2597
2619
  }
2598
- }), ri = /* @__PURE__ */ p({
2620
+ }), si = /* @__PURE__ */ m({
2599
2621
  __name: "BaseCodeBlock",
2600
2622
  props: {
2601
2623
  code: {},
@@ -2613,20 +2635,20 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2613
2635
  dark: "border bg-gray-900 border-gray-700 text-gray-300",
2614
2636
  light: "border bg-white border-gray-200 text-gray-700"
2615
2637
  }
2616
- }, a = {
2638
+ }, i = {
2617
2639
  sm: "text-sm px-5 py-4 rounded-lg",
2618
2640
  xs: "text-xs p-3 rounded-lg"
2619
- }, o = i(() => {
2641
+ }, o = a(() => {
2620
2642
  let e = r[t.variant];
2621
2643
  return n.value ? e.dark : e.light;
2622
- }), c = i(() => a[t.size]);
2623
- return (t, n) => (T(), s("pre", { class: v(["font-mono overflow-auto", [
2624
- c.value,
2644
+ }), s = a(() => i[t.size]);
2645
+ return (t, n) => (E(), c("pre", { class: y(["font-mono overflow-auto", [
2646
+ s.value,
2625
2647
  o.value,
2626
2648
  e.maxHeightClass
2627
- ]]) }, N(e.code), 3));
2649
+ ]]) }, P(e.code), 3));
2628
2650
  }
2629
- }), ii = ["value", "type"], ai = /* @__PURE__ */ p({
2651
+ }), ci = ["value", "type"], li = /* @__PURE__ */ m({
2630
2652
  __name: "BaseInput",
2631
2653
  props: {
2632
2654
  modelValue: { default: "" },
@@ -2643,14 +2665,14 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2643
2665
  function r(e) {
2644
2666
  n("update:modelValue", e.target.value);
2645
2667
  }
2646
- return (t, n) => (T(), s("input", {
2668
+ return (t, n) => (E(), c("input", {
2647
2669
  value: e.modelValue,
2648
2670
  type: e.type,
2649
- class: v(["rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm placeholder:text-slate-400 dark:placeholder:text-slate-500 transition-colors hover:border-slate-400 dark:hover:border-slate-500 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500/40 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", e.size === "sm" ? "px-2 py-1.5" : "px-3 py-2"]]),
2671
+ class: y(["rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm placeholder:text-slate-400 dark:placeholder:text-slate-500 transition-colors hover:border-slate-400 dark:hover:border-slate-500 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500/40 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", e.size === "sm" ? "px-2 py-1.5" : "px-3 py-2"]]),
2650
2672
  onInput: r
2651
- }, null, 42, ii));
2673
+ }, null, 42, ci));
2652
2674
  }
2653
- }), oi = ["value"], si = /* @__PURE__ */ p({
2675
+ }), ui = ["value"], di = /* @__PURE__ */ m({
2654
2676
  inheritAttrs: !1,
2655
2677
  __name: "BaseSelect",
2656
2678
  props: {
@@ -2659,28 +2681,35 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2659
2681
  block: {
2660
2682
  type: Boolean,
2661
2683
  default: !0
2684
+ },
2685
+ humanize: {
2686
+ type: Boolean,
2687
+ default: !0
2662
2688
  }
2663
2689
  },
2664
2690
  emits: ["update:modelValue"],
2665
2691
  setup(e, { emit: t }) {
2666
- let n = t;
2667
- function r(e) {
2668
- n("update:modelValue", e.target.value);
2692
+ let n = e, r = te(), i = () => {
2693
+ let e = r.default?.() ?? [];
2694
+ return n.humanize ? Ve(e, ["option", "optgroup"]) : e;
2695
+ }, a = t;
2696
+ function o(e) {
2697
+ a("update:modelValue", e.target.value);
2669
2698
  }
2670
- return (t, n) => (T(), s("div", { class: v(["relative", e.block ? "w-full" : "inline-block"]) }, [c("select", g(t.$attrs, {
2699
+ return (t, n) => (E(), c("div", { class: y(["relative", e.block ? "w-full" : "inline-block"]) }, [l("select", _(t.$attrs, {
2671
2700
  value: e.modelValue,
2672
- class: ["w-full appearance-none bg-none rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm cursor-pointer transition-colors hover:border-slate-400 dark:hover:border-slate-500 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500/40 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", e.size === "md" ? "py-2 pl-3 pr-9" : "py-1.5 pl-2.5 pr-8"],
2673
- onChange: r
2674
- }), [A(t.$slots, "default")], 16, oi), f(P(me), {
2675
- class: v(["pointer-events-none absolute top-1/2 h-4 w-4 -translate-y-1/2 text-slate-500 dark:text-slate-400", e.size === "md" ? "right-3" : "right-2.5"]),
2701
+ class: ["base-select w-full appearance-none bg-none rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm cursor-pointer transition-colors hover:border-slate-400 dark:hover:border-slate-500 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500/40 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", e.size === "md" ? "py-2 pl-3 pr-9" : "py-1.5 pl-2.5 pr-8"],
2702
+ onChange: o
2703
+ }), [p(i)], 16, ui), p(F(ge), {
2704
+ class: y(["pointer-events-none absolute top-1/2 h-4 w-4 -translate-y-1/2 text-slate-500 dark:text-slate-400", e.size === "md" ? "right-3" : "right-2.5"]),
2676
2705
  "aria-hidden": "true"
2677
2706
  }, null, 8, ["class"])], 2));
2678
2707
  }
2679
- }), ci = [
2708
+ }), fi = [
2680
2709
  "disabled",
2681
2710
  "aria-label",
2682
2711
  "aria-expanded"
2683
- ], li = ["aria-label"], ui = ["aria-selected", "title"], di = ["disabled", "onClick"], fi = /* @__PURE__ */ p({
2712
+ ], pi = ["aria-label"], mi = ["aria-selected", "title"], hi = ["disabled", "onClick"], gi = /* @__PURE__ */ m({
2684
2713
  __name: "BaseDropdown",
2685
2714
  props: {
2686
2715
  options: {},
@@ -2701,7 +2730,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2701
2730
  },
2702
2731
  emits: ["update:modelValue"],
2703
2732
  setup(t, { emit: n }) {
2704
- let r = t, a = n, l = O(!1), u = O(null), d = i(() => r.options.find((e) => e.value === r.modelValue) ?? null), p = i(() => {
2733
+ let r = t, i = n, o = k(!1), u = k(null), d = a(() => r.options.find((e) => e.value === r.modelValue) ?? null), f = a(() => {
2705
2734
  let e = "flex items-center justify-between gap-2 text-left transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed ";
2706
2735
  if (r.triggerClass) return e + r.triggerClass;
2707
2736
  let t = r.size === "sm" ? "px-3 py-2" : "px-4 py-2.5";
@@ -2711,54 +2740,54 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2711
2740
  return `block w-full px-4 py-2 text-left text-sm transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500 disabled:opacity-50 disabled:cursor-not-allowed ${e.value === r.modelValue ? "bg-emerald-500 text-white" : "text-slate-700 dark:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800"}`;
2712
2741
  }
2713
2742
  function h() {
2714
- r.disabled || (l.value = !l.value);
2743
+ r.disabled || (o.value = !o.value);
2715
2744
  }
2716
2745
  function g(e) {
2717
- e.disabled || (a("update:modelValue", e.value), l.value = !1);
2746
+ e.disabled || (i("update:modelValue", e.value), o.value = !1);
2718
2747
  }
2719
- sn(() => {
2720
- l.value = !1;
2748
+ dn(() => {
2749
+ o.value = !1;
2721
2750
  });
2722
2751
  function _(e) {
2723
- l.value && u.value && !u.value.contains(e.target) && (l.value = !1);
2752
+ o.value && u.value && !u.value.contains(e.target) && (o.value = !1);
2724
2753
  }
2725
- return S(() => document.addEventListener("click", _)), x(() => document.removeEventListener("click", _)), (n, r) => (T(), s("div", {
2754
+ return C(() => document.addEventListener("click", _)), S(() => document.removeEventListener("click", _)), (n, r) => (E(), c("div", {
2726
2755
  ref_key: "rootEl",
2727
2756
  ref: u,
2728
- class: v(t.block ? "relative w-full" : "relative inline-block")
2729
- }, [c("button", {
2757
+ class: y(t.block ? "relative w-full" : "relative inline-block")
2758
+ }, [l("button", {
2730
2759
  type: "button",
2731
- class: v([p.value, t.block ? "w-full" : ""]),
2760
+ class: y([f.value, t.block ? "w-full" : ""]),
2732
2761
  disabled: t.disabled,
2733
2762
  "aria-label": t.ariaLabel || void 0,
2734
2763
  "aria-haspopup": "listbox",
2735
- "aria-expanded": l.value,
2764
+ "aria-expanded": o.value,
2736
2765
  onClick: h
2737
- }, [c("span", { class: v(["min-w-0 truncate", d.value ? "" : "text-slate-400 dark:text-slate-500"]) }, N(d.value ? d.value.label : t.placeholder), 3), f(P(me), {
2738
- class: v(["shrink-0 transition-transform", [t.chevronClass, l.value ? "rotate-180" : ""]]),
2766
+ }, [l("span", { class: y(["min-w-0 truncate", d.value ? "" : "text-slate-400 dark:text-slate-500"]) }, P(d.value ? d.value.label : t.placeholder), 3), p(F(ge), {
2767
+ class: y(["shrink-0 transition-transform", [t.chevronClass, o.value ? "rotate-180" : ""]]),
2739
2768
  "aria-hidden": "true"
2740
- }, null, 8, ["class"])], 10, ci), l.value ? (T(), s("ul", {
2769
+ }, null, 8, ["class"])], 10, fi), o.value ? (E(), c("ul", {
2741
2770
  key: 0,
2742
2771
  role: "listbox",
2743
2772
  "aria-label": t.ariaLabel || t.placeholder,
2744
2773
  class: "absolute z-20 mt-1 w-full min-w-max max-w-xs max-h-60 overflow-auto rounded-lg border border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 py-1 shadow-lg focus:outline-none"
2745
- }, [(T(!0), s(e, null, k(t.options, (e) => (T(), s("li", {
2774
+ }, [(E(!0), c(e, null, A(t.options, (e) => (E(), c("li", {
2746
2775
  key: String(e.value),
2747
2776
  role: "option",
2748
2777
  "aria-selected": e.value === t.modelValue,
2749
2778
  title: e.title
2750
- }, [c("button", {
2779
+ }, [l("button", {
2751
2780
  type: "button",
2752
2781
  disabled: e.disabled,
2753
- class: v(m(e)),
2782
+ class: y(m(e)),
2754
2783
  onClick: (t) => g(e)
2755
- }, N(e.label), 11, di)], 8, ui))), 128))], 8, li)) : o("", !0)], 2));
2784
+ }, P(e.label), 11, hi)], 8, mi))), 128))], 8, pi)) : s("", !0)], 2));
2756
2785
  }
2757
- }), pi = ["role", "aria-label"], mi = [
2786
+ }), _i = ["role", "aria-label"], vi = [
2758
2787
  "aria-pressed",
2759
2788
  "title",
2760
2789
  "onClick"
2761
- ], hi = "bg-slate-50 dark:bg-slate-900 text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800", gi = /* @__PURE__ */ p({
2790
+ ], yi = "bg-slate-50 dark:bg-slate-900 text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800", bi = /* @__PURE__ */ m({
2762
2791
  __name: "BaseSegmentedControl",
2763
2792
  props: {
2764
2793
  options: {},
@@ -2772,25 +2801,25 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2772
2801
  },
2773
2802
  emits: ["update:modelValue"],
2774
2803
  setup(t, { emit: n }) {
2775
- let r = t, a = n, o = i(() => r.variant === "toolbar" ? "inline-flex h-9 divide-x divide-slate-300 dark:divide-slate-600 rounded-md border border-slate-300 dark:border-slate-600 overflow-hidden" : "inline-flex rounded border border-slate-300 dark:border-slate-600 overflow-hidden"), c = i(() => r.variant === "toolbar" ? "flex items-center px-3.5 text-xs font-semibold uppercase tracking-wide transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500" : `${r.variant === "wide" ? "px-4 py-2" : "px-3 py-2"} text-sm font-medium transition-colors cursor-pointer border-l first:border-l-0 border-slate-300 dark:border-slate-600 focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500`), l = i(() => r.variant === "wide" ? "bg-emerald-600 text-white" : "bg-emerald-500 text-white");
2804
+ let r = t, i = n, o = a(() => r.variant === "toolbar" ? "inline-flex h-9 divide-x divide-slate-300 dark:divide-slate-600 rounded-md border border-slate-300 dark:border-slate-600 overflow-hidden" : "inline-flex rounded border border-slate-300 dark:border-slate-600 overflow-hidden"), s = a(() => r.variant === "toolbar" ? "flex items-center px-3.5 text-xs font-semibold uppercase tracking-wide transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500" : `${r.variant === "wide" ? "px-4 py-2" : "px-3 py-2"} text-sm font-medium transition-colors cursor-pointer border-l first:border-l-0 border-slate-300 dark:border-slate-600 focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500`), l = a(() => r.variant === "wide" ? "bg-emerald-600 text-white" : "bg-emerald-500 text-white");
2776
2805
  function u(e) {
2777
2806
  let t = e.value === r.modelValue;
2778
- return r.optionClass ? r.optionClass(e, t) : t ? l.value : hi;
2807
+ return r.optionClass ? r.optionClass(e, t) : t ? l.value : yi;
2779
2808
  }
2780
- return (n, r) => (T(), s("div", {
2809
+ return (n, r) => (E(), c("div", {
2781
2810
  role: t.ariaLabel ? "group" : void 0,
2782
2811
  "aria-label": t.ariaLabel || void 0,
2783
- class: v(o.value)
2784
- }, [(T(!0), s(e, null, k(t.options, (e) => (T(), s("button", {
2812
+ class: y(o.value)
2813
+ }, [(E(!0), c(e, null, A(t.options, (e) => (E(), c("button", {
2785
2814
  key: String(e.value),
2786
2815
  type: "button",
2787
- class: v([c.value, u(e)]),
2816
+ class: y([s.value, u(e)]),
2788
2817
  "aria-pressed": e.value === t.modelValue,
2789
2818
  title: e.title,
2790
- onClick: (t) => a("update:modelValue", e.value)
2791
- }, N(e.label), 11, mi))), 128))], 10, pi));
2819
+ onClick: (t) => i("update:modelValue", e.value)
2820
+ }, P(e.label), 11, vi))), 128))], 10, _i));
2792
2821
  }
2793
- }), _i = { class: "w-full text-sm" }, vi = { class: "bg-slate-50 dark:bg-slate-800/60 text-slate-600 dark:text-slate-300" }, yi = { class: "text-left border-b border-slate-200 dark:border-slate-700" }, bi = { class: "divide-y divide-slate-200 dark:divide-slate-700 [&>tr]:transition-colors [&>tr:hover]:bg-slate-50 dark:[&>tr:hover]:bg-slate-800/40" }, xi = { key: 0 }, Si = ["colspan"], Ci = "overflow-x-auto rounded-xl border border-slate-200 bg-white shadow-sm dark:border-slate-700 dark:bg-slate-900", wi = /* @__PURE__ */ p({
2822
+ }), xi = { class: "w-full text-sm" }, Si = { class: "bg-slate-50 dark:bg-slate-800/60 text-slate-600 dark:text-slate-300" }, Ci = { class: "text-left border-b border-slate-200 dark:border-slate-700" }, wi = { class: "divide-y divide-slate-200 dark:divide-slate-700 [&>tr]:transition-colors [&>tr:hover]:bg-slate-50 dark:[&>tr:hover]:bg-slate-800/40" }, Ti = { key: 0 }, Ei = ["colspan"], Di = "overflow-x-auto rounded-xl border border-slate-200 bg-white shadow-sm dark:border-slate-700 dark:bg-slate-900", Oi = /* @__PURE__ */ m({
2794
2823
  __name: "BaseTable",
2795
2824
  props: {
2796
2825
  columns: {},
@@ -2805,24 +2834,24 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2805
2834
  }
2806
2835
  },
2807
2836
  setup(t) {
2808
- return (n, r) => (T(), s("div", { class: v(t.card ? Ci : void 0) }, [c("table", _i, [c("thead", vi, [c("tr", yi, [(T(!0), s(e, null, k(t.columns, (e, t) => (T(), s("th", {
2837
+ return (n, r) => (E(), c("div", { class: y(t.card ? Di : void 0) }, [l("table", xi, [l("thead", Si, [l("tr", Ci, [(E(!0), c(e, null, A(t.columns, (e, t) => (E(), c("th", {
2809
2838
  key: t,
2810
- class: v(["px-4 py-3", e.align === "right" ? "text-right" : ""])
2811
- }, N(e.label), 3))), 128))])]), c("tbody", bi, [t.empty ? (T(), s("tr", xi, [c("td", {
2839
+ class: y(["px-4 py-3", e.align === "right" ? "text-right" : ""])
2840
+ }, P(e.label), 3))), 128))])]), l("tbody", wi, [t.empty ? (E(), c("tr", Ti, [l("td", {
2812
2841
  colspan: t.columns.length,
2813
2842
  class: "px-4 py-12 text-center text-slate-500"
2814
- }, [A(n.$slots, "empty", {}, () => [d(N(t.emptyText), 1)])], 8, Si)])) : o("", !0), A(n.$slots, "default")])])], 2));
2843
+ }, [j(n.$slots, "empty", {}, () => [f(P(t.emptyText), 1)])], 8, Ei)])) : s("", !0), j(n.$slots, "default")])])], 2));
2815
2844
  }
2816
- }), Ti = { class: "grid gap-3 md:grid-cols-2" }, Ei = {
2845
+ }), ki = { class: "grid gap-3 md:grid-cols-2" }, Ai = {
2817
2846
  key: 0,
2818
2847
  class: "block text-[11px] uppercase tracking-wide text-slate-500 mb-1"
2819
- }, Di = ["value"], Oi = {
2848
+ }, ji = ["value"], Mi = {
2820
2849
  key: 2,
2821
2850
  class: "flex items-center gap-2 mt-4"
2822
- }, ki = ["checked", "onChange"], Ai = { class: "text-sm text-slate-900 dark:text-slate-100" }, ji = {
2851
+ }, Ni = ["checked", "onChange"], Pi = { class: "text-sm text-slate-900 dark:text-slate-100" }, Fi = {
2823
2852
  key: 4,
2824
2853
  class: "text-[11px] text-slate-400 mt-1"
2825
- }, Mi = /* @__PURE__ */ p({
2854
+ }, Ii = /* @__PURE__ */ m({
2826
2855
  __name: "BaseSpecFields",
2827
2856
  props: {
2828
2857
  specs: {},
@@ -2834,7 +2863,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2834
2863
  function i(e, t) {
2835
2864
  r("update", e, t.target.checked);
2836
2865
  }
2837
- function l(e, t) {
2866
+ function a(e, t) {
2838
2867
  let n = parseFloat(t);
2839
2868
  if (Number.isNaN(n)) {
2840
2869
  r("update", e.key, t);
@@ -2849,24 +2878,24 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2849
2878
  let t = e.clipboardData?.getData("text") ?? "";
2850
2879
  /^-?\d*$/.test(t.trim()) || e.preventDefault();
2851
2880
  }
2852
- return (n, f) => (T(), s("div", Ti, [(T(!0), s(e, null, k(t.specs, (f) => (T(), s("div", { key: f.key }, [
2853
- f.type === "boolean" ? o("", !0) : (T(), s("label", Ei, N(f.label), 1)),
2854
- f.type === "select" ? (T(), a(si, {
2881
+ return (n, f) => (E(), c("div", ki, [(E(!0), c(e, null, A(t.specs, (f) => (E(), c("div", { key: f.key }, [
2882
+ f.type === "boolean" ? s("", !0) : (E(), c("label", Ai, P(f.label), 1)),
2883
+ f.type === "select" ? (E(), o(di, {
2855
2884
  key: 1,
2856
2885
  modelValue: String(t.params[f.key] ?? ""),
2857
2886
  "onUpdate:modelValue": (e) => r("update", f.key, e)
2858
2887
  }, {
2859
- default: L(() => [(T(!0), s(e, null, k(f.options ?? [], (e) => (T(), s("option", {
2888
+ default: L(() => [(E(!0), c(e, null, A(f.options ?? [], (e) => (E(), c("option", {
2860
2889
  key: e,
2861
2890
  value: e
2862
- }, N(e), 9, Di))), 128))]),
2891
+ }, P(e), 9, ji))), 128))]),
2863
2892
  _: 2
2864
- }, 1032, ["modelValue", "onUpdate:modelValue"])) : f.type === "boolean" ? (T(), s("label", Oi, [c("input", {
2893
+ }, 1032, ["modelValue", "onUpdate:modelValue"])) : f.type === "boolean" ? (E(), c("label", Mi, [l("input", {
2865
2894
  checked: !!t.params[f.key],
2866
2895
  type: "checkbox",
2867
2896
  class: "h-4 w-4",
2868
2897
  onChange: (e) => i(f.key, e)
2869
- }, null, 40, ki), c("span", Ai, N(f.label), 1)])) : (T(), a(ai, {
2898
+ }, null, 40, Ni), l("span", Pi, P(f.label), 1)])) : (E(), o(li, {
2870
2899
  key: 3,
2871
2900
  modelValue: t.params[f.key],
2872
2901
  type: "number",
@@ -2875,7 +2904,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2875
2904
  inputmode: f.type === "integer" ? "numeric" : void 0,
2876
2905
  onKeydown: (e) => f.type === "integer" && u(e),
2877
2906
  onPaste: (e) => f.type === "integer" && d(e),
2878
- "onUpdate:modelValue": (e) => l(f, e)
2907
+ "onUpdate:modelValue": (e) => a(f, e)
2879
2908
  }, null, 8, [
2880
2909
  "modelValue",
2881
2910
  "step",
@@ -2885,11 +2914,11 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2885
2914
  "onPaste",
2886
2915
  "onUpdate:modelValue"
2887
2916
  ])),
2888
- f.help ? (T(), s("p", ji, N(f.help), 1)) : o("", !0),
2889
- A(n.$slots, "after", { spec: f })
2917
+ f.help ? (E(), c("p", Fi, P(f.help), 1)) : s("", !0),
2918
+ j(n.$slots, "after", { spec: f })
2890
2919
  ]))), 128))]));
2891
2920
  }
2892
- }), Ni = { class: "mt-1.5 space-y-0.5 px-1" }, Pi = { class: "text-slate-400 dark:text-slate-500" }, Fi = /* @__PURE__ */ p({
2921
+ }), Li = { class: "mt-1.5 space-y-0.5 px-1" }, Ri = { class: "text-slate-400 dark:text-slate-500" }, zi = /* @__PURE__ */ m({
2893
2922
  __name: "BaseStatBreakdown",
2894
2923
  props: {
2895
2924
  items: {},
@@ -2908,16 +2937,16 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2908
2937
  function i(e) {
2909
2938
  return !n.signed || e == null ? "text-slate-500 dark:text-slate-400" : e >= 0 ? "text-emerald-600 dark:text-emerald-400" : "text-red-600 dark:text-red-400";
2910
2939
  }
2911
- return (n, a) => (T(), s("div", Ni, [(T(!0), s(e, null, k(t.items, (e) => (T(), s("div", {
2940
+ return (n, a) => (E(), c("div", Li, [(E(!0), c(e, null, A(t.items, (e) => (E(), c("div", {
2912
2941
  key: e.label,
2913
2942
  class: "flex items-center justify-between text-[11px]"
2914
- }, [c("span", Pi, N(e.label), 1), c("span", { class: v(["font-mono tabular-nums font-medium", i(e.value)]) }, N(r(e.value)), 3)]))), 128))]));
2943
+ }, [l("span", Ri, P(e.label), 1), l("span", { class: y(["font-mono tabular-nums font-medium", i(e.value)]) }, P(r(e.value)), 3)]))), 128))]));
2915
2944
  }
2916
- }), Ii = [
2945
+ }), Bi = [
2917
2946
  "disabled",
2918
2947
  "title",
2919
2948
  "aria-pressed"
2920
- ], Li = /* @__PURE__ */ p({
2949
+ ], Vi = /* @__PURE__ */ m({
2921
2950
  __name: "BaseFilterChip",
2922
2951
  props: {
2923
2952
  label: { default: "" },
@@ -2946,21 +2975,21 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2946
2975
  red: "border-red-500 bg-red-500 text-white hover:bg-red-600 focus-visible:ring-red-500",
2947
2976
  slate: "border-slate-600 bg-slate-600 text-white hover:bg-slate-700 focus-visible:ring-emerald-500"
2948
2977
  };
2949
- return (r, i) => (T(), s("button", {
2978
+ return (r, i) => (E(), c("button", {
2950
2979
  type: "button",
2951
2980
  disabled: e.disabled,
2952
2981
  title: e.title,
2953
2982
  "aria-pressed": e.active,
2954
- class: v(["whitespace-nowrap rounded-md border px-3 text-sm font-semibold text-center transition-colors focus:outline-none focus-visible:ring-2 disabled:opacity-50 disabled:cursor-not-allowed", e.active ? n[e.color] : t[e.color]])
2955
- }, [A(r.$slots, "default", {}, () => [d(N(e.label), 1)])], 10, Ii));
2983
+ class: y(["whitespace-nowrap rounded-md border px-3 text-sm font-semibold text-center transition-colors focus:outline-none focus-visible:ring-2 disabled:opacity-50 disabled:cursor-not-allowed", e.active ? n[e.color] : t[e.color]])
2984
+ }, [j(r.$slots, "default", {}, () => [f(P(e.label), 1)])], 10, Bi));
2956
2985
  }
2957
- }), Ri = { class: "flex items-center justify-between mb-4" }, zi = { class: "text-lg font-semibold text-slate-900 dark:text-slate-100" }, Bi = {
2986
+ }), Hi = { class: "flex items-center justify-between mb-4" }, Ui = { class: "text-lg font-semibold text-slate-900 dark:text-slate-100" }, Wi = {
2958
2987
  key: 0,
2959
2988
  class: "text-xs text-slate-500 dark:text-slate-400"
2960
- }, Vi = {
2989
+ }, Gi = {
2961
2990
  key: 0,
2962
2991
  class: "inline-flex items-center gap-2 text-xs text-slate-500"
2963
- }, Hi = { class: "grid gap-4 md:grid-cols-2" }, Ui = { class: "md:col-span-2" }, Wi = ["for"], Gi = { class: "md:col-span-2" }, Ki = ["for"], qi = { class: "text-[11px] text-slate-500 mt-1" }, Ji = { class: "md:col-span-2" }, Yi = ["for"], Xi = { class: "md:col-span-2" }, Zi = ["for"], Qi = { class: "md:col-span-2" }, $i = "placeholder:text-slate-400 dark:placeholder:text-slate-500 font-mono", ea = /* @__PURE__ */ p({
2992
+ }, Ki = { class: "grid gap-4 md:grid-cols-2" }, qi = { class: "md:col-span-2" }, Ji = ["for"], Yi = { class: "md:col-span-2" }, Xi = ["for"], Zi = { class: "text-[11px] text-slate-500 mt-1" }, Qi = { class: "md:col-span-2" }, $i = ["for"], ea = { class: "md:col-span-2" }, ta = ["for"], na = { class: "md:col-span-2" }, ra = "placeholder:text-slate-400 dark:placeholder:text-slate-500 font-mono", ia = /* @__PURE__ */ m({
2964
2993
  __name: "BaseCredentialsForm",
2965
2994
  props: {
2966
2995
  title: {},
@@ -2986,7 +3015,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2986
3015
  "load-error"
2987
3016
  ],
2988
3017
  setup(t, { expose: n, emit: r }) {
2989
- let i = t, l = r, u = O(!1), p = O(!1), m = E({
3018
+ let i = t, a = r, u = k(!1), d = k(!1), m = D({
2990
3019
  keyId: "",
2991
3020
  secretKey: "",
2992
3021
  baseUrl: i.defaults.baseUrl,
@@ -2995,9 +3024,9 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
2995
3024
  async function h() {
2996
3025
  try {
2997
3026
  let e = await i.fetchFn();
2998
- m.keyId = e.keyId ?? "", m.baseUrl = e.baseUrl || i.defaults.baseUrl, m.dataUrl = e.dataUrl || i.defaults.dataUrl, m.secretKey = "", p.value = e.hasSecret;
3027
+ m.keyId = e.keyId ?? "", m.baseUrl = e.baseUrl || i.defaults.baseUrl, m.dataUrl = e.dataUrl || i.defaults.dataUrl, m.secretKey = "", d.value = e.hasSecret;
2999
3028
  } catch (e) {
3000
- l("load-error", e instanceof Error ? e.message : "");
3029
+ a("load-error", e instanceof Error ? e.message : "");
3001
3030
  }
3002
3031
  }
3003
3032
  function g(e) {
@@ -3006,15 +3035,15 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3006
3035
  async function _() {
3007
3036
  if (!u.value) {
3008
3037
  if (g(m.keyId)) {
3009
- l("error", i.requiredKeyMessage);
3038
+ a("error", i.requiredKeyMessage);
3010
3039
  return;
3011
3040
  }
3012
- if (!p.value && g(m.secretKey)) {
3013
- l("error", i.requiredSecretMessage);
3041
+ if (!d.value && g(m.secretKey)) {
3042
+ a("error", i.requiredSecretMessage);
3014
3043
  return;
3015
3044
  }
3016
3045
  if (g(m.baseUrl) || g(m.dataUrl)) {
3017
- l("error", "Base URL and Data URL are required.");
3046
+ a("error", "Base URL and Data URL are required.");
3018
3047
  return;
3019
3048
  }
3020
3049
  u.value = !0;
@@ -3025,80 +3054,80 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3025
3054
  baseUrl: m.baseUrl.trim(),
3026
3055
  dataUrl: m.dataUrl.trim()
3027
3056
  });
3028
- p.value = e.hasSecret, m.secretKey = "", l("saved", i.savedMessage);
3057
+ d.value = e.hasSecret, m.secretKey = "", a("saved", i.savedMessage);
3029
3058
  } catch (e) {
3030
- l("error", e instanceof Error ? e.message : "Failed to save");
3059
+ a("error", e instanceof Error ? e.message : "Failed to save");
3031
3060
  } finally {
3032
3061
  u.value = !1;
3033
3062
  }
3034
3063
  }
3035
3064
  }
3036
- return S(h), n({ load: h }), (n, r) => (T(), a(Ft, { class: "!p-6" }, {
3065
+ return C(h), n({ load: h }), (n, r) => (E(), o(zt, { class: "!p-6" }, {
3037
3066
  default: L(() => [
3038
- c("div", Ri, [c("div", null, [c("h2", zi, N(t.title), 1), t.subtitle ? (T(), s("p", Bi, N(t.subtitle), 1)) : o("", !0)]), u.value ? (T(), s("span", Vi, [f(It, { class: "!h-4 !w-4" }), r[4] ||= d(" Saving… ", -1)])) : o("", !0)]),
3039
- c("div", Hi, [
3040
- c("div", Ui, [c("label", {
3067
+ l("div", Hi, [l("div", null, [l("h2", Ui, P(t.title), 1), t.subtitle ? (E(), c("p", Wi, P(t.subtitle), 1)) : s("", !0)]), u.value ? (E(), c("span", Gi, [p(Bt, { class: "!h-4 !w-4" }), r[4] ||= f(" Saving… ", -1)])) : s("", !0)]),
3068
+ l("div", Ki, [
3069
+ l("div", qi, [l("label", {
3041
3070
  for: `${t.idPrefix}-key-id`,
3042
3071
  class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
3043
- }, N(t.keyLabel), 9, Wi), f(ai, {
3072
+ }, P(t.keyLabel), 9, Ji), p(li, {
3044
3073
  id: `${t.idPrefix}-key-id`,
3045
3074
  modelValue: m.keyId,
3046
3075
  "onUpdate:modelValue": r[0] ||= (e) => m.keyId = e,
3047
3076
  type: "text",
3048
3077
  autocomplete: "off",
3049
3078
  placeholder: t.keyPlaceholder,
3050
- class: v($i)
3079
+ class: y(ra)
3051
3080
  }, null, 8, [
3052
3081
  "id",
3053
3082
  "modelValue",
3054
3083
  "placeholder"
3055
3084
  ])]),
3056
- c("div", Gi, [
3057
- c("label", {
3085
+ l("div", Yi, [
3086
+ l("label", {
3058
3087
  for: `${t.idPrefix}-secret`,
3059
3088
  class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
3060
- }, N(t.secretLabel), 9, Ki),
3061
- f(ai, {
3089
+ }, P(t.secretLabel), 9, Xi),
3090
+ p(li, {
3062
3091
  id: `${t.idPrefix}-secret`,
3063
3092
  modelValue: m.secretKey,
3064
3093
  "onUpdate:modelValue": r[1] ||= (e) => m.secretKey = e,
3065
3094
  type: "password",
3066
3095
  autocomplete: "new-password",
3067
- placeholder: p.value ? "•••••••• (unchanged — type to replace)" : t.secretPlaceholder,
3068
- class: v($i)
3096
+ placeholder: d.value ? "•••••••• (unchanged — type to replace)" : t.secretPlaceholder,
3097
+ class: y(ra)
3069
3098
  }, null, 8, [
3070
3099
  "id",
3071
3100
  "modelValue",
3072
3101
  "placeholder"
3073
3102
  ]),
3074
- c("p", qi, [p.value ? (T(), s(e, { key: 0 }, [d(N(t.secretSetHint), 1)], 64)) : A(n.$slots, "no-secret-hint", {}, () => [d(N(t.permissionsHint), 1)], void 0, 1)])
3103
+ l("p", Zi, [d.value ? (E(), c(e, { key: 0 }, [f(P(t.secretSetHint), 1)], 64)) : j(n.$slots, "no-secret-hint", {}, () => [f(P(t.permissionsHint), 1)], void 0, 1)])
3075
3104
  ]),
3076
- c("div", Ji, [
3077
- c("label", {
3105
+ l("div", Qi, [
3106
+ l("label", {
3078
3107
  for: `${t.idPrefix}-base-url`,
3079
3108
  class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
3080
- }, "Base URL (trading)", 8, Yi),
3081
- f(ai, {
3109
+ }, "Base URL (trading)", 8, $i),
3110
+ p(li, {
3082
3111
  id: `${t.idPrefix}-base-url`,
3083
3112
  modelValue: m.baseUrl,
3084
3113
  "onUpdate:modelValue": r[2] ||= (e) => m.baseUrl = e,
3085
3114
  type: "text",
3086
- class: v($i)
3115
+ class: y(ra)
3087
3116
  }, null, 8, ["id", "modelValue"]),
3088
- A(n.$slots, "base-url-extra", { form: m })
3117
+ j(n.$slots, "base-url-extra", { form: m })
3089
3118
  ]),
3090
- c("div", Xi, [c("label", {
3119
+ l("div", ea, [l("label", {
3091
3120
  for: `${t.idPrefix}-data-url`,
3092
3121
  class: "block text-xs uppercase tracking-wide text-slate-500 mb-1"
3093
- }, "Data URL (market data)", 8, Zi), f(ai, {
3122
+ }, "Data URL (market data)", 8, ta), p(li, {
3094
3123
  id: `${t.idPrefix}-data-url`,
3095
3124
  modelValue: m.dataUrl,
3096
3125
  "onUpdate:modelValue": r[3] ||= (e) => m.dataUrl = e,
3097
3126
  type: "text",
3098
- class: v($i)
3127
+ class: y(ra)
3099
3128
  }, null, 8, ["id", "modelValue"])]),
3100
- c("div", Qi, [f(Qe, {
3101
- color: P(K).GREEN,
3129
+ l("div", na, [p(nt, {
3130
+ color: F(K).GREEN,
3102
3131
  description: t.saveLabel,
3103
3132
  isDisable: u.value,
3104
3133
  isLoading: u.value,
@@ -3110,21 +3139,21 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3110
3139
  "isLoading"
3111
3140
  ])])
3112
3141
  ]),
3113
- A(n.$slots, "footer")
3142
+ j(n.$slots, "footer")
3114
3143
  ]),
3115
3144
  _: 3
3116
3145
  }));
3117
3146
  }
3118
- }), ta = {
3147
+ }), aa = {
3119
3148
  key: 0,
3120
3149
  class: "text-sm text-slate-500 dark:text-slate-400"
3121
- }, na = { class: "mb-3 flex flex-wrap items-center gap-2" }, ra = { class: "relative min-w-[200px] flex-1" }, ia = ["placeholder"], aa = {
3150
+ }, oa = { class: "mb-3 flex flex-wrap items-center gap-2" }, sa = { class: "relative min-w-[200px] flex-1" }, ca = ["placeholder"], la = {
3122
3151
  key: 0,
3123
3152
  class: "text-sm text-slate-500 dark:text-slate-400"
3124
- }, oa = {
3153
+ }, ua = {
3125
3154
  key: 1,
3126
3155
  class: "flex flex-wrap gap-2"
3127
- }, sa = ["title", "onClick"], ca = "h-9 rounded-md border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", la = "\0all", ua = /* @__PURE__ */ p({
3156
+ }, da = ["title", "onClick"], fa = "h-9 rounded-md border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", pa = "\0all", ma = /* @__PURE__ */ m({
3128
3157
  __name: "BasePillPickerModal",
3129
3158
  props: {
3130
3159
  title: {},
@@ -3146,60 +3175,60 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3146
3175
  },
3147
3176
  emits: ["pick", "close"],
3148
3177
  setup(t, { emit: n }) {
3149
- let r = t, l = n, u = i(() => r.icon ?? Ce), d = O(""), p = O(la), m = i(() => r.groups && r.groups.length > 0 ? [{
3150
- value: la,
3178
+ let r = t, i = n, u = a(() => r.icon ?? Te), d = k(""), f = k(pa), m = a(() => r.groups && r.groups.length > 0 ? [{
3179
+ value: pa,
3151
3180
  label: r.allLabel
3152
- }, ...r.groups] : []), h = i(() => r.items.filter((e) => (p.value === la || e.group === p.value) && e.label.toLowerCase().includes(d.value.trim().toLowerCase())));
3153
- return (n, r) => (T(), a(gn, {
3181
+ }, ...r.groups] : []), h = a(() => r.items.filter((e) => (f.value === pa || e.group === f.value) && e.label.toLowerCase().includes(d.value.trim().toLowerCase())));
3182
+ return (n, r) => (E(), o(bn, {
3154
3183
  title: t.title,
3155
3184
  icon: u.value,
3156
3185
  subtitle: t.subtitle,
3157
3186
  scrollable: "",
3158
3187
  "max-width-class": t.maxWidthClass,
3159
- onCancel: r[4] ||= (e) => l("close")
3188
+ onCancel: r[4] ||= (e) => i("close")
3160
3189
  }, {
3161
- footer: L(() => [f(yr, {
3190
+ footer: L(() => [p(Cr, {
3162
3191
  variant: "ghost",
3163
3192
  label: t.closeText,
3164
- onClick: r[3] ||= (e) => l("close")
3193
+ onClick: r[3] ||= (e) => i("close")
3165
3194
  }, null, 8, ["label"])]),
3166
- default: L(() => [t.items.length === 0 ? (T(), s("p", ta, N(t.emptyMessage), 1)) : (T(), s(e, { key: 1 }, [c("div", na, [c("div", ra, [
3167
- f(P(Ce), { class: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" }),
3168
- R(c("input", {
3195
+ default: L(() => [t.items.length === 0 ? (E(), c("p", aa, P(t.emptyMessage), 1)) : (E(), c(e, { key: 1 }, [l("div", oa, [l("div", sa, [
3196
+ p(F(Te), { class: "pointer-events-none absolute left-3 top-1/2 h-4 w-4 -translate-y-1/2 text-slate-400" }),
3197
+ R(l("input", {
3169
3198
  "onUpdate:modelValue": r[0] ||= (e) => d.value = e,
3170
3199
  type: "text",
3171
3200
  placeholder: t.searchPlaceholder,
3172
3201
  autocomplete: "off",
3173
- class: v([
3174
- ca,
3202
+ class: y([
3203
+ fa,
3175
3204
  "w-full pl-9 pr-8 placeholder:text-slate-400 dark:placeholder:text-slate-500",
3176
3205
  t.mono ? "font-mono" : ""
3177
3206
  ])
3178
- }, null, 10, ia), [[re, d.value]]),
3179
- d.value ? (T(), s("button", {
3207
+ }, null, 10, ca), [[ie, d.value]]),
3208
+ d.value ? (E(), c("button", {
3180
3209
  key: 0,
3181
3210
  type: "button",
3182
3211
  "aria-label": "Clear the filter",
3183
3212
  class: "absolute right-2 top-1/2 -translate-y-1/2 text-slate-400 hover:text-slate-600 dark:hover:text-slate-200",
3184
3213
  onClick: r[1] ||= (e) => d.value = ""
3185
- }, " ✕ ")) : o("", !0)
3186
- ]), m.value.length > 0 ? (T(), a(gi, {
3214
+ }, " ✕ ")) : s("", !0)
3215
+ ]), m.value.length > 0 ? (E(), o(bi, {
3187
3216
  key: 0,
3188
- modelValue: p.value,
3189
- "onUpdate:modelValue": r[2] ||= (e) => p.value = e,
3217
+ modelValue: f.value,
3218
+ "onUpdate:modelValue": r[2] ||= (e) => f.value = e,
3190
3219
  options: m.value,
3191
3220
  "aria-label": t.groupAriaLabel
3192
3221
  }, null, 8, [
3193
3222
  "modelValue",
3194
3223
  "options",
3195
3224
  "aria-label"
3196
- ])) : o("", !0)]), h.value.length === 0 ? (T(), s("p", aa, N(t.noMatchMessage), 1)) : (T(), s("div", oa, [(T(!0), s(e, null, k(h.value, (e) => (T(), s("button", {
3225
+ ])) : s("", !0)]), h.value.length === 0 ? (E(), c("p", la, P(t.noMatchMessage), 1)) : (E(), c("div", ua, [(E(!0), c(e, null, A(h.value, (e) => (E(), c("button", {
3197
3226
  key: e.id,
3198
3227
  type: "button",
3199
3228
  title: e.title,
3200
- class: v(["h-8 shrink-0 rounded-md border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 px-3 text-sm text-slate-700 dark:text-slate-200 transition-colors hover:border-emerald-500 hover:bg-emerald-50 hover:text-emerald-700 dark:hover:bg-emerald-500/10 dark:hover:text-emerald-400 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", t.mono ? "font-mono" : ""]),
3201
- onClick: (t) => l("pick", e)
3202
- }, N(e.label), 11, sa))), 128))]))], 64))]),
3229
+ class: y(["h-8 shrink-0 rounded-md border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 px-3 text-sm text-slate-700 dark:text-slate-200 transition-colors hover:border-emerald-500 hover:bg-emerald-50 hover:text-emerald-700 dark:hover:bg-emerald-500/10 dark:hover:text-emerald-400 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", t.mono ? "font-mono" : ""]),
3230
+ onClick: (t) => i("pick", e)
3231
+ }, P(e.label), 11, da))), 128))]))], 64))]),
3203
3232
  _: 1
3204
3233
  }, 8, [
3205
3234
  "title",
@@ -3208,7 +3237,7 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3208
3237
  "max-width-class"
3209
3238
  ]));
3210
3239
  }
3211
- }), da = ["aria-label"], fa = ["title"], pa = { class: "text-[10px] tabular-nums text-slate-400 dark:text-slate-500" }, ma = ["title"], ha = /* @__PURE__ */ p({
3240
+ }), ha = ["aria-label"], ga = ["title"], _a = { class: "text-[10px] tabular-nums text-slate-400 dark:text-slate-500" }, va = ["title"], ya = /* @__PURE__ */ m({
3212
3241
  __name: "BaseBarDistribution",
3213
3242
  props: {
3214
3243
  bars: {},
@@ -3219,28 +3248,28 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3219
3248
  barClass: { default: "bg-emerald-500/80 dark:bg-emerald-400/80" }
3220
3249
  },
3221
3250
  setup(t) {
3222
- let n = t, r = i(() => Math.max(1, ...n.bars.map((e) => e.count))), a = (e) => Math.max(3, Math.round(e.count / r.value * n.maxBarHeight)), o = (e) => `${n.titlePrefix ? `${n.titlePrefix} ` : ""}${e.label}: ${e.count} ${n.countNoun}${e.count === 1 ? "" : "s"}`;
3223
- return (n, r) => (T(), s("div", {
3251
+ let n = t, r = a(() => Math.max(1, ...n.bars.map((e) => e.count))), i = (e) => Math.max(3, Math.round(e.count / r.value * n.maxBarHeight)), o = (e) => `${n.titlePrefix ? `${n.titlePrefix} ` : ""}${e.label}: ${e.count} ${n.countNoun}${e.count === 1 ? "" : "s"}`;
3252
+ return (n, r) => (E(), c("div", {
3224
3253
  class: "flex items-end gap-1.5 overflow-x-auto pb-1",
3225
3254
  role: "img",
3226
3255
  "aria-label": t.ariaLabel
3227
- }, [(T(!0), s(e, null, k(t.bars, (e) => (T(), s("div", {
3256
+ }, [(E(!0), c(e, null, A(t.bars, (e) => (E(), c("div", {
3228
3257
  key: e.label,
3229
3258
  class: "flex min-w-7 flex-1 flex-col items-center gap-0.5",
3230
3259
  title: o(e)
3231
3260
  }, [
3232
- c("span", pa, N(e.count), 1),
3233
- c("div", {
3234
- class: v(["w-full max-w-8 rounded-t", t.barClass]),
3235
- style: b({ height: `${a(e)}px` })
3261
+ l("span", _a, P(e.count), 1),
3262
+ l("div", {
3263
+ class: y(["w-full max-w-8 rounded-t", t.barClass]),
3264
+ style: x({ height: `${i(e)}px` })
3236
3265
  }, null, 6),
3237
- c("span", {
3266
+ l("span", {
3238
3267
  class: "max-w-full truncate font-mono text-[10px] text-slate-500 dark:text-slate-400",
3239
3268
  title: e.label
3240
- }, N(e.label), 9, ma)
3241
- ], 8, fa))), 128))], 8, da));
3269
+ }, P(e.label), 9, va)
3270
+ ], 8, ga))), 128))], 8, ha));
3242
3271
  }
3243
- }), ga = /* @__PURE__ */ p({
3272
+ }), ba = /* @__PURE__ */ m({
3244
3273
  __name: "BaseDateTimePicker",
3245
3274
  props: {
3246
3275
  modelValue: { default: null },
@@ -3262,27 +3291,27 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3262
3291
  },
3263
3292
  emits: ["update:modelValue"],
3264
3293
  setup(e, { emit: t }) {
3265
- let n = e, r = t, { isDark: o } = W(), s = i(() => ({
3294
+ let n = e, r = t, { isDark: i } = W(), s = a(() => ({
3266
3295
  enableTimePicker: n.mode !== "date",
3267
3296
  is24: n.is24,
3268
3297
  ...n.timeConfig
3269
- })), c = i(() => {
3298
+ })), c = a(() => {
3270
3299
  if (n.format) return { input: n.format };
3271
3300
  let e = n.is24 ? "HH:mm" : "hh:mm a";
3272
3301
  return n.mode === "date" ? { input: "dd/MM/yyyy" } : n.mode === "time" ? { input: e } : { input: `dd/MM/yyyy ${e}` };
3273
3302
  });
3274
- return (t, n) => (T(), a(P(je), {
3303
+ return (t, n) => (E(), o(F(Ne), {
3275
3304
  "model-value": e.modelValue,
3276
- dark: P(o),
3305
+ dark: F(i),
3277
3306
  "time-picker": e.mode === "time",
3278
3307
  "time-config": s.value,
3279
3308
  formats: c.value,
3280
3309
  "auto-apply": e.autoApply,
3281
3310
  teleport: e.teleport,
3282
3311
  "onUpdate:modelValue": n[0] ||= (e) => r("update:modelValue", e)
3283
- }, l({ _: 2 }, [k(t.$slots, (e, n) => ({
3312
+ }, u({ _: 2 }, [A(t.$slots, (e, n) => ({
3284
3313
  name: n,
3285
- fn: L((e) => [A(t.$slots, n, y(h(e ?? {})))])
3314
+ fn: L((e) => [j(t.$slots, n, b(g(e ?? {})))])
3286
3315
  }))]), 1032, [
3287
3316
  "model-value",
3288
3317
  "dark",
@@ -3293,28 +3322,28 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3293
3322
  "teleport"
3294
3323
  ]));
3295
3324
  }
3296
- }), _a = { class: "flex min-w-0 flex-1 flex-wrap items-center gap-1" }, va = { class: "truncate" }, ya = [
3325
+ }), xa = { class: "flex min-w-0 flex-1 flex-wrap items-center gap-1" }, Sa = { class: "truncate" }, Ca = [
3297
3326
  "aria-label",
3298
3327
  "disabled",
3299
3328
  "onClick"
3300
- ], ba = [
3329
+ ], wa = [
3301
3330
  "disabled",
3302
3331
  "readonly",
3303
3332
  "aria-label",
3304
3333
  "aria-expanded",
3305
3334
  "aria-activedescendant",
3306
3335
  "placeholder"
3307
- ], xa = ["aria-multiselectable"], Sa = [
3336
+ ], Ta = ["aria-multiselectable"], Ea = [
3308
3337
  "id",
3309
3338
  "aria-selected",
3310
3339
  "aria-disabled",
3311
3340
  "title",
3312
3341
  "onMouseenter",
3313
3342
  "onClick"
3314
- ], Ca = { class: "truncate" }, wa = {
3343
+ ], Da = { class: "truncate" }, Oa = {
3315
3344
  key: 0,
3316
3345
  class: "px-3 py-2 text-sm text-slate-500 dark:text-slate-400"
3317
- }, Ta = /* @__PURE__ */ p({
3346
+ }, ka = /* @__PURE__ */ m({
3318
3347
  __name: "BaseSearchSelect",
3319
3348
  props: {
3320
3349
  options: {},
@@ -3346,97 +3375,97 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3346
3375
  },
3347
3376
  emits: ["update:modelValue"],
3348
3377
  setup(t, { emit: n }) {
3349
- let r = t, l = n, u = O(null), d = O(null), p = O(!1), m = O(""), h = O(-1), g = `search-select-${ee()}`, y = i(() => {
3378
+ let r = t, i = n, u = k(null), d = k(null), f = k(!1), m = k(""), h = k(-1), g = `search-select-${ee()}`, _ = a(() => {
3350
3379
  let e = r.modelValue;
3351
3380
  return Array.isArray(e) ? [...e] : e == null || e === "" ? [] : [e];
3352
- }), b = i(() => y.value.map((e) => r.options.find((t) => t.value === e)).filter((e) => !!e)), C = i(() => y.value.length > 0), w = i(() => !r.multiple && b.value.length > 0), E = i(() => w.value ? b.value[0].label : r.multiple && C.value ? "" : r.placeholder), D = i(() => {
3381
+ }), b = a(() => _.value.map((e) => r.options.find((t) => t.value === e)).filter((e) => !!e)), x = a(() => _.value.length > 0), w = a(() => !r.multiple && b.value.length > 0), T = a(() => w.value ? b.value[0].label : r.multiple && x.value ? "" : r.placeholder), D = a(() => {
3353
3382
  let e = m.value.trim().toLowerCase();
3354
3383
  return e ? r.options.filter((t) => t.label.toLowerCase().includes(e)) : [...r.options];
3355
3384
  });
3356
3385
  I(D, (e) => {
3357
3386
  h.value = e.findIndex((e) => !e.disabled);
3358
3387
  });
3359
- function A(e) {
3360
- return y.value.includes(e.value);
3388
+ function O(e) {
3389
+ return _.value.includes(e.value);
3361
3390
  }
3362
3391
  function j(e, t) {
3363
- return e.disabled ? "cursor-not-allowed text-slate-400 dark:text-slate-600" : A(e) ? t === h.value ? "bg-emerald-600 text-white" : "bg-emerald-500 text-white" : t === h.value ? "bg-slate-100 text-slate-900 dark:bg-slate-800 dark:text-slate-100" : "text-slate-700 dark:text-slate-200";
3392
+ return e.disabled ? "cursor-not-allowed text-slate-400 dark:text-slate-600" : O(e) ? t === h.value ? "bg-emerald-600 text-white" : "bg-emerald-500 text-white" : t === h.value ? "bg-slate-100 text-slate-900 dark:bg-slate-800 dark:text-slate-100" : "text-slate-700 dark:text-slate-200";
3364
3393
  }
3365
3394
  function M() {
3366
- r.disabled || p.value || (p.value = !0, h.value = D.value.findIndex((e) => !e.disabled));
3395
+ r.disabled || f.value || (f.value = !0, h.value = D.value.findIndex((e) => !e.disabled));
3367
3396
  }
3368
- function F() {
3369
- p.value = !1, m.value = "";
3397
+ function N() {
3398
+ f.value = !1, m.value = "";
3370
3399
  }
3371
3400
  function te(e) {
3372
- r.disabled || (e.target !== d.value && e.preventDefault(), p.value && e.target !== d.value ? F() : (d.value?.focus(), M()));
3401
+ r.disabled || (e.target !== d.value && e.preventDefault(), f.value && e.target !== d.value ? N() : (d.value?.focus(), M()));
3373
3402
  }
3374
3403
  function ne(e) {
3375
3404
  if (!e.disabled) {
3376
3405
  if (r.multiple) {
3377
- let t = A(e) ? y.value.filter((t) => t !== e.value) : [...y.value, e.value];
3378
- l("update:modelValue", t), m.value = "", _(() => d.value?.focus());
3379
- } else l("update:modelValue", e.value), F(), d.value?.blur();
3406
+ let t = O(e) ? _.value.filter((t) => t !== e.value) : [..._.value, e.value];
3407
+ i("update:modelValue", t), m.value = "", v(() => d.value?.focus());
3408
+ } else i("update:modelValue", e.value), N(), d.value?.blur();
3380
3409
  }
3381
3410
  }
3382
- function L(e) {
3383
- l("update:modelValue", y.value.filter((t) => t !== e.value));
3411
+ function re(e) {
3412
+ i("update:modelValue", _.value.filter((t) => t !== e.value));
3384
3413
  }
3385
- function ae() {
3386
- l("update:modelValue", r.multiple ? [] : null), m.value = "";
3414
+ function L() {
3415
+ i("update:modelValue", r.multiple ? [] : null), m.value = "";
3387
3416
  }
3388
3417
  function oe(e) {
3389
3418
  let t = D.value;
3390
3419
  if (t.length === 0) return;
3391
3420
  let n = h.value;
3392
3421
  for (let r = 0; r < t.length && (n = (n + e + t.length) % t.length, t[n].disabled); r++);
3393
- h.value = n, _(() => document.getElementById(`${g}-${n}`)?.scrollIntoView?.({ block: "nearest" }));
3422
+ h.value = n, v(() => document.getElementById(`${g}-${n}`)?.scrollIntoView?.({ block: "nearest" }));
3394
3423
  }
3395
3424
  function se(e) {
3396
3425
  switch (e.key) {
3397
3426
  case "ArrowDown":
3398
- e.preventDefault(), p.value ? oe(1) : M();
3427
+ e.preventDefault(), f.value ? oe(1) : M();
3399
3428
  break;
3400
3429
  case "ArrowUp":
3401
- e.preventDefault(), p.value ? oe(-1) : M();
3430
+ e.preventDefault(), f.value ? oe(-1) : M();
3402
3431
  break;
3403
3432
  case "Enter":
3404
- p.value && h.value >= 0 && (e.preventDefault(), ne(D.value[h.value]));
3433
+ f.value && h.value >= 0 && (e.preventDefault(), ne(D.value[h.value]));
3405
3434
  break;
3406
3435
  case "Escape":
3407
- p.value && (e.preventDefault(), F());
3436
+ f.value && (e.preventDefault(), N());
3408
3437
  break;
3409
3438
  case "Tab":
3410
- F();
3439
+ N();
3411
3440
  break;
3412
- case "Backspace": r.multiple && m.value === "" && b.value.length && L(b.value[b.value.length - 1]);
3441
+ case "Backspace": r.multiple && m.value === "" && b.value.length && re(b.value[b.value.length - 1]);
3413
3442
  }
3414
3443
  }
3415
3444
  function ce(e) {
3416
- p.value && u.value && !u.value.contains(e.target) && F();
3445
+ f.value && u.value && !u.value.contains(e.target) && N();
3417
3446
  }
3418
- return S(() => document.addEventListener("mousedown", ce)), x(() => document.removeEventListener("mousedown", ce)), (n, r) => (T(), s("div", {
3447
+ return C(() => document.addEventListener("mousedown", ce)), S(() => document.removeEventListener("mousedown", ce)), (n, r) => (E(), c("div", {
3419
3448
  ref_key: "rootEl",
3420
3449
  ref: u,
3421
- class: v(t.block ? "relative w-full" : "relative inline-block min-w-48")
3422
- }, [c("div", {
3423
- class: v(["flex min-h-[38px] items-center gap-1.5 rounded-lg border bg-white px-3 py-1.5 text-sm transition-colors dark:bg-slate-900", [p.value ? "border-emerald-500 ring-2 ring-emerald-500/30" : "border-slate-300 hover:border-slate-400 dark:border-slate-600 dark:hover:border-slate-500", t.disabled ? "cursor-not-allowed opacity-60" : "cursor-text"]]),
3450
+ class: y(t.block ? "relative w-full" : "relative inline-block min-w-48")
3451
+ }, [l("div", {
3452
+ class: y(["flex min-h-[38px] items-center gap-1.5 rounded-lg border bg-white px-3 py-1.5 text-sm transition-colors dark:bg-slate-900", [f.value ? "border-emerald-500 ring-2 ring-emerald-500/30" : "border-slate-300 hover:border-slate-400 dark:border-slate-600 dark:hover:border-slate-500", t.disabled ? "cursor-not-allowed opacity-60" : "cursor-text"]]),
3424
3453
  onMousedown: te
3425
3454
  }, [
3426
- c("div", _a, [(T(!0), s(e, null, k(b.value, (e) => R((T(), s("span", {
3455
+ l("div", xa, [(E(!0), c(e, null, A(b.value, (e) => R((E(), c("span", {
3427
3456
  key: String(e.value),
3428
3457
  class: "inline-flex max-w-full items-center gap-1 rounded-md bg-emerald-50 py-0.5 pl-2 pr-1 text-xs font-medium text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300"
3429
- }, [c("span", va, N(e.label), 1), c("button", {
3458
+ }, [l("span", Sa, P(e.label), 1), l("button", {
3430
3459
  type: "button",
3431
3460
  class: "rounded p-0.5 hover:bg-emerald-100 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 dark:hover:bg-emerald-500/25",
3432
3461
  "aria-label": `Remove ${e.label}`,
3433
3462
  disabled: t.disabled,
3434
3463
  onMousedown: r[0] ||= z(() => {}, ["stop", "prevent"]),
3435
- onClick: z((t) => L(e), ["stop"])
3436
- }, [f(P(B), {
3464
+ onClick: z((t) => re(e), ["stop"])
3465
+ }, [p(F(B), {
3437
3466
  class: "h-3 w-3",
3438
3467
  "aria-hidden": "true"
3439
- })], 40, ya)])), [[ie, t.multiple]])), 128)), R(c("input", {
3468
+ })], 40, Ca)])), [[ae, t.multiple]])), 128)), R(l("input", {
3440
3469
  ref_key: "inputEl",
3441
3470
  ref: d,
3442
3471
  "onUpdate:modelValue": r[1] ||= (e) => m.value = e,
@@ -3447,69 +3476,69 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3447
3476
  readonly: !t.searchable,
3448
3477
  "aria-label": t.ariaLabel || t.placeholder,
3449
3478
  "aria-autocomplete": "list",
3450
- "aria-expanded": p.value,
3479
+ "aria-expanded": f.value,
3451
3480
  "aria-controls": g,
3452
- "aria-activedescendant": p.value && h.value >= 0 ? `${g}-${h.value}` : void 0,
3453
- placeholder: E.value,
3454
- class: v(["min-w-16 flex-1 border-0 bg-transparent p-0 py-0.5 text-sm text-slate-900 outline-none focus:ring-0 dark:text-slate-100 disabled:cursor-not-allowed", w.value ? "placeholder:text-slate-900 dark:placeholder:text-slate-100" : "placeholder:text-slate-400 dark:placeholder:text-slate-500"]),
3481
+ "aria-activedescendant": f.value && h.value >= 0 ? `${g}-${h.value}` : void 0,
3482
+ placeholder: T.value,
3483
+ class: y(["min-w-16 flex-1 border-0 bg-transparent p-0 py-0.5 text-sm text-slate-900 outline-none focus:ring-0 dark:text-slate-100 disabled:cursor-not-allowed", w.value ? "placeholder:text-slate-900 dark:placeholder:text-slate-100" : "placeholder:text-slate-400 dark:placeholder:text-slate-500"]),
3455
3484
  onFocus: M,
3456
3485
  onInput: M,
3457
3486
  onKeydown: se
3458
- }, null, 42, ba), [[re, m.value]])]),
3459
- t.clearable && C.value && !t.disabled ? (T(), s("button", {
3487
+ }, null, 42, wa), [[ie, m.value]])]),
3488
+ t.clearable && x.value && !t.disabled ? (E(), c("button", {
3460
3489
  key: 0,
3461
3490
  type: "button",
3462
3491
  class: "shrink-0 rounded p-0.5 text-slate-400 hover:text-slate-600 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 dark:hover:text-slate-200",
3463
3492
  "aria-label": "Clear selection",
3464
3493
  onMousedown: r[2] ||= z(() => {}, ["stop", "prevent"]),
3465
- onClick: z(ae, ["stop"])
3466
- }, [f(P(B), {
3494
+ onClick: z(L, ["stop"])
3495
+ }, [p(F(B), {
3467
3496
  class: "h-4 w-4",
3468
3497
  "aria-hidden": "true"
3469
- })], 32)) : o("", !0),
3470
- f(P(me), {
3471
- class: v(["h-4 w-4 shrink-0 text-slate-500 transition-transform dark:text-slate-400", p.value ? "rotate-180" : ""]),
3498
+ })], 32)) : s("", !0),
3499
+ p(F(ge), {
3500
+ class: y(["h-4 w-4 shrink-0 text-slate-500 transition-transform dark:text-slate-400", f.value ? "rotate-180" : ""]),
3472
3501
  "aria-hidden": "true"
3473
3502
  }, null, 8, ["class"])
3474
- ], 34), p.value ? (T(), s("ul", {
3503
+ ], 34), f.value ? (E(), c("ul", {
3475
3504
  key: 0,
3476
3505
  id: g,
3477
3506
  role: "listbox",
3478
3507
  "aria-multiselectable": t.multiple || void 0,
3479
3508
  class: "absolute z-30 mt-1 max-h-60 w-full overflow-auto rounded-lg border border-slate-200 bg-white py-1 shadow-lg dark:border-slate-700 dark:bg-slate-900"
3480
- }, [(T(!0), s(e, null, k(D.value, (e, t) => (T(), s("li", {
3509
+ }, [(E(!0), c(e, null, A(D.value, (e, t) => (E(), c("li", {
3481
3510
  id: `${g}-${t}`,
3482
3511
  key: String(e.value),
3483
3512
  role: "option",
3484
- "aria-selected": A(e),
3513
+ "aria-selected": O(e),
3485
3514
  "aria-disabled": e.disabled || void 0,
3486
3515
  title: e.title,
3487
- class: v(["flex cursor-pointer items-center justify-between gap-2 px-3 py-2 text-left text-sm", j(e, t)]),
3516
+ class: y(["flex cursor-pointer items-center justify-between gap-2 px-3 py-2 text-left text-sm", j(e, t)]),
3488
3517
  onMousedown: r[3] ||= z(() => {}, ["prevent"]),
3489
3518
  onMouseenter: (e) => h.value = t,
3490
3519
  onClick: (t) => ne(e)
3491
- }, [c("span", Ca, N(e.label), 1), A(e) ? (T(), a(P(de), {
3520
+ }, [l("span", Da, P(e.label), 1), O(e) ? (E(), o(F(pe), {
3492
3521
  key: 0,
3493
3522
  class: "h-4 w-4 shrink-0",
3494
3523
  "aria-hidden": "true"
3495
- })) : o("", !0)], 42, Sa))), 128)), D.value.length === 0 ? (T(), s("li", wa, N(t.options.length === 0 ? t.emptyText : t.noResultsText), 1)) : o("", !0)], 8, xa)) : o("", !0)], 2));
3524
+ })) : s("", !0)], 42, Ea))), 128)), D.value.length === 0 ? (E(), c("li", Oa, P(t.options.length === 0 ? t.emptyText : t.noResultsText), 1)) : s("", !0)], 8, Ta)) : s("", !0)], 2));
3496
3525
  }
3497
- }), Ea = { class: "rounded-xl border border-slate-200 bg-white text-left shadow-sm dark:border-slate-700 dark:bg-slate-900" }, Da = {
3526
+ }), Aa = { class: "rounded-xl border border-slate-200 bg-white text-left shadow-sm dark:border-slate-700 dark:bg-slate-900" }, ja = {
3498
3527
  key: 0,
3499
3528
  class: "flex flex-wrap items-center justify-between gap-3 border-b border-slate-200 px-5 py-3 dark:border-slate-700"
3500
- }, Oa = { class: "min-w-0" }, ka = {
3529
+ }, Ma = { class: "min-w-0" }, Na = {
3501
3530
  key: 0,
3502
3531
  class: "text-base font-semibold text-slate-900 dark:text-slate-100"
3503
- }, Aa = {
3532
+ }, Pa = {
3504
3533
  key: 1,
3505
3534
  class: "text-sm text-slate-500 dark:text-slate-400"
3506
- }, ja = {
3535
+ }, Fa = {
3507
3536
  key: 0,
3508
3537
  class: "flex items-center gap-2"
3509
- }, Ma = {
3538
+ }, Ia = {
3510
3539
  key: 1,
3511
3540
  class: "flex flex-wrap items-center justify-end gap-2 border-t border-slate-200 px-5 py-3 dark:border-slate-700"
3512
- }, Na = /* @__PURE__ */ p({
3541
+ }, La = /* @__PURE__ */ m({
3513
3542
  __name: "BaseCard",
3514
3543
  props: {
3515
3544
  title: { default: "" },
@@ -3517,24 +3546,24 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3517
3546
  padding: { default: "md" }
3518
3547
  },
3519
3548
  setup(e) {
3520
- return (t, n) => (T(), s("section", Ea, [
3521
- e.title || e.subtitle || t.$slots.actions ? (T(), s("header", Da, [c("div", Oa, [e.title ? (T(), s("h2", ka, N(e.title), 1)) : o("", !0), e.subtitle ? (T(), s("p", Aa, N(e.subtitle), 1)) : o("", !0)]), t.$slots.actions ? (T(), s("div", ja, [A(t.$slots, "actions")])) : o("", !0)])) : o("", !0),
3522
- c("div", { class: v(e.padding === "sm" ? "p-4" : e.padding === "none" ? "" : "p-5") }, [A(t.$slots, "default")], 2),
3523
- t.$slots.footer ? (T(), s("footer", Ma, [A(t.$slots, "footer")])) : o("", !0)
3549
+ return (t, n) => (E(), c("section", Aa, [
3550
+ e.title || e.subtitle || t.$slots.actions ? (E(), c("header", ja, [l("div", Ma, [e.title ? (E(), c("h2", Na, P(e.title), 1)) : s("", !0), e.subtitle ? (E(), c("p", Pa, P(e.subtitle), 1)) : s("", !0)]), t.$slots.actions ? (E(), c("div", Fa, [j(t.$slots, "actions")])) : s("", !0)])) : s("", !0),
3551
+ l("div", { class: y(e.padding === "sm" ? "p-4" : e.padding === "none" ? "" : "p-5") }, [j(t.$slots, "default")], 2),
3552
+ t.$slots.footer ? (E(), c("footer", Ia, [j(t.$slots, "footer")])) : s("", !0)
3524
3553
  ]));
3525
3554
  }
3526
- }), Pa = ["for"], Fa = {
3555
+ }), Ra = ["for"], za = {
3527
3556
  key: 0,
3528
3557
  class: "ml-0.5 text-red-500",
3529
3558
  "aria-hidden": "true"
3530
- }, Ia = {
3559
+ }, Ba = {
3531
3560
  key: 1,
3532
3561
  class: "mt-1 text-xs font-medium text-red-600 dark:text-red-400",
3533
3562
  role: "alert"
3534
- }, La = {
3563
+ }, Va = {
3535
3564
  key: 2,
3536
3565
  class: "mt-1 text-xs text-slate-500 dark:text-slate-400"
3537
- }, Ra = /* @__PURE__ */ p({
3566
+ }, Ha = /* @__PURE__ */ m({
3538
3567
  __name: "BaseField",
3539
3568
  props: {
3540
3569
  label: { default: "" },
@@ -3555,17 +3584,17 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3555
3584
  }
3556
3585
  },
3557
3586
  setup(e) {
3558
- return (t, n) => (T(), s("div", { class: v([e.grow ? "min-w-48 flex-1" : "", "text-left"]) }, [
3559
- e.label ? (T(), s("label", {
3587
+ return (t, n) => (E(), c("div", { class: y([e.grow ? "min-w-48 flex-1" : "", "text-left"]) }, [
3588
+ e.label ? (E(), c("label", {
3560
3589
  key: 0,
3561
3590
  for: e.labelFor || void 0,
3562
- class: v(["mb-1 block", e.compact ? "text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" : "text-sm font-medium text-slate-700 dark:text-slate-200"])
3563
- }, [d(N(e.label), 1), e.required ? (T(), s("span", Fa, "*")) : o("", !0)], 10, Pa)) : o("", !0),
3564
- A(t.$slots, "default"),
3565
- e.error ? (T(), s("p", Ia, N(e.error), 1)) : e.hint ? (T(), s("p", La, N(e.hint), 1)) : o("", !0)
3591
+ class: y(["mb-1 block", e.compact ? "text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" : "text-sm font-medium text-slate-700 dark:text-slate-200"])
3592
+ }, [f(P(e.label), 1), e.required ? (E(), c("span", za, "*")) : s("", !0)], 10, Ra)) : s("", !0),
3593
+ j(t.$slots, "default"),
3594
+ e.error ? (E(), c("p", Ba, P(e.error), 1)) : e.hint ? (E(), c("p", Va, P(e.hint), 1)) : s("", !0)
3566
3595
  ], 2));
3567
3596
  }
3568
- }), za = { class: "flex items-start justify-between gap-3" }, Ba = { class: "min-w-0 text-left" }, Va = { class: "truncate text-sm font-bold tracking-wide text-gray-800 dark:text-slate-200" }, Ha = /* @__PURE__ */ p({
3597
+ }), Ua = { class: "flex items-start justify-between gap-3" }, Wa = { class: "min-w-0 text-left" }, Ga = { class: "truncate text-sm font-bold tracking-wide text-gray-800 dark:text-slate-200" }, Ka = /* @__PURE__ */ m({
3569
3598
  __name: "BaseStatCard",
3570
3599
  props: {
3571
3600
  title: {},
@@ -3611,31 +3640,31 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3611
3640
  iconBox: "bg-slate-100 dark:bg-slate-700/50",
3612
3641
  icon: "text-slate-500 dark:text-slate-300"
3613
3642
  }
3614
- }, r = i(() => n[t.accent]);
3615
- return (t, n) => (T(), a(M(e.to ? P(Oe) : "div"), g(e.to ? { to: e.to } : {}, { class: ["relative block rounded-xl border-2 border-dashed bg-white p-5 transition-colors dark:bg-slate-800", [r.value.border, e.to ? "hover:bg-slate-50 dark:hover:bg-slate-700/60 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500" : ""]] }), {
3616
- default: L(() => [c("div", za, [c("div", Ba, [
3617
- c("p", Va, N(e.title), 1),
3618
- c("p", { class: v(["mt-1 truncate text-3xl font-bold", r.value.value]) }, N(e.value), 3),
3619
- e.subtitle ? (T(), s("p", {
3643
+ }, r = a(() => n[t.accent]);
3644
+ return (t, n) => (E(), o(N(e.to ? F(Ae) : "div"), _(e.to ? { to: e.to } : {}, { class: ["relative block rounded-xl border-2 border-dashed bg-white p-5 transition-colors dark:bg-slate-800", [r.value.border, e.to ? "hover:bg-slate-50 dark:hover:bg-slate-700/60 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500" : ""]] }), {
3645
+ default: L(() => [l("div", Ua, [l("div", Wa, [
3646
+ l("p", Ga, P(e.title), 1),
3647
+ l("p", { class: y(["mt-1 truncate text-3xl font-bold", r.value.value]) }, P(e.value), 3),
3648
+ e.subtitle ? (E(), c("p", {
3620
3649
  key: 0,
3621
- class: v(["mt-1 text-sm font-medium", r.value.subtitle])
3622
- }, N(e.subtitle), 3)) : o("", !0),
3623
- A(t.$slots, "default")
3624
- ]), t.$slots.icon ? (T(), s("div", {
3650
+ class: y(["mt-1 text-sm font-medium", r.value.subtitle])
3651
+ }, P(e.subtitle), 3)) : s("", !0),
3652
+ j(t.$slots, "default")
3653
+ ]), t.$slots.icon ? (E(), c("div", {
3625
3654
  key: 0,
3626
- class: v(["flex h-12 w-12 shrink-0 items-center justify-center rounded-xl", r.value.iconBox])
3627
- }, [A(t.$slots, "icon", { iconClass: `h-6 w-6 ${r.value.icon}` })], 2)) : o("", !0)])]),
3655
+ class: y(["flex h-12 w-12 shrink-0 items-center justify-center rounded-xl", r.value.iconBox])
3656
+ }, [j(t.$slots, "icon", { iconClass: `h-6 w-6 ${r.value.icon}` })], 2)) : s("", !0)])]),
3628
3657
  _: 3
3629
3658
  }, 16, ["class"]));
3630
3659
  }
3631
- }), Ua = [
3660
+ }), qa = [
3632
3661
  "aria-checked",
3633
3662
  "aria-label",
3634
3663
  "disabled"
3635
- ], Wa = {
3664
+ ], Ja = {
3636
3665
  key: 0,
3637
3666
  class: "text-sm font-medium text-slate-700 dark:text-slate-200"
3638
- }, Ga = /* @__PURE__ */ p({
3667
+ }, Ya = /* @__PURE__ */ m({
3639
3668
  __name: "BaseToggle",
3640
3669
  props: {
3641
3670
  modelValue: {
@@ -3664,29 +3693,110 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3664
3693
  let e = !n.modelValue;
3665
3694
  r("update:modelValue", e), r("change", e);
3666
3695
  }
3667
- return (t, n) => (T(), s("label", { class: v(["inline-flex items-center gap-3 select-none", e.disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer"]) }, [c("button", {
3696
+ return (t, n) => (E(), c("label", { class: y(["inline-flex items-center gap-3 select-none", e.disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer"]) }, [l("button", {
3668
3697
  type: "button",
3669
3698
  role: "switch",
3670
3699
  "aria-checked": e.modelValue,
3671
3700
  "aria-label": e.label ? void 0 : e.ariaLabel || void 0,
3672
3701
  disabled: e.disabled,
3673
- class: v(["relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900 disabled:cursor-not-allowed", e.modelValue ? i[e.color] : e.offTone === "red" ? "bg-red-200 dark:bg-red-900/50" : "bg-slate-200 dark:bg-slate-700"]),
3702
+ class: y(["relative inline-flex h-6 w-11 shrink-0 items-center rounded-full transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900 disabled:cursor-not-allowed", e.modelValue ? i[e.color] : e.offTone === "red" ? "bg-red-200 dark:bg-red-900/50" : "bg-slate-200 dark:bg-slate-700"]),
3674
3703
  onClick: a
3675
- }, [c("span", {
3676
- class: v(["inline-block h-5 w-5 rounded-full bg-white shadow ring-1 ring-black/5 transition-transform", e.modelValue ? "translate-x-[22px]" : "translate-x-0.5"]),
3704
+ }, [l("span", {
3705
+ class: y(["inline-block h-5 w-5 rounded-full bg-white shadow ring-1 ring-black/5 transition-transform", e.modelValue ? "translate-x-[22px]" : "translate-x-0.5"]),
3677
3706
  "aria-hidden": "true"
3678
- }, null, 2)], 10, Ua), e.label ? (T(), s("span", Wa, N(e.label), 1)) : o("", !0)], 2));
3707
+ }, null, 2)], 10, qa), e.label ? (E(), c("span", Ja, P(e.label), 1)) : s("", !0)], 2));
3708
+ }
3709
+ }), Xa = ["checked", "disabled"], Za = {
3710
+ key: 0,
3711
+ class: "text-sm text-slate-700 dark:text-slate-200"
3712
+ }, Qa = /* @__PURE__ */ m({
3713
+ inheritAttrs: !1,
3714
+ __name: "BaseCheckbox",
3715
+ props: {
3716
+ modelValue: {
3717
+ type: Boolean,
3718
+ default: !1
3719
+ },
3720
+ label: { default: "" },
3721
+ disabled: {
3722
+ type: Boolean,
3723
+ default: !1
3724
+ }
3725
+ },
3726
+ emits: ["update:modelValue", "change"],
3727
+ setup(e, { emit: t }) {
3728
+ let n = t;
3729
+ function r(e) {
3730
+ let t = e.target.checked;
3731
+ n("update:modelValue", t), n("change", t);
3732
+ }
3733
+ return (t, n) => (E(), c("label", { class: y(["inline-flex items-center gap-2 select-none", e.disabled ? "cursor-not-allowed opacity-60" : "cursor-pointer"]) }, [l("input", _(t.$attrs, {
3734
+ type: "checkbox",
3735
+ checked: e.modelValue,
3736
+ disabled: e.disabled,
3737
+ class: "h-5 w-5 shrink-0 cursor-[inherit] rounded-md border-slate-300 bg-white text-emerald-600 accent-emerald-600 transition-colors focus:ring-2 focus:ring-emerald-500/40 focus:ring-offset-0 dark:border-slate-600 dark:bg-slate-900 dark:checked:bg-emerald-600",
3738
+ onChange: r
3739
+ }), null, 16, Xa), e.label || t.$slots.default ? (E(), c("span", Za, [j(t.$slots, "default", {}, () => [f(P(e.label), 1)])])) : s("", !0)], 2));
3679
3740
  }
3680
- }), Ka = { class: "flex min-h-screen w-full flex-col items-center justify-center bg-slate-50 px-4 py-10 dark:bg-slate-950" }, qa = { class: "mb-6 flex justify-center" }, Ja = {
3741
+ }), $a = { class: "flex flex-col gap-2 text-left" }, eo = {
3742
+ class: "flex h-9 w-9 shrink-0 items-center justify-center rounded-full bg-emerald-100 text-sm font-semibold text-emerald-700 dark:bg-emerald-500/15 dark:text-emerald-300",
3743
+ "aria-hidden": "true"
3744
+ }, to = { class: "min-w-0" }, no = { class: "block truncate text-sm font-medium text-slate-900 dark:text-slate-100" }, ro = {
3745
+ key: 0,
3746
+ class: "block truncate text-xs text-slate-500 dark:text-slate-400"
3747
+ }, io = /* @__PURE__ */ m({
3748
+ __name: "BaseSidebarUser",
3749
+ props: {
3750
+ name: {},
3751
+ email: { default: "" },
3752
+ to: { default: void 0 },
3753
+ showLogout: {
3754
+ type: Boolean,
3755
+ default: !0
3756
+ },
3757
+ logoutLabel: { default: "Logout" },
3758
+ profileLabel: { default: "View profile" }
3759
+ },
3760
+ emits: ["logout"],
3761
+ setup(e, { emit: t }) {
3762
+ let n = e, r = t, i = a(() => (n.name || "?").split(/[\s._-]+/).filter(Boolean).slice(0, 2).map((e) => e[0].toUpperCase()).join(""));
3763
+ return (t, n) => (E(), c("div", $a, [(E(), o(N(e.to ? F(Ae) : "div"), _(e.to ? { to: e.to } : {}, {
3764
+ class: ["flex items-center gap-3 rounded-lg p-2 transition-colors", e.to ? "hover:bg-slate-100 dark:hover:bg-slate-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500" : ""],
3765
+ title: e.to ? e.profileLabel : void 0
3766
+ }), {
3767
+ default: L(() => [l("span", eo, P(i.value), 1), l("span", to, [l("span", no, P(e.name), 1), e.email ? (E(), c("span", ro, P(e.email), 1)) : s("", !0)])]),
3768
+ _: 1
3769
+ }, 16, ["class", "title"])), e.showLogout ? (E(), o(nt, {
3770
+ key: 0,
3771
+ class: "w-full justify-center",
3772
+ description: e.logoutLabel,
3773
+ color: F(K).RED,
3774
+ size: F(q).SMALL,
3775
+ outline: "",
3776
+ "icon-left": "",
3777
+ onClick: n[0] ||= (e) => r("logout")
3778
+ }, {
3779
+ default: L(() => [p(F(ce), {
3780
+ class: "mr-1.5 h-4 w-4",
3781
+ "aria-hidden": "true"
3782
+ })]),
3783
+ _: 1
3784
+ }, 8, [
3785
+ "description",
3786
+ "color",
3787
+ "size"
3788
+ ])) : s("", !0)]));
3789
+ }
3790
+ }), ao = { class: "flex min-h-screen w-full flex-col items-center justify-center bg-slate-50 px-4 py-10 dark:bg-slate-950" }, oo = { class: "mb-6 flex justify-center" }, so = {
3681
3791
  key: 0,
3682
3792
  class: "mb-1 text-2xl font-bold tracking-tight text-slate-900 dark:text-slate-100"
3683
- }, Ya = {
3793
+ }, co = {
3684
3794
  key: 1,
3685
3795
  class: "text-sm text-slate-500 dark:text-slate-400"
3686
- }, Xa = {
3796
+ }, lo = {
3687
3797
  key: 2,
3688
3798
  class: "mt-6 border-t border-slate-200 pt-4 text-center text-sm text-slate-500 dark:border-slate-700 dark:text-slate-400"
3689
- }, Za = /* @__PURE__ */ p({
3799
+ }, uo = /* @__PURE__ */ m({
3690
3800
  __name: "BaseAuthLayout",
3691
3801
  props: {
3692
3802
  title: { default: "" },
@@ -3697,24 +3807,24 @@ var Bn = ["aria-label", "aria-expanded"], Vn = { class: "flex flex-col h-full" }
3697
3807
  }
3698
3808
  },
3699
3809
  setup(e) {
3700
- return (t, n) => (T(), s("div", Ka, [c("div", qa, [A(t.$slots, "logo", {}, () => [f(Dt, { size: P(J).MEDIUM }, null, 8, ["size"])])]), c("div", { class: v(["w-full rounded-xl border border-slate-200 bg-white p-6 text-left shadow-sm sm:p-8 dark:border-slate-700 dark:bg-slate-900", e.wide ? "max-w-3xl" : "max-w-md"]) }, [
3701
- e.title ? (T(), s("h1", Ja, N(e.title), 1)) : o("", !0),
3702
- e.subtitle ? (T(), s("p", Ya, N(e.subtitle), 1)) : o("", !0),
3703
- c("div", { class: v(e.title || e.subtitle ? "mt-6" : "") }, [A(t.$slots, "default")], 2),
3704
- t.$slots.footer ? (T(), s("div", Xa, [A(t.$slots, "footer")])) : o("", !0)
3810
+ return (t, n) => (E(), c("div", ao, [l("div", oo, [j(t.$slots, "logo", {}, () => [p(jt, { size: F(J).MEDIUM }, null, 8, ["size"])])]), l("div", { class: y(["w-full rounded-xl border border-slate-200 bg-white p-6 text-left shadow-sm sm:p-8 dark:border-slate-700 dark:bg-slate-900", e.wide ? "max-w-3xl" : "max-w-md"]) }, [
3811
+ e.title ? (E(), c("h1", so, P(e.title), 1)) : s("", !0),
3812
+ e.subtitle ? (E(), c("p", co, P(e.subtitle), 1)) : s("", !0),
3813
+ l("div", { class: y(e.title || e.subtitle ? "mt-6" : "") }, [j(t.$slots, "default")], 2),
3814
+ t.$slots.footer ? (E(), c("div", lo, [j(t.$slots, "footer")])) : s("", !0)
3705
3815
  ], 2)]));
3706
3816
  }
3707
3817
  });
3708
3818
  //#endregion
3709
3819
  //#region node_modules/@heroicons/vue/20/solid/esm/CheckCircleIcon.js
3710
- function Qa(e, t) {
3711
- return T(), s("svg", {
3820
+ function fo(e, t) {
3821
+ return E(), c("svg", {
3712
3822
  xmlns: "http://www.w3.org/2000/svg",
3713
3823
  viewBox: "0 0 20 20",
3714
3824
  fill: "currentColor",
3715
3825
  "aria-hidden": "true",
3716
3826
  "data-slot": "icon"
3717
- }, [c("path", {
3827
+ }, [l("path", {
3718
3828
  "fill-rule": "evenodd",
3719
3829
  d: "M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16Zm3.857-9.809a.75.75 0 0 0-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 1 0-1.06 1.061l2.5 2.5a.75.75 0 0 0 1.137-.089l4-5.5Z",
3720
3830
  "clip-rule": "evenodd"
@@ -3722,14 +3832,14 @@ function Qa(e, t) {
3722
3832
  }
3723
3833
  //#endregion
3724
3834
  //#region node_modules/@heroicons/vue/20/solid/esm/XCircleIcon.js
3725
- function $a(e, t) {
3726
- return T(), s("svg", {
3835
+ function po(e, t) {
3836
+ return E(), c("svg", {
3727
3837
  xmlns: "http://www.w3.org/2000/svg",
3728
3838
  viewBox: "0 0 20 20",
3729
3839
  fill: "currentColor",
3730
3840
  "aria-hidden": "true",
3731
3841
  "data-slot": "icon"
3732
- }, [c("path", {
3842
+ }, [l("path", {
3733
3843
  "fill-rule": "evenodd",
3734
3844
  d: "M10 18a8 8 0 1 0 0-16 8 8 0 0 0 0 16ZM8.28 7.22a.75.75 0 0 0-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 1 0 1.06 1.06L10 11.06l1.72 1.72a.75.75 0 1 0 1.06-1.06L11.06 10l1.72-1.72a.75.75 0 0 0-1.06-1.06L10 8.94 8.28 7.22Z",
3735
3845
  "clip-rule": "evenodd"
@@ -3737,7 +3847,7 @@ function $a(e, t) {
3737
3847
  }
3738
3848
  //#endregion
3739
3849
  //#region src/components/BaseBooleanBadge.vue
3740
- var eo = /* @__PURE__ */ p({
3850
+ var mo = /* @__PURE__ */ m({
3741
3851
  __name: "BaseBooleanBadge",
3742
3852
  props: {
3743
3853
  value: {
@@ -3748,20 +3858,20 @@ var eo = /* @__PURE__ */ p({
3748
3858
  falseLabel: { default: "No" }
3749
3859
  },
3750
3860
  setup(e) {
3751
- return (t, n) => (T(), s("span", { class: v(["inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium ring-1 ring-inset", e.value ? "bg-emerald-50 text-emerald-700 ring-emerald-600/20 dark:bg-emerald-500/10 dark:text-emerald-300 dark:ring-emerald-400/30" : "bg-slate-100 text-slate-600 ring-slate-500/20 dark:bg-slate-700/50 dark:text-slate-300 dark:ring-slate-400/20"]) }, [e.value ? (T(), a(P(Qa), {
3861
+ return (t, n) => (E(), c("span", { class: y(["inline-flex items-center gap-1 rounded-full px-2.5 py-0.5 text-xs font-medium ring-1 ring-inset", e.value ? "bg-emerald-50 text-emerald-700 ring-emerald-600/20 dark:bg-emerald-500/10 dark:text-emerald-300 dark:ring-emerald-400/30" : "bg-red-50 text-red-700 ring-red-600/20 dark:bg-red-500/10 dark:text-red-300 dark:ring-red-400/30"]) }, [e.value ? (E(), o(F(fo), {
3752
3862
  key: 0,
3753
3863
  class: "h-3.5 w-3.5",
3754
3864
  "aria-hidden": "true"
3755
- })) : (T(), a(P($a), {
3865
+ })) : (E(), o(F(po), {
3756
3866
  key: 1,
3757
3867
  class: "h-3.5 w-3.5",
3758
3868
  "aria-hidden": "true"
3759
- })), d(" " + N(e.value ? e.trueLabel : e.falseLabel), 1)], 2));
3869
+ })), f(" " + P(e.value ? e.trueLabel : e.falseLabel), 1)], 2));
3760
3870
  }
3761
- }), to = { class: "text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" }, no = ["href"], ro = {
3871
+ }), ho = { class: "text-xs uppercase tracking-wide text-slate-500 dark:text-slate-400" }, go = ["href"], _o = {
3762
3872
  key: 1,
3763
3873
  class: "text-slate-400 dark:text-slate-500"
3764
- }, io = /* @__PURE__ */ p({
3874
+ }, vo = /* @__PURE__ */ m({
3765
3875
  __name: "BaseDetailList",
3766
3876
  props: {
3767
3877
  items: {},
@@ -3772,34 +3882,34 @@ var eo = /* @__PURE__ */ p({
3772
3882
  function n(e) {
3773
3883
  return e == null || e === "";
3774
3884
  }
3775
- return (r, i) => (T(), s("dl", { class: v(["grid grid-cols-1 gap-x-6 gap-y-4 text-left", t.columns === 2 ? "sm:grid-cols-2" : t.columns === 3 ? "sm:grid-cols-2 lg:grid-cols-3" : ""]) }, [(T(!0), s(e, null, k(t.items, (r) => (T(), s("div", {
3885
+ return (r, i) => (E(), c("dl", { class: y(["grid grid-cols-1 gap-x-6 gap-y-4 text-left", t.columns === 2 ? "sm:grid-cols-2" : t.columns === 3 ? "sm:grid-cols-2 lg:grid-cols-3" : ""]) }, [(E(!0), c(e, null, A(t.items, (r) => (E(), c("div", {
3776
3886
  key: r.label,
3777
3887
  class: "min-w-0"
3778
- }, [c("dt", to, N(r.label), 1), c("dd", { class: v(["mt-1 break-words text-sm text-slate-900 dark:text-slate-100", r.mono ? "font-mono" : ""]) }, [r.href && !n(r.value) ? (T(), s("a", {
3888
+ }, [l("dt", ho, P(r.label), 1), l("dd", { class: y(["mt-1 break-words text-sm text-slate-900 dark:text-slate-100", r.mono ? "font-mono" : ""]) }, [r.href && !n(r.value) ? (E(), c("a", {
3779
3889
  key: 0,
3780
3890
  href: r.href,
3781
3891
  target: "_blank",
3782
3892
  rel: "noopener noreferrer",
3783
3893
  class: "text-emerald-600 hover:underline dark:text-emerald-400"
3784
- }, N(r.value), 9, no)) : n(r.value) ? (T(), s("span", ro, N(t.emptyText), 1)) : (T(), s(e, { key: 2 }, [d(N(r.value), 1)], 64))], 2)]))), 128))], 2));
3894
+ }, P(r.value), 9, go)) : n(r.value) ? (E(), c("span", _o, P(t.emptyText), 1)) : (E(), c(e, { key: 2 }, [f(P(r.value), 1)], 64))], 2)]))), 128))], 2));
3785
3895
  }
3786
3896
  });
3787
3897
  //#endregion
3788
3898
  //#region src/composables/useDebounce.ts
3789
- function ao(e, t = 300) {
3790
- let n = O(e.value), r = null;
3899
+ function yo(e, t = 300) {
3900
+ let n = k(e.value), r = null;
3791
3901
  return I(e, (e) => {
3792
3902
  r && clearTimeout(r), r = setTimeout(() => {
3793
3903
  n.value = e, r = null;
3794
3904
  }, t);
3795
- }), C(() => {
3905
+ }), w(() => {
3796
3906
  r &&= (clearTimeout(r), null);
3797
3907
  }), n;
3798
3908
  }
3799
3909
  //#endregion
3800
3910
  //#region src/composables/useToast.ts
3801
- function oo(e = 3e3) {
3802
- let t = O(!1), n = O(""), r = O(Y.SUCCESS), i = null;
3911
+ function bo(e = 3e3) {
3912
+ let t = k(!1), n = k(""), r = k(Y.SUCCESS), i = null;
3803
3913
  function a() {
3804
3914
  i &&= (clearTimeout(i), null);
3805
3915
  }
@@ -3808,7 +3918,7 @@ function oo(e = 3e3) {
3808
3918
  t.value = !1, i = null;
3809
3919
  }, c);
3810
3920
  }
3811
- return C(() => {
3921
+ return w(() => {
3812
3922
  a();
3813
3923
  }), {
3814
3924
  showToast: t,
@@ -3819,8 +3929,8 @@ function oo(e = 3e3) {
3819
3929
  }
3820
3930
  //#endregion
3821
3931
  //#region src/composables/useQueryParamSync.ts
3822
- function so() {
3823
- let e = ke(), t = Ae();
3932
+ function xo() {
3933
+ let e = je(), t = Me();
3824
3934
  function n(t) {
3825
3935
  let n = e.query[t];
3826
3936
  return typeof n == "string" ? n : "";
@@ -3841,8 +3951,8 @@ function so() {
3841
3951
  }
3842
3952
  //#endregion
3843
3953
  //#region src/composables/useFieldClasses.ts
3844
- function co() {
3845
- let { isDark: e } = W(), t = i(() => e.value ? "text-gray-300" : "text-gray-600"), n = i(() => e.value ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:ring-emerald-500 focus:border-emerald-500" : "bg-white border-gray-300 text-gray-800 focus:ring-emerald-500 focus:border-emerald-500");
3954
+ function So() {
3955
+ let { isDark: e } = W(), t = a(() => e.value ? "text-gray-300" : "text-gray-600"), n = a(() => e.value ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:ring-emerald-500 focus:border-emerald-500" : "bg-white border-gray-300 text-gray-800 focus:ring-emerald-500 focus:border-emerald-500");
3846
3956
  function r(t) {
3847
3957
  return t == null || String(t).trim() === "" ? e.value ? "bg-gray-800 border-red-500 text-gray-100 placeholder-gray-500 focus:ring-red-500 focus:border-red-500 ring-1 ring-red-500/30" : "bg-white border-red-400 text-gray-800 focus:ring-red-500 focus:border-red-500 ring-1 ring-red-400/30" : n.value;
3848
3958
  }
@@ -3854,8 +3964,8 @@ function co() {
3854
3964
  }
3855
3965
  //#endregion
3856
3966
  //#region src/composables/usePolling.ts
3857
- function lo(e, t, n = {}) {
3858
- let { immediate: r = !0, pauseWhenHidden: i = !0 } = n, a = null, o = O(!1), s = !1;
3967
+ function Co(e, t, n = {}) {
3968
+ let { immediate: r = !0, pauseWhenHidden: i = !0 } = n, a = null, o = k(!1), s = !1;
3859
3969
  function c() {
3860
3970
  a === null && t !== null && (a = setInterval(() => void e(), t));
3861
3971
  }
@@ -3877,24 +3987,24 @@ function lo(e, t, n = {}) {
3877
3987
  o.value = !1, l(), s = !0;
3878
3988
  }
3879
3989
  }
3880
- return S(() => {
3990
+ return C(() => {
3881
3991
  u(), i && document.addEventListener("visibilitychange", f);
3882
- }), w(() => {
3992
+ }), T(() => {
3883
3993
  d(), i && document.removeEventListener("visibilitychange", f);
3884
3994
  }), {
3885
3995
  start: u,
3886
3996
  stop: d,
3887
- active: D(o)
3997
+ active: O(o)
3888
3998
  };
3889
3999
  }
3890
4000
  //#endregion
3891
4001
  //#region src/enums/BaseBadgeEnum.ts
3892
- var uo = /* @__PURE__ */ function(e) {
4002
+ var wo = /* @__PURE__ */ function(e) {
3893
4003
  return e.WIN = "WIN", e.LOSE = "LOSE", e;
3894
4004
  }({});
3895
4005
  //#endregion
3896
4006
  //#region src/utils/util.ts
3897
- function fo(e) {
4007
+ function To(e) {
3898
4008
  let t = "red";
3899
4009
  switch (e) {
3900
4010
  case V.ERROR:
@@ -3910,7 +4020,7 @@ function fo(e) {
3910
4020
  }
3911
4021
  return t;
3912
4022
  }
3913
- function po(e) {
4023
+ function Eo(e) {
3914
4024
  let t = "red";
3915
4025
  switch (e) {
3916
4026
  case G.GREEN:
@@ -3937,14 +4047,14 @@ function po(e) {
3937
4047
  }
3938
4048
  //#endregion
3939
4049
  //#region src/utils/httpColors.ts
3940
- var mo = {
4050
+ var Do = {
3941
4051
  GET: "bg-blue-600",
3942
4052
  POST: "bg-emerald-600",
3943
4053
  PUT: "bg-amber-600",
3944
4054
  DELETE: "bg-red-600",
3945
4055
  PATCH: "bg-purple-600",
3946
4056
  HEAD: "bg-gray-600"
3947
- }, ho = {
4057
+ }, Oo = {
3948
4058
  GET: "bg-blue-500",
3949
4059
  POST: "bg-green-500",
3950
4060
  PUT: "bg-yellow-500",
@@ -3952,39 +4062,39 @@ var mo = {
3952
4062
  PATCH: "bg-purple-500",
3953
4063
  HEAD: "bg-gray-500"
3954
4064
  };
3955
- function go(e) {
3956
- return e ? mo[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
4065
+ function ko(e) {
4066
+ return e ? Do[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
3957
4067
  }
3958
- function _o(e) {
3959
- return e ? ho[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
4068
+ function Ao(e) {
4069
+ return e ? Oo[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
3960
4070
  }
3961
- function vo(e) {
4071
+ function jo(e) {
3962
4072
  let t = e ?? 0;
3963
4073
  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";
3964
4074
  }
3965
- function yo(e, t) {
4075
+ function Mo(e, t) {
3966
4076
  let n = (e || "ANY").toUpperCase();
3967
4077
  return n === "GET" ? t ? "bg-blue-500/15 text-blue-400" : "bg-blue-100 text-blue-700" : n === "POST" ? t ? "bg-emerald-500/15 text-emerald-400" : "bg-emerald-100 text-emerald-700" : n === "PUT" ? t ? "bg-amber-500/15 text-amber-400" : "bg-amber-100 text-amber-700" : n === "DELETE" ? t ? "bg-red-500/15 text-red-400" : "bg-red-100 text-red-700" : n === "PATCH" ? t ? "bg-purple-500/15 text-purple-400" : "bg-purple-100 text-purple-700" : n === "HEAD" ? t ? "bg-sky-500/15 text-sky-400" : "bg-sky-100 text-sky-700" : t ? "bg-gray-500/15 text-gray-400" : "bg-gray-100 text-gray-600";
3968
4078
  }
3969
- function bo(e, t) {
4079
+ function No(e, t) {
3970
4080
  let n = e ?? 200;
3971
4081
  return n >= 200 && n < 300 ? t ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-100 text-emerald-700" : n >= 300 && n < 400 ? t ? "bg-sky-500/15 text-sky-300" : "bg-sky-100 text-sky-700" : n >= 400 && n < 500 ? t ? "bg-amber-500/15 text-amber-300" : "bg-amber-100 text-amber-700" : n >= 500 && n < 600 ? t ? "bg-red-500/15 text-red-300" : "bg-red-100 text-red-700" : t ? "bg-gray-800 text-gray-400" : "bg-gray-100 text-gray-600";
3972
4082
  }
3973
- function xo(e, t) {
4083
+ function Po(e, t) {
3974
4084
  let n = e ?? 200;
3975
4085
  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";
3976
4086
  }
3977
4087
  //#endregion
3978
4088
  //#region src/utils/kvRows.ts
3979
- function So(e) {
4089
+ function Fo(e) {
3980
4090
  return !(e.key ?? "").trim() || e.matcherType === "absent" ? !1 : !(e.value ?? "").trim();
3981
4091
  }
3982
- function Co(e) {
4092
+ function Io(e) {
3983
4093
  return e.matcherType === "absent" || !(e.value ?? "").trim() ? !1 : !(e.key ?? "").trim();
3984
4094
  }
3985
4095
  //#endregion
3986
4096
  //#region src/utils/sanitizeHtml.ts
3987
- var wo = /* @__PURE__ */ new Set([
4097
+ var Lo = /* @__PURE__ */ new Set([
3988
4098
  "A",
3989
4099
  "B",
3990
4100
  "STRONG",
@@ -3999,7 +4109,7 @@ var wo = /* @__PURE__ */ new Set([
3999
4109
  "LI",
4000
4110
  "SPAN",
4001
4111
  "DIV"
4002
- ]), To = /* @__PURE__ */ new Set([
4112
+ ]), Ro = /* @__PURE__ */ new Set([
4003
4113
  "SCRIPT",
4004
4114
  "STYLE",
4005
4115
  "IFRAME",
@@ -4007,53 +4117,53 @@ var wo = /* @__PURE__ */ new Set([
4007
4117
  "EMBED",
4008
4118
  "NOSCRIPT",
4009
4119
  "TEMPLATE"
4010
- ]), Eo = { A: /* @__PURE__ */ new Set(["href", "title"]) };
4011
- function Do(e) {
4120
+ ]), zo = { A: /* @__PURE__ */ new Set(["href", "title"]) };
4121
+ function Bo(e) {
4012
4122
  let t = e.trim().toLowerCase();
4013
4123
  return t.startsWith("http://") || t.startsWith("https://") || t.startsWith("mailto:") || t.startsWith("tel:") || t.startsWith("/") || t.startsWith("#") || t === "";
4014
4124
  }
4015
- function Oo(e) {
4125
+ function Vo(e) {
4016
4126
  if (e.nodeType !== Node.ELEMENT_NODE) return;
4017
4127
  let t = e, n = t.tagName.toUpperCase();
4018
- if (!wo.has(n)) {
4019
- To.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
4128
+ if (!Lo.has(n)) {
4129
+ Ro.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
4020
4130
  return;
4021
4131
  }
4022
- let r = Eo[n] ?? /* @__PURE__ */ new Set();
4132
+ let r = zo[n] ?? /* @__PURE__ */ new Set();
4023
4133
  for (let e of Array.from(t.attributes)) {
4024
4134
  if (!r.has(e.name.toLowerCase())) {
4025
4135
  t.removeAttribute(e.name);
4026
4136
  continue;
4027
4137
  }
4028
- n === "A" && e.name.toLowerCase() === "href" && !Do(e.value) && t.removeAttribute(e.name);
4138
+ n === "A" && e.name.toLowerCase() === "href" && !Bo(e.value) && t.removeAttribute(e.name);
4029
4139
  }
4030
4140
  n === "A" && t.hasAttribute("href") && (t.setAttribute("rel", "noopener noreferrer"), t.setAttribute("target", "_blank"));
4031
- for (let e of Array.from(t.childNodes)) Oo(e);
4141
+ for (let e of Array.from(t.childNodes)) Vo(e);
4032
4142
  }
4033
- function ko(e) {
4143
+ function Ho(e) {
4034
4144
  if (!e) return "";
4035
4145
  let t = new DOMParser().parseFromString(`<div>${e}</div>`, "text/html").body.firstElementChild;
4036
4146
  if (!t) return "";
4037
- for (let e of Array.from(t.childNodes)) Oo(e);
4147
+ for (let e of Array.from(t.childNodes)) Vo(e);
4038
4148
  return t.innerHTML;
4039
4149
  }
4040
4150
  //#endregion
4041
4151
  //#region src/utils/format.ts
4042
- var Ao = "—";
4043
- function jo(e, t = 4) {
4044
- if (e == null || typeof e == "string" && e.trim() === "") return Ao;
4152
+ var Uo = "—";
4153
+ function Wo(e, t = 4) {
4154
+ if (e == null || typeof e == "string" && e.trim() === "") return Uo;
4045
4155
  let n = typeof e == "string" ? Number(e) : e;
4046
4156
  return isFinite(n) ? n.toLocaleString(void 0, {
4047
4157
  minimumFractionDigits: t,
4048
4158
  maximumFractionDigits: t
4049
- }) : Ao;
4159
+ }) : Uo;
4050
4160
  }
4051
- function Mo(e) {
4052
- if (e == null || e === "") return Ao;
4161
+ function Go(e) {
4162
+ if (e == null || e === "") return Uo;
4053
4163
  let t = new Date(e);
4054
4164
  return isNaN(t.getTime()) ? String(e) : t.toLocaleString();
4055
4165
  }
4056
- function No(e) {
4166
+ function Ko(e) {
4057
4167
  return new Date(e).toLocaleString(void 0, {
4058
4168
  month: "short",
4059
4169
  day: "numeric",
@@ -4061,13 +4171,13 @@ function No(e) {
4061
4171
  minute: "2-digit"
4062
4172
  });
4063
4173
  }
4064
- function Po(e) {
4174
+ function qo(e) {
4065
4175
  return new Date(e).toLocaleDateString(void 0, {
4066
4176
  month: "short",
4067
4177
  day: "numeric"
4068
4178
  });
4069
4179
  }
4070
- function Fo(e) {
4180
+ function Jo(e) {
4071
4181
  try {
4072
4182
  return new Date(e).toLocaleString(void 0, {
4073
4183
  year: "numeric",
@@ -4083,7 +4193,7 @@ function Fo(e) {
4083
4193
  return String(e);
4084
4194
  }
4085
4195
  }
4086
- function Io(e) {
4196
+ function Yo(e) {
4087
4197
  if (!isFinite(e) || e === 0) return e.toFixed(2);
4088
4198
  let t = Math.abs(e), n = 2;
4089
4199
  return t < 1e-4 ? n = 8 : t < .01 ? n = 6 : t < 1 ? n = 4 : t < 100 && (n = 3), e.toLocaleString(void 0, {
@@ -4091,14 +4201,14 @@ function Io(e) {
4091
4201
  maximumFractionDigits: n
4092
4202
  });
4093
4203
  }
4094
- function Lo(e, t = 2) {
4204
+ function Xo(e, t = 2) {
4095
4205
  return `${e >= 0 ? "+" : ""}${e.toFixed(t)}%`;
4096
4206
  }
4097
- function Ro(e) {
4207
+ function Zo(e) {
4098
4208
  return `${e < 0 ? "-" : "+"}$${Math.abs(e).toFixed(2)}`;
4099
4209
  }
4100
- function zo(e) {
4101
- if (e == null || e === "") return Ao;
4210
+ function Qo(e) {
4211
+ if (e == null || e === "") return Uo;
4102
4212
  let t = new Date(e);
4103
4213
  return isNaN(t.getTime()) ? String(e) : t.toLocaleDateString("en-US", {
4104
4214
  year: "numeric",
@@ -4106,8 +4216,8 @@ function zo(e) {
4106
4216
  day: "numeric"
4107
4217
  });
4108
4218
  }
4109
- function Bo(e) {
4110
- if (e == null || e === "") return Ao;
4219
+ function $o(e) {
4220
+ if (e == null || e === "") return Uo;
4111
4221
  let t = new Date(e);
4112
4222
  return isNaN(t.getTime()) ? String(e) : t.toLocaleDateString("en-US", {
4113
4223
  year: "numeric",
@@ -4117,22 +4227,22 @@ function Bo(e) {
4117
4227
  minute: "2-digit"
4118
4228
  });
4119
4229
  }
4120
- function Vo(e) {
4230
+ function es(e) {
4121
4231
  if (typeof e != "number" || !isFinite(e) || e <= 0) return "";
4122
4232
  let t = e / 1e3, n = t < 1 ? 3 : 2;
4123
4233
  return `= ${t.toFixed(n)} s`;
4124
4234
  }
4125
- function Ho(e) {
4235
+ function ts(e) {
4126
4236
  return e ? e < 1024 ? `${e} B` : e < 1048576 ? `${(e / 1024).toFixed(1)} KB` : `${(e / 1048576).toFixed(1)} MB` : "";
4127
4237
  }
4128
- function Uo(e) {
4238
+ function ns(e) {
4129
4239
  try {
4130
4240
  return JSON.stringify(JSON.parse(e), null, 2);
4131
4241
  } catch {
4132
4242
  return e;
4133
4243
  }
4134
4244
  }
4135
- function Wo(e) {
4245
+ function rs(e) {
4136
4246
  if (e == null) return "";
4137
4247
  if (typeof e == "string") return e;
4138
4248
  try {
@@ -4141,14 +4251,14 @@ function Wo(e) {
4141
4251
  return String(e);
4142
4252
  }
4143
4253
  }
4144
- function Go(e, t = 2) {
4145
- if (e == null || !isFinite(e)) return Ao;
4254
+ function is(e, t = 2) {
4255
+ if (e == null || !isFinite(e)) return Uo;
4146
4256
  let n = Math.floor(Math.max(0, e) / 6e4), r = Math.floor(n / 1440), i = Math.floor(n % 1440 / 60), a = n % 60, o = [];
4147
4257
  return r > 0 && o.push(`${r}d`), (r > 0 || i > 0) && o.push(`${i}h`), o.push(`${a}m`), o.slice(0, t).join(" ");
4148
4258
  }
4149
4259
  //#endregion
4150
4260
  //#region src/utils/validate.ts
4151
- function Ko(e) {
4261
+ function as(e) {
4152
4262
  let t = (e ?? "").trim();
4153
4263
  if (!t) return !1;
4154
4264
  try {
@@ -4158,7 +4268,7 @@ function Ko(e) {
4158
4268
  return !1;
4159
4269
  }
4160
4270
  }
4161
- function qo(e) {
4271
+ function os(e) {
4162
4272
  if (!e.trim()) return !0;
4163
4273
  try {
4164
4274
  return JSON.parse(e), !0;
@@ -4166,7 +4276,7 @@ function qo(e) {
4166
4276
  return !1;
4167
4277
  }
4168
4278
  }
4169
- function Jo(e) {
4279
+ function ss(e) {
4170
4280
  if (!e.trim()) return !0;
4171
4281
  try {
4172
4282
  return !new DOMParser().parseFromString(e, "application/xml").getElementsByTagName("parsererror").length;
@@ -4174,7 +4284,7 @@ function Jo(e) {
4174
4284
  return !1;
4175
4285
  }
4176
4286
  }
4177
- function Yo(e) {
4287
+ function cs(e) {
4178
4288
  if (!e.trim()) return !0;
4179
4289
  let t = e.replace(/\s+/g, "");
4180
4290
  if (!t) return !0;
@@ -4187,7 +4297,7 @@ function Yo(e) {
4187
4297
  }
4188
4298
  //#endregion
4189
4299
  //#region src/utils/specForm.ts
4190
- function Xo(e, t) {
4300
+ function ls(e, t) {
4191
4301
  let n = {};
4192
4302
  if (!e) return n;
4193
4303
  for (let r of e) {
@@ -4196,7 +4306,7 @@ function Xo(e, t) {
4196
4306
  }
4197
4307
  return n;
4198
4308
  }
4199
- function Zo(e, t) {
4309
+ function us(e, t) {
4200
4310
  if (!e) return null;
4201
4311
  for (let n of e) if (n.type === "decimal" || n.type === "integer") {
4202
4312
  let e = t[n.key], r = e === "" || e == null;
@@ -4207,7 +4317,7 @@ function Zo(e, t) {
4207
4317
  }
4208
4318
  //#endregion
4209
4319
  //#region src/utils/pnl.ts
4210
- function Qo(e) {
4320
+ function ds(e) {
4211
4321
  if (e.buyPrice == null || e.lastPrice == null || e.filledQty == null) return {
4212
4322
  pnlUsd: null,
4213
4323
  pnlPct: null
@@ -4222,4 +4332,4 @@ function Qo(e) {
4222
4332
  };
4223
4333
  }
4224
4334
  //#endregion
4225
- export { V as AlertEnum, Sr as BaseActionButton, Le as BaseAlert, fr as BaseAppLayout, Za as BaseAuthLayout, ze as BaseBadge, uo as BaseBadgeEnum, ha as BaseBarDistribution, eo as BaseBooleanBadge, Ue as BaseBreadcrumb, Qe as BaseButton, K as BaseButtonEnum, q as BaseButtonSizeEnum, Na as BaseCard, Yr as BaseChipButton, ri as BaseCodeBlock, yn as BaseCollapsibleSection, Cn as BaseConfirmModal, wr as BaseCopyButton, ea as BaseCredentialsForm, ga as BaseDateTimePicker, io as BaseDetailList, fi as BaseDropdown, lr as BaseEntityPickerModal, Ra as BaseField, ni as BaseFileDropzone, Li as BaseFilterChip, Or as BaseGoogleSignInButton, ai as BaseInput, rt as BaseLine, it as BaseLoginEnum, Br as BaseLoginForm, Dt as BaseLogo, J as BaseLogoEnum, Pt as BaseModal, Ot as BaseModalEnum, gn as BaseModalShell, An as BaseNotFoundPage, qr as BaseNotificationPanel, gr as BasePageHeader, ua as BasePillPickerModal, Xr as BaseRemoveButton, Ft as BaseRow, Ta as BaseSearchSelect, gi as BaseSegmentedControl, si as BaseSelect, Xn as BaseSidebar, Mi as BaseSpecFields, It as BaseSpinner, Fi as BaseStatBreakdown, Ha as BaseStatCard, $r as BaseStatusPill, wi as BaseTable, Dn as BaseTextInputModal, zt as BaseToast, Y as BaseToastEnum, Ga as BaseToggle, yr as BaseToolbarButton, Vt as ColoredSquares, G as ColorsEnums, Wt as EarningsCard, Yt as EuroAmount, $e as LineEnum, en as Pagination, X as PositioningEnum, on as TrendArrow, Xo as buildSpecParams, Qo as computePnL, Zo as firstInvalidNumericSpec, Ho as fmtBytes, zo as fmtCalendarDate, Bo as fmtCalendarDateTime, Mo as fmtDate, Po as fmtDateShort, No as fmtDateTime, Fo as fmtDateTimeMs, Go as fmtDuration, Vo as fmtMsAsSeconds, jo as fmtNumber, Lo as fmtPct, Io as fmtPrice, Ro as fmtUsd, Uo as formatJson, fo as getBaseColor, po as getBaseColorOf, Pe as initTheme, Do as isSafeHref, Ko as isValidAbsoluteUrl, Yo as isValidBase64, qo as isValidJson, Jo as isValidXml, _o as methodBadgeBright, go as methodBadgeSolid, yo as methodBadgeTinted, Co as rowKeyMissing, So as rowValueMissing, ko as sanitizeHtml, bo as statusBadgeSoft, vo as statusBadgeSolid, xo as statusBadgeTinted, Wo as stringifyValue, ao as useDebouncedRef, sn as useEscapeKey, co as useFieldClasses, Mn as useMobileSidebar, zn as useNotifications, lo as usePolling, so as useQueryParamSync, In as useSidebarCollapse, W as useTheme, Z as useThemeClasses, oo as useToast };
4335
+ export { V as AlertEnum, Er as BaseActionButton, ze as BaseAlert, gr as BaseAppLayout, uo as BaseAuthLayout, Ue as BaseBadge, wo as BaseBadgeEnum, ya as BaseBarDistribution, mo as BaseBooleanBadge, qe as BaseBreadcrumb, nt as BaseButton, K as BaseButtonEnum, q as BaseButtonSizeEnum, La as BaseCard, Qa as BaseCheckbox, $r as BaseChipButton, si as BaseCodeBlock, Cn as BaseCollapsibleSection, Dn as BaseConfirmModal, Or as BaseCopyButton, ia as BaseCredentialsForm, ba as BaseDateTimePicker, vo as BaseDetailList, gi as BaseDropdown, pr as BaseEntityPickerModal, Ha as BaseField, oi as BaseFileDropzone, Vi as BaseFilterChip, Mr as BaseGoogleSignInButton, li as BaseInput, st as BaseLine, ct as BaseLoginEnum, Wr as BaseLoginForm, jt as BaseLogo, J as BaseLogoEnum, Rt as BaseModal, Mt as BaseModalEnum, bn as BaseModalShell, Pn as BaseNotFoundPage, Zr as BaseNotificationPanel, br as BasePageHeader, ma as BasePillPickerModal, ei as BaseRemoveButton, zt as BaseRow, ka as BaseSearchSelect, bi as BaseSegmentedControl, di as BaseSelect, er as BaseSidebar, io as BaseSidebarUser, Ii as BaseSpecFields, Bt as BaseSpinner, zi as BaseStatBreakdown, Ka as BaseStatCard, ri as BaseStatusPill, Oi as BaseTable, jn as BaseTextInputModal, Ut as BaseToast, Y as BaseToastEnum, Ya as BaseToggle, Cr as BaseToolbarButton, Gt as ColoredSquares, G as ColorsEnums, Jt as EarningsCard, $t as EuroAmount, rt as LineEnum, an as Pagination, X as PositioningEnum, un as TrendArrow, ls as buildSpecParams, ds as computePnL, us as firstInvalidNumericSpec, ts as fmtBytes, Qo as fmtCalendarDate, $o as fmtCalendarDateTime, Go as fmtDate, qo as fmtDateShort, Ko as fmtDateTime, Jo as fmtDateTimeMs, is as fmtDuration, es as fmtMsAsSeconds, Wo as fmtNumber, Xo as fmtPct, Yo as fmtPrice, Zo as fmtUsd, ns as formatJson, To as getBaseColor, Eo as getBaseColorOf, Be as humanizeEnum, Ve as humanizeTextVNodes, Ie as initTheme, Bo as isSafeHref, as as isValidAbsoluteUrl, cs as isValidBase64, os as isValidJson, ss as isValidXml, Ao as methodBadgeBright, ko as methodBadgeSolid, Mo as methodBadgeTinted, Io as rowKeyMissing, Fo as rowValueMissing, Ho as sanitizeHtml, No as statusBadgeSoft, jo as statusBadgeSolid, Po as statusBadgeTinted, rs as stringifyValue, yo as useDebouncedRef, dn as useEscapeKey, So as useFieldClasses, In as useMobileSidebar, Un as useNotifications, Co as usePolling, xo as useQueryParamSync, Bn as useSidebarCollapse, W as useTheme, Z as useThemeClasses, bo as useToast };