瀏覽代碼

chore: docs improvements

alvarosabu 2 年之前
父節點
當前提交
8d030fb470

+ 0 - 72
docs/.vitepress/cache/deps/@alvarosabu_utils.js

@@ -1,72 +0,0 @@
-import "./chunk-JC4IRQUL.js";
-
-// node_modules/.pnpm/@alvarosabu+utils@2.3.0/node_modules/@alvarosabu/utils/dist/as-utils.js
-var l = typeof window < "u";
-var f = (n) => typeof n < "u";
-var p = (n) => n != null;
-var w = (n) => typeof n == "boolean";
-var g = (n) => typeof n == "function";
-var d = (n) => typeof n == "number";
-var C = (n) => typeof n == "string";
-var h = (n) => typeof window < "u" && toString.call(n) === "[object Window]";
-var r = (n) => !!n && n.constructor === Array;
-var s = (n) => !!n && n.constructor === Object;
-var S = (n) => !!n && n.constructor === Event;
-var _ = (n) => !!n && n.constructor.name === "Promise";
-var A = (n) => r(n) ? n.length <= 0 : s(n) ? Object.entries(n).length <= 0 : false;
-var E = (n) => n.toString().toLowerCase().replace(/\s+/g, "-").replace(/[^\w-]+/g, "").replace(/--+/g, "-").replace(/^-+/, "").replace(/-+$/, "");
-var c = (n) => {
-  const t = {};
-  return Object.keys(n).forEach((e) => {
-    r(n[e]) ? t[e.replace(/(_\w)/g, (o) => o[1].toUpperCase())] = a(n[e]) : s(n[e]) ? t[e.replace(/(_\w)/g, (o) => o[1].toUpperCase())] = c(n[e]) : t[e.replace(/(_\w)/g, (o) => o[1].toUpperCase())] = n[e];
-  }), t;
-};
-var i = (n) => {
-  const t = {};
-  return Object.keys(n).forEach((e) => {
-    r(n[e]) ? t[e.replace(/([A-Z])/g, (o) => `_${o.toLowerCase()}`)] = n[e] = u(n[e]) : s(n[e]) ? t[e.replace(/([A-Z])/g, (o) => `_${o.toLowerCase()}`)] = n[e] = i(n[e]) : t[e.replace(/([A-Z])/g, (o) => `_${o.toLowerCase()}`)] = n[e];
-  }), t;
-};
-var a = (n) => n.map((t) => r(t) ? a(t) : s(t) ? c(t) : t);
-var u = (n) => n.map((t) => r(t) ? u(t) : s(t) ? i(t) : t);
-function T(n, t, e) {
-  return Math.min(e, Math.max(t, n));
-}
-function L(n) {
-  return n != null;
-}
-function U(n) {
-  return n !== null;
-}
-function $(n) {
-  return n !== void 0;
-}
-function m(n) {
-  return Boolean(n);
-}
-export {
-  i as camelToSnake,
-  T as clamp,
-  p as hasValue,
-  r as isArray,
-  w as isBoolean,
-  l as isBrowser,
-  f as isDefined,
-  A as isEmpty,
-  S as isEvent,
-  g as isFunction,
-  d as isNumber,
-  s as isObject,
-  _ as isPromise,
-  C as isString,
-  m as isTruthy,
-  h as isWindow,
-  u as listCamelToSnake,
-  a as listSnakeToCamel,
-  U as noNull,
-  L as notNullish,
-  $ as notUndefined,
-  E as slugify,
-  c as snakeToCamel
-};
-//# sourceMappingURL=@alvarosabu_utils.js.map

文件差異過大導致無法顯示
+ 0 - 3
docs/.vitepress/cache/deps/@alvarosabu_utils.js.map


+ 499 - 214
docs/.vitepress/cache/deps/@stackblitz_sdk.js

@@ -1,238 +1,523 @@
 import "./chunk-JC4IRQUL.js";
 
-// node_modules/.pnpm/@stackblitz+sdk@1.8.2/node_modules/@stackblitz/sdk/bundles/sdk.m.js
-var e = ["angular-cli", "create-react-app", "html", "javascript", "node", "polymer", "typescript", "vue"];
-var t = { clickToLoad: function(e2) {
-  return r("ctl", e2);
-}, devToolsHeight: function(e2) {
-  return i("devtoolsheight", e2);
-}, forceEmbedLayout: function(e2) {
-  return r("embed", e2);
-}, hideDevTools: function(e2) {
-  return r("hidedevtools", e2);
-}, hideExplorer: function(e2) {
-  return r("hideExplorer", e2);
-}, hideNavigation: function(e2) {
-  return r("hideNavigation", e2);
-}, showSidebar: function(e2) {
-  return function(e3, t2) {
-    return "boolean" == typeof t2 ? "showSidebar=" + (t2 ? "1" : "0") : "";
-  }(0, e2);
-}, openFile: function(e2) {
-  return function(e3, t2) {
-    return (Array.isArray(t2) ? t2 : [t2]).filter(function(e4) {
-      return "string" == typeof e4 && "" !== e4.trim();
-    }).map(function(e4) {
-      return "file=" + encodeURIComponent(e4.trim());
-    });
-  }(0, e2).join("&");
-}, terminalHeight: function(e2) {
-  return i("terminalHeight", e2);
-}, theme: function(e2) {
-  return o("theme", ["light", "dark"], e2);
-}, view: function(e2) {
-  return o("view", ["preview", "editor"], e2);
-} };
-function n(e2) {
-  void 0 === e2 && (e2 = {});
-  var n2 = Object.entries(e2).map(function(e3) {
-    var n3 = e3[0], r2 = e3[1];
-    return null != r2 && t.hasOwnProperty(n3) ? t[n3](r2) : "";
+// node_modules/.pnpm/@stackblitz+sdk@1.9.0/node_modules/@stackblitz/sdk/bundles/sdk.m.js
+var CONNECT_INTERVAL = 500;
+var CONNECT_MAX_ATTEMPTS = 20;
+var DEFAULT_FRAME_HEIGHT = 300;
+var DEFAULT_ORIGIN = "https://stackblitz.com";
+var PROJECT_TEMPLATES = [
+  "angular-cli",
+  "create-react-app",
+  "html",
+  "javascript",
+  "node",
+  "polymer",
+  "typescript",
+  "vue"
+];
+var UI_SIDEBAR_VIEWS = ["project", "search", "ports", "settings"];
+var UI_THEMES = ["light", "dark"];
+var UI_VIEWS = ["editor", "preview"];
+var generators = {
+  clickToLoad: (value) => trueParam("ctl", value),
+  devToolsHeight: (value) => percentParam("devtoolsheight", value),
+  forceEmbedLayout: (value) => trueParam("embed", value),
+  hideDevTools: (value) => trueParam("hidedevtools", value),
+  hideExplorer: (value) => trueParam("hideExplorer", value),
+  hideNavigation: (value) => trueParam("hideNavigation", value),
+  openFile: (value) => stringParams("file", value),
+  showSidebar: (value) => booleanParam("showSidebar", value),
+  sidebarView: (value) => enumParam("sidebarView", value, UI_SIDEBAR_VIEWS),
+  startScript: (value) => stringParams("startScript", value),
+  terminalHeight: (value) => percentParam("terminalHeight", value),
+  theme: (value) => enumParam("theme", value, UI_THEMES),
+  view: (value) => enumParam("view", value, UI_VIEWS),
+  zenMode: (value) => trueParam("zenMode", value)
+};
+function buildParams(options = {}) {
+  const params = Object.entries(options).map(([key, value]) => {
+    if (value != null && generators.hasOwnProperty(key)) {
+      return generators[key](value);
+    }
+    return "";
   }).filter(Boolean);
-  return n2.length ? "?" + n2.join("&") : "";
+  return params.length ? `?${params.join("&")}` : "";
 }
-function r(e2, t2) {
-  return true === t2 ? e2 + "=1" : "";
+function trueParam(name, value) {
+  if (value === true) {
+    return `${name}=1`;
+  }
+  return "";
 }
-function i(e2, t2) {
-  return "number" == typeof t2 && t2 >= 0 && t2 <= 100 ? e2 + "=" + Math.round(t2) : "";
+function booleanParam(name, value) {
+  if (typeof value === "boolean") {
+    return `${name}=${value ? "1" : "0"}`;
+  }
+  return "";
+}
+function percentParam(name, value) {
+  if (typeof value === "number" && !Number.isNaN(value)) {
+    const clamped = Math.min(100, Math.max(0, value));
+    return `${name}=${encodeURIComponent(Math.round(clamped))}`;
+  }
+  return "";
+}
+function enumParam(name, value = "", allowList = []) {
+  if (allowList.includes(value)) {
+    return `${name}=${encodeURIComponent(value)}`;
+  }
+  return "";
 }
-function o(e2, t2, n2) {
-  return "string" == typeof n2 && t2.includes(n2) ? e2 + "=" + n2 : "";
+function stringParams(name, value) {
+  const values = Array.isArray(value) ? value : [value];
+  return values.filter((val) => typeof val === "string" && val.trim() !== "").map((val) => `${name}=${encodeURIComponent(val)}`).join("&");
 }
-function a() {
+function genID() {
   return Math.random().toString(36).slice(2, 6) + Math.random().toString(36).slice(2, 6);
 }
-function d(e2, t2) {
-  return "" + u(t2) + e2 + n(t2);
+function openUrl(route, options) {
+  return `${getOrigin(options)}${route}${buildParams(options)}`;
 }
-function c(e2, t2) {
-  var r2 = { forceEmbedLayout: true };
-  return t2 && "object" == typeof t2 && Object.assign(r2, t2), "" + u(r2) + e2 + n(r2);
+function embedUrl(route, options) {
+  const config = {
+    forceEmbedLayout: true
+  };
+  if (options && typeof options === "object") {
+    Object.assign(config, options);
+  }
+  return `${getOrigin(config)}${route}${buildParams(config)}`;
 }
-function u(e2) {
-  return void 0 === e2 && (e2 = {}), "string" == typeof e2.origin ? e2.origin : "https://stackblitz.com";
+function getOrigin(options = {}) {
+  const origin = typeof options.origin === "string" ? options.origin : DEFAULT_ORIGIN;
+  return origin.replace(/\/$/, "");
 }
-function s(e2, t2, n2) {
-  if (!t2 || !e2 || !e2.parentNode)
+function replaceAndEmbed(target, frame, options) {
+  if (!frame || !target || !target.parentNode) {
     throw new Error("Invalid Element");
-  e2.id && (t2.id = e2.id), e2.className && (t2.className = e2.className), function(e3, t3) {
-    t3 && "object" == typeof t3 && (Object.hasOwnProperty.call(t3, "height") && (e3.height = "" + t3.height), Object.hasOwnProperty.call(t3, "width") && (e3.width = "" + t3.width)), e3.height || (e3.height = "300"), e3.width || e3.setAttribute("style", "width:100%;");
-  }(t2, n2), e2.parentNode.replaceChild(t2, e2);
-}
-function l(e2) {
-  if ("string" == typeof e2) {
-    var t2 = document.getElementById(e2);
-    if (!t2)
-      throw new Error("Could not find element with id '" + e2 + "'");
-    return t2;
-  }
-  if (e2 instanceof HTMLElement)
-    return e2;
-  throw new Error("Invalid element: " + e2);
-}
-function p(e2) {
-  return e2 && false === e2.newWindow ? "_self" : "_blank";
-}
-function f() {
-  return f = Object.assign || function(e2) {
-    for (var t2 = 1; t2 < arguments.length; t2++) {
-      var n2 = arguments[t2];
-      for (var r2 in n2)
-        Object.prototype.hasOwnProperty.call(n2, r2) && (e2[r2] = n2[r2]);
+  }
+  if (target.id) {
+    frame.id = target.id;
+  }
+  if (target.className) {
+    frame.className = target.className;
+  }
+  setFrameDimensions(frame, options);
+  target.replaceWith(frame);
+}
+function findElement(elementOrId) {
+  if (typeof elementOrId === "string") {
+    const element = document.getElementById(elementOrId);
+    if (!element) {
+      throw new Error(`Could not find element with id '${elementOrId}'`);
     }
-    return e2;
-  }, f.apply(this, arguments);
-}
-var h = function() {
-  function e2(e3) {
-    this.port = void 0, this.pending = {}, this.port = e3, this.port.onmessage = this.messageListener.bind(this);
-  }
-  var t2 = e2.prototype;
-  return t2.request = function(e3) {
-    var t3 = this, n2 = e3.type, r2 = e3.payload, i2 = a();
-    return new Promise(function(e4, o2) {
-      t3.pending[i2] = { resolve: e4, reject: o2 }, t3.port.postMessage({ type: n2, payload: f({}, r2, { __reqid: i2 }) });
+    return element;
+  } else if (elementOrId instanceof HTMLElement) {
+    return elementOrId;
+  }
+  throw new Error(`Invalid element: ${elementOrId}`);
+}
+function openTarget(options) {
+  return options && options.newWindow === false ? "_self" : "_blank";
+}
+function setFrameDimensions(frame, options = {}) {
+  const height = Object.hasOwnProperty.call(options, "height") ? `${options.height}` : `${DEFAULT_FRAME_HEIGHT}`;
+  const width = Object.hasOwnProperty.call(options, "width") ? `${options.width}` : void 0;
+  frame.setAttribute("height", height);
+  if (width) {
+    frame.setAttribute("width", width);
+  } else {
+    frame.setAttribute("style", "width:100%;");
+  }
+}
+var RDC = class {
+  constructor(port) {
+    this.pending = {};
+    this.port = port;
+    this.port.onmessage = this.messageListener.bind(this);
+  }
+  request({ type, payload }) {
+    return new Promise((resolve, reject) => {
+      const id = genID();
+      this.pending[id] = { resolve, reject };
+      this.port.postMessage({
+        type,
+        payload: {
+          ...payload,
+          // Ensure the payload object includes the request ID
+          __reqid: id
+        }
+      });
     });
-  }, t2.messageListener = function(e3) {
-    var t3;
-    if ("string" == typeof (null == (t3 = e3.data.payload) ? void 0 : t3.__reqid)) {
-      var n2 = e3.data, r2 = n2.type, i2 = n2.payload, o2 = i2.__reqid, a2 = i2.__error;
-      this.pending[o2] && (i2.__success ? this.pending[o2].resolve(function(e4) {
-        var t4 = f({}, e4);
-        return delete t4.__reqid, delete t4.__success, delete t4.__error, Object.keys(t4).length ? t4 : null;
-      }(i2)) : this.pending[o2].reject(a2 ? r2 + ": " + a2 : r2), delete this.pending[o2]);
+  }
+  messageListener(event) {
+    var _a;
+    if (typeof ((_a = event.data.payload) == null ? void 0 : _a.__reqid) !== "string") {
+      return;
     }
-  }, e2;
-}();
-var m = function() {
-  function e2(e3, t3) {
-    var n2 = this;
-    this._rdc = void 0, this.editor = { openFile: function(e4) {
-      return n2._rdc.request({ type: "SDK_OPEN_FILE", payload: { path: e4 } });
-    }, setCurrentFile: function(e4) {
-      return n2._rdc.request({ type: "SDK_SET_CURRENT_FILE", payload: { path: e4 } });
-    }, setTheme: function(e4) {
-      return n2._rdc.request({ type: "SDK_SET_UI_THEME", payload: { theme: e4 } });
-    }, setView: function(e4) {
-      return n2._rdc.request({ type: "SDK_SET_UI_VIEW", payload: { view: e4 } });
-    }, showSidebar: function(e4) {
-      return void 0 === e4 && (e4 = true), n2._rdc.request({ type: "SDK_TOGGLE_SIDEBAR", payload: { visible: e4 } });
-    } }, this.preview = { origin: "", getUrl: function() {
-      return n2._rdc.request({ type: "SDK_GET_PREVIEW_URL", payload: {} }).then(function(e4) {
-        var t4;
-        return null != (t4 = null == e4 ? void 0 : e4.url) ? t4 : null;
-      });
-    }, setUrl: function(e4) {
-      if (void 0 === e4 && (e4 = "/"), "string" != typeof e4 || !e4.startsWith("/"))
-        throw new Error("Invalid argument: expected a path starting with '/', got '" + e4 + "'");
-      return n2._rdc.request({ type: "SDK_SET_PREVIEW_URL", payload: { path: e4 } });
-    } }, this._rdc = new h(e3), Object.defineProperty(this.preview, "origin", { value: "string" == typeof t3.previewOrigin ? t3.previewOrigin : null, writable: false });
-  }
-  var t2 = e2.prototype;
-  return t2.applyFsDiff = function(e3) {
-    var t3 = function(e4) {
-      return null !== e4 && "object" == typeof e4;
+    const { type, payload } = event.data;
+    const { __reqid: id, __success: success, __error: error } = payload;
+    if (this.pending[id]) {
+      if (success) {
+        this.pending[id].resolve(this.cleanResult(payload));
+      } else {
+        this.pending[id].reject(error ? `${type}: ${error}` : type);
+      }
+      delete this.pending[id];
+    }
+  }
+  cleanResult(payload) {
+    const result = { ...payload };
+    delete result.__reqid;
+    delete result.__success;
+    delete result.__error;
+    return Object.keys(result).length ? result : null;
+  }
+};
+var VM = class {
+  constructor(port, config) {
+    this.editor = {
+      /**
+       * Open one of several files in tabs and/or split panes.
+       *
+       * @since 1.7.0 Added support for opening multiple files
+       */
+      openFile: (path) => {
+        return this._rdc.request({
+          type: "SDK_OPEN_FILE",
+          payload: { path }
+        });
+      },
+      /**
+       * Set a project file as the currently selected file.
+       *
+       * - This may update the highlighted file in the file explorer,
+       *   and the currently open and/or focused editor tab.
+       * - It will _not_ open a new editor tab if the provided path does not
+       *   match a currently open tab. See `vm.editor.openFile` to open files.
+       *
+       * @since 1.7.0
+       * @experimental
+       */
+      setCurrentFile: (path) => {
+        return this._rdc.request({
+          type: "SDK_SET_CURRENT_FILE",
+          payload: { path }
+        });
+      },
+      /**
+       * Change the color theme
+       *
+       * @since 1.7.0
+       */
+      setTheme: (theme) => {
+        return this._rdc.request({
+          type: "SDK_SET_UI_THEME",
+          payload: { theme }
+        });
+      },
+      /**
+       * Change the display mode of the project:
+       *
+       * - `default`: show the editor and preview pane
+       * - `editor`: show the editor pane only
+       * - `preview`: show the preview pane only
+       *
+       * @since 1.7.0
+       */
+      setView: (view) => {
+        return this._rdc.request({
+          type: "SDK_SET_UI_VIEW",
+          payload: { view }
+        });
+      },
+      /**
+       * Change the display mode of the sidebar:
+       *
+       * - `true`: show the sidebar
+       * - `false`: hide the sidebar
+       *
+       * @since 1.7.0
+       */
+      showSidebar: (visible = true) => {
+        return this._rdc.request({
+          type: "SDK_TOGGLE_SIDEBAR",
+          payload: { visible }
+        });
+      }
     };
-    if (!t3(e3) || !t3(e3.create))
-      throw new Error("Invalid diff object: expected diff.create to be an object.");
-    if (!Array.isArray(e3.destroy))
-      throw new Error("Invalid diff object: expected diff.create to be an array.");
-    return this._rdc.request({ type: "SDK_APPLY_FS_DIFF", payload: e3 });
-  }, t2.getDependencies = function() {
-    return this._rdc.request({ type: "SDK_GET_DEPS_SNAPSHOT", payload: {} });
-  }, t2.getFsSnapshot = function() {
-    return this._rdc.request({ type: "SDK_GET_FS_SNAPSHOT", payload: {} });
-  }, e2;
-}();
-var v = [];
-var y = function(e2) {
-  var t2 = this;
-  this.element = void 0, this.id = void 0, this.pending = void 0, this.vm = void 0, this.id = a(), this.element = e2, this.pending = new Promise(function(e3, n2) {
-    var r2 = function(n3) {
-      var r3 = n3.data;
-      "SDK_INIT_SUCCESS" === (null == r3 ? void 0 : r3.action) && r3.id === t2.id && (t2.vm = new m(n3.ports[0], r3.payload), e3(t2.vm), o2());
-    }, i2 = function() {
-      var e4;
-      null == (e4 = t2.element.contentWindow) || e4.postMessage({ action: "SDK_INIT", id: t2.id }, "*");
+    this.preview = {
+      /**
+       * The origin (protocol and domain) of the preview iframe.
+       *
+       * In WebContainers-based projects, the origin will always be `null`;
+       * try using `vm.preview.getUrl` instead.
+       *
+       * @see https://developer.stackblitz.com/guides/user-guide/available-environments
+       */
+      origin: "",
+      /**
+       * Get the current preview URL.
+       *
+       * In both and EngineBlock and WebContainers-based projects, the preview URL
+       * may not reflect the exact path of the current page, after user navigation.
+       *
+       * In WebContainers-based projects, the preview URL will be `null` initially,
+       * and until the project starts a web server.
+       *
+       * @since 1.7.0
+       * @experimental
+       */
+      getUrl: () => {
+        return this._rdc.request({
+          type: "SDK_GET_PREVIEW_URL",
+          payload: {}
+        }).then((data) => (data == null ? void 0 : data.url) ?? null);
+      },
+      /**
+       * Change the path of the preview URL.
+       *
+       * In WebContainers-based projects, this will be ignored if there is no
+       * currently running web server.
+       *
+       * @since 1.7.0
+       * @experimental
+       */
+      setUrl: (path = "/") => {
+        if (typeof path !== "string" || !path.startsWith("/")) {
+          throw new Error(`Invalid argument: expected a path starting with '/', got '${path}'`);
+        }
+        return this._rdc.request({
+          type: "SDK_SET_PREVIEW_URL",
+          payload: { path }
+        });
+      }
     };
-    function o2() {
-      window.clearInterval(d2), window.removeEventListener("message", r2);
+    this._rdc = new RDC(port);
+    Object.defineProperty(this.preview, "origin", {
+      value: typeof config.previewOrigin === "string" ? config.previewOrigin : null,
+      writable: false
+    });
+  }
+  /**
+   * Apply batch updates to the project files in one call.
+   */
+  applyFsDiff(diff) {
+    const isObject = (val) => val !== null && typeof val === "object";
+    if (!isObject(diff) || !isObject(diff.create)) {
+      throw new Error("Invalid diff object: expected diff.create to be an object.");
+    } else if (!Array.isArray(diff.destroy)) {
+      throw new Error("Invalid diff object: expected diff.destroy to be an array.");
     }
-    window.addEventListener("message", r2), i2();
-    var a2 = 0, d2 = window.setInterval(function() {
-      if (t2.vm)
-        o2();
-      else {
-        if (a2 >= 20)
-          return o2(), n2("Timeout: Unable to establish a connection with the StackBlitz VM"), void v.forEach(function(e4, n3) {
-            e4.id === t2.id && v.splice(n3, 1);
-          });
-        a2++, i2();
+    return this._rdc.request({
+      type: "SDK_APPLY_FS_DIFF",
+      payload: diff
+    });
+  }
+  /**
+   * Get the project’s defined dependencies.
+   *
+   * In EngineBlock projects, version numbers represent the resolved dependency versions.
+   * In WebContainers-based projects, returns data from the project’s `package.json` without resolving installed version numbers.
+   */
+  getDependencies() {
+    return this._rdc.request({
+      type: "SDK_GET_DEPS_SNAPSHOT",
+      payload: {}
+    });
+  }
+  /**
+   * Get a snapshot of the project files and their content.
+   */
+  getFsSnapshot() {
+    return this._rdc.request({
+      type: "SDK_GET_FS_SNAPSHOT",
+      payload: {}
+    });
+  }
+};
+var connections = [];
+var Connection = class {
+  constructor(element) {
+    this.id = genID();
+    this.element = element;
+    this.pending = new Promise((resolve, reject) => {
+      const listenForSuccess = ({ data, ports }) => {
+        if ((data == null ? void 0 : data.action) === "SDK_INIT_SUCCESS" && data.id === this.id) {
+          this.vm = new VM(ports[0], data.payload);
+          resolve(this.vm);
+          cleanup();
+        }
+      };
+      const pingFrame = () => {
+        var _a;
+        (_a = this.element.contentWindow) == null ? void 0 : _a.postMessage(
+          {
+            action: "SDK_INIT",
+            id: this.id
+          },
+          "*"
+        );
+      };
+      function cleanup() {
+        window.clearInterval(interval);
+        window.removeEventListener("message", listenForSuccess);
       }
-    }, 500);
-  }), v.push(this);
+      window.addEventListener("message", listenForSuccess);
+      pingFrame();
+      let attempts = 0;
+      const interval = window.setInterval(() => {
+        if (this.vm) {
+          cleanup();
+          return;
+        }
+        if (attempts >= CONNECT_MAX_ATTEMPTS) {
+          cleanup();
+          reject("Timeout: Unable to establish a connection with the StackBlitz VM");
+          connections.forEach((connection, index) => {
+            if (connection.id === this.id) {
+              connections.splice(index, 1);
+            }
+          });
+          return;
+        }
+        attempts++;
+        pingFrame();
+      }, CONNECT_INTERVAL);
+    });
+    connections.push(this);
+  }
+};
+var getConnection = (identifier) => {
+  const key = identifier instanceof Element ? "element" : "id";
+  return connections.find((c) => c[key] === identifier) ?? null;
+};
+function createHiddenInput(name, value) {
+  const input = document.createElement("input");
+  input.type = "hidden";
+  input.name = name;
+  input.value = value;
+  return input;
+}
+function encodeFilePath(path) {
+  return path.replace(/\[/g, "%5B").replace(/\]/g, "%5D");
+}
+function createProjectForm({
+  template,
+  title,
+  description,
+  dependencies,
+  files,
+  settings
+}) {
+  if (!PROJECT_TEMPLATES.includes(template)) {
+    const names = PROJECT_TEMPLATES.map((t) => `'${t}'`).join(", ");
+    console.warn(`Unsupported project.template: must be one of ${names}`);
+  }
+  const inputs = [];
+  const addInput = (name, value, defaultValue = "") => {
+    inputs.push(createHiddenInput(name, typeof value === "string" ? value : defaultValue));
+  };
+  addInput("project[title]", title);
+  if (typeof description === "string" && description.length > 0) {
+    addInput("project[description]", description);
+  }
+  addInput("project[template]", template, "javascript");
+  if (dependencies) {
+    if (template === "node") {
+      console.warn(
+        `Invalid project.dependencies: dependencies must be provided as a 'package.json' file when using the 'node' template.`
+      );
+    } else {
+      addInput("project[dependencies]", JSON.stringify(dependencies));
+    }
+  }
+  if (settings) {
+    addInput("project[settings]", JSON.stringify(settings));
+  }
+  Object.entries(files).forEach(([path, contents]) => {
+    addInput(`project[files][${encodeFilePath(path)}]`, contents);
+  });
+  const form = document.createElement("form");
+  form.method = "POST";
+  form.setAttribute("style", "display:none!important;");
+  form.append(...inputs);
+  return form;
+}
+function createProjectFrameHTML(project, options) {
+  const form = createProjectForm(project);
+  form.action = embedUrl("/run", options);
+  form.id = "sb_run";
+  const html = `<!doctype html>
+<html>
+<head><title></title></head>
+<body>
+  ${form.outerHTML}
+  <script>document.getElementById('${form.id}').submit();<\/script>
+</body>
+</html>`;
+  return html;
+}
+function openNewProject(project, options) {
+  const form = createProjectForm(project);
+  form.action = openUrl("/run", options);
+  form.target = openTarget(options);
+  document.body.appendChild(form);
+  form.submit();
+  document.body.removeChild(form);
+}
+function connect(frameEl) {
+  if (!(frameEl == null ? void 0 : frameEl.contentWindow)) {
+    return Promise.reject("Provided element is not an iframe.");
+  }
+  const connection = getConnection(frameEl) ?? new Connection(frameEl);
+  return connection.pending;
+}
+function openProject(project, options) {
+  openNewProject(project, options);
+}
+function openProjectId(projectId, options) {
+  const url = openUrl(`/edit/${projectId}`, options);
+  const target = openTarget(options);
+  window.open(url, target);
+}
+function openGithubProject(repoSlug, options) {
+  const url = openUrl(`/github/${repoSlug}`, options);
+  const target = openTarget(options);
+  window.open(url, target);
+}
+function embedProject(elementOrId, project, options) {
+  var _a;
+  const element = findElement(elementOrId);
+  const html = createProjectFrameHTML(project, options);
+  const frame = document.createElement("iframe");
+  replaceAndEmbed(element, frame, options);
+  (_a = frame.contentDocument) == null ? void 0 : _a.write(html);
+  return connect(frame);
+}
+function embedProjectId(elementOrId, projectId, options) {
+  const element = findElement(elementOrId);
+  const frame = document.createElement("iframe");
+  frame.src = embedUrl(`/edit/${projectId}`, options);
+  replaceAndEmbed(element, frame, options);
+  return connect(frame);
+}
+function embedGithubProject(elementOrId, repoSlug, options) {
+  const element = findElement(elementOrId);
+  const frame = document.createElement("iframe");
+  frame.src = embedUrl(`/github/${repoSlug}`, options);
+  replaceAndEmbed(element, frame, options);
+  return connect(frame);
+}
+var StackBlitzSDK = {
+  connect,
+  embedGithubProject,
+  embedProject,
+  embedProjectId,
+  openGithubProject,
+  openProject,
+  openProjectId
 };
-function g(e2, t2) {
-  var n2 = document.createElement("input");
-  return n2.type = "hidden", n2.name = e2, n2.value = t2, n2;
-}
-function w(t2) {
-  if (!e.includes(t2.template)) {
-    var n2 = e.map(function(e2) {
-      return "'" + e2 + "'";
-    }).join(", ");
-    console.warn("Unsupported project.template: must be one of " + n2);
-  }
-  var r2 = "node" === t2.template, i2 = document.createElement("form");
-  return i2.method = "POST", i2.setAttribute("style", "display:none!important;"), i2.appendChild(g("project[title]", t2.title)), i2.appendChild(g("project[description]", t2.description)), i2.appendChild(g("project[template]", t2.template)), t2.dependencies && (r2 ? console.warn("Invalid project.dependencies: dependencies must be provided as a 'package.json' file when using the 'node' template.") : i2.appendChild(g("project[dependencies]", JSON.stringify(t2.dependencies)))), t2.settings && i2.appendChild(g("project[settings]", JSON.stringify(t2.settings))), Object.keys(t2.files).forEach(function(e2) {
-    var n3 = "project[files]" + function(e3) {
-      return "[" + e3.replace(/\[/g, "%5B").replace(/\]/g, "%5D") + "]";
-    }(e2), r3 = t2.files[e2];
-    "string" == typeof r3 && i2.appendChild(g(n3, r3));
-  }), i2;
-}
-function _(e2) {
-  var t2, n2, r2, i2;
-  return null != e2 && e2.contentWindow ? (null != (i2 = (n2 = e2) instanceof Element ? "element" : "id", t2 = null != (r2 = v.find(function(e3) {
-    return e3[i2] === n2;
-  })) ? r2 : null) ? t2 : new y(e2)).pending : Promise.reject("Provided element is not an iframe.");
-}
-var b = { connect: _, embedGithubProject: function(e2, t2, n2) {
-  var r2 = l(e2), i2 = document.createElement("iframe");
-  return i2.src = c("/github/" + t2, n2), s(r2, i2, n2), _(i2);
-}, embedProject: function(e2, t2, n2) {
-  var r2, i2 = l(e2), o2 = function(e3, t3) {
-    var n3 = w(e3);
-    return n3.action = c("/run", t3), n3.id = "sb", "<html><head><title></title></head><body>" + n3.outerHTML + "<script>document.getElementById('" + n3.id + "').submit();<\/script></body></html>";
-  }(t2, n2), a2 = document.createElement("iframe");
-  return s(i2, a2, n2), null == (r2 = a2.contentDocument) || r2.write(o2), _(a2);
-}, embedProjectId: function(e2, t2, n2) {
-  var r2 = l(e2), i2 = document.createElement("iframe");
-  return i2.src = c("/edit/" + t2, n2), s(r2, i2, n2), _(i2);
-}, openGithubProject: function(e2, t2) {
-  var n2 = d("/github/" + e2, t2), r2 = p(t2);
-  window.open(n2, r2);
-}, openProject: function(e2, t2) {
-  !function(e3, t3) {
-    var n2 = w(e3);
-    n2.action = d("/run", t3), n2.target = p(t3), document.body.appendChild(n2), n2.submit(), document.body.removeChild(n2);
-  }(e2, t2);
-}, openProjectId: function(e2, t2) {
-  var n2 = d("/edit/" + e2, t2), r2 = p(t2);
-  window.open(n2, r2);
-} };
 export {
-  b as default
+  StackBlitzSDK as default
 };
 //# sourceMappingURL=@stackblitz_sdk.js.map

文件差異過大導致無法顯示
+ 0 - 1
docs/.vitepress/cache/deps/@stackblitz_sdk.js.map


文件差異過大導致無法顯示
+ 228 - 228
docs/.vitepress/cache/deps/@tresjs_cientos.js


文件差異過大導致無法顯示
+ 0 - 1
docs/.vitepress/cache/deps/@tresjs_cientos.js.map


+ 35 - 31
docs/.vitepress/cache/deps/@tresjs_core.js

@@ -1,38 +1,42 @@
 import {
-  $,
-  G,
-  L,
-  Ne,
-  ce,
-  dt,
-  gt,
-  j,
-  lt,
-  me,
-  nt,
-  se,
-  tt,
-  vt,
+  A,
+  Ct,
+  Et,
+  Lt,
+  Mt,
+  N,
+  St,
+  Xe,
+  ct,
+  it,
+  k,
+  ot,
+  q,
+  ut,
+  ve,
+  we,
   wt
-} from "./chunk-ZUTZQNJG.js";
-import "./chunk-UMTEG5DH.js";
+} from "./chunk-ZAYNNKM4.js";
 import "./chunk-LZPJ5JBW.js";
+import "./chunk-4QXXOI63.js";
 import "./chunk-JC4IRQUL.js";
 export {
-  Ne as CameraType,
-  lt as TresCanvas,
-  G as catalogue,
-  wt as default,
-  se as extend,
-  gt as isProd,
-  nt as trasverseObjects,
-  ce as useCamera,
-  dt as useLoader,
-  j as useLogger,
-  me as useRaycaster,
-  $ as useRenderLoop,
-  tt as useRenderer,
-  vt as useTexture,
-  L as useTres
+  Xe as CameraType,
+  wt as TresCanvas,
+  N as catalogue,
+  St as default,
+  ve as extend,
+  Et as isProd,
+  it as trasverseObjects,
+  q as useCamera,
+  Mt as useLoader,
+  A as useLogger,
+  ut as useRaycaster,
+  we as useRenderLoop,
+  ot as useRenderer,
+  Lt as useSeek,
+  Ct as useTexture,
+  k as useTres,
+  ct as useTresProvider
 };
 //# sourceMappingURL=@tresjs_core.js.map

+ 0 - 8265
docs/.vitepress/cache/deps/@vueuse_core.js

@@ -1,8265 +0,0 @@
-import {
-  computed,
-  customRef,
-  effectScope,
-  getCurrentInstance,
-  getCurrentScope,
-  inject,
-  isReactive,
-  isReadonly,
-  isRef,
-  markRaw,
-  nextTick,
-  onBeforeMount,
-  onBeforeUnmount,
-  onBeforeUpdate,
-  onMounted,
-  onScopeDispose,
-  onUnmounted,
-  onUpdated,
-  provide,
-  reactive,
-  readonly,
-  ref,
-  shallowRef,
-  toRef,
-  toRefs,
-  unref,
-  version,
-  watch,
-  watchEffect
-} from "./chunk-LZPJ5JBW.js";
-import "./chunk-JC4IRQUL.js";
-
-// node_modules/.pnpm/vue-demi@0.13.11/node_modules/vue-demi/lib/index.mjs
-var isVue2 = false;
-var isVue3 = true;
-function set(target, key, val) {
-  if (Array.isArray(target)) {
-    target.length = Math.max(target.length, key);
-    target.splice(key, 1, val);
-    return val;
-  }
-  target[key] = val;
-  return val;
-}
-function del(target, key) {
-  if (Array.isArray(target)) {
-    target.splice(key, 1);
-    return;
-  }
-  delete target[key];
-}
-
-// node_modules/.pnpm/@vueuse+shared@9.13.0/node_modules/@vueuse/shared/index.mjs
-var __defProp$9 = Object.defineProperty;
-var __defProps$6 = Object.defineProperties;
-var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$b = Object.getOwnPropertySymbols;
-var __hasOwnProp$b = Object.prototype.hasOwnProperty;
-var __propIsEnum$b = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$9 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$b.call(b, prop))
-      __defNormalProp$9(a, prop, b[prop]);
-  if (__getOwnPropSymbols$b)
-    for (var prop of __getOwnPropSymbols$b(b)) {
-      if (__propIsEnum$b.call(b, prop))
-        __defNormalProp$9(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b));
-function computedEager(fn, options) {
-  var _a2;
-  const result = shallowRef();
-  watchEffect(() => {
-    result.value = fn();
-  }, __spreadProps$6(__spreadValues$9({}, options), {
-    flush: (_a2 = options == null ? void 0 : options.flush) != null ? _a2 : "sync"
-  }));
-  return readonly(result);
-}
-var _a;
-var isClient = typeof window !== "undefined";
-var isDef = (val) => typeof val !== "undefined";
-var assert = (condition, ...infos) => {
-  if (!condition)
-    console.warn(...infos);
-};
-var toString = Object.prototype.toString;
-var isBoolean = (val) => typeof val === "boolean";
-var isFunction = (val) => typeof val === "function";
-var isNumber = (val) => typeof val === "number";
-var isString = (val) => typeof val === "string";
-var isObject = (val) => toString.call(val) === "[object Object]";
-var isWindow = (val) => typeof window !== "undefined" && toString.call(val) === "[object Window]";
-var now = () => Date.now();
-var timestamp = () => +Date.now();
-var clamp = (n, min, max) => Math.min(max, Math.max(min, n));
-var noop = () => {
-};
-var rand = (min, max) => {
-  min = Math.ceil(min);
-  max = Math.floor(max);
-  return Math.floor(Math.random() * (max - min + 1)) + min;
-};
-var isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent);
-var hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);
-function resolveUnref(r) {
-  return typeof r === "function" ? r() : unref(r);
-}
-function createFilterWrapper(filter, fn) {
-  function wrapper(...args) {
-    return new Promise((resolve, reject) => {
-      Promise.resolve(filter(() => fn.apply(this, args), { fn, thisArg: this, args })).then(resolve).catch(reject);
-    });
-  }
-  return wrapper;
-}
-var bypassFilter = (invoke2) => {
-  return invoke2();
-};
-function debounceFilter(ms, options = {}) {
-  let timer;
-  let maxTimer;
-  let lastRejector = noop;
-  const _clearTimeout = (timer2) => {
-    clearTimeout(timer2);
-    lastRejector();
-    lastRejector = noop;
-  };
-  const filter = (invoke2) => {
-    const duration = resolveUnref(ms);
-    const maxDuration = resolveUnref(options.maxWait);
-    if (timer)
-      _clearTimeout(timer);
-    if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {
-      if (maxTimer) {
-        _clearTimeout(maxTimer);
-        maxTimer = null;
-      }
-      return Promise.resolve(invoke2());
-    }
-    return new Promise((resolve, reject) => {
-      lastRejector = options.rejectOnCancel ? reject : resolve;
-      if (maxDuration && !maxTimer) {
-        maxTimer = setTimeout(() => {
-          if (timer)
-            _clearTimeout(timer);
-          maxTimer = null;
-          resolve(invoke2());
-        }, maxDuration);
-      }
-      timer = setTimeout(() => {
-        if (maxTimer)
-          _clearTimeout(maxTimer);
-        maxTimer = null;
-        resolve(invoke2());
-      }, duration);
-    });
-  };
-  return filter;
-}
-function throttleFilter(ms, trailing = true, leading = true, rejectOnCancel = false) {
-  let lastExec = 0;
-  let timer;
-  let isLeading = true;
-  let lastRejector = noop;
-  let lastValue;
-  const clear = () => {
-    if (timer) {
-      clearTimeout(timer);
-      timer = void 0;
-      lastRejector();
-      lastRejector = noop;
-    }
-  };
-  const filter = (_invoke) => {
-    const duration = resolveUnref(ms);
-    const elapsed = Date.now() - lastExec;
-    const invoke2 = () => {
-      return lastValue = _invoke();
-    };
-    clear();
-    if (duration <= 0) {
-      lastExec = Date.now();
-      return invoke2();
-    }
-    if (elapsed > duration && (leading || !isLeading)) {
-      lastExec = Date.now();
-      invoke2();
-    } else if (trailing) {
-      lastValue = new Promise((resolve, reject) => {
-        lastRejector = rejectOnCancel ? reject : resolve;
-        timer = setTimeout(() => {
-          lastExec = Date.now();
-          isLeading = true;
-          resolve(invoke2());
-          clear();
-        }, Math.max(0, duration - elapsed));
-      });
-    }
-    if (!leading && !timer)
-      timer = setTimeout(() => isLeading = true, duration);
-    isLeading = false;
-    return lastValue;
-  };
-  return filter;
-}
-function pausableFilter(extendFilter = bypassFilter) {
-  const isActive = ref(true);
-  function pause() {
-    isActive.value = false;
-  }
-  function resume() {
-    isActive.value = true;
-  }
-  const eventFilter = (...args) => {
-    if (isActive.value)
-      extendFilter(...args);
-  };
-  return { isActive: readonly(isActive), pause, resume, eventFilter };
-}
-function __onlyVue3(name = "this function") {
-  if (isVue3)
-    return;
-  throw new Error(`[VueUse] ${name} is only works on Vue 3.`);
-}
-function __onlyVue27Plus(name = "this function") {
-  if (isVue3 || version.startsWith("2.7."))
-    return;
-  throw new Error(`[VueUse] ${name} is only works on Vue 2.7 or above.`);
-}
-var directiveHooks = {
-  mounted: isVue3 ? "mounted" : "inserted",
-  updated: isVue3 ? "updated" : "componentUpdated",
-  unmounted: isVue3 ? "unmounted" : "unbind"
-};
-function promiseTimeout(ms, throwOnTimeout = false, reason = "Timeout") {
-  return new Promise((resolve, reject) => {
-    if (throwOnTimeout)
-      setTimeout(() => reject(reason), ms);
-    else
-      setTimeout(resolve, ms);
-  });
-}
-function identity(arg) {
-  return arg;
-}
-function createSingletonPromise(fn) {
-  let _promise;
-  function wrapper() {
-    if (!_promise)
-      _promise = fn();
-    return _promise;
-  }
-  wrapper.reset = async () => {
-    const _prev = _promise;
-    _promise = void 0;
-    if (_prev)
-      await _prev;
-  };
-  return wrapper;
-}
-function invoke(fn) {
-  return fn();
-}
-function containsProp(obj, ...props) {
-  return props.some((k) => k in obj);
-}
-function increaseWithUnit(target, delta) {
-  var _a2;
-  if (typeof target === "number")
-    return target + delta;
-  const value = ((_a2 = target.match(/^-?[0-9]+\.?[0-9]*/)) == null ? void 0 : _a2[0]) || "";
-  const unit = target.slice(value.length);
-  const result = parseFloat(value) + delta;
-  if (Number.isNaN(result))
-    return target;
-  return result + unit;
-}
-function objectPick(obj, keys2, omitUndefined = false) {
-  return keys2.reduce((n, k) => {
-    if (k in obj) {
-      if (!omitUndefined || obj[k] !== void 0)
-        n[k] = obj[k];
-    }
-    return n;
-  }, {});
-}
-function computedWithControl(source, fn) {
-  let v = void 0;
-  let track;
-  let trigger;
-  const dirty = ref(true);
-  const update = () => {
-    dirty.value = true;
-    trigger();
-  };
-  watch(source, update, { flush: "sync" });
-  const get2 = isFunction(fn) ? fn : fn.get;
-  const set3 = isFunction(fn) ? void 0 : fn.set;
-  const result = customRef((_track, _trigger) => {
-    track = _track;
-    trigger = _trigger;
-    return {
-      get() {
-        if (dirty.value) {
-          v = get2();
-          dirty.value = false;
-        }
-        track();
-        return v;
-      },
-      set(v2) {
-        set3 == null ? void 0 : set3(v2);
-      }
-    };
-  });
-  if (Object.isExtensible(result))
-    result.trigger = update;
-  return result;
-}
-function tryOnScopeDispose(fn) {
-  if (getCurrentScope()) {
-    onScopeDispose(fn);
-    return true;
-  }
-  return false;
-}
-function createEventHook() {
-  const fns = [];
-  const off = (fn) => {
-    const index = fns.indexOf(fn);
-    if (index !== -1)
-      fns.splice(index, 1);
-  };
-  const on = (fn) => {
-    fns.push(fn);
-    const offFn = () => off(fn);
-    tryOnScopeDispose(offFn);
-    return {
-      off: offFn
-    };
-  };
-  const trigger = (param) => {
-    fns.forEach((fn) => fn(param));
-  };
-  return {
-    on,
-    off,
-    trigger
-  };
-}
-function createGlobalState(stateFactory) {
-  let initialized = false;
-  let state;
-  const scope = effectScope(true);
-  return () => {
-    if (!initialized) {
-      state = scope.run(stateFactory);
-      initialized = true;
-    }
-    return state;
-  };
-}
-function createInjectionState(composable) {
-  const key = Symbol("InjectionState");
-  const useProvidingState = (...args) => {
-    const state = composable(...args);
-    provide(key, state);
-    return state;
-  };
-  const useInjectedState = () => inject(key);
-  return [useProvidingState, useInjectedState];
-}
-function createSharedComposable(composable) {
-  let subscribers = 0;
-  let state;
-  let scope;
-  const dispose = () => {
-    subscribers -= 1;
-    if (scope && subscribers <= 0) {
-      scope.stop();
-      state = void 0;
-      scope = void 0;
-    }
-  };
-  return (...args) => {
-    subscribers += 1;
-    if (!state) {
-      scope = effectScope(true);
-      state = scope.run(() => composable(...args));
-    }
-    tryOnScopeDispose(dispose);
-    return state;
-  };
-}
-function extendRef(ref2, extend, { enumerable = false, unwrap = true } = {}) {
-  __onlyVue27Plus();
-  for (const [key, value] of Object.entries(extend)) {
-    if (key === "value")
-      continue;
-    if (isRef(value) && unwrap) {
-      Object.defineProperty(ref2, key, {
-        get() {
-          return value.value;
-        },
-        set(v) {
-          value.value = v;
-        },
-        enumerable
-      });
-    } else {
-      Object.defineProperty(ref2, key, { value, enumerable });
-    }
-  }
-  return ref2;
-}
-function get(obj, key) {
-  if (key == null)
-    return unref(obj);
-  return unref(obj)[key];
-}
-function isDefined(v) {
-  return unref(v) != null;
-}
-var __defProp$8 = Object.defineProperty;
-var __getOwnPropSymbols$a = Object.getOwnPropertySymbols;
-var __hasOwnProp$a = Object.prototype.hasOwnProperty;
-var __propIsEnum$a = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$8 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$a.call(b, prop))
-      __defNormalProp$8(a, prop, b[prop]);
-  if (__getOwnPropSymbols$a)
-    for (var prop of __getOwnPropSymbols$a(b)) {
-      if (__propIsEnum$a.call(b, prop))
-        __defNormalProp$8(a, prop, b[prop]);
-    }
-  return a;
-};
-function makeDestructurable(obj, arr) {
-  if (typeof Symbol !== "undefined") {
-    const clone = __spreadValues$8({}, obj);
-    Object.defineProperty(clone, Symbol.iterator, {
-      enumerable: false,
-      value() {
-        let index = 0;
-        return {
-          next: () => ({
-            value: arr[index++],
-            done: index > arr.length
-          })
-        };
-      }
-    });
-    return clone;
-  } else {
-    return Object.assign([...arr], obj);
-  }
-}
-function reactify(fn, options) {
-  const unrefFn = (options == null ? void 0 : options.computedGetter) === false ? unref : resolveUnref;
-  return function(...args) {
-    return computed(() => fn.apply(this, args.map((i) => unrefFn(i))));
-  };
-}
-function reactifyObject(obj, optionsOrKeys = {}) {
-  let keys2 = [];
-  let options;
-  if (Array.isArray(optionsOrKeys)) {
-    keys2 = optionsOrKeys;
-  } else {
-    options = optionsOrKeys;
-    const { includeOwnProperties = true } = optionsOrKeys;
-    keys2.push(...Object.keys(obj));
-    if (includeOwnProperties)
-      keys2.push(...Object.getOwnPropertyNames(obj));
-  }
-  return Object.fromEntries(keys2.map((key) => {
-    const value = obj[key];
-    return [
-      key,
-      typeof value === "function" ? reactify(value.bind(obj), options) : value
-    ];
-  }));
-}
-function toReactive(objectRef) {
-  if (!isRef(objectRef))
-    return reactive(objectRef);
-  const proxy = new Proxy({}, {
-    get(_, p, receiver) {
-      return unref(Reflect.get(objectRef.value, p, receiver));
-    },
-    set(_, p, value) {
-      if (isRef(objectRef.value[p]) && !isRef(value))
-        objectRef.value[p].value = value;
-      else
-        objectRef.value[p] = value;
-      return true;
-    },
-    deleteProperty(_, p) {
-      return Reflect.deleteProperty(objectRef.value, p);
-    },
-    has(_, p) {
-      return Reflect.has(objectRef.value, p);
-    },
-    ownKeys() {
-      return Object.keys(objectRef.value);
-    },
-    getOwnPropertyDescriptor() {
-      return {
-        enumerable: true,
-        configurable: true
-      };
-    }
-  });
-  return reactive(proxy);
-}
-function reactiveComputed(fn) {
-  return toReactive(computed(fn));
-}
-function reactiveOmit(obj, ...keys2) {
-  const flatKeys = keys2.flat();
-  return reactiveComputed(() => Object.fromEntries(Object.entries(toRefs(obj)).filter((e) => !flatKeys.includes(e[0]))));
-}
-function reactivePick(obj, ...keys2) {
-  const flatKeys = keys2.flat();
-  return reactive(Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));
-}
-function refAutoReset(defaultValue, afterMs = 1e4) {
-  return customRef((track, trigger) => {
-    let value = defaultValue;
-    let timer;
-    const resetAfter = () => setTimeout(() => {
-      value = defaultValue;
-      trigger();
-    }, resolveUnref(afterMs));
-    tryOnScopeDispose(() => {
-      clearTimeout(timer);
-    });
-    return {
-      get() {
-        track();
-        return value;
-      },
-      set(newValue) {
-        value = newValue;
-        trigger();
-        clearTimeout(timer);
-        timer = resetAfter();
-      }
-    };
-  });
-}
-function useDebounceFn(fn, ms = 200, options = {}) {
-  return createFilterWrapper(debounceFilter(ms, options), fn);
-}
-function refDebounced(value, ms = 200, options = {}) {
-  const debounced = ref(value.value);
-  const updater = useDebounceFn(() => {
-    debounced.value = value.value;
-  }, ms, options);
-  watch(value, () => updater());
-  return debounced;
-}
-function refDefault(source, defaultValue) {
-  return computed({
-    get() {
-      var _a2;
-      return (_a2 = source.value) != null ? _a2 : defaultValue;
-    },
-    set(value) {
-      source.value = value;
-    }
-  });
-}
-function useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {
-  return createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);
-}
-function refThrottled(value, delay = 200, trailing = true, leading = true) {
-  if (delay <= 0)
-    return value;
-  const throttled = ref(value.value);
-  const updater = useThrottleFn(() => {
-    throttled.value = value.value;
-  }, delay, trailing, leading);
-  watch(value, () => updater());
-  return throttled;
-}
-function refWithControl(initial, options = {}) {
-  let source = initial;
-  let track;
-  let trigger;
-  const ref2 = customRef((_track, _trigger) => {
-    track = _track;
-    trigger = _trigger;
-    return {
-      get() {
-        return get2();
-      },
-      set(v) {
-        set3(v);
-      }
-    };
-  });
-  function get2(tracking = true) {
-    if (tracking)
-      track();
-    return source;
-  }
-  function set3(value, triggering = true) {
-    var _a2, _b;
-    if (value === source)
-      return;
-    const old = source;
-    if (((_a2 = options.onBeforeChange) == null ? void 0 : _a2.call(options, value, old)) === false)
-      return;
-    source = value;
-    (_b = options.onChanged) == null ? void 0 : _b.call(options, value, old);
-    if (triggering)
-      trigger();
-  }
-  const untrackedGet = () => get2(false);
-  const silentSet = (v) => set3(v, false);
-  const peek = () => get2(false);
-  const lay = (v) => set3(v, false);
-  return extendRef(ref2, {
-    get: get2,
-    set: set3,
-    untrackedGet,
-    silentSet,
-    peek,
-    lay
-  }, { enumerable: true });
-}
-var controlledRef = refWithControl;
-function resolveRef(r) {
-  return typeof r === "function" ? computed(r) : ref(r);
-}
-function set2(...args) {
-  if (args.length === 2) {
-    const [ref2, value] = args;
-    ref2.value = value;
-  }
-  if (args.length === 3) {
-    if (isVue2) {
-      set(...args);
-    } else {
-      const [target, key, value] = args;
-      target[key] = value;
-    }
-  }
-}
-function syncRef(left, right, options = {}) {
-  var _a2, _b;
-  const {
-    flush = "sync",
-    deep = false,
-    immediate = true,
-    direction = "both",
-    transform = {}
-  } = options;
-  let watchLeft;
-  let watchRight;
-  const transformLTR = (_a2 = transform.ltr) != null ? _a2 : (v) => v;
-  const transformRTL = (_b = transform.rtl) != null ? _b : (v) => v;
-  if (direction === "both" || direction === "ltr") {
-    watchLeft = watch(left, (newValue) => right.value = transformLTR(newValue), { flush, deep, immediate });
-  }
-  if (direction === "both" || direction === "rtl") {
-    watchRight = watch(right, (newValue) => left.value = transformRTL(newValue), { flush, deep, immediate });
-  }
-  return () => {
-    watchLeft == null ? void 0 : watchLeft();
-    watchRight == null ? void 0 : watchRight();
-  };
-}
-function syncRefs(source, targets, options = {}) {
-  const {
-    flush = "sync",
-    deep = false,
-    immediate = true
-  } = options;
-  if (!Array.isArray(targets))
-    targets = [targets];
-  return watch(source, (newValue) => targets.forEach((target) => target.value = newValue), { flush, deep, immediate });
-}
-var __defProp$7 = Object.defineProperty;
-var __defProps$5 = Object.defineProperties;
-var __getOwnPropDescs$5 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$9 = Object.getOwnPropertySymbols;
-var __hasOwnProp$9 = Object.prototype.hasOwnProperty;
-var __propIsEnum$9 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$7 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$9.call(b, prop))
-      __defNormalProp$7(a, prop, b[prop]);
-  if (__getOwnPropSymbols$9)
-    for (var prop of __getOwnPropSymbols$9(b)) {
-      if (__propIsEnum$9.call(b, prop))
-        __defNormalProp$7(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$5 = (a, b) => __defProps$5(a, __getOwnPropDescs$5(b));
-function toRefs2(objectRef) {
-  if (!isRef(objectRef))
-    return toRefs(objectRef);
-  const result = Array.isArray(objectRef.value) ? new Array(objectRef.value.length) : {};
-  for (const key in objectRef.value) {
-    result[key] = customRef(() => ({
-      get() {
-        return objectRef.value[key];
-      },
-      set(v) {
-        if (Array.isArray(objectRef.value)) {
-          const copy = [...objectRef.value];
-          copy[key] = v;
-          objectRef.value = copy;
-        } else {
-          const newObject = __spreadProps$5(__spreadValues$7({}, objectRef.value), { [key]: v });
-          Object.setPrototypeOf(newObject, objectRef.value);
-          objectRef.value = newObject;
-        }
-      }
-    }));
-  }
-  return result;
-}
-function tryOnBeforeMount(fn, sync = true) {
-  if (getCurrentInstance())
-    onBeforeMount(fn);
-  else if (sync)
-    fn();
-  else
-    nextTick(fn);
-}
-function tryOnBeforeUnmount(fn) {
-  if (getCurrentInstance())
-    onBeforeUnmount(fn);
-}
-function tryOnMounted(fn, sync = true) {
-  if (getCurrentInstance())
-    onMounted(fn);
-  else if (sync)
-    fn();
-  else
-    nextTick(fn);
-}
-function tryOnUnmounted(fn) {
-  if (getCurrentInstance())
-    onUnmounted(fn);
-}
-function createUntil(r, isNot = false) {
-  function toMatch(condition, { flush = "sync", deep = false, timeout, throwOnTimeout } = {}) {
-    let stop = null;
-    const watcher = new Promise((resolve) => {
-      stop = watch(r, (v) => {
-        if (condition(v) !== isNot) {
-          stop == null ? void 0 : stop();
-          resolve(v);
-        }
-      }, {
-        flush,
-        deep,
-        immediate: true
-      });
-    });
-    const promises = [watcher];
-    if (timeout != null) {
-      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => stop == null ? void 0 : stop()));
-    }
-    return Promise.race(promises);
-  }
-  function toBe(value, options) {
-    if (!isRef(value))
-      return toMatch((v) => v === value, options);
-    const { flush = "sync", deep = false, timeout, throwOnTimeout } = options != null ? options : {};
-    let stop = null;
-    const watcher = new Promise((resolve) => {
-      stop = watch([r, value], ([v1, v2]) => {
-        if (isNot !== (v1 === v2)) {
-          stop == null ? void 0 : stop();
-          resolve(v1);
-        }
-      }, {
-        flush,
-        deep,
-        immediate: true
-      });
-    });
-    const promises = [watcher];
-    if (timeout != null) {
-      promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => resolveUnref(r)).finally(() => {
-        stop == null ? void 0 : stop();
-        return resolveUnref(r);
-      }));
-    }
-    return Promise.race(promises);
-  }
-  function toBeTruthy(options) {
-    return toMatch((v) => Boolean(v), options);
-  }
-  function toBeNull(options) {
-    return toBe(null, options);
-  }
-  function toBeUndefined(options) {
-    return toBe(void 0, options);
-  }
-  function toBeNaN(options) {
-    return toMatch(Number.isNaN, options);
-  }
-  function toContains(value, options) {
-    return toMatch((v) => {
-      const array = Array.from(v);
-      return array.includes(value) || array.includes(resolveUnref(value));
-    }, options);
-  }
-  function changed(options) {
-    return changedTimes(1, options);
-  }
-  function changedTimes(n = 1, options) {
-    let count = -1;
-    return toMatch(() => {
-      count += 1;
-      return count >= n;
-    }, options);
-  }
-  if (Array.isArray(resolveUnref(r))) {
-    const instance = {
-      toMatch,
-      toContains,
-      changed,
-      changedTimes,
-      get not() {
-        return createUntil(r, !isNot);
-      }
-    };
-    return instance;
-  } else {
-    const instance = {
-      toMatch,
-      toBe,
-      toBeTruthy,
-      toBeNull,
-      toBeNaN,
-      toBeUndefined,
-      changed,
-      changedTimes,
-      get not() {
-        return createUntil(r, !isNot);
-      }
-    };
-    return instance;
-  }
-}
-function until(r) {
-  return createUntil(r);
-}
-function useArrayEvery(list, fn) {
-  return computed(() => resolveUnref(list).every((element, index, array) => fn(resolveUnref(element), index, array)));
-}
-function useArrayFilter(list, fn) {
-  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).filter(fn));
-}
-function useArrayFind(list, fn) {
-  return computed(() => resolveUnref(resolveUnref(list).find((element, index, array) => fn(resolveUnref(element), index, array))));
-}
-function useArrayFindIndex(list, fn) {
-  return computed(() => resolveUnref(list).findIndex((element, index, array) => fn(resolveUnref(element), index, array)));
-}
-function findLast(arr, cb) {
-  let index = arr.length;
-  while (index-- > 0) {
-    if (cb(arr[index], index, arr))
-      return arr[index];
-  }
-  return void 0;
-}
-function useArrayFindLast(list, fn) {
-  return computed(() => resolveUnref(!Array.prototype.findLast ? findLast(resolveUnref(list), (element, index, array) => fn(resolveUnref(element), index, array)) : resolveUnref(list).findLast((element, index, array) => fn(resolveUnref(element), index, array))));
-}
-function useArrayJoin(list, separator) {
-  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).join(resolveUnref(separator)));
-}
-function useArrayMap(list, fn) {
-  return computed(() => resolveUnref(list).map((i) => resolveUnref(i)).map(fn));
-}
-function useArrayReduce(list, reducer, ...args) {
-  const reduceCallback = (sum, value, index) => reducer(resolveUnref(sum), resolveUnref(value), index);
-  return computed(() => {
-    const resolved = resolveUnref(list);
-    return args.length ? resolved.reduce(reduceCallback, resolveUnref(args[0])) : resolved.reduce(reduceCallback);
-  });
-}
-function useArraySome(list, fn) {
-  return computed(() => resolveUnref(list).some((element, index, array) => fn(resolveUnref(element), index, array)));
-}
-function useArrayUnique(list) {
-  return computed(() => [...new Set(resolveUnref(list).map((element) => resolveUnref(element)))]);
-}
-function useCounter(initialValue = 0, options = {}) {
-  const count = ref(initialValue);
-  const {
-    max = Infinity,
-    min = -Infinity
-  } = options;
-  const inc = (delta = 1) => count.value = Math.min(max, count.value + delta);
-  const dec = (delta = 1) => count.value = Math.max(min, count.value - delta);
-  const get2 = () => count.value;
-  const set3 = (val) => count.value = Math.max(min, Math.min(max, val));
-  const reset = (val = initialValue) => {
-    initialValue = val;
-    return set3(val);
-  };
-  return { count, inc, dec, get: get2, set: set3, reset };
-}
-var REGEX_PARSE = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/;
-var REGEX_FORMAT = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a{1,2}|A{1,2}|m{1,2}|s{1,2}|Z{1,2}|SSS/g;
-var defaultMeridiem = (hours, minutes, isLowercase, hasPeriod) => {
-  let m = hours < 12 ? "AM" : "PM";
-  if (hasPeriod)
-    m = m.split("").reduce((acc, curr) => acc += `${curr}.`, "");
-  return isLowercase ? m.toLowerCase() : m;
-};
-var formatDate = (date, formatStr, options = {}) => {
-  var _a2;
-  const years = date.getFullYear();
-  const month = date.getMonth();
-  const days = date.getDate();
-  const hours = date.getHours();
-  const minutes = date.getMinutes();
-  const seconds = date.getSeconds();
-  const milliseconds = date.getMilliseconds();
-  const day = date.getDay();
-  const meridiem = (_a2 = options.customMeridiem) != null ? _a2 : defaultMeridiem;
-  const matches = {
-    YY: () => String(years).slice(-2),
-    YYYY: () => years,
-    M: () => month + 1,
-    MM: () => `${month + 1}`.padStart(2, "0"),
-    MMM: () => date.toLocaleDateString(options.locales, { month: "short" }),
-    MMMM: () => date.toLocaleDateString(options.locales, { month: "long" }),
-    D: () => String(days),
-    DD: () => `${days}`.padStart(2, "0"),
-    H: () => String(hours),
-    HH: () => `${hours}`.padStart(2, "0"),
-    h: () => `${hours % 12 || 12}`.padStart(1, "0"),
-    hh: () => `${hours % 12 || 12}`.padStart(2, "0"),
-    m: () => String(minutes),
-    mm: () => `${minutes}`.padStart(2, "0"),
-    s: () => String(seconds),
-    ss: () => `${seconds}`.padStart(2, "0"),
-    SSS: () => `${milliseconds}`.padStart(3, "0"),
-    d: () => day,
-    dd: () => date.toLocaleDateString(options.locales, { weekday: "narrow" }),
-    ddd: () => date.toLocaleDateString(options.locales, { weekday: "short" }),
-    dddd: () => date.toLocaleDateString(options.locales, { weekday: "long" }),
-    A: () => meridiem(hours, minutes),
-    AA: () => meridiem(hours, minutes, false, true),
-    a: () => meridiem(hours, minutes, true),
-    aa: () => meridiem(hours, minutes, true, true)
-  };
-  return formatStr.replace(REGEX_FORMAT, (match, $1) => $1 || matches[match]());
-};
-var normalizeDate = (date) => {
-  if (date === null)
-    return /* @__PURE__ */ new Date(NaN);
-  if (date === void 0)
-    return /* @__PURE__ */ new Date();
-  if (date instanceof Date)
-    return new Date(date);
-  if (typeof date === "string" && !/Z$/i.test(date)) {
-    const d = date.match(REGEX_PARSE);
-    if (d) {
-      const m = d[2] - 1 || 0;
-      const ms = (d[7] || "0").substring(0, 3);
-      return new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);
-    }
-  }
-  return new Date(date);
-};
-function useDateFormat(date, formatStr = "HH:mm:ss", options = {}) {
-  return computed(() => formatDate(normalizeDate(resolveUnref(date)), resolveUnref(formatStr), options));
-}
-function useIntervalFn(cb, interval = 1e3, options = {}) {
-  const {
-    immediate = true,
-    immediateCallback = false
-  } = options;
-  let timer = null;
-  const isActive = ref(false);
-  function clean() {
-    if (timer) {
-      clearInterval(timer);
-      timer = null;
-    }
-  }
-  function pause() {
-    isActive.value = false;
-    clean();
-  }
-  function resume() {
-    const intervalValue = resolveUnref(interval);
-    if (intervalValue <= 0)
-      return;
-    isActive.value = true;
-    if (immediateCallback)
-      cb();
-    clean();
-    timer = setInterval(cb, intervalValue);
-  }
-  if (immediate && isClient)
-    resume();
-  if (isRef(interval) || isFunction(interval)) {
-    const stopWatch = watch(interval, () => {
-      if (isActive.value && isClient)
-        resume();
-    });
-    tryOnScopeDispose(stopWatch);
-  }
-  tryOnScopeDispose(pause);
-  return {
-    isActive,
-    pause,
-    resume
-  };
-}
-var __defProp$6 = Object.defineProperty;
-var __getOwnPropSymbols$8 = Object.getOwnPropertySymbols;
-var __hasOwnProp$8 = Object.prototype.hasOwnProperty;
-var __propIsEnum$8 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$6 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$8.call(b, prop))
-      __defNormalProp$6(a, prop, b[prop]);
-  if (__getOwnPropSymbols$8)
-    for (var prop of __getOwnPropSymbols$8(b)) {
-      if (__propIsEnum$8.call(b, prop))
-        __defNormalProp$6(a, prop, b[prop]);
-    }
-  return a;
-};
-function useInterval(interval = 1e3, options = {}) {
-  const {
-    controls: exposeControls = false,
-    immediate = true,
-    callback
-  } = options;
-  const counter = ref(0);
-  const update = () => counter.value += 1;
-  const reset = () => {
-    counter.value = 0;
-  };
-  const controls = useIntervalFn(callback ? () => {
-    update();
-    callback(counter.value);
-  } : update, interval, { immediate });
-  if (exposeControls) {
-    return __spreadValues$6({
-      counter,
-      reset
-    }, controls);
-  } else {
-    return counter;
-  }
-}
-function useLastChanged(source, options = {}) {
-  var _a2;
-  const ms = ref((_a2 = options.initialValue) != null ? _a2 : null);
-  watch(source, () => ms.value = timestamp(), options);
-  return ms;
-}
-function useTimeoutFn(cb, interval, options = {}) {
-  const {
-    immediate = true
-  } = options;
-  const isPending = ref(false);
-  let timer = null;
-  function clear() {
-    if (timer) {
-      clearTimeout(timer);
-      timer = null;
-    }
-  }
-  function stop() {
-    isPending.value = false;
-    clear();
-  }
-  function start(...args) {
-    clear();
-    isPending.value = true;
-    timer = setTimeout(() => {
-      isPending.value = false;
-      timer = null;
-      cb(...args);
-    }, resolveUnref(interval));
-  }
-  if (immediate) {
-    isPending.value = true;
-    if (isClient)
-      start();
-  }
-  tryOnScopeDispose(stop);
-  return {
-    isPending: readonly(isPending),
-    start,
-    stop
-  };
-}
-var __defProp$5 = Object.defineProperty;
-var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols;
-var __hasOwnProp$7 = Object.prototype.hasOwnProperty;
-var __propIsEnum$7 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$5 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$7.call(b, prop))
-      __defNormalProp$5(a, prop, b[prop]);
-  if (__getOwnPropSymbols$7)
-    for (var prop of __getOwnPropSymbols$7(b)) {
-      if (__propIsEnum$7.call(b, prop))
-        __defNormalProp$5(a, prop, b[prop]);
-    }
-  return a;
-};
-function useTimeout(interval = 1e3, options = {}) {
-  const {
-    controls: exposeControls = false,
-    callback
-  } = options;
-  const controls = useTimeoutFn(callback != null ? callback : noop, interval, options);
-  const ready = computed(() => !controls.isPending.value);
-  if (exposeControls) {
-    return __spreadValues$5({
-      ready
-    }, controls);
-  } else {
-    return ready;
-  }
-}
-function useToNumber(value, options = {}) {
-  const {
-    method = "parseFloat",
-    radix,
-    nanToZero
-  } = options;
-  return computed(() => {
-    let resolved = resolveUnref(value);
-    if (typeof resolved === "string")
-      resolved = Number[method](resolved, radix);
-    if (nanToZero && isNaN(resolved))
-      resolved = 0;
-    return resolved;
-  });
-}
-function useToString(value) {
-  return computed(() => `${resolveUnref(value)}`);
-}
-function useToggle(initialValue = false, options = {}) {
-  const {
-    truthyValue = true,
-    falsyValue = false
-  } = options;
-  const valueIsRef = isRef(initialValue);
-  const _value = ref(initialValue);
-  function toggle(value) {
-    if (arguments.length) {
-      _value.value = value;
-      return _value.value;
-    } else {
-      const truthy = resolveUnref(truthyValue);
-      _value.value = _value.value === truthy ? resolveUnref(falsyValue) : truthy;
-      return _value.value;
-    }
-  }
-  if (valueIsRef)
-    return toggle;
-  else
-    return [_value, toggle];
-}
-function watchArray(source, cb, options) {
-  let oldList = (options == null ? void 0 : options.immediate) ? [] : [
-    ...source instanceof Function ? source() : Array.isArray(source) ? source : unref(source)
-  ];
-  return watch(source, (newList, _, onCleanup) => {
-    const oldListRemains = new Array(oldList.length);
-    const added = [];
-    for (const obj of newList) {
-      let found = false;
-      for (let i = 0; i < oldList.length; i++) {
-        if (!oldListRemains[i] && obj === oldList[i]) {
-          oldListRemains[i] = true;
-          found = true;
-          break;
-        }
-      }
-      if (!found)
-        added.push(obj);
-    }
-    const removed = oldList.filter((_2, i) => !oldListRemains[i]);
-    cb(newList, oldList, added, removed, onCleanup);
-    oldList = [...newList];
-  }, options);
-}
-var __getOwnPropSymbols$6 = Object.getOwnPropertySymbols;
-var __hasOwnProp$6 = Object.prototype.hasOwnProperty;
-var __propIsEnum$6 = Object.prototype.propertyIsEnumerable;
-var __objRest$5 = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp$6.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols$6)
-    for (var prop of __getOwnPropSymbols$6(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum$6.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-function watchWithFilter(source, cb, options = {}) {
-  const _a2 = options, {
-    eventFilter = bypassFilter
-  } = _a2, watchOptions = __objRest$5(_a2, [
-    "eventFilter"
-  ]);
-  return watch(source, createFilterWrapper(eventFilter, cb), watchOptions);
-}
-var __getOwnPropSymbols$5 = Object.getOwnPropertySymbols;
-var __hasOwnProp$5 = Object.prototype.hasOwnProperty;
-var __propIsEnum$5 = Object.prototype.propertyIsEnumerable;
-var __objRest$4 = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp$5.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols$5)
-    for (var prop of __getOwnPropSymbols$5(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum$5.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-function watchAtMost(source, cb, options) {
-  const _a2 = options, {
-    count
-  } = _a2, watchOptions = __objRest$4(_a2, [
-    "count"
-  ]);
-  const current = ref(0);
-  const stop = watchWithFilter(source, (...args) => {
-    current.value += 1;
-    if (current.value >= resolveUnref(count))
-      nextTick(() => stop());
-    cb(...args);
-  }, watchOptions);
-  return { count: current, stop };
-}
-var __defProp$4 = Object.defineProperty;
-var __defProps$4 = Object.defineProperties;
-var __getOwnPropDescs$4 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$4 = Object.getOwnPropertySymbols;
-var __hasOwnProp$4 = Object.prototype.hasOwnProperty;
-var __propIsEnum$4 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$4 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$4.call(b, prop))
-      __defNormalProp$4(a, prop, b[prop]);
-  if (__getOwnPropSymbols$4)
-    for (var prop of __getOwnPropSymbols$4(b)) {
-      if (__propIsEnum$4.call(b, prop))
-        __defNormalProp$4(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$4 = (a, b) => __defProps$4(a, __getOwnPropDescs$4(b));
-var __objRest$3 = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp$4.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols$4)
-    for (var prop of __getOwnPropSymbols$4(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum$4.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-function watchDebounced(source, cb, options = {}) {
-  const _a2 = options, {
-    debounce = 0,
-    maxWait = void 0
-  } = _a2, watchOptions = __objRest$3(_a2, [
-    "debounce",
-    "maxWait"
-  ]);
-  return watchWithFilter(source, cb, __spreadProps$4(__spreadValues$4({}, watchOptions), {
-    eventFilter: debounceFilter(debounce, { maxWait })
-  }));
-}
-var __defProp$3 = Object.defineProperty;
-var __defProps$3 = Object.defineProperties;
-var __getOwnPropDescs$3 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$3 = Object.getOwnPropertySymbols;
-var __hasOwnProp$3 = Object.prototype.hasOwnProperty;
-var __propIsEnum$3 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$3 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$3.call(b, prop))
-      __defNormalProp$3(a, prop, b[prop]);
-  if (__getOwnPropSymbols$3)
-    for (var prop of __getOwnPropSymbols$3(b)) {
-      if (__propIsEnum$3.call(b, prop))
-        __defNormalProp$3(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$3 = (a, b) => __defProps$3(a, __getOwnPropDescs$3(b));
-var __objRest$2 = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp$3.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols$3)
-    for (var prop of __getOwnPropSymbols$3(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum$3.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-function watchIgnorable(source, cb, options = {}) {
-  const _a2 = options, {
-    eventFilter = bypassFilter
-  } = _a2, watchOptions = __objRest$2(_a2, [
-    "eventFilter"
-  ]);
-  const filteredCb = createFilterWrapper(eventFilter, cb);
-  let ignoreUpdates;
-  let ignorePrevAsyncUpdates;
-  let stop;
-  if (watchOptions.flush === "sync") {
-    const ignore = ref(false);
-    ignorePrevAsyncUpdates = () => {
-    };
-    ignoreUpdates = (updater) => {
-      ignore.value = true;
-      updater();
-      ignore.value = false;
-    };
-    stop = watch(source, (...args) => {
-      if (!ignore.value)
-        filteredCb(...args);
-    }, watchOptions);
-  } else {
-    const disposables = [];
-    const ignoreCounter = ref(0);
-    const syncCounter = ref(0);
-    ignorePrevAsyncUpdates = () => {
-      ignoreCounter.value = syncCounter.value;
-    };
-    disposables.push(watch(source, () => {
-      syncCounter.value++;
-    }, __spreadProps$3(__spreadValues$3({}, watchOptions), { flush: "sync" })));
-    ignoreUpdates = (updater) => {
-      const syncCounterPrev = syncCounter.value;
-      updater();
-      ignoreCounter.value += syncCounter.value - syncCounterPrev;
-    };
-    disposables.push(watch(source, (...args) => {
-      const ignore = ignoreCounter.value > 0 && ignoreCounter.value === syncCounter.value;
-      ignoreCounter.value = 0;
-      syncCounter.value = 0;
-      if (ignore)
-        return;
-      filteredCb(...args);
-    }, watchOptions));
-    stop = () => {
-      disposables.forEach((fn) => fn());
-    };
-  }
-  return { stop, ignoreUpdates, ignorePrevAsyncUpdates };
-}
-function watchOnce(source, cb, options) {
-  const stop = watch(source, (...args) => {
-    nextTick(() => stop());
-    return cb(...args);
-  }, options);
-}
-var __defProp$2 = Object.defineProperty;
-var __defProps$2 = Object.defineProperties;
-var __getOwnPropDescs$2 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$2 = Object.getOwnPropertySymbols;
-var __hasOwnProp$2 = Object.prototype.hasOwnProperty;
-var __propIsEnum$2 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$2 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$2.call(b, prop))
-      __defNormalProp$2(a, prop, b[prop]);
-  if (__getOwnPropSymbols$2)
-    for (var prop of __getOwnPropSymbols$2(b)) {
-      if (__propIsEnum$2.call(b, prop))
-        __defNormalProp$2(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$2 = (a, b) => __defProps$2(a, __getOwnPropDescs$2(b));
-var __objRest$1 = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp$2.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols$2)
-    for (var prop of __getOwnPropSymbols$2(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum$2.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-function watchPausable(source, cb, options = {}) {
-  const _a2 = options, {
-    eventFilter: filter
-  } = _a2, watchOptions = __objRest$1(_a2, [
-    "eventFilter"
-  ]);
-  const { eventFilter, pause, resume, isActive } = pausableFilter(filter);
-  const stop = watchWithFilter(source, cb, __spreadProps$2(__spreadValues$2({}, watchOptions), {
-    eventFilter
-  }));
-  return { stop, pause, resume, isActive };
-}
-var __defProp$1 = Object.defineProperty;
-var __defProps$1 = Object.defineProperties;
-var __getOwnPropDescs$1 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$1 = Object.getOwnPropertySymbols;
-var __hasOwnProp$1 = Object.prototype.hasOwnProperty;
-var __propIsEnum$1 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$1 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$1.call(b, prop))
-      __defNormalProp$1(a, prop, b[prop]);
-  if (__getOwnPropSymbols$1)
-    for (var prop of __getOwnPropSymbols$1(b)) {
-      if (__propIsEnum$1.call(b, prop))
-        __defNormalProp$1(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$1 = (a, b) => __defProps$1(a, __getOwnPropDescs$1(b));
-var __objRest = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp$1.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols$1)
-    for (var prop of __getOwnPropSymbols$1(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum$1.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-function watchThrottled(source, cb, options = {}) {
-  const _a2 = options, {
-    throttle = 0,
-    trailing = true,
-    leading = true
-  } = _a2, watchOptions = __objRest(_a2, [
-    "throttle",
-    "trailing",
-    "leading"
-  ]);
-  return watchWithFilter(source, cb, __spreadProps$1(__spreadValues$1({}, watchOptions), {
-    eventFilter: throttleFilter(throttle, trailing, leading)
-  }));
-}
-var __defProp = Object.defineProperty;
-var __defProps = Object.defineProperties;
-var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols = Object.getOwnPropertySymbols;
-var __hasOwnProp = Object.prototype.hasOwnProperty;
-var __propIsEnum = Object.prototype.propertyIsEnumerable;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp.call(b, prop))
-      __defNormalProp(a, prop, b[prop]);
-  if (__getOwnPropSymbols)
-    for (var prop of __getOwnPropSymbols(b)) {
-      if (__propIsEnum.call(b, prop))
-        __defNormalProp(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
-function watchTriggerable(source, cb, options = {}) {
-  let cleanupFn;
-  function onEffect() {
-    if (!cleanupFn)
-      return;
-    const fn = cleanupFn;
-    cleanupFn = void 0;
-    fn();
-  }
-  function onCleanup(callback) {
-    cleanupFn = callback;
-  }
-  const _cb = (value, oldValue) => {
-    onEffect();
-    return cb(value, oldValue, onCleanup);
-  };
-  const res = watchIgnorable(source, _cb, options);
-  const { ignoreUpdates } = res;
-  const trigger = () => {
-    let res2;
-    ignoreUpdates(() => {
-      res2 = _cb(getWatchSources(source), getOldValue(source));
-    });
-    return res2;
-  };
-  return __spreadProps(__spreadValues({}, res), {
-    trigger
-  });
-}
-function getWatchSources(sources) {
-  if (isReactive(sources))
-    return sources;
-  if (Array.isArray(sources))
-    return sources.map((item) => getOneWatchSource(item));
-  return getOneWatchSource(sources);
-}
-function getOneWatchSource(source) {
-  return typeof source === "function" ? source() : unref(source);
-}
-function getOldValue(source) {
-  return Array.isArray(source) ? source.map(() => void 0) : void 0;
-}
-function whenever(source, cb, options) {
-  return watch(source, (v, ov, onInvalidate) => {
-    if (v)
-      cb(v, ov, onInvalidate);
-  }, options);
-}
-
-// node_modules/.pnpm/@vueuse+core@9.13.0/node_modules/@vueuse/core/index.mjs
-function computedAsync(evaluationCallback, initialState, optionsOrRef) {
-  let options;
-  if (isRef(optionsOrRef)) {
-    options = {
-      evaluating: optionsOrRef
-    };
-  } else {
-    options = optionsOrRef || {};
-  }
-  const {
-    lazy = false,
-    evaluating = void 0,
-    shallow = false,
-    onError = noop
-  } = options;
-  const started = ref(!lazy);
-  const current = shallow ? shallowRef(initialState) : ref(initialState);
-  let counter = 0;
-  watchEffect(async (onInvalidate) => {
-    if (!started.value)
-      return;
-    counter++;
-    const counterAtBeginning = counter;
-    let hasFinished = false;
-    if (evaluating) {
-      Promise.resolve().then(() => {
-        evaluating.value = true;
-      });
-    }
-    try {
-      const result = await evaluationCallback((cancelCallback) => {
-        onInvalidate(() => {
-          if (evaluating)
-            evaluating.value = false;
-          if (!hasFinished)
-            cancelCallback();
-        });
-      });
-      if (counterAtBeginning === counter)
-        current.value = result;
-    } catch (e) {
-      onError(e);
-    } finally {
-      if (evaluating && counterAtBeginning === counter)
-        evaluating.value = false;
-      hasFinished = true;
-    }
-  });
-  if (lazy) {
-    return computed(() => {
-      started.value = true;
-      return current.value;
-    });
-  } else {
-    return current;
-  }
-}
-function computedInject(key, options, defaultSource, treatDefaultAsFactory) {
-  let source = inject(key);
-  if (defaultSource)
-    source = inject(key, defaultSource);
-  if (treatDefaultAsFactory)
-    source = inject(key, defaultSource, treatDefaultAsFactory);
-  if (typeof options === "function") {
-    return computed((ctx) => options(source, ctx));
-  } else {
-    return computed({
-      get: (ctx) => options.get(source, ctx),
-      set: options.set
-    });
-  }
-}
-var createUnrefFn = (fn) => {
-  return function(...args) {
-    return fn.apply(this, args.map((i) => unref(i)));
-  };
-};
-function unrefElement(elRef) {
-  var _a2;
-  const plain = resolveUnref(elRef);
-  return (_a2 = plain == null ? void 0 : plain.$el) != null ? _a2 : plain;
-}
-var defaultWindow = isClient ? window : void 0;
-var defaultDocument = isClient ? window.document : void 0;
-var defaultNavigator = isClient ? window.navigator : void 0;
-var defaultLocation = isClient ? window.location : void 0;
-function useEventListener(...args) {
-  let target;
-  let events2;
-  let listeners;
-  let options;
-  if (isString(args[0]) || Array.isArray(args[0])) {
-    [events2, listeners, options] = args;
-    target = defaultWindow;
-  } else {
-    [target, events2, listeners, options] = args;
-  }
-  if (!target)
-    return noop;
-  if (!Array.isArray(events2))
-    events2 = [events2];
-  if (!Array.isArray(listeners))
-    listeners = [listeners];
-  const cleanups = [];
-  const cleanup = () => {
-    cleanups.forEach((fn) => fn());
-    cleanups.length = 0;
-  };
-  const register = (el, event, listener, options2) => {
-    el.addEventListener(event, listener, options2);
-    return () => el.removeEventListener(event, listener, options2);
-  };
-  const stopWatch = watch(() => [unrefElement(target), resolveUnref(options)], ([el, options2]) => {
-    cleanup();
-    if (!el)
-      return;
-    cleanups.push(...events2.flatMap((event) => {
-      return listeners.map((listener) => register(el, event, listener, options2));
-    }));
-  }, { immediate: true, flush: "post" });
-  const stop = () => {
-    stopWatch();
-    cleanup();
-  };
-  tryOnScopeDispose(stop);
-  return stop;
-}
-var _iOSWorkaround = false;
-function onClickOutside(target, handler, options = {}) {
-  const { window: window2 = defaultWindow, ignore = [], capture = true, detectIframe = false } = options;
-  if (!window2)
-    return;
-  if (isIOS && !_iOSWorkaround) {
-    _iOSWorkaround = true;
-    Array.from(window2.document.body.children).forEach((el) => el.addEventListener("click", noop));
-  }
-  let shouldListen = true;
-  const shouldIgnore = (event) => {
-    return ignore.some((target2) => {
-      if (typeof target2 === "string") {
-        return Array.from(window2.document.querySelectorAll(target2)).some((el) => el === event.target || event.composedPath().includes(el));
-      } else {
-        const el = unrefElement(target2);
-        return el && (event.target === el || event.composedPath().includes(el));
-      }
-    });
-  };
-  const listener = (event) => {
-    const el = unrefElement(target);
-    if (!el || el === event.target || event.composedPath().includes(el))
-      return;
-    if (event.detail === 0)
-      shouldListen = !shouldIgnore(event);
-    if (!shouldListen) {
-      shouldListen = true;
-      return;
-    }
-    handler(event);
-  };
-  const cleanup = [
-    useEventListener(window2, "click", listener, { passive: true, capture }),
-    useEventListener(window2, "pointerdown", (e) => {
-      const el = unrefElement(target);
-      if (el)
-        shouldListen = !e.composedPath().includes(el) && !shouldIgnore(e);
-    }, { passive: true }),
-    detectIframe && useEventListener(window2, "blur", (event) => {
-      var _a2;
-      const el = unrefElement(target);
-      if (((_a2 = window2.document.activeElement) == null ? void 0 : _a2.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(window2.document.activeElement)))
-        handler(event);
-    })
-  ].filter(Boolean);
-  const stop = () => cleanup.forEach((fn) => fn());
-  return stop;
-}
-var __defProp$n = Object.defineProperty;
-var __defProps$9 = Object.defineProperties;
-var __getOwnPropDescs$9 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$p = Object.getOwnPropertySymbols;
-var __hasOwnProp$p = Object.prototype.hasOwnProperty;
-var __propIsEnum$p = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$n = (obj, key, value) => key in obj ? __defProp$n(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$n = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$p.call(b, prop))
-      __defNormalProp$n(a, prop, b[prop]);
-  if (__getOwnPropSymbols$p)
-    for (var prop of __getOwnPropSymbols$p(b)) {
-      if (__propIsEnum$p.call(b, prop))
-        __defNormalProp$n(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$9 = (a, b) => __defProps$9(a, __getOwnPropDescs$9(b));
-var createKeyPredicate = (keyFilter) => {
-  if (typeof keyFilter === "function")
-    return keyFilter;
-  else if (typeof keyFilter === "string")
-    return (event) => event.key === keyFilter;
-  else if (Array.isArray(keyFilter))
-    return (event) => keyFilter.includes(event.key);
-  return () => true;
-};
-function onKeyStroke(...args) {
-  let key;
-  let handler;
-  let options = {};
-  if (args.length === 3) {
-    key = args[0];
-    handler = args[1];
-    options = args[2];
-  } else if (args.length === 2) {
-    if (typeof args[1] === "object") {
-      key = true;
-      handler = args[0];
-      options = args[1];
-    } else {
-      key = args[0];
-      handler = args[1];
-    }
-  } else {
-    key = true;
-    handler = args[0];
-  }
-  const { target = defaultWindow, eventName = "keydown", passive = false } = options;
-  const predicate = createKeyPredicate(key);
-  const listener = (e) => {
-    if (predicate(e))
-      handler(e);
-  };
-  return useEventListener(target, eventName, listener, passive);
-}
-function onKeyDown(key, handler, options = {}) {
-  return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: "keydown" }));
-}
-function onKeyPressed(key, handler, options = {}) {
-  return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: "keypress" }));
-}
-function onKeyUp(key, handler, options = {}) {
-  return onKeyStroke(key, handler, __spreadProps$9(__spreadValues$n({}, options), { eventName: "keyup" }));
-}
-var DEFAULT_DELAY = 500;
-function onLongPress(target, handler, options) {
-  var _a2, _b;
-  const elementRef = computed(() => unrefElement(target));
-  let timeout;
-  function clear() {
-    if (timeout) {
-      clearTimeout(timeout);
-      timeout = void 0;
-    }
-  }
-  function onDown(ev) {
-    var _a22, _b2, _c, _d;
-    if (((_a22 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a22.self) && ev.target !== elementRef.value)
-      return;
-    clear();
-    if ((_b2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _b2.prevent)
-      ev.preventDefault();
-    if ((_c = options == null ? void 0 : options.modifiers) == null ? void 0 : _c.stop)
-      ev.stopPropagation();
-    timeout = setTimeout(() => handler(ev), (_d = options == null ? void 0 : options.delay) != null ? _d : DEFAULT_DELAY);
-  }
-  const listenerOptions = {
-    capture: (_a2 = options == null ? void 0 : options.modifiers) == null ? void 0 : _a2.capture,
-    once: (_b = options == null ? void 0 : options.modifiers) == null ? void 0 : _b.once
-  };
-  useEventListener(elementRef, "pointerdown", onDown, listenerOptions);
-  useEventListener(elementRef, "pointerup", clear, listenerOptions);
-  useEventListener(elementRef, "pointerleave", clear, listenerOptions);
-}
-var isFocusedElementEditable = () => {
-  const { activeElement, body } = document;
-  if (!activeElement)
-    return false;
-  if (activeElement === body)
-    return false;
-  switch (activeElement.tagName) {
-    case "INPUT":
-    case "TEXTAREA":
-      return true;
-  }
-  return activeElement.hasAttribute("contenteditable");
-};
-var isTypedCharValid = ({
-  keyCode,
-  metaKey,
-  ctrlKey,
-  altKey
-}) => {
-  if (metaKey || ctrlKey || altKey)
-    return false;
-  if (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105)
-    return true;
-  if (keyCode >= 65 && keyCode <= 90)
-    return true;
-  return false;
-};
-function onStartTyping(callback, options = {}) {
-  const { document: document2 = defaultDocument } = options;
-  const keydown = (event) => {
-    !isFocusedElementEditable() && isTypedCharValid(event) && callback(event);
-  };
-  if (document2)
-    useEventListener(document2, "keydown", keydown, { passive: true });
-}
-function templateRef(key, initialValue = null) {
-  const instance = getCurrentInstance();
-  let _trigger = () => {
-  };
-  const element = customRef((track, trigger) => {
-    _trigger = trigger;
-    return {
-      get() {
-        var _a2, _b;
-        track();
-        return (_b = (_a2 = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a2.$refs[key]) != null ? _b : initialValue;
-      },
-      set() {
-      }
-    };
-  });
-  tryOnMounted(_trigger);
-  onUpdated(_trigger);
-  return element;
-}
-function useActiveElement(options = {}) {
-  var _a2;
-  const { window: window2 = defaultWindow } = options;
-  const document2 = (_a2 = options.document) != null ? _a2 : window2 == null ? void 0 : window2.document;
-  const activeElement = computedWithControl(() => null, () => document2 == null ? void 0 : document2.activeElement);
-  if (window2) {
-    useEventListener(window2, "blur", (event) => {
-      if (event.relatedTarget !== null)
-        return;
-      activeElement.trigger();
-    }, true);
-    useEventListener(window2, "focus", activeElement.trigger, true);
-  }
-  return activeElement;
-}
-function useAsyncQueue(tasks, options = {}) {
-  const {
-    interrupt = true,
-    onError = noop,
-    onFinished = noop
-  } = options;
-  const promiseState = {
-    pending: "pending",
-    rejected: "rejected",
-    fulfilled: "fulfilled"
-  };
-  const initialResult = Array.from(new Array(tasks.length), () => ({ state: promiseState.pending, data: null }));
-  const result = reactive(initialResult);
-  const activeIndex = ref(-1);
-  if (!tasks || tasks.length === 0) {
-    onFinished();
-    return {
-      activeIndex,
-      result
-    };
-  }
-  function updateResult(state, res) {
-    activeIndex.value++;
-    result[activeIndex.value].data = res;
-    result[activeIndex.value].state = state;
-  }
-  tasks.reduce((prev, curr) => {
-    return prev.then((prevRes) => {
-      var _a2;
-      if (((_a2 = result[activeIndex.value]) == null ? void 0 : _a2.state) === promiseState.rejected && interrupt) {
-        onFinished();
-        return;
-      }
-      return curr(prevRes).then((currentRes) => {
-        updateResult(promiseState.fulfilled, currentRes);
-        activeIndex.value === tasks.length - 1 && onFinished();
-        return currentRes;
-      });
-    }).catch((e) => {
-      updateResult(promiseState.rejected, e);
-      onError();
-      return e;
-    });
-  }, Promise.resolve());
-  return {
-    activeIndex,
-    result
-  };
-}
-function useAsyncState(promise, initialState, options) {
-  const {
-    immediate = true,
-    delay = 0,
-    onError = noop,
-    onSuccess = noop,
-    resetOnExecute = true,
-    shallow = true,
-    throwError
-  } = options != null ? options : {};
-  const state = shallow ? shallowRef(initialState) : ref(initialState);
-  const isReady = ref(false);
-  const isLoading = ref(false);
-  const error = ref(void 0);
-  async function execute(delay2 = 0, ...args) {
-    if (resetOnExecute)
-      state.value = initialState;
-    error.value = void 0;
-    isReady.value = false;
-    isLoading.value = true;
-    if (delay2 > 0)
-      await promiseTimeout(delay2);
-    const _promise = typeof promise === "function" ? promise(...args) : promise;
-    try {
-      const data = await _promise;
-      state.value = data;
-      isReady.value = true;
-      onSuccess(data);
-    } catch (e) {
-      error.value = e;
-      onError(e);
-      if (throwError)
-        throw error;
-    } finally {
-      isLoading.value = false;
-    }
-    return state.value;
-  }
-  if (immediate)
-    execute(delay);
-  return {
-    state,
-    isReady,
-    isLoading,
-    error,
-    execute
-  };
-}
-var defaults = {
-  array: (v) => JSON.stringify(v),
-  object: (v) => JSON.stringify(v),
-  set: (v) => JSON.stringify(Array.from(v)),
-  map: (v) => JSON.stringify(Object.fromEntries(v)),
-  null: () => ""
-};
-function getDefaultSerialization(target) {
-  if (!target)
-    return defaults.null;
-  if (target instanceof Map)
-    return defaults.map;
-  else if (target instanceof Set)
-    return defaults.set;
-  else if (Array.isArray(target))
-    return defaults.array;
-  else
-    return defaults.object;
-}
-function useBase64(target, options) {
-  const base64 = ref("");
-  const promise = ref();
-  function execute() {
-    if (!isClient)
-      return;
-    promise.value = new Promise((resolve, reject) => {
-      try {
-        const _target = resolveUnref(target);
-        if (_target == null) {
-          resolve("");
-        } else if (typeof _target === "string") {
-          resolve(blobToBase64(new Blob([_target], { type: "text/plain" })));
-        } else if (_target instanceof Blob) {
-          resolve(blobToBase64(_target));
-        } else if (_target instanceof ArrayBuffer) {
-          resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));
-        } else if (_target instanceof HTMLCanvasElement) {
-          resolve(_target.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));
-        } else if (_target instanceof HTMLImageElement) {
-          const img = _target.cloneNode(false);
-          img.crossOrigin = "Anonymous";
-          imgLoaded(img).then(() => {
-            const canvas = document.createElement("canvas");
-            const ctx = canvas.getContext("2d");
-            canvas.width = img.width;
-            canvas.height = img.height;
-            ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
-            resolve(canvas.toDataURL(options == null ? void 0 : options.type, options == null ? void 0 : options.quality));
-          }).catch(reject);
-        } else if (typeof _target === "object") {
-          const _serializeFn = (options == null ? void 0 : options.serializer) || getDefaultSerialization(_target);
-          const serialized = _serializeFn(_target);
-          return resolve(blobToBase64(new Blob([serialized], { type: "application/json" })));
-        } else {
-          reject(new Error("target is unsupported types"));
-        }
-      } catch (error) {
-        reject(error);
-      }
-    });
-    promise.value.then((res) => base64.value = res);
-    return promise.value;
-  }
-  if (isRef(target) || isFunction(target))
-    watch(target, execute, { immediate: true });
-  else
-    execute();
-  return {
-    base64,
-    promise,
-    execute
-  };
-}
-function imgLoaded(img) {
-  return new Promise((resolve, reject) => {
-    if (!img.complete) {
-      img.onload = () => {
-        resolve();
-      };
-      img.onerror = reject;
-    } else {
-      resolve();
-    }
-  });
-}
-function blobToBase64(blob) {
-  return new Promise((resolve, reject) => {
-    const fr = new FileReader();
-    fr.onload = (e) => {
-      resolve(e.target.result);
-    };
-    fr.onerror = reject;
-    fr.readAsDataURL(blob);
-  });
-}
-function useSupported(callback, sync = false) {
-  const isSupported = ref();
-  const update = () => isSupported.value = Boolean(callback());
-  update();
-  tryOnMounted(update, sync);
-  return isSupported;
-}
-function useBattery({ navigator = defaultNavigator } = {}) {
-  const events2 = ["chargingchange", "chargingtimechange", "dischargingtimechange", "levelchange"];
-  const isSupported = useSupported(() => navigator && "getBattery" in navigator);
-  const charging = ref(false);
-  const chargingTime = ref(0);
-  const dischargingTime = ref(0);
-  const level = ref(1);
-  let battery;
-  function updateBatteryInfo() {
-    charging.value = this.charging;
-    chargingTime.value = this.chargingTime || 0;
-    dischargingTime.value = this.dischargingTime || 0;
-    level.value = this.level;
-  }
-  if (isSupported.value) {
-    navigator.getBattery().then((_battery) => {
-      battery = _battery;
-      updateBatteryInfo.call(battery);
-      for (const event of events2)
-        useEventListener(battery, event, updateBatteryInfo, { passive: true });
-    });
-  }
-  return {
-    isSupported,
-    charging,
-    chargingTime,
-    dischargingTime,
-    level
-  };
-}
-function useBluetooth(options) {
-  let {
-    acceptAllDevices = false
-  } = options || {};
-  const {
-    filters = void 0,
-    optionalServices = void 0,
-    navigator = defaultNavigator
-  } = options || {};
-  const isSupported = useSupported(() => navigator && "bluetooth" in navigator);
-  const device = shallowRef(void 0);
-  const error = shallowRef(null);
-  watch(device, () => {
-    connectToBluetoothGATTServer();
-  });
-  async function requestDevice() {
-    if (!isSupported.value)
-      return;
-    error.value = null;
-    if (filters && filters.length > 0)
-      acceptAllDevices = false;
-    try {
-      device.value = await (navigator == null ? void 0 : navigator.bluetooth.requestDevice({
-        acceptAllDevices,
-        filters,
-        optionalServices
-      }));
-    } catch (err) {
-      error.value = err;
-    }
-  }
-  const server = ref();
-  const isConnected = computed(() => {
-    var _a2;
-    return ((_a2 = server.value) == null ? void 0 : _a2.connected) || false;
-  });
-  async function connectToBluetoothGATTServer() {
-    error.value = null;
-    if (device.value && device.value.gatt) {
-      device.value.addEventListener("gattserverdisconnected", () => {
-      });
-      try {
-        server.value = await device.value.gatt.connect();
-      } catch (err) {
-        error.value = err;
-      }
-    }
-  }
-  tryOnMounted(() => {
-    var _a2;
-    if (device.value)
-      (_a2 = device.value.gatt) == null ? void 0 : _a2.connect();
-  });
-  tryOnScopeDispose(() => {
-    var _a2;
-    if (device.value)
-      (_a2 = device.value.gatt) == null ? void 0 : _a2.disconnect();
-  });
-  return {
-    isSupported,
-    isConnected,
-    device,
-    requestDevice,
-    server,
-    error
-  };
-}
-function useMediaQuery(query, options = {}) {
-  const { window: window2 = defaultWindow } = options;
-  const isSupported = useSupported(() => window2 && "matchMedia" in window2 && typeof window2.matchMedia === "function");
-  let mediaQuery;
-  const matches = ref(false);
-  const cleanup = () => {
-    if (!mediaQuery)
-      return;
-    if ("removeEventListener" in mediaQuery)
-      mediaQuery.removeEventListener("change", update);
-    else
-      mediaQuery.removeListener(update);
-  };
-  const update = () => {
-    if (!isSupported.value)
-      return;
-    cleanup();
-    mediaQuery = window2.matchMedia(resolveRef(query).value);
-    matches.value = mediaQuery.matches;
-    if ("addEventListener" in mediaQuery)
-      mediaQuery.addEventListener("change", update);
-    else
-      mediaQuery.addListener(update);
-  };
-  watchEffect(update);
-  tryOnScopeDispose(() => cleanup());
-  return matches;
-}
-var breakpointsTailwind = {
-  "sm": 640,
-  "md": 768,
-  "lg": 1024,
-  "xl": 1280,
-  "2xl": 1536
-};
-var breakpointsBootstrapV5 = {
-  sm: 576,
-  md: 768,
-  lg: 992,
-  xl: 1200,
-  xxl: 1400
-};
-var breakpointsVuetify = {
-  xs: 600,
-  sm: 960,
-  md: 1264,
-  lg: 1904
-};
-var breakpointsAntDesign = {
-  xs: 480,
-  sm: 576,
-  md: 768,
-  lg: 992,
-  xl: 1200,
-  xxl: 1600
-};
-var breakpointsQuasar = {
-  xs: 600,
-  sm: 1024,
-  md: 1440,
-  lg: 1920
-};
-var breakpointsSematic = {
-  mobileS: 320,
-  mobileM: 375,
-  mobileL: 425,
-  tablet: 768,
-  laptop: 1024,
-  laptopL: 1440,
-  desktop4K: 2560
-};
-var breakpointsMasterCss = {
-  "3xs": 360,
-  "2xs": 480,
-  "xs": 600,
-  "sm": 768,
-  "md": 1024,
-  "lg": 1280,
-  "xl": 1440,
-  "2xl": 1600,
-  "3xl": 1920,
-  "4xl": 2560
-};
-var __defProp$m = Object.defineProperty;
-var __getOwnPropSymbols$o = Object.getOwnPropertySymbols;
-var __hasOwnProp$o = Object.prototype.hasOwnProperty;
-var __propIsEnum$o = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$m = (obj, key, value) => key in obj ? __defProp$m(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$m = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$o.call(b, prop))
-      __defNormalProp$m(a, prop, b[prop]);
-  if (__getOwnPropSymbols$o)
-    for (var prop of __getOwnPropSymbols$o(b)) {
-      if (__propIsEnum$o.call(b, prop))
-        __defNormalProp$m(a, prop, b[prop]);
-    }
-  return a;
-};
-function useBreakpoints(breakpoints, options = {}) {
-  function getValue2(k, delta) {
-    let v = breakpoints[k];
-    if (delta != null)
-      v = increaseWithUnit(v, delta);
-    if (typeof v === "number")
-      v = `${v}px`;
-    return v;
-  }
-  const { window: window2 = defaultWindow } = options;
-  function match(query) {
-    if (!window2)
-      return false;
-    return window2.matchMedia(query).matches;
-  }
-  const greaterOrEqual = (k) => {
-    return useMediaQuery(`(min-width: ${getValue2(k)})`, options);
-  };
-  const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {
-    Object.defineProperty(shortcuts, k, {
-      get: () => greaterOrEqual(k),
-      enumerable: true,
-      configurable: true
-    });
-    return shortcuts;
-  }, {});
-  return __spreadValues$m({
-    greater(k) {
-      return useMediaQuery(`(min-width: ${getValue2(k, 0.1)})`, options);
-    },
-    greaterOrEqual,
-    smaller(k) {
-      return useMediaQuery(`(max-width: ${getValue2(k, -0.1)})`, options);
-    },
-    smallerOrEqual(k) {
-      return useMediaQuery(`(max-width: ${getValue2(k)})`, options);
-    },
-    between(a, b) {
-      return useMediaQuery(`(min-width: ${getValue2(a)}) and (max-width: ${getValue2(b, -0.1)})`, options);
-    },
-    isGreater(k) {
-      return match(`(min-width: ${getValue2(k, 0.1)})`);
-    },
-    isGreaterOrEqual(k) {
-      return match(`(min-width: ${getValue2(k)})`);
-    },
-    isSmaller(k) {
-      return match(`(max-width: ${getValue2(k, -0.1)})`);
-    },
-    isSmallerOrEqual(k) {
-      return match(`(max-width: ${getValue2(k)})`);
-    },
-    isInBetween(a, b) {
-      return match(`(min-width: ${getValue2(a)}) and (max-width: ${getValue2(b, -0.1)})`);
-    }
-  }, shortcutMethods);
-}
-var useBroadcastChannel = (options) => {
-  const {
-    name,
-    window: window2 = defaultWindow
-  } = options;
-  const isSupported = useSupported(() => window2 && "BroadcastChannel" in window2);
-  const isClosed = ref(false);
-  const channel = ref();
-  const data = ref();
-  const error = ref(null);
-  const post = (data2) => {
-    if (channel.value)
-      channel.value.postMessage(data2);
-  };
-  const close = () => {
-    if (channel.value)
-      channel.value.close();
-    isClosed.value = true;
-  };
-  if (isSupported.value) {
-    tryOnMounted(() => {
-      error.value = null;
-      channel.value = new BroadcastChannel(name);
-      channel.value.addEventListener("message", (e) => {
-        data.value = e.data;
-      }, { passive: true });
-      channel.value.addEventListener("messageerror", (e) => {
-        error.value = e;
-      }, { passive: true });
-      channel.value.addEventListener("close", () => {
-        isClosed.value = true;
-      });
-    });
-  }
-  tryOnScopeDispose(() => {
-    close();
-  });
-  return {
-    isSupported,
-    channel,
-    data,
-    post,
-    close,
-    error,
-    isClosed
-  };
-};
-function useBrowserLocation({ window: window2 = defaultWindow } = {}) {
-  const buildState = (trigger) => {
-    const { state: state2, length } = (window2 == null ? void 0 : window2.history) || {};
-    const { hash, host, hostname, href, origin, pathname, port, protocol, search } = (window2 == null ? void 0 : window2.location) || {};
-    return {
-      trigger,
-      state: state2,
-      length,
-      hash,
-      host,
-      hostname,
-      href,
-      origin,
-      pathname,
-      port,
-      protocol,
-      search
-    };
-  };
-  const state = ref(buildState("load"));
-  if (window2) {
-    useEventListener(window2, "popstate", () => state.value = buildState("popstate"), { passive: true });
-    useEventListener(window2, "hashchange", () => state.value = buildState("hashchange"), { passive: true });
-  }
-  return state;
-}
-function useCached(refValue, comparator = (a, b) => a === b, watchOptions) {
-  const cachedValue = ref(refValue.value);
-  watch(() => refValue.value, (value) => {
-    if (!comparator(value, cachedValue.value))
-      cachedValue.value = value;
-  }, watchOptions);
-  return cachedValue;
-}
-function useClipboard(options = {}) {
-  const {
-    navigator = defaultNavigator,
-    read = false,
-    source,
-    copiedDuring = 1500,
-    legacy = false
-  } = options;
-  const events2 = ["copy", "cut"];
-  const isClipboardApiSupported = useSupported(() => navigator && "clipboard" in navigator);
-  const isSupported = computed(() => isClipboardApiSupported.value || legacy);
-  const text = ref("");
-  const copied = ref(false);
-  const timeout = useTimeoutFn(() => copied.value = false, copiedDuring);
-  function updateText() {
-    if (isClipboardApiSupported.value) {
-      navigator.clipboard.readText().then((value) => {
-        text.value = value;
-      });
-    } else {
-      text.value = legacyRead();
-    }
-  }
-  if (isSupported.value && read) {
-    for (const event of events2)
-      useEventListener(event, updateText);
-  }
-  async function copy(value = resolveUnref(source)) {
-    if (isSupported.value && value != null) {
-      if (isClipboardApiSupported.value)
-        await navigator.clipboard.writeText(value);
-      else
-        legacyCopy(value);
-      text.value = value;
-      copied.value = true;
-      timeout.start();
-    }
-  }
-  function legacyCopy(value) {
-    const ta = document.createElement("textarea");
-    ta.value = value != null ? value : "";
-    ta.style.position = "absolute";
-    ta.style.opacity = "0";
-    document.body.appendChild(ta);
-    ta.select();
-    document.execCommand("copy");
-    ta.remove();
-  }
-  function legacyRead() {
-    var _a2, _b, _c;
-    return (_c = (_b = (_a2 = document == null ? void 0 : document.getSelection) == null ? void 0 : _a2.call(document)) == null ? void 0 : _b.toString()) != null ? _c : "";
-  }
-  return {
-    isSupported,
-    text,
-    copied,
-    copy
-  };
-}
-var __defProp$l = Object.defineProperty;
-var __defProps$8 = Object.defineProperties;
-var __getOwnPropDescs$8 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$n = Object.getOwnPropertySymbols;
-var __hasOwnProp$n = Object.prototype.hasOwnProperty;
-var __propIsEnum$n = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$l = (obj, key, value) => key in obj ? __defProp$l(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$l = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$n.call(b, prop))
-      __defNormalProp$l(a, prop, b[prop]);
-  if (__getOwnPropSymbols$n)
-    for (var prop of __getOwnPropSymbols$n(b)) {
-      if (__propIsEnum$n.call(b, prop))
-        __defNormalProp$l(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$8 = (a, b) => __defProps$8(a, __getOwnPropDescs$8(b));
-function cloneFnJSON(source) {
-  return JSON.parse(JSON.stringify(source));
-}
-function useCloned(source, options = {}) {
-  const cloned = ref({});
-  const {
-    manual,
-    clone = cloneFnJSON,
-    deep = true,
-    immediate = true
-  } = options;
-  function sync() {
-    cloned.value = clone(unref(source));
-  }
-  if (!manual && isRef(source)) {
-    watch(source, sync, __spreadProps$8(__spreadValues$l({}, options), {
-      deep,
-      immediate
-    }));
-  } else {
-    sync();
-  }
-  return { cloned, sync };
-}
-var _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
-var globalKey = "__vueuse_ssr_handlers__";
-_global[globalKey] = _global[globalKey] || {};
-var handlers = _global[globalKey];
-function getSSRHandler(key, fallback) {
-  return handlers[key] || fallback;
-}
-function setSSRHandler(key, fn) {
-  handlers[key] = fn;
-}
-function guessSerializerType(rawInit) {
-  return rawInit == null ? "any" : rawInit instanceof Set ? "set" : rawInit instanceof Map ? "map" : rawInit instanceof Date ? "date" : typeof rawInit === "boolean" ? "boolean" : typeof rawInit === "string" ? "string" : typeof rawInit === "object" ? "object" : !Number.isNaN(rawInit) ? "number" : "any";
-}
-var __defProp$k = Object.defineProperty;
-var __getOwnPropSymbols$m = Object.getOwnPropertySymbols;
-var __hasOwnProp$m = Object.prototype.hasOwnProperty;
-var __propIsEnum$m = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$k = (obj, key, value) => key in obj ? __defProp$k(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$k = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$m.call(b, prop))
-      __defNormalProp$k(a, prop, b[prop]);
-  if (__getOwnPropSymbols$m)
-    for (var prop of __getOwnPropSymbols$m(b)) {
-      if (__propIsEnum$m.call(b, prop))
-        __defNormalProp$k(a, prop, b[prop]);
-    }
-  return a;
-};
-var StorageSerializers = {
-  boolean: {
-    read: (v) => v === "true",
-    write: (v) => String(v)
-  },
-  object: {
-    read: (v) => JSON.parse(v),
-    write: (v) => JSON.stringify(v)
-  },
-  number: {
-    read: (v) => Number.parseFloat(v),
-    write: (v) => String(v)
-  },
-  any: {
-    read: (v) => v,
-    write: (v) => String(v)
-  },
-  string: {
-    read: (v) => v,
-    write: (v) => String(v)
-  },
-  map: {
-    read: (v) => new Map(JSON.parse(v)),
-    write: (v) => JSON.stringify(Array.from(v.entries()))
-  },
-  set: {
-    read: (v) => new Set(JSON.parse(v)),
-    write: (v) => JSON.stringify(Array.from(v))
-  },
-  date: {
-    read: (v) => new Date(v),
-    write: (v) => v.toISOString()
-  }
-};
-var customStorageEventName = "vueuse-storage";
-function useStorage(key, defaults2, storage, options = {}) {
-  var _a2;
-  const {
-    flush = "pre",
-    deep = true,
-    listenToStorageChanges = true,
-    writeDefaults = true,
-    mergeDefaults = false,
-    shallow,
-    window: window2 = defaultWindow,
-    eventFilter,
-    onError = (e) => {
-      console.error(e);
-    }
-  } = options;
-  const data = (shallow ? shallowRef : ref)(defaults2);
-  if (!storage) {
-    try {
-      storage = getSSRHandler("getDefaultStorage", () => {
-        var _a22;
-        return (_a22 = defaultWindow) == null ? void 0 : _a22.localStorage;
-      })();
-    } catch (e) {
-      onError(e);
-    }
-  }
-  if (!storage)
-    return data;
-  const rawInit = resolveUnref(defaults2);
-  const type = guessSerializerType(rawInit);
-  const serializer = (_a2 = options.serializer) != null ? _a2 : StorageSerializers[type];
-  const { pause: pauseWatch, resume: resumeWatch } = watchPausable(data, () => write(data.value), { flush, deep, eventFilter });
-  if (window2 && listenToStorageChanges) {
-    useEventListener(window2, "storage", update);
-    useEventListener(window2, customStorageEventName, updateFromCustomEvent);
-  }
-  update();
-  return data;
-  function write(v) {
-    try {
-      if (v == null) {
-        storage.removeItem(key);
-      } else {
-        const serialized = serializer.write(v);
-        const oldValue = storage.getItem(key);
-        if (oldValue !== serialized) {
-          storage.setItem(key, serialized);
-          if (window2) {
-            window2.dispatchEvent(new CustomEvent(customStorageEventName, {
-              detail: {
-                key,
-                oldValue,
-                newValue: serialized,
-                storageArea: storage
-              }
-            }));
-          }
-        }
-      }
-    } catch (e) {
-      onError(e);
-    }
-  }
-  function read(event) {
-    const rawValue = event ? event.newValue : storage.getItem(key);
-    if (rawValue == null) {
-      if (writeDefaults && rawInit !== null)
-        storage.setItem(key, serializer.write(rawInit));
-      return rawInit;
-    } else if (!event && mergeDefaults) {
-      const value = serializer.read(rawValue);
-      if (isFunction(mergeDefaults))
-        return mergeDefaults(value, rawInit);
-      else if (type === "object" && !Array.isArray(value))
-        return __spreadValues$k(__spreadValues$k({}, rawInit), value);
-      return value;
-    } else if (typeof rawValue !== "string") {
-      return rawValue;
-    } else {
-      return serializer.read(rawValue);
-    }
-  }
-  function updateFromCustomEvent(event) {
-    update(event.detail);
-  }
-  function update(event) {
-    if (event && event.storageArea !== storage)
-      return;
-    if (event && event.key == null) {
-      data.value = rawInit;
-      return;
-    }
-    if (event && event.key !== key)
-      return;
-    pauseWatch();
-    try {
-      data.value = read(event);
-    } catch (e) {
-      onError(e);
-    } finally {
-      if (event)
-        nextTick(resumeWatch);
-      else
-        resumeWatch();
-    }
-  }
-}
-function usePreferredDark(options) {
-  return useMediaQuery("(prefers-color-scheme: dark)", options);
-}
-var __defProp$j = Object.defineProperty;
-var __getOwnPropSymbols$l = Object.getOwnPropertySymbols;
-var __hasOwnProp$l = Object.prototype.hasOwnProperty;
-var __propIsEnum$l = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$j = (obj, key, value) => key in obj ? __defProp$j(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$j = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$l.call(b, prop))
-      __defNormalProp$j(a, prop, b[prop]);
-  if (__getOwnPropSymbols$l)
-    for (var prop of __getOwnPropSymbols$l(b)) {
-      if (__propIsEnum$l.call(b, prop))
-        __defNormalProp$j(a, prop, b[prop]);
-    }
-  return a;
-};
-function useColorMode(options = {}) {
-  const {
-    selector = "html",
-    attribute = "class",
-    initialValue = "auto",
-    window: window2 = defaultWindow,
-    storage,
-    storageKey = "vueuse-color-scheme",
-    listenToStorageChanges = true,
-    storageRef,
-    emitAuto
-  } = options;
-  const modes = __spreadValues$j({
-    auto: "",
-    light: "light",
-    dark: "dark"
-  }, options.modes || {});
-  const preferredDark = usePreferredDark({ window: window2 });
-  const preferredMode = computed(() => preferredDark.value ? "dark" : "light");
-  const store = storageRef || (storageKey == null ? ref(initialValue) : useStorage(storageKey, initialValue, storage, { window: window2, listenToStorageChanges }));
-  const state = computed({
-    get() {
-      return store.value === "auto" && !emitAuto ? preferredMode.value : store.value;
-    },
-    set(v) {
-      store.value = v;
-    }
-  });
-  const updateHTMLAttrs = getSSRHandler("updateHTMLAttrs", (selector2, attribute2, value) => {
-    const el = window2 == null ? void 0 : window2.document.querySelector(selector2);
-    if (!el)
-      return;
-    if (attribute2 === "class") {
-      const current = value.split(/\s/g);
-      Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => {
-        if (current.includes(v))
-          el.classList.add(v);
-        else
-          el.classList.remove(v);
-      });
-    } else {
-      el.setAttribute(attribute2, value);
-    }
-  });
-  function defaultOnChanged(mode) {
-    var _a2;
-    const resolvedMode = mode === "auto" ? preferredMode.value : mode;
-    updateHTMLAttrs(selector, attribute, (_a2 = modes[resolvedMode]) != null ? _a2 : resolvedMode);
-  }
-  function onChanged(mode) {
-    if (options.onChanged)
-      options.onChanged(mode, defaultOnChanged);
-    else
-      defaultOnChanged(mode);
-  }
-  watch(state, onChanged, { flush: "post", immediate: true });
-  if (emitAuto)
-    watch(preferredMode, () => onChanged(state.value), { flush: "post" });
-  tryOnMounted(() => onChanged(state.value));
-  return state;
-}
-function useConfirmDialog(revealed = ref(false)) {
-  const confirmHook = createEventHook();
-  const cancelHook = createEventHook();
-  const revealHook = createEventHook();
-  let _resolve = noop;
-  const reveal = (data) => {
-    revealHook.trigger(data);
-    revealed.value = true;
-    return new Promise((resolve) => {
-      _resolve = resolve;
-    });
-  };
-  const confirm = (data) => {
-    revealed.value = false;
-    confirmHook.trigger(data);
-    _resolve({ data, isCanceled: false });
-  };
-  const cancel = (data) => {
-    revealed.value = false;
-    cancelHook.trigger(data);
-    _resolve({ data, isCanceled: true });
-  };
-  return {
-    isRevealed: computed(() => revealed.value),
-    reveal,
-    confirm,
-    cancel,
-    onReveal: revealHook.on,
-    onConfirm: confirmHook.on,
-    onCancel: cancelHook.on
-  };
-}
-function useCssVar(prop, target, { window: window2 = defaultWindow, initialValue = "" } = {}) {
-  const variable = ref(initialValue);
-  const elRef = computed(() => {
-    var _a2;
-    return unrefElement(target) || ((_a2 = window2 == null ? void 0 : window2.document) == null ? void 0 : _a2.documentElement);
-  });
-  watch([elRef, () => resolveUnref(prop)], ([el, prop2]) => {
-    var _a2;
-    if (el && window2) {
-      const value = (_a2 = window2.getComputedStyle(el).getPropertyValue(prop2)) == null ? void 0 : _a2.trim();
-      variable.value = value || initialValue;
-    }
-  }, { immediate: true });
-  watch(variable, (val) => {
-    var _a2;
-    if ((_a2 = elRef.value) == null ? void 0 : _a2.style)
-      elRef.value.style.setProperty(resolveUnref(prop), val);
-  });
-  return variable;
-}
-function useCurrentElement() {
-  const vm = getCurrentInstance();
-  const currentElement = computedWithControl(() => null, () => vm.proxy.$el);
-  onUpdated(currentElement.trigger);
-  onMounted(currentElement.trigger);
-  return currentElement;
-}
-function useCycleList(list, options) {
-  var _a2;
-  const state = shallowRef((_a2 = options == null ? void 0 : options.initialValue) != null ? _a2 : list[0]);
-  const index = computed({
-    get() {
-      var _a22;
-      let index2 = (options == null ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, list) : list.indexOf(state.value);
-      if (index2 < 0)
-        index2 = (_a22 = options == null ? void 0 : options.fallbackIndex) != null ? _a22 : 0;
-      return index2;
-    },
-    set(v) {
-      set3(v);
-    }
-  });
-  function set3(i) {
-    const length = list.length;
-    const index2 = (i % length + length) % length;
-    const value = list[index2];
-    state.value = value;
-    return value;
-  }
-  function shift(delta = 1) {
-    return set3(index.value + delta);
-  }
-  function next(n = 1) {
-    return shift(n);
-  }
-  function prev(n = 1) {
-    return shift(-n);
-  }
-  return {
-    state,
-    index,
-    next,
-    prev
-  };
-}
-var __defProp$i = Object.defineProperty;
-var __defProps$7 = Object.defineProperties;
-var __getOwnPropDescs$7 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$k = Object.getOwnPropertySymbols;
-var __hasOwnProp$k = Object.prototype.hasOwnProperty;
-var __propIsEnum$k = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$i = (obj, key, value) => key in obj ? __defProp$i(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$i = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$k.call(b, prop))
-      __defNormalProp$i(a, prop, b[prop]);
-  if (__getOwnPropSymbols$k)
-    for (var prop of __getOwnPropSymbols$k(b)) {
-      if (__propIsEnum$k.call(b, prop))
-        __defNormalProp$i(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$7 = (a, b) => __defProps$7(a, __getOwnPropDescs$7(b));
-function useDark(options = {}) {
-  const {
-    valueDark = "dark",
-    valueLight = "",
-    window: window2 = defaultWindow
-  } = options;
-  const mode = useColorMode(__spreadProps$7(__spreadValues$i({}, options), {
-    onChanged: (mode2, defaultHandler) => {
-      var _a2;
-      if (options.onChanged)
-        (_a2 = options.onChanged) == null ? void 0 : _a2.call(options, mode2 === "dark");
-      else
-        defaultHandler(mode2);
-    },
-    modes: {
-      dark: valueDark,
-      light: valueLight
-    }
-  }));
-  const preferredDark = usePreferredDark({ window: window2 });
-  const isDark = computed({
-    get() {
-      return mode.value === "dark";
-    },
-    set(v) {
-      if (v === preferredDark.value)
-        mode.value = "auto";
-      else
-        mode.value = v ? "dark" : "light";
-    }
-  });
-  return isDark;
-}
-var fnBypass = (v) => v;
-var fnSetSource = (source, value) => source.value = value;
-function defaultDump(clone) {
-  return clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass;
-}
-function defaultParse(clone) {
-  return clone ? isFunction(clone) ? clone : cloneFnJSON : fnBypass;
-}
-function useManualRefHistory(source, options = {}) {
-  const {
-    clone = false,
-    dump = defaultDump(clone),
-    parse = defaultParse(clone),
-    setSource = fnSetSource
-  } = options;
-  function _createHistoryRecord() {
-    return markRaw({
-      snapshot: dump(source.value),
-      timestamp: timestamp()
-    });
-  }
-  const last = ref(_createHistoryRecord());
-  const undoStack = ref([]);
-  const redoStack = ref([]);
-  const _setSource = (record) => {
-    setSource(source, parse(record.snapshot));
-    last.value = record;
-  };
-  const commit = () => {
-    undoStack.value.unshift(last.value);
-    last.value = _createHistoryRecord();
-    if (options.capacity && undoStack.value.length > options.capacity)
-      undoStack.value.splice(options.capacity, Infinity);
-    if (redoStack.value.length)
-      redoStack.value.splice(0, redoStack.value.length);
-  };
-  const clear = () => {
-    undoStack.value.splice(0, undoStack.value.length);
-    redoStack.value.splice(0, redoStack.value.length);
-  };
-  const undo = () => {
-    const state = undoStack.value.shift();
-    if (state) {
-      redoStack.value.unshift(last.value);
-      _setSource(state);
-    }
-  };
-  const redo = () => {
-    const state = redoStack.value.shift();
-    if (state) {
-      undoStack.value.unshift(last.value);
-      _setSource(state);
-    }
-  };
-  const reset = () => {
-    _setSource(last.value);
-  };
-  const history = computed(() => [last.value, ...undoStack.value]);
-  const canUndo = computed(() => undoStack.value.length > 0);
-  const canRedo = computed(() => redoStack.value.length > 0);
-  return {
-    source,
-    undoStack,
-    redoStack,
-    last,
-    history,
-    canUndo,
-    canRedo,
-    clear,
-    commit,
-    reset,
-    undo,
-    redo
-  };
-}
-var __defProp$h = Object.defineProperty;
-var __defProps$62 = Object.defineProperties;
-var __getOwnPropDescs$62 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$j = Object.getOwnPropertySymbols;
-var __hasOwnProp$j = Object.prototype.hasOwnProperty;
-var __propIsEnum$j = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$h = (obj, key, value) => key in obj ? __defProp$h(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$h = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$j.call(b, prop))
-      __defNormalProp$h(a, prop, b[prop]);
-  if (__getOwnPropSymbols$j)
-    for (var prop of __getOwnPropSymbols$j(b)) {
-      if (__propIsEnum$j.call(b, prop))
-        __defNormalProp$h(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$62 = (a, b) => __defProps$62(a, __getOwnPropDescs$62(b));
-function useRefHistory(source, options = {}) {
-  const {
-    deep = false,
-    flush = "pre",
-    eventFilter
-  } = options;
-  const {
-    eventFilter: composedFilter,
-    pause,
-    resume: resumeTracking,
-    isActive: isTracking
-  } = pausableFilter(eventFilter);
-  const {
-    ignoreUpdates,
-    ignorePrevAsyncUpdates,
-    stop
-  } = watchIgnorable(source, commit, { deep, flush, eventFilter: composedFilter });
-  function setSource(source2, value) {
-    ignorePrevAsyncUpdates();
-    ignoreUpdates(() => {
-      source2.value = value;
-    });
-  }
-  const manualHistory = useManualRefHistory(source, __spreadProps$62(__spreadValues$h({}, options), { clone: options.clone || deep, setSource }));
-  const { clear, commit: manualCommit } = manualHistory;
-  function commit() {
-    ignorePrevAsyncUpdates();
-    manualCommit();
-  }
-  function resume(commitNow) {
-    resumeTracking();
-    if (commitNow)
-      commit();
-  }
-  function batch(fn) {
-    let canceled = false;
-    const cancel = () => canceled = true;
-    ignoreUpdates(() => {
-      fn(cancel);
-    });
-    if (!canceled)
-      commit();
-  }
-  function dispose() {
-    stop();
-    clear();
-  }
-  return __spreadProps$62(__spreadValues$h({}, manualHistory), {
-    isTracking,
-    pause,
-    resume,
-    commit,
-    batch,
-    dispose
-  });
-}
-var __defProp$g = Object.defineProperty;
-var __defProps$52 = Object.defineProperties;
-var __getOwnPropDescs$52 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$i = Object.getOwnPropertySymbols;
-var __hasOwnProp$i = Object.prototype.hasOwnProperty;
-var __propIsEnum$i = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$g = (obj, key, value) => key in obj ? __defProp$g(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$g = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$i.call(b, prop))
-      __defNormalProp$g(a, prop, b[prop]);
-  if (__getOwnPropSymbols$i)
-    for (var prop of __getOwnPropSymbols$i(b)) {
-      if (__propIsEnum$i.call(b, prop))
-        __defNormalProp$g(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$52 = (a, b) => __defProps$52(a, __getOwnPropDescs$52(b));
-function useDebouncedRefHistory(source, options = {}) {
-  const filter = options.debounce ? debounceFilter(options.debounce) : void 0;
-  const history = useRefHistory(source, __spreadProps$52(__spreadValues$g({}, options), { eventFilter: filter }));
-  return __spreadValues$g({}, history);
-}
-function useDeviceMotion(options = {}) {
-  const {
-    window: window2 = defaultWindow,
-    eventFilter = bypassFilter
-  } = options;
-  const acceleration = ref({ x: null, y: null, z: null });
-  const rotationRate = ref({ alpha: null, beta: null, gamma: null });
-  const interval = ref(0);
-  const accelerationIncludingGravity = ref({
-    x: null,
-    y: null,
-    z: null
-  });
-  if (window2) {
-    const onDeviceMotion = createFilterWrapper(eventFilter, (event) => {
-      acceleration.value = event.acceleration;
-      accelerationIncludingGravity.value = event.accelerationIncludingGravity;
-      rotationRate.value = event.rotationRate;
-      interval.value = event.interval;
-    });
-    useEventListener(window2, "devicemotion", onDeviceMotion);
-  }
-  return {
-    acceleration,
-    accelerationIncludingGravity,
-    rotationRate,
-    interval
-  };
-}
-function useDeviceOrientation(options = {}) {
-  const { window: window2 = defaultWindow } = options;
-  const isSupported = useSupported(() => window2 && "DeviceOrientationEvent" in window2);
-  const isAbsolute = ref(false);
-  const alpha = ref(null);
-  const beta = ref(null);
-  const gamma = ref(null);
-  if (window2 && isSupported.value) {
-    useEventListener(window2, "deviceorientation", (event) => {
-      isAbsolute.value = event.absolute;
-      alpha.value = event.alpha;
-      beta.value = event.beta;
-      gamma.value = event.gamma;
-    });
-  }
-  return {
-    isSupported,
-    isAbsolute,
-    alpha,
-    beta,
-    gamma
-  };
-}
-function useDevicePixelRatio({
-  window: window2 = defaultWindow
-} = {}) {
-  const pixelRatio = ref(1);
-  if (window2) {
-    let observe = function() {
-      pixelRatio.value = window2.devicePixelRatio;
-      cleanup();
-      media = window2.matchMedia(`(resolution: ${pixelRatio.value}dppx)`);
-      media.addEventListener("change", observe, { once: true });
-    }, cleanup = function() {
-      media == null ? void 0 : media.removeEventListener("change", observe);
-    };
-    let media;
-    observe();
-    tryOnScopeDispose(cleanup);
-  }
-  return { pixelRatio };
-}
-function usePermission(permissionDesc, options = {}) {
-  const {
-    controls = false,
-    navigator = defaultNavigator
-  } = options;
-  const isSupported = useSupported(() => navigator && "permissions" in navigator);
-  let permissionStatus;
-  const desc = typeof permissionDesc === "string" ? { name: permissionDesc } : permissionDesc;
-  const state = ref();
-  const onChange = () => {
-    if (permissionStatus)
-      state.value = permissionStatus.state;
-  };
-  const query = createSingletonPromise(async () => {
-    if (!isSupported.value)
-      return;
-    if (!permissionStatus) {
-      try {
-        permissionStatus = await navigator.permissions.query(desc);
-        useEventListener(permissionStatus, "change", onChange);
-        onChange();
-      } catch (e) {
-        state.value = "prompt";
-      }
-    }
-    return permissionStatus;
-  });
-  query();
-  if (controls) {
-    return {
-      state,
-      isSupported,
-      query
-    };
-  } else {
-    return state;
-  }
-}
-function useDevicesList(options = {}) {
-  const {
-    navigator = defaultNavigator,
-    requestPermissions = false,
-    constraints = { audio: true, video: true },
-    onUpdated: onUpdated2
-  } = options;
-  const devices = ref([]);
-  const videoInputs = computed(() => devices.value.filter((i) => i.kind === "videoinput"));
-  const audioInputs = computed(() => devices.value.filter((i) => i.kind === "audioinput"));
-  const audioOutputs = computed(() => devices.value.filter((i) => i.kind === "audiooutput"));
-  const isSupported = useSupported(() => navigator && navigator.mediaDevices && navigator.mediaDevices.enumerateDevices);
-  const permissionGranted = ref(false);
-  async function update() {
-    if (!isSupported.value)
-      return;
-    devices.value = await navigator.mediaDevices.enumerateDevices();
-    onUpdated2 == null ? void 0 : onUpdated2(devices.value);
-  }
-  async function ensurePermissions() {
-    if (!isSupported.value)
-      return false;
-    if (permissionGranted.value)
-      return true;
-    const { state, query } = usePermission("camera", { controls: true });
-    await query();
-    if (state.value !== "granted") {
-      const stream = await navigator.mediaDevices.getUserMedia(constraints);
-      stream.getTracks().forEach((t) => t.stop());
-      update();
-      permissionGranted.value = true;
-    } else {
-      permissionGranted.value = true;
-    }
-    return permissionGranted.value;
-  }
-  if (isSupported.value) {
-    if (requestPermissions)
-      ensurePermissions();
-    useEventListener(navigator.mediaDevices, "devicechange", update);
-    update();
-  }
-  return {
-    devices,
-    ensurePermissions,
-    permissionGranted,
-    videoInputs,
-    audioInputs,
-    audioOutputs,
-    isSupported
-  };
-}
-function useDisplayMedia(options = {}) {
-  var _a2;
-  const enabled = ref((_a2 = options.enabled) != null ? _a2 : false);
-  const video = options.video;
-  const audio = options.audio;
-  const { navigator = defaultNavigator } = options;
-  const isSupported = useSupported(() => {
-    var _a22;
-    return (_a22 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a22.getDisplayMedia;
-  });
-  const constraint = { audio, video };
-  const stream = shallowRef();
-  async function _start() {
-    if (!isSupported.value || stream.value)
-      return;
-    stream.value = await navigator.mediaDevices.getDisplayMedia(constraint);
-    return stream.value;
-  }
-  async function _stop() {
-    var _a22;
-    (_a22 = stream.value) == null ? void 0 : _a22.getTracks().forEach((t) => t.stop());
-    stream.value = void 0;
-  }
-  function stop() {
-    _stop();
-    enabled.value = false;
-  }
-  async function start() {
-    await _start();
-    if (stream.value)
-      enabled.value = true;
-    return stream.value;
-  }
-  watch(enabled, (v) => {
-    if (v)
-      _start();
-    else
-      _stop();
-  }, { immediate: true });
-  return {
-    isSupported,
-    stream,
-    start,
-    stop,
-    enabled
-  };
-}
-function useDocumentVisibility({ document: document2 = defaultDocument } = {}) {
-  if (!document2)
-    return ref("visible");
-  const visibility = ref(document2.visibilityState);
-  useEventListener(document2, "visibilitychange", () => {
-    visibility.value = document2.visibilityState;
-  });
-  return visibility;
-}
-var __defProp$f = Object.defineProperty;
-var __defProps$42 = Object.defineProperties;
-var __getOwnPropDescs$42 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$h = Object.getOwnPropertySymbols;
-var __hasOwnProp$h = Object.prototype.hasOwnProperty;
-var __propIsEnum$h = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$f = (obj, key, value) => key in obj ? __defProp$f(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$f = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$h.call(b, prop))
-      __defNormalProp$f(a, prop, b[prop]);
-  if (__getOwnPropSymbols$h)
-    for (var prop of __getOwnPropSymbols$h(b)) {
-      if (__propIsEnum$h.call(b, prop))
-        __defNormalProp$f(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$42 = (a, b) => __defProps$42(a, __getOwnPropDescs$42(b));
-function useDraggable(target, options = {}) {
-  var _a2, _b, _c;
-  const draggingElement = (_a2 = options.draggingElement) != null ? _a2 : defaultWindow;
-  const draggingHandle = (_b = options.handle) != null ? _b : target;
-  const position = ref((_c = resolveUnref(options.initialValue)) != null ? _c : { x: 0, y: 0 });
-  const pressedDelta = ref();
-  const filterEvent = (e) => {
-    if (options.pointerTypes)
-      return options.pointerTypes.includes(e.pointerType);
-    return true;
-  };
-  const handleEvent = (e) => {
-    if (resolveUnref(options.preventDefault))
-      e.preventDefault();
-    if (resolveUnref(options.stopPropagation))
-      e.stopPropagation();
-  };
-  const start = (e) => {
-    var _a22;
-    if (!filterEvent(e))
-      return;
-    if (resolveUnref(options.exact) && e.target !== resolveUnref(target))
-      return;
-    const rect = resolveUnref(target).getBoundingClientRect();
-    const pos = {
-      x: e.clientX - rect.left,
-      y: e.clientY - rect.top
-    };
-    if (((_a22 = options.onStart) == null ? void 0 : _a22.call(options, pos, e)) === false)
-      return;
-    pressedDelta.value = pos;
-    handleEvent(e);
-  };
-  const move = (e) => {
-    var _a22;
-    if (!filterEvent(e))
-      return;
-    if (!pressedDelta.value)
-      return;
-    position.value = {
-      x: e.clientX - pressedDelta.value.x,
-      y: e.clientY - pressedDelta.value.y
-    };
-    (_a22 = options.onMove) == null ? void 0 : _a22.call(options, position.value, e);
-    handleEvent(e);
-  };
-  const end = (e) => {
-    var _a22;
-    if (!filterEvent(e))
-      return;
-    if (!pressedDelta.value)
-      return;
-    pressedDelta.value = void 0;
-    (_a22 = options.onEnd) == null ? void 0 : _a22.call(options, position.value, e);
-    handleEvent(e);
-  };
-  if (isClient) {
-    useEventListener(draggingHandle, "pointerdown", start, true);
-    useEventListener(draggingElement, "pointermove", move, true);
-    useEventListener(draggingElement, "pointerup", end, true);
-  }
-  return __spreadProps$42(__spreadValues$f({}, toRefs2(position)), {
-    position,
-    isDragging: computed(() => !!pressedDelta.value),
-    style: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`)
-  });
-}
-function useDropZone(target, onDrop) {
-  const isOverDropZone = ref(false);
-  let counter = 0;
-  if (isClient) {
-    useEventListener(target, "dragenter", (event) => {
-      event.preventDefault();
-      counter += 1;
-      isOverDropZone.value = true;
-    });
-    useEventListener(target, "dragover", (event) => {
-      event.preventDefault();
-    });
-    useEventListener(target, "dragleave", (event) => {
-      event.preventDefault();
-      counter -= 1;
-      if (counter === 0)
-        isOverDropZone.value = false;
-    });
-    useEventListener(target, "drop", (event) => {
-      var _a2, _b;
-      event.preventDefault();
-      counter = 0;
-      isOverDropZone.value = false;
-      const files = Array.from((_b = (_a2 = event.dataTransfer) == null ? void 0 : _a2.files) != null ? _b : []);
-      onDrop == null ? void 0 : onDrop(files.length === 0 ? null : files);
-    });
-  }
-  return {
-    isOverDropZone
-  };
-}
-var __getOwnPropSymbols$g = Object.getOwnPropertySymbols;
-var __hasOwnProp$g = Object.prototype.hasOwnProperty;
-var __propIsEnum$g = Object.prototype.propertyIsEnumerable;
-var __objRest$22 = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp$g.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols$g)
-    for (var prop of __getOwnPropSymbols$g(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum$g.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-function useResizeObserver(target, callback, options = {}) {
-  const _a2 = options, { window: window2 = defaultWindow } = _a2, observerOptions = __objRest$22(_a2, ["window"]);
-  let observer;
-  const isSupported = useSupported(() => window2 && "ResizeObserver" in window2);
-  const cleanup = () => {
-    if (observer) {
-      observer.disconnect();
-      observer = void 0;
-    }
-  };
-  const stopWatch = watch(() => unrefElement(target), (el) => {
-    cleanup();
-    if (isSupported.value && window2 && el) {
-      observer = new ResizeObserver(callback);
-      observer.observe(el, observerOptions);
-    }
-  }, { immediate: true, flush: "post" });
-  const stop = () => {
-    cleanup();
-    stopWatch();
-  };
-  tryOnScopeDispose(stop);
-  return {
-    isSupported,
-    stop
-  };
-}
-function useElementBounding(target, options = {}) {
-  const {
-    reset = true,
-    windowResize = true,
-    windowScroll = true,
-    immediate = true
-  } = options;
-  const height = ref(0);
-  const bottom = ref(0);
-  const left = ref(0);
-  const right = ref(0);
-  const top = ref(0);
-  const width = ref(0);
-  const x = ref(0);
-  const y = ref(0);
-  function update() {
-    const el = unrefElement(target);
-    if (!el) {
-      if (reset) {
-        height.value = 0;
-        bottom.value = 0;
-        left.value = 0;
-        right.value = 0;
-        top.value = 0;
-        width.value = 0;
-        x.value = 0;
-        y.value = 0;
-      }
-      return;
-    }
-    const rect = el.getBoundingClientRect();
-    height.value = rect.height;
-    bottom.value = rect.bottom;
-    left.value = rect.left;
-    right.value = rect.right;
-    top.value = rect.top;
-    width.value = rect.width;
-    x.value = rect.x;
-    y.value = rect.y;
-  }
-  useResizeObserver(target, update);
-  watch(() => unrefElement(target), (ele) => !ele && update());
-  if (windowScroll)
-    useEventListener("scroll", update, { capture: true, passive: true });
-  if (windowResize)
-    useEventListener("resize", update, { passive: true });
-  tryOnMounted(() => {
-    if (immediate)
-      update();
-  });
-  return {
-    height,
-    bottom,
-    left,
-    right,
-    top,
-    width,
-    x,
-    y,
-    update
-  };
-}
-function useRafFn(fn, options = {}) {
-  const {
-    immediate = true,
-    window: window2 = defaultWindow
-  } = options;
-  const isActive = ref(false);
-  let previousFrameTimestamp = 0;
-  let rafId = null;
-  function loop(timestamp2) {
-    if (!isActive.value || !window2)
-      return;
-    const delta = timestamp2 - previousFrameTimestamp;
-    fn({ delta, timestamp: timestamp2 });
-    previousFrameTimestamp = timestamp2;
-    rafId = window2.requestAnimationFrame(loop);
-  }
-  function resume() {
-    if (!isActive.value && window2) {
-      isActive.value = true;
-      rafId = window2.requestAnimationFrame(loop);
-    }
-  }
-  function pause() {
-    isActive.value = false;
-    if (rafId != null && window2) {
-      window2.cancelAnimationFrame(rafId);
-      rafId = null;
-    }
-  }
-  if (immediate)
-    resume();
-  tryOnScopeDispose(pause);
-  return {
-    isActive: readonly(isActive),
-    pause,
-    resume
-  };
-}
-var __defProp$e = Object.defineProperty;
-var __getOwnPropSymbols$f = Object.getOwnPropertySymbols;
-var __hasOwnProp$f = Object.prototype.hasOwnProperty;
-var __propIsEnum$f = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$e = (obj, key, value) => key in obj ? __defProp$e(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$e = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$f.call(b, prop))
-      __defNormalProp$e(a, prop, b[prop]);
-  if (__getOwnPropSymbols$f)
-    for (var prop of __getOwnPropSymbols$f(b)) {
-      if (__propIsEnum$f.call(b, prop))
-        __defNormalProp$e(a, prop, b[prop]);
-    }
-  return a;
-};
-function useElementByPoint(options) {
-  const element = ref(null);
-  const { x, y, document: document2 = defaultDocument } = options;
-  const controls = useRafFn(() => {
-    element.value = (document2 == null ? void 0 : document2.elementFromPoint(resolveUnref(x), resolveUnref(y))) || null;
-  });
-  return __spreadValues$e({
-    element
-  }, controls);
-}
-function useElementHover(el, options = {}) {
-  const delayEnter = options ? options.delayEnter : 0;
-  const delayLeave = options ? options.delayLeave : 0;
-  const isHovered = ref(false);
-  let timer;
-  const toggle = (entering) => {
-    const delay = entering ? delayEnter : delayLeave;
-    if (timer) {
-      clearTimeout(timer);
-      timer = void 0;
-    }
-    if (delay)
-      timer = setTimeout(() => isHovered.value = entering, delay);
-    else
-      isHovered.value = entering;
-  };
-  if (!window)
-    return isHovered;
-  useEventListener(el, "mouseenter", () => toggle(true), { passive: true });
-  useEventListener(el, "mouseleave", () => toggle(false), { passive: true });
-  return isHovered;
-}
-function useElementSize(target, initialSize = { width: 0, height: 0 }, options = {}) {
-  const { window: window2 = defaultWindow, box = "content-box" } = options;
-  const isSVG = computed(() => {
-    var _a2, _b;
-    return (_b = (_a2 = unrefElement(target)) == null ? void 0 : _a2.namespaceURI) == null ? void 0 : _b.includes("svg");
-  });
-  const width = ref(initialSize.width);
-  const height = ref(initialSize.height);
-  useResizeObserver(target, ([entry]) => {
-    const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;
-    if (window2 && isSVG.value) {
-      const $elem = unrefElement(target);
-      if ($elem) {
-        const styles = window2.getComputedStyle($elem);
-        width.value = parseFloat(styles.width);
-        height.value = parseFloat(styles.height);
-      }
-    } else {
-      if (boxSize) {
-        const formatBoxSize = Array.isArray(boxSize) ? boxSize : [boxSize];
-        width.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);
-        height.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);
-      } else {
-        width.value = entry.contentRect.width;
-        height.value = entry.contentRect.height;
-      }
-    }
-  }, options);
-  watch(() => unrefElement(target), (ele) => {
-    width.value = ele ? initialSize.width : 0;
-    height.value = ele ? initialSize.height : 0;
-  });
-  return {
-    width,
-    height
-  };
-}
-function useElementVisibility(element, { window: window2 = defaultWindow, scrollTarget } = {}) {
-  const elementIsVisible = ref(false);
-  const testBounding = () => {
-    if (!window2)
-      return;
-    const document2 = window2.document;
-    const el = unrefElement(element);
-    if (!el) {
-      elementIsVisible.value = false;
-    } else {
-      const rect = el.getBoundingClientRect();
-      elementIsVisible.value = rect.top <= (window2.innerHeight || document2.documentElement.clientHeight) && rect.left <= (window2.innerWidth || document2.documentElement.clientWidth) && rect.bottom >= 0 && rect.right >= 0;
-    }
-  };
-  watch(() => unrefElement(element), () => testBounding(), { immediate: true, flush: "post" });
-  if (window2) {
-    useEventListener(scrollTarget || window2, "scroll", testBounding, {
-      capture: false,
-      passive: true
-    });
-  }
-  return elementIsVisible;
-}
-var events = /* @__PURE__ */ new Map();
-function useEventBus(key) {
-  const scope = getCurrentScope();
-  function on(listener) {
-    var _a2;
-    const listeners = events.get(key) || [];
-    listeners.push(listener);
-    events.set(key, listeners);
-    const _off = () => off(listener);
-    (_a2 = scope == null ? void 0 : scope.cleanups) == null ? void 0 : _a2.push(_off);
-    return _off;
-  }
-  function once(listener) {
-    function _listener(...args) {
-      off(_listener);
-      listener(...args);
-    }
-    return on(_listener);
-  }
-  function off(listener) {
-    const listeners = events.get(key);
-    if (!listeners)
-      return;
-    const index = listeners.indexOf(listener);
-    if (index > -1)
-      listeners.splice(index, 1);
-    if (!listeners.length)
-      events.delete(key);
-  }
-  function reset() {
-    events.delete(key);
-  }
-  function emit(event, payload) {
-    var _a2;
-    (_a2 = events.get(key)) == null ? void 0 : _a2.forEach((v) => v(event, payload));
-  }
-  return { on, once, off, emit, reset };
-}
-function useEventSource(url, events2 = [], options = {}) {
-  const event = ref(null);
-  const data = ref(null);
-  const status = ref("CONNECTING");
-  const eventSource = ref(null);
-  const error = ref(null);
-  const {
-    withCredentials = false
-  } = options;
-  const close = () => {
-    if (eventSource.value) {
-      eventSource.value.close();
-      eventSource.value = null;
-      status.value = "CLOSED";
-    }
-  };
-  const es = new EventSource(url, { withCredentials });
-  eventSource.value = es;
-  es.onopen = () => {
-    status.value = "OPEN";
-    error.value = null;
-  };
-  es.onerror = (e) => {
-    status.value = "CLOSED";
-    error.value = e;
-  };
-  es.onmessage = (e) => {
-    event.value = null;
-    data.value = e.data;
-  };
-  for (const event_name of events2) {
-    useEventListener(es, event_name, (e) => {
-      event.value = event_name;
-      data.value = e.data || null;
-    });
-  }
-  tryOnScopeDispose(() => {
-    close();
-  });
-  return {
-    eventSource,
-    event,
-    data,
-    status,
-    error,
-    close
-  };
-}
-function useEyeDropper(options = {}) {
-  const { initialValue = "" } = options;
-  const isSupported = useSupported(() => typeof window !== "undefined" && "EyeDropper" in window);
-  const sRGBHex = ref(initialValue);
-  async function open(openOptions) {
-    if (!isSupported.value)
-      return;
-    const eyeDropper = new window.EyeDropper();
-    const result = await eyeDropper.open(openOptions);
-    sRGBHex.value = result.sRGBHex;
-    return result;
-  }
-  return { isSupported, sRGBHex, open };
-}
-function useFavicon(newIcon = null, options = {}) {
-  const {
-    baseUrl = "",
-    rel = "icon",
-    document: document2 = defaultDocument
-  } = options;
-  const favicon = resolveRef(newIcon);
-  const applyIcon = (icon) => {
-    document2 == null ? void 0 : document2.head.querySelectorAll(`link[rel*="${rel}"]`).forEach((el) => el.href = `${baseUrl}${icon}`);
-  };
-  watch(favicon, (i, o) => {
-    if (isString(i) && i !== o)
-      applyIcon(i);
-  }, { immediate: true });
-  return favicon;
-}
-var __defProp$d = Object.defineProperty;
-var __defProps$32 = Object.defineProperties;
-var __getOwnPropDescs$32 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$e = Object.getOwnPropertySymbols;
-var __hasOwnProp$e = Object.prototype.hasOwnProperty;
-var __propIsEnum$e = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$d = (obj, key, value) => key in obj ? __defProp$d(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$d = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$e.call(b, prop))
-      __defNormalProp$d(a, prop, b[prop]);
-  if (__getOwnPropSymbols$e)
-    for (var prop of __getOwnPropSymbols$e(b)) {
-      if (__propIsEnum$e.call(b, prop))
-        __defNormalProp$d(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$32 = (a, b) => __defProps$32(a, __getOwnPropDescs$32(b));
-var payloadMapping = {
-  json: "application/json",
-  text: "text/plain"
-};
-function isFetchOptions(obj) {
-  return obj && containsProp(obj, "immediate", "refetch", "initialData", "timeout", "beforeFetch", "afterFetch", "onFetchError", "fetch");
-}
-function isAbsoluteURL(url) {
-  return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
-}
-function headersToObject(headers) {
-  if (typeof Headers !== "undefined" && headers instanceof Headers)
-    return Object.fromEntries([...headers.entries()]);
-  return headers;
-}
-function combineCallbacks(combination, ...callbacks) {
-  if (combination === "overwrite") {
-    return async (ctx) => {
-      const callback = callbacks[callbacks.length - 1];
-      if (callback !== void 0)
-        await callback(ctx);
-      return ctx;
-    };
-  } else {
-    return async (ctx) => {
-      await callbacks.reduce((prevCallback, callback) => prevCallback.then(async () => {
-        if (callback)
-          ctx = __spreadValues$d(__spreadValues$d({}, ctx), await callback(ctx));
-      }), Promise.resolve());
-      return ctx;
-    };
-  }
-}
-function createFetch(config = {}) {
-  const _combination = config.combination || "chain";
-  const _options = config.options || {};
-  const _fetchOptions = config.fetchOptions || {};
-  function useFactoryFetch(url, ...args) {
-    const computedUrl = computed(() => {
-      const baseUrl = resolveUnref(config.baseUrl);
-      const targetUrl = resolveUnref(url);
-      return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;
-    });
-    let options = _options;
-    let fetchOptions = _fetchOptions;
-    if (args.length > 0) {
-      if (isFetchOptions(args[0])) {
-        options = __spreadProps$32(__spreadValues$d(__spreadValues$d({}, options), args[0]), {
-          beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),
-          afterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),
-          onFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)
-        });
-      } else {
-        fetchOptions = __spreadProps$32(__spreadValues$d(__spreadValues$d({}, fetchOptions), args[0]), {
-          headers: __spreadValues$d(__spreadValues$d({}, headersToObject(fetchOptions.headers) || {}), headersToObject(args[0].headers) || {})
-        });
-      }
-    }
-    if (args.length > 1 && isFetchOptions(args[1])) {
-      options = __spreadProps$32(__spreadValues$d(__spreadValues$d({}, options), args[1]), {
-        beforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),
-        afterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),
-        onFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)
-      });
-    }
-    return useFetch(computedUrl, fetchOptions, options);
-  }
-  return useFactoryFetch;
-}
-function useFetch(url, ...args) {
-  var _a2;
-  const supportsAbort = typeof AbortController === "function";
-  let fetchOptions = {};
-  let options = { immediate: true, refetch: false, timeout: 0 };
-  const config = {
-    method: "GET",
-    type: "text",
-    payload: void 0
-  };
-  if (args.length > 0) {
-    if (isFetchOptions(args[0]))
-      options = __spreadValues$d(__spreadValues$d({}, options), args[0]);
-    else
-      fetchOptions = args[0];
-  }
-  if (args.length > 1) {
-    if (isFetchOptions(args[1]))
-      options = __spreadValues$d(__spreadValues$d({}, options), args[1]);
-  }
-  const {
-    fetch = (_a2 = defaultWindow) == null ? void 0 : _a2.fetch,
-    initialData,
-    timeout
-  } = options;
-  const responseEvent = createEventHook();
-  const errorEvent = createEventHook();
-  const finallyEvent = createEventHook();
-  const isFinished = ref(false);
-  const isFetching = ref(false);
-  const aborted = ref(false);
-  const statusCode = ref(null);
-  const response = shallowRef(null);
-  const error = shallowRef(null);
-  const data = shallowRef(initialData);
-  const canAbort = computed(() => supportsAbort && isFetching.value);
-  let controller;
-  let timer;
-  const abort = () => {
-    if (supportsAbort && controller) {
-      controller.abort();
-      controller = void 0;
-    }
-  };
-  const loading = (isLoading) => {
-    isFetching.value = isLoading;
-    isFinished.value = !isLoading;
-  };
-  if (timeout)
-    timer = useTimeoutFn(abort, timeout, { immediate: false });
-  const execute = async (throwOnFailed = false) => {
-    var _a22;
-    loading(true);
-    error.value = null;
-    statusCode.value = null;
-    aborted.value = false;
-    if (supportsAbort) {
-      abort();
-      controller = new AbortController();
-      controller.signal.onabort = () => aborted.value = true;
-      fetchOptions = __spreadProps$32(__spreadValues$d({}, fetchOptions), {
-        signal: controller.signal
-      });
-    }
-    const defaultFetchOptions = {
-      method: config.method,
-      headers: {}
-    };
-    if (config.payload) {
-      const headers = headersToObject(defaultFetchOptions.headers);
-      if (config.payloadType)
-        headers["Content-Type"] = (_a22 = payloadMapping[config.payloadType]) != null ? _a22 : config.payloadType;
-      const payload = resolveUnref(config.payload);
-      defaultFetchOptions.body = config.payloadType === "json" ? JSON.stringify(payload) : payload;
-    }
-    let isCanceled = false;
-    const context = {
-      url: resolveUnref(url),
-      options: __spreadValues$d(__spreadValues$d({}, defaultFetchOptions), fetchOptions),
-      cancel: () => {
-        isCanceled = true;
-      }
-    };
-    if (options.beforeFetch)
-      Object.assign(context, await options.beforeFetch(context));
-    if (isCanceled || !fetch) {
-      loading(false);
-      return Promise.resolve(null);
-    }
-    let responseData = null;
-    if (timer)
-      timer.start();
-    return new Promise((resolve, reject) => {
-      var _a3;
-      fetch(context.url, __spreadProps$32(__spreadValues$d(__spreadValues$d({}, defaultFetchOptions), context.options), {
-        headers: __spreadValues$d(__spreadValues$d({}, headersToObject(defaultFetchOptions.headers)), headersToObject((_a3 = context.options) == null ? void 0 : _a3.headers))
-      })).then(async (fetchResponse) => {
-        response.value = fetchResponse;
-        statusCode.value = fetchResponse.status;
-        responseData = await fetchResponse[config.type]();
-        if (options.afterFetch && statusCode.value >= 200 && statusCode.value < 300)
-          ({ data: responseData } = await options.afterFetch({ data: responseData, response: fetchResponse }));
-        data.value = responseData;
-        if (!fetchResponse.ok)
-          throw new Error(fetchResponse.statusText);
-        responseEvent.trigger(fetchResponse);
-        return resolve(fetchResponse);
-      }).catch(async (fetchError) => {
-        let errorData = fetchError.message || fetchError.name;
-        if (options.onFetchError)
-          ({ data: responseData, error: errorData } = await options.onFetchError({ data: responseData, error: fetchError, response: response.value }));
-        data.value = responseData;
-        error.value = errorData;
-        errorEvent.trigger(fetchError);
-        if (throwOnFailed)
-          return reject(fetchError);
-        return resolve(null);
-      }).finally(() => {
-        loading(false);
-        if (timer)
-          timer.stop();
-        finallyEvent.trigger(null);
-      });
-    });
-  };
-  const refetch = resolveRef(options.refetch);
-  watch([
-    refetch,
-    resolveRef(url)
-  ], ([refetch2]) => refetch2 && execute(), { deep: true });
-  const shell = {
-    isFinished,
-    statusCode,
-    response,
-    error,
-    data,
-    isFetching,
-    canAbort,
-    aborted,
-    abort,
-    execute,
-    onFetchResponse: responseEvent.on,
-    onFetchError: errorEvent.on,
-    onFetchFinally: finallyEvent.on,
-    get: setMethod("GET"),
-    put: setMethod("PUT"),
-    post: setMethod("POST"),
-    delete: setMethod("DELETE"),
-    patch: setMethod("PATCH"),
-    head: setMethod("HEAD"),
-    options: setMethod("OPTIONS"),
-    json: setType("json"),
-    text: setType("text"),
-    blob: setType("blob"),
-    arrayBuffer: setType("arrayBuffer"),
-    formData: setType("formData")
-  };
-  function setMethod(method) {
-    return (payload, payloadType) => {
-      if (!isFetching.value) {
-        config.method = method;
-        config.payload = payload;
-        config.payloadType = payloadType;
-        if (isRef(config.payload)) {
-          watch([
-            refetch,
-            resolveRef(config.payload)
-          ], ([refetch2]) => refetch2 && execute(), { deep: true });
-        }
-        const rawPayload = resolveUnref(config.payload);
-        if (!payloadType && rawPayload && Object.getPrototypeOf(rawPayload) === Object.prototype && !(rawPayload instanceof FormData))
-          config.payloadType = "json";
-        return __spreadProps$32(__spreadValues$d({}, shell), {
-          then(onFulfilled, onRejected) {
-            return waitUntilFinished().then(onFulfilled, onRejected);
-          }
-        });
-      }
-      return void 0;
-    };
-  }
-  function waitUntilFinished() {
-    return new Promise((resolve, reject) => {
-      until(isFinished).toBe(true).then(() => resolve(shell)).catch((error2) => reject(error2));
-    });
-  }
-  function setType(type) {
-    return () => {
-      if (!isFetching.value) {
-        config.type = type;
-        return __spreadProps$32(__spreadValues$d({}, shell), {
-          then(onFulfilled, onRejected) {
-            return waitUntilFinished().then(onFulfilled, onRejected);
-          }
-        });
-      }
-      return void 0;
-    };
-  }
-  if (options.immediate)
-    setTimeout(execute, 0);
-  return __spreadProps$32(__spreadValues$d({}, shell), {
-    then(onFulfilled, onRejected) {
-      return waitUntilFinished().then(onFulfilled, onRejected);
-    }
-  });
-}
-function joinPaths(start, end) {
-  if (!start.endsWith("/") && !end.startsWith("/"))
-    return `${start}/${end}`;
-  return `${start}${end}`;
-}
-var __defProp$c = Object.defineProperty;
-var __getOwnPropSymbols$d = Object.getOwnPropertySymbols;
-var __hasOwnProp$d = Object.prototype.hasOwnProperty;
-var __propIsEnum$d = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$c = (obj, key, value) => key in obj ? __defProp$c(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$c = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$d.call(b, prop))
-      __defNormalProp$c(a, prop, b[prop]);
-  if (__getOwnPropSymbols$d)
-    for (var prop of __getOwnPropSymbols$d(b)) {
-      if (__propIsEnum$d.call(b, prop))
-        __defNormalProp$c(a, prop, b[prop]);
-    }
-  return a;
-};
-var DEFAULT_OPTIONS = {
-  multiple: true,
-  accept: "*"
-};
-function useFileDialog(options = {}) {
-  const {
-    document: document2 = defaultDocument
-  } = options;
-  const files = ref(null);
-  let input;
-  if (document2) {
-    input = document2.createElement("input");
-    input.type = "file";
-    input.onchange = (event) => {
-      const result = event.target;
-      files.value = result.files;
-    };
-  }
-  const open = (localOptions) => {
-    if (!input)
-      return;
-    const _options = __spreadValues$c(__spreadValues$c(__spreadValues$c({}, DEFAULT_OPTIONS), options), localOptions);
-    input.multiple = _options.multiple;
-    input.accept = _options.accept;
-    if (hasOwn(_options, "capture"))
-      input.capture = _options.capture;
-    input.click();
-  };
-  const reset = () => {
-    files.value = null;
-    if (input)
-      input.value = "";
-  };
-  return {
-    files: readonly(files),
-    open,
-    reset
-  };
-}
-var __defProp$b = Object.defineProperty;
-var __getOwnPropSymbols$c = Object.getOwnPropertySymbols;
-var __hasOwnProp$c = Object.prototype.hasOwnProperty;
-var __propIsEnum$c = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$b = (obj, key, value) => key in obj ? __defProp$b(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$b = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$c.call(b, prop))
-      __defNormalProp$b(a, prop, b[prop]);
-  if (__getOwnPropSymbols$c)
-    for (var prop of __getOwnPropSymbols$c(b)) {
-      if (__propIsEnum$c.call(b, prop))
-        __defNormalProp$b(a, prop, b[prop]);
-    }
-  return a;
-};
-function useFileSystemAccess(options = {}) {
-  const {
-    window: _window = defaultWindow,
-    dataType = "Text"
-  } = unref(options);
-  const window2 = _window;
-  const isSupported = useSupported(() => window2 && "showSaveFilePicker" in window2 && "showOpenFilePicker" in window2);
-  const fileHandle = ref();
-  const data = ref();
-  const file = ref();
-  const fileName = computed(() => {
-    var _a2, _b;
-    return (_b = (_a2 = file.value) == null ? void 0 : _a2.name) != null ? _b : "";
-  });
-  const fileMIME = computed(() => {
-    var _a2, _b;
-    return (_b = (_a2 = file.value) == null ? void 0 : _a2.type) != null ? _b : "";
-  });
-  const fileSize = computed(() => {
-    var _a2, _b;
-    return (_b = (_a2 = file.value) == null ? void 0 : _a2.size) != null ? _b : 0;
-  });
-  const fileLastModified = computed(() => {
-    var _a2, _b;
-    return (_b = (_a2 = file.value) == null ? void 0 : _a2.lastModified) != null ? _b : 0;
-  });
-  async function open(_options = {}) {
-    if (!isSupported.value)
-      return;
-    const [handle] = await window2.showOpenFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));
-    fileHandle.value = handle;
-    await updateFile();
-    await updateData();
-  }
-  async function create(_options = {}) {
-    if (!isSupported.value)
-      return;
-    fileHandle.value = await window2.showSaveFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));
-    data.value = void 0;
-    await updateFile();
-    await updateData();
-  }
-  async function save(_options = {}) {
-    if (!isSupported.value)
-      return;
-    if (!fileHandle.value)
-      return saveAs(_options);
-    if (data.value) {
-      const writableStream = await fileHandle.value.createWritable();
-      await writableStream.write(data.value);
-      await writableStream.close();
-    }
-    await updateFile();
-  }
-  async function saveAs(_options = {}) {
-    if (!isSupported.value)
-      return;
-    fileHandle.value = await window2.showSaveFilePicker(__spreadValues$b(__spreadValues$b({}, unref(options)), _options));
-    if (data.value) {
-      const writableStream = await fileHandle.value.createWritable();
-      await writableStream.write(data.value);
-      await writableStream.close();
-    }
-    await updateFile();
-  }
-  async function updateFile() {
-    var _a2;
-    file.value = await ((_a2 = fileHandle.value) == null ? void 0 : _a2.getFile());
-  }
-  async function updateData() {
-    var _a2, _b;
-    if (unref(dataType) === "Text")
-      data.value = await ((_a2 = file.value) == null ? void 0 : _a2.text());
-    if (unref(dataType) === "ArrayBuffer")
-      data.value = await ((_b = file.value) == null ? void 0 : _b.arrayBuffer());
-    if (unref(dataType) === "Blob")
-      data.value = file.value;
-  }
-  watch(() => unref(dataType), updateData);
-  return {
-    isSupported,
-    data,
-    file,
-    fileName,
-    fileMIME,
-    fileSize,
-    fileLastModified,
-    open,
-    create,
-    save,
-    saveAs,
-    updateData
-  };
-}
-function useFocus(target, options = {}) {
-  const { initialValue = false } = options;
-  const innerFocused = ref(false);
-  const targetElement = computed(() => unrefElement(target));
-  useEventListener(targetElement, "focus", () => innerFocused.value = true);
-  useEventListener(targetElement, "blur", () => innerFocused.value = false);
-  const focused = computed({
-    get: () => innerFocused.value,
-    set(value) {
-      var _a2, _b;
-      if (!value && innerFocused.value)
-        (_a2 = targetElement.value) == null ? void 0 : _a2.blur();
-      else if (value && !innerFocused.value)
-        (_b = targetElement.value) == null ? void 0 : _b.focus();
-    }
-  });
-  watch(targetElement, () => {
-    focused.value = initialValue;
-  }, { immediate: true, flush: "post" });
-  return { focused };
-}
-function useFocusWithin(target, options = {}) {
-  const activeElement = useActiveElement(options);
-  const targetElement = computed(() => unrefElement(target));
-  const focused = computed(() => targetElement.value && activeElement.value ? targetElement.value.contains(activeElement.value) : false);
-  return { focused };
-}
-function useFps(options) {
-  var _a2;
-  const fps = ref(0);
-  if (typeof performance === "undefined")
-    return fps;
-  const every = (_a2 = options == null ? void 0 : options.every) != null ? _a2 : 10;
-  let last = performance.now();
-  let ticks = 0;
-  useRafFn(() => {
-    ticks += 1;
-    if (ticks >= every) {
-      const now2 = performance.now();
-      const diff = now2 - last;
-      fps.value = Math.round(1e3 / (diff / ticks));
-      last = now2;
-      ticks = 0;
-    }
-  });
-  return fps;
-}
-var functionsMap = [
-  [
-    "requestFullscreen",
-    "exitFullscreen",
-    "fullscreenElement",
-    "fullscreenEnabled",
-    "fullscreenchange",
-    "fullscreenerror"
-  ],
-  [
-    "webkitRequestFullscreen",
-    "webkitExitFullscreen",
-    "webkitFullscreenElement",
-    "webkitFullscreenEnabled",
-    "webkitfullscreenchange",
-    "webkitfullscreenerror"
-  ],
-  [
-    "webkitRequestFullScreen",
-    "webkitCancelFullScreen",
-    "webkitCurrentFullScreenElement",
-    "webkitCancelFullScreen",
-    "webkitfullscreenchange",
-    "webkitfullscreenerror"
-  ],
-  [
-    "mozRequestFullScreen",
-    "mozCancelFullScreen",
-    "mozFullScreenElement",
-    "mozFullScreenEnabled",
-    "mozfullscreenchange",
-    "mozfullscreenerror"
-  ],
-  [
-    "msRequestFullscreen",
-    "msExitFullscreen",
-    "msFullscreenElement",
-    "msFullscreenEnabled",
-    "MSFullscreenChange",
-    "MSFullscreenError"
-  ]
-];
-function useFullscreen(target, options = {}) {
-  const { document: document2 = defaultDocument, autoExit = false } = options;
-  const targetRef = target || (document2 == null ? void 0 : document2.querySelector("html"));
-  const isFullscreen = ref(false);
-  let map = functionsMap[0];
-  const isSupported = useSupported(() => {
-    if (!document2) {
-      return false;
-    } else {
-      for (const m of functionsMap) {
-        if (m[1] in document2) {
-          map = m;
-          return true;
-        }
-      }
-    }
-    return false;
-  });
-  const [REQUEST, EXIT, ELEMENT, , EVENT] = map;
-  async function exit() {
-    if (!isSupported.value)
-      return;
-    if (document2 == null ? void 0 : document2[ELEMENT])
-      await document2[EXIT]();
-    isFullscreen.value = false;
-  }
-  async function enter() {
-    if (!isSupported.value)
-      return;
-    await exit();
-    const target2 = unrefElement(targetRef);
-    if (target2) {
-      await target2[REQUEST]();
-      isFullscreen.value = true;
-    }
-  }
-  async function toggle() {
-    if (isFullscreen.value)
-      await exit();
-    else
-      await enter();
-  }
-  if (document2) {
-    useEventListener(document2, EVENT, () => {
-      isFullscreen.value = !!(document2 == null ? void 0 : document2[ELEMENT]);
-    }, false);
-  }
-  if (autoExit)
-    tryOnScopeDispose(exit);
-  return {
-    isSupported,
-    isFullscreen,
-    enter,
-    exit,
-    toggle
-  };
-}
-function mapGamepadToXbox360Controller(gamepad) {
-  return computed(() => {
-    if (gamepad.value) {
-      return {
-        buttons: {
-          a: gamepad.value.buttons[0],
-          b: gamepad.value.buttons[1],
-          x: gamepad.value.buttons[2],
-          y: gamepad.value.buttons[3]
-        },
-        bumper: {
-          left: gamepad.value.buttons[4],
-          right: gamepad.value.buttons[5]
-        },
-        triggers: {
-          left: gamepad.value.buttons[6],
-          right: gamepad.value.buttons[7]
-        },
-        stick: {
-          left: {
-            horizontal: gamepad.value.axes[0],
-            vertical: gamepad.value.axes[1],
-            button: gamepad.value.buttons[10]
-          },
-          right: {
-            horizontal: gamepad.value.axes[2],
-            vertical: gamepad.value.axes[3],
-            button: gamepad.value.buttons[11]
-          }
-        },
-        dpad: {
-          up: gamepad.value.buttons[12],
-          down: gamepad.value.buttons[13],
-          left: gamepad.value.buttons[14],
-          right: gamepad.value.buttons[15]
-        },
-        back: gamepad.value.buttons[8],
-        start: gamepad.value.buttons[9]
-      };
-    }
-    return null;
-  });
-}
-function useGamepad(options = {}) {
-  const {
-    navigator = defaultNavigator
-  } = options;
-  const isSupported = useSupported(() => navigator && "getGamepads" in navigator);
-  const gamepads = ref([]);
-  const onConnectedHook = createEventHook();
-  const onDisconnectedHook = createEventHook();
-  const stateFromGamepad = (gamepad) => {
-    const hapticActuators = [];
-    const vibrationActuator = "vibrationActuator" in gamepad ? gamepad.vibrationActuator : null;
-    if (vibrationActuator)
-      hapticActuators.push(vibrationActuator);
-    if (gamepad.hapticActuators)
-      hapticActuators.push(...gamepad.hapticActuators);
-    return {
-      id: gamepad.id,
-      hapticActuators,
-      index: gamepad.index,
-      mapping: gamepad.mapping,
-      connected: gamepad.connected,
-      timestamp: gamepad.timestamp,
-      axes: gamepad.axes.map((axes) => axes),
-      buttons: gamepad.buttons.map((button) => ({ pressed: button.pressed, touched: button.touched, value: button.value }))
-    };
-  };
-  const updateGamepadState = () => {
-    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];
-    for (let i = 0; i < _gamepads.length; ++i) {
-      const gamepad = _gamepads[i];
-      if (gamepad) {
-        const index = gamepads.value.findIndex(({ index: index2 }) => index2 === gamepad.index);
-        if (index > -1)
-          gamepads.value[index] = stateFromGamepad(gamepad);
-      }
-    }
-  };
-  const { isActive, pause, resume } = useRafFn(updateGamepadState);
-  const onGamepadConnected = (gamepad) => {
-    if (!gamepads.value.some(({ index }) => index === gamepad.index)) {
-      gamepads.value.push(stateFromGamepad(gamepad));
-      onConnectedHook.trigger(gamepad.index);
-    }
-    resume();
-  };
-  const onGamepadDisconnected = (gamepad) => {
-    gamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);
-    onDisconnectedHook.trigger(gamepad.index);
-  };
-  useEventListener("gamepadconnected", (e) => onGamepadConnected(e.gamepad));
-  useEventListener("gamepaddisconnected", (e) => onGamepadDisconnected(e.gamepad));
-  tryOnMounted(() => {
-    const _gamepads = (navigator == null ? void 0 : navigator.getGamepads()) || [];
-    if (_gamepads) {
-      for (let i = 0; i < _gamepads.length; ++i) {
-        const gamepad = _gamepads[i];
-        if (gamepad)
-          onGamepadConnected(gamepad);
-      }
-    }
-  });
-  pause();
-  return {
-    isSupported,
-    onConnected: onConnectedHook.on,
-    onDisconnected: onDisconnectedHook.on,
-    gamepads,
-    pause,
-    resume,
-    isActive
-  };
-}
-function useGeolocation(options = {}) {
-  const {
-    enableHighAccuracy = true,
-    maximumAge = 3e4,
-    timeout = 27e3,
-    navigator = defaultNavigator,
-    immediate = true
-  } = options;
-  const isSupported = useSupported(() => navigator && "geolocation" in navigator);
-  const locatedAt = ref(null);
-  const error = ref(null);
-  const coords = ref({
-    accuracy: 0,
-    latitude: Infinity,
-    longitude: Infinity,
-    altitude: null,
-    altitudeAccuracy: null,
-    heading: null,
-    speed: null
-  });
-  function updatePosition(position) {
-    locatedAt.value = position.timestamp;
-    coords.value = position.coords;
-    error.value = null;
-  }
-  let watcher;
-  function resume() {
-    if (isSupported.value) {
-      watcher = navigator.geolocation.watchPosition(updatePosition, (err) => error.value = err, {
-        enableHighAccuracy,
-        maximumAge,
-        timeout
-      });
-    }
-  }
-  if (immediate)
-    resume();
-  function pause() {
-    if (watcher && navigator)
-      navigator.geolocation.clearWatch(watcher);
-  }
-  tryOnScopeDispose(() => {
-    pause();
-  });
-  return {
-    isSupported,
-    coords,
-    locatedAt,
-    error,
-    resume,
-    pause
-  };
-}
-var defaultEvents$1 = ["mousemove", "mousedown", "resize", "keydown", "touchstart", "wheel"];
-var oneMinute = 6e4;
-function useIdle(timeout = oneMinute, options = {}) {
-  const {
-    initialState = false,
-    listenForVisibilityChange = true,
-    events: events2 = defaultEvents$1,
-    window: window2 = defaultWindow,
-    eventFilter = throttleFilter(50)
-  } = options;
-  const idle = ref(initialState);
-  const lastActive = ref(timestamp());
-  let timer;
-  const onEvent = createFilterWrapper(eventFilter, () => {
-    idle.value = false;
-    lastActive.value = timestamp();
-    clearTimeout(timer);
-    timer = setTimeout(() => idle.value = true, timeout);
-  });
-  if (window2) {
-    const document2 = window2.document;
-    for (const event of events2)
-      useEventListener(window2, event, onEvent, { passive: true });
-    if (listenForVisibilityChange) {
-      useEventListener(document2, "visibilitychange", () => {
-        if (!document2.hidden)
-          onEvent();
-      });
-    }
-  }
-  timer = setTimeout(() => idle.value = true, timeout);
-  return { idle, lastActive };
-}
-var __defProp$a = Object.defineProperty;
-var __getOwnPropSymbols$b2 = Object.getOwnPropertySymbols;
-var __hasOwnProp$b2 = Object.prototype.hasOwnProperty;
-var __propIsEnum$b2 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$a = (obj, key, value) => key in obj ? __defProp$a(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$a = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$b2.call(b, prop))
-      __defNormalProp$a(a, prop, b[prop]);
-  if (__getOwnPropSymbols$b2)
-    for (var prop of __getOwnPropSymbols$b2(b)) {
-      if (__propIsEnum$b2.call(b, prop))
-        __defNormalProp$a(a, prop, b[prop]);
-    }
-  return a;
-};
-async function loadImage(options) {
-  return new Promise((resolve, reject) => {
-    const img = new Image();
-    const { src, srcset, sizes } = options;
-    img.src = src;
-    if (srcset)
-      img.srcset = srcset;
-    if (sizes)
-      img.sizes = sizes;
-    img.onload = () => resolve(img);
-    img.onerror = reject;
-  });
-}
-var useImage = (options, asyncStateOptions = {}) => {
-  const state = useAsyncState(() => loadImage(resolveUnref(options)), void 0, __spreadValues$a({
-    resetOnExecute: true
-  }, asyncStateOptions));
-  watch(() => resolveUnref(options), () => state.execute(asyncStateOptions.delay), { deep: true });
-  return state;
-};
-var ARRIVED_STATE_THRESHOLD_PIXELS = 1;
-function useScroll(element, options = {}) {
-  const {
-    throttle = 0,
-    idle = 200,
-    onStop = noop,
-    onScroll = noop,
-    offset = {
-      left: 0,
-      right: 0,
-      top: 0,
-      bottom: 0
-    },
-    eventListenerOptions = {
-      capture: false,
-      passive: true
-    },
-    behavior = "auto"
-  } = options;
-  const internalX = ref(0);
-  const internalY = ref(0);
-  const x = computed({
-    get() {
-      return internalX.value;
-    },
-    set(x2) {
-      scrollTo(x2, void 0);
-    }
-  });
-  const y = computed({
-    get() {
-      return internalY.value;
-    },
-    set(y2) {
-      scrollTo(void 0, y2);
-    }
-  });
-  function scrollTo(_x, _y) {
-    var _a2, _b, _c;
-    const _element = resolveUnref(element);
-    if (!_element)
-      return;
-    (_c = _element instanceof Document ? document.body : _element) == null ? void 0 : _c.scrollTo({
-      top: (_a2 = resolveUnref(_y)) != null ? _a2 : y.value,
-      left: (_b = resolveUnref(_x)) != null ? _b : x.value,
-      behavior: resolveUnref(behavior)
-    });
-  }
-  const isScrolling = ref(false);
-  const arrivedState = reactive({
-    left: true,
-    right: false,
-    top: true,
-    bottom: false
-  });
-  const directions = reactive({
-    left: false,
-    right: false,
-    top: false,
-    bottom: false
-  });
-  const onScrollEnd = (e) => {
-    if (!isScrolling.value)
-      return;
-    isScrolling.value = false;
-    directions.left = false;
-    directions.right = false;
-    directions.top = false;
-    directions.bottom = false;
-    onStop(e);
-  };
-  const onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);
-  const onScrollHandler = (e) => {
-    const eventTarget = e.target === document ? e.target.documentElement : e.target;
-    const scrollLeft = eventTarget.scrollLeft;
-    directions.left = scrollLeft < internalX.value;
-    directions.right = scrollLeft > internalY.value;
-    arrivedState.left = scrollLeft <= 0 + (offset.left || 0);
-    arrivedState.right = scrollLeft + eventTarget.clientWidth >= eventTarget.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;
-    internalX.value = scrollLeft;
-    let scrollTop = eventTarget.scrollTop;
-    if (e.target === document && !scrollTop)
-      scrollTop = document.body.scrollTop;
-    directions.top = scrollTop < internalY.value;
-    directions.bottom = scrollTop > internalY.value;
-    arrivedState.top = scrollTop <= 0 + (offset.top || 0);
-    arrivedState.bottom = scrollTop + eventTarget.clientHeight >= eventTarget.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;
-    internalY.value = scrollTop;
-    isScrolling.value = true;
-    onScrollEndDebounced(e);
-    onScroll(e);
-  };
-  useEventListener(element, "scroll", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);
-  useEventListener(element, "scrollend", onScrollEnd, eventListenerOptions);
-  return {
-    x,
-    y,
-    isScrolling,
-    arrivedState,
-    directions
-  };
-}
-var __defProp$92 = Object.defineProperty;
-var __defProps$22 = Object.defineProperties;
-var __getOwnPropDescs$22 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$a2 = Object.getOwnPropertySymbols;
-var __hasOwnProp$a2 = Object.prototype.hasOwnProperty;
-var __propIsEnum$a2 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$92 = (obj, key, value) => key in obj ? __defProp$92(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$92 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$a2.call(b, prop))
-      __defNormalProp$92(a, prop, b[prop]);
-  if (__getOwnPropSymbols$a2)
-    for (var prop of __getOwnPropSymbols$a2(b)) {
-      if (__propIsEnum$a2.call(b, prop))
-        __defNormalProp$92(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$22 = (a, b) => __defProps$22(a, __getOwnPropDescs$22(b));
-function useInfiniteScroll(element, onLoadMore, options = {}) {
-  var _a2, _b;
-  const direction = (_a2 = options.direction) != null ? _a2 : "bottom";
-  const state = reactive(useScroll(element, __spreadProps$22(__spreadValues$92({}, options), {
-    offset: __spreadValues$92({
-      [direction]: (_b = options.distance) != null ? _b : 0
-    }, options.offset)
-  })));
-  watch(() => state.arrivedState[direction], async (v) => {
-    var _a22, _b2;
-    if (v) {
-      const elem = resolveUnref(element);
-      const previous = {
-        height: (_a22 = elem == null ? void 0 : elem.scrollHeight) != null ? _a22 : 0,
-        width: (_b2 = elem == null ? void 0 : elem.scrollWidth) != null ? _b2 : 0
-      };
-      await onLoadMore(state);
-      if (options.preserveScrollPosition && elem) {
-        nextTick(() => {
-          elem.scrollTo({
-            top: elem.scrollHeight - previous.height,
-            left: elem.scrollWidth - previous.width
-          });
-        });
-      }
-    }
-  });
-}
-function useIntersectionObserver(target, callback, options = {}) {
-  const {
-    root,
-    rootMargin = "0px",
-    threshold = 0.1,
-    window: window2 = defaultWindow
-  } = options;
-  const isSupported = useSupported(() => window2 && "IntersectionObserver" in window2);
-  let cleanup = noop;
-  const stopWatch = isSupported.value ? watch(() => ({
-    el: unrefElement(target),
-    root: unrefElement(root)
-  }), ({ el, root: root2 }) => {
-    cleanup();
-    if (!el)
-      return;
-    const observer = new IntersectionObserver(callback, {
-      root: root2,
-      rootMargin,
-      threshold
-    });
-    observer.observe(el);
-    cleanup = () => {
-      observer.disconnect();
-      cleanup = noop;
-    };
-  }, { immediate: true, flush: "post" }) : noop;
-  const stop = () => {
-    cleanup();
-    stopWatch();
-  };
-  tryOnScopeDispose(stop);
-  return {
-    isSupported,
-    stop
-  };
-}
-var defaultEvents = ["mousedown", "mouseup", "keydown", "keyup"];
-function useKeyModifier(modifier, options = {}) {
-  const {
-    events: events2 = defaultEvents,
-    document: document2 = defaultDocument,
-    initial = null
-  } = options;
-  const state = ref(initial);
-  if (document2) {
-    events2.forEach((listenerEvent) => {
-      useEventListener(document2, listenerEvent, (evt) => {
-        if (typeof evt.getModifierState === "function")
-          state.value = evt.getModifierState(modifier);
-      });
-    });
-  }
-  return state;
-}
-function useLocalStorage(key, initialValue, options = {}) {
-  const { window: window2 = defaultWindow } = options;
-  return useStorage(key, initialValue, window2 == null ? void 0 : window2.localStorage, options);
-}
-var DefaultMagicKeysAliasMap = {
-  ctrl: "control",
-  command: "meta",
-  cmd: "meta",
-  option: "alt",
-  up: "arrowup",
-  down: "arrowdown",
-  left: "arrowleft",
-  right: "arrowright"
-};
-function useMagicKeys(options = {}) {
-  const {
-    reactive: useReactive = false,
-    target = defaultWindow,
-    aliasMap = DefaultMagicKeysAliasMap,
-    passive = true,
-    onEventFired = noop
-  } = options;
-  const current = reactive(/* @__PURE__ */ new Set());
-  const obj = {
-    toJSON() {
-      return {};
-    },
-    current
-  };
-  const refs = useReactive ? reactive(obj) : obj;
-  const metaDeps = /* @__PURE__ */ new Set();
-  const usedKeys = /* @__PURE__ */ new Set();
-  function setRefs(key, value) {
-    if (key in refs) {
-      if (useReactive)
-        refs[key] = value;
-      else
-        refs[key].value = value;
-    }
-  }
-  function reset() {
-    current.clear();
-    for (const key of usedKeys)
-      setRefs(key, false);
-  }
-  function updateRefs(e, value) {
-    var _a2, _b;
-    const key = (_a2 = e.key) == null ? void 0 : _a2.toLowerCase();
-    const code = (_b = e.code) == null ? void 0 : _b.toLowerCase();
-    const values = [code, key].filter(Boolean);
-    if (key) {
-      if (value)
-        current.add(key);
-      else
-        current.delete(key);
-    }
-    for (const key2 of values) {
-      usedKeys.add(key2);
-      setRefs(key2, value);
-    }
-    if (key === "meta" && !value) {
-      metaDeps.forEach((key2) => {
-        current.delete(key2);
-        setRefs(key2, false);
-      });
-      metaDeps.clear();
-    } else if (typeof e.getModifierState === "function" && e.getModifierState("Meta") && value) {
-      [...current, ...values].forEach((key2) => metaDeps.add(key2));
-    }
-  }
-  useEventListener(target, "keydown", (e) => {
-    updateRefs(e, true);
-    return onEventFired(e);
-  }, { passive });
-  useEventListener(target, "keyup", (e) => {
-    updateRefs(e, false);
-    return onEventFired(e);
-  }, { passive });
-  useEventListener("blur", reset, { passive: true });
-  useEventListener("focus", reset, { passive: true });
-  const proxy = new Proxy(refs, {
-    get(target2, prop, rec) {
-      if (typeof prop !== "string")
-        return Reflect.get(target2, prop, rec);
-      prop = prop.toLowerCase();
-      if (prop in aliasMap)
-        prop = aliasMap[prop];
-      if (!(prop in refs)) {
-        if (/[+_-]/.test(prop)) {
-          const keys2 = prop.split(/[+_-]/g).map((i) => i.trim());
-          refs[prop] = computed(() => keys2.every((key) => unref(proxy[key])));
-        } else {
-          refs[prop] = ref(false);
-        }
-      }
-      const r = Reflect.get(target2, prop, rec);
-      return useReactive ? unref(r) : r;
-    }
-  });
-  return proxy;
-}
-var __defProp$82 = Object.defineProperty;
-var __getOwnPropSymbols$92 = Object.getOwnPropertySymbols;
-var __hasOwnProp$92 = Object.prototype.hasOwnProperty;
-var __propIsEnum$92 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$82 = (obj, key, value) => key in obj ? __defProp$82(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$82 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$92.call(b, prop))
-      __defNormalProp$82(a, prop, b[prop]);
-  if (__getOwnPropSymbols$92)
-    for (var prop of __getOwnPropSymbols$92(b)) {
-      if (__propIsEnum$92.call(b, prop))
-        __defNormalProp$82(a, prop, b[prop]);
-    }
-  return a;
-};
-function usingElRef(source, cb) {
-  if (resolveUnref(source))
-    cb(resolveUnref(source));
-}
-function timeRangeToArray(timeRanges) {
-  let ranges = [];
-  for (let i = 0; i < timeRanges.length; ++i)
-    ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];
-  return ranges;
-}
-function tracksToArray(tracks) {
-  return Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({ id, label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }));
-}
-var defaultOptions = {
-  src: "",
-  tracks: []
-};
-function useMediaControls(target, options = {}) {
-  options = __spreadValues$82(__spreadValues$82({}, defaultOptions), options);
-  const {
-    document: document2 = defaultDocument
-  } = options;
-  const currentTime = ref(0);
-  const duration = ref(0);
-  const seeking = ref(false);
-  const volume = ref(1);
-  const waiting = ref(false);
-  const ended = ref(false);
-  const playing = ref(false);
-  const rate = ref(1);
-  const stalled = ref(false);
-  const buffered = ref([]);
-  const tracks = ref([]);
-  const selectedTrack = ref(-1);
-  const isPictureInPicture = ref(false);
-  const muted = ref(false);
-  const supportsPictureInPicture = document2 && "pictureInPictureEnabled" in document2;
-  const sourceErrorEvent = createEventHook();
-  const disableTrack = (track) => {
-    usingElRef(target, (el) => {
-      if (track) {
-        const id = isNumber(track) ? track : track.id;
-        el.textTracks[id].mode = "disabled";
-      } else {
-        for (let i = 0; i < el.textTracks.length; ++i)
-          el.textTracks[i].mode = "disabled";
-      }
-      selectedTrack.value = -1;
-    });
-  };
-  const enableTrack = (track, disableTracks = true) => {
-    usingElRef(target, (el) => {
-      const id = isNumber(track) ? track : track.id;
-      if (disableTracks)
-        disableTrack();
-      el.textTracks[id].mode = "showing";
-      selectedTrack.value = id;
-    });
-  };
-  const togglePictureInPicture = () => {
-    return new Promise((resolve, reject) => {
-      usingElRef(target, async (el) => {
-        if (supportsPictureInPicture) {
-          if (!isPictureInPicture.value) {
-            el.requestPictureInPicture().then(resolve).catch(reject);
-          } else {
-            document2.exitPictureInPicture().then(resolve).catch(reject);
-          }
-        }
-      });
-    });
-  };
-  watchEffect(() => {
-    if (!document2)
-      return;
-    const el = resolveUnref(target);
-    if (!el)
-      return;
-    const src = resolveUnref(options.src);
-    let sources = [];
-    if (!src)
-      return;
-    if (isString(src))
-      sources = [{ src }];
-    else if (Array.isArray(src))
-      sources = src;
-    else if (isObject(src))
-      sources = [src];
-    el.querySelectorAll("source").forEach((e) => {
-      e.removeEventListener("error", sourceErrorEvent.trigger);
-      e.remove();
-    });
-    sources.forEach(({ src: src2, type }) => {
-      const source = document2.createElement("source");
-      source.setAttribute("src", src2);
-      source.setAttribute("type", type || "");
-      source.addEventListener("error", sourceErrorEvent.trigger);
-      el.appendChild(source);
-    });
-    el.load();
-  });
-  tryOnScopeDispose(() => {
-    const el = resolveUnref(target);
-    if (!el)
-      return;
-    el.querySelectorAll("source").forEach((e) => e.removeEventListener("error", sourceErrorEvent.trigger));
-  });
-  watch(volume, (vol) => {
-    const el = resolveUnref(target);
-    if (!el)
-      return;
-    el.volume = vol;
-  });
-  watch(muted, (mute) => {
-    const el = resolveUnref(target);
-    if (!el)
-      return;
-    el.muted = mute;
-  });
-  watch(rate, (rate2) => {
-    const el = resolveUnref(target);
-    if (!el)
-      return;
-    el.playbackRate = rate2;
-  });
-  watchEffect(() => {
-    if (!document2)
-      return;
-    const textTracks = resolveUnref(options.tracks);
-    const el = resolveUnref(target);
-    if (!textTracks || !textTracks.length || !el)
-      return;
-    el.querySelectorAll("track").forEach((e) => e.remove());
-    textTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {
-      const track = document2.createElement("track");
-      track.default = isDefault || false;
-      track.kind = kind;
-      track.label = label;
-      track.src = src;
-      track.srclang = srcLang;
-      if (track.default)
-        selectedTrack.value = i;
-      el.appendChild(track);
-    });
-  });
-  const { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {
-    const el = resolveUnref(target);
-    if (!el)
-      return;
-    el.currentTime = time;
-  });
-  const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {
-    const el = resolveUnref(target);
-    if (!el)
-      return;
-    isPlaying ? el.play() : el.pause();
-  });
-  useEventListener(target, "timeupdate", () => ignoreCurrentTimeUpdates(() => currentTime.value = resolveUnref(target).currentTime));
-  useEventListener(target, "durationchange", () => duration.value = resolveUnref(target).duration);
-  useEventListener(target, "progress", () => buffered.value = timeRangeToArray(resolveUnref(target).buffered));
-  useEventListener(target, "seeking", () => seeking.value = true);
-  useEventListener(target, "seeked", () => seeking.value = false);
-  useEventListener(target, "waiting", () => waiting.value = true);
-  useEventListener(target, "playing", () => {
-    waiting.value = false;
-    ended.value = false;
-  });
-  useEventListener(target, "ratechange", () => rate.value = resolveUnref(target).playbackRate);
-  useEventListener(target, "stalled", () => stalled.value = true);
-  useEventListener(target, "ended", () => ended.value = true);
-  useEventListener(target, "pause", () => ignorePlayingUpdates(() => playing.value = false));
-  useEventListener(target, "play", () => ignorePlayingUpdates(() => playing.value = true));
-  useEventListener(target, "enterpictureinpicture", () => isPictureInPicture.value = true);
-  useEventListener(target, "leavepictureinpicture", () => isPictureInPicture.value = false);
-  useEventListener(target, "volumechange", () => {
-    const el = resolveUnref(target);
-    if (!el)
-      return;
-    volume.value = el.volume;
-    muted.value = el.muted;
-  });
-  const listeners = [];
-  const stop = watch([target], () => {
-    const el = resolveUnref(target);
-    if (!el)
-      return;
-    stop();
-    listeners[0] = useEventListener(el.textTracks, "addtrack", () => tracks.value = tracksToArray(el.textTracks));
-    listeners[1] = useEventListener(el.textTracks, "removetrack", () => tracks.value = tracksToArray(el.textTracks));
-    listeners[2] = useEventListener(el.textTracks, "change", () => tracks.value = tracksToArray(el.textTracks));
-  });
-  tryOnScopeDispose(() => listeners.forEach((listener) => listener()));
-  return {
-    currentTime,
-    duration,
-    waiting,
-    seeking,
-    ended,
-    stalled,
-    buffered,
-    playing,
-    rate,
-    volume,
-    muted,
-    tracks,
-    selectedTrack,
-    enableTrack,
-    disableTrack,
-    supportsPictureInPicture,
-    togglePictureInPicture,
-    isPictureInPicture,
-    onSourceError: sourceErrorEvent.on
-  };
-}
-var getMapVue2Compat = () => {
-  const data = reactive({});
-  return {
-    get: (key) => data[key],
-    set: (key, value) => set(data, key, value),
-    has: (key) => hasOwn(data, key),
-    delete: (key) => del(data, key),
-    clear: () => {
-      Object.keys(data).forEach((key) => {
-        del(data, key);
-      });
-    }
-  };
-};
-function useMemoize(resolver, options) {
-  const initCache = () => {
-    if (options == null ? void 0 : options.cache)
-      return reactive(options.cache);
-    if (isVue2)
-      return getMapVue2Compat();
-    return reactive(/* @__PURE__ */ new Map());
-  };
-  const cache = initCache();
-  const generateKey = (...args) => (options == null ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);
-  const _loadData = (key, ...args) => {
-    cache.set(key, resolver(...args));
-    return cache.get(key);
-  };
-  const loadData = (...args) => _loadData(generateKey(...args), ...args);
-  const deleteData = (...args) => {
-    cache.delete(generateKey(...args));
-  };
-  const clearData = () => {
-    cache.clear();
-  };
-  const memoized = (...args) => {
-    const key = generateKey(...args);
-    if (cache.has(key))
-      return cache.get(key);
-    return _loadData(key, ...args);
-  };
-  memoized.load = loadData;
-  memoized.delete = deleteData;
-  memoized.clear = clearData;
-  memoized.generateKey = generateKey;
-  memoized.cache = cache;
-  return memoized;
-}
-function useMemory(options = {}) {
-  const memory = ref();
-  const isSupported = useSupported(() => typeof performance !== "undefined" && "memory" in performance);
-  if (isSupported.value) {
-    const { interval = 1e3 } = options;
-    useIntervalFn(() => {
-      memory.value = performance.memory;
-    }, interval, { immediate: options.immediate, immediateCallback: options.immediateCallback });
-  }
-  return { isSupported, memory };
-}
-function useMounted() {
-  const isMounted = ref(false);
-  onMounted(() => {
-    isMounted.value = true;
-  });
-  return isMounted;
-}
-function useMouse(options = {}) {
-  const {
-    type = "page",
-    touch = true,
-    resetOnTouchEnds = false,
-    initialValue = { x: 0, y: 0 },
-    window: window2 = defaultWindow,
-    eventFilter
-  } = options;
-  const x = ref(initialValue.x);
-  const y = ref(initialValue.y);
-  const sourceType = ref(null);
-  const mouseHandler = (event) => {
-    if (type === "page") {
-      x.value = event.pageX;
-      y.value = event.pageY;
-    } else if (type === "client") {
-      x.value = event.clientX;
-      y.value = event.clientY;
-    } else if (type === "movement") {
-      x.value = event.movementX;
-      y.value = event.movementY;
-    }
-    sourceType.value = "mouse";
-  };
-  const reset = () => {
-    x.value = initialValue.x;
-    y.value = initialValue.y;
-  };
-  const touchHandler = (event) => {
-    if (event.touches.length > 0) {
-      const touch2 = event.touches[0];
-      if (type === "page") {
-        x.value = touch2.pageX;
-        y.value = touch2.pageY;
-      } else if (type === "client") {
-        x.value = touch2.clientX;
-        y.value = touch2.clientY;
-      }
-      sourceType.value = "touch";
-    }
-  };
-  const mouseHandlerWrapper = (event) => {
-    return eventFilter === void 0 ? mouseHandler(event) : eventFilter(() => mouseHandler(event), {});
-  };
-  const touchHandlerWrapper = (event) => {
-    return eventFilter === void 0 ? touchHandler(event) : eventFilter(() => touchHandler(event), {});
-  };
-  if (window2) {
-    useEventListener(window2, "mousemove", mouseHandlerWrapper, { passive: true });
-    useEventListener(window2, "dragover", mouseHandlerWrapper, { passive: true });
-    if (touch && type !== "movement") {
-      useEventListener(window2, "touchstart", touchHandlerWrapper, { passive: true });
-      useEventListener(window2, "touchmove", touchHandlerWrapper, { passive: true });
-      if (resetOnTouchEnds)
-        useEventListener(window2, "touchend", reset, { passive: true });
-    }
-  }
-  return {
-    x,
-    y,
-    sourceType
-  };
-}
-function useMouseInElement(target, options = {}) {
-  const {
-    handleOutside = true,
-    window: window2 = defaultWindow
-  } = options;
-  const { x, y, sourceType } = useMouse(options);
-  const targetRef = ref(target != null ? target : window2 == null ? void 0 : window2.document.body);
-  const elementX = ref(0);
-  const elementY = ref(0);
-  const elementPositionX = ref(0);
-  const elementPositionY = ref(0);
-  const elementHeight = ref(0);
-  const elementWidth = ref(0);
-  const isOutside = ref(true);
-  let stop = () => {
-  };
-  if (window2) {
-    stop = watch([targetRef, x, y], () => {
-      const el = unrefElement(targetRef);
-      if (!el)
-        return;
-      const {
-        left,
-        top,
-        width,
-        height
-      } = el.getBoundingClientRect();
-      elementPositionX.value = left + window2.pageXOffset;
-      elementPositionY.value = top + window2.pageYOffset;
-      elementHeight.value = height;
-      elementWidth.value = width;
-      const elX = x.value - elementPositionX.value;
-      const elY = y.value - elementPositionY.value;
-      isOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;
-      if (handleOutside || !isOutside.value) {
-        elementX.value = elX;
-        elementY.value = elY;
-      }
-    }, { immediate: true });
-    useEventListener(document, "mouseleave", () => {
-      isOutside.value = true;
-    });
-  }
-  return {
-    x,
-    y,
-    sourceType,
-    elementX,
-    elementY,
-    elementPositionX,
-    elementPositionY,
-    elementHeight,
-    elementWidth,
-    isOutside,
-    stop
-  };
-}
-function useMousePressed(options = {}) {
-  const {
-    touch = true,
-    drag = true,
-    initialValue = false,
-    window: window2 = defaultWindow
-  } = options;
-  const pressed = ref(initialValue);
-  const sourceType = ref(null);
-  if (!window2) {
-    return {
-      pressed,
-      sourceType
-    };
-  }
-  const onPressed = (srcType) => () => {
-    pressed.value = true;
-    sourceType.value = srcType;
-  };
-  const onReleased = () => {
-    pressed.value = false;
-    sourceType.value = null;
-  };
-  const target = computed(() => unrefElement(options.target) || window2);
-  useEventListener(target, "mousedown", onPressed("mouse"), { passive: true });
-  useEventListener(window2, "mouseleave", onReleased, { passive: true });
-  useEventListener(window2, "mouseup", onReleased, { passive: true });
-  if (drag) {
-    useEventListener(target, "dragstart", onPressed("mouse"), { passive: true });
-    useEventListener(window2, "drop", onReleased, { passive: true });
-    useEventListener(window2, "dragend", onReleased, { passive: true });
-  }
-  if (touch) {
-    useEventListener(target, "touchstart", onPressed("touch"), { passive: true });
-    useEventListener(window2, "touchend", onReleased, { passive: true });
-    useEventListener(window2, "touchcancel", onReleased, { passive: true });
-  }
-  return {
-    pressed,
-    sourceType
-  };
-}
-var __getOwnPropSymbols$82 = Object.getOwnPropertySymbols;
-var __hasOwnProp$82 = Object.prototype.hasOwnProperty;
-var __propIsEnum$82 = Object.prototype.propertyIsEnumerable;
-var __objRest$12 = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp$82.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols$82)
-    for (var prop of __getOwnPropSymbols$82(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum$82.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-function useMutationObserver(target, callback, options = {}) {
-  const _a2 = options, { window: window2 = defaultWindow } = _a2, mutationOptions = __objRest$12(_a2, ["window"]);
-  let observer;
-  const isSupported = useSupported(() => window2 && "MutationObserver" in window2);
-  const cleanup = () => {
-    if (observer) {
-      observer.disconnect();
-      observer = void 0;
-    }
-  };
-  const stopWatch = watch(() => unrefElement(target), (el) => {
-    cleanup();
-    if (isSupported.value && window2 && el) {
-      observer = new MutationObserver(callback);
-      observer.observe(el, mutationOptions);
-    }
-  }, { immediate: true });
-  const stop = () => {
-    cleanup();
-    stopWatch();
-  };
-  tryOnScopeDispose(stop);
-  return {
-    isSupported,
-    stop
-  };
-}
-var useNavigatorLanguage = (options = {}) => {
-  const { window: window2 = defaultWindow } = options;
-  const navigator = window2 == null ? void 0 : window2.navigator;
-  const isSupported = useSupported(() => navigator && "language" in navigator);
-  const language = ref(navigator == null ? void 0 : navigator.language);
-  useEventListener(window2, "languagechange", () => {
-    if (navigator)
-      language.value = navigator.language;
-  });
-  return {
-    isSupported,
-    language
-  };
-};
-function useNetwork(options = {}) {
-  const { window: window2 = defaultWindow } = options;
-  const navigator = window2 == null ? void 0 : window2.navigator;
-  const isSupported = useSupported(() => navigator && "connection" in navigator);
-  const isOnline = ref(true);
-  const saveData = ref(false);
-  const offlineAt = ref(void 0);
-  const onlineAt = ref(void 0);
-  const downlink = ref(void 0);
-  const downlinkMax = ref(void 0);
-  const rtt = ref(void 0);
-  const effectiveType = ref(void 0);
-  const type = ref("unknown");
-  const connection = isSupported.value && navigator.connection;
-  function updateNetworkInformation() {
-    if (!navigator)
-      return;
-    isOnline.value = navigator.onLine;
-    offlineAt.value = isOnline.value ? void 0 : Date.now();
-    onlineAt.value = isOnline.value ? Date.now() : void 0;
-    if (connection) {
-      downlink.value = connection.downlink;
-      downlinkMax.value = connection.downlinkMax;
-      effectiveType.value = connection.effectiveType;
-      rtt.value = connection.rtt;
-      saveData.value = connection.saveData;
-      type.value = connection.type;
-    }
-  }
-  if (window2) {
-    useEventListener(window2, "offline", () => {
-      isOnline.value = false;
-      offlineAt.value = Date.now();
-    });
-    useEventListener(window2, "online", () => {
-      isOnline.value = true;
-      onlineAt.value = Date.now();
-    });
-  }
-  if (connection)
-    useEventListener(connection, "change", updateNetworkInformation, false);
-  updateNetworkInformation();
-  return {
-    isSupported,
-    isOnline,
-    saveData,
-    offlineAt,
-    onlineAt,
-    downlink,
-    downlinkMax,
-    effectiveType,
-    rtt,
-    type
-  };
-}
-var __defProp$72 = Object.defineProperty;
-var __getOwnPropSymbols$72 = Object.getOwnPropertySymbols;
-var __hasOwnProp$72 = Object.prototype.hasOwnProperty;
-var __propIsEnum$72 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$72 = (obj, key, value) => key in obj ? __defProp$72(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$72 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$72.call(b, prop))
-      __defNormalProp$72(a, prop, b[prop]);
-  if (__getOwnPropSymbols$72)
-    for (var prop of __getOwnPropSymbols$72(b)) {
-      if (__propIsEnum$72.call(b, prop))
-        __defNormalProp$72(a, prop, b[prop]);
-    }
-  return a;
-};
-function useNow(options = {}) {
-  const {
-    controls: exposeControls = false,
-    interval = "requestAnimationFrame"
-  } = options;
-  const now2 = ref(/* @__PURE__ */ new Date());
-  const update = () => now2.value = /* @__PURE__ */ new Date();
-  const controls = interval === "requestAnimationFrame" ? useRafFn(update, { immediate: true }) : useIntervalFn(update, interval, { immediate: true });
-  if (exposeControls) {
-    return __spreadValues$72({
-      now: now2
-    }, controls);
-  } else {
-    return now2;
-  }
-}
-function useObjectUrl(object) {
-  const url = ref();
-  const release = () => {
-    if (url.value)
-      URL.revokeObjectURL(url.value);
-    url.value = void 0;
-  };
-  watch(() => unref(object), (newObject) => {
-    release();
-    if (newObject)
-      url.value = URL.createObjectURL(newObject);
-  }, { immediate: true });
-  tryOnScopeDispose(release);
-  return readonly(url);
-}
-function useClamp(value, min, max) {
-  if (isFunction(value) || isReadonly(value))
-    return computed(() => clamp(resolveUnref(value), resolveUnref(min), resolveUnref(max)));
-  const _value = ref(value);
-  return computed({
-    get() {
-      return _value.value = clamp(_value.value, resolveUnref(min), resolveUnref(max));
-    },
-    set(value2) {
-      _value.value = clamp(value2, resolveUnref(min), resolveUnref(max));
-    }
-  });
-}
-function useOffsetPagination(options) {
-  const {
-    total = Infinity,
-    pageSize = 10,
-    page = 1,
-    onPageChange = noop,
-    onPageSizeChange = noop,
-    onPageCountChange = noop
-  } = options;
-  const currentPageSize = useClamp(pageSize, 1, Infinity);
-  const pageCount = computed(() => Math.max(1, Math.ceil(unref(total) / unref(currentPageSize))));
-  const currentPage = useClamp(page, 1, pageCount);
-  const isFirstPage = computed(() => currentPage.value === 1);
-  const isLastPage = computed(() => currentPage.value === pageCount.value);
-  if (isRef(page))
-    syncRef(page, currentPage);
-  if (isRef(pageSize))
-    syncRef(pageSize, currentPageSize);
-  function prev() {
-    currentPage.value--;
-  }
-  function next() {
-    currentPage.value++;
-  }
-  const returnValue = {
-    currentPage,
-    currentPageSize,
-    pageCount,
-    isFirstPage,
-    isLastPage,
-    prev,
-    next
-  };
-  watch(currentPage, () => {
-    onPageChange(reactive(returnValue));
-  });
-  watch(currentPageSize, () => {
-    onPageSizeChange(reactive(returnValue));
-  });
-  watch(pageCount, () => {
-    onPageCountChange(reactive(returnValue));
-  });
-  return returnValue;
-}
-function useOnline(options = {}) {
-  const { isOnline } = useNetwork(options);
-  return isOnline;
-}
-function usePageLeave(options = {}) {
-  const { window: window2 = defaultWindow } = options;
-  const isLeft = ref(false);
-  const handler = (event) => {
-    if (!window2)
-      return;
-    event = event || window2.event;
-    const from = event.relatedTarget || event.toElement;
-    isLeft.value = !from;
-  };
-  if (window2) {
-    useEventListener(window2, "mouseout", handler, { passive: true });
-    useEventListener(window2.document, "mouseleave", handler, { passive: true });
-    useEventListener(window2.document, "mouseenter", handler, { passive: true });
-  }
-  return isLeft;
-}
-function useParallax(target, options = {}) {
-  const {
-    deviceOrientationTiltAdjust = (i) => i,
-    deviceOrientationRollAdjust = (i) => i,
-    mouseTiltAdjust = (i) => i,
-    mouseRollAdjust = (i) => i,
-    window: window2 = defaultWindow
-  } = options;
-  const orientation = reactive(useDeviceOrientation({ window: window2 }));
-  const {
-    elementX: x,
-    elementY: y,
-    elementWidth: width,
-    elementHeight: height
-  } = useMouseInElement(target, { handleOutside: false, window: window2 });
-  const source = computed(() => {
-    if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0))
-      return "deviceOrientation";
-    return "mouse";
-  });
-  const roll = computed(() => {
-    if (source.value === "deviceOrientation") {
-      const value = -orientation.beta / 90;
-      return deviceOrientationRollAdjust(value);
-    } else {
-      const value = -(y.value - height.value / 2) / height.value;
-      return mouseRollAdjust(value);
-    }
-  });
-  const tilt = computed(() => {
-    if (source.value === "deviceOrientation") {
-      const value = orientation.gamma / 90;
-      return deviceOrientationTiltAdjust(value);
-    } else {
-      const value = (x.value - width.value / 2) / width.value;
-      return mouseTiltAdjust(value);
-    }
-  });
-  return { roll, tilt, source };
-}
-var __defProp$62 = Object.defineProperty;
-var __defProps$12 = Object.defineProperties;
-var __getOwnPropDescs$12 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$62 = Object.getOwnPropertySymbols;
-var __hasOwnProp$62 = Object.prototype.hasOwnProperty;
-var __propIsEnum$62 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$62 = (obj, key, value) => key in obj ? __defProp$62(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$62 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$62.call(b, prop))
-      __defNormalProp$62(a, prop, b[prop]);
-  if (__getOwnPropSymbols$62)
-    for (var prop of __getOwnPropSymbols$62(b)) {
-      if (__propIsEnum$62.call(b, prop))
-        __defNormalProp$62(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps$12 = (a, b) => __defProps$12(a, __getOwnPropDescs$12(b));
-var defaultState = {
-  x: 0,
-  y: 0,
-  pointerId: 0,
-  pressure: 0,
-  tiltX: 0,
-  tiltY: 0,
-  width: 0,
-  height: 0,
-  twist: 0,
-  pointerType: null
-};
-var keys = Object.keys(defaultState);
-function usePointer(options = {}) {
-  const {
-    target = defaultWindow
-  } = options;
-  const isInside = ref(false);
-  const state = ref(options.initialValue || {});
-  Object.assign(state.value, defaultState, state.value);
-  const handler = (event) => {
-    isInside.value = true;
-    if (options.pointerTypes && !options.pointerTypes.includes(event.pointerType))
-      return;
-    state.value = objectPick(event, keys, false);
-  };
-  if (target) {
-    useEventListener(target, "pointerdown", handler, { passive: true });
-    useEventListener(target, "pointermove", handler, { passive: true });
-    useEventListener(target, "pointerleave", () => isInside.value = false, { passive: true });
-  }
-  return __spreadProps$12(__spreadValues$62({}, toRefs2(state)), {
-    isInside
-  });
-}
-function usePointerLock(target, options = {}) {
-  const { document: document2 = defaultDocument, pointerLockOptions } = options;
-  const isSupported = useSupported(() => document2 && "pointerLockElement" in document2);
-  const element = ref();
-  const triggerElement = ref();
-  let targetElement;
-  if (isSupported.value) {
-    useEventListener(document2, "pointerlockchange", () => {
-      var _a2;
-      const currentElement = (_a2 = document2.pointerLockElement) != null ? _a2 : element.value;
-      if (targetElement && currentElement === targetElement) {
-        element.value = document2.pointerLockElement;
-        if (!element.value)
-          targetElement = triggerElement.value = null;
-      }
-    });
-    useEventListener(document2, "pointerlockerror", () => {
-      var _a2;
-      const currentElement = (_a2 = document2.pointerLockElement) != null ? _a2 : element.value;
-      if (targetElement && currentElement === targetElement) {
-        const action = document2.pointerLockElement ? "release" : "acquire";
-        throw new Error(`Failed to ${action} pointer lock.`);
-      }
-    });
-  }
-  async function lock(e, options2) {
-    var _a2;
-    if (!isSupported.value)
-      throw new Error("Pointer Lock API is not supported by your browser.");
-    triggerElement.value = e instanceof Event ? e.currentTarget : null;
-    targetElement = e instanceof Event ? (_a2 = unrefElement(target)) != null ? _a2 : triggerElement.value : unrefElement(e);
-    if (!targetElement)
-      throw new Error("Target element undefined.");
-    targetElement.requestPointerLock(options2 != null ? options2 : pointerLockOptions);
-    return await until(element).toBe(targetElement);
-  }
-  async function unlock() {
-    if (!element.value)
-      return false;
-    document2.exitPointerLock();
-    await until(element).toBeNull();
-    return true;
-  }
-  return {
-    isSupported,
-    element,
-    triggerElement,
-    lock,
-    unlock
-  };
-}
-var SwipeDirection;
-(function(SwipeDirection2) {
-  SwipeDirection2["UP"] = "UP";
-  SwipeDirection2["RIGHT"] = "RIGHT";
-  SwipeDirection2["DOWN"] = "DOWN";
-  SwipeDirection2["LEFT"] = "LEFT";
-  SwipeDirection2["NONE"] = "NONE";
-})(SwipeDirection || (SwipeDirection = {}));
-function useSwipe(target, options = {}) {
-  const {
-    threshold = 50,
-    onSwipe,
-    onSwipeEnd,
-    onSwipeStart,
-    passive = true,
-    window: window2 = defaultWindow
-  } = options;
-  const coordsStart = reactive({ x: 0, y: 0 });
-  const coordsEnd = reactive({ x: 0, y: 0 });
-  const diffX = computed(() => coordsStart.x - coordsEnd.x);
-  const diffY = computed(() => coordsStart.y - coordsEnd.y);
-  const { max, abs } = Math;
-  const isThresholdExceeded = computed(() => max(abs(diffX.value), abs(diffY.value)) >= threshold);
-  const isSwiping = ref(false);
-  const direction = computed(() => {
-    if (!isThresholdExceeded.value)
-      return SwipeDirection.NONE;
-    if (abs(diffX.value) > abs(diffY.value)) {
-      return diffX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;
-    } else {
-      return diffY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;
-    }
-  });
-  const getTouchEventCoords = (e) => [e.touches[0].clientX, e.touches[0].clientY];
-  const updateCoordsStart = (x, y) => {
-    coordsStart.x = x;
-    coordsStart.y = y;
-  };
-  const updateCoordsEnd = (x, y) => {
-    coordsEnd.x = x;
-    coordsEnd.y = y;
-  };
-  let listenerOptions;
-  const isPassiveEventSupported = checkPassiveEventSupport(window2 == null ? void 0 : window2.document);
-  if (!passive)
-    listenerOptions = isPassiveEventSupported ? { passive: false, capture: true } : { capture: true };
-  else
-    listenerOptions = isPassiveEventSupported ? { passive: true } : { capture: false };
-  const onTouchEnd = (e) => {
-    if (isSwiping.value)
-      onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);
-    isSwiping.value = false;
-  };
-  const stops = [
-    useEventListener(target, "touchstart", (e) => {
-      if (listenerOptions.capture && !listenerOptions.passive)
-        e.preventDefault();
-      const [x, y] = getTouchEventCoords(e);
-      updateCoordsStart(x, y);
-      updateCoordsEnd(x, y);
-      onSwipeStart == null ? void 0 : onSwipeStart(e);
-    }, listenerOptions),
-    useEventListener(target, "touchmove", (e) => {
-      const [x, y] = getTouchEventCoords(e);
-      updateCoordsEnd(x, y);
-      if (!isSwiping.value && isThresholdExceeded.value)
-        isSwiping.value = true;
-      if (isSwiping.value)
-        onSwipe == null ? void 0 : onSwipe(e);
-    }, listenerOptions),
-    useEventListener(target, "touchend", onTouchEnd, listenerOptions),
-    useEventListener(target, "touchcancel", onTouchEnd, listenerOptions)
-  ];
-  const stop = () => stops.forEach((s) => s());
-  return {
-    isPassiveEventSupported,
-    isSwiping,
-    direction,
-    coordsStart,
-    coordsEnd,
-    lengthX: diffX,
-    lengthY: diffY,
-    stop
-  };
-}
-function checkPassiveEventSupport(document2) {
-  if (!document2)
-    return false;
-  let supportsPassive = false;
-  const optionsBlock = {
-    get passive() {
-      supportsPassive = true;
-      return false;
-    }
-  };
-  document2.addEventListener("x", noop, optionsBlock);
-  document2.removeEventListener("x", noop);
-  return supportsPassive;
-}
-function usePointerSwipe(target, options = {}) {
-  const targetRef = resolveRef(target);
-  const {
-    threshold = 50,
-    onSwipe,
-    onSwipeEnd,
-    onSwipeStart
-  } = options;
-  const posStart = reactive({ x: 0, y: 0 });
-  const updatePosStart = (x, y) => {
-    posStart.x = x;
-    posStart.y = y;
-  };
-  const posEnd = reactive({ x: 0, y: 0 });
-  const updatePosEnd = (x, y) => {
-    posEnd.x = x;
-    posEnd.y = y;
-  };
-  const distanceX = computed(() => posStart.x - posEnd.x);
-  const distanceY = computed(() => posStart.y - posEnd.y);
-  const { max, abs } = Math;
-  const isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);
-  const isSwiping = ref(false);
-  const isPointerDown = ref(false);
-  const direction = computed(() => {
-    if (!isThresholdExceeded.value)
-      return SwipeDirection.NONE;
-    if (abs(distanceX.value) > abs(distanceY.value)) {
-      return distanceX.value > 0 ? SwipeDirection.LEFT : SwipeDirection.RIGHT;
-    } else {
-      return distanceY.value > 0 ? SwipeDirection.UP : SwipeDirection.DOWN;
-    }
-  });
-  const eventIsAllowed = (e) => {
-    var _a2, _b, _c;
-    const isReleasingButton = e.buttons === 0;
-    const isPrimaryButton = e.buttons === 1;
-    return (_c = (_b = (_a2 = options.pointerTypes) == null ? void 0 : _a2.includes(e.pointerType)) != null ? _b : isReleasingButton || isPrimaryButton) != null ? _c : true;
-  };
-  const stops = [
-    useEventListener(target, "pointerdown", (e) => {
-      var _a2, _b;
-      if (!eventIsAllowed(e))
-        return;
-      isPointerDown.value = true;
-      (_b = (_a2 = targetRef.value) == null ? void 0 : _a2.style) == null ? void 0 : _b.setProperty("touch-action", "none");
-      const eventTarget = e.target;
-      eventTarget == null ? void 0 : eventTarget.setPointerCapture(e.pointerId);
-      const { clientX: x, clientY: y } = e;
-      updatePosStart(x, y);
-      updatePosEnd(x, y);
-      onSwipeStart == null ? void 0 : onSwipeStart(e);
-    }),
-    useEventListener(target, "pointermove", (e) => {
-      if (!eventIsAllowed(e))
-        return;
-      if (!isPointerDown.value)
-        return;
-      const { clientX: x, clientY: y } = e;
-      updatePosEnd(x, y);
-      if (!isSwiping.value && isThresholdExceeded.value)
-        isSwiping.value = true;
-      if (isSwiping.value)
-        onSwipe == null ? void 0 : onSwipe(e);
-    }),
-    useEventListener(target, "pointerup", (e) => {
-      var _a2, _b;
-      if (!eventIsAllowed(e))
-        return;
-      if (isSwiping.value)
-        onSwipeEnd == null ? void 0 : onSwipeEnd(e, direction.value);
-      isPointerDown.value = false;
-      isSwiping.value = false;
-      (_b = (_a2 = targetRef.value) == null ? void 0 : _a2.style) == null ? void 0 : _b.setProperty("touch-action", "initial");
-    })
-  ];
-  const stop = () => stops.forEach((s) => s());
-  return {
-    isSwiping: readonly(isSwiping),
-    direction: readonly(direction),
-    posStart: readonly(posStart),
-    posEnd: readonly(posEnd),
-    distanceX,
-    distanceY,
-    stop
-  };
-}
-function usePreferredColorScheme(options) {
-  const isLight = useMediaQuery("(prefers-color-scheme: light)", options);
-  const isDark = useMediaQuery("(prefers-color-scheme: dark)", options);
-  return computed(() => {
-    if (isDark.value)
-      return "dark";
-    if (isLight.value)
-      return "light";
-    return "no-preference";
-  });
-}
-function usePreferredContrast(options) {
-  const isMore = useMediaQuery("(prefers-contrast: more)", options);
-  const isLess = useMediaQuery("(prefers-contrast: less)", options);
-  const isCustom = useMediaQuery("(prefers-contrast: custom)", options);
-  return computed(() => {
-    if (isMore.value)
-      return "more";
-    if (isLess.value)
-      return "less";
-    if (isCustom.value)
-      return "custom";
-    return "no-preference";
-  });
-}
-function usePreferredLanguages(options = {}) {
-  const { window: window2 = defaultWindow } = options;
-  if (!window2)
-    return ref(["en"]);
-  const navigator = window2.navigator;
-  const value = ref(navigator.languages);
-  useEventListener(window2, "languagechange", () => {
-    value.value = navigator.languages;
-  });
-  return value;
-}
-function usePreferredReducedMotion(options) {
-  const isReduced = useMediaQuery("(prefers-reduced-motion: reduce)", options);
-  return computed(() => {
-    if (isReduced.value)
-      return "reduce";
-    return "no-preference";
-  });
-}
-function usePrevious(value, initialValue) {
-  const previous = shallowRef(initialValue);
-  watch(resolveRef(value), (_, oldValue) => {
-    previous.value = oldValue;
-  }, { flush: "sync" });
-  return readonly(previous);
-}
-var useScreenOrientation = (options = {}) => {
-  const {
-    window: window2 = defaultWindow
-  } = options;
-  const isSupported = useSupported(() => window2 && "screen" in window2 && "orientation" in window2.screen);
-  const screenOrientation = isSupported.value ? window2.screen.orientation : {};
-  const orientation = ref(screenOrientation.type);
-  const angle = ref(screenOrientation.angle || 0);
-  if (isSupported.value) {
-    useEventListener(window2, "orientationchange", () => {
-      orientation.value = screenOrientation.type;
-      angle.value = screenOrientation.angle;
-    });
-  }
-  const lockOrientation = (type) => {
-    if (!isSupported.value)
-      return Promise.reject(new Error("Not supported"));
-    return screenOrientation.lock(type);
-  };
-  const unlockOrientation = () => {
-    if (isSupported.value)
-      screenOrientation.unlock();
-  };
-  return {
-    isSupported,
-    orientation,
-    angle,
-    lockOrientation,
-    unlockOrientation
-  };
-};
-var topVarName = "--vueuse-safe-area-top";
-var rightVarName = "--vueuse-safe-area-right";
-var bottomVarName = "--vueuse-safe-area-bottom";
-var leftVarName = "--vueuse-safe-area-left";
-function useScreenSafeArea() {
-  const top = ref("");
-  const right = ref("");
-  const bottom = ref("");
-  const left = ref("");
-  if (isClient) {
-    const topCssVar = useCssVar(topVarName);
-    const rightCssVar = useCssVar(rightVarName);
-    const bottomCssVar = useCssVar(bottomVarName);
-    const leftCssVar = useCssVar(leftVarName);
-    topCssVar.value = "env(safe-area-inset-top, 0px)";
-    rightCssVar.value = "env(safe-area-inset-right, 0px)";
-    bottomCssVar.value = "env(safe-area-inset-bottom, 0px)";
-    leftCssVar.value = "env(safe-area-inset-left, 0px)";
-    update();
-    useEventListener("resize", useDebounceFn(update));
-  }
-  function update() {
-    top.value = getValue(topVarName);
-    right.value = getValue(rightVarName);
-    bottom.value = getValue(bottomVarName);
-    left.value = getValue(leftVarName);
-  }
-  return {
-    top,
-    right,
-    bottom,
-    left,
-    update
-  };
-}
-function getValue(position) {
-  return getComputedStyle(document.documentElement).getPropertyValue(position);
-}
-function useScriptTag(src, onLoaded = noop, options = {}) {
-  const {
-    immediate = true,
-    manual = false,
-    type = "text/javascript",
-    async = true,
-    crossOrigin,
-    referrerPolicy,
-    noModule,
-    defer,
-    document: document2 = defaultDocument,
-    attrs = {}
-  } = options;
-  const scriptTag = ref(null);
-  let _promise = null;
-  const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => {
-    const resolveWithElement = (el2) => {
-      scriptTag.value = el2;
-      resolve(el2);
-      return el2;
-    };
-    if (!document2) {
-      resolve(false);
-      return;
-    }
-    let shouldAppend = false;
-    let el = document2.querySelector(`script[src="${resolveUnref(src)}"]`);
-    if (!el) {
-      el = document2.createElement("script");
-      el.type = type;
-      el.async = async;
-      el.src = resolveUnref(src);
-      if (defer)
-        el.defer = defer;
-      if (crossOrigin)
-        el.crossOrigin = crossOrigin;
-      if (noModule)
-        el.noModule = noModule;
-      if (referrerPolicy)
-        el.referrerPolicy = referrerPolicy;
-      Object.entries(attrs).forEach(([name, value]) => el == null ? void 0 : el.setAttribute(name, value));
-      shouldAppend = true;
-    } else if (el.hasAttribute("data-loaded")) {
-      resolveWithElement(el);
-    }
-    el.addEventListener("error", (event) => reject(event));
-    el.addEventListener("abort", (event) => reject(event));
-    el.addEventListener("load", () => {
-      el.setAttribute("data-loaded", "true");
-      onLoaded(el);
-      resolveWithElement(el);
-    });
-    if (shouldAppend)
-      el = document2.head.appendChild(el);
-    if (!waitForScriptLoad)
-      resolveWithElement(el);
-  });
-  const load = (waitForScriptLoad = true) => {
-    if (!_promise)
-      _promise = loadScript(waitForScriptLoad);
-    return _promise;
-  };
-  const unload = () => {
-    if (!document2)
-      return;
-    _promise = null;
-    if (scriptTag.value)
-      scriptTag.value = null;
-    const el = document2.querySelector(`script[src="${resolveUnref(src)}"]`);
-    if (el)
-      document2.head.removeChild(el);
-  };
-  if (immediate && !manual)
-    tryOnMounted(load);
-  if (!manual)
-    tryOnUnmounted(unload);
-  return { scriptTag, load, unload };
-}
-function checkOverflowScroll(ele) {
-  const style = window.getComputedStyle(ele);
-  if (style.overflowX === "scroll" || style.overflowY === "scroll" || style.overflowX === "auto" && ele.clientHeight < ele.scrollHeight || style.overflowY === "auto" && ele.clientWidth < ele.scrollWidth) {
-    return true;
-  } else {
-    const parent = ele.parentNode;
-    if (!parent || parent.tagName === "BODY")
-      return false;
-    return checkOverflowScroll(parent);
-  }
-}
-function preventDefault(rawEvent) {
-  const e = rawEvent || window.event;
-  const _target = e.target;
-  if (checkOverflowScroll(_target))
-    return false;
-  if (e.touches.length > 1)
-    return true;
-  if (e.preventDefault)
-    e.preventDefault();
-  return false;
-}
-function useScrollLock(element, initialState = false) {
-  const isLocked = ref(initialState);
-  let stopTouchMoveListener = null;
-  let initialOverflow;
-  watch(resolveRef(element), (el) => {
-    if (el) {
-      const ele = el;
-      initialOverflow = ele.style.overflow;
-      if (isLocked.value)
-        ele.style.overflow = "hidden";
-    }
-  }, {
-    immediate: true
-  });
-  const lock = () => {
-    const ele = resolveUnref(element);
-    if (!ele || isLocked.value)
-      return;
-    if (isIOS) {
-      stopTouchMoveListener = useEventListener(ele, "touchmove", (e) => {
-        preventDefault(e);
-      }, { passive: false });
-    }
-    ele.style.overflow = "hidden";
-    isLocked.value = true;
-  };
-  const unlock = () => {
-    const ele = resolveUnref(element);
-    if (!ele || !isLocked.value)
-      return;
-    isIOS && (stopTouchMoveListener == null ? void 0 : stopTouchMoveListener());
-    ele.style.overflow = initialOverflow;
-    isLocked.value = false;
-  };
-  tryOnScopeDispose(unlock);
-  return computed({
-    get() {
-      return isLocked.value;
-    },
-    set(v) {
-      if (v)
-        lock();
-      else
-        unlock();
-    }
-  });
-}
-function useSessionStorage(key, initialValue, options = {}) {
-  const { window: window2 = defaultWindow } = options;
-  return useStorage(key, initialValue, window2 == null ? void 0 : window2.sessionStorage, options);
-}
-var __defProp$52 = Object.defineProperty;
-var __getOwnPropSymbols$52 = Object.getOwnPropertySymbols;
-var __hasOwnProp$52 = Object.prototype.hasOwnProperty;
-var __propIsEnum$52 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$52 = (obj, key, value) => key in obj ? __defProp$52(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$52 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$52.call(b, prop))
-      __defNormalProp$52(a, prop, b[prop]);
-  if (__getOwnPropSymbols$52)
-    for (var prop of __getOwnPropSymbols$52(b)) {
-      if (__propIsEnum$52.call(b, prop))
-        __defNormalProp$52(a, prop, b[prop]);
-    }
-  return a;
-};
-function useShare(shareOptions = {}, options = {}) {
-  const { navigator = defaultNavigator } = options;
-  const _navigator = navigator;
-  const isSupported = useSupported(() => _navigator && "canShare" in _navigator);
-  const share = async (overrideOptions = {}) => {
-    if (isSupported.value) {
-      const data = __spreadValues$52(__spreadValues$52({}, resolveUnref(shareOptions)), resolveUnref(overrideOptions));
-      let granted = true;
-      if (data.files && _navigator.canShare)
-        granted = _navigator.canShare({ files: data.files });
-      if (granted)
-        return _navigator.share(data);
-    }
-  };
-  return {
-    isSupported,
-    share
-  };
-}
-var defaultSortFn = (source, compareFn) => source.sort(compareFn);
-var defaultCompare = (a, b) => a - b;
-function useSorted(...args) {
-  var _a2, _b, _c, _d;
-  const [source] = args;
-  let compareFn = defaultCompare;
-  let options = {};
-  if (args.length === 2) {
-    if (typeof args[1] === "object") {
-      options = args[1];
-      compareFn = (_a2 = options.compareFn) != null ? _a2 : defaultCompare;
-    } else {
-      compareFn = (_b = args[1]) != null ? _b : defaultCompare;
-    }
-  } else if (args.length > 2) {
-    compareFn = (_c = args[1]) != null ? _c : defaultCompare;
-    options = (_d = args[2]) != null ? _d : {};
-  }
-  const {
-    dirty = false,
-    sortFn = defaultSortFn
-  } = options;
-  if (!dirty)
-    return computed(() => sortFn([...unref(source)], compareFn));
-  watchEffect(() => {
-    const result = sortFn(unref(source), compareFn);
-    if (isRef(source))
-      source.value = result;
-    else
-      source.splice(0, source.length, ...result);
-  });
-  return source;
-}
-function useSpeechRecognition(options = {}) {
-  const {
-    interimResults = true,
-    continuous = true,
-    window: window2 = defaultWindow
-  } = options;
-  const lang = resolveRef(options.lang || "en-US");
-  const isListening = ref(false);
-  const isFinal = ref(false);
-  const result = ref("");
-  const error = shallowRef(void 0);
-  const toggle = (value = !isListening.value) => {
-    isListening.value = value;
-  };
-  const start = () => {
-    isListening.value = true;
-  };
-  const stop = () => {
-    isListening.value = false;
-  };
-  const SpeechRecognition = window2 && (window2.SpeechRecognition || window2.webkitSpeechRecognition);
-  const isSupported = useSupported(() => SpeechRecognition);
-  let recognition;
-  if (isSupported.value) {
-    recognition = new SpeechRecognition();
-    recognition.continuous = continuous;
-    recognition.interimResults = interimResults;
-    recognition.lang = unref(lang);
-    recognition.onstart = () => {
-      isFinal.value = false;
-    };
-    watch(lang, (lang2) => {
-      if (recognition && !isListening.value)
-        recognition.lang = lang2;
-    });
-    recognition.onresult = (event) => {
-      const transcript = Array.from(event.results).map((result2) => {
-        isFinal.value = result2.isFinal;
-        return result2[0];
-      }).map((result2) => result2.transcript).join("");
-      result.value = transcript;
-      error.value = void 0;
-    };
-    recognition.onerror = (event) => {
-      error.value = event;
-    };
-    recognition.onend = () => {
-      isListening.value = false;
-      recognition.lang = unref(lang);
-    };
-    watch(isListening, () => {
-      if (isListening.value)
-        recognition.start();
-      else
-        recognition.stop();
-    });
-  }
-  tryOnScopeDispose(() => {
-    isListening.value = false;
-  });
-  return {
-    isSupported,
-    isListening,
-    isFinal,
-    recognition,
-    result,
-    error,
-    toggle,
-    start,
-    stop
-  };
-}
-function useSpeechSynthesis(text, options = {}) {
-  const {
-    pitch = 1,
-    rate = 1,
-    volume = 1,
-    window: window2 = defaultWindow
-  } = options;
-  const synth = window2 && window2.speechSynthesis;
-  const isSupported = useSupported(() => synth);
-  const isPlaying = ref(false);
-  const status = ref("init");
-  const spokenText = resolveRef(text || "");
-  const lang = resolveRef(options.lang || "en-US");
-  const error = shallowRef(void 0);
-  const toggle = (value = !isPlaying.value) => {
-    isPlaying.value = value;
-  };
-  const bindEventsForUtterance = (utterance2) => {
-    utterance2.lang = unref(lang);
-    utterance2.voice = unref(options.voice) || null;
-    utterance2.pitch = pitch;
-    utterance2.rate = rate;
-    utterance2.volume = volume;
-    utterance2.onstart = () => {
-      isPlaying.value = true;
-      status.value = "play";
-    };
-    utterance2.onpause = () => {
-      isPlaying.value = false;
-      status.value = "pause";
-    };
-    utterance2.onresume = () => {
-      isPlaying.value = true;
-      status.value = "play";
-    };
-    utterance2.onend = () => {
-      isPlaying.value = false;
-      status.value = "end";
-    };
-    utterance2.onerror = (event) => {
-      error.value = event;
-    };
-  };
-  const utterance = computed(() => {
-    isPlaying.value = false;
-    status.value = "init";
-    const newUtterance = new SpeechSynthesisUtterance(spokenText.value);
-    bindEventsForUtterance(newUtterance);
-    return newUtterance;
-  });
-  const speak = () => {
-    synth.cancel();
-    utterance && synth.speak(utterance.value);
-  };
-  const stop = () => {
-    synth.cancel();
-    isPlaying.value = false;
-  };
-  if (isSupported.value) {
-    bindEventsForUtterance(utterance.value);
-    watch(lang, (lang2) => {
-      if (utterance.value && !isPlaying.value)
-        utterance.value.lang = lang2;
-    });
-    if (options.voice) {
-      watch(options.voice, () => {
-        synth.cancel();
-      });
-    }
-    watch(isPlaying, () => {
-      if (isPlaying.value)
-        synth.resume();
-      else
-        synth.pause();
-    });
-  }
-  tryOnScopeDispose(() => {
-    isPlaying.value = false;
-  });
-  return {
-    isSupported,
-    isPlaying,
-    status,
-    utterance,
-    error,
-    stop,
-    toggle,
-    speak
-  };
-}
-function useStepper(steps, initialStep) {
-  const stepsRef = ref(steps);
-  const stepNames = computed(() => Array.isArray(stepsRef.value) ? stepsRef.value : Object.keys(stepsRef.value));
-  const index = ref(stepNames.value.indexOf(initialStep != null ? initialStep : stepNames.value[0]));
-  const current = computed(() => at(index.value));
-  const isFirst = computed(() => index.value === 0);
-  const isLast = computed(() => index.value === stepNames.value.length - 1);
-  const next = computed(() => stepNames.value[index.value + 1]);
-  const previous = computed(() => stepNames.value[index.value - 1]);
-  function at(index2) {
-    if (Array.isArray(stepsRef.value))
-      return stepsRef.value[index2];
-    return stepsRef.value[stepNames.value[index2]];
-  }
-  function get2(step) {
-    if (!stepNames.value.includes(step))
-      return;
-    return at(stepNames.value.indexOf(step));
-  }
-  function goTo(step) {
-    if (stepNames.value.includes(step))
-      index.value = stepNames.value.indexOf(step);
-  }
-  function goToNext() {
-    if (isLast.value)
-      return;
-    index.value++;
-  }
-  function goToPrevious() {
-    if (isFirst.value)
-      return;
-    index.value--;
-  }
-  function goBackTo(step) {
-    if (isAfter(step))
-      goTo(step);
-  }
-  function isNext(step) {
-    return stepNames.value.indexOf(step) === index.value + 1;
-  }
-  function isPrevious(step) {
-    return stepNames.value.indexOf(step) === index.value - 1;
-  }
-  function isCurrent(step) {
-    return stepNames.value.indexOf(step) === index.value;
-  }
-  function isBefore(step) {
-    return index.value < stepNames.value.indexOf(step);
-  }
-  function isAfter(step) {
-    return index.value > stepNames.value.indexOf(step);
-  }
-  return {
-    steps: stepsRef,
-    stepNames,
-    index,
-    current,
-    next,
-    previous,
-    isFirst,
-    isLast,
-    at,
-    get: get2,
-    goTo,
-    goToNext,
-    goToPrevious,
-    goBackTo,
-    isNext,
-    isPrevious,
-    isCurrent,
-    isBefore,
-    isAfter
-  };
-}
-var __defProp$42 = Object.defineProperty;
-var __getOwnPropSymbols$42 = Object.getOwnPropertySymbols;
-var __hasOwnProp$42 = Object.prototype.hasOwnProperty;
-var __propIsEnum$42 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$42 = (obj, key, value) => key in obj ? __defProp$42(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$42 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$42.call(b, prop))
-      __defNormalProp$42(a, prop, b[prop]);
-  if (__getOwnPropSymbols$42)
-    for (var prop of __getOwnPropSymbols$42(b)) {
-      if (__propIsEnum$42.call(b, prop))
-        __defNormalProp$42(a, prop, b[prop]);
-    }
-  return a;
-};
-function useStorageAsync(key, initialValue, storage, options = {}) {
-  var _a2;
-  const {
-    flush = "pre",
-    deep = true,
-    listenToStorageChanges = true,
-    writeDefaults = true,
-    mergeDefaults = false,
-    shallow,
-    window: window2 = defaultWindow,
-    eventFilter,
-    onError = (e) => {
-      console.error(e);
-    }
-  } = options;
-  const rawInit = resolveUnref(initialValue);
-  const type = guessSerializerType(rawInit);
-  const data = (shallow ? shallowRef : ref)(initialValue);
-  const serializer = (_a2 = options.serializer) != null ? _a2 : StorageSerializers[type];
-  if (!storage) {
-    try {
-      storage = getSSRHandler("getDefaultStorage", () => {
-        var _a22;
-        return (_a22 = defaultWindow) == null ? void 0 : _a22.localStorage;
-      })();
-    } catch (e) {
-      onError(e);
-    }
-  }
-  async function read(event) {
-    if (!storage || event && event.key !== key)
-      return;
-    try {
-      const rawValue = event ? event.newValue : await storage.getItem(key);
-      if (rawValue == null) {
-        data.value = rawInit;
-        if (writeDefaults && rawInit !== null)
-          await storage.setItem(key, await serializer.write(rawInit));
-      } else if (mergeDefaults) {
-        const value = await serializer.read(rawValue);
-        if (isFunction(mergeDefaults))
-          data.value = mergeDefaults(value, rawInit);
-        else if (type === "object" && !Array.isArray(value))
-          data.value = __spreadValues$42(__spreadValues$42({}, rawInit), value);
-        else
-          data.value = value;
-      } else {
-        data.value = await serializer.read(rawValue);
-      }
-    } catch (e) {
-      onError(e);
-    }
-  }
-  read();
-  if (window2 && listenToStorageChanges)
-    useEventListener(window2, "storage", (e) => setTimeout(() => read(e), 0));
-  if (storage) {
-    watchWithFilter(data, async () => {
-      try {
-        if (data.value == null)
-          await storage.removeItem(key);
-        else
-          await storage.setItem(key, await serializer.write(data.value));
-      } catch (e) {
-        onError(e);
-      }
-    }, {
-      flush,
-      deep,
-      eventFilter
-    });
-  }
-  return data;
-}
-var _id = 0;
-function useStyleTag(css, options = {}) {
-  const isLoaded = ref(false);
-  const {
-    document: document2 = defaultDocument,
-    immediate = true,
-    manual = false,
-    id = `vueuse_styletag_${++_id}`
-  } = options;
-  const cssRef = ref(css);
-  let stop = () => {
-  };
-  const load = () => {
-    if (!document2)
-      return;
-    const el = document2.getElementById(id) || document2.createElement("style");
-    if (!el.isConnected) {
-      el.type = "text/css";
-      el.id = id;
-      if (options.media)
-        el.media = options.media;
-      document2.head.appendChild(el);
-    }
-    if (isLoaded.value)
-      return;
-    stop = watch(cssRef, (value) => {
-      el.textContent = value;
-    }, { immediate: true });
-    isLoaded.value = true;
-  };
-  const unload = () => {
-    if (!document2 || !isLoaded.value)
-      return;
-    stop();
-    document2.head.removeChild(document2.getElementById(id));
-    isLoaded.value = false;
-  };
-  if (immediate && !manual)
-    tryOnMounted(load);
-  if (!manual)
-    tryOnScopeDispose(unload);
-  return {
-    id,
-    css: cssRef,
-    unload,
-    load,
-    isLoaded: readonly(isLoaded)
-  };
-}
-function useTemplateRefsList() {
-  const refs = ref([]);
-  refs.value.set = (el) => {
-    if (el)
-      refs.value.push(el);
-  };
-  onBeforeUpdate(() => {
-    refs.value.length = 0;
-  });
-  return refs;
-}
-function useTextDirection(options = {}) {
-  const {
-    document: document2 = defaultDocument,
-    selector = "html",
-    observe = false,
-    initialValue = "ltr"
-  } = options;
-  function getValue2() {
-    var _a2, _b;
-    return (_b = (_a2 = document2 == null ? void 0 : document2.querySelector(selector)) == null ? void 0 : _a2.getAttribute("dir")) != null ? _b : initialValue;
-  }
-  const dir = ref(getValue2());
-  tryOnMounted(() => dir.value = getValue2());
-  if (observe && document2) {
-    useMutationObserver(document2.querySelector(selector), () => dir.value = getValue2(), { attributes: true });
-  }
-  return computed({
-    get() {
-      return dir.value;
-    },
-    set(v) {
-      var _a2, _b;
-      dir.value = v;
-      if (!document2)
-        return;
-      if (dir.value)
-        (_a2 = document2.querySelector(selector)) == null ? void 0 : _a2.setAttribute("dir", dir.value);
-      else
-        (_b = document2.querySelector(selector)) == null ? void 0 : _b.removeAttribute("dir");
-    }
-  });
-}
-function getRangesFromSelection(selection) {
-  var _a2;
-  const rangeCount = (_a2 = selection.rangeCount) != null ? _a2 : 0;
-  const ranges = new Array(rangeCount);
-  for (let i = 0; i < rangeCount; i++) {
-    const range = selection.getRangeAt(i);
-    ranges[i] = range;
-  }
-  return ranges;
-}
-function useTextSelection(options = {}) {
-  const {
-    window: window2 = defaultWindow
-  } = options;
-  const selection = ref(null);
-  const text = computed(() => {
-    var _a2, _b;
-    return (_b = (_a2 = selection.value) == null ? void 0 : _a2.toString()) != null ? _b : "";
-  });
-  const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []);
-  const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect()));
-  function onSelectionChange() {
-    selection.value = null;
-    if (window2)
-      selection.value = window2.getSelection();
-  }
-  if (window2)
-    useEventListener(window2.document, "selectionchange", onSelectionChange);
-  return {
-    text,
-    rects,
-    ranges,
-    selection
-  };
-}
-function useTextareaAutosize(options) {
-  const textarea = ref(options == null ? void 0 : options.element);
-  const input = ref(options == null ? void 0 : options.input);
-  function triggerResize() {
-    var _a2, _b;
-    if (!textarea.value)
-      return;
-    textarea.value.style.height = "1px";
-    textarea.value.style.height = `${(_a2 = textarea.value) == null ? void 0 : _a2.scrollHeight}px`;
-    (_b = options == null ? void 0 : options.onResize) == null ? void 0 : _b.call(options);
-  }
-  watch([input, textarea], triggerResize, { immediate: true });
-  useResizeObserver(textarea, () => triggerResize());
-  if (options == null ? void 0 : options.watch)
-    watch(options.watch, triggerResize, { immediate: true, deep: true });
-  return {
-    textarea,
-    input,
-    triggerResize
-  };
-}
-var __defProp$32 = Object.defineProperty;
-var __defProps2 = Object.defineProperties;
-var __getOwnPropDescs2 = Object.getOwnPropertyDescriptors;
-var __getOwnPropSymbols$32 = Object.getOwnPropertySymbols;
-var __hasOwnProp$32 = Object.prototype.hasOwnProperty;
-var __propIsEnum$32 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$32 = (obj, key, value) => key in obj ? __defProp$32(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$32 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$32.call(b, prop))
-      __defNormalProp$32(a, prop, b[prop]);
-  if (__getOwnPropSymbols$32)
-    for (var prop of __getOwnPropSymbols$32(b)) {
-      if (__propIsEnum$32.call(b, prop))
-        __defNormalProp$32(a, prop, b[prop]);
-    }
-  return a;
-};
-var __spreadProps2 = (a, b) => __defProps2(a, __getOwnPropDescs2(b));
-function useThrottledRefHistory(source, options = {}) {
-  const { throttle = 200, trailing = true } = options;
-  const filter = throttleFilter(throttle, trailing);
-  const history = useRefHistory(source, __spreadProps2(__spreadValues$32({}, options), { eventFilter: filter }));
-  return __spreadValues$32({}, history);
-}
-var __defProp$22 = Object.defineProperty;
-var __getOwnPropSymbols$22 = Object.getOwnPropertySymbols;
-var __hasOwnProp$22 = Object.prototype.hasOwnProperty;
-var __propIsEnum$22 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$22 = (obj, key, value) => key in obj ? __defProp$22(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$22 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$22.call(b, prop))
-      __defNormalProp$22(a, prop, b[prop]);
-  if (__getOwnPropSymbols$22)
-    for (var prop of __getOwnPropSymbols$22(b)) {
-      if (__propIsEnum$22.call(b, prop))
-        __defNormalProp$22(a, prop, b[prop]);
-    }
-  return a;
-};
-var __objRest2 = (source, exclude) => {
-  var target = {};
-  for (var prop in source)
-    if (__hasOwnProp$22.call(source, prop) && exclude.indexOf(prop) < 0)
-      target[prop] = source[prop];
-  if (source != null && __getOwnPropSymbols$22)
-    for (var prop of __getOwnPropSymbols$22(source)) {
-      if (exclude.indexOf(prop) < 0 && __propIsEnum$22.call(source, prop))
-        target[prop] = source[prop];
-    }
-  return target;
-};
-var DEFAULT_UNITS = [
-  { max: 6e4, value: 1e3, name: "second" },
-  { max: 276e4, value: 6e4, name: "minute" },
-  { max: 72e6, value: 36e5, name: "hour" },
-  { max: 5184e5, value: 864e5, name: "day" },
-  { max: 24192e5, value: 6048e5, name: "week" },
-  { max: 28512e6, value: 2592e6, name: "month" },
-  { max: Infinity, value: 31536e6, name: "year" }
-];
-var DEFAULT_MESSAGES = {
-  justNow: "just now",
-  past: (n) => n.match(/\d/) ? `${n} ago` : n,
-  future: (n) => n.match(/\d/) ? `in ${n}` : n,
-  month: (n, past) => n === 1 ? past ? "last month" : "next month" : `${n} month${n > 1 ? "s" : ""}`,
-  year: (n, past) => n === 1 ? past ? "last year" : "next year" : `${n} year${n > 1 ? "s" : ""}`,
-  day: (n, past) => n === 1 ? past ? "yesterday" : "tomorrow" : `${n} day${n > 1 ? "s" : ""}`,
-  week: (n, past) => n === 1 ? past ? "last week" : "next week" : `${n} week${n > 1 ? "s" : ""}`,
-  hour: (n) => `${n} hour${n > 1 ? "s" : ""}`,
-  minute: (n) => `${n} minute${n > 1 ? "s" : ""}`,
-  second: (n) => `${n} second${n > 1 ? "s" : ""}`,
-  invalid: ""
-};
-var DEFAULT_FORMATTER = (date) => date.toISOString().slice(0, 10);
-function useTimeAgo(time, options = {}) {
-  const {
-    controls: exposeControls = false,
-    updateInterval = 3e4
-  } = options;
-  const _a2 = useNow({ interval: updateInterval, controls: true }), { now: now2 } = _a2, controls = __objRest2(_a2, ["now"]);
-  const timeAgo = computed(() => formatTimeAgo(new Date(resolveUnref(time)), options, unref(now2.value)));
-  if (exposeControls) {
-    return __spreadValues$22({
-      timeAgo
-    }, controls);
-  } else {
-    return timeAgo;
-  }
-}
-function formatTimeAgo(from, options = {}, now2 = Date.now()) {
-  var _a2;
-  const {
-    max,
-    messages = DEFAULT_MESSAGES,
-    fullDateFormatter = DEFAULT_FORMATTER,
-    units = DEFAULT_UNITS,
-    showSecond = false,
-    rounding = "round"
-  } = options;
-  const roundFn = typeof rounding === "number" ? (n) => +n.toFixed(rounding) : Math[rounding];
-  const diff = +now2 - +from;
-  const absDiff = Math.abs(diff);
-  function getValue2(diff2, unit) {
-    return roundFn(Math.abs(diff2) / unit.value);
-  }
-  function format(diff2, unit) {
-    const val = getValue2(diff2, unit);
-    const past = diff2 > 0;
-    const str = applyFormat(unit.name, val, past);
-    return applyFormat(past ? "past" : "future", str, past);
-  }
-  function applyFormat(name, val, isPast) {
-    const formatter = messages[name];
-    if (typeof formatter === "function")
-      return formatter(val, isPast);
-    return formatter.replace("{0}", val.toString());
-  }
-  if (absDiff < 6e4 && !showSecond)
-    return messages.justNow;
-  if (typeof max === "number" && absDiff > max)
-    return fullDateFormatter(new Date(from));
-  if (typeof max === "string") {
-    const unitMax = (_a2 = units.find((i) => i.name === max)) == null ? void 0 : _a2.max;
-    if (unitMax && absDiff > unitMax)
-      return fullDateFormatter(new Date(from));
-  }
-  for (const [idx, unit] of units.entries()) {
-    const val = getValue2(diff, unit);
-    if (val <= 0 && units[idx - 1])
-      return format(diff, units[idx - 1]);
-    if (absDiff < unit.max)
-      return format(diff, unit);
-  }
-  return messages.invalid;
-}
-function useTimeoutPoll(fn, interval, timeoutPollOptions) {
-  const { start } = useTimeoutFn(loop, interval);
-  const isActive = ref(false);
-  async function loop() {
-    if (!isActive.value)
-      return;
-    await fn();
-    start();
-  }
-  function resume() {
-    if (!isActive.value) {
-      isActive.value = true;
-      loop();
-    }
-  }
-  function pause() {
-    isActive.value = false;
-  }
-  if (timeoutPollOptions == null ? void 0 : timeoutPollOptions.immediate)
-    resume();
-  tryOnScopeDispose(pause);
-  return {
-    isActive,
-    pause,
-    resume
-  };
-}
-var __defProp$12 = Object.defineProperty;
-var __getOwnPropSymbols$12 = Object.getOwnPropertySymbols;
-var __hasOwnProp$12 = Object.prototype.hasOwnProperty;
-var __propIsEnum$12 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp$12 = (obj, key, value) => key in obj ? __defProp$12(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues$12 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp$12.call(b, prop))
-      __defNormalProp$12(a, prop, b[prop]);
-  if (__getOwnPropSymbols$12)
-    for (var prop of __getOwnPropSymbols$12(b)) {
-      if (__propIsEnum$12.call(b, prop))
-        __defNormalProp$12(a, prop, b[prop]);
-    }
-  return a;
-};
-function useTimestamp(options = {}) {
-  const {
-    controls: exposeControls = false,
-    offset = 0,
-    immediate = true,
-    interval = "requestAnimationFrame",
-    callback
-  } = options;
-  const ts = ref(timestamp() + offset);
-  const update = () => ts.value = timestamp() + offset;
-  const cb = callback ? () => {
-    update();
-    callback(ts.value);
-  } : update;
-  const controls = interval === "requestAnimationFrame" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate });
-  if (exposeControls) {
-    return __spreadValues$12({
-      timestamp: ts
-    }, controls);
-  } else {
-    return ts;
-  }
-}
-function useTitle(newTitle = null, options = {}) {
-  var _a2, _b;
-  const {
-    document: document2 = defaultDocument
-  } = options;
-  const title = resolveRef((_a2 = newTitle != null ? newTitle : document2 == null ? void 0 : document2.title) != null ? _a2 : null);
-  const isReadonly2 = newTitle && isFunction(newTitle);
-  function format(t) {
-    if (!("titleTemplate" in options))
-      return t;
-    const template = options.titleTemplate || "%s";
-    return isFunction(template) ? template(t) : unref(template).replace(/%s/g, t);
-  }
-  watch(title, (t, o) => {
-    if (t !== o && document2)
-      document2.title = format(isString(t) ? t : "");
-  }, { immediate: true });
-  if (options.observe && !options.titleTemplate && document2 && !isReadonly2) {
-    useMutationObserver((_b = document2.head) == null ? void 0 : _b.querySelector("title"), () => {
-      if (document2 && document2.title !== title.value)
-        title.value = format(document2.title);
-    }, { childList: true });
-  }
-  return title;
-}
-var __defProp2 = Object.defineProperty;
-var __getOwnPropSymbols2 = Object.getOwnPropertySymbols;
-var __hasOwnProp2 = Object.prototype.hasOwnProperty;
-var __propIsEnum2 = Object.prototype.propertyIsEnumerable;
-var __defNormalProp2 = (obj, key, value) => key in obj ? __defProp2(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues2 = (a, b) => {
-  for (var prop in b || (b = {}))
-    if (__hasOwnProp2.call(b, prop))
-      __defNormalProp2(a, prop, b[prop]);
-  if (__getOwnPropSymbols2)
-    for (var prop of __getOwnPropSymbols2(b)) {
-      if (__propIsEnum2.call(b, prop))
-        __defNormalProp2(a, prop, b[prop]);
-    }
-  return a;
-};
-var _TransitionPresets = {
-  easeInSine: [0.12, 0, 0.39, 0],
-  easeOutSine: [0.61, 1, 0.88, 1],
-  easeInOutSine: [0.37, 0, 0.63, 1],
-  easeInQuad: [0.11, 0, 0.5, 0],
-  easeOutQuad: [0.5, 1, 0.89, 1],
-  easeInOutQuad: [0.45, 0, 0.55, 1],
-  easeInCubic: [0.32, 0, 0.67, 0],
-  easeOutCubic: [0.33, 1, 0.68, 1],
-  easeInOutCubic: [0.65, 0, 0.35, 1],
-  easeInQuart: [0.5, 0, 0.75, 0],
-  easeOutQuart: [0.25, 1, 0.5, 1],
-  easeInOutQuart: [0.76, 0, 0.24, 1],
-  easeInQuint: [0.64, 0, 0.78, 0],
-  easeOutQuint: [0.22, 1, 0.36, 1],
-  easeInOutQuint: [0.83, 0, 0.17, 1],
-  easeInExpo: [0.7, 0, 0.84, 0],
-  easeOutExpo: [0.16, 1, 0.3, 1],
-  easeInOutExpo: [0.87, 0, 0.13, 1],
-  easeInCirc: [0.55, 0, 1, 0.45],
-  easeOutCirc: [0, 0.55, 0.45, 1],
-  easeInOutCirc: [0.85, 0, 0.15, 1],
-  easeInBack: [0.36, 0, 0.66, -0.56],
-  easeOutBack: [0.34, 1.56, 0.64, 1],
-  easeInOutBack: [0.68, -0.6, 0.32, 1.6]
-};
-var TransitionPresets = __spreadValues2({
-  linear: identity
-}, _TransitionPresets);
-function createEasingFunction([p0, p1, p2, p3]) {
-  const a = (a1, a2) => 1 - 3 * a2 + 3 * a1;
-  const b = (a1, a2) => 3 * a2 - 6 * a1;
-  const c = (a1) => 3 * a1;
-  const calcBezier = (t, a1, a2) => ((a(a1, a2) * t + b(a1, a2)) * t + c(a1)) * t;
-  const getSlope = (t, a1, a2) => 3 * a(a1, a2) * t * t + 2 * b(a1, a2) * t + c(a1);
-  const getTforX = (x) => {
-    let aGuessT = x;
-    for (let i = 0; i < 4; ++i) {
-      const currentSlope = getSlope(aGuessT, p0, p2);
-      if (currentSlope === 0)
-        return aGuessT;
-      const currentX = calcBezier(aGuessT, p0, p2) - x;
-      aGuessT -= currentX / currentSlope;
-    }
-    return aGuessT;
-  };
-  return (x) => p0 === p1 && p2 === p3 ? x : calcBezier(getTforX(x), p1, p3);
-}
-function useTransition(source, options = {}) {
-  const {
-    delay = 0,
-    disabled = false,
-    duration = 1e3,
-    onFinished = noop,
-    onStarted = noop,
-    transition = identity
-  } = options;
-  const currentTransition = computed(() => {
-    const t = unref(transition);
-    return isFunction(t) ? t : createEasingFunction(t);
-  });
-  const sourceValue = computed(() => {
-    const s = unref(source);
-    return isNumber(s) ? s : s.map(unref);
-  });
-  const sourceVector = computed(() => isNumber(sourceValue.value) ? [sourceValue.value] : sourceValue.value);
-  const outputVector = ref(sourceVector.value.slice(0));
-  let currentDuration;
-  let diffVector;
-  let endAt;
-  let startAt;
-  let startVector;
-  const { resume, pause } = useRafFn(() => {
-    const now2 = Date.now();
-    const progress = clamp(1 - (endAt - now2) / currentDuration, 0, 1);
-    outputVector.value = startVector.map((val, i) => {
-      var _a2;
-      return val + ((_a2 = diffVector[i]) != null ? _a2 : 0) * currentTransition.value(progress);
-    });
-    if (progress >= 1) {
-      pause();
-      onFinished();
-    }
-  }, { immediate: false });
-  const start = () => {
-    pause();
-    currentDuration = unref(duration);
-    diffVector = outputVector.value.map((n, i) => {
-      var _a2, _b;
-      return ((_a2 = sourceVector.value[i]) != null ? _a2 : 0) - ((_b = outputVector.value[i]) != null ? _b : 0);
-    });
-    startVector = outputVector.value.slice(0);
-    startAt = Date.now();
-    endAt = startAt + currentDuration;
-    resume();
-    onStarted();
-  };
-  const timeout = useTimeoutFn(start, delay, { immediate: false });
-  watch(sourceVector, () => {
-    if (unref(disabled))
-      return;
-    if (unref(delay) <= 0)
-      start();
-    else
-      timeout.start();
-  }, { deep: true });
-  watch(() => unref(disabled), (v) => {
-    if (v) {
-      outputVector.value = sourceVector.value.slice(0);
-      pause();
-    }
-  });
-  return computed(() => {
-    const targetVector = unref(disabled) ? sourceVector : outputVector;
-    return isNumber(sourceValue.value) ? targetVector.value[0] : targetVector.value;
-  });
-}
-function useUrlSearchParams(mode = "history", options = {}) {
-  const {
-    initialValue = {},
-    removeNullishValues = true,
-    removeFalsyValues = false,
-    write: enableWrite = true,
-    window: window2 = defaultWindow
-  } = options;
-  if (!window2)
-    return reactive(initialValue);
-  const state = reactive({});
-  function getRawParams() {
-    if (mode === "history") {
-      return window2.location.search || "";
-    } else if (mode === "hash") {
-      const hash = window2.location.hash || "";
-      const index = hash.indexOf("?");
-      return index > 0 ? hash.slice(index) : "";
-    } else {
-      return (window2.location.hash || "").replace(/^#/, "");
-    }
-  }
-  function constructQuery(params) {
-    const stringified = params.toString();
-    if (mode === "history")
-      return `${stringified ? `?${stringified}` : ""}${window2.location.hash || ""}`;
-    if (mode === "hash-params")
-      return `${window2.location.search || ""}${stringified ? `#${stringified}` : ""}`;
-    const hash = window2.location.hash || "#";
-    const index = hash.indexOf("?");
-    if (index > 0)
-      return `${hash.slice(0, index)}${stringified ? `?${stringified}` : ""}`;
-    return `${hash}${stringified ? `?${stringified}` : ""}`;
-  }
-  function read() {
-    return new URLSearchParams(getRawParams());
-  }
-  function updateState(params) {
-    const unusedKeys = new Set(Object.keys(state));
-    for (const key of params.keys()) {
-      const paramsForKey = params.getAll(key);
-      state[key] = paramsForKey.length > 1 ? paramsForKey : params.get(key) || "";
-      unusedKeys.delete(key);
-    }
-    Array.from(unusedKeys).forEach((key) => delete state[key]);
-  }
-  const { pause, resume } = watchPausable(state, () => {
-    const params = new URLSearchParams("");
-    Object.keys(state).forEach((key) => {
-      const mapEntry = state[key];
-      if (Array.isArray(mapEntry))
-        mapEntry.forEach((value) => params.append(key, value));
-      else if (removeNullishValues && mapEntry == null)
-        params.delete(key);
-      else if (removeFalsyValues && !mapEntry)
-        params.delete(key);
-      else
-        params.set(key, mapEntry);
-    });
-    write(params);
-  }, { deep: true });
-  function write(params, shouldUpdate) {
-    pause();
-    if (shouldUpdate)
-      updateState(params);
-    window2.history.replaceState(window2.history.state, window2.document.title, window2.location.pathname + constructQuery(params));
-    resume();
-  }
-  function onChanged() {
-    if (!enableWrite)
-      return;
-    write(read(), true);
-  }
-  useEventListener(window2, "popstate", onChanged, false);
-  if (mode !== "history")
-    useEventListener(window2, "hashchange", onChanged, false);
-  const initial = read();
-  if (initial.keys().next().value)
-    updateState(initial);
-  else
-    Object.assign(state, initialValue);
-  return state;
-}
-function useUserMedia(options = {}) {
-  var _a2, _b;
-  const enabled = ref((_a2 = options.enabled) != null ? _a2 : false);
-  const autoSwitch = ref((_b = options.autoSwitch) != null ? _b : true);
-  const videoDeviceId = ref(options.videoDeviceId);
-  const audioDeviceId = ref(options.audioDeviceId);
-  const { navigator = defaultNavigator } = options;
-  const isSupported = useSupported(() => {
-    var _a22;
-    return (_a22 = navigator == null ? void 0 : navigator.mediaDevices) == null ? void 0 : _a22.getUserMedia;
-  });
-  const stream = shallowRef();
-  function getDeviceOptions(device) {
-    if (device.value === "none" || device.value === false)
-      return false;
-    if (device.value == null)
-      return true;
-    return {
-      deviceId: device.value
-    };
-  }
-  async function _start() {
-    if (!isSupported.value || stream.value)
-      return;
-    stream.value = await navigator.mediaDevices.getUserMedia({
-      video: getDeviceOptions(videoDeviceId),
-      audio: getDeviceOptions(audioDeviceId)
-    });
-    return stream.value;
-  }
-  async function _stop() {
-    var _a22;
-    (_a22 = stream.value) == null ? void 0 : _a22.getTracks().forEach((t) => t.stop());
-    stream.value = void 0;
-  }
-  function stop() {
-    _stop();
-    enabled.value = false;
-  }
-  async function start() {
-    await _start();
-    if (stream.value)
-      enabled.value = true;
-    return stream.value;
-  }
-  async function restart() {
-    _stop();
-    return await start();
-  }
-  watch(enabled, (v) => {
-    if (v)
-      _start();
-    else
-      _stop();
-  }, { immediate: true });
-  watch([videoDeviceId, audioDeviceId], () => {
-    if (autoSwitch.value && stream.value)
-      restart();
-  }, { immediate: true });
-  return {
-    isSupported,
-    stream,
-    start,
-    stop,
-    restart,
-    videoDeviceId,
-    audioDeviceId,
-    enabled,
-    autoSwitch
-  };
-}
-function useVModel(props, key, emit, options = {}) {
-  var _a2, _b, _c, _d, _e;
-  const {
-    clone = false,
-    passive = false,
-    eventName,
-    deep = false,
-    defaultValue
-  } = options;
-  const vm = getCurrentInstance();
-  const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a2 = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a2.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy));
-  let event = eventName;
-  if (!key) {
-    if (isVue2) {
-      const modelOptions = (_e = (_d = vm == null ? void 0 : vm.proxy) == null ? void 0 : _d.$options) == null ? void 0 : _e.model;
-      key = (modelOptions == null ? void 0 : modelOptions.value) || "value";
-      if (!eventName)
-        event = (modelOptions == null ? void 0 : modelOptions.event) || "input";
-    } else {
-      key = "modelValue";
-    }
-  }
-  event = eventName || event || `update:${key.toString()}`;
-  const cloneFn = (val) => !clone ? val : isFunction(clone) ? clone(val) : cloneFnJSON(val);
-  const getValue2 = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue;
-  if (passive) {
-    const initialValue = getValue2();
-    const proxy = ref(initialValue);
-    watch(() => props[key], (v) => proxy.value = cloneFn(v));
-    watch(proxy, (v) => {
-      if (v !== props[key] || deep)
-        _emit(event, v);
-    }, { deep });
-    return proxy;
-  } else {
-    return computed({
-      get() {
-        return getValue2();
-      },
-      set(value) {
-        _emit(event, value);
-      }
-    });
-  }
-}
-function useVModels(props, emit, options = {}) {
-  const ret = {};
-  for (const key in props)
-    ret[key] = useVModel(props, key, emit, options);
-  return ret;
-}
-function useVibrate(options) {
-  const {
-    pattern = [],
-    interval = 0,
-    navigator = defaultNavigator
-  } = options || {};
-  const isSupported = useSupported(() => typeof navigator !== "undefined" && "vibrate" in navigator);
-  const patternRef = resolveRef(pattern);
-  let intervalControls;
-  const vibrate = (pattern2 = patternRef.value) => {
-    if (isSupported.value)
-      navigator.vibrate(pattern2);
-  };
-  const stop = () => {
-    if (isSupported.value)
-      navigator.vibrate(0);
-    intervalControls == null ? void 0 : intervalControls.pause();
-  };
-  if (interval > 0) {
-    intervalControls = useIntervalFn(vibrate, interval, {
-      immediate: false,
-      immediateCallback: false
-    });
-  }
-  return {
-    isSupported,
-    pattern,
-    intervalControls,
-    vibrate,
-    stop
-  };
-}
-function useVirtualList(list, options) {
-  const { containerStyle, wrapperProps, scrollTo, calculateRange, currentList, containerRef } = "itemHeight" in options ? useVerticalVirtualList(options, list) : useHorizontalVirtualList(options, list);
-  return {
-    list: currentList,
-    scrollTo,
-    containerProps: {
-      ref: containerRef,
-      onScroll: () => {
-        calculateRange();
-      },
-      style: containerStyle
-    },
-    wrapperProps
-  };
-}
-function useVirtualListResources(list) {
-  const containerRef = ref(null);
-  const size = useElementSize(containerRef);
-  const currentList = ref([]);
-  const source = shallowRef(list);
-  const state = ref({ start: 0, end: 10 });
-  return { state, source, currentList, size, containerRef };
-}
-function createGetViewCapacity(state, source, itemSize) {
-  return (containerSize) => {
-    if (typeof itemSize === "number")
-      return Math.ceil(containerSize / itemSize);
-    const { start = 0 } = state.value;
-    let sum = 0;
-    let capacity = 0;
-    for (let i = start; i < source.value.length; i++) {
-      const size = itemSize(i);
-      sum += size;
-      capacity = i;
-      if (sum > containerSize)
-        break;
-    }
-    return capacity - start;
-  };
-}
-function createGetOffset(source, itemSize) {
-  return (scrollDirection) => {
-    if (typeof itemSize === "number")
-      return Math.floor(scrollDirection / itemSize) + 1;
-    let sum = 0;
-    let offset = 0;
-    for (let i = 0; i < source.value.length; i++) {
-      const size = itemSize(i);
-      sum += size;
-      if (sum >= scrollDirection) {
-        offset = i;
-        break;
-      }
-    }
-    return offset + 1;
-  };
-}
-function createCalculateRange(type, overscan, getOffset, getViewCapacity, { containerRef, state, currentList, source }) {
-  return () => {
-    const element = containerRef.value;
-    if (element) {
-      const offset = getOffset(type === "vertical" ? element.scrollTop : element.scrollLeft);
-      const viewCapacity = getViewCapacity(type === "vertical" ? element.clientHeight : element.clientWidth);
-      const from = offset - overscan;
-      const to = offset + viewCapacity + overscan;
-      state.value = {
-        start: from < 0 ? 0 : from,
-        end: to > source.value.length ? source.value.length : to
-      };
-      currentList.value = source.value.slice(state.value.start, state.value.end).map((ele, index) => ({
-        data: ele,
-        index: index + state.value.start
-      }));
-    }
-  };
-}
-function createGetDistance(itemSize, source) {
-  return (index) => {
-    if (typeof itemSize === "number") {
-      const size2 = index * itemSize;
-      return size2;
-    }
-    const size = source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0);
-    return size;
-  };
-}
-function useWatchForSizes(size, list, calculateRange) {
-  watch([size.width, size.height, list], () => {
-    calculateRange();
-  });
-}
-function createComputedTotalSize(itemSize, source) {
-  return computed(() => {
-    if (typeof itemSize === "number")
-      return source.value.length * itemSize;
-    return source.value.reduce((sum, _, index) => sum + itemSize(index), 0);
-  });
-}
-var scrollToDictionaryForElementScrollKey = {
-  horizontal: "scrollLeft",
-  vertical: "scrollTop"
-};
-function createScrollTo(type, calculateRange, getDistance, containerRef) {
-  return (index) => {
-    if (containerRef.value) {
-      containerRef.value[scrollToDictionaryForElementScrollKey[type]] = getDistance(index);
-      calculateRange();
-    }
-  };
-}
-function useHorizontalVirtualList(options, list) {
-  const resources = useVirtualListResources(list);
-  const { state, source, currentList, size, containerRef } = resources;
-  const containerStyle = { overflowX: "auto" };
-  const { itemWidth, overscan = 5 } = options;
-  const getViewCapacity = createGetViewCapacity(state, source, itemWidth);
-  const getOffset = createGetOffset(source, itemWidth);
-  const calculateRange = createCalculateRange("horizontal", overscan, getOffset, getViewCapacity, resources);
-  const getDistanceLeft = createGetDistance(itemWidth, source);
-  const offsetLeft = computed(() => getDistanceLeft(state.value.start));
-  const totalWidth = createComputedTotalSize(itemWidth, source);
-  useWatchForSizes(size, list, calculateRange);
-  const scrollTo = createScrollTo("horizontal", calculateRange, getDistanceLeft, containerRef);
-  const wrapperProps = computed(() => {
-    return {
-      style: {
-        height: "100%",
-        width: `${totalWidth.value - offsetLeft.value}px`,
-        marginLeft: `${offsetLeft.value}px`,
-        display: "flex"
-      }
-    };
-  });
-  return {
-    scrollTo,
-    calculateRange,
-    wrapperProps,
-    containerStyle,
-    currentList,
-    containerRef
-  };
-}
-function useVerticalVirtualList(options, list) {
-  const resources = useVirtualListResources(list);
-  const { state, source, currentList, size, containerRef } = resources;
-  const containerStyle = { overflowY: "auto" };
-  const { itemHeight, overscan = 5 } = options;
-  const getViewCapacity = createGetViewCapacity(state, source, itemHeight);
-  const getOffset = createGetOffset(source, itemHeight);
-  const calculateRange = createCalculateRange("vertical", overscan, getOffset, getViewCapacity, resources);
-  const getDistanceTop = createGetDistance(itemHeight, source);
-  const offsetTop = computed(() => getDistanceTop(state.value.start));
-  const totalHeight = createComputedTotalSize(itemHeight, source);
-  useWatchForSizes(size, list, calculateRange);
-  const scrollTo = createScrollTo("vertical", calculateRange, getDistanceTop, containerRef);
-  const wrapperProps = computed(() => {
-    return {
-      style: {
-        width: "100%",
-        height: `${totalHeight.value - offsetTop.value}px`,
-        marginTop: `${offsetTop.value}px`
-      }
-    };
-  });
-  return {
-    calculateRange,
-    scrollTo,
-    containerStyle,
-    wrapperProps,
-    currentList,
-    containerRef
-  };
-}
-var useWakeLock = (options = {}) => {
-  const {
-    navigator = defaultNavigator,
-    document: document2 = defaultDocument
-  } = options;
-  let wakeLock;
-  const isSupported = useSupported(() => navigator && "wakeLock" in navigator);
-  const isActive = ref(false);
-  async function onVisibilityChange() {
-    if (!isSupported.value || !wakeLock)
-      return;
-    if (document2 && document2.visibilityState === "visible")
-      wakeLock = await navigator.wakeLock.request("screen");
-    isActive.value = !wakeLock.released;
-  }
-  if (document2)
-    useEventListener(document2, "visibilitychange", onVisibilityChange, { passive: true });
-  async function request(type) {
-    if (!isSupported.value)
-      return;
-    wakeLock = await navigator.wakeLock.request(type);
-    isActive.value = !wakeLock.released;
-  }
-  async function release() {
-    if (!isSupported.value || !wakeLock)
-      return;
-    await wakeLock.release();
-    isActive.value = !wakeLock.released;
-    wakeLock = null;
-  }
-  return {
-    isSupported,
-    isActive,
-    request,
-    release
-  };
-};
-var useWebNotification = (defaultOptions2 = {}) => {
-  const {
-    window: window2 = defaultWindow
-  } = defaultOptions2;
-  const isSupported = useSupported(() => !!window2 && "Notification" in window2);
-  const notification = ref(null);
-  const requestPermission = async () => {
-    if (!isSupported.value)
-      return;
-    if ("permission" in Notification && Notification.permission !== "denied")
-      await Notification.requestPermission();
-  };
-  const onClick = createEventHook();
-  const onShow = createEventHook();
-  const onError = createEventHook();
-  const onClose = createEventHook();
-  const show = async (overrides) => {
-    if (!isSupported.value)
-      return;
-    await requestPermission();
-    const options = Object.assign({}, defaultOptions2, overrides);
-    notification.value = new Notification(options.title || "", options);
-    notification.value.onclick = (event) => onClick.trigger(event);
-    notification.value.onshow = (event) => onShow.trigger(event);
-    notification.value.onerror = (event) => onError.trigger(event);
-    notification.value.onclose = (event) => onClose.trigger(event);
-    return notification.value;
-  };
-  const close = () => {
-    if (notification.value)
-      notification.value.close();
-    notification.value = null;
-  };
-  tryOnMounted(async () => {
-    if (isSupported.value)
-      await requestPermission();
-  });
-  tryOnScopeDispose(close);
-  if (isSupported.value && window2) {
-    const document2 = window2.document;
-    useEventListener(document2, "visibilitychange", (e) => {
-      e.preventDefault();
-      if (document2.visibilityState === "visible") {
-        close();
-      }
-    });
-  }
-  return {
-    isSupported,
-    notification,
-    show,
-    close,
-    onClick,
-    onShow,
-    onError,
-    onClose
-  };
-};
-var DEFAULT_PING_MESSAGE = "ping";
-function resolveNestedOptions(options) {
-  if (options === true)
-    return {};
-  return options;
-}
-function useWebSocket(url, options = {}) {
-  const {
-    onConnected,
-    onDisconnected,
-    onError,
-    onMessage,
-    immediate = true,
-    autoClose = true,
-    protocols = []
-  } = options;
-  const data = ref(null);
-  const status = ref("CLOSED");
-  const wsRef = ref();
-  const urlRef = resolveRef(url);
-  let heartbeatPause;
-  let heartbeatResume;
-  let explicitlyClosed = false;
-  let retried = 0;
-  let bufferedData = [];
-  let pongTimeoutWait;
-  const close = (code = 1e3, reason) => {
-    if (!wsRef.value)
-      return;
-    explicitlyClosed = true;
-    heartbeatPause == null ? void 0 : heartbeatPause();
-    wsRef.value.close(code, reason);
-  };
-  const _sendBuffer = () => {
-    if (bufferedData.length && wsRef.value && status.value === "OPEN") {
-      for (const buffer of bufferedData)
-        wsRef.value.send(buffer);
-      bufferedData = [];
-    }
-  };
-  const resetHeartbeat = () => {
-    clearTimeout(pongTimeoutWait);
-    pongTimeoutWait = void 0;
-  };
-  const send = (data2, useBuffer = true) => {
-    if (!wsRef.value || status.value !== "OPEN") {
-      if (useBuffer)
-        bufferedData.push(data2);
-      return false;
-    }
-    _sendBuffer();
-    wsRef.value.send(data2);
-    return true;
-  };
-  const _init = () => {
-    if (explicitlyClosed || typeof urlRef.value === "undefined")
-      return;
-    const ws = new WebSocket(urlRef.value, protocols);
-    wsRef.value = ws;
-    status.value = "CONNECTING";
-    ws.onopen = () => {
-      status.value = "OPEN";
-      onConnected == null ? void 0 : onConnected(ws);
-      heartbeatResume == null ? void 0 : heartbeatResume();
-      _sendBuffer();
-    };
-    ws.onclose = (ev) => {
-      status.value = "CLOSED";
-      wsRef.value = void 0;
-      onDisconnected == null ? void 0 : onDisconnected(ws, ev);
-      if (!explicitlyClosed && options.autoReconnect) {
-        const {
-          retries = -1,
-          delay = 1e3,
-          onFailed
-        } = resolveNestedOptions(options.autoReconnect);
-        retried += 1;
-        if (typeof retries === "number" && (retries < 0 || retried < retries))
-          setTimeout(_init, delay);
-        else if (typeof retries === "function" && retries())
-          setTimeout(_init, delay);
-        else
-          onFailed == null ? void 0 : onFailed();
-      }
-    };
-    ws.onerror = (e) => {
-      onError == null ? void 0 : onError(ws, e);
-    };
-    ws.onmessage = (e) => {
-      if (options.heartbeat) {
-        resetHeartbeat();
-        const {
-          message = DEFAULT_PING_MESSAGE
-        } = resolveNestedOptions(options.heartbeat);
-        if (e.data === message)
-          return;
-      }
-      data.value = e.data;
-      onMessage == null ? void 0 : onMessage(ws, e);
-    };
-  };
-  if (options.heartbeat) {
-    const {
-      message = DEFAULT_PING_MESSAGE,
-      interval = 1e3,
-      pongTimeout = 1e3
-    } = resolveNestedOptions(options.heartbeat);
-    const { pause, resume } = useIntervalFn(() => {
-      send(message, false);
-      if (pongTimeoutWait != null)
-        return;
-      pongTimeoutWait = setTimeout(() => {
-        close();
-      }, pongTimeout);
-    }, interval, { immediate: false });
-    heartbeatPause = pause;
-    heartbeatResume = resume;
-  }
-  if (autoClose) {
-    useEventListener(window, "beforeunload", () => close());
-    tryOnScopeDispose(close);
-  }
-  const open = () => {
-    close();
-    explicitlyClosed = false;
-    retried = 0;
-    _init();
-  };
-  if (immediate)
-    watch(urlRef, open, { immediate: true });
-  return {
-    data,
-    status,
-    close,
-    send,
-    open,
-    ws: wsRef
-  };
-}
-function useWebWorker(arg0, workerOptions, options) {
-  const {
-    window: window2 = defaultWindow
-  } = options != null ? options : {};
-  const data = ref(null);
-  const worker = shallowRef();
-  const post = function post2(val) {
-    if (!worker.value)
-      return;
-    worker.value.postMessage(val);
-  };
-  const terminate = function terminate2() {
-    if (!worker.value)
-      return;
-    worker.value.terminate();
-  };
-  if (window2) {
-    if (isString(arg0))
-      worker.value = new Worker(arg0, workerOptions);
-    else if (isFunction(arg0))
-      worker.value = arg0();
-    else
-      worker.value = arg0;
-    worker.value.onmessage = (e) => {
-      data.value = e.data;
-    };
-    tryOnScopeDispose(() => {
-      if (worker.value)
-        worker.value.terminate();
-    });
-  }
-  return {
-    data,
-    post,
-    terminate,
-    worker
-  };
-}
-var jobRunner = (userFunc) => (e) => {
-  const userFuncArgs = e.data[0];
-  return Promise.resolve(userFunc.apply(void 0, userFuncArgs)).then((result) => {
-    postMessage(["SUCCESS", result]);
-  }).catch((error) => {
-    postMessage(["ERROR", error]);
-  });
-};
-var depsParser = (deps) => {
-  if (deps.length === 0)
-    return "";
-  const depsString = deps.map((dep) => `'${dep}'`).toString();
-  return `importScripts(${depsString})`;
-};
-var createWorkerBlobUrl = (fn, deps) => {
-  const blobCode = `${depsParser(deps)}; onmessage=(${jobRunner})(${fn})`;
-  const blob = new Blob([blobCode], { type: "text/javascript" });
-  const url = URL.createObjectURL(blob);
-  return url;
-};
-var useWebWorkerFn = (fn, options = {}) => {
-  const {
-    dependencies = [],
-    timeout,
-    window: window2 = defaultWindow
-  } = options;
-  const worker = ref();
-  const workerStatus = ref("PENDING");
-  const promise = ref({});
-  const timeoutId = ref();
-  const workerTerminate = (status = "PENDING") => {
-    if (worker.value && worker.value._url && window2) {
-      worker.value.terminate();
-      URL.revokeObjectURL(worker.value._url);
-      promise.value = {};
-      worker.value = void 0;
-      window2.clearTimeout(timeoutId.value);
-      workerStatus.value = status;
-    }
-  };
-  workerTerminate();
-  tryOnScopeDispose(workerTerminate);
-  const generateWorker = () => {
-    const blobUrl = createWorkerBlobUrl(fn, dependencies);
-    const newWorker = new Worker(blobUrl);
-    newWorker._url = blobUrl;
-    newWorker.onmessage = (e) => {
-      const { resolve = () => {
-      }, reject = () => {
-      } } = promise.value;
-      const [status, result] = e.data;
-      switch (status) {
-        case "SUCCESS":
-          resolve(result);
-          workerTerminate(status);
-          break;
-        default:
-          reject(result);
-          workerTerminate("ERROR");
-          break;
-      }
-    };
-    newWorker.onerror = (e) => {
-      const { reject = () => {
-      } } = promise.value;
-      reject(e);
-      workerTerminate("ERROR");
-    };
-    if (timeout) {
-      timeoutId.value = setTimeout(() => workerTerminate("TIMEOUT_EXPIRED"), timeout);
-    }
-    return newWorker;
-  };
-  const callWorker = (...fnArgs) => new Promise((resolve, reject) => {
-    promise.value = {
-      resolve,
-      reject
-    };
-    worker.value && worker.value.postMessage([[...fnArgs]]);
-    workerStatus.value = "RUNNING";
-  });
-  const workerFn = (...fnArgs) => {
-    if (workerStatus.value === "RUNNING") {
-      console.error("[useWebWorkerFn] You can only run one instance of the worker at a time.");
-      return Promise.reject();
-    }
-    worker.value = generateWorker();
-    return callWorker(...fnArgs);
-  };
-  return {
-    workerFn,
-    workerStatus,
-    workerTerminate
-  };
-};
-function useWindowFocus({ window: window2 = defaultWindow } = {}) {
-  if (!window2)
-    return ref(false);
-  const focused = ref(window2.document.hasFocus());
-  useEventListener(window2, "blur", () => {
-    focused.value = false;
-  });
-  useEventListener(window2, "focus", () => {
-    focused.value = true;
-  });
-  return focused;
-}
-function useWindowScroll({ window: window2 = defaultWindow } = {}) {
-  if (!window2) {
-    return {
-      x: ref(0),
-      y: ref(0)
-    };
-  }
-  const x = ref(window2.scrollX);
-  const y = ref(window2.scrollY);
-  useEventListener(window2, "scroll", () => {
-    x.value = window2.scrollX;
-    y.value = window2.scrollY;
-  }, {
-    capture: false,
-    passive: true
-  });
-  return { x, y };
-}
-function useWindowSize(options = {}) {
-  const {
-    window: window2 = defaultWindow,
-    initialWidth = Infinity,
-    initialHeight = Infinity,
-    listenOrientation = true,
-    includeScrollbar = true
-  } = options;
-  const width = ref(initialWidth);
-  const height = ref(initialHeight);
-  const update = () => {
-    if (window2) {
-      if (includeScrollbar) {
-        width.value = window2.innerWidth;
-        height.value = window2.innerHeight;
-      } else {
-        width.value = window2.document.documentElement.clientWidth;
-        height.value = window2.document.documentElement.clientHeight;
-      }
-    }
-  };
-  update();
-  tryOnMounted(update);
-  useEventListener("resize", update, { passive: true });
-  if (listenOrientation)
-    useEventListener("orientationchange", update, { passive: true });
-  return { width, height };
-}
-export {
-  DefaultMagicKeysAliasMap,
-  StorageSerializers,
-  SwipeDirection,
-  TransitionPresets,
-  __onlyVue27Plus,
-  __onlyVue3,
-  assert,
-  computedAsync as asyncComputed,
-  refAutoReset as autoResetRef,
-  breakpointsAntDesign,
-  breakpointsBootstrapV5,
-  breakpointsMasterCss,
-  breakpointsQuasar,
-  breakpointsSematic,
-  breakpointsTailwind,
-  breakpointsVuetify,
-  bypassFilter,
-  clamp,
-  cloneFnJSON,
-  computedAsync,
-  computedEager,
-  computedInject,
-  computedWithControl,
-  containsProp,
-  computedWithControl as controlledComputed,
-  controlledRef,
-  createEventHook,
-  createFetch,
-  createFilterWrapper,
-  createGlobalState,
-  createInjectionState,
-  reactify as createReactiveFn,
-  createSharedComposable,
-  createSingletonPromise,
-  createUnrefFn,
-  customStorageEventName,
-  debounceFilter,
-  refDebounced as debouncedRef,
-  watchDebounced as debouncedWatch,
-  defaultDocument,
-  defaultLocation,
-  defaultNavigator,
-  defaultWindow,
-  directiveHooks,
-  computedEager as eagerComputed,
-  extendRef,
-  formatDate,
-  formatTimeAgo,
-  get,
-  getSSRHandler,
-  hasOwn,
-  identity,
-  watchIgnorable as ignorableWatch,
-  increaseWithUnit,
-  invoke,
-  isBoolean,
-  isClient,
-  isDef,
-  isDefined,
-  isFunction,
-  isIOS,
-  isNumber,
-  isObject,
-  isString,
-  isWindow,
-  makeDestructurable,
-  mapGamepadToXbox360Controller,
-  noop,
-  normalizeDate,
-  now,
-  objectPick,
-  onClickOutside,
-  onKeyDown,
-  onKeyPressed,
-  onKeyStroke,
-  onKeyUp,
-  onLongPress,
-  onStartTyping,
-  pausableFilter,
-  watchPausable as pausableWatch,
-  promiseTimeout,
-  rand,
-  reactify,
-  reactifyObject,
-  reactiveComputed,
-  reactiveOmit,
-  reactivePick,
-  refAutoReset,
-  refDebounced,
-  refDefault,
-  refThrottled,
-  refWithControl,
-  resolveRef,
-  resolveUnref,
-  set2 as set,
-  setSSRHandler,
-  syncRef,
-  syncRefs,
-  templateRef,
-  throttleFilter,
-  refThrottled as throttledRef,
-  watchThrottled as throttledWatch,
-  timestamp,
-  toReactive,
-  toRefs2 as toRefs,
-  tryOnBeforeMount,
-  tryOnBeforeUnmount,
-  tryOnMounted,
-  tryOnScopeDispose,
-  tryOnUnmounted,
-  unrefElement,
-  until,
-  useActiveElement,
-  useArrayEvery,
-  useArrayFilter,
-  useArrayFind,
-  useArrayFindIndex,
-  useArrayFindLast,
-  useArrayJoin,
-  useArrayMap,
-  useArrayReduce,
-  useArraySome,
-  useArrayUnique,
-  useAsyncQueue,
-  useAsyncState,
-  useBase64,
-  useBattery,
-  useBluetooth,
-  useBreakpoints,
-  useBroadcastChannel,
-  useBrowserLocation,
-  useCached,
-  useClipboard,
-  useCloned,
-  useColorMode,
-  useConfirmDialog,
-  useCounter,
-  useCssVar,
-  useCurrentElement,
-  useCycleList,
-  useDark,
-  useDateFormat,
-  refDebounced as useDebounce,
-  useDebounceFn,
-  useDebouncedRefHistory,
-  useDeviceMotion,
-  useDeviceOrientation,
-  useDevicePixelRatio,
-  useDevicesList,
-  useDisplayMedia,
-  useDocumentVisibility,
-  useDraggable,
-  useDropZone,
-  useElementBounding,
-  useElementByPoint,
-  useElementHover,
-  useElementSize,
-  useElementVisibility,
-  useEventBus,
-  useEventListener,
-  useEventSource,
-  useEyeDropper,
-  useFavicon,
-  useFetch,
-  useFileDialog,
-  useFileSystemAccess,
-  useFocus,
-  useFocusWithin,
-  useFps,
-  useFullscreen,
-  useGamepad,
-  useGeolocation,
-  useIdle,
-  useImage,
-  useInfiniteScroll,
-  useIntersectionObserver,
-  useInterval,
-  useIntervalFn,
-  useKeyModifier,
-  useLastChanged,
-  useLocalStorage,
-  useMagicKeys,
-  useManualRefHistory,
-  useMediaControls,
-  useMediaQuery,
-  useMemoize,
-  useMemory,
-  useMounted,
-  useMouse,
-  useMouseInElement,
-  useMousePressed,
-  useMutationObserver,
-  useNavigatorLanguage,
-  useNetwork,
-  useNow,
-  useObjectUrl,
-  useOffsetPagination,
-  useOnline,
-  usePageLeave,
-  useParallax,
-  usePermission,
-  usePointer,
-  usePointerLock,
-  usePointerSwipe,
-  usePreferredColorScheme,
-  usePreferredContrast,
-  usePreferredDark,
-  usePreferredLanguages,
-  usePreferredReducedMotion,
-  usePrevious,
-  useRafFn,
-  useRefHistory,
-  useResizeObserver,
-  useScreenOrientation,
-  useScreenSafeArea,
-  useScriptTag,
-  useScroll,
-  useScrollLock,
-  useSessionStorage,
-  useShare,
-  useSorted,
-  useSpeechRecognition,
-  useSpeechSynthesis,
-  useStepper,
-  useStorage,
-  useStorageAsync,
-  useStyleTag,
-  useSupported,
-  useSwipe,
-  useTemplateRefsList,
-  useTextDirection,
-  useTextSelection,
-  useTextareaAutosize,
-  refThrottled as useThrottle,
-  useThrottleFn,
-  useThrottledRefHistory,
-  useTimeAgo,
-  useTimeout,
-  useTimeoutFn,
-  useTimeoutPoll,
-  useTimestamp,
-  useTitle,
-  useToNumber,
-  useToString,
-  useToggle,
-  useTransition,
-  useUrlSearchParams,
-  useUserMedia,
-  useVModel,
-  useVModels,
-  useVibrate,
-  useVirtualList,
-  useWakeLock,
-  useWebNotification,
-  useWebSocket,
-  useWebWorker,
-  useWebWorkerFn,
-  useWindowFocus,
-  useWindowScroll,
-  useWindowSize,
-  watchArray,
-  watchAtMost,
-  watchDebounced,
-  watchIgnorable,
-  watchOnce,
-  watchPausable,
-  watchThrottled,
-  watchTriggerable,
-  watchWithFilter,
-  whenever
-};
-//# sourceMappingURL=@vueuse_core.js.map

文件差異過大導致無法顯示
+ 0 - 3
docs/.vitepress/cache/deps/@vueuse_core.js.map


+ 21 - 39
docs/.vitepress/cache/deps/_metadata.json

@@ -1,72 +1,54 @@
 {
-  "hash": "848fe1b3",
-  "browserHash": "cd515ae6",
+  "hash": "c0aa5abf",
+  "browserHash": "786d5af0",
   "optimized": {
     "vue": {
       "src": "../../../../node_modules/.pnpm/vue@3.2.47/node_modules/vue/dist/vue.runtime.esm-bundler.js",
       "file": "vue.js",
-      "fileHash": "c9f10eeb",
+      "fileHash": "fca2bc15",
+      "needsInterop": false
+    },
+    "@tresjs/core": {
+      "src": "../../../../node_modules/.pnpm/@tresjs+core@2.0.0-beta.2_three@0.150.1/node_modules/@tresjs/core/dist/tres.js",
+      "file": "@tresjs_core.js",
+      "fileHash": "f99c16ea",
       "needsInterop": false
     },
     "three": {
-      "src": "../../../../node_modules/.pnpm/three@0.151.3/node_modules/three/build/three.module.js",
+      "src": "../../../../node_modules/.pnpm/three@0.150.1/node_modules/three/build/three.module.js",
       "file": "three.js",
-      "fileHash": "2d323184",
+      "fileHash": "674337d4",
       "needsInterop": false
     },
     "@tresjs/cientos": {
-      "src": "../../../../node_modules/.pnpm/@tresjs+cientos@2.0.0-alpha.5_three@0.151.3/node_modules/@tresjs/cientos/dist/trescientos.js",
+      "src": "../../../../node_modules/.pnpm/@tresjs+cientos@2.0.0-beta.0_tmfoxhtycm6gvt37fuuvp77ciy/node_modules/@tresjs/cientos/dist/trescientos.js",
       "file": "@tresjs_cientos.js",
-      "fileHash": "33f4f4eb",
+      "fileHash": "8c54a5ea",
       "needsInterop": false
     },
     "@stackblitz/sdk": {
-      "src": "../../../../node_modules/.pnpm/@stackblitz+sdk@1.8.2/node_modules/@stackblitz/sdk/bundles/sdk.m.js",
+      "src": "../../../../node_modules/.pnpm/@stackblitz+sdk@1.9.0/node_modules/@stackblitz/sdk/bundles/sdk.m.js",
       "file": "@stackblitz_sdk.js",
-      "fileHash": "d44a5cc0",
-      "needsInterop": false
-    },
-    "@tresjs/core": {
-      "src": "../../../../node_modules/.pnpm/@tresjs+core@2.0.0-alpha.1_three@0.151.3+vue@3.2.47/node_modules/@tresjs/core/dist/tres.js",
-      "file": "@tresjs_core.js",
-      "fileHash": "535db069",
+      "fileHash": "8df2d73d",
       "needsInterop": false
     },
     "gsap": {
       "src": "../../../../node_modules/.pnpm/gsap@3.11.5/node_modules/gsap/index.js",
       "file": "gsap.js",
-      "fileHash": "e5cac61b",
-      "needsInterop": false
-    },
-    "@alvarosabu/utils": {
-      "src": "../../../../node_modules/.pnpm/@alvarosabu+utils@2.3.0/node_modules/@alvarosabu/utils/dist/as-utils.js",
-      "file": "@alvarosabu_utils.js",
-      "fileHash": "003e834f",
-      "needsInterop": false
-    },
-    "@vueuse/core": {
-      "src": "../../../../node_modules/.pnpm/@vueuse+core@9.13.0/node_modules/@vueuse/core/index.mjs",
-      "file": "@vueuse_core.js",
-      "fileHash": "238d33fe",
-      "needsInterop": false
-    },
-    "three/src/math/MathUtils": {
-      "src": "../../../../node_modules/.pnpm/three@0.151.3/node_modules/three/src/math/MathUtils.js",
-      "file": "three_src_math_MathUtils.js",
-      "fileHash": "29b46742",
+      "fileHash": "194308d9",
       "needsInterop": false
     }
   },
   "chunks": {
-    "chunk-ZUTZQNJG": {
-      "file": "chunk-ZUTZQNJG.js"
-    },
-    "chunk-UMTEG5DH": {
-      "file": "chunk-UMTEG5DH.js"
+    "chunk-ZAYNNKM4": {
+      "file": "chunk-ZAYNNKM4.js"
     },
     "chunk-LZPJ5JBW": {
       "file": "chunk-LZPJ5JBW.js"
     },
+    "chunk-4QXXOI63": {
+      "file": "chunk-4QXXOI63.js"
+    },
     "chunk-JC4IRQUL": {
       "file": "chunk-JC4IRQUL.js"
     }

文件差異過大導致無法顯示
+ 447 - 493
docs/.vitepress/cache/deps/chunk-4QXXOI63.js


文件差異過大導致無法顯示
+ 3 - 0
docs/.vitepress/cache/deps/chunk-4QXXOI63.js.map


文件差異過大導致無法顯示
+ 0 - 3
docs/.vitepress/cache/deps/chunk-UMTEG5DH.js.map


+ 357 - 272
docs/.vitepress/cache/deps/chunk-ZUTZQNJG.js → docs/.vitepress/cache/deps/chunk-ZAYNNKM4.js

@@ -1,24 +1,3 @@
-import {
-  ACESFilmicToneMapping,
-  Clock,
-  Color,
-  LinearEncoding,
-  LoadingManager,
-  MathUtils,
-  Mesh,
-  NoToneMapping,
-  OrthographicCamera,
-  PCFShadowMap,
-  PCFSoftShadowMap,
-  PerspectiveCamera,
-  Raycaster,
-  Scene,
-  TextureLoader,
-  Vector2,
-  WebGLRenderer,
-  sRGBEncoding,
-  three_module_exports
-} from "./chunk-UMTEG5DH.js";
 import {
   computed,
   createRenderer,
@@ -26,9 +5,12 @@ import {
   getCurrentInstance,
   getCurrentScope,
   h,
+  inject,
   nextTick,
   onMounted,
   onScopeDispose,
+  onUnmounted,
+  provide,
   readonly,
   ref,
   shallowReactive,
@@ -39,8 +21,29 @@ import {
   watch,
   watchEffect
 } from "./chunk-LZPJ5JBW.js";
+import {
+  ACESFilmicToneMapping,
+  BufferAttribute,
+  Clock,
+  Color,
+  LinearEncoding,
+  LoadingManager,
+  MathUtils,
+  NoToneMapping,
+  OrthographicCamera,
+  PCFShadowMap,
+  PCFSoftShadowMap,
+  PerspectiveCamera,
+  Raycaster,
+  Scene,
+  TextureLoader,
+  Vector2,
+  WebGLRenderer,
+  sRGBEncoding,
+  three_module_exports
+} from "./chunk-4QXXOI63.js";
 
-// node_modules/.pnpm/@vueuse+shared@9.13.0_vue@3.2.47/node_modules/@vueuse/shared/index.mjs
+// node_modules/.pnpm/@vueuse+shared@9.13.0/node_modules/@vueuse/shared/index.mjs
 var _a;
 var isClient = typeof window !== "undefined";
 var isFunction = (val) => typeof val === "function";
@@ -94,7 +97,7 @@ function tryOnMounted(fn, sync = true) {
     nextTick(fn);
 }
 
-// node_modules/.pnpm/@vueuse+core@9.13.0_vue@3.2.47/node_modules/@vueuse/core/index.mjs
+// node_modules/.pnpm/@vueuse+core@9.13.0/node_modules/@vueuse/core/index.mjs
 function unrefElement(elRef) {
   var _a2;
   const plain = resolveUnref(elRef);
@@ -318,14 +321,14 @@ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
 var __hasOwnProp = Object.prototype.hasOwnProperty;
 var __propIsEnum = Object.prototype.propertyIsEnumerable;
 var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __spreadValues = (a, b2) => {
-  for (var prop in b2 || (b2 = {}))
-    if (__hasOwnProp.call(b2, prop))
-      __defNormalProp(a, prop, b2[prop]);
+var __spreadValues = (a, b) => {
+  for (var prop in b || (b = {}))
+    if (__hasOwnProp.call(b, prop))
+      __defNormalProp(a, prop, b[prop]);
   if (__getOwnPropSymbols)
-    for (var prop of __getOwnPropSymbols(b2)) {
-      if (__propIsEnum.call(b2, prop))
-        __defNormalProp(a, prop, b2[prop]);
+    for (var prop of __getOwnPropSymbols(b)) {
+      if (__propIsEnum.call(b, prop))
+        __defNormalProp(a, prop, b[prop]);
     }
   return a;
 };
@@ -387,25 +390,25 @@ function useWindowSize(options = {}) {
   return { width, height };
 }
 
-// node_modules/.pnpm/@tresjs+core@2.0.0-alpha.1_three@0.151.3+vue@3.2.47/node_modules/@tresjs/core/dist/tres.js
-var G = ref({ uuid: MathUtils.generateUUID() });
-var se = (e) => void Object.assign(G.value, e);
-var Ne = ((e) => (e.Perspective = "Perspective", e.Orthographic = "Orthographic", e))(Ne || {});
-var qe = 45;
-var y;
-function ce() {
-  const { state: e, setState: t, aspectRatio: r } = L();
-  function o(a = "Perspective", s) {
-    var l, p, m;
-    if (a === "Perspective") {
-      const { near: d, far: w, fov: v } = s || {
+// node_modules/.pnpm/@tresjs+core@2.0.0-beta.2_three@0.150.1/node_modules/@tresjs/core/dist/tres.js
+var N = ref({ uuid: MathUtils.generateUUID() });
+var ve = (e) => void Object.assign(N.value, e);
+var Xe = ((e) => (e.Perspective = "Perspective", e.Orthographic = "Orthographic", e))(Xe || {});
+var Je = 45;
+var L;
+function q() {
+  const { state: e, setState: t, aspectRatio: r } = k();
+  function a(o = "Perspective", c) {
+    var l, v, d;
+    if (o === "Perspective") {
+      const { near: f, far: M, fov: h2 } = c || {
         near: 0.1,
         far: 1e3,
-        fov: qe
+        fov: Je
       };
-      y = new PerspectiveCamera(v, ((l = e.aspectRatio) == null ? void 0 : l.value) || window.innerWidth / window.innerHeight, d, w), (p = e.cameras) == null || p.push(y);
+      L = new PerspectiveCamera(h2, ((l = e.aspectRatio) == null ? void 0 : l.value) || window.innerWidth / window.innerHeight, f, M), (v = e.cameras) == null || v.push(L);
     } else {
-      const { left: d, right: w, top: v, bottom: g, near: E, far: x } = s || {
+      const { left: f, right: M, top: h2, bottom: C, near: g, far: p } = c || {
         left: -100,
         right: 100,
         top: 100,
@@ -413,60 +416,60 @@ function ce() {
         near: 0.1,
         far: 1e3
       };
-      y = new OrthographicCamera(d, w, v, g, E, x), (m = e.cameras) == null || m.push(y);
+      L = new OrthographicCamera(f, M, h2, C, g, p), (d = e.cameras) == null || d.push(L);
     }
-    return e.camera = y, t("camera", e.camera), y;
+    return e.camera = L, t("camera", e.camera), L;
   }
   function n() {
-    var a;
-    e.camera instanceof PerspectiveCamera && e.aspectRatio && (e.camera.aspect = e.aspectRatio.value), (a = e.camera) == null || a.updateProjectionMatrix();
+    var o;
+    e.camera instanceof PerspectiveCamera && e.aspectRatio && (e.camera.aspect = e.aspectRatio.value), (o = e.camera) == null || o.updateProjectionMatrix();
   }
-  function i(a) {
-    var s;
-    (s = e.cameras) == null || s.push(a), a instanceof PerspectiveCamera && e.aspectRatio && (a.aspect = e.aspectRatio.value), a.updateProjectionMatrix(), t("camera", a);
+  function i(o) {
+    var c;
+    (c = e.cameras) == null || c.push(o), o instanceof PerspectiveCamera && e.aspectRatio && (o.aspect = e.aspectRatio.value), o.updateProjectionMatrix(), t("camera", o);
   }
-  function c() {
+  function s() {
     e.cameras = [];
   }
   return watchEffect(() => {
     r != null && r.value && n();
   }), {
     activeCamera: toRef(e, "camera"),
-    createCamera: o,
+    createCamera: a,
     updateCamera: n,
     pushCamera: i,
-    clearCameras: c
+    clearCameras: s
   };
 }
-var ue = createEventHook();
-var le = createEventHook();
-var V = createEventHook();
-var b = new Clock();
-var A = 0;
-var k = 0;
-var { pause: Je, resume: Ke, isActive: Xe } = useRafFn(
+var he = createEventHook();
+var ge = createEventHook();
+var Y = createEventHook();
+var R = new Clock();
+var D = 0;
+var W = 0;
+var { pause: Qe, resume: Ze, isActive: et } = useRafFn(
   () => {
-    ue.trigger({ delta: A, elapsed: k, clock: b }), le.trigger({ delta: A, elapsed: k, clock: b }), V.trigger({ delta: A, elapsed: k, clock: b });
+    he.trigger({ delta: D, elapsed: W, clock: R }), ge.trigger({ delta: D, elapsed: W, clock: R }), Y.trigger({ delta: D, elapsed: W, clock: R });
   },
   { immediate: false }
 );
-V.on(() => {
-  A = b.getDelta(), k = b.getElapsedTime();
+Y.on(() => {
+  D = R.getDelta(), W = R.getElapsedTime();
 });
-function $() {
+function we() {
   return {
-    onBeforeLoop: ue.on,
-    onLoop: le.on,
-    onAfterLoop: V.on,
-    pause: Je,
-    resume: Ke,
-    isActive: Xe
+    onBeforeLoop: he.on,
+    onLoop: ge.on,
+    onAfterLoop: Y.on,
+    pause: Qe,
+    resume: Ze,
+    isActive: et
   };
 }
-function Ye(e) {
+function tt(e) {
   return e instanceof Color ? e : Array.isArray(e) ? new Color(...e) : new Color(e);
 }
-var B = {
+var G = {
   realistic: {
     outputEncoding: sRGBEncoding,
     toneMapping: ACESFilmicToneMapping,
@@ -477,186 +480,218 @@ var B = {
     }
   }
 };
-var fe = (e, t) => {
+var be = (e, t) => {
   for (const r of Object.keys(t))
-    t[r] instanceof Object && Object.assign(t[r], fe(e[r], t[r]));
+    t[r] instanceof Object && Object.assign(t[r], be(e[r], t[r]));
   return Object.assign(e || {}, t), e;
 };
-var Qe = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot";
-var Ze = et(Qe);
-function I(e) {
+var nt = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot";
+var at = rt(nt);
+function _(e) {
   return e.replace(/-([a-z])/g, (t, r) => r.toUpperCase());
 }
-function et(e, t) {
-  const r = /* @__PURE__ */ Object.create(null), o = e.split(",");
-  for (let n = 0; n < o.length; n++)
-    r[o[n]] = true;
+function rt(e, t) {
+  const r = /* @__PURE__ */ Object.create(null), a = e.split(",");
+  for (let n = 0; n < a.length; n++)
+    r[a[n]] = true;
   return t ? (n) => !!r[n.toLowerCase()] : (n) => !!r[n];
 }
-var f = shallowRef();
-var H = ref(false);
-function tt(e, t, r) {
-  const {
-    alpha: o = true,
+function ot(e) {
+  var ee, te;
+  const t = shallowRef(), r = ref(false), {
+    alpha: a = true,
     antialias: n = true,
     depth: i,
-    logarithmicDepthBuffer: c,
-    failIfMajorPerformanceCaveat: a,
-    precision: s,
+    logarithmicDepthBuffer: s,
+    failIfMajorPerformanceCaveat: o,
+    precision: c,
     premultipliedAlpha: l,
-    stencil: p,
-    shadows: m = false,
-    shadowMapType: d = PCFShadowMap,
-    physicallyCorrectLights: w = false,
-    useLegacyLights: v = false,
-    outputEncoding: g = LinearEncoding,
-    toneMapping: E = NoToneMapping,
-    toneMappingExposure: x = 1,
-    context: de = void 0,
-    powerPreference: ve = "default",
-    preserveDrawingBuffer: ge = false,
-    clearColor: C,
-    windowSize: we = false,
-    preset: he = void 0
-  } = toRefs(r), { setState: D } = L(), { width: N, height: q } = resolveUnref(we) ? useWindowSize() : useElementSize(t), { logError: ye } = j(), { pixelRatio: J } = useDevicePixelRatio(), { pause: Me, resume: Ce } = $(), F = computed(() => N.value / q.value), K = () => {
-    f.value && (f.value.setSize(N.value, q.value), f.value.setPixelRatio(Math.min(J.value, 2)));
-  }, X = () => {
-    if (!f.value)
+    stencil: v,
+    shadows: d = false,
+    shadowMapType: f = PCFShadowMap,
+    physicallyCorrectLights: M = false,
+    useLegacyLights: h2 = false,
+    outputEncoding: C = LinearEncoding,
+    toneMapping: g = NoToneMapping,
+    toneMappingExposure: p = 1,
+    context: b = void 0,
+    powerPreference: y = "default",
+    preserveDrawingBuffer: O = false,
+    clearColor: w,
+    windowSize: T = false,
+    preset: j = void 0
+  } = toRefs(e), { state: x, setState: F } = k(), { width: K, height: X } = resolveUnref(T) ? useWindowSize() : useElementSize(x.container), { logError: Me, logWarning: Ce } = A(), { pixelRatio: J } = useDevicePixelRatio(), { pause: Ee, resume: Le } = we(), I = computed(() => K.value / X.value);
+  !resolveUnref(T) && ((te = (ee = x.container) == null ? void 0 : ee.value) == null ? void 0 : te.offsetHeight) === 0 && Ce(`Oops... Seems like your canvas height is currently 0px, by default it takes the height of it's parent, so make sure it has some height with CSS.
+You could set windowSize=true to force the canvas to be the size of the window.`);
+  const Q = () => {
+    t.value && (t.value.setSize(K.value, X.value), t.value.setPixelRatio(Math.min(J.value, 2)));
+  }, Z = () => {
+    if (!t.value)
       return;
-    const h2 = resolveUnref(he);
-    if (h2) {
-      h2 in B || ye("Renderer Preset must be one of these: " + Object.keys(B).join(", ")), fe(f.value, B[h2]);
+    const E = resolveUnref(j);
+    if (E) {
+      E in G || Me("Renderer Preset must be one of these: " + Object.keys(G).join(", ")), be(t.value, G[E]);
       return;
     }
-    f.value.shadowMap.enabled = resolveUnref(m), f.value.shadowMap.type = resolveUnref(d), f.value.toneMapping = resolveUnref(E) || NoToneMapping, f.value.toneMappingExposure = resolveUnref(x), f.value.outputEncoding = resolveUnref(g) || LinearEncoding, C != null && C.value && f.value.setClearColor(Ye(resolveUnref(C))), f.value.useLegacyLights = resolveUnref(v);
-  }, be = () => {
-    const h2 = unrefElement(e);
-    h2 && (f.value = new WebGLRenderer({
-      canvas: h2,
-      alpha: resolveUnref(o),
+    t.value.shadowMap.enabled = resolveUnref(d), t.value.shadowMap.type = resolveUnref(f), t.value.toneMapping = resolveUnref(g) || NoToneMapping, t.value.toneMappingExposure = resolveUnref(p), t.value.outputEncoding = resolveUnref(C) || LinearEncoding, w != null && w.value && t.value.setClearColor(tt(resolveUnref(w))), t.value.useLegacyLights = resolveUnref(h2);
+  }, Se = () => {
+    const E = unrefElement(x.canvas);
+    E && (t.value = new WebGLRenderer({
+      canvas: E,
+      alpha: resolveUnref(a),
       antialias: resolveUnref(n),
-      context: resolveUnref(de),
+      context: resolveUnref(b),
       depth: resolveUnref(i),
-      failIfMajorPerformanceCaveat: resolveUnref(a),
-      logarithmicDepthBuffer: resolveUnref(c),
-      powerPreference: resolveUnref(ve),
-      precision: resolveUnref(s),
-      stencil: resolveUnref(p),
-      preserveDrawingBuffer: resolveUnref(ge),
+      failIfMajorPerformanceCaveat: resolveUnref(o),
+      logarithmicDepthBuffer: resolveUnref(s),
+      powerPreference: resolveUnref(y),
+      precision: resolveUnref(c),
+      stencil: resolveUnref(v),
+      preserveDrawingBuffer: resolveUnref(O),
       premultipliedAlpha: resolveUnref(l)
-    }), D("renderer", f.value), D("clock", new Clock()), D("aspectRatio", F), X(), K(), Ce(), H.value = true);
-  }, Le = () => {
-    f.value && (f.value.dispose(), f.value = void 0, H.value = false, Me());
+    }), F("renderer", t.value), F("clock", new Clock()), F("aspectRatio", I), Z(), Q(), Le(), r.value = true);
+  }, Te = () => {
+    t.value && (t.value.dispose(), t.value = void 0, r.value = false, Ee());
   };
-  return watch([F, J], K), watch(
-    [m, d, g, v, E, x, C],
-    X
+  return watch([I, J], Q), watch(
+    [d, f, C, h2, g, p, w],
+    Z
   ), watch(
-    () => [e, t],
+    () => [x.canvas, x.container],
     () => {
-      unrefElement(e) && unrefElement(t) && be();
+      unrefElement(x.canvas) && unrefElement(x.container) && Se();
     },
     { immediate: true, deep: true }
   ), {
-    renderer: f,
-    isReady: H,
-    dispose: Le,
-    aspectRatio: F
+    renderer: t,
+    isReady: r,
+    dispose: Te,
+    aspectRatio: I
   };
 }
-var pe = (e) => !!e && e.constructor === Array;
-function nt(e) {
+var ye = (e) => !!e && e.constructor === Array;
+function it(e) {
   const t = { nodes: {}, materials: {} };
   return e && e.traverse((r) => {
     r.name && (t.nodes[r.name] = r), r.material && !t.materials[r.material.name] && (t.materials[r.material.name] = r.material);
   }), t;
 }
-async function dt(e, t, r, o, n) {
-  const { logError: i } = j(), c = new e();
-  n && n(c), r && r(c);
-  const s = (Array.isArray(t) ? t : [t]).map(
-    (l) => new Promise((p, m) => {
-      c.load(
+async function Mt(e, t, r, a, n) {
+  const { logError: i } = A(), s = new e();
+  n && n(s), r && r(s);
+  const c = (Array.isArray(t) ? t : [t]).map(
+    (l) => new Promise((v, d) => {
+      s.load(
         l,
-        (d) => {
-          d.scene && Object.assign(d, nt(d.scene)), p(d);
+        (f) => {
+          f.scene && Object.assign(f, it(f.scene)), v(f);
         },
-        o,
-        (d) => m(i("[useLoader] - Failed to load resource", d))
+        a,
+        (f) => d(i("[useLoader] - Failed to load resource", f))
       );
     })
   );
-  return pe(t) ? await Promise.all(s) : await s[0];
+  return ye(t) ? await Promise.all(c) : await c[0];
 }
-async function vt(e) {
-  const t = new LoadingManager(), r = new TextureLoader(t), o = (n) => new Promise((i, c) => {
+async function Ct(e) {
+  const t = new LoadingManager(), r = new TextureLoader(t), a = (n) => new Promise((i, s) => {
     r.load(
       n,
-      (a) => i(a),
+      (o) => i(o),
       () => null,
       () => {
-        c(new Error("[useTextures] - Failed to load texture"));
+        s(new Error("[useTextures] - Failed to load texture"));
       }
     );
   });
-  if (pe(e)) {
-    const n = await Promise.all(e.map((i) => o(i)));
+  if (ye(e)) {
+    const n = await Promise.all(e.map((i) => a(i)));
     return e.length > 1 ? n : n[0];
   } else {
-    const { map: n, displacementMap: i, normalMap: c, roughnessMap: a, metalnessMap: s, aoMap: l } = e;
+    const {
+      map: n,
+      displacementMap: i,
+      normalMap: s,
+      roughnessMap: o,
+      metalnessMap: c,
+      aoMap: l,
+      alphaMap: v,
+      matcap: d
+    } = e;
     return {
-      map: n ? await o(n) : null,
-      displacementMap: i ? await o(i) : null,
-      normalMap: c ? await o(c) : null,
-      roughnessMap: a ? await o(a) : null,
-      metalnessMap: s ? await o(s) : null,
-      aoMap: l ? await o(l) : null
+      map: n ? await a(n) : null,
+      displacementMap: i ? await a(i) : null,
+      normalMap: s ? await a(s) : null,
+      roughnessMap: o ? await a(o) : null,
+      metalnessMap: c ? await a(c) : null,
+      aoMap: l ? await a(l) : null,
+      alphaMap: v ? await a(v) : null,
+      matcap: d ? await a(d) : null
     };
   }
 }
-var R = shallowReactive({
-  camera: void 0,
-  cameras: [],
-  aspectRatio: computed(() => window.innerWidth / window.innerHeight)
-});
-function L() {
-  function e(r) {
-    return R[r];
+var m = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff"];
+function st() {
+  const e = Math.random() * 4294967295 | 0, t = Math.random() * 4294967295 | 0, r = Math.random() * 4294967295 | 0, a = Math.random() * 4294967295 | 0;
+  return (m[e & 255] + m[e >> 8 & 255] + m[e >> 16 & 255] + m[e >> 24 & 255] + "-" + m[t & 255] + m[t >> 8 & 255] + "-" + m[t >> 16 & 15 | 64] + m[t >> 24 & 255] + "-" + m[r & 63 | 128] + m[r >> 8 & 255] + "-" + m[r >> 16 & 255] + m[r >> 24 & 255] + m[a & 255] + m[a >> 8 & 255] + m[a >> 16 & 255] + m[a >> 24 & 255]).toLowerCase();
+}
+var xe = Symbol();
+function ct() {
+  const e = shallowReactive({
+    uuid: st(),
+    camera: void 0,
+    cameras: [],
+    scene: void 0,
+    renderer: void 0,
+    aspectRatio: computed(() => window.innerWidth / window.innerHeight)
+  });
+  function t(n) {
+    return e[n];
   }
-  function t(r, o) {
-    R[r] = o;
+  function r(n, i) {
+    e[n] = i;
   }
-  return {
-    state: R,
-    ...toRefs(R),
-    getState: e,
-    setState: t
+  const a = {
+    state: e,
+    ...toRefs(e),
+    getState: t,
+    setState: r
   };
+  return provide(xe, a), a;
 }
-var ee = shallowRef(new Raycaster());
-var S = ref(new Vector2());
-var at = ref(null);
-function me() {
-  const { setState: e } = L();
-  e("raycaster", ee.value), e("pointer", S), e("currentInstance", at);
-  function t(r) {
-    S.value.x = r.clientX / window.innerWidth * 2 - 1, S.value.y = -(r.clientY / window.innerHeight) * 2 + 1;
+var k = () => inject(xe, {
+  state: shallowReactive({
+    camera: void 0,
+    cameras: [],
+    scene: void 0,
+    renderer: void 0
+  })
+});
+function ut() {
+  var s;
+  const e = shallowRef(new Raycaster()), t = ref(new Vector2()), r = ref(null), { setState: a, state: n } = k();
+  a("raycaster", e.value), a("pointer", t), a("currentInstance", r);
+  function i(o) {
+    t.value.x = o.clientX / window.innerWidth * 2 - 1, t.value.y = -(o.clientY / window.innerHeight) * 2 + 1;
   }
-  return window.addEventListener("pointermove", t), {
-    raycaster: ee,
-    pointer: S
+  return (s = n == null ? void 0 : n.renderer) == null || s.domElement.addEventListener("pointermove", i), onUnmounted(() => {
+    var o;
+    (o = n == null ? void 0 : n.renderer) == null || o.domElement.removeEventListener("pointermove", i);
+  }), {
+    raycaster: e,
+    pointer: t
   };
 }
-var gt = true;
-var te = "[TresJS ▲ ■ ●] ";
-function j() {
-  function e(o, n) {
-    console.error(`${te} ${o}`, n || "");
+var Et = true;
+var oe = "[TresJS ▲ ■ ●] ";
+function A() {
+  function e(a, n) {
+    console.error(`${oe} ${a}`, n || "");
   }
-  function t(o) {
-    console.warn(`${te} ${o}`);
+  function t(a) {
+    console.warn(`${oe} ${a}`);
   }
-  function r(o, n) {
+  function r(a, n) {
   }
   return {
     logError: e,
@@ -664,48 +699,47 @@ function j() {
     logMessage: r
   };
 }
-var { logWarning: rt } = j();
-function ot(e) {
-  for (const t in e)
-    if (t.indexOf("on") === 0)
-      return true;
-  return false;
+function Lt() {
+  const { logWarning: e } = A();
+  function t(a, n, i) {
+    let s = null;
+    return a.traverse((o) => {
+      o[n] === i && (s = o);
+    }), s || e(`Child with ${n} '${i}' not found.`), s;
+  }
+  function r(a, n) {
+    return t(a, "name", n);
+  }
+  return {
+    seek: t,
+    seekByName: r
+  };
 }
-var T = null;
-var it = {
-  createElement(e, t, r, o) {
-    if (e === "template" || Ze(e))
+var { logWarning: lt } = A();
+var ft = /^on[^a-z]/;
+var dt = (e) => ft.test(e);
+var z = null;
+var pt = {
+  createElement(e, t, r, a) {
+    if (e === "template" || at(e))
       return null;
     let n;
-    if (o === null && (o = {}), o != null && o.args ? n = new G.value[e.replace("Tres", "")](...o.args) : n = new G.value[e.replace("Tres", "")](), n.isCamera) {
-      (!(o != null && o.position) || o != null && o.position.every((c) => c == 0)) && rt(
+    if (a === null && (a = {}), a != null && a.args ? n = new N.value[e.replace("Tres", "")](...a.args) : n = new N.value[e.replace("Tres", "")](), n.isCamera) {
+      (!(a != null && a.position) || a != null && a.position.every((s) => s == 0)) && lt(
         // eslint-disable-next-line max-len
         "Camera is positioned at the center of the scene [0,0,0], if this is not intentional try setting a position if your scene seems empty 🤗"
       );
-      const { pushCamera: i } = ce();
+      const { pushCamera: i } = q();
       i(n);
     }
-    return (o == null ? void 0 : o.attach) === void 0 && (n.isMaterial ? n.attach = "material" : n.isBufferGeometry && (n.attach = "geometry")), n;
+    return (a == null ? void 0 : a.attach) === void 0 && (n.isMaterial ? n.attach = "material" : n.isBufferGeometry && (n.attach = "geometry")), n.events = {}, n;
   },
   insert(e, t, r) {
-    if (T === null && t.isScene && (T = t), t === null && (t = T), t != null && t.isObject3D && (e != null && e.isObject3D)) {
+    if (z === null && t.isScene && (z = t), t === null && (t = z), t != null && t.isObject3D && (e != null && e.isObject3D)) {
       const a = r ? t.children.indexOf(r) : 0;
       e.parent = t, t.children.splice(a, 0, e), e.dispatchEvent({ type: "added" });
     } else
       typeof (e == null ? void 0 : e.attach) == "string" && (e.__previousAttach = e[t == null ? void 0 : t.attach], t && (t[e.attach] = e));
-    const { onLoop: o } = $();
-    let n = null, i = null;
-    const { raycaster: c } = me();
-    e && e instanceof Mesh && ot(e) && (o(() => {
-      var a, s, l;
-      if (t != null && t.children && e && c) {
-        const p = c.value.intersectObjects(t.children);
-        p.length > 0 && p[0].object.uuid === e.uuid ? (i = p[0], (n === null || n.object.uuid !== (i == null ? void 0 : i.object.uuid)) && ((a = e.onPointerEnter) == null || a.call(e, i)), (s = e.onPointerMove) == null || s.call(e, i)) : (i = null, n !== null && ((l = e.onPointerLeave) == null || l.call(e, n))), n = i;
-      }
-    }), useEventListener(window, "click", () => {
-      var a;
-      i !== null && ((a = e.onClick) == null || a.call(e, i));
-    }));
   },
   remove(e) {
     if (!e)
@@ -713,19 +747,29 @@ var it = {
     const t = e.parentNode;
     t && t.removeChild(e);
   },
-  patchProp(e, t, r, o) {
+  patchProp(e, t, r, a) {
     if (e) {
       let n = e, i = t;
-      const c = I(i);
-      let a = n == null ? void 0 : n[c];
-      if (e.parent || (e.parent = T), i.includes("-") && a === void 0) {
+      const s = _(i);
+      let o = n == null ? void 0 : n[s];
+      if (e.parent || (e.parent = z), n.type === "BufferGeometry") {
+        n.setAttribute(
+          _(i),
+          new BufferAttribute(...a)
+        );
+        return;
+      }
+      if (i.includes("-") && o === void 0) {
         const l = i.split("-");
-        a = l.reduce((p, m) => p[I(m)], n), i = l.pop(), a != null && a.set || (n = l.reduce((p, m) => p[I(m)], n));
+        o = l.reduce((v, d) => v[_(d)], n), i = l.pop(), o != null && o.set || (n = l.reduce((v, d) => v[_(d)], n));
       }
-      let s = o;
-      if (s === "" && (s = true), isFunction(a))
+      dt(i) && (e.events[i] = a);
+      let c = a;
+      if (c === "" && (c = true), isFunction(o)) {
+        Array.isArray(c) ? e[s](...c) : e[s](c);
         return;
-      !(a != null && a.set) && !isFunction(a) ? n[c] = s : a.constructor === s.constructor && (a != null && a.copy) ? a == null || a.copy(s) : Array.isArray(s) ? a.set(...s) : !a.isColor && a.setScalar ? a.setScalar(s) : a.set(s);
+      }
+      !(o != null && o.set) && !isFunction(o) ? n[s] = c : o.constructor === c.constructor && (o != null && o.copy) ? o == null || o.copy(c) : Array.isArray(c) ? o.set(...c) : !o.isColor && o.setScalar ? o.setScalar(c) : o.set(c);
     }
   },
   parentNode(e) {
@@ -741,18 +785,18 @@ var it = {
   cloneNode: () => void 0,
   insertStaticContent: () => void 0
 };
-var { createApp: st } = createRenderer(it);
-var ct = (e) => {
-  const t = st(r);
+var { createApp: mt } = createRenderer(pt);
+var vt = (e) => {
+  const t = mt(r);
   function r() {
     return e && e.default ? e.default() : [];
   }
   return t;
 };
-se(three_module_exports);
-var { logWarning: ut } = j();
-var lt = defineComponent({
-  name: "TresCanvas",
+ve(three_module_exports);
+var { logWarning: ht } = A();
+var gt = defineComponent({
+  name: "TresScene",
   props: [
     "shadows",
     "shadowMapType",
@@ -769,28 +813,44 @@ var lt = defineComponent({
     "preset"
   ],
   setup(e, { slots: t, expose: r }) {
-    e.physicallyCorrectLights === true && ut("physicallyCorrectLights is deprecated, useLegacyLights is now false by default");
-    const o = ref(), n = ref(), i = new Scene(), { setState: c } = L();
-    c("scene", i);
-    function a() {
-      const { renderer: p } = tt(n, o, e), { activeCamera: m } = ce(), { onLoop: d } = $(), { raycaster: w, pointer: v } = me();
-      d(() => {
-        var g;
-        m.value && (w.value.setFromCamera(v.value, m.value), (g = p.value) == null || g.render(i, m.value));
+    e.physicallyCorrectLights === true && ht("physicallyCorrectLights is deprecated, useLegacyLights is now false by default");
+    const a = ref(), n = ref(), i = new Scene(), { setState: s } = k();
+    s("scene", i), s("canvas", n), s("container", a);
+    const { pushCamera: o } = q();
+    o(new PerspectiveCamera()), onMounted(() => {
+      c();
+    }), onUnmounted(() => {
+      s("renderer", null);
+    });
+    function c() {
+      const { renderer: d } = ot(e), { activeCamera: f } = q(), { onLoop: M } = we(), { raycaster: h2, pointer: C } = ut();
+      let g = null, p = null;
+      watchEffect(() => {
+        f.value && h2.value.setFromCamera(C.value, f.value);
+      }), M(() => {
+        var b, y, O, w, T;
+        if (f.value && ((b = d.value) == null || b.render(i, f.value)), h2.value) {
+          const j = h2.value.intersectObjects(i.children);
+          j.length > 0 ? (p = j[0], g === null && ((O = (y = p.object.events).onPointerEnter) == null || O.call(y, p))) : g !== null && ((T = p == null ? void 0 : (w = p.object.events).onPointerLeave) == null || T.call(w, g), p = null), g = p;
+        }
+      }), useEventListener(n.value, "click", () => {
+        var b, y;
+        p !== null && ((y = (b = p.object.events).onClick) == null || y.call(b, p));
       });
     }
-    watch(n, a);
-    let s;
-    function l() {
-      s = ct(t), s.provide("useTres", L()), s.provide("extend", se), s.mount(i);
+    let l;
+    function v() {
+      l = vt(t), l.provide("useTres", k()), l.provide("extend", ve), l.mount(i);
     }
-    return l(), r({
+    return v(), r({
       scene: i
     }), () => h(
       h(
         "div",
         {
-          ref: o,
+          ref: a,
+          "data-scene": i.uuid,
+          key: i.uuid,
           style: {
             position: "relative",
             width: "100%",
@@ -811,6 +871,7 @@ var lt = defineComponent({
             [
               h("canvas", {
                 ref: n,
+                "data-scene": i.uuid,
                 style: {
                   display: "block",
                   width: "100%",
@@ -827,27 +888,51 @@ var lt = defineComponent({
     );
   }
 });
-var wt = {
+var wt = defineComponent({
+  name: "TresCanvas",
+  props: [
+    "shadows",
+    "shadowMapType",
+    "physicallyCorrectLights",
+    "useLegacyLights",
+    "outputEncoding",
+    "toneMapping",
+    "toneMappingExposure",
+    "context",
+    "powerPreference",
+    "preserveDrawingBuffer",
+    "clearColor",
+    "windowSize",
+    "preset"
+  ],
+  setup(e, { slots: t, expose: r }) {
+    const a = ct();
+    return r(a), () => h(gt, e, t);
+  }
+});
+var St = {
   install(e) {
-    e.component("TresCanvas", lt);
+    e.component("TresCanvas", wt);
   }
 };
 
 export {
-  G,
-  se,
-  Ne,
-  ce,
-  $,
-  tt,
-  nt,
-  dt,
-  vt,
-  L,
-  me,
-  gt,
-  j,
-  lt,
-  wt
+  N,
+  ve,
+  Xe,
+  q,
+  we,
+  ot,
+  it,
+  Mt,
+  Ct,
+  ct,
+  k,
+  ut,
+  Et,
+  A,
+  Lt,
+  wt,
+  St
 };
-//# sourceMappingURL=chunk-ZUTZQNJG.js.map
+//# sourceMappingURL=chunk-ZAYNNKM4.js.map

文件差異過大導致無法顯示
+ 0 - 1
docs/.vitepress/cache/deps/chunk-ZAYNNKM4.js.map


+ 1 - 3
docs/.vitepress/cache/deps/three.js

@@ -9,7 +9,6 @@ import {
   AlwaysStencilFunc,
   AmbientLight,
   AmbientLightProbe,
-  AnimationAction,
   AnimationClip,
   AnimationLoader,
   AnimationMixer,
@@ -408,7 +407,7 @@ import {
   ZeroStencilOp,
   _SRGBAFormat,
   sRGBEncoding
-} from "./chunk-UMTEG5DH.js";
+} from "./chunk-4QXXOI63.js";
 import "./chunk-JC4IRQUL.js";
 export {
   ACESFilmicToneMapping,
@@ -421,7 +420,6 @@ export {
   AlwaysStencilFunc,
   AmbientLight,
   AmbientLightProbe,
-  AnimationAction,
   AnimationClip,
   AnimationLoader,
   AnimationMixer,

+ 0 - 208
docs/.vitepress/cache/deps/three_src_math_MathUtils.js

@@ -1,208 +0,0 @@
-import "./chunk-JC4IRQUL.js";
-
-// node_modules/.pnpm/three@0.151.3/node_modules/three/src/math/MathUtils.js
-var _lut = ["00", "01", "02", "03", "04", "05", "06", "07", "08", "09", "0a", "0b", "0c", "0d", "0e", "0f", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "1a", "1b", "1c", "1d", "1e", "1f", "20", "21", "22", "23", "24", "25", "26", "27", "28", "29", "2a", "2b", "2c", "2d", "2e", "2f", "30", "31", "32", "33", "34", "35", "36", "37", "38", "39", "3a", "3b", "3c", "3d", "3e", "3f", "40", "41", "42", "43", "44", "45", "46", "47", "48", "49", "4a", "4b", "4c", "4d", "4e", "4f", "50", "51", "52", "53", "54", "55", "56", "57", "58", "59", "5a", "5b", "5c", "5d", "5e", "5f", "60", "61", "62", "63", "64", "65", "66", "67", "68", "69", "6a", "6b", "6c", "6d", "6e", "6f", "70", "71", "72", "73", "74", "75", "76", "77", "78", "79", "7a", "7b", "7c", "7d", "7e", "7f", "80", "81", "82", "83", "84", "85", "86", "87", "88", "89", "8a", "8b", "8c", "8d", "8e", "8f", "90", "91", "92", "93", "94", "95", "96", "97", "98", "99", "9a", "9b", "9c", "9d", "9e", "9f", "a0", "a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8", "a9", "aa", "ab", "ac", "ad", "ae", "af", "b0", "b1", "b2", "b3", "b4", "b5", "b6", "b7", "b8", "b9", "ba", "bb", "bc", "bd", "be", "bf", "c0", "c1", "c2", "c3", "c4", "c5", "c6", "c7", "c8", "c9", "ca", "cb", "cc", "cd", "ce", "cf", "d0", "d1", "d2", "d3", "d4", "d5", "d6", "d7", "d8", "d9", "da", "db", "dc", "dd", "de", "df", "e0", "e1", "e2", "e3", "e4", "e5", "e6", "e7", "e8", "e9", "ea", "eb", "ec", "ed", "ee", "ef", "f0", "f1", "f2", "f3", "f4", "f5", "f6", "f7", "f8", "f9", "fa", "fb", "fc", "fd", "fe", "ff"];
-var _seed = 1234567;
-var DEG2RAD = Math.PI / 180;
-var RAD2DEG = 180 / Math.PI;
-function generateUUID() {
-  const d0 = Math.random() * 4294967295 | 0;
-  const d1 = Math.random() * 4294967295 | 0;
-  const d2 = Math.random() * 4294967295 | 0;
-  const d3 = Math.random() * 4294967295 | 0;
-  const uuid = _lut[d0 & 255] + _lut[d0 >> 8 & 255] + _lut[d0 >> 16 & 255] + _lut[d0 >> 24 & 255] + "-" + _lut[d1 & 255] + _lut[d1 >> 8 & 255] + "-" + _lut[d1 >> 16 & 15 | 64] + _lut[d1 >> 24 & 255] + "-" + _lut[d2 & 63 | 128] + _lut[d2 >> 8 & 255] + "-" + _lut[d2 >> 16 & 255] + _lut[d2 >> 24 & 255] + _lut[d3 & 255] + _lut[d3 >> 8 & 255] + _lut[d3 >> 16 & 255] + _lut[d3 >> 24 & 255];
-  return uuid.toLowerCase();
-}
-function clamp(value, min, max) {
-  return Math.max(min, Math.min(max, value));
-}
-function euclideanModulo(n, m) {
-  return (n % m + m) % m;
-}
-function mapLinear(x, a1, a2, b1, b2) {
-  return b1 + (x - a1) * (b2 - b1) / (a2 - a1);
-}
-function inverseLerp(x, y, value) {
-  if (x !== y) {
-    return (value - x) / (y - x);
-  } else {
-    return 0;
-  }
-}
-function lerp(x, y, t) {
-  return (1 - t) * x + t * y;
-}
-function damp(x, y, lambda, dt) {
-  return lerp(x, y, 1 - Math.exp(-lambda * dt));
-}
-function pingpong(x, length = 1) {
-  return length - Math.abs(euclideanModulo(x, length * 2) - length);
-}
-function smoothstep(x, min, max) {
-  if (x <= min)
-    return 0;
-  if (x >= max)
-    return 1;
-  x = (x - min) / (max - min);
-  return x * x * (3 - 2 * x);
-}
-function smootherstep(x, min, max) {
-  if (x <= min)
-    return 0;
-  if (x >= max)
-    return 1;
-  x = (x - min) / (max - min);
-  return x * x * x * (x * (x * 6 - 15) + 10);
-}
-function randInt(low, high) {
-  return low + Math.floor(Math.random() * (high - low + 1));
-}
-function randFloat(low, high) {
-  return low + Math.random() * (high - low);
-}
-function randFloatSpread(range) {
-  return range * (0.5 - Math.random());
-}
-function seededRandom(s) {
-  if (s !== void 0)
-    _seed = s;
-  let t = _seed += 1831565813;
-  t = Math.imul(t ^ t >>> 15, t | 1);
-  t ^= t + Math.imul(t ^ t >>> 7, t | 61);
-  return ((t ^ t >>> 14) >>> 0) / 4294967296;
-}
-function degToRad(degrees) {
-  return degrees * DEG2RAD;
-}
-function radToDeg(radians) {
-  return radians * RAD2DEG;
-}
-function isPowerOfTwo(value) {
-  return (value & value - 1) === 0 && value !== 0;
-}
-function ceilPowerOfTwo(value) {
-  return Math.pow(2, Math.ceil(Math.log(value) / Math.LN2));
-}
-function floorPowerOfTwo(value) {
-  return Math.pow(2, Math.floor(Math.log(value) / Math.LN2));
-}
-function setQuaternionFromProperEuler(q, a, b, c, order) {
-  const cos = Math.cos;
-  const sin = Math.sin;
-  const c2 = cos(b / 2);
-  const s2 = sin(b / 2);
-  const c13 = cos((a + c) / 2);
-  const s13 = sin((a + c) / 2);
-  const c1_3 = cos((a - c) / 2);
-  const s1_3 = sin((a - c) / 2);
-  const c3_1 = cos((c - a) / 2);
-  const s3_1 = sin((c - a) / 2);
-  switch (order) {
-    case "XYX":
-      q.set(c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13);
-      break;
-    case "YZY":
-      q.set(s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13);
-      break;
-    case "ZXZ":
-      q.set(s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13);
-      break;
-    case "XZX":
-      q.set(c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13);
-      break;
-    case "YXY":
-      q.set(s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13);
-      break;
-    case "ZYZ":
-      q.set(s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13);
-      break;
-    default:
-      console.warn("THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: " + order);
-  }
-}
-function denormalize(value, array) {
-  switch (array.constructor) {
-    case Float32Array:
-      return value;
-    case Uint16Array:
-      return value / 65535;
-    case Uint8Array:
-      return value / 255;
-    case Int16Array:
-      return Math.max(value / 32767, -1);
-    case Int8Array:
-      return Math.max(value / 127, -1);
-    default:
-      throw new Error("Invalid component type.");
-  }
-}
-function normalize(value, array) {
-  switch (array.constructor) {
-    case Float32Array:
-      return value;
-    case Uint16Array:
-      return Math.round(value * 65535);
-    case Uint8Array:
-      return Math.round(value * 255);
-    case Int16Array:
-      return Math.round(value * 32767);
-    case Int8Array:
-      return Math.round(value * 127);
-    default:
-      throw new Error("Invalid component type.");
-  }
-}
-var MathUtils = {
-  DEG2RAD,
-  RAD2DEG,
-  generateUUID,
-  clamp,
-  euclideanModulo,
-  mapLinear,
-  inverseLerp,
-  lerp,
-  damp,
-  pingpong,
-  smoothstep,
-  smootherstep,
-  randInt,
-  randFloat,
-  randFloatSpread,
-  seededRandom,
-  degToRad,
-  radToDeg,
-  isPowerOfTwo,
-  ceilPowerOfTwo,
-  floorPowerOfTwo,
-  setQuaternionFromProperEuler,
-  normalize,
-  denormalize
-};
-export {
-  DEG2RAD,
-  MathUtils,
-  RAD2DEG,
-  ceilPowerOfTwo,
-  clamp,
-  damp,
-  degToRad,
-  denormalize,
-  euclideanModulo,
-  floorPowerOfTwo,
-  generateUUID,
-  inverseLerp,
-  isPowerOfTwo,
-  lerp,
-  mapLinear,
-  normalize,
-  pingpong,
-  radToDeg,
-  randFloat,
-  randFloatSpread,
-  randInt,
-  seededRandom,
-  setQuaternionFromProperEuler,
-  smootherstep,
-  smoothstep
-};
-//# sourceMappingURL=three_src_math_MathUtils.js.map

文件差異過大導致無法顯示
+ 0 - 3
docs/.vitepress/cache/deps/three_src_math_MathUtils.js.map


+ 1 - 8
docs/.vitepress/config.ts

@@ -2,7 +2,6 @@ import Unocss from 'unocss/vite'
 import svgLoader from 'vite-svg-loader'
 import { defineConfig } from 'vitepress'
 import { resolve } from 'pathe'
-import Components from 'unplugin-vue-components/vite'
 
 export default defineConfig({
   title: 'TresJS',
@@ -96,13 +95,7 @@ export default defineConfig({
     ],
   },
   vite: {
-    plugins: [
-      svgLoader(),
-      Unocss(),
-      Components({
-        dirs: ['./theme/components'],
-      }),
-    ],
+    plugins: [svgLoader(), Unocss()],
     resolve: {
       alias: {
         '/@': resolve(__dirname, '../../src'),

+ 1 - 1
docs/.vitepress/theme/components/DonutExample.vue

@@ -16,7 +16,7 @@ const gl = {
 
 <template>
   <TresCanvas v-bind="gl">
-    <TresPerspectiveCamera :position="[3, 3, 3]" />
+    <TresPerspectiveCamera :position="[3, 3, 3]" :fov="45" />
     <OrbitControls />
     <TresMesh>
       <TresTorusGeometry :args="[1, 0.5, 16, 32]" />

+ 1 - 1
docs/.vitepress/theme/components/FirstScene.vue

@@ -1,7 +1,7 @@
 <script setup lang="ts">
 import { ref, onMounted } from 'vue'
 import { sRGBEncoding } from 'three'
-import { TresCanvas } from '/@/'
+import { TresCanvas } from '@tresjs/core'
 import { OrbitControls } from '@tresjs/cientos'
 const LightRef = ref()
 

+ 3 - 3
docs/guide/index.md

@@ -4,11 +4,11 @@
     <FirstScene style="aspect-ratio: 16/9; height: auto; margin: 2rem 0; border-radius: 8px; overflow:hidden;"/>
 </ClientOnly>
 
-This is the documentation for the `v2.0.0-alpha` of TresJS. If you are looking for the documentation for the version 1, check [V1 TresJS](https://v1.tresjs.org/).
+This is the documentation for the `v2.0.0-beta` of TresJS. If you are looking for the documentation for the version 1, check [V1 TresJS](https://v1.tresjs.org/).
 
-::: warning
+::: info
 
-TresJS v2 is still in alpha stage, so expect breaking changes until the first stable release.
+TresJS v2 is still in beta stage, you can expect minor changes and bug fixing towards first stable release.
 
 :::
 

+ 72 - 9
docs/guide/your-first-scene.md

@@ -6,11 +6,14 @@ This guide will help you to create your first Tres scene. 🍩
 
 Before we can create a Scene, we need somewhere to display it. Using plain [ThreeJS](https://threejs.org/docs/index.html#manual/en/introduction/Creating-a-scene) we would need to create a `canvas` HTML element to mount the `WebglRenderer` and initialize the `scene`
 
-With **TresJS** you only need to add the default component `<TresCanvas />` to the template of your Vue component.
+With **TresJS** you only need to import the default component `<TresCanvas />` and add it to the template of your Vue component.
 
 ```vue
+<script lang="ts" setup>
+import { TresCanvas } from '@tresjs/core'
+</script>
 <template>
-  <TresCanvas>
+  <TresCanvas window-size>
     <!-- Your scene goes here -->
   </TresCanvas>
 </template>
@@ -25,6 +28,47 @@ The `TresCanvas` component is going to do some setup work behind the scene:
 - It creates a [**WebGLRenderer**](https://threejs.org/docs/index.html?q=webglrend#api/en/renderers/WebGLRenderer) that automatically updates every frame.
 - It sets the render loop to be called on every frame based on the browser refresh rate.
 
+## Canvas size
+
+By default, `TresCanvas` component will take the **parent's width and height**, if you are experiencing a blank page make sure the parent element have a proper size.
+
+```vue
+<script lang="ts" setup>
+import { TresCanvas } from '@tresjs/core'
+</script>
+<template>
+  <TresCanvas>
+    <!-- Your scene goes here -->
+  </TresCanvas>
+</template>
+<style>
+html,
+body {
+  margin: 0;
+  padding: 0;
+  height: 100%;
+  width: 100%;
+}
+#app {
+  height: 100%;
+  width: 100%;
+}
+</style>
+```
+
+If your scene is not gonna be part of a UI, you can also force the canvas to take the width and height of the full window by using the `window-size` prop like this:
+
+```vue
+<script lang="ts" setup>
+import { TresCanvas } from '@tresjs/core'
+</script>
+<template>
+  <TresCanvas window-size>
+    <!-- Your scene goes here -->
+  </TresCanvas>
+</template>
+```
+
 ## Creating a scene
 
 We need 4 core elements to create a 3D experience:
@@ -38,7 +82,7 @@ With **TresJS** you only need to add the `<TresCanvas />` component to the templ
 
 ```vue
 <template>
-  <TresCanvas>
+  <TresCanvas window-size>
     <!-- Your scene goes here -->
   </TresCanvas>
 </template>
@@ -48,12 +92,14 @@ Then you can add a [**PerspectiveCamera**](https://threejs.org/docs/index.html?q
 
 ```vue
 <template>
-  <TresCanvas>
-    <TresPerspectiveCamera />
-  </TresCanvas>
+  <TresCanvas window-size> <TresPerspectiveCamera :position="[3, 3, 3]" :look-at="[0, 0, 0]" /> </TresCanvas>
 </template>
 ```
 
+::: warning
+A common issue is that the camera default position is the origin of the scene (0,0,0), if you still can see your scene try adding a position to the camera `<TresPerspectiveCamera :position="[3, 3, 3]" />`
+:::
+
 ## Adding a 🍩
 
 That scene looks a little empty, let's add a basic object. If we where using plain **ThreeJS** we would need to create a [**Mesh**](https://threejs.org/docs/index.html?q=mesh#api/en/objects/Mesh) object and attach to it a [**Material**](https://threejs.org/docs/index.html?q=material#api/en/materials/Material) and a [**Geometry**](https://threejs.org/docs/index.html?q=geometry#api/en/core/BufferGeometry) like this:
@@ -71,10 +117,10 @@ Now let's see how we can easily achieve the same with **TresJS**. To do that we
 
 ```vue
 <template>
-  <TresCanvas>
-    <TresPerspectiveCamera />
+  <TresCanvas window-size>
+    <TresPerspectiveCamera :position="[3, 3, 3]" :look-at="[0,0,0]"" />
     <TresMesh>
-      <TresTorusGeometry />
+      <TresTorusGeometry :args="[1, 0.5, 16, 32]" />
       <TresMeshBasicMaterial color="orange" />
     </TresMesh>
   </TresCanvas>
@@ -89,4 +135,21 @@ Notice that we don't need to import anything, that's because **TresJS** automati
     <DonutExample style="aspect-ratio: 16/9; height: auto; margin: 2rem 0; border-radius: 8px; overflow:hidden;"/>
 </ClientOnly>
 
+```vue
+<script setup lang="ts">
+import { TresCanvas } from '@tresjs/core'
+</script>
+
+<template>
+  <TresCanvas clear-color="#82DBC5" window-size>
+    <TresPerspectiveCamera :position="[3, 3, 3]" :look-at="[0,0,0]"" />
+    <TresMesh>
+      <TresTorusGeometry :args="[1, 0.5, 16, 32]" />
+      <TresMeshBasicMaterial color="orange" />
+    </TresMesh>
+    <TresAmbientLight :intensity="1" />
+  </TresCanvas>
+</template>
+```
+
 From here onwards you can start adding more objects to your scene and start playing with the properties of the components to see how they affect the scene.

+ 3 - 3
package.json

@@ -56,8 +56,8 @@
     "vue": "^3.2.47"
   },
   "dependencies": {
-    "-": "^0.0.1",
     "@alvarosabu/utils": "^2.3.0",
+    "@tresjs/core": "2.0.0-beta.2",
     "@vueuse/core": "^9.13.0"
   },
   "devDependencies": {
@@ -65,7 +65,7 @@
     "@huntersofbook/plausible-vue": "^1.0.0",
     "@release-it/conventional-changelog": "^5.1.1",
     "@stackblitz/sdk": "^1.8.1",
-    "@tresjs/cientos": "2.0.0-alpha.5",
+    "@tresjs/cientos": "2.0.0-beta.0",
     "@types/three": "latest",
     "@typescript-eslint/eslint-plugin": "^5.57.1",
     "@typescript-eslint/parser": "^5.57.1",
@@ -86,7 +86,7 @@
     "rollup-plugin-analyzer": "^4.0.0",
     "rollup-plugin-copy": "^3.4.0",
     "rollup-plugin-visualizer": "^5.9.0",
-    "three": "latest",
+    "three": "^0.150.1",
     "unocss": "^0.50.6",
     "unplugin": "^1.3.1",
     "unplugin-vue-components": "^0.24.1",

文件差異過大導致無法顯示
+ 124 - 551
pnpm-lock.yaml


部分文件因文件數量過多而無法顯示