@fiscozen/composables 1.0.4 → 1.1.1

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/CHANGELOG.md CHANGED
@@ -1,5 +1,28 @@
1
1
  # @fiscozen/composables
2
2
 
3
+ ## 1.1.1
4
+
5
+ ### Patch Changes
6
+
7
+ - ea5c15c: FzFloating: keep floating content inside the viewport horizontally and vertically
8
+
9
+ `useFloating`'s boundary correction previously clamped the floating element to the resolved container rect only. For openerless / container-less consumers (e.g. `FzDropdown`) the container resolves to `document.body`, whose rect can be wider than — or extend below — the visible viewport on narrow/mobile screens. A dropdown opened from a control near the right edge (such as a per-row kebab menu in a table) could therefore render overflowing off the right edge or overlapping adjacent menus.
10
+
11
+ Boundary correction now clamps against the intersection of the container and the viewport (`window.innerWidth`/`innerHeight`, mirroring the auto-positioning util) and keeps an 8px safety margin: if the element would overflow the right edge it is shifted left so its right edge stays on screen, the left edge is clamped to the margin, and the same is applied vertically. Behaviour is unchanged when there is enough room.
12
+
13
+ ## 1.1.0
14
+
15
+ ### Minor Changes
16
+
17
+ - 1c2baef: layout page-templates extraction — Phase 0 (breakpoint groundwork).
18
+ - `@fiscozen/composables`: `useBreakpoints()` gains a reactive `current()` accessor that returns the name of the largest breakpoint whose `min-width` is currently matched (descending priority, inclusive `min-width` for boundary-parity with a `>=` check; order-independent).
19
+ - `@fiscozen/layout`: `FzLayout` now resolves its active breakpoint through `useBreakpoints().current()` instead of a bespoke `window.resize` listener, and gains an opt-out `disablePadding` prop. Padding stays on by default (`p-12`), so existing consumers render identically.
20
+
21
+ ### Patch Changes
22
+
23
+ - Updated dependencies [1c2baef]
24
+ - @fiscozen/style@0.4.0
25
+
3
26
  ## 1.0.4
4
27
 
5
28
  ### Patch Changes
@@ -327,21 +327,25 @@ var C = (e, t) => {
327
327
  y: 0
328
328
  }
329
329
  };
330
- }, R = (e, t, n, r) => {
331
- let i = { ...e }, a = { ...r };
332
- if (e.x < n.left && (i.x = n.left, a.x = 0), e.x + t.width > n.right) {
333
- let e = n.right - t.width;
334
- e > 0 && (i.x = e), a.x = 0;
335
- }
336
- if (e.y < n.top && (i.y = n.top, a.y = 0), e.y + t.height > n.bottom) {
337
- let e = n.bottom - t.height;
338
- e > 0 && (i.y = e), a.y = 0;
339
- }
340
- return {
341
- position: i,
342
- transform: a
330
+ }, R = 8, z = () => ({
331
+ left: 0,
332
+ top: 0,
333
+ right: window.innerWidth,
334
+ bottom: window.innerHeight
335
+ }), B = (e, t) => ({
336
+ left: Math.max(e.left, t.left),
337
+ right: Math.min(e.right, t.right),
338
+ top: Math.max(e.top, t.top),
339
+ bottom: Math.min(e.bottom, t.bottom)
340
+ }), V = (e, t, n, r, i = z(), a = R) => {
341
+ let o = { ...e }, s = { ...r }, c = B(n, i), l = c.left + a, u = Math.max(l, c.right - a - t.width);
342
+ o.x > u && (o.x = u, s.x = 0), o.x < l && (o.x = l, s.x = 0);
343
+ let d = c.top + a, f = Math.max(d, c.bottom - a - t.height);
344
+ return o.y > f && (o.y = f, s.y = 0), o.y < d && (o.y = d, s.y = 0), {
345
+ position: o,
346
+ transform: s
343
347
  };
344
- }, z = (e, t, n, r, i) => {
348
+ }, H = (e, t, n, r, i) => {
345
349
  let a = i ? null : t;
346
350
  switch (e) {
347
351
  case "auto": return k(a, n, r);
@@ -352,7 +356,7 @@ var C = (e, t) => {
352
356
  case "auto-vertical-end": return k(a, n, r, "end", !0);
353
357
  default: return "bottom-start";
354
358
  }
355
- }, B = (e) => e.startsWith("auto"), V = (e) => {
359
+ }, ee = (e) => e.startsWith("auto"), U = (e) => {
356
360
  let t = m("auto"), n = m(), r = m(), i = m(), a = m(), o = p({ position: {
357
361
  x: 0,
358
362
  y: 0
@@ -392,8 +396,8 @@ var C = (e, t) => {
392
396
  s.element.style.display = "none";
393
397
  return;
394
398
  }
395
- l.value.observe(s.element), l.value.observe(s.container), B(n.value) && s.opener && (n.value = z(n.value, s.container, s.element, s.opener, e.useViewport?.value ?? !1));
396
- let p = M(window.getComputedStyle(s.element)), m = s.opener && d.opener ? F(n.value, d.opener, p) : L(n.value, d.container, d.element), h = R(A(d.element, m.position, m.transform.x, m.transform.y), d.element, d.container, m.transform);
399
+ l.value.observe(s.element), l.value.observe(s.container), ee(n.value) && s.opener && (n.value = H(n.value, s.container, s.element, s.opener, e.useViewport?.value ?? !1));
400
+ let p = M(window.getComputedStyle(s.element)), m = s.opener && d.opener ? F(n.value, d.opener, p) : L(n.value, d.container, d.element), h = V(A(d.element, m.position, m.transform.x, m.transform.y), d.element, d.container, m.transform);
397
401
  o.position.x = h.position.x, o.position.y = h.position.y, Object.assign(s.element.style, {
398
402
  top: `${o.position.y}px`,
399
403
  left: `${o.position.x}px`,
@@ -409,7 +413,7 @@ var C = (e, t) => {
409
413
  };
410
414
  //#endregion
411
415
  //#region src/composables/useMediaQuery.ts
412
- function H(e) {
416
+ function W(e) {
413
417
  let n = window.matchMedia(e), r = m(n.matches);
414
418
  function i(e) {
415
419
  r.value = e.matches;
@@ -422,22 +426,36 @@ function H(e) {
422
426
  }
423
427
  //#endregion
424
428
  //#region src/composables/useBreakpoints.ts
425
- function U(e) {
429
+ function te(e) {
426
430
  return {
427
431
  isGreater(t) {
428
- return H(`(min-width: ${e[t]})`);
432
+ return W(`(min-width: ${e[t]})`);
429
433
  },
430
434
  isSmaller(t) {
431
- return H(`(max-width: ${e[t]})`);
435
+ return W(`(max-width: ${e[t]})`);
432
436
  },
433
437
  isInBetween(t, n) {
434
- return H(`(min-width: ${e[t]}) and (max-width: ${e[n]})`);
438
+ return W(`(min-width: ${e[t]}) and (max-width: ${e[n]})`);
439
+ },
440
+ current() {
441
+ let n = Object.entries(e).map(([e, t]) => ({
442
+ name: e,
443
+ value: parseInt(t, 10)
444
+ })).sort((e, t) => e.value - t.value), r = n.map(({ name: e, value: t }) => ({
445
+ name: e,
446
+ matches: W(`(min-width: ${t}px)`)
447
+ }));
448
+ return t(() => {
449
+ let e = n[0].name;
450
+ for (let { name: t, matches: n } of r) n.value && (e = t);
451
+ return e;
452
+ });
435
453
  }
436
454
  };
437
455
  }
438
456
  //#endregion
439
457
  //#region src/composables/useClickOutside.ts
440
- function W(e, t, n) {
458
+ function G(e, t, n) {
441
459
  if (!e) throw Error("A target component has to be provided.");
442
460
  if (!t) throw Error("A callback has to be provided.");
443
461
  let r = (n) => {
@@ -457,7 +475,7 @@ function W(e, t, n) {
457
475
  }
458
476
  //#endregion
459
477
  //#region src/composables/useKeyDown.ts
460
- function G(e, t) {
478
+ function K(e, t) {
461
479
  if (!e) throw Error("A target component has to be provided.");
462
480
  if (!t || typeof t != "function") throw Error("A callback has to be provided.");
463
481
  let n = (e) => {
@@ -471,7 +489,7 @@ function G(e, t) {
471
489
  }
472
490
  //#endregion
473
491
  //#region src/composables/useKeyUp.ts
474
- function K(e, t) {
492
+ function q(e, t) {
475
493
  if (!e || typeof e != "function") throw Error("A callback has to be provided.");
476
494
  let n = (t) => {
477
495
  e(t);
@@ -492,10 +510,10 @@ function K(e, t) {
492
510
  }
493
511
  //#endregion
494
512
  //#region src/composables/useCurrency.ts
495
- var q = (e) => ({
513
+ var J = (e) => ({
496
514
  format: w,
497
515
  parse: T
498
- }), J = {
516
+ }), Y = {
499
517
  global: {
500
518
  blue: {
501
519
  50: {
@@ -1074,6 +1092,10 @@ var q = (e) => ({
1074
1092
  value: "1024px",
1075
1093
  type: "sizing"
1076
1094
  },
1095
+ desktop: {
1096
+ value: "1200px",
1097
+ type: "sizing"
1098
+ },
1077
1099
  xl: {
1078
1100
  value: "1280px",
1079
1101
  type: "sizing"
@@ -2014,7 +2036,7 @@ var q = (e) => ({
2014
2036
  },
2015
2037
  $themes: [],
2016
2038
  $metadata: { tokenSetOrder: ["global", "alias"] }
2017
- }, Y = {
2039
+ }, X = {
2018
2040
  $schema: "http://json-schema.org/draft-07/schema#",
2019
2041
  description: "Lista dei colori da includere nella safelist di Tailwind. Per aggiungere un nuovo colore, aggiungi il suo nome qui e rigenera il build con 'pnpm run build'.",
2020
2042
  safeColorNames: [
@@ -2026,7 +2048,7 @@ var q = (e) => ({
2026
2048
  "grey",
2027
2049
  "core"
2028
2050
  ]
2029
- }, X = {
2051
+ }, Z = {
2030
2052
  $schema: "http://json-schema.org/draft-07/schema#",
2031
2053
  description: "Lista dei colori semantici da includere nella safelist di Tailwind. Per aggiungere un nuovo colore semantico, aggiungi il suo nome qui e rigenera il build con 'pnpm run build'.",
2032
2054
  semanticColorNames: [
@@ -2035,16 +2057,16 @@ var q = (e) => ({
2035
2057
  "success",
2036
2058
  "info"
2037
2059
  ]
2038
- }, Z = Y.safeColorNames, ee = X.semanticColorNames, Q = {};
2039
- Z.forEach((e) => {
2040
- let t = J.global[e];
2060
+ }, ne = X.safeColorNames, re = Z.semanticColorNames, Q = {};
2061
+ ne.forEach((e) => {
2062
+ let t = Y.global[e];
2041
2063
  t && Object.keys(t).forEach((n) => {
2042
2064
  let r = t[n]?.value;
2043
2065
  r && (Q[e] || (Q[e] = {}), Q[e][n] = r);
2044
2066
  });
2045
2067
  });
2046
- var $ = J.global.semantic;
2047
- $ && ee.forEach((e) => {
2068
+ var $ = Y.global.semantic;
2069
+ $ && re.forEach((e) => {
2048
2070
  let t = $[e];
2049
2071
  t && typeof t == "object" && Object.keys(t).forEach((n) => {
2050
2072
  let r = t[n]?.value;
@@ -2056,7 +2078,7 @@ $ && ee.forEach((e) => {
2056
2078
  });
2057
2079
  //#endregion
2058
2080
  //#region ../style/src/constants.ts
2059
- var te = Object.entries(J.global.breakpoint).reduce((e, [t, n]) => (e[t] = n.value, e), {}), ne = /* @__PURE__ */ o({
2081
+ var ie = Object.entries(Y.global.breakpoint).reduce((e, [t, n]) => (e[t] = n.value, e), {}), ae = /* @__PURE__ */ o({
2060
2082
  __name: "FzFloating",
2061
2083
  props: {
2062
2084
  isOpen: {
@@ -2077,7 +2099,7 @@ var te = Object.entries(J.global.breakpoint).reduce((e, [t, n]) => (e[t] = n.val
2077
2099
  },
2078
2100
  emits: ["fzfloating:setPosition"],
2079
2101
  setup(o, { expose: s, emit: d }) {
2080
- let p = o, C = d, w = m(null), T = m(null), E = y(), D = H(`(max-width: ${te.xs})`), O = !1, k = !1, A = null, j = null, M = {
2102
+ let p = o, C = d, w = m(null), T = m(null), E = y(), D = W(`(max-width: ${ie.xs})`), O = !1, k = !1, A = null, j = null, M = {
2081
2103
  position: p.position,
2082
2104
  element: { domRef: w },
2083
2105
  container: { domRef: g(p.container || document.body) },
@@ -2088,7 +2110,7 @@ var te = Object.entries(J.global.breakpoint).reduce((e, [t, n]) => (e[t] = n.val
2088
2110
  }
2089
2111
  }, N = _(M);
2090
2112
  E.opener && (M.opener = { domRef: T });
2091
- let P = V(N), F = () => {
2113
+ let P = U(N), F = () => {
2092
2114
  O || !k || (O = !0, requestAnimationFrame(() => {
2093
2115
  k && p.isOpen && P.setPosition(), O = !1;
2094
2116
  }));
@@ -2122,9 +2144,9 @@ var te = Object.entries(J.global.breakpoint).reduce((e, [t, n]) => (e[t] = n.val
2122
2144
  }), l(() => {
2123
2145
  k = !1, z();
2124
2146
  });
2125
- let B = (e) => e.startsWith("bottom") ? "mt-4" : e.startsWith("top") ? "mb-4" : e.startsWith("left") ? "mr-4" : e.startsWith("right") ? "ml-4" : "mt-4", U = t(() => B(P.actualPosition?.value ?? p.position)), W = t(() => p.overrideContentClass ? p.contentClass : [
2147
+ let B = (e) => e.startsWith("bottom") ? "mt-4" : e.startsWith("top") ? "mb-4" : e.startsWith("left") ? "mr-4" : e.startsWith("right") ? "ml-4" : "mt-4", V = t(() => B(P.actualPosition?.value ?? p.position)), H = t(() => p.overrideContentClass ? p.contentClass : [
2126
2148
  "bg-core-white fixed",
2127
- U.value,
2149
+ V.value,
2128
2150
  p.contentClass
2129
2151
  ]);
2130
2152
  return s({ setPosition: P.setPosition }), (t, s) => (f(), i("div", null, [
@@ -2142,7 +2164,7 @@ var te = Object.entries(J.global.breakpoint).reduce((e, [t, n]) => (e[t] = n.val
2142
2164
  key: 0,
2143
2165
  ref_key: "content",
2144
2166
  ref: w,
2145
- class: c(["fz__floating__content w-full sm:w-auto", W.value])
2167
+ class: c(["fz__floating__content w-full sm:w-auto", H.value])
2146
2168
  }, [h(t.$slots, "default", {
2147
2169
  isOpen: o.isOpen,
2148
2170
  floating: v(P)
@@ -2153,7 +2175,7 @@ var te = Object.entries(J.global.breakpoint).reduce((e, [t, n]) => (e[t] = n.val
2153
2175
  }, [S(a("div", {
2154
2176
  ref_key: "content",
2155
2177
  ref: w,
2156
- class: c(["fz__floating__content", W.value])
2178
+ class: c(["fz__floating__content", H.value])
2157
2179
  }, [h(t.$slots, "default", {
2158
2180
  isOpen: o.isOpen,
2159
2181
  floating: v(P)
@@ -2162,4 +2184,4 @@ var te = Object.entries(J.global.breakpoint).reduce((e, [t, n]) => (e[t] = n.val
2162
2184
  }
2163
2185
  });
2164
2186
  //#endregion
2165
- export { ne as FzFloating, A as calcRealPos, D as clamp, w as format, k as getHighestAvailableSpacePos, T as parse, E as roundTo, C as truncateDecimals, U as useBreakpoints, W as useClickOutside, q as useCurrency, V as useFloating, G as useKeyDown, K as useKeyUp, H as useMediaQuery };
2187
+ export { ae as FzFloating, A as calcRealPos, D as clamp, w as format, k as getHighestAvailableSpacePos, T as parse, E as roundTo, C as truncateDecimals, te as useBreakpoints, G as useClickOutside, J as useCurrency, U as useFloating, K as useKeyDown, q as useKeyUp, W as useMediaQuery };
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vue`)):typeof define==`function`&&define.amd?define([`exports`,`vue`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.FzComposables={},e.Vue))})(this,function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var n=(e,t)=>{if(!isFinite(e)||t<0)return e;if(t===0)return Math.trunc(e);let n=String(e);if(n.includes(`e`)||n.includes(`E`)){let n=10**t;return Math.trunc(e*n)/n}let r=n.indexOf(`.`);return r===-1||n.length-r-1<=t?e:Number(n.slice(0,r+t+1))},r=(e,{minimumFractionDigits:t=0,maximumFractionDigits:r=2,roundDecimals:i=!0,useGrouping:a=!0}={})=>e==null||isNaN(e)||!isFinite(e)?``:(i?e:n(e,r)).toLocaleString(`it-IT`,{minimumFractionDigits:t,maximumFractionDigits:r,useGrouping:a}),i=e=>{if(!e||typeof e!=`string`)return NaN;let t=e.trim();return t.includes(`,`)&&(t=t.replace(/\./g,``),t=t.replace(`,`,`.`)),parseFloat(t)},a=(e,t)=>{let n=t,r=t%e,i=t>=0?e:-e;return r!==0&&(n=Math.abs(r)>=e/2?t+i-r:t-r),n},o=(e,t,n)=>Math.max(e,Math.min(t,n)),s=new DOMRect(0,0,window.innerWidth,window.innerHeight),c=(e,t,n,r,i)=>{let a=i?`bottom`:`right`,o=i?`bottom-start`:`right-start`;s.width=window.innerWidth,s.height=window.innerHeight,s.x=0,s.y=0;let c=e?e.getBoundingClientRect():s,l=t.getBoundingClientRect(),u=n.getBoundingClientRect(),d=(u.left-c.left-l.width)/c.width,f=(c.right-u.right-l.width)/c.width,p=(u.top-c.top-l.height)/c.height,m=(c.bottom-u.bottom-l.height)/c.height,h=[{key:`right`,space:f},{key:`top`,space:p},{key:`bottom`,space:m},{key:`left`,space:d}].sort((e,t)=>t.space-e.space);if(i&&(h=h.filter(e=>e.key===`top`||e.key===`bottom`)),a=h[0].key,!r){let e=(l.height-u.height)/2;switch(a){case`right`:case`left`:c.top>u.top-e&&(r=`end`),c.bottom<u.top-e&&(r=`start`);break;default:break}}return o=r?`${a}-${r}`:a,o},l=(e,t,n,r)=>({x:t.x+e.width*n/100,y:t.y+e.height*r/100}),u=e=>typeof e==`string`?document.querySelector(e):e,d=e=>({left:parseFloat(e.marginLeft),right:parseFloat(e.marginRight),top:parseFloat(e.marginTop),bottom:parseFloat(e.marginBottom)}),f=e=>e!==null&&(e.width>0||e.height>0),p={bottom:(e,t)=>({position:{x:e.left-t.left+e.width/2,y:e.bottom},transform:{x:-50,y:0}}),"bottom-start":(e,t)=>({position:{x:e.left-t.left,y:e.bottom},transform:{x:0,y:0}}),"bottom-end":(e,t)=>({position:{x:e.right+t.right,y:e.bottom},transform:{x:-100,y:0}}),top:(e,t)=>({position:{x:e.left-t.left+e.width/2,y:e.top-t.bottom},transform:{x:-50,y:-100}}),"top-start":(e,t)=>({position:{x:e.left-t.left,y:e.top-t.bottom},transform:{x:0,y:-100}}),"top-end":(e,t)=>({position:{x:e.right+t.right,y:e.top-t.bottom},transform:{x:-100,y:-100}}),left:(e,t)=>({position:{x:e.left-t.right,y:e.top-t.top+e.height/2},transform:{x:-100,y:-50}}),"left-start":(e,t)=>({position:{x:e.left-t.right,y:e.top-t.top},transform:{x:-100,y:0}}),"left-end":(e,t)=>({position:{x:e.left-t.right,y:e.bottom+t.bottom},transform:{x:-100,y:-100}}),right:(e,t)=>({position:{x:e.right+t.left,y:e.top-t.top+e.height/2},transform:{x:0,y:-50}}),"right-start":(e,t)=>({position:{x:e.right+t.left,y:e.top-t.top},transform:{x:0,y:0}}),"right-end":(e,t)=>({position:{x:e.right+t.left,y:e.bottom+t.bottom},transform:{x:0,y:-100}})},m=(e,t,n)=>{let r=p[e];return r?r(t,n):{position:{x:0,y:0},transform:{x:0,y:0}}},h={bottom:(e,t)=>({position:{x:e.left+e.width/2,y:e.bottom-t.height},transform:{x:-50,y:0}}),"bottom-start":(e,t)=>({position:{x:e.left,y:e.bottom-t.height},transform:{x:0,y:0}}),"bottom-end":(e,t)=>({position:{x:e.right-t.width,y:e.bottom-t.height},transform:{x:0,y:0}}),top:e=>({position:{x:e.left+e.width/2,y:e.top},transform:{x:-50,y:0}}),"top-start":e=>({position:{x:e.left,y:e.top},transform:{x:0,y:0}}),"top-end":(e,t)=>({position:{x:e.right-t.width,y:e.top},transform:{x:0,y:0}}),left:(e,t)=>({position:{x:e.left,y:e.top+(e.height-t.height)/2},transform:{x:0,y:0}}),"left-start":e=>({position:{x:e.left,y:e.top},transform:{x:0,y:0}}),"left-end":(e,t)=>({position:{x:e.left,y:e.bottom-t.height},transform:{x:0,y:0}}),right:(e,t)=>({position:{x:e.right-t.width,y:e.top+(e.height-t.height)/2},transform:{x:0,y:0}}),"right-start":(e,t)=>({position:{x:e.right-t.width,y:e.top},transform:{x:0,y:0}}),"right-end":(e,t)=>({position:{x:e.right-t.width,y:e.bottom-t.height},transform:{x:0,y:0}})},g=(e,t,n)=>{let r=h[e];return r?r(t,n):{position:{x:0,y:0},transform:{x:0,y:0}}},_=(e,t,n,r)=>{let i={...e},a={...r};if(e.x<n.left&&(i.x=n.left,a.x=0),e.x+t.width>n.right){let e=n.right-t.width;e>0&&(i.x=e),a.x=0}if(e.y<n.top&&(i.y=n.top,a.y=0),e.y+t.height>n.bottom){let e=n.bottom-t.height;e>0&&(i.y=e),a.y=0}return{position:i,transform:a}},v=(e,t,n,r,i)=>{let a=i?null:t;switch(e){case`auto`:return c(a,n,r);case`auto-vertical`:return c(a,n,r,void 0,!0);case`auto-start`:return c(a,n,r,`start`);case`auto-vertical-start`:return c(a,n,r,`start`,!0);case`auto-end`:return c(a,n,r,`end`);case`auto-vertical-end`:return c(a,n,r,`end`,!0);default:return`bottom-start`}},y=e=>e.startsWith(`auto`),b=e=>{let n=(0,t.ref)(`auto`),r=(0,t.ref)(),i=(0,t.ref)(),a=(0,t.ref)(),o=(0,t.ref)(),s=(0,t.reactive)({position:{x:0,y:0}}),c={root:null,rootMargin:`0px`,threshold:1,...e.element.value.intersectionOptions},p=(0,t.ref)(new IntersectionObserver(()=>{},c)),h=()=>{let t=u(e.element.value.domRef.value);return t?{element:t,container:e.container?.value?u(e.container.value.domRef.value)??document.body:document.body,opener:e.opener?.value?u(e.opener.value.domRef.value):null}:null},b=e=>({element:e.element.getBoundingClientRect(),container:e.container.getBoundingClientRect(),opener:e.opener?.getBoundingClientRect()??null});return(0,t.onUnmounted)(()=>{p.value.disconnect()}),{float:s,rect:i,setPosition:(c=!1)=>(0,t.nextTick)(()=>{r.value=e.position?.value??`auto`;let t=h();if(!t)return;Object.assign(t.element.style,{position:`fixed`,top:`0px`,left:`0px`});let u=b(t);if(i.value=u.element,a.value=u.opener??void 0,o.value=u.container,t.opener&&!f(u.opener)){t.element.style.display=`none`;return}p.value.observe(t.element),p.value.observe(t.container),y(r.value)&&t.opener&&(r.value=v(r.value,t.container,t.element,t.opener,e.useViewport?.value??!1));let x=d(window.getComputedStyle(t.element)),S=t.opener&&u.opener?m(r.value,u.opener,x):g(r.value,u.container,u.element),C=_(l(u.element,S.position,S.transform.x,S.transform.y),u.element,u.container,S.transform);s.position.x=C.position.x,s.position.y=C.position.y,Object.assign(t.element.style,{top:`${s.position.y}px`,left:`${s.position.x}px`,position:`fixed`,display:`flex`}),i.value=t.element.getBoundingClientRect(),e.callback?.value&&!c&&e.callback.value(i,a,o,n,r)}),position:n,actualPosition:r,openerRect:a,containerRect:o}};function x(e){let n=window.matchMedia(e),r=(0,t.ref)(n.matches);function i(e){r.value=e.matches}return(0,t.onMounted)(()=>{n.addEventListener(`change`,i)}),(0,t.onUnmounted)(()=>{n.removeEventListener(`change`,i)}),(0,t.computed)(()=>r.value)}function S(e){return{isGreater(t){return x(`(min-width: ${e[t]})`)},isSmaller(t){return x(`(max-width: ${e[t]})`)},isInBetween(t,n){return x(`(min-width: ${e[t]}) and (max-width: ${e[n]})`)}}}function C(e,n,r){if(!e)throw Error(`A target component has to be provided.`);if(!n)throw Error(`A callback has to be provided.`);let i=t=>{!e.value||t.target===e.value||t.composedPath().includes(e.value)||typeof n==`function`&&n()};r&&(0,t.watch)(r,(e,t)=>{t&&t.removeEventListener(`click`,i),e?.addEventListener(`click`,i)}),(0,t.onMounted)(()=>{r||document.addEventListener(`click`,i)}),(0,t.onBeforeUnmount)(()=>{if(r){r.value?.removeEventListener(`click`,i);return}document.removeEventListener(`click`,i)})}function w(e,n){if(!e)throw Error(`A target component has to be provided.`);if(!n||typeof n!=`function`)throw Error(`A callback has to be provided.`);let r=e=>{n(e)};(0,t.onMounted)(()=>{e.value.addEventListener(`keydown`,r)}),(0,t.onBeforeUnmount)(()=>{e.value.removeEventListener(`keydown`,r)})}function T(e,n){if(!e||typeof e!=`function`)throw Error(`A callback has to be provided.`);let r=t=>{e(t)};(0,t.onMounted)(()=>{if(!n){document.addEventListener(`keyup`,r);return}n.value.addEventListener(`keyup`,r)}),(0,t.onBeforeUnmount)(()=>{if(!n){document.removeEventListener(`keyup`,r);return}n.value.removeEventListener(`keyup`,r)})}var E=e=>({format:r,parse:i}),D={global:{blue:{50:{value:`#eff1ff`,type:`color`},100:{value:`#dee2ff`,type:`color`},200:{value:`#bdc5ff`,type:`color`},300:{value:`#9ca8ff`,type:`color`},400:{value:`#7b8bff`,type:`color`},500:{value:`#5a6eff`,type:`color`},600:{value:`#4858cc`,type:`color`},700:{value:`#364299`,type:`color`},800:{value:`#242c66`,type:`color`},900:{value:`#1b214c`,type:`color`}},purple:{50:{value:`#f8f4ff`,type:`color`},100:{value:`#f0e9ff`,type:`color`},200:{value:`#e1d3ff`,type:`color`},300:{value:`#d2bdff`,type:`color`},400:{value:`#c3a7ff`,type:`color`},500:{value:`#b491ff`,type:`color`},600:{value:`#9074cc`,type:`color`},700:{value:`#6c5799`,type:`color`},800:{value:`#483a66`,type:`color`},900:{value:`#241d33`,type:`color`}},orange:{50:{value:`#fff2ef`,type:`color`},100:{value:`#ffe4de`,type:`color`},200:{value:`#ffc9bd`,type:`color`},300:{value:`#ffae9c`,type:`color`},400:{value:`#ff937b`,type:`color`},500:{value:`#ff785a`,type:`color`},600:{value:`#cc6048`,type:`color`},700:{value:`#994836`,type:`color`},800:{value:`#663024`,type:`color`},900:{value:`#331812`,type:`color`}},pink:{50:{value:`#fff5f5`,type:`color`},100:{value:`#ffe0e0`,type:`color`},200:{value:`#ffcbcb`,type:`color`},300:{value:`#ffc0c0`,type:`color`},400:{value:`#ffabab`,type:`color`},500:{value:`#ff9696`,type:`color`},600:{value:`#cc7878`,type:`color`},700:{value:`#995a5a`,type:`color`},800:{value:`#663c3c`,type:`color`},900:{value:`#331e1e`,type:`color`}},yellow:{50:{value:`#fffbf4`,type:`color`},100:{value:`#fff3de`,type:`color`},200:{value:`#ffebc8`,type:`color`},300:{value:`#ffe7bd`,type:`color`},400:{value:`#ffdfa7`,type:`color`},500:{value:`#ffd791`,type:`color`},600:{value:`#ccac74`,type:`color`},700:{value:`#998157`,type:`color`},800:{value:`#806c49`,type:`color`},900:{value:`#4c402b`,type:`color`}},semantic:{error:{50:{value:`#fef3f3`,type:`color`},100:{value:`#f8baba`,type:`color`},200:{value:`#f04242`,type:`color`},300:{value:`#aa2f2f`,type:`color`}},warning:{50:{value:`#fff8f3`,type:`color`},100:{value:`#ffdabd`,type:`color`},200:{value:`#ffae4f`,type:`color`},300:{value:`#b47b38`,type:`color`}},success:{50:{value:`#f2f8f6`,type:`color`},100:{value:`#b5d8ce`,type:`color`},200:{value:`#0fa88c`,type:`color`},300:{value:`#0b7763`,type:`color`}},info:{50:{value:`#f3f7ff`,type:`color`},100:{value:`#b4c8e1`,type:`color`},200:{value:`#4e9fff`,type:`color`},300:{value:`#3770b4`,type:`color`}}},background:{"white-smoke":{value:`#f7f6f3`,type:`color`},seashell:{value:`#f8ece7`,type:`color`},"pale-purple":{value:`#f2e6ff`,type:`color`},"alice-blue":{value:`#ecf2fc`,type:`color`}},grey:{100:{value:`#e9edf0`,type:`color`},200:{value:`#d1dde6`,type:`color`},300:{value:`#9da9b2`,type:`color`},400:{value:`#6e777e`,type:`color`},500:{value:`#596167`,type:`color`}},core:{white:{value:`#ffffff`,type:`color`},black:{value:`#2c282f`,type:`color`}},"font-sans":{"sharp-grotesk":{value:`"Sharp Grotesk", sans-serif`,type:`fontFamilies`},inter:{value:`"Inter", sans-serif`,type:`fontFamilies`}},font:{light:{value:`300`,type:`fontWeights`},normal:{value:`400`,type:`fontWeights`},medium:{value:`500`,type:`fontWeights`}},spacing:{0:{value:`0px`,type:`spacing`},1:{value:`1px`,type:`spacing`},2:{value:`2px`,type:`spacing`},4:{value:`4px`,type:`spacing`},6:{value:`6px`,type:`spacing`},8:{value:`8px`,type:`spacing`},10:{value:`10px`,type:`spacing`},12:{value:`12px`,type:`spacing`},14:{value:`14px`,type:`spacing`},16:{value:`16px`,type:`spacing`},20:{value:`20px`,type:`spacing`},24:{value:`24px`,type:`spacing`},28:{value:`28px`,type:`spacing`},32:{value:`32px`,type:`spacing`},36:{value:`36px`,type:`spacing`},40:{value:`40px`,type:`spacing`},44:{value:`44px`,type:`spacing`},48:{value:`48px`,type:`spacing`},56:{value:`56px`,type:`spacing`},64:{value:`64px`,type:`spacing`},80:{value:`80px`,type:`spacing`},96:{value:`96px`,type:`spacing`},112:{value:`112px`,type:`spacing`},128:{value:`128px`,type:`spacing`},144:{value:`144px`,type:`spacing`},160:{value:`160px`,type:`spacing`},176:{value:`176px`,type:`spacing`},192:{value:`192px`,type:`spacing`},208:{value:`208px`,type:`spacing`},224:{value:`224px`,type:`spacing`},240:{value:`240px`,type:`spacing`},256:{value:`256px`,type:`spacing`},288:{value:`288px`,type:`spacing`},320:{value:`320px`,type:`spacing`},384:{value:`384px`,type:`spacing`}},border:{0:{value:`0px`,type:`borderWidth`},1:{value:`1px`,type:`borderWidth`},2:{value:`2px`,type:`borderWidth`},4:{value:`4px`,type:`borderWidth`},8:{value:`8px`,type:`borderWidth`}},rounded:{none:{value:`0px`,type:`borderRadius`},sm:{value:`2px`,type:`borderRadius`},base:{value:`4px`,type:`borderRadius`},md:{value:`6px`,type:`borderRadius`},lg:{value:`8px`,type:`borderRadius`},xl:{value:`12px`,type:`borderRadius`},"2xl":{value:`16px`,type:`borderRadius`},"3xl":{value:`24px`,type:`borderRadius`},full:{value:`9999px`,type:`borderRadius`}},breakpoint:{xs:{value:`376px`,type:`sizing`},sm:{value:`640px`,type:`sizing`},md:{value:`768px`,type:`sizing`},lg:{value:`1024px`,type:`sizing`},xl:{value:`1280px`,type:`sizing`},"2xl":{value:`1440px`,type:`sizing`},"3xl":{value:`1536px`,type:`sizing`}},shadow:{none:{value:{color:`#000000`,type:`dropShadow`,x:`0`,y:`0`,blur:`0`,spread:`0`},type:`boxShadow`},sm:{value:{color:`#0000000d`,type:`dropShadow`,x:`0`,y:`1`,blur:`2`,spread:`0`},type:`boxShadow`},base:{value:[{color:`#0000000f`,type:`dropShadow`,x:`0`,y:`1`,blur:`2`,spread:`0`},{color:`#0000001a`,type:`dropShadow`,x:`0`,y:`1`,blur:`3`,spread:`0`}],type:`boxShadow`},md:{value:[{color:`#0000000f`,type:`dropShadow`,x:`0`,y:`2`,blur:`4`,spread:`-1`},{color:`#0000001a`,type:`dropShadow`,x:`0`,y:`4`,blur:`6`,spread:`-1`}],type:`boxShadow`},lg:{value:[{color:`#0000000d`,type:`dropShadow`,x:`0`,y:`4`,blur:`6`,spread:`-2`},{color:`#0000001a`,type:`dropShadow`,x:`0`,y:`10`,blur:`15`,spread:`-3`}],type:`boxShadow`},xl:{value:[{color:`#0000000a`,type:`dropShadow`,x:`0`,y:`10`,blur:`10`,spread:`-5`},{color:`#0000001a`,type:`dropShadow`,x:`0`,y:`20`,blur:`25`,spread:`-5`}],type:`boxShadow`},"2xl":{value:{color:`#00000040`,type:`dropShadow`,x:`0`,y:`25`,blur:`50`,spread:`-12`},type:`boxShadow`},inner:{value:{color:`#0000000f`,type:`innerShadow`,x:`0`,y:`2`,blur:`4`,spread:`0`},type:`boxShadow`}},underline:{value:`underline`,type:`textDecoration`},text:{xs:{value:`12px`,type:`fontSizes`},sm:{value:`14px`,type:`fontSizes`},base:{value:`16px`,type:`fontSizes`},lg:{value:`18px`,type:`fontSizes`},xl:{value:`20px`,type:`fontSizes`},"2xl":{value:`24px`,type:`fontSizes`},"3xl":{value:`30px`,type:`fontSizes`},"4xl":{value:`36px`,type:`fontSizes`},"5xl":{value:`48px`,type:`fontSizes`},"6xl":{value:`60px`,type:`fontSizes`},"7xl":{value:`72px`,type:`fontSizes`},"8xl":{value:`96px`,type:`fontSizes`},"9xl":{value:`128px`,type:`fontSizes`}},leading:{xs:{value:`16px`,type:`lineHeights`},sm:{value:`18px`,type:`lineHeights`},base:{value:`20px`,type:`lineHeights`},lg:{value:`24px`,type:`lineHeights`},xl:{value:`28px`,type:`lineHeights`},"2xl":{value:`32px`,type:`lineHeights`},"3xl":{value:`36px`,type:`lineHeights`},"4xl":{value:`40px`,type:`lineHeights`},"5xl":{value:`48px`,type:`lineHeights`},"6xl":{value:`60px`,type:`lineHeights`},"7xl":{value:`72px`,type:`lineHeights`},"8xl":{value:`96px`,type:`lineHeights`},"9xl":{value:`128px`,type:`lineHeights`}}},alias:{avatar:{initials:{"background-color":{value:`{core.black}`,type:`color`},color:{value:`{core.white}`,type:`color`},spacing:{value:`{spacing.32}`,type:`spacing`},"border-radius":{value:`{rounded.full}`,type:`borderRadius`},"font-family":{value:`{font-sans.inter}`,type:`fontFamilies`},"font-weight":{value:`{font.normal}`,type:`fontWeights`},"font-size":{value:`{text.sm}`,type:`fontSizes`},"line-height":{value:`{leading.sm}`,type:`lineHeights`}},image:{"border-radius":{value:`{rounded.full}`,type:`borderRadius`},sm:{value:`{spacing.16}`,type:`spacing`},md:{value:`{spacing.24}`,type:`spacing`},lg:{value:`{spacing.32}`,type:`spacing`},xl:{value:`{spacing.40}`,type:`spacing`}}},"nav-link":{spacing:{value:`{spacing.32}`,type:`spacing`},"border-radius":{value:`{rounded.base}`,type:`borderRadius`},"font-family":{value:`{font-sans.inter}`,type:`fontFamilies`},"font-weight":{value:`{font.medium}`,type:`fontWeights`},"line-height":{value:`{leading.sm}`,type:`lineHeights`},"font-size":{value:`{text.sm}`,type:`fontSizes`},"background-color":{default:{value:`none`,type:`color`},hover:{value:`{background.alice-blue}`,type:`color`},pressed:{value:`{background.alice-blue}`,type:`color`},focus:{value:`{background.alice-blue}`,type:`color`},disabled:{value:`none`,type:`color`}},color:{default:{value:`{grey.500}`,type:`color`},hover:{value:`{blue.500}`,type:`color`},pressed:{value:`{blue.500}`,type:`color`},focus:{value:`{blue.500}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},border:{default:{value:`none`,type:`color`},hover:{value:`none`,type:`color`},pressed:{value:`none`,type:`color`},focus:{value:`{blue.500}`,type:`color`},disabled:{value:`none`,type:`color`}},"border-width":{default:{value:`none`,type:`borderWidth`},hover:{value:`none`,type:`borderWidth`},pressed:{value:`none`,type:`borderWidth`},focus:{value:`{border.1}`,type:`borderWidth`},disabled:{value:`none`,type:`borderWidth`}},"box-shadow":{default:{value:`{shadow.none}`,type:`boxShadow`},hover:{value:`{shadow.none}`,type:`boxShadow`},pressed:{value:`{shadow.inner}`,type:`boxShadow`},focus:{value:`none`,type:`boxShadow`},disabled:{value:`none`,type:`boxShadow`}}},"icon-button":{button:{sm:{value:`{spacing.28}`,type:`spacing`},md:{value:`{spacing.32}`,type:`spacing`},lg:{value:`{spacing.40}`,type:`spacing`}},icon:{sm:{value:`{spacing.16}`,type:`spacing`},md:{value:`{spacing.20}`,type:`spacing`}},primary:{"background-color":{default:{value:`{blue.500}`,type:`color`},hover:{value:`{blue.600}`,type:`color`},pressed:{value:`{blue.600}`,type:`color`},focus:{value:`{blue.500}`,type:`color`},disabled:{value:`{blue.200}`,type:`color`}},color:{default:{value:`{core.white}`,type:`color`},hover:{value:`{core.white}`,type:`color`},pressed:{value:`{core.white}`,type:`color`},focus:{value:`{core.white}`,type:`color`},disabled:{value:`{core.white}`,type:`color`}},border:{default:{value:`none`,type:`color`},hover:{value:`none`,type:`color`},pressed:{value:`none`,type:`color`},focus:{value:`{blue.600}`,type:`color`},disabled:{value:`none`,type:`color`}},"border-width":{default:{value:`none`,type:`borderWidth`},hover:{value:`none`,type:`borderWidth`},pressed:{value:`none`,type:`borderWidth`},focus:{value:`{border.1}`,type:`borderWidth`},disabled:{value:`none`,type:`borderWidth`}}},secondary:{"background-color":{default:{value:`none`,type:`color`},hover:{value:`{grey.100}`,type:`color`},pressed:{value:`{grey.100}`,type:`color`},focus:{value:`none`,type:`color`},disabled:{value:`none`,type:`color`}},color:{default:{value:`{grey.500}`,type:`color`},hover:{value:`{grey.500}`,type:`color`},pressed:{value:`{grey.500}`,type:`color`},focus:{value:`{grey.500}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},border:{default:{value:`{grey.200}`,type:`color`},hover:{value:`{grey.200}`,type:`color`},pressed:{value:`{grey.200}`,type:`color`},focus:{value:`{blue.600}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},"border-width":{value:`{border.1}`,type:`borderWidth`}},notification:{"background-color":{default:{value:`none`,type:`color`},hover:{value:`{grey.100}`,type:`color`},pressed:{value:`{grey.100}`,type:`color`}},color:{default:{value:`{grey.500}`,type:`color`},hover:{value:`{grey.500}`,type:`color`},pressed:{value:`{grey.500}`,type:`color`},focus:{value:`{grey.500}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},border:{default:{value:`{grey.200}`,type:`color`},hover:{value:`{grey.200}`,type:`color`},pressed:{value:`{grey.200}`,type:`color`},focus:{value:`{grey.200}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},"border-width":{value:`{border.1}`,type:`borderWidth`}},"notification-badge":{"background-color":{default:{value:`{blue.500}`,type:`color`},hover:{value:`{blue.500}`,type:`color`},pressed:{value:`{blue.500}`,type:`color`},focus:{value:`{blue.500}`,type:`color`},disabled:{value:`{grey.200}`,type:`color`}},border:{default:{value:`{core.white}`,type:`color`},hover:{value:`{core.white}`,type:`color`},pressed:{value:`{core.white}`,type:`color`},focus:{value:`{core.white}`,type:`color`},disabled:{value:`{core.white}`,type:`color`}},sm:{value:`{spacing.6}`,type:`spacing`},md:{value:`{spacing.8}`,type:`spacing`},lg:{value:`{spacing.10}`,type:`spacing`},"border-width":{value:`{border.1}`,type:`borderWidth`}},invisible:{"background-color":{default:{value:`none`,type:`color`},hover:{value:`{grey.100}`,type:`color`},pressed:{value:`{grey.100}`,type:`color`},focus:{value:`none`,type:`color`},disabled:{value:`none`,type:`color`}},color:{default:{value:`{grey.500}`,type:`color`},hover:{value:`{grey.500}`,type:`color`},pressed:{value:`{grey.500}`,type:`color`},focus:{value:`{grey.500}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},border:{default:{value:`none`,type:`color`},hover:{value:`none`,type:`color`},pressed:{value:`none`,type:`color`},focus:{value:`{blue.600}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},"border-width":{default:{value:`none`,type:`borderWidth`},hover:{value:`none`,type:`borderWidth`},pressed:{value:`none`,type:`borderWidth`},focus:{value:`{border.1}`,type:`borderWidth`},disabled:{value:`{border.1}`,type:`borderWidth`}}},"border-radius":{value:`{rounded.base}`,type:`borderRadius`},"box-shadow":{default:{value:`{shadow.none}`,type:`boxShadow`},hover:{value:`{shadow.none}`,type:`boxShadow`},pressed:{value:`{shadow.inner}`,type:`boxShadow`},focus:{value:`none`,type:`boxShadow`},disabled:{value:`none`,type:`boxShadow`}}},breadcrumbs:{color:{"previous-page":{value:`{blue.500}`,type:`color`},divider:{value:`{grey.300}`,type:`color`},"current-page":{value:`{grey.500}`,type:`color`}},"font-family":{value:`{font-sans.inter}`,type:`fontFamilies`},"font-weight":{value:`{font.normal}`,type:`fontWeights`},"line-height":{value:`{leading.sm}`,type:`lineHeights`},"font-size":{value:`{text.sm}`,type:`fontSizes`}},"main-content":{sm:{value:`{spacing.32}`,type:`spacing`},base:{value:`{spacing.48}`,type:`spacing`},lg:{value:`{spacing.64}`,type:`spacing`}},"section-content":{none:{value:`{spacing.0}`,type:`spacing`},xs:{value:`{spacing.8}`,type:`spacing`},sm:{value:`{spacing.16}`,type:`spacing`},base:{value:`{spacing.24}`,type:`spacing`},lg:{value:`{spacing.32}`,type:`spacing`}}},$themes:[],$metadata:{tokenSetOrder:[`global`,`alias`]}},O={$schema:`http://json-schema.org/draft-07/schema#`,description:`Lista dei colori da includere nella safelist di Tailwind. Per aggiungere un nuovo colore, aggiungi il suo nome qui e rigenera il build con 'pnpm run build'.`,safeColorNames:[`blue`,`purple`,`orange`,`pink`,`yellow`,`grey`,`core`]},k={$schema:`http://json-schema.org/draft-07/schema#`,description:`Lista dei colori semantici da includere nella safelist di Tailwind. Per aggiungere un nuovo colore semantico, aggiungi il suo nome qui e rigenera il build con 'pnpm run build'.`,semanticColorNames:[`error`,`warning`,`success`,`info`]},A=O.safeColorNames,j=k.semanticColorNames,M={};A.forEach(e=>{let t=D.global[e];t&&Object.keys(t).forEach(n=>{let r=t[n]?.value;r&&(M[e]||(M[e]={}),M[e][n]=r)})});var N=D.global.semantic;N&&j.forEach(e=>{let t=N[e];t&&typeof t==`object`&&Object.keys(t).forEach(n=>{let r=t[n]?.value;if(r){let t=`semantic-${e}`;M[t]||(M[t]={}),M[t][n]=r}})});var P=Object.entries(D.global.breakpoint).reduce((e,[t,n])=>(e[t]=n.value,e),{});e.FzFloating=(0,t.defineComponent)({__name:`FzFloating`,props:{isOpen:{type:Boolean,default:!1},position:{default:`auto`},container:{},contentClass:{},openerClass:{},overrideContentClass:{type:Boolean},overrideOpener:{},teleport:{type:Boolean,default:!1},useViewport:{type:Boolean}},emits:[`fzfloating:setPosition`],setup(e,{expose:n,emit:r}){let i=e,a=r,o=(0,t.ref)(null),s=(0,t.ref)(null),c=(0,t.useSlots)(),l=x(`(max-width: ${P.xs})`),u=!1,d=!1,f=null,p=null,m={position:i.position,element:{domRef:o},container:{domRef:(0,t.toRef)(i.container||document.body)},opener:{domRef:(0,t.toRef)(null)},useViewport:i.useViewport,callback(...e){a(`fzfloating:setPosition`,...e)}},h=(0,t.toRefs)(m);c.opener&&(m.opener={domRef:s});let g=b(h),_=()=>{u||!d||(u=!0,requestAnimationFrame(()=>{d&&i.isOpen&&g.setPosition(),u=!1}))};(0,t.onMounted)(()=>{d=!0});let v=()=>{_()},y=()=>{_()},S=()=>{window.addEventListener(`scroll`,v,!0),window.addEventListener(`resize`,y),o.value&&!f&&(f=new ResizeObserver(()=>{_()}),f.observe(o.value)),s.value&&!p&&(p=new ResizeObserver(()=>{_()}),p.observe(s.value))},C=()=>{window.removeEventListener(`scroll`,v,!0),window.removeEventListener(`resize`,y),f&&=(f.disconnect(),null),p&&=(p.disconnect(),null)};(0,t.watch)(()=>i.position,()=>_()),(0,t.watch)(()=>i.isOpen,e=>{if(!e||!o.value||!d){C();return}S();let t=s.value?.getBoundingClientRect();o.value.style.position=`fixed`,o.value.style.top=`0px`,o.value.style.left=`0px`,o.value.style.transform=`none`,o.value.style.width=l.value?t?.width+`px`:`auto`,g.setPosition()}),(0,t.watch)(()=>i.overrideOpener,e=>{e&&h.opener&&h.opener.value&&(h.opener.value={domRef:e})}),(0,t.onBeforeUnmount)(()=>{d=!1,C()});let w=e=>e.startsWith(`bottom`)?`mt-4`:e.startsWith(`top`)?`mb-4`:e.startsWith(`left`)?`mr-4`:e.startsWith(`right`)?`ml-4`:`mt-4`,T=(0,t.computed)(()=>w(g.actualPosition?.value??i.position)),E=(0,t.computed)(()=>i.overrideContentClass?i.contentClass:[`bg-core-white fixed`,T.value,i.contentClass]);return n({setPosition:g.setPosition}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,null,[(0,t.renderSlot)(n.$slots,`opener-start`),(0,t.createElementVNode)(`div`,{ref_key:`opener`,ref:s,class:`inline-flex w-full sm:w-auto`},[(0,t.renderSlot)(n.$slots,`opener`,{isOpen:e.isOpen,floating:(0,t.unref)(g)})],512),(0,t.renderSlot)(n.$slots,`opener-end`),e.teleport?(0,t.createCommentVNode)(``,!0):(0,t.withDirectives)(((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,ref_key:`content`,ref:o,class:(0,t.normalizeClass)([`fz__floating__content w-full sm:w-auto`,E.value])},[(0,t.renderSlot)(n.$slots,`default`,{isOpen:e.isOpen,floating:(0,t.unref)(g)})],2)),[[t.vShow,n.$slots.default&&(!n.$slots.opener||n.$slots.opener&&e.isOpen)]]),e.teleport?((0,t.openBlock)(),(0,t.createBlock)(t.Teleport,{key:1,to:`body`},[(0,t.withDirectives)((0,t.createElementVNode)(`div`,{ref_key:`content`,ref:o,class:(0,t.normalizeClass)([`fz__floating__content`,E.value])},[(0,t.renderSlot)(n.$slots,`default`,{isOpen:e.isOpen,floating:(0,t.unref)(g)})],2),[[t.vShow,n.$slots.default&&(!n.$slots.opener||n.$slots.opener&&e.isOpen)]])])):(0,t.createCommentVNode)(``,!0)]))}}),e.calcRealPos=l,e.clamp=o,e.format=r,e.getHighestAvailableSpacePos=c,e.parse=i,e.roundTo=a,e.truncateDecimals=n,e.useBreakpoints=S,e.useClickOutside=C,e.useCurrency=E,e.useFloating=b,e.useKeyDown=w,e.useKeyUp=T,e.useMediaQuery=x});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vue`)):typeof define==`function`&&define.amd?define([`exports`,`vue`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e.FzComposables={},e.Vue))})(this,function(e,t){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var n=(e,t)=>{if(!isFinite(e)||t<0)return e;if(t===0)return Math.trunc(e);let n=String(e);if(n.includes(`e`)||n.includes(`E`)){let n=10**t;return Math.trunc(e*n)/n}let r=n.indexOf(`.`);return r===-1||n.length-r-1<=t?e:Number(n.slice(0,r+t+1))},r=(e,{minimumFractionDigits:t=0,maximumFractionDigits:r=2,roundDecimals:i=!0,useGrouping:a=!0}={})=>e==null||isNaN(e)||!isFinite(e)?``:(i?e:n(e,r)).toLocaleString(`it-IT`,{minimumFractionDigits:t,maximumFractionDigits:r,useGrouping:a}),i=e=>{if(!e||typeof e!=`string`)return NaN;let t=e.trim();return t.includes(`,`)&&(t=t.replace(/\./g,``),t=t.replace(`,`,`.`)),parseFloat(t)},a=(e,t)=>{let n=t,r=t%e,i=t>=0?e:-e;return r!==0&&(n=Math.abs(r)>=e/2?t+i-r:t-r),n},o=(e,t,n)=>Math.max(e,Math.min(t,n)),s=new DOMRect(0,0,window.innerWidth,window.innerHeight),c=(e,t,n,r,i)=>{let a=i?`bottom`:`right`,o=i?`bottom-start`:`right-start`;s.width=window.innerWidth,s.height=window.innerHeight,s.x=0,s.y=0;let c=e?e.getBoundingClientRect():s,l=t.getBoundingClientRect(),u=n.getBoundingClientRect(),d=(u.left-c.left-l.width)/c.width,f=(c.right-u.right-l.width)/c.width,p=(u.top-c.top-l.height)/c.height,m=(c.bottom-u.bottom-l.height)/c.height,h=[{key:`right`,space:f},{key:`top`,space:p},{key:`bottom`,space:m},{key:`left`,space:d}].sort((e,t)=>t.space-e.space);if(i&&(h=h.filter(e=>e.key===`top`||e.key===`bottom`)),a=h[0].key,!r){let e=(l.height-u.height)/2;switch(a){case`right`:case`left`:c.top>u.top-e&&(r=`end`),c.bottom<u.top-e&&(r=`start`);break;default:break}}return o=r?`${a}-${r}`:a,o},l=(e,t,n,r)=>({x:t.x+e.width*n/100,y:t.y+e.height*r/100}),u=e=>typeof e==`string`?document.querySelector(e):e,d=e=>({left:parseFloat(e.marginLeft),right:parseFloat(e.marginRight),top:parseFloat(e.marginTop),bottom:parseFloat(e.marginBottom)}),f=e=>e!==null&&(e.width>0||e.height>0),p={bottom:(e,t)=>({position:{x:e.left-t.left+e.width/2,y:e.bottom},transform:{x:-50,y:0}}),"bottom-start":(e,t)=>({position:{x:e.left-t.left,y:e.bottom},transform:{x:0,y:0}}),"bottom-end":(e,t)=>({position:{x:e.right+t.right,y:e.bottom},transform:{x:-100,y:0}}),top:(e,t)=>({position:{x:e.left-t.left+e.width/2,y:e.top-t.bottom},transform:{x:-50,y:-100}}),"top-start":(e,t)=>({position:{x:e.left-t.left,y:e.top-t.bottom},transform:{x:0,y:-100}}),"top-end":(e,t)=>({position:{x:e.right+t.right,y:e.top-t.bottom},transform:{x:-100,y:-100}}),left:(e,t)=>({position:{x:e.left-t.right,y:e.top-t.top+e.height/2},transform:{x:-100,y:-50}}),"left-start":(e,t)=>({position:{x:e.left-t.right,y:e.top-t.top},transform:{x:-100,y:0}}),"left-end":(e,t)=>({position:{x:e.left-t.right,y:e.bottom+t.bottom},transform:{x:-100,y:-100}}),right:(e,t)=>({position:{x:e.right+t.left,y:e.top-t.top+e.height/2},transform:{x:0,y:-50}}),"right-start":(e,t)=>({position:{x:e.right+t.left,y:e.top-t.top},transform:{x:0,y:0}}),"right-end":(e,t)=>({position:{x:e.right+t.left,y:e.bottom+t.bottom},transform:{x:0,y:-100}})},m=(e,t,n)=>{let r=p[e];return r?r(t,n):{position:{x:0,y:0},transform:{x:0,y:0}}},h={bottom:(e,t)=>({position:{x:e.left+e.width/2,y:e.bottom-t.height},transform:{x:-50,y:0}}),"bottom-start":(e,t)=>({position:{x:e.left,y:e.bottom-t.height},transform:{x:0,y:0}}),"bottom-end":(e,t)=>({position:{x:e.right-t.width,y:e.bottom-t.height},transform:{x:0,y:0}}),top:e=>({position:{x:e.left+e.width/2,y:e.top},transform:{x:-50,y:0}}),"top-start":e=>({position:{x:e.left,y:e.top},transform:{x:0,y:0}}),"top-end":(e,t)=>({position:{x:e.right-t.width,y:e.top},transform:{x:0,y:0}}),left:(e,t)=>({position:{x:e.left,y:e.top+(e.height-t.height)/2},transform:{x:0,y:0}}),"left-start":e=>({position:{x:e.left,y:e.top},transform:{x:0,y:0}}),"left-end":(e,t)=>({position:{x:e.left,y:e.bottom-t.height},transform:{x:0,y:0}}),right:(e,t)=>({position:{x:e.right-t.width,y:e.top+(e.height-t.height)/2},transform:{x:0,y:0}}),"right-start":(e,t)=>({position:{x:e.right-t.width,y:e.top},transform:{x:0,y:0}}),"right-end":(e,t)=>({position:{x:e.right-t.width,y:e.bottom-t.height},transform:{x:0,y:0}})},g=(e,t,n)=>{let r=h[e];return r?r(t,n):{position:{x:0,y:0},transform:{x:0,y:0}}},_=8,v=()=>({left:0,top:0,right:window.innerWidth,bottom:window.innerHeight}),y=(e,t)=>({left:Math.max(e.left,t.left),right:Math.min(e.right,t.right),top:Math.max(e.top,t.top),bottom:Math.min(e.bottom,t.bottom)}),b=(e,t,n,r,i=v(),a=_)=>{let o={...e},s={...r},c=y(n,i),l=c.left+a,u=Math.max(l,c.right-a-t.width);o.x>u&&(o.x=u,s.x=0),o.x<l&&(o.x=l,s.x=0);let d=c.top+a,f=Math.max(d,c.bottom-a-t.height);return o.y>f&&(o.y=f,s.y=0),o.y<d&&(o.y=d,s.y=0),{position:o,transform:s}},x=(e,t,n,r,i)=>{let a=i?null:t;switch(e){case`auto`:return c(a,n,r);case`auto-vertical`:return c(a,n,r,void 0,!0);case`auto-start`:return c(a,n,r,`start`);case`auto-vertical-start`:return c(a,n,r,`start`,!0);case`auto-end`:return c(a,n,r,`end`);case`auto-vertical-end`:return c(a,n,r,`end`,!0);default:return`bottom-start`}},S=e=>e.startsWith(`auto`),C=e=>{let n=(0,t.ref)(`auto`),r=(0,t.ref)(),i=(0,t.ref)(),a=(0,t.ref)(),o=(0,t.ref)(),s=(0,t.reactive)({position:{x:0,y:0}}),c={root:null,rootMargin:`0px`,threshold:1,...e.element.value.intersectionOptions},p=(0,t.ref)(new IntersectionObserver(()=>{},c)),h=()=>{let t=u(e.element.value.domRef.value);return t?{element:t,container:e.container?.value?u(e.container.value.domRef.value)??document.body:document.body,opener:e.opener?.value?u(e.opener.value.domRef.value):null}:null},_=e=>({element:e.element.getBoundingClientRect(),container:e.container.getBoundingClientRect(),opener:e.opener?.getBoundingClientRect()??null});return(0,t.onUnmounted)(()=>{p.value.disconnect()}),{float:s,rect:i,setPosition:(c=!1)=>(0,t.nextTick)(()=>{r.value=e.position?.value??`auto`;let t=h();if(!t)return;Object.assign(t.element.style,{position:`fixed`,top:`0px`,left:`0px`});let u=_(t);if(i.value=u.element,a.value=u.opener??void 0,o.value=u.container,t.opener&&!f(u.opener)){t.element.style.display=`none`;return}p.value.observe(t.element),p.value.observe(t.container),S(r.value)&&t.opener&&(r.value=x(r.value,t.container,t.element,t.opener,e.useViewport?.value??!1));let v=d(window.getComputedStyle(t.element)),y=t.opener&&u.opener?m(r.value,u.opener,v):g(r.value,u.container,u.element),C=b(l(u.element,y.position,y.transform.x,y.transform.y),u.element,u.container,y.transform);s.position.x=C.position.x,s.position.y=C.position.y,Object.assign(t.element.style,{top:`${s.position.y}px`,left:`${s.position.x}px`,position:`fixed`,display:`flex`}),i.value=t.element.getBoundingClientRect(),e.callback?.value&&!c&&e.callback.value(i,a,o,n,r)}),position:n,actualPosition:r,openerRect:a,containerRect:o}};function w(e){let n=window.matchMedia(e),r=(0,t.ref)(n.matches);function i(e){r.value=e.matches}return(0,t.onMounted)(()=>{n.addEventListener(`change`,i)}),(0,t.onUnmounted)(()=>{n.removeEventListener(`change`,i)}),(0,t.computed)(()=>r.value)}function T(e){return{isGreater(t){return w(`(min-width: ${e[t]})`)},isSmaller(t){return w(`(max-width: ${e[t]})`)},isInBetween(t,n){return w(`(min-width: ${e[t]}) and (max-width: ${e[n]})`)},current(){let n=Object.entries(e).map(([e,t])=>({name:e,value:parseInt(t,10)})).sort((e,t)=>e.value-t.value),r=n.map(({name:e,value:t})=>({name:e,matches:w(`(min-width: ${t}px)`)}));return(0,t.computed)(()=>{let e=n[0].name;for(let{name:t,matches:n}of r)n.value&&(e=t);return e})}}}function E(e,n,r){if(!e)throw Error(`A target component has to be provided.`);if(!n)throw Error(`A callback has to be provided.`);let i=t=>{!e.value||t.target===e.value||t.composedPath().includes(e.value)||typeof n==`function`&&n()};r&&(0,t.watch)(r,(e,t)=>{t&&t.removeEventListener(`click`,i),e?.addEventListener(`click`,i)}),(0,t.onMounted)(()=>{r||document.addEventListener(`click`,i)}),(0,t.onBeforeUnmount)(()=>{if(r){r.value?.removeEventListener(`click`,i);return}document.removeEventListener(`click`,i)})}function D(e,n){if(!e)throw Error(`A target component has to be provided.`);if(!n||typeof n!=`function`)throw Error(`A callback has to be provided.`);let r=e=>{n(e)};(0,t.onMounted)(()=>{e.value.addEventListener(`keydown`,r)}),(0,t.onBeforeUnmount)(()=>{e.value.removeEventListener(`keydown`,r)})}function O(e,n){if(!e||typeof e!=`function`)throw Error(`A callback has to be provided.`);let r=t=>{e(t)};(0,t.onMounted)(()=>{if(!n){document.addEventListener(`keyup`,r);return}n.value.addEventListener(`keyup`,r)}),(0,t.onBeforeUnmount)(()=>{if(!n){document.removeEventListener(`keyup`,r);return}n.value.removeEventListener(`keyup`,r)})}var k=e=>({format:r,parse:i}),A={global:{blue:{50:{value:`#eff1ff`,type:`color`},100:{value:`#dee2ff`,type:`color`},200:{value:`#bdc5ff`,type:`color`},300:{value:`#9ca8ff`,type:`color`},400:{value:`#7b8bff`,type:`color`},500:{value:`#5a6eff`,type:`color`},600:{value:`#4858cc`,type:`color`},700:{value:`#364299`,type:`color`},800:{value:`#242c66`,type:`color`},900:{value:`#1b214c`,type:`color`}},purple:{50:{value:`#f8f4ff`,type:`color`},100:{value:`#f0e9ff`,type:`color`},200:{value:`#e1d3ff`,type:`color`},300:{value:`#d2bdff`,type:`color`},400:{value:`#c3a7ff`,type:`color`},500:{value:`#b491ff`,type:`color`},600:{value:`#9074cc`,type:`color`},700:{value:`#6c5799`,type:`color`},800:{value:`#483a66`,type:`color`},900:{value:`#241d33`,type:`color`}},orange:{50:{value:`#fff2ef`,type:`color`},100:{value:`#ffe4de`,type:`color`},200:{value:`#ffc9bd`,type:`color`},300:{value:`#ffae9c`,type:`color`},400:{value:`#ff937b`,type:`color`},500:{value:`#ff785a`,type:`color`},600:{value:`#cc6048`,type:`color`},700:{value:`#994836`,type:`color`},800:{value:`#663024`,type:`color`},900:{value:`#331812`,type:`color`}},pink:{50:{value:`#fff5f5`,type:`color`},100:{value:`#ffe0e0`,type:`color`},200:{value:`#ffcbcb`,type:`color`},300:{value:`#ffc0c0`,type:`color`},400:{value:`#ffabab`,type:`color`},500:{value:`#ff9696`,type:`color`},600:{value:`#cc7878`,type:`color`},700:{value:`#995a5a`,type:`color`},800:{value:`#663c3c`,type:`color`},900:{value:`#331e1e`,type:`color`}},yellow:{50:{value:`#fffbf4`,type:`color`},100:{value:`#fff3de`,type:`color`},200:{value:`#ffebc8`,type:`color`},300:{value:`#ffe7bd`,type:`color`},400:{value:`#ffdfa7`,type:`color`},500:{value:`#ffd791`,type:`color`},600:{value:`#ccac74`,type:`color`},700:{value:`#998157`,type:`color`},800:{value:`#806c49`,type:`color`},900:{value:`#4c402b`,type:`color`}},semantic:{error:{50:{value:`#fef3f3`,type:`color`},100:{value:`#f8baba`,type:`color`},200:{value:`#f04242`,type:`color`},300:{value:`#aa2f2f`,type:`color`}},warning:{50:{value:`#fff8f3`,type:`color`},100:{value:`#ffdabd`,type:`color`},200:{value:`#ffae4f`,type:`color`},300:{value:`#b47b38`,type:`color`}},success:{50:{value:`#f2f8f6`,type:`color`},100:{value:`#b5d8ce`,type:`color`},200:{value:`#0fa88c`,type:`color`},300:{value:`#0b7763`,type:`color`}},info:{50:{value:`#f3f7ff`,type:`color`},100:{value:`#b4c8e1`,type:`color`},200:{value:`#4e9fff`,type:`color`},300:{value:`#3770b4`,type:`color`}}},background:{"white-smoke":{value:`#f7f6f3`,type:`color`},seashell:{value:`#f8ece7`,type:`color`},"pale-purple":{value:`#f2e6ff`,type:`color`},"alice-blue":{value:`#ecf2fc`,type:`color`}},grey:{100:{value:`#e9edf0`,type:`color`},200:{value:`#d1dde6`,type:`color`},300:{value:`#9da9b2`,type:`color`},400:{value:`#6e777e`,type:`color`},500:{value:`#596167`,type:`color`}},core:{white:{value:`#ffffff`,type:`color`},black:{value:`#2c282f`,type:`color`}},"font-sans":{"sharp-grotesk":{value:`"Sharp Grotesk", sans-serif`,type:`fontFamilies`},inter:{value:`"Inter", sans-serif`,type:`fontFamilies`}},font:{light:{value:`300`,type:`fontWeights`},normal:{value:`400`,type:`fontWeights`},medium:{value:`500`,type:`fontWeights`}},spacing:{0:{value:`0px`,type:`spacing`},1:{value:`1px`,type:`spacing`},2:{value:`2px`,type:`spacing`},4:{value:`4px`,type:`spacing`},6:{value:`6px`,type:`spacing`},8:{value:`8px`,type:`spacing`},10:{value:`10px`,type:`spacing`},12:{value:`12px`,type:`spacing`},14:{value:`14px`,type:`spacing`},16:{value:`16px`,type:`spacing`},20:{value:`20px`,type:`spacing`},24:{value:`24px`,type:`spacing`},28:{value:`28px`,type:`spacing`},32:{value:`32px`,type:`spacing`},36:{value:`36px`,type:`spacing`},40:{value:`40px`,type:`spacing`},44:{value:`44px`,type:`spacing`},48:{value:`48px`,type:`spacing`},56:{value:`56px`,type:`spacing`},64:{value:`64px`,type:`spacing`},80:{value:`80px`,type:`spacing`},96:{value:`96px`,type:`spacing`},112:{value:`112px`,type:`spacing`},128:{value:`128px`,type:`spacing`},144:{value:`144px`,type:`spacing`},160:{value:`160px`,type:`spacing`},176:{value:`176px`,type:`spacing`},192:{value:`192px`,type:`spacing`},208:{value:`208px`,type:`spacing`},224:{value:`224px`,type:`spacing`},240:{value:`240px`,type:`spacing`},256:{value:`256px`,type:`spacing`},288:{value:`288px`,type:`spacing`},320:{value:`320px`,type:`spacing`},384:{value:`384px`,type:`spacing`}},border:{0:{value:`0px`,type:`borderWidth`},1:{value:`1px`,type:`borderWidth`},2:{value:`2px`,type:`borderWidth`},4:{value:`4px`,type:`borderWidth`},8:{value:`8px`,type:`borderWidth`}},rounded:{none:{value:`0px`,type:`borderRadius`},sm:{value:`2px`,type:`borderRadius`},base:{value:`4px`,type:`borderRadius`},md:{value:`6px`,type:`borderRadius`},lg:{value:`8px`,type:`borderRadius`},xl:{value:`12px`,type:`borderRadius`},"2xl":{value:`16px`,type:`borderRadius`},"3xl":{value:`24px`,type:`borderRadius`},full:{value:`9999px`,type:`borderRadius`}},breakpoint:{xs:{value:`376px`,type:`sizing`},sm:{value:`640px`,type:`sizing`},md:{value:`768px`,type:`sizing`},lg:{value:`1024px`,type:`sizing`},desktop:{value:`1200px`,type:`sizing`},xl:{value:`1280px`,type:`sizing`},"2xl":{value:`1440px`,type:`sizing`},"3xl":{value:`1536px`,type:`sizing`}},shadow:{none:{value:{color:`#000000`,type:`dropShadow`,x:`0`,y:`0`,blur:`0`,spread:`0`},type:`boxShadow`},sm:{value:{color:`#0000000d`,type:`dropShadow`,x:`0`,y:`1`,blur:`2`,spread:`0`},type:`boxShadow`},base:{value:[{color:`#0000000f`,type:`dropShadow`,x:`0`,y:`1`,blur:`2`,spread:`0`},{color:`#0000001a`,type:`dropShadow`,x:`0`,y:`1`,blur:`3`,spread:`0`}],type:`boxShadow`},md:{value:[{color:`#0000000f`,type:`dropShadow`,x:`0`,y:`2`,blur:`4`,spread:`-1`},{color:`#0000001a`,type:`dropShadow`,x:`0`,y:`4`,blur:`6`,spread:`-1`}],type:`boxShadow`},lg:{value:[{color:`#0000000d`,type:`dropShadow`,x:`0`,y:`4`,blur:`6`,spread:`-2`},{color:`#0000001a`,type:`dropShadow`,x:`0`,y:`10`,blur:`15`,spread:`-3`}],type:`boxShadow`},xl:{value:[{color:`#0000000a`,type:`dropShadow`,x:`0`,y:`10`,blur:`10`,spread:`-5`},{color:`#0000001a`,type:`dropShadow`,x:`0`,y:`20`,blur:`25`,spread:`-5`}],type:`boxShadow`},"2xl":{value:{color:`#00000040`,type:`dropShadow`,x:`0`,y:`25`,blur:`50`,spread:`-12`},type:`boxShadow`},inner:{value:{color:`#0000000f`,type:`innerShadow`,x:`0`,y:`2`,blur:`4`,spread:`0`},type:`boxShadow`}},underline:{value:`underline`,type:`textDecoration`},text:{xs:{value:`12px`,type:`fontSizes`},sm:{value:`14px`,type:`fontSizes`},base:{value:`16px`,type:`fontSizes`},lg:{value:`18px`,type:`fontSizes`},xl:{value:`20px`,type:`fontSizes`},"2xl":{value:`24px`,type:`fontSizes`},"3xl":{value:`30px`,type:`fontSizes`},"4xl":{value:`36px`,type:`fontSizes`},"5xl":{value:`48px`,type:`fontSizes`},"6xl":{value:`60px`,type:`fontSizes`},"7xl":{value:`72px`,type:`fontSizes`},"8xl":{value:`96px`,type:`fontSizes`},"9xl":{value:`128px`,type:`fontSizes`}},leading:{xs:{value:`16px`,type:`lineHeights`},sm:{value:`18px`,type:`lineHeights`},base:{value:`20px`,type:`lineHeights`},lg:{value:`24px`,type:`lineHeights`},xl:{value:`28px`,type:`lineHeights`},"2xl":{value:`32px`,type:`lineHeights`},"3xl":{value:`36px`,type:`lineHeights`},"4xl":{value:`40px`,type:`lineHeights`},"5xl":{value:`48px`,type:`lineHeights`},"6xl":{value:`60px`,type:`lineHeights`},"7xl":{value:`72px`,type:`lineHeights`},"8xl":{value:`96px`,type:`lineHeights`},"9xl":{value:`128px`,type:`lineHeights`}}},alias:{avatar:{initials:{"background-color":{value:`{core.black}`,type:`color`},color:{value:`{core.white}`,type:`color`},spacing:{value:`{spacing.32}`,type:`spacing`},"border-radius":{value:`{rounded.full}`,type:`borderRadius`},"font-family":{value:`{font-sans.inter}`,type:`fontFamilies`},"font-weight":{value:`{font.normal}`,type:`fontWeights`},"font-size":{value:`{text.sm}`,type:`fontSizes`},"line-height":{value:`{leading.sm}`,type:`lineHeights`}},image:{"border-radius":{value:`{rounded.full}`,type:`borderRadius`},sm:{value:`{spacing.16}`,type:`spacing`},md:{value:`{spacing.24}`,type:`spacing`},lg:{value:`{spacing.32}`,type:`spacing`},xl:{value:`{spacing.40}`,type:`spacing`}}},"nav-link":{spacing:{value:`{spacing.32}`,type:`spacing`},"border-radius":{value:`{rounded.base}`,type:`borderRadius`},"font-family":{value:`{font-sans.inter}`,type:`fontFamilies`},"font-weight":{value:`{font.medium}`,type:`fontWeights`},"line-height":{value:`{leading.sm}`,type:`lineHeights`},"font-size":{value:`{text.sm}`,type:`fontSizes`},"background-color":{default:{value:`none`,type:`color`},hover:{value:`{background.alice-blue}`,type:`color`},pressed:{value:`{background.alice-blue}`,type:`color`},focus:{value:`{background.alice-blue}`,type:`color`},disabled:{value:`none`,type:`color`}},color:{default:{value:`{grey.500}`,type:`color`},hover:{value:`{blue.500}`,type:`color`},pressed:{value:`{blue.500}`,type:`color`},focus:{value:`{blue.500}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},border:{default:{value:`none`,type:`color`},hover:{value:`none`,type:`color`},pressed:{value:`none`,type:`color`},focus:{value:`{blue.500}`,type:`color`},disabled:{value:`none`,type:`color`}},"border-width":{default:{value:`none`,type:`borderWidth`},hover:{value:`none`,type:`borderWidth`},pressed:{value:`none`,type:`borderWidth`},focus:{value:`{border.1}`,type:`borderWidth`},disabled:{value:`none`,type:`borderWidth`}},"box-shadow":{default:{value:`{shadow.none}`,type:`boxShadow`},hover:{value:`{shadow.none}`,type:`boxShadow`},pressed:{value:`{shadow.inner}`,type:`boxShadow`},focus:{value:`none`,type:`boxShadow`},disabled:{value:`none`,type:`boxShadow`}}},"icon-button":{button:{sm:{value:`{spacing.28}`,type:`spacing`},md:{value:`{spacing.32}`,type:`spacing`},lg:{value:`{spacing.40}`,type:`spacing`}},icon:{sm:{value:`{spacing.16}`,type:`spacing`},md:{value:`{spacing.20}`,type:`spacing`}},primary:{"background-color":{default:{value:`{blue.500}`,type:`color`},hover:{value:`{blue.600}`,type:`color`},pressed:{value:`{blue.600}`,type:`color`},focus:{value:`{blue.500}`,type:`color`},disabled:{value:`{blue.200}`,type:`color`}},color:{default:{value:`{core.white}`,type:`color`},hover:{value:`{core.white}`,type:`color`},pressed:{value:`{core.white}`,type:`color`},focus:{value:`{core.white}`,type:`color`},disabled:{value:`{core.white}`,type:`color`}},border:{default:{value:`none`,type:`color`},hover:{value:`none`,type:`color`},pressed:{value:`none`,type:`color`},focus:{value:`{blue.600}`,type:`color`},disabled:{value:`none`,type:`color`}},"border-width":{default:{value:`none`,type:`borderWidth`},hover:{value:`none`,type:`borderWidth`},pressed:{value:`none`,type:`borderWidth`},focus:{value:`{border.1}`,type:`borderWidth`},disabled:{value:`none`,type:`borderWidth`}}},secondary:{"background-color":{default:{value:`none`,type:`color`},hover:{value:`{grey.100}`,type:`color`},pressed:{value:`{grey.100}`,type:`color`},focus:{value:`none`,type:`color`},disabled:{value:`none`,type:`color`}},color:{default:{value:`{grey.500}`,type:`color`},hover:{value:`{grey.500}`,type:`color`},pressed:{value:`{grey.500}`,type:`color`},focus:{value:`{grey.500}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},border:{default:{value:`{grey.200}`,type:`color`},hover:{value:`{grey.200}`,type:`color`},pressed:{value:`{grey.200}`,type:`color`},focus:{value:`{blue.600}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},"border-width":{value:`{border.1}`,type:`borderWidth`}},notification:{"background-color":{default:{value:`none`,type:`color`},hover:{value:`{grey.100}`,type:`color`},pressed:{value:`{grey.100}`,type:`color`}},color:{default:{value:`{grey.500}`,type:`color`},hover:{value:`{grey.500}`,type:`color`},pressed:{value:`{grey.500}`,type:`color`},focus:{value:`{grey.500}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},border:{default:{value:`{grey.200}`,type:`color`},hover:{value:`{grey.200}`,type:`color`},pressed:{value:`{grey.200}`,type:`color`},focus:{value:`{grey.200}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},"border-width":{value:`{border.1}`,type:`borderWidth`}},"notification-badge":{"background-color":{default:{value:`{blue.500}`,type:`color`},hover:{value:`{blue.500}`,type:`color`},pressed:{value:`{blue.500}`,type:`color`},focus:{value:`{blue.500}`,type:`color`},disabled:{value:`{grey.200}`,type:`color`}},border:{default:{value:`{core.white}`,type:`color`},hover:{value:`{core.white}`,type:`color`},pressed:{value:`{core.white}`,type:`color`},focus:{value:`{core.white}`,type:`color`},disabled:{value:`{core.white}`,type:`color`}},sm:{value:`{spacing.6}`,type:`spacing`},md:{value:`{spacing.8}`,type:`spacing`},lg:{value:`{spacing.10}`,type:`spacing`},"border-width":{value:`{border.1}`,type:`borderWidth`}},invisible:{"background-color":{default:{value:`none`,type:`color`},hover:{value:`{grey.100}`,type:`color`},pressed:{value:`{grey.100}`,type:`color`},focus:{value:`none`,type:`color`},disabled:{value:`none`,type:`color`}},color:{default:{value:`{grey.500}`,type:`color`},hover:{value:`{grey.500}`,type:`color`},pressed:{value:`{grey.500}`,type:`color`},focus:{value:`{grey.500}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},border:{default:{value:`none`,type:`color`},hover:{value:`none`,type:`color`},pressed:{value:`none`,type:`color`},focus:{value:`{blue.600}`,type:`color`},disabled:{value:`{grey.100}`,type:`color`}},"border-width":{default:{value:`none`,type:`borderWidth`},hover:{value:`none`,type:`borderWidth`},pressed:{value:`none`,type:`borderWidth`},focus:{value:`{border.1}`,type:`borderWidth`},disabled:{value:`{border.1}`,type:`borderWidth`}}},"border-radius":{value:`{rounded.base}`,type:`borderRadius`},"box-shadow":{default:{value:`{shadow.none}`,type:`boxShadow`},hover:{value:`{shadow.none}`,type:`boxShadow`},pressed:{value:`{shadow.inner}`,type:`boxShadow`},focus:{value:`none`,type:`boxShadow`},disabled:{value:`none`,type:`boxShadow`}}},breadcrumbs:{color:{"previous-page":{value:`{blue.500}`,type:`color`},divider:{value:`{grey.300}`,type:`color`},"current-page":{value:`{grey.500}`,type:`color`}},"font-family":{value:`{font-sans.inter}`,type:`fontFamilies`},"font-weight":{value:`{font.normal}`,type:`fontWeights`},"line-height":{value:`{leading.sm}`,type:`lineHeights`},"font-size":{value:`{text.sm}`,type:`fontSizes`}},"main-content":{sm:{value:`{spacing.32}`,type:`spacing`},base:{value:`{spacing.48}`,type:`spacing`},lg:{value:`{spacing.64}`,type:`spacing`}},"section-content":{none:{value:`{spacing.0}`,type:`spacing`},xs:{value:`{spacing.8}`,type:`spacing`},sm:{value:`{spacing.16}`,type:`spacing`},base:{value:`{spacing.24}`,type:`spacing`},lg:{value:`{spacing.32}`,type:`spacing`}}},$themes:[],$metadata:{tokenSetOrder:[`global`,`alias`]}},j={$schema:`http://json-schema.org/draft-07/schema#`,description:`Lista dei colori da includere nella safelist di Tailwind. Per aggiungere un nuovo colore, aggiungi il suo nome qui e rigenera il build con 'pnpm run build'.`,safeColorNames:[`blue`,`purple`,`orange`,`pink`,`yellow`,`grey`,`core`]},M={$schema:`http://json-schema.org/draft-07/schema#`,description:`Lista dei colori semantici da includere nella safelist di Tailwind. Per aggiungere un nuovo colore semantico, aggiungi il suo nome qui e rigenera il build con 'pnpm run build'.`,semanticColorNames:[`error`,`warning`,`success`,`info`]},N=j.safeColorNames,P=M.semanticColorNames,F={};N.forEach(e=>{let t=A.global[e];t&&Object.keys(t).forEach(n=>{let r=t[n]?.value;r&&(F[e]||(F[e]={}),F[e][n]=r)})});var I=A.global.semantic;I&&P.forEach(e=>{let t=I[e];t&&typeof t==`object`&&Object.keys(t).forEach(n=>{let r=t[n]?.value;if(r){let t=`semantic-${e}`;F[t]||(F[t]={}),F[t][n]=r}})});var L=Object.entries(A.global.breakpoint).reduce((e,[t,n])=>(e[t]=n.value,e),{});e.FzFloating=(0,t.defineComponent)({__name:`FzFloating`,props:{isOpen:{type:Boolean,default:!1},position:{default:`auto`},container:{},contentClass:{},openerClass:{},overrideContentClass:{type:Boolean},overrideOpener:{},teleport:{type:Boolean,default:!1},useViewport:{type:Boolean}},emits:[`fzfloating:setPosition`],setup(e,{expose:n,emit:r}){let i=e,a=r,o=(0,t.ref)(null),s=(0,t.ref)(null),c=(0,t.useSlots)(),l=w(`(max-width: ${L.xs})`),u=!1,d=!1,f=null,p=null,m={position:i.position,element:{domRef:o},container:{domRef:(0,t.toRef)(i.container||document.body)},opener:{domRef:(0,t.toRef)(null)},useViewport:i.useViewport,callback(...e){a(`fzfloating:setPosition`,...e)}},h=(0,t.toRefs)(m);c.opener&&(m.opener={domRef:s});let g=C(h),_=()=>{u||!d||(u=!0,requestAnimationFrame(()=>{d&&i.isOpen&&g.setPosition(),u=!1}))};(0,t.onMounted)(()=>{d=!0});let v=()=>{_()},y=()=>{_()},b=()=>{window.addEventListener(`scroll`,v,!0),window.addEventListener(`resize`,y),o.value&&!f&&(f=new ResizeObserver(()=>{_()}),f.observe(o.value)),s.value&&!p&&(p=new ResizeObserver(()=>{_()}),p.observe(s.value))},x=()=>{window.removeEventListener(`scroll`,v,!0),window.removeEventListener(`resize`,y),f&&=(f.disconnect(),null),p&&=(p.disconnect(),null)};(0,t.watch)(()=>i.position,()=>_()),(0,t.watch)(()=>i.isOpen,e=>{if(!e||!o.value||!d){x();return}b();let t=s.value?.getBoundingClientRect();o.value.style.position=`fixed`,o.value.style.top=`0px`,o.value.style.left=`0px`,o.value.style.transform=`none`,o.value.style.width=l.value?t?.width+`px`:`auto`,g.setPosition()}),(0,t.watch)(()=>i.overrideOpener,e=>{e&&h.opener&&h.opener.value&&(h.opener.value={domRef:e})}),(0,t.onBeforeUnmount)(()=>{d=!1,x()});let S=e=>e.startsWith(`bottom`)?`mt-4`:e.startsWith(`top`)?`mb-4`:e.startsWith(`left`)?`mr-4`:e.startsWith(`right`)?`ml-4`:`mt-4`,T=(0,t.computed)(()=>S(g.actualPosition?.value??i.position)),E=(0,t.computed)(()=>i.overrideContentClass?i.contentClass:[`bg-core-white fixed`,T.value,i.contentClass]);return n({setPosition:g.setPosition}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,null,[(0,t.renderSlot)(n.$slots,`opener-start`),(0,t.createElementVNode)(`div`,{ref_key:`opener`,ref:s,class:`inline-flex w-full sm:w-auto`},[(0,t.renderSlot)(n.$slots,`opener`,{isOpen:e.isOpen,floating:(0,t.unref)(g)})],512),(0,t.renderSlot)(n.$slots,`opener-end`),e.teleport?(0,t.createCommentVNode)(``,!0):(0,t.withDirectives)(((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,ref_key:`content`,ref:o,class:(0,t.normalizeClass)([`fz__floating__content w-full sm:w-auto`,E.value])},[(0,t.renderSlot)(n.$slots,`default`,{isOpen:e.isOpen,floating:(0,t.unref)(g)})],2)),[[t.vShow,n.$slots.default&&(!n.$slots.opener||n.$slots.opener&&e.isOpen)]]),e.teleport?((0,t.openBlock)(),(0,t.createBlock)(t.Teleport,{key:1,to:`body`},[(0,t.withDirectives)((0,t.createElementVNode)(`div`,{ref_key:`content`,ref:o,class:(0,t.normalizeClass)([`fz__floating__content`,E.value])},[(0,t.renderSlot)(n.$slots,`default`,{isOpen:e.isOpen,floating:(0,t.unref)(g)})],2),[[t.vShow,n.$slots.default&&(!n.$slots.opener||n.$slots.opener&&e.isOpen)]])])):(0,t.createCommentVNode)(``,!0)]))}}),e.calcRealPos=l,e.clamp=o,e.format=r,e.getHighestAvailableSpacePos=c,e.parse=i,e.roundTo=a,e.truncateDecimals=n,e.useBreakpoints=T,e.useClickOutside=E,e.useCurrency=k,e.useFloating=C,e.useKeyDown=D,e.useKeyUp=O,e.useMediaQuery=w});
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "@fiscozen/composables",
3
- "version": "1.0.4",
3
+ "version": "1.1.1",
4
4
  "description": "Design System utility composables",
5
5
  "main": "src/index.ts",
6
6
  "type": "module",
7
7
  "keywords": [],
8
8
  "author": "Riccardo Agnoletto",
9
9
  "dependencies": {
10
- "@fiscozen/style": "0.3.0"
10
+ "@fiscozen/style": "0.4.0"
11
11
  },
12
12
  "peerDependencies": {
13
13
  "tailwindcss": "^3.4.1",
@@ -28,9 +28,9 @@
28
28
  "vite": "^8.0.0",
29
29
  "vitest": "^4.1.1",
30
30
  "vue-tsc": "^2.2.12",
31
- "@fiscozen/tsconfig": "^0.1.0",
31
+ "@fiscozen/eslint-config": "^0.1.0",
32
32
  "@fiscozen/prettier-config": "^0.1.0",
33
- "@fiscozen/eslint-config": "^0.1.0"
33
+ "@fiscozen/tsconfig": "^0.1.0"
34
34
  },
35
35
  "license": "ISC",
36
36
  "scripts": {
@@ -0,0 +1,153 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest'
2
+ import { defineComponent, type ComputedRef } from 'vue'
3
+ import { mount } from '@vue/test-utils'
4
+ import { useBreakpoints } from '../composables/useBreakpoints'
5
+
6
+ const BREAKPOINTS = {
7
+ xs: '376px',
8
+ sm: '640px',
9
+ md: '768px',
10
+ lg: '1024px',
11
+ xl: '1280px',
12
+ '2xl': '1440px',
13
+ '3xl': '1536px'
14
+ } as const
15
+
16
+ const originalMatchMedia = window.matchMedia
17
+
18
+ // Controls what the mocked matchMedia reports as the current viewport width.
19
+ let viewportWidth = 1024
20
+
21
+ /**
22
+ * A matchMedia mock that actually evaluates `min-width` / `max-width` queries
23
+ * against `viewportWidth`, so the descending-priority resolution in `current()`
24
+ * is exercised for real instead of being short-circuited by a coarse stub.
25
+ */
26
+ function installMatchMedia() {
27
+ Object.defineProperty(window, 'matchMedia', {
28
+ writable: true,
29
+ configurable: true,
30
+ value: vi.fn((query: string) => {
31
+ const min = /min-width:\s*(\d+)px/.exec(query)
32
+ const max = /max-width:\s*(\d+)px/.exec(query)
33
+ let matches = true
34
+ if (min) matches = matches && viewportWidth >= parseInt(min[1], 10)
35
+ if (max) matches = matches && viewportWidth <= parseInt(max[1], 10)
36
+ return {
37
+ matches,
38
+ media: query,
39
+ onchange: null,
40
+ addListener: vi.fn(),
41
+ removeListener: vi.fn(),
42
+ addEventListener: vi.fn(),
43
+ removeEventListener: vi.fn(),
44
+ dispatchEvent: vi.fn()
45
+ }
46
+ })
47
+ })
48
+ }
49
+
50
+ /** Resolve `current()` at a given viewport width inside a mounted component. */
51
+ function currentAt(
52
+ width: number,
53
+ breakpoints: Record<string, `${number}px`> = BREAKPOINTS
54
+ ): string {
55
+ viewportWidth = width
56
+ let value = ''
57
+ const Cmp = defineComponent({
58
+ setup() {
59
+ const { current } = useBreakpoints(breakpoints)
60
+ const cur: ComputedRef<string> = current()
61
+ value = cur.value
62
+ return () => null
63
+ }
64
+ })
65
+ const wrapper = mount(Cmp)
66
+ const result = value
67
+ wrapper.unmount()
68
+ return result
69
+ }
70
+
71
+ describe('useBreakpoints', () => {
72
+ beforeEach(() => {
73
+ installMatchMedia()
74
+ })
75
+
76
+ afterEach(() => {
77
+ Object.defineProperty(window, 'matchMedia', {
78
+ writable: true,
79
+ configurable: true,
80
+ value: originalMatchMedia
81
+ })
82
+ })
83
+
84
+ describe('current()', () => {
85
+ it.each([
86
+ [376, 'xs'],
87
+ [639, 'xs'],
88
+ [640, 'sm'],
89
+ [767, 'sm'],
90
+ [768, 'md'],
91
+ [1023, 'md'],
92
+ [1024, 'lg'],
93
+ [1279, 'lg'],
94
+ [1280, 'xl'],
95
+ [1439, 'xl'],
96
+ [1440, '2xl'],
97
+ [1535, '2xl'],
98
+ [1536, '3xl'],
99
+ [1920, '3xl']
100
+ ])(
101
+ 'resolves to the largest breakpoint whose min-width is met (width %ipx -> %s)',
102
+ (width, expected) => {
103
+ expect(currentAt(width)).toBe(expected)
104
+ }
105
+ )
106
+
107
+ it('has boundary parity with a `>=` check (inclusive min-width)', () => {
108
+ // Exactly at the breakpoint value resolves to that breakpoint, matching
109
+ // the previous `viewportWidth >= parseInt(value)` behaviour.
110
+ expect(currentAt(640)).toBe('sm')
111
+ expect(currentAt(1024)).toBe('lg')
112
+ })
113
+
114
+ it('falls back to the smallest breakpoint below the first threshold', () => {
115
+ expect(currentAt(320)).toBe('xs')
116
+ expect(currentAt(0)).toBe('xs')
117
+ })
118
+
119
+ it('is independent of key order in the breakpoints object', () => {
120
+ const scrambled: Record<string, `${number}px`> = {
121
+ lg: '1024px',
122
+ xs: '376px',
123
+ '3xl': '1536px',
124
+ md: '768px',
125
+ sm: '640px',
126
+ xl: '1280px',
127
+ '2xl': '1440px'
128
+ }
129
+ expect(currentAt(1024, scrambled)).toBe('lg')
130
+ expect(currentAt(700, scrambled)).toBe('sm')
131
+ })
132
+ })
133
+
134
+ describe('isGreater / isSmaller / isInBetween', () => {
135
+ it('reports isGreater relative to a breakpoint', () => {
136
+ viewportWidth = 1280
137
+ let greaterThanLg = false
138
+ let greaterThan3xl = false
139
+ const Cmp = defineComponent({
140
+ setup() {
141
+ const { isGreater } = useBreakpoints(BREAKPOINTS)
142
+ greaterThanLg = isGreater('lg').value
143
+ greaterThan3xl = isGreater('3xl').value
144
+ return () => null
145
+ }
146
+ })
147
+ const wrapper = mount(Cmp)
148
+ expect(greaterThanLg).toBe(true)
149
+ expect(greaterThan3xl).toBe(false)
150
+ wrapper.unmount()
151
+ })
152
+ })
153
+ })
@@ -224,6 +224,175 @@ describe('useFloating', () => {
224
224
  })
225
225
  })
226
226
 
227
+ describe('viewport collision (mobile)', () => {
228
+ const VIEWPORT_MARGIN = 8
229
+ const ELEMENT_WIDTH = 200
230
+ const ELEMENT_HEIGHT = 100
231
+
232
+ let originalInnerWidth: number
233
+ let originalInnerHeight: number
234
+
235
+ const setViewport = (width: number, height: number) => {
236
+ Object.defineProperty(window, 'innerWidth', { value: width, configurable: true })
237
+ Object.defineProperty(window, 'innerHeight', { value: height, configurable: true })
238
+ }
239
+
240
+ beforeEach(() => {
241
+ originalInnerWidth = window.innerWidth
242
+ originalInnerHeight = window.innerHeight
243
+ })
244
+
245
+ afterEach(() => {
246
+ setViewport(originalInnerWidth, originalInnerHeight)
247
+ })
248
+
249
+ it('leaves the position untouched when there is enough room (wide viewport)', async () => {
250
+ setViewport(1440, 900)
251
+
252
+ // Opener comfortably inside the viewport, plenty of room to the right.
253
+ mockOpener.getBoundingClientRect = vi.fn(() => ({
254
+ width: 100,
255
+ height: 40,
256
+ top: 200,
257
+ left: 300,
258
+ right: 400,
259
+ bottom: 240,
260
+ x: 300,
261
+ y: 200,
262
+ toJSON: () => {}
263
+ })) as any
264
+
265
+ const args = toRefs({
266
+ position: ref<FzFloatingPosition>('bottom-start'),
267
+ element: { domRef: ref(mockElement) },
268
+ opener: { domRef: ref(mockOpener) }
269
+ })
270
+
271
+ const floating = useFloating(args)
272
+ await floating.setPosition()
273
+ await nextTick()
274
+
275
+ // bottom-start anchors the element's left edge at opener.left (300) and the
276
+ // top at opener.bottom (240). There's room, so nothing is shifted.
277
+ expect(floating.float.position.x).toBe(300)
278
+ expect(floating.float.position.y).toBe(240)
279
+ })
280
+
281
+ it('shifts a near-right-edge menu left so it stays on screen (narrow viewport)', async () => {
282
+ // Narrow mobile viewport. NOTE: the container (document.body by default here)
283
+ // reports a rect WIDER than the viewport, reproducing the real bug — clamping
284
+ // to the container alone would not keep the menu on screen.
285
+ setViewport(390, 844)
286
+ mockContainer.getBoundingClientRect = vi.fn(() => ({
287
+ width: 800,
288
+ height: 844,
289
+ top: 0,
290
+ left: 0,
291
+ right: 800,
292
+ bottom: 844,
293
+ x: 0,
294
+ y: 0,
295
+ toJSON: () => {}
296
+ })) as any
297
+
298
+ // Kebab opener pinned to the right edge of the narrow screen.
299
+ mockOpener.getBoundingClientRect = vi.fn(() => ({
300
+ width: 32,
301
+ height: 32,
302
+ top: 120,
303
+ left: 350,
304
+ right: 382,
305
+ bottom: 152,
306
+ x: 350,
307
+ y: 120,
308
+ toJSON: () => {}
309
+ })) as any
310
+
311
+ const args = toRefs({
312
+ position: ref<FzFloatingPosition>('bottom-start'),
313
+ element: { domRef: ref(mockElement) },
314
+ opener: { domRef: ref(mockOpener) },
315
+ container: { domRef: ref(mockContainer) }
316
+ })
317
+
318
+ const floating = useFloating(args)
319
+ await floating.setPosition()
320
+ await nextTick()
321
+
322
+ const left = floating.float.position.x
323
+ // Right edge must stay within the viewport (minus the safety margin)…
324
+ expect(left + ELEMENT_WIDTH).toBeLessThanOrEqual(390 - VIEWPORT_MARGIN)
325
+ // …and the left edge must not be pushed off the left side either.
326
+ expect(left).toBeGreaterThanOrEqual(VIEWPORT_MARGIN)
327
+ // Concretely: clamped to viewportWidth - margin - elementWidth = 390 - 8 - 200.
328
+ expect(left).toBe(390 - VIEWPORT_MARGIN - ELEMENT_WIDTH)
329
+ })
330
+
331
+ it('clamps the left edge to the margin when the element is wider than the viewport', async () => {
332
+ // Pathological narrow viewport where the menu cannot fully fit; it should
333
+ // still start on screen (left edge at the margin) rather than disappear.
334
+ setViewport(180, 844)
335
+
336
+ mockOpener.getBoundingClientRect = vi.fn(() => ({
337
+ width: 32,
338
+ height: 32,
339
+ top: 120,
340
+ left: 150,
341
+ right: 182,
342
+ bottom: 152,
343
+ x: 150,
344
+ y: 120,
345
+ toJSON: () => {}
346
+ })) as any
347
+
348
+ const args = toRefs({
349
+ position: ref<FzFloatingPosition>('bottom-end'),
350
+ element: { domRef: ref(mockElement) },
351
+ opener: { domRef: ref(mockOpener) }
352
+ })
353
+
354
+ const floating = useFloating(args)
355
+ await floating.setPosition()
356
+ await nextTick()
357
+
358
+ // element width (200) > viewport width (180): left edge clamps to the margin.
359
+ expect(floating.float.position.x).toBe(VIEWPORT_MARGIN)
360
+ expect(Number.isNaN(floating.float.position.y)).toBe(false)
361
+ })
362
+
363
+ it('shifts a menu up so its bottom edge stays on screen (vertical clamp)', async () => {
364
+ setViewport(390, 600)
365
+
366
+ // Opener near the bottom of the viewport; a bottom-anchored menu would
367
+ // overflow below the fold and must be lifted up.
368
+ mockOpener.getBoundingClientRect = vi.fn(() => ({
369
+ width: 100,
370
+ height: 40,
371
+ top: 540,
372
+ left: 100,
373
+ right: 200,
374
+ bottom: 580,
375
+ x: 100,
376
+ y: 540,
377
+ toJSON: () => {}
378
+ })) as any
379
+
380
+ const args = toRefs({
381
+ position: ref<FzFloatingPosition>('bottom-start'),
382
+ element: { domRef: ref(mockElement) },
383
+ opener: { domRef: ref(mockOpener) }
384
+ })
385
+
386
+ const floating = useFloating(args)
387
+ await floating.setPosition()
388
+ await nextTick()
389
+
390
+ expect(floating.float.position.y + ELEMENT_HEIGHT).toBeLessThanOrEqual(600 - VIEWPORT_MARGIN)
391
+ // Clamped to viewportHeight - margin - elementHeight = 600 - 8 - 100.
392
+ expect(floating.float.position.y).toBe(600 - VIEWPORT_MARGIN - ELEMENT_HEIGHT)
393
+ })
394
+ })
395
+
227
396
  describe('element styling', () => {
228
397
  it('should apply position fixed immediately', async () => {
229
398
  const args = toRefs({
@@ -1,3 +1,4 @@
1
+ import { computed, type ComputedRef } from 'vue'
1
2
  import { useMediaQuery } from './useMediaQuery'
2
3
 
3
4
  function useBreakpoints<T extends string>(breakpoints: Record<T, `${number}px`>) {
@@ -10,6 +11,34 @@ function useBreakpoints<T extends string>(breakpoints: Record<T, `${number}px`>)
10
11
  },
11
12
  isInBetween(min: T, max: T) {
12
13
  return useMediaQuery(`(min-width: ${breakpoints[min]}) and (max-width: ${breakpoints[max]})`)
14
+ },
15
+ /**
16
+ * Reactive name of the largest breakpoint whose `min-width` is currently
17
+ * matched. Descending priority with an inclusive `min-width`, giving
18
+ * boundary-parity with a `viewportWidth >= breakpointValue` check.
19
+ *
20
+ * Resolution is independent of the order keys appear in `breakpoints`
21
+ * (they are sorted ascending by pixel value first). When the viewport is
22
+ * narrower than every defined breakpoint it falls back to the smallest one,
23
+ * so the result is always a valid breakpoint name.
24
+ */
25
+ current(): ComputedRef<T> {
26
+ const ordered = (Object.entries(breakpoints) as [T, `${number}px`][])
27
+ .map(([name, value]) => ({ name, value: parseInt(value, 10) }))
28
+ .sort((a, b) => a.value - b.value)
29
+
30
+ const matchers = ordered.map(({ name, value }) => ({
31
+ name,
32
+ matches: useMediaQuery(`(min-width: ${value}px)`)
33
+ }))
34
+
35
+ return computed(() => {
36
+ let result = ordered[0].name
37
+ for (const { name, matches } of matchers) {
38
+ if (matches.value) result = name
39
+ }
40
+ return result
41
+ })
13
42
  }
14
43
  }
15
44
  }
@@ -358,42 +358,82 @@ const calculatePositionWithoutOpener = (
358
358
  // Boundary Correction - Pure Function
359
359
  // ============================================================================
360
360
 
361
+ // Gap (px) kept between the floating element and the boundary edge when it has
362
+ // to be shifted to stay on screen, so the menu never sits flush against (or
363
+ // bleeds past) the viewport edge on narrow/mobile screens.
364
+ const VIEWPORT_MARGIN = 8
365
+
366
+ interface Bounds {
367
+ left: number
368
+ right: number
369
+ top: number
370
+ bottom: number
371
+ }
372
+
373
+ // The visible viewport as a rect. Mirrors the `windowDOMrect` used by the
374
+ // auto-positioning util so collision handling and auto-positioning agree on
375
+ // what "on screen" means.
376
+ const getViewportBounds = (): Bounds => ({
377
+ left: 0,
378
+ top: 0,
379
+ right: window.innerWidth,
380
+ bottom: window.innerHeight
381
+ })
382
+
383
+ // Effective collision boundary: the intersection of the container and the
384
+ // viewport. Clamping to the container alone is not enough — for openerless
385
+ // dropdowns the container resolves to document.body, whose rect can be wider
386
+ // than the viewport (or extend under it) on narrow screens, letting the menu
387
+ // overflow the right edge. Intersecting with the viewport guarantees the
388
+ // element stays on screen while still honouring a real (narrower) container.
389
+ const getCollisionBounds = (container: DOMRect, viewport: Bounds): Bounds => ({
390
+ left: Math.max(container.left, viewport.left),
391
+ right: Math.min(container.right, viewport.right),
392
+ top: Math.max(container.top, viewport.top),
393
+ bottom: Math.min(container.bottom, viewport.bottom)
394
+ })
395
+
361
396
  const applyBoundaryCorrections = (
362
397
  realPosition: FzAbsolutePosition,
363
398
  element: DOMRect,
364
399
  container: DOMRect,
365
- transform: Transform
400
+ transform: Transform,
401
+ viewport: Bounds = getViewportBounds(),
402
+ margin: number = VIEWPORT_MARGIN
366
403
  ): { position: FzAbsolutePosition; transform: Transform } => {
367
404
  const correctedPosition = { ...realPosition }
368
405
  const correctedTransform = { ...transform }
369
406
 
370
- // Left boundary
371
- if (realPosition.x < container.left) {
372
- correctedPosition.x = container.left
407
+ const bounds = getCollisionBounds(container, viewport)
408
+
409
+ // --- Horizontal ---
410
+ // Inset the usable area by the margin, but never produce an inverted range
411
+ // when the element is wider than the available space (keep the left edge
412
+ // anchored so the element starts on screen rather than vanishing).
413
+ const minLeft = bounds.left + margin
414
+ const maxLeft = Math.max(minLeft, bounds.right - margin - element.width)
415
+
416
+ // Right overflow: shift the element left so its right edge stays on screen.
417
+ if (correctedPosition.x > maxLeft) {
418
+ correctedPosition.x = maxLeft
373
419
  correctedTransform.x = 0
374
420
  }
375
-
376
- // Right boundary
377
- if (realPosition.x + element.width > container.right) {
378
- const fixedX = container.right - element.width
379
- if (fixedX > 0) {
380
- correctedPosition.x = fixedX
381
- }
421
+ // Left overflow / clamp: never let the left edge cross the margin.
422
+ if (correctedPosition.x < minLeft) {
423
+ correctedPosition.x = minLeft
382
424
  correctedTransform.x = 0
383
425
  }
384
426
 
385
- // Top boundary
386
- if (realPosition.y < container.top) {
387
- correctedPosition.y = container.top
427
+ // --- Vertical ---
428
+ const minTop = bounds.top + margin
429
+ const maxTop = Math.max(minTop, bounds.bottom - margin - element.height)
430
+
431
+ if (correctedPosition.y > maxTop) {
432
+ correctedPosition.y = maxTop
388
433
  correctedTransform.y = 0
389
434
  }
390
-
391
- // Bottom boundary
392
- if (realPosition.y + element.height > container.bottom) {
393
- const fixedY = container.bottom - element.height
394
- if (fixedY > 0) {
395
- correctedPosition.y = fixedY
396
- }
435
+ if (correctedPosition.y < minTop) {
436
+ correctedPosition.y = minTop
397
437
  correctedTransform.y = 0
398
438
  }
399
439
 
@@ -1 +0,0 @@
1
- {"program":{"fileNames":["../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.esnext.intl.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/@vue+shared@3.4.13/node_modules/@vue/shared/dist/shared.d.ts","../../node_modules/.pnpm/@vue+reactivity@3.4.13/node_modules/@vue/reactivity/dist/reactivity.d.ts","../../node_modules/.pnpm/@vue+runtime-core@3.4.13/node_modules/@vue/runtime-core/dist/runtime-core.d.ts","../../node_modules/.pnpm/csstype@3.1.3/node_modules/csstype/index.d.ts","../../node_modules/.pnpm/@vue+runtime-dom@3.4.13/node_modules/@vue/runtime-dom/dist/runtime-dom.d.ts","../../node_modules/.pnpm/vue@3.4.13_typescript@5.3.3/node_modules/vue/jsx-runtime/index.d.ts","../../node_modules/.pnpm/@babel+types@7.23.6/node_modules/@babel/types/lib/index.d.ts","../../node_modules/.pnpm/@babel+parser@7.23.6/node_modules/@babel/parser/typings/babel-parser.d.ts","../../node_modules/.pnpm/source-map-js@1.0.2/node_modules/source-map-js/source-map.d.ts","../../node_modules/.pnpm/@vue+compiler-core@3.4.13/node_modules/@vue/compiler-core/dist/compiler-core.d.ts","../../node_modules/.pnpm/@vue+compiler-dom@3.4.13/node_modules/@vue/compiler-dom/dist/compiler-dom.d.ts","../../node_modules/.pnpm/vue@3.4.13_typescript@5.3.3/node_modules/vue/dist/vue.d.mts","./src/types.ts","./src/utils/index.ts","./src/composables/usefloating.ts","./src/composables/index.ts","./src/fzfloating.vue.ts","./__vls_types.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/buffer@5.7.1/node_modules/buffer/index.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@5.26.5/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/dom-events.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/globals.global.d.ts","../../node_modules/.pnpm/@types+node@18.19.7/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/@types+estree@1.0.5/node_modules/@types/estree/index.d.ts","../../node_modules/.pnpm/rollup@4.9.5/node_modules/rollup/dist/rollup.d.ts","../../node_modules/.pnpm/rollup@4.9.5/node_modules/rollup/dist/parseast.d.ts","../../node_modules/.pnpm/vite@5.0.11_@types+node@18.19.7/node_modules/vite/types/hmrpayload.d.ts","../../node_modules/.pnpm/vite@5.0.11_@types+node@18.19.7/node_modules/vite/types/customevent.d.ts","../../node_modules/.pnpm/esbuild@0.19.11/node_modules/esbuild/lib/main.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/previous-map.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/input.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/css-syntax-error.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/declaration.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/root.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/warning.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/lazy-result.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/no-work-result.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/processor.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/result.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/document.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/rule.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/node.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/comment.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/container.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/at-rule.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/list.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/postcss.d.ts","../../node_modules/.pnpm/postcss@8.4.33/node_modules/postcss/lib/postcss.d.mts","../../node_modules/.pnpm/vite@5.0.11_@types+node@18.19.7/node_modules/vite/types/importglob.d.ts","../../node_modules/.pnpm/vite@5.0.11_@types+node@18.19.7/node_modules/vite/types/metadata.d.ts","../../node_modules/.pnpm/vite@5.0.11_@types+node@18.19.7/node_modules/vite/dist/node/index.d.ts","../../node_modules/.pnpm/magic-string@0.30.5/node_modules/magic-string/dist/magic-string.es.d.mts","../../node_modules/.pnpm/typescript@5.3.3/node_modules/typescript/lib/typescript.d.ts","../../node_modules/.pnpm/@vue+compiler-sfc@3.4.13/node_modules/@vue/compiler-sfc/dist/compiler-sfc.d.ts","../../node_modules/.pnpm/vue@3.4.13_typescript@5.3.3/node_modules/vue/compiler-sfc/index.d.mts","../../node_modules/.pnpm/@vitejs+plugin-vue@4.6.2_vite@5.0.11_@types+node@18.19.7__vue@3.4.13_typescript@5.3.3_/node_modules/@vitejs/plugin-vue/dist/index.d.mts","./vite.config.ts","../../node_modules/.pnpm/@vitest+utils@1.2.0/node_modules/@vitest/utils/dist/types.d.ts","../../node_modules/.pnpm/@vitest+utils@1.2.0/node_modules/@vitest/utils/dist/helpers.d.ts","../../node_modules/.pnpm/@sinclair+typebox@0.27.8/node_modules/@sinclair/typebox/typebox.d.ts","../../node_modules/.pnpm/@jest+schemas@29.6.3/node_modules/@jest/schemas/build/index.d.ts","../../node_modules/.pnpm/pretty-format@29.7.0/node_modules/pretty-format/build/index.d.ts","../../node_modules/.pnpm/@vitest+utils@1.2.0/node_modules/@vitest/utils/dist/index.d.ts","../../node_modules/.pnpm/@vitest+runner@1.2.0/node_modules/@vitest/runner/dist/tasks-rsxe_qlo.d.ts","../../node_modules/.pnpm/@vitest+utils@1.2.0/node_modules/@vitest/utils/dist/types-widbdqe5.d.ts","../../node_modules/.pnpm/@vitest+utils@1.2.0/node_modules/@vitest/utils/dist/diff.d.ts","../../node_modules/.pnpm/@vitest+runner@1.2.0/node_modules/@vitest/runner/dist/types.d.ts","../../node_modules/.pnpm/@vitest+utils@1.2.0/node_modules/@vitest/utils/dist/error.d.ts","../../node_modules/.pnpm/@vitest+runner@1.2.0/node_modules/@vitest/runner/dist/index.d.ts","../../node_modules/.pnpm/vite-node@1.2.0_@types+node@18.19.7/node_modules/vite-node/dist/trace-mapping.d-aa9jxpth.d.ts","../../node_modules/.pnpm/vite-node@1.2.0_@types+node@18.19.7/node_modules/vite-node/dist/index-ieujlejc.d.ts","../../node_modules/.pnpm/vite-node@1.2.0_@types+node@18.19.7/node_modules/vite-node/dist/index.d.ts","../../node_modules/.pnpm/@vitest+snapshot@1.2.0/node_modules/@vitest/snapshot/dist/environment-1emuyggi.d.ts","../../node_modules/.pnpm/@vitest+snapshot@1.2.0/node_modules/@vitest/snapshot/dist/index-k5cwkijb.d.ts","../../node_modules/.pnpm/@vitest+snapshot@1.2.0/node_modules/@vitest/snapshot/dist/index.d.ts","../../node_modules/.pnpm/@vitest+expect@1.2.0/node_modules/@vitest/expect/dist/chai.d.cts","../../node_modules/.pnpm/@vitest+expect@1.2.0/node_modules/@vitest/expect/dist/index.d.ts","../../node_modules/.pnpm/@vitest+expect@1.2.0/node_modules/@vitest/expect/index.d.ts","../../node_modules/.pnpm/@vitest+runner@1.2.0/node_modules/@vitest/runner/dist/utils.d.ts","../../node_modules/.pnpm/tinybench@2.5.1/node_modules/tinybench/dist/index.d.ts","../../node_modules/.pnpm/vite-node@1.2.0_@types+node@18.19.7/node_modules/vite-node/dist/client.d.ts","../../node_modules/.pnpm/@vitest+snapshot@1.2.0/node_modules/@vitest/snapshot/dist/manager.d.ts","../../node_modules/.pnpm/vite-node@1.2.0_@types+node@18.19.7/node_modules/vite-node/dist/server.d.ts","../../node_modules/.pnpm/vitest@1.2.0_@types+node@18.19.7_jsdom@23.2.0/node_modules/vitest/dist/reporters-trlzlobr.d.ts","../../node_modules/.pnpm/vitest@1.2.0_@types+node@18.19.7_jsdom@23.2.0/node_modules/vitest/dist/config.d.ts","../../node_modules/.pnpm/vitest@1.2.0_@types+node@18.19.7_jsdom@23.2.0/node_modules/vitest/config.d.ts","./vitest.config.ts","./src/index.ts","../../node_modules/.pnpm/vitest@1.2.0_@types+node@18.19.7_jsdom@23.2.0/node_modules/vitest/dist/suite-6pt_ep5v.d.ts","../../node_modules/.pnpm/@vitest+spy@1.2.0/node_modules/@vitest/spy/dist/index.d.ts","../../node_modules/.pnpm/@vitest+snapshot@1.2.0/node_modules/@vitest/snapshot/dist/environment.d.ts","../../node_modules/.pnpm/vitest@1.2.0_@types+node@18.19.7_jsdom@23.2.0/node_modules/vitest/dist/index.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/constants/dom-events.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/createdomevent.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/types.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/vuewrapper.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/interfaces/wrapperlike.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/basewrapper.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/domwrapper.d.ts","../../node_modules/.pnpm/vue-component-type-helpers@1.8.27/node_modules/vue-component-type-helpers/index.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/mount.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/rendertostring.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/components/routerlinkstub.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/errorwrapper.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/vnodetransformers/util.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/vnodetransformers/stubcomponentstransformer.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/config.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/utils/flushpromises.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/utils/autounmount.d.ts","../../node_modules/.pnpm/@vue+test-utils@2.4.3_@vue+server-renderer@3.4.13_vue@3.4.13_typescript@5.3.3___vue@3.4.13_typescript@5.3.3_/node_modules/@vue/test-utils/dist/index.d.ts","./src/__tests__/fzfloating.spec.ts"],"fileInfos":[{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0",{"version":"0","affectsGlobalScope":true},"0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0","0",{"version":"0","affectsGlobalScope":true},"0",{"version":"0","affectsGlobalScope":true},"0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0",{"version":"0","affectsGlobalScope":true},"0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0","0"],"root":[[59,64],185,215,216,239],"options":{"composite":true,"esModuleInterop":true,"jsx":1,"jsxImportSource":"vue","module":99,"noImplicitThis":true,"skipLibCheck":true,"strict":true,"target":99,"useDefineForClassFields":true},"fileIdsList":[[53],[188],[65],[101],[102,107,135],[103,114,115,122,132,143],[103,104,114,122],[105,144],[106,107,115,123],[107,132,140],[108,110,114,122],[101,109],[110,111],[114],[112,114],[101,114],[114,115,116,132,143],[114,115,116,129,132,135],[99,148],[110,114,117,122,132,143],[114,115,117,118,122,132,140,143],[117,119,132,140,143],[65,66,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150],[114,120],[121,143,148],[110,114,122,132],[123],[124],[101,125],[126,142,148],[127],[128],[114,129,130],[129,131,144,146],[102,114,132,133,134,135],[102,132,134],[132,133],[135],[136],[101,132],[114,138,139],[138,139],[107,122,132,140],[141],[122,142],[102,117,128,143],[107,144],[132,145],[121,146],[147],[102,107,114,116,125,132,143,146,148],[132,149],[179,183,212],[191,194],[205],[191,192,194,195,196],[191],[191,192,194],[191,192],[201],[190,201],[190,201,202],[190,193],[186],[186,187,190],[190],[47,53,54,55],[56],[53,54,55,56,176,180,181],[47],[47,48,49,51],[48,49,50],[58,221,222,223,224,225,227],[58],[223,224,227,234],[221],[58,223,226],[223,224,226,227,229,230,231,232,235,236,237],[58,221,222,223,224,227],[58,223,224,228],[58,223,229],[58,224],[58,233],[58,223,226,227],[172],[170,172],[161,169,170,171,173],[159],[162,167,172,175],[158,175],[162,163,166,167,168,175],[162,163,164,166,167,175],[159,160,161,162,163,167,168,169,171,172,173,175],[175],[55,159,160,161,162,163,164,166,167,168,169,170,171,172,173,174],[55,175],[162,164,165,167,168,175],[166,175],[167,168,172,175],[160,170],[189],[153,178],[152],[55],[76,80,143],[76,132,143],[71],[73,76,140,143],[122,140],[151],[71,151],[73,76,122,143],[68,69,72,75,102,114,132,143],[68,74],[72,76,102,135,143,151],[102,151],[92,102,151],[70,71,151],[76],[70,71,72,73,74,75,76,77,78,80,81,82,83,84,85,86,87,88,89,90,91,93,94,95,96,97,98],[76,83,84],[74,76,84,85],[75],[68,71,76],[76,80,84,85],[80],[74,76,79,143],[68,73,74,76,80,83],[102,132],[71,76,92,102,148,151],[198,199],[198],[179,198,199,212],[114,115,117,118,119,122,132,140,143,149,151,153,154,155,156,157,176,177,178],[155],[153],[213],[115,148,179,191,197,200,203,204,206,207,208,209,210,211,212],[115,148,179,191,194,197,200,203,204,206,207,208,209,210,211,212,213,217,218,219],[197,207,208,212],[182],[51,57],[51],[52,58],[52,59,63,220,238],[52,61],[52,58,59,60],[52,58,59,62],[52,59,62,63],[52,59],[52,124,143,179,184,212],[52,143,185,214]],"referencedMap":[[54,1],[189,2],[65,3],[66,3],[101,4],[102,5],[103,6],[104,7],[105,8],[106,9],[107,10],[108,11],[109,12],[110,13],[111,13],[113,14],[112,15],[114,16],[115,17],[116,18],[100,19],[117,20],[118,21],[119,22],[151,23],[120,24],[121,25],[122,26],[123,27],[124,28],[125,29],[126,30],[127,31],[128,32],[129,33],[130,33],[131,34],[132,35],[134,36],[133,37],[135,38],[136,39],[137,40],[138,41],[139,42],[140,43],[141,44],[142,45],[143,46],[144,47],[145,48],[146,49],[147,50],[148,51],[149,52],[184,53],[205,54],[206,55],[197,56],[192,57],[195,58],[207,59],[219,60],[202,61],[203,62],[210,62],[194,63],[196,63],[187,64],[191,65],[193,66],[56,67],[57,68],[182,69],[48,70],[49,71],[51,72],[226,73],[231,74],[235,75],[222,76],[227,77],[238,78],[225,79],[229,80],[230,81],[223,74],[237,82],[234,83],[233,74],[224,84],[173,85],[171,86],[172,87],[160,88],[161,86],[168,89],[159,90],[164,91],[165,92],[170,93],[176,94],[175,95],[158,96],[166,97],[167,98],[162,99],[169,85],[163,100],[190,101],[154,102],[153,103],[55,104],[83,105],[90,106],[82,105],[97,107],[74,108],[73,109],[96,110],[91,111],[94,112],[76,113],[75,114],[71,115],[70,116],[93,117],[72,118],[77,119],[81,119],[99,120],[98,119],[85,121],[86,122],[88,123],[84,124],[87,125],[92,110],[79,126],[80,127],[89,128],[69,129],[95,130],[209,131],[199,132],[200,131],[211,133],[179,134],[156,135],[178,136],[214,137],[213,138],[220,139],[212,138],[217,140],[183,141],[58,142],[52,143],[64,144],[239,145],[62,146],[61,147],[63,148],[216,149],[59,144],[60,150],[185,151],[215,152]],"exportedModulesMap":[[54,1],[189,2],[65,3],[66,3],[101,4],[102,5],[103,6],[104,7],[105,8],[106,9],[107,10],[108,11],[109,12],[110,13],[111,13],[113,14],[112,15],[114,16],[115,17],[116,18],[100,19],[117,20],[118,21],[119,22],[151,23],[120,24],[121,25],[122,26],[123,27],[124,28],[125,29],[126,30],[127,31],[128,32],[129,33],[130,33],[131,34],[132,35],[134,36],[133,37],[135,38],[136,39],[137,40],[138,41],[139,42],[140,43],[141,44],[142,45],[143,46],[144,47],[145,48],[146,49],[147,50],[148,51],[149,52],[184,53],[205,54],[206,55],[197,56],[192,57],[195,58],[207,59],[219,60],[202,61],[203,62],[210,62],[194,63],[196,63],[187,64],[191,65],[193,66],[56,67],[57,68],[182,69],[48,70],[49,71],[51,72],[226,73],[231,74],[235,75],[222,76],[227,77],[238,78],[225,79],[229,80],[230,81],[223,74],[237,82],[234,83],[233,74],[224,84],[173,85],[171,86],[172,87],[160,88],[161,86],[168,89],[159,90],[164,91],[165,92],[170,93],[176,94],[175,95],[158,96],[166,97],[167,98],[162,99],[169,85],[163,100],[190,101],[154,102],[153,103],[55,104],[83,105],[90,106],[82,105],[97,107],[74,108],[73,109],[96,110],[91,111],[94,112],[76,113],[75,114],[71,115],[70,116],[93,117],[72,118],[77,119],[81,119],[99,120],[98,119],[85,121],[86,122],[88,123],[84,124],[87,125],[92,110],[79,126],[80,127],[89,128],[69,129],[95,130],[209,131],[199,132],[200,131],[211,133],[179,134],[156,135],[178,136],[214,137],[213,138],[220,139],[212,138],[217,140],[183,141],[58,142],[52,143],[64,144],[239,145],[62,146],[61,147],[63,148],[216,149],[59,144],[60,150],[185,151],[215,152]],"semanticDiagnosticsPerFile":[54,53,189,188,152,65,66,101,102,103,104,105,106,107,108,109,110,111,113,112,114,115,116,100,150,117,118,119,151,120,121,122,123,124,125,126,127,128,129,130,131,132,134,133,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,184,204,205,206,197,192,195,207,201,219,202,203,210,218,194,196,187,191,193,186,56,57,182,48,49,51,47,226,231,235,221,222,227,232,238,225,229,230,223,237,236,234,233,224,67,50,157,180,173,171,172,160,161,168,159,164,174,165,170,176,175,158,166,167,162,169,163,190,154,153,55,208,45,46,8,9,11,10,2,12,13,14,15,16,17,18,19,3,4,20,24,21,22,23,25,26,27,5,28,29,30,31,6,35,32,33,34,36,7,37,42,43,38,39,40,41,1,44,181,83,90,82,97,74,73,96,91,94,76,75,71,70,93,72,77,78,81,68,99,98,85,86,88,84,87,92,79,80,89,69,95,209,199,200,211,198,179,156,155,177,178,214,213,220,212,217,228,183,58,52,64,239,62,61,63,216,59,60,185,215],"affectedFilesPendingEmit":[239,62,61,63,216,59,60,185,215],"emitSignatures":[59,60,61,62,63,185,215,216,239]},"version":"5.3.3"}