mgv-backoffice 1.13.0 → 1.16.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,7 +1,7 @@
1
1
  import { Fragment as e, Teleport as t, computed as n, createBlock as r, createCommentVNode as i, createElementBlock as a, createElementVNode as o, createTextVNode as s, createVNode as c, defineComponent as l, effectScope as u, nextTick as d, normalizeClass as f, onBeforeUnmount as p, onMounted as m, onScopeDispose as h, onUnmounted as g, openBlock as _, ref as v, renderList as y, renderSlot as b, resolveComponent as x, resolveDynamicComponent as S, toDisplayString as C, unref as w, useSlots as T, vModelText as E, vShow as D, watch as O, withCtx as k, withDirectives as A, withKeys as j, withModifiers as M } from "vue";
2
- import { ArrowDownIcon as ee, ArrowUpIcon as te, Bars3Icon as N, CheckCircleIcon as ne, ChevronRightIcon as re, DocumentDuplicateIcon as ie, ExclamationCircleIcon as ae, ExclamationTriangleIcon as P, FolderIcon as oe, InformationCircleIcon as se, MagnifyingGlassIcon as ce, XMarkIcon as F } from "@heroicons/vue/24/outline";
3
- import { HomeIcon as le } from "@heroicons/vue/24/solid";
4
- import { useRoute as ue, useRouter as de } from "vue-router";
2
+ import { ArrowDownIcon as ee, ArrowUpIcon as te, Bars3Icon as N, CheckCircleIcon as ne, ChevronRightIcon as re, ClipboardDocumentCheckIcon as ie, ClipboardDocumentIcon as ae, DocumentDuplicateIcon as oe, ExclamationCircleIcon as se, ExclamationTriangleIcon as P, FolderIcon as ce, InformationCircleIcon as le, MagnifyingGlassIcon as ue, XMarkIcon as F } from "@heroicons/vue/24/outline";
3
+ import { HomeIcon as de } from "@heroicons/vue/24/solid";
4
+ import { useRoute as fe, useRouter as pe } from "vue-router";
5
5
  //#region src/enums/AlertEnum.ts
6
6
  var I = /* @__PURE__ */ function(e) {
7
7
  return e.WARNING = "WARNING", e.ERROR = "ERROR", e.SUCCESS = "SUCCESS", e.INFO = "INFO", e;
@@ -10,7 +10,7 @@ var I = /* @__PURE__ */ function(e) {
10
10
  }({});
11
11
  //#endregion
12
12
  //#region src/utils/util.ts
13
- function fe(e) {
13
+ function me(e) {
14
14
  let t = "red";
15
15
  switch (e) {
16
16
  case I.ERROR:
@@ -28,7 +28,7 @@ function fe(e) {
28
28
  }
29
29
  return t;
30
30
  }
31
- function pe(e) {
31
+ function he(e) {
32
32
  let t = "red";
33
33
  switch (e) {
34
34
  case L.GREEN:
@@ -57,7 +57,7 @@ function pe(e) {
57
57
  }
58
58
  //#endregion
59
59
  //#region src/components/BaseAlert.vue?vue&type=script&setup=true&lang.ts
60
- var me = { class: "font-medium pl-1" }, he = /* @__PURE__ */ l({
60
+ var ge = { class: "font-medium pl-1" }, _e = /* @__PURE__ */ l({
61
61
  __name: "BaseAlert",
62
62
  props: {
63
63
  title: {
@@ -74,15 +74,15 @@ var me = { class: "font-medium pl-1" }, he = /* @__PURE__ */ l({
74
74
  setup(e) {
75
75
  let t = e;
76
76
  function n() {
77
- let e = fe(t.color);
77
+ let e = me(t.color);
78
78
  return "flex items-center p-4 mb-4 text-sm text-" + e + "-800 border border-" + e + "-300 rounded-lg bg-" + e + "-50 dark:bg-gray-800 dark:text-" + e + "-400 dark:border-" + e + "-800";
79
79
  }
80
80
  return (t, r) => (_(), a("div", {
81
81
  class: f(n()),
82
82
  role: "alert"
83
- }, [c(w(se), { class: "w-6 h-6 text-gray-400" }), o("div", null, [o("span", me, C(e.title), 1)])], 2));
83
+ }, [c(w(le), { class: "w-6 h-6 text-gray-400" }), o("div", null, [o("span", ge, C(e.title), 1)])], 2));
84
84
  }
85
- }), ge = "bg-red-100 text-red-700 border-red-200", R = /* @__PURE__ */ l({
85
+ }), ve = "bg-red-100 text-red-700 border-red-200", R = /* @__PURE__ */ l({
86
86
  __name: "BaseBadge",
87
87
  props: { color: {
88
88
  type: String,
@@ -96,19 +96,19 @@ var me = { class: "font-medium pl-1" }, he = /* @__PURE__ */ l({
96
96
  [L.YELLOW]: "bg-yellow-100 text-yellow-700 border-yellow-200",
97
97
  [L.GRAY]: "bg-gray-100 text-gray-700 border-gray-200",
98
98
  [L.NONE]: "bg-gray-50 text-gray-600 border-gray-200"
99
- }, c = n(() => `inline-flex items-center gap-1 font-semibold text-xs leading-none px-3 py-1.5 rounded-full border ${o.color && s[o.color] || ge}`);
99
+ }, c = n(() => `inline-flex items-center gap-1 font-semibold text-xs leading-none px-3 py-1.5 rounded-full border ${o.color && s[o.color] || ve}`);
100
100
  return (e, t) => r.value ? (_(), a("span", {
101
101
  key: 0,
102
102
  class: f(c.value)
103
103
  }, [b(e.$slots, "default")], 2)) : i("", !0);
104
104
  }
105
- }), _e = {
105
+ }), ye = {
106
106
  class: "flex px-5 py-3 text-gray-700 border border-gray-200 rounded-lg bg-gray-50 dark:bg-gray-800 dark:border-gray-700",
107
107
  "aria-label": "Breadcrumb"
108
- }, ve = { class: "inline-flex items-center space-x-1 md:space-x-3" }, ye = {
108
+ }, be = { class: "inline-flex items-center space-x-1 md:space-x-3" }, xe = {
109
109
  class: "inline-flex items-center",
110
110
  style: { "margin-left": "0" }
111
- }, be = /* @__PURE__ */ l({
111
+ }, Se = /* @__PURE__ */ l({
112
112
  __name: "BaseBreadcrumb",
113
113
  props: {
114
114
  items: {
@@ -133,11 +133,11 @@ var me = { class: "font-medium pl-1" }, he = /* @__PURE__ */ l({
133
133
  });
134
134
  return (t, n) => {
135
135
  let r = x("router-link");
136
- return _(), a("nav", _e, [o("ol", ve, [o("li", ye, [c(r, {
136
+ return _(), a("nav", ye, [o("ol", be, [o("li", xe, [c(r, {
137
137
  to: "/",
138
138
  class: "inline-flex items-center text-sm font-medium text-gray-700 hover:text-blue-600 dark:text-gray-400 dark:hover:text-white"
139
139
  }, {
140
- default: k(() => [c(w(le), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= s(" Home ", -1)]),
140
+ default: k(() => [c(w(de), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= s(" Home ", -1)]),
141
141
  _: 1
142
142
  })]), (_(!0), a(e, null, y(i.value, (e, t) => (_(), a("li", {
143
143
  key: t,
@@ -156,10 +156,10 @@ var me = { class: "font-medium pl-1" }, he = /* @__PURE__ */ l({
156
156
  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;
157
157
  }({}), B = /* @__PURE__ */ function(e) {
158
158
  return e.EXTRA_SMALL = "EXTRA_SMALL", e.SMALL = "SMALL", e.BASE = "BASE", e.LARGE = "LARGE", e.EXTRA_LARGE = "EXTRA_LARGE", e;
159
- }({}), V = v(!1), xe = !1, H = "mgv-theme";
160
- function Se(e) {
161
- if (!xe) {
162
- if (xe = !0, H = e, typeof window < "u") {
159
+ }({}), V = v(!1), Ce = !1, H = "mgv-theme";
160
+ function we(e) {
161
+ if (!Ce) {
162
+ if (Ce = !0, H = e, typeof window < "u") {
163
163
  let e = window.localStorage?.getItem(H);
164
164
  e ? V.value = e === "dark" : typeof window.matchMedia == "function" && (V.value = window.matchMedia("(prefers-color-scheme: dark)").matches);
165
165
  }
@@ -171,7 +171,7 @@ function Se(e) {
171
171
  }
172
172
  }
173
173
  function U(e) {
174
- Se(e?.storageKey ?? H);
174
+ we(e?.storageKey ?? H);
175
175
  function t() {
176
176
  V.value = !V.value;
177
177
  }
@@ -182,17 +182,17 @@ function U(e) {
182
182
  }
183
183
  //#endregion
184
184
  //#region src/components/BaseButton.vue?vue&type=script&setup=true&lang.ts
185
- var Ce = [
185
+ var Te = [
186
186
  "type",
187
187
  "disabled",
188
188
  "onClick"
189
- ], we = {
189
+ ], Ee = {
190
190
  key: 0,
191
191
  class: "inline-flex items-center"
192
- }, Te = { key: 1 }, Ee = { key: 2 }, De = ["type", "disabled"], Oe = {
192
+ }, De = { key: 1 }, Oe = { key: 2 }, ke = ["type", "disabled"], Ae = {
193
193
  key: 0,
194
194
  class: "inline-flex items-center"
195
- }, ke = { key: 1 }, Ae = { key: 2 }, je = /* @__PURE__ */ l({
195
+ }, je = { key: 1 }, Me = { key: 2 }, Ne = /* @__PURE__ */ l({
196
196
  __name: "BaseButton",
197
197
  props: {
198
198
  description: {
@@ -428,7 +428,7 @@ var Ce = [
428
428
  disabled: e.isDisable || e.isLoading,
429
429
  onClick: r
430
430
  }, [
431
- e.isLoading ? (_(), a("div", we, [...s[0] ||= [o("svg", {
431
+ e.isLoading ? (_(), a("div", Ee, [...s[0] ||= [o("svg", {
432
432
  "aria-hidden": "true",
433
433
  role: "status",
434
434
  class: "inline w-4 h-4 me-3 animate-spin",
@@ -442,10 +442,10 @@ var Ce = [
442
442
  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",
443
443
  fill: "currentColor"
444
444
  })], -1)]])) : i("", !0),
445
- e.iconLeft ? i("", !0) : (_(), a("span", Te, C(e.description), 1)),
445
+ e.iconLeft ? i("", !0) : (_(), a("span", De, C(e.description), 1)),
446
446
  b(t.$slots, "default"),
447
- e.iconLeft ? (_(), a("span", Ee, C(e.description), 1)) : i("", !0)
448
- ], 10, Ce)]),
447
+ e.iconLeft ? (_(), a("span", Oe, C(e.description), 1)) : i("", !0)
448
+ ], 10, Te)]),
449
449
  _: 3
450
450
  }, 8, ["to"])) : (_(), a("button", {
451
451
  key: 1,
@@ -453,7 +453,7 @@ var Ce = [
453
453
  class: f(l()),
454
454
  disabled: e.isDisable || e.isLoading
455
455
  }, [
456
- e.isLoading ? (_(), a("div", Oe, [...s[1] ||= [o("svg", {
456
+ e.isLoading ? (_(), a("div", Ae, [...s[1] ||= [o("svg", {
457
457
  "aria-hidden": "true",
458
458
  role: "status",
459
459
  class: "inline w-4 h-4 me-3 animate-spin",
@@ -467,24 +467,24 @@ var Ce = [
467
467
  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",
468
468
  fill: "currentColor"
469
469
  })], -1)]])) : i("", !0),
470
- e.iconLeft ? i("", !0) : (_(), a("span", ke, C(e.description), 1)),
470
+ e.iconLeft ? i("", !0) : (_(), a("span", je, C(e.description), 1)),
471
471
  b(t.$slots, "default"),
472
- e.iconLeft ? (_(), a("span", Ae, C(e.description), 1)) : i("", !0)
473
- ], 10, De));
472
+ e.iconLeft ? (_(), a("span", Me, C(e.description), 1)) : i("", !0)
473
+ ], 10, ke));
474
474
  };
475
475
  }
476
476
  }), W = /* @__PURE__ */ function(e) {
477
477
  return e.BASE = "BASE", e.BASE_SHORTER = "BASE_SHORTER", e.SQUARE = "SQUARE", e;
478
- }({}), Me = {
478
+ }({}), Pe = {
479
479
  key: 0,
480
480
  class: "h-px my-8 bg-gray-200 border-0 dark:bg-gray-700"
481
- }, Ne = {
481
+ }, Fe = {
482
482
  key: 1,
483
483
  class: "w-48 h-1 mx-auto my-4 bg-gray-100 border-0 rounded md:my-10 dark:bg-gray-700"
484
- }, Pe = {
484
+ }, Ie = {
485
485
  key: 2,
486
486
  class: "w-8 h-8 mx-auto my-8 bg-gray-200 border-0 rounded md:my-12 dark:bg-gray-700"
487
- }, Fe = /* @__PURE__ */ l({
487
+ }, Le = /* @__PURE__ */ l({
488
488
  __name: "BaseLine",
489
489
  props: { mode: {
490
490
  type: String,
@@ -493,14 +493,14 @@ var Ce = [
493
493
  } },
494
494
  setup(t) {
495
495
  return (n, r) => (_(), a(e, null, [
496
- t.mode === w(W).BASE ? (_(), a("hr", Me)) : i("", !0),
497
- t.mode === w(W).BASE_SHORTER ? (_(), a("hr", Ne)) : i("", !0),
498
- t.mode === w(W).SQUARE ? (_(), a("hr", Pe)) : i("", !0)
496
+ t.mode === w(W).BASE ? (_(), a("hr", Pe)) : i("", !0),
497
+ t.mode === w(W).BASE_SHORTER ? (_(), a("hr", Fe)) : i("", !0),
498
+ t.mode === w(W).SQUARE ? (_(), a("hr", Ie)) : i("", !0)
499
499
  ], 64));
500
500
  }
501
501
  }), G = /* @__PURE__ */ function(e) {
502
502
  return e.SMALL = "SMALL", e.MEDIUM = "MEDIUM", e.LARGE = "LARGE", e;
503
- }({}), Ie = G, Le = ["height", "width"], Re = /* @__PURE__ */ l({
503
+ }({}), Re = G, ze = ["height", "width"], Be = /* @__PURE__ */ l({
504
504
  __name: "BaseLogo",
505
505
  props: { size: {
506
506
  type: String,
@@ -680,17 +680,17 @@ var Ce = [
680
680
  d: "m281.7 183.8h3.6v18.5h-3.6z",
681
681
  fill: "url(#k)"
682
682
  }, null, -1)
683
- ]], 8, Le))]),
683
+ ]], 8, ze))]),
684
684
  _: 1
685
685
  });
686
686
  };
687
687
  }
688
688
  }), K = /* @__PURE__ */ function(e) {
689
689
  return e.DELETE = "DELETE", e.SUCCESS = "SUCCESS", e;
690
- }({}), ze = ["aria-labelledby"], Be = {
690
+ }({}), Ve = ["aria-labelledby"], He = {
691
691
  key: 0,
692
692
  class: "p-6 text-center"
693
- }, Ve = ["id"], He = { class: "flex justify-center" }, Ue = /* @__PURE__ */ l({
693
+ }, Ue = ["id"], We = { class: "flex justify-center" }, Ge = /* @__PURE__ */ l({
694
694
  __name: "BaseModal",
695
695
  props: {
696
696
  title: {
@@ -732,13 +732,13 @@ var Ce = [
732
732
  role: "dialog",
733
733
  "aria-modal": "true",
734
734
  "aria-labelledby": "modal-title-" + t.title
735
- }, [t.mode === w(K).DELETE ? (_(), a("div", Be, [
736
- c(w(ae), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
735
+ }, [t.mode === w(K).DELETE ? (_(), a("div", He, [
736
+ c(w(se), { class: "w-12 h-12 text-gray-400 mx-auto mb-4" }),
737
737
  o("h3", {
738
738
  id: "modal-title-" + t.title,
739
739
  class: "mb-5 text-lg font-normal text-gray-500 dark:text-gray-400"
740
- }, " Are you sure you want to delete this " + C(t.title) + "? ", 9, Ve),
741
- o("div", He, [c(s, {
740
+ }, " Are you sure you want to delete this " + C(t.title) + "? ", 9, Ue),
741
+ o("div", We, [c(s, {
742
742
  color: w(z).RED,
743
743
  onClick: r[1] ||= (e) => n.$emit("confirmModal"),
744
744
  description: "Yes, I'm sure"
@@ -747,14 +747,14 @@ var Ce = [
747
747
  onClick: r[2] ||= (e) => n.$emit("closeModal"),
748
748
  description: "No, cancel"
749
749
  }, null, 8, ["color"])])
750
- ])) : i("", !0)], 8, ze)], 64);
750
+ ])) : i("", !0)], 8, Ve)], 64);
751
751
  };
752
752
  }
753
753
  }), q = (e, t) => {
754
754
  let n = e.__vccOpts || e;
755
755
  for (let [e, r] of t) n[e] = r;
756
756
  return n;
757
- }, We = /* @__PURE__ */ q(Ue, [["__scopeId", "data-v-1db4f0ac"]]), Ge = /* @__PURE__ */ l({
757
+ }, Ke = /* @__PURE__ */ q(Ge, [["__scopeId", "data-v-1db4f0ac"]]), qe = /* @__PURE__ */ l({
758
758
  __name: "BaseRow",
759
759
  props: { bgColor: {
760
760
  type: String,
@@ -768,7 +768,7 @@ var Ce = [
768
768
  }
769
769
  return (e, t) => (_(), a("div", { class: f(n()) }, [b(e.$slots, "default")], 2));
770
770
  }
771
- }), Ke = /* @__PURE__ */ l({
771
+ }), Je = /* @__PURE__ */ l({
772
772
  __name: "BaseSpinner",
773
773
  props: {
774
774
  size: { default: "sm" },
@@ -800,13 +800,13 @@ var Ce = [
800
800
  return e.SUCCESS = "SUCCESS", e.WARNING = "WARNING", e.ERROR = "ERROR", e;
801
801
  }({}), Y = /* @__PURE__ */ function(e) {
802
802
  return e.TOP_LEFT = "TOP_LEFT", e.TOP_RIGHT = "TOP_RIGHT", e.BOTTOM_LEFT = "BOTTOM_LEFT", e.BOTTOM_RIGHT = "BOTTOM_RIGHT", e;
803
- }({}), qe = { 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" }, Je = { class: "ml-3 text-sm font-normal" }, Ye = {
803
+ }({}), Ye = { class: "flex items-center w-full max-w-md p-4 mb-4 text-gray-500 bg-white rounded-lg shadow dark:text-gray-400 dark:bg-gray-800" }, Xe = { class: "ml-3 text-sm font-normal" }, Ze = {
804
804
  key: 3,
805
805
  type: "button",
806
806
  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",
807
807
  "data-dismiss-target": "#toast-danger",
808
808
  "aria-label": "Close"
809
- }, Xe = /* @__PURE__ */ l({
809
+ }, Qe = /* @__PURE__ */ l({
810
810
  __name: "BaseToast",
811
811
  props: {
812
812
  mode: {
@@ -884,25 +884,25 @@ var Ce = [
884
884
  id: "toast-top-right",
885
885
  class: f(u()),
886
886
  role: "alert"
887
- }, [o("div", qe, [
887
+ }, [o("div", Ye, [
888
888
  e.mode == w(J).ERROR ? (_(), a("div", {
889
889
  key: 0,
890
890
  class: f(l())
891
- }, [c(w(ae), { class: "h-6 w-6 text-red-500" }), r[0] ||= o("span", { class: "sr-only" }, "Error icon", -1)], 2)) : e.mode == w(J).SUCCESS ? (_(), a("div", {
891
+ }, [c(w(se), { class: "h-6 w-6 text-red-500" }), r[0] ||= o("span", { class: "sr-only" }, "Error icon", -1)], 2)) : e.mode == w(J).SUCCESS ? (_(), a("div", {
892
892
  key: 1,
893
893
  class: f(l())
894
894
  }, [c(w(ne), { class: "h-6 w-6 text-green-500" }), r[1] ||= o("span", { class: "sr-only" }, "Check icon", -1)], 2)) : e.mode == w(J).WARNING ? (_(), a("div", {
895
895
  key: 2,
896
896
  class: f(l())
897
897
  }, [c(w(P), { class: "h-6 w-6 text-yellow-500" }), r[2] ||= o("span", { class: "sr-only" }, "Warning icon", -1)], 2)) : i("", !0),
898
- o("div", Je, C(e.description), 1),
899
- e.hasCloseIcon ? (_(), a("button", Ye, [r[3] ||= o("span", { class: "sr-only" }, "Close", -1), c(w(F), {
898
+ o("div", Xe, C(e.description), 1),
899
+ e.hasCloseIcon ? (_(), a("button", Ze, [r[3] ||= o("span", { class: "sr-only" }, "Close", -1), c(w(F), {
900
900
  class: "h-6 w-6 text-gray-500 cursor-pointer",
901
901
  onClick: s
902
902
  })])) : i("", !0)
903
903
  ])], 2)) : i("", !0);
904
904
  }
905
- }), Ze = { class: "w-13" }, Qe = /* @__PURE__ */ l({
905
+ }), $e = { class: "w-13" }, et = /* @__PURE__ */ l({
906
906
  __name: "ColoredSquares",
907
907
  props: { color: {
908
908
  type: String,
@@ -941,9 +941,9 @@ var Ce = [
941
941
  }
942
942
  return "font-bold bg-" + e + "-100 text-" + e + "-800 text-xs mr-2 px-2.5 py-0.5 rounded-full";
943
943
  }
944
- return (e, t) => (_(), a("div", Ze, [o("div", { class: f(["border border-gray-300 relative aspect-square rounded-lg bg-white shadow-sm overflow-hidden flex items-center justify-center text-center", i()]) }, [b(e.$slots, "default"), o("div", { class: f(["absolute bottom-0 left-0 h-1 w-full", r.value]) }, null, 2)], 2)]));
944
+ return (e, t) => (_(), a("div", $e, [o("div", { class: f(["border border-gray-300 relative aspect-square rounded-lg bg-white shadow-sm overflow-hidden flex items-center justify-center text-center", i()]) }, [b(e.$slots, "default"), o("div", { class: f(["absolute bottom-0 left-0 h-1 w-full", r.value]) }, null, 2)], 2)]));
945
945
  }
946
- }), $e = { class: "flex items-start justify-between" }, et = { class: "text-sm font-bold tracking-wide text-gray-800 dark:text-slate-200" }, tt = /* @__PURE__ */ l({
946
+ }), tt = { class: "flex items-start justify-between" }, nt = { class: "text-sm font-bold tracking-wide text-gray-800 dark:text-slate-200" }, rt = /* @__PURE__ */ l({
947
947
  __name: "EarningsCard",
948
948
  props: {
949
949
  title: { default: "TOTAL EARNINGS" },
@@ -982,8 +982,8 @@ var Ce = [
982
982
  return (t, n) => (_(), a("div", { class: f(["relative rounded-xl border-2 border-dashed bg-white p-6 dark:bg-slate-800", s.value.border]) }, [e.badge ? (_(), a("div", {
983
983
  key: 0,
984
984
  class: f(["absolute right-4 top-4 rounded-md px-3 py-1 text-xs font-bold tracking-wide", s.value.badge])
985
- }, C(e.badge), 3)) : i("", !0), o("div", $e, [o("div", null, [
986
- o("p", et, C(e.title), 1),
985
+ }, C(e.badge), 3)) : i("", !0), o("div", tt, [o("div", null, [
986
+ o("p", nt, C(e.title), 1),
987
987
  o("p", { class: f(["mt-1 text-4xl font-bold", s.value.amount]) }, C(c.value), 3),
988
988
  o("p", { class: f(["mt-1 text-sm font-medium", s.value.subtitle]) }, C(e.subtitle), 3)
989
989
  ]), o("div", { class: f(["mt-6 flex h-12 w-12 items-center justify-center rounded-xl", s.value.iconBox]) }, [(_(), a("svg", {
@@ -996,10 +996,10 @@ var Ce = [
996
996
  "stroke-linejoin": "round"
997
997
  }, [...n[0] ||= [o("polyline", { points: "22 7 13.5 15.5 8.5 10.5 2 17" }, null, -1), o("polyline", { points: "16 7 22 7 22 13" }, null, -1)]], 2))], 2)])], 2));
998
998
  }
999
- }), nt = {
999
+ }), it = {
1000
1000
  key: 0,
1001
1001
  class: "font-bold text-green-800"
1002
- }, rt = { key: 0 }, it = { key: 0 }, at = "font-bold", ot = /* @__PURE__ */ l({
1002
+ }, at = { key: 0 }, ot = { key: 0 }, st = "font-bold", ct = /* @__PURE__ */ l({
1003
1003
  __name: "EuroAmount",
1004
1004
  props: {
1005
1005
  amount: {
@@ -1019,15 +1019,15 @@ var Ce = [
1019
1019
  },
1020
1020
  setup(t) {
1021
1021
  let r = t, o = n(() => r.amount !== null && r.amount !== void 0), c = n(() => o.value && r.amount < 0), l = n(() => r.beforeAmount === null || r.beforeAmount === void 0 ? !1 : r.amount < r.beforeAmount), u = n(() => c.value || l.value), d = n(() => !c.value && !l.value && !(r.beforeAmount === null || r.beforeAmount === void 0));
1022
- return (n, r) => (_(), a(e, null, [o.value && d.value ? (_(), a("span", nt, [s(C(t.amount) + " ", 1), t.showCurrency ? (_(), a("span", rt, "€")) : i("", !0)])) : i("", !0), o.value && !d.value ? (_(), a("span", {
1022
+ return (n, r) => (_(), a(e, null, [o.value && d.value ? (_(), a("span", it, [s(C(t.amount) + " ", 1), t.showCurrency ? (_(), a("span", at, "€")) : i("", !0)])) : i("", !0), o.value && !d.value ? (_(), a("span", {
1023
1023
  key: 1,
1024
- class: f([at, u.value ? "text-red-800" : "text-gray-800"])
1025
- }, [s(C(t.amount) + " ", 1), t.showCurrency ? (_(), a("span", it, "€")) : i("", !0)], 2)) : i("", !0)], 64));
1024
+ class: f([st, u.value ? "text-red-800" : "text-gray-800"])
1025
+ }, [s(C(t.amount) + " ", 1), t.showCurrency ? (_(), a("span", ot, "€")) : i("", !0)], 2)) : i("", !0)], 64));
1026
1026
  }
1027
- }), st = ["onClick", "onKeydown"], ct = {
1027
+ }), lt = ["onClick", "onKeydown"], ut = {
1028
1028
  key: 1,
1029
1029
  style: { cursor: "not-allowed" }
1030
- }, lt = /* @__PURE__ */ q(/* @__PURE__ */ l({
1030
+ }, dt = /* @__PURE__ */ q(/* @__PURE__ */ l({
1031
1031
  __name: "Pagination",
1032
1032
  props: {
1033
1033
  totalItems: {
@@ -1070,15 +1070,15 @@ var Ce = [
1070
1070
  onClick: (t) => d(e),
1071
1071
  onKeydown: j((t) => d(e), ["enter"]),
1072
1072
  class: f({ active: e === s.value })
1073
- }, C(e), 43, st)), e === 0 ? (_(), a("span", ct, "...")) : i("", !0)]))), 128))])]));
1073
+ }, C(e), 43, lt)), e === 0 ? (_(), a("span", ut, "...")) : i("", !0)]))), 128))])]));
1074
1074
  }
1075
- }), [["__scopeId", "data-v-d7ebb6ac"]]), ut = { key: 0 }, dt = {
1075
+ }), [["__scopeId", "data-v-d7ebb6ac"]]), ft = { key: 0 }, pt = {
1076
1076
  key: 0,
1077
1077
  class: "flex items-center space-x-2"
1078
- }, ft = {
1078
+ }, mt = {
1079
1079
  key: 1,
1080
1080
  class: "flex items-center space-x-2"
1081
- }, pt = /* @__PURE__ */ l({
1081
+ }, ht = /* @__PURE__ */ l({
1082
1082
  __name: "TrendArrow",
1083
1083
  props: {
1084
1084
  number: {
@@ -1092,10 +1092,10 @@ var Ce = [
1092
1092
  },
1093
1093
  setup(e) {
1094
1094
  let t = e, r = n(() => t.number !== null && t.number !== void 0 && t.number < 0);
1095
- return (n, o) => e.number !== null && e.number !== void 0 ? (_(), a("div", ut, [r.value ? (_(), a("span", dt, [c(R, { color: w(L).RED }, {
1095
+ return (n, o) => e.number !== null && e.number !== void 0 ? (_(), a("div", ft, [r.value ? (_(), a("span", pt, [c(R, { color: w(L).RED }, {
1096
1096
  default: k(() => [s(C(e.number) + C(t.icon), 1)]),
1097
1097
  _: 1
1098
- }, 8, ["color"]), c(w(ee), { class: "h-5 w-5 text-red-500" })])) : (_(), a("span", ft, [c(R, { color: w(L).GREEN }, {
1098
+ }, 8, ["color"]), c(w(ee), { class: "h-5 w-5 text-red-500" })])) : (_(), a("span", mt, [c(R, { color: w(L).GREEN }, {
1099
1099
  default: k(() => [s(C(e.number) + C(t.icon), 1)]),
1100
1100
  _: 1
1101
1101
  }, 8, ["color"]), c(w(te), { class: "h-5 w-5 text-green-500" })]))])) : i("", !0);
@@ -1139,7 +1139,7 @@ function Z(e) {
1139
1139
  }
1140
1140
  //#endregion
1141
1141
  //#region src/components/BaseModalShell.vue?vue&type=script&setup=true&lang.ts
1142
- var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { class: "flex-1" }, _t = { class: "mt-4" }, vt = { class: "mt-6 flex gap-3 justify-end" }, Q = /* @__PURE__ */ l({
1142
+ var gt = { class: "flex items-start gap-4 min-w-0" }, _t = { class: "flex-1 min-w-0" }, vt = { class: "p-6 overflow-y-auto flex-1" }, yt = { class: "p-6" }, bt = { class: "flex items-start gap-4" }, xt = { class: "flex-1" }, St = { class: "mt-4" }, Ct = { class: "mt-6 flex gap-3 justify-end" }, Q = /* @__PURE__ */ l({
1143
1143
  __name: "BaseModalShell",
1144
1144
  props: {
1145
1145
  title: {},
@@ -1147,35 +1147,58 @@ var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { clas
1147
1147
  manualClose: {
1148
1148
  type: Boolean,
1149
1149
  default: !1
1150
- }
1150
+ },
1151
+ scrollable: {
1152
+ type: Boolean,
1153
+ default: !1
1154
+ },
1155
+ subtitle: { default: "" }
1151
1156
  },
1152
1157
  emits: ["cancel", "backdrop"],
1153
- setup(e, { emit: i }) {
1154
- let a = e, s = i, { isDark: c } = U(), l = X(), u = `modal-title-${Math.random().toString(36).slice(2, 9)}`, d = n(() => c.value ? "bg-gray-900 border border-gray-700" : "bg-white border border-gray-200");
1155
- function p() {
1156
- s("backdrop"), a.manualClose || s("cancel");
1158
+ setup(e, { emit: s }) {
1159
+ let c = e, l = s, { isDark: u } = U(), d = X(), p = `modal-title-${Math.random().toString(36).slice(2, 9)}`, m = n(() => u.value ? "bg-gray-900 border border-gray-700" : "bg-white border border-gray-200");
1160
+ function h() {
1161
+ l("backdrop"), c.manualClose || l("cancel");
1157
1162
  }
1158
1163
  return Z(() => {
1159
- a.manualClose || s("cancel");
1160
- }), (n, i) => (_(), r(t, { to: "body" }, [o("div", {
1164
+ c.manualClose || l("cancel");
1165
+ }), (n, s) => (_(), r(t, { to: "body" }, [o("div", {
1161
1166
  class: "fixed inset-0 z-50 flex items-center justify-center bg-black/50",
1162
1167
  role: "dialog",
1163
1168
  "aria-modal": "true",
1164
- "aria-labelledby": u,
1165
- onClick: p
1166
- }, [o("div", {
1167
- class: f(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, d.value]]),
1168
- onClick: i[0] ||= M(() => {}, ["stop"])
1169
- }, [o("div", mt, [
1170
- o("div", ht, [b(n.$slots, "icon"), o("div", gt, [o("h3", {
1171
- id: u,
1172
- class: f(["text-lg font-medium", w(l).primaryText])
1169
+ "aria-labelledby": p,
1170
+ onClick: h
1171
+ }, [e.scrollable ? (_(), a("div", {
1172
+ key: 0,
1173
+ class: f(["relative w-full mx-4 rounded-lg shadow-xl max-h-[90vh] flex flex-col", [e.maxWidthClass, m.value]]),
1174
+ onClick: s[0] ||= M(() => {}, ["stop"])
1175
+ }, [
1176
+ o("div", { class: f(["flex items-start justify-between gap-4 p-6 border-b shrink-0", w(d).border]) }, [o("div", gt, [b(n.$slots, "icon"), o("div", _t, [o("h3", {
1177
+ id: p,
1178
+ class: f(["text-lg font-medium", w(d).primaryText])
1179
+ }, C(e.title), 3), e.subtitle ? (_(), a("p", {
1180
+ key: 0,
1181
+ class: f(["text-sm mt-1 break-all", w(d).mutedText])
1182
+ }, C(e.subtitle), 3)) : i("", !0)])]), b(n.$slots, "header-actions")], 2),
1183
+ o("div", vt, [b(n.$slots, "default")]),
1184
+ n.$slots.footer ? (_(), a("div", {
1185
+ key: 0,
1186
+ class: f(["flex gap-3 justify-end p-6 border-t shrink-0", w(d).border])
1187
+ }, [b(n.$slots, "footer")], 2)) : i("", !0)
1188
+ ], 2)) : (_(), a("div", {
1189
+ key: 1,
1190
+ class: f(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, m.value]]),
1191
+ onClick: s[1] ||= M(() => {}, ["stop"])
1192
+ }, [o("div", yt, [
1193
+ o("div", bt, [b(n.$slots, "icon"), o("div", xt, [o("h3", {
1194
+ id: p,
1195
+ class: f(["text-lg font-medium", w(d).primaryText])
1173
1196
  }, C(e.title), 3)])]),
1174
- o("div", _t, [b(n.$slots, "default")]),
1175
- o("div", vt, [b(n.$slots, "footer")])
1176
- ])], 2)])]));
1197
+ o("div", St, [b(n.$slots, "default")]),
1198
+ o("div", Ct, [b(n.$slots, "footer")])
1199
+ ])], 2))])]));
1177
1200
  }
1178
- }), yt = ["aria-expanded"], bt = { class: "flex items-center gap-3" }, xt = /* @__PURE__ */ l({
1201
+ }), wt = ["aria-expanded"], Tt = { class: "flex items-center gap-3" }, Et = /* @__PURE__ */ l({
1179
1202
  __name: "BaseCollapsibleSection",
1180
1203
  props: {
1181
1204
  title: {},
@@ -1191,7 +1214,7 @@ var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { clas
1191
1214
  class: f(["w-full flex items-center justify-between p-4 text-left transition-colors", d.value]),
1192
1215
  "aria-expanded": !e.collapsed,
1193
1216
  onClick: n[0] ||= (e) => s("toggle")
1194
- }, [o("div", bt, [o("h2", { class: f(["text-base font-semibold", u.value]) }, C(e.title), 3), e.badge ? (_(), a("span", {
1217
+ }, [o("div", Tt, [o("h2", { class: f(["text-base font-semibold", u.value]) }, C(e.title), 3), e.badge ? (_(), a("span", {
1195
1218
  key: 0,
1196
1219
  class: f(["text-xs px-2 py-0.5 rounded-full", p.value])
1197
1220
  }, C(e.badge), 3)) : i("", !0)]), (_(), a("svg", {
@@ -1205,15 +1228,15 @@ var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { clas
1205
1228
  "stroke-linecap": "round",
1206
1229
  "stroke-linejoin": "round",
1207
1230
  d: "M19 9l-7 7-7-7"
1208
- }, null, -1)]], 2))], 10, yt), A(o("div", { class: f(["p-6 border-t", [w(l).border, m.value]]) }, [b(t.$slots, "default")], 2), [[D, !e.collapsed]])], 2));
1231
+ }, null, -1)]], 2))], 10, wt), A(o("div", { class: f(["p-6 border-t", [w(l).border, m.value]]) }, [b(t.$slots, "default")], 2), [[D, !e.collapsed]])], 2));
1209
1232
  }
1210
- }), St = ["disabled"], Ct = ["disabled"], wt = {
1233
+ }), Dt = ["disabled"], Ot = ["disabled"], kt = {
1211
1234
  key: 0,
1212
1235
  class: "w-4 h-4 animate-spin",
1213
1236
  fill: "none",
1214
1237
  viewBox: "0 0 24 24",
1215
1238
  "aria-hidden": "true"
1216
- }, Tt = /* @__PURE__ */ l({
1239
+ }, At = /* @__PURE__ */ l({
1217
1240
  __name: "BaseConfirmModal",
1218
1241
  props: {
1219
1242
  title: {},
@@ -1250,12 +1273,12 @@ var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { clas
1250
1273
  disabled: e.submitting,
1251
1274
  class: f(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150", [w(d).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1252
1275
  onClick: m
1253
- }, C(e.cancelText), 11, St), o("button", {
1276
+ }, C(e.cancelText), 11, Dt), o("button", {
1254
1277
  type: "button",
1255
1278
  disabled: e.submitting,
1256
1279
  class: f(["inline-flex items-center justify-center gap-2 px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150", [e.variant === "danger" ? e.submitting ? "bg-red-400 cursor-not-allowed" : "bg-red-600 hover:bg-red-700 cursor-pointer" : e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1257
1280
  onClick: p
1258
- }, [e.submitting ? (_(), a("svg", wt, [...n[0] ||= [o("circle", {
1281
+ }, [e.submitting ? (_(), a("svg", kt, [...n[0] ||= [o("circle", {
1259
1282
  class: "opacity-25",
1260
1283
  cx: "12",
1261
1284
  cy: "12",
@@ -1266,12 +1289,12 @@ var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { clas
1266
1289
  class: "opacity-75",
1267
1290
  fill: "currentColor",
1268
1291
  d: "M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"
1269
- }, null, -1)]])) : i("", !0), s(" " + C(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Ct)]),
1292
+ }, null, -1)]])) : i("", !0), s(" " + C(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Ot)]),
1270
1293
  default: k(() => [o("p", { class: f(["text-sm", w(u) ? "text-gray-300" : "text-gray-600"]) }, C(e.message), 3), b(t.$slots, "default")]),
1271
1294
  _: 3
1272
1295
  }, 8, ["title", "manual-close"]));
1273
1296
  }
1274
- }), Et = { class: "mt-4" }, Dt = ["placeholder"], Ot = ["disabled"], kt = /* @__PURE__ */ l({
1297
+ }), jt = { class: "mt-4" }, Mt = ["placeholder"], Nt = ["disabled"], Pt = /* @__PURE__ */ l({
1275
1298
  __name: "BaseTextInputModal",
1276
1299
  props: {
1277
1300
  title: {},
@@ -1307,7 +1330,7 @@ var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { clas
1307
1330
  "manual-close": "",
1308
1331
  onBackdrop: g
1309
1332
  }, {
1310
- icon: k(() => [b(t.$slots, "icon", {}, () => [o("div", { class: f(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", w(a) ? "bg-emerald-900/30" : "bg-emerald-50"]) }, [c(w(ie), {
1333
+ icon: k(() => [b(t.$slots, "icon", {}, () => [o("div", { class: f(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", w(a) ? "bg-emerald-900/30" : "bg-emerald-50"]) }, [c(w(oe), {
1311
1334
  class: "h-6 w-6 text-emerald-600",
1312
1335
  "aria-hidden": "true"
1313
1336
  })], 2)])]),
@@ -1320,8 +1343,8 @@ var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { clas
1320
1343
  disabled: !l.value.trim() || e.submitting,
1321
1344
  class: f(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150", [!l.value.trim() || e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1322
1345
  onClick: p
1323
- }, C(e.submitting ? e.submittingText : e.confirmText), 11, Ot)]),
1324
- default: k(() => [o("p", { class: f(["text-sm", w(a) ? "text-gray-300" : "text-gray-600"]) }, C(e.message), 3), o("div", Et, [o("label", { class: f(["block text-sm font-medium mb-1", w(s).label]) }, C(e.inputLabel), 3), A(o("input", {
1346
+ }, C(e.submitting ? e.submittingText : e.confirmText), 11, Nt)]),
1347
+ default: k(() => [o("p", { class: f(["text-sm", w(a) ? "text-gray-300" : "text-gray-600"]) }, C(e.message), 3), o("div", jt, [o("label", { class: f(["block text-sm font-medium mb-1", w(s).label]) }, C(e.inputLabel), 3), A(o("input", {
1325
1348
  ref_key: "nameInput",
1326
1349
  ref: u,
1327
1350
  "onUpdate:modelValue": n[0] ||= (e) => l.value = e,
@@ -1329,11 +1352,11 @@ var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { clas
1329
1352
  placeholder: e.placeholder,
1330
1353
  class: f(["w-full px-3 py-2 rounded-md border text-sm transition-colors", w(a) ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:outline-none focus:border-emerald-500" : "bg-white border-gray-300 text-gray-900 placeholder-gray-400 focus:outline-none focus:border-emerald-500"]),
1331
1354
  onKeyup: j(p, ["enter"])
1332
- }, null, 42, Dt), [[E, l.value]])])]),
1355
+ }, null, 42, Mt), [[E, l.value]])])]),
1333
1356
  _: 3
1334
1357
  }, 8, ["title"]));
1335
1358
  }
1336
- }), At = { class: "flex items-center justify-center min-h-[60vh]" }, jt = { class: "text-center px-6" }, Mt = /* @__PURE__ */ l({
1359
+ }), Ft = { class: "flex items-center justify-center min-h-[60vh]" }, It = { class: "text-center px-6" }, Lt = /* @__PURE__ */ l({
1337
1360
  __name: "BaseNotFoundPage",
1338
1361
  props: {
1339
1362
  code: { default: "404" },
@@ -1342,11 +1365,11 @@ var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { clas
1342
1365
  homeLabel: { default: "Go home" }
1343
1366
  },
1344
1367
  setup(e) {
1345
- let t = e, n = de(), { isDark: r } = U(), i = X();
1368
+ let t = e, n = pe(), { isDark: r } = U(), i = X();
1346
1369
  function s() {
1347
1370
  n.push({ name: t.homeRouteName });
1348
1371
  }
1349
- return (t, n) => (_(), a("div", At, [o("div", jt, [
1372
+ return (t, n) => (_(), a("div", Ft, [o("div", It, [
1350
1373
  c(w(P), { class: f(["w-16 h-16 mx-auto mb-4", w(i).illustration]) }, null, 8, ["class"]),
1351
1374
  o("h1", { class: f(["text-4xl font-bold mb-2", w(r) ? "text-gray-200" : "text-gray-800"]) }, C(e.code), 3),
1352
1375
  o("p", { class: f(["text-lg mb-6", w(i).dimTextAlt]) }, C(e.message), 3),
@@ -1357,7 +1380,7 @@ var mt = { class: "p-6" }, ht = { class: "flex items-start gap-4" }, gt = { clas
1357
1380
  ])]));
1358
1381
  }
1359
1382
  }), $ = v(!1);
1360
- function Nt() {
1383
+ function Rt() {
1361
1384
  function e() {
1362
1385
  $.value = !0;
1363
1386
  }
@@ -1376,11 +1399,11 @@ function Nt() {
1376
1399
  }
1377
1400
  //#endregion
1378
1401
  //#region src/components/BaseSidebar.vue?vue&type=script&setup=true&lang.ts
1379
- var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }, It = { class: "px-5 pt-5 pb-4 flex items-center justify-center relative" }, Lt = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, Rt = { class: "px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500" }, zt = { class: "space-y-0.5" }, Bt = ["aria-current", "onClick"], Vt = [
1402
+ var zt = ["aria-label", "aria-expanded"], Bt = { class: "flex flex-col h-full" }, Vt = { class: "px-5 pt-5 pb-4 flex items-center justify-center relative" }, Ht = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, Ut = { class: "px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500" }, Wt = { class: "space-y-0.5" }, Gt = ["aria-current", "onClick"], Kt = [
1380
1403
  "title",
1381
1404
  "aria-label",
1382
1405
  "aria-pressed"
1383
- ], Ht = /* @__PURE__ */ q(/* @__PURE__ */ l({
1406
+ ], qt = /* @__PURE__ */ q(/* @__PURE__ */ l({
1384
1407
  __name: "BaseSidebar",
1385
1408
  props: {
1386
1409
  sections: {},
@@ -1393,7 +1416,7 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1393
1416
  }
1394
1417
  },
1395
1418
  setup(t) {
1396
- let n = t, l = de(), u = ue(), { isDark: p, toggleTheme: h } = U(), { mobileOpen: x, close: T, toggle: E } = Nt(), D = v(null), k = null;
1419
+ let n = t, l = pe(), u = fe(), { isDark: p, toggleTheme: h } = U(), { mobileOpen: x, close: T, toggle: E } = Rt(), D = v(null), k = null;
1397
1420
  O(x, async (e) => {
1398
1421
  e ? (k = document.activeElement instanceof HTMLElement ? document.activeElement : null, await d(), D.value?.focus()) : (k?.focus(), k = null);
1399
1422
  }), m(() => {}), g(() => {});
@@ -1426,7 +1449,7 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1426
1449
  key: 0,
1427
1450
  class: "w-6 h-6",
1428
1451
  "aria-hidden": "true"
1429
- }))], 10, Pt)], 2),
1452
+ }))], 10, zt)], 2),
1430
1453
  w(x) ? (_(), a("div", {
1431
1454
  key: 0,
1432
1455
  class: "mobile-overlay fixed inset-0 z-40 bg-black/50",
@@ -1437,8 +1460,8 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1437
1460
  role: "navigation",
1438
1461
  "aria-label": "Main navigation",
1439
1462
  class: f(["fixed top-0 left-0 h-screen w-60 flex flex-col border-r transition-transform duration-300 lg:pointer-events-auto", [w(p) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200", w(x) ? "translate-x-0 z-50" : "-translate-x-full max-lg:pointer-events-none lg:translate-x-0 z-50"]])
1440
- }, [o("div", Ft, [
1441
- o("div", It, [o("button", {
1463
+ }, [o("div", Bt, [
1464
+ o("div", Vt, [o("button", {
1442
1465
  type: "button",
1443
1466
  onClick: A,
1444
1467
  class: "cursor-pointer",
@@ -1454,12 +1477,12 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1454
1477
  class: "w-5 h-5",
1455
1478
  "aria-hidden": "true"
1456
1479
  })], 2)]),
1457
- o("nav", Lt, [(_(!0), a(e, null, y(t.sections, (t) => (_(), a("div", { key: t.title }, [o("p", Rt, C(t.title), 1), o("ul", zt, [(_(!0), a(e, null, y(t.items, (e) => (_(), a("li", { key: e.name }, [o("button", {
1480
+ o("nav", Ht, [(_(!0), a(e, null, y(t.sections, (t) => (_(), a("div", { key: t.title }, [o("p", Ut, C(t.title), 1), o("ul", Wt, [(_(!0), a(e, null, y(t.items, (e) => (_(), a("li", { key: e.name }, [o("button", {
1458
1481
  type: "button",
1459
1482
  "aria-current": j(e.name) ? "page" : void 0,
1460
1483
  onClick: (t) => M(e.name),
1461
1484
  class: f(["flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-colors w-full text-left cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", j(e.name) ? w(p) ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-50 text-emerald-700" : w(p) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100"])
1462
- }, [(_(), r(S(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), s(" " + C(e.label), 1)], 10, Bt)]))), 128))])]))), 128))]),
1485
+ }, [(_(), r(S(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), s(" " + C(e.label), 1)], 10, Gt)]))), 128))])]))), 128))]),
1463
1486
  o("div", { class: f(["px-4 py-4 border-t transition-colors space-y-3", w(p) ? "border-gray-800" : "border-gray-200"]) }, [
1464
1487
  t.showThemeToggle ? (_(), a("button", {
1465
1488
  key: 0,
@@ -1469,7 +1492,7 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1469
1492
  "aria-label": w(p) ? "Switch to light mode" : "Switch to dark mode",
1470
1493
  "aria-pressed": w(p),
1471
1494
  class: f(["flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", w(p) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100"])
1472
- }, [s(C(w(p) ? "Switch to light" : "Switch to dark") + " ", 1), o("span", { class: f(["ml-auto relative w-9 h-5 rounded-full transition-colors", w(p) ? "bg-emerald-600" : "bg-gray-300"]) }, [o("span", { class: f(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", w(p) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)], 10, Vt)) : i("", !0),
1495
+ }, [s(C(w(p) ? "Switch to light" : "Switch to dark") + " ", 1), o("span", { class: f(["ml-auto relative w-9 h-5 rounded-full transition-colors", w(p) ? "bg-emerald-600" : "bg-gray-300"]) }, [o("span", { class: f(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", w(p) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)], 10, Kt)) : i("", !0),
1473
1496
  b(n.$slots, "status", {}, void 0, !0),
1474
1497
  b(n.$slots, "footer", {}, () => [t.appName || t.version ? (_(), a("div", {
1475
1498
  key: 0,
@@ -1483,26 +1506,26 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1483
1506
  ])], 2)
1484
1507
  ]));
1485
1508
  }
1486
- }), [["__scopeId", "data-v-e27f267e"]]), Ut = {
1509
+ }), [["__scopeId", "data-v-e27f267e"]]), Jt = {
1487
1510
  key: 1,
1488
1511
  class: "mt-4 flex justify-center py-6"
1489
- }, Wt = {
1512
+ }, Yt = {
1490
1513
  key: 2,
1491
1514
  class: "mt-4 text-sm text-red-500",
1492
1515
  role: "alert"
1493
- }, Gt = {
1516
+ }, Xt = {
1494
1517
  key: 3,
1495
1518
  class: "mt-4"
1496
- }, Kt = { class: "relative" }, qt = ["placeholder"], Jt = {
1519
+ }, Zt = { class: "relative" }, Qt = ["placeholder"], $t = {
1497
1520
  key: 4,
1498
1521
  class: "mt-3 max-h-64 overflow-y-auto"
1499
- }, Yt = ["onClick"], Xt = { class: "flex-1 min-w-0" }, Zt = {
1522
+ }, en = ["onClick"], tn = { class: "flex-1 min-w-0" }, nn = {
1500
1523
  key: 0,
1501
1524
  class: "text-center py-6"
1502
- }, Qt = {
1525
+ }, rn = {
1503
1526
  key: 1,
1504
1527
  class: "text-center py-6"
1505
- }, $t = ["disabled"], en = ["disabled"], tn = /* @__PURE__ */ l({
1528
+ }, an = ["disabled"], on = ["disabled"], sn = /* @__PURE__ */ l({
1506
1529
  __name: "BaseEntityPickerModal",
1507
1530
  props: {
1508
1531
  title: {},
@@ -1644,7 +1667,7 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1644
1667
  "manual-close": t.submitting,
1645
1668
  onCancel: re
1646
1669
  }, {
1647
- icon: k(() => [b(n.$slots, "icon", {}, () => [o("div", { class: f(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", N.value.iconBg]) }, [c(w(oe), {
1670
+ icon: k(() => [b(n.$slots, "icon", {}, () => [o("div", { class: f(["flex-shrink-0 flex h-12 w-12 items-center justify-center rounded-full", N.value.iconBg]) }, [c(w(ce), {
1648
1671
  class: f(["h-6 w-6", N.value.iconText]),
1649
1672
  "aria-hidden": "true"
1650
1673
  }, null, 8, ["class"])], 2)])]),
@@ -1653,19 +1676,19 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1653
1676
  disabled: t.submitting,
1654
1677
  class: f(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed", w(h).ghostButton]),
1655
1678
  onClick: re
1656
- }, C(t.cancelText), 11, $t), o("button", {
1679
+ }, C(t.cancelText), 11, an), o("button", {
1657
1680
  type: "button",
1658
1681
  disabled: !T.value || t.submitting,
1659
1682
  class: f(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150", !T.value || t.submitting ? N.value.confirmDisabled : N.value.confirmActive]),
1660
1683
  onClick: ne
1661
- }, C(t.submitting ? t.submittingText : t.confirmText), 11, en)]),
1684
+ }, C(t.submitting ? t.submittingText : t.confirmText), 11, on)]),
1662
1685
  default: k(() => [
1663
1686
  t.message ? (_(), a("p", {
1664
1687
  key: 0,
1665
1688
  class: f(["text-sm", w(p) ? "text-gray-300" : "text-gray-600"])
1666
1689
  }, C(t.message), 3)) : i("", !0),
1667
- x.value ? (_(), a("div", Ut, [c(Ke)])) : S.value ? (_(), a("div", Wt, C(S.value), 1)) : i("", !0),
1668
- !x.value && !S.value && j.value.length > 0 ? (_(), a("div", Gt, [o("div", Kt, [c(w(ce), {
1690
+ x.value ? (_(), a("div", Jt, [c(Je, { color: "emerald" })])) : S.value ? (_(), a("div", Yt, C(S.value), 1)) : i("", !0),
1691
+ !x.value && !S.value && j.value.length > 0 ? (_(), a("div", Xt, [o("div", Zt, [c(w(ue), {
1669
1692
  class: f(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", w(h).dimText]),
1670
1693
  "aria-hidden": "true"
1671
1694
  }, null, 8, ["class"]), A(o("input", {
@@ -1675,14 +1698,14 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1675
1698
  type: "text",
1676
1699
  placeholder: t.searchPlaceholder,
1677
1700
  class: f(["w-full pl-9 pr-3 py-2 text-sm rounded-md border outline-none transition-colors", [w(p) ? "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500" : "bg-white border-gray-300 text-gray-700 placeholder-gray-400", N.value.inputFocus]])
1678
- }, null, 10, qt), [[E, D.value]])])])) : i("", !0),
1679
- !x.value && !S.value ? (_(), a("div", Jt, [(_(!0), a(e, null, y(M.value, (e) => (_(), a("div", {
1701
+ }, null, 10, Qt), [[E, D.value]])])])) : i("", !0),
1702
+ !x.value && !S.value ? (_(), a("div", $t, [(_(!0), a(e, null, y(M.value, (e) => (_(), a("div", {
1680
1703
  key: e.id,
1681
1704
  class: f(["flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-colors", [T.value === e.id ? N.value.selectedRow : w(p) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1682
1705
  onClick: (t) => T.value = e.id
1683
1706
  }, [
1684
- c(w(oe), { class: f(["w-5 h-5 flex-shrink-0", w(h).dimText]) }, null, 8, ["class"]),
1685
- o("div", Xt, [o("p", { class: f(["text-sm font-medium truncate", w(h).bodyText]) }, C(e.label), 3)]),
1707
+ c(w(ce), { class: f(["w-5 h-5 flex-shrink-0", w(h).dimText]) }, null, 8, ["class"]),
1708
+ o("div", tn, [o("p", { class: f(["text-sm font-medium truncate", w(h).bodyText]) }, C(e.label), 3)]),
1686
1709
  T.value === e.id ? (_(), a("div", {
1687
1710
  key: 0,
1688
1711
  class: f(["w-5 h-5 rounded-full flex items-center justify-center", N.value.checkBg])
@@ -1698,15 +1721,15 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1698
1721
  "stroke-linejoin": "round",
1699
1722
  d: "M5 13l4 4L19 7"
1700
1723
  })], -1)]], 2)) : i("", !0)
1701
- ], 10, Yt))), 128)), j.value.length === 0 ? (_(), a("div", Zt, [o("p", { class: f(["text-sm", w(h).dimText]) }, C(t.emptyMessage), 3)])) : M.value.length === 0 ? (_(), a("div", Qt, [o("p", { class: f(["text-sm", w(h).dimText]) }, C(t.noMatchMessage), 3)])) : i("", !0)])) : i("", !0)
1724
+ ], 10, en))), 128)), j.value.length === 0 ? (_(), a("div", nn, [o("p", { class: f(["text-sm", w(h).dimText]) }, C(t.emptyMessage), 3)])) : M.value.length === 0 ? (_(), a("div", rn, [o("p", { class: f(["text-sm", w(h).dimText]) }, C(t.noMatchMessage), 3)])) : i("", !0)])) : i("", !0)
1702
1725
  ]),
1703
1726
  _: 3
1704
1727
  }, 8, ["title", "manual-close"]));
1705
1728
  }
1706
- }), nn = {
1729
+ }), cn = {
1707
1730
  href: "#main-content",
1708
1731
  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"
1709
- }, rn = ["inert"], an = /* @__PURE__ */ l({
1732
+ }, ln = ["inert"], un = /* @__PURE__ */ l({
1710
1733
  __name: "BaseAppLayout",
1711
1734
  props: {
1712
1735
  showSidebar: {
@@ -1716,19 +1739,19 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1716
1739
  skipLinkLabel: { default: "Skip to main content" }
1717
1740
  },
1718
1741
  setup(e) {
1719
- let t = e, { isDark: r } = U(), { mobileOpen: s } = Nt(), c = n(() => t.showSidebar);
1742
+ let t = e, { isDark: r } = U(), { mobileOpen: s } = Rt(), c = n(() => t.showSidebar);
1720
1743
  return (t, n) => (_(), a("div", { class: f(["min-h-screen transition-colors duration-300", w(r) ? "bg-gray-950 text-gray-100" : "bg-gray-50 text-gray-800"]) }, [
1721
- o("a", nn, C(e.skipLinkLabel), 1),
1744
+ o("a", cn, C(e.skipLinkLabel), 1),
1722
1745
  c.value ? b(t.$slots, "sidebar", { key: 0 }) : i("", !0),
1723
1746
  o("main", {
1724
1747
  id: "main-content",
1725
1748
  tabindex: "-1",
1726
1749
  inert: c.value && w(s) ? !0 : void 0,
1727
1750
  class: f(c.value ? "pt-14 lg:pt-0 lg:ml-60" : "")
1728
- }, [b(t.$slots, "default")], 10, rn)
1751
+ }, [b(t.$slots, "default")], 10, ln)
1729
1752
  ], 2));
1730
1753
  }
1731
- }), on = { class: "flex items-center justify-between mb-8" }, sn = { class: "flex items-center gap-3" }, cn = { class: "flex items-center gap-2" }, ln = /* @__PURE__ */ l({
1754
+ }), dn = { class: "flex items-center justify-between mb-8" }, fn = { class: "flex items-center gap-3" }, pn = { class: "flex items-center gap-2" }, mn = /* @__PURE__ */ l({
1732
1755
  __name: "BasePageHeader",
1733
1756
  props: {
1734
1757
  title: {},
@@ -1778,16 +1801,16 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1778
1801
  }[t.iconColor];
1779
1802
  return r.value ? e.dark : e.light;
1780
1803
  });
1781
- return (t, n) => (_(), a("div", { class: f(["mx-auto px-4 sm:px-6", e.maxWidthClass]) }, [o("div", on, [o("div", sn, [o("div", { class: f(["w-10 h-10 rounded-lg flex items-center justify-center", c.value]) }, [b(t.$slots, "icon", { iconClass: l.value })], 2), o("div", null, [o("h1", { class: f(["text-2xl font-bold", w(s).primaryTextSoft]) }, C(e.title), 3), e.subtitle ? (_(), a("p", {
1804
+ return (t, n) => (_(), a("div", { class: f(["mx-auto px-4 sm:px-6", e.maxWidthClass]) }, [o("div", dn, [o("div", fn, [o("div", { class: f(["w-10 h-10 rounded-lg flex items-center justify-center", c.value]) }, [b(t.$slots, "icon", { iconClass: l.value })], 2), o("div", null, [o("h1", { class: f(["text-2xl font-bold", w(s).primaryTextSoft]) }, C(e.title), 3), e.subtitle ? (_(), a("p", {
1782
1805
  key: 0,
1783
1806
  class: f(["text-sm", w(s).dimTextAlt])
1784
- }, C(e.subtitle), 3)) : i("", !0)])]), o("div", cn, [b(t.$slots, "actions")])])], 2));
1807
+ }, C(e.subtitle), 3)) : i("", !0)])]), o("div", pn, [b(t.$slots, "actions")])])], 2));
1785
1808
  }
1786
- }), un = [
1809
+ }), hn = [
1787
1810
  "type",
1788
1811
  "disabled",
1789
1812
  "title"
1790
- ], dn = { key: 0 }, fn = /* @__PURE__ */ l({
1813
+ ], gn = { key: 0 }, _n = /* @__PURE__ */ l({
1791
1814
  __name: "BaseToolbarButton",
1792
1815
  props: {
1793
1816
  label: { default: "" },
@@ -1820,14 +1843,14 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1820
1843
  title: e.title,
1821
1844
  class: f(["inline-flex shrink-0 items-center gap-2 px-3 py-2 rounded-lg text-sm font-medium border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap", o.value]),
1822
1845
  onClick: n[0] ||= (e) => t.$emit("click", e)
1823
- }, [b(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (_(), a("span", dn, C(e.label), 1)) : i("", !0)], 10, un));
1846
+ }, [b(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (_(), a("span", gn, C(e.label), 1)) : i("", !0)], 10, hn));
1824
1847
  }
1825
- }), pn = [
1848
+ }), vn = [
1826
1849
  "type",
1827
1850
  "disabled",
1828
1851
  "title",
1829
1852
  "aria-label"
1830
- ], mn = { key: 0 }, hn = /* @__PURE__ */ l({
1853
+ ], yn = { key: 0 }, bn = /* @__PURE__ */ l({
1831
1854
  __name: "BaseActionButton",
1832
1855
  props: {
1833
1856
  label: { default: "" },
@@ -1926,12 +1949,63 @@ var Pt = ["aria-label", "aria-expanded"], Ft = { class: "flex flex-col h-full" }
1926
1949
  "aria-label": e.ariaLabel,
1927
1950
  class: f(["inline-flex items-center justify-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors", [e.fullWidth ? "flex-1" : "", c.value]]),
1928
1951
  onClick: n[0] ||= (e) => t.$emit("click", e)
1929
- }, [b(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (_(), a("span", mn, C(e.label), 1)) : i("", !0)], 10, pn));
1952
+ }, [b(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (_(), a("span", yn, C(e.label), 1)) : i("", !0)], 10, vn));
1953
+ }
1954
+ }), xn = ["title", "aria-label"], Sn = /* @__PURE__ */ l({
1955
+ __name: "BaseCopyButton",
1956
+ props: {
1957
+ text: {},
1958
+ label: { default: "" },
1959
+ variant: { default: "ghost" },
1960
+ resetMs: { default: 1500 },
1961
+ iconClass: { default: "w-4 h-4" }
1962
+ },
1963
+ emits: ["copied", "error"],
1964
+ setup(e, { emit: t }) {
1965
+ let i = e, o = t, { isDark: s } = U(), c = v(!1), l = null, u = n(() => c.value ? "Copied!" : i.label ? `Copy ${i.label}` : "Copy"), d = n(() => i.label ? `Copy ${i.label}` : "Copy"), p = n(() => i.variant === "bordered" ? `inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-colors cursor-pointer shrink-0 ${c.value ? s.value ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-emerald-300 bg-emerald-50 text-emerald-600" : s.value ? "border-gray-600 text-gray-400 hover:text-gray-200 hover:bg-gray-800" : "border-gray-300 text-gray-400 hover:text-gray-600 hover:bg-gray-50"}` : `p-1 rounded transition-colors cursor-pointer ${s.value ? "text-gray-400 hover:text-emerald-300 hover:bg-emerald-500/10" : "text-gray-500 hover:text-emerald-600 hover:bg-emerald-50"}`);
1966
+ async function m(e) {
1967
+ try {
1968
+ if (navigator.clipboard?.writeText) {
1969
+ await navigator.clipboard.writeText(e);
1970
+ return;
1971
+ }
1972
+ } catch {}
1973
+ let t = document.createElement("textarea");
1974
+ t.value = e, t.style.position = "fixed", t.style.opacity = "0", document.body.appendChild(t), t.select();
1975
+ let n = document.execCommand("copy");
1976
+ if (document.body.removeChild(t), !n) throw Error("Copy command was rejected");
1977
+ }
1978
+ async function h() {
1979
+ try {
1980
+ await m(i.text), c.value = !0, l && clearTimeout(l), l = setTimeout(() => {
1981
+ c.value = !1;
1982
+ }, i.resetMs), o("copied");
1983
+ } catch (e) {
1984
+ o("error", e);
1985
+ }
1986
+ }
1987
+ return g(() => {
1988
+ l && clearTimeout(l);
1989
+ }), (t, n) => (_(), a("button", {
1990
+ type: "button",
1991
+ title: u.value,
1992
+ "aria-label": d.value,
1993
+ class: f(p.value),
1994
+ onClick: h
1995
+ }, [c.value ? (_(), r(w(ie), {
1996
+ key: 0,
1997
+ class: f(e.iconClass),
1998
+ "aria-hidden": "true"
1999
+ }, null, 8, ["class"])) : (_(), r(w(ae), {
2000
+ key: 1,
2001
+ class: f(e.iconClass),
2002
+ "aria-hidden": "true"
2003
+ }, null, 8, ["class"]))], 10, xn));
1930
2004
  }
1931
2005
  });
1932
2006
  //#endregion
1933
2007
  //#region src/composables/useDebounce.ts
1934
- function gn(e, t = 300) {
2008
+ function Cn(e, t = 300) {
1935
2009
  let n = v(e.value), r = null;
1936
2010
  return O(e, (e) => {
1937
2011
  r && clearTimeout(r), r = setTimeout(() => {
@@ -1943,7 +2017,7 @@ function gn(e, t = 300) {
1943
2017
  }
1944
2018
  //#endregion
1945
2019
  //#region src/composables/useToast.ts
1946
- function _n(e = 3e3) {
2020
+ function wn(e = 3e3) {
1947
2021
  let t = v(!1), n = v(""), r = v(J.SUCCESS), i = null;
1948
2022
  function a() {
1949
2023
  i &&= (clearTimeout(i), null);
@@ -1964,16 +2038,16 @@ function _n(e = 3e3) {
1964
2038
  }
1965
2039
  //#endregion
1966
2040
  //#region src/enums/BaseBadgeEnum.ts
1967
- var vn = /* @__PURE__ */ function(e) {
2041
+ var Tn = /* @__PURE__ */ function(e) {
1968
2042
  return e.WIN = "WIN", e.LOSE = "LOSE", e;
1969
- }({}), yn = {
2043
+ }({}), En = {
1970
2044
  GET: "bg-blue-600",
1971
2045
  POST: "bg-emerald-600",
1972
2046
  PUT: "bg-amber-600",
1973
2047
  DELETE: "bg-red-600",
1974
2048
  PATCH: "bg-purple-600",
1975
2049
  HEAD: "bg-gray-600"
1976
- }, bn = {
2050
+ }, Dn = {
1977
2051
  GET: "bg-blue-500",
1978
2052
  POST: "bg-green-500",
1979
2053
  PUT: "bg-yellow-500",
@@ -1981,23 +2055,23 @@ var vn = /* @__PURE__ */ function(e) {
1981
2055
  PATCH: "bg-purple-500",
1982
2056
  HEAD: "bg-gray-500"
1983
2057
  };
1984
- function xn(e) {
1985
- return e ? yn[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
2058
+ function On(e) {
2059
+ return e ? En[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
1986
2060
  }
1987
- function Sn(e) {
1988
- return e ? bn[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
2061
+ function kn(e) {
2062
+ return e ? Dn[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
1989
2063
  }
1990
- function Cn(e) {
2064
+ function An(e) {
1991
2065
  let t = e ?? 0;
1992
2066
  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";
1993
2067
  }
1994
- function wn(e, t) {
2068
+ function jn(e, t) {
1995
2069
  let n = e ?? 200;
1996
2070
  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";
1997
2071
  }
1998
2072
  //#endregion
1999
2073
  //#region src/utils/sanitizeHtml.ts
2000
- var Tn = new Set([
2074
+ var Mn = new Set([
2001
2075
  "A",
2002
2076
  "B",
2003
2077
  "STRONG",
@@ -2012,7 +2086,7 @@ var Tn = new Set([
2012
2086
  "LI",
2013
2087
  "SPAN",
2014
2088
  "DIV"
2015
- ]), En = new Set([
2089
+ ]), Nn = new Set([
2016
2090
  "SCRIPT",
2017
2091
  "STYLE",
2018
2092
  "IFRAME",
@@ -2020,53 +2094,53 @@ var Tn = new Set([
2020
2094
  "EMBED",
2021
2095
  "NOSCRIPT",
2022
2096
  "TEMPLATE"
2023
- ]), Dn = { A: new Set(["href", "title"]) };
2024
- function On(e) {
2097
+ ]), Pn = { A: new Set(["href", "title"]) };
2098
+ function Fn(e) {
2025
2099
  let t = e.trim().toLowerCase();
2026
2100
  return t.startsWith("http://") || t.startsWith("https://") || t.startsWith("mailto:") || t.startsWith("tel:") || t.startsWith("/") || t.startsWith("#") || t === "";
2027
2101
  }
2028
- function kn(e) {
2102
+ function In(e) {
2029
2103
  if (e.nodeType !== Node.ELEMENT_NODE) return;
2030
2104
  let t = e, n = t.tagName.toUpperCase();
2031
- if (!Tn.has(n)) {
2032
- En.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2105
+ if (!Mn.has(n)) {
2106
+ Nn.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2033
2107
  return;
2034
2108
  }
2035
- let r = Dn[n] ?? /* @__PURE__ */ new Set();
2109
+ let r = Pn[n] ?? /* @__PURE__ */ new Set();
2036
2110
  for (let e of Array.from(t.attributes)) {
2037
2111
  if (!r.has(e.name.toLowerCase())) {
2038
2112
  t.removeAttribute(e.name);
2039
2113
  continue;
2040
2114
  }
2041
- n === "A" && e.name.toLowerCase() === "href" && !On(e.value) && t.removeAttribute(e.name);
2115
+ n === "A" && e.name.toLowerCase() === "href" && !Fn(e.value) && t.removeAttribute(e.name);
2042
2116
  }
2043
2117
  n === "A" && t.hasAttribute("href") && (t.setAttribute("rel", "noopener noreferrer"), t.setAttribute("target", "_blank"));
2044
- for (let e of Array.from(t.childNodes)) kn(e);
2118
+ for (let e of Array.from(t.childNodes)) In(e);
2045
2119
  }
2046
- function An(e) {
2120
+ function Ln(e) {
2047
2121
  if (!e) return "";
2048
2122
  let t = new DOMParser().parseFromString(`<div>${e}</div>`, "text/html").body.firstElementChild;
2049
2123
  if (!t) return "";
2050
- for (let e of Array.from(t.childNodes)) kn(e);
2124
+ for (let e of Array.from(t.childNodes)) In(e);
2051
2125
  return t.innerHTML;
2052
2126
  }
2053
2127
  //#endregion
2054
2128
  //#region src/utils/format.ts
2055
- var jn = "—";
2056
- function Mn(e, t = 4) {
2057
- if (e == null || typeof e == "string" && e.trim() === "") return jn;
2129
+ var Rn = "—";
2130
+ function zn(e, t = 4) {
2131
+ if (e == null || typeof e == "string" && e.trim() === "") return Rn;
2058
2132
  let n = typeof e == "string" ? Number(e) : e;
2059
2133
  return isFinite(n) ? n.toLocaleString(void 0, {
2060
2134
  minimumFractionDigits: t,
2061
2135
  maximumFractionDigits: t
2062
- }) : jn;
2136
+ }) : Rn;
2063
2137
  }
2064
- function Nn(e) {
2065
- if (e == null || e === "") return jn;
2138
+ function Bn(e) {
2139
+ if (e == null || e === "") return Rn;
2066
2140
  let t = new Date(e);
2067
2141
  return isNaN(t.getTime()) ? String(e) : t.toLocaleString();
2068
2142
  }
2069
- function Pn(e) {
2143
+ function Vn(e) {
2070
2144
  return new Date(e).toLocaleString(void 0, {
2071
2145
  month: "short",
2072
2146
  day: "numeric",
@@ -2074,13 +2148,13 @@ function Pn(e) {
2074
2148
  minute: "2-digit"
2075
2149
  });
2076
2150
  }
2077
- function Fn(e) {
2151
+ function Hn(e) {
2078
2152
  return new Date(e).toLocaleDateString(void 0, {
2079
2153
  month: "short",
2080
2154
  day: "numeric"
2081
2155
  });
2082
2156
  }
2083
- function In(e) {
2157
+ function Un(e) {
2084
2158
  if (!isFinite(e) || e === 0) return e.toFixed(2);
2085
2159
  let t = Math.abs(e), n = 2;
2086
2160
  return t < 1e-4 ? n = 8 : t < .01 ? n = 6 : t < 1 ? n = 4 : t < 100 && (n = 3), e.toLocaleString(void 0, {
@@ -2088,15 +2162,15 @@ function In(e) {
2088
2162
  maximumFractionDigits: n
2089
2163
  });
2090
2164
  }
2091
- function Ln(e, t = 2) {
2165
+ function Wn(e, t = 2) {
2092
2166
  return `${e >= 0 ? "+" : ""}${e.toFixed(t)}%`;
2093
2167
  }
2094
- function Rn(e) {
2168
+ function Gn(e) {
2095
2169
  return `${e < 0 ? "-" : "+"}$${Math.abs(e).toFixed(2)}`;
2096
2170
  }
2097
2171
  //#endregion
2098
2172
  //#region src/utils/pnl.ts
2099
- function zn(e) {
2173
+ function Kn(e) {
2100
2174
  if (e.buyPrice == null || e.lastPrice == null || e.filledQty == null) return {
2101
2175
  pnlUsd: null,
2102
2176
  pnlPct: null
@@ -2111,4 +2185,4 @@ function zn(e) {
2111
2185
  };
2112
2186
  }
2113
2187
  //#endregion
2114
- export { I as AlertEnum, hn as BaseActionButton, he as BaseAlert, an as BaseAppLayout, R as BaseBadge, vn as BaseBadgeEnum, be as BaseBreadcrumb, je as BaseButton, z as BaseButtonEnum, B as BaseButtonSizeEnum, xt as BaseCollapsibleSection, Tt as BaseConfirmModal, tn as BaseEntityPickerModal, Fe as BaseLine, Ie as BaseLoginEnum, Re as BaseLogo, G as BaseLogoEnum, We as BaseModal, K as BaseModalEnum, Q as BaseModalShell, Mt as BaseNotFoundPage, ln as BasePageHeader, Ge as BaseRow, Ht as BaseSidebar, Ke as BaseSpinner, kt as BaseTextInputModal, Xe as BaseToast, J as BaseToastEnum, fn as BaseToolbarButton, Qe as ColoredSquares, L as ColorsEnums, tt as EarningsCard, ot as EuroAmount, W as LineEnum, lt as Pagination, Y as PositioningEnum, pt as TrendArrow, zn as computePnL, Nn as fmtDate, Fn as fmtDateShort, Pn as fmtDateTime, Mn as fmtNumber, Ln as fmtPct, In as fmtPrice, Rn as fmtUsd, fe as getBaseColor, pe as getBaseColorOf, On as isSafeHref, Sn as methodBadgeBright, xn as methodBadgeSolid, An as sanitizeHtml, Cn as statusBadgeSolid, wn as statusBadgeTinted, gn as useDebouncedRef, Z as useEscapeKey, Nt as useMobileSidebar, U as useTheme, X as useThemeClasses, _n as useToast };
2188
+ export { I as AlertEnum, bn as BaseActionButton, _e as BaseAlert, un as BaseAppLayout, R as BaseBadge, Tn as BaseBadgeEnum, Se as BaseBreadcrumb, Ne as BaseButton, z as BaseButtonEnum, B as BaseButtonSizeEnum, Et as BaseCollapsibleSection, At as BaseConfirmModal, Sn as BaseCopyButton, sn as BaseEntityPickerModal, Le as BaseLine, Re as BaseLoginEnum, Be as BaseLogo, G as BaseLogoEnum, Ke as BaseModal, K as BaseModalEnum, Q as BaseModalShell, Lt as BaseNotFoundPage, mn as BasePageHeader, qe as BaseRow, qt as BaseSidebar, Je as BaseSpinner, Pt as BaseTextInputModal, Qe as BaseToast, J as BaseToastEnum, _n as BaseToolbarButton, et as ColoredSquares, L as ColorsEnums, rt as EarningsCard, ct as EuroAmount, W as LineEnum, dt as Pagination, Y as PositioningEnum, ht as TrendArrow, Kn as computePnL, Bn as fmtDate, Hn as fmtDateShort, Vn as fmtDateTime, zn as fmtNumber, Wn as fmtPct, Un as fmtPrice, Gn as fmtUsd, me as getBaseColor, he as getBaseColorOf, Fn as isSafeHref, kn as methodBadgeBright, On as methodBadgeSolid, Ln as sanitizeHtml, An as statusBadgeSolid, jn as statusBadgeTinted, Cn as useDebouncedRef, Z as useEscapeKey, Rt as useMobileSidebar, U as useTheme, X as useThemeClasses, wn as useToast };