@fiscozen/composables 0.1.24 → 0.1.26

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,325 +1,330 @@
1
- import { ref as d, reactive as H, onUnmounted as q, nextTick as T, onMounted as B, watch as R, onBeforeUnmount as C, getCurrentInstance as U, computed as L, defineComponent as G, useSlots as K, toRef as Q, openBlock as $, createElementBlock as S, renderSlot as x, createElementVNode as M, unref as F, withDirectives as A, normalizeClass as D, vShow as W, createCommentVNode as I, createBlock as X, Teleport as Y } from "vue";
2
- const E = new DOMRect(0, 0, window.innerWidth, window.innerHeight), w = (o, e, i, u, s) => {
3
- let n = s ? "bottom" : "right", h = s ? "bottom-start" : "right-start";
1
+ import { ref as m, reactive as H, onUnmounted as q, nextTick as T, onMounted as B, watch as R, onBeforeUnmount as F, getCurrentInstance as U, computed as L, defineComponent as G, useSlots as K, toRef as Q, openBlock as C, createElementBlock as S, renderSlot as x, createElementVNode as D, unref as $, withDirectives as M, normalizeClass as A, vShow as W, createCommentVNode as I, createBlock as X, Teleport as Y } from "vue";
2
+ const E = new DOMRect(0, 0, window.innerWidth, window.innerHeight), w = (o, n, e, u, s) => {
3
+ let a = s ? "bottom" : "right", h = s ? "bottom-start" : "right-start";
4
4
  E.width = window.innerWidth, E.height = window.innerHeight, E.x = 0, E.y = 0;
5
- const l = o ? o.getBoundingClientRect() : E, t = e.getBoundingClientRect(), v = i.getBoundingClientRect(), r = (v.left - l.left - t.width) / l.width, c = (l.right - v.right - t.width) / l.width, a = (v.top - l.top - t.height) / l.height, y = (l.bottom - v.bottom - t.height) / l.height;
6
- let m = [
5
+ const l = o ? o.getBoundingClientRect() : E, t = n.getBoundingClientRect(), c = e.getBoundingClientRect(), g = (c.left - l.left - t.width) / l.width, r = (l.right - c.right - t.width) / l.width, i = (c.top - l.top - t.height) / l.height, d = (l.bottom - c.bottom - t.height) / l.height;
6
+ let f = [
7
7
  {
8
8
  key: "right",
9
- space: c
9
+ space: r
10
10
  },
11
11
  {
12
12
  key: "top",
13
- space: a
13
+ space: i
14
14
  },
15
15
  {
16
16
  key: "bottom",
17
- space: y
17
+ space: d
18
18
  },
19
19
  {
20
20
  key: "left",
21
- space: r
21
+ space: g
22
22
  }
23
- ].sort((p, f) => f.space - p.space);
24
- if (s && (m = m.filter((p) => p.key === "top" || p.key === "bottom")), n = m[0].key, !u)
25
- switch (n) {
23
+ ].sort((p, v) => v.space - p.space);
24
+ if (s && (f = f.filter((p) => p.key === "top" || p.key === "bottom")), a = f[0].key, !u)
25
+ switch (a) {
26
26
  case "right":
27
27
  case "left":
28
- const p = (t.height - v.height) / 2;
29
- l.top > v.top - p && (u = "end"), l.bottom < v.top - p && (u = "start");
28
+ const p = (t.height - c.height) / 2;
29
+ l.top > c.top - p && (u = "end"), l.bottom < c.top - p && (u = "start");
30
30
  break;
31
31
  }
32
- return h = u ? `${n}-${u}` : n, h;
33
- }, J = (o, e, i, u) => ({
34
- x: e.x + o.width * i / 100,
35
- y: e.y + o.height * u / 100
32
+ return h = u ? `${a}-${u}` : a, h;
33
+ }, J = (o, n, e, u) => ({
34
+ x: n.x + o.width * e / 100,
35
+ y: n.y + o.height * u / 100
36
36
  }), Z = (o) => {
37
- const e = d(null), i = d(null), u = d(null), s = d(), n = d(), h = d("auto"), l = d(), t = H({
37
+ const n = m(null), e = m(null), u = m(null), s = m(), a = m(), h = m("auto"), l = m(), t = H({
38
38
  position: { x: 0, y: 0 }
39
- }), v = {
39
+ }), c = {
40
40
  root: null,
41
41
  rootMargin: "0px",
42
42
  threshold: 1,
43
43
  ...o.element.intersectionOptions
44
- }, r = (m, p) => {
45
- }, c = d(new IntersectionObserver(r, v)), a = d(), y = () => T(() => {
44
+ }, g = (f, p) => {
45
+ }, r = m(new IntersectionObserver(g, c)), i = m(), d = () => T(() => {
46
46
  var N;
47
- if (a.value = o.position ? o.position.value : "auto", e.value = typeof o.element.domRef.value == "string" ? document.querySelector(o.element.domRef.value) : o.element.domRef.value, o.container ? (i.value = typeof o.container.domRef.value == "string" ? document.querySelector(o.container.domRef.value) : o.container.domRef.value, i.value ?? (i.value = document.body)) : i.value = document.body, !e.value)
47
+ if (i.value = o.position ? o.position.value : "auto", n.value = typeof o.element.domRef.value == "string" ? document.querySelector(o.element.domRef.value) : o.element.domRef.value, o.container ? (e.value = typeof o.container.domRef.value == "string" ? document.querySelector(o.container.domRef.value) : o.container.domRef.value, e.value ?? (e.value = document.body)) : e.value = document.body, !n.value)
48
48
  throw new Error("missing reference element for floating behavior");
49
- o.opener && (u.value = typeof o.opener.domRef.value == "string" ? document.querySelector(o.opener.domRef.value) : o.opener.domRef.value), l.value = e.value.getBoundingClientRect(), s.value = (N = u.value) == null ? void 0 : N.getBoundingClientRect(), n.value = i.value.getBoundingClientRect();
50
- const m = window.getComputedStyle(e.value);
51
- c.value.observe(e.value), c.value.observe(i.value);
52
- let p = 0, f = 0;
49
+ o.opener && (u.value = typeof o.opener.domRef.value == "string" ? document.querySelector(o.opener.domRef.value) : o.opener.domRef.value), l.value = n.value.getBoundingClientRect(), s.value = (N = u.value) == null ? void 0 : N.getBoundingClientRect(), a.value = e.value.getBoundingClientRect();
50
+ const f = window.getComputedStyle(n.value);
51
+ r.value.observe(n.value), r.value.observe(e.value);
52
+ let p = 0, v = 0;
53
53
  if (o.opener && u.value && s && s.value) {
54
- const g = s.value.left - parseFloat(m.marginLeft) - parseFloat(m.marginRight), z = s.value.left - parseFloat(m.marginLeft), k = s.value.top - parseFloat(m.marginTop) - parseFloat(m.marginBottom), P = s.value.top - parseFloat(m.marginTop);
55
- switch (a.value) {
54
+ const y = s.value.left - parseFloat(f.marginLeft) - parseFloat(f.marginRight), z = s.value.left - parseFloat(f.marginLeft), k = s.value.top - parseFloat(f.marginTop) - parseFloat(f.marginBottom), P = s.value.top - parseFloat(f.marginTop);
55
+ switch (i.value) {
56
56
  case "auto":
57
- a.value = w(
58
- o.useViewport ? null : i.value,
59
- e.value,
57
+ i.value = w(
58
+ o.useViewport ? null : e.value,
59
+ n.value,
60
60
  u.value
61
61
  );
62
62
  break;
63
63
  case "auto-vertical":
64
- a.value = w(
65
- o.useViewport ? null : i.value,
66
- e.value,
64
+ i.value = w(
65
+ o.useViewport ? null : e.value,
66
+ n.value,
67
67
  u.value,
68
68
  void 0,
69
69
  !0
70
70
  );
71
71
  break;
72
72
  case "auto-start":
73
- a.value = w(
74
- o.useViewport ? null : i.value,
75
- e.value,
73
+ i.value = w(
74
+ o.useViewport ? null : e.value,
75
+ n.value,
76
76
  u.value,
77
77
  "start"
78
78
  );
79
79
  break;
80
80
  case "auto-vertical-start":
81
- a.value = w(
82
- o.useViewport ? null : i.value,
83
- e.value,
81
+ i.value = w(
82
+ o.useViewport ? null : e.value,
83
+ n.value,
84
84
  u.value,
85
85
  "start",
86
86
  !0
87
87
  );
88
88
  break;
89
89
  case "auto-end":
90
- a.value = w(
91
- o.useViewport ? null : i.value,
92
- e.value,
90
+ i.value = w(
91
+ o.useViewport ? null : e.value,
92
+ n.value,
93
93
  u.value,
94
94
  "end"
95
95
  );
96
96
  break;
97
97
  case "auto-vertical-end":
98
- a.value = w(
99
- o.useViewport ? null : i.value,
100
- e.value,
98
+ i.value = w(
99
+ o.useViewport ? null : e.value,
100
+ n.value,
101
101
  u.value,
102
102
  "end",
103
103
  !0
104
104
  );
105
105
  break;
106
106
  }
107
- switch (a.value) {
107
+ switch (i.value) {
108
108
  case "bottom":
109
- t.position.y = s.value.bottom, t.position.x = z + s.value.width / 2, f = -50, p = 0;
109
+ t.position.y = s.value.bottom, t.position.x = z + s.value.width / 2, v = -50, p = 0;
110
110
  break;
111
111
  case "bottom-start":
112
- t.position.y = s.value.bottom, t.position.x = g, f = 0, p = 0;
112
+ t.position.y = s.value.bottom, t.position.x = y, v = 0, p = 0;
113
113
  break;
114
114
  case "bottom-end":
115
- t.position.y = s.value.bottom, t.position.x = s.value.right, f = -100, p = 0;
115
+ t.position.y = s.value.bottom, t.position.x = s.value.right, v = -100, p = 0;
116
116
  break;
117
117
  case "left-start":
118
- t.position.y = k, t.position.x = g, f = -100, p = 0;
118
+ t.position.y = k, t.position.x = y, v = -100, p = 0;
119
119
  break;
120
120
  case "left":
121
- t.position.y = P + s.value.height / 2, t.position.x = g, p = -50, f = -100;
121
+ t.position.y = P + s.value.height / 2, t.position.x = y, p = -50, v = -100;
122
122
  break;
123
123
  case "left-end":
124
- t.position.y = s.value.bottom, t.position.x = g, p = -100, f = -100;
124
+ t.position.y = s.value.bottom, t.position.x = y, p = -100, v = -100;
125
125
  break;
126
126
  case "top-start":
127
- t.position.y = k, t.position.x = g, p = -100, f = 0;
127
+ t.position.y = k, t.position.x = y, p = -100, v = 0;
128
128
  break;
129
129
  case "top":
130
- t.position.y = k, t.position.x = z + s.value.width / 2, f = -50, p = -100;
130
+ t.position.y = k, t.position.x = z + s.value.width / 2, v = -50, p = -100;
131
131
  break;
132
132
  case "top-end":
133
- t.position.y = k, t.position.x = s.value.right, f = -100, p = -100;
133
+ t.position.y = k, t.position.x = s.value.right, v = -100, p = -100;
134
134
  break;
135
135
  case "right-start":
136
- t.position.y = k, t.position.x = s.value.right, f = 0, p = 0;
136
+ t.position.y = k, t.position.x = s.value.right, v = 0, p = 0;
137
137
  break;
138
138
  case "right":
139
- t.position.y = P + s.value.height / 2, t.position.x = s.value.right, p = -50, f = 0;
139
+ t.position.y = P + s.value.height / 2, t.position.x = s.value.right, p = -50, v = 0;
140
140
  break;
141
141
  case "right-end":
142
- t.position.y = s.value.bottom, t.position.x = s.value.right, p = -100, f = 0;
142
+ t.position.y = s.value.bottom, t.position.x = s.value.right, p = -100, v = 0;
143
143
  break;
144
144
  }
145
145
  } else
146
- switch (a.value) {
146
+ switch (i.value) {
147
147
  case "bottom":
148
- t.position.y = n.value.bottom - l.value.height, t.position.x = n.value.left + n.value.width / 2, f = -50;
148
+ t.position.y = a.value.bottom - l.value.height, t.position.x = a.value.left + a.value.width / 2, v = -50;
149
149
  break;
150
150
  case "left-end":
151
151
  case "bottom-start":
152
- t.position.y = n.value.bottom - l.value.height, t.position.x = n.value.left;
152
+ t.position.y = a.value.bottom - l.value.height, t.position.x = a.value.left;
153
153
  break;
154
154
  case "right-end":
155
155
  case "bottom-end":
156
- t.position.y = n.value.bottom - l.value.height, t.position.x = n.value.right - l.value.width;
156
+ t.position.y = a.value.bottom - l.value.height, t.position.x = a.value.right - l.value.width;
157
157
  break;
158
158
  case "left":
159
- t.position.y = n.value.top + (n.value.height - l.value.height) / 2, t.position.x = n.value.left;
159
+ t.position.y = a.value.top + (a.value.height - l.value.height) / 2, t.position.x = a.value.left;
160
160
  break;
161
161
  case "top-start":
162
162
  case "left-start":
163
- t.position.y = n.value.top, t.position.x = n.value.left;
163
+ t.position.y = a.value.top, t.position.x = a.value.left;
164
164
  break;
165
165
  case "top":
166
- t.position.y = n.value.top, t.position.x = n.value.left + (n.value.width - l.value.width) / 2;
166
+ t.position.y = a.value.top, t.position.x = a.value.left + (a.value.width - l.value.width) / 2;
167
167
  break;
168
168
  case "top-end":
169
169
  case "right-start":
170
- t.position.y = n.value.top, t.position.x = n.value.right - l.value.width;
170
+ t.position.y = a.value.top, t.position.x = a.value.right - l.value.width;
171
171
  case "right":
172
- t.position.y = n.value.top + (n.value.height - l.value.height) / 2, t.position.x = n.value.right - l.value.width;
172
+ t.position.y = a.value.top + (a.value.height - l.value.height) / 2, t.position.x = a.value.right - l.value.width;
173
173
  break;
174
174
  }
175
- const b = J(l.value, t.position, f, p);
176
- if (t.position.x = b.x, t.position.y = b.y, b.x < n.value.left && (t.position.x = n.value.left, f = 0), b.x + l.value.width > n.value.right) {
177
- const g = n.value.right - l.value.width;
178
- g > 0 && (t.position.x = g), f = 0;
175
+ const b = J(l.value, t.position, v, p);
176
+ if (t.position.x = b.x, t.position.y = b.y, b.x < a.value.left && (t.position.x = a.value.left, v = 0), b.x + l.value.width > a.value.right) {
177
+ const y = a.value.right - l.value.width;
178
+ y > 0 && (t.position.x = y), v = 0;
179
179
  }
180
- if (b.y < n.value.top && (t.position.y = n.value.top, p = 0), b.y + l.value.height > n.value.bottom) {
181
- const g = n.value.bottom - l.value.height;
182
- g > 0 && (t.position.y = g), p = 0;
180
+ if (b.y < a.value.top && (t.position.y = a.value.top, p = 0), b.y + l.value.height > a.value.bottom) {
181
+ const y = a.value.bottom - l.value.height;
182
+ y > 0 && (t.position.y = y), p = 0;
183
183
  }
184
- e.value.style.top = `${t.position.y}px`, e.value.style.left = `${t.position.x}px`, e.value.style.position = "fixed", e.value.style.display = "flex", l.value = e.value.getBoundingClientRect(), o.callback && o.callback(l, s, n, h, a);
184
+ n.value.style.top = `${t.position.y}px`, n.value.style.left = `${t.position.x}px`, n.value.style.position = "fixed", n.value.style.display = "flex", l.value = n.value.getBoundingClientRect(), o.callback && o.callback(l, s, a, h, i);
185
185
  });
186
186
  return q(() => {
187
- c.value.disconnect();
187
+ r.value.disconnect();
188
188
  }), {
189
189
  float: t,
190
190
  rect: l,
191
- setPosition: y,
191
+ setPosition: d,
192
192
  position: h,
193
- actualPosition: a,
193
+ actualPosition: i,
194
194
  openerRect: s,
195
- containerRect: n
195
+ containerRect: a
196
196
  };
197
197
  };
198
198
  function O(o) {
199
- const e = window.matchMedia(o), i = d(e.matches);
199
+ const n = window.matchMedia(o), e = m(n.matches);
200
200
  function u(s) {
201
- i.value = s.matches;
201
+ e.value = s.matches;
202
202
  }
203
203
  return B(() => {
204
- e.addEventListener("change", u);
204
+ n.addEventListener("change", u);
205
205
  }), q(() => {
206
- e.removeEventListener("change", u);
207
- }), i;
206
+ n.removeEventListener("change", u);
207
+ }), e;
208
208
  }
209
209
  function j(o) {
210
210
  return {
211
- isGreater(e) {
212
- return O(`(min-width: ${o[e]})`);
211
+ isGreater(n) {
212
+ return O(`(min-width: ${o[n]})`);
213
213
  },
214
- isSmaller(e) {
215
- return O(`(max-width: ${o[e]})`);
214
+ isSmaller(n) {
215
+ return O(`(max-width: ${o[n]})`);
216
216
  },
217
- isInBetween(e, i) {
218
- return O(`(min-width: ${o[e]}) and (max-width: ${o[i]})`);
217
+ isInBetween(n, e) {
218
+ return O(`(min-width: ${o[n]}) and (max-width: ${o[e]})`);
219
219
  }
220
220
  };
221
221
  }
222
- function V(o, e, i) {
222
+ function V(o, n, e) {
223
223
  if (!o)
224
224
  throw new Error("A target component has to be provided.");
225
- if (!e)
225
+ if (!n)
226
226
  throw new Error("A callback has to be provided.");
227
227
  const u = (s) => {
228
- !o.value || s.target === o.value || s.composedPath().includes(o.value) || typeof e == "function" && e();
228
+ !o.value || s.target === o.value || s.composedPath().includes(o.value) || typeof n == "function" && n();
229
229
  };
230
- i && R(i, (s, n) => {
231
- n && n.removeEventListener("click", u), s == null || s.addEventListener("click", u);
230
+ e && R(e, (s, a) => {
231
+ a && a.removeEventListener("click", u), s == null || s.addEventListener("click", u);
232
232
  }), B(() => {
233
- i || document.addEventListener("click", u);
234
- }), C(() => {
235
- if (i) {
236
- i.value.removeEventListener("click", u);
233
+ e || document.addEventListener("click", u);
234
+ }), F(() => {
235
+ if (e) {
236
+ e.value.removeEventListener("click", u);
237
237
  return;
238
238
  }
239
239
  document.removeEventListener("click", u);
240
240
  });
241
241
  }
242
- function ee(o, e) {
242
+ function ee(o, n) {
243
243
  if (!o)
244
244
  throw new Error("A target component has to be provided.");
245
- if (!e || typeof e != "function")
245
+ if (!n || typeof n != "function")
246
246
  throw new Error("A callback has to be provided.");
247
- const i = (u) => {
248
- e(u);
247
+ const e = (u) => {
248
+ n(u);
249
249
  };
250
250
  B(() => {
251
- o.value.addEventListener("keydown", i);
252
- }), C(() => {
253
- o.value.removeEventListener("keydown", i);
251
+ o.value.addEventListener("keydown", e);
252
+ }), F(() => {
253
+ o.value.removeEventListener("keydown", e);
254
254
  });
255
255
  }
256
- function te(o, e) {
256
+ function te(o, n) {
257
257
  if (!o || typeof o != "function")
258
258
  throw new Error("A callback has to be provided.");
259
- const i = (u) => {
259
+ const e = (u) => {
260
260
  o(u);
261
261
  };
262
262
  B(() => {
263
- if (!e) {
264
- document.addEventListener("keyup", i);
263
+ if (!n) {
264
+ document.addEventListener("keyup", e);
265
265
  return;
266
266
  }
267
- e.value.addEventListener("keyup", i);
268
- }), C(() => {
269
- if (!e) {
270
- document.removeEventListener("keyup", i);
267
+ n.value.addEventListener("keyup", e);
268
+ }), F(() => {
269
+ if (!n) {
270
+ document.removeEventListener("keyup", e);
271
271
  return;
272
272
  }
273
- e.value.removeEventListener("keyup", i);
273
+ n.value.removeEventListener("keyup", e);
274
274
  });
275
275
  }
276
- const oe = () => {
277
- const o = d(null), e = U(), i = L(() => e == null ? void 0 : e.props.amount), u = d(), s = (r) => r === null ? "" : r.toLocaleString("it-IT", {
278
- minimumFractionDigits: 2,
279
- maximumFractionDigits: 2,
280
- useGrouping: !1
281
- }), n = (r) => parseFloat(r.replace(/,/g, ".")), h = (r) => {
276
+ const oe = (o) => {
277
+ const n = m(null), e = U(), u = L(() => e == null ? void 0 : e.props.amount), s = m(), a = (r) => {
278
+ if (r === null)
279
+ return "";
280
+ const i = {
281
+ minimumFractionDigits: o.minimumFractionDigits,
282
+ useGrouping: !1
283
+ };
284
+ return o.maximumFractionDigits !== null && (i.maximumFractionDigits = o.maximumFractionDigits), r.toLocaleString("it-IT", i);
285
+ }, h = (r) => parseFloat(r.replace(/,/g, ".")), l = (r) => {
282
286
  if (!Number.isNaN(r) && e) {
283
- if (u.value = r, e.props.nullOnEmpty && !r) {
287
+ if (s.value = r, e.props.nullOnEmpty && !r) {
284
288
  e.emit("update:amount", null);
285
289
  return;
286
290
  }
287
- e.emit("update:amount", typeof i.value == "number" ? r : r.toString());
291
+ e.emit("update:amount", typeof u.value == "number" ? r : r == null ? void 0 : r.toString());
288
292
  }
289
- }, l = (r) => {
293
+ }, t = (r) => {
290
294
  setTimeout(() => {
291
- o.value && (o.value.value = r);
295
+ n.value && (n.value.value = r);
292
296
  }, 0);
293
- }, t = (r) => (c) => {
294
- if (!o.value || !c.target)
297
+ }, c = (r) => (i) => {
298
+ if (!n.value || !i.target)
295
299
  return;
296
- let { value: a } = r;
297
- a = a.replace(/[^0-9,.]/g, ""), l(a);
298
- const y = e != null && e.props.nullOnEmpty && a === "" ? null : n(a);
299
- h(Number.isNaN(y) ? 0 : y);
300
- }, v = (r) => {
301
- if (!o.value || !r.target)
300
+ let { value: d } = r;
301
+ d = d.replace(/[^0-9,.-]/g, ""), t(d);
302
+ const f = e != null && e.props.nullOnEmpty && d === "" ? null : h(d);
303
+ l(Number.isNaN(f) ? 0 : f);
304
+ }, g = (r) => {
305
+ if (!n.value || !r.target)
302
306
  return;
303
- let c = r.target.value.replace(/,/g, "."), a;
304
- c === "" && (e != null && e.props.nullOnEmpty) ? a = null : (a = n(c), Number.isNaN(a) && (a = 0));
305
- const y = s(a);
306
- l(y), h(n(y));
307
+ const i = r.target.value.replace(/,/g, ".");
308
+ let d;
309
+ i === "" && (e != null && e.props.nullOnEmpty) ? d = null : (d = h(i), Number.isNaN(d) && (d = 0));
310
+ const f = a(d);
311
+ t(f), l(h(f));
307
312
  };
308
- return R(o, (r, c) => {
309
- r && (c && (c == null || c.removeEventListener("input", t(r)), c == null || c.removeEventListener("blur", v)), r.addEventListener("input", t(r)), r.addEventListener("blur", v), e != null && e.props.amount && (r.value = s(i.value)));
310
- }), R(i, (r) => {
313
+ return R(n, (r, i) => {
314
+ r && (i && (i == null || i.removeEventListener("input", c(r)), i == null || i.removeEventListener("blur", g)), r.addEventListener("input", c(r)), r.addEventListener("blur", g), e != null && e.props.amount && (r.value = a(u.value)));
315
+ }), R(u, (r) => {
311
316
  T(() => {
312
- if (!(!o.value || !r) && u.value !== r) {
313
- const c = s(r);
314
- o.value.value = c, u.value = r;
317
+ if (!(!n.value || r === null || r === void 0) && s.value !== r) {
318
+ const i = a(r);
319
+ n.value.value = i, s.value = r;
315
320
  }
316
321
  });
317
322
  }), {
318
- inputRef: o,
319
- parse: n,
320
- format: s,
321
- emitAmount: h,
322
- setValue: l
323
+ inputRef: n,
324
+ parse: h,
325
+ format: a,
326
+ emitAmount: l,
327
+ setValue: t
323
328
  };
324
329
  }, ne = /* @__PURE__ */ G({
325
330
  __name: "FzFloating",
@@ -334,89 +339,89 @@ const oe = () => {
334
339
  useViewport: { type: Boolean }
335
340
  },
336
341
  emits: ["fzfloating:setPosition"],
337
- setup(o, { emit: e }) {
338
- const i = o, u = e, s = d(null), n = d(null), h = K();
342
+ setup(o, { emit: n }) {
343
+ const e = o, u = n, s = m(null), a = m(null), h = K();
339
344
  let l = !1;
340
345
  const t = {
341
- position: L(() => i.position),
346
+ position: L(() => e.position),
342
347
  element: {
343
348
  // @ts-ignore
344
- domRef: n
349
+ domRef: a
345
350
  },
346
351
  container: {
347
352
  // @ts-ignore
348
- domRef: Q(i.container || document.body)
353
+ domRef: Q(e.container || document.body)
349
354
  },
350
- useViewport: L(() => i.useViewport),
351
- callback(...a) {
352
- u("fzfloating:setPosition", ...a);
355
+ useViewport: L(() => e.useViewport),
356
+ callback(...i) {
357
+ u("fzfloating:setPosition", ...i);
353
358
  }
354
359
  };
355
360
  h.opener && (t.opener = {
356
361
  domRef: s
357
362
  });
358
- const v = Z(t), r = () => {
363
+ const c = Z(t), g = () => {
359
364
  l || (l = !0, requestAnimationFrame(() => {
360
- i.isOpen && v.setPosition(), l = !1;
365
+ e.isOpen && c.setPosition(), l = !1;
361
366
  }));
362
367
  };
363
368
  R(
364
- () => i.position,
365
- () => r()
369
+ () => e.position,
370
+ () => g()
366
371
  ), R(
367
- () => i.isOpen,
368
- (a) => {
369
- if (!a || !n.value) {
370
- window.removeEventListener("scroll", r);
372
+ () => e.isOpen,
373
+ (i) => {
374
+ if (!i || !a.value) {
375
+ window.removeEventListener("scroll", g);
371
376
  return;
372
377
  }
373
- window.addEventListener("scroll", r), n.value.style.top = "0px", n.value.style.left = "0px", n.value.style.transform = "none", v.setPosition();
378
+ window.addEventListener("scroll", g), a.value.style.top = "0px", a.value.style.left = "0px", a.value.style.transform = "none", c.setPosition();
374
379
  }
375
- ), C(() => {
376
- window.removeEventListener("scroll", r);
380
+ ), F(() => {
381
+ window.removeEventListener("scroll", g);
377
382
  });
378
- const c = L(() => i.overrideContentClass ? i.contentClass : ["bg-core-white fixed p-4 z-10", i.contentClass]);
379
- return (a, y) => ($(), S("div", null, [
380
- x(a.$slots, "opener-start"),
381
- M("div", {
383
+ const r = L(() => e.overrideContentClass ? e.contentClass : ["bg-core-white fixed p-4 z-10", e.contentClass]);
384
+ return (i, d) => (C(), S("div", null, [
385
+ x(i.$slots, "opener-start"),
386
+ D("div", {
382
387
  ref_key: "opener",
383
388
  ref: s,
384
389
  class: "inline-flex"
385
390
  }, [
386
- x(a.$slots, "opener", {
387
- isOpen: a.isOpen,
388
- floating: F(v)
391
+ x(i.$slots, "opener", {
392
+ isOpen: i.isOpen,
393
+ floating: $(c)
389
394
  })
390
395
  ], 512),
391
- x(a.$slots, "opener-end"),
392
- a.teleport ? I("", !0) : A(($(), S("div", {
396
+ x(i.$slots, "opener-end"),
397
+ i.teleport ? I("", !0) : M((C(), S("div", {
393
398
  key: 0,
394
399
  ref_key: "content",
395
- ref: n,
396
- class: D(["fz__floating__content bg-core-white fixed z-10 p-4", c.value])
400
+ ref: a,
401
+ class: A(["fz__floating__content", r.value])
397
402
  }, [
398
- x(a.$slots, "default", {
399
- isOpen: a.isOpen,
400
- floating: F(v)
403
+ x(i.$slots, "default", {
404
+ isOpen: i.isOpen,
405
+ floating: $(c)
401
406
  })
402
407
  ], 2)), [
403
- [W, a.$slots.default && (!a.$slots.opener || a.$slots.opener && a.isOpen)]
408
+ [W, i.$slots.default && (!i.$slots.opener || i.$slots.opener && i.isOpen)]
404
409
  ]),
405
- a.teleport ? ($(), X(Y, {
410
+ i.teleport ? (C(), X(Y, {
406
411
  key: 1,
407
412
  to: "body"
408
413
  }, [
409
- A(M("div", {
414
+ M(D("div", {
410
415
  ref_key: "content",
411
- ref: n,
412
- class: D(["fz__floating__content bg-core-white fixed z-10 p-4", c.value])
416
+ ref: a,
417
+ class: A(["fz__floating__content", r.value])
413
418
  }, [
414
- x(a.$slots, "default", {
415
- isOpen: a.isOpen,
416
- floating: F(v)
419
+ x(i.$slots, "default", {
420
+ isOpen: i.isOpen,
421
+ floating: $(c)
417
422
  })
418
423
  ], 2), [
419
- [W, a.$slots.default && (!a.$slots.opener || a.$slots.opener && a.isOpen)]
424
+ [W, i.$slots.default && (!i.$slots.opener || i.$slots.opener && i.isOpen)]
420
425
  ])
421
426
  ])) : I("", !0)
422
427
  ]));
@@ -1 +1 @@
1
- (function(h,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(h=typeof globalThis<"u"?globalThis:h||self,e(h.FzComposables={},h.Vue))})(this,function(h,e){"use strict";const E=new DOMRect(0,0,window.innerWidth,window.innerHeight),w=(n,t,a,c,s)=>{let i=s?"bottom":"right",m=s?"bottom-start":"right-start";E.width=window.innerWidth,E.height=window.innerHeight,E.x=0,E.y=0;const u=n?n.getBoundingClientRect():E,o=t.getBoundingClientRect(),d=a.getBoundingClientRect(),l=(d.left-u.left-o.width)/u.width,f=(u.right-d.right-o.width)/u.width,r=(d.top-u.top-o.height)/u.height,b=(u.bottom-d.bottom-o.height)/u.height;let g=[{key:"right",space:f},{key:"top",space:r},{key:"bottom",space:b},{key:"left",space:l}].sort((p,v)=>v.space-p.space);if(s&&(g=g.filter(p=>p.key==="top"||p.key==="bottom")),i=g[0].key,!c)switch(i){case"right":case"left":const p=(o.height-d.height)/2;u.top>d.top-p&&(c="end"),u.bottom<d.top-p&&(c="start");break}return m=c?`${i}-${c}`:i,m},O=(n,t,a,c)=>({x:t.x+n.width*a/100,y:t.y+n.height*c/100}),B=n=>{const t=e.ref(null),a=e.ref(null),c=e.ref(null),s=e.ref(),i=e.ref(),m=e.ref("auto"),u=e.ref(),o=e.reactive({position:{x:0,y:0}}),d={root:null,rootMargin:"0px",threshold:1,...n.element.intersectionOptions},l=(g,p)=>{},f=e.ref(new IntersectionObserver(l,d)),r=e.ref(),b=()=>e.nextTick(()=>{var C;if(r.value=n.position?n.position.value:"auto",t.value=typeof n.element.domRef.value=="string"?document.querySelector(n.element.domRef.value):n.element.domRef.value,n.container?(a.value=typeof n.container.domRef.value=="string"?document.querySelector(n.container.domRef.value):n.container.domRef.value,a.value??(a.value=document.body)):a.value=document.body,!t.value)throw new Error("missing reference element for floating behavior");n.opener&&(c.value=typeof n.opener.domRef.value=="string"?document.querySelector(n.opener.domRef.value):n.opener.domRef.value),u.value=t.value.getBoundingClientRect(),s.value=(C=c.value)==null?void 0:C.getBoundingClientRect(),i.value=a.value.getBoundingClientRect();const g=window.getComputedStyle(t.value);f.value.observe(t.value),f.value.observe(a.value);let p=0,v=0;if(n.opener&&c.value&&s&&s.value){const y=s.value.left-parseFloat(g.marginLeft)-parseFloat(g.marginRight),L=s.value.left-parseFloat(g.marginLeft),R=s.value.top-parseFloat(g.marginTop)-parseFloat(g.marginBottom),F=s.value.top-parseFloat(g.marginTop);switch(r.value){case"auto":r.value=w(n.useViewport?null:a.value,t.value,c.value);break;case"auto-vertical":r.value=w(n.useViewport?null:a.value,t.value,c.value,void 0,!0);break;case"auto-start":r.value=w(n.useViewport?null:a.value,t.value,c.value,"start");break;case"auto-vertical-start":r.value=w(n.useViewport?null:a.value,t.value,c.value,"start",!0);break;case"auto-end":r.value=w(n.useViewport?null:a.value,t.value,c.value,"end");break;case"auto-vertical-end":r.value=w(n.useViewport?null:a.value,t.value,c.value,"end",!0);break}switch(r.value){case"bottom":o.position.y=s.value.bottom,o.position.x=L+s.value.width/2,v=-50,p=0;break;case"bottom-start":o.position.y=s.value.bottom,o.position.x=y,v=0,p=0;break;case"bottom-end":o.position.y=s.value.bottom,o.position.x=s.value.right,v=-100,p=0;break;case"left-start":o.position.y=R,o.position.x=y,v=-100,p=0;break;case"left":o.position.y=F+s.value.height/2,o.position.x=y,p=-50,v=-100;break;case"left-end":o.position.y=s.value.bottom,o.position.x=y,p=-100,v=-100;break;case"top-start":o.position.y=R,o.position.x=y,p=-100,v=0;break;case"top":o.position.y=R,o.position.x=L+s.value.width/2,v=-50,p=-100;break;case"top-end":o.position.y=R,o.position.x=s.value.right,v=-100,p=-100;break;case"right-start":o.position.y=R,o.position.x=s.value.right,v=0,p=0;break;case"right":o.position.y=F+s.value.height/2,o.position.x=s.value.right,p=-50,v=0;break;case"right-end":o.position.y=s.value.bottom,o.position.x=s.value.right,p=-100,v=0;break}}else switch(r.value){case"bottom":o.position.y=i.value.bottom-u.value.height,o.position.x=i.value.left+i.value.width/2,v=-50;break;case"left-end":case"bottom-start":o.position.y=i.value.bottom-u.value.height,o.position.x=i.value.left;break;case"right-end":case"bottom-end":o.position.y=i.value.bottom-u.value.height,o.position.x=i.value.right-u.value.width;break;case"left":o.position.y=i.value.top+(i.value.height-u.value.height)/2,o.position.x=i.value.left;break;case"top-start":case"left-start":o.position.y=i.value.top,o.position.x=i.value.left;break;case"top":o.position.y=i.value.top,o.position.x=i.value.left+(i.value.width-u.value.width)/2;break;case"top-end":case"right-start":o.position.y=i.value.top,o.position.x=i.value.right-u.value.width;case"right":o.position.y=i.value.top+(i.value.height-u.value.height)/2,o.position.x=i.value.right-u.value.width;break}const k=O(u.value,o.position,v,p);if(o.position.x=k.x,o.position.y=k.y,k.x<i.value.left&&(o.position.x=i.value.left,v=0),k.x+u.value.width>i.value.right){const y=i.value.right-u.value.width;y>0&&(o.position.x=y),v=0}if(k.y<i.value.top&&(o.position.y=i.value.top,p=0),k.y+u.value.height>i.value.bottom){const y=i.value.bottom-u.value.height;y>0&&(o.position.y=y),p=0}t.value.style.top=`${o.position.y}px`,t.value.style.left=`${o.position.x}px`,t.value.style.position="fixed",t.value.style.display="flex",u.value=t.value.getBoundingClientRect(),n.callback&&n.callback(u,s,i,m,r)});return e.onUnmounted(()=>{f.value.disconnect()}),{float:o,rect:u,setPosition:b,position:m,actualPosition:r,openerRect:s,containerRect:i}};function x(n){const t=window.matchMedia(n),a=e.ref(t.matches);function c(s){a.value=s.matches}return e.onMounted(()=>{t.addEventListener("change",c)}),e.onUnmounted(()=>{t.removeEventListener("change",c)}),a}function S(n){return{isGreater(t){return x(`(min-width: ${n[t]})`)},isSmaller(t){return x(`(max-width: ${n[t]})`)},isInBetween(t,a){return x(`(min-width: ${n[t]}) and (max-width: ${n[a]})`)}}}function $(n,t,a){if(!n)throw new Error("A target component has to be provided.");if(!t)throw new Error("A callback has to be provided.");const c=s=>{!n.value||s.target===n.value||s.composedPath().includes(n.value)||typeof t=="function"&&t()};a&&e.watch(a,(s,i)=>{i&&i.removeEventListener("click",c),s==null||s.addEventListener("click",c)}),e.onMounted(()=>{a||document.addEventListener("click",c)}),e.onBeforeUnmount(()=>{if(a){a.value.removeEventListener("click",c);return}document.removeEventListener("click",c)})}function N(n,t){if(!n)throw new Error("A target component has to be provided.");if(!t||typeof t!="function")throw new Error("A callback has to be provided.");const a=c=>{t(c)};e.onMounted(()=>{n.value.addEventListener("keydown",a)}),e.onBeforeUnmount(()=>{n.value.removeEventListener("keydown",a)})}function z(n,t){if(!n||typeof n!="function")throw new Error("A callback has to be provided.");const a=c=>{n(c)};e.onMounted(()=>{if(!t){document.addEventListener("keyup",a);return}t.value.addEventListener("keyup",a)}),e.onBeforeUnmount(()=>{if(!t){document.removeEventListener("keyup",a);return}t.value.removeEventListener("keyup",a)})}const M=()=>{const n=e.ref(null),t=e.getCurrentInstance(),a=e.computed(()=>t==null?void 0:t.props.amount),c=e.ref(),s=l=>l===null?"":l.toLocaleString("it-IT",{minimumFractionDigits:2,maximumFractionDigits:2,useGrouping:!1}),i=l=>parseFloat(l.replace(/,/g,".")),m=l=>{if(!Number.isNaN(l)&&t){if(c.value=l,t.props.nullOnEmpty&&!l){t.emit("update:amount",null);return}t.emit("update:amount",typeof a.value=="number"?l:l.toString())}},u=l=>{setTimeout(()=>{n.value&&(n.value.value=l)},0)},o=l=>f=>{if(!n.value||!f.target)return;let{value:r}=l;r=r.replace(/[^0-9,.]/g,""),u(r);const b=t!=null&&t.props.nullOnEmpty&&r===""?null:i(r);m(Number.isNaN(b)?0:b)},d=l=>{if(!n.value||!l.target)return;let f=l.target.value.replace(/,/g,"."),r;f===""&&(t!=null&&t.props.nullOnEmpty)?r=null:(r=i(f),Number.isNaN(r)&&(r=0));const b=s(r);u(b),m(i(b))};return e.watch(n,(l,f)=>{l&&(f&&(f==null||f.removeEventListener("input",o(l)),f==null||f.removeEventListener("blur",d)),l.addEventListener("input",o(l)),l.addEventListener("blur",d),t!=null&&t.props.amount&&(l.value=s(a.value)))}),e.watch(a,l=>{e.nextTick(()=>{if(!(!n.value||!l)&&c.value!==l){const f=s(l);n.value.value=f,c.value=l}})}),{inputRef:n,parse:i,format:s,emitAmount:m,setValue:u}},P=e.defineComponent({__name:"FzFloating",props:{isOpen:{type:Boolean,default:!1},position:{default:"auto"},container:{},contentClass:{},openerClass:{},overrideContentClass:{type:Boolean},teleport:{type:Boolean,default:!1},useViewport:{type:Boolean}},emits:["fzfloating:setPosition"],setup(n,{emit:t}){const a=n,c=t,s=e.ref(null),i=e.ref(null),m=e.useSlots();let u=!1;const o={position:e.computed(()=>a.position),element:{domRef:i},container:{domRef:e.toRef(a.container||document.body)},useViewport:e.computed(()=>a.useViewport),callback(...r){c("fzfloating:setPosition",...r)}};m.opener&&(o.opener={domRef:s});const d=B(o),l=()=>{u||(u=!0,requestAnimationFrame(()=>{a.isOpen&&d.setPosition(),u=!1}))};e.watch(()=>a.position,()=>l()),e.watch(()=>a.isOpen,r=>{if(!r||!i.value){window.removeEventListener("scroll",l);return}window.addEventListener("scroll",l),i.value.style.top="0px",i.value.style.left="0px",i.value.style.transform="none",d.setPosition()}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",l)});const f=e.computed(()=>a.overrideContentClass?a.contentClass:["bg-core-white fixed p-4 z-10",a.contentClass]);return(r,b)=>(e.openBlock(),e.createElementBlock("div",null,[e.renderSlot(r.$slots,"opener-start"),e.createElementVNode("div",{ref_key:"opener",ref:s,class:"inline-flex"},[e.renderSlot(r.$slots,"opener",{isOpen:r.isOpen,floating:e.unref(d)})],512),e.renderSlot(r.$slots,"opener-end"),r.teleport?e.createCommentVNode("",!0):e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"content",ref:i,class:e.normalizeClass(["fz__floating__content bg-core-white fixed z-10 p-4",f.value])},[e.renderSlot(r.$slots,"default",{isOpen:r.isOpen,floating:e.unref(d)})],2)),[[e.vShow,r.$slots.default&&(!r.$slots.opener||r.$slots.opener&&r.isOpen)]]),r.teleport?(e.openBlock(),e.createBlock(e.Teleport,{key:1,to:"body"},[e.withDirectives(e.createElementVNode("div",{ref_key:"content",ref:i,class:e.normalizeClass(["fz__floating__content bg-core-white fixed z-10 p-4",f.value])},[e.renderSlot(r.$slots,"default",{isOpen:r.isOpen,floating:e.unref(d)})],2),[[e.vShow,r.$slots.default&&(!r.$slots.opener||r.$slots.opener&&r.isOpen)]])])):e.createCommentVNode("",!0)]))}});h.FzFloating=P,h.useBreakpoints=S,h.useClickOutside=$,h.useCurrency=M,h.useFloating=B,h.useKeyDown=N,h.useKeyUp=z,h.useMediaQuery=x,Object.defineProperty(h,Symbol.toStringTag,{value:"Module"})});
1
+ (function(v,e){typeof exports=="object"&&typeof module<"u"?e(exports,require("vue")):typeof define=="function"&&define.amd?define(["exports","vue"],e):(v=typeof globalThis<"u"?globalThis:v||self,e(v.FzComposables={},v.Vue))})(this,function(v,e){"use strict";const E=new DOMRect(0,0,window.innerWidth,window.innerHeight),w=(n,i,t,c,s)=>{let r=s?"bottom":"right",g=s?"bottom-start":"right-start";E.width=window.innerWidth,E.height=window.innerHeight,E.x=0,E.y=0;const u=n?n.getBoundingClientRect():E,o=i.getBoundingClientRect(),f=t.getBoundingClientRect(),y=(f.left-u.left-o.width)/u.width,l=(u.right-f.right-o.width)/u.width,a=(f.top-u.top-o.height)/u.height,h=(u.bottom-f.bottom-o.height)/u.height;let m=[{key:"right",space:l},{key:"top",space:a},{key:"bottom",space:h},{key:"left",space:y}].sort((p,d)=>d.space-p.space);if(s&&(m=m.filter(p=>p.key==="top"||p.key==="bottom")),r=m[0].key,!c)switch(r){case"right":case"left":const p=(o.height-f.height)/2;u.top>f.top-p&&(c="end"),u.bottom<f.top-p&&(c="start");break}return g=c?`${r}-${c}`:r,g},O=(n,i,t,c)=>({x:i.x+n.width*t/100,y:i.y+n.height*c/100}),B=n=>{const i=e.ref(null),t=e.ref(null),c=e.ref(null),s=e.ref(),r=e.ref(),g=e.ref("auto"),u=e.ref(),o=e.reactive({position:{x:0,y:0}}),f={root:null,rootMargin:"0px",threshold:1,...n.element.intersectionOptions},y=(m,p)=>{},l=e.ref(new IntersectionObserver(y,f)),a=e.ref(),h=()=>e.nextTick(()=>{var C;if(a.value=n.position?n.position.value:"auto",i.value=typeof n.element.domRef.value=="string"?document.querySelector(n.element.domRef.value):n.element.domRef.value,n.container?(t.value=typeof n.container.domRef.value=="string"?document.querySelector(n.container.domRef.value):n.container.domRef.value,t.value??(t.value=document.body)):t.value=document.body,!i.value)throw new Error("missing reference element for floating behavior");n.opener&&(c.value=typeof n.opener.domRef.value=="string"?document.querySelector(n.opener.domRef.value):n.opener.domRef.value),u.value=i.value.getBoundingClientRect(),s.value=(C=c.value)==null?void 0:C.getBoundingClientRect(),r.value=t.value.getBoundingClientRect();const m=window.getComputedStyle(i.value);l.value.observe(i.value),l.value.observe(t.value);let p=0,d=0;if(n.opener&&c.value&&s&&s.value){const b=s.value.left-parseFloat(m.marginLeft)-parseFloat(m.marginRight),L=s.value.left-parseFloat(m.marginLeft),R=s.value.top-parseFloat(m.marginTop)-parseFloat(m.marginBottom),F=s.value.top-parseFloat(m.marginTop);switch(a.value){case"auto":a.value=w(n.useViewport?null:t.value,i.value,c.value);break;case"auto-vertical":a.value=w(n.useViewport?null:t.value,i.value,c.value,void 0,!0);break;case"auto-start":a.value=w(n.useViewport?null:t.value,i.value,c.value,"start");break;case"auto-vertical-start":a.value=w(n.useViewport?null:t.value,i.value,c.value,"start",!0);break;case"auto-end":a.value=w(n.useViewport?null:t.value,i.value,c.value,"end");break;case"auto-vertical-end":a.value=w(n.useViewport?null:t.value,i.value,c.value,"end",!0);break}switch(a.value){case"bottom":o.position.y=s.value.bottom,o.position.x=L+s.value.width/2,d=-50,p=0;break;case"bottom-start":o.position.y=s.value.bottom,o.position.x=b,d=0,p=0;break;case"bottom-end":o.position.y=s.value.bottom,o.position.x=s.value.right,d=-100,p=0;break;case"left-start":o.position.y=R,o.position.x=b,d=-100,p=0;break;case"left":o.position.y=F+s.value.height/2,o.position.x=b,p=-50,d=-100;break;case"left-end":o.position.y=s.value.bottom,o.position.x=b,p=-100,d=-100;break;case"top-start":o.position.y=R,o.position.x=b,p=-100,d=0;break;case"top":o.position.y=R,o.position.x=L+s.value.width/2,d=-50,p=-100;break;case"top-end":o.position.y=R,o.position.x=s.value.right,d=-100,p=-100;break;case"right-start":o.position.y=R,o.position.x=s.value.right,d=0,p=0;break;case"right":o.position.y=F+s.value.height/2,o.position.x=s.value.right,p=-50,d=0;break;case"right-end":o.position.y=s.value.bottom,o.position.x=s.value.right,p=-100,d=0;break}}else switch(a.value){case"bottom":o.position.y=r.value.bottom-u.value.height,o.position.x=r.value.left+r.value.width/2,d=-50;break;case"left-end":case"bottom-start":o.position.y=r.value.bottom-u.value.height,o.position.x=r.value.left;break;case"right-end":case"bottom-end":o.position.y=r.value.bottom-u.value.height,o.position.x=r.value.right-u.value.width;break;case"left":o.position.y=r.value.top+(r.value.height-u.value.height)/2,o.position.x=r.value.left;break;case"top-start":case"left-start":o.position.y=r.value.top,o.position.x=r.value.left;break;case"top":o.position.y=r.value.top,o.position.x=r.value.left+(r.value.width-u.value.width)/2;break;case"top-end":case"right-start":o.position.y=r.value.top,o.position.x=r.value.right-u.value.width;case"right":o.position.y=r.value.top+(r.value.height-u.value.height)/2,o.position.x=r.value.right-u.value.width;break}const k=O(u.value,o.position,d,p);if(o.position.x=k.x,o.position.y=k.y,k.x<r.value.left&&(o.position.x=r.value.left,d=0),k.x+u.value.width>r.value.right){const b=r.value.right-u.value.width;b>0&&(o.position.x=b),d=0}if(k.y<r.value.top&&(o.position.y=r.value.top,p=0),k.y+u.value.height>r.value.bottom){const b=r.value.bottom-u.value.height;b>0&&(o.position.y=b),p=0}i.value.style.top=`${o.position.y}px`,i.value.style.left=`${o.position.x}px`,i.value.style.position="fixed",i.value.style.display="flex",u.value=i.value.getBoundingClientRect(),n.callback&&n.callback(u,s,r,g,a)});return e.onUnmounted(()=>{l.value.disconnect()}),{float:o,rect:u,setPosition:h,position:g,actualPosition:a,openerRect:s,containerRect:r}};function x(n){const i=window.matchMedia(n),t=e.ref(i.matches);function c(s){t.value=s.matches}return e.onMounted(()=>{i.addEventListener("change",c)}),e.onUnmounted(()=>{i.removeEventListener("change",c)}),t}function S(n){return{isGreater(i){return x(`(min-width: ${n[i]})`)},isSmaller(i){return x(`(max-width: ${n[i]})`)},isInBetween(i,t){return x(`(min-width: ${n[i]}) and (max-width: ${n[t]})`)}}}function $(n,i,t){if(!n)throw new Error("A target component has to be provided.");if(!i)throw new Error("A callback has to be provided.");const c=s=>{!n.value||s.target===n.value||s.composedPath().includes(n.value)||typeof i=="function"&&i()};t&&e.watch(t,(s,r)=>{r&&r.removeEventListener("click",c),s==null||s.addEventListener("click",c)}),e.onMounted(()=>{t||document.addEventListener("click",c)}),e.onBeforeUnmount(()=>{if(t){t.value.removeEventListener("click",c);return}document.removeEventListener("click",c)})}function N(n,i){if(!n)throw new Error("A target component has to be provided.");if(!i||typeof i!="function")throw new Error("A callback has to be provided.");const t=c=>{i(c)};e.onMounted(()=>{n.value.addEventListener("keydown",t)}),e.onBeforeUnmount(()=>{n.value.removeEventListener("keydown",t)})}function M(n,i){if(!n||typeof n!="function")throw new Error("A callback has to be provided.");const t=c=>{n(c)};e.onMounted(()=>{if(!i){document.addEventListener("keyup",t);return}i.value.addEventListener("keyup",t)}),e.onBeforeUnmount(()=>{if(!i){document.removeEventListener("keyup",t);return}i.value.removeEventListener("keyup",t)})}const z=n=>{const i=e.ref(null),t=e.getCurrentInstance(),c=e.computed(()=>t==null?void 0:t.props.amount),s=e.ref(),r=l=>{if(l===null)return"";const a={minimumFractionDigits:n.minimumFractionDigits,useGrouping:!1};return n.maximumFractionDigits!==null&&(a.maximumFractionDigits=n.maximumFractionDigits),l.toLocaleString("it-IT",a)},g=l=>parseFloat(l.replace(/,/g,".")),u=l=>{if(!Number.isNaN(l)&&t){if(s.value=l,t.props.nullOnEmpty&&!l){t.emit("update:amount",null);return}t.emit("update:amount",typeof c.value=="number"?l:l==null?void 0:l.toString())}},o=l=>{setTimeout(()=>{i.value&&(i.value.value=l)},0)},f=l=>a=>{if(!i.value||!a.target)return;let{value:h}=l;h=h.replace(/[^0-9,.-]/g,""),o(h);const m=t!=null&&t.props.nullOnEmpty&&h===""?null:g(h);u(Number.isNaN(m)?0:m)},y=l=>{if(!i.value||!l.target)return;const a=l.target.value.replace(/,/g,".");let h;a===""&&(t!=null&&t.props.nullOnEmpty)?h=null:(h=g(a),Number.isNaN(h)&&(h=0));const m=r(h);o(m),u(g(m))};return e.watch(i,(l,a)=>{l&&(a&&(a==null||a.removeEventListener("input",f(l)),a==null||a.removeEventListener("blur",y)),l.addEventListener("input",f(l)),l.addEventListener("blur",y),t!=null&&t.props.amount&&(l.value=r(c.value)))}),e.watch(c,l=>{e.nextTick(()=>{if(!(!i.value||l===null||l===void 0)&&s.value!==l){const a=r(l);i.value.value=a,s.value=l}})}),{inputRef:i,parse:g,format:r,emitAmount:u,setValue:o}},D=e.defineComponent({__name:"FzFloating",props:{isOpen:{type:Boolean,default:!1},position:{default:"auto"},container:{},contentClass:{},openerClass:{},overrideContentClass:{type:Boolean},teleport:{type:Boolean,default:!1},useViewport:{type:Boolean}},emits:["fzfloating:setPosition"],setup(n,{emit:i}){const t=n,c=i,s=e.ref(null),r=e.ref(null),g=e.useSlots();let u=!1;const o={position:e.computed(()=>t.position),element:{domRef:r},container:{domRef:e.toRef(t.container||document.body)},useViewport:e.computed(()=>t.useViewport),callback(...a){c("fzfloating:setPosition",...a)}};g.opener&&(o.opener={domRef:s});const f=B(o),y=()=>{u||(u=!0,requestAnimationFrame(()=>{t.isOpen&&f.setPosition(),u=!1}))};e.watch(()=>t.position,()=>y()),e.watch(()=>t.isOpen,a=>{if(!a||!r.value){window.removeEventListener("scroll",y);return}window.addEventListener("scroll",y),r.value.style.top="0px",r.value.style.left="0px",r.value.style.transform="none",f.setPosition()}),e.onBeforeUnmount(()=>{window.removeEventListener("scroll",y)});const l=e.computed(()=>t.overrideContentClass?t.contentClass:["bg-core-white fixed p-4 z-10",t.contentClass]);return(a,h)=>(e.openBlock(),e.createElementBlock("div",null,[e.renderSlot(a.$slots,"opener-start"),e.createElementVNode("div",{ref_key:"opener",ref:s,class:"inline-flex"},[e.renderSlot(a.$slots,"opener",{isOpen:a.isOpen,floating:e.unref(f)})],512),e.renderSlot(a.$slots,"opener-end"),a.teleport?e.createCommentVNode("",!0):e.withDirectives((e.openBlock(),e.createElementBlock("div",{key:0,ref_key:"content",ref:r,class:e.normalizeClass(["fz__floating__content",l.value])},[e.renderSlot(a.$slots,"default",{isOpen:a.isOpen,floating:e.unref(f)})],2)),[[e.vShow,a.$slots.default&&(!a.$slots.opener||a.$slots.opener&&a.isOpen)]]),a.teleport?(e.openBlock(),e.createBlock(e.Teleport,{key:1,to:"body"},[e.withDirectives(e.createElementVNode("div",{ref_key:"content",ref:r,class:e.normalizeClass(["fz__floating__content",l.value])},[e.renderSlot(a.$slots,"default",{isOpen:a.isOpen,floating:e.unref(f)})],2),[[e.vShow,a.$slots.default&&(!a.$slots.opener||a.$slots.opener&&a.isOpen)]])])):e.createCommentVNode("",!0)]))}});v.FzFloating=D,v.useBreakpoints=S,v.useClickOutside=$,v.useCurrency=z,v.useFloating=B,v.useKeyDown=N,v.useKeyUp=M,v.useMediaQuery=x,Object.defineProperty(v,Symbol.toStringTag,{value:"Module"})});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fiscozen/composables",
3
- "version": "0.1.24",
3
+ "version": "0.1.26",
4
4
  "description": "Design System utility composables",
5
5
  "main": "src/index.ts",
6
6
  "type": "module",
@@ -1,7 +1,8 @@
1
1
  import { Ref, watch, getCurrentInstance, computed, ref, nextTick } from 'vue'
2
+ import { FzUseCurrencyOptions } from '../types'
2
3
 
3
- export const useCurrency = () => {
4
- const inputRef: Ref<HTMLInputElement | null> = ref(null)
4
+ export const useCurrency = (options: FzUseCurrencyOptions) => {
5
+ const inputRef: Ref<HTMLInputElement | null | undefined> = ref(null)
5
6
  const vm = getCurrentInstance()
6
7
 
7
8
  const computedModel = computed<number | null>(() => vm?.props.amount as unknown as number | null)
@@ -11,11 +12,14 @@ export const useCurrency = () => {
11
12
  if (input === null) {
12
13
  return ''
13
14
  }
14
- return input.toLocaleString('it-IT', {
15
- minimumFractionDigits: 2,
16
- maximumFractionDigits: 2,
15
+ const safeOptions: Intl.NumberFormatOptions = {
16
+ minimumFractionDigits: options.minimumFractionDigits,
17
17
  useGrouping: false
18
- })
18
+ };
19
+ if (options.maximumFractionDigits !== null) {
20
+ safeOptions.maximumFractionDigits = options.maximumFractionDigits
21
+ }
22
+ return input.toLocaleString('it-IT', safeOptions)
19
23
  }
20
24
 
21
25
  const parse = (text: string) => {
@@ -33,7 +37,7 @@ export const useCurrency = () => {
33
37
  vm.emit('update:amount', null)
34
38
  return
35
39
  }
36
- vm.emit('update:amount', typeof computedModel.value === 'number' ? val : val.toString())
40
+ vm.emit('update:amount', typeof computedModel.value === 'number' ? val : val?.toString())
37
41
  }
38
42
  }
39
43
 
@@ -52,7 +56,7 @@ export const useCurrency = () => {
52
56
  return
53
57
  }
54
58
  let { value } = el
55
- value = value.replace(/[^0-9,.]/g, '')
59
+ value = value.replace(/[^0-9,.-]/g, '')
56
60
  setValue(value)
57
61
  const numberValue = vm?.props.nullOnEmpty && value === '' ? null : parse(value)
58
62
  emitAmount(Number.isNaN(numberValue) ? 0 : numberValue)
@@ -62,7 +66,7 @@ export const useCurrency = () => {
62
66
  if (!inputRef.value || !e.target) {
63
67
  return
64
68
  }
65
- let rawValue = (e.target as HTMLInputElement).value.replace(/,/g, '.')
69
+ const rawValue = (e.target as HTMLInputElement).value.replace(/,/g, '.')
66
70
  let number: number | null
67
71
 
68
72
  if (rawValue === '' && vm?.props.nullOnEmpty) {
@@ -97,7 +101,7 @@ export const useCurrency = () => {
97
101
 
98
102
  watch(computedModel, (newVal) => {
99
103
  nextTick(() => {
100
- if (!inputRef.value || !newVal) {
104
+ if (!inputRef.value || newVal === null || newVal === undefined) {
101
105
  return
102
106
  }
103
107
  // we need to format here only if someone externally set the
package/src/types.ts CHANGED
@@ -50,3 +50,8 @@ export interface FzUseFloatingArgs {
50
50
  actualPosition: Ref<FzFloatingPosition | undefined>
51
51
  ) => void
52
52
  }
53
+
54
+ export interface FzUseCurrencyOptions {
55
+ minimumFractionDigits: number,
56
+ maximumFractionDigits: number|null,
57
+ }