{"version":3,"file":"index.mjs","sources":["../../utils/dist/index.mjs","../src/listener.ts","../src/clickoutside.ts","../src/display.ts","../src/shared/utils.ts","../src/full-screen.ts","../src/hover.ts","../src/intersection.ts","../src/manual-ref.ts","../src/modifier.ts","../src/mounted.ts","../src/moving.ts","../src/pointer.ts","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs","../../../node_modules/.pnpm/@floating-ui+core@1.7.5/node_modules/@floating-ui/core/dist/floating-ui.core.mjs","../../../node_modules/.pnpm/@floating-ui+utils@0.2.11/node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs","../../../node_modules/.pnpm/@floating-ui+dom@1.7.6/node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/resizeObservers.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/hasActiveObservations.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/hasSkippedObservations.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/deliverResizeLoopError.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverBoxOptions.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/freeze.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverSize.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/DOMRectReadOnly.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/element.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/global.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/calculateBoxSize.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverEntry.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/calculateDepthForNode.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/broadcastActiveObservations.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/algorithms/gatherActiveObservationsAtDepth.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/process.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/queueMicroTask.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/queueResizeObserver.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/utils/scheduler.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObservation.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverDetail.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserverController.js","../../../node_modules/.pnpm/@juggle+resize-observer@3.4.0/node_modules/@juggle/resize-observer/lib/ResizeObserver.js","../src/resize.ts","../src/rtl.ts","../src/popper.ts","../src/theme.ts","../src/timer-record.ts","../src/trigger-handler.ts","../src/virtual.ts"],"sourcesContent":["const y = typeof window < \"u\";\nvar Ot;\nconst yn = y && ((Ot = window == null ? void 0 : window.navigator) == null ? void 0 : Ot.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent), re = Object.prototype.toString, oe = Object.prototype.hasOwnProperty;\nfunction B(t, e) {\n  return re.call(t) === `[object ${e}]`;\n}\nfunction Mn(t, e) {\n  return oe.call(t, e);\n}\nfunction M(t) {\n  return t != null;\n}\nfunction ie(t) {\n  return t == null;\n}\nfunction Sn(t) {\n  return typeof t == \"number\";\n}\nfunction se(t) {\n  return Number.isNaN(t);\n}\nfunction wn(t) {\n  return typeof t == \"string\";\n}\nfunction En(t) {\n  return typeof t == \"boolean\";\n}\nfunction An(t) {\n  return t === !0;\n}\nfunction Nn(t) {\n  return t === !1;\n}\nfunction Fn(t) {\n  return typeof t == \"symbol\";\n}\nfunction On(t) {\n  return typeof t == \"bigint\";\n}\nfunction $n(t) {\n  return Array.isArray(t);\n}\nfunction Y(t) {\n  return B(t, \"Object\");\n}\nfunction Tn(t) {\n  return !!t && typeof t.then == \"function\" && typeof t.catch == \"function\";\n}\nfunction $t(t) {\n  return typeof t == \"function\";\n}\nfunction Cn(t) {\n  return B(t, \"Set\");\n}\nfunction Rn(t) {\n  return B(t, \"Map\");\n}\nfunction _n(t) {\n  return B(t, \"Date\");\n}\nfunction kn(t) {\n  return B(t, \"RegExp\");\n}\nfunction xn(t) {\n  return Array.isArray(t) || typeof t == \"string\" ? t.length === 0 : t instanceof Map || t instanceof Set ? t.size === 0 : Y(t) ? Object.keys(t).length === 0 : typeof t == \"number\" ? se(t) : ie(t);\n}\nfunction Dn(t, e = !1) {\n  return !e && !y ? !1 : !!(t && \"nodeType\" in t);\n}\nfunction G(t) {\n  return M(t) && typeof t[Symbol.iterator] == \"function\";\n}\nfunction it() {\n}\nfunction ce() {\n  return !0;\n}\nfunction In() {\n  return !1;\n}\nfunction Ln(t, e = 1, n = 1) {\n  const r = [];\n  for (let o = 0; o < t; ++o)\n    r.push(e + o * n);\n  return r;\n}\nfunction ae(t) {\n  return Object.prototype.toString.call(t).slice(8, -1);\n}\nfunction Hn(t = 16) {\n  const e = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890\", n = e.length;\n  let r = \"\";\n  for (; t--; )\n    r += e.charAt(Math.floor(Math.random() * n));\n  return r;\n}\nasync function Pn(t, e = {}) {\n  if (t.length) {\n    for (const [n, r] of t)\n      if (typeof n == \"function\" ? n() : n)\n        return typeof e.beforeMatchAny == \"function\" && await e.beforeMatchAny(), await r(), typeof e.afterMatchAny == \"function\" && await e.afterMatchAny(), !0;\n  }\n  return !1;\n}\nasync function Bn(t) {\n  if (!y) return !1;\n  try {\n    return await navigator.clipboard.writeText(t), !0;\n  } catch {\n    let e = !1;\n    const n = document.createElement(\"textarea\"), r = document.activeElement;\n    n.value = t, n.setAttribute(\"readonly\", \"\"), n.style.contain = \"strict\", n.style.position = \"absolute\", n.style.height = \"0\", n.style.fontSize = \"12pt\";\n    const o = document.getSelection(), i = o ? o.rangeCount > 0 && o.getRangeAt(0) : null;\n    return document.body.appendChild(n), n.select(), n.selectionStart = 0, n.selectionEnd = t.length, e = document.execCommand(\"copy\"), document.body.removeChild(n), i && (o.removeAllRanges(), o.addRange(i)), r && r.focus(), e;\n  }\n}\nconst fe = \"[-\\\\+]?\\\\d+%?\", ue = \"[-\\\\+]?\\\\d*\\\\.\\\\d+%?\", F = `(?:${ue})|(?:${fe})`, le = `[\\\\s|\\\\(]+(${F})[,|\\\\s]+(${F})[,|\\\\s]+(${F})\\\\s*\\\\)?`, U = `[\\\\s|\\\\(]+(${F})[,|\\\\s]+(${F})[,|\\\\s]+(${F})[,|\\\\s]+(${F})\\\\s*\\\\)?`, Tt = new RegExp(`rgb${le}`), Ct = new RegExp(`rgba${U}`), Rt = new RegExp(`hsl${U}`), _t = new RegExp(`hsla${U}`), kt = new RegExp(`hsv${U}`), xt = new RegExp(`hsva${U}`), Dt = /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, It = /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, Lt = /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, Ht = /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, W = Object.freeze({\n  aliceblue: \"f0f8ff\",\n  antiquewhite: \"faebd7\",\n  aqua: \"0ff\",\n  aquamarine: \"7fffd4\",\n  azure: \"f0ffff\",\n  beige: \"f5f5dc\",\n  bisque: \"ffe4c4\",\n  black: \"000\",\n  blanchedalmond: \"ffebcd\",\n  blue: \"00f\",\n  blueviolet: \"8a2be2\",\n  brown: \"a52a2a\",\n  burlywood: \"deb887\",\n  burntsienna: \"ea7e5d\",\n  cadetblue: \"5f9ea0\",\n  chartreuse: \"7fff00\",\n  chocolate: \"d2691e\",\n  coral: \"ff7f50\",\n  cornflowerblue: \"6495ed\",\n  cornsilk: \"fff8dc\",\n  crimson: \"dc143c\",\n  cyan: \"0ff\",\n  darkblue: \"00008b\",\n  darkcyan: \"008b8b\",\n  darkgoldenrod: \"b8860b\",\n  darkgray: \"a9a9a9\",\n  darkgreen: \"006400\",\n  darkgrey: \"a9a9a9\",\n  darkkhaki: \"bdb76b\",\n  darkmagenta: \"8b008b\",\n  darkolivegreen: \"556b2f\",\n  darkorange: \"ff8c00\",\n  darkorchid: \"9932cc\",\n  darkred: \"8b0000\",\n  darksalmon: \"e9967a\",\n  darkseagreen: \"8fbc8f\",\n  darkslateblue: \"483d8b\",\n  darkslategray: \"2f4f4f\",\n  darkslategrey: \"2f4f4f\",\n  darkturquoise: \"00ced1\",\n  darkviolet: \"9400d3\",\n  deeppink: \"ff1493\",\n  deepskyblue: \"00bfff\",\n  dimgray: \"696969\",\n  dimgrey: \"696969\",\n  dodgerblue: \"1e90ff\",\n  firebrick: \"b22222\",\n  floralwhite: \"fffaf0\",\n  forestgreen: \"228b22\",\n  fuchsia: \"f0f\",\n  gainsboro: \"dcdcdc\",\n  ghostwhite: \"f8f8ff\",\n  gold: \"ffd700\",\n  goldenrod: \"daa520\",\n  gray: \"808080\",\n  green: \"008000\",\n  greenyellow: \"adff2f\",\n  grey: \"808080\",\n  honeydew: \"f0fff0\",\n  hotpink: \"ff69b4\",\n  indianred: \"cd5c5c\",\n  indigo: \"4b0082\",\n  ivory: \"fffff0\",\n  khaki: \"f0e68c\",\n  lavender: \"e6e6fa\",\n  lavenderblush: \"fff0f5\",\n  lawngreen: \"7cfc00\",\n  lemonchiffon: \"fffacd\",\n  lightblue: \"add8e6\",\n  lightcoral: \"f08080\",\n  lightcyan: \"e0ffff\",\n  lightgoldenrodyellow: \"fafad2\",\n  lightgray: \"d3d3d3\",\n  lightgreen: \"90ee90\",\n  lightgrey: \"d3d3d3\",\n  lightpink: \"ffb6c1\",\n  lightsalmon: \"ffa07a\",\n  lightseagreen: \"20b2aa\",\n  lightskyblue: \"87cefa\",\n  lightslategray: \"789\",\n  lightslategrey: \"789\",\n  lightsteelblue: \"b0c4de\",\n  lightyellow: \"ffffe0\",\n  lime: \"0f0\",\n  limegreen: \"32cd32\",\n  linen: \"faf0e6\",\n  magenta: \"f0f\",\n  maroon: \"800000\",\n  mediumaquamarine: \"66cdaa\",\n  mediumblue: \"0000cd\",\n  mediumorchid: \"ba55d3\",\n  mediumpurple: \"9370db\",\n  mediumseagreen: \"3cb371\",\n  mediumslateblue: \"7b68ee\",\n  mediumspringgreen: \"00fa9a\",\n  mediumturquoise: \"48d1cc\",\n  mediumvioletred: \"c71585\",\n  midnightblue: \"191970\",\n  mintcream: \"f5fffa\",\n  mistyrose: \"ffe4e1\",\n  moccasin: \"ffe4b5\",\n  navajowhite: \"ffdead\",\n  navy: \"000080\",\n  oldlace: \"fdf5e6\",\n  olive: \"808000\",\n  olivedrab: \"6b8e23\",\n  orange: \"ffa500\",\n  orangered: \"ff4500\",\n  orchid: \"da70d6\",\n  palegoldenrod: \"eee8aa\",\n  palegreen: \"98fb98\",\n  paleturquoise: \"afeeee\",\n  palevioletred: \"db7093\",\n  papayawhip: \"ffefd5\",\n  peachpuff: \"ffdab9\",\n  peru: \"cd853f\",\n  pink: \"ffc0cb\",\n  plum: \"dda0dd\",\n  powderblue: \"b0e0e6\",\n  purple: \"800080\",\n  rebeccapurple: \"663399\",\n  red: \"f00\",\n  rosybrown: \"bc8f8f\",\n  royalblue: \"4169e1\",\n  saddlebrown: \"8b4513\",\n  salmon: \"fa8072\",\n  sandybrown: \"f4a460\",\n  seagreen: \"2e8b57\",\n  seashell: \"fff5ee\",\n  sienna: \"a0522d\",\n  silver: \"c0c0c0\",\n  skyblue: \"87ceeb\",\n  slateblue: \"6a5acd\",\n  slategray: \"708090\",\n  slategrey: \"708090\",\n  snow: \"fffafa\",\n  springgreen: \"00ff7f\",\n  steelblue: \"4682b4\",\n  tan: \"d2b48c\",\n  teal: \"008080\",\n  thistle: \"d8bfd8\",\n  tomato: \"ff6347\",\n  turquoise: \"40e0d0\",\n  violet: \"ee82ee\",\n  wheat: \"f5deb3\",\n  white: \"fff\",\n  whitesmoke: \"f5f5f5\",\n  yellow: \"ff0\",\n  yellowgreen: \"9acd32\"\n}), de = Object.freeze(new Set(Object.keys(W)));\nfunction Un(t) {\n  return t = String(t).trim().toLowerCase(), t ? t === \"transparent\" || W[t] ? !0 : t === \"transparent\" || de.has(t) || Tt.test(t) || Ct.test(t) || Rt.test(t) || _t.test(t) || kt.test(t) || xt.test(t) || Dt.test(t) || It.test(t) || Lt.test(t) || Ht.test(t) : !1;\n}\nfunction he(t) {\n  if (t = t.toString().trim().toLowerCase(), t === \"transparent\")\n    return { r: 0, g: 0, b: 0, a: 0, format: \"name\", toString: S };\n  let e = !1;\n  W[t] && (t = W[t], e = !0);\n  let n;\n  if (n = Tt.exec(t)) {\n    const { r, g: o, b: i } = R(n[1], n[2], n[3]);\n    return {\n      r: r * 255,\n      g: o * 255,\n      b: i * 255,\n      format: \"rgb\",\n      toString: S\n    };\n  }\n  if (n = Ct.exec(t)) {\n    const { r, g: o, b: i } = R(n[1], n[2], n[3]);\n    return {\n      r: r * 255,\n      g: o * 255,\n      b: i * 255,\n      a: C(n[4]),\n      format: \"rgba\",\n      toString: S\n    };\n  }\n  if (n = Rt.exec(t)) {\n    const { h: r, s: o, l: i } = z(n[0], n[1], n[3]);\n    return { h: r * 360, s: o, l: i, format: \"hsl\", toString: H };\n  }\n  if (n = _t.exec(t)) {\n    const { h: r, s: o, l: i } = z(n[0], n[1], n[3]);\n    return {\n      h: r * 360,\n      s: o,\n      l: i,\n      a: C(n[4]),\n      format: \"hsla\",\n      toString: H\n    };\n  }\n  if (n = kt.exec(t)) {\n    const { h: r, s: o, v: i } = j(n[0], n[1], n[3]);\n    return { h: r * 360, s: o, v: i, format: \"hsv\", toString: q };\n  }\n  if (n = xt.exec(t)) {\n    const { h: r, s: o, v: i } = j(n[0], n[1], n[3]);\n    return {\n      h: r * 360,\n      s: o,\n      v: i,\n      a: C(n[4]),\n      format: \"hsva\",\n      toString: q\n    };\n  }\n  return (n = Dt.exec(t)) ? {\n    r: parseInt(`${n[1]}${n[1]}`, 16),\n    g: parseInt(`${n[2]}${n[2]}`, 16),\n    b: parseInt(`${n[3]}${n[3]}`, 16),\n    format: e ? \"name\" : \"hex3\",\n    toString: S\n  } : (n = It.exec(t)) ? {\n    r: parseInt(`${n[1]}${n[1]}`, 16),\n    g: parseInt(`${n[2]}${n[2]}`, 16),\n    b: parseInt(`${n[3]}${n[3]}`, 16),\n    a: mt(`${n[4]}${n[4]}`),\n    format: e ? \"name\" : \"hex4\",\n    toString: S\n  } : (n = Lt.exec(t)) ? {\n    r: parseInt(n[1], 16),\n    g: parseInt(n[2], 16),\n    b: parseInt(n[3], 16),\n    format: e ? \"name\" : \"hex6\",\n    toString: S\n  } : (n = Ht.exec(t)) ? {\n    r: parseInt(n[1], 16),\n    g: parseInt(n[2], 16),\n    b: parseInt(n[3], 16),\n    a: mt(n[4]),\n    format: e ? \"name\" : \"hex8\",\n    toString: S\n  } : null;\n}\nfunction Yn(t) {\n  const { a: e, ...n } = O(t);\n  delete n.format;\n  const r = Bt(n.r, n.g, n.b), o = Ut(n.r, n.g, n.b), i = st(n.r, n.g, n.b), s = ct(n.r, n.g, n.b, e);\n  return {\n    rgb: n,\n    hsl: r,\n    hsv: o,\n    hex: i,\n    alpha: e,\n    rgba: { ...n, a: e, format: \"rgba\" },\n    hsla: { ...r, a: e, format: \"hsla\" },\n    hsva: { ...o, a: e, format: \"hsva\" },\n    hex8: s,\n    gray: Gt(n),\n    origin: t\n  };\n}\nfunction O(t) {\n  let e = { r: 0, g: 0, b: 0 }, n = 1, r;\n  return typeof t == \"string\" ? r = he(t) : r = t, r !== null && typeof r == \"object\" && (\"l\" in r ? e = Pt(r.h, r.s, r.l) : \"v\" in r && (e = pe(r.h, r.s, r.v)), \"a\" in r && (n = C(r.a ?? 1), Number.isNaN(n) && (n = 1)), e = r), { ...e, a: n, format: \"rgba\", toString: S };\n}\nfunction z(t, e, n) {\n  return {\n    h: w(t, 0, 360) / 360,\n    s: w(I(e) ? L(e) : e, 0, 1),\n    l: w(I(n) ? L(n) : n, 0, 1)\n  };\n}\nfunction R(t, e, n) {\n  return {\n    r: w(t, 0, 255) / 255,\n    g: w(e, 0, 255) / 255,\n    b: w(n, 0, 255) / 255\n  };\n}\nfunction j(t, e, n) {\n  return {\n    h: w(t, 0, 360) / 360,\n    s: w(I(e) ? L(e) : e, 0, 1),\n    v: w(I(n) ? L(n) : n, 0, 1)\n  };\n}\nfunction C(t) {\n  return w(I(t) ? L(t) : t, 0, 1);\n}\nfunction Pt(t, e, n) {\n  let r, o, i;\n  if ({ h: t, s: e, l: n } = z(t, e, n), e === 0)\n    r = o = i = n;\n  else {\n    const s = n < 0.5 ? 1 * (1 + e) : n + e - n * e, c = 2 * n - s;\n    r = tt(c, s, t + 1 / 3), o = tt(c, s, t), i = tt(c, s, t - 1 / 3);\n  }\n  return r *= 255, o *= 255, i *= 255, { r, g: o, b: i, toString: S };\n}\nfunction Bt(t, e, n) {\n  ({ r: t, g: e, b: n } = R(t, e, n));\n  const r = Math.max(t, e, n), o = Math.min(t, e, n);\n  let i, s;\n  const c = (r + o) / 2;\n  if (r === o)\n    i = s = 0;\n  else {\n    const a = r - o;\n    switch (s = c > 0.5 ? a / (2 - r - o) : a / (r + o), r) {\n      case t: {\n        i = (e - n) / a + (e < n ? 6 : 0);\n        break;\n      }\n      case e: {\n        i = (n - t) / a + 2;\n        break;\n      }\n      case n: {\n        i = (t - e) / a + 4;\n        break;\n      }\n      default:\n        i = 0;\n    }\n    i *= 60;\n  }\n  return { h: i, s, l: c, toString: H };\n}\nfunction ge(t, e, n) {\n  ({ h: t, s: e, l: n } = z(t, e, n));\n  const r = 0.5 * (2 * n + e * (1 - Math.abs(2 * n - 1)));\n  return e = 2 * (r - n) / r, { h: t * 360, s: e, v: r, toString: q };\n}\nfunction Gn(t, e, n) {\n  ({ h: t, s: e, v: n } = j(t, e, n));\n  const r = 0.5 * n * (2 - e);\n  return e = n * e / (1 - Math.abs(2 * r - 1)), { h: t * 360, s: e, l: r, toString: H };\n}\nfunction pe(t, e, n) {\n  ({ h: t, s: e, v: n } = j(t, e, n)), t *= 6;\n  const r = Math.floor(t), o = t - r, i = n * (1 - e), s = n * (1 - o * e), c = n * (1 - (1 - o) * e), a = r % 6;\n  let f = [n, s, i, i, c, n][a], u = [c, n, n, s, i, i][a], d = [i, i, c, n, n, s][a];\n  return f *= 255, u *= 255, d *= 255, { r: f, g: u, b: d, toString: S };\n}\nfunction Ut(t, e, n) {\n  ({ r: t, g: e, b: n } = R(t, e, n));\n  const r = Math.max(t, e, n), o = Math.min(t, e, n);\n  let i;\n  const s = r, c = r - o, a = r === 0 ? 0 : c / r;\n  if (r === o)\n    i = 0;\n  else {\n    switch (r) {\n      case t: {\n        i = (e - n) / c + (e < n ? 6 : 0);\n        break;\n      }\n      case e: {\n        i = (n - t) / c + 2;\n        break;\n      }\n      case n: {\n        i = (t - e) / c + 4;\n        break;\n      }\n      default:\n        i = 0;\n    }\n    i *= 60;\n  }\n  return { h: i, s: a, v: s, toString: q };\n}\nfunction st(t, e, n, r = !1) {\n  ({ r: t, g: e, b: n } = R(t, e, n));\n  const o = [\n    $(Math.round(t * 255).toString(16)),\n    $(Math.round(e * 255).toString(16)),\n    $(Math.round(n * 255).toString(16))\n  ];\n  return r && T(o[0]) && T(o[1]) && T(o[2]) ? o[0].charAt(0) + o[1].charAt(0) + o[2].charAt(0) : \"#\" + o.join(\"\");\n}\nfunction ct(t, e, n, r, o = !1) {\n  ({ r: t, g: e, b: n } = R(t, e, n));\n  const i = [\n    $(Math.round(t * 255).toString(16)),\n    $(Math.round(e * 255).toString(16)),\n    $(Math.round(n * 255).toString(16)),\n    $(me(C(r)))\n  ];\n  return o && T(i[0]) && T(i[1]) && T(i[2]) && T(i[3]) ? i[0].charAt(0) + i[1].charAt(0) + i[2].charAt(0) + i[3].charAt(0) : \"#\" + i.join(\"\");\n}\nfunction Wn(t, e, n = 0.5) {\n  if (!t && !e) return { r: 0, g: 0, b: 0, a: 1 };\n  if (!t) return O(e);\n  if (!e) return O(t);\n  const r = O(t), o = O(e), i = w(n, 0, 1), s = i * 2 - 1, c = r.a - o.a, f = ((s * c === -1 ? s : (s + c) / (1 + s * c)) + 1) / 2, u = 1 - f;\n  return {\n    r: Math.round(r.r * f + o.r * u),\n    g: Math.round(r.g * f + o.g * u),\n    b: Math.round(r.b * f + o.b * u),\n    a: Math.round(r.a * i + o.a * (1 - i)),\n    format: \"rgba\",\n    toString: S\n  };\n}\nfunction zn(t, e) {\n  const n = O(t);\n  return n.a = C(e), n;\n}\nfunction jn(t = !1, e = \"hex\") {\n  const n = Math.round(Math.random() * 255), r = Math.round(Math.random() * 255), o = Math.round(Math.random() * 255);\n  if (e === \"hex\")\n    return t ? ct(n, r, o, Math.random()) : st(n, r, o);\n  let i;\n  return e === \"hsl\" ? i = Bt(n, r, o) : e === \"hsv\" ? i = Ut(n, r, o) : i = /* @__PURE__ */ Object.create({ r: n, g: r, b: o, toString: S }), t && (i.a = Math.random()), i.toString();\n}\nfunction Yt(t, e = !1, n = \"hex\") {\n  const r = Math.round(Math.random() * 360), o = Math.round(t === \"hard\" ? 80 + Math.random() * 20 : 20 + Math.random() * 70) / 100, i = Math.round(t === \"hard\" ? 40 + Math.random() * 20 : 80 + Math.random() * 15) / 100;\n  if (n === \"hsl\")\n    return H.bind({ h: r, s: o, l: i })();\n  let s;\n  if (n === \"hex\" || n === \"rgb\") {\n    if (s = Pt(r, o, i), n === \"hex\") {\n      const { r: c, g: a, b: f } = s;\n      return e ? ct(c, a, f, Math.random()) : st(c, a, f);\n    }\n  } else n === \"hsv\" && (s = ge(r, o, i));\n  return e && (s.a = Math.random()), s.toString();\n}\nfunction qn(t = !1, e = \"hex\") {\n  return Yt(\"hard\", t, e);\n}\nfunction Kn(t = !1, e = \"hex\") {\n  return Yt(\"soft\", t, e);\n}\nfunction Qn(t) {\n  return Gt(O(t));\n}\nfunction $(t) {\n  return t.length === 1 ? `0${t}` : t.toString();\n}\nfunction T(t) {\n  return t.charAt(0) === t.charAt(1);\n}\nfunction me(t) {\n  return Math.round(parseFloat(t) * 255).toString(16);\n}\nfunction mt(t) {\n  return parseInt(t, 16) / 255;\n}\nfunction w(t, e, n) {\n  return Math.max(e, Math.min(n, parseFloat(t)));\n}\nfunction tt(t, e, n) {\n  return n < 0 && (n += 1), n > 1 && (n -= 1), n < 1 / 6 ? t + (e - t) * 6 * n : n < 1 / 2 ? e : n < 2 / 3 ? t + (e - t) * (2 / 3 - n) * 6 : t;\n}\nfunction I(t) {\n  return String(t).trim().includes(\"%\");\n}\nfunction L(t) {\n  const e = parseFloat(t) / 100;\n  return Number.isNaN(e) ? 0 : e;\n}\nfunction S() {\n  return M(this.a) && this.a >= 0 && this.a < 1 ? `rgba(${this.r}, ${this.g}, ${this.b}, ${this.a})` : `rgb(${this.r}, ${this.g}, ${this.b})`;\n}\nfunction H() {\n  const t = `${this.s * 100}%`, e = `${this.l * 100}%`;\n  return M(this.a) && this.a >= 0 && this.a < 1 ? `hsla(${this.h}, ${t}, ${e}, ${this.a})` : `hsl(${this.h}, ${t}, ${e})`;\n}\nfunction q() {\n  const t = `${this.s * 100}%`, e = `${this.v * 100}%`;\n  return M(this.a) && this.a >= 0 && this.a < 1 ? `hsva(${this.h}, ${t}, ${e}, ${this.a})` : `hsv(${this.h}, ${t}, ${e})`;\n}\nfunction Gt(t) {\n  return (t.r * 0.2126 + t.g * 0.7152 + t.b * 0.0722) / 255;\n}\nlet Wt = 0;\nfunction Xn() {\n  return Wt++;\n}\nfunction Vn(t) {\n  Wt = Math.round(t);\n}\nfunction Zn(t = 0) {\n  return {\n    getCount: () => t++,\n    setCount: (e) => {\n      t = e;\n    }\n  };\n}\nfunction bt(t) {\n  return t & -t;\n}\nfunction Jn(t, e = 0) {\n  const n = new Array(t + 1).fill(0);\n  function r(c, a) {\n    if (!(!a || c >= t))\n      for (c += 1; c <= t; )\n        n[c] += a, c += bt(c);\n  }\n  function o(c = t) {\n    if (c <= 0) return 0;\n    c > t && (c = t);\n    let a = c * e;\n    for (; c > 0; )\n      a += n[c], c -= bt(c);\n    return a;\n  }\n  function i(c) {\n    return o(c + 1) - o(c);\n  }\n  function s(c) {\n    let a = 0, f = t;\n    for (; f > a; ) {\n      const u = Math.floor((a + f) / 2), d = o(u);\n      if (d > c) {\n        f = u;\n        continue;\n      } else if (d < c) {\n        if (a === u)\n          return o(a + 1) <= c ? a + 1 : a;\n        a = u;\n      } else\n        return u;\n    }\n    return a;\n  }\n  return { tree: n, add: r, sum: o, get: i, boundIndex: s };\n}\nconst be = /^\\s*[+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?\\s*$/;\nfunction ye(t, e = !1) {\n  return typeof t == \"number\" ? !Number.isNaN(t) : e ? be.test(String(t)) : !Number.isNaN(parseFloat(t)) || !Number.isNaN(Number(t));\n}\nfunction Me(t) {\n  let e = parseFloat(t);\n  return Number.isNaN(e) && (e = Number(t)), Number.isNaN(e) ? 0 : e;\n}\nfunction Se(t, e) {\n  return e <= 0 ? t.toString() : `${t < 0 ? \"-\" : \"\"}${String(Math.abs(Math.round(t))).padStart(e, \"0\")}`;\n}\nfunction A(t) {\n  return Se(t, 2);\n}\nfunction E(t) {\n  const e = t.toString().split(/[eE]/), n = (e[0].split(\".\")[1] || \"\").length - +(e[1] || 0);\n  return n > 0 ? n : 0;\n}\nfunction vn(t) {\n  return E(t);\n}\nfunction tr(t, e = 3, n = \",\") {\n  if (typeof t != \"number\" && (t = parseFloat(t)), Number.isNaN(t)) return \"0\";\n  let [r, o] = String(t).split(\".\");\n  const i = new RegExp(`(\\\\d+)(\\\\d{${e}})`);\n  for (; i.test(r); )\n    r = r.replace(i, `$1${n}$2`);\n  return o = o ? `.${o}` : \"\", `${r}${o}`;\n}\nfunction zt(t, e) {\n  e = Math.max(Math.round(e), 0);\n  let n = t.toFixed(E(t));\n  const r = n.indexOf(\".\");\n  if (r === -1) return t;\n  const o = n.replace(\".\", \"\").split(\"\"), i = r + e;\n  return o[i] ? (n.charAt(i + 1) === \"5\" ? n = n.substring(0, i + 1) + \"6\" : n = n.substring(0, i + 2), parseFloat(Number(n).toFixed(e))) : t;\n}\nfunction er(t, e, n) {\n  return zt(t * e, n);\n}\nfunction nr(t, e) {\n  if (e < 0 || e > 1)\n    return Math.round(t);\n  const n = Math.ceil(t);\n  return t + 1 - e >= n ? n : Math.floor(t);\n}\nfunction rr(t, e, n) {\n  return Math.max(e, Math.min(n, parseFloat(t)));\n}\nfunction or(t, e, n = 0) {\n  if (t <= 0 || e <= 1) return [t];\n  n < 1 && (n = 1 / 0);\n  const r = [];\n  let o = 0;\n  for (; t >= e && o < n; )\n    r.push(t % e), t = Math.floor(t / e), ++o;\n  return r.push(t), r.reverse();\n}\nconst et = [\"th\", \"st\", \"nd\", \"rd\"];\nfunction ir(t) {\n  if (t = Math.round(t), t <= 0) return `${t}th`;\n  const e = t % 100 > 10 && t % 100 < 14 ? et[0] : et[t % 10] || et[0];\n  return `${t}${e}`;\n}\nconst yt = Object.freeze([\n  \"B\",\n  \"KB\",\n  \"MB\",\n  \"GB\",\n  \"TB\",\n  \"AUTO\"\n]);\nfunction sr(t, e = \"AUTO\", n = !1, r) {\n  typeof r > \"u\" && (typeof n == \"number\" ? (r = n, n = !1) : r = 2);\n  let o = e.toUpperCase();\n  o = yt.includes(o) ? o : \"AUTO\";\n  let i;\n  switch (o) {\n    case \"AUTO\":\n      i = 0;\n      break;\n    case \"KB\":\n      i = 1;\n      break;\n    case \"MB\":\n      i = 2;\n      break;\n    case \"GB\":\n      i = 3;\n      break;\n    case \"TB\":\n      i = 4;\n      break;\n    default:\n      return t;\n  }\n  let s;\n  if (i)\n    s = t / 1024 ** i;\n  else\n    for (s = t; s > 1024 && !(i > 4); ++i)\n      s = s / 1024;\n  return s = zt(s, r), n ? `${s}${o === \"AUTO\" ? yt[Math.min(i, 4)] : o}` : s;\n}\nfunction cr(t, e = 0) {\n  return e === t ? e : (e > t && ([e, t] = [t, e]), Math.random() * (t - e) + e);\n}\nfunction jt(t, e = 15) {\n  return +parseFloat(Number(t).toPrecision(e));\n}\nfunction K(t) {\n  const e = String(t);\n  if (!e.includes(\"e\"))\n    return Number(e.replace(\".\", \"\"));\n  const n = E(t);\n  return n > 0 ? jt(Number(t) * 10 ** n) : Number(t);\n}\nfunction Q(t) {\n  return (...e) => {\n    let n = e[0];\n    for (let r = 1, o = e.length; r < o; ++r)\n      n = t(n, e[r]);\n    return n;\n  };\n}\nconst P = Q((t, e) => {\n  const n = K(t), r = K(e), o = E(t) + E(e);\n  return n * r / 10 ** o;\n}), ar = Q((t, e) => {\n  const n = 10 ** Math.max(E(t), E(e));\n  return (P(t, n) + P(e, n)) / n;\n}), fr = Q((t, e) => {\n  const n = 10 ** Math.max(E(t), E(e));\n  return (P(t, n) - P(e, n)) / n;\n}), ur = Q((t, e) => {\n  const n = K(t), r = K(e);\n  return P(n / r, jt(10 ** (E(e) - E(t))));\n}), we = 1e3, N = 1e3, k = 60, Ee = k * N, lr = k * N, X = 60, qt = X * k, Ae = qt * N, dr = qt * N, Kt = 24, Ne = Kt * X, Qt = Ne * k, Fe = Qt * N, hr = Qt * N, at = 7, Oe = at * Kt, $e = Oe * X, Xt = $e * k, Te = Xt * N, gr = Xt * N, Vt = 3, Ce = 4, Re = Ce * Vt, _e = {\n  y(t, e) {\n    const n = t.getFullYear();\n    return e.length === 4 ? n : n % 1e3 % 100;\n  },\n  M(t, e) {\n    const n = t.getMonth() + 1;\n    return e.length === 2 ? A(n) : n;\n  },\n  d(t, e) {\n    const n = t.getDate();\n    return e.length === 2 ? A(n) : n;\n  },\n  H(t, e) {\n    const n = t.getHours();\n    return e.length === 2 ? A(n) : n;\n  },\n  m(t, e) {\n    const n = t.getMinutes();\n    return e.length === 2 ? A(n) : n;\n  },\n  s(t, e) {\n    const n = t.getSeconds();\n    return e.length === 2 ? A(n) : n;\n  },\n  q(t, e) {\n    const n = Math.ceil((t.getMonth() + 1) / 3);\n    return e.length === 2 ? A(n) : n;\n  }\n}, ke = /[yMdHmsq](\\w)*|./g, xe = /'(.+?)'/g;\nfunction h(t, e = !1) {\n  const n = new Date(t);\n  if (e && Number.isNaN(+n))\n    throw new RangeError(\"Invalid date value\");\n  return typeof t == \"string\" && !t.includes(\":\") && (n.setHours(0), n.setMinutes(0), n.setSeconds(0)), n;\n}\nfunction pr(t, e = \"yyyy-MM-dd HH:mm:ss\") {\n  t = h(t);\n  const n = e.match(ke), r = n == null ? void 0 : n.length;\n  if (!r)\n    return e;\n  let o = 0, i = \"\";\n  for (; o < r; ) {\n    const s = n[o], c = s[0], a = _e[c];\n    a ? i += a(t, s) : i += s, ++o;\n  }\n  return i.replace(xe, \"$1\");\n}\nfunction mr(t) {\n  return t = h(t), `${A(t.getHours())}:${A(t.getMinutes())}:${A(\n    t.getSeconds()\n  )}`;\n}\nfunction ot(t) {\n  return t = h(t), Math.floor(t.getMonth() / 3) + 1;\n}\nconst De = [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\"];\nfunction br(t) {\n  return De[t.getDay()];\n}\nfunction Ie(t, e) {\n  return t = h(t), t.setTime(t.getTime() + e), t;\n}\nfunction Le(t, e) {\n  return e *= N, Ie(t, e);\n}\nfunction He(t, e) {\n  return e *= k, Le(t, e);\n}\nfunction Pe(t, e) {\n  return e *= X, He(t, e);\n}\nfunction yr(t, e) {\n  return e *= 12, Pe(t, e);\n}\nfunction ft(t, e) {\n  return t = h(t), e = ~~e, t.setDate(t.getDate() + e), t;\n}\nfunction Mr(t, e) {\n  return e *= at, ft(t, e);\n}\nfunction ut(t, e) {\n  return t = h(t), e = ~~e, t.setMonth(t.getMonth() + e), t;\n}\nfunction Sr(t, e) {\n  return e *= Vt, ut(t, e);\n}\nfunction wr(t, e) {\n  return e *= Re, ut(t, e);\n}\nfunction Er(t, e = 42, n = 1) {\n  t = h(t);\n  const r = [];\n  for (let o = 0; o < e; ++o)\n    r.push(ft(t, o * n));\n  return r;\n}\nfunction Ar(t, e = 12, n = 1) {\n  t = h(t);\n  const r = [];\n  for (let o = 0; o < e; ++o)\n    r.push(ut(t, o * n));\n  return r;\n}\nfunction Nr(t) {\n  const e = t.getDay() ?? 7;\n  return ft(t, -e);\n}\nfunction Mt(t) {\n  return t = h(t), t.setMilliseconds(0), t;\n}\nfunction St(t) {\n  return t = h(t), t.setSeconds(0, 0), t;\n}\nfunction wt(t) {\n  return t = h(t), t.setMinutes(0, 0, 0), t;\n}\nfunction Et(t) {\n  return t = h(t), t.setHours(0, 0, 0, 0), t;\n}\nfunction Fr(t) {\n  return t = h(t), t.setHours(23, 59, 59, 999), t;\n}\nfunction At(t, e = 0) {\n  e = e % 7, e < 0 && (e += 7), t = h(t);\n  const n = t.getDay(), r = (n < e ? 7 : 0) + n - e;\n  return t.setDate(t.getDate() - r), t.setHours(0, 0, 0, 0), t;\n}\nfunction Be(t) {\n  return t % 4 === 0 && t % 100 !== 0 || t % 400 === 0;\n}\nfunction Ue(t, e) {\n  let n;\n  return e < 7 ? e !== 2 ? n = 30 + e % 2 : Be(t) ? n = 29 : n = 28 : n = 31 - e % 2, n;\n}\nfunction Or(t, e = 1) {\n  t = h(t);\n  const n = t.getFullYear(), r = t.getMonth() + 1, o = t.getDate(), i = Ue(n, r);\n  return e = e % i, e < 0 && (e += i), o < e && t.setMonth(r - 1), t.setDate(e), t.setHours(0, 0, 0, 0), t;\n}\nfunction $r(t) {\n  t = h(t);\n  const e = ot(t);\n  return t.setDate(1), t.setHours(0, 0, 0, 0), t.setMonth((e - 1) * 3), t;\n}\nfunction Tr(t, e = 0) {\n  e = e % 11, e < 0 && (e += 11), t = h(t);\n  const n = t.getMonth(), r = (n < e ? 11 : 0) + n - e;\n  return t.setMonth(t.getMonth() - r), t.setDate(1), t.setHours(0, 0, 0, 0), t;\n}\nfunction lt(t, e) {\n  return t = h(t), e = h(e), e.getTime() - t.getTime();\n}\nfunction Ye(t, e) {\n  const n = lt(t, e) / we;\n  return n > 0 ? Math.floor(n) : Math.ceil(n);\n}\nfunction Ge(t, e) {\n  const n = lt(t, e) / Ee;\n  return n > 0 ? Math.floor(n) : Math.ceil(n);\n}\nfunction We(t, e) {\n  const n = lt(t, e) / Ae;\n  return n > 0 ? Math.floor(n) : Math.ceil(n);\n}\nfunction ze(t, e) {\n  return t = Et(t), e = Et(e), (e.getTime() - t.getTime()) / Fe;\n}\nfunction Cr(t, e, n = 0) {\n  return t = At(t, n), e = At(e, n), (e.getTime() - t.getTime()) / Te;\n}\nfunction je(t, e) {\n  t = h(t), e = h(e);\n  const n = e.getFullYear() - t.getFullYear(), r = e.getMonth() - t.getMonth();\n  return n * 12 + r;\n}\nfunction Rr(t, e) {\n  t = h(t), e = h(e);\n  const n = e.getFullYear() - t.getFullYear(), r = ot(e) - ot(t);\n  return n * 4 + r;\n}\nfunction qe(t, e) {\n  return t = h(t), e = h(e), e.getFullYear() - t.getFullYear();\n}\nfunction Ke(t, e) {\n  t = h(t), e = h(e);\n  const n = t.getTime() - e.getTime();\n  return n < 0 ? -1 : n > 0 ? 1 : n;\n}\nfunction _(t, e) {\n  return -Ke(t, e);\n}\nfunction _r(t, e) {\n  return t = Mt(t), e = Mt(e), Ye(t, e);\n}\nfunction kr(t, e) {\n  return t = St(t), e = St(e), Ge(t, e);\n}\nfunction xr(t, e) {\n  return t = wt(t), e = wt(e), We(t, e);\n}\nfunction Qe(t, e) {\n  const n = _(t, e), r = Math.abs(ze(t, e));\n  t = h(t), t.setDate(t.getDate() + n * r);\n  const o = _(t, e) === -n;\n  return n * (r - (o ? 1 : 0));\n}\nfunction Dr(t, e) {\n  const n = Qe(t, e) / at;\n  return n > 0 ? Math.floor(n) : Math.ceil(n);\n}\nfunction Xe(t, e) {\n  const n = _(t, e), r = Math.abs(je(t, e));\n  t = h(t), t.setMonth(t.getMonth() + n * r);\n  const o = _(t, e) === -n;\n  return n * (r - (o ? 1 : 0));\n}\nfunction Ir(t, e) {\n  const n = Xe(t, e) / 3;\n  return n > 0 ? Math.floor(n) : Math.ceil(n);\n}\nfunction Lr(t, e) {\n  const n = _(t, e), r = Math.abs(qe(t, e));\n  t = h(t), t.setFullYear(t.getFullYear() + n * r);\n  const o = _(t, e) === -n;\n  return n * (r - (o ? 1 : 0));\n}\nfunction Ve(t, e = {}) {\n  if (t == null || typeof t != \"object\")\n    return t;\n  const { cloneObject: n = it } = e, r = /* @__PURE__ */ Object.create(null), o = [\n    {\n      parent: r,\n      prop: \"root\",\n      data: t\n    }\n  ], i = /* @__PURE__ */ new WeakMap(), s = [], c = [];\n  for (; o.length; ) {\n    const { parent: a, prop: f, data: u } = o.pop();\n    if (!a) continue;\n    const d = ae(u);\n    if (d === \"Date\") {\n      a[f] = new Date(u);\n      continue;\n    }\n    if (d !== \"Array\") {\n      const l = n(d, u);\n      if (l != null) {\n        a[f] = l;\n        continue;\n      }\n    }\n    const g = a[f] = d === \"Array\" || d === \"Set\" || d === \"Map\" ? [] : /* @__PURE__ */ Object.create(null);\n    if (d === \"Set\" || d === \"Map\") {\n      let l = 0;\n      if (d === \"Set\") {\n        for (const p of u)\n          i.has(p) ? g[l] = i.get(p) : p !== null && typeof p == \"object\" ? o.push({\n            parent: g,\n            prop: l,\n            data: p\n          }) : g[l] = p, ++l;\n        s.push({ parent: a, prop: f });\n      } else {\n        for (const p of u) {\n          const b = [];\n          l = 0;\n          for (const m of p)\n            i.has(m) ? b[l] = i.get(m) : m !== null && typeof m == \"object\" ? o.push({\n              parent: b,\n              prop: l,\n              data: m\n            }) : b[l] = m, ++l;\n          g.push(b);\n        }\n        c.push({ parent: a, prop: f });\n      }\n    } else\n      for (const l of Object.keys(u)) {\n        const p = u[l];\n        i.has(p) ? g[l] = i.get(p) : p !== null && typeof p == \"object\" ? o.push({\n          parent: g,\n          prop: l,\n          data: p\n        }) : g[l] = p;\n      }\n    i.set(u, g);\n  }\n  for (const { parent: a, prop: f } of s)\n    a[f] = new Set(a[f]);\n  for (const { parent: a, prop: f } of c)\n    a[f] = new Map(a[f]);\n  return r.root;\n}\nconst Ze = \"This object was destroyed, do not use it anywhere\", Je = () => !0;\nfunction Hr(t, e = Ze) {\n  const n = () => {\n    throw new Error(e);\n  };\n  Object.keys(t).forEach((r) => {\n    typeof t[r] == \"function\" ? t[r] = n.bind(t) : t[r] = null;\n  }), Object.getOwnPropertyNames(t.constructor.prototype).forEach((r) => {\n    r !== \"constructor\" && typeof t[r] == \"function\" && (t[r] = n.bind(t));\n  }), t.isDestroyed = Je;\n}\nconst ve = y && (\"ontouchstart\" in window || tn() > 0), Pr = ve ? \"pointerdown\" : \"click\";\nfunction tn() {\n  return typeof navigator < \"u\" && (navigator.maxTouchPoints || navigator.msMaxTouchPoints) || 0;\n}\nfunction Br(t, e, n = window.Event) {\n  const { type: r, bubbles: o = !1, cancelable: i = !1, ...s } = e;\n  if (!M(r) || r === \"\") return !1;\n  let c;\n  return M(n) ? c = new n(r, { bubbles: o, cancelable: i }) : (c = document.createEvent(\"HTMLEvents\"), c.initEvent(r, o, i)), Object.assign(c, s), t.dispatchEvent(c);\n}\nconst en = [\n  \"button\",\n  \"[href]:not(.disabled)\",\n  \"input\",\n  \"select\",\n  \"textarea\",\n  \"[tabindex]\",\n  \"[contenteditable]\"\n].map((t) => `${t}:not(:disabled):not([disabled])`).join(\", \");\nfunction V(t) {\n  return !!t && t.nodeType === 1;\n}\nfunction nn(t) {\n  return V(t) ? t : document.body;\n}\nfunction rn(t, e) {\n  return !y || !t ? [] : Array.from(nn(e).querySelectorAll(t));\n}\nfunction Ur(t) {\n  if (!y) return !1;\n  const e = document.activeElement;\n  return !V(t) || !e ? !1 : t === e || Zt(e, t);\n}\nfunction Zt(t, e) {\n  if (!t || !e) return !1;\n  const n = e.__transferElement;\n  return e.contains(t) || !!n && (n === t || n.contains(t));\n}\nfunction on(t) {\n  if (!y || !V(t) || !t.parentNode || !Zt(t, document.body) || t.style.display === \"none\")\n    return !0;\n  const e = t.getBoundingClientRect();\n  return !(e && e.width > 0 && e.height > 0);\n}\nfunction sn(t) {\n  return !on(t);\n}\nfunction cn(t) {\n  return !V(t) || t.hasAttribute(\"disabled\") && t.getAttribute(\"disabled\") !== \"false\" || t.disabled;\n}\nfunction Yr(t, e = !1) {\n  const n = e ? () => !1 : cn;\n  return rn(en, t).filter(\n    (r) => sn(r) && r.tabIndex > -1 && !n(r)\n  );\n}\nfunction an(t) {\n  if (!y || !t) return 0;\n  const e = getComputedStyle(t);\n  return parseFloat(e.paddingLeft) + parseFloat(e.paddingRight) || 0;\n}\nfunction Gr(t) {\n  if (!y || !t) return 0;\n  const e = getComputedStyle(t);\n  return parseFloat(e.paddingTop) + parseFloat(e.paddingBottom) || 0;\n}\nfunction Wr(t) {\n  if (!y || !t) return 0;\n  const e = getComputedStyle(t);\n  return parseFloat(e.marginLeft) + parseFloat(e.marginRight) || 0;\n}\nfunction zr(t) {\n  if (!y || !t) return 0;\n  const e = getComputedStyle(t);\n  return parseFloat(e.marginTop) + parseFloat(e.marginBottom) || 0;\n}\nfunction jr(t) {\n  if (!y || !t) return 0;\n  const e = getComputedStyle(t);\n  return parseFloat(e.borderLeftWidth) + parseFloat(e.borderRightWidth) || 0;\n}\nfunction qr(t) {\n  if (!y || !t) return 0;\n  const e = getComputedStyle(t);\n  return parseFloat(e.borderTopWidth) + parseFloat(e.borderBottomWidth) || 0;\n}\nfunction Kr(t) {\n  if (!y || !t) return 0;\n  const e = document.createRange();\n  e.setStart(t, 0), e.setEnd(t, t.childNodes.length);\n  const n = e.getBoundingClientRect().width, r = an(t);\n  return n + r;\n}\nfunction Qr(t) {\n  return ye(t, !0) ? `${Me(t)}px` : String(t).trim();\n}\nfunction Xr(t) {\n  return M(t) && t !== !1 ? String(t) : void 0;\n}\nconst fn = /[\"'&<>]/;\nfunction Vr(t) {\n  const e = \"\" + t, n = fn.exec(e);\n  if (!n)\n    return e;\n  let r = \"\", o, i, s = 0;\n  for (i = n.index; i < e.length; i++) {\n    switch (e.charCodeAt(i)) {\n      case 34:\n        o = \"&quot;\";\n        break;\n      case 38:\n        o = \"&amp;\";\n        break;\n      case 39:\n        o = \"&#39;\";\n        break;\n      case 60:\n        o = \"&lt;\";\n        break;\n      case 62:\n        o = \"&gt;\";\n        break;\n      default:\n        continue;\n    }\n    s !== i && (r += e.substring(s, i)), s = i + 1, r += o;\n  }\n  return s !== i ? r + e.substring(s, i) : r;\n}\nfunction Zr() {\n  const t = /* @__PURE__ */ new Map();\n  return {\n    on(e, n) {\n      const r = t.get(e);\n      (r == null ? void 0 : r.add(n)) || t.set(e, /* @__PURE__ */ new Set([n]));\n    },\n    off(e, n) {\n      const r = t.get(e);\n      r && r.delete(n);\n    },\n    clear(e) {\n      const n = t.get(e);\n      n && n.clear();\n    },\n    clearAll() {\n      t.clear();\n    },\n    emit(e, ...n) {\n      const r = t.get(e);\n      r && r.forEach((o) => {\n        o(...n);\n      });\n    }\n  };\n}\nfunction dt(t, e, n) {\n  t && !e.has(t) && (n(t), e.add(t));\n}\nconst un = /* @__PURE__ */ new Set();\nfunction Jr(t, e = console.info) {\n  dt(t, un, e);\n}\nconst ln = /* @__PURE__ */ new Set();\nfunction vr(t, e = console.warn) {\n  dt(t, ln, e);\n}\nconst dn = /* @__PURE__ */ new Set();\nfunction to(t, e = console.warn) {\n  dt(t, dn, e);\n}\nconst ht = y ? requestAnimationFrame : (t) => {\n  setTimeout(t, 16);\n};\nfunction eo(t, e = 16) {\n  if (typeof t != \"function\")\n    return it;\n  const n = (...i) => {\n    t(...i);\n  };\n  if (e <= 0)\n    return Jt(n);\n  let r = 0, o;\n  return function(...i) {\n    const s = Date.now(), c = s - r;\n    clearTimeout(o), c >= e ? (r = s, n(...i)) : o = setTimeout(\n      () => {\n        r = Date.now(), n(...i);\n      },\n      Math.max(0, e - c)\n    );\n  };\n}\nfunction no(t, e = 100) {\n  if (typeof t != \"function\")\n    return it;\n  const n = (...o) => {\n    t(...o);\n  };\n  if (e <= 0)\n    return Jt(n);\n  let r;\n  return function(...o) {\n    clearTimeout(r), r = setTimeout(() => {\n      n(...o);\n    }, e);\n  };\n}\nfunction Jt(t) {\n  if (typeof t != \"function\")\n    return t;\n  let e = !1, n, r;\n  return function(...o) {\n    return n = o, e || (e = !0, r = Promise.resolve().then(() => (e = !1, r = void 0, t(...n)))), r;\n  };\n}\nfunction ro(t) {\n  if (typeof t != \"function\")\n    return t;\n  let e = !1, n, r;\n  return function(...o) {\n    return n = o, e || (e = !0, r = new Promise(\n      (i) => ht(() => {\n        e = !1, r = void 0, i(t(...n));\n      })\n    )), r;\n  };\n}\nconst x = /* @__PURE__ */ new Set(), vt = /* @__PURE__ */ new WeakMap();\nfunction hn() {\n  x.forEach((t) => {\n    t(...vt.get(t));\n  }), x.clear();\n}\nfunction oo(t, ...e) {\n  if (typeof t != \"function\")\n    return t;\n  vt.set(t, e), !x.has(t) && (x.add(t), x.size === 1 && Promise.resolve().then(hn));\n}\nconst D = /* @__PURE__ */ new Set(), te = /* @__PURE__ */ new WeakMap();\nfunction gn() {\n  D.forEach((t) => {\n    t(...te.get(t));\n  }), D.clear();\n}\nfunction io(t, ...e) {\n  if (typeof t != \"function\")\n    return t;\n  te.set(t, e), !D.has(t) && (D.add(t), D.size === 1 && ht(gn));\n}\nasync function so(t, e, n) {\n  const r = [], o = [];\n  for (const i of e) {\n    const s = Promise.resolve().then(() => n(i, e));\n    if (r.push(s), t <= e.length) {\n      const c = s.then(() => o.splice(o.indexOf(c), 1));\n      o.push(c), o.length >= t && await Promise.race(o);\n    }\n  }\n  return Promise.all(r);\n}\nlet nt = null;\nfunction co() {\n  if (!y)\n    return !0;\n  if (nt === null) {\n    const t = document.createElement(\"div\");\n    t.style.display = \"flex\", t.style.flexDirection = \"column\", t.style.rowGap = \"1px\", t.appendChild(document.createElement(\"div\")), t.appendChild(document.createElement(\"div\")), document.body.appendChild(t), nt = t.scrollHeight === 1, document.body.removeChild(t);\n  }\n  return nt;\n}\nlet rt = null;\nfunction ao() {\n  return y ? (rt === null && (rt = \"loading\" in document.createElement(\"img\")), rt) : !1;\n}\nfunction fo(t) {\n  return Array.isArray(t) ? t : [t];\n}\nfunction uo(t, ...e) {\n  return $t(t) ? t(...e) : t;\n}\nfunction lo(t) {\n  return t.replace(/[\\\\/]+/g, \"/\");\n}\nfunction ho(t) {\n  return t[t.length - 1];\n}\nconst Nt = (t) => t;\nfunction go(t, e, n, r) {\n  let o;\n  typeof n != \"function\" && r === void 0 ? (r = !!n, o = Nt) : o = typeof n == \"function\" ? n : Nt;\n  const i = r ? /* @__PURE__ */ new Map() : {};\n  if (!M(e)) return i;\n  const s = r ? (a, f) => i.set(a, f) : (a, f) => i[a] = f, c = $t(e) ? e : (a) => a[e];\n  return t.forEach((a) => {\n    if (!M(a)) return;\n    const f = c(a);\n    M(f) && s(f, o(a));\n  }), i;\n}\nfunction po(t, e, n = !1) {\n  let r = -1;\n  return n || typeof e != \"function\" ? r = t.findIndex((o) => o === e) : r = t.findIndex(e), ~r ? t.splice(r, 1)[0] : null;\n}\nfunction mo(t, e = []) {\n  (typeof e == \"string\" || typeof e == \"function\") && (e = [e]);\n  const n = e.length, r = {};\n  for (const o of t) {\n    let i;\n    for (let s = 0; s < n; ++s) {\n      const c = s === n - 1, a = e[s], f = typeof a == \"function\" ? a(o) : o[a];\n      i ? (i[f] || (i[f] = c ? [] : {}), i = i[f]) : (r[f] || (r[f] = c ? [] : {}), i = r[f]);\n    }\n    i.push(o);\n  }\n  return r;\n}\nfunction bo(t, e = {}) {\n  const {\n    keyField: n = \"id\",\n    childField: r = \"children\",\n    parentField: o = \"parent\",\n    rootId: i = null\n  } = e, s = M(i) && i !== \"\", c = [], a = /* @__PURE__ */ new Map();\n  for (let f = 0, u = t.length; f < u; ++f) {\n    const d = t[f], g = d[n];\n    if (!(s ? g === i : !M(g)))\n      if (a.has(g) ? d[r] = a.get(g) : (d[r] = [], a.set(g, d[r])), d[o] && (!s || d[o] !== i)) {\n        const l = d[o];\n        a.has(l) || a.set(l, []), a.get(l).push(d);\n      } else\n        c.push(d);\n  }\n  return c;\n}\nfunction yo(t, e = {}) {\n  const {\n    keyField: n = \"id\",\n    childField: r = \"children\",\n    parentField: o = \"parent\",\n    rootId: i = null,\n    depthFirst: s = !1,\n    injectId: c = !0,\n    buildId: a = (m) => m,\n    filter: f = ce,\n    cascaded: u = !1,\n    forceInject: d = !1\n  } = e;\n  let g = 1;\n  const l = M(i) && i !== \"\", p = [], b = [...t];\n  for (; b.length; ) {\n    const m = b.shift(), Z = m[r], J = Array.isArray(Z) && Z.length ? Z : [];\n    c && (d || !m[n]) && (m[n] = a(g++));\n    const ee = m[n];\n    c && o && (l ? m[o] === i : !m[o]) && (m[o] = i);\n    const gt = f(m);\n    if (gt && p.push(m), gt || !u) {\n      for (let v = 0, ne = J.length; v < ne; ++v) {\n        const pt = J[v];\n        c && o && (pt[o] = ee), !s && b.push(pt);\n      }\n      s && b.unshift(...J);\n    }\n  }\n  return p;\n}\nfunction Mo(t, e, n = {}) {\n  const { childField: r = \"children\", depthFirst: o = !1 } = n, i = [...t.map((s) => ({ item: s, depth: 0, parent: null }))];\n  for (; i.length; ) {\n    const { item: s, depth: c, parent: a } = i.shift(), f = s[r];\n    e(s, c, a), G(f) && i[o ? \"unshift\" : \"push\"](\n      ...Array.from(f).map((u) => ({ item: u, depth: c + 1, parent: s }))\n    );\n  }\n}\nfunction So(t, e, n = {}) {\n  const { childField: r = \"children\", depthFirst: o = !1, clearChildren: i = !0 } = n, s = [], c = [...t.map((a) => ({ item: a, depth: 0, parent: null, result: s }))];\n  for (; c.length; ) {\n    const { item: a, depth: f, parent: u, result: d } = c.shift(), g = a[r], l = e(a, f, u) ?? {};\n    i && (l[r] = []), d.push(l), G(g) && Array.from(g).length && (l[r] = [], c[o ? \"unshift\" : \"push\"](\n      ...Array.from(g).map((b) => ({\n        item: b,\n        depth: f + 1,\n        parent: a,\n        result: l[r]\n      }))\n    ));\n  }\n  return s;\n}\nfunction wo(t, e, n = {}) {\n  const {\n    childField: r = \"children\",\n    leafOnly: o = !1,\n    isLeaf: i = (c) => !G(c[r])\n  } = n, s = (c, a, f) => c.map((u) => ({ ...u })).filter((u) => {\n    const d = u[r], g = i(u), l = G(d) && Array.from(d);\n    if (o && !g) {\n      if (l && l.length) {\n        const b = s(l, a + 1, u);\n        return u[r] = b, !!b.length;\n      }\n      return !1;\n    }\n    const p = e(u, a, f);\n    if (g) return p;\n    if (!o && p) return !0;\n    if (l && l.length) {\n      const b = s(l, a + 1, u);\n      return u[r] = b, !!b.length;\n    }\n    return p;\n  });\n  return s(t, 0, null);\n}\nconst Ft = (t, e) => Number.isNaN(Number(t) - Number(e)) ? String(t).localeCompare(e) : t - e;\nfunction Eo(t, e) {\n  if (!t.sort || Y(e) && !e.key || !e.length)\n    return t;\n  const n = Array.from(t);\n  Array.isArray(e) || (e = [e]);\n  const r = e.map(\n    (o) => typeof o == \"string\" ? {\n      key: o,\n      method: Ft,\n      type: \"asc\"\n    } : o\n  ).map((o) => (typeof o.accessor != \"function\" && (o.accessor = (i) => i[o.key]), typeof o.method != \"function\" && (o.method = Ft), o.params = Array.isArray(o.params) ? o.params : [], o));\n  return n.sort((o, i) => {\n    let s = 0;\n    for (const c of r) {\n      const { method: a, type: f, accessor: u, params: d } = c, g = f === \"desc\", l = a(u(o, ...d), u(i, ...d));\n      if (s = g ? -l : l, s) break;\n    }\n    return s;\n  }), n;\n}\nfunction Ao(t, e, n = !0) {\n  t = n ? Ve(t) : t;\n  const r = [\n    {\n      source: t,\n      target: e\n    }\n  ];\n  for (; r.length; ) {\n    const { source: o, target: i } = r.pop();\n    Object.keys(i).forEach((s) => {\n      Y(i[s]) ? (Y(o[s]) || (o[s] = /* @__PURE__ */ Object.create(null)), r.push({\n        source: o[s],\n        target: i[s]\n      })) : Array.isArray(i[s]) ? (Array.isArray(o[s]) || (o[s] = []), r.push({\n        source: o[s],\n        target: i[s]\n      })) : o[s] = i[s];\n    });\n  }\n  return t;\n}\nfunction No(t) {\n  t = Array.from(t);\n  let e = !1;\n  const n = () => {\n    var r;\n    e || ((r = t.shift()) == null || r(), t.length && ht(n));\n  };\n  return n(), () => e = !0;\n}\nfunction pn(t) {\n  const e = t.match(/[A-Z]+/);\n  return e && e[0] === t;\n}\nconst mn = /\\B([A-Z])(?=[^A-Z_-])/g;\nfunction Fo(t) {\n  return t.replace(mn, \"-$1\").toLowerCase();\n}\nfunction bn(t) {\n  return t = t.trim().replace(/\\s+/g, \"-\"), t = t.replace(/-+(\\w)/g, (e, n) => n ? n.toUpperCase() : \"\"), (t.charAt(0).toLocaleUpperCase() + t.slice(1)).replace(\n    /[^\\w]/g,\n    \"\"\n  );\n}\nfunction Oo(t) {\n  const e = bn(t);\n  return pn(e) ? e.toLocaleLowerCase() : e.charAt(0).toLowerCase() + e.slice(1);\n}\nexport {\n  Pr as CLICK_TYPE,\n  de as COLOR_NAMES,\n  Kt as DAY_ON_HOURS,\n  hr as DAY_ON_MILLISECONDS,\n  Fe as DAY_ON_MILLS,\n  Ne as DAY_ON_MINUTES,\n  Qt as DAY_ON_SECONDS,\n  Dt as HEX_REG_3,\n  It as HEX_REG_4,\n  Lt as HEX_REG_6,\n  Ht as HEX_REG_8,\n  dr as HOUR_ON_MILLISECONDS,\n  Ae as HOUR_ON_MILLS,\n  X as HOUR_ON_MINUTES,\n  qt as HOUR_ON_SECONDS,\n  _t as HSLA_REG,\n  Rt as HSL_REG,\n  xt as HSVA_REG,\n  kt as HSV_REG,\n  lr as MINUTE_ON_MILLISECONDS,\n  Ee as MINUTE_ON_MILLS,\n  k as MINUTE_ON_SECONDS,\n  W as NAMED_COLORS,\n  Vt as QUARTER_ON_MONTHS,\n  Ct as RGBA_REG,\n  Tt as RGB_REG,\n  N as SECOND_ON_MILLISECONDS,\n  we as SECOND_ON_MILLS,\n  ve as USE_TOUCH,\n  at as WEEK_ON_DAYS,\n  Oe as WEEK_ON_HOURS,\n  gr as WEEK_ON_MILLISECONDS,\n  Te as WEEK_ON_MILLS,\n  $e as WEEK_ON_MINUTES,\n  Xt as WEEK_ON_SECONDS,\n  Re as YEAR_ON_MONTHS,\n  Ce as YEAR_ON_QUARTERS,\n  ft as addDays,\n  yr as addHalfDays,\n  Pe as addHours,\n  Ie as addMilliseconds,\n  He as addMinutes,\n  ut as addMonths,\n  Sr as addQuarters,\n  Le as addSeconds,\n  Mr as addWeeks,\n  wr as addYears,\n  zn as adjustAlpha,\n  rr as boundRange,\n  bo as buildTree,\n  uo as callIfFunc,\n  Ke as compareAsc,\n  _ as compareDesc,\n  Zt as contains,\n  Jn as createBITree,\n  Zn as createCounter,\n  Zr as createEventEmitter,\n  no as debounce,\n  ro as debounceFrame,\n  Jt as debounceMinor,\n  Pn as decide,\n  E as decimalLength,\n  Ve as deepClone,\n  Hr as destroyObject,\n  ze as differenceDays,\n  Qe as differenceFullDays,\n  xr as differenceFullHours,\n  kr as differenceFullMinutes,\n  Xe as differenceFullMonths,\n  Ir as differenceFullQuarters,\n  _r as differenceFullSeconds,\n  Dr as differenceFullWeeks,\n  Lr as differenceFullYears,\n  We as differenceHours,\n  lt as differenceMilliseconds,\n  Ge as differenceMinutes,\n  je as differenceMonths,\n  Rr as differenceQuarters,\n  Ye as differenceSeconds,\n  Cr as differenceWeeks,\n  qe as differenceYears,\n  vn as digitLength,\n  Br as dispatchEvent,\n  ur as divide,\n  A as doubleDigits,\n  Fr as endOfDay,\n  fo as ensureArray,\n  to as errorOnce,\n  Vr as escapeHtml,\n  wo as filterTree,\n  yo as flatTree,\n  pr as format,\n  sr as formatByteSize,\n  br as getChineseWeek,\n  Xn as getGlobalCount,\n  ho as getLast,\n  Ue as getLastDayOfMonth,\n  Nr as getLastSunday,\n  ot as getQuarter,\n  Kr as getRangeWidth,\n  mr as getTime,\n  ae as getType,\n  jr as getXBorder,\n  Wr as getXMargin,\n  an as getXPadding,\n  qr as getYBorder,\n  zr as getYMargin,\n  Gr as getYPadding,\n  mo as groupByProps,\n  Mn as has,\n  ge as hslToHsv,\n  Pt as hslToRgb,\n  Gn as hsvToHsl,\n  pe as hsvToRgb,\n  Jr as infoOnce,\n  B as is,\n  $n as isArray,\n  On as isBigInt,\n  En as isBoolean,\n  y as isClient,\n  Un as isColor,\n  _n as isDate,\n  M as isDefined,\n  cn as isDisabled,\n  Dn as isElement,\n  xn as isEmpty,\n  Nn as isFalse,\n  Ur as isFocusIn,\n  $t as isFunction,\n  on as isHidden,\n  yn as isIOS,\n  G as isIterable,\n  Be as isLeapYear,\n  Rn as isMap,\n  se as isNaN,\n  ie as isNull,\n  Sn as isNumber,\n  Y as isObject,\n  Tn as isPromise,\n  kn as isRegExp,\n  Cn as isSet,\n  wn as isString,\n  Fn as isSymbol,\n  An as isTrue,\n  ye as isValidNumber,\n  sn as isVisible,\n  or as leaveNumber,\n  go as listToMap,\n  So as mapTree,\n  Ao as mergeObjects,\n  fr as minus,\n  Wn as mixColor,\n  er as multipleFixed,\n  io as nextFrameOnce,\n  oo as nextTickOnce,\n  it as noop,\n  C as normalizeAlpha,\n  z as normalizeHsl,\n  j as normalizeHsv,\n  lo as normalizePath,\n  R as normalizeRgb,\n  be as numberRE,\n  ir as ordinalNumber,\n  Se as padStartZeros,\n  Yn as parseColor,\n  O as parseColorToRgba,\n  he as parseStringColor,\n  ar as plus,\n  rn as queryAll,\n  Yr as queryTabables,\n  ht as raf,\n  cr as random,\n  jn as randomColor,\n  qn as randomHardColor,\n  Yt as randomPreferColor,\n  Kn as randomSoftColor,\n  Hn as randomString,\n  Ln as range,\n  Er as rangeDate,\n  Ar as rangeMonth,\n  po as removeArrayItem,\n  st as rgbToHex,\n  Bt as rgbToHsl,\n  Ut as rgbToHsv,\n  ct as rgbaToHex,\n  nr as round,\n  so as runParallel,\n  No as runQueueFrame,\n  tr as segmentNumber,\n  Vn as setGlobalCount,\n  Eo as sortByProps,\n  Et as startOfDay,\n  wt as startOfHour,\n  St as startOfMinute,\n  Or as startOfMonth,\n  $r as startOfQuarter,\n  Mt as startOfSecond,\n  At as startOfWeek,\n  Tr as startOfYear,\n  co as supportFlexGap,\n  ao as supportImgLoading,\n  eo as throttle,\n  P as times,\n  Xr as toAttrValue,\n  Oo as toCamelCase,\n  bn as toCapitalCase,\n  Qr as toCssSize,\n  h as toDate,\n  In as toFalse,\n  zt as toFixed,\n  Qn as toGrayScale,\n  Fo as toKebabCase,\n  Me as toNumber,\n  jt as toPrecision,\n  ce as toTrue,\n  go as transformListToMap,\n  bo as transformTree,\n  Mo as walkTree,\n  vr as warnOnce,\n  Bn as writeClipboard\n};\n//# sourceMappingURL=index.mjs.map\n","import { computed, getCurrentScope, onScopeDispose, unref, watch } from 'vue'\n\nimport { noop } from '@vexip-ui/utils'\n\nimport type { MaybeRef } from 'vue'\n\nexport interface UseListenerOptions extends AddEventListenerOptions {\n  /**\n   * 是否禁用整个 hook 的事件处理\n   */\n  disabled?: MaybeRef<boolean>,\n}\n\nexport function useListener<E = Event>(\n  target: MaybeRef<EventTarget | null | undefined>,\n  event: string,\n  listener: (event: E) => any,\n  options?: UseListenerOptions | boolean,\n) {\n  if (!target) {\n    return noop\n  }\n\n  const normalizedOptions = computed(() => {\n    if (typeof options === 'boolean') {\n      return { capture: options }\n    }\n\n    return options || {}\n  })\n\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(target),\n    el => {\n      remove()\n\n      if (!el) {\n        return\n      }\n\n      const { disabled, ...opts } = normalizedOptions.value\n      const handler = (event: Event) => {\n        if (!unref(disabled)) {\n          listener(event as E)\n        }\n      }\n\n      el.addEventListener(event, handler, opts)\n\n      remove = () => {\n        el.removeEventListener(event, handler, opts)\n        remove = noop\n      }\n    },\n    { immediate: true, flush: 'post' },\n  )\n\n  const stop = () => {\n    stopWatch()\n    remove()\n  }\n\n  getCurrentScope() && onScopeDispose(stop)\n\n  return stop\n}\n","import { getCurrentScope, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { CLICK_TYPE, dispatchEvent, isClient, noop } from '@vexip-ui/utils'\nimport { useListener } from './listener'\n\nimport type { Ref } from 'vue'\nimport type { TransferNode } from '@vexip-ui/utils'\n\nexport const CLICK_OUTSIDE = 'clickoutside'\n\nconst elements = new Set<TransferNode>()\nlet downTarget: EventTarget | null = null\n\nfunction isInside(target: EventTarget | null, el: TransferNode) {\n  if (!(target instanceof Node)) return false\n\n  return (\n    el === target ||\n    el.contains(target) ||\n    (!!el.__transferElement &&\n      (el.__transferElement === target || el.__transferElement.contains(target)))\n  )\n}\n\nif (isClient) {\n  // 桌面端使用 'click' 作为触发器，但滚动条拖拽时 mouseup 在组件外会误判。\n  // pointerdown 在 mousedown 之前触发，且不受 scrollbar 内部 preventDefault 的影响，\n  // 用它来记录用户开始按压时的真实目标。\n  if (CLICK_TYPE === 'click') {\n    document.addEventListener(\n      'pointerdown',\n      (event: Event) => {\n        downTarget = event.target\n      },\n      true,\n    )\n  }\n\n  document.addEventListener(\n    CLICK_TYPE,\n    (event: Event) => {\n      const currentDownTarget = downTarget\n      downTarget = null\n\n      elements.forEach(el => {\n        if (currentDownTarget && isInside(currentDownTarget, el)) {\n          return\n        }\n\n        const target = event.target as Node | null\n        const path = event.composedPath && event.composedPath()\n\n        if (\n          el !== target &&\n          (path ? !path.includes(el) : !el.contains(target)) &&\n          (!el.__transferElement ||\n            (el.__transferElement !== target && !el.__transferElement.contains(target)))\n        ) {\n          dispatchEvent(el, { type: CLICK_OUTSIDE })\n        }\n      })\n    },\n    true,\n  )\n}\n\n/**\n * 创建一个可以添加 clickoutside 事件的元素 Ref\n *\n * @param handler 事件的回调方法\n * @param target 需要处理的元素 ref，可不传\n */\nexport function useClickOutside(\n  handler: () => void,\n  target: Ref<HTMLElement | null | undefined> = ref(null),\n) {\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(target),\n    el => {\n      remove()\n\n      if (!el) {\n        return\n      }\n\n      elements.add(el)\n\n      remove = () => {\n        elements.delete(el)\n        remove = noop\n      }\n    },\n    { immediate: true, flush: 'post' },\n  )\n\n  const stop = () => {\n    stopWatch()\n    remove()\n  }\n\n  getCurrentScope() && onScopeDispose(stop)\n  useListener(target, CLICK_OUTSIDE, handler)\n\n  return target\n}\n","import { nextTick, onBeforeUnmount, onMounted, ref } from 'vue'\n\nimport { noop } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\n/**\n * 创建一个观察了最近的上级元素 display 变化的元素 Ref\n *\n * @param displayInit 元素初次显示后执行的回调\n * @returns 观察了 display 变化的元素 Ref\n */\nexport function useDisplay(\n  displayInit = noop,\n  element: Ref<HTMLElement | null | undefined> = ref(null),\n) {\n  let observer: MutationObserver | null\n\n  onMounted(() => {\n    nextTick(() => {\n      const hiddenParentNode = queryOutsideHiddenElement(element.value)\n\n      if (hiddenParentNode) {\n        observer = new MutationObserver(() => {\n          if (hiddenParentNode.style.display !== 'none') {\n            if (typeof displayInit === 'function') {\n              displayInit()\n            }\n\n            observer?.disconnect()\n            observer = null\n          }\n        })\n\n        observer.observe(hiddenParentNode, {\n          attributes: true,\n          childList: true,\n          characterData: true,\n          attributeFilter: ['style'],\n        })\n      } else {\n        typeof displayInit === 'function' && displayInit()\n      }\n    })\n  })\n\n  onBeforeUnmount(() => {\n    observer?.disconnect()\n    observer = null\n  })\n\n  return element\n}\n\nexport function queryOutsideHiddenElement(el?: Element | null) {\n  if (el) {\n    let parentElement = el.parentElement\n\n    while (parentElement && parentElement !== document.body) {\n      if (parentElement.style.display === 'none') {\n        return parentElement\n      }\n\n      parentElement = parentElement.parentElement\n    }\n  }\n\n  return null\n}\n\nexport function isHiddenElement(el?: HTMLElement | null) {\n  if (el?.style.display !== 'none') {\n    return !!queryOutsideHiddenElement(el)\n  }\n\n  return true\n}\n","import {\n  Comment,\n  Fragment,\n  createTextVNode,\n  isVNode,\n  readonly,\n  ref,\n  renderSlot,\n  toRef,\n  unref,\n  watch,\n} from 'vue'\n\nimport { ensureArray, isClient, noop } from '@vexip-ui/utils'\n\nimport type {\n  ComponentPublicInstance,\n  MaybeRef,\n  Ref,\n  Slots,\n  VNode,\n  VNodeChild,\n  VNodeNormalizedChildren,\n} from 'vue'\nimport type { MaybeElement, MaybeInstance } from './types'\n\nexport function createSlotRender(\n  slots: Slots,\n  names: string[],\n): ((params?: any) => VNodeChild) | null\nexport function createSlotRender(\n  slots: Slots,\n  names: string[],\n  fallback: (params?: any) => VNodeChild,\n): (params?: any) => VNodeChild\nexport function createSlotRender(\n  slots: Slots,\n  names: string[],\n  fallback?: (params?: any) => VNodeChild,\n) {\n  for (const name of names) {\n    if (slots[name]) {\n      return (params: any) =>\n        renderSlot(slots, name, params, () => {\n          const vnodes = fallback?.(params)\n\n          return vnodes ? ensureArray(vnodes) : []\n        })\n    }\n  }\n\n  return fallback || null\n}\n\nexport function flatVNodes(children: VNodeNormalizedChildren) {\n  const result: VNode[] = []\n  const loop = Array.isArray(children) ? [...children] : []\n\n  while (loop.length) {\n    const vnode = loop.shift()!\n\n    if (vnode === null) continue\n\n    if (Array.isArray(vnode)) {\n      loop.unshift(...vnode)\n    }\n\n    if (\n      typeof vnode !== 'string' &&\n      typeof vnode !== 'number' &&\n      (!isVNode(vnode) || vnode.type === Comment)\n    ) {\n      continue\n    }\n\n    if (typeof vnode === 'string' || typeof vnode === 'number') {\n      result.push(createTextVNode(String(vnode)))\n    } else if (vnode.type === Fragment && Array.isArray(vnode.children)) {\n      loop.unshift(vnode.children)\n    } else {\n      result.push(vnode)\n    }\n  }\n\n  return result\n}\n\nexport function unrefElement<T extends string | MaybeInstance = string | MaybeInstance>(\n  ref: MaybeRef<T>,\n): T extends string | ComponentPublicInstance ? MaybeElement : T {\n  const plain = unref(ref)\n\n  if (typeof plain === 'string') {\n    return (isClient ? document.querySelector(plain) : null) as any\n  }\n\n  return (plain as ComponentPublicInstance)?.$el ?? plain\n}\n\nexport function proxyExposed<T>(vnode: VNode): T {\n  return new Proxy({} as any, {\n    get(_, key) {\n      if (!vnode.component) return undefined\n\n      return (\n        (vnode.component.proxy as any)?.[key] ??\n        (vnode.component.exposeProxy as any)?.[key] ??\n        (vnode.component.exposed as any)?.[key]\n      )\n    },\n  }) as T\n}\n\nexport function watchPauseable(...args: Parameters<typeof watch>) {\n  const active = ref(true)\n  const handle = args[1] || noop\n\n  function pause() {\n    active.value = false\n  }\n\n  function resume() {\n    active.value = true\n  }\n\n  const stop = watch(\n    args[0],\n    (...callbackArgs) =>\n      new Promise<void>((resolve, reject) => {\n        if (active.value) {\n          Promise.resolve(handle(...callbackArgs))\n            .then(resolve)\n            .catch(reject)\n        }\n      }),\n    args[2],\n  )\n\n  return { active: readonly(active), pause, resume, stop }\n}\n\nexport function pickToRefs<T extends Record<any, any>, K extends keyof T>(reactive: T, keys: K[]) {\n  return keys.map(key => toRef(reactive, key)) as { [P in K]: Ref<T[P]> }\n}\n","import { computed, getCurrentScope, isRef, onScopeDispose, ref, watch } from 'vue'\n\nimport { isClient, noop } from '@vexip-ui/utils'\nimport { unrefElement } from './shared/utils'\n\nimport type { ComputedRef, MaybeRef, Ref } from 'vue'\nimport type { MaybeInstance } from './shared/types'\n\nexport interface UseFullScreenResult {\n  target: Ref<MaybeInstance>,\n  supported: boolean,\n  full: ComputedRef<boolean>,\n  enter: (force?: boolean) => Promise<boolean>,\n  exit: (force?: boolean) => Promise<boolean>,\n  toggle: (force?: boolean) => Promise<boolean>,\n}\n\ntype PropertiesMap = [\n  'requestFullscreen',\n  'exitFullscreen',\n  'fullscreenElement',\n  'fullscreenEnabled',\n  'fullscreenchange',\n  'fullscreenerror',\n]\n\nconst functionsMap = [\n  [\n    'requestFullscreen',\n    'exitFullscreen',\n    'fullscreenElement',\n    'fullscreenEnabled',\n    'fullscreenchange',\n    'fullscreenerror',\n  ],\n  // New WebKit\n  [\n    'webkitRequestFullscreen',\n    'webkitExitFullscreen',\n    'webkitFullscreenElement',\n    'webkitFullscreenEnabled',\n    'webkitfullscreenchange',\n    'webkitfullscreenerror',\n  ],\n  // Old WebKit\n  [\n    'webkitRequestFullScreen',\n    'webkitCancelFullScreen',\n    'webkitCurrentFullScreenElement',\n    'webkitCancelFullScreen',\n    'webkitfullscreenchange',\n    'webkitfullscreenerror',\n  ],\n  [\n    'mozRequestFullScreen',\n    'mozCancelFullScreen',\n    'mozFullScreenElement',\n    'mozFullScreenEnabled',\n    'mozfullscreenchange',\n    'mozfullscreenerror',\n  ],\n  [\n    'msRequestFullscreen',\n    'msExitFullscreen',\n    'msFullscreenElement',\n    'msFullscreenEnabled',\n    'MSFullscreenChange',\n    'MSFullscreenError',\n  ],\n] as PropertiesMap[]\n\nlet map!: PropertiesMap\n\nif (isClient) {\n  for (const m of functionsMap) {\n    if (m[1] in document) {\n      map = m\n      break\n    }\n  }\n}\n\nconst supported = !!map\nconst notSupportedResult = {\n  supported,\n  full: computed(() => false),\n  enter: noop,\n  exit: noop,\n  toggle: noop,\n}\n\nconst states = new Set<Ref<boolean>>()\nconst subscriptions = new WeakMap<Element, Ref<boolean>>()\n\nif (isClient && map) {\n  const ELEMENT = map[2]\n  const EVENT = map[4]\n\n  document.addEventListener(\n    EVENT,\n    () => {\n      states.forEach(state => {\n        state.value = false\n      })\n\n      if (document[ELEMENT]) {\n        const full = subscriptions.get(document[ELEMENT])\n\n        if (full) {\n          full.value = true\n        }\n      }\n    },\n    false,\n  )\n}\n\nexport function useFullScreen(target: MaybeRef<MaybeInstance> = ref(null)): UseFullScreenResult {\n  const targetRef = computed({\n    get: () => unrefElement(target),\n    set: el => {\n      if (isRef(target)) {\n        target.value = el\n      }\n    },\n  })\n\n  if (!isClient || !supported) {\n    return { ...notSupportedResult, target: targetRef }\n  }\n\n  const [REQUEST, EXIT, ELEMENT] = map\n  const full = ref(false)\n\n  watch(\n    () => unrefElement(target),\n    (el, old) => {\n      old && subscriptions.delete(old)\n      el && subscriptions.set(el, full)\n    },\n    { immediate: true, flush: 'post' },\n  )\n\n  states.add(full)\n\n  if (getCurrentScope()) {\n    onScopeDispose(exit)\n  }\n\n  async function enter(force = false) {\n    await exit()\n\n    const el = unrefElement(target)\n\n    if (el) {\n      if (force || !document[ELEMENT]) {\n        await el[REQUEST]()\n        full.value = true\n\n        return document[ELEMENT] === el\n      }\n    }\n\n    return false\n  }\n\n  async function exit(force = false) {\n    const el = unrefElement(target)\n\n    if (force || (document[ELEMENT] && document[ELEMENT] === el)) {\n      await document[EXIT]()\n      full.value = false\n\n      return document[ELEMENT] !== el\n    }\n\n    return false\n  }\n\n  async function toggle(force = false) {\n    return full.value ? await exit(force) : await enter(force)\n  }\n\n  return {\n    supported,\n    target: targetRef,\n    full: computed(() => full.value),\n    enter,\n    exit,\n    toggle,\n  }\n}\n","import { ref } from 'vue'\n\nimport { useListener } from './listener'\n\nimport type { Ref } from 'vue'\n\nexport function useHover(wrapper: Ref<HTMLElement | null | undefined> = ref(null)) {\n  const isHover = ref(false)\n\n  useListener(wrapper, 'mouseenter', enterWrapper)\n  useListener(wrapper, 'mouseleave', leaveWrapper)\n\n  function enterWrapper() {\n    isHover.value = true\n  }\n\n  function leaveWrapper() {\n    isHover.value = false\n  }\n\n  return { wrapper, isHover }\n}\n","import { getCurrentScope, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { ensureArray, isClient, noop, toNumber } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\nexport type IntersectionHandler = (entry: IntersectionObserverEntry) => any\nexport type UseIntersectionOptions = IntersectionObserverInit & {\n  /**\n   * 元素交叉状态变化时的回调方法\n   */\n  handler: IntersectionHandler,\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: Ref<HTMLElement | null | undefined>,\n}\n\nconst observerCache = new WeakMap<\n  Element | Document,\n  Map<\n    string,\n    Map<\n      string,\n      { ob: IntersectionObserver, count: number, handlers: WeakMap<Element, IntersectionHandler> }\n    >\n  >\n>()\n\nconst spaceRE = /\\s+/g\nconst unitRE = /(px|%)$/\n\nexport function useIntersection(options: UseIntersectionOptions) {\n  const target = options.target || ref(null)\n\n  if (!isClient) {\n    return { target, disconnect: noop }\n  }\n\n  const { handler } = options\n\n  let root = options.root ?? document\n\n  const threshold = ensureArray(options.threshold || 0).join() || '0'\n  const margin = normalizeMargin(options.rootMargin)\n\n  if (!observerCache.has(root)) {\n    observerCache.set(root, new Map())\n  }\n\n  const thresholdCache = observerCache.get(root)!\n\n  if (!thresholdCache.has(threshold)) {\n    thresholdCache.set(threshold, new Map())\n  }\n\n  const marginCache = thresholdCache.get(threshold)!\n\n  if (!marginCache.has(margin)) {\n    marginCache.set(margin, {\n      ob: new IntersectionObserver(handleIntersect, { ...options, rootMargin: margin }),\n      count: 0,\n      handlers: new WeakMap<Element, IntersectionHandler>(),\n    })\n  }\n\n  let state = marginCache.get(margin)\n  let { ob: observer, handlers } = state!\n\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(target),\n    el => {\n      remove()\n\n      if (!el || !observer) {\n        return\n      }\n\n      handlers.set(el, handler)\n      observer.observe(el)\n      state && state.count++\n\n      remove = () => {\n        observer.unobserve(el)\n        handlers.delete(el)\n        state && state.count--\n        remove = noop\n      }\n    },\n    { immediate: true, flush: 'post' },\n  )\n\n  getCurrentScope() && onScopeDispose(disconnect)\n\n  function normalizeMargin(margin?: string) {\n    if (!margin || !margin.trim()) return '_'\n\n    const parts = margin.trim().split(spaceRE, 4)\n    parts.length = 4\n\n    for (let i = 0; i < 4; ++i) {\n      const part = parts[i]\n\n      parts[i] = unitRE.test(part) ? part : `${toNumber(part)}px`\n    }\n\n    return parts.join(' ')\n  }\n\n  function handleIntersect(entries: IntersectionObserverEntry[]) {\n    for (let i = 0, len = entries.length; i < len; ++i) {\n      const entry = entries[i]\n      const handler = handlers.get(entry.target)\n\n      if (typeof handler === 'function') {\n        handler(entry)\n      }\n    }\n  }\n\n  function disconnect() {\n    stopWatch()\n    remove()\n\n    if (!state) return\n\n    if (state.count <= 0) {\n      marginCache.delete(margin)\n\n      if (!marginCache.size) {\n        thresholdCache.delete(threshold)\n\n        if (!thresholdCache.size) {\n          observerCache.delete(root)\n        }\n      }\n    }\n\n    state = undefined\n    observer = undefined!\n    handlers = undefined!\n    root = undefined!\n  }\n\n  return { target, disconnect }\n}\n","import { customRef } from 'vue'\n\nexport function useManualRef() {\n  const updateSet = new Set<() => void>()\n\n  function manualRef<T>(value: T) {\n    return customRef<T>((track, trigger) => {\n      let origin = value\n\n      const update = () => {\n        if (value !== origin) {\n          origin = value\n          trigger()\n        }\n      }\n\n      return {\n        get: () => (track(), value),\n        set: newValue => {\n          if (newValue === value) return\n\n          value = newValue\n          updateSet.add(update)\n        },\n      }\n    })\n  }\n\n  function triggerUpdate() {\n    for (const trigger of updateSet) {\n      trigger()\n    }\n\n    updateSet.clear()\n  }\n\n  return { updateSet, manualRef, triggerUpdate }\n}\n","import { computed, isRef, reactive, ref, unref } from 'vue'\n\nimport { noop } from '@vexip-ui/utils'\nimport { useListener } from './listener'\n\nimport type { MaybeRef, Ref } from 'vue'\n\nexport type ModifierState = Readonly<\n  Omit<Record<string, boolean>, 'activeKeys'> & {\n    activeKeys: Set<string>,\n    resetAll: () => void,\n  }\n>\n\nexport interface UseModifierOptions {\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: Ref<HTMLElement | null | undefined>,\n  /**\n   * 是否禁用整个 hook 的事件处理\n   */\n  disabled?: MaybeRef<boolean>,\n  /**\n   * 配置键名的别名，会与默认别名动态合并\n   */\n  aliasMap?: Record<string, string>,\n  /**\n   * 是否在目标元素失去焦点时重置修饰符\n   *\n   * @default true\n   */\n  autoReset?: boolean,\n  /**\n   * 事件的 capture 选项\n   *\n   * @default false\n   */\n  capture?: boolean,\n  /**\n   * 事件的 passive 选项\n   *\n   * @default true\n   */\n  passive?: boolean,\n  /**\n   * 是否严格匹配目标元素\n   */\n  strictTarget?: boolean,\n  /**\n   * 键按下的事件回调函数\n   */\n  onKeyDown?: (event: KeyboardEvent, modifier: ModifierState) => void,\n  /**\n   * 键抬起的时间回调函数\n   */\n  onKeyUp?: (event: KeyboardEvent, modifier: ModifierState) => void,\n}\n\nconst defaultAliasMap: Record<string, string> = {\n  ctrl: 'control',\n  command: 'meta',\n  cmd: 'meta',\n  option: 'alt',\n  up: 'arrowup',\n  down: 'arrowdown',\n  left: 'arrowleft',\n  right: 'arrowright',\n}\n\nconst separatorRE = /[+_-]/\nconst splitRE = /[+_-]/g\n\nconst internalProps = ['activeKeys', 'resetAll']\n\nexport function useModifier(options: UseModifierOptions = {}) {\n  const {\n    autoReset = true,\n    capture = false,\n    passive = true,\n    strictTarget = false,\n    onKeyDown = noop,\n    onKeyUp = noop,\n  } = options\n\n  const target = options.target || ref(null)\n  const disabled = isRef(options.disabled) ? options.disabled : ref(options.disabled || false)\n  const aliasMap = { ...defaultAliasMap, ...(options.aliasMap || {}) }\n  const activeKeys = reactive(new Set<string>())\n  const metaDeps = new Set<string>()\n  const modifier: Record<string, any> = reactive({ activeKeys, resetAll })\n\n  function setModifier(key: string, value: boolean) {\n    if (key in modifier) {\n      modifier[key] = value\n    }\n  }\n\n  function updateModifier(event: KeyboardEvent, value: boolean) {\n    const key = event.key?.toLocaleLowerCase()\n    const code = event.code?.toLocaleLowerCase()\n    const keys = [code, key].filter(Boolean)\n\n    for (const key of keys) {\n      activeKeys[value ? 'add' : 'delete'](key)\n      setModifier(key, value)\n    }\n\n    if (!value && key === 'meta') {\n      for (const key of metaDeps) {\n        activeKeys.delete(key)\n        setModifier(key, false)\n      }\n\n      metaDeps.clear()\n    } else if (\n      value &&\n      typeof event.getModifierState === 'function' &&\n      event.getModifierState('Meta')\n    ) {\n      for (const key of [...activeKeys, ...keys]) {\n        metaDeps.add(key)\n      }\n    }\n  }\n\n  function resetAll() {\n    Object.keys(modifier).forEach(key => {\n      modifier[key] = false\n    })\n\n    modifier.activeKeys = activeKeys\n    modifier.resetAll = resetAll\n  }\n\n  const modifierProxy = new Proxy(modifier, {\n    get(target, prop, receiver) {\n      if (typeof prop !== 'string' || internalProps.includes(prop)) {\n        return Reflect.get(target, prop, receiver)\n      }\n\n      prop = prop.toLocaleLowerCase()\n\n      if (prop in aliasMap) {\n        prop = aliasMap[prop]\n      }\n\n      if (!(prop in modifier)) {\n        if (separatorRE.test(prop)) {\n          const keys = prop.split(splitRE).map(key => key.trim())\n\n          modifier[prop] = computed(() => keys.every(key => unref(modifierProxy[key])))\n        } else {\n          modifier[prop] = ref(activeKeys.has(prop))\n        }\n      }\n\n      return unref(Reflect.get(target, prop, receiver))\n    },\n  })\n\n  useListener(\n    target,\n    'keydown',\n    (event: KeyboardEvent) => {\n      if (strictTarget && event.target !== unref(target)) {\n        return\n      }\n\n      updateModifier(event, true)\n      onKeyDown(event, modifierProxy)\n    },\n    { capture, passive, disabled },\n  )\n  useListener(\n    target,\n    'keyup',\n    (event: KeyboardEvent) => {\n      if (strictTarget && event.target !== unref(target)) {\n        return\n      }\n\n      updateModifier(event, false)\n      onKeyUp(event, modifierProxy)\n    },\n    { capture, passive, disabled },\n  )\n\n  if (autoReset) {\n    useListener(target, 'blur', resetAll, { capture, passive, disabled })\n  }\n\n  return { target, modifier: modifierProxy as ModifierState }\n}\n","import { nextTick, onBeforeUnmount, onMounted, readonly, ref } from 'vue'\n\nexport function useMounted(wait?: 'tick' | 'frame') {\n  const isMounted = ref(false)\n\n  const mount = () => (isMounted.value = true)\n\n  onMounted(() => {\n    if (wait === 'tick') {\n      nextTick(mount)\n    } else if (wait === 'frame') {\n      requestAnimationFrame(mount)\n    } else {\n      mount()\n    }\n  })\n\n  onBeforeUnmount(() => {\n    isMounted.value = false\n  })\n\n  return { isMounted: readonly(isMounted) }\n}\n","import { computed, isRef, ref } from 'vue'\n\nimport { throttle } from '@vexip-ui/utils'\nimport { useListener } from './listener'\n\nimport type { MaybeRef, Ref } from 'vue'\n\nexport interface MovingState {\n  xStart: number,\n  yStart: number,\n  xEnd: number,\n  yEnd: number,\n  clientX: number,\n  clientY: number,\n  deltaX: number,\n  deltaY: number,\n  lazy: boolean,\n  [custom: string]: unknown,\n}\n\nexport interface UseMovingOptions {\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: Ref<HTMLElement | null | undefined>,\n  /**\n   * 横向位置的初始值\n   */\n  x?: MaybeRef<number>,\n  /**\n   * 纵向位置的初始值\n   */\n  y?: MaybeRef<number>,\n  /**\n   * 为否为懒加载，开启后会在 End 事件再更新位置状态\n   */\n  lazy?: MaybeRef<boolean>,\n  /**\n   * 是否禁用整个 hook 的事件处理\n   */\n  disabled?: MaybeRef<boolean>,\n  /**\n   * 事件的 capture 选项\n   *\n   * @default true\n   */\n  capture?: boolean,\n  /**\n   * 是否阻止 MouseDown 事件冒泡和默认行为\n   *\n   * @default true\n   */\n  stopMouse?: boolean,\n  /**\n   * 是否阻止 TouchStart 事件冒泡和默认行为\n   *\n   * @default true\n   */\n  stopTouch?: boolean,\n  /**\n   * 移动开始时的回调函数，返回 false 可以阻止本次移动\n   */\n  onStart?: (state: MovingState, event: PointerEvent) => any,\n  /**\n   * 移动中的回调函数\n   */\n  onMove?: (state: MovingState, event: PointerEvent) => void,\n  /**\n   * 移动结束时的回调函数\n   */\n  onEnd?: (state: MovingState, event: PointerEvent) => void,\n}\n\nfunction disableEvent<E extends Event>(event: E) {\n  if (event.cancelable) {\n    event.stopPropagation()\n    event.preventDefault()\n  }\n}\n\nexport function useMoving(options: UseMovingOptions) {\n  const target = options.target || ref(null)\n  const x = isRef(options.x) ? options.x : ref(0)\n  const y = isRef(options.y) ? options.y : ref(0)\n  const lazy = isRef(options.lazy) ? options.lazy : ref(options.lazy || false)\n  const disabled = isRef(options.disabled) ? options.disabled : ref(options.disabled || false)\n\n  const { capture = true, stopMouse = true, stopTouch = true } = options\n\n  const moving = ref(false)\n  const internalState: MovingState = {\n    xStart: 0,\n    yStart: 0,\n    xEnd: 0,\n    yEnd: 0,\n    clientX: 0,\n    clientY: 0,\n    deltaX: 0,\n    deltaY: 0,\n    lazy: false,\n  }\n\n  let current = 0\n  let record = 0\n\n  const throttleMove = throttle((event: PointerEvent) => {\n    if (record < current) return\n\n    updateState(event)\n\n    if (!internalState.lazy) {\n      x.value = internalState.xEnd\n      y.value = internalState.yEnd\n    }\n\n    options.onMove?.(internalState, event)\n  })\n\n  function start(event: PointerEvent) {\n    if (disabled.value) return\n\n    Object.assign(internalState, {\n      xStart: x.value,\n      yStart: y.value,\n      xEnd: x.value,\n      yEnd: y.value,\n      clientX: event.clientX,\n      clientY: event.clientY,\n      lazy: lazy.value,\n    })\n\n    if (options.onStart?.(internalState, event) === false) {\n      return\n    }\n\n    document.addEventListener('pointermove', move, { capture })\n    document.addEventListener('pointerup', end, { capture })\n\n    record = current\n    moving.value = true\n  }\n\n  function move(event: PointerEvent) {\n    if (disabled.value) return\n\n    disableEvent(event)\n    throttleMove(event)\n  }\n\n  function end(event: PointerEvent) {\n    document.removeEventListener('pointermove', move, { capture })\n    document.removeEventListener('pointerup', end, { capture })\n\n    if (disabled.value) return\n\n    updateState(event)\n\n    if (internalState.lazy) {\n      x.value = internalState.xEnd\n      y.value = internalState.yEnd\n    }\n\n    moving.value = false\n    ++current\n\n    options.onEnd?.(internalState, event)\n  }\n\n  function updateState(event: PointerEvent) {\n    const { clientX, clientY } = event\n    const { xStart, yStart, clientX: clientXStart, clientY: clientYStart } = internalState\n    const deltaX = clientX - clientXStart\n    const deltaY = clientY - clientYStart\n\n    internalState.deltaX = deltaX\n    internalState.deltaY = deltaY\n    internalState.xEnd = xStart + deltaX\n    internalState.yEnd = yStart + deltaY\n  }\n\n  useListener(target, 'pointerdown', start, { capture })\n\n  stopMouse && useListener(target, 'mousedown', disableEvent, { capture })\n  stopTouch && useListener(target, 'touchstart', disableEvent, { capture })\n\n  return {\n    target,\n    moving: computed(() => moving.value),\n    x,\n    y,\n    lazy,\n    disabled,\n  }\n}\n","import { onBeforeUnmount, ref } from 'vue'\n\nimport { throttle } from '@vexip-ui/utils'\n\nimport type { Ref } from 'vue'\n\nexport interface UsePointerOption {\n  /**\n   * 横向位置的初始值\n   */\n  x?: number,\n  /**\n   * 纵向位置的初始值\n   */\n  y?: number,\n  /**\n   * 是否手动停止，默认情况下会在组件的 BeforeUnmount 生命周期注销\n   *\n   * @default false\n   */\n  manualStop?: boolean,\n}\n\ninterface PointerState {\n  x: Ref<number>,\n  y: Ref<number>,\n}\n\nconst registered = new Set<PointerState>()\nconst record = new Map<'x' | 'y', number>()\n\nrecord.set('x', 0)\nrecord.set('y', 0)\n\nfunction handler(event: PointerEvent) {\n  const { pageX, pageY } = event\n\n  record.set('x', pageX)\n  record.set('y', pageY)\n\n  registered.forEach(state => {\n    state.x.value = pageX\n    state.y.value = pageY\n  })\n}\n\nconst throttleHandler = throttle(handler)\n\nfunction register(state: PointerState) {\n  if (!registered.size && window) {\n    record.set('x', 0)\n    record.set('y', 0)\n    window.addEventListener('pointermove', throttleHandler, { passive: true })\n  }\n\n  registered.add(state)\n}\n\nfunction unregister(state: PointerState) {\n  registered.delete(state)\n\n  if (!registered.size && window) {\n    window.removeEventListener('pointermove', throttleHandler)\n  }\n}\n\nexport function usePointer(options: UsePointerOption = {}) {\n  const x = ref(options.x ?? record.get('x')!)\n  const y = ref(options.y ?? record.get('y')!)\n\n  const state = { x, y }\n\n  register(state)\n\n  if (!options.manualStop) {\n    onBeforeUnmount(() => {\n      unregister(state)\n    })\n  }\n\n  return { ...state, unregister: () => unregister(state) }\n}\n","/**\n * Custom positioning reference element.\n * @see https://floating-ui.com/docs/virtual-elements\n */\n\nconst sides = ['top', 'right', 'bottom', 'left'];\nconst alignments = ['start', 'end'];\nconst placements = /*#__PURE__*/sides.reduce((acc, side) => acc.concat(side, side + \"-\" + alignments[0], side + \"-\" + alignments[1]), []);\nconst min = Math.min;\nconst max = Math.max;\nconst round = Math.round;\nconst floor = Math.floor;\nconst createCoords = v => ({\n  x: v,\n  y: v\n});\nconst oppositeSideMap = {\n  left: 'right',\n  right: 'left',\n  bottom: 'top',\n  top: 'bottom'\n};\nfunction clamp(start, value, end) {\n  return max(start, min(value, end));\n}\nfunction evaluate(value, param) {\n  return typeof value === 'function' ? value(param) : value;\n}\nfunction getSide(placement) {\n  return placement.split('-')[0];\n}\nfunction getAlignment(placement) {\n  return placement.split('-')[1];\n}\nfunction getOppositeAxis(axis) {\n  return axis === 'x' ? 'y' : 'x';\n}\nfunction getAxisLength(axis) {\n  return axis === 'y' ? 'height' : 'width';\n}\nfunction getSideAxis(placement) {\n  const firstChar = placement[0];\n  return firstChar === 't' || firstChar === 'b' ? 'y' : 'x';\n}\nfunction getAlignmentAxis(placement) {\n  return getOppositeAxis(getSideAxis(placement));\n}\nfunction getAlignmentSides(placement, rects, rtl) {\n  if (rtl === void 0) {\n    rtl = false;\n  }\n  const alignment = getAlignment(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const length = getAxisLength(alignmentAxis);\n  let mainAlignmentSide = alignmentAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top';\n  if (rects.reference[length] > rects.floating[length]) {\n    mainAlignmentSide = getOppositePlacement(mainAlignmentSide);\n  }\n  return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)];\n}\nfunction getExpandedPlacements(placement) {\n  const oppositePlacement = getOppositePlacement(placement);\n  return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)];\n}\nfunction getOppositeAlignmentPlacement(placement) {\n  return placement.includes('start') ? placement.replace('start', 'end') : placement.replace('end', 'start');\n}\nconst lrPlacement = ['left', 'right'];\nconst rlPlacement = ['right', 'left'];\nconst tbPlacement = ['top', 'bottom'];\nconst btPlacement = ['bottom', 'top'];\nfunction getSideList(side, isStart, rtl) {\n  switch (side) {\n    case 'top':\n    case 'bottom':\n      if (rtl) return isStart ? rlPlacement : lrPlacement;\n      return isStart ? lrPlacement : rlPlacement;\n    case 'left':\n    case 'right':\n      return isStart ? tbPlacement : btPlacement;\n    default:\n      return [];\n  }\n}\nfunction getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) {\n  const alignment = getAlignment(placement);\n  let list = getSideList(getSide(placement), direction === 'start', rtl);\n  if (alignment) {\n    list = list.map(side => side + \"-\" + alignment);\n    if (flipAlignment) {\n      list = list.concat(list.map(getOppositeAlignmentPlacement));\n    }\n  }\n  return list;\n}\nfunction getOppositePlacement(placement) {\n  const side = getSide(placement);\n  return oppositeSideMap[side] + placement.slice(side.length);\n}\nfunction expandPaddingObject(padding) {\n  return {\n    top: 0,\n    right: 0,\n    bottom: 0,\n    left: 0,\n    ...padding\n  };\n}\nfunction getPaddingObject(padding) {\n  return typeof padding !== 'number' ? expandPaddingObject(padding) : {\n    top: padding,\n    right: padding,\n    bottom: padding,\n    left: padding\n  };\n}\nfunction rectToClientRect(rect) {\n  const {\n    x,\n    y,\n    width,\n    height\n  } = rect;\n  return {\n    width,\n    height,\n    top: y,\n    left: x,\n    right: x + width,\n    bottom: y + height,\n    x,\n    y\n  };\n}\n\nexport { alignments, clamp, createCoords, evaluate, expandPaddingObject, floor, getAlignment, getAlignmentAxis, getAlignmentSides, getAxisLength, getExpandedPlacements, getOppositeAlignmentPlacement, getOppositeAxis, getOppositeAxisPlacements, getOppositePlacement, getPaddingObject, getSide, getSideAxis, max, min, placements, rectToClientRect, round, sides };\n","import { getSideAxis, getAlignmentAxis, getAxisLength, getSide, getAlignment, evaluate, getPaddingObject, rectToClientRect, min, clamp, placements, getAlignmentSides, getOppositeAlignmentPlacement, getOppositePlacement, getExpandedPlacements, getOppositeAxisPlacements, sides, max, getOppositeAxis } from '@floating-ui/utils';\nexport { rectToClientRect } from '@floating-ui/utils';\n\nfunction computeCoordsFromPlacement(_ref, placement, rtl) {\n  let {\n    reference,\n    floating\n  } = _ref;\n  const sideAxis = getSideAxis(placement);\n  const alignmentAxis = getAlignmentAxis(placement);\n  const alignLength = getAxisLength(alignmentAxis);\n  const side = getSide(placement);\n  const isVertical = sideAxis === 'y';\n  const commonX = reference.x + reference.width / 2 - floating.width / 2;\n  const commonY = reference.y + reference.height / 2 - floating.height / 2;\n  const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2;\n  let coords;\n  switch (side) {\n    case 'top':\n      coords = {\n        x: commonX,\n        y: reference.y - floating.height\n      };\n      break;\n    case 'bottom':\n      coords = {\n        x: commonX,\n        y: reference.y + reference.height\n      };\n      break;\n    case 'right':\n      coords = {\n        x: reference.x + reference.width,\n        y: commonY\n      };\n      break;\n    case 'left':\n      coords = {\n        x: reference.x - floating.width,\n        y: commonY\n      };\n      break;\n    default:\n      coords = {\n        x: reference.x,\n        y: reference.y\n      };\n  }\n  switch (getAlignment(placement)) {\n    case 'start':\n      coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n    case 'end':\n      coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1);\n      break;\n  }\n  return coords;\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nasync function detectOverflow(state, options) {\n  var _await$platform$isEle;\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    x,\n    y,\n    platform,\n    rects,\n    elements,\n    strategy\n  } = state;\n  const {\n    boundary = 'clippingAncestors',\n    rootBoundary = 'viewport',\n    elementContext = 'floating',\n    altBoundary = false,\n    padding = 0\n  } = evaluate(options, state);\n  const paddingObject = getPaddingObject(padding);\n  const altContext = elementContext === 'floating' ? 'reference' : 'floating';\n  const element = elements[altBoundary ? altContext : elementContext];\n  const clippingClientRect = rectToClientRect(await platform.getClippingRect({\n    element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))),\n    boundary,\n    rootBoundary,\n    strategy\n  }));\n  const rect = elementContext === 'floating' ? {\n    x,\n    y,\n    width: rects.floating.width,\n    height: rects.floating.height\n  } : rects.reference;\n  const offsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating));\n  const offsetScale = (await (platform.isElement == null ? void 0 : platform.isElement(offsetParent))) ? (await (platform.getScale == null ? void 0 : platform.getScale(offsetParent))) || {\n    x: 1,\n    y: 1\n  } : {\n    x: 1,\n    y: 1\n  };\n  const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  }) : rect);\n  return {\n    top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y,\n    bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y,\n    left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x,\n    right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x\n  };\n}\n\n// Maximum number of resets that can occur before bailing to avoid infinite reset loops.\nconst MAX_RESET_COUNT = 50;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n *\n * This export does not have any `platform` interface logic. You will need to\n * write one for the platform you are using Floating UI with.\n */\nconst computePosition = async (reference, floating, config) => {\n  const {\n    placement = 'bottom',\n    strategy = 'absolute',\n    middleware = [],\n    platform\n  } = config;\n  const platformWithDetectOverflow = platform.detectOverflow ? platform : {\n    ...platform,\n    detectOverflow\n  };\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating));\n  let rects = await platform.getElementRects({\n    reference,\n    floating,\n    strategy\n  });\n  let {\n    x,\n    y\n  } = computeCoordsFromPlacement(rects, placement, rtl);\n  let statefulPlacement = placement;\n  let resetCount = 0;\n  const middlewareData = {};\n  for (let i = 0; i < middleware.length; i++) {\n    const currentMiddleware = middleware[i];\n    if (!currentMiddleware) {\n      continue;\n    }\n    const {\n      name,\n      fn\n    } = currentMiddleware;\n    const {\n      x: nextX,\n      y: nextY,\n      data,\n      reset\n    } = await fn({\n      x,\n      y,\n      initialPlacement: placement,\n      placement: statefulPlacement,\n      strategy,\n      middlewareData,\n      rects,\n      platform: platformWithDetectOverflow,\n      elements: {\n        reference,\n        floating\n      }\n    });\n    x = nextX != null ? nextX : x;\n    y = nextY != null ? nextY : y;\n    middlewareData[name] = {\n      ...middlewareData[name],\n      ...data\n    };\n    if (reset && resetCount < MAX_RESET_COUNT) {\n      resetCount++;\n      if (typeof reset === 'object') {\n        if (reset.placement) {\n          statefulPlacement = reset.placement;\n        }\n        if (reset.rects) {\n          rects = reset.rects === true ? await platform.getElementRects({\n            reference,\n            floating,\n            strategy\n          }) : reset.rects;\n        }\n        ({\n          x,\n          y\n        } = computeCoordsFromPlacement(rects, statefulPlacement, rtl));\n      }\n      i = -1;\n    }\n  }\n  return {\n    x,\n    y,\n    placement: statefulPlacement,\n    strategy,\n    middlewareData\n  };\n};\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = options => ({\n  name: 'arrow',\n  options,\n  async fn(state) {\n    const {\n      x,\n      y,\n      placement,\n      rects,\n      platform,\n      elements,\n      middlewareData\n    } = state;\n    // Since `element` is required, we don't Partial<> the type.\n    const {\n      element,\n      padding = 0\n    } = evaluate(options, state) || {};\n    if (element == null) {\n      return {};\n    }\n    const paddingObject = getPaddingObject(padding);\n    const coords = {\n      x,\n      y\n    };\n    const axis = getAlignmentAxis(placement);\n    const length = getAxisLength(axis);\n    const arrowDimensions = await platform.getDimensions(element);\n    const isYAxis = axis === 'y';\n    const minProp = isYAxis ? 'top' : 'left';\n    const maxProp = isYAxis ? 'bottom' : 'right';\n    const clientProp = isYAxis ? 'clientHeight' : 'clientWidth';\n    const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length];\n    const startDiff = coords[axis] - rects.reference[axis];\n    const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element));\n    let clientSize = arrowOffsetParent ? arrowOffsetParent[clientProp] : 0;\n\n    // DOM platform can return `window` as the `offsetParent`.\n    if (!clientSize || !(await (platform.isElement == null ? void 0 : platform.isElement(arrowOffsetParent)))) {\n      clientSize = elements.floating[clientProp] || rects.floating[length];\n    }\n    const centerToReference = endDiff / 2 - startDiff / 2;\n\n    // If the padding is large enough that it causes the arrow to no longer be\n    // centered, modify the padding so that it is centered.\n    const largestPossiblePadding = clientSize / 2 - arrowDimensions[length] / 2 - 1;\n    const minPadding = min(paddingObject[minProp], largestPossiblePadding);\n    const maxPadding = min(paddingObject[maxProp], largestPossiblePadding);\n\n    // Make sure the arrow doesn't overflow the floating element if the center\n    // point is outside the floating element's bounds.\n    const min$1 = minPadding;\n    const max = clientSize - arrowDimensions[length] - maxPadding;\n    const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference;\n    const offset = clamp(min$1, center, max);\n\n    // If the reference is small enough that the arrow's padding causes it to\n    // to point to nothing for an aligned placement, adjust the offset of the\n    // floating element itself. To ensure `shift()` continues to take action,\n    // a single reset is performed when this is true.\n    const shouldAddOffset = !middlewareData.arrow && getAlignment(placement) != null && center !== offset && rects.reference[length] / 2 - (center < min$1 ? minPadding : maxPadding) - arrowDimensions[length] / 2 < 0;\n    const alignmentOffset = shouldAddOffset ? center < min$1 ? center - min$1 : center - max : 0;\n    return {\n      [axis]: coords[axis] + alignmentOffset,\n      data: {\n        [axis]: offset,\n        centerOffset: center - offset - alignmentOffset,\n        ...(shouldAddOffset && {\n          alignmentOffset\n        })\n      },\n      reset: shouldAddOffset\n    };\n  }\n});\n\nfunction getPlacementList(alignment, autoAlignment, allowedPlacements) {\n  const allowedPlacementsSortedByAlignment = alignment ? [...allowedPlacements.filter(placement => getAlignment(placement) === alignment), ...allowedPlacements.filter(placement => getAlignment(placement) !== alignment)] : allowedPlacements.filter(placement => getSide(placement) === placement);\n  return allowedPlacementsSortedByAlignment.filter(placement => {\n    if (alignment) {\n      return getAlignment(placement) === alignment || (autoAlignment ? getOppositeAlignmentPlacement(placement) !== placement : false);\n    }\n    return true;\n  });\n}\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'autoPlacement',\n    options,\n    async fn(state) {\n      var _middlewareData$autoP, _middlewareData$autoP2, _placementsThatFitOnE;\n      const {\n        rects,\n        middlewareData,\n        placement,\n        platform,\n        elements\n      } = state;\n      const {\n        crossAxis = false,\n        alignment,\n        allowedPlacements = placements,\n        autoAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const placements$1 = alignment !== undefined || allowedPlacements === placements ? getPlacementList(alignment || null, autoAlignment, allowedPlacements) : allowedPlacements;\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const currentIndex = ((_middlewareData$autoP = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP.index) || 0;\n      const currentPlacement = placements$1[currentIndex];\n      if (currentPlacement == null) {\n        return {};\n      }\n      const alignmentSides = getAlignmentSides(currentPlacement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)));\n\n      // Make `computeCoords` start from the right place.\n      if (placement !== currentPlacement) {\n        return {\n          reset: {\n            placement: placements$1[0]\n          }\n        };\n      }\n      const currentOverflows = [overflow[getSide(currentPlacement)], overflow[alignmentSides[0]], overflow[alignmentSides[1]]];\n      const allOverflows = [...(((_middlewareData$autoP2 = middlewareData.autoPlacement) == null ? void 0 : _middlewareData$autoP2.overflows) || []), {\n        placement: currentPlacement,\n        overflows: currentOverflows\n      }];\n      const nextPlacement = placements$1[currentIndex + 1];\n\n      // There are more placements to check.\n      if (nextPlacement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: nextPlacement\n          }\n        };\n      }\n      const placementsSortedByMostSpace = allOverflows.map(d => {\n        const alignment = getAlignment(d.placement);\n        return [d.placement, alignment && crossAxis ?\n        // Check along the mainAxis and main crossAxis side.\n        d.overflows.slice(0, 2).reduce((acc, v) => acc + v, 0) :\n        // Check only the mainAxis.\n        d.overflows[0], d.overflows];\n      }).sort((a, b) => a[1] - b[1]);\n      const placementsThatFitOnEachSide = placementsSortedByMostSpace.filter(d => d[2].slice(0,\n      // Aligned placements should not check their opposite crossAxis\n      // side.\n      getAlignment(d[0]) ? 2 : 3).every(v => v <= 0));\n      const resetPlacement = ((_placementsThatFitOnE = placementsThatFitOnEachSide[0]) == null ? void 0 : _placementsThatFitOnE[0]) || placementsSortedByMostSpace[0][0];\n      if (resetPlacement !== placement) {\n        return {\n          data: {\n            index: currentIndex + 1,\n            overflows: allOverflows\n          },\n          reset: {\n            placement: resetPlacement\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'flip',\n    options,\n    async fn(state) {\n      var _middlewareData$arrow, _middlewareData$flip;\n      const {\n        placement,\n        middlewareData,\n        rects,\n        initialPlacement,\n        platform,\n        elements\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true,\n        fallbackPlacements: specifiedFallbackPlacements,\n        fallbackStrategy = 'bestFit',\n        fallbackAxisSideDirection = 'none',\n        flipAlignment = true,\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n\n      // If a reset by the arrow was caused due to an alignment offset being\n      // added, we should skip any logic now since `flip()` has already done its\n      // work.\n      // https://github.com/floating-ui/floating-ui/issues/2549#issuecomment-1719601643\n      if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      const side = getSide(placement);\n      const initialSideAxis = getSideAxis(initialPlacement);\n      const isBasePlacement = getSide(initialPlacement) === initialPlacement;\n      const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n      const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement));\n      const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== 'none';\n      if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) {\n        fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl));\n      }\n      const placements = [initialPlacement, ...fallbackPlacements];\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const overflows = [];\n      let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || [];\n      if (checkMainAxis) {\n        overflows.push(overflow[side]);\n      }\n      if (checkCrossAxis) {\n        const sides = getAlignmentSides(placement, rects, rtl);\n        overflows.push(overflow[sides[0]], overflow[sides[1]]);\n      }\n      overflowsData = [...overflowsData, {\n        placement,\n        overflows\n      }];\n\n      // One or more sides is overflowing.\n      if (!overflows.every(side => side <= 0)) {\n        var _middlewareData$flip2, _overflowsData$filter;\n        const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1;\n        const nextPlacement = placements[nextIndex];\n        if (nextPlacement) {\n          const ignoreCrossAxisOverflow = checkCrossAxis === 'alignment' ? initialSideAxis !== getSideAxis(nextPlacement) : false;\n          if (!ignoreCrossAxisOverflow ||\n          // We leave the current main axis only if every placement on that axis\n          // overflows the main axis.\n          overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {\n            // Try next placement and re-run the lifecycle.\n            return {\n              data: {\n                index: nextIndex,\n                overflows: overflowsData\n              },\n              reset: {\n                placement: nextPlacement\n              }\n            };\n          }\n        }\n\n        // First, find the candidates that fit on the mainAxis side of overflow,\n        // then find the placement that fits the best on the main crossAxis side.\n        let resetPlacement = (_overflowsData$filter = overflowsData.filter(d => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement;\n\n        // Otherwise fallback.\n        if (!resetPlacement) {\n          switch (fallbackStrategy) {\n            case 'bestFit':\n              {\n                var _overflowsData$filter2;\n                const placement = (_overflowsData$filter2 = overflowsData.filter(d => {\n                  if (hasFallbackAxisSideDirection) {\n                    const currentSideAxis = getSideAxis(d.placement);\n                    return currentSideAxis === initialSideAxis ||\n                    // Create a bias to the `y` side axis due to horizontal\n                    // reading directions favoring greater width.\n                    currentSideAxis === 'y';\n                  }\n                  return true;\n                }).map(d => [d.placement, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0];\n                if (placement) {\n                  resetPlacement = placement;\n                }\n                break;\n              }\n            case 'initialPlacement':\n              resetPlacement = initialPlacement;\n              break;\n          }\n        }\n        if (placement !== resetPlacement) {\n          return {\n            reset: {\n              placement: resetPlacement\n            }\n          };\n        }\n      }\n      return {};\n    }\n  };\n};\n\nfunction getSideOffsets(overflow, rect) {\n  return {\n    top: overflow.top - rect.height,\n    right: overflow.right - rect.width,\n    bottom: overflow.bottom - rect.height,\n    left: overflow.left - rect.width\n  };\n}\nfunction isAnySideFullyClipped(overflow) {\n  return sides.some(side => overflow[side] >= 0);\n}\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'hide',\n    options,\n    async fn(state) {\n      const {\n        rects,\n        platform\n      } = state;\n      const {\n        strategy = 'referenceHidden',\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      switch (strategy) {\n        case 'referenceHidden':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              elementContext: 'reference'\n            });\n            const offsets = getSideOffsets(overflow, rects.reference);\n            return {\n              data: {\n                referenceHiddenOffsets: offsets,\n                referenceHidden: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        case 'escaped':\n          {\n            const overflow = await platform.detectOverflow(state, {\n              ...detectOverflowOptions,\n              altBoundary: true\n            });\n            const offsets = getSideOffsets(overflow, rects.floating);\n            return {\n              data: {\n                escapedOffsets: offsets,\n                escaped: isAnySideFullyClipped(offsets)\n              }\n            };\n          }\n        default:\n          {\n            return {};\n          }\n      }\n    }\n  };\n};\n\nfunction getBoundingRect(rects) {\n  const minX = min(...rects.map(rect => rect.left));\n  const minY = min(...rects.map(rect => rect.top));\n  const maxX = max(...rects.map(rect => rect.right));\n  const maxY = max(...rects.map(rect => rect.bottom));\n  return {\n    x: minX,\n    y: minY,\n    width: maxX - minX,\n    height: maxY - minY\n  };\n}\nfunction getRectsByLine(rects) {\n  const sortedRects = rects.slice().sort((a, b) => a.y - b.y);\n  const groups = [];\n  let prevRect = null;\n  for (let i = 0; i < sortedRects.length; i++) {\n    const rect = sortedRects[i];\n    if (!prevRect || rect.y - prevRect.y > prevRect.height / 2) {\n      groups.push([rect]);\n    } else {\n      groups[groups.length - 1].push(rect);\n    }\n    prevRect = rect;\n  }\n  return groups.map(rect => rectToClientRect(getBoundingRect(rect)));\n}\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'inline',\n    options,\n    async fn(state) {\n      const {\n        placement,\n        elements,\n        rects,\n        platform,\n        strategy\n      } = state;\n      // A MouseEvent's client{X,Y} coords can be up to 2 pixels off a\n      // ClientRect's bounds, despite the event listener being triggered. A\n      // padding of 2 seems to handle this issue.\n      const {\n        padding = 2,\n        x,\n        y\n      } = evaluate(options, state);\n      const nativeClientRects = Array.from((await (platform.getClientRects == null ? void 0 : platform.getClientRects(elements.reference))) || []);\n      const clientRects = getRectsByLine(nativeClientRects);\n      const fallback = rectToClientRect(getBoundingRect(nativeClientRects));\n      const paddingObject = getPaddingObject(padding);\n      function getBoundingClientRect() {\n        // There are two rects and they are disjoined.\n        if (clientRects.length === 2 && clientRects[0].left > clientRects[1].right && x != null && y != null) {\n          // Find the first rect in which the point is fully inside.\n          return clientRects.find(rect => x > rect.left - paddingObject.left && x < rect.right + paddingObject.right && y > rect.top - paddingObject.top && y < rect.bottom + paddingObject.bottom) || fallback;\n        }\n\n        // There are 2 or more connected rects.\n        if (clientRects.length >= 2) {\n          if (getSideAxis(placement) === 'y') {\n            const firstRect = clientRects[0];\n            const lastRect = clientRects[clientRects.length - 1];\n            const isTop = getSide(placement) === 'top';\n            const top = firstRect.top;\n            const bottom = lastRect.bottom;\n            const left = isTop ? firstRect.left : lastRect.left;\n            const right = isTop ? firstRect.right : lastRect.right;\n            const width = right - left;\n            const height = bottom - top;\n            return {\n              top,\n              bottom,\n              left,\n              right,\n              width,\n              height,\n              x: left,\n              y: top\n            };\n          }\n          const isLeftSide = getSide(placement) === 'left';\n          const maxRight = max(...clientRects.map(rect => rect.right));\n          const minLeft = min(...clientRects.map(rect => rect.left));\n          const measureRects = clientRects.filter(rect => isLeftSide ? rect.left === minLeft : rect.right === maxRight);\n          const top = measureRects[0].top;\n          const bottom = measureRects[measureRects.length - 1].bottom;\n          const left = minLeft;\n          const right = maxRight;\n          const width = right - left;\n          const height = bottom - top;\n          return {\n            top,\n            bottom,\n            left,\n            right,\n            width,\n            height,\n            x: left,\n            y: top\n          };\n        }\n        return fallback;\n      }\n      const resetRects = await platform.getElementRects({\n        reference: {\n          getBoundingClientRect\n        },\n        floating: elements.floating,\n        strategy\n      });\n      if (rects.reference.x !== resetRects.reference.x || rects.reference.y !== resetRects.reference.y || rects.reference.width !== resetRects.reference.width || rects.reference.height !== resetRects.reference.height) {\n        return {\n          reset: {\n            rects: resetRects\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nconst originSides = /*#__PURE__*/new Set(['left', 'top']);\n\n// For type backwards-compatibility, the `OffsetOptions` type was also\n// Derivable.\n\nasync function convertValueToCoords(state, options) {\n  const {\n    placement,\n    platform,\n    elements\n  } = state;\n  const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating));\n  const side = getSide(placement);\n  const alignment = getAlignment(placement);\n  const isVertical = getSideAxis(placement) === 'y';\n  const mainAxisMulti = originSides.has(side) ? -1 : 1;\n  const crossAxisMulti = rtl && isVertical ? -1 : 1;\n  const rawValue = evaluate(options, state);\n\n  // eslint-disable-next-line prefer-const\n  let {\n    mainAxis,\n    crossAxis,\n    alignmentAxis\n  } = typeof rawValue === 'number' ? {\n    mainAxis: rawValue,\n    crossAxis: 0,\n    alignmentAxis: null\n  } : {\n    mainAxis: rawValue.mainAxis || 0,\n    crossAxis: rawValue.crossAxis || 0,\n    alignmentAxis: rawValue.alignmentAxis\n  };\n  if (alignment && typeof alignmentAxis === 'number') {\n    crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis;\n  }\n  return isVertical ? {\n    x: crossAxis * crossAxisMulti,\n    y: mainAxis * mainAxisMulti\n  } : {\n    x: mainAxis * mainAxisMulti,\n    y: crossAxis * crossAxisMulti\n  };\n}\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = function (options) {\n  if (options === void 0) {\n    options = 0;\n  }\n  return {\n    name: 'offset',\n    options,\n    async fn(state) {\n      var _middlewareData$offse, _middlewareData$arrow;\n      const {\n        x,\n        y,\n        placement,\n        middlewareData\n      } = state;\n      const diffCoords = await convertValueToCoords(state, options);\n\n      // If the placement is the same and the arrow caused an alignment offset\n      // then we don't need to change the positioning coordinates.\n      if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) {\n        return {};\n      }\n      return {\n        x: x + diffCoords.x,\n        y: y + diffCoords.y,\n        data: {\n          ...diffCoords,\n          placement\n        }\n      };\n    }\n  };\n};\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'shift',\n    options,\n    async fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        platform\n      } = state;\n      const {\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = false,\n        limiter = {\n          fn: _ref => {\n            let {\n              x,\n              y\n            } = _ref;\n            return {\n              x,\n              y\n            };\n          }\n        },\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const crossAxis = getSideAxis(getSide(placement));\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      if (checkMainAxis) {\n        const minSide = mainAxis === 'y' ? 'top' : 'left';\n        const maxSide = mainAxis === 'y' ? 'bottom' : 'right';\n        const min = mainAxisCoord + overflow[minSide];\n        const max = mainAxisCoord - overflow[maxSide];\n        mainAxisCoord = clamp(min, mainAxisCoord, max);\n      }\n      if (checkCrossAxis) {\n        const minSide = crossAxis === 'y' ? 'top' : 'left';\n        const maxSide = crossAxis === 'y' ? 'bottom' : 'right';\n        const min = crossAxisCoord + overflow[minSide];\n        const max = crossAxisCoord - overflow[maxSide];\n        crossAxisCoord = clamp(min, crossAxisCoord, max);\n      }\n      const limitedCoords = limiter.fn({\n        ...state,\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      });\n      return {\n        ...limitedCoords,\n        data: {\n          x: limitedCoords.x - x,\n          y: limitedCoords.y - y,\n          enabled: {\n            [mainAxis]: checkMainAxis,\n            [crossAxis]: checkCrossAxis\n          }\n        }\n      };\n    }\n  };\n};\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    options,\n    fn(state) {\n      const {\n        x,\n        y,\n        placement,\n        rects,\n        middlewareData\n      } = state;\n      const {\n        offset = 0,\n        mainAxis: checkMainAxis = true,\n        crossAxis: checkCrossAxis = true\n      } = evaluate(options, state);\n      const coords = {\n        x,\n        y\n      };\n      const crossAxis = getSideAxis(placement);\n      const mainAxis = getOppositeAxis(crossAxis);\n      let mainAxisCoord = coords[mainAxis];\n      let crossAxisCoord = coords[crossAxis];\n      const rawOffset = evaluate(offset, state);\n      const computedOffset = typeof rawOffset === 'number' ? {\n        mainAxis: rawOffset,\n        crossAxis: 0\n      } : {\n        mainAxis: 0,\n        crossAxis: 0,\n        ...rawOffset\n      };\n      if (checkMainAxis) {\n        const len = mainAxis === 'y' ? 'height' : 'width';\n        const limitMin = rects.reference[mainAxis] - rects.floating[len] + computedOffset.mainAxis;\n        const limitMax = rects.reference[mainAxis] + rects.reference[len] - computedOffset.mainAxis;\n        if (mainAxisCoord < limitMin) {\n          mainAxisCoord = limitMin;\n        } else if (mainAxisCoord > limitMax) {\n          mainAxisCoord = limitMax;\n        }\n      }\n      if (checkCrossAxis) {\n        var _middlewareData$offse, _middlewareData$offse2;\n        const len = mainAxis === 'y' ? 'width' : 'height';\n        const isOriginSide = originSides.has(getSide(placement));\n        const limitMin = rects.reference[crossAxis] - rects.floating[len] + (isOriginSide ? ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse[crossAxis]) || 0 : 0) + (isOriginSide ? 0 : computedOffset.crossAxis);\n        const limitMax = rects.reference[crossAxis] + rects.reference[len] + (isOriginSide ? 0 : ((_middlewareData$offse2 = middlewareData.offset) == null ? void 0 : _middlewareData$offse2[crossAxis]) || 0) - (isOriginSide ? computedOffset.crossAxis : 0);\n        if (crossAxisCoord < limitMin) {\n          crossAxisCoord = limitMin;\n        } else if (crossAxisCoord > limitMax) {\n          crossAxisCoord = limitMax;\n        }\n      }\n      return {\n        [mainAxis]: mainAxisCoord,\n        [crossAxis]: crossAxisCoord\n      };\n    }\n  };\n};\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = function (options) {\n  if (options === void 0) {\n    options = {};\n  }\n  return {\n    name: 'size',\n    options,\n    async fn(state) {\n      var _state$middlewareData, _state$middlewareData2;\n      const {\n        placement,\n        rects,\n        platform,\n        elements\n      } = state;\n      const {\n        apply = () => {},\n        ...detectOverflowOptions\n      } = evaluate(options, state);\n      const overflow = await platform.detectOverflow(state, detectOverflowOptions);\n      const side = getSide(placement);\n      const alignment = getAlignment(placement);\n      const isYAxis = getSideAxis(placement) === 'y';\n      const {\n        width,\n        height\n      } = rects.floating;\n      let heightSide;\n      let widthSide;\n      if (side === 'top' || side === 'bottom') {\n        heightSide = side;\n        widthSide = alignment === ((await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))) ? 'start' : 'end') ? 'left' : 'right';\n      } else {\n        widthSide = side;\n        heightSide = alignment === 'end' ? 'top' : 'bottom';\n      }\n      const maximumClippingHeight = height - overflow.top - overflow.bottom;\n      const maximumClippingWidth = width - overflow.left - overflow.right;\n      const overflowAvailableHeight = min(height - overflow[heightSide], maximumClippingHeight);\n      const overflowAvailableWidth = min(width - overflow[widthSide], maximumClippingWidth);\n      const noShift = !state.middlewareData.shift;\n      let availableHeight = overflowAvailableHeight;\n      let availableWidth = overflowAvailableWidth;\n      if ((_state$middlewareData = state.middlewareData.shift) != null && _state$middlewareData.enabled.x) {\n        availableWidth = maximumClippingWidth;\n      }\n      if ((_state$middlewareData2 = state.middlewareData.shift) != null && _state$middlewareData2.enabled.y) {\n        availableHeight = maximumClippingHeight;\n      }\n      if (noShift && !alignment) {\n        const xMin = max(overflow.left, 0);\n        const xMax = max(overflow.right, 0);\n        const yMin = max(overflow.top, 0);\n        const yMax = max(overflow.bottom, 0);\n        if (isYAxis) {\n          availableWidth = width - 2 * (xMin !== 0 || xMax !== 0 ? xMin + xMax : max(overflow.left, overflow.right));\n        } else {\n          availableHeight = height - 2 * (yMin !== 0 || yMax !== 0 ? yMin + yMax : max(overflow.top, overflow.bottom));\n        }\n      }\n      await apply({\n        ...state,\n        availableWidth,\n        availableHeight\n      });\n      const nextDimensions = await platform.getDimensions(elements.floating);\n      if (width !== nextDimensions.width || height !== nextDimensions.height) {\n        return {\n          reset: {\n            rects: true\n          }\n        };\n      }\n      return {};\n    }\n  };\n};\n\nexport { arrow, autoPlacement, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, shift, size };\n","function hasWindow() {\n  return typeof window !== 'undefined';\n}\nfunction getNodeName(node) {\n  if (isNode(node)) {\n    return (node.nodeName || '').toLowerCase();\n  }\n  // Mocked nodes in testing environments may not be instances of Node. By\n  // returning `#document` an infinite loop won't occur.\n  // https://github.com/floating-ui/floating-ui/issues/2317\n  return '#document';\n}\nfunction getWindow(node) {\n  var _node$ownerDocument;\n  return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window;\n}\nfunction getDocumentElement(node) {\n  var _ref;\n  return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement;\n}\nfunction isNode(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Node || value instanceof getWindow(value).Node;\n}\nfunction isElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof Element || value instanceof getWindow(value).Element;\n}\nfunction isHTMLElement(value) {\n  if (!hasWindow()) {\n    return false;\n  }\n  return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement;\n}\nfunction isShadowRoot(value) {\n  if (!hasWindow() || typeof ShadowRoot === 'undefined') {\n    return false;\n  }\n  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;\n}\nfunction isOverflowElement(element) {\n  const {\n    overflow,\n    overflowX,\n    overflowY,\n    display\n  } = getComputedStyle(element);\n  return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && display !== 'inline' && display !== 'contents';\n}\nfunction isTableElement(element) {\n  return /^(table|td|th)$/.test(getNodeName(element));\n}\nfunction isTopLayer(element) {\n  try {\n    if (element.matches(':popover-open')) {\n      return true;\n    }\n  } catch (_e) {\n    // no-op\n  }\n  try {\n    return element.matches(':modal');\n  } catch (_e) {\n    return false;\n  }\n}\nconst willChangeRe = /transform|translate|scale|rotate|perspective|filter/;\nconst containRe = /paint|layout|strict|content/;\nconst isNotNone = value => !!value && value !== 'none';\nlet isWebKitValue;\nfunction isContainingBlock(elementOrCss) {\n  const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  // https://drafts.csswg.org/css-transforms-2/#individual-transforms\n  return isNotNone(css.transform) || isNotNone(css.translate) || isNotNone(css.scale) || isNotNone(css.rotate) || isNotNone(css.perspective) || !isWebKit() && (isNotNone(css.backdropFilter) || isNotNone(css.filter)) || willChangeRe.test(css.willChange || '') || containRe.test(css.contain || '');\n}\nfunction getContainingBlock(element) {\n  let currentNode = getParentNode(element);\n  while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    if (isContainingBlock(currentNode)) {\n      return currentNode;\n    } else if (isTopLayer(currentNode)) {\n      return null;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  return null;\n}\nfunction isWebKit() {\n  if (isWebKitValue == null) {\n    isWebKitValue = typeof CSS !== 'undefined' && CSS.supports && CSS.supports('-webkit-backdrop-filter', 'none');\n  }\n  return isWebKitValue;\n}\nfunction isLastTraversableNode(node) {\n  return /^(html|body|#document)$/.test(getNodeName(node));\n}\nfunction getComputedStyle(element) {\n  return getWindow(element).getComputedStyle(element);\n}\nfunction getNodeScroll(element) {\n  if (isElement(element)) {\n    return {\n      scrollLeft: element.scrollLeft,\n      scrollTop: element.scrollTop\n    };\n  }\n  return {\n    scrollLeft: element.scrollX,\n    scrollTop: element.scrollY\n  };\n}\nfunction getParentNode(node) {\n  if (getNodeName(node) === 'html') {\n    return node;\n  }\n  const result =\n  // Step into the shadow DOM of the parent of a slotted node.\n  node.assignedSlot ||\n  // DOM Element detected.\n  node.parentNode ||\n  // ShadowRoot detected.\n  isShadowRoot(node) && node.host ||\n  // Fallback.\n  getDocumentElement(node);\n  return isShadowRoot(result) ? result.host : result;\n}\nfunction getNearestOverflowAncestor(node) {\n  const parentNode = getParentNode(node);\n  if (isLastTraversableNode(parentNode)) {\n    return node.ownerDocument ? node.ownerDocument.body : node.body;\n  }\n  if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) {\n    return parentNode;\n  }\n  return getNearestOverflowAncestor(parentNode);\n}\nfunction getOverflowAncestors(node, list, traverseIframes) {\n  var _node$ownerDocument2;\n  if (list === void 0) {\n    list = [];\n  }\n  if (traverseIframes === void 0) {\n    traverseIframes = true;\n  }\n  const scrollableAncestor = getNearestOverflowAncestor(node);\n  const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body);\n  const win = getWindow(scrollableAncestor);\n  if (isBody) {\n    const frameElement = getFrameElement(win);\n    return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []);\n  } else {\n    return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes));\n  }\n}\nfunction getFrameElement(win) {\n  return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null;\n}\n\nexport { getComputedStyle, getContainingBlock, getDocumentElement, getFrameElement, getNearestOverflowAncestor, getNodeName, getNodeScroll, getOverflowAncestors, getParentNode, getWindow, isContainingBlock, isElement, isHTMLElement, isLastTraversableNode, isNode, isOverflowElement, isShadowRoot, isTableElement, isTopLayer, isWebKit };\n","import { rectToClientRect, arrow as arrow$1, autoPlacement as autoPlacement$1, detectOverflow as detectOverflow$1, flip as flip$1, hide as hide$1, inline as inline$1, limitShift as limitShift$1, offset as offset$1, shift as shift$1, size as size$1, computePosition as computePosition$1 } from '@floating-ui/core';\nimport { round, createCoords, max, min, floor } from '@floating-ui/utils';\nimport { getComputedStyle as getComputedStyle$1, isHTMLElement, isElement, getWindow, isWebKit, getFrameElement, getNodeScroll, getDocumentElement, isTopLayer, getNodeName, isOverflowElement, getOverflowAncestors, getParentNode, isLastTraversableNode, isContainingBlock, isTableElement, getContainingBlock } from '@floating-ui/utils/dom';\nexport { getOverflowAncestors } from '@floating-ui/utils/dom';\n\nfunction getCssDimensions(element) {\n  const css = getComputedStyle$1(element);\n  // In testing environments, the `width` and `height` properties are empty\n  // strings for SVG elements, returning NaN. Fallback to `0` in this case.\n  let width = parseFloat(css.width) || 0;\n  let height = parseFloat(css.height) || 0;\n  const hasOffset = isHTMLElement(element);\n  const offsetWidth = hasOffset ? element.offsetWidth : width;\n  const offsetHeight = hasOffset ? element.offsetHeight : height;\n  const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight;\n  if (shouldFallback) {\n    width = offsetWidth;\n    height = offsetHeight;\n  }\n  return {\n    width,\n    height,\n    $: shouldFallback\n  };\n}\n\nfunction unwrapElement(element) {\n  return !isElement(element) ? element.contextElement : element;\n}\n\nfunction getScale(element) {\n  const domElement = unwrapElement(element);\n  if (!isHTMLElement(domElement)) {\n    return createCoords(1);\n  }\n  const rect = domElement.getBoundingClientRect();\n  const {\n    width,\n    height,\n    $\n  } = getCssDimensions(domElement);\n  let x = ($ ? round(rect.width) : rect.width) / width;\n  let y = ($ ? round(rect.height) : rect.height) / height;\n\n  // 0, NaN, or Infinity should always fallback to 1.\n\n  if (!x || !Number.isFinite(x)) {\n    x = 1;\n  }\n  if (!y || !Number.isFinite(y)) {\n    y = 1;\n  }\n  return {\n    x,\n    y\n  };\n}\n\nconst noOffsets = /*#__PURE__*/createCoords(0);\nfunction getVisualOffsets(element) {\n  const win = getWindow(element);\n  if (!isWebKit() || !win.visualViewport) {\n    return noOffsets;\n  }\n  return {\n    x: win.visualViewport.offsetLeft,\n    y: win.visualViewport.offsetTop\n  };\n}\nfunction shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) {\n  if (isFixed === void 0) {\n    isFixed = false;\n  }\n  if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) {\n    return false;\n  }\n  return isFixed;\n}\n\nfunction getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) {\n  if (includeScale === void 0) {\n    includeScale = false;\n  }\n  if (isFixedStrategy === void 0) {\n    isFixedStrategy = false;\n  }\n  const clientRect = element.getBoundingClientRect();\n  const domElement = unwrapElement(element);\n  let scale = createCoords(1);\n  if (includeScale) {\n    if (offsetParent) {\n      if (isElement(offsetParent)) {\n        scale = getScale(offsetParent);\n      }\n    } else {\n      scale = getScale(element);\n    }\n  }\n  const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0);\n  let x = (clientRect.left + visualOffsets.x) / scale.x;\n  let y = (clientRect.top + visualOffsets.y) / scale.y;\n  let width = clientRect.width / scale.x;\n  let height = clientRect.height / scale.y;\n  if (domElement) {\n    const win = getWindow(domElement);\n    const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent;\n    let currentWin = win;\n    let currentIFrame = getFrameElement(currentWin);\n    while (currentIFrame && offsetParent && offsetWin !== currentWin) {\n      const iframeScale = getScale(currentIFrame);\n      const iframeRect = currentIFrame.getBoundingClientRect();\n      const css = getComputedStyle$1(currentIFrame);\n      const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;\n      const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;\n      x *= iframeScale.x;\n      y *= iframeScale.y;\n      width *= iframeScale.x;\n      height *= iframeScale.y;\n      x += left;\n      y += top;\n      currentWin = getWindow(currentIFrame);\n      currentIFrame = getFrameElement(currentWin);\n    }\n  }\n  return rectToClientRect({\n    width,\n    height,\n    x,\n    y\n  });\n}\n\n// If <html> has a CSS width greater than the viewport, then this will be\n// incorrect for RTL.\nfunction getWindowScrollBarX(element, rect) {\n  const leftScroll = getNodeScroll(element).scrollLeft;\n  if (!rect) {\n    return getBoundingClientRect(getDocumentElement(element)).left + leftScroll;\n  }\n  return rect.left + leftScroll;\n}\n\nfunction getHTMLOffset(documentElement, scroll) {\n  const htmlRect = documentElement.getBoundingClientRect();\n  const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);\n  const y = htmlRect.top + scroll.scrollTop;\n  return {\n    x,\n    y\n  };\n}\n\nfunction convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {\n  let {\n    elements,\n    rect,\n    offsetParent,\n    strategy\n  } = _ref;\n  const isFixed = strategy === 'fixed';\n  const documentElement = getDocumentElement(offsetParent);\n  const topLayer = elements ? isTopLayer(elements.floating) : false;\n  if (offsetParent === documentElement || topLayer && isFixed) {\n    return rect;\n  }\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  let scale = createCoords(1);\n  const offsets = createCoords(0);\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent);\n      scale = getScale(offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    }\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  return {\n    width: rect.width * scale.x,\n    height: rect.height * scale.y,\n    x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x,\n    y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y\n  };\n}\n\nfunction getClientRects(element) {\n  return Array.from(element.getClientRects());\n}\n\n// Gets the entire size of the scrollable document area, even extending outside\n// of the `<html>` and `<body>` rect bounds if horizontally scrollable.\nfunction getDocumentRect(element) {\n  const html = getDocumentElement(element);\n  const scroll = getNodeScroll(element);\n  const body = element.ownerDocument.body;\n  const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth);\n  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);\n  let x = -scroll.scrollLeft + getWindowScrollBarX(element);\n  const y = -scroll.scrollTop;\n  if (getComputedStyle$1(body).direction === 'rtl') {\n    x += max(html.clientWidth, body.clientWidth) - width;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Safety check: ensure the scrollbar space is reasonable in case this\n// calculation is affected by unusual styles.\n// Most scrollbars leave 15-18px of space.\nconst SCROLLBAR_MAX = 25;\nfunction getViewportRect(element, strategy) {\n  const win = getWindow(element);\n  const html = getDocumentElement(element);\n  const visualViewport = win.visualViewport;\n  let width = html.clientWidth;\n  let height = html.clientHeight;\n  let x = 0;\n  let y = 0;\n  if (visualViewport) {\n    width = visualViewport.width;\n    height = visualViewport.height;\n    const visualViewportBased = isWebKit();\n    if (!visualViewportBased || visualViewportBased && strategy === 'fixed') {\n      x = visualViewport.offsetLeft;\n      y = visualViewport.offsetTop;\n    }\n  }\n  const windowScrollbarX = getWindowScrollBarX(html);\n  // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the\n  // visual width of the <html> but this is not considered in the size\n  // of `html.clientWidth`.\n  if (windowScrollbarX <= 0) {\n    const doc = html.ownerDocument;\n    const body = doc.body;\n    const bodyStyles = getComputedStyle(body);\n    const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;\n    const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);\n    if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {\n      width -= clippingStableScrollbarWidth;\n    }\n  } else if (windowScrollbarX <= SCROLLBAR_MAX) {\n    // If the <body> scrollbar is on the left, the width needs to be extended\n    // by the scrollbar amount so there isn't extra space on the right.\n    width += windowScrollbarX;\n  }\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\n\n// Returns the inner client rect, subtracting scrollbars if present.\nfunction getInnerBoundingClientRect(element, strategy) {\n  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');\n  const top = clientRect.top + element.clientTop;\n  const left = clientRect.left + element.clientLeft;\n  const scale = isHTMLElement(element) ? getScale(element) : createCoords(1);\n  const width = element.clientWidth * scale.x;\n  const height = element.clientHeight * scale.y;\n  const x = left * scale.x;\n  const y = top * scale.y;\n  return {\n    width,\n    height,\n    x,\n    y\n  };\n}\nfunction getClientRectFromClippingAncestor(element, clippingAncestor, strategy) {\n  let rect;\n  if (clippingAncestor === 'viewport') {\n    rect = getViewportRect(element, strategy);\n  } else if (clippingAncestor === 'document') {\n    rect = getDocumentRect(getDocumentElement(element));\n  } else if (isElement(clippingAncestor)) {\n    rect = getInnerBoundingClientRect(clippingAncestor, strategy);\n  } else {\n    const visualOffsets = getVisualOffsets(element);\n    rect = {\n      x: clippingAncestor.x - visualOffsets.x,\n      y: clippingAncestor.y - visualOffsets.y,\n      width: clippingAncestor.width,\n      height: clippingAncestor.height\n    };\n  }\n  return rectToClientRect(rect);\n}\nfunction hasFixedPositionAncestor(element, stopNode) {\n  const parentNode = getParentNode(element);\n  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {\n    return false;\n  }\n  return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);\n}\n\n// A \"clipping ancestor\" is an `overflow` element with the characteristic of\n// clipping (or hiding) child elements. This returns all clipping ancestors\n// of the given element up the tree.\nfunction getClippingElementAncestors(element, cache) {\n  const cachedResult = cache.get(element);\n  if (cachedResult) {\n    return cachedResult;\n  }\n  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');\n  let currentContainingBlockComputedStyle = null;\n  const elementIsFixed = getComputedStyle$1(element).position === 'fixed';\n  let currentNode = elementIsFixed ? getParentNode(element) : element;\n\n  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block\n  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {\n    const computedStyle = getComputedStyle$1(currentNode);\n    const currentNodeIsContaining = isContainingBlock(currentNode);\n    if (!currentNodeIsContaining && computedStyle.position === 'fixed') {\n      currentContainingBlockComputedStyle = null;\n    }\n    const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && (currentContainingBlockComputedStyle.position === 'absolute' || currentContainingBlockComputedStyle.position === 'fixed') || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);\n    if (shouldDropCurrentNode) {\n      // Drop non-containing blocks.\n      result = result.filter(ancestor => ancestor !== currentNode);\n    } else {\n      // Record last containing block for next iteration.\n      currentContainingBlockComputedStyle = computedStyle;\n    }\n    currentNode = getParentNode(currentNode);\n  }\n  cache.set(element, result);\n  return result;\n}\n\n// Gets the maximum area that the element is visible in due to any number of\n// clipping ancestors.\nfunction getClippingRect(_ref) {\n  let {\n    element,\n    boundary,\n    rootBoundary,\n    strategy\n  } = _ref;\n  const elementClippingAncestors = boundary === 'clippingAncestors' ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary);\n  const clippingAncestors = [...elementClippingAncestors, rootBoundary];\n  const firstRect = getClientRectFromClippingAncestor(element, clippingAncestors[0], strategy);\n  let top = firstRect.top;\n  let right = firstRect.right;\n  let bottom = firstRect.bottom;\n  let left = firstRect.left;\n  for (let i = 1; i < clippingAncestors.length; i++) {\n    const rect = getClientRectFromClippingAncestor(element, clippingAncestors[i], strategy);\n    top = max(rect.top, top);\n    right = min(rect.right, right);\n    bottom = min(rect.bottom, bottom);\n    left = max(rect.left, left);\n  }\n  return {\n    width: right - left,\n    height: bottom - top,\n    x: left,\n    y: top\n  };\n}\n\nfunction getDimensions(element) {\n  const {\n    width,\n    height\n  } = getCssDimensions(element);\n  return {\n    width,\n    height\n  };\n}\n\nfunction getRectRelativeToOffsetParent(element, offsetParent, strategy) {\n  const isOffsetParentAnElement = isHTMLElement(offsetParent);\n  const documentElement = getDocumentElement(offsetParent);\n  const isFixed = strategy === 'fixed';\n  const rect = getBoundingClientRect(element, true, isFixed, offsetParent);\n  let scroll = {\n    scrollLeft: 0,\n    scrollTop: 0\n  };\n  const offsets = createCoords(0);\n\n  // If the <body> scrollbar appears on the left (e.g. RTL systems). Use\n  // Firefox with layout.scrollbar.side = 3 in about:config to test this.\n  function setLeftRTLScrollbarOffset() {\n    offsets.x = getWindowScrollBarX(documentElement);\n  }\n  if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) {\n    if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) {\n      scroll = getNodeScroll(offsetParent);\n    }\n    if (isOffsetParentAnElement) {\n      const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent);\n      offsets.x = offsetRect.x + offsetParent.clientLeft;\n      offsets.y = offsetRect.y + offsetParent.clientTop;\n    } else if (documentElement) {\n      setLeftRTLScrollbarOffset();\n    }\n  }\n  if (isFixed && !isOffsetParentAnElement && documentElement) {\n    setLeftRTLScrollbarOffset();\n  }\n  const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);\n  const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x;\n  const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y;\n  return {\n    x,\n    y,\n    width: rect.width,\n    height: rect.height\n  };\n}\n\nfunction isStaticPositioned(element) {\n  return getComputedStyle$1(element).position === 'static';\n}\n\nfunction getTrueOffsetParent(element, polyfill) {\n  if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {\n    return null;\n  }\n  if (polyfill) {\n    return polyfill(element);\n  }\n  let rawOffsetParent = element.offsetParent;\n\n  // Firefox returns the <html> element as the offsetParent if it's non-static,\n  // while Chrome and Safari return the <body> element. The <body> element must\n  // be used to perform the correct calculations even if the <html> element is\n  // non-static.\n  if (getDocumentElement(element) === rawOffsetParent) {\n    rawOffsetParent = rawOffsetParent.ownerDocument.body;\n  }\n  return rawOffsetParent;\n}\n\n// Gets the closest ancestor positioned element. Handles some edge cases,\n// such as table ancestors and cross browser bugs.\nfunction getOffsetParent(element, polyfill) {\n  const win = getWindow(element);\n  if (isTopLayer(element)) {\n    return win;\n  }\n  if (!isHTMLElement(element)) {\n    let svgOffsetParent = getParentNode(element);\n    while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) {\n      if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) {\n        return svgOffsetParent;\n      }\n      svgOffsetParent = getParentNode(svgOffsetParent);\n    }\n    return win;\n  }\n  let offsetParent = getTrueOffsetParent(element, polyfill);\n  while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) {\n    offsetParent = getTrueOffsetParent(offsetParent, polyfill);\n  }\n  if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) {\n    return win;\n  }\n  return offsetParent || getContainingBlock(element) || win;\n}\n\nconst getElementRects = async function (data) {\n  const getOffsetParentFn = this.getOffsetParent || getOffsetParent;\n  const getDimensionsFn = this.getDimensions;\n  const floatingDimensions = await getDimensionsFn(data.floating);\n  return {\n    reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy),\n    floating: {\n      x: 0,\n      y: 0,\n      width: floatingDimensions.width,\n      height: floatingDimensions.height\n    }\n  };\n};\n\nfunction isRTL(element) {\n  return getComputedStyle$1(element).direction === 'rtl';\n}\n\nconst platform = {\n  convertOffsetParentRelativeRectToViewportRelativeRect,\n  getDocumentElement,\n  getClippingRect,\n  getOffsetParent,\n  getElementRects,\n  getClientRects,\n  getDimensions,\n  getScale,\n  isElement,\n  isRTL\n};\n\nfunction rectsAreEqual(a, b) {\n  return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height;\n}\n\n// https://samthor.au/2021/observing-dom/\nfunction observeMove(element, onMove) {\n  let io = null;\n  let timeoutId;\n  const root = getDocumentElement(element);\n  function cleanup() {\n    var _io;\n    clearTimeout(timeoutId);\n    (_io = io) == null || _io.disconnect();\n    io = null;\n  }\n  function refresh(skip, threshold) {\n    if (skip === void 0) {\n      skip = false;\n    }\n    if (threshold === void 0) {\n      threshold = 1;\n    }\n    cleanup();\n    const elementRectForRootMargin = element.getBoundingClientRect();\n    const {\n      left,\n      top,\n      width,\n      height\n    } = elementRectForRootMargin;\n    if (!skip) {\n      onMove();\n    }\n    if (!width || !height) {\n      return;\n    }\n    const insetTop = floor(top);\n    const insetRight = floor(root.clientWidth - (left + width));\n    const insetBottom = floor(root.clientHeight - (top + height));\n    const insetLeft = floor(left);\n    const rootMargin = -insetTop + \"px \" + -insetRight + \"px \" + -insetBottom + \"px \" + -insetLeft + \"px\";\n    const options = {\n      rootMargin,\n      threshold: max(0, min(1, threshold)) || 1\n    };\n    let isFirstUpdate = true;\n    function handleObserve(entries) {\n      const ratio = entries[0].intersectionRatio;\n      if (ratio !== threshold) {\n        if (!isFirstUpdate) {\n          return refresh();\n        }\n        if (!ratio) {\n          // If the reference is clipped, the ratio is 0. Throttle the refresh\n          // to prevent an infinite loop of updates.\n          timeoutId = setTimeout(() => {\n            refresh(false, 1e-7);\n          }, 1000);\n        } else {\n          refresh(false, ratio);\n        }\n      }\n      if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) {\n        // It's possible that even though the ratio is reported as 1, the\n        // element is not actually fully within the IntersectionObserver's root\n        // area anymore. This can happen under performance constraints. This may\n        // be a bug in the browser's IntersectionObserver implementation. To\n        // work around this, we compare the element's bounding rect now with\n        // what it was at the time we created the IntersectionObserver. If they\n        // are not equal then the element moved, so we refresh.\n        refresh();\n      }\n      isFirstUpdate = false;\n    }\n\n    // Older browsers don't support a `document` as the root and will throw an\n    // error.\n    try {\n      io = new IntersectionObserver(handleObserve, {\n        ...options,\n        // Handle <iframe>s\n        root: root.ownerDocument\n      });\n    } catch (_e) {\n      io = new IntersectionObserver(handleObserve, options);\n    }\n    io.observe(element);\n  }\n  refresh(true);\n  return cleanup;\n}\n\n/**\n * Automatically updates the position of the floating element when necessary.\n * Should only be called when the floating element is mounted on the DOM or\n * visible on the screen.\n * @returns cleanup function that should be invoked when the floating element is\n * removed from the DOM or hidden from the screen.\n * @see https://floating-ui.com/docs/autoUpdate\n */\nfunction autoUpdate(reference, floating, update, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    ancestorScroll = true,\n    ancestorResize = true,\n    elementResize = typeof ResizeObserver === 'function',\n    layoutShift = typeof IntersectionObserver === 'function',\n    animationFrame = false\n  } = options;\n  const referenceEl = unwrapElement(reference);\n  const ancestors = ancestorScroll || ancestorResize ? [...(referenceEl ? getOverflowAncestors(referenceEl) : []), ...(floating ? getOverflowAncestors(floating) : [])] : [];\n  ancestors.forEach(ancestor => {\n    ancestorScroll && ancestor.addEventListener('scroll', update, {\n      passive: true\n    });\n    ancestorResize && ancestor.addEventListener('resize', update);\n  });\n  const cleanupIo = referenceEl && layoutShift ? observeMove(referenceEl, update) : null;\n  let reobserveFrame = -1;\n  let resizeObserver = null;\n  if (elementResize) {\n    resizeObserver = new ResizeObserver(_ref => {\n      let [firstEntry] = _ref;\n      if (firstEntry && firstEntry.target === referenceEl && resizeObserver && floating) {\n        // Prevent update loops when using the `size` middleware.\n        // https://github.com/floating-ui/floating-ui/issues/1740\n        resizeObserver.unobserve(floating);\n        cancelAnimationFrame(reobserveFrame);\n        reobserveFrame = requestAnimationFrame(() => {\n          var _resizeObserver;\n          (_resizeObserver = resizeObserver) == null || _resizeObserver.observe(floating);\n        });\n      }\n      update();\n    });\n    if (referenceEl && !animationFrame) {\n      resizeObserver.observe(referenceEl);\n    }\n    if (floating) {\n      resizeObserver.observe(floating);\n    }\n  }\n  let frameId;\n  let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null;\n  if (animationFrame) {\n    frameLoop();\n  }\n  function frameLoop() {\n    const nextRefRect = getBoundingClientRect(reference);\n    if (prevRefRect && !rectsAreEqual(prevRefRect, nextRefRect)) {\n      update();\n    }\n    prevRefRect = nextRefRect;\n    frameId = requestAnimationFrame(frameLoop);\n  }\n  update();\n  return () => {\n    var _resizeObserver2;\n    ancestors.forEach(ancestor => {\n      ancestorScroll && ancestor.removeEventListener('scroll', update);\n      ancestorResize && ancestor.removeEventListener('resize', update);\n    });\n    cleanupIo == null || cleanupIo();\n    (_resizeObserver2 = resizeObserver) == null || _resizeObserver2.disconnect();\n    resizeObserver = null;\n    if (animationFrame) {\n      cancelAnimationFrame(frameId);\n    }\n  };\n}\n\n/**\n * Resolves with an object of overflow side offsets that determine how much the\n * element is overflowing a given clipping boundary on each side.\n * - positive = overflowing the boundary by that number of pixels\n * - negative = how many pixels left before it will overflow\n * - 0 = lies flush with the boundary\n * @see https://floating-ui.com/docs/detectOverflow\n */\nconst detectOverflow = detectOverflow$1;\n\n/**\n * Modifies the placement by translating the floating element along the\n * specified axes.\n * A number (shorthand for `mainAxis` or distance), or an axes configuration\n * object may be passed.\n * @see https://floating-ui.com/docs/offset\n */\nconst offset = offset$1;\n\n/**\n * Optimizes the visibility of the floating element by choosing the placement\n * that has the most space available automatically, without needing to specify a\n * preferred placement. Alternative to `flip`.\n * @see https://floating-ui.com/docs/autoPlacement\n */\nconst autoPlacement = autoPlacement$1;\n\n/**\n * Optimizes the visibility of the floating element by shifting it in order to\n * keep it in view when it will overflow the clipping boundary.\n * @see https://floating-ui.com/docs/shift\n */\nconst shift = shift$1;\n\n/**\n * Optimizes the visibility of the floating element by flipping the `placement`\n * in order to keep it in view when the preferred placement(s) will overflow the\n * clipping boundary. Alternative to `autoPlacement`.\n * @see https://floating-ui.com/docs/flip\n */\nconst flip = flip$1;\n\n/**\n * Provides data that allows you to change the size of the floating element —\n * for instance, prevent it from overflowing the clipping boundary or match the\n * width of the reference element.\n * @see https://floating-ui.com/docs/size\n */\nconst size = size$1;\n\n/**\n * Provides data to hide the floating element in applicable situations, such as\n * when it is not in the same clipping context as the reference element.\n * @see https://floating-ui.com/docs/hide\n */\nconst hide = hide$1;\n\n/**\n * Provides data to position an inner element of the floating element so that it\n * appears centered to the reference element.\n * @see https://floating-ui.com/docs/arrow\n */\nconst arrow = arrow$1;\n\n/**\n * Provides improved positioning for inline reference elements that can span\n * over multiple lines, such as hyperlinks or range selections.\n * @see https://floating-ui.com/docs/inline\n */\nconst inline = inline$1;\n\n/**\n * Built-in `limiter` that will stop `shift()` at a certain point.\n */\nconst limitShift = limitShift$1;\n\n/**\n * Computes the `x` and `y` coordinates that will place the floating element\n * next to a given reference element.\n */\nconst computePosition = (reference, floating, options) => {\n  // This caches the expensive `getClippingElementAncestors` function so that\n  // multiple lifecycle resets re-use the same result. It only lives for a\n  // single call. If other functions become expensive, we can add them as well.\n  const cache = new Map();\n  const mergedOptions = {\n    platform,\n    ...options\n  };\n  const platformWithCache = {\n    ...mergedOptions.platform,\n    _c: cache\n  };\n  return computePosition$1(reference, floating, {\n    ...mergedOptions,\n    platform: platformWithCache\n  });\n};\n\nexport { arrow, autoPlacement, autoUpdate, computePosition, detectOverflow, flip, hide, inline, limitShift, offset, platform, shift, size };\n","var resizeObservers = [];\nexport { resizeObservers };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasActiveObservations = function () {\n    return resizeObservers.some(function (ro) { return ro.activeTargets.length > 0; });\n};\nexport { hasActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nvar hasSkippedObservations = function () {\n    return resizeObservers.some(function (ro) { return ro.skippedTargets.length > 0; });\n};\nexport { hasSkippedObservations };\n","var msg = 'ResizeObserver loop completed with undelivered notifications.';\nvar deliverResizeLoopError = function () {\n    var event;\n    if (typeof ErrorEvent === 'function') {\n        event = new ErrorEvent('error', {\n            message: msg\n        });\n    }\n    else {\n        event = document.createEvent('Event');\n        event.initEvent('error', false, false);\n        event.message = msg;\n    }\n    window.dispatchEvent(event);\n};\nexport { deliverResizeLoopError };\n","var ResizeObserverBoxOptions;\n(function (ResizeObserverBoxOptions) {\n    ResizeObserverBoxOptions[\"BORDER_BOX\"] = \"border-box\";\n    ResizeObserverBoxOptions[\"CONTENT_BOX\"] = \"content-box\";\n    ResizeObserverBoxOptions[\"DEVICE_PIXEL_CONTENT_BOX\"] = \"device-pixel-content-box\";\n})(ResizeObserverBoxOptions || (ResizeObserverBoxOptions = {}));\nexport { ResizeObserverBoxOptions };\n","export var freeze = function (obj) { return Object.freeze(obj); };\n","import { freeze } from './utils/freeze';\nvar ResizeObserverSize = (function () {\n    function ResizeObserverSize(inlineSize, blockSize) {\n        this.inlineSize = inlineSize;\n        this.blockSize = blockSize;\n        freeze(this);\n    }\n    return ResizeObserverSize;\n}());\nexport { ResizeObserverSize };\n","import { freeze } from './utils/freeze';\nvar DOMRectReadOnly = (function () {\n    function DOMRectReadOnly(x, y, width, height) {\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n        this.top = this.y;\n        this.left = this.x;\n        this.bottom = this.top + this.height;\n        this.right = this.left + this.width;\n        return freeze(this);\n    }\n    DOMRectReadOnly.prototype.toJSON = function () {\n        var _a = this, x = _a.x, y = _a.y, top = _a.top, right = _a.right, bottom = _a.bottom, left = _a.left, width = _a.width, height = _a.height;\n        return { x: x, y: y, top: top, right: right, bottom: bottom, left: left, width: width, height: height };\n    };\n    DOMRectReadOnly.fromRect = function (rectangle) {\n        return new DOMRectReadOnly(rectangle.x, rectangle.y, rectangle.width, rectangle.height);\n    };\n    return DOMRectReadOnly;\n}());\nexport { DOMRectReadOnly };\n","var isSVG = function (target) { return target instanceof SVGElement && 'getBBox' in target; };\nvar isHidden = function (target) {\n    if (isSVG(target)) {\n        var _a = target.getBBox(), width = _a.width, height = _a.height;\n        return !width && !height;\n    }\n    var _b = target, offsetWidth = _b.offsetWidth, offsetHeight = _b.offsetHeight;\n    return !(offsetWidth || offsetHeight || target.getClientRects().length);\n};\nvar isElement = function (obj) {\n    var _a;\n    if (obj instanceof Element) {\n        return true;\n    }\n    var scope = (_a = obj === null || obj === void 0 ? void 0 : obj.ownerDocument) === null || _a === void 0 ? void 0 : _a.defaultView;\n    return !!(scope && obj instanceof scope.Element);\n};\nvar isReplacedElement = function (target) {\n    switch (target.tagName) {\n        case 'INPUT':\n            if (target.type !== 'image') {\n                break;\n            }\n        case 'VIDEO':\n        case 'AUDIO':\n        case 'EMBED':\n        case 'OBJECT':\n        case 'CANVAS':\n        case 'IFRAME':\n        case 'IMG':\n            return true;\n    }\n    return false;\n};\nexport { isSVG, isHidden, isElement, isReplacedElement };\n","export var global = typeof window !== 'undefined' ? window : {};\n","import { ResizeObserverBoxOptions } from '../ResizeObserverBoxOptions';\nimport { ResizeObserverSize } from '../ResizeObserverSize';\nimport { DOMRectReadOnly } from '../DOMRectReadOnly';\nimport { isSVG, isHidden } from '../utils/element';\nimport { freeze } from '../utils/freeze';\nimport { global } from '../utils/global';\nvar cache = new WeakMap();\nvar scrollRegexp = /auto|scroll/;\nvar verticalRegexp = /^tb|vertical/;\nvar IE = (/msie|trident/i).test(global.navigator && global.navigator.userAgent);\nvar parseDimension = function (pixel) { return parseFloat(pixel || '0'); };\nvar size = function (inlineSize, blockSize, switchSizes) {\n    if (inlineSize === void 0) { inlineSize = 0; }\n    if (blockSize === void 0) { blockSize = 0; }\n    if (switchSizes === void 0) { switchSizes = false; }\n    return new ResizeObserverSize((switchSizes ? blockSize : inlineSize) || 0, (switchSizes ? inlineSize : blockSize) || 0);\n};\nvar zeroBoxes = freeze({\n    devicePixelContentBoxSize: size(),\n    borderBoxSize: size(),\n    contentBoxSize: size(),\n    contentRect: new DOMRectReadOnly(0, 0, 0, 0)\n});\nvar calculateBoxSizes = function (target, forceRecalculation) {\n    if (forceRecalculation === void 0) { forceRecalculation = false; }\n    if (cache.has(target) && !forceRecalculation) {\n        return cache.get(target);\n    }\n    if (isHidden(target)) {\n        cache.set(target, zeroBoxes);\n        return zeroBoxes;\n    }\n    var cs = getComputedStyle(target);\n    var svg = isSVG(target) && target.ownerSVGElement && target.getBBox();\n    var removePadding = !IE && cs.boxSizing === 'border-box';\n    var switchSizes = verticalRegexp.test(cs.writingMode || '');\n    var canScrollVertically = !svg && scrollRegexp.test(cs.overflowY || '');\n    var canScrollHorizontally = !svg && scrollRegexp.test(cs.overflowX || '');\n    var paddingTop = svg ? 0 : parseDimension(cs.paddingTop);\n    var paddingRight = svg ? 0 : parseDimension(cs.paddingRight);\n    var paddingBottom = svg ? 0 : parseDimension(cs.paddingBottom);\n    var paddingLeft = svg ? 0 : parseDimension(cs.paddingLeft);\n    var borderTop = svg ? 0 : parseDimension(cs.borderTopWidth);\n    var borderRight = svg ? 0 : parseDimension(cs.borderRightWidth);\n    var borderBottom = svg ? 0 : parseDimension(cs.borderBottomWidth);\n    var borderLeft = svg ? 0 : parseDimension(cs.borderLeftWidth);\n    var horizontalPadding = paddingLeft + paddingRight;\n    var verticalPadding = paddingTop + paddingBottom;\n    var horizontalBorderArea = borderLeft + borderRight;\n    var verticalBorderArea = borderTop + borderBottom;\n    var horizontalScrollbarThickness = !canScrollHorizontally ? 0 : target.offsetHeight - verticalBorderArea - target.clientHeight;\n    var verticalScrollbarThickness = !canScrollVertically ? 0 : target.offsetWidth - horizontalBorderArea - target.clientWidth;\n    var widthReduction = removePadding ? horizontalPadding + horizontalBorderArea : 0;\n    var heightReduction = removePadding ? verticalPadding + verticalBorderArea : 0;\n    var contentWidth = svg ? svg.width : parseDimension(cs.width) - widthReduction - verticalScrollbarThickness;\n    var contentHeight = svg ? svg.height : parseDimension(cs.height) - heightReduction - horizontalScrollbarThickness;\n    var borderBoxWidth = contentWidth + horizontalPadding + verticalScrollbarThickness + horizontalBorderArea;\n    var borderBoxHeight = contentHeight + verticalPadding + horizontalScrollbarThickness + verticalBorderArea;\n    var boxes = freeze({\n        devicePixelContentBoxSize: size(Math.round(contentWidth * devicePixelRatio), Math.round(contentHeight * devicePixelRatio), switchSizes),\n        borderBoxSize: size(borderBoxWidth, borderBoxHeight, switchSizes),\n        contentBoxSize: size(contentWidth, contentHeight, switchSizes),\n        contentRect: new DOMRectReadOnly(paddingLeft, paddingTop, contentWidth, contentHeight)\n    });\n    cache.set(target, boxes);\n    return boxes;\n};\nvar calculateBoxSize = function (target, observedBox, forceRecalculation) {\n    var _a = calculateBoxSizes(target, forceRecalculation), borderBoxSize = _a.borderBoxSize, contentBoxSize = _a.contentBoxSize, devicePixelContentBoxSize = _a.devicePixelContentBoxSize;\n    switch (observedBox) {\n        case ResizeObserverBoxOptions.DEVICE_PIXEL_CONTENT_BOX:\n            return devicePixelContentBoxSize;\n        case ResizeObserverBoxOptions.BORDER_BOX:\n            return borderBoxSize;\n        default:\n            return contentBoxSize;\n    }\n};\nexport { calculateBoxSize, calculateBoxSizes };\n","import { calculateBoxSizes } from './algorithms/calculateBoxSize';\nimport { freeze } from './utils/freeze';\nvar ResizeObserverEntry = (function () {\n    function ResizeObserverEntry(target) {\n        var boxes = calculateBoxSizes(target);\n        this.target = target;\n        this.contentRect = boxes.contentRect;\n        this.borderBoxSize = freeze([boxes.borderBoxSize]);\n        this.contentBoxSize = freeze([boxes.contentBoxSize]);\n        this.devicePixelContentBoxSize = freeze([boxes.devicePixelContentBoxSize]);\n    }\n    return ResizeObserverEntry;\n}());\nexport { ResizeObserverEntry };\n","import { isHidden } from '../utils/element';\nvar calculateDepthForNode = function (node) {\n    if (isHidden(node)) {\n        return Infinity;\n    }\n    var depth = 0;\n    var parent = node.parentNode;\n    while (parent) {\n        depth += 1;\n        parent = parent.parentNode;\n    }\n    return depth;\n};\nexport { calculateDepthForNode };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { ResizeObserverEntry } from '../ResizeObserverEntry';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nimport { calculateBoxSize } from './calculateBoxSize';\nvar broadcastActiveObservations = function () {\n    var shallowestDepth = Infinity;\n    var callbacks = [];\n    resizeObservers.forEach(function processObserver(ro) {\n        if (ro.activeTargets.length === 0) {\n            return;\n        }\n        var entries = [];\n        ro.activeTargets.forEach(function processTarget(ot) {\n            var entry = new ResizeObserverEntry(ot.target);\n            var targetDepth = calculateDepthForNode(ot.target);\n            entries.push(entry);\n            ot.lastReportedSize = calculateBoxSize(ot.target, ot.observedBox);\n            if (targetDepth < shallowestDepth) {\n                shallowestDepth = targetDepth;\n            }\n        });\n        callbacks.push(function resizeObserverCallback() {\n            ro.callback.call(ro.observer, entries, ro.observer);\n        });\n        ro.activeTargets.splice(0, ro.activeTargets.length);\n    });\n    for (var _i = 0, callbacks_1 = callbacks; _i < callbacks_1.length; _i++) {\n        var callback = callbacks_1[_i];\n        callback();\n    }\n    return shallowestDepth;\n};\nexport { broadcastActiveObservations };\n","import { resizeObservers } from '../utils/resizeObservers';\nimport { calculateDepthForNode } from './calculateDepthForNode';\nvar gatherActiveObservationsAtDepth = function (depth) {\n    resizeObservers.forEach(function processObserver(ro) {\n        ro.activeTargets.splice(0, ro.activeTargets.length);\n        ro.skippedTargets.splice(0, ro.skippedTargets.length);\n        ro.observationTargets.forEach(function processTarget(ot) {\n            if (ot.isActive()) {\n                if (calculateDepthForNode(ot.target) > depth) {\n                    ro.activeTargets.push(ot);\n                }\n                else {\n                    ro.skippedTargets.push(ot);\n                }\n            }\n        });\n    });\n};\nexport { gatherActiveObservationsAtDepth };\n","import { hasActiveObservations } from '../algorithms/hasActiveObservations';\nimport { hasSkippedObservations } from '../algorithms/hasSkippedObservations';\nimport { deliverResizeLoopError } from '../algorithms/deliverResizeLoopError';\nimport { broadcastActiveObservations } from '../algorithms/broadcastActiveObservations';\nimport { gatherActiveObservationsAtDepth } from '../algorithms/gatherActiveObservationsAtDepth';\nvar process = function () {\n    var depth = 0;\n    gatherActiveObservationsAtDepth(depth);\n    while (hasActiveObservations()) {\n        depth = broadcastActiveObservations();\n        gatherActiveObservationsAtDepth(depth);\n    }\n    if (hasSkippedObservations()) {\n        deliverResizeLoopError();\n    }\n    return depth > 0;\n};\nexport { process };\n","var trigger;\nvar callbacks = [];\nvar notify = function () { return callbacks.splice(0).forEach(function (cb) { return cb(); }); };\nvar queueMicroTask = function (callback) {\n    if (!trigger) {\n        var toggle_1 = 0;\n        var el_1 = document.createTextNode('');\n        var config = { characterData: true };\n        new MutationObserver(function () { return notify(); }).observe(el_1, config);\n        trigger = function () { el_1.textContent = \"\".concat(toggle_1 ? toggle_1-- : toggle_1++); };\n    }\n    callbacks.push(callback);\n    trigger();\n};\nexport { queueMicroTask };\n","import { queueMicroTask } from './queueMicroTask';\nvar queueResizeObserver = function (cb) {\n    queueMicroTask(function ResizeObserver() {\n        requestAnimationFrame(cb);\n    });\n};\nexport { queueResizeObserver };\n","import { process } from './process';\nimport { global } from './global';\nimport { queueResizeObserver } from './queueResizeObserver';\nvar watching = 0;\nvar isWatching = function () { return !!watching; };\nvar CATCH_PERIOD = 250;\nvar observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };\nvar events = [\n    'resize',\n    'load',\n    'transitionend',\n    'animationend',\n    'animationstart',\n    'animationiteration',\n    'keyup',\n    'keydown',\n    'mouseup',\n    'mousedown',\n    'mouseover',\n    'mouseout',\n    'blur',\n    'focus'\n];\nvar time = function (timeout) {\n    if (timeout === void 0) { timeout = 0; }\n    return Date.now() + timeout;\n};\nvar scheduled = false;\nvar Scheduler = (function () {\n    function Scheduler() {\n        var _this = this;\n        this.stopped = true;\n        this.listener = function () { return _this.schedule(); };\n    }\n    Scheduler.prototype.run = function (timeout) {\n        var _this = this;\n        if (timeout === void 0) { timeout = CATCH_PERIOD; }\n        if (scheduled) {\n            return;\n        }\n        scheduled = true;\n        var until = time(timeout);\n        queueResizeObserver(function () {\n            var elementsHaveResized = false;\n            try {\n                elementsHaveResized = process();\n            }\n            finally {\n                scheduled = false;\n                timeout = until - time();\n                if (!isWatching()) {\n                    return;\n                }\n                if (elementsHaveResized) {\n                    _this.run(1000);\n                }\n                else if (timeout > 0) {\n                    _this.run(timeout);\n                }\n                else {\n                    _this.start();\n                }\n            }\n        });\n    };\n    Scheduler.prototype.schedule = function () {\n        this.stop();\n        this.run();\n    };\n    Scheduler.prototype.observe = function () {\n        var _this = this;\n        var cb = function () { return _this.observer && _this.observer.observe(document.body, observerConfig); };\n        document.body ? cb() : global.addEventListener('DOMContentLoaded', cb);\n    };\n    Scheduler.prototype.start = function () {\n        var _this = this;\n        if (this.stopped) {\n            this.stopped = false;\n            this.observer = new MutationObserver(this.listener);\n            this.observe();\n            events.forEach(function (name) { return global.addEventListener(name, _this.listener, true); });\n        }\n    };\n    Scheduler.prototype.stop = function () {\n        var _this = this;\n        if (!this.stopped) {\n            this.observer && this.observer.disconnect();\n            events.forEach(function (name) { return global.removeEventListener(name, _this.listener, true); });\n            this.stopped = true;\n        }\n    };\n    return Scheduler;\n}());\nvar scheduler = new Scheduler();\nvar updateCount = function (n) {\n    !watching && n > 0 && scheduler.start();\n    watching += n;\n    !watching && scheduler.stop();\n};\nexport { scheduler, updateCount };\n","import { ResizeObserverBoxOptions } from './ResizeObserverBoxOptions';\nimport { calculateBoxSize } from './algorithms/calculateBoxSize';\nimport { isSVG, isReplacedElement } from './utils/element';\nvar skipNotifyOnElement = function (target) {\n    return !isSVG(target)\n        && !isReplacedElement(target)\n        && getComputedStyle(target).display === 'inline';\n};\nvar ResizeObservation = (function () {\n    function ResizeObservation(target, observedBox) {\n        this.target = target;\n        this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;\n        this.lastReportedSize = {\n            inlineSize: 0,\n            blockSize: 0\n        };\n    }\n    ResizeObservation.prototype.isActive = function () {\n        var size = calculateBoxSize(this.target, this.observedBox, true);\n        if (skipNotifyOnElement(this.target)) {\n            this.lastReportedSize = size;\n        }\n        if (this.lastReportedSize.inlineSize !== size.inlineSize\n            || this.lastReportedSize.blockSize !== size.blockSize) {\n            return true;\n        }\n        return false;\n    };\n    return ResizeObservation;\n}());\nexport { ResizeObservation };\n","var ResizeObserverDetail = (function () {\n    function ResizeObserverDetail(resizeObserver, callback) {\n        this.activeTargets = [];\n        this.skippedTargets = [];\n        this.observationTargets = [];\n        this.observer = resizeObserver;\n        this.callback = callback;\n    }\n    return ResizeObserverDetail;\n}());\nexport { ResizeObserverDetail };\n","import { scheduler, updateCount } from './utils/scheduler';\nimport { ResizeObservation } from './ResizeObservation';\nimport { ResizeObserverDetail } from './ResizeObserverDetail';\nimport { resizeObservers } from './utils/resizeObservers';\nvar observerMap = new WeakMap();\nvar getObservationIndex = function (observationTargets, target) {\n    for (var i = 0; i < observationTargets.length; i += 1) {\n        if (observationTargets[i].target === target) {\n            return i;\n        }\n    }\n    return -1;\n};\nvar ResizeObserverController = (function () {\n    function ResizeObserverController() {\n    }\n    ResizeObserverController.connect = function (resizeObserver, callback) {\n        var detail = new ResizeObserverDetail(resizeObserver, callback);\n        observerMap.set(resizeObserver, detail);\n    };\n    ResizeObserverController.observe = function (resizeObserver, target, options) {\n        var detail = observerMap.get(resizeObserver);\n        var firstObservation = detail.observationTargets.length === 0;\n        if (getObservationIndex(detail.observationTargets, target) < 0) {\n            firstObservation && resizeObservers.push(detail);\n            detail.observationTargets.push(new ResizeObservation(target, options && options.box));\n            updateCount(1);\n            scheduler.schedule();\n        }\n    };\n    ResizeObserverController.unobserve = function (resizeObserver, target) {\n        var detail = observerMap.get(resizeObserver);\n        var index = getObservationIndex(detail.observationTargets, target);\n        var lastObservation = detail.observationTargets.length === 1;\n        if (index >= 0) {\n            lastObservation && resizeObservers.splice(resizeObservers.indexOf(detail), 1);\n            detail.observationTargets.splice(index, 1);\n            updateCount(-1);\n        }\n    };\n    ResizeObserverController.disconnect = function (resizeObserver) {\n        var _this = this;\n        var detail = observerMap.get(resizeObserver);\n        detail.observationTargets.slice().forEach(function (ot) { return _this.unobserve(resizeObserver, ot.target); });\n        detail.activeTargets.splice(0, detail.activeTargets.length);\n    };\n    return ResizeObserverController;\n}());\nexport { ResizeObserverController };\n","import { ResizeObserverController } from './ResizeObserverController';\nimport { isElement } from './utils/element';\nvar ResizeObserver = (function () {\n    function ResizeObserver(callback) {\n        if (arguments.length === 0) {\n            throw new TypeError(\"Failed to construct 'ResizeObserver': 1 argument required, but only 0 present.\");\n        }\n        if (typeof callback !== 'function') {\n            throw new TypeError(\"Failed to construct 'ResizeObserver': The callback provided as parameter 1 is not a function.\");\n        }\n        ResizeObserverController.connect(this, callback);\n    }\n    ResizeObserver.prototype.observe = function (target, options) {\n        if (arguments.length === 0) {\n            throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n        }\n        if (!isElement(target)) {\n            throw new TypeError(\"Failed to execute 'observe' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n        }\n        ResizeObserverController.observe(this, target, options);\n    };\n    ResizeObserver.prototype.unobserve = function (target) {\n        if (arguments.length === 0) {\n            throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': 1 argument required, but only 0 present.\");\n        }\n        if (!isElement(target)) {\n            throw new TypeError(\"Failed to execute 'unobserve' on 'ResizeObserver': parameter 1 is not of type 'Element\");\n        }\n        ResizeObserverController.unobserve(this, target);\n    };\n    ResizeObserver.prototype.disconnect = function () {\n        ResizeObserverController.disconnect(this);\n    };\n    ResizeObserver.toString = function () {\n        return 'function ResizeObserver () { [polyfill code] }';\n    };\n    return ResizeObserver;\n}());\nexport { ResizeObserver };\n","import { type MaybeRef, getCurrentScope, onScopeDispose, unref, watch } from 'vue'\n\nimport { isClient, noop } from '@vexip-ui/utils'\nimport { ResizeObserver } from '@juggle/resize-observer'\n\nexport interface ResizeInfo extends ResizeObserverEntry {\n  offsetWidth: number,\n  offsetHeight: number,\n  width: number,\n  height: number,\n}\n\nexport type ResizeHandler = (entry: ResizeInfo) => any\n\nexport interface UseResizeOptions {\n  /**\n   * 作用的目标元素的 Ref\n   */\n  target?: MaybeRef<HTMLElement | null | undefined>,\n  onResize?: ResizeHandler,\n}\n\nconst handlerMap = new WeakMap<Element, ResizeHandler>()\n\nfunction handleResize(entries: ResizeObserverEntry[]) {\n  for (let i = 0, len = entries.length; i < len; ++i) {\n    const entry = entries[i]\n    const handler = handlerMap.get(entry.target)\n\n    if (typeof handler === 'function') {\n      const { inlineSize, blockSize } = entry.borderBoxSize?.[0] ?? {}\n      const { offsetWidth, offsetHeight } = entry.target as HTMLElement\n\n      handler(\n        Object.assign(entry, {\n          offsetWidth,\n          offsetHeight,\n          width: inlineSize ?? offsetWidth,\n          height: blockSize ?? offsetHeight,\n        }),\n      )\n    }\n  }\n}\n\nconst resizeObserver = new (isClient ? window.ResizeObserver || ResizeObserver : ResizeObserver)(\n  handleResize,\n)\n\nexport function observeResize(el: Element, handler: ResizeHandler) {\n  handlerMap.set(el, handler)\n  resizeObserver.observe(el)\n}\n\nexport function unobserveResize(el: Element) {\n  if (handlerMap.has(el)) {\n    resizeObserver.unobserve(el)\n    handlerMap.delete(el)\n  }\n}\n\nexport function useResize(options: UseResizeOptions = {}) {\n  let remove = noop\n\n  const stopWatch = watch(\n    () => unref(options.target),\n    el => {\n      remove()\n\n      if (!el || typeof options.onResize !== 'function') {\n        return\n      }\n\n      observeResize(el, options.onResize)\n\n      remove = () => {\n        unobserveResize(el)\n        remove = noop\n      }\n    },\n    { immediate: true },\n  )\n\n  const unobserve = () => {\n    stopWatch()\n    remove()\n  }\n\n  getCurrentScope() && onScopeDispose(unobserve)\n\n  return {\n    /**\n     * @deprecated Will be removed in next major version, please directly use `observeResize` from imports.\n     */\n    observeResize,\n    /**\n     * @deprecated Will be removed in next major version, please directly use `unobserveResize` from imports.\n     */\n    unobserveResize,\n    unobserve,\n  }\n}\n","import { computed, ref } from 'vue'\n\nimport { isClient } from '@vexip-ui/utils'\nimport { observeResize } from './resize'\n\nimport type { Ref } from 'vue'\n\nconst rtl = ref(false)\nconst computedRtl: Ref<boolean> = computed(() => rtl.value)\n\nconst elId = '__rtl_observer__'\n\nexport function useRtl() {\n  if (isClient && !document.querySelector(`#${elId}`)) {\n    initObserver()\n  }\n\n  return { isRtl: computedRtl }\n}\n\nfunction initObserver() {\n  if (!isClient) return\n\n  const style = document.createElement('style')\n  const content = `#${elId} { width: 1px } html.rtl #${elId}, html[dir='rtl'] #${elId} { width: 2px }`\n\n  style.textContent = content\n  document.head.appendChild(style)\n\n  const observer = document.createElement('div')\n\n  observer.id = elId\n  observer.role = 'none'\n  observer.style.cssText =\n    'position: fixed; top -10px; left: -10px; height: 1px; visibility: hidden;'\n\n  observeResize(observer, () => {\n    if (!isClient) return\n\n    rtl.value =\n      document.documentElement.classList.contains('rtl') ||\n      document.documentElement.getAttribute('dir') === 'rtl'\n  })\n\n  document.body.appendChild(observer)\n}\n","import { onMounted, ref, shallowRef, unref, watch, watchEffect } from 'vue'\n\nimport {\n  arrow,\n  autoUpdate,\n  computePosition,\n  flip,\n  hide,\n  offset,\n  platform,\n  shift,\n} from '@floating-ui/dom'\nimport { useRtl } from './rtl'\nimport { isClient } from '@vexip-ui/utils'\n\nimport type { MaybeRef, Ref } from 'vue'\nimport type {\n  ComputePositionConfig,\n  Middleware,\n  OffsetOptions,\n  Placement,\n  ShiftOptions,\n  VirtualElement,\n} from '@floating-ui/dom'\nimport type { TransferNode } from '@vexip-ui/utils'\n\nexport interface UsePopperOptions {\n  /**\n   * popper 元素出现的位置\n   */\n  placement: MaybeRef<Placement>,\n  /**\n   * popper 元素需要迁移至的目标选择器，为 true 时会迁移至 body\n   */\n  transfer?: MaybeRef<boolean | string>,\n  /**\n   * 设置是否为从右向左的阅读方向\n   */\n  isRtl?: MaybeRef<boolean>,\n  /**\n   * 包围元素，用于判断 clickoutside 事件\n   *\n   * 即使 popper 元素迁移至 wrapper 元素外部，点击 popper 元素时仍认为处于 wrapper 元素内部\n   */\n  wrapper?: Ref<HTMLElement | null | undefined>,\n  /**\n   * 设置 popper 元素为否需要 drop，此时 transform-origin 会自动调整\n   */\n  isDrop?: MaybeRef<boolean>,\n  /**\n   * 参考元素，popper 元素的位置计算依据\n   */\n  reference?: Ref<HTMLElement | VirtualElement | null | undefined>,\n  /**\n   * popper 元素\n   */\n  popper?: Ref<HTMLElement | null | undefined>,\n  /**\n   * arrow 元素\n   */\n  arrow?: Ref<HTMLElement | null | undefined>,\n  /**\n   * popper 元素的偏移量，可传入一个回调函数\n   */\n  offset?: MaybeRef<number[] | OffsetOptions>,\n  /**\n   * popper 元素是否限制在窗口内\n   */\n  shift?: MaybeRef<boolean | ShiftOptions>,\n  /**\n   * 设置是否自动更新 popper 元素\n   *\n   * @default false\n   */\n  autoUpdate?: boolean,\n}\n\nexport type { Placement, VirtualElement }\n\nexport const placementWhileList = Object.freeze<Placement[]>([\n  'top',\n  'top-start',\n  'top-end',\n  'bottom',\n  'bottom-start',\n  'bottom-end',\n  'left',\n  'left-start',\n  'left-end',\n  'right',\n  'right-start',\n  'right-end',\n])\n\nexport function usePopper(initOptions: UsePopperOptions) {\n  const { transfer, wrapper, isDrop = false } = initOptions\n\n  const reference: Ref<HTMLElement | null | undefined> =\n    (initOptions.reference as any) ?? shallowRef(null)\n  const popper: Ref<HTMLElement | null | undefined> = initOptions.popper ?? shallowRef(null)\n  const arrowRef: Ref<HTMLElement | null | undefined> = initOptions.arrow ?? shallowRef(null)\n\n  const placement = ref(unref(initOptions.placement))\n  const transferTo = ref('')\n  const isRtl = initOptions.isRtl ?? useRtl().isRtl\n\n  if (wrapper) {\n    watchEffect(() => {\n      const wrapperEl = unref(wrapper)\n      const popperEl = unref(popper)\n\n      if (wrapperEl) {\n        ;(wrapperEl as TransferNode).__transferElement = popperEl\n      }\n    })\n  }\n\n  if (transfer != null) {\n    watch(\n      () => unref(transfer),\n      value => {\n        setTransferTo(value)\n        updatePopper()\n      },\n    )\n\n    setTransferTo(unref(transfer))\n  }\n\n  onMounted(() => {\n    requestAnimationFrame(() => {\n      watchEffect(updatePopperInternal)\n    })\n  })\n\n  let cleanup: (() => void) | undefined\n\n  async function updatePopperInternal() {\n    if (!isClient) return\n\n    cleanup?.()\n\n    const referenceEl = unref(reference)\n    const popperEl = unref(popper)\n\n    if (!referenceEl || !popperEl) return\n\n    const arrowEl = unref(arrowRef)\n\n    const middleware: Middleware[] = [flip()]\n\n    if (isDrop) {\n      middleware.push({\n        name: 'origin',\n        fn({ placement, elements }) {\n          const origin = setPopperDropOrigin(placement)\n\n          if (origin) {\n            elements.floating.style.transformOrigin = origin\n          }\n\n          return {}\n        },\n      })\n    }\n\n    if (initOptions.offset) {\n      let offsetOptions = unref(initOptions.offset)\n\n      if (Array.isArray(offsetOptions)) {\n        offsetOptions = {\n          mainAxis: offsetOptions[1],\n          crossAxis: offsetOptions[0],\n        }\n      }\n\n      middleware.push(offset(offsetOptions))\n    }\n\n    if (initOptions.shift) {\n      let shiftOptions = unref(initOptions.shift)\n\n      if (typeof shiftOptions === 'boolean') {\n        shiftOptions = {}\n      }\n\n      middleware.push(shift(shiftOptions))\n    }\n\n    if (arrowEl) {\n      middleware.push(arrow({ element: arrowEl }))\n    }\n\n    middleware.push(hide({ strategy: 'escaped' }))\n\n    const rtl = unref(isRtl) || false\n    const options: ComputePositionConfig = {\n      middleware,\n      placement: unref(initOptions.placement),\n      platform: {\n        ...platform,\n        isRTL: async () => rtl,\n      },\n    }\n\n    const update = async () => {\n      const {\n        x,\n        y,\n        placement: activePlacement,\n        strategy,\n        middlewareData,\n      } = await computePosition(referenceEl, popperEl, options)\n\n      if (unref(reference) !== referenceEl) {\n        if (unref(popper) === popperEl) {\n          Object.assign(popperEl.style, {\n            position: '',\n            top: '',\n            left: '',\n          })\n        }\n\n        return\n      }\n\n      const style: Partial<CSSStyleDeclaration> = {\n        position: strategy,\n        top: `${y}px`,\n        left: `${x}px`,\n      }\n\n      // if (middlewareData.hide?.escaped) {\n      //   style.visibility = 'hidden'\n      // } else {\n      //   style.visibility = ''\n      // }\n\n      if (arrowEl) {\n        if (middlewareData.arrow) {\n          const { x, y } = middlewareData.arrow\n\n          Object.assign(arrowEl.style, {\n            top: y != null ? `${y}px` : '',\n            left: x != null ? `${x}px` : '',\n          })\n        } else {\n          Object.assign(arrowEl.style, { top: '', left: '' })\n        }\n      }\n\n      Object.assign(popperEl.style, style)\n      popperEl.dataset.popperPlacement = activePlacement\n      placement.value = activePlacement\n    }\n\n    if (initOptions.autoUpdate) {\n      cleanup = autoUpdate(referenceEl, popperEl, update)\n    }\n\n    await update()\n  }\n\n  const updatePopper = () => {\n    return new Promise<void>(resolve => {\n      requestAnimationFrame(() => {\n        updatePopperInternal().then(resolve)\n      })\n    })\n  }\n\n  function setTransferTo(value: boolean | string) {\n    transferTo.value = typeof value === 'boolean' ? (value ? 'body' : '') : value\n  }\n\n  // function normalizePlacement(placement: Placement, rtl: boolean) {\n  //   if (!rtl) return placement\n\n  //   let [start, end] = placement.split('-')\n\n  //   if (start === 'left' || start === 'right') {\n  //     start = start === 'left' ? 'right' : 'left'\n  //   } else {\n  //     if (!end) return placement\n\n  //     end = end === 'start' ? 'end' : 'start'\n  //   }\n\n  //   return `${start}-${end}` as Placement\n  // }\n\n  function setPopperDropOrigin(placement: Placement) {\n    if (placement !== 'left' && placement !== 'right') {\n      const [start, end] = placement.split('-')\n\n      return start === 'bottom' || (start !== 'top' && end === 'start')\n        ? 'center top'\n        : 'center bottom'\n    }\n  }\n\n  return {\n    wrapper,\n    reference,\n    popper,\n    placement,\n    transferTo,\n    updatePopper,\n  }\n}\n","import { reactive, ref, watch } from 'vue'\n\nimport { isClient } from '@vexip-ui/utils'\nimport { observeResize } from './resize'\n\nimport type { Ref } from 'vue'\nimport type { MaybeElement } from './shared/types'\n\nexport interface InitThemeOptions {\n  name: string,\n  rootClass?: string,\n  varsClass?: string,\n}\n\nconst styleId = '__theme_style__'\nconst elClass = '__theme_observer__'\n\nconst elCache = new WeakMap<Element, Element>()\n\nexport function useTheme(wrapper?: MaybeElement) {\n  const theme = ref<string>()\n\n  if (isClient) {\n    wrapper = wrapper || document.body\n\n    let observer = elCache.get(wrapper)\n\n    if (!observer) {\n      observer = createObserver(theme)!\n      wrapper.appendChild(observer)\n      elCache.set(wrapper, observer)\n    }\n  }\n\n  return { theme }\n}\n\nconst activeThemes = reactive(new Map<string, string[]>())\nconst themeWidths = new Map<number, string>()\n\nwatch(activeThemes, () => {\n  if (!isClient) return\n\n  themeWidths.clear()\n\n  const prevStyle = document.head.querySelector(`#${styleId}`)\n\n  if (prevStyle) {\n    document.head.removeChild(prevStyle)\n  }\n\n  const style = document.createElement('style')\n\n  let content = `.${elClass} { width: 1px }`\n  let width = 1\n\n  for (const [name, [rootClass, varsClass]] of activeThemes.entries()) {\n    content += ` html.${rootClass} .${elClass}, .${varsClass} .${elClass} { width: ${++width}px }`\n    themeWidths.set(width, name)\n  }\n\n  style.textContent = content\n  style.id = styleId\n  document.head.appendChild(style)\n})\n\nexport function addActiveThemes(themes: (string | InitThemeOptions)[]) {\n  for (const theme of themes) {\n    const {\n      name,\n      rootClass = name,\n      varsClass = `vxp-theme-vars-${rootClass}`,\n    } = typeof theme === 'string' ? ({ name: theme } as InitThemeOptions) : theme\n\n    activeThemes.set(name, [rootClass, varsClass])\n  }\n}\n\nexport function setActiveThemes(themes: (string | InitThemeOptions)[]) {\n  activeThemes.clear()\n  addActiveThemes(themes)\n}\n\nlet idCount = 0\n\nfunction getElId() {\n  return `__theme_observer_${idCount++}__`\n}\n\nfunction createObserver(theme: Ref<string | undefined>) {\n  if (!isClient) return\n\n  const observer = document.createElement('div')\n\n  observer.id = getElId()\n  observer.className = elClass\n  observer.role = 'none'\n  observer.style.cssText =\n    'position: fixed; top -10px; left: -10px; height: 1px; visibility: hidden;'\n\n  observeResize(observer, entry => {\n    if (!isClient) return\n\n    const width = entry.borderBoxSize?.[0].inlineSize ?? entry.contentRect.width\n\n    theme.value = themeWidths.get(width)\n  })\n\n  return observer\n}\n","import { onScopeDispose } from 'vue'\n\n/**\n * 获取用于记录 `setTimeout` 返回值的对象，记录的定时器会在作用域消除时自动清理\n */\nexport function useSetTimeout() {\n  const timer: Record<string, any> = {}\n\n  onScopeDispose(() => {\n    Object.keys(timer).forEach(key => {\n      clearTimeout(timer[key])\n    })\n  })\n\n  return { timer }\n}\n\n/**\n * 获取用于记录 `setInterval` 返回值的对象，记录的定时器会在作用域消除时自动清理\n */\nexport function useSetInterval() {\n  const timer: Record<string, any> = {}\n\n  onScopeDispose(() => {\n    Object.keys(timer).forEach(key => {\n      clearInterval(timer[key])\n    })\n  })\n\n  return { timer }\n}\n\n/**\n * 获取用于记录 `requestAnimationFrame` 返回值的对象，记录的定时器会在作用域消除时自动清理\n */\nexport function useRaf() {\n  const timer: Record<string, any> = {}\n\n  onScopeDispose(() => {\n    Object.keys(timer).forEach(key => {\n      cancelAnimationFrame(timer[key])\n    })\n  })\n\n  return { timer }\n}\n\n/**\n * 获取三个分别用于记录 `setTimeout`、`setInterval` 和 `requestAnimationFrame` 返回值的对象\n *\n * 记录在这些对象上的定时器将会在作用域消除时自动清理\n */\nexport function useTimerRecord() {\n  const { timer: timeout } = useSetTimeout()\n  const { timer: interval } = useSetInterval()\n  const { timer: raf } = useRaf()\n\n  return { timeout, interval, raf }\n}\n","import type { Ref } from 'vue'\n\nexport function useTriggerHandler(trigger: Ref<string>, currentVisible: Ref<boolean>, delay = 100) {\n  let timer: ReturnType<typeof setTimeout>\n\n  function handleTriggerEnter() {\n    if (trigger.value === 'hover') {\n      clearTimeout(timer)\n\n      timer = setTimeout(() => {\n        currentVisible.value = true\n      }, delay)\n    }\n  }\n\n  function handleTriggerLeave() {\n    if (trigger.value === 'hover') {\n      clearTimeout(timer)\n\n      timer = setTimeout(() => {\n        currentVisible.value = false\n      }, delay)\n    }\n  }\n\n  function handleTriggerClick() {\n    if (trigger.value === 'click') {\n      currentVisible.value = !currentVisible.value\n    }\n  }\n\n  return {\n    handleTriggerEnter,\n    handleTriggerLeave,\n    handleTriggerClick,\n  }\n}\n","import { computed, onScopeDispose, ref, unref, watch } from 'vue'\n\nimport { createBITree, isDefined, nextFrameOnce, noop } from '@vexip-ui/utils'\nimport { isHiddenElement } from './display'\nimport { observeResize, unobserveResize } from './resize'\n\nimport type { MaybeRef } from 'vue'\n\ntype Key = number | string | symbol\ntype Data = Record<string, any>\ntype Behavior = ScrollToOptions['behavior']\n\nexport interface VirtualOptions<T extends Data> {\n  /**\n   * 虚拟滚动的元素\n   */\n  items: MaybeRef<T[]>,\n  /**\n   * 设置元素的最小高度\n   */\n  itemSize: MaybeRef<number>,\n  /**\n   * 设置元素是否为固定高度，固定高度时不处理 resize\n   */\n  itemFixed: MaybeRef<boolean>,\n  /**\n   * 元素的主键\n   */\n  idKey: MaybeRef<keyof T>,\n  /**\n   * 默认停留在的元素的主键，未实现\n   */\n  defaultKeyAt?: Key,\n  /**\n   * 设置前后的缓冲元素的个数\n   */\n  bufferSize?: MaybeRef<number>,\n  /**\n   * 虚拟滚动的包围元素\n   */\n  wrapper?: MaybeRef<HTMLElement | null | undefined>,\n  /**\n   * 是否自动观察 wrapper 缩放\n   *\n   * @default true\n   */\n  autoResize?: boolean,\n}\n\nexport function useVirtual<T extends Data = Data>(options: VirtualOptions<T>) {\n  const {\n    items,\n    itemSize,\n    itemFixed,\n    idKey,\n    defaultKeyAt,\n    bufferSize = ref(5),\n    wrapper = ref(null),\n    autoResize = true,\n  } = options\n\n  const indexMap = computed(() => {\n    const itemList = unref(items)\n    const length = itemList.length\n    const keyField = unref(idKey)\n    const map = new Map<Key, number>()\n\n    for (let i = 0; i < length; ++i) {\n      map.set(itemList[i][keyField], i)\n    }\n\n    return map\n  })\n  const visibleHeight = ref(0)\n  const heightDiffMap = new Map<Key, number>()\n  const heightTree = computed(() => {\n    const itemList = unref(items)\n    const length = itemList.length\n    const keyField = unref(idKey)\n    const tree = createBITree(length, unref(itemSize))\n\n    for (let i = 0; i < length; ++i) {\n      const key = itemList[i][keyField]\n      const heightDiff = heightDiffMap.get(key)\n\n      if (heightDiff) {\n        tree.add(i, heightDiff)\n      }\n    }\n\n    return tree\n  })\n  const treeUpdateDep = ref(0)\n  const scrollOffset = ref(0)\n  const startIndex = computed(() => {\n    return Math.max(\n      heightTree.value.boundIndex(scrollOffset.value) - Math.max(unref(bufferSize), 0),\n      0,\n    )\n  })\n  const visibleItems = computed(() => {\n    if (!visibleHeight.value || visibleHeight.value < 0) return []\n\n    const unrefItems = unref(items)\n    const endIndex = Math.min(\n      heightTree.value.boundIndex(scrollOffset.value + visibleHeight.value) +\n        1 +\n        Math.max(unref(bufferSize), 0),\n      unrefItems.length,\n    )\n\n    return unrefItems.slice(startIndex.value, endIndex)\n  })\n  const listStyle = computed(() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    treeUpdateDep.value\n\n    const height = heightTree.value.sum()\n    const fixed = unref(itemFixed)\n\n    return {\n      height: fixed ? `${height}px` : undefined,\n      minHeight: fixed ? undefined : `${height}px`,\n      boxSizing: 'content-box',\n    } as const\n  })\n  const itemsStyle = computed(() => {\n    // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n    treeUpdateDep.value\n\n    return {\n      transform: `translate3d(0, ${heightTree.value.sum(startIndex.value)}px, 0)`,\n    }\n  })\n\n  watch(\n    () => unref(wrapper),\n    el => {\n      if (el && isDefined(defaultKeyAt)) {\n        requestAnimationFrame(() => {\n          requestAnimationFrame(() => {\n            scrollToKey(defaultKeyAt)\n          })\n        })\n      }\n    },\n    { immediate: true, flush: 'post' },\n  )\n\n  if (autoResize) {\n    let unobserve = noop\n\n    const stopWatch = watch(\n      () => [unref(wrapper), autoResize] as const,\n      ([el]) => {\n        unobserve()\n\n        if (!el) return\n\n        observeResize(el, handleResize)\n\n        unobserve = () => {\n          unobserveResize(el)\n          unobserve = noop\n        }\n\n        if (isDefined(defaultKeyAt)) {\n          scrollToKey(defaultKeyAt)\n        }\n      },\n      { immediate: true, flush: 'post' },\n    )\n\n    onScopeDispose(() => {\n      stopWatch()\n      unobserve()\n    })\n  }\n\n  function syncScrollOffset() {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      scrollOffset.value = wrapperEl.scrollTop\n    }\n  }\n\n  function handleScroll() {\n    nextFrameOnce(syncScrollOffset)\n  }\n\n  function handleResize(entry: ResizeObserverEntry) {\n    if (\n      isHiddenElement(entry.target as HTMLElement) ||\n      entry.contentRect.height === visibleHeight.value\n    ) {\n      return\n    }\n\n    visibleHeight.value = entry.contentRect.height\n  }\n\n  function handleItemResize(key: Key, entry: ResizeObserverEntry) {\n    if (unref(itemFixed)) return\n\n    const index = indexMap.value.get(key)!\n    const tree = heightTree.value\n    const prevHeight = tree.get(index)\n    const height = entry.borderBoxSize?.[0]?.blockSize ?? entry.contentRect.height\n\n    if (height === prevHeight) return\n\n    if (isHiddenElement(entry.target as HTMLElement)) {\n      if (prevHeight) {\n        tree.add(index, -prevHeight)\n        treeUpdateDep.value++\n      }\n\n      return\n    }\n\n    const diff = height - unref(itemSize)\n    const delta = height - prevHeight\n\n    if (diff) {\n      heightDiffMap.set(key, diff)\n    } else {\n      heightDiffMap.delete(key)\n    }\n\n    if (!delta) return\n\n    tree.add(index, delta)\n    treeUpdateDep.value++\n\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      const prevTop = tree.sum(index)\n\n      if (wrapperEl.scrollTop > prevTop) {\n        wrapperEl.scrollBy(0, delta)\n      }\n\n      scrollOffset.value = wrapperEl.scrollTop\n    }\n  }\n\n  function scrollTo(top: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      wrapperEl.scrollTo({\n        behavior,\n        top,\n        left: 0,\n      })\n    }\n  }\n\n  function scrollBy(delta: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      wrapperEl.scrollBy({\n        behavior,\n        top: delta,\n        left: 0,\n      })\n    }\n  }\n\n  function scrollToKey(key: Key, behavior?: Behavior) {\n    const index = indexMap.value.get(key)\n\n    if (index != null) {\n      scrollToIndex(index, behavior)\n    }\n  }\n\n  function scrollToIndex(index: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (wrapperEl) {\n      wrapperEl.scrollTo({\n        behavior,\n        top: heightTree.value.sum(index),\n        left: 0,\n      })\n    }\n  }\n\n  function ensureIndexInView(index: number, behavior?: Behavior) {\n    const wrapperEl = unref(wrapper)\n\n    if (!wrapperEl) return\n\n    const tree = heightTree.value\n    const viewTop = wrapperEl.scrollTop\n    const top = tree.sum(index)\n\n    if (top < viewTop) {\n      scrollToIndex(index, behavior)\n      return\n    }\n\n    const viewHeight = wrapperEl.offsetHeight\n    const viewBottom = viewTop + viewHeight\n    const bottom = tree.sum(index + 1)\n\n    if (bottom > viewBottom) {\n      scrollTo(bottom - viewHeight, behavior)\n    }\n  }\n\n  function ensureKeyInView(key: Key, behavior?: Behavior) {\n    const index = indexMap.value.get(key)\n\n    if (index != null) {\n      ensureIndexInView(index, behavior)\n    }\n  }\n\n  return {\n    wrapper,\n    indexMap,\n    heightTree,\n    startIndex,\n    scrollOffset,\n    visibleItems,\n    listStyle,\n    itemsStyle,\n    handleScroll,\n    handleResize,\n    handleItemResize,\n    scrollTo,\n    scrollBy,\n    scrollToKey,\n    scrollToIndex,\n    ensureIndexInView,\n    ensureKeyInView,\n  }\n}\n"],"names":["y","Ot","M","t","it","W","bt","Jn","e","c","s","u","d","Me","ve","tn","Pr","Br","ht","eo","Jt","D","te","gn","io","fo","useListener","target","event","listener","options","noop","normalizedOptions","computed","remove","stopWatch","watch","unref","el","disabled","opts","handler","stop","getCurrentScope","onScopeDispose","CLICK_OUTSIDE","elements","downTarget","isInside","isClient","CLICK_TYPE","currentDownTarget","path","dispatchEvent","useClickOutside","ref","useDisplay","displayInit","element","observer","onMounted","nextTick","hiddenParentNode","queryOutsideHiddenElement","onBeforeUnmount","parentElement","isHiddenElement","createSlotRender","slots","names","fallback","name","params","renderSlot","vnodes","ensureArray","flatVNodes","children","result","loop","vnode","isVNode","Comment","createTextVNode","Fragment","unrefElement","plain","proxyExposed","_","key","_a","_b","_c","watchPauseable","args","active","handle","pause","resume","callbackArgs","resolve","reject","readonly","pickToRefs","reactive","keys","toRef","functionsMap","map","m","supported","notSupportedResult","states","subscriptions","ELEMENT","EVENT","state","full","useFullScreen","targetRef","isRef","REQUEST","EXIT","old","exit","enter","force","toggle","useHover","wrapper","isHover","enterWrapper","leaveWrapper","observerCache","spaceRE","unitRE","useIntersection","root","threshold","margin","normalizeMargin","thresholdCache","marginCache","handleIntersect","handlers","disconnect","parts","i","part","toNumber","entries","len","entry","useManualRef","updateSet","manualRef","value","customRef","track","trigger","origin","update","newValue","triggerUpdate","defaultAliasMap","separatorRE","splitRE","internalProps","useModifier","autoReset","capture","passive","strictTarget","onKeyDown","onKeyUp","aliasMap","activeKeys","metaDeps","modifier","resetAll","setModifier","updateModifier","modifierProxy","prop","receiver","useMounted","wait","isMounted","mount","disableEvent","useMoving","x","lazy","stopMouse","stopTouch","moving","internalState","current","record","throttleMove","throttle","updateState","start","move","end","clientX","clientY","xStart","yStart","clientXStart","clientYStart","deltaX","deltaY","registered","pageX","pageY","throttleHandler","register","unregister","usePointer","sides","min","max","round","floor","createCoords","v","oppositeSideMap","clamp","evaluate","param","getSide","placement","getAlignment","getOppositeAxis","axis","getAxisLength","getSideAxis","firstChar","getAlignmentAxis","getAlignmentSides","rects","rtl","alignment","alignmentAxis","length","mainAlignmentSide","getOppositePlacement","getExpandedPlacements","oppositePlacement","getOppositeAlignmentPlacement","lrPlacement","rlPlacement","tbPlacement","btPlacement","getSideList","side","isStart","getOppositeAxisPlacements","flipAlignment","direction","list","expandPaddingObject","padding","getPaddingObject","rectToClientRect","rect","width","height","computeCoordsFromPlacement","_ref","reference","floating","sideAxis","alignLength","isVertical","commonX","commonY","commonAlign","coords","detectOverflow","_await$platform$isEle","platform","strategy","boundary","rootBoundary","elementContext","altBoundary","paddingObject","clippingClientRect","offsetParent","offsetScale","elementClientRect","MAX_RESET_COUNT","computePosition","config","middleware","platformWithDetectOverflow","statefulPlacement","resetCount","middlewareData","currentMiddleware","fn","nextX","nextY","data","reset","arrow","arrowDimensions","isYAxis","minProp","maxProp","clientProp","endDiff","startDiff","arrowOffsetParent","clientSize","centerToReference","largestPossiblePadding","minPadding","maxPadding","min$1","center","offset","shouldAddOffset","alignmentOffset","flip","_middlewareData$arrow","_middlewareData$flip","initialPlacement","checkMainAxis","checkCrossAxis","specifiedFallbackPlacements","fallbackStrategy","fallbackAxisSideDirection","detectOverflowOptions","initialSideAxis","isBasePlacement","fallbackPlacements","hasFallbackAxisSideDirection","placements","overflow","overflows","overflowsData","_middlewareData$flip2","_overflowsData$filter","nextIndex","nextPlacement","resetPlacement","a","b","_overflowsData$filter2","currentSideAxis","acc","getSideOffsets","isAnySideFullyClipped","hide","offsets","originSides","convertValueToCoords","mainAxisMulti","crossAxisMulti","rawValue","mainAxis","crossAxis","_middlewareData$offse","diffCoords","shift","limiter","mainAxisCoord","crossAxisCoord","minSide","maxSide","limitedCoords","hasWindow","getNodeName","node","isNode","getWindow","_node$ownerDocument","getDocumentElement","isElement","isHTMLElement","isShadowRoot","isOverflowElement","overflowX","overflowY","display","getComputedStyle","isTableElement","isTopLayer","willChangeRe","containRe","isNotNone","isWebKitValue","isContainingBlock","elementOrCss","css","isWebKit","getContainingBlock","currentNode","getParentNode","isLastTraversableNode","getNodeScroll","getNearestOverflowAncestor","parentNode","getOverflowAncestors","traverseIframes","_node$ownerDocument2","scrollableAncestor","isBody","win","frameElement","getFrameElement","getCssDimensions","getComputedStyle$1","hasOffset","offsetWidth","offsetHeight","shouldFallback","unwrapElement","getScale","domElement","$","noOffsets","getVisualOffsets","shouldAddVisualOffsets","isFixed","floatingOffsetParent","getBoundingClientRect","includeScale","isFixedStrategy","clientRect","scale","visualOffsets","offsetWin","currentWin","currentIFrame","iframeScale","iframeRect","left","top","getWindowScrollBarX","leftScroll","getHTMLOffset","documentElement","scroll","htmlRect","convertOffsetParentRelativeRectToViewportRelativeRect","topLayer","isOffsetParentAnElement","offsetRect","htmlOffset","getClientRects","getDocumentRect","html","body","SCROLLBAR_MAX","getViewportRect","visualViewport","visualViewportBased","windowScrollbarX","doc","bodyStyles","bodyMarginInline","clippingStableScrollbarWidth","getInnerBoundingClientRect","getClientRectFromClippingAncestor","clippingAncestor","hasFixedPositionAncestor","stopNode","getClippingElementAncestors","cache","cachedResult","currentContainingBlockComputedStyle","elementIsFixed","computedStyle","currentNodeIsContaining","ancestor","getClippingRect","clippingAncestors","firstRect","right","bottom","getDimensions","getRectRelativeToOffsetParent","setLeftRTLScrollbarOffset","isStaticPositioned","getTrueOffsetParent","polyfill","rawOffsetParent","getOffsetParent","svgOffsetParent","getElementRects","getOffsetParentFn","getDimensionsFn","floatingDimensions","isRTL","rectsAreEqual","observeMove","onMove","timeoutId","cleanup","_io","refresh","skip","elementRectForRootMargin","insetTop","insetRight","insetBottom","insetLeft","isFirstUpdate","handleObserve","ratio","autoUpdate","ancestorScroll","ancestorResize","elementResize","layoutShift","animationFrame","referenceEl","ancestors","cleanupIo","reobserveFrame","resizeObserver","firstEntry","_resizeObserver","frameId","prevRefRect","frameLoop","nextRefRect","_resizeObserver2","offset$1","shift$1","flip$1","hide$1","arrow$1","mergedOptions","platformWithCache","computePosition$1","resizeObservers","hasActiveObservations","ro","hasSkippedObservations","msg","deliverResizeLoopError","ResizeObserverBoxOptions","freeze","obj","ResizeObserverSize","inlineSize","blockSize","DOMRectReadOnly","rectangle","isSVG","isHidden","scope","isReplacedElement","global","scrollRegexp","verticalRegexp","IE","parseDimension","pixel","size","switchSizes","zeroBoxes","calculateBoxSizes","forceRecalculation","cs","svg","removePadding","canScrollVertically","canScrollHorizontally","paddingTop","paddingRight","paddingBottom","paddingLeft","borderTop","borderRight","borderBottom","borderLeft","horizontalPadding","verticalPadding","horizontalBorderArea","verticalBorderArea","horizontalScrollbarThickness","verticalScrollbarThickness","widthReduction","heightReduction","contentWidth","contentHeight","borderBoxWidth","borderBoxHeight","boxes","calculateBoxSize","observedBox","borderBoxSize","contentBoxSize","devicePixelContentBoxSize","ResizeObserverEntry","calculateDepthForNode","depth","parent","broadcastActiveObservations","shallowestDepth","callbacks","ot","targetDepth","_i","callbacks_1","callback","gatherActiveObservationsAtDepth","process","notify","cb","queueMicroTask","toggle_1","el_1","queueResizeObserver","watching","isWatching","CATCH_PERIOD","observerConfig","events","time","timeout","scheduled","Scheduler","_this","until","elementsHaveResized","scheduler","updateCount","n","skipNotifyOnElement","ResizeObservation","ResizeObserverDetail","observerMap","getObservationIndex","observationTargets","ResizeObserverController","detail","firstObservation","index","lastObservation","ResizeObserver","handlerMap","handleResize","observeResize","unobserveResize","useResize","unobserve","computedRtl","elId","useRtl","initObserver","style","content","placementWhileList","usePopper","initOptions","transfer","isDrop","shallowRef","popper","arrowRef","transferTo","isRtl","watchEffect","wrapperEl","popperEl","setTransferTo","updatePopper","updatePopperInternal","arrowEl","setPopperDropOrigin","offsetOptions","shiftOptions","activePlacement","y2","styleId","elClass","elCache","useTheme","theme","createObserver","activeThemes","themeWidths","prevStyle","rootClass","varsClass","addActiveThemes","themes","setActiveThemes","idCount","getElId","useSetTimeout","timer","useSetInterval","useRaf","useTimerRecord","interval","raf","useTriggerHandler","currentVisible","delay","handleTriggerEnter","handleTriggerLeave","handleTriggerClick","useVirtual","items","itemSize","itemFixed","idKey","defaultKeyAt","bufferSize","autoResize","indexMap","itemList","keyField","visibleHeight","heightDiffMap","heightTree","tree","createBITree","heightDiff","treeUpdateDep","scrollOffset","startIndex","visibleItems","unrefItems","endIndex","listStyle","fixed","itemsStyle","isDefined","scrollToKey","syncScrollOffset","handleScroll","nextFrameOnce","handleItemResize","prevHeight","diff","delta","prevTop","scrollTo","behavior","scrollBy","scrollToIndex","ensureIndexInView","viewTop","viewHeight","viewBottom","ensureKeyInView"],"mappings":"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","x_google_ignoreList":[13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39]}