@zealsolutions/zeal-ui 1.0.0-alpha.364 → 1.0.0-alpha.366

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.
@@ -1,14 +1,14 @@
1
- import { openBlock as a, createElementBlock as i, createVNode as I, createElementVNode as r, createTextVNode as B, mergeModels as le, useModel as _e, getCurrentInstance as fe, ref as k, computed as C, watch as q, nextTick as se, onMounted as Se, onBeforeUnmount as Me, createBlock as T, Teleport as Ie, withModifiers as E, withDirectives as Y, vModelText as Ae, createCommentVNode as m, normalizeClass as M, toDisplayString as b, Fragment as N, renderList as L, unref as W, normalizeStyle as G, pushScopeId as Te, popScopeId as Ne, Transition as xe, withCtx as J, resolveDynamicComponent as he, vShow as ye, renderSlot as V } from "vue";
1
+ import { openBlock as a, createElementBlock as i, createVNode as I, createElementVNode as r, createTextVNode as B, mergeModels as le, useModel as $e, getCurrentInstance as fe, ref as k, computed as C, watch as q, nextTick as se, onMounted as Se, onBeforeUnmount as Me, createBlock as A, Teleport as Ie, withModifiers as H, withDirectives as Y, vModelText as Te, createCommentVNode as v, normalizeClass as M, toDisplayString as b, Fragment as N, renderList as O, unref as W, normalizeStyle as G, pushScopeId as Ae, popScopeId as Ne, Transition as xe, withCtx as J, resolveDynamicComponent as he, vShow as ye, renderSlot as V } from "vue";
2
2
  import ze from "../../HouseIcon-BxmNyxvv.js";
3
- import Ee from "../../ArrowLeftIcon-Cgsy08pY.js";
4
- import { _ as He } from "../../Tooltip-CQjz2EXM.js";
3
+ import He from "../../ArrowLeftIcon-Cgsy08pY.js";
4
+ import { _ as Ee } from "../../Tooltip-CQjz2EXM.js";
5
5
  import ve from "../../MagnifyingGlassIcon-ChYNIA-H.js";
6
- import { _ as Oe } from "../../_plugin-vue_export-helper-CHgC5LLL.js";
6
+ import { _ as Le } from "../../_plugin-vue_export-helper-CHgC5LLL.js";
7
7
  import { o as me } from "../../index-D9ihCfA2.js";
8
8
  import ie from "../../BellIcon-lK5EZXNf.js";
9
- import Le from "../../CircleCheckIcon-CA15yXgI.js";
9
+ import Oe from "../../CircleCheckIcon-CA15yXgI.js";
10
10
  import je from "../../XMarkIcon-DKJ_--uA.js";
11
- const De = /* @__PURE__ */ r("span", { class: "hidden whitespace-nowrap sm:inline" }, "Search", -1), Pe = /* @__PURE__ */ r("kbd", { class: "zui-search-kbd hidden items-center gap-px rounded border-[1px] border-surface-raised/40 bg-surface-raised/15 px-[5px] py-0.5 font-sans text-[11px] font-bold leading-none text-surface-raised/90 sm:inline-flex" }, [
11
+ const De = /* @__PURE__ */ r("span", { class: "hidden whitespace-nowrap sm:inline" }, "Search", -1), Pe = /* @__PURE__ */ r("kbd", { class: "zui-search-kbd hidden items-center gap-px rounded border-[1px] border-white/40 bg-white/15 px-[5px] py-0.5 font-sans text-[11px] font-bold leading-none text-white/90 sm:inline-flex" }, [
12
12
  /* @__PURE__ */ r("span", null, "⌘"),
13
13
  /* @__PURE__ */ B("K ")
14
14
  ], -1), Ue = {
@@ -17,12 +17,12 @@ const De = /* @__PURE__ */ r("span", { class: "hidden whitespace-nowrap sm:inlin
17
17
  setup(e) {
18
18
  return (l, n) => (a(), i("button", {
19
19
  type: "button",
20
- class: "zui-search-pill inline-flex h-[34px] cursor-pointer items-center justify-center gap-[7px] rounded-lg border-[1px] border-solid border-content bg-content pl-[11px] pr-[9px] font-sans text-[13px] font-semibold text-surface-raised transition-[background-color,border-color,box-shadow] duration-150 hover:border-content-muted hover:bg-content-muted hover:shadow-[0_1px_3px_rgba(20,40,45,0.18)] focus:border-content-muted focus:bg-content-muted focus:outline-none",
20
+ class: "zui-search-pill inline-flex h-[34px] cursor-pointer items-center justify-center gap-[7px] rounded-lg border-[1px] border-solid border-proclusteal-900 bg-proclusteal-900 pl-[11px] pr-[9px] font-sans text-[13px] font-semibold text-white transition-[border-color,box-shadow] duration-150 hover:border-proclusteal-950 hover:shadow-[0_1px_3px_rgba(20,40,45,0.25)] focus:border-proclusteal-950 focus:outline-none",
21
21
  title: "Search (Ctrl K)",
22
22
  "aria-label": "Search (Ctrl K)",
23
23
  onClick: n[0] || (n[0] = (h) => l.$emit("click"))
24
24
  }, [
25
- I(ve, { class: "!h-[15px] !w-[15px] flex-none text-surface-raised" }),
25
+ I(ve, { class: "!h-[15px] !w-[15px] flex-none text-white" }),
26
26
  De,
27
27
  Pe
28
28
  ]));
@@ -129,7 +129,7 @@ function Fe() {
129
129
  }
130
130
  return [];
131
131
  }
132
- const X = (e) => (Te("data-v-24311187"), e = e(), Ne(), e), Ye = { class: "zui-search-field flex items-center gap-2.5 border-b-[1px] border-proclusteal-200 dark:border-line px-4 py-3.5" }, Je = ["placeholder"], Qe = {
132
+ const X = (e) => (Ae("data-v-7b7d8437"), e = e(), Ne(), e), Ye = { class: "zui-search-field flex items-center gap-2.5 border-b-[1px] border-proclusteal-200 dark:border-line px-4 py-3.5" }, Je = ["placeholder"], Qe = {
133
133
  key: 0,
134
134
  class: "px-[18px] pb-0.5 pt-3.5 text-[15px] font-extrabold text-[#1e262c] dark:text-content"
135
135
  }, Xe = {
@@ -153,7 +153,7 @@ const X = (e) => (Te("data-v-24311187"), e = e(), Ne(), e), Ye = { class: "zui-s
153
153
  r: "10"
154
154
  }),
155
155
  /* @__PURE__ */ r("polyline", { points: "12 6 12 12 16 14" })
156
- ], -1)), rt = { class: "min-w-0 flex-1 truncate" }, lt = { class: "zui-search-group sticky top-0 z-[1] border-t-[1px] border-proclusteal-200 dark:border-line bg-proclusteal-150 dark:bg-surface px-[18px] py-2 text-[12px] font-extrabold tracking-[0.3px] text-proclusteal-700 dark:text-content" }, st = { class: "ml-0.5 text-[#667079] dark:text-content-muted" }, it = ["href", "target", "rel", "data-row-idx", "onClick", "onMouseenter"], ct = ["innerHTML"], ut = { class: "min-w-0 flex-1" }, dt = ["innerHTML"], pt = ["innerHTML"], ft = /* @__PURE__ */ X(() => /* @__PURE__ */ r("svg", {
156
+ ], -1)), rt = { class: "min-w-0 flex-1 truncate" }, lt = { class: "zui-search-group sticky top-0 z-[1] border-t-[1px] border-proclusteal-200 dark:border-line bg-proclusteal-150 dark:bg-surface px-[18px] py-2 text-[12px] font-extrabold tracking-[0.3px] text-proclusteal-700 dark:text-content" }, st = { class: "ml-0.5 text-[#667079] dark:text-content-muted" }, it = ["href", "target", "rel", "data-row-idx", "onClick", "onMouseenter"], ct = ["innerHTML"], ut = { class: "min-w-0 flex-1" }, dt = { class: "flex min-w-0 items-center gap-[6px]" }, pt = ["aria-label", "innerHTML"], ft = ["innerHTML"], xt = ["innerHTML"], ht = /* @__PURE__ */ X(() => /* @__PURE__ */ r("svg", {
157
157
  class: "h-4 w-4 flex-none text-[#c2cad1] dark:text-content-muted",
158
158
  viewBox: "0 0 24 24",
159
159
  fill: "none",
@@ -163,7 +163,7 @@ const X = (e) => (Te("data-v-24311187"), e = e(), Ne(), e), Ye = { class: "zui-s
163
163
  "stroke-linejoin": "round"
164
164
  }, [
165
165
  /* @__PURE__ */ r("polyline", { points: "9 18 15 12 9 6" })
166
- ], -1)), ue = "zui-search-chip mb-2 mr-2 inline-flex cursor-pointer items-center gap-[7px] rounded-[20px] border-[1px] border-[#dde3e8] dark:border-line bg-[#f4f6f8] dark:bg-surface px-3.5 py-1.5 text-[13px] font-bold text-proclusteal-700 dark:text-content hover:border-proclusteal-950 dark:hover:border-focus", de = "!border-proclusteal-950 !bg-proclusteal-950 !text-white", K = "zui-search-state px-5 py-[26px] text-center text-[13px] font-medium text-[#667079] dark:text-content-muted", xt = {
166
+ ], -1)), ue = "zui-search-chip mb-2 mr-2 inline-flex cursor-pointer items-center gap-[7px] rounded-[20px] border-[1px] border-[#dde3e8] dark:border-line bg-[#f4f6f8] dark:bg-surface px-3.5 py-1.5 text-[13px] font-bold text-proclusteal-700 dark:text-content hover:border-proclusteal-950 dark:hover:border-focus", de = "!border-proclusteal-950 !bg-proclusteal-950 !text-white", K = "zui-search-state px-5 py-[26px] text-center text-[13px] font-medium text-[#667079] dark:text-content-muted", yt = {
167
167
  __name: "GlobalSearchModal",
168
168
  props: /* @__PURE__ */ le({
169
169
  searchProvider: {
@@ -192,100 +192,109 @@ const X = (e) => (Te("data-v-24311187"), e = e(), Ne(), e), Ye = { class: "zui-s
192
192
  }),
193
193
  emits: /* @__PURE__ */ le(["navigate"], ["update:open"]),
194
194
  setup(e, { emit: l }) {
195
- const n = e, h = l, f = _e(e, "open"), y = fe(), w = k(null), _ = k(null), A = k(null), g = k(""), $ = k(""), v = k([]), x = k("all"), o = k("zero"), u = k(-1), p = k([]);
196
- let S = null, H = 0, D = null, z = null;
197
- const Z = C(() => Ke($.value)), ee = (t) => Re(t, n.types), te = C(() => {
195
+ const n = e, h = l, f = $e(e, "open"), y = fe(), w = k(null), $ = k(null), T = k(null), g = k(""), _ = k(""), m = k([]), x = k("all"), o = k("zero"), d = k(-1), p = k([]);
196
+ let S = null, E = 0, D = null, z = null;
197
+ const Z = C(() => Ke(_.value)), ee = (t) => Re(t, n.types), te = C(() => {
198
198
  let t = 0;
199
- return v.value.filter((c) => x.value === "all" || c.type === x.value).map((c) => {
200
- const s = ee(c.type);
199
+ return m.value.filter((u) => x.value === "all" || u.type === x.value).map((u) => {
200
+ const s = ee(u.type);
201
201
  return {
202
- type: c.type,
202
+ type: u.type,
203
203
  label: s.label,
204
- items: c.items.map((d) => ({
205
- url: j(d.Url),
206
- titleHtml: ce(d.Title, Z.value),
207
- subtitleHtml: ce(d.Subtitle, Z.value),
208
- tileColour: be(d.Colour) || s.colour,
209
- // #518: the item's own kind wins, the group's icon is the fallback.
210
- tileIcon: qe(d.Kind, s.icon),
204
+ items: u.items.map((c) => ({
205
+ url: j(c.Url),
206
+ titleHtml: ce(c.Title, Z.value),
207
+ subtitleHtml: ce(c.Subtitle, Z.value),
208
+ tileColour: be(c.Colour) || s.colour,
209
+ // #518, REVISED 2026-09-26 (user: "the main icon to be Ref Library and then a
210
+ // small icon next to the name to show what type of document it is"). The tile
211
+ // carries the GROUP icon again - it is what tells the reader which part of
212
+ // Proclus a hit came from, and the first revision threw that away by putting the
213
+ // file type there instead.
214
+ tileIcon: s.icon,
215
+ // The file type, as a small badge beside the title. `null` fallback rather than
216
+ // the group icon: an item with no kind must render NO badge, not a second copy
217
+ // of the tile icon next to its own name.
218
+ kindIcon: qe(c.Kind, null),
219
+ kindLabel: typeof c.Kind == "string" ? c.Kind : "",
211
220
  // #519: a file opens in a new tab so the search - and whatever the user was
212
221
  // doing behind it - is still there when they close the document. The ITEM may
213
222
  // override its group, because one group can hold both files and pages.
214
- newWindow: d.NewWindow === !0 || d.NewWindow !== !1 && s.newWindow === !0,
223
+ newWindow: c.NewWindow === !0 || c.NewWindow !== !1 && s.newWindow === !0,
215
224
  flatIdx: t++
216
225
  }))
217
226
  };
218
227
  });
219
- }), ne = C(() => te.value.flatMap((t) => t.items)), ge = C(() => v.value.reduce((t, c) => t + c.items.length, 0));
228
+ }), ne = C(() => te.value.flatMap((t) => t.items)), ge = C(() => m.value.reduce((t, u) => t + u.items.length, 0));
220
229
  function R(t) {
221
- const c = ne.value;
222
- if (!c.length) {
223
- u.value = -1;
230
+ const u = ne.value;
231
+ if (!u.length) {
232
+ d.value = -1;
224
233
  return;
225
234
  }
226
- u.value = Math.min(Math.max(t, 0), c.length - 1), se(() => {
227
- var d;
228
- const s = (d = A.value) == null ? void 0 : d.querySelector(`[data-row-idx="${u.value}"]`);
235
+ d.value = Math.min(Math.max(t, 0), u.length - 1), se(() => {
236
+ var c;
237
+ const s = (c = T.value) == null ? void 0 : c.querySelector(`[data-row-idx="${d.value}"]`);
229
238
  s == null || s.scrollIntoView({ block: "nearest" });
230
239
  });
231
240
  }
232
241
  function oe(t) {
233
- var c;
234
- x.value = t, R(0), (c = w.value) == null || c.focus();
242
+ var u;
243
+ x.value = t, R(0), (u = w.value) == null || u.focus();
235
244
  }
236
- function ae(t, c = !1) {
237
- var s, d;
245
+ function ae(t, u = !1) {
246
+ var s, c;
238
247
  if (t) {
239
- if (c) {
240
- window.open(t, "_blank", "noopener"), O();
248
+ if (u) {
249
+ window.open(t, "_blank", "noopener"), L();
241
250
  return;
242
251
  }
243
- h("navigate", t), (d = (s = y == null ? void 0 : y.vnode) == null ? void 0 : s.props) != null && d.onNavigate || (window.location.href = t), O();
252
+ h("navigate", t), (c = (s = y == null ? void 0 : y.vnode) == null ? void 0 : s.props) != null && c.onNavigate || (window.location.href = t), L();
244
253
  }
245
254
  }
246
- function O() {
255
+ function L() {
247
256
  f.value = !1;
248
257
  }
249
258
  async function we(t) {
250
- const c = ++H;
251
- $.value = t;
259
+ const u = ++E;
260
+ _.value = t;
252
261
  try {
253
262
  const s = await n.searchProvider(t);
254
- if (c !== H || !f.value)
263
+ if (u !== E || !f.value)
255
264
  return;
256
- v.value = s && s.groups || [], x.value = "all", o.value = v.value.length ? "results" : "empty", v.value.length && (p.value = Ge(t)), R(0);
265
+ m.value = s && s.groups || [], x.value = "all", o.value = m.value.length ? "results" : "empty", m.value.length && (p.value = Ge(t)), R(0);
257
266
  } catch {
258
- if (c !== H || !f.value)
267
+ if (u !== E || !f.value)
259
268
  return;
260
- v.value = [], o.value = "error", u.value = -1;
269
+ m.value = [], o.value = "error", d.value = -1;
261
270
  }
262
271
  }
263
272
  q(g, (t) => {
264
273
  clearTimeout(S);
265
- const c = t.trim();
266
- if (c.length < n.minChars) {
267
- H++, v.value = [], o.value = c.length ? "hint" : "zero", u.value = -1;
274
+ const u = t.trim();
275
+ if (u.length < n.minChars) {
276
+ E++, m.value = [], o.value = u.length ? "hint" : "zero", d.value = -1;
268
277
  return;
269
278
  }
270
- S = setTimeout(() => we(c), n.debounce);
279
+ S = setTimeout(() => we(u), n.debounce);
271
280
  }), q(f, (t) => {
272
- t ? (D = document.activeElement, p.value = F(), g.value = "", $.value = "", v.value = [], x.value = "all", o.value = "zero", u.value = -1, z = document.body.style.overflow, document.body.style.overflow = "hidden", se(() => {
273
- var c;
274
- return (c = w.value) == null ? void 0 : c.focus();
275
- })) : (clearTimeout(S), H++, z !== null && (document.body.style.overflow = z, z = null), D != null && D.focus && D.focus());
281
+ t ? (D = document.activeElement, p.value = F(), g.value = "", _.value = "", m.value = [], x.value = "all", o.value = "zero", d.value = -1, z = document.body.style.overflow, document.body.style.overflow = "hidden", se(() => {
282
+ var u;
283
+ return (u = w.value) == null ? void 0 : u.focus();
284
+ })) : (clearTimeout(S), E++, z !== null && (document.body.style.overflow = z, z = null), D != null && D.focus && D.focus());
276
285
  }, { immediate: !0 });
277
286
  function Ce(t) {
278
- var c;
287
+ var u;
279
288
  if (t.key === "Escape") {
280
- t.preventDefault(), O();
289
+ t.preventDefault(), L();
281
290
  return;
282
291
  }
283
292
  if (t.key === "ArrowDown") {
284
- t.preventDefault(), R(u.value + 1);
293
+ t.preventDefault(), R(d.value + 1);
285
294
  return;
286
295
  }
287
296
  if (t.key === "ArrowUp") {
288
- t.preventDefault(), R(u.value - 1);
297
+ t.preventDefault(), R(d.value - 1);
289
298
  return;
290
299
  }
291
300
  if (t.key === "Enter") {
@@ -295,49 +304,49 @@ const X = (e) => (Te("data-v-24311187"), e = e(), Ne(), e), Ye = { class: "zui-s
295
304
  if (!s.length)
296
305
  return;
297
306
  t.preventDefault();
298
- const d = s[u.value >= 0 ? u.value : 0];
299
- ae(d.url, d.newWindow);
307
+ const c = s[d.value >= 0 ? d.value : 0];
308
+ ae(c.url, c.newWindow);
300
309
  return;
301
310
  }
302
311
  if (t.key === "Tab") {
303
- const s = (c = _.value) == null ? void 0 : c.querySelectorAll('input, button, a[href], [tabindex]:not([tabindex="-1"])');
312
+ const s = (u = $.value) == null ? void 0 : u.querySelectorAll('input, button, a[href], [tabindex]:not([tabindex="-1"])');
304
313
  if (!(s != null && s.length))
305
314
  return;
306
- const d = s[0], P = s[s.length - 1];
307
- t.shiftKey && document.activeElement === d ? (t.preventDefault(), P.focus()) : !t.shiftKey && document.activeElement === P && (t.preventDefault(), d.focus());
315
+ const c = s[0], P = s[s.length - 1];
316
+ t.shiftKey && document.activeElement === c ? (t.preventDefault(), P.focus()) : !t.shiftKey && document.activeElement === P && (t.preventDefault(), c.focus());
308
317
  }
309
318
  }
310
- function $e(t) {
319
+ function _e(t) {
311
320
  if (!t)
312
321
  return !1;
313
- const c = (t.tagName || "").toLowerCase();
314
- return c === "input" || c === "textarea" || c === "select" || t.isContentEditable;
322
+ const u = (t.tagName || "").toLowerCase();
323
+ return u === "input" || u === "textarea" || u === "select" || t.isContentEditable;
315
324
  }
316
325
  function re(t) {
317
326
  if (t.key === "Escape" && f.value) {
318
- t.preventDefault(), O();
327
+ t.preventDefault(), L();
319
328
  return;
320
329
  }
321
330
  if ((t.ctrlKey || t.metaKey) && (t.key === "k" || t.key === "K")) {
322
331
  t.preventDefault(), f.value = !f.value;
323
332
  return;
324
333
  }
325
- t.key === "/" && !f.value && !$e(document.activeElement) && (t.preventDefault(), f.value = !0);
334
+ t.key === "/" && !f.value && !_e(document.activeElement) && (t.preventDefault(), f.value = !0);
326
335
  }
327
336
  return Se(() => {
328
337
  document.addEventListener("keydown", re);
329
338
  }), Me(() => {
330
- document.removeEventListener("keydown", re), clearTimeout(S), H++, z !== null && (document.body.style.overflow = z, z = null);
331
- }), (t, c) => (a(), T(Ie, { to: "body" }, [
339
+ document.removeEventListener("keydown", re), clearTimeout(S), E++, z !== null && (document.body.style.overflow = z, z = null);
340
+ }), (t, u) => (a(), A(Ie, { to: "body" }, [
332
341
  f.value ? (a(), i("div", {
333
342
  key: 0,
334
343
  class: "zui-search-overlay fixed inset-0 z-[20000] flex items-start justify-center bg-[#11181c]/45",
335
- onMousedown: E(O, ["self"]),
344
+ onMousedown: H(L, ["self"]),
336
345
  onKeydown: Ce
337
346
  }, [
338
347
  r("div", {
339
348
  ref_key: "panelEl",
340
- ref: _,
349
+ ref: $,
341
350
  class: "zui-search-panel mt-[4vh] flex max-h-[88vh] w-[94%] max-w-[720px] flex-col overflow-hidden rounded-[14px] bg-surface-raised font-sans shadow-[0_30px_80px_rgba(0,0,0,0.3)] sm:mt-[8vh] sm:max-h-[82vh]",
342
351
  role: "dialog",
343
352
  "aria-modal": "true",
@@ -348,49 +357,49 @@ const X = (e) => (Te("data-v-24311187"), e = e(), Ne(), e), Ye = { class: "zui-s
348
357
  Y(r("input", {
349
358
  ref_key: "inputEl",
350
359
  ref: w,
351
- "onUpdate:modelValue": c[0] || (c[0] = (s) => g.value = s),
360
+ "onUpdate:modelValue": u[0] || (u[0] = (s) => g.value = s),
352
361
  type: "text",
353
362
  autocomplete: "off",
354
363
  placeholder: e.placeholder,
355
364
  class: "zui-search-input flex-1 border-0 bg-[transparent] p-0 text-[16px] text-[#1e262c] dark:text-content outline-none placeholder:text-proclusteal-400 dark:placeholder:text-content-muted focus:ring-0"
356
365
  }, null, 8, Je), [
357
- [Ae, g.value]
366
+ [Te, g.value]
358
367
  ]),
359
368
  r("button", {
360
369
  type: "button",
361
370
  class: "cursor-pointer border-0 bg-[transparent] px-1 text-[22px] leading-none text-proclusteal-400 dark:text-content-muted hover:text-proclusteal-700 dark:hover:text-content",
362
371
  "aria-label": "Close search",
363
372
  title: "Close (Esc)",
364
- onClick: O
373
+ onClick: L
365
374
  }, "×")
366
375
  ]),
367
- o.value === "results" ? (a(), i("div", Qe, " Search results ")) : m("", !0),
376
+ o.value === "results" ? (a(), i("div", Qe, " Search results ")) : v("", !0),
368
377
  o.value === "results" ? (a(), i("div", Xe, [
369
378
  r("button", {
370
379
  type: "button",
371
380
  class: M([ue, x.value === "all" ? de : ""]),
372
- onClick: c[1] || (c[1] = (s) => oe("all"))
381
+ onClick: u[1] || (u[1] = (s) => oe("all"))
373
382
  }, [
374
383
  B(" All "),
375
384
  r("span", {
376
385
  class: M(["font-bold", x.value === "all" ? "opacity-85" : "opacity-60"])
377
386
  }, "(" + b(ge.value) + ")", 3)
378
387
  ], 2),
379
- (a(!0), i(N, null, L(v.value, (s) => (a(), i("button", {
388
+ (a(!0), i(N, null, O(m.value, (s) => (a(), i("button", {
380
389
  key: s.type,
381
390
  type: "button",
382
391
  class: M([ue, x.value === s.type ? de : ""]),
383
- onClick: (d) => oe(s.type)
392
+ onClick: (c) => oe(s.type)
384
393
  }, [
385
394
  B(b(ee(s.type).label) + " ", 1),
386
395
  r("span", {
387
396
  class: M(["font-bold", x.value === s.type ? "opacity-85" : "opacity-60"])
388
397
  }, "(" + b(s.items.length) + ")", 3)
389
398
  ], 10, Ze))), 128))
390
- ])) : m("", !0),
399
+ ])) : v("", !0),
391
400
  r("div", {
392
401
  ref_key: "resultsEl",
393
- ref: A,
402
+ ref: T,
394
403
  class: "zui-search-results overflow-y-auto pb-2.5"
395
404
  }, [
396
405
  o.value === "zero" && p.value.length ? (a(), i("div", et, [
@@ -400,10 +409,10 @@ const X = (e) => (Te("data-v-24311187"), e = e(), Ne(), e), Ye = { class: "zui-s
400
409
  type: "button",
401
410
  class: "cursor-pointer border-0 bg-[transparent] p-0 text-[12px] font-semibold text-[#667079] dark:text-content-muted hover:text-proclusteal-950 dark:hover:text-focus",
402
411
  "data-test": "search-recent-clear",
403
- onClick: c[2] || (c[2] = (s) => p.value = W(Fe)())
412
+ onClick: u[2] || (u[2] = (s) => p.value = W(Fe)())
404
413
  }, "Clear")
405
414
  ]),
406
- (a(!0), i(N, null, L(p.value, (s, d) => (a(), i("button", {
415
+ (a(!0), i(N, null, O(p.value, (s, c) => (a(), i("button", {
407
416
  key: s,
408
417
  type: "button",
409
418
  "data-test": "search-recent-item",
@@ -422,29 +431,29 @@ const X = (e) => (Te("data-v-24311187"), e = e(), Ne(), e), Ye = { class: "zui-s
422
431
  }, " Keep typing… enter at least " + b(e.minChars) + " characters to search. ", 1)) : o.value === "empty" ? (a(), i("div", {
423
432
  key: 3,
424
433
  class: M(K)
425
- }, " No results for “" + b($.value) + "” — try a broader term or a code. ", 1)) : o.value === "error" ? (a(), i("div", {
434
+ }, " No results for “" + b(_.value) + "” — try a broader term or a code. ", 1)) : o.value === "error" ? (a(), i("div", {
426
435
  key: 4,
427
436
  class: M(K)
428
- }, " Search is temporarily unavailable. ")) : (a(!0), i(N, { key: 5 }, L(te.value, (s) => (a(), i("div", {
437
+ }, " Search is temporarily unavailable. ")) : (a(!0), i(N, { key: 5 }, O(te.value, (s) => (a(), i("div", {
429
438
  key: s.type
430
439
  }, [
431
440
  r("div", lt, [
432
441
  B(b(s.label) + " ", 1),
433
442
  r("span", st, "(" + b(s.items.length) + ")", 1)
434
443
  ]),
435
- (a(!0), i(N, null, L(s.items, (d) => (a(), i("a", {
436
- key: d.flatIdx,
437
- href: d.url || null,
438
- target: d.newWindow ? "_blank" : null,
439
- rel: d.newWindow ? "noopener noreferrer" : null,
440
- class: M(["zui-search-row flex items-center gap-[13px] px-[18px] py-[11px] text-[#1e262c] dark:text-content no-underline", { "bg-proclusteal-50 dark:bg-surface-hover": d.flatIdx === u.value }]),
441
- "data-row-idx": d.flatIdx,
442
- onClick: E((P) => ae(d.url, d.newWindow), ["exact", "prevent"]),
443
- onMouseenter: (P) => u.value = d.flatIdx
444
+ (a(!0), i(N, null, O(s.items, (c) => (a(), i("a", {
445
+ key: c.flatIdx,
446
+ href: c.url || null,
447
+ target: c.newWindow ? "_blank" : null,
448
+ rel: c.newWindow ? "noopener noreferrer" : null,
449
+ class: M(["zui-search-row flex items-center gap-[13px] px-[18px] py-[11px] text-[#1e262c] dark:text-content no-underline", { "bg-proclusteal-50 dark:bg-surface-hover": c.flatIdx === d.value }]),
450
+ "data-row-idx": c.flatIdx,
451
+ onClick: H((P) => ae(c.url, c.newWindow), ["exact", "prevent"]),
452
+ onMouseenter: (P) => d.value = c.flatIdx
444
453
  }, [
445
454
  r("span", {
446
455
  class: "inline-flex h-[42px] w-[42px] flex-none items-center justify-center rounded-[10px] text-white",
447
- style: G({ background: d.tileColour })
456
+ style: G({ background: c.tileColour })
448
457
  }, [
449
458
  (a(), i("svg", {
450
459
  class: "h-5 w-5",
@@ -454,28 +463,43 @@ const X = (e) => (Te("data-v-24311187"), e = e(), Ne(), e), Ye = { class: "zui-s
454
463
  "stroke-width": "2",
455
464
  "stroke-linecap": "round",
456
465
  "stroke-linejoin": "round",
457
- innerHTML: d.tileIcon
466
+ innerHTML: c.tileIcon
458
467
  }, null, 8, ct))
459
468
  ], 4),
460
469
  r("span", ut, [
461
- r("span", {
462
- class: "gs-marked block truncate text-[14px] font-bold",
463
- innerHTML: d.titleHtml
464
- }, null, 8, dt),
470
+ r("span", dt, [
471
+ c.kindIcon ? (a(), i("svg", {
472
+ key: 0,
473
+ class: "h-[13px] w-[13px] flex-none text-[#8a969c] dark:text-content-muted",
474
+ viewBox: "0 0 24 24",
475
+ fill: "none",
476
+ stroke: "currentColor",
477
+ "stroke-width": "2",
478
+ "stroke-linecap": "round",
479
+ "stroke-linejoin": "round",
480
+ "aria-label": c.kindLabel,
481
+ role: "img",
482
+ innerHTML: c.kindIcon
483
+ }, null, 8, pt)) : v("", !0),
484
+ r("span", {
485
+ class: "gs-marked min-w-0 truncate text-[14px] font-bold",
486
+ innerHTML: c.titleHtml
487
+ }, null, 8, ft)
488
+ ]),
465
489
  r("span", {
466
490
  class: "gs-marked mt-0.5 block truncate text-[12.5px] text-[#5b6570] dark:text-content-muted",
467
- innerHTML: d.subtitleHtml
468
- }, null, 8, pt)
491
+ innerHTML: c.subtitleHtml
492
+ }, null, 8, xt)
469
493
  ]),
470
- ft
494
+ ht
471
495
  ], 42, it))), 128))
472
496
  ]))), 128))
473
497
  ], 512)
474
498
  ], 512)
475
- ], 32)) : m("", !0)
499
+ ], 32)) : v("", !0)
476
500
  ]));
477
501
  }
478
- }, ht = /* @__PURE__ */ Oe(xt, [["__scopeId", "data-v-24311187"]]), pe = {
502
+ }, vt = /* @__PURE__ */ Le(yt, [["__scopeId", "data-v-7b7d8437"]]), pe = {
479
503
  "reference library": "RefLib",
480
504
  reflib: "RefLib",
481
505
  repository: "RefLib",
@@ -493,7 +517,7 @@ const X = (e) => (Te("data-v-24311187"), e = e(), Ne(), e), Ye = { class: "zui-s
493
517
  directory: "Contact",
494
518
  "telephone directory": "Contact"
495
519
  };
496
- function yt(e) {
520
+ function mt(e) {
497
521
  if (!e)
498
522
  return "";
499
523
  const l = String(e).trim();
@@ -508,7 +532,7 @@ function yt(e) {
508
532
  }
509
533
  return !n || !Object.prototype.hasOwnProperty.call(U, n) ? "" : U[n].icon || "";
510
534
  }
511
- function vt(e) {
535
+ function bt(e) {
512
536
  if (!e)
513
537
  return "";
514
538
  if (e.dateText)
@@ -516,19 +540,19 @@ function vt(e) {
516
540
  const l = e.notifyday != null ? String(e.notifyday).replace(/^0/, "") : "", n = e.notifymonthname ? String(e.notifymonthname) : "", h = e.notifyyear != null ? String(e.notifyyear) : "";
517
541
  return [l, n, h].filter(Boolean).join(" ");
518
542
  }
519
- const mt = {
543
+ const kt = {
520
544
  key: 0,
521
545
  class: "absolute -right-[3px] -top-[3px] h-2 w-2 rounded-full bg-[#dd3730] ring-2 ring-white dark:ring-surface-raised"
522
- }, bt = { class: "absolute right-0 top-full z-30 mt-2 w-[400px] max-w-[90vw] origin-top-right overflow-hidden rounded-[10px] border-[1px] border-proclusteal-300 dark:border-line bg-surface-raised shadow-zeal-md" }, kt = { class: "max-h-[420px] overflow-y-auto" }, gt = {
546
+ }, gt = { class: "absolute right-0 top-full z-30 mt-2 w-[400px] max-w-[90vw] origin-top-right overflow-hidden rounded-[10px] border-[1px] border-proclusteal-300 dark:border-line bg-surface-raised shadow-zeal-md" }, wt = { class: "max-h-[420px] overflow-y-auto" }, Ct = {
523
547
  key: 0,
524
548
  class: "px-5 py-[26px] text-center text-[13px] font-medium text-[#667079] dark:text-content-muted"
525
- }, wt = {
549
+ }, _t = {
526
550
  key: 1,
527
551
  class: "px-5 py-[26px] text-center text-[13px] font-medium text-[#667079] dark:text-content-muted"
528
- }, Ct = ["onClick"], $t = { class: "inline-flex h-[42px] w-[42px] flex-none items-center justify-center rounded-[10px] bg-proclusteal-950 text-white" }, _t = ["innerHTML"], St = { class: "min-w-0 flex-1" }, Mt = { class: "block truncate text-[14px] font-bold text-[#1e262c] dark:text-content" }, It = { class: "block truncate text-[12.5px] text-[#5b6570] dark:text-content-muted" }, At = {
552
+ }, $t = ["onClick"], St = { class: "inline-flex h-[42px] w-[42px] flex-none items-center justify-center rounded-[10px] bg-proclusteal-950 text-white" }, Mt = ["innerHTML"], It = { class: "min-w-0 flex-1" }, Tt = { class: "block truncate text-[14px] font-bold text-[#1e262c] dark:text-content" }, At = { class: "block truncate text-[12.5px] text-[#5b6570] dark:text-content-muted" }, Nt = {
529
553
  key: 0,
530
554
  class: "mt-0.5 block text-[12px] text-proclusteal-500 dark:text-content-muted"
531
- }, Tt = { class: "flex flex-none flex-col items-center gap-2 pt-0.5 text-proclusteal-600 dark:text-content-muted" }, Nt = ["onClick"], zt = ["onClick"], Et = ["href"], Ht = {
555
+ }, zt = { class: "flex flex-none flex-col items-center gap-2 pt-0.5 text-proclusteal-600 dark:text-content-muted" }, Ht = ["onClick"], Et = ["onClick"], Lt = ["href"], Ot = {
532
556
  __name: "HeaderNotificationDropdown",
533
557
  props: {
534
558
  // The feed as /personal/GetNotifications.ashx returns it: { data: [...] }. Null means
@@ -560,35 +584,35 @@ const mt = {
560
584
  const n = e, h = l, f = k(null), y = k(!1), w = C(() => {
561
585
  var o;
562
586
  return ((o = n.notifications) == null ? void 0 : o.data) || [];
563
- }), _ = C(() => n.unreadCount !== null && n.unreadCount !== void 0 ? n.unreadCount > 0 : w.value.some((o) => o.ClassRead === "unread"));
587
+ }), $ = C(() => n.unreadCount !== null && n.unreadCount !== void 0 ? n.unreadCount > 0 : w.value.some((o) => o.ClassRead === "unread"));
564
588
  me(f, () => {
565
589
  y.value = !1;
566
590
  });
567
- function A() {
591
+ function T() {
568
592
  y.value = !y.value, y.value && h("open");
569
593
  }
570
594
  function g(o) {
571
595
  return o && Object.prototype.hasOwnProperty.call(n.iconMap, o) && n.iconMap[o] || null;
572
596
  }
573
- function $(o) {
574
- const u = g(o.VueAppTypeIcon) || g(o.AppTypeName);
575
- if (u)
576
- return { component: u, path: "" };
577
- const p = yt(o.AppTypeName);
597
+ function _(o) {
598
+ const d = g(o.VueAppTypeIcon) || g(o.AppTypeName);
599
+ if (d)
600
+ return { component: d, path: "" };
601
+ const p = mt(o.AppTypeName);
578
602
  return p ? { component: null, path: p } : { component: ie, path: "" };
579
603
  }
580
- const v = C(() => w.value.map((o) => ({
604
+ const m = C(() => w.value.map((o) => ({
581
605
  item: o,
582
- icon: $(o),
583
- date: vt(o),
606
+ icon: _(o),
607
+ date: bt(o),
584
608
  unread: o.ClassRead === "unread"
585
609
  })));
586
610
  function x(o) {
587
611
  y.value = !1;
588
- const u = j(o);
589
- u && h("navigate", u);
612
+ const d = j(o);
613
+ d && h("navigate", d);
590
614
  }
591
- return (o, u) => (a(), i("div", {
615
+ return (o, d) => (a(), i("div", {
592
616
  ref_key: "rootEl",
593
617
  ref: f,
594
618
  class: "relative font-sans"
@@ -598,10 +622,10 @@ const mt = {
598
622
  class: "relative flex cursor-pointer items-center justify-center text-proclusteal-600 dark:text-content-muted transition-colors duration-150 hover:text-proclusteal-900 dark:hover:text-focus",
599
623
  title: "View Notifications",
600
624
  "aria-label": "View Notifications",
601
- onClick: A
625
+ onClick: T
602
626
  }, [
603
627
  I(ie, { class: "!h-[21px] !w-[21px]" }),
604
- _.value ? (a(), i("span", mt)) : m("", !0)
628
+ $.value ? (a(), i("span", kt)) : v("", !0)
605
629
  ]),
606
630
  I(xe, {
607
631
  "enter-active-class": "transition-all ease-out duration-75",
@@ -612,16 +636,16 @@ const mt = {
612
636
  "leave-to-class": "scale-95 opacity-0"
613
637
  }, {
614
638
  default: J(() => [
615
- Y(r("div", bt, [
616
- r("div", kt, [
617
- e.notifications ? w.value.length ? m("", !0) : (a(), i("div", wt, " No notifications. ")) : (a(), i("div", gt, " Loading notifications… ")),
618
- (a(!0), i(N, null, L(v.value, (p) => (a(), i("div", {
639
+ Y(r("div", gt, [
640
+ r("div", wt, [
641
+ e.notifications ? w.value.length ? v("", !0) : (a(), i("div", _t, " No notifications. ")) : (a(), i("div", Ct, " Loading notifications… ")),
642
+ (a(!0), i(N, null, O(m.value, (p) => (a(), i("div", {
619
643
  key: p.item.NotifyID,
620
644
  class: M(["flex cursor-pointer items-start gap-3 border-b-[1px] border-proclusteal-200 dark:border-line px-4 py-3", p.unread ? "bg-proclusteal-50 dark:bg-surface-hover" : "bg-surface-raised"]),
621
645
  onClick: (S) => x(p.item.url)
622
646
  }, [
623
- r("span", $t, [
624
- p.icon.component ? (a(), T(he(p.icon.component), {
647
+ r("span", St, [
648
+ p.icon.component ? (a(), A(he(p.icon.component), {
625
649
  key: 0,
626
650
  class: "!h-5 !w-5"
627
651
  })) : (a(), i("svg", {
@@ -634,41 +658,41 @@ const mt = {
634
658
  "stroke-linecap": "round",
635
659
  "stroke-linejoin": "round",
636
660
  innerHTML: p.icon.path
637
- }, null, 8, _t))
661
+ }, null, 8, Mt))
638
662
  ]),
639
- r("span", St, [
640
- r("span", Mt, b(p.item.notifyname), 1),
641
- r("span", It, b(p.item.summary), 1),
642
- p.date ? (a(), i("span", At, b(p.date), 1)) : m("", !0)
663
+ r("span", It, [
664
+ r("span", Tt, b(p.item.notifyname), 1),
665
+ r("span", At, b(p.item.summary), 1),
666
+ p.date ? (a(), i("span", Nt, b(p.date), 1)) : v("", !0)
643
667
  ]),
644
- r("span", Tt, [
668
+ r("span", zt, [
645
669
  p.unread ? (a(), i("button", {
646
670
  key: 0,
647
671
  type: "button",
648
672
  class: "hover:text-proclusteal-900 dark:hover:text-focus",
649
673
  title: "Mark notification as read",
650
674
  "aria-label": "Mark notification as read",
651
- onClick: E((S) => o.$emit("markAsRead", p.item.NotifyID), ["stop"])
675
+ onClick: H((S) => o.$emit("markAsRead", p.item.NotifyID), ["stop"])
652
676
  }, [
653
- I(Le, { class: "!h-4 !w-4" })
654
- ], 8, Nt)) : m("", !0),
677
+ I(Oe, { class: "!h-4 !w-4" })
678
+ ], 8, Ht)) : v("", !0),
655
679
  r("button", {
656
680
  type: "button",
657
681
  class: "hover:text-[#dd3730]",
658
682
  title: "Delete notification",
659
683
  "aria-label": "Delete notification",
660
- onClick: E((S) => o.$emit("deleteNotification", p.item.NotifyID), ["stop"])
684
+ onClick: H((S) => o.$emit("deleteNotification", p.item.NotifyID), ["stop"])
661
685
  }, [
662
686
  I(je, { class: "!w-3" })
663
- ], 8, zt)
687
+ ], 8, Et)
664
688
  ])
665
- ], 10, Ct))), 128))
689
+ ], 10, $t))), 128))
666
690
  ]),
667
691
  r("a", {
668
692
  href: W(j)(e.notificationsUrl) || null,
669
693
  class: "block border-t-[1px] border-proclusteal-200 dark:border-line px-4 py-2.5 text-center text-[13px] font-bold text-proclusteal-700 dark:text-content no-underline hover:bg-proclusteal-50 dark:hover:bg-surface-hover hover:text-proclusteal-900 dark:hover:text-focus",
670
- onClick: u[0] || (u[0] = E((p) => x(e.notificationsUrl), ["exact", "prevent"]))
671
- }, " See all notifications ", 8, Et)
694
+ onClick: d[0] || (d[0] = H((p) => x(e.notificationsUrl), ["exact", "prevent"]))
695
+ }, " See all notifications ", 8, Lt)
672
696
  ], 512), [
673
697
  [ye, y.value]
674
698
  ])
@@ -677,13 +701,13 @@ const mt = {
677
701
  })
678
702
  ], 512));
679
703
  }
680
- }, Ot = ["src"], Lt = {
704
+ }, jt = ["src"], Dt = {
681
705
  key: 1,
682
706
  class: "inline-flex h-[34px] w-[34px] items-center justify-center rounded-full bg-proclusteal-900 text-[13px] font-bold uppercase leading-none tracking-[0.5px] text-white"
683
- }, jt = { class: "absolute right-0 top-full z-30 mt-2 w-[260px] origin-top-right rounded-[10px] border-[1px] border-proclusteal-300 dark:border-line bg-surface-raised py-1 shadow-zeal-md" }, Dt = { class: "flex max-w-[260px] flex-col gap-0.5 whitespace-normal px-[18px] pb-2.5 pt-3" }, Pt = { class: "block text-[14px] font-bold text-proclusteal-800 dark:text-content" }, Ut = /* @__PURE__ */ r("span", { class: "my-1.5 block h-0.5 w-8 flex-none rounded-[1px] bg-[#cdd4da] dark:bg-line-strong" }, null, -1), Bt = { class: "block break-words text-[12px] leading-[1.3] text-proclusteal-600 dark:text-content-muted" }, Rt = /* @__PURE__ */ r("div", { class: "h-px bg-proclusteal-200 dark:bg-line" }, null, -1), Vt = {
707
+ }, Pt = { class: "absolute right-0 top-full z-30 mt-2 w-[260px] origin-top-right rounded-[10px] border-[1px] border-proclusteal-300 dark:border-line bg-surface-raised py-1 shadow-zeal-md" }, Ut = { class: "flex max-w-[260px] flex-col gap-0.5 whitespace-normal px-[18px] pb-2.5 pt-3" }, Bt = { class: "block text-[14px] font-bold text-proclusteal-800 dark:text-content" }, Rt = /* @__PURE__ */ r("span", { class: "my-1.5 block h-0.5 w-8 flex-none rounded-[1px] bg-[#cdd4da] dark:bg-line-strong" }, null, -1), Vt = { class: "block break-words text-[12px] leading-[1.3] text-proclusteal-600 dark:text-content-muted" }, Kt = /* @__PURE__ */ r("div", { class: "h-px bg-proclusteal-200 dark:bg-line" }, null, -1), Wt = {
684
708
  key: 0,
685
709
  class: "my-1 h-px bg-proclusteal-200 dark:bg-line"
686
- }, Kt = ["href", "onClick"], Wt = {
710
+ }, qt = ["href", "onClick"], Gt = {
687
711
  __name: "HeaderUserMenu",
688
712
  props: {
689
713
  user: {
@@ -701,14 +725,14 @@ const mt = {
701
725
  q(() => n.user.avatarUrl, () => {
702
726
  w.value = !1;
703
727
  });
704
- const _ = C(() => `${n.user.firstName || ""} ${n.user.surname || ""}`.trim()), A = C(() => `${(n.user.firstName || "").charAt(0)}${(n.user.surname || "").charAt(0)}`.toUpperCase());
728
+ const $ = C(() => `${n.user.firstName || ""} ${n.user.surname || ""}`.trim()), T = C(() => `${(n.user.firstName || "").charAt(0)}${(n.user.surname || "").charAt(0)}`.toUpperCase());
705
729
  me(f, () => {
706
730
  y.value = !1;
707
731
  });
708
- function g($) {
709
- y.value = !1, h("select", $);
732
+ function g(_) {
733
+ y.value = !1, h("select", _);
710
734
  }
711
- return ($, v) => (a(), i("div", {
735
+ return (_, m) => (a(), i("div", {
712
736
  ref_key: "rootEl",
713
737
  ref: f,
714
738
  class: "relative font-sans"
@@ -718,15 +742,15 @@ const mt = {
718
742
  class: "flex cursor-pointer items-center justify-center",
719
743
  title: "View Menu Options",
720
744
  "aria-label": "View Menu Options",
721
- onClick: v[1] || (v[1] = (x) => y.value = !y.value)
745
+ onClick: m[1] || (m[1] = (x) => y.value = !y.value)
722
746
  }, [
723
747
  e.user.avatarUrl && !w.value ? (a(), i("img", {
724
748
  key: 0,
725
749
  src: e.user.avatarUrl,
726
750
  alt: "",
727
751
  class: "h-[34px] w-[34px] rounded-full object-cover",
728
- onError: v[0] || (v[0] = (x) => w.value = !0)
729
- }, null, 40, Ot)) : (a(), i("span", Lt, b(A.value), 1))
752
+ onError: m[0] || (m[0] = (x) => w.value = !0)
753
+ }, null, 40, jt)) : (a(), i("span", Dt, b(T.value), 1))
730
754
  ]),
731
755
  I(xe, {
732
756
  "enter-active-class": "transition-all ease-out duration-75",
@@ -737,26 +761,26 @@ const mt = {
737
761
  "leave-to-class": "scale-95 opacity-0"
738
762
  }, {
739
763
  default: J(() => [
740
- Y(r("div", jt, [
741
- r("div", Dt, [
742
- r("span", Pt, b(_.value), 1),
743
- Ut,
744
- r("span", Bt, b(e.user.orgName), 1)
764
+ Y(r("div", Pt, [
765
+ r("div", Ut, [
766
+ r("span", Bt, b($.value), 1),
767
+ Rt,
768
+ r("span", Vt, b(e.user.orgName), 1)
745
769
  ]),
746
- Rt,
747
- (a(!0), i(N, null, L(e.menuItems, (x, o) => (a(), i(N, { key: o }, [
748
- x.divider ? (a(), i("div", Vt)) : (a(), i("a", {
770
+ Kt,
771
+ (a(!0), i(N, null, O(e.menuItems, (x, o) => (a(), i(N, { key: o }, [
772
+ x.divider ? (a(), i("div", Wt)) : (a(), i("a", {
749
773
  key: 1,
750
774
  href: x.href && W(j)(x.href) || null,
751
775
  class: "flex items-center gap-2.5 px-[18px] py-2 text-[13px] font-semibold text-proclusteal-700 dark:text-content no-underline hover:bg-proclusteal-50 dark:hover:bg-surface-hover hover:text-proclusteal-900 dark:hover:text-focus",
752
- onClick: E((u) => g(x), ["exact", "prevent"])
776
+ onClick: H((d) => g(x), ["exact", "prevent"])
753
777
  }, [
754
- x.icon ? (a(), T(he(x.icon), {
778
+ x.icon ? (a(), A(he(x.icon), {
755
779
  key: 0,
756
780
  class: "!h-4 !w-4 flex-none"
757
- })) : m("", !0),
781
+ })) : v("", !0),
758
782
  r("span", null, b(x.label), 1)
759
- ], 8, Kt))
783
+ ], 8, qt))
760
784
  ], 64))), 128))
761
785
  ], 512), [
762
786
  [ye, y.value]
@@ -766,13 +790,13 @@ const mt = {
766
790
  })
767
791
  ], 512));
768
792
  }
769
- }, qt = { class: "flex h-[70px] shrink-0 items-center justify-between border-b-[1px] border-proclusteal-300 dark:border-line bg-surface-raised px-[15px] font-sans shadow-[0_1px_3px_rgba(20,40,45,0.05)] sm:px-[25px]" }, Gt = { class: "flex min-w-0 items-center gap-[18px]" }, Ft = {
793
+ }, Ft = { class: "flex h-[70px] shrink-0 items-center justify-between border-b-[1px] border-proclusteal-300 dark:border-line bg-surface-raised px-[15px] font-sans shadow-[0_1px_3px_rgba(20,40,45,0.05)] sm:px-[25px]" }, Yt = { class: "flex min-w-0 items-center gap-[18px]" }, Jt = {
770
794
  key: 0,
771
795
  class: "hidden whitespace-nowrap text-[18px] font-semibold text-proclusteal-800 dark:text-content sm:inline"
772
- }, Yt = {
796
+ }, Qt = {
773
797
  key: 0,
774
798
  class: "font-normal text-black-800 dark:text-content-muted"
775
- }, Jt = ["href", "aria-label"], Qt = { class: "flex items-center gap-[18px] sm:gap-[25px]" }, cn = {
799
+ }, Xt = ["href", "aria-label"], Zt = { class: "flex items-center gap-[18px] sm:gap-[25px]" }, dn = {
776
800
  __name: "AppHeader",
777
801
  props: {
778
802
  title: {
@@ -857,41 +881,41 @@ const mt = {
857
881
  "notifications-open"
858
882
  ],
859
883
  setup(e, { emit: l }) {
860
- const n = e, h = l, f = fe(), y = k(!1), w = C(() => !!n.notifications || n.unreadCount !== null && n.unreadCount !== void 0), _ = C(() => be(n.accentColour)), A = C(() => _.value || "#1c6f63");
884
+ const n = e, h = l, f = fe(), y = k(!1), w = C(() => !!n.notifications || n.unreadCount !== null && n.unreadCount !== void 0), $ = C(() => be(n.accentColour)), T = C(() => $.value || "#1c6f63");
861
885
  function g(o) {
862
886
  var p, S;
863
887
  if (!o)
864
888
  return;
865
- const u = j(o);
866
- u && (h("navigate", u), (S = (p = f == null ? void 0 : f.vnode) == null ? void 0 : p.props) != null && S.onNavigate || (window.location.href = u));
889
+ const d = j(o);
890
+ d && (h("navigate", d), (S = (p = f == null ? void 0 : f.vnode) == null ? void 0 : p.props) != null && S.onNavigate || (window.location.href = d));
867
891
  }
868
- function $() {
892
+ function _() {
869
893
  h("home"), g(n.homeUrl);
870
894
  }
871
- function v() {
895
+ function m() {
872
896
  window.history.back();
873
897
  }
874
898
  function x(o) {
875
899
  h("menu-select", o), o.href && g(o.href);
876
900
  }
877
- return (o, u) => (a(), i("header", qt, [
878
- r("div", Gt, [
901
+ return (o, d) => (a(), i("header", Ft, [
902
+ r("div", Yt, [
879
903
  V(o.$slots, "logo"),
880
- e.title ? (a(), i("span", Ft, [
904
+ e.title ? (a(), i("span", Jt, [
881
905
  B(b(e.title), 1),
882
- e.subtitle ? (a(), i("span", Yt, " " + b(e.subtitle), 1)) : m("", !0)
883
- ])) : m("", !0),
884
- _.value ? (a(), i("span", {
906
+ e.subtitle ? (a(), i("span", Qt, " " + b(e.subtitle), 1)) : v("", !0)
907
+ ])) : v("", !0),
908
+ $.value ? (a(), i("span", {
885
909
  key: 1,
886
910
  class: "h-[45px] w-[2px] shrink-0",
887
- style: G({ background: _.value }),
911
+ style: G({ background: $.value }),
888
912
  "aria-hidden": "true"
889
- }, null, 4)) : m("", !0),
913
+ }, null, 4)) : v("", !0),
890
914
  r("nav", {
891
915
  class: "flex items-center gap-7 text-proclusteal-600 dark:text-content-muted",
892
- style: G({ "--hdr-accent": A.value })
916
+ style: G({ "--hdr-accent": T.value })
893
917
  }, [
894
- e.homeUrl ? (a(), T(He, {
918
+ e.homeUrl ? (a(), A(Ee, {
895
919
  key: 0,
896
920
  text: e.homeTooltip,
897
921
  position: "bottom"
@@ -901,71 +925,71 @@ const mt = {
901
925
  href: W(j)(e.homeUrl) || null,
902
926
  class: "hover:text-[var(--hdr-accent)]",
903
927
  "aria-label": e.homeTooltip,
904
- onClick: E($, ["exact", "prevent"])
928
+ onClick: H(_, ["exact", "prevent"])
905
929
  }, [
906
930
  I(ze, { class: "!h-[22px] !w-[22px]" })
907
- ], 8, Jt)
931
+ ], 8, Xt)
908
932
  ]),
909
933
  _: 1
910
- }, 8, ["text"])) : m("", !0),
934
+ }, 8, ["text"])) : v("", !0),
911
935
  e.showBack ? (a(), i("button", {
912
936
  key: 1,
913
937
  type: "button",
914
938
  class: "cursor-pointer hover:text-[var(--hdr-accent)]",
915
939
  title: "Go Back",
916
940
  "aria-label": "Go Back",
917
- onClick: v
941
+ onClick: m
918
942
  }, [
919
- I(Ee, { class: "!h-[22px] !w-[22px]" })
920
- ])) : m("", !0),
943
+ I(He, { class: "!h-[22px] !w-[22px]" })
944
+ ])) : v("", !0),
921
945
  V(o.$slots, "nav-extra")
922
946
  ], 4),
923
947
  V(o.$slots, "left")
924
948
  ]),
925
- r("div", Qt, [
949
+ r("div", Zt, [
926
950
  V(o.$slots, "right"),
927
951
  e.ready ? (a(), i(N, { key: 0 }, [
928
- e.searchProvider ? (a(), T(Ue, {
952
+ e.searchProvider ? (a(), A(Ue, {
929
953
  key: 0,
930
- onClick: u[0] || (u[0] = (p) => y.value = !0)
931
- })) : m("", !0),
932
- w.value ? (a(), T(Ht, {
954
+ onClick: d[0] || (d[0] = (p) => y.value = !0)
955
+ })) : v("", !0),
956
+ w.value ? (a(), A(Ot, {
933
957
  key: 1,
934
958
  notifications: e.notifications,
935
959
  "unread-count": e.unreadCount,
936
960
  "notifications-url": e.notificationsUrl,
937
961
  "icon-map": e.notificationIconMap,
938
- onMarkAsRead: u[1] || (u[1] = (p) => o.$emit("markAsRead", p)),
939
- onDeleteNotification: u[2] || (u[2] = (p) => o.$emit("deleteNotification", p)),
940
- onOpen: u[3] || (u[3] = (p) => o.$emit("notifications-open")),
962
+ onMarkAsRead: d[1] || (d[1] = (p) => o.$emit("markAsRead", p)),
963
+ onDeleteNotification: d[2] || (d[2] = (p) => o.$emit("deleteNotification", p)),
964
+ onOpen: d[3] || (d[3] = (p) => o.$emit("notifications-open")),
941
965
  onNavigate: g
942
- }, null, 8, ["notifications", "unread-count", "notifications-url", "icon-map"])) : m("", !0),
943
- e.user ? (a(), T(Wt, {
966
+ }, null, 8, ["notifications", "unread-count", "notifications-url", "icon-map"])) : v("", !0),
967
+ e.user ? (a(), A(Gt, {
944
968
  key: 2,
945
969
  user: e.user,
946
970
  "menu-items": e.menuItems,
947
971
  onSelect: x
948
- }, null, 8, ["user", "menu-items"])) : m("", !0)
949
- ], 64)) : m("", !0)
972
+ }, null, 8, ["user", "menu-items"])) : v("", !0)
973
+ ], 64)) : v("", !0)
950
974
  ]),
951
- e.searchProvider ? (a(), T(ht, {
975
+ e.searchProvider ? (a(), A(vt, {
952
976
  key: 0,
953
977
  open: y.value,
954
- "onUpdate:open": u[4] || (u[4] = (p) => y.value = p),
978
+ "onUpdate:open": d[4] || (d[4] = (p) => y.value = p),
955
979
  "search-provider": e.searchProvider,
956
980
  placeholder: e.searchPlaceholder,
957
981
  types: e.searchTypes,
958
982
  onNavigate: g
959
- }, null, 8, ["open", "search-provider", "placeholder", "types"])) : m("", !0)
983
+ }, null, 8, ["open", "search-provider", "placeholder", "types"])) : v("", !0)
960
984
  ]));
961
985
  }
962
986
  };
963
987
  export {
964
- cn as AppHeader,
988
+ dn as AppHeader,
965
989
  U as DEFAULT_SEARCH_TYPES,
966
- ht as GlobalSearchModal,
990
+ vt as GlobalSearchModal,
967
991
  Ue as GlobalSearchPill,
968
- Ht as HeaderNotificationDropdown,
969
- Wt as HeaderUserMenu,
992
+ Ot as HeaderNotificationDropdown,
993
+ Gt as HeaderUserMenu,
970
994
  j as safeUrl
971
995
  };
package/dist/style.css CHANGED
@@ -1 +1 @@
1
- .preview-content[data-v-781d71ec] ul{list-style:disc;margin-left:1.5rem}.preview-content[data-v-781d71ec] ol{list-style:decimal;margin-left:1.5rem}.preview-content[data-v-781d71ec] p{margin-bottom:.5rem}.preview-content[data-v-781d71ec] a{color:#326d68;text-decoration:underline}.preview-content[data-v-781d71ec] img{max-width:100%;height:auto}.preview-content[data-v-781d71ec] table{border-collapse:collapse}.preview-content[data-v-781d71ec] td,.preview-content[data-v-781d71ec] th{border:1px solid #c8ced0;padding:4px 8px}.preview-content[data-v-781d71ec] ins{text-decoration:none;background-color:#d4fcbc}.preview-content[data-v-781d71ec] del{text-decoration:line-through;background-color:#fbb6c2;color:#555}.gs-marked[data-v-24311187] mark{background:#1a8a7d33;color:inherit;border-radius:3px;padding:0 2px}.columns-container[data-v-5373471c]{position:relative;margin:16px 0;border-radius:8px}.columns-content[data-v-5373471c]{min-height:100px}@media (max-width: 767px){.columns-content[data-v-5373471c]{flex-direction:column!important}}.v-enter-active,.v-leave-active{transition:opacity .3s ease}.v-enter-from,.v-leave-to{opacity:0}
1
+ .preview-content[data-v-781d71ec] ul{list-style:disc;margin-left:1.5rem}.preview-content[data-v-781d71ec] ol{list-style:decimal;margin-left:1.5rem}.preview-content[data-v-781d71ec] p{margin-bottom:.5rem}.preview-content[data-v-781d71ec] a{color:#326d68;text-decoration:underline}.preview-content[data-v-781d71ec] img{max-width:100%;height:auto}.preview-content[data-v-781d71ec] table{border-collapse:collapse}.preview-content[data-v-781d71ec] td,.preview-content[data-v-781d71ec] th{border:1px solid #c8ced0;padding:4px 8px}.preview-content[data-v-781d71ec] ins{text-decoration:none;background-color:#d4fcbc}.preview-content[data-v-781d71ec] del{text-decoration:line-through;background-color:#fbb6c2;color:#555}.gs-marked[data-v-7b7d8437] mark{background:#1a8a7d33;color:inherit;border-radius:3px;padding:0 2px}.columns-container[data-v-5373471c]{position:relative;margin:16px 0;border-radius:8px}.columns-content[data-v-5373471c]{min-height:100px}@media (max-width: 767px){.columns-content[data-v-5373471c]{flex-direction:column!important}}.v-enter-active,.v-leave-active{transition:opacity .3s ease}.v-enter-from,.v-leave-to{opacity:0}
package/package.json CHANGED
@@ -1,123 +1,123 @@
1
- {
2
- "name": "@zealsolutions/zeal-ui",
3
- "version": "1.0.0-alpha.364",
4
- "description": "UI library for Zeal Solutions",
5
- "author": "Zeal Solutions",
6
- "license": "ISC",
7
- "bugs": {
8
- "url": "https://github.com/zeal-solutions/zeal-ui/issues"
9
- },
10
- "homepage": "https://github.com/zeal-solutions/zeal-ui#readme",
11
- "keywords": [
12
- "zeal",
13
- "ui"
14
- ],
15
- "repository": {
16
- "type": "git",
17
- "url": "git+https://github.com/zeal-solutions/zeal-ui.git"
18
- },
19
- "main": "dist/index.js",
20
- "browser": "dist/index.js",
21
- "module": "dist/index.js",
22
- "files": [
23
- "dist/*"
24
- ],
25
- "exports": {
26
- "./css/typography.css": "./dist/css/typography.css",
27
- "./css/base.css": "./dist/css/base.css",
28
- "./css/editorStyles.css": "./dist/css/editorStyles.css",
29
- "./css/theme.css": "./dist/css/theme.css",
30
- "./config/tailwind": "./dist/config/tailwind/index.js",
31
- "./buttons": "./dist/components/buttons/index.js",
32
- "./forms": "./dist/components/forms/index.js",
33
- "./header": "./dist/components/header/index.js",
34
- "./icons": "./dist/components/icons/index.js",
35
- "./inputs": "./dist/components/inputs/index.js",
36
- "./layouts": "./dist/components/layouts/index.js",
37
- "./logos": "./dist/components/logos/index.js",
38
- "./menus": "./dist/components/menus/index.js",
39
- "./modals": "./dist/components/modals/index.js",
40
- "./navigation": "./dist/components/navigation/index.js",
41
- "./overlays": "./dist/components/overlays/index.js",
42
- "./session": "./dist/components/session/index.js",
43
- "./sop-diff": "./dist/components/sop-diff/index.js",
44
- "./style.css": "./dist/style.css",
45
- "./tiptap": "./dist/components/tiptap/index.js",
46
- "./tooltips": "./dist/components/tooltips/index.js",
47
- "./transitions": "./dist/components/transitions/index.js",
48
- "./utils": "./dist/utils/index.js",
49
- "./tables": "./dist/components/tables/index.js",
50
- "./datepicker": "./dist/components/datepicker/index.js"
51
- },
52
- "type": "module",
53
- "scripts": {
54
- "dev": "vite",
55
- "build": "vite build",
56
- "build:publish": "npm run build && npm publish",
57
- "prepublishOnly": "npm run build",
58
- "preview": "vite preview",
59
- "test": "vitest run",
60
- "storybook": "storybook dev -p 6006",
61
- "build-storybook": "storybook build",
62
- "chromatic": "npx chromatic --project-token=chpt_368bf7fc8d469c1"
63
- },
64
- "dependencies": {
65
- "@floating-ui/dom": "^1.7.2",
66
- "@floating-ui/vue": "^1.1.7",
67
- "@gocapsule/column-extension": "^1.0.0-beta-3",
68
- "@tailwindcss/forms": "^0.5.7",
69
- "@tailwindcss/line-clamp": "^0.4.4",
70
- "@tiptap-extend/columns": "^2.1.6",
71
- "@tiptap/core": "^2.6.6",
72
- "@tiptap/extension-bubble-menu": "^2.6.6",
73
- "@tiptap/extension-color": "^2.6.6",
74
- "@tiptap/extension-document": "^2.6.6",
75
- "@tiptap/extension-gapcursor": "^2.8.0",
76
- "@tiptap/extension-heading": "^2.6.6",
77
- "@tiptap/extension-link": "^2.23.0",
78
- "@tiptap/extension-list-item": "^2.6.6",
79
- "@tiptap/extension-paragraph": "^2.6.6",
80
- "@tiptap/extension-placeholder": "^2.12.0",
81
- "@tiptap/extension-table": "^2.8.0",
82
- "@tiptap/extension-table-cell": "^2.8.0",
83
- "@tiptap/extension-table-header": "^2.8.0",
84
- "@tiptap/extension-table-row": "^2.8.0",
85
- "@tiptap/extension-text": "^2.6.6",
86
- "@tiptap/extension-text-align": "^2.7.2",
87
- "@tiptap/extension-text-style": "^2.6.6",
88
- "@tiptap/extension-underline": "^2.6.6",
89
- "@tiptap/pm": "^2.6.6",
90
- "@tiptap/starter-kit": "^2.6.6",
91
- "@tiptap/vue-3": "^2.7.2",
92
- "@vueuse/core": "^11.2.0",
93
- "axios": "^1.6.8",
94
- "i": "^0.3.7",
95
- "less": "^4.2.0",
96
- "lodash": "^4.17.21",
97
- "postcss": "^8.4.38",
98
- "tailwindcss": "^3.4.3",
99
- "tailwindcss-convert-px-to-rem": "^1.0.4",
100
- "vue": "^3.4.21"
101
- },
102
- "devDependencies": {
103
- "@chromatic-com/storybook": "^1.6.0",
104
- "@storybook/addon-essentials": "^8.1.11",
105
- "@storybook/addon-interactions": "^8.1.11",
106
- "@storybook/addon-links": "^8.1.11",
107
- "@storybook/addon-mdx-gfm": "^8.1.11",
108
- "@storybook/blocks": "^8.1.11",
109
- "@storybook/test": "^8.1.11",
110
- "@storybook/vue3": "^8.1.11",
111
- "@storybook/vue3-vite": "^8.1.11",
112
- "@vitejs/plugin-vue": "^5.0.4",
113
- "@vue/test-utils": "^2.4.11",
114
- "@whitespace/storybook-addon-html": "^6.1.1",
115
- "autoprefixer": "^10.4.19",
116
- "chromatic": "^11.3.1",
117
- "jsdom": "^25.0.0",
118
- "storybook": "^8.1.11",
119
- "vite": "^5.2.8",
120
- "vite-plugin-vue-devtools": "^7.0.25",
121
- "vitest": "^3.0.0"
122
- }
123
- }
1
+ {
2
+ "name": "@zealsolutions/zeal-ui",
3
+ "version": "1.0.0-alpha.366",
4
+ "description": "UI library for Zeal Solutions",
5
+ "author": "Zeal Solutions",
6
+ "license": "ISC",
7
+ "bugs": {
8
+ "url": "https://github.com/zeal-solutions/zeal-ui/issues"
9
+ },
10
+ "homepage": "https://github.com/zeal-solutions/zeal-ui#readme",
11
+ "keywords": [
12
+ "zeal",
13
+ "ui"
14
+ ],
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/zeal-solutions/zeal-ui.git"
18
+ },
19
+ "main": "dist/index.js",
20
+ "browser": "dist/index.js",
21
+ "module": "dist/index.js",
22
+ "files": [
23
+ "dist/*"
24
+ ],
25
+ "exports": {
26
+ "./css/typography.css": "./dist/css/typography.css",
27
+ "./css/base.css": "./dist/css/base.css",
28
+ "./css/editorStyles.css": "./dist/css/editorStyles.css",
29
+ "./css/theme.css": "./dist/css/theme.css",
30
+ "./config/tailwind": "./dist/config/tailwind/index.js",
31
+ "./buttons": "./dist/components/buttons/index.js",
32
+ "./forms": "./dist/components/forms/index.js",
33
+ "./header": "./dist/components/header/index.js",
34
+ "./icons": "./dist/components/icons/index.js",
35
+ "./inputs": "./dist/components/inputs/index.js",
36
+ "./layouts": "./dist/components/layouts/index.js",
37
+ "./logos": "./dist/components/logos/index.js",
38
+ "./menus": "./dist/components/menus/index.js",
39
+ "./modals": "./dist/components/modals/index.js",
40
+ "./navigation": "./dist/components/navigation/index.js",
41
+ "./overlays": "./dist/components/overlays/index.js",
42
+ "./session": "./dist/components/session/index.js",
43
+ "./sop-diff": "./dist/components/sop-diff/index.js",
44
+ "./style.css": "./dist/style.css",
45
+ "./tiptap": "./dist/components/tiptap/index.js",
46
+ "./tooltips": "./dist/components/tooltips/index.js",
47
+ "./transitions": "./dist/components/transitions/index.js",
48
+ "./utils": "./dist/utils/index.js",
49
+ "./tables": "./dist/components/tables/index.js",
50
+ "./datepicker": "./dist/components/datepicker/index.js"
51
+ },
52
+ "type": "module",
53
+ "scripts": {
54
+ "dev": "vite",
55
+ "build": "vite build",
56
+ "build:publish": "npm run build && npm publish",
57
+ "prepublishOnly": "npm run build",
58
+ "preview": "vite preview",
59
+ "test": "vitest run",
60
+ "storybook": "storybook dev -p 6006",
61
+ "build-storybook": "storybook build",
62
+ "chromatic": "npx chromatic --project-token=chpt_368bf7fc8d469c1"
63
+ },
64
+ "dependencies": {
65
+ "@floating-ui/dom": "^1.7.2",
66
+ "@floating-ui/vue": "^1.1.7",
67
+ "@gocapsule/column-extension": "^1.0.0-beta-3",
68
+ "@tailwindcss/forms": "^0.5.7",
69
+ "@tailwindcss/line-clamp": "^0.4.4",
70
+ "@tiptap-extend/columns": "^2.1.6",
71
+ "@tiptap/core": "^2.6.6",
72
+ "@tiptap/extension-bubble-menu": "^2.6.6",
73
+ "@tiptap/extension-color": "^2.6.6",
74
+ "@tiptap/extension-document": "^2.6.6",
75
+ "@tiptap/extension-gapcursor": "^2.8.0",
76
+ "@tiptap/extension-heading": "^2.6.6",
77
+ "@tiptap/extension-link": "^2.23.0",
78
+ "@tiptap/extension-list-item": "^2.6.6",
79
+ "@tiptap/extension-paragraph": "^2.6.6",
80
+ "@tiptap/extension-placeholder": "^2.12.0",
81
+ "@tiptap/extension-table": "^2.8.0",
82
+ "@tiptap/extension-table-cell": "^2.8.0",
83
+ "@tiptap/extension-table-header": "^2.8.0",
84
+ "@tiptap/extension-table-row": "^2.8.0",
85
+ "@tiptap/extension-text": "^2.6.6",
86
+ "@tiptap/extension-text-align": "^2.7.2",
87
+ "@tiptap/extension-text-style": "^2.6.6",
88
+ "@tiptap/extension-underline": "^2.6.6",
89
+ "@tiptap/pm": "^2.6.6",
90
+ "@tiptap/starter-kit": "^2.6.6",
91
+ "@tiptap/vue-3": "^2.7.2",
92
+ "@vueuse/core": "^11.2.0",
93
+ "axios": "^1.6.8",
94
+ "i": "^0.3.7",
95
+ "less": "^4.2.0",
96
+ "lodash": "^4.17.21",
97
+ "postcss": "^8.4.38",
98
+ "tailwindcss": "^3.4.3",
99
+ "tailwindcss-convert-px-to-rem": "^1.0.4",
100
+ "vue": "^3.4.21"
101
+ },
102
+ "devDependencies": {
103
+ "@chromatic-com/storybook": "^1.6.0",
104
+ "@storybook/addon-essentials": "^8.1.11",
105
+ "@storybook/addon-interactions": "^8.1.11",
106
+ "@storybook/addon-links": "^8.1.11",
107
+ "@storybook/addon-mdx-gfm": "^8.1.11",
108
+ "@storybook/blocks": "^8.1.11",
109
+ "@storybook/test": "^8.1.11",
110
+ "@storybook/vue3": "^8.1.11",
111
+ "@storybook/vue3-vite": "^8.1.11",
112
+ "@vitejs/plugin-vue": "^5.0.4",
113
+ "@vue/test-utils": "^2.4.11",
114
+ "@whitespace/storybook-addon-html": "^6.1.1",
115
+ "autoprefixer": "^10.4.19",
116
+ "chromatic": "^11.3.1",
117
+ "jsdom": "^25.0.0",
118
+ "storybook": "^8.1.11",
119
+ "vite": "^5.2.8",
120
+ "vite-plugin-vue-devtools": "^7.0.25",
121
+ "vitest": "^3.0.0"
122
+ }
123
+ }