@zealsolutions/zeal-ui 1.0.0-alpha.361 → 1.0.0-alpha.363

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.
@@ -0,0 +1,115 @@
1
+ import { ref as r, onUnmounted as M, openBlock as y, createElementBlock as L, Fragment as z, createElementVNode as m, renderSlot as B, createBlock as X, Teleport as D, withDirectives as N, normalizeStyle as $, createTextVNode as C, toDisplayString as F, normalizeClass as P, vShow as V, nextTick as Y } from "vue";
2
+ const s = r(null);
3
+ function q() {
4
+ function e(t) {
5
+ s.value && s.value !== t && s.value.hideImmediate(), s.value = t;
6
+ }
7
+ function n(t) {
8
+ s.value === t && (s.value = null);
9
+ }
10
+ return {
11
+ register: e,
12
+ unregister: n
13
+ };
14
+ }
15
+ function H({ rect: e, scrollX: n = 0, scrollY: t = 0, position: v = "top", offset: u = 20 }) {
16
+ const l = v === "bottom", c = e.left + n + e.width / 2, p = l ? e.bottom + t + u : e.top + t - u;
17
+ return {
18
+ top: `${Math.round(p)}px`,
19
+ left: `${Math.round(c)}px`,
20
+ transform: l ? "translateX(-50%)" : "translateX(-50%) translateY(-100%)",
21
+ position: "absolute",
22
+ pointerEvents: "none"
23
+ };
24
+ }
25
+ const I = { class: "px-4 py-2 text-center pointer-events-none" }, U = {
26
+ __name: "Tooltip",
27
+ props: {
28
+ text: {
29
+ type: String,
30
+ required: !0
31
+ },
32
+ position: {
33
+ type: String,
34
+ default: "top"
35
+ // 'top', 'bottom', 'left', 'right'
36
+ },
37
+ offset: {
38
+ type: Number,
39
+ default: 20
40
+ // Offset from the trigger element
41
+ }
42
+ },
43
+ setup(e) {
44
+ const n = e, { register: t, unregister: v } = q(), u = {
45
+ hideImmediate: w
46
+ }, l = r(!1);
47
+ let c = null, p = null;
48
+ const d = r(!1), b = r(null), T = r(null), g = r({ top: "0px", left: "0px" });
49
+ function h() {
50
+ const o = b.value, i = T.value;
51
+ if (!o || !i)
52
+ return;
53
+ const a = o.getBoundingClientRect(), k = window.scrollY || document.documentElement.scrollTop, S = window.scrollX || document.documentElement.scrollLeft;
54
+ g.value = H({ rect: a, scrollX: S, scrollY: k, position: n.position, offset: n.offset });
55
+ }
56
+ function f() {
57
+ clearTimeout(p), p = setTimeout(() => {
58
+ h();
59
+ }, 50);
60
+ }
61
+ function E() {
62
+ d.value || (clearTimeout(c), t(u), l.value = !0, d.value = !0, Y(() => {
63
+ setTimeout(() => {
64
+ h();
65
+ }, 0);
66
+ }), window.addEventListener("scroll", f), window.addEventListener("resize", f));
67
+ }
68
+ function x() {
69
+ l.value = !1, c = setTimeout(() => {
70
+ l.value || w();
71
+ }, 100);
72
+ }
73
+ function w() {
74
+ d.value = !1, v(u), window.removeEventListener("scroll", f), window.removeEventListener("resize", f);
75
+ }
76
+ return M(() => {
77
+ w();
78
+ }), (o, i) => (y(), L(z, null, [
79
+ m("span", {
80
+ ref_key: "triggerEl",
81
+ ref: b,
82
+ onMouseenter: E,
83
+ onMouseleave: x,
84
+ onFocus: i[0] || (i[0] = (...a) => o.showTooltip && o.showTooltip(...a)),
85
+ onBlur: i[1] || (i[1] = (...a) => o.hideTooltip && o.hideTooltip(...a)),
86
+ tabindex: "0",
87
+ class: "inline-block will-change"
88
+ }, [
89
+ B(o.$slots, "default")
90
+ ], 544),
91
+ (y(), X(D, { to: "body" }, [
92
+ N(m("div", {
93
+ class: "absolute z-50 bg-black-950 text-white font-semibold text-xs text-center rounded whitespace-nowrap pointer-events-none transition-none",
94
+ style: $(g.value),
95
+ ref_key: "tooltipEl",
96
+ ref: T,
97
+ onMouseenter: E,
98
+ onMouseleave: x
99
+ }, [
100
+ m("div", I, [
101
+ C(F(e.text) + " ", 1),
102
+ m("span", {
103
+ class: P(["absolute left-1/2 w-2 h-2 bg-black-950 rotate-45 -translate-x-1/2 pointer-events-none", e.position === "bottom" ? "-top-1" : "-bottom-1"])
104
+ }, null, 2)
105
+ ])
106
+ ], 36), [
107
+ [V, d.value]
108
+ ])
109
+ ]))
110
+ ], 64));
111
+ }
112
+ };
113
+ export {
114
+ U as _
115
+ };
@@ -1,7 +1,7 @@
1
- import { openBlock as a, createElementBlock as u, createVNode as T, createElementVNode as r, createTextVNode as j, mergeModels as ne, useModel as ke, getCurrentInstance as ce, ref as k, computed as $, watch as K, nextTick as oe, onMounted as ge, onBeforeUnmount as we, createBlock as I, Teleport as Ce, withModifiers as N, withDirectives as G, vModelText as $e, createCommentVNode as v, normalizeClass as M, toDisplayString as b, Fragment as H, renderList as P, normalizeStyle as q, pushScopeId as Se, popScopeId as _e, Transition as ue, withCtx as F, resolveDynamicComponent as de, unref as Q, vShow as pe, renderSlot as R } from "vue";
1
+ import { openBlock as a, createElementBlock as u, createVNode as T, createElementVNode as r, createTextVNode as j, mergeModels as ne, useModel as ke, getCurrentInstance as ce, ref as k, computed as $, watch as K, nextTick as oe, onMounted as ge, onBeforeUnmount as we, createBlock as I, Teleport as Ce, withModifiers as N, withDirectives as G, vModelText as $e, createCommentVNode as m, normalizeClass as M, toDisplayString as b, Fragment as H, renderList as P, normalizeStyle as q, pushScopeId as Se, popScopeId as _e, Transition as ue, withCtx as F, resolveDynamicComponent as de, unref as Q, vShow as pe, renderSlot as R } from "vue";
2
2
  import Me from "../../HouseIcon-BxmNyxvv.js";
3
3
  import Te from "../../ArrowLeftIcon-Cgsy08pY.js";
4
- import { _ as Ae } from "../../Tooltip-9q1tA0wI.js";
4
+ import { _ as Ae } from "../../Tooltip-CQjz2EXM.js";
5
5
  import fe from "../../MagnifyingGlassIcon-ChYNIA-H.js";
6
6
  import { _ as Ie } from "../../_plugin-vue_export-helper-CHgC5LLL.js";
7
7
  import { o as xe } from "../../index-D9ihCfA2.js";
@@ -17,7 +17,7 @@ const He = /* @__PURE__ */ r("span", { class: "hidden whitespace-nowrap sm:inlin
17
17
  setup(e) {
18
18
  return (i, o) => (a(), u("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-proclusteal-300 dark:border-line bg-surface-raised pl-[11px] pr-[9px] font-sans text-[13px] font-semibold text-proclusteal-600 dark:text-content-muted transition-[border-color,color,box-shadow] duration-150 hover:border-proclusteal-950 dark:hover:border-focus hover:text-proclusteal-800 dark:hover:text-content hover:shadow-[0_1px_3px_rgba(20,40,45,0.08)] focus:border-proclusteal-950 dark:focus:border-focus focus:text-proclusteal-800 dark:focus:text-content 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-950 dark:border-line bg-surface-raised pl-[11px] pr-[9px] font-sans text-[13px] font-semibold text-proclusteal-600 dark:text-content-muted transition-[border-color,color,box-shadow] duration-150 hover:border-proclusteal-900 dark:hover:border-focus hover:text-proclusteal-800 dark:hover:text-content hover:shadow-[0_1px_3px_rgba(20,40,45,0.08)] focus:border-proclusteal-900 dark:focus:border-focus focus:text-proclusteal-800 dark:focus:text-content focus:outline-none",
21
21
  title: "Search (Ctrl K)",
22
22
  "aria-label": "Search (Ctrl K)",
23
23
  onClick: o[0] || (o[0] = (y) => i.$emit("click"))
@@ -132,11 +132,11 @@ const Ue = (e) => (Se("data-v-80fd510b"), e = e(), _e(), e), Be = { class: "zui-
132
132
  }),
133
133
  emits: /* @__PURE__ */ ne(["navigate"], ["update:open"]),
134
134
  setup(e, { emit: i }) {
135
- const o = e, y = i, p = ke(e, "open"), x = ce(), w = k(null), _ = k(null), A = k(null), g = k(""), S = k(""), m = k([]), f = k("all"), n = k("zero"), c = k(-1);
135
+ const o = e, y = i, p = ke(e, "open"), x = ce(), w = k(null), _ = k(null), A = k(null), g = k(""), S = k(""), v = k([]), f = k("all"), n = k("zero"), c = k(-1);
136
136
  let d = null, C = 0, L = null, E = null;
137
137
  const Y = $(() => Pe(S.value)), X = (t) => De(t, o.types), J = $(() => {
138
138
  let t = 0;
139
- return m.value.filter((s) => f.value === "all" || s.type === f.value).map((s) => {
139
+ return v.value.filter((s) => f.value === "all" || s.type === f.value).map((s) => {
140
140
  const l = X(s.type);
141
141
  return {
142
142
  type: s.type,
@@ -151,7 +151,7 @@ const Ue = (e) => (Se("data-v-80fd510b"), e = e(), _e(), e), Be = { class: "zui-
151
151
  }))
152
152
  };
153
153
  });
154
- }), W = $(() => J.value.flatMap((t) => t.items)), ye = $(() => m.value.reduce((t, s) => t + s.items.length, 0));
154
+ }), W = $(() => J.value.flatMap((t) => t.items)), ye = $(() => v.value.reduce((t, s) => t + s.items.length, 0));
155
155
  function U(t) {
156
156
  const s = W.value;
157
157
  if (!s.length) {
@@ -182,23 +182,23 @@ const Ue = (e) => (Se("data-v-80fd510b"), e = e(), _e(), e), Be = { class: "zui-
182
182
  const l = await o.searchProvider(t);
183
183
  if (s !== C || !p.value)
184
184
  return;
185
- m.value = l && l.groups || [], f.value = "all", n.value = m.value.length ? "results" : "empty", U(0);
185
+ v.value = l && l.groups || [], f.value = "all", n.value = v.value.length ? "results" : "empty", U(0);
186
186
  } catch {
187
187
  if (s !== C || !p.value)
188
188
  return;
189
- m.value = [], n.value = "error", c.value = -1;
189
+ v.value = [], n.value = "error", c.value = -1;
190
190
  }
191
191
  }
192
192
  K(g, (t) => {
193
193
  clearTimeout(d);
194
194
  const s = t.trim();
195
195
  if (s.length < o.minChars) {
196
- C++, m.value = [], n.value = s.length ? "hint" : "zero", c.value = -1;
196
+ C++, v.value = [], n.value = s.length ? "hint" : "zero", c.value = -1;
197
197
  return;
198
198
  }
199
199
  d = setTimeout(() => me(s), o.debounce);
200
200
  }), K(p, (t) => {
201
- t ? (L = document.activeElement, g.value = "", S.value = "", m.value = [], f.value = "all", n.value = "zero", c.value = -1, E = document.body.style.overflow, document.body.style.overflow = "hidden", oe(() => {
201
+ t ? (L = document.activeElement, g.value = "", S.value = "", v.value = [], f.value = "all", n.value = "zero", c.value = -1, E = document.body.style.overflow, document.body.style.overflow = "hidden", oe(() => {
202
202
  var s;
203
203
  return (s = w.value) == null ? void 0 : s.focus();
204
204
  })) : (clearTimeout(d), C++, E !== null && (document.body.style.overflow = E, E = null), L != null && L.focus && L.focus());
@@ -291,7 +291,7 @@ const Ue = (e) => (Se("data-v-80fd510b"), e = e(), _e(), e), Be = { class: "zui-
291
291
  onClick: z
292
292
  }, "×")
293
293
  ]),
294
- n.value === "results" ? (a(), u("div", Ve, " Search results ")) : v("", !0),
294
+ n.value === "results" ? (a(), u("div", Ve, " Search results ")) : m("", !0),
295
295
  n.value === "results" ? (a(), u("div", Ke, [
296
296
  r("button", {
297
297
  type: "button",
@@ -303,7 +303,7 @@ const Ue = (e) => (Se("data-v-80fd510b"), e = e(), _e(), e), Be = { class: "zui-
303
303
  class: M(["font-bold", f.value === "all" ? "opacity-85" : "opacity-60"])
304
304
  }, "(" + b(ye.value) + ")", 3)
305
305
  ], 2),
306
- (a(!0), u(H, null, P(m.value, (l) => (a(), u("button", {
306
+ (a(!0), u(H, null, P(v.value, (l) => (a(), u("button", {
307
307
  key: l.type,
308
308
  type: "button",
309
309
  class: M([le, f.value === l.type ? se : ""]),
@@ -314,7 +314,7 @@ const Ue = (e) => (Se("data-v-80fd510b"), e = e(), _e(), e), Be = { class: "zui-
314
314
  class: M(["font-bold", f.value === l.type ? "opacity-85" : "opacity-60"])
315
315
  }, "(" + b(l.items.length) + ")", 3)
316
316
  ], 10, qe))), 128))
317
- ])) : v("", !0),
317
+ ])) : m("", !0),
318
318
  r("div", {
319
319
  ref_key: "resultsEl",
320
320
  ref: A,
@@ -377,7 +377,7 @@ const Ue = (e) => (Se("data-v-80fd510b"), e = e(), _e(), e), Be = { class: "zui-
377
377
  ]))), 128))
378
378
  ], 512)
379
379
  ], 512)
380
- ], 32)) : v("", !0)
380
+ ], 32)) : m("", !0)
381
381
  ]));
382
382
  }
383
383
  }, tt = /* @__PURE__ */ Ie(et, [["__scopeId", "data-v-80fd510b"]]), ie = {
@@ -482,7 +482,7 @@ const at = {
482
482
  const d = nt(n.AppTypeName);
483
483
  return d ? { component: null, path: d } : { component: ae, path: "" };
484
484
  }
485
- const m = $(() => w.value.map((n) => ({
485
+ const v = $(() => w.value.map((n) => ({
486
486
  item: n,
487
487
  icon: S(n),
488
488
  date: ot(n),
@@ -506,7 +506,7 @@ const at = {
506
506
  onClick: A
507
507
  }, [
508
508
  T(ae, { class: "!h-[21px] !w-[21px]" }),
509
- _.value ? (a(), u("span", at)) : v("", !0)
509
+ _.value ? (a(), u("span", at)) : m("", !0)
510
510
  ]),
511
511
  T(ue, {
512
512
  "enter-active-class": "transition-all ease-out duration-75",
@@ -519,8 +519,8 @@ const at = {
519
519
  default: F(() => [
520
520
  G(r("div", rt, [
521
521
  r("div", lt, [
522
- e.notifications ? w.value.length ? v("", !0) : (a(), u("div", it, " No notifications. ")) : (a(), u("div", st, " Loading notifications… ")),
523
- (a(!0), u(H, null, P(m.value, (d) => (a(), u("div", {
522
+ e.notifications ? w.value.length ? m("", !0) : (a(), u("div", it, " No notifications. ")) : (a(), u("div", st, " Loading notifications… ")),
523
+ (a(!0), u(H, null, P(v.value, (d) => (a(), u("div", {
524
524
  key: d.item.NotifyID,
525
525
  class: M(["flex cursor-pointer items-start gap-3 border-b-[1px] border-proclusteal-200 dark:border-line px-4 py-3", d.unread ? "bg-proclusteal-50 dark:bg-surface-hover" : "bg-surface-raised"]),
526
526
  onClick: (C) => f(d.item.url)
@@ -544,7 +544,7 @@ const at = {
544
544
  r("span", pt, [
545
545
  r("span", ft, b(d.item.notifyname), 1),
546
546
  r("span", xt, b(d.item.summary), 1),
547
- d.date ? (a(), u("span", ht, b(d.date), 1)) : v("", !0)
547
+ d.date ? (a(), u("span", ht, b(d.date), 1)) : m("", !0)
548
548
  ]),
549
549
  r("span", yt, [
550
550
  d.unread ? (a(), u("button", {
@@ -556,7 +556,7 @@ const at = {
556
556
  onClick: N((C) => n.$emit("markAsRead", d.item.NotifyID), ["stop"])
557
557
  }, [
558
558
  T(Ee, { class: "!h-4 !w-4" })
559
- ], 8, mt)) : v("", !0),
559
+ ], 8, mt)) : m("", !0),
560
560
  r("button", {
561
561
  type: "button",
562
562
  class: "hover:text-[#dd3730]",
@@ -613,7 +613,7 @@ const at = {
613
613
  function g(S) {
614
614
  x.value = !1, y("select", S);
615
615
  }
616
- return (S, m) => (a(), u("div", {
616
+ return (S, v) => (a(), u("div", {
617
617
  ref_key: "rootEl",
618
618
  ref: p,
619
619
  class: "relative font-sans"
@@ -623,14 +623,14 @@ const at = {
623
623
  class: "flex cursor-pointer items-center justify-center",
624
624
  title: "View Menu Options",
625
625
  "aria-label": "View Menu Options",
626
- onClick: m[1] || (m[1] = (f) => x.value = !x.value)
626
+ onClick: v[1] || (v[1] = (f) => x.value = !x.value)
627
627
  }, [
628
628
  e.user.avatarUrl && !w.value ? (a(), u("img", {
629
629
  key: 0,
630
630
  src: e.user.avatarUrl,
631
631
  alt: "",
632
632
  class: "h-[34px] w-[34px] rounded-full object-cover",
633
- onError: m[0] || (m[0] = (f) => w.value = !0)
633
+ onError: v[0] || (v[0] = (f) => w.value = !0)
634
634
  }, null, 40, gt)) : (a(), u("span", wt, b(A.value), 1))
635
635
  ]),
636
636
  T(ue, {
@@ -659,7 +659,7 @@ const at = {
659
659
  f.icon ? (a(), I(de(f.icon), {
660
660
  key: 0,
661
661
  class: "!h-4 !w-4 flex-none"
662
- })) : v("", !0),
662
+ })) : m("", !0),
663
663
  r("span", null, b(f.label), 1)
664
664
  ], 8, It))
665
665
  ], 64))), 128))
@@ -744,6 +744,13 @@ const at = {
744
744
  searchTypes: {
745
745
  type: Object,
746
746
  default: () => ({})
747
+ },
748
+ // #479: gate for the three top-right icons (search pill, bell, profile). Default true so
749
+ // existing consumers are unaffected; an app that loads its header data asynchronously passes
750
+ // false until user + notifications + search have all settled, then true to reveal all at once.
751
+ ready: {
752
+ type: Boolean,
753
+ default: !0
747
754
  }
748
755
  },
749
756
  emits: [
@@ -766,7 +773,7 @@ const at = {
766
773
  function S() {
767
774
  y("home"), g(o.homeUrl);
768
775
  }
769
- function m() {
776
+ function v() {
770
777
  window.history.back();
771
778
  }
772
779
  function f(n) {
@@ -777,14 +784,14 @@ const at = {
777
784
  R(n.$slots, "logo"),
778
785
  e.title ? (a(), u("span", Ot, [
779
786
  j(b(e.title), 1),
780
- e.subtitle ? (a(), u("span", Lt, " " + b(e.subtitle), 1)) : v("", !0)
781
- ])) : v("", !0),
787
+ e.subtitle ? (a(), u("span", Lt, " " + b(e.subtitle), 1)) : m("", !0)
788
+ ])) : m("", !0),
782
789
  _.value ? (a(), u("span", {
783
790
  key: 1,
784
791
  class: "h-[45px] w-[2px] shrink-0",
785
792
  style: q({ background: _.value }),
786
793
  "aria-hidden": "true"
787
- }, null, 4)) : v("", !0),
794
+ }, null, 4)) : m("", !0),
788
795
  r("nav", {
789
796
  class: "flex items-center gap-7 text-proclusteal-600 dark:text-content-muted",
790
797
  style: q({ "--hdr-accent": A.value })
@@ -805,44 +812,46 @@ const at = {
805
812
  ], 8, zt)
806
813
  ]),
807
814
  _: 1
808
- }, 8, ["text"])) : v("", !0),
815
+ }, 8, ["text"])) : m("", !0),
809
816
  e.showBack ? (a(), u("button", {
810
817
  key: 1,
811
818
  type: "button",
812
819
  class: "cursor-pointer hover:text-[var(--hdr-accent)]",
813
820
  title: "Go Back",
814
821
  "aria-label": "Go Back",
815
- onClick: m
822
+ onClick: v
816
823
  }, [
817
824
  T(Te, { class: "!h-[22px] !w-[22px]" })
818
- ])) : v("", !0),
825
+ ])) : m("", !0),
819
826
  R(n.$slots, "nav-extra")
820
827
  ], 4),
821
828
  R(n.$slots, "left")
822
829
  ]),
823
830
  r("div", Dt, [
824
831
  R(n.$slots, "right"),
825
- e.searchProvider ? (a(), I(Le, {
826
- key: 0,
827
- onClick: c[0] || (c[0] = (d) => x.value = !0)
828
- })) : v("", !0),
829
- w.value ? (a(), I(kt, {
830
- key: 1,
831
- notifications: e.notifications,
832
- "unread-count": e.unreadCount,
833
- "notifications-url": e.notificationsUrl,
834
- "icon-map": e.notificationIconMap,
835
- onMarkAsRead: c[1] || (c[1] = (d) => n.$emit("markAsRead", d)),
836
- onDeleteNotification: c[2] || (c[2] = (d) => n.$emit("deleteNotification", d)),
837
- onOpen: c[3] || (c[3] = (d) => n.$emit("notifications-open")),
838
- onNavigate: g
839
- }, null, 8, ["notifications", "unread-count", "notifications-url", "icon-map"])) : v("", !0),
840
- e.user ? (a(), I(Et, {
841
- key: 2,
842
- user: e.user,
843
- "menu-items": e.menuItems,
844
- onSelect: f
845
- }, null, 8, ["user", "menu-items"])) : v("", !0)
832
+ e.ready ? (a(), u(H, { key: 0 }, [
833
+ e.searchProvider ? (a(), I(Le, {
834
+ key: 0,
835
+ onClick: c[0] || (c[0] = (d) => x.value = !0)
836
+ })) : m("", !0),
837
+ w.value ? (a(), I(kt, {
838
+ key: 1,
839
+ notifications: e.notifications,
840
+ "unread-count": e.unreadCount,
841
+ "notifications-url": e.notificationsUrl,
842
+ "icon-map": e.notificationIconMap,
843
+ onMarkAsRead: c[1] || (c[1] = (d) => n.$emit("markAsRead", d)),
844
+ onDeleteNotification: c[2] || (c[2] = (d) => n.$emit("deleteNotification", d)),
845
+ onOpen: c[3] || (c[3] = (d) => n.$emit("notifications-open")),
846
+ onNavigate: g
847
+ }, null, 8, ["notifications", "unread-count", "notifications-url", "icon-map"])) : m("", !0),
848
+ e.user ? (a(), I(Et, {
849
+ key: 2,
850
+ user: e.user,
851
+ "menu-items": e.menuItems,
852
+ onSelect: f
853
+ }, null, 8, ["user", "menu-items"])) : m("", !0)
854
+ ], 64)) : m("", !0)
846
855
  ]),
847
856
  e.searchProvider ? (a(), I(tt, {
848
857
  key: 0,
@@ -852,7 +861,7 @@ const at = {
852
861
  placeholder: e.searchPlaceholder,
853
862
  types: e.searchTypes,
854
863
  onNavigate: g
855
- }, null, 8, ["open", "search-provider", "placeholder", "types"])) : v("", !0)
864
+ }, null, 8, ["open", "search-provider", "placeholder", "types"])) : m("", !0)
856
865
  ]));
857
866
  }
858
867
  };