mgv-backoffice 1.24.0 → 1.27.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
@@ -150,7 +150,7 @@ var De = { class: "font-medium pl-1" }, Oe = /* @__PURE__ */ d({
150
150
  let r = C("router-link");
151
151
  return y(), o("nav", Ae, [s("ol", je, [s("li", Me, [u(r, {
152
152
  to: "/",
153
- class: "inline-flex items-center text-sm font-medium text-gray-700 hover:text-blue-600 dark:text-gray-400 dark:hover:text-white"
153
+ class: "inline-flex items-center text-sm font-medium text-gray-700 hover:text-blue-600 dark:text-gray-400 dark:hover:text-white transition-colors rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500"
154
154
  }, {
155
155
  default: M(() => [u(E(Se), { class: "h-4 w-4 text-gray-500 mr-2" }), n[0] ||= l(" Home ", -1)]),
156
156
  _: 1
@@ -160,7 +160,7 @@ var De = { class: "font-medium pl-1" }, Oe = /* @__PURE__ */ d({
160
160
  style: { "margin-left": "0" }
161
161
  }, [u(E(le), { class: "h-4 w-4 text-gray-500" }), u(r, {
162
162
  to: e.url,
163
- class: "ml-1 text-sm font-medium text-gray-700 hover:text-blue-600 md:ml-2 dark:text-gray-400 dark:hover:text-white"
163
+ class: "ml-1 text-sm font-medium text-gray-700 hover:text-blue-600 md:ml-2 dark:text-gray-400 dark:hover:text-white transition-colors rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500"
164
164
  }, {
165
165
  default: M(() => [l(T(e.name), 1)]),
166
166
  _: 2
@@ -314,7 +314,7 @@ var Le = [
314
314
  dark: "text-gray-300 border-gray-600 hover:bg-gray-800"
315
315
  }
316
316
  }, r = e[n.color] ?? e[z.BLUE], i = t.value ? r.dark : r.light;
317
- return n.isDisable || n.isLoading ? `border bg-transparent ${i} opacity-50 cursor-not-allowed` : `focus:outline-none border bg-transparent ${i}`;
317
+ return n.isDisable || n.isLoading ? `border bg-transparent ${i} opacity-50 cursor-not-allowed` : `focus:outline-none focus-visible:ring-2 focus-visible:ring-current border bg-transparent ${i}`;
318
318
  }
319
319
  function c() {
320
320
  let e = {
@@ -363,69 +363,71 @@ var Le = [
363
363
  dark: "text-gray-400 hover:bg-gray-800"
364
364
  }
365
365
  }, r = e[n.color] ?? e[z.GRAY], i = t.value ? r.dark : r.light;
366
- return n.isDisable || n.isLoading ? `bg-transparent ${i} opacity-60 cursor-not-allowed` : `focus:outline-none bg-transparent ${i} cursor-pointer`;
366
+ return n.isDisable || n.isLoading ? `bg-transparent ${i} opacity-60 cursor-not-allowed` : `focus:outline-none focus-visible:ring-2 focus-visible:ring-current bg-transparent ${i} cursor-pointer`;
367
367
  }
368
368
  function l() {
369
- let e = n.isDisable || n.isLoading, t;
369
+ let e = n.isDisable || n.isLoading, t = "inline-flex items-center transition-colors duration-150";
370
+ e || (t += " cursor-pointer");
371
+ let i;
370
372
  switch (n.color) {
371
373
  case z.BLUE:
372
- t = e ? "text-white bg-blue-400 cursor-not-allowed" : "focus:outline-none text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300";
374
+ i = e ? "text-white bg-blue-400 cursor-not-allowed" : "focus:outline-none text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300";
373
375
  break;
374
376
  case z.WHITE:
375
- t = e ? "text-gray-900 bg-gray-200 border border-gray-200 cursor-not-allowed" : "focus:outline-none text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-200";
377
+ i = e ? "text-gray-900 bg-gray-200 border border-gray-200 cursor-not-allowed" : "focus:outline-none text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-200";
376
378
  break;
377
379
  case z.DARK:
378
- t = e ? "text-white bg-gray-400 cursor-not-allowed" : "focus:outline-none text-white bg-gray-800 hover:bg-gray-900 focus:ring-4 focus:ring-gray-300";
380
+ i = e ? "text-white bg-gray-400 cursor-not-allowed" : "focus:outline-none text-white bg-gray-800 hover:bg-gray-900 focus:ring-4 focus:ring-gray-300";
379
381
  break;
380
382
  case z.GREEN:
381
- t = e ? "text-white bg-green-400 cursor-not-allowed" : "focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300";
383
+ i = e ? "text-white bg-green-400 cursor-not-allowed" : "focus:outline-none text-white bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300";
382
384
  break;
383
385
  case z.EMERALD:
384
- t = e ? "text-white bg-emerald-400 cursor-not-allowed" : "focus:outline-none text-white bg-emerald-600 hover:bg-emerald-700 focus:ring-4 focus:ring-emerald-300";
386
+ i = e ? "text-white bg-emerald-400 cursor-not-allowed" : "focus:outline-none text-white bg-emerald-600 hover:bg-emerald-700 focus:ring-4 focus:ring-emerald-300";
385
387
  break;
386
388
  case z.RED:
387
- t = e ? "text-white bg-red-400 cursor-not-allowed" : "focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300";
389
+ i = e ? "text-white bg-red-400 cursor-not-allowed" : "focus:outline-none text-white bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300";
388
390
  break;
389
391
  case z.YELLOW:
390
- t = e ? "text-white bg-yellow-300 cursor-not-allowed" : "focus:outline-none text-white bg-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300";
392
+ i = e ? "text-white bg-yellow-300 cursor-not-allowed" : "focus:outline-none text-white bg-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300";
391
393
  break;
392
394
  case z.PURPLE:
393
- t = e ? "text-white bg-purple-400 cursor-not-allowed" : "focus:outline-none text-white bg-purple-700 hover:bg-purple-800 focus:ring-4 focus:ring-purple-300";
395
+ i = e ? "text-white bg-purple-400 cursor-not-allowed" : "focus:outline-none text-white bg-purple-700 hover:bg-purple-800 focus:ring-4 focus:ring-purple-300";
394
396
  break;
395
397
  case z.SKY:
396
- t = e ? "text-white bg-sky-400 cursor-not-allowed" : "focus:outline-none text-white bg-sky-600 hover:bg-sky-700 focus:ring-4 focus:ring-sky-300";
398
+ i = e ? "text-white bg-sky-400 cursor-not-allowed" : "focus:outline-none text-white bg-sky-600 hover:bg-sky-700 focus:ring-4 focus:ring-sky-300";
397
399
  break;
398
400
  case z.AMBER:
399
- t = e ? "text-white bg-amber-300 cursor-not-allowed" : "focus:outline-none text-white bg-amber-500 hover:bg-amber-600 focus:ring-4 focus:ring-amber-300";
401
+ i = e ? "text-white bg-amber-300 cursor-not-allowed" : "focus:outline-none text-white bg-amber-500 hover:bg-amber-600 focus:ring-4 focus:ring-amber-300";
400
402
  break;
401
403
  case z.GRAY:
402
- t = e ? "text-white bg-gray-400 cursor-not-allowed" : "focus:outline-none text-white bg-gray-600 hover:bg-gray-700 focus:ring-4 focus:ring-gray-300";
404
+ i = e ? "text-white bg-gray-400 cursor-not-allowed" : "focus:outline-none text-white bg-gray-600 hover:bg-gray-700 focus:ring-4 focus:ring-gray-300";
403
405
  break;
404
406
  default:
405
- t = e ? "text-white bg-blue-400 cursor-not-allowed" : "focus:outline-none text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300";
407
+ i = e ? "text-white bg-blue-400 cursor-not-allowed" : "focus:outline-none text-white bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300";
406
408
  break;
407
409
  }
408
- n.outline && (t = r()), n.ghost && (t = c());
409
- let i = "px-5 py-2.5 mr-2 mb-2 text-sm";
410
+ n.outline && (i = r()), n.ghost && (i = c());
411
+ let a = "px-5 py-2.5 mr-2 mb-2 text-sm";
410
412
  switch (n.size) {
411
413
  case B.EXTRA_SMALL:
412
- i = "px-3 py-2 text-xs";
414
+ a = "px-3 py-2 text-xs";
413
415
  break;
414
416
  case B.SMALL:
415
- i = "px-3 py-2 text-sm";
417
+ a = "px-3 py-2 text-sm";
416
418
  break;
417
419
  case B.BASE:
418
- i = "px-5 py-2.5 text-sm";
420
+ a = "px-5 py-2.5 text-sm";
419
421
  break;
420
422
  case B.LARGE:
421
- i = "px-5 py-3 text-base";
423
+ a = "px-5 py-3 text-base";
422
424
  break;
423
425
  case B.EXTRA_LARGE:
424
- i = "px-6 py-3.5 text-base";
426
+ a = "px-6 py-3.5 text-base";
425
427
  break;
426
428
  }
427
- let a = "rounded-lg";
428
- return n.isRounded && (a = "rounded-full"), "inline-flex items-center " + i + " " + t + " font-medium " + a;
429
+ let o = "rounded-lg";
430
+ return n.isRounded && (o = "rounded-full"), t + " " + a + " " + i + " font-medium " + o;
429
431
  }
430
432
  return (t, r) => {
431
433
  let c = C("router-link");
@@ -1033,7 +1035,7 @@ var Le = [
1033
1035
  }
1034
1036
  }), gt = {
1035
1037
  key: 0,
1036
- class: "font-bold text-green-800"
1038
+ class: "font-bold text-green-800 dark:text-green-400"
1037
1039
  }, _t = { key: 0 }, vt = { key: 0 }, yt = "font-bold", bt = /* @__PURE__ */ d({
1038
1040
  __name: "EuroAmount",
1039
1041
  props: {
@@ -1056,13 +1058,18 @@ var Le = [
1056
1058
  let n = t, i = r(() => n.amount !== null && n.amount !== void 0), s = r(() => i.value && n.amount < 0), c = r(() => n.beforeAmount === null || n.beforeAmount === void 0 ? !1 : n.amount < n.beforeAmount), u = r(() => s.value || c.value), d = r(() => !s.value && !c.value && !(n.beforeAmount === null || n.beforeAmount === void 0));
1057
1059
  return (n, r) => (y(), o(e, null, [i.value && d.value ? (y(), o("span", gt, [l(T(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", _t, "€")) : a("", !0)])) : a("", !0), i.value && !d.value ? (y(), o("span", {
1058
1060
  key: 1,
1059
- class: m([yt, u.value ? "text-red-800" : "text-gray-800"])
1061
+ class: m([yt, u.value ? "text-red-800 dark:text-red-400" : "text-gray-800 dark:text-gray-200"])
1060
1062
  }, [l(T(t.amount) + " ", 1), t.showCurrency ? (y(), o("span", vt, "€")) : a("", !0)], 2)) : a("", !0)], 64));
1061
1063
  }
1062
- }), xt = { class: "flex list-none p-0 m-0" }, St = ["onClick", "onKeydown"], Ct = {
1064
+ }), xt = { "aria-label": "Pagination" }, St = { class: "flex list-none p-0 m-0" }, Ct = [
1065
+ "aria-current",
1066
+ "aria-label",
1067
+ "onClick"
1068
+ ], wt = {
1063
1069
  key: 1,
1064
- class: "inline-block border border-gray-300 rounded-lg p-3 text-black cursor-not-allowed"
1065
- }, wt = /* @__PURE__ */ d({
1070
+ "aria-hidden": "true",
1071
+ class: "inline-block border border-gray-300 dark:border-gray-600 rounded-lg p-3 text-black dark:text-gray-200 cursor-not-allowed"
1072
+ }, Tt = /* @__PURE__ */ d({
1066
1073
  __name: "Pagination",
1067
1074
  props: {
1068
1075
  totalItems: {
@@ -1092,28 +1099,28 @@ var Le = [
1092
1099
  }
1093
1100
  return j(() => [r.totalItems, r.itemsPerPage], () => {
1094
1101
  a.value = Math.ceil(r.totalItems / r.itemsPerPage), i.value > a.value && (i.value = Math.max(1, a.value)), u(i.value);
1095
- }, { immediate: !0 }), (t, n) => (y(), o("div", null, [s("ul", xt, [(y(!0), o(e, null, x(c.value, (e, t) => (y(), o("li", {
1102
+ }, { immediate: !0 }), (t, n) => (y(), o("nav", xt, [s("ul", St, [(y(!0), o(e, null, x(c.value, (e, t) => (y(), o("li", {
1096
1103
  key: t,
1097
1104
  class: "mr-1"
1098
- }, [e === 0 ? (y(), o("span", Ct, "...")) : (y(), o("a", {
1105
+ }, [e === 0 ? (y(), o("span", wt, "...")) : (y(), o("button", {
1099
1106
  key: 0,
1100
- role: "button",
1101
- tabindex: "0",
1107
+ type: "button",
1108
+ "aria-current": e === i.value ? "page" : void 0,
1109
+ "aria-label": `Go to page ${e}`,
1102
1110
  onClick: (t) => d(e),
1103
- onKeydown: P((t) => d(e), ["enter"]),
1104
- class: m(["inline-block border border-gray-300 rounded-lg p-3 no-underline text-black cursor-pointer hover:bg-gray-300", { "active font-bold bg-gray-200": e === i.value }])
1105
- }, T(e), 43, St))]))), 128))])]));
1111
+ class: m(["inline-block min-w-[44px] border border-gray-300 dark:border-gray-600 rounded-lg p-3 text-black dark:text-gray-200 cursor-pointer transition-colors hover:bg-gray-300 dark:hover:bg-gray-700 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", { "active font-bold bg-gray-200 dark:bg-gray-700": e === i.value }])
1112
+ }, T(e), 11, Ct))]))), 128))])]));
1106
1113
  }
1107
- }), Tt = { key: 0 }, Et = {
1114
+ }), Et = { key: 0 }, Dt = {
1108
1115
  key: 0,
1109
1116
  class: "flex items-center space-x-2"
1110
- }, Dt = {
1117
+ }, Ot = {
1111
1118
  key: 1,
1112
1119
  class: "flex items-center space-x-2"
1113
- }, Ot = {
1120
+ }, kt = {
1114
1121
  key: 2,
1115
1122
  class: "flex items-center space-x-2"
1116
- }, kt = /* @__PURE__ */ d({
1123
+ }, At = /* @__PURE__ */ d({
1117
1124
  __name: "TrendArrow",
1118
1125
  props: {
1119
1126
  number: {
@@ -1127,13 +1134,13 @@ var Le = [
1127
1134
  },
1128
1135
  setup(e) {
1129
1136
  let t = e, n = r(() => t.number !== null && t.number !== void 0 && t.number < 0), i = r(() => t.number === 0);
1130
- return (r, s) => e.number !== null && e.number !== void 0 ? (y(), o("div", Tt, [n.value ? (y(), o("span", Et, [u(R, { color: E(L).RED }, {
1137
+ return (r, s) => e.number !== null && e.number !== void 0 ? (y(), o("div", Et, [n.value ? (y(), o("span", Dt, [u(R, { color: E(L).RED }, {
1131
1138
  default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1132
1139
  _: 1
1133
- }, 8, ["color"]), u(E(te), { class: "h-5 w-5 text-red-500" })])) : i.value ? (y(), o("span", Dt, [u(R, { color: E(L).GRAY }, {
1140
+ }, 8, ["color"]), u(E(te), { class: "h-5 w-5 text-red-500" })])) : i.value ? (y(), o("span", Ot, [u(R, { color: E(L).GRAY }, {
1134
1141
  default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1135
1142
  _: 1
1136
- }, 8, ["color"]), u(E(ve), { class: "h-5 w-5 text-gray-400" })])) : (y(), o("span", Ot, [u(R, { color: E(L).GREEN }, {
1143
+ }, 8, ["color"]), u(E(ve), { class: "h-5 w-5 text-gray-400" })])) : (y(), o("span", kt, [u(R, { color: E(L).GREEN }, {
1137
1144
  default: M(() => [l(T(e.number) + T(t.icon), 1)]),
1138
1145
  _: 1
1139
1146
  }, 8, ["color"]), u(E(ne), { class: "h-5 w-5 text-green-500" })]))])) : a("", !0);
@@ -1177,7 +1184,7 @@ function Y(e) {
1177
1184
  }
1178
1185
  //#endregion
1179
1186
  //#region src/components/BaseModalShell.vue?vue&type=script&setup=true&lang.ts
1180
- var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-w-0" }, Mt = { class: "p-6 overflow-y-auto flex-1" }, Nt = { class: "p-6" }, Pt = { class: "flex items-start gap-4" }, Ft = { class: "flex-1" }, It = { class: "mt-4" }, Lt = { class: "mt-6 flex gap-3 justify-end" }, Rt = /* @__PURE__ */ d({
1187
+ var jt = { class: "flex items-start gap-4 min-w-0" }, Mt = { class: "flex-1 min-w-0" }, Nt = { class: "p-6 overflow-y-auto flex-1" }, Pt = { class: "p-6" }, Ft = { class: "flex items-start gap-4" }, It = { class: "flex-1" }, Lt = { class: "mt-4" }, Rt = { class: "mt-6 flex gap-3 justify-end" }, zt = /* @__PURE__ */ d({
1181
1188
  __name: "BaseModalShell",
1182
1189
  props: {
1183
1190
  title: {},
@@ -1211,14 +1218,14 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1211
1218
  class: m(["relative w-full mx-4 rounded-lg shadow-xl max-h-[90vh] flex flex-col", [e.maxWidthClass, p.value]]),
1212
1219
  onClick: r[0] ||= F(() => {}, ["stop"])
1213
1220
  }, [
1214
- s("div", { class: m(["flex items-start justify-between gap-4 p-6 border-b shrink-0", E(d).border]) }, [s("div", At, [S(n.$slots, "icon"), s("div", jt, [s("h3", {
1221
+ s("div", { class: m(["flex items-start justify-between gap-4 p-6 border-b shrink-0", E(d).border]) }, [s("div", jt, [S(n.$slots, "icon"), s("div", Mt, [s("h3", {
1215
1222
  id: f,
1216
1223
  class: m(["text-lg font-medium", E(d).primaryText])
1217
1224
  }, T(e.title), 3), e.subtitle ? (y(), o("p", {
1218
1225
  key: 0,
1219
1226
  class: m(["text-sm mt-1 break-all", E(d).mutedText])
1220
1227
  }, T(e.subtitle), 3)) : a("", !0)])]), S(n.$slots, "header-actions")], 2),
1221
- s("div", Mt, [S(n.$slots, "default")]),
1228
+ s("div", Nt, [S(n.$slots, "default")]),
1222
1229
  n.$slots.footer ? (y(), o("div", {
1223
1230
  key: 0,
1224
1231
  class: m(["flex gap-3 justify-end p-6 border-t shrink-0", E(d).border])
@@ -1227,16 +1234,16 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1227
1234
  key: 1,
1228
1235
  class: m(["relative w-full mx-4 rounded-lg shadow-xl", [e.maxWidthClass, p.value]]),
1229
1236
  onClick: r[1] ||= F(() => {}, ["stop"])
1230
- }, [s("div", Nt, [
1231
- s("div", Pt, [S(n.$slots, "icon"), s("div", Ft, [s("h3", {
1237
+ }, [s("div", Pt, [
1238
+ s("div", Ft, [S(n.$slots, "icon"), s("div", It, [s("h3", {
1232
1239
  id: f,
1233
1240
  class: m(["text-lg font-medium", E(d).primaryText])
1234
1241
  }, T(e.title), 3)])]),
1235
- s("div", It, [S(n.$slots, "default")]),
1236
- s("div", Lt, [S(n.$slots, "footer")])
1242
+ s("div", Lt, [S(n.$slots, "default")]),
1243
+ s("div", Rt, [S(n.$slots, "footer")])
1237
1244
  ])], 2))])]));
1238
1245
  }
1239
- }), zt = ["aria-expanded"], Bt = { class: "flex items-center gap-3" }, Vt = /* @__PURE__ */ d({
1246
+ }), Bt = ["aria-expanded"], Vt = { class: "flex items-center gap-3" }, Ht = /* @__PURE__ */ d({
1240
1247
  __name: "BaseCollapsibleSection",
1241
1248
  props: {
1242
1249
  title: {},
@@ -1247,12 +1254,12 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1247
1254
  emits: ["toggle"],
1248
1255
  setup(e, { emit: t }) {
1249
1256
  let n = e, i = t, { isDark: c } = U(), l = J(), u = r(() => c.value ? "text-gray-100" : "text-gray-700"), d = r(() => c.value ? "bg-gray-800/50 hover:bg-gray-800 border-gray-700" : "bg-gray-50 hover:bg-gray-100 border-gray-200"), f = r(() => c.value ? "bg-emerald-500/15 text-emerald-400" : "bg-emerald-50 text-emerald-700"), p = r(() => n.bodyClass === void 0 ? c.value ? "bg-gray-800" : "bg-white" : n.bodyClass);
1250
- return (t, n) => (y(), o("section", { class: m(["rounded-xl border overflow-hidden transition-colors", E(l).cardAlt]) }, [s("button", {
1257
+ return (t, n) => (y(), o("section", { class: m(["rounded-xl border transition-colors", E(l).cardAlt]) }, [s("button", {
1251
1258
  type: "button",
1252
- class: m(["w-full flex items-center justify-between p-4 text-left transition-colors", d.value]),
1259
+ class: m(["w-full flex items-center justify-between p-4 text-left transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [d.value, e.collapsed ? "rounded-xl" : "rounded-t-xl"]]),
1253
1260
  "aria-expanded": !e.collapsed,
1254
1261
  onClick: n[0] ||= (e) => i("toggle")
1255
- }, [s("div", Bt, [s("h2", { class: m(["text-base font-semibold", u.value]) }, T(e.title), 3), e.badge ? (y(), o("span", {
1262
+ }, [s("div", Vt, [s("h2", { class: m(["text-base font-semibold", u.value]) }, T(e.title), 3), e.badge ? (y(), o("span", {
1256
1263
  key: 0,
1257
1264
  class: m(["text-xs px-2 py-0.5 rounded-full", f.value])
1258
1265
  }, T(e.badge), 3)) : a("", !0)]), (y(), o("svg", {
@@ -1266,15 +1273,15 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1266
1273
  "stroke-linecap": "round",
1267
1274
  "stroke-linejoin": "round",
1268
1275
  d: "M19 9l-7 7-7-7"
1269
- }, null, -1)]], 2))], 10, zt), N(s("div", { class: m(["p-6 border-t", [E(l).border, p.value]]) }, [S(t.$slots, "default")], 2), [[ee, !e.collapsed]])], 2));
1276
+ }, null, -1)]], 2))], 10, Bt), N(s("div", { class: m(["p-6 border-t rounded-b-xl", [E(l).border, p.value]]) }, [S(t.$slots, "default")], 2), [[ee, !e.collapsed]])], 2));
1270
1277
  }
1271
- }), Ht = ["disabled"], Ut = ["disabled"], Wt = {
1278
+ }), Ut = ["disabled"], Wt = ["disabled"], Gt = {
1272
1279
  key: 0,
1273
1280
  class: "w-4 h-4 animate-spin",
1274
1281
  fill: "none",
1275
1282
  viewBox: "0 0 24 24",
1276
1283
  "aria-hidden": "true"
1277
- }, Gt = /* @__PURE__ */ d({
1284
+ }, Kt = /* @__PURE__ */ d({
1278
1285
  __name: "BaseConfirmModal",
1279
1286
  props: {
1280
1287
  title: {},
@@ -1297,7 +1304,7 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1297
1304
  function p() {
1298
1305
  n.submitting || r("cancel");
1299
1306
  }
1300
- return (t, n) => (y(), i(Rt, {
1307
+ return (t, n) => (y(), i(zt, {
1301
1308
  title: e.title,
1302
1309
  "manual-close": e.submitting,
1303
1310
  onCancel: p
@@ -1309,14 +1316,14 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1309
1316
  footer: M(() => [s("button", {
1310
1317
  type: "button",
1311
1318
  disabled: e.submitting,
1312
- class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150", [E(d).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1319
+ class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [E(d).ghostButton, e.submitting ? "opacity-60 cursor-not-allowed" : "cursor-pointer"]]),
1313
1320
  onClick: p
1314
- }, T(e.cancelText), 11, Ht), s("button", {
1321
+ }, T(e.cancelText), 11, Ut), s("button", {
1315
1322
  type: "button",
1316
1323
  disabled: e.submitting,
1317
- class: m(["inline-flex items-center justify-center gap-2 px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150", [e.variant === "danger" ? e.submitting ? "bg-red-400 cursor-not-allowed" : "bg-red-600 hover:bg-red-700 cursor-pointer" : e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1324
+ class: m(["inline-flex items-center justify-center gap-2 px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-offset-2", [e.variant === "danger" ? "focus-visible:ring-red-500" : "focus-visible:ring-emerald-500", e.variant === "danger" ? e.submitting ? "bg-red-400 cursor-not-allowed" : "bg-red-600 hover:bg-red-700 cursor-pointer" : e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1318
1325
  onClick: f
1319
- }, [e.submitting ? (y(), o("svg", Wt, [...n[0] ||= [s("circle", {
1326
+ }, [e.submitting ? (y(), o("svg", Gt, [...n[0] ||= [s("circle", {
1320
1327
  class: "opacity-25",
1321
1328
  cx: "12",
1322
1329
  cy: "12",
@@ -1327,12 +1334,12 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1327
1334
  class: "opacity-75",
1328
1335
  fill: "currentColor",
1329
1336
  d: "M4 12a8 8 0 018-8v4a4 4 0 00-4 4H4z"
1330
- }, null, -1)]])) : a("", !0), l(" " + T(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Ut)]),
1337
+ }, null, -1)]])) : a("", !0), l(" " + T(e.submitting ? e.submittingText : e.confirmText), 1)], 10, Wt)]),
1331
1338
  default: M(() => [S(t.$slots, "message", {}, () => [s("p", { class: m(["text-sm", E(c) ? "text-gray-300" : "text-gray-600"]) }, T(e.message), 3)]), S(t.$slots, "default")]),
1332
1339
  _: 3
1333
1340
  }, 8, ["title", "manual-close"]));
1334
1341
  }
1335
- }), Kt = { class: "mt-4" }, qt = ["placeholder"], Jt = ["disabled"], Yt = /* @__PURE__ */ d({
1342
+ }), qt = { class: "mt-4" }, Jt = ["placeholder"], Yt = ["disabled"], Xt = /* @__PURE__ */ d({
1336
1343
  __name: "BaseTextInputModal",
1337
1344
  props: {
1338
1345
  title: {},
@@ -1363,7 +1370,7 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1363
1370
  function h() {
1364
1371
  c.value.trim() === (n.initialValue ?? "").trim() && f();
1365
1372
  }
1366
- return Y(f), (t, n) => (y(), i(Rt, {
1373
+ return Y(f), (t, n) => (y(), i(zt, {
1367
1374
  title: e.title,
1368
1375
  "manual-close": "",
1369
1376
  onBackdrop: h
@@ -1374,15 +1381,15 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1374
1381
  })], 2)])]),
1375
1382
  footer: M(() => [s("button", {
1376
1383
  type: "button",
1377
- class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150", E(o).ghostButton]),
1384
+ class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", E(o).ghostButton]),
1378
1385
  onClick: f
1379
1386
  }, T(e.cancelText), 3), s("button", {
1380
1387
  type: "button",
1381
1388
  disabled: !c.value.trim() || e.submitting,
1382
- class: m(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150", [!c.value.trim() || e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1389
+ class: m(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", [!c.value.trim() || e.submitting ? "bg-emerald-400 cursor-not-allowed" : "bg-emerald-600 hover:bg-emerald-700 cursor-pointer"]]),
1383
1390
  onClick: d
1384
- }, T(e.submitting ? e.submittingText : e.confirmText), 11, Jt)]),
1385
- default: M(() => [s("p", { class: m(["text-sm", E(a) ? "text-gray-300" : "text-gray-600"]) }, T(e.message), 3), s("div", Kt, [s("label", { class: m(["block text-sm font-medium mb-1", E(o).label]) }, T(e.inputLabel), 3), N(s("input", {
1391
+ }, T(e.submitting ? e.submittingText : e.confirmText), 11, Yt)]),
1392
+ default: M(() => [s("p", { class: m(["text-sm", E(a) ? "text-gray-300" : "text-gray-600"]) }, T(e.message), 3), s("div", qt, [s("label", { class: m(["block text-sm font-medium mb-1", E(o).label]) }, T(e.inputLabel), 3), N(s("input", {
1386
1393
  ref_key: "nameInput",
1387
1394
  ref: l,
1388
1395
  "onUpdate:modelValue": n[0] ||= (e) => c.value = e,
@@ -1390,11 +1397,11 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1390
1397
  placeholder: e.placeholder,
1391
1398
  class: m(["w-full px-3 py-2 rounded-md border text-sm transition-colors", E(a) ? "bg-gray-800 border-gray-600 text-gray-100 placeholder-gray-500 focus:outline-none focus:border-emerald-500" : "bg-white border-gray-300 text-gray-900 placeholder-gray-400 focus:outline-none focus:border-emerald-500"]),
1392
1399
  onKeyup: P(d, ["enter"])
1393
- }, null, 42, qt), [[A, c.value]])])]),
1400
+ }, null, 42, Jt), [[A, c.value]])])]),
1394
1401
  _: 3
1395
1402
  }, 8, ["title"]));
1396
1403
  }
1397
- }), Xt = { class: "flex items-center justify-center min-h-[60vh]" }, Zt = { class: "text-center px-6" }, Qt = /* @__PURE__ */ d({
1404
+ }), Zt = { class: "flex items-center justify-center min-h-[60vh]" }, Qt = { class: "text-center px-6" }, $t = /* @__PURE__ */ d({
1398
1405
  __name: "BaseNotFoundPage",
1399
1406
  props: {
1400
1407
  code: { default: "404" },
@@ -1407,18 +1414,18 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
1407
1414
  function a() {
1408
1415
  n.push({ name: t.homeRouteName });
1409
1416
  }
1410
- return (t, n) => (y(), o("div", Xt, [s("div", Zt, [
1417
+ return (t, n) => (y(), o("div", Zt, [s("div", Qt, [
1411
1418
  u(E(me), { class: m(["w-16 h-16 mx-auto mb-4", E(i).illustration]) }, null, 8, ["class"]),
1412
1419
  s("h1", { class: m(["text-4xl font-bold mb-2", E(r) ? "text-gray-200" : "text-gray-800"]) }, T(e.code), 3),
1413
1420
  s("p", { class: m(["text-lg mb-6", E(i).dimTextAlt]) }, T(e.message), 3),
1414
1421
  s("button", {
1415
1422
  onClick: a,
1416
- class: m(["inline-flex items-center gap-2 px-4 py-2 rounded-lg text-sm font-medium text-white transition-colors cursor-pointer", E(r) ? "bg-emerald-600 hover:bg-emerald-500" : "bg-emerald-600 hover:bg-emerald-700"])
1423
+ class: m(["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", E(r) ? "bg-emerald-600 hover:bg-emerald-500" : "bg-emerald-600 hover:bg-emerald-700"])
1417
1424
  }, T(e.homeLabel), 3)
1418
1425
  ])]));
1419
1426
  }
1420
1427
  }), X = b(!1);
1421
- function $t() {
1428
+ function en() {
1422
1429
  function e() {
1423
1430
  X.value = !0;
1424
1431
  }
@@ -1437,19 +1444,19 @@ function $t() {
1437
1444
  }
1438
1445
  //#endregion
1439
1446
  //#region src/composables/useSidebarCollapse.ts
1440
- var Z = b(!1), en = !1, tn = "mgv-sidebar-collapsed";
1441
- function nn(e) {
1442
- if (!en && (en = !0, tn = e, typeof window < "u")) {
1443
- let e = window.localStorage?.getItem(tn);
1447
+ var Z = b(!1), tn = !1, nn = "mgv-sidebar-collapsed";
1448
+ function rn(e) {
1449
+ if (!tn && (tn = !0, nn = e, typeof window < "u")) {
1450
+ let e = window.localStorage?.getItem(nn);
1444
1451
  e && (Z.value = e === "true"), f(!0).run(() => {
1445
1452
  j(Z, (e) => {
1446
- window.localStorage?.setItem(tn, String(e));
1453
+ window.localStorage?.setItem(nn, String(e));
1447
1454
  });
1448
1455
  });
1449
1456
  }
1450
1457
  }
1451
- function rn(e) {
1452
- nn(e?.storageKey ?? tn);
1458
+ function an(e) {
1459
+ rn(e?.storageKey ?? nn);
1453
1460
  function t() {
1454
1461
  Z.value = !0;
1455
1462
  }
@@ -1468,8 +1475,8 @@ function rn(e) {
1468
1475
  }
1469
1476
  //#endregion
1470
1477
  //#region src/composables/useNotifications.ts
1471
- var Q = b([]), $ = b(!1), an = r(() => Q.value.filter((e) => !e.read).length);
1472
- function on() {
1478
+ var Q = b([]), $ = b(!1), on = r(() => Q.value.filter((e) => !e.read).length);
1479
+ function sn() {
1473
1480
  function e() {
1474
1481
  $.value = !0;
1475
1482
  }
@@ -1505,7 +1512,7 @@ function on() {
1505
1512
  }
1506
1513
  return {
1507
1514
  notifications: Q,
1508
- unreadCount: an,
1515
+ unreadCount: on,
1509
1516
  open: $,
1510
1517
  openPanel: e,
1511
1518
  closePanel: t,
@@ -1520,22 +1527,22 @@ function on() {
1520
1527
  }
1521
1528
  //#endregion
1522
1529
  //#region src/components/BaseSidebar.vue?vue&type=script&setup=true&lang.ts
1523
- var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }, ln = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, un = { class: "space-y-0.5" }, dn = [
1530
+ var cn = ["aria-label", "aria-expanded"], ln = { class: "flex flex-col h-full" }, un = { class: "flex-1 overflow-y-auto px-3 space-y-6" }, dn = { class: "space-y-0.5" }, fn = [
1524
1531
  "aria-current",
1525
1532
  "title",
1526
1533
  "onClick"
1527
- ], fn = ["aria-label"], pn = { class: "relative shrink-0" }, mn = {
1534
+ ], pn = ["aria-label"], mn = { class: "relative shrink-0" }, hn = {
1528
1535
  key: 0,
1529
1536
  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"
1530
- }, hn = [
1537
+ }, gn = [
1531
1538
  "title",
1532
1539
  "aria-label",
1533
1540
  "aria-pressed"
1534
- ], gn = [
1541
+ ], _n = [
1535
1542
  "title",
1536
1543
  "aria-label",
1537
1544
  "aria-pressed"
1538
- ], _n = /*#__PURE__*/ ((e, t) => {
1545
+ ], vn = /*#__PURE__*/ ((e, t) => {
1539
1546
  let n = e.__vccOpts || e;
1540
1547
  for (let [e, r] of t) n[e] = r;
1541
1548
  return n;
@@ -1560,7 +1567,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1560
1567
  }
1561
1568
  },
1562
1569
  setup(t) {
1563
- let n = t, c = we(), d = Ce(), { isDark: f, toggleTheme: h } = U(), { mobileOpen: g, close: _, toggle: v } = $t(), { collapsed: C, toggle: D } = rn(), { unreadCount: O, togglePanel: k } = on(), A = r(() => n.collapsible && C.value), ee = b(null), M = null;
1570
+ let n = t, c = we(), d = Ce(), { isDark: f, toggleTheme: h } = U(), { mobileOpen: g, close: _, toggle: v } = en(), { collapsed: C, toggle: D } = an(), { unreadCount: O, togglePanel: k } = sn(), A = r(() => n.collapsible && C.value), ee = b(null), M = null;
1564
1571
  j(g, async (e) => {
1565
1572
  e ? (M = document.activeElement instanceof HTMLElement ? document.activeElement : null, await p(), ee.value?.focus()) : (M?.focus(), M = null);
1566
1573
  });
@@ -1577,12 +1584,12 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1577
1584
  s("div", { class: m(["mobile-topbar fixed top-0 inset-x-0 z-30 flex items-center justify-between px-4 py-3 border-b transition-colors", E(f) ? "bg-gray-900 border-gray-800" : "bg-white border-gray-200"]) }, [s("button", {
1578
1585
  type: "button",
1579
1586
  onClick: N,
1580
- class: "cursor-pointer",
1587
+ class: "cursor-pointer rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500",
1581
1588
  "aria-label": "Go to home"
1582
1589
  }, [S(n.$slots, "logo", { size: 28 }, void 0, !0)]), s("button", {
1583
1590
  type: "button",
1584
1591
  onClick: r[0] ||= (...e) => E(v) && E(v)(...e),
1585
- class: m(["p-2 rounded-lg cursor-pointer", E(f) ? "text-gray-400 hover:bg-gray-800" : "text-gray-600 hover:bg-gray-100"]),
1592
+ class: m(["p-2 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", E(f) ? "text-gray-400 hover:bg-gray-800" : "text-gray-600 hover:bg-gray-100"]),
1586
1593
  "aria-label": E(g) ? "Close navigation menu" : "Open navigation menu",
1587
1594
  "aria-expanded": E(g)
1588
1595
  }, [E(g) ? (y(), i(E(xe), {
@@ -1593,7 +1600,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1593
1600
  key: 0,
1594
1601
  class: "w-6 h-6",
1595
1602
  "aria-hidden": "true"
1596
- }))], 10, sn)], 2),
1603
+ }))], 10, cn)], 2),
1597
1604
  E(g) ? (y(), o("div", {
1598
1605
  key: 0,
1599
1606
  class: "mobile-overlay fixed inset-0 z-40 bg-black/50",
@@ -1608,11 +1615,11 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1608
1615
  E(g) ? "translate-x-0 z-50" : "-translate-x-full max-lg:pointer-events-none lg:translate-x-0 z-50",
1609
1616
  t.collapsible && E(C) ? "lg:w-16" : "lg:w-60"
1610
1617
  ]])
1611
- }, [s("div", cn, [
1618
+ }, [s("div", ln, [
1612
1619
  s("div", { class: m(["px-5 pt-5 pb-4 flex items-center justify-center relative", { "lg:px-2": A.value }]) }, [s("button", {
1613
1620
  type: "button",
1614
1621
  onClick: N,
1615
- class: "cursor-pointer",
1622
+ class: "cursor-pointer rounded focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500",
1616
1623
  "aria-label": "Go to home"
1617
1624
  }, [S(n.$slots, "logo", { size: A.value ? 36 : 52 }, void 0, !0)]), s("button", {
1618
1625
  ref_key: "closeMobileButton",
@@ -1625,13 +1632,13 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1625
1632
  class: "w-5 h-5",
1626
1633
  "aria-hidden": "true"
1627
1634
  })], 2)], 2),
1628
- s("nav", ln, [(y(!0), o(e, null, x(t.sections, (t) => (y(), o("div", { key: t.title }, [s("p", { class: m(["px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500", { "lg:hidden": A.value }]) }, T(t.title), 3), s("ul", un, [(y(!0), o(e, null, x(t.items, (e) => (y(), o("li", { key: e.name }, [s("button", {
1635
+ s("nav", un, [(y(!0), o(e, null, x(t.sections, (t) => (y(), o("div", { key: t.title }, [s("p", { class: m(["px-2 mb-2 text-[10px] font-semibold uppercase tracking-wider text-gray-500", { "lg:hidden": A.value }]) }, T(t.title), 3), s("ul", dn, [(y(!0), o(e, null, x(t.items, (e) => (y(), o("li", { key: e.name }, [s("button", {
1629
1636
  type: "button",
1630
1637
  "aria-current": P(e.name) ? "page" : void 0,
1631
1638
  title: A.value ? e.label : void 0,
1632
1639
  onClick: (t) => F(e.name),
1633
1640
  class: m(["flex items-center gap-3 px-3 py-2.5 rounded-lg text-sm font-medium transition-colors w-full text-left cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [P(e.name) ? E(f) ? "bg-emerald-500/15 text-emerald-300" : "bg-emerald-50 text-emerald-700" : E(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": A.value }]])
1634
- }, [(y(), i(w(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), s("span", { class: m({ "lg:hidden": A.value }) }, T(e.label), 3)], 10, dn)]))), 128))])]))), 128))]),
1641
+ }, [(y(), i(w(e.icon), { class: "w-[18px] h-[18px] shrink-0" })), s("span", { class: m({ "lg:hidden": A.value }) }, T(e.label), 3)], 10, fn)]))), 128))])]))), 128))]),
1635
1642
  s("div", { class: m(["px-4 py-4 border-t transition-colors space-y-3", E(f) ? "border-gray-800" : "border-gray-200"]) }, [
1636
1643
  t.showNotifications ? (y(), o("button", {
1637
1644
  key: 0,
@@ -1640,10 +1647,10 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1640
1647
  title: "Notifications",
1641
1648
  "aria-label": E(O) > 0 ? `Notifications, ${E(O)} unread` : "Notifications",
1642
1649
  class: m(["relative flex items-center gap-3 w-full px-3 py-2.5 rounded-lg text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", [E(f) ? "text-gray-400 hover:text-gray-100 hover:bg-gray-800" : "text-gray-600 hover:text-gray-900 hover:bg-gray-100", { "lg:justify-center": A.value }]])
1643
- }, [s("span", pn, [u(E(ie), {
1650
+ }, [s("span", mn, [u(E(ie), {
1644
1651
  class: "w-[18px] h-[18px]",
1645
1652
  "aria-hidden": "true"
1646
- }), E(O) > 0 ? (y(), o("span", mn, T(E(O) > 99 ? "99+" : E(O)), 1)) : a("", !0)]), s("span", { class: m({ "lg:hidden": A.value }) }, "Notifications", 2)], 10, fn)) : a("", !0),
1653
+ }), E(O) > 0 ? (y(), o("span", hn, T(E(O) > 99 ? "99+" : E(O)), 1)) : a("", !0)]), s("span", { class: m({ "lg:hidden": A.value }) }, "Notifications", 2)], 10, pn)) : a("", !0),
1647
1654
  t.showThemeToggle ? (y(), o("button", {
1648
1655
  key: 1,
1649
1656
  type: "button",
@@ -1659,7 +1666,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1659
1666
  }, null, 8, ["class"])),
1660
1667
  s("span", { class: m({ "lg:hidden": A.value }) }, T(E(f) ? "Switch to light" : "Switch to dark"), 3),
1661
1668
  s("span", { class: m(["ml-auto relative w-9 h-5 rounded-full transition-colors", [E(f) ? "bg-emerald-600" : "bg-gray-300", { "lg:hidden": A.value }]]) }, [s("span", { class: m(["absolute top-0.5 left-0.5 w-4 h-4 rounded-full bg-white shadow-sm transition-transform duration-300", E(f) ? "translate-x-4" : "translate-x-0"]) }, null, 2)], 2)
1662
- ], 10, hn)) : a("", !0),
1669
+ ], 10, gn)) : a("", !0),
1663
1670
  t.collapsible ? (y(), o("button", {
1664
1671
  key: 2,
1665
1672
  type: "button",
@@ -1671,7 +1678,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1671
1678
  }, [(y(), i(w(E(C) ? E(se) : E(oe)), {
1672
1679
  class: "w-[18px] h-[18px] shrink-0",
1673
1680
  "aria-hidden": "true"
1674
- })), s("span", { class: m({ "lg:hidden": A.value }) }, "Collapse", 2)], 10, gn)) : a("", !0),
1681
+ })), s("span", { class: m({ "lg:hidden": A.value }) }, "Collapse", 2)], 10, _n)) : a("", !0),
1675
1682
  s("div", { class: m({ "lg:hidden": A.value }) }, [S(n.$slots, "status", {}, void 0, !0)], 2),
1676
1683
  s("div", { class: m({ "lg:hidden": A.value }) }, [S(n.$slots, "footer", {}, () => [t.appName || t.version ? (y(), o("div", {
1677
1684
  key: 0,
@@ -1685,26 +1692,26 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1685
1692
  ])], 2)
1686
1693
  ]));
1687
1694
  }
1688
- }), [["__scopeId", "data-v-6fca021f"]]), vn = {
1695
+ }), [["__scopeId", "data-v-452beaf2"]]), yn = {
1689
1696
  key: 1,
1690
1697
  class: "mt-4 flex justify-center py-6"
1691
- }, yn = {
1698
+ }, bn = {
1692
1699
  key: 2,
1693
1700
  class: "mt-4 text-sm text-red-500",
1694
1701
  role: "alert"
1695
- }, bn = {
1702
+ }, xn = {
1696
1703
  key: 3,
1697
1704
  class: "mt-4"
1698
- }, xn = { class: "relative" }, Sn = ["placeholder"], Cn = {
1705
+ }, Sn = { class: "relative" }, Cn = ["placeholder"], wn = {
1699
1706
  key: 4,
1700
1707
  class: "mt-3 max-h-64 overflow-y-auto"
1701
- }, wn = ["onClick"], Tn = { class: "flex-1 min-w-0" }, En = {
1708
+ }, Tn = ["aria-pressed", "onClick"], En = { class: "flex-1 min-w-0" }, Dn = {
1702
1709
  key: 0,
1703
1710
  class: "text-center py-6"
1704
- }, Dn = {
1711
+ }, On = {
1705
1712
  key: 1,
1706
1713
  class: "text-center py-6"
1707
- }, On = ["disabled"], kn = ["disabled"], An = /* @__PURE__ */ d({
1714
+ }, kn = ["disabled"], An = ["disabled"], jn = /* @__PURE__ */ d({
1708
1715
  __name: "BaseEntityPickerModal",
1709
1716
  props: {
1710
1717
  title: {},
@@ -1841,7 +1848,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1841
1848
  function te() {
1842
1849
  c.submitting || l("cancel");
1843
1850
  }
1844
- return (n, r) => (y(), i(Rt, {
1851
+ return (n, r) => (y(), i(zt, {
1845
1852
  title: t.title,
1846
1853
  "manual-close": t.submitting,
1847
1854
  onCancel: te
@@ -1853,21 +1860,21 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1853
1860
  footer: M(() => [s("button", {
1854
1861
  type: "button",
1855
1862
  disabled: t.submitting,
1856
- class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 disabled:opacity-50 disabled:cursor-not-allowed", E(f).ghostButton]),
1863
+ class: m(["inline-flex items-center justify-center px-4 py-2 border rounded-md shadow-sm text-sm font-medium transition-colors duration-150 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", E(f).ghostButton]),
1857
1864
  onClick: te
1858
- }, T(t.cancelText), 11, On), s("button", {
1865
+ }, T(t.cancelText), 11, kn), s("button", {
1859
1866
  type: "button",
1860
1867
  disabled: !C.value || t.submitting,
1861
- class: m(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150", !C.value || t.submitting ? P.value.confirmDisabled : P.value.confirmActive]),
1868
+ class: m(["inline-flex items-center justify-center px-4 py-2 border border-transparent rounded-md shadow-sm text-sm font-medium text-white transition-colors duration-150 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:ring-offset-2", !C.value || t.submitting ? P.value.confirmDisabled : P.value.confirmActive]),
1862
1869
  onClick: F
1863
- }, T(t.submitting ? t.submittingText : t.confirmText), 11, kn)]),
1870
+ }, T(t.submitting ? t.submittingText : t.confirmText), 11, An)]),
1864
1871
  default: M(() => [
1865
1872
  t.message ? (y(), o("p", {
1866
1873
  key: 0,
1867
1874
  class: m(["text-sm", E(d) ? "text-gray-300" : "text-gray-600"])
1868
1875
  }, T(t.message), 3)) : a("", !0),
1869
- _.value ? (y(), o("div", vn, [u(st, { color: "emerald" })])) : v.value ? (y(), o("div", yn, T(v.value), 1)) : a("", !0),
1870
- !_.value && !v.value && O.value.length > 0 ? (y(), o("div", bn, [s("div", xn, [u(E(_e), {
1876
+ _.value ? (y(), o("div", yn, [u(st, { color: "emerald" })])) : v.value ? (y(), o("div", bn, T(v.value), 1)) : a("", !0),
1877
+ !_.value && !v.value && O.value.length > 0 ? (y(), o("div", xn, [s("div", Sn, [u(E(_e), {
1871
1878
  class: m(["absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4", E(f).dimText]),
1872
1879
  "aria-hidden": "true"
1873
1880
  }, null, 8, ["class"]), N(s("input", {
@@ -1877,14 +1884,16 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1877
1884
  type: "text",
1878
1885
  placeholder: t.searchPlaceholder,
1879
1886
  class: m(["w-full pl-9 pr-3 py-2 text-sm rounded-md border outline-none transition-colors", [E(d) ? "bg-gray-800 border-gray-600 text-gray-200 placeholder-gray-500" : "bg-white border-gray-300 text-gray-700 placeholder-gray-400", P.value.inputFocus]])
1880
- }, null, 10, Sn), [[A, w.value]])])])) : a("", !0),
1881
- !_.value && !v.value ? (y(), o("div", Cn, [(y(!0), o(e, null, x(k.value, (e) => (y(), o("div", {
1887
+ }, null, 10, Cn), [[A, w.value]])])])) : a("", !0),
1888
+ !_.value && !v.value ? (y(), o("div", wn, [(y(!0), o(e, null, x(k.value, (e) => (y(), o("button", {
1882
1889
  key: e.id,
1883
- class: m(["flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-colors", [C.value === e.id ? P.value.selectedRow : E(d) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1890
+ type: "button",
1891
+ "aria-pressed": C.value === e.id,
1892
+ class: m(["w-full text-left flex items-center gap-3 px-3 py-2.5 rounded-lg cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500", [C.value === e.id ? P.value.selectedRow : E(d) ? "hover:bg-gray-800 border border-transparent" : "hover:bg-gray-50 border border-transparent"]]),
1884
1893
  onClick: (t) => C.value = e.id
1885
1894
  }, [
1886
1895
  u(E(he), { class: m(["w-5 h-5 flex-shrink-0", E(f).dimText]) }, null, 8, ["class"]),
1887
- s("div", Tn, [s("p", { class: m(["text-sm font-medium truncate", E(f).bodyText]) }, T(e.label), 3)]),
1896
+ s("div", En, [s("p", { class: m(["text-sm font-medium truncate", E(f).bodyText]) }, T(e.label), 3)]),
1888
1897
  C.value === e.id ? (y(), o("div", {
1889
1898
  key: 0,
1890
1899
  class: m(["w-5 h-5 rounded-full flex items-center justify-center", P.value.checkBg])
@@ -1900,15 +1909,15 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1900
1909
  "stroke-linejoin": "round",
1901
1910
  d: "M5 13l4 4L19 7"
1902
1911
  })], -1)]], 2)) : a("", !0)
1903
- ], 10, wn))), 128)), O.value.length === 0 ? (y(), o("div", En, [s("p", { class: m(["text-sm", E(f).dimText]) }, T(t.emptyMessage), 3)])) : k.value.length === 0 ? (y(), o("div", Dn, [s("p", { class: m(["text-sm", E(f).dimText]) }, T(t.noMatchMessage), 3)])) : a("", !0)])) : a("", !0)
1912
+ ], 10, Tn))), 128)), O.value.length === 0 ? (y(), o("div", Dn, [s("p", { class: m(["text-sm", E(f).dimText]) }, T(t.emptyMessage), 3)])) : k.value.length === 0 ? (y(), o("div", On, [s("p", { class: m(["text-sm", E(f).dimText]) }, T(t.noMatchMessage), 3)])) : a("", !0)])) : a("", !0)
1904
1913
  ]),
1905
1914
  _: 3
1906
1915
  }, 8, ["title", "manual-close"]));
1907
1916
  }
1908
- }), jn = {
1917
+ }), Mn = {
1909
1918
  href: "#main-content",
1910
1919
  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"
1911
- }, Mn = ["inert"], Nn = /* @__PURE__ */ d({
1920
+ }, Nn = ["inert"], Pn = /* @__PURE__ */ d({
1912
1921
  __name: "BaseAppLayout",
1913
1922
  props: {
1914
1923
  showSidebar: {
@@ -1918,19 +1927,19 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1918
1927
  skipLinkLabel: { default: "Skip to main content" }
1919
1928
  },
1920
1929
  setup(e) {
1921
- let t = e, { isDark: n } = U(), { mobileOpen: i } = $t(), { collapsed: c } = rn(), l = r(() => t.showSidebar);
1930
+ let t = e, { isDark: n } = U(), { mobileOpen: i } = en(), { collapsed: c } = an(), l = r(() => t.showSidebar);
1922
1931
  return (t, r) => (y(), o("div", { class: m(["min-h-screen transition-colors duration-300", E(n) ? "bg-gray-950 text-gray-100" : "bg-gray-50 text-gray-800"]) }, [
1923
- s("a", jn, T(e.skipLinkLabel), 1),
1932
+ s("a", Mn, T(e.skipLinkLabel), 1),
1924
1933
  l.value ? S(t.$slots, "sidebar", { key: 0 }) : a("", !0),
1925
1934
  s("main", {
1926
1935
  id: "main-content",
1927
1936
  tabindex: "-1",
1928
1937
  inert: l.value && E(i) ? !0 : void 0,
1929
1938
  class: m(["transition-all duration-300", l.value ? E(c) ? "pt-14 lg:pt-0 lg:ml-16" : "pt-14 lg:pt-0 lg:ml-60" : ""])
1930
- }, [S(t.$slots, "default")], 10, Mn)
1939
+ }, [S(t.$slots, "default")], 10, Nn)
1931
1940
  ], 2));
1932
1941
  }
1933
- }), Pn = { class: "flex flex-wrap items-center justify-between gap-3 mb-8" }, Fn = { class: "flex items-center gap-3 min-w-0" }, In = { class: "flex items-center gap-2" }, Ln = /* @__PURE__ */ d({
1942
+ }), Fn = { class: "flex flex-wrap items-center justify-between gap-3 mb-8" }, In = { class: "flex items-center gap-3 min-w-0" }, Ln = { class: "flex items-center gap-2" }, Rn = /* @__PURE__ */ d({
1934
1943
  __name: "BasePageHeader",
1935
1944
  props: {
1936
1945
  title: {},
@@ -1980,16 +1989,16 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
1980
1989
  }[t.iconColor];
1981
1990
  return n.value ? e.dark : e.light;
1982
1991
  });
1983
- return (t, n) => (y(), o("div", { class: m(["mx-auto px-4 sm:px-6", e.maxWidthClass]) }, [s("div", Pn, [s("div", Fn, [s("div", { class: m(["w-10 h-10 rounded-lg flex items-center justify-center", c.value]) }, [S(t.$slots, "icon", { iconClass: l.value })], 2), s("div", null, [s("h1", { class: m(["text-2xl font-bold", E(i).primaryTextSoft]) }, T(e.title), 3), e.subtitle ? (y(), o("p", {
1992
+ return (t, n) => (y(), o("div", { class: m(["mx-auto px-4 sm:px-6", e.maxWidthClass]) }, [s("div", Fn, [s("div", In, [s("div", { class: m(["w-10 h-10 rounded-lg flex items-center justify-center", c.value]) }, [S(t.$slots, "icon", { iconClass: l.value })], 2), s("div", null, [s("h1", { class: m(["text-2xl font-bold", E(i).primaryTextSoft]) }, T(e.title), 3), e.subtitle ? (y(), o("p", {
1984
1993
  key: 0,
1985
1994
  class: m(["text-sm", E(i).dimTextAlt])
1986
- }, T(e.subtitle), 3)) : a("", !0)])]), s("div", In, [S(t.$slots, "actions")])])], 2));
1995
+ }, T(e.subtitle), 3)) : a("", !0)])]), s("div", Ln, [S(t.$slots, "actions")])])], 2));
1987
1996
  }
1988
- }), Rn = [
1997
+ }), zn = [
1989
1998
  "type",
1990
1999
  "disabled",
1991
2000
  "title"
1992
- ], zn = { key: 0 }, Bn = /* @__PURE__ */ d({
2001
+ ], Bn = { key: 0 }, Vn = /* @__PURE__ */ d({
1993
2002
  __name: "BaseToolbarButton",
1994
2003
  props: {
1995
2004
  label: { default: "" },
@@ -2020,16 +2029,16 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2020
2029
  type: e.type,
2021
2030
  disabled: e.disabled,
2022
2031
  title: e.title,
2023
- class: m(["inline-flex shrink-0 items-center gap-2 px-3 py-2 rounded-lg text-sm font-medium border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap", i.value]),
2032
+ class: m(["inline-flex shrink-0 items-center gap-2 px-3 py-2 rounded-lg text-sm font-medium border transition-colors cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed whitespace-nowrap focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500", i.value]),
2024
2033
  onClick: n[0] ||= (e) => t.$emit("click", e)
2025
- }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", zn, T(e.label), 1)) : a("", !0)], 10, Rn));
2034
+ }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Bn, T(e.label), 1)) : a("", !0)], 10, zn));
2026
2035
  }
2027
- }), Vn = [
2036
+ }), Hn = [
2028
2037
  "type",
2029
2038
  "disabled",
2030
2039
  "title",
2031
2040
  "aria-label"
2032
- ], Hn = { key: 0 }, Un = /* @__PURE__ */ d({
2041
+ ], Un = { key: 0 }, Wn = /* @__PURE__ */ d({
2033
2042
  __name: "BaseActionButton",
2034
2043
  props: {
2035
2044
  label: { default: "" },
@@ -2126,11 +2135,11 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2126
2135
  disabled: e.disabled,
2127
2136
  title: e.title,
2128
2137
  "aria-label": e.ariaLabel,
2129
- class: m(["inline-flex items-center justify-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors", [e.fullWidth ? "flex-1" : "", c.value]]),
2138
+ class: m(["inline-flex items-center justify-center gap-1.5 px-3 py-1.5 rounded-lg text-xs font-medium transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-current", [e.fullWidth ? "flex-1" : "", c.value]]),
2130
2139
  onClick: n[0] ||= (e) => t.$emit("click", e)
2131
- }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Hn, T(e.label), 1)) : a("", !0)], 10, Vn));
2140
+ }, [S(t.$slots, "icon", { iconClass: "w-4 h-4" }), e.label ? (y(), o("span", Un, T(e.label), 1)) : a("", !0)], 10, Hn));
2132
2141
  }
2133
- }), Wn = ["title", "aria-label"], Gn = /* @__PURE__ */ d({
2142
+ }), Gn = ["title", "aria-label"], Kn = /* @__PURE__ */ d({
2134
2143
  __name: "BaseCopyButton",
2135
2144
  props: {
2136
2145
  text: {},
@@ -2141,7 +2150,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2141
2150
  },
2142
2151
  emits: ["copied", "error"],
2143
2152
  setup(e, { emit: t }) {
2144
- let n = e, a = t, { isDark: s } = U(), c = b(!1), l = null, u = r(() => c.value ? "Copied!" : n.label ? `Copy ${n.label}` : "Copy"), d = r(() => n.label ? `Copy ${n.label}` : "Copy"), f = r(() => n.variant === "bordered" ? `inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-colors cursor-pointer shrink-0 ${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"}`);
2153
+ let n = e, a = t, { isDark: s } = U(), c = b(!1), l = null, u = r(() => c.value ? "Copied!" : n.label ? `Copy ${n.label}` : "Copy"), d = r(() => n.label ? `Copy ${n.label}` : "Copy"), f = r(() => n.variant === "bordered" ? `inline-flex items-center justify-center w-9 h-9 rounded-lg border transition-colors cursor-pointer shrink-0 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 ${c.value ? s.value ? "border-emerald-500/40 bg-emerald-500/10 text-emerald-400" : "border-emerald-300 bg-emerald-50 text-emerald-600" : s.value ? "border-gray-600 text-gray-400 hover:text-gray-200 hover:bg-gray-800" : "border-gray-300 text-gray-400 hover:text-gray-600 hover:bg-gray-50"}` : `p-1 rounded transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 ${s.value ? "text-gray-400 hover:text-emerald-300 hover:bg-emerald-500/10" : "text-gray-500 hover:text-emerald-600 hover:bg-emerald-50"}`);
2145
2154
  async function p(e) {
2146
2155
  try {
2147
2156
  if (navigator.clipboard?.writeText) {
@@ -2179,20 +2188,20 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2179
2188
  key: 1,
2180
2189
  class: m(e.iconClass),
2181
2190
  "aria-hidden": "true"
2182
- }, null, 8, ["class"]))], 10, Wn));
2191
+ }, null, 8, ["class"]))], 10, Gn));
2183
2192
  }
2184
- }), Kn = ["disabled", "aria-busy"], qn = {
2193
+ }), qn = ["disabled", "aria-busy"], Jn = {
2185
2194
  key: 0,
2186
2195
  class: "w-5 h-5 animate-spin shrink-0",
2187
2196
  viewBox: "0 0 24 24",
2188
2197
  fill: "none",
2189
2198
  "aria-hidden": "true"
2190
- }, Jn = {
2199
+ }, Yn = {
2191
2200
  key: 1,
2192
2201
  class: "w-5 h-5 shrink-0",
2193
2202
  viewBox: "0 0 48 48",
2194
2203
  "aria-hidden": "true"
2195
- }, Yn = /* @__PURE__ */ d({
2204
+ }, Xn = /* @__PURE__ */ d({
2196
2205
  __name: "BaseGoogleSignInButton",
2197
2206
  props: {
2198
2207
  label: { default: "Sign in with Google" },
@@ -2221,7 +2230,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2221
2230
  "aria-busy": e.loading,
2222
2231
  onClick: u,
2223
2232
  class: m(["inline-flex items-center justify-center gap-3 h-11 px-4 rounded-lg border text-sm font-medium transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", E(a) ? "bg-gray-900 border-gray-700 text-gray-100 hover:bg-gray-800" : "bg-white border-gray-300 text-gray-700 hover:bg-gray-50"]])
2224
- }, [e.loading ? (y(), o("svg", qn, [...n[0] ||= [s("circle", {
2233
+ }, [e.loading ? (y(), o("svg", Jn, [...n[0] ||= [s("circle", {
2225
2234
  class: "opacity-25",
2226
2235
  cx: "12",
2227
2236
  cy: "12",
@@ -2232,18 +2241,18 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2232
2241
  class: "opacity-75",
2233
2242
  fill: "currentColor",
2234
2243
  d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2235
- }, null, -1)]])) : (y(), o("svg", Jn, [...n[1] ||= [c("<path fill=\"#EA4335\" d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"></path><path fill=\"#4285F4\" d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"></path><path fill=\"#FBBC05\" d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"></path><path fill=\"#34A853\" d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"></path><path fill=\"none\" d=\"M0 0h48v48H0z\"></path>", 5)]])), s("span", null, T(e.label), 1)], 10, Kn));
2244
+ }, null, -1)]])) : (y(), o("svg", Yn, [...n[1] ||= [c("<path fill=\"#EA4335\" d=\"M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z\"></path><path fill=\"#4285F4\" d=\"M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z\"></path><path fill=\"#FBBC05\" d=\"M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z\"></path><path fill=\"#34A853\" d=\"M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z\"></path><path fill=\"none\" d=\"M0 0h48v48H0z\"></path>", 5)]])), s("span", null, T(e.label), 1)], 10, qn));
2236
2245
  }
2237
- }), Xn = {
2246
+ }), Zn = {
2238
2247
  key: 0,
2239
2248
  class: "flex justify-center mb-6"
2240
- }, Zn = { class: "mb-6 text-center" }, Qn = { class: "flex items-center gap-3 my-5" }, $n = ["disabled"], er = { class: "flex items-center justify-between mb-1.5" }, tr = { class: "relative" }, nr = ["type", "disabled"], rr = ["aria-label", "aria-pressed"], ir = ["disabled"], ar = ["disabled", "aria-busy"], or = {
2249
+ }, Qn = { class: "mb-6 text-center" }, $n = { class: "flex items-center gap-3 my-5" }, er = ["disabled"], tr = { class: "flex items-center justify-between mb-1.5" }, nr = { class: "relative" }, rr = ["type", "disabled"], ir = ["aria-label", "aria-pressed"], ar = ["disabled"], or = ["disabled", "aria-busy"], sr = {
2241
2250
  key: 0,
2242
2251
  class: "w-4 h-4 animate-spin",
2243
2252
  viewBox: "0 0 24 24",
2244
2253
  fill: "none",
2245
2254
  "aria-hidden": "true"
2246
- }, sr = /* @__PURE__ */ d({
2255
+ }, cr = /* @__PURE__ */ d({
2247
2256
  __name: "BaseLoginForm",
2248
2257
  props: {
2249
2258
  title: { default: "Sign in" },
@@ -2278,8 +2287,8 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2278
2287
  });
2279
2288
  }
2280
2289
  return (n, r) => (y(), o("div", { class: m(["w-full max-w-sm mx-auto rounded-xl border shadow-sm p-6 sm:p-8", E(f).card]) }, [
2281
- n.$slots.logo ? (y(), o("div", Xn, [S(n.$slots, "logo")])) : a("", !0),
2282
- s("div", Zn, [s("h1", { class: m(["text-xl font-semibold", E(f).primaryText]) }, T(t.title), 3), t.subtitle ? (y(), o("p", {
2290
+ n.$slots.logo ? (y(), o("div", Zn, [S(n.$slots, "logo")])) : a("", !0),
2291
+ s("div", Qn, [s("h1", { class: m(["text-xl font-semibold", E(f).primaryText]) }, T(t.title), 3), t.subtitle ? (y(), o("p", {
2283
2292
  key: 0,
2284
2293
  class: m(["mt-1 text-sm", E(f).mutedText])
2285
2294
  }, T(t.subtitle), 3)) : a("", !0)]),
@@ -2288,11 +2297,11 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2288
2297
  role: "alert",
2289
2298
  class: m(["mb-4 rounded-lg border px-3 py-2 text-sm", E(d) ? "bg-red-500/10 border-red-500/30 text-red-300" : "bg-red-50 border-red-200 text-red-700"])
2290
2299
  }, T(t.error), 3)) : a("", !0),
2291
- t.showGoogle ? (y(), o(e, { key: 2 }, [u(Yn, {
2300
+ t.showGoogle ? (y(), o(e, { key: 2 }, [u(Xn, {
2292
2301
  loading: t.googleLoading,
2293
2302
  disabled: t.loading,
2294
2303
  onClick: r[0] ||= (e) => c("google-sign-in")
2295
- }, null, 8, ["loading", "disabled"]), s("div", Qn, [
2304
+ }, null, 8, ["loading", "disabled"]), s("div", $n, [
2296
2305
  s("span", { class: m(["h-px flex-1", E(d) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2),
2297
2306
  s("span", { class: m(["text-xs uppercase tracking-wider", E(f).dimTextAlt]) }, "or", 2),
2298
2307
  s("span", { class: m(["h-px flex-1", E(d) ? "bg-gray-700" : "bg-gray-200"]) }, null, 2)
@@ -2314,11 +2323,11 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2314
2323
  disabled: v.value,
2315
2324
  placeholder: "you@example.com",
2316
2325
  class: m(["w-full h-11 px-3 rounded-lg border text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60", E(f).inputWithPlaceholder])
2317
- }, null, 10, $n), [[A, p.value]])]),
2318
- s("div", null, [s("div", er, [s("label", {
2326
+ }, null, 10, er), [[A, p.value]])]),
2327
+ s("div", null, [s("div", tr, [s("label", {
2319
2328
  for: "login-password",
2320
2329
  class: m(["block text-sm font-medium", E(f).label])
2321
- }, " Password ", 2), S(n.$slots, "forgot")]), s("div", tr, [N(s("input", {
2330
+ }, " Password ", 2), S(n.$slots, "forgot")]), s("div", nr, [N(s("input", {
2322
2331
  id: "login-password",
2323
2332
  "onUpdate:modelValue": r[2] ||= (e) => h.value = e,
2324
2333
  type: _.value ? "text" : "password",
@@ -2328,13 +2337,13 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2328
2337
  disabled: v.value,
2329
2338
  placeholder: "••••••••",
2330
2339
  class: m(["w-full h-11 pl-3 pr-16 rounded-lg border text-sm transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-60", E(f).inputWithPlaceholder])
2331
- }, null, 10, nr), [[k, h.value]]), s("button", {
2340
+ }, null, 10, rr), [[k, h.value]]), s("button", {
2332
2341
  type: "button",
2333
2342
  onClick: r[3] ||= (e) => _.value = !_.value,
2334
2343
  "aria-label": _.value ? "Hide password" : "Show password",
2335
2344
  "aria-pressed": _.value,
2336
2345
  class: m(["absolute inset-y-0 right-0 px-3 text-xs font-medium cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 rounded-r-lg", E(f).mutedText])
2337
- }, T(_.value ? "Hide" : "Show"), 11, rr)])]),
2346
+ }, T(_.value ? "Hide" : "Show"), 11, ir)])]),
2338
2347
  t.showRemember ? (y(), o("label", {
2339
2348
  key: 0,
2340
2349
  class: m(["flex items-center gap-2 text-sm cursor-pointer select-none", E(f).bodyText])
@@ -2343,13 +2352,13 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2343
2352
  type: "checkbox",
2344
2353
  disabled: v.value,
2345
2354
  class: "w-4 h-4 rounded border-gray-300 text-emerald-600 focus:ring-emerald-500"
2346
- }, null, 8, ir), [[O, g.value]]), r[5] ||= l(" Remember me ", -1)], 2)) : a("", !0),
2355
+ }, null, 8, ar), [[O, g.value]]), r[5] ||= l(" Remember me ", -1)], 2)) : a("", !0),
2347
2356
  s("button", {
2348
2357
  type: "submit",
2349
2358
  disabled: v.value,
2350
2359
  "aria-busy": t.loading,
2351
2360
  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"
2352
- }, [t.loading ? (y(), o("svg", or, [...r[6] ||= [s("circle", {
2361
+ }, [t.loading ? (y(), o("svg", sr, [...r[6] ||= [s("circle", {
2353
2362
  class: "opacity-25",
2354
2363
  cx: "12",
2355
2364
  cy: "12",
@@ -2360,7 +2369,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2360
2369
  class: "opacity-75",
2361
2370
  fill: "currentColor",
2362
2371
  d: "M4 12a8 8 0 0 1 8-8V0C5.4 0 0 5.4 0 12h4z"
2363
- }, null, -1)]])) : a("", !0), l(" " + T(t.submitLabel), 1)], 8, ar)
2372
+ }, null, -1)]])) : a("", !0), l(" " + T(t.submitLabel), 1)], 8, or)
2364
2373
  ], 32),
2365
2374
  n.$slots.footer ? (y(), o("div", {
2366
2375
  key: 3,
@@ -2368,10 +2377,10 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2368
2377
  }, [S(n.$slots, "footer")], 2)) : a("", !0)
2369
2378
  ], 2));
2370
2379
  }
2371
- }), cr = ["aria-label"], lr = { class: "flex-1 overflow-y-auto" }, ur = {
2380
+ }), lr = ["aria-label"], ur = { class: "flex-1 overflow-y-auto" }, dr = {
2372
2381
  key: 0,
2373
2382
  class: "flex flex-col items-center justify-center text-center px-6 py-16 gap-3"
2374
- }, dr = ["onClick"], fr = { class: "min-w-0 flex-1" }, pr = { class: "flex items-baseline justify-between gap-2" }, mr = /* @__PURE__ */ d({
2383
+ }, fr = ["onClick"], pr = { class: "min-w-0 flex-1" }, mr = { class: "flex items-baseline justify-between gap-2" }, hr = /* @__PURE__ */ d({
2375
2384
  __name: "BaseNotificationPanel",
2376
2385
  props: {
2377
2386
  title: { default: "Notifications" },
@@ -2383,7 +2392,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2383
2392
  },
2384
2393
  emits: ["select"],
2385
2394
  setup(c, { emit: d }) {
2386
- let f = d, { isDark: p } = U(), h = J(), { notifications: g, unreadCount: _, open: v, closePanel: b, markAllRead: S, markRead: C } = on(), w = {
2395
+ let f = d, { isDark: p } = U(), h = J(), { notifications: g, unreadCount: _, open: v, closePanel: b, markAllRead: S, markRead: C } = sn(), w = {
2387
2396
  info: "bg-sky-500",
2388
2397
  success: "bg-emerald-500",
2389
2398
  warning: "bg-amber-500",
@@ -2437,7 +2446,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2437
2446
  onClick: d[2] ||= (...e) => E(S) && E(S)(...e),
2438
2447
  class: m(["text-xs font-medium cursor-pointer transition-colors focus:outline-none focus-visible:underline", E(h).emeraldText])
2439
2448
  }, " Mark all as read ", 2)], 2)) : a("", !0),
2440
- s("div", lr, [D.value === 0 ? (y(), o("div", ur, [u(E(ie), {
2449
+ s("div", ur, [D.value === 0 ? (y(), o("div", dr, [u(E(ie), {
2441
2450
  class: m(["w-10 h-10", E(h).illustration]),
2442
2451
  "aria-hidden": "true"
2443
2452
  }, null, 8, ["class"]), s("p", { class: m(["text-sm", E(h).mutedText]) }, T(c.emptyText), 3)])) : (y(), o("ul", {
@@ -2450,18 +2459,18 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2450
2459
  }, [s("span", {
2451
2460
  class: m(["mt-1.5 w-2 h-2 rounded-full shrink-0", e.read ? E(p) ? "bg-gray-700" : "bg-gray-300" : w[e.type ?? "info"]]),
2452
2461
  "aria-hidden": "true"
2453
- }, null, 2), s("span", fr, [s("span", pr, [s("span", { class: m(["text-sm truncate", [e.read ? "font-medium" : "font-semibold", E(h).primaryTextSoft]]) }, T(e.title), 3), e.time ? (y(), o("span", {
2462
+ }, null, 2), s("span", pr, [s("span", mr, [s("span", { class: m(["text-sm truncate", [e.read ? "font-medium" : "font-semibold", E(h).primaryTextSoft]]) }, T(e.title), 3), e.time ? (y(), o("span", {
2454
2463
  key: 0,
2455
2464
  class: m(["text-xs shrink-0", E(h).dimText])
2456
2465
  }, T(e.time), 3)) : a("", !0)]), e.message ? (y(), o("span", {
2457
2466
  key: 0,
2458
2467
  class: m(["mt-0.5 block text-sm", E(h).mutedText])
2459
- }, T(e.message), 3)) : a("", !0)])], 10, dr)]))), 128))], 2))])
2460
- ], 10, cr)) : a("", !0)]),
2468
+ }, T(e.message), 3)) : a("", !0)])], 10, fr)]))), 128))], 2))])
2469
+ ], 10, lr)) : a("", !0)]),
2461
2470
  _: 1
2462
2471
  })]));
2463
2472
  }
2464
- }), hr = ["value", "type"], gr = /* @__PURE__ */ d({
2473
+ }), gr = ["value", "type"], _r = /* @__PURE__ */ d({
2465
2474
  __name: "BaseInput",
2466
2475
  props: {
2467
2476
  modelValue: { default: "" },
@@ -2481,11 +2490,11 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2481
2490
  return (t, n) => (y(), o("input", {
2482
2491
  value: e.modelValue,
2483
2492
  type: e.type,
2484
- class: m(["rounded border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm", [e.block ? "w-full" : "", e.size === "sm" ? "px-2 py-1.5" : "px-3 py-2"]]),
2493
+ class: m(["rounded border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm placeholder:text-slate-400 dark:placeholder:text-slate-500 transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", e.size === "sm" ? "px-2 py-1.5" : "px-3 py-2"]]),
2485
2494
  onInput: r
2486
- }, null, 42, hr));
2495
+ }, null, 42, gr));
2487
2496
  }
2488
- }), _r = ["value"], vr = /* @__PURE__ */ d({
2497
+ }), vr = ["value"], yr = /* @__PURE__ */ d({
2489
2498
  __name: "BaseSelect",
2490
2499
  props: {
2491
2500
  modelValue: { default: void 0 },
@@ -2503,15 +2512,15 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2503
2512
  }
2504
2513
  return (t, n) => (y(), o("select", {
2505
2514
  value: e.modelValue,
2506
- class: m(["rounded border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm", [e.block ? "w-full" : "", e.size === "md" ? "px-3 py-2" : "px-2 py-1.5"]]),
2515
+ class: m(["rounded border border-slate-300 dark:border-slate-600 bg-slate-50 dark:bg-slate-900 text-slate-900 dark:text-slate-100 text-sm cursor-pointer transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 focus-visible:border-emerald-500 disabled:opacity-60 disabled:cursor-not-allowed", [e.block ? "w-full" : "", e.size === "md" ? "px-3 py-2" : "px-2 py-1.5"]]),
2507
2516
  onChange: r
2508
- }, [S(t.$slots, "default")], 42, _r));
2517
+ }, [S(t.$slots, "default")], 42, vr));
2509
2518
  }
2510
- }), yr = [
2519
+ }), br = [
2511
2520
  "disabled",
2512
2521
  "aria-label",
2513
2522
  "aria-expanded"
2514
- ], br = ["aria-label"], xr = ["aria-selected", "title"], Sr = ["disabled", "onClick"], Cr = /* @__PURE__ */ d({
2523
+ ], xr = ["aria-label"], Sr = ["aria-selected", "title"], Cr = ["disabled", "onClick"], wr = /* @__PURE__ */ d({
2515
2524
  __name: "BaseDropdown",
2516
2525
  props: {
2517
2526
  options: {},
@@ -2530,9 +2539,9 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2530
2539
  },
2531
2540
  emits: ["update:modelValue"],
2532
2541
  setup(t, { emit: n }) {
2533
- let i = t, c = n, l = b(!1), d = b(null), f = r(() => i.options.find((e) => e.value === i.modelValue) ?? null), p = r(() => "flex items-center justify-between gap-2 rounded-lg border text-left text-sm transition-colors border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-700 dark:text-slate-100 hover:bg-slate-50 dark:hover:bg-slate-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 disabled:opacity-50 disabled:cursor-not-allowed " + (i.size === "sm" ? "px-3 py-2" : "px-4 py-2.5"));
2542
+ let i = t, c = n, l = b(!1), d = b(null), f = r(() => i.options.find((e) => e.value === i.modelValue) ?? null), p = r(() => "flex items-center justify-between gap-2 rounded-lg border text-left text-sm transition-colors border-slate-300 dark:border-slate-600 bg-white dark:bg-slate-900 text-slate-700 dark:text-slate-100 hover:bg-slate-50 dark:hover:bg-slate-800 focus:outline-none focus-visible:ring-2 focus-visible:ring-emerald-500 cursor-pointer disabled:opacity-50 disabled:cursor-not-allowed " + (i.size === "sm" ? "px-3 py-2" : "px-4 py-2.5"));
2534
2543
  function _(e) {
2535
- return `block w-full px-4 py-2 text-left text-sm transition-colors disabled:opacity-50 disabled:cursor-not-allowed ${e.value === i.modelValue ? "bg-emerald-500 text-white" : "text-slate-700 dark:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800"}`;
2544
+ 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 === i.modelValue ? "bg-emerald-500 text-white" : "text-slate-700 dark:text-slate-200 hover:bg-slate-100 dark:hover:bg-slate-800"}`;
2536
2545
  }
2537
2546
  function v() {
2538
2547
  i.disabled || (l.value = !l.value);
@@ -2558,14 +2567,14 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2558
2567
  "aria-haspopup": "listbox",
2559
2568
  "aria-expanded": l.value,
2560
2569
  onClick: v
2561
- }, [s("span", { class: m(f.value ? "" : "text-slate-400 dark:text-slate-500") }, T(f.value ? f.value.label : t.placeholder), 3), u(E(ce), {
2570
+ }, [s("span", { class: m(["min-w-0 truncate", f.value ? "" : "text-slate-400 dark:text-slate-500"]) }, T(f.value ? f.value.label : t.placeholder), 3), u(E(ce), {
2562
2571
  class: m(["w-5 h-5 shrink-0 text-slate-500 dark:text-slate-400 transition-transform", l.value ? "rotate-180" : ""]),
2563
2572
  "aria-hidden": "true"
2564
- }, null, 8, ["class"])], 10, yr), l.value ? (y(), o("ul", {
2573
+ }, null, 8, ["class"])], 10, br), l.value ? (y(), o("ul", {
2565
2574
  key: 0,
2566
2575
  role: "listbox",
2567
2576
  "aria-label": t.ariaLabel || t.placeholder,
2568
- class: "absolute z-20 mt-1 w-full 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"
2577
+ 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"
2569
2578
  }, [(y(!0), o(e, null, x(t.options, (e) => (y(), o("li", {
2570
2579
  key: String(e.value),
2571
2580
  role: "option",
@@ -2576,13 +2585,13 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2576
2585
  disabled: e.disabled,
2577
2586
  class: m(_(e)),
2578
2587
  onClick: (t) => S(e)
2579
- }, T(e.label), 11, Sr)], 8, xr))), 128))], 8, br)) : a("", !0)], 2));
2588
+ }, T(e.label), 11, Cr)], 8, Sr))), 128))], 8, xr)) : a("", !0)], 2));
2580
2589
  }
2581
- }), wr = ["role", "aria-label"], Tr = [
2590
+ }), Tr = ["role", "aria-label"], Er = [
2582
2591
  "aria-pressed",
2583
2592
  "title",
2584
2593
  "onClick"
2585
- ], Er = "bg-slate-50 dark:bg-slate-900 text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800", Dr = /* @__PURE__ */ d({
2594
+ ], Dr = "bg-slate-50 dark:bg-slate-900 text-slate-600 dark:text-slate-300 hover:bg-slate-100 dark:hover:bg-slate-800", Or = /* @__PURE__ */ d({
2586
2595
  __name: "BaseSegmentedControl",
2587
2596
  props: {
2588
2597
  options: {},
@@ -2596,10 +2605,10 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2596
2605
  },
2597
2606
  emits: ["update:modelValue"],
2598
2607
  setup(t, { emit: n }) {
2599
- let i = t, a = n, s = r(() => i.variant === "toolbar" ? "inline-flex h-9 divide-x divide-slate-300 dark:divide-slate-600 rounded-md border border-slate-300 dark:border-slate-600 overflow-hidden" : "inline-flex rounded border border-slate-300 dark:border-slate-600 overflow-hidden"), c = r(() => i.variant === "toolbar" ? "flex items-center px-3.5 text-xs font-semibold uppercase tracking-wide transition-colors focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500" : `${i.variant === "wide" ? "px-4 py-2" : "px-3 py-2"} text-sm font-medium transition-colors border-l first:border-l-0 border-slate-300 dark:border-slate-600`), l = r(() => i.variant === "wide" ? "bg-emerald-600 text-white" : "bg-emerald-500 text-white");
2608
+ let i = t, a = n, s = r(() => i.variant === "toolbar" ? "inline-flex h-9 divide-x divide-slate-300 dark:divide-slate-600 rounded-md border border-slate-300 dark:border-slate-600 overflow-hidden" : "inline-flex rounded border border-slate-300 dark:border-slate-600 overflow-hidden"), c = r(() => i.variant === "toolbar" ? "flex items-center px-3.5 text-xs font-semibold uppercase tracking-wide transition-colors cursor-pointer focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500" : `${i.variant === "wide" ? "px-4 py-2" : "px-3 py-2"} text-sm font-medium transition-colors cursor-pointer border-l first:border-l-0 border-slate-300 dark:border-slate-600 focus:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-emerald-500`), l = r(() => i.variant === "wide" ? "bg-emerald-600 text-white" : "bg-emerald-500 text-white");
2600
2609
  function u(e) {
2601
2610
  let t = e.value === i.modelValue;
2602
- return i.optionClass ? i.optionClass(e, t) : t ? l.value : Er;
2611
+ return i.optionClass ? i.optionClass(e, t) : t ? l.value : Dr;
2603
2612
  }
2604
2613
  return (n, r) => (y(), o("div", {
2605
2614
  role: t.ariaLabel ? "group" : void 0,
@@ -2612,9 +2621,9 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2612
2621
  "aria-pressed": e.value === t.modelValue,
2613
2622
  title: e.title,
2614
2623
  onClick: (t) => a("update:modelValue", e.value)
2615
- }, T(e.label), 11, Tr))), 128))], 10, wr));
2624
+ }, T(e.label), 11, Er))), 128))], 10, Tr));
2616
2625
  }
2617
- }), Or = { class: "w-full text-sm" }, kr = { class: "bg-slate-50 dark:bg-slate-800/60 text-slate-600 dark:text-slate-300" }, Ar = { class: "text-left" }, jr = { key: 0 }, Mr = ["colspan"], Nr = /* @__PURE__ */ d({
2626
+ }), kr = { class: "w-full text-sm" }, Ar = { class: "bg-slate-50 dark:bg-slate-800/60 text-slate-600 dark:text-slate-300" }, jr = { class: "text-left" }, Mr = { key: 0 }, Nr = ["colspan"], Pr = /* @__PURE__ */ d({
2618
2627
  __name: "BaseTable",
2619
2628
  props: {
2620
2629
  columns: {},
@@ -2625,24 +2634,24 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2625
2634
  emptyText: { default: "No rows." }
2626
2635
  },
2627
2636
  setup(t) {
2628
- return (n, r) => (y(), o("table", Or, [s("thead", kr, [s("tr", Ar, [(y(!0), o(e, null, x(t.columns, (e, t) => (y(), o("th", {
2637
+ return (n, r) => (y(), o("table", kr, [s("thead", Ar, [s("tr", jr, [(y(!0), o(e, null, x(t.columns, (e, t) => (y(), o("th", {
2629
2638
  key: t,
2630
2639
  class: m(["px-4 py-3", e.align === "right" ? "text-right" : ""])
2631
- }, T(e.label), 3))), 128))])]), s("tbody", null, [t.empty ? (y(), o("tr", jr, [s("td", {
2640
+ }, T(e.label), 3))), 128))])]), s("tbody", null, [t.empty ? (y(), o("tr", Mr, [s("td", {
2632
2641
  colspan: t.columns.length,
2633
2642
  class: "px-4 py-12 text-center text-slate-500"
2634
- }, [S(n.$slots, "empty", {}, () => [l(T(t.emptyText), 1)])], 8, Mr)])) : a("", !0), S(n.$slots, "default")])]));
2643
+ }, [S(n.$slots, "empty", {}, () => [l(T(t.emptyText), 1)])], 8, Nr)])) : a("", !0), S(n.$slots, "default")])]));
2635
2644
  }
2636
- }), Pr = { class: "grid gap-3 md:grid-cols-2" }, Fr = {
2645
+ }), Fr = { class: "grid gap-3 md:grid-cols-2" }, Ir = {
2637
2646
  key: 0,
2638
2647
  class: "block text-[11px] uppercase tracking-wide text-slate-500 mb-1"
2639
- }, Ir = ["value"], Lr = {
2648
+ }, Lr = ["value"], Rr = {
2640
2649
  key: 2,
2641
2650
  class: "flex items-center gap-2 mt-4"
2642
- }, Rr = ["checked", "onChange"], zr = { class: "text-sm text-slate-900 dark:text-slate-100" }, Br = {
2651
+ }, zr = ["checked", "onChange"], Br = { class: "text-sm text-slate-900 dark:text-slate-100" }, Vr = {
2643
2652
  key: 4,
2644
2653
  class: "text-[11px] text-slate-400 mt-1"
2645
- }, Vr = /* @__PURE__ */ d({
2654
+ }, Hr = /* @__PURE__ */ d({
2646
2655
  __name: "BaseSpecFields",
2647
2656
  props: {
2648
2657
  specs: {},
@@ -2658,9 +2667,9 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2658
2667
  let n = parseFloat(t);
2659
2668
  r("update", e, Number.isNaN(n) ? t : n);
2660
2669
  }
2661
- return (n, u) => (y(), o("div", Pr, [(y(!0), o(e, null, x(t.specs, (u) => (y(), o("div", { key: u.key }, [
2662
- u.type === "boolean" ? a("", !0) : (y(), o("label", Fr, T(u.label), 1)),
2663
- u.type === "select" ? (y(), i(vr, {
2670
+ return (n, u) => (y(), o("div", Fr, [(y(!0), o(e, null, x(t.specs, (u) => (y(), o("div", { key: u.key }, [
2671
+ u.type === "boolean" ? a("", !0) : (y(), o("label", Ir, T(u.label), 1)),
2672
+ u.type === "select" ? (y(), i(yr, {
2664
2673
  key: 1,
2665
2674
  modelValue: String(t.params[u.key] ?? ""),
2666
2675
  "onUpdate:modelValue": (e) => r("update", u.key, e)
@@ -2668,14 +2677,14 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2668
2677
  default: M(() => [(y(!0), o(e, null, x(u.options ?? [], (e) => (y(), o("option", {
2669
2678
  key: e,
2670
2679
  value: e
2671
- }, T(e), 9, Ir))), 128))]),
2680
+ }, T(e), 9, Lr))), 128))]),
2672
2681
  _: 2
2673
- }, 1032, ["modelValue", "onUpdate:modelValue"])) : u.type === "boolean" ? (y(), o("label", Lr, [s("input", {
2682
+ }, 1032, ["modelValue", "onUpdate:modelValue"])) : u.type === "boolean" ? (y(), o("label", Rr, [s("input", {
2674
2683
  checked: !!t.params[u.key],
2675
2684
  type: "checkbox",
2676
2685
  class: "h-4 w-4",
2677
2686
  onChange: (e) => c(u.key, e)
2678
- }, null, 40, Rr), s("span", zr, T(u.label), 1)])) : (y(), i(gr, {
2687
+ }, null, 40, zr), s("span", Br, T(u.label), 1)])) : (y(), i(_r, {
2679
2688
  key: 3,
2680
2689
  modelValue: t.params[u.key],
2681
2690
  type: "number",
@@ -2688,14 +2697,38 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2688
2697
  "min",
2689
2698
  "onUpdate:modelValue"
2690
2699
  ])),
2691
- u.help ? (y(), o("p", Br, T(u.help), 1)) : a("", !0),
2700
+ u.help ? (y(), o("p", Vr, T(u.help), 1)) : a("", !0),
2692
2701
  S(n.$slots, "after", { spec: u })
2693
2702
  ]))), 128))]));
2694
2703
  }
2704
+ }), Ur = { class: "mt-1.5 space-y-0.5 px-1" }, Wr = { class: "text-slate-400 dark:text-slate-500" }, Gr = /* @__PURE__ */ d({
2705
+ __name: "BaseStatBreakdown",
2706
+ props: {
2707
+ items: {},
2708
+ currency: { default: "" },
2709
+ decimals: { default: 2 },
2710
+ signed: {
2711
+ type: Boolean,
2712
+ default: !1
2713
+ }
2714
+ },
2715
+ setup(t) {
2716
+ let n = t;
2717
+ function r(e) {
2718
+ return e == null ? "—" : `${e < 0 ? "-" : n.signed ? "+" : ""}${n.currency}${Math.abs(e).toFixed(n.decimals)}`;
2719
+ }
2720
+ function i(e) {
2721
+ return !n.signed || e == null ? "text-slate-500 dark:text-slate-400" : e >= 0 ? "text-emerald-600 dark:text-emerald-400" : "text-red-600 dark:text-red-400";
2722
+ }
2723
+ return (n, a) => (y(), o("div", Ur, [(y(!0), o(e, null, x(t.items, (e) => (y(), o("div", {
2724
+ key: e.label,
2725
+ class: "flex items-center justify-between text-[11px]"
2726
+ }, [s("span", Wr, T(e.label), 1), s("span", { class: m(["font-mono tabular-nums font-medium", i(e.value)]) }, T(r(e.value)), 3)]))), 128))]));
2727
+ }
2695
2728
  });
2696
2729
  //#endregion
2697
2730
  //#region src/composables/useDebounce.ts
2698
- function Hr(e, t = 300) {
2731
+ function Kr(e, t = 300) {
2699
2732
  let n = b(e.value), r = null;
2700
2733
  return j(e, (e) => {
2701
2734
  r && clearTimeout(r), r = setTimeout(() => {
@@ -2707,7 +2740,7 @@ function Hr(e, t = 300) {
2707
2740
  }
2708
2741
  //#endregion
2709
2742
  //#region src/composables/useToast.ts
2710
- function Ur(e = 3e3) {
2743
+ function qr(e = 3e3) {
2711
2744
  let t = b(!1), n = b(""), r = b(K.SUCCESS), i = null;
2712
2745
  function a() {
2713
2746
  i &&= (clearTimeout(i), null);
@@ -2728,16 +2761,16 @@ function Ur(e = 3e3) {
2728
2761
  }
2729
2762
  //#endregion
2730
2763
  //#region src/enums/BaseBadgeEnum.ts
2731
- var Wr = /* @__PURE__ */ function(e) {
2764
+ var Jr = /* @__PURE__ */ function(e) {
2732
2765
  return e.WIN = "WIN", e.LOSE = "LOSE", e;
2733
- }({}), Gr = {
2766
+ }({}), Yr = {
2734
2767
  GET: "bg-blue-600",
2735
2768
  POST: "bg-emerald-600",
2736
2769
  PUT: "bg-amber-600",
2737
2770
  DELETE: "bg-red-600",
2738
2771
  PATCH: "bg-purple-600",
2739
2772
  HEAD: "bg-gray-600"
2740
- }, Kr = {
2773
+ }, Xr = {
2741
2774
  GET: "bg-blue-500",
2742
2775
  POST: "bg-green-500",
2743
2776
  PUT: "bg-yellow-500",
@@ -2745,23 +2778,23 @@ var Wr = /* @__PURE__ */ function(e) {
2745
2778
  PATCH: "bg-purple-500",
2746
2779
  HEAD: "bg-gray-500"
2747
2780
  };
2748
- function qr(e) {
2749
- return e ? Gr[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
2781
+ function Zr(e) {
2782
+ return e ? Yr[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
2750
2783
  }
2751
- function Jr(e) {
2752
- return e ? Kr[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
2784
+ function Qr(e) {
2785
+ return e ? Xr[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
2753
2786
  }
2754
- function Yr(e) {
2787
+ function $r(e) {
2755
2788
  let t = e ?? 0;
2756
2789
  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";
2757
2790
  }
2758
- function Xr(e, t) {
2791
+ function ei(e, t) {
2759
2792
  let n = e ?? 200;
2760
2793
  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";
2761
2794
  }
2762
2795
  //#endregion
2763
2796
  //#region src/utils/sanitizeHtml.ts
2764
- var Zr = /* @__PURE__ */ new Set([
2797
+ var ti = /* @__PURE__ */ new Set([
2765
2798
  "A",
2766
2799
  "B",
2767
2800
  "STRONG",
@@ -2776,7 +2809,7 @@ var Zr = /* @__PURE__ */ new Set([
2776
2809
  "LI",
2777
2810
  "SPAN",
2778
2811
  "DIV"
2779
- ]), Qr = /* @__PURE__ */ new Set([
2812
+ ]), ni = /* @__PURE__ */ new Set([
2780
2813
  "SCRIPT",
2781
2814
  "STYLE",
2782
2815
  "IFRAME",
@@ -2784,53 +2817,53 @@ var Zr = /* @__PURE__ */ new Set([
2784
2817
  "EMBED",
2785
2818
  "NOSCRIPT",
2786
2819
  "TEMPLATE"
2787
- ]), $r = { A: /* @__PURE__ */ new Set(["href", "title"]) };
2788
- function ei(e) {
2820
+ ]), ri = { A: /* @__PURE__ */ new Set(["href", "title"]) };
2821
+ function ii(e) {
2789
2822
  let t = e.trim().toLowerCase();
2790
2823
  return t.startsWith("http://") || t.startsWith("https://") || t.startsWith("mailto:") || t.startsWith("tel:") || t.startsWith("/") || t.startsWith("#") || t === "";
2791
2824
  }
2792
- function ti(e) {
2825
+ function ai(e) {
2793
2826
  if (e.nodeType !== Node.ELEMENT_NODE) return;
2794
2827
  let t = e, n = t.tagName.toUpperCase();
2795
- if (!Zr.has(n)) {
2796
- Qr.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2828
+ if (!ti.has(n)) {
2829
+ ni.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2797
2830
  return;
2798
2831
  }
2799
- let r = $r[n] ?? /* @__PURE__ */ new Set();
2832
+ let r = ri[n] ?? /* @__PURE__ */ new Set();
2800
2833
  for (let e of Array.from(t.attributes)) {
2801
2834
  if (!r.has(e.name.toLowerCase())) {
2802
2835
  t.removeAttribute(e.name);
2803
2836
  continue;
2804
2837
  }
2805
- n === "A" && e.name.toLowerCase() === "href" && !ei(e.value) && t.removeAttribute(e.name);
2838
+ n === "A" && e.name.toLowerCase() === "href" && !ii(e.value) && t.removeAttribute(e.name);
2806
2839
  }
2807
2840
  n === "A" && t.hasAttribute("href") && (t.setAttribute("rel", "noopener noreferrer"), t.setAttribute("target", "_blank"));
2808
- for (let e of Array.from(t.childNodes)) ti(e);
2841
+ for (let e of Array.from(t.childNodes)) ai(e);
2809
2842
  }
2810
- function ni(e) {
2843
+ function oi(e) {
2811
2844
  if (!e) return "";
2812
2845
  let t = new DOMParser().parseFromString(`<div>${e}</div>`, "text/html").body.firstElementChild;
2813
2846
  if (!t) return "";
2814
- for (let e of Array.from(t.childNodes)) ti(e);
2847
+ for (let e of Array.from(t.childNodes)) ai(e);
2815
2848
  return t.innerHTML;
2816
2849
  }
2817
2850
  //#endregion
2818
2851
  //#region src/utils/format.ts
2819
- var ri = "—";
2820
- function ii(e, t = 4) {
2821
- if (e == null || typeof e == "string" && e.trim() === "") return ri;
2852
+ var si = "—";
2853
+ function ci(e, t = 4) {
2854
+ if (e == null || typeof e == "string" && e.trim() === "") return si;
2822
2855
  let n = typeof e == "string" ? Number(e) : e;
2823
2856
  return isFinite(n) ? n.toLocaleString(void 0, {
2824
2857
  minimumFractionDigits: t,
2825
2858
  maximumFractionDigits: t
2826
- }) : ri;
2859
+ }) : si;
2827
2860
  }
2828
- function ai(e) {
2829
- if (e == null || e === "") return ri;
2861
+ function li(e) {
2862
+ if (e == null || e === "") return si;
2830
2863
  let t = new Date(e);
2831
2864
  return isNaN(t.getTime()) ? String(e) : t.toLocaleString();
2832
2865
  }
2833
- function oi(e) {
2866
+ function ui(e) {
2834
2867
  return new Date(e).toLocaleString(void 0, {
2835
2868
  month: "short",
2836
2869
  day: "numeric",
@@ -2838,13 +2871,13 @@ function oi(e) {
2838
2871
  minute: "2-digit"
2839
2872
  });
2840
2873
  }
2841
- function si(e) {
2874
+ function di(e) {
2842
2875
  return new Date(e).toLocaleDateString(void 0, {
2843
2876
  month: "short",
2844
2877
  day: "numeric"
2845
2878
  });
2846
2879
  }
2847
- function ci(e) {
2880
+ function fi(e) {
2848
2881
  if (!isFinite(e) || e === 0) return e.toFixed(2);
2849
2882
  let t = Math.abs(e), n = 2;
2850
2883
  return t < 1e-4 ? n = 8 : t < .01 ? n = 6 : t < 1 ? n = 4 : t < 100 && (n = 3), e.toLocaleString(void 0, {
@@ -2852,15 +2885,20 @@ function ci(e) {
2852
2885
  maximumFractionDigits: n
2853
2886
  });
2854
2887
  }
2855
- function li(e, t = 2) {
2888
+ function pi(e, t = 2) {
2856
2889
  return `${e >= 0 ? "+" : ""}${e.toFixed(t)}%`;
2857
2890
  }
2858
- function ui(e) {
2891
+ function mi(e) {
2859
2892
  return `${e < 0 ? "-" : "+"}$${Math.abs(e).toFixed(2)}`;
2860
2893
  }
2894
+ function hi(e, t = 2) {
2895
+ if (e == null || !isFinite(e)) return si;
2896
+ let n = Math.floor(Math.max(0, e) / 6e4), r = Math.floor(n / 1440), i = Math.floor(n % 1440 / 60), a = n % 60, o = [];
2897
+ return r > 0 && o.push(`${r}d`), (r > 0 || i > 0) && o.push(`${i}h`), o.push(`${a}m`), o.slice(0, t).join(" ");
2898
+ }
2861
2899
  //#endregion
2862
2900
  //#region src/utils/pnl.ts
2863
- function di(e) {
2901
+ function gi(e) {
2864
2902
  if (e.buyPrice == null || e.lastPrice == null || e.filledQty == null) return {
2865
2903
  pnlUsd: null,
2866
2904
  pnlPct: null
@@ -2875,4 +2913,4 @@ function di(e) {
2875
2913
  };
2876
2914
  }
2877
2915
  //#endregion
2878
- export { I as AlertEnum, Un as BaseActionButton, Oe as BaseAlert, Nn as BaseAppLayout, R as BaseBadge, Wr as BaseBadgeEnum, Ne as BaseBreadcrumb, Ge as BaseButton, z as BaseButtonEnum, B as BaseButtonSizeEnum, Vt as BaseCollapsibleSection, Gt as BaseConfirmModal, Gn as BaseCopyButton, Cr as BaseDropdown, An as BaseEntityPickerModal, Yn as BaseGoogleSignInButton, gr as BaseInput, Ye as BaseLine, Xe as BaseLoginEnum, sr as BaseLoginForm, Qe as BaseLogo, G as BaseLogoEnum, at as BaseModal, $e as BaseModalEnum, Rt as BaseModalShell, Qt as BaseNotFoundPage, mr as BaseNotificationPanel, Ln as BasePageHeader, ot as BaseRow, Dr as BaseSegmentedControl, vr as BaseSelect, _n as BaseSidebar, Vr as BaseSpecFields, st as BaseSpinner, Nr as BaseTable, Yt as BaseTextInputModal, ut as BaseToast, K as BaseToastEnum, Bn as BaseToolbarButton, ft as ColoredSquares, L as ColorsEnums, ht as EarningsCard, bt as EuroAmount, W as LineEnum, wt as Pagination, q as PositioningEnum, kt as TrendArrow, di as computePnL, ai as fmtDate, si as fmtDateShort, oi as fmtDateTime, ii as fmtNumber, li as fmtPct, ci as fmtPrice, ui as fmtUsd, Te as getBaseColor, Ee as getBaseColorOf, Ie as initTheme, ei as isSafeHref, Jr as methodBadgeBright, qr as methodBadgeSolid, ni as sanitizeHtml, Yr as statusBadgeSolid, Xr as statusBadgeTinted, Hr as useDebouncedRef, Y as useEscapeKey, $t as useMobileSidebar, on as useNotifications, rn as useSidebarCollapse, U as useTheme, J as useThemeClasses, Ur as useToast };
2916
+ export { I as AlertEnum, Wn as BaseActionButton, Oe as BaseAlert, Pn as BaseAppLayout, R as BaseBadge, Jr as BaseBadgeEnum, Ne as BaseBreadcrumb, Ge as BaseButton, z as BaseButtonEnum, B as BaseButtonSizeEnum, Ht as BaseCollapsibleSection, Kt as BaseConfirmModal, Kn as BaseCopyButton, wr as BaseDropdown, jn as BaseEntityPickerModal, Xn as BaseGoogleSignInButton, _r as BaseInput, Ye as BaseLine, Xe as BaseLoginEnum, cr as BaseLoginForm, Qe as BaseLogo, G as BaseLogoEnum, at as BaseModal, $e as BaseModalEnum, zt as BaseModalShell, $t as BaseNotFoundPage, hr as BaseNotificationPanel, Rn as BasePageHeader, ot as BaseRow, Or as BaseSegmentedControl, yr as BaseSelect, vn as BaseSidebar, Hr as BaseSpecFields, st as BaseSpinner, Gr as BaseStatBreakdown, Pr as BaseTable, Xt as BaseTextInputModal, ut as BaseToast, K as BaseToastEnum, Vn as BaseToolbarButton, ft as ColoredSquares, L as ColorsEnums, ht as EarningsCard, bt as EuroAmount, W as LineEnum, Tt as Pagination, q as PositioningEnum, At as TrendArrow, gi as computePnL, li as fmtDate, di as fmtDateShort, ui as fmtDateTime, hi as fmtDuration, ci as fmtNumber, pi as fmtPct, fi as fmtPrice, mi as fmtUsd, Te as getBaseColor, Ee as getBaseColorOf, Ie as initTheme, ii as isSafeHref, Qr as methodBadgeBright, Zr as methodBadgeSolid, oi as sanitizeHtml, $r as statusBadgeSolid, ei as statusBadgeTinted, Kr as useDebouncedRef, Y as useEscapeKey, en as useMobileSidebar, sn as useNotifications, an as useSidebarCollapse, U as useTheme, J as useThemeClasses, qr as useToast };