zero-tooltip 1.4.2 → 1.4.3

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/README.md CHANGED
@@ -78,6 +78,7 @@ const tooltipConfig: ZeroTooltipConfig = {
78
78
  zIndex: ... ,
79
79
  showDelay: ... ,
80
80
  hideDelay: ... ,
81
+ showWarnings: ... ,
81
82
  }
82
83
 
83
84
  app.use(ZeroTooltip, tooltipConfig)
@@ -137,6 +138,7 @@ const tooltipConfig: ZeroTooltipLocalConfig = reactive({
137
138
  | zIndex | *1* | number | string | `z-index` css property value of tooltip |
138
139
  | showDelay | *0* | number | Delay in milliseconds after which to show tooltip while hovering over element |
139
140
  | hideDelay | *0* | number | Delay in milliseconds after which to hide tooltip when leaving element boundaries |
141
+ | showWarnings | *true* | boolean | Whether to show warning about empty tooltip text value in cases when tooltip was expected to be shown |
140
142
 
141
143
  ## ZeroTooltipLocalConfig
142
144
  Same as [ZeroTooltipConfig](#ZeroTooltipConfig) with following additions:
@@ -17,5 +17,6 @@ type TooltipConfig = {
17
17
  zIndex?: number | string;
18
18
  showDelay?: number;
19
19
  hideDelay?: number;
20
+ showWarnings?: boolean;
20
21
  };
21
22
  export default TooltipConfig;
@@ -1,34 +1,34 @@
1
- import { isReactive as g, watch as ee } from "vue";
1
+ import { isReactive as ee, watch as te } from "vue";
2
2
  let c;
3
- const te = new Uint8Array(16);
4
- function re() {
3
+ const re = new Uint8Array(16);
4
+ function se() {
5
5
  if (!c && (c = typeof crypto < "u" && crypto.getRandomValues && crypto.getRandomValues.bind(crypto), !c))
6
6
  throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");
7
- return c(te);
7
+ return c(re);
8
8
  }
9
9
  const u = [];
10
10
  for (let t = 0; t < 256; ++t)
11
11
  u.push((t + 256).toString(16).slice(1));
12
- function se(t, e = 0) {
12
+ function oe(t, e = 0) {
13
13
  return u[t[e + 0]] + u[t[e + 1]] + u[t[e + 2]] + u[t[e + 3]] + "-" + u[t[e + 4]] + u[t[e + 5]] + "-" + u[t[e + 6]] + u[t[e + 7]] + "-" + u[t[e + 8]] + u[t[e + 9]] + "-" + u[t[e + 10]] + u[t[e + 11]] + u[t[e + 12]] + u[t[e + 13]] + u[t[e + 14]] + u[t[e + 15]];
14
14
  }
15
- const oe = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), P = {
16
- randomUUID: oe
15
+ const ie = typeof crypto < "u" && crypto.randomUUID && crypto.randomUUID.bind(crypto), P = {
16
+ randomUUID: ie
17
17
  };
18
- function ie(t, e, r) {
18
+ function ne(t, e, r) {
19
19
  if (P.randomUUID && !e && !t)
20
20
  return P.randomUUID();
21
21
  t = t || {};
22
- const s = t.random || (t.rng || re)();
22
+ const s = t.random || (t.rng || se)();
23
23
  if (s[6] = s[6] & 15 | 64, s[8] = s[8] & 63 | 128, e) {
24
24
  r = r || 0;
25
25
  for (let o = 0; o < 16; ++o)
26
26
  e[r + o] = s[o];
27
27
  return e;
28
28
  }
29
- return se(s);
29
+ return oe(s);
30
30
  }
31
- function ne() {
31
+ function de() {
32
32
  let t = [];
33
33
  const e = (o, i) => {
34
34
  r(o);
@@ -67,15 +67,15 @@ function ne() {
67
67
  };
68
68
  return { handleHideOnScroll: e, removeHideOnScrollListeners: s };
69
69
  }
70
- function de() {
70
+ function we() {
71
71
  const t = {}, e = {};
72
72
  return { handleHideOnResize: (o, i, d) => {
73
73
  let n = new ResizeObserver((w) => {
74
- const p = w[0].target;
74
+ const h = w[0].target;
75
75
  if (!e[o])
76
76
  e[o] = i.getBoundingClientRect();
77
77
  else {
78
- const a = p.getBoundingClientRect();
78
+ const a = h.getBoundingClientRect();
79
79
  (a.left !== e[o].left || a.top !== e[o].top || a.width !== e[o].width || a.height !== e[o].height) && d();
80
80
  }
81
81
  });
@@ -84,7 +84,7 @@ function de() {
84
84
  t[o] && t[o].disconnect(), delete t[o], delete e[o];
85
85
  } };
86
86
  }
87
- function we() {
87
+ function he() {
88
88
  const t = {};
89
89
  return { handleRepositionOnResize: (s, o) => {
90
90
  t[s] = new AbortController(), window.addEventListener("resize", o);
@@ -92,87 +92,78 @@ function we() {
92
92
  t[s] && t[s].abort();
93
93
  } };
94
94
  }
95
- const { handleHideOnScroll: pe, removeHideOnScrollListeners: he } = ne(), { handleHideOnResize: ue, resetResizeReferences: ae } = de(), { handleRepositionOnResize: me, removeRepositionOnResizeHandler: ce } = we(), k = "zero-tooltip__container", j = "zero-tooltip__text", y = "zero-tooltip__arrow", v = {
95
+ const { handleHideOnScroll: pe, removeHideOnScrollListeners: ue } = de(), { handleHideOnResize: ae, resetResizeReferences: me } = we(), { handleRepositionOnResize: ce, removeRepositionOnResizeHandler: ve } = he(), k = "zero-tooltip__container", j = "zero-tooltip__text", x = "zero-tooltip__arrow", v = {
96
96
  left: ["left", "right", "top", "bottom"],
97
97
  top: ["top", "bottom", "right", "left"],
98
98
  right: ["right", "left", "top", "bottom"],
99
99
  bottom: ["bottom", "top", "right", "left"]
100
- }, ve = "body", Oe = "top", le = 10, Te = 20, ye = 100, xe = 250, fe = 0, q = "zt-fixed zt-opacity-0 zt-inline-block zt-w-fit zt-py-1.5 zt-px-2.5 zt-rounded-md zt-bg-[#495057] zt-shadow-[0_2px_12px_0_rgba(0,0,0,0.1)] zt-box-border", N = "zt-text-sm zt-text-white zt-whitespace-pre-wrap zt-break-words", Fe = 5, ze = "zt-absolute zt-border-solid zt-border-[#495057]", Me = 6, Se = 1, We = !0, Ve = 0, Be = 0, Le = !1, h = {}, He = (t) => ({
100
+ }, Oe = "body", ye = "top", Te = 10, xe = 20, le = 100, Fe = 250, ze = 0, q = "zt-fixed zt-opacity-0 zt-inline-block zt-w-fit zt-py-1.5 zt-px-2.5 zt-rounded-md zt-bg-[#495057] zt-shadow-[0_2px_12px_0_rgba(0,0,0,0.1)] zt-box-border", N = "zt-text-sm zt-text-white zt-whitespace-pre-wrap zt-break-words", Me = 5, fe = "zt-absolute zt-border-solid zt-border-[#495057]", We = 6, Se = 1, Ve = !0, Be = 0, Le = 0, He = !1, Ae = !0, p = {}, Ie = (t) => ({
101
101
  created: (e, r, s) => {
102
- const o = ie();
103
- s.el.$_tooltip = { uuid: o }, l(r.value, t, r.arg, e, o), typeof r.value != "string" && g(r.value) && ee(r.value, (i) => {
104
- h[o] && T(h[o]), l(i, t, r.arg, e, o);
102
+ const o = ne();
103
+ s.el.$_tooltip = { uuid: o }, y(r.value, t, r.arg, e, o), typeof r.value != "string" && ee(r.value) && te(r.value, (i) => {
104
+ p[o] && T(p[o]), y(i, t, r.arg, e, o);
105
105
  });
106
106
  },
107
107
  updated: (e, r, s) => {
108
108
  const o = s.el.$_tooltip.uuid;
109
- h[o] && T(h[o]), l(r.value, t, r.arg, e, o);
109
+ p[o] && T(p[o]), y(r.value, t, r.arg, e, o);
110
110
  },
111
111
  beforeUnmount: (e, r, s) => {
112
112
  const o = s.el.$_tooltip.uuid;
113
- h[o] && T(h[o]);
113
+ p[o] && T(p[o]);
114
114
  }
115
115
  });
116
- function l(t, e, r, s, o) {
117
- let i = Ae(t, e, r);
118
- const d = De(s, i, o);
119
- h[o] = d, s.matches(":hover") && s.dispatchEvent(new Event("mouseenter"));
116
+ function y(t, e, r, s, o) {
117
+ let i = De(t, e, r);
118
+ const d = $e(s, i, o);
119
+ p[o] = d, s.matches(":hover") && s.dispatchEvent(new Event("mouseenter"));
120
120
  }
121
- function Ae(t, e, r) {
122
- var H, A, I, D, R, E, $, _;
123
- let s = (e == null ? void 0 : e.appendTo) ?? ve, o = Ie(t), i = r ?? (e == null ? void 0 : e.defaultPosition) ?? Oe, d = {
121
+ function De(t, e, r) {
122
+ var H, A, I, D, R, $, E, _;
123
+ let s = (e == null ? void 0 : e.appendTo) ?? Oe, o = Re(t), i = r ?? (e == null ? void 0 : e.defaultPosition) ?? ye, d = {
124
124
  left: ((H = e == null ? void 0 : e.positions) == null ? void 0 : H.left) ?? v.left,
125
125
  top: ((A = e == null ? void 0 : e.positions) == null ? void 0 : A.top) ?? v.top,
126
126
  right: ((I = e == null ? void 0 : e.positions) == null ? void 0 : I.right) ?? v.right,
127
127
  bottom: ((D = e == null ? void 0 : e.positions) == null ? void 0 : D.bottom) ?? v.bottom
128
- }, n = (e == null ? void 0 : e.offsetFromSource) ?? le, w = (e == null ? void 0 : e.offsetFromViewport) ?? Te, p = (e == null ? void 0 : e.minWidth) ?? ye, a = (e == null ? void 0 : e.maxWidth) ?? xe, m = (e == null ? void 0 : e.tooltipBorderWidth) ?? fe, x = k + " " + q + " " + ((e == null ? void 0 : e.tooltipClasses) ?? ""), f = j + " " + N + " " + ((e == null ? void 0 : e.textClasses) ?? ""), F = (e == null ? void 0 : e.arrowSize) ?? Fe, z = (e == null ? void 0 : e.arrowClasses) ?? "", M = (e == null ? void 0 : e.arrowMinOffsetFromTooltipCorner) ?? Me, S = (e == null ? void 0 : e.zIndex) ?? Se, W = We, V = (e == null ? void 0 : e.showDelay) ?? Ve, B = (e == null ? void 0 : e.hideDelay) ?? Be, L = Le;
129
- return typeof t != "string" && (t.appendTo !== void 0 && (s = t.appendTo), r === void 0 && t.defaultPosition !== void 0 && (i = t.defaultPosition), ((R = t.positions) == null ? void 0 : R.left) !== void 0 && (d.left = t.positions.left), ((E = t.positions) == null ? void 0 : E.top) !== void 0 && (d.top = t.positions.top), (($ = t.positions) == null ? void 0 : $.right) !== void 0 && (d.right = t.positions.right), ((_ = t.positions) == null ? void 0 : _.bottom) !== void 0 && (d.bottom = t.positions.bottom), t.offsetFromSource !== void 0 && (n = t.offsetFromSource), t.offsetFromViewport !== void 0 && (w = t.offsetFromViewport), t.minWidth !== void 0 && (p = t.minWidth), t.maxWidth !== void 0 && (a = t.maxWidth), t.tooltipBorderWidth !== void 0 && (m = t.tooltipBorderWidth), t.tooltipClasses !== void 0 && (x = k + " " + q + " " + t.tooltipClasses), t.textClasses !== void 0 && (f = j + " " + N + " " + t.textClasses), t.arrowSize !== void 0 && (F = t.arrowSize), t.arrowClasses !== void 0 && (z = t.arrowClasses), t.arrowMinOffsetFromTooltipCorner !== void 0 && (M = t.arrowMinOffsetFromTooltipCorner), t.zIndex !== void 0 && (S = t.zIndex), t.show !== void 0 && (W = t.show), t.showDelay !== void 0 && (V = t.showDelay), t.hideDelay !== void 0 && (B = t.hideDelay), t.alwaysOn !== void 0 && (L = t.alwaysOn)), {
128
+ }, n = (e == null ? void 0 : e.offsetFromSource) ?? Te, w = (e == null ? void 0 : e.offsetFromViewport) ?? xe, h = (e == null ? void 0 : e.minWidth) ?? le, a = (e == null ? void 0 : e.maxWidth) ?? Fe, m = (e == null ? void 0 : e.tooltipBorderWidth) ?? ze, l = k + " " + q + " " + ((e == null ? void 0 : e.tooltipClasses) ?? ""), F = j + " " + N + " " + ((e == null ? void 0 : e.textClasses) ?? ""), z = (e == null ? void 0 : e.arrowSize) ?? Me, M = (e == null ? void 0 : e.arrowClasses) ?? "", f = (e == null ? void 0 : e.arrowMinOffsetFromTooltipCorner) ?? We, W = (e == null ? void 0 : e.zIndex) ?? Se, S = Ve, V = (e == null ? void 0 : e.showDelay) ?? Be, B = (e == null ? void 0 : e.hideDelay) ?? Le, L = He, g = (e == null ? void 0 : e.showWarnings) ?? Ae;
129
+ return typeof t != "string" && (t.appendTo !== void 0 && (s = t.appendTo), r === void 0 && t.defaultPosition !== void 0 && (i = t.defaultPosition), ((R = t.positions) == null ? void 0 : R.left) !== void 0 && (d.left = t.positions.left), (($ = t.positions) == null ? void 0 : $.top) !== void 0 && (d.top = t.positions.top), ((E = t.positions) == null ? void 0 : E.right) !== void 0 && (d.right = t.positions.right), ((_ = t.positions) == null ? void 0 : _.bottom) !== void 0 && (d.bottom = t.positions.bottom), t.offsetFromSource !== void 0 && (n = t.offsetFromSource), t.offsetFromViewport !== void 0 && (w = t.offsetFromViewport), t.minWidth !== void 0 && (h = t.minWidth), t.maxWidth !== void 0 && (a = t.maxWidth), t.tooltipBorderWidth !== void 0 && (m = t.tooltipBorderWidth), t.tooltipClasses !== void 0 && (l = k + " " + q + " " + t.tooltipClasses), t.textClasses !== void 0 && (F = j + " " + N + " " + t.textClasses), t.arrowSize !== void 0 && (z = t.arrowSize), t.arrowClasses !== void 0 && (M = t.arrowClasses), t.arrowMinOffsetFromTooltipCorner !== void 0 && (f = t.arrowMinOffsetFromTooltipCorner), t.zIndex !== void 0 && (W = t.zIndex), t.show !== void 0 && (S = t.show), t.showDelay !== void 0 && (V = t.showDelay), t.hideDelay !== void 0 && (B = t.hideDelay), t.alwaysOn !== void 0 && (L = t.alwaysOn)), {
130
130
  appendTo: s,
131
131
  tooltipText: o,
132
132
  tooltipPosition: i,
133
133
  tooltipPositions: d,
134
134
  tooltipOffsetFromSource: n,
135
135
  tooltipOffsetFromViewport: w,
136
- tooltipMinWidth: p,
136
+ tooltipMinWidth: h,
137
137
  tooltipMaxWidth: a,
138
138
  tooltipBorderWidth: m,
139
- tooltipClasses: x,
140
- textClasses: f,
141
- arrowSize: F,
142
- arrowClasses: z,
143
- arrowMinOffsetFromTooltipCorner: M,
144
- zIndex: S,
145
- shouldShow: W,
139
+ tooltipClasses: l,
140
+ textClasses: F,
141
+ arrowSize: z,
142
+ arrowClasses: M,
143
+ arrowMinOffsetFromTooltipCorner: f,
144
+ zIndex: W,
145
+ shouldShow: S,
146
146
  showDelay: V,
147
147
  hideDelay: B,
148
- alwaysOn: L
148
+ alwaysOn: L,
149
+ showWarnings: g
149
150
  };
150
151
  }
151
- function Ie(t) {
152
+ function Re(t) {
152
153
  if (t == null)
153
- throw new Error("Tooltip text or 'content' option must be defined ('undefined' or 'null' provided)");
154
- if (typeof t == "string") {
155
- const e = t.trim();
156
- if (e === "")
157
- throw new Error("Tooltip text must not be empty string OR set option 'show' to 'false'");
158
- return e;
159
- }
154
+ return "";
155
+ if (typeof t == "string")
156
+ return t;
160
157
  if (Object.hasOwn(t, "content")) {
161
- if (t.show === !1)
162
- return "";
163
158
  if (t.content === void 0 || t.content === null)
164
- throw new Error("Tooltip 'content' must be defined ('undefined' or 'null' provided) OR set option 'show' to 'false'");
165
- if (typeof t.content == "string") {
166
- const e = t.content.trim();
167
- if (e === "")
168
- throw new Error("Tooltip 'content' must not be empty string OR set option 'show' to 'false'");
169
- return e;
170
- }
159
+ return "";
160
+ if (typeof t.content == "string")
161
+ return t.content;
171
162
  }
172
163
  throw new Error("Tooltip text or 'content' option must be defined with correct type");
173
164
  }
174
- function De(t, e, r) {
175
- let s = t, o = Re(e.textClasses, e.tooltipText), i = Ee(e.tooltipClasses, e.tooltipBorderWidth);
165
+ function $e(t, e, r) {
166
+ let s = t, o = Ee(e.textClasses, e.tooltipText), i = _e(e.tooltipClasses, e.tooltipBorderWidth);
176
167
  i.append(o), i.dataset.uuid = r;
177
168
  const d = {
178
169
  currentInstanceId: Date.now(),
@@ -184,8 +175,8 @@ function De(t, e, r) {
184
175
  tooltipElementMouseEnter: new AbortController(),
185
176
  tooltipElementMouseLeave: new AbortController()
186
177
  };
187
- return e.alwaysOn ? setTimeout(() => {
188
- G(s, e, i, "absolute"), me(r, () => $e(s, e, i, "absolute"));
178
+ return e.tooltipText === "" ? e.shouldShow && e.showWarnings && console.warn("Tooltip text is empty") : e.alwaysOn ? setTimeout(() => {
179
+ G(s, e, i, "absolute"), ce(r, () => Pe(s, e, i, "absolute"));
189
180
  }, 0) : (s.addEventListener("mouseenter", () => U(s, e, i, r), { signal: n.anchorElementMouseEnter.signal }), s.addEventListener("mouseleave", () => X(e, r), { signal: n.anchorElementMouseLeave.signal }), i.addEventListener("mouseenter", () => U(s, e, i, r, { isTooltip: !0 }), { signal: n.tooltipElementMouseEnter.signal }), i.addEventListener("mouseleave", () => X(e, r, { isTooltip: !0 }), { signal: n.tooltipElementMouseLeave.signal })), {
190
181
  anchorElement: s,
191
182
  tooltipConfig: e,
@@ -194,11 +185,11 @@ function De(t, e, r) {
194
185
  mouseEventState: d
195
186
  };
196
187
  }
197
- function Re(t, e) {
188
+ function Ee(t, e) {
198
189
  let r = document.createElement("p");
199
190
  return r.classList.add(...t.trim().split(" ")), r.innerHTML = e, r;
200
191
  }
201
- function Ee(t, e) {
192
+ function _e(t, e) {
202
193
  let r = document.createElement("div");
203
194
  return r.classList.add(...t.trim().split(" ")), r.style.borderWidth = `${e}px`, r;
204
195
  }
@@ -207,11 +198,11 @@ async function U(t, e, r, s, o) {
207
198
  return;
208
199
  let i = o != null && o.isTooltip ? 0 : e.showDelay;
209
200
  const d = 100;
210
- !(o != null && o.isTooltip) && Date.now() - h[s].mouseEventState.lastTooltipMouseLeaveTimestamp <= d && (i = 0);
201
+ !(o != null && o.isTooltip) && Date.now() - p[s].mouseEventState.lastTooltipMouseLeaveTimestamp <= d && (i = 0);
211
202
  const n = Date.now();
212
- if (h[s].mouseEventState.currentInstanceId = n, h[s].mouseEventState.isHoveringOverAnchorElement = !0, i > 0 && (await new Promise((p) => setTimeout(p, i)), !h[s].mouseEventState.isHoveringOverAnchorElement || h[s].mouseEventState.currentInstanceId !== n))
203
+ if (p[s].mouseEventState.currentInstanceId = n, p[s].mouseEventState.isHoveringOverAnchorElement = !0, i > 0 && (await new Promise((h) => setTimeout(h, i)), !p[s].mouseEventState.isHoveringOverAnchorElement || p[s].mouseEventState.currentInstanceId !== n))
213
204
  return;
214
- G(t, e, r) && (pe(t, () => O(s)), ue(s, t, () => O(s)));
205
+ G(t, e, r) && (pe(t, () => O(s)), ae(s, t, () => O(s)));
215
206
  }
216
207
  function G(t, e, r, s) {
217
208
  let o = { x: 0, y: 0 };
@@ -219,25 +210,25 @@ function G(t, e, r, s) {
219
210
  const i = t.getBoundingClientRect(), d = document.querySelector(e.appendTo);
220
211
  d == null || d.appendChild(r);
221
212
  let n = !1, w = e.tooltipPosition;
222
- for (let p = 0; p < 4 && (w = e.tooltipPositions[e.tooltipPosition][p], w === "left" ? n = J(i, e, r, o) : w === "top" ? n = Q(i, e, r, o) : w === "right" ? n = K(i, e, r, o) : w === "bottom" && (n = b(i, e, r, o)), !n); p++)
213
+ for (let h = 0; h < 4 && (w = e.tooltipPositions[e.tooltipPosition][h], w === "left" ? n = J(i, e, r, o) : w === "top" ? n = Q(i, e, r, o) : w === "right" ? n = K(i, e, r, o) : w === "bottom" && (n = b(i, e, r, o)), !n); h++)
223
214
  ;
224
215
  return n ? (C(i, w, e, r), r.style.opacity = "1", r.style.zIndex = typeof e.zIndex == "string" ? e.zIndex : e.zIndex.toString(), !0) : !1;
225
216
  }
226
- function $e(t, e, r, s) {
217
+ function Pe(t, e, r, s) {
227
218
  var w;
228
- (w = r.querySelector(`.${y}`)) == null || w.remove();
219
+ (w = r.querySelector(`.${x}`)) == null || w.remove();
229
220
  let o = { x: 0, y: 0 };
230
221
  s === "absolute" && (o.x = window.scrollX, o.y = window.scrollY);
231
222
  const i = t.getBoundingClientRect();
232
223
  let d = !1, n = e.tooltipPosition;
233
- for (let p = 0; p < 4 && (n = e.tooltipPositions[e.tooltipPosition][p], n === "left" ? d = J(i, e, r, o) : n === "top" ? d = Q(i, e, r, o) : n === "right" ? d = K(i, e, r, o) : n === "bottom" && (d = b(i, e, r, o)), !d); p++)
224
+ for (let h = 0; h < 4 && (n = e.tooltipPositions[e.tooltipPosition][h], n === "left" ? d = J(i, e, r, o) : n === "top" ? d = Q(i, e, r, o) : n === "right" ? d = K(i, e, r, o) : n === "bottom" && (d = b(i, e, r, o)), !d); h++)
234
225
  ;
235
226
  d && C(i, n, e, r);
236
227
  }
237
228
  async function X(t, e, r) {
238
- r != null && r.isTooltip && (h[e].mouseEventState.lastTooltipMouseLeaveTimestamp = Date.now());
229
+ r != null && r.isTooltip && (p[e].mouseEventState.lastTooltipMouseLeaveTimestamp = Date.now());
239
230
  const s = Date.now();
240
- h[e].mouseEventState.currentInstanceId = s, h[e].mouseEventState.isHoveringOverAnchorElement = !1, !(t.hideDelay > 0 && (await new Promise((o) => setTimeout(o, t.hideDelay)), h[e].mouseEventState.isHoveringOverAnchorElement || h[e].mouseEventState.currentInstanceId !== s)) && O(e);
231
+ p[e].mouseEventState.currentInstanceId = s, p[e].mouseEventState.isHoveringOverAnchorElement = !1, !(t.hideDelay > 0 && (await new Promise((o) => setTimeout(o, t.hideDelay)), p[e].mouseEventState.isHoveringOverAnchorElement || p[e].mouseEventState.currentInstanceId !== s)) && O(e);
241
232
  }
242
233
  function J(t, e, r, s) {
243
234
  const o = Math.min(t.left - e.tooltipOffsetFromSource - e.tooltipOffsetFromViewport, e.tooltipMaxWidth), i = t.top >= e.tooltipOffsetFromViewport, d = window.innerHeight - t.bottom >= e.tooltipOffsetFromViewport;
@@ -247,8 +238,8 @@ function J(t, e, r, s) {
247
238
  const n = r.getBoundingClientRect();
248
239
  let w = t.top + t.height / 2 - n.height / 2;
249
240
  w < e.tooltipOffsetFromViewport ? w = e.tooltipOffsetFromViewport : w + n.height > window.innerHeight - e.tooltipOffsetFromViewport && (w = window.innerHeight - e.tooltipOffsetFromViewport - n.height);
250
- const p = t.left - e.tooltipOffsetFromSource - n.width;
251
- return t.bottom < w + e.arrowMinOffsetFromTooltipCorner * 2 || t.top > w + n.height - e.arrowMinOffsetFromTooltipCorner * 2 ? !1 : (r.style.top = `${w + s.y}px`, r.style.left = `${p + s.x}px`, !0);
241
+ const h = t.left - e.tooltipOffsetFromSource - n.width;
242
+ return t.bottom < w + e.arrowMinOffsetFromTooltipCorner * 2 || t.top > w + n.height - e.arrowMinOffsetFromTooltipCorner * 2 ? !1 : (r.style.top = `${w + s.y}px`, r.style.left = `${h + s.x}px`, !0);
252
243
  }
253
244
  function K(t, e, r, s) {
254
245
  const o = Math.min(window.innerWidth - (t.right + e.tooltipOffsetFromSource) - e.tooltipOffsetFromViewport, e.tooltipMaxWidth), i = t.top >= e.tooltipOffsetFromViewport, d = window.innerHeight - t.bottom >= e.tooltipOffsetFromViewport;
@@ -258,8 +249,8 @@ function K(t, e, r, s) {
258
249
  const n = r.getBoundingClientRect();
259
250
  let w = t.top + t.height / 2 - n.height / 2;
260
251
  w < e.tooltipOffsetFromViewport ? w = e.tooltipOffsetFromViewport : w + n.height > window.innerHeight - e.tooltipOffsetFromViewport && (w = window.innerHeight - e.tooltipOffsetFromViewport - n.height);
261
- const p = t.right + e.tooltipOffsetFromSource;
262
- return t.bottom < w + e.arrowMinOffsetFromTooltipCorner * 2 || t.top > w + n.height - e.arrowMinOffsetFromTooltipCorner * 2 ? !1 : (r.style.top = `${w + s.y}px`, r.style.left = `${p + s.x}px`, !0);
252
+ const h = t.right + e.tooltipOffsetFromSource;
253
+ return t.bottom < w + e.arrowMinOffsetFromTooltipCorner * 2 || t.top > w + n.height - e.arrowMinOffsetFromTooltipCorner * 2 ? !1 : (r.style.top = `${w + s.y}px`, r.style.left = `${h + s.x}px`, !0);
263
254
  }
264
255
  function Q(t, e, r, s) {
265
256
  const o = Math.min(window.innerWidth - e.tooltipOffsetFromViewport * 2, e.tooltipMaxWidth);
@@ -283,24 +274,24 @@ function b(t, e, r, s) {
283
274
  }
284
275
  function C(t, e, r, s) {
285
276
  const o = document.createElement("div"), i = s.getBoundingClientRect(), d = Math.sin(45 * (180 / Math.PI)) * r.arrowSize, n = 1;
286
- let w = 0, p = 0, a = "";
277
+ let w = 0, h = 0, a = "";
287
278
  switch (e) {
288
279
  case "left":
289
- a = "!zt-border-y-transparent !zt-border-r-transparent", w = t.top - i.top + t.height / 2 - d - r.tooltipBorderWidth, p = i.width - r.tooltipBorderWidth - n;
280
+ a = "!zt-border-y-transparent !zt-border-r-transparent", w = t.top - i.top + t.height / 2 - d - r.tooltipBorderWidth, h = i.width - r.tooltipBorderWidth - n;
290
281
  break;
291
282
  case "top":
292
- a = "!zt-border-x-transparent !zt-border-b-transparent", w = i.height - r.tooltipBorderWidth - n, p = t.left - i.left + t.width / 2 - d - r.tooltipBorderWidth;
283
+ a = "!zt-border-x-transparent !zt-border-b-transparent", w = i.height - r.tooltipBorderWidth - n, h = t.left - i.left + t.width / 2 - d - r.tooltipBorderWidth;
293
284
  break;
294
285
  case "right":
295
- a = "!zt-border-y-transparent !zt-border-l-transparent", w = t.top - i.top + t.height / 2 - d - r.tooltipBorderWidth, p = -r.arrowSize * 2 - r.tooltipBorderWidth + n;
286
+ a = "!zt-border-y-transparent !zt-border-l-transparent", w = t.top - i.top + t.height / 2 - d - r.tooltipBorderWidth, h = -r.arrowSize * 2 - r.tooltipBorderWidth + n;
296
287
  break;
297
288
  case "bottom":
298
- a = "!zt-border-x-transparent !zt-border-t-transparent", w = -r.arrowSize * 2 - r.tooltipBorderWidth + n, p = t.left - i.left + t.width / 2 - d - r.tooltipBorderWidth;
289
+ a = "!zt-border-x-transparent !zt-border-t-transparent", w = -r.arrowSize * 2 - r.tooltipBorderWidth + n, h = t.left - i.left + t.width / 2 - d - r.tooltipBorderWidth;
299
290
  break;
300
291
  }
301
- e === "left" || e === "right" ? Y(e, i, w, r) || (w = Z(e, i, w, r)) : Y(e, i, p, r) || (p = Z(e, i, p, r));
302
- const m = y + " " + ze + " " + a + " " + r.arrowClasses;
303
- o.classList.add(...m.trim().split(" ")), o.style.top = `${w}px`, o.style.left = `${p}px`, o.style.borderWidth = `${r.arrowSize}px`, s.appendChild(o);
292
+ e === "left" || e === "right" ? Y(e, i, w, r) || (w = Z(e, i, w, r)) : Y(e, i, h, r) || (h = Z(e, i, h, r));
293
+ const m = x + " " + fe + " " + a + " " + r.arrowClasses;
294
+ o.classList.add(...m.trim().split(" ")), o.style.top = `${w}px`, o.style.left = `${h}px`, o.style.borderWidth = `${r.arrowSize}px`, s.appendChild(o);
304
295
  }
305
296
  function Y(t, e, r, s) {
306
297
  switch (t) {
@@ -324,20 +315,20 @@ function Z(t, e, r, s) {
324
315
  }
325
316
  function O(t) {
326
317
  var r, s;
327
- const e = (r = h[t]) == null ? void 0 : r.tooltipElement;
328
- ae(t), he(), (s = e.querySelector(`.${y}`)) == null || s.remove(), e.style.left = "0", e.style.top = "0", e.remove();
318
+ const e = (r = p[t]) == null ? void 0 : r.tooltipElement;
319
+ me(t), ue(), (s = e.querySelector(`.${x}`)) == null || s.remove(), e.style.left = "0", e.style.top = "0", e.remove();
329
320
  }
330
321
  function T(t) {
331
322
  const e = t.tooltipElement.dataset.uuid;
332
- e && (ce(e), O(e), delete h[e]);
323
+ e && (ve(e), O(e), delete p[e]);
333
324
  for (const r of Object.values(t.mouseEnterEventControllers))
334
325
  r.abort();
335
326
  }
336
- const Pe = {
327
+ const je = {
337
328
  install: (t, e = {}) => {
338
- t.directive("tooltip", He(e));
329
+ t.directive("tooltip", Ie(e));
339
330
  }
340
331
  };
341
332
  export {
342
- Pe as default
333
+ je as default
343
334
  };
@@ -1 +1 @@
1
- (function(m,c){typeof exports=="object"&&typeof module<"u"?module.exports=c(require("vue")):typeof define=="function"&&define.amd?define(["vue"],c):(m=typeof globalThis<"u"?globalThis:m||self,m.ZeroTooltip=c(m.Vue))})(this,function(m){"use strict";const c="";let v;const te=new Uint8Array(16);function re(){if(!v&&(v=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!v))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return v(te)}const u=[];for(let t=0;t<256;++t)u.push((t+256).toString(16).slice(1));function se(t,e=0){return u[t[e+0]]+u[t[e+1]]+u[t[e+2]]+u[t[e+3]]+"-"+u[t[e+4]]+u[t[e+5]]+"-"+u[t[e+6]]+u[t[e+7]]+"-"+u[t[e+8]]+u[t[e+9]]+"-"+u[t[e+10]]+u[t[e+11]]+u[t[e+12]]+u[t[e+13]]+u[t[e+14]]+u[t[e+15]]}const F={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function oe(t,e,r){if(F.randomUUID&&!e&&!t)return F.randomUUID();t=t||{};const s=t.random||(t.rng||re)();if(s[6]=s[6]&15|64,s[8]=s[8]&63|128,e){r=r||0;for(let o=0;o<16;++o)e[r+o]=s[o];return e}return se(s)}function ie(){let t=[];const e=(o,i)=>{r(o);for(const d of t)d.element.addEventListener("scroll",()=>{i(),s()},{signal:d.eventController.signal})},r=o=>{let i=o;for(;i!==null&&i.tagName!=="HTML";){if(i.scrollHeight!==i.clientHeight){const n=window.getComputedStyle(i);if(n.overflow==="auto"||n.overflow==="scroll"){const p={element:i,eventController:new AbortController};t.push(p)}}i=i.parentElement}const d={element:window,eventController:new AbortController};t.push(d)},s=()=>{for(const o of t)o.eventController.abort();t=[]};return{handleHideOnScroll:e,removeHideOnScrollListeners:s}}function ne(){const t={},e={};return{handleHideOnResize:(o,i,d)=>{let n=new ResizeObserver(p=>{const w=p[0].target;if(!e[o])e[o]=i.getBoundingClientRect();else{const a=w.getBoundingClientRect();(a.left!==e[o].left||a.top!==e[o].top||a.width!==e[o].width||a.height!==e[o].height)&&d()}});t[o]=n,n.observe(i)},resetResizeReferences:o=>{t[o]&&t[o].disconnect(),delete t[o],delete e[o]}}}function de(){const t={};return{handleRepositionOnResize:(s,o)=>{t[s]=new AbortController,window.addEventListener("resize",o)},removeRepositionOnResizeHandler:s=>{t[s]&&t[s].abort()}}}const{handleHideOnScroll:pe,removeHideOnScrollListeners:we}=ie(),{handleHideOnResize:he,resetResizeReferences:ue}=ne(),{handleRepositionOnResize:ae,removeRepositionOnResizeHandler:me}=de(),z="zero-tooltip__container",M="zero-tooltip__text",y="zero-tooltip__arrow",O={left:["left","right","top","bottom"],top:["top","bottom","right","left"],right:["right","left","top","bottom"],bottom:["bottom","top","right","left"]},ce="body",ve="top",Oe=10,le=20,Te=100,ye=250,xe=0,S="zt-fixed zt-opacity-0 zt-inline-block zt-w-fit zt-py-1.5 zt-px-2.5 zt-rounded-md zt-bg-[#495057] zt-shadow-[0_2px_12px_0_rgba(0,0,0,0.1)] zt-box-border",W="zt-text-sm zt-text-white zt-whitespace-pre-wrap zt-break-words",fe=5,Fe="zt-absolute zt-border-solid zt-border-[#495057]",ze=6,Me=1,Se=!0,We=0,Ve=0,Be=!1,h={},Le=t=>({created:(e,r,s)=>{const o=oe();s.el.$_tooltip={uuid:o},x(r.value,t,r.arg,e,o),typeof r.value!="string"&&m.isReactive(r.value)&&m.watch(r.value,i=>{h[o]&&f(h[o]),x(i,t,r.arg,e,o)})},updated:(e,r,s)=>{const o=s.el.$_tooltip.uuid;h[o]&&f(h[o]),x(r.value,t,r.arg,e,o)},beforeUnmount:(e,r,s)=>{const o=s.el.$_tooltip.uuid;h[o]&&f(h[o])}});function x(t,e,r,s,o){let i=He(t,e,r);const d=Ie(s,i,o);h[o]=d,s.matches(":hover")&&s.dispatchEvent(new Event("mouseenter"))}function He(t,e,r){var G,J,K,Q,b,C,g,ee;let s=(e==null?void 0:e.appendTo)??ce,o=Ae(t),i=r??(e==null?void 0:e.defaultPosition)??ve,d={left:((G=e==null?void 0:e.positions)==null?void 0:G.left)??O.left,top:((J=e==null?void 0:e.positions)==null?void 0:J.top)??O.top,right:((K=e==null?void 0:e.positions)==null?void 0:K.right)??O.right,bottom:((Q=e==null?void 0:e.positions)==null?void 0:Q.bottom)??O.bottom},n=(e==null?void 0:e.offsetFromSource)??Oe,p=(e==null?void 0:e.offsetFromViewport)??le,w=(e==null?void 0:e.minWidth)??Te,a=(e==null?void 0:e.maxWidth)??ye,T=(e==null?void 0:e.tooltipBorderWidth)??xe,_=z+" "+S+" "+((e==null?void 0:e.tooltipClasses)??""),P=M+" "+W+" "+((e==null?void 0:e.textClasses)??""),k=(e==null?void 0:e.arrowSize)??fe,j=(e==null?void 0:e.arrowClasses)??"",q=(e==null?void 0:e.arrowMinOffsetFromTooltipCorner)??ze,U=(e==null?void 0:e.zIndex)??Me,N=Se,Z=(e==null?void 0:e.showDelay)??We,X=(e==null?void 0:e.hideDelay)??Ve,Y=Be;return typeof t!="string"&&(t.appendTo!==void 0&&(s=t.appendTo),r===void 0&&t.defaultPosition!==void 0&&(i=t.defaultPosition),((b=t.positions)==null?void 0:b.left)!==void 0&&(d.left=t.positions.left),((C=t.positions)==null?void 0:C.top)!==void 0&&(d.top=t.positions.top),((g=t.positions)==null?void 0:g.right)!==void 0&&(d.right=t.positions.right),((ee=t.positions)==null?void 0:ee.bottom)!==void 0&&(d.bottom=t.positions.bottom),t.offsetFromSource!==void 0&&(n=t.offsetFromSource),t.offsetFromViewport!==void 0&&(p=t.offsetFromViewport),t.minWidth!==void 0&&(w=t.minWidth),t.maxWidth!==void 0&&(a=t.maxWidth),t.tooltipBorderWidth!==void 0&&(T=t.tooltipBorderWidth),t.tooltipClasses!==void 0&&(_=z+" "+S+" "+t.tooltipClasses),t.textClasses!==void 0&&(P=M+" "+W+" "+t.textClasses),t.arrowSize!==void 0&&(k=t.arrowSize),t.arrowClasses!==void 0&&(j=t.arrowClasses),t.arrowMinOffsetFromTooltipCorner!==void 0&&(q=t.arrowMinOffsetFromTooltipCorner),t.zIndex!==void 0&&(U=t.zIndex),t.show!==void 0&&(N=t.show),t.showDelay!==void 0&&(Z=t.showDelay),t.hideDelay!==void 0&&(X=t.hideDelay),t.alwaysOn!==void 0&&(Y=t.alwaysOn)),{appendTo:s,tooltipText:o,tooltipPosition:i,tooltipPositions:d,tooltipOffsetFromSource:n,tooltipOffsetFromViewport:p,tooltipMinWidth:w,tooltipMaxWidth:a,tooltipBorderWidth:T,tooltipClasses:_,textClasses:P,arrowSize:k,arrowClasses:j,arrowMinOffsetFromTooltipCorner:q,zIndex:U,shouldShow:N,showDelay:Z,hideDelay:X,alwaysOn:Y}}function Ae(t){if(t==null)throw new Error("Tooltip text or 'content' option must be defined ('undefined' or 'null' provided)");if(typeof t=="string"){const e=t.trim();if(e==="")throw new Error("Tooltip text must not be empty string OR set option 'show' to 'false'");return e}if(Object.hasOwn(t,"content")){if(t.show===!1)return"";if(t.content===void 0||t.content===null)throw new Error("Tooltip 'content' must be defined ('undefined' or 'null' provided) OR set option 'show' to 'false'");if(typeof t.content=="string"){const e=t.content.trim();if(e==="")throw new Error("Tooltip 'content' must not be empty string OR set option 'show' to 'false'");return e}}throw new Error("Tooltip text or 'content' option must be defined with correct type")}function Ie(t,e,r){let s=t,o=De(e.textClasses,e.tooltipText),i=Re(e.tooltipClasses,e.tooltipBorderWidth);i.append(o),i.dataset.uuid=r;const d={currentInstanceId:Date.now(),isHoveringOverAnchorElement:!1,lastTooltipMouseLeaveTimestamp:0},n={anchorElementMouseEnter:new AbortController,anchorElementMouseLeave:new AbortController,tooltipElementMouseEnter:new AbortController,tooltipElementMouseLeave:new AbortController};return e.alwaysOn?setTimeout(()=>{B(s,e,i,"absolute"),ae(r,()=>Ee(s,e,i,"absolute"))},0):(s.addEventListener("mouseenter",()=>V(s,e,i,r),{signal:n.anchorElementMouseEnter.signal}),s.addEventListener("mouseleave",()=>L(e,r),{signal:n.anchorElementMouseLeave.signal}),i.addEventListener("mouseenter",()=>V(s,e,i,r,{isTooltip:!0}),{signal:n.tooltipElementMouseEnter.signal}),i.addEventListener("mouseleave",()=>L(e,r,{isTooltip:!0}),{signal:n.tooltipElementMouseLeave.signal})),{anchorElement:s,tooltipConfig:e,tooltipElement:i,mouseEnterEventControllers:n,mouseEventState:d}}function De(t,e){let r=document.createElement("p");return r.classList.add(...t.trim().split(" ")),r.innerHTML=e,r}function Re(t,e){let r=document.createElement("div");return r.classList.add(...t.trim().split(" ")),r.style.borderWidth=`${e}px`,r}async function V(t,e,r,s,o){if(!e.shouldShow)return;let i=o!=null&&o.isTooltip?0:e.showDelay;const d=100;!(o!=null&&o.isTooltip)&&Date.now()-h[s].mouseEventState.lastTooltipMouseLeaveTimestamp<=d&&(i=0);const n=Date.now();if(h[s].mouseEventState.currentInstanceId=n,h[s].mouseEventState.isHoveringOverAnchorElement=!0,i>0&&(await new Promise(w=>setTimeout(w,i)),!h[s].mouseEventState.isHoveringOverAnchorElement||h[s].mouseEventState.currentInstanceId!==n))return;B(t,e,r)&&(pe(t,()=>l(s)),he(s,t,()=>l(s)))}function B(t,e,r,s){let o={x:0,y:0};s==="absolute"&&(r.classList.replace("zt-fixed","zt-absolute"),o.x=window.scrollX,o.y=window.scrollY);const i=t.getBoundingClientRect(),d=document.querySelector(e.appendTo);d==null||d.appendChild(r);let n=!1,p=e.tooltipPosition;for(let w=0;w<4&&(p=e.tooltipPositions[e.tooltipPosition][w],p==="left"?n=H(i,e,r,o):p==="top"?n=I(i,e,r,o):p==="right"?n=A(i,e,r,o):p==="bottom"&&(n=D(i,e,r,o)),!n);w++);return n?(R(i,p,e,r),r.style.opacity="1",r.style.zIndex=typeof e.zIndex=="string"?e.zIndex:e.zIndex.toString(),!0):!1}function Ee(t,e,r,s){var p;(p=r.querySelector(`.${y}`))==null||p.remove();let o={x:0,y:0};s==="absolute"&&(o.x=window.scrollX,o.y=window.scrollY);const i=t.getBoundingClientRect();let d=!1,n=e.tooltipPosition;for(let w=0;w<4&&(n=e.tooltipPositions[e.tooltipPosition][w],n==="left"?d=H(i,e,r,o):n==="top"?d=I(i,e,r,o):n==="right"?d=A(i,e,r,o):n==="bottom"&&(d=D(i,e,r,o)),!d);w++);d&&R(i,n,e,r)}async function L(t,e,r){r!=null&&r.isTooltip&&(h[e].mouseEventState.lastTooltipMouseLeaveTimestamp=Date.now());const s=Date.now();h[e].mouseEventState.currentInstanceId=s,h[e].mouseEventState.isHoveringOverAnchorElement=!1,!(t.hideDelay>0&&(await new Promise(o=>setTimeout(o,t.hideDelay)),h[e].mouseEventState.isHoveringOverAnchorElement||h[e].mouseEventState.currentInstanceId!==s))&&l(e)}function H(t,e,r,s){const o=Math.min(t.left-e.tooltipOffsetFromSource-e.tooltipOffsetFromViewport,e.tooltipMaxWidth),i=t.top>=e.tooltipOffsetFromViewport,d=window.innerHeight-t.bottom>=e.tooltipOffsetFromViewport;if(o<e.tooltipMinWidth||!i||!d)return!1;r.style.maxWidth=`${o}px`;const n=r.getBoundingClientRect();let p=t.top+t.height/2-n.height/2;p<e.tooltipOffsetFromViewport?p=e.tooltipOffsetFromViewport:p+n.height>window.innerHeight-e.tooltipOffsetFromViewport&&(p=window.innerHeight-e.tooltipOffsetFromViewport-n.height);const w=t.left-e.tooltipOffsetFromSource-n.width;return t.bottom<p+e.arrowMinOffsetFromTooltipCorner*2||t.top>p+n.height-e.arrowMinOffsetFromTooltipCorner*2?!1:(r.style.top=`${p+s.y}px`,r.style.left=`${w+s.x}px`,!0)}function A(t,e,r,s){const o=Math.min(window.innerWidth-(t.right+e.tooltipOffsetFromSource)-e.tooltipOffsetFromViewport,e.tooltipMaxWidth),i=t.top>=e.tooltipOffsetFromViewport,d=window.innerHeight-t.bottom>=e.tooltipOffsetFromViewport;if(o<e.tooltipMinWidth||!i||!d)return!1;r.style.maxWidth=`${o}px`;const n=r.getBoundingClientRect();let p=t.top+t.height/2-n.height/2;p<e.tooltipOffsetFromViewport?p=e.tooltipOffsetFromViewport:p+n.height>window.innerHeight-e.tooltipOffsetFromViewport&&(p=window.innerHeight-e.tooltipOffsetFromViewport-n.height);const w=t.right+e.tooltipOffsetFromSource;return t.bottom<p+e.arrowMinOffsetFromTooltipCorner*2||t.top>p+n.height-e.arrowMinOffsetFromTooltipCorner*2?!1:(r.style.top=`${p+s.y}px`,r.style.left=`${w+s.x}px`,!0)}function I(t,e,r,s){const o=Math.min(window.innerWidth-e.tooltipOffsetFromViewport*2,e.tooltipMaxWidth);r.style.maxWidth=`${o}px`;const i=r.getBoundingClientRect();let d=t.top-e.tooltipOffsetFromSource-i.height;if(d<e.tooltipOffsetFromViewport)return!1;let n=t.left+t.width/2-i.width/2;return n<e.tooltipOffsetFromViewport?n=e.tooltipOffsetFromViewport:n+i.width>window.innerWidth-e.tooltipOffsetFromViewport&&(n=window.innerWidth-e.tooltipOffsetFromViewport-i.width),t.left>n+i.width-e.arrowMinOffsetFromTooltipCorner*2||t.right<n+e.arrowMinOffsetFromTooltipCorner*2?!1:(r.style.top=`${d+s.y}px`,r.style.left=`${n+s.x}px`,!0)}function D(t,e,r,s){const o=Math.min(window.innerWidth-e.tooltipOffsetFromViewport*2,e.tooltipMaxWidth);r.style.maxWidth=`${o}px`;const i=r.getBoundingClientRect();let d=t.bottom+e.tooltipOffsetFromSource;if(d+i.height>window.innerHeight-e.tooltipOffsetFromViewport)return!1;let n=t.left+t.width/2-i.width/2;return n<e.tooltipOffsetFromViewport?n=e.tooltipOffsetFromViewport:n+i.width>window.innerWidth-e.tooltipOffsetFromViewport&&(n=window.innerWidth-e.tooltipOffsetFromViewport-i.width),t.left>n+i.width-e.arrowMinOffsetFromTooltipCorner*2||t.right<n+e.arrowMinOffsetFromTooltipCorner*2?!1:(r.style.top=`${d+s.y}px`,r.style.left=`${n+s.x}px`,!0)}function R(t,e,r,s){const o=document.createElement("div"),i=s.getBoundingClientRect(),d=Math.sin(45*(180/Math.PI))*r.arrowSize,n=1;let p=0,w=0,a="";switch(e){case"left":a="!zt-border-y-transparent !zt-border-r-transparent",p=t.top-i.top+t.height/2-d-r.tooltipBorderWidth,w=i.width-r.tooltipBorderWidth-n;break;case"top":a="!zt-border-x-transparent !zt-border-b-transparent",p=i.height-r.tooltipBorderWidth-n,w=t.left-i.left+t.width/2-d-r.tooltipBorderWidth;break;case"right":a="!zt-border-y-transparent !zt-border-l-transparent",p=t.top-i.top+t.height/2-d-r.tooltipBorderWidth,w=-r.arrowSize*2-r.tooltipBorderWidth+n;break;case"bottom":a="!zt-border-x-transparent !zt-border-t-transparent",p=-r.arrowSize*2-r.tooltipBorderWidth+n,w=t.left-i.left+t.width/2-d-r.tooltipBorderWidth;break}e==="left"||e==="right"?E(e,i,p,r)||(p=$(e,i,p,r)):E(e,i,w,r)||(w=$(e,i,w,r));const T=y+" "+Fe+" "+a+" "+r.arrowClasses;o.classList.add(...T.trim().split(" ")),o.style.top=`${p}px`,o.style.left=`${w}px`,o.style.borderWidth=`${r.arrowSize}px`,s.appendChild(o)}function E(t,e,r,s){switch(t){case"left":case"right":return r>s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth&&r<e.height+s.tooltipBorderWidth-s.arrowMinOffsetFromTooltipCorner-s.arrowSize*2;case"top":case"bottom":return r>s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth&&r<e.width+s.tooltipBorderWidth-s.arrowMinOffsetFromTooltipCorner-s.arrowSize*2}}function $(t,e,r,s){switch(t){case"left":case"right":return r<s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth?s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth:e.height-s.tooltipBorderWidth-s.arrowMinOffsetFromTooltipCorner-s.arrowSize*2;case"top":case"bottom":return r<s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth?s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth:e.width-s.tooltipBorderWidth-s.arrowMinOffsetFromTooltipCorner-s.arrowSize*2}}function l(t){var r,s;const e=(r=h[t])==null?void 0:r.tooltipElement;ue(t),we(),(s=e.querySelector(`.${y}`))==null||s.remove(),e.style.left="0",e.style.top="0",e.remove()}function f(t){const e=t.tooltipElement.dataset.uuid;e&&(me(e),l(e),delete h[e]);for(const r of Object.values(t.mouseEnterEventControllers))r.abort()}return{install:(t,e={})=>{t.directive("tooltip",Le(e))}}});
1
+ (function(m,c){typeof exports=="object"&&typeof module<"u"?module.exports=c(require("vue")):typeof define=="function"&&define.amd?define(["vue"],c):(m=typeof globalThis<"u"?globalThis:m||self,m.ZeroTooltip=c(m.Vue))})(this,function(m){"use strict";const c="";let v;const te=new Uint8Array(16);function re(){if(!v&&(v=typeof crypto<"u"&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!v))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return v(te)}const u=[];for(let t=0;t<256;++t)u.push((t+256).toString(16).slice(1));function se(t,e=0){return u[t[e+0]]+u[t[e+1]]+u[t[e+2]]+u[t[e+3]]+"-"+u[t[e+4]]+u[t[e+5]]+"-"+u[t[e+6]]+u[t[e+7]]+"-"+u[t[e+8]]+u[t[e+9]]+"-"+u[t[e+10]]+u[t[e+11]]+u[t[e+12]]+u[t[e+13]]+u[t[e+14]]+u[t[e+15]]}const F={randomUUID:typeof crypto<"u"&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};function oe(t,e,r){if(F.randomUUID&&!e&&!t)return F.randomUUID();t=t||{};const s=t.random||(t.rng||re)();if(s[6]=s[6]&15|64,s[8]=s[8]&63|128,e){r=r||0;for(let o=0;o<16;++o)e[r+o]=s[o];return e}return se(s)}function ie(){let t=[];const e=(o,i)=>{r(o);for(const d of t)d.element.addEventListener("scroll",()=>{i(),s()},{signal:d.eventController.signal})},r=o=>{let i=o;for(;i!==null&&i.tagName!=="HTML";){if(i.scrollHeight!==i.clientHeight){const n=window.getComputedStyle(i);if(n.overflow==="auto"||n.overflow==="scroll"){const h={element:i,eventController:new AbortController};t.push(h)}}i=i.parentElement}const d={element:window,eventController:new AbortController};t.push(d)},s=()=>{for(const o of t)o.eventController.abort();t=[]};return{handleHideOnScroll:e,removeHideOnScrollListeners:s}}function ne(){const t={},e={};return{handleHideOnResize:(o,i,d)=>{let n=new ResizeObserver(h=>{const w=h[0].target;if(!e[o])e[o]=i.getBoundingClientRect();else{const a=w.getBoundingClientRect();(a.left!==e[o].left||a.top!==e[o].top||a.width!==e[o].width||a.height!==e[o].height)&&d()}});t[o]=n,n.observe(i)},resetResizeReferences:o=>{t[o]&&t[o].disconnect(),delete t[o],delete e[o]}}}function de(){const t={};return{handleRepositionOnResize:(s,o)=>{t[s]=new AbortController,window.addEventListener("resize",o)},removeRepositionOnResizeHandler:s=>{t[s]&&t[s].abort()}}}const{handleHideOnScroll:he,removeHideOnScrollListeners:we}=ie(),{handleHideOnResize:pe,resetResizeReferences:ue}=ne(),{handleRepositionOnResize:ae,removeRepositionOnResizeHandler:me}=de(),z="zero-tooltip__container",M="zero-tooltip__text",x="zero-tooltip__arrow",O={left:["left","right","top","bottom"],top:["top","bottom","right","left"],right:["right","left","top","bottom"],bottom:["bottom","top","right","left"]},ce="body",ve="top",Oe=10,ye=20,Te=100,xe=250,le=0,W="zt-fixed zt-opacity-0 zt-inline-block zt-w-fit zt-py-1.5 zt-px-2.5 zt-rounded-md zt-bg-[#495057] zt-shadow-[0_2px_12px_0_rgba(0,0,0,0.1)] zt-box-border",S="zt-text-sm zt-text-white zt-whitespace-pre-wrap zt-break-words",fe=5,Fe="zt-absolute zt-border-solid zt-border-[#495057]",ze=6,Me=1,We=!0,Se=0,Ve=0,Be=!1,Le=!0,p={},He=t=>({created:(e,r,s)=>{const o=oe();s.el.$_tooltip={uuid:o},l(r.value,t,r.arg,e,o),typeof r.value!="string"&&m.isReactive(r.value)&&m.watch(r.value,i=>{p[o]&&f(p[o]),l(i,t,r.arg,e,o)})},updated:(e,r,s)=>{const o=s.el.$_tooltip.uuid;p[o]&&f(p[o]),l(r.value,t,r.arg,e,o)},beforeUnmount:(e,r,s)=>{const o=s.el.$_tooltip.uuid;p[o]&&f(p[o])}});function l(t,e,r,s,o){let i=Ae(t,e,r);const d=De(s,i,o);p[o]=d,s.matches(":hover")&&s.dispatchEvent(new Event("mouseenter"))}function Ae(t,e,r){var G,J,K,Q,b,C,g,ee;let s=(e==null?void 0:e.appendTo)??ce,o=Ie(t),i=r??(e==null?void 0:e.defaultPosition)??ve,d={left:((G=e==null?void 0:e.positions)==null?void 0:G.left)??O.left,top:((J=e==null?void 0:e.positions)==null?void 0:J.top)??O.top,right:((K=e==null?void 0:e.positions)==null?void 0:K.right)??O.right,bottom:((Q=e==null?void 0:e.positions)==null?void 0:Q.bottom)??O.bottom},n=(e==null?void 0:e.offsetFromSource)??Oe,h=(e==null?void 0:e.offsetFromViewport)??ye,w=(e==null?void 0:e.minWidth)??Te,a=(e==null?void 0:e.maxWidth)??xe,T=(e==null?void 0:e.tooltipBorderWidth)??le,_=z+" "+W+" "+((e==null?void 0:e.tooltipClasses)??""),P=M+" "+S+" "+((e==null?void 0:e.textClasses)??""),k=(e==null?void 0:e.arrowSize)??fe,j=(e==null?void 0:e.arrowClasses)??"",q=(e==null?void 0:e.arrowMinOffsetFromTooltipCorner)??ze,U=(e==null?void 0:e.zIndex)??Me,N=We,Z=(e==null?void 0:e.showDelay)??Se,X=(e==null?void 0:e.hideDelay)??Ve,Y=Be,_e=(e==null?void 0:e.showWarnings)??Le;return typeof t!="string"&&(t.appendTo!==void 0&&(s=t.appendTo),r===void 0&&t.defaultPosition!==void 0&&(i=t.defaultPosition),((b=t.positions)==null?void 0:b.left)!==void 0&&(d.left=t.positions.left),((C=t.positions)==null?void 0:C.top)!==void 0&&(d.top=t.positions.top),((g=t.positions)==null?void 0:g.right)!==void 0&&(d.right=t.positions.right),((ee=t.positions)==null?void 0:ee.bottom)!==void 0&&(d.bottom=t.positions.bottom),t.offsetFromSource!==void 0&&(n=t.offsetFromSource),t.offsetFromViewport!==void 0&&(h=t.offsetFromViewport),t.minWidth!==void 0&&(w=t.minWidth),t.maxWidth!==void 0&&(a=t.maxWidth),t.tooltipBorderWidth!==void 0&&(T=t.tooltipBorderWidth),t.tooltipClasses!==void 0&&(_=z+" "+W+" "+t.tooltipClasses),t.textClasses!==void 0&&(P=M+" "+S+" "+t.textClasses),t.arrowSize!==void 0&&(k=t.arrowSize),t.arrowClasses!==void 0&&(j=t.arrowClasses),t.arrowMinOffsetFromTooltipCorner!==void 0&&(q=t.arrowMinOffsetFromTooltipCorner),t.zIndex!==void 0&&(U=t.zIndex),t.show!==void 0&&(N=t.show),t.showDelay!==void 0&&(Z=t.showDelay),t.hideDelay!==void 0&&(X=t.hideDelay),t.alwaysOn!==void 0&&(Y=t.alwaysOn)),{appendTo:s,tooltipText:o,tooltipPosition:i,tooltipPositions:d,tooltipOffsetFromSource:n,tooltipOffsetFromViewport:h,tooltipMinWidth:w,tooltipMaxWidth:a,tooltipBorderWidth:T,tooltipClasses:_,textClasses:P,arrowSize:k,arrowClasses:j,arrowMinOffsetFromTooltipCorner:q,zIndex:U,shouldShow:N,showDelay:Z,hideDelay:X,alwaysOn:Y,showWarnings:_e}}function Ie(t){if(t==null)return"";if(typeof t=="string")return t;if(Object.hasOwn(t,"content")){if(t.content===void 0||t.content===null)return"";if(typeof t.content=="string")return t.content}throw new Error("Tooltip text or 'content' option must be defined with correct type")}function De(t,e,r){let s=t,o=Re(e.textClasses,e.tooltipText),i=$e(e.tooltipClasses,e.tooltipBorderWidth);i.append(o),i.dataset.uuid=r;const d={currentInstanceId:Date.now(),isHoveringOverAnchorElement:!1,lastTooltipMouseLeaveTimestamp:0},n={anchorElementMouseEnter:new AbortController,anchorElementMouseLeave:new AbortController,tooltipElementMouseEnter:new AbortController,tooltipElementMouseLeave:new AbortController};return e.tooltipText===""?e.shouldShow&&e.showWarnings&&console.warn("Tooltip text is empty"):e.alwaysOn?setTimeout(()=>{B(s,e,i,"absolute"),ae(r,()=>Ee(s,e,i,"absolute"))},0):(s.addEventListener("mouseenter",()=>V(s,e,i,r),{signal:n.anchorElementMouseEnter.signal}),s.addEventListener("mouseleave",()=>L(e,r),{signal:n.anchorElementMouseLeave.signal}),i.addEventListener("mouseenter",()=>V(s,e,i,r,{isTooltip:!0}),{signal:n.tooltipElementMouseEnter.signal}),i.addEventListener("mouseleave",()=>L(e,r,{isTooltip:!0}),{signal:n.tooltipElementMouseLeave.signal})),{anchorElement:s,tooltipConfig:e,tooltipElement:i,mouseEnterEventControllers:n,mouseEventState:d}}function Re(t,e){let r=document.createElement("p");return r.classList.add(...t.trim().split(" ")),r.innerHTML=e,r}function $e(t,e){let r=document.createElement("div");return r.classList.add(...t.trim().split(" ")),r.style.borderWidth=`${e}px`,r}async function V(t,e,r,s,o){if(!e.shouldShow)return;let i=o!=null&&o.isTooltip?0:e.showDelay;const d=100;!(o!=null&&o.isTooltip)&&Date.now()-p[s].mouseEventState.lastTooltipMouseLeaveTimestamp<=d&&(i=0);const n=Date.now();if(p[s].mouseEventState.currentInstanceId=n,p[s].mouseEventState.isHoveringOverAnchorElement=!0,i>0&&(await new Promise(w=>setTimeout(w,i)),!p[s].mouseEventState.isHoveringOverAnchorElement||p[s].mouseEventState.currentInstanceId!==n))return;B(t,e,r)&&(he(t,()=>y(s)),pe(s,t,()=>y(s)))}function B(t,e,r,s){let o={x:0,y:0};s==="absolute"&&(r.classList.replace("zt-fixed","zt-absolute"),o.x=window.scrollX,o.y=window.scrollY);const i=t.getBoundingClientRect(),d=document.querySelector(e.appendTo);d==null||d.appendChild(r);let n=!1,h=e.tooltipPosition;for(let w=0;w<4&&(h=e.tooltipPositions[e.tooltipPosition][w],h==="left"?n=H(i,e,r,o):h==="top"?n=I(i,e,r,o):h==="right"?n=A(i,e,r,o):h==="bottom"&&(n=D(i,e,r,o)),!n);w++);return n?(R(i,h,e,r),r.style.opacity="1",r.style.zIndex=typeof e.zIndex=="string"?e.zIndex:e.zIndex.toString(),!0):!1}function Ee(t,e,r,s){var h;(h=r.querySelector(`.${x}`))==null||h.remove();let o={x:0,y:0};s==="absolute"&&(o.x=window.scrollX,o.y=window.scrollY);const i=t.getBoundingClientRect();let d=!1,n=e.tooltipPosition;for(let w=0;w<4&&(n=e.tooltipPositions[e.tooltipPosition][w],n==="left"?d=H(i,e,r,o):n==="top"?d=I(i,e,r,o):n==="right"?d=A(i,e,r,o):n==="bottom"&&(d=D(i,e,r,o)),!d);w++);d&&R(i,n,e,r)}async function L(t,e,r){r!=null&&r.isTooltip&&(p[e].mouseEventState.lastTooltipMouseLeaveTimestamp=Date.now());const s=Date.now();p[e].mouseEventState.currentInstanceId=s,p[e].mouseEventState.isHoveringOverAnchorElement=!1,!(t.hideDelay>0&&(await new Promise(o=>setTimeout(o,t.hideDelay)),p[e].mouseEventState.isHoveringOverAnchorElement||p[e].mouseEventState.currentInstanceId!==s))&&y(e)}function H(t,e,r,s){const o=Math.min(t.left-e.tooltipOffsetFromSource-e.tooltipOffsetFromViewport,e.tooltipMaxWidth),i=t.top>=e.tooltipOffsetFromViewport,d=window.innerHeight-t.bottom>=e.tooltipOffsetFromViewport;if(o<e.tooltipMinWidth||!i||!d)return!1;r.style.maxWidth=`${o}px`;const n=r.getBoundingClientRect();let h=t.top+t.height/2-n.height/2;h<e.tooltipOffsetFromViewport?h=e.tooltipOffsetFromViewport:h+n.height>window.innerHeight-e.tooltipOffsetFromViewport&&(h=window.innerHeight-e.tooltipOffsetFromViewport-n.height);const w=t.left-e.tooltipOffsetFromSource-n.width;return t.bottom<h+e.arrowMinOffsetFromTooltipCorner*2||t.top>h+n.height-e.arrowMinOffsetFromTooltipCorner*2?!1:(r.style.top=`${h+s.y}px`,r.style.left=`${w+s.x}px`,!0)}function A(t,e,r,s){const o=Math.min(window.innerWidth-(t.right+e.tooltipOffsetFromSource)-e.tooltipOffsetFromViewport,e.tooltipMaxWidth),i=t.top>=e.tooltipOffsetFromViewport,d=window.innerHeight-t.bottom>=e.tooltipOffsetFromViewport;if(o<e.tooltipMinWidth||!i||!d)return!1;r.style.maxWidth=`${o}px`;const n=r.getBoundingClientRect();let h=t.top+t.height/2-n.height/2;h<e.tooltipOffsetFromViewport?h=e.tooltipOffsetFromViewport:h+n.height>window.innerHeight-e.tooltipOffsetFromViewport&&(h=window.innerHeight-e.tooltipOffsetFromViewport-n.height);const w=t.right+e.tooltipOffsetFromSource;return t.bottom<h+e.arrowMinOffsetFromTooltipCorner*2||t.top>h+n.height-e.arrowMinOffsetFromTooltipCorner*2?!1:(r.style.top=`${h+s.y}px`,r.style.left=`${w+s.x}px`,!0)}function I(t,e,r,s){const o=Math.min(window.innerWidth-e.tooltipOffsetFromViewport*2,e.tooltipMaxWidth);r.style.maxWidth=`${o}px`;const i=r.getBoundingClientRect();let d=t.top-e.tooltipOffsetFromSource-i.height;if(d<e.tooltipOffsetFromViewport)return!1;let n=t.left+t.width/2-i.width/2;return n<e.tooltipOffsetFromViewport?n=e.tooltipOffsetFromViewport:n+i.width>window.innerWidth-e.tooltipOffsetFromViewport&&(n=window.innerWidth-e.tooltipOffsetFromViewport-i.width),t.left>n+i.width-e.arrowMinOffsetFromTooltipCorner*2||t.right<n+e.arrowMinOffsetFromTooltipCorner*2?!1:(r.style.top=`${d+s.y}px`,r.style.left=`${n+s.x}px`,!0)}function D(t,e,r,s){const o=Math.min(window.innerWidth-e.tooltipOffsetFromViewport*2,e.tooltipMaxWidth);r.style.maxWidth=`${o}px`;const i=r.getBoundingClientRect();let d=t.bottom+e.tooltipOffsetFromSource;if(d+i.height>window.innerHeight-e.tooltipOffsetFromViewport)return!1;let n=t.left+t.width/2-i.width/2;return n<e.tooltipOffsetFromViewport?n=e.tooltipOffsetFromViewport:n+i.width>window.innerWidth-e.tooltipOffsetFromViewport&&(n=window.innerWidth-e.tooltipOffsetFromViewport-i.width),t.left>n+i.width-e.arrowMinOffsetFromTooltipCorner*2||t.right<n+e.arrowMinOffsetFromTooltipCorner*2?!1:(r.style.top=`${d+s.y}px`,r.style.left=`${n+s.x}px`,!0)}function R(t,e,r,s){const o=document.createElement("div"),i=s.getBoundingClientRect(),d=Math.sin(45*(180/Math.PI))*r.arrowSize,n=1;let h=0,w=0,a="";switch(e){case"left":a="!zt-border-y-transparent !zt-border-r-transparent",h=t.top-i.top+t.height/2-d-r.tooltipBorderWidth,w=i.width-r.tooltipBorderWidth-n;break;case"top":a="!zt-border-x-transparent !zt-border-b-transparent",h=i.height-r.tooltipBorderWidth-n,w=t.left-i.left+t.width/2-d-r.tooltipBorderWidth;break;case"right":a="!zt-border-y-transparent !zt-border-l-transparent",h=t.top-i.top+t.height/2-d-r.tooltipBorderWidth,w=-r.arrowSize*2-r.tooltipBorderWidth+n;break;case"bottom":a="!zt-border-x-transparent !zt-border-t-transparent",h=-r.arrowSize*2-r.tooltipBorderWidth+n,w=t.left-i.left+t.width/2-d-r.tooltipBorderWidth;break}e==="left"||e==="right"?$(e,i,h,r)||(h=E(e,i,h,r)):$(e,i,w,r)||(w=E(e,i,w,r));const T=x+" "+Fe+" "+a+" "+r.arrowClasses;o.classList.add(...T.trim().split(" ")),o.style.top=`${h}px`,o.style.left=`${w}px`,o.style.borderWidth=`${r.arrowSize}px`,s.appendChild(o)}function $(t,e,r,s){switch(t){case"left":case"right":return r>s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth&&r<e.height+s.tooltipBorderWidth-s.arrowMinOffsetFromTooltipCorner-s.arrowSize*2;case"top":case"bottom":return r>s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth&&r<e.width+s.tooltipBorderWidth-s.arrowMinOffsetFromTooltipCorner-s.arrowSize*2}}function E(t,e,r,s){switch(t){case"left":case"right":return r<s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth?s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth:e.height-s.tooltipBorderWidth-s.arrowMinOffsetFromTooltipCorner-s.arrowSize*2;case"top":case"bottom":return r<s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth?s.arrowMinOffsetFromTooltipCorner-s.tooltipBorderWidth:e.width-s.tooltipBorderWidth-s.arrowMinOffsetFromTooltipCorner-s.arrowSize*2}}function y(t){var r,s;const e=(r=p[t])==null?void 0:r.tooltipElement;ue(t),we(),(s=e.querySelector(`.${x}`))==null||s.remove(),e.style.left="0",e.style.top="0",e.remove()}function f(t){const e=t.tooltipElement.dataset.uuid;e&&(me(e),y(e),delete p[e]);for(const r of Object.values(t.mouseEnterEventControllers))r.abort()}return{install:(t,e={})=>{t.directive("tooltip",He(e))}}});
package/package.json CHANGED
@@ -18,7 +18,7 @@
18
18
  "dist",
19
19
  "src"
20
20
  ],
21
- "version": "1.4.2",
21
+ "version": "1.4.3",
22
22
  "type": "module",
23
23
  "scripts": {
24
24
  "dev": "vite",
package/src/tooltip.ts CHANGED
@@ -42,6 +42,7 @@ const defaultShouldShow = true
42
42
  const defaultShowDelay = 0
43
43
  const defaultHideDelay = 0
44
44
  const defaultAlwaysOn = false
45
+ const defaultShowWarnings = true
45
46
 
46
47
  const tooltips: {[key: string]: ReturnType<typeof initTooltip>} = {}
47
48
 
@@ -121,6 +122,7 @@ function getTooltipConfig(localConfig: string | TooltipLocalConfig, globalConfig
121
122
  let showDelay = globalConfig?.showDelay ?? defaultShowDelay
122
123
  let hideDelay = globalConfig?.hideDelay ?? defaultHideDelay
123
124
  let alwaysOn = defaultAlwaysOn
125
+ let showWarnings = globalConfig?.showWarnings ?? defaultShowWarnings
124
126
 
125
127
  // Check if local config is defined (it's defined when local config is Object and not a string, because string means that just Tooltip text is given)
126
128
  if (typeof(localConfig) !== 'string') {
@@ -168,42 +170,27 @@ function getTooltipConfig(localConfig: string | TooltipLocalConfig, globalConfig
168
170
  shouldShow,
169
171
  showDelay,
170
172
  hideDelay,
171
- alwaysOn
173
+ alwaysOn,
174
+ showWarnings,
172
175
  }
173
176
  }
174
177
 
175
178
  function getTooltipText(localConfig: string | TooltipLocalConfig) {
176
179
  if (localConfig === undefined || localConfig === null) {
177
- throw new Error("Tooltip text or 'content' option must be defined ('undefined' or 'null' provided)")
180
+ return ''
178
181
  }
179
182
 
180
183
  if (typeof(localConfig) === 'string') {
181
- const tooltipText = localConfig.trim()
182
-
183
- if (tooltipText === '') {
184
- throw new Error("Tooltip text must not be empty string OR set option 'show' to 'false'")
185
- }
186
-
187
- return tooltipText
184
+ return localConfig
188
185
  }
189
186
 
190
187
  if (Object.hasOwn(localConfig, 'content')) {
191
- if (localConfig.show === false) {
192
- return ''
193
- }
194
-
195
188
  if (localConfig.content === undefined || localConfig.content === null) {
196
- throw new Error("Tooltip 'content' must be defined ('undefined' or 'null' provided) OR set option 'show' to 'false'")
189
+ return ''
197
190
  }
198
191
 
199
192
  if (typeof(localConfig.content) === 'string') {
200
- const tooltipText = localConfig.content.trim()
201
-
202
- if (tooltipText === '') {
203
- throw new Error("Tooltip 'content' must not be empty string OR set option 'show' to 'false'")
204
- }
205
-
206
- return tooltipText
193
+ return localConfig.content
207
194
  }
208
195
  }
209
196
 
@@ -232,17 +219,19 @@ function initTooltip(targetElement: HTMLElement, tooltipConfig: ReturnType<typeo
232
219
  tooltipElementMouseLeave: new AbortController(),
233
220
  }
234
221
 
235
- if (!tooltipConfig.alwaysOn) {
222
+ if (tooltipConfig.tooltipText === '') {
223
+ if (tooltipConfig.shouldShow && tooltipConfig.showWarnings) console.warn('Tooltip text is empty')
224
+ } else if (tooltipConfig.alwaysOn) {
225
+ setTimeout(() => {
226
+ mountTooltipElement(anchorElement, tooltipConfig, tooltipElement, 'absolute')
227
+ handleRepositionOnResize(uuid, () => repositionTooltipElement(anchorElement, tooltipConfig, tooltipElement, 'absolute'))
228
+ }, 0)
229
+ } else {
236
230
  anchorElement.addEventListener('mouseenter', () => onMouseEnter(anchorElement, tooltipConfig, tooltipElement, uuid), { signal: mouseEnterEventControllers.anchorElementMouseEnter.signal })
237
231
  anchorElement.addEventListener('mouseleave', () => onMouseLeave(tooltipConfig, uuid), { signal: mouseEnterEventControllers.anchorElementMouseLeave.signal })
238
232
 
239
233
  tooltipElement.addEventListener('mouseenter', () => onMouseEnter(anchorElement, tooltipConfig, tooltipElement, uuid, { isTooltip: true }), { signal: mouseEnterEventControllers.tooltipElementMouseEnter.signal })
240
234
  tooltipElement.addEventListener('mouseleave', () => onMouseLeave(tooltipConfig, uuid, { isTooltip: true }), { signal: mouseEnterEventControllers.tooltipElementMouseLeave.signal })
241
- } else {
242
- setTimeout(() => {
243
- mountTooltipElement(anchorElement, tooltipConfig, tooltipElement, 'absolute')
244
- handleRepositionOnResize(uuid, () => repositionTooltipElement(anchorElement, tooltipConfig, tooltipElement, 'absolute'))
245
- }, 0)
246
235
  }
247
236
 
248
237
  return {
@@ -18,6 +18,7 @@ type TooltipConfig = {
18
18
  zIndex?: number | string,
19
19
  showDelay?: number,
20
20
  hideDelay?: number,
21
+ showWarnings?: boolean,
21
22
  }
22
23
 
23
24
  export default TooltipConfig