mgv-backoffice 1.24.0 → 1.25.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: {},
@@ -1249,10 +1256,10 @@ var At = { class: "flex items-start gap-4 min-w-0" }, jt = { class: "flex-1 min-
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
1257
  return (t, n) => (y(), o("section", { class: m(["rounded-xl border overflow-hidden 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]),
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", [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);
@@ -2561,7 +2570,7 @@ var sn = ["aria-label", "aria-expanded"], cn = { class: "flex flex-col h-full" }
2561
2570
  }, [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), {
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,
@@ -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,14 @@ 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
  }
2695
2704
  });
2696
2705
  //#endregion
2697
2706
  //#region src/composables/useDebounce.ts
2698
- function Hr(e, t = 300) {
2707
+ function Ur(e, t = 300) {
2699
2708
  let n = b(e.value), r = null;
2700
2709
  return j(e, (e) => {
2701
2710
  r && clearTimeout(r), r = setTimeout(() => {
@@ -2707,7 +2716,7 @@ function Hr(e, t = 300) {
2707
2716
  }
2708
2717
  //#endregion
2709
2718
  //#region src/composables/useToast.ts
2710
- function Ur(e = 3e3) {
2719
+ function Wr(e = 3e3) {
2711
2720
  let t = b(!1), n = b(""), r = b(K.SUCCESS), i = null;
2712
2721
  function a() {
2713
2722
  i &&= (clearTimeout(i), null);
@@ -2728,16 +2737,16 @@ function Ur(e = 3e3) {
2728
2737
  }
2729
2738
  //#endregion
2730
2739
  //#region src/enums/BaseBadgeEnum.ts
2731
- var Wr = /* @__PURE__ */ function(e) {
2740
+ var Gr = /* @__PURE__ */ function(e) {
2732
2741
  return e.WIN = "WIN", e.LOSE = "LOSE", e;
2733
- }({}), Gr = {
2742
+ }({}), Kr = {
2734
2743
  GET: "bg-blue-600",
2735
2744
  POST: "bg-emerald-600",
2736
2745
  PUT: "bg-amber-600",
2737
2746
  DELETE: "bg-red-600",
2738
2747
  PATCH: "bg-purple-600",
2739
2748
  HEAD: "bg-gray-600"
2740
- }, Kr = {
2749
+ }, qr = {
2741
2750
  GET: "bg-blue-500",
2742
2751
  POST: "bg-green-500",
2743
2752
  PUT: "bg-yellow-500",
@@ -2745,23 +2754,23 @@ var Wr = /* @__PURE__ */ function(e) {
2745
2754
  PATCH: "bg-purple-500",
2746
2755
  HEAD: "bg-gray-500"
2747
2756
  };
2748
- function qr(e) {
2749
- return e ? Gr[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
2750
- }
2751
2757
  function Jr(e) {
2752
- return e ? Kr[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
2758
+ return e ? Kr[e.toUpperCase()] ?? "bg-gray-600" : "bg-gray-600";
2753
2759
  }
2754
2760
  function Yr(e) {
2761
+ return e ? qr[e.toUpperCase()] ?? "bg-gray-500" : "bg-gray-500";
2762
+ }
2763
+ function Xr(e) {
2755
2764
  let t = e ?? 0;
2756
2765
  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
2766
  }
2758
- function Xr(e, t) {
2767
+ function Zr(e, t) {
2759
2768
  let n = e ?? 200;
2760
2769
  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
2770
  }
2762
2771
  //#endregion
2763
2772
  //#region src/utils/sanitizeHtml.ts
2764
- var Zr = /* @__PURE__ */ new Set([
2773
+ var Qr = /* @__PURE__ */ new Set([
2765
2774
  "A",
2766
2775
  "B",
2767
2776
  "STRONG",
@@ -2776,7 +2785,7 @@ var Zr = /* @__PURE__ */ new Set([
2776
2785
  "LI",
2777
2786
  "SPAN",
2778
2787
  "DIV"
2779
- ]), Qr = /* @__PURE__ */ new Set([
2788
+ ]), $r = /* @__PURE__ */ new Set([
2780
2789
  "SCRIPT",
2781
2790
  "STYLE",
2782
2791
  "IFRAME",
@@ -2784,53 +2793,53 @@ var Zr = /* @__PURE__ */ new Set([
2784
2793
  "EMBED",
2785
2794
  "NOSCRIPT",
2786
2795
  "TEMPLATE"
2787
- ]), $r = { A: /* @__PURE__ */ new Set(["href", "title"]) };
2788
- function ei(e) {
2796
+ ]), ei = { A: /* @__PURE__ */ new Set(["href", "title"]) };
2797
+ function ti(e) {
2789
2798
  let t = e.trim().toLowerCase();
2790
2799
  return t.startsWith("http://") || t.startsWith("https://") || t.startsWith("mailto:") || t.startsWith("tel:") || t.startsWith("/") || t.startsWith("#") || t === "";
2791
2800
  }
2792
- function ti(e) {
2801
+ function ni(e) {
2793
2802
  if (e.nodeType !== Node.ELEMENT_NODE) return;
2794
2803
  let t = e, n = t.tagName.toUpperCase();
2795
- if (!Zr.has(n)) {
2796
- Qr.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2804
+ if (!Qr.has(n)) {
2805
+ $r.has(n) ? t.remove() : t.replaceWith(document.createTextNode(t.textContent ?? ""));
2797
2806
  return;
2798
2807
  }
2799
- let r = $r[n] ?? /* @__PURE__ */ new Set();
2808
+ let r = ei[n] ?? /* @__PURE__ */ new Set();
2800
2809
  for (let e of Array.from(t.attributes)) {
2801
2810
  if (!r.has(e.name.toLowerCase())) {
2802
2811
  t.removeAttribute(e.name);
2803
2812
  continue;
2804
2813
  }
2805
- n === "A" && e.name.toLowerCase() === "href" && !ei(e.value) && t.removeAttribute(e.name);
2814
+ n === "A" && e.name.toLowerCase() === "href" && !ti(e.value) && t.removeAttribute(e.name);
2806
2815
  }
2807
2816
  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);
2817
+ for (let e of Array.from(t.childNodes)) ni(e);
2809
2818
  }
2810
- function ni(e) {
2819
+ function ri(e) {
2811
2820
  if (!e) return "";
2812
2821
  let t = new DOMParser().parseFromString(`<div>${e}</div>`, "text/html").body.firstElementChild;
2813
2822
  if (!t) return "";
2814
- for (let e of Array.from(t.childNodes)) ti(e);
2823
+ for (let e of Array.from(t.childNodes)) ni(e);
2815
2824
  return t.innerHTML;
2816
2825
  }
2817
2826
  //#endregion
2818
2827
  //#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;
2828
+ var ii = "—";
2829
+ function ai(e, t = 4) {
2830
+ if (e == null || typeof e == "string" && e.trim() === "") return ii;
2822
2831
  let n = typeof e == "string" ? Number(e) : e;
2823
2832
  return isFinite(n) ? n.toLocaleString(void 0, {
2824
2833
  minimumFractionDigits: t,
2825
2834
  maximumFractionDigits: t
2826
- }) : ri;
2835
+ }) : ii;
2827
2836
  }
2828
- function ai(e) {
2829
- if (e == null || e === "") return ri;
2837
+ function oi(e) {
2838
+ if (e == null || e === "") return ii;
2830
2839
  let t = new Date(e);
2831
2840
  return isNaN(t.getTime()) ? String(e) : t.toLocaleString();
2832
2841
  }
2833
- function oi(e) {
2842
+ function si(e) {
2834
2843
  return new Date(e).toLocaleString(void 0, {
2835
2844
  month: "short",
2836
2845
  day: "numeric",
@@ -2838,13 +2847,13 @@ function oi(e) {
2838
2847
  minute: "2-digit"
2839
2848
  });
2840
2849
  }
2841
- function si(e) {
2850
+ function ci(e) {
2842
2851
  return new Date(e).toLocaleDateString(void 0, {
2843
2852
  month: "short",
2844
2853
  day: "numeric"
2845
2854
  });
2846
2855
  }
2847
- function ci(e) {
2856
+ function li(e) {
2848
2857
  if (!isFinite(e) || e === 0) return e.toFixed(2);
2849
2858
  let t = Math.abs(e), n = 2;
2850
2859
  return t < 1e-4 ? n = 8 : t < .01 ? n = 6 : t < 1 ? n = 4 : t < 100 && (n = 3), e.toLocaleString(void 0, {
@@ -2852,15 +2861,15 @@ function ci(e) {
2852
2861
  maximumFractionDigits: n
2853
2862
  });
2854
2863
  }
2855
- function li(e, t = 2) {
2864
+ function ui(e, t = 2) {
2856
2865
  return `${e >= 0 ? "+" : ""}${e.toFixed(t)}%`;
2857
2866
  }
2858
- function ui(e) {
2867
+ function di(e) {
2859
2868
  return `${e < 0 ? "-" : "+"}$${Math.abs(e).toFixed(2)}`;
2860
2869
  }
2861
2870
  //#endregion
2862
2871
  //#region src/utils/pnl.ts
2863
- function di(e) {
2872
+ function fi(e) {
2864
2873
  if (e.buyPrice == null || e.lastPrice == null || e.filledQty == null) return {
2865
2874
  pnlUsd: null,
2866
2875
  pnlPct: null
@@ -2875,4 +2884,4 @@ function di(e) {
2875
2884
  };
2876
2885
  }
2877
2886
  //#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 };
2887
+ export { I as AlertEnum, Wn as BaseActionButton, Oe as BaseAlert, Pn as BaseAppLayout, R as BaseBadge, Gr 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, 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, fi as computePnL, oi as fmtDate, ci as fmtDateShort, si as fmtDateTime, ai as fmtNumber, ui as fmtPct, li as fmtPrice, di as fmtUsd, Te as getBaseColor, Ee as getBaseColorOf, Ie as initTheme, ti as isSafeHref, Yr as methodBadgeBright, Jr as methodBadgeSolid, ri as sanitizeHtml, Xr as statusBadgeSolid, Zr as statusBadgeTinted, Ur as useDebouncedRef, Y as useEscapeKey, en as useMobileSidebar, sn as useNotifications, an as useSidebarCollapse, U as useTheme, J as useThemeClasses, Wr as useToast };