From 29b99d21cae76ab45e72a4c392ed34962195ddf2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 11 Nov 2025 13:56:43 +0800 Subject: [PATCH 01/24] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20.env=20?= =?UTF-8?q?=E7=A4=BA=E4=BE=8B=E6=96=87=E4=BB=B6=EF=BC=8C=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BE=9D=E8=B5=96=E8=AF=B4=E6=98=8E=EF=BC=8C=E5=BC=83=E7=94=A8?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E6=A8=A1=E5=9E=8B=E4=BE=9D=E8=B5=96=EF=BC=8C?= =?UTF-8?q?=E6=94=B9=E7=94=A8=20API=20=E8=B0=83=E7=94=A8=E5=B5=8C=E5=85=A5?= =?UTF-8?q?=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WHartTest_Django/.env.example | 47 ++++++++++ WHartTest_Django/README.md | 11 ++- .../knowledge/download_embedding_models.py | 13 ++- WHartTest_Django/knowledge/views.py | 91 ++++++++++--------- WHartTest_Django/requirements.txt | 87 ++++++++++-------- WHartTest_Django/wharttest_django/settings.py | 3 + docs/core-concepts/backend-dependencies.md | 12 ++- 7 files changed, 171 insertions(+), 93 deletions(-) create mode 100644 WHartTest_Django/.env.example diff --git a/WHartTest_Django/.env.example b/WHartTest_Django/.env.example new file mode 100644 index 00000000..4d8b6965 --- /dev/null +++ b/WHartTest_Django/.env.example @@ -0,0 +1,47 @@ +# 本地开发环境配置示例 +# 复制此文件为 .env 并根据实际情况修改配置 + +# ================================ +# Redis 连接配置 +# ================================ +# 本地开发:连接 Docker 容器中的 Redis(端口 8911) +# Docker 部署:使用 docker-compose.yml 中的配置 +CELERY_BROKER_URL=redis://127.0.0.1:8911/0 +CELERY_RESULT_BACKEND=redis://127.0.0.1:8911/0 + +# ================================ +# Django 基础配置 +# ================================ +# 调试模式(生产环境请设为 False) +DJANGO_DEBUG=True + +# Django 密钥(生产环境必须修改为随机字符串) +DJANGO_SECRET_KEY=dev-secret-key-change-in-production + +# 允许访问的主机(生产环境请设置具体域名) +DJANGO_ALLOWED_HOSTS=* + +# CORS 跨域允许的源(根据前端地址配置) +DJANGO_CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173,http://localhost:5174,http://localhost:80 + +# ================================ +# 数据库和文件存储 +# ================================ +# SQLite 数据库路径(本地开发使用相对路径) +DATABASE_PATH=./data/db.sqlite3 + +# 媒体文件存储路径 +MEDIA_ROOT=./data/media + +# ================================ +# Django 管理员账户(首次启动时创建) +# ================================ +# DJANGO_ADMIN_USERNAME=admin +# DJANGO_ADMIN_EMAIL=admin@example.com +# DJANGO_ADMIN_PASSWORD=admin123456 + +# ================================ +# API 基础 URL(可选) +# ================================ +# 用于内部 API 调用 +# DJANGO_BASE_URL=http://localhost:8000 diff --git a/WHartTest_Django/README.md b/WHartTest_Django/README.md index a9c202a1..4132d6ea 100644 --- a/WHartTest_Django/README.md +++ b/WHartTest_Django/README.md @@ -98,11 +98,12 @@ langchain-mcp-adapters # 知识库相关 langchain-text-splitters langchain-chroma # ChromaDB向量数据库集成 -langchain-huggingface # HuggingFace嵌入模型支持 -sentence-transformers # HuggingFace句子转换模型 -torch # PyTorch (sentence-transformers依赖) -transformers # HuggingFace Transformers库 -huggingface-hub # HuggingFace模型下载 +# 注意:现使用CustomAPIEmbeddings通过API调用嵌入模型,无需以下本地模型依赖 +# langchain-huggingface # HuggingFace嵌入模型支持 (已弃用) +# sentence-transformers # HuggingFace句子转换模型 (已弃用,约1GB+) +# torch # PyTorch (已弃用,约800MB+) +# transformers # HuggingFace Transformers库 (已弃用) +# huggingface-hub # HuggingFace模型下载 (已弃用) # 文档处理 pypdf diff --git a/WHartTest_Django/knowledge/download_embedding_models.py b/WHartTest_Django/knowledge/download_embedding_models.py index e8b2f8f1..d5f6a689 100644 --- a/WHartTest_Django/knowledge/download_embedding_models.py +++ b/WHartTest_Django/knowledge/download_embedding_models.py @@ -1,8 +1,17 @@ #!/usr/bin/env python # -*- coding: utf-8 -*- """ -BGE-M3 嵌入模型下载脚本 -下载 BGE-M3 模型到本地缓存 +BGE-M3 嵌入模型下载脚本(已弃用) + +⚠️ 注意:此脚本已弃用,项目现使用 CustomAPIEmbeddings 通过 API 调用嵌入模型。 + 无需下载本地模型文件。 + +如需使用本地嵌入模型,需要: +1. 在 requirements.txt 中取消注释 sentence-transformers、torch 等依赖 +2. 安装这些依赖包(约 1GB+) +3. 运行此脚本下载模型文件(约 4.2GB) + +推荐使用 API 方式,无需下载大型模型文件。 """ import os from pathlib import Path diff --git a/WHartTest_Django/knowledge/views.py b/WHartTest_Django/knowledge/views.py index 2d51fef1..c0f0d43b 100644 --- a/WHartTest_Django/knowledge/views.py +++ b/WHartTest_Django/knowledge/views.py @@ -218,29 +218,29 @@ def system_status(self, request): } # 检查依赖库 - try: - import langchain_huggingface - status_info['dependencies']['langchain_huggingface'] = True - except ImportError: - pass - try: import langchain_chroma status_info['dependencies']['langchain_chroma'] = True except ImportError: pass - try: - import sentence_transformers - status_info['dependencies']['sentence_transformers'] = True - except ImportError: - pass - - try: - import torch - status_info['dependencies']['torch'] = True - except ImportError: - pass + # 以下依赖已弃用(现使用CustomAPIEmbeddings通过API调用嵌入模型) + # try: + # import langchain_huggingface + # status_info['dependencies']['langchain_huggingface'] = True + # except ImportError: + # pass + # try: + # import sentence_transformers + # status_info['dependencies']['sentence_transformers'] = True + # except ImportError: + # pass + # + # try: + # import torch + # status_info['dependencies']['torch'] = True + # except ImportError: + # pass # 检查BGE-M3模型 cache_dir = Path('.cache/huggingface') @@ -250,32 +250,37 @@ def system_status(self, request): status_info['embedding_model']['cache_path'] = str(model_path) status_info['embedding_model']['model_exists'] = model_path.exists() - if model_path.exists(): - status_info['embedding_model']['status'] = 'available' - - # 尝试加载测试 - try: - from langchain_huggingface import HuggingFaceEmbeddings - - embeddings = HuggingFaceEmbeddings( - model_name="BAAI/bge-m3", - cache_folder=str(cache_dir), - model_kwargs={'device': 'cpu'}, - encode_kwargs={'normalize_embeddings': True} - ) - - # 简单测试 - test_vector = embeddings.embed_query("测试") - if len(test_vector) > 0: - status_info['embedding_model']['load_test'] = True - status_info['embedding_model']['status'] = 'working' - status_info['embedding_model']['dimension'] = len(test_vector) - - except Exception as e: - status_info['embedding_model']['status'] = 'error' - status_info['embedding_model']['error'] = str(e) - else: - status_info['embedding_model']['status'] = 'missing' + # 本地模型检查已弃用(现使用CustomAPIEmbeddings) + # if model_path.exists(): + # status_info['embedding_model']['status'] = 'available' + # + # # 尝试加载测试 + # try: + # from langchain_huggingface import HuggingFaceEmbeddings + # + # embeddings = HuggingFaceEmbeddings( + # model_name="BAAI/bge-m3", + # cache_folder=str(cache_dir), + # model_kwargs={'device': 'cpu'}, + # encode_kwargs={'normalize_embeddings': True} + # ) + # + # # 简单测试 + # test_vector = embeddings.embed_query("测试") + # if len(test_vector) > 0: + # status_info['embedding_model']['load_test'] = True + # status_info['embedding_model']['status'] = 'working' + # status_info['embedding_model']['dimension'] = len(test_vector) + # + # except Exception as e: + # status_info['embedding_model']['status'] = 'error' + # status_info['embedding_model']['error'] = str(e) + # else: + # status_info['embedding_model']['status'] = 'missing' + + # 现使用CustomAPIEmbeddings,不检查本地模型 + status_info['embedding_model']['status'] = 'api_based' + status_info['embedding_model']['note'] = '使用CustomAPIEmbeddings通过API调用嵌入模型' # 检查知识库统计 total_kb = KnowledgeBase.objects.count() diff --git a/WHartTest_Django/requirements.txt b/WHartTest_Django/requirements.txt index 712b3b29..10b02d46 100644 --- a/WHartTest_Django/requirements.txt +++ b/WHartTest_Django/requirements.txt @@ -103,25 +103,30 @@ langchain-text-splitters==0.3.8 # https://github.com/chroma-core/chroma/blob/main/LICENSE langchain-chroma==0.2.4 -# HuggingFace嵌入模型支持 - MIT许可证 (当前版本: 0.2.0) -# https://github.com/langchain-ai/langchain/blob/master/libs/partners/huggingface/LICENSE -langchain-huggingface==0.2.0 - -# Cohere AI支持 - MIT许可证 (当前版本: 0.3.5) -# https://github.com/langchain-ai/langchain/blob/master/libs/partners/cohere/LICENSE -langchain-cohere==0.3.5 - -# Cohere API客户端 - MIT许可证 (当前版本: 5.15.0) -# https://github.com/cohere-ai/cohere-python/blob/main/LICENSE -cohere==5.15.0 - -# Fireworks AI支持 - MIT许可证 (当前版本: 0.2.7) -# https://github.com/langchain-ai/langchain/blob/master/libs/partners/fireworks/LICENSE -langchain-fireworks==0.2.7 - -# Fireworks AI客户端 - Apache 2.0许可证 (当前版本: 0.15.12) -# https://github.com/fireworks-ai/fireworks-ai-python/blob/main/LICENSE -fireworks-ai==0.15.12 +# HuggingFace嵌入模型支持(已弃用 - 会自动安装 torch 和 CUDA 依赖) +# 注意:langchain-huggingface 依赖 sentence-transformers,会自动安装 torch(约800MB+)和 CUDA 库(约1GB+) +# 现使用 CustomAPIEmbeddings,无需此依赖 +# 如需本地模型,请同时取消注释 requirements.txt 中的 torch、sentence-transformers 等依赖 +# # HuggingFace嵌入模型支持 - MIT许可证 (当前版本: 0.2.0) +# # https://github.com/langchain-ai/langchain/blob/master/libs/partners/huggingface/LICENSE +# langchain-huggingface==0.2.0 + +# 未使用的 LLM 供应商(可选,如需要请取消注释) +# Cohere AI 支持 +# # Cohere AI支持 - MIT许可证 (当前版本: 0.3.5) +# # https://github.com/langchain-ai/langchain/blob/master/libs/partners/cohere/LICENSE +# langchain-cohere==0.3.5 +# # Cohere API客户端 - MIT许可证 (当前版本: 5.15.0) +# # https://github.com/cohere-ai/cohere-python/blob/main/LICENSE +# cohere==5.15.0 + +# Fireworks AI 支持 +# # Fireworks AI支持 - MIT许可证 (当前版本: 0.2.7) +# # https://github.com/langchain-ai/langchain/blob/master/libs/partners/fireworks/LICENSE +# langchain-fireworks==0.2.7 +# # Fireworks AI客户端 - Apache 2.0许可证 (当前版本: 0.15.12) +# # https://github.com/fireworks-ai/fireworks-ai-python/blob/main/LICENSE +# fireworks-ai==0.15.12 # Google Gemini支持 - MIT许可证 (当前版本: 2.0.8) # https://github.com/langchain-ai/langchain/blob/master/libs/partners/google-genai/LICENSE @@ -147,9 +152,10 @@ google-auth==2.38.0 # https://github.com/google/generative-ai-python/blob/main/LICENSE google-generativeai==0.8.4 -# Mistral AI支持 - MIT许可证 (当前版本: 0.2.4) -# https://github.com/langchain-ai/langchain/blob/master/libs/partners/mistralai/LICENSE -langchain-mistralai==0.2.4 +# Mistral AI 支持(未使用,如需要请取消注释) +# # Mistral AI支持 - MIT许可证 (当前版本: 0.2.4) +# # https://github.com/langchain-ai/langchain/blob/master/libs/partners/mistralai/LICENSE +# langchain-mistralai==0.2.4 # Ollama本地模型支持 - MIT许可证 (当前版本: 0.2.2) # https://github.com/langchain-ai/langchain/blob/master/libs/partners/ollama/LICENSE @@ -188,29 +194,30 @@ markdown==3.9 # https://github.com/Unstructured-IO/unstructured/blob/main/LICENSE.md unstructured==0.17.2 -# HuggingFace模型依赖(可选) -# 句子嵌入模型 - Apache 2.0许可证 (当前版本: 4.1.0) -# https://github.com/UKPLab/sentence-transformers/blob/master/LICENSE -sentence-transformers==4.1.0 # ~90MB模型,需要网络下载 +# HuggingFace模型依赖(已弃用 - 现使用CustomAPIEmbeddings通过API调用嵌入模型) +# 如需使用本地嵌入模型,请取消注释以下依赖包: +# 注意:以下依赖包总计约1GB+,会显著增加镜像体积和安装时间 +# +# # 句子嵌入模型 - Apache 2.0许可证 (当前版本: 4.1.0) +# # https://github.com/UKPLab/sentence-transformers/blob/master/LICENSE +# sentence-transformers==4.1.0 # ~90MB模型,需要网络下载 +# +# # PyTorch深度学习框架 - BSD许可证 (当前版本: 2.7.1) +# # https://github.com/pytorch/pytorch/blob/main/LICENSE +# torch==2.7.1 # 修复CVE-2025-32434安全漏洞,约800MB+ +# +# # HuggingFace transformers库 - Apache 2.0许可证 (当前版本: 4.52.4) +# # https://github.com/huggingface/transformers/blob/main/LICENSE +# transformers==4.52.4 +# +# # HuggingFace模型中心 - Apache 2.0许可证 (当前版本: 0.32.4) +# # https://github.com/huggingface/huggingface_hub/blob/main/LICENSE +# huggingface-hub==0.32.4 # HuggingFace模型下载 -# PyTorch深度学习框架 - BSD许可证 (当前版本: 2.7.1) -# https://github.com/pytorch/pytorch/blob/main/LICENSE -torch==2.7.1 # 修复CVE-2025-32434安全漏洞 - -# HuggingFace transformers库 - Apache 2.0许可证 (当前版本: 4.52.4) -# https://github.com/huggingface/transformers/blob/main/LICENSE -transformers==4.52.4 - -# HuggingFace模型中心 - Apache 2.0许可证 (当前版本: 0.32.4) -# https://github.com/huggingface/huggingface_hub/blob/main/LICENSE # 语言检测库 - Apache 2.0许可证 (当前版本: 1.0.9) # https://github.com/Mimino666/langdetect/blob/master/LICENSE langdetect==1.0.9 -# HuggingFace模型中心 - Apache 2.0许可证 (当前版本: 0.32.4) -# https://github.com/huggingface/huggingface_hub/blob/main/LICENSE -huggingface-hub==0.32.4 # HuggingFace模型下载 - # Celery异步任务队列 - BSD许可证 (当前版本: 5.4.0) # https://github.com/celery/celery/blob/main/LICENSE celery==5.4.0 diff --git a/WHartTest_Django/wharttest_django/settings.py b/WHartTest_Django/wharttest_django/settings.py index 47020320..857674b7 100644 --- a/WHartTest_Django/wharttest_django/settings.py +++ b/WHartTest_Django/wharttest_django/settings.py @@ -381,6 +381,9 @@ def setup_huggingface_env(): CELERY_BROKER_URL = os.environ.get('CELERY_BROKER_URL', 'redis://localhost:6379/0') CELERY_RESULT_BACKEND = os.environ.get('CELERY_RESULT_BACKEND', 'redis://localhost:6379/0') +# Celery 6.0+ 启动时重试连接 +CELERY_BROKER_CONNECTION_RETRY_ON_STARTUP = True + # Celery时区设置 CELERY_TIMEZONE = TIME_ZONE CELERY_ENABLE_UTC = True diff --git a/docs/core-concepts/backend-dependencies.md b/docs/core-concepts/backend-dependencies.md index e95692b2..9a02fdb0 100644 --- a/docs/core-concepts/backend-dependencies.md +++ b/docs/core-concepts/backend-dependencies.md @@ -146,10 +146,16 @@ WHartTest 后端基于 Django REST Framework 构建,采用 Python 生态的现 - **beautifulsoup4** (4.13.3): HTML/XML 解析 - **开源协议**: MIT License (除 beautifulsoup4 为 MIT License) -### HuggingFace 模型依赖 -- **sentence-transformers** (4.1.0): 句子转换模型 (~90MB模型,需要网络下载) -- **torch** (2.7.1): PyTorch 框架 (修复 CVE-2025-32434 安全漏洞) +### HuggingFace 模型依赖(已弃用) + +⚠️ **注意**: 从当前版本开始,项目已改用 `CustomAPIEmbeddings` 通过 API 调用嵌入模型,无需安装以下大型依赖包。 + +如需使用本地嵌入模型(不推荐),需要安装以下依赖(总计约 1GB+): +- **sentence-transformers** (4.1.0): 句子转换模型 (~90MB模型文件) +- **torch** (2.7.1): PyTorch 框架 (~800MB+) - **transformers** (4.52.4): HuggingFace transformers 库 - **huggingface-hub** (0.32.4): HuggingFace 模型下载 - **开源协议**: Apache License 2.0 +**推荐方式**: 使用 API 嵌入服务(OpenAI、Azure、Ollama 等),无需下载大型模型文件。 + From 445fd11a28c3d62d3db05e6a4a051b70cd6eef6a Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 11 Nov 2025 14:14:36 +0800 Subject: [PATCH 02/24] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B=E5=88=97=E8=A1=A8=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E9=80=BB=E8=BE=91=EF=BC=8C=E4=BF=AE=E5=A4=8D=E5=BD=93=E5=89=8D?= =?UTF-8?q?=E9=A1=B5=E5=85=A8=E9=80=89=E7=8A=B6=E6=80=81=E8=AE=A1=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 4 ++- .../src/components/testcase/TestCaseList.vue | 29 ++++++++++++++----- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 86c24fc0..53d84006 100644 --- a/.gitignore +++ b/.gitignore @@ -62,4 +62,6 @@ __pycache__/ docs/_build/ docs/.vitepress/cache/ # Playwright截图目录 -playwright-screenshots/ \ No newline at end of file +playwright-screenshots/ +WHartTest_Django/chat_history.sqlite-shm +WHartTest_Django/chat_history.sqlite-wal diff --git a/WHartTest_Vue/src/components/testcase/TestCaseList.vue b/WHartTest_Vue/src/components/testcase/TestCaseList.vue index 9f320d85..870b7d33 100644 --- a/WHartTest_Vue/src/components/testcase/TestCaseList.vue +++ b/WHartTest_Vue/src/components/testcase/TestCaseList.vue @@ -168,18 +168,27 @@ const paginationConfig = reactive({ }); // 复选框选择相关的计算属性和方法 +// 获取当前页实际显示的数据 +const getCurrentPageData = () => { + const startIndex = (paginationConfig.current - 1) * paginationConfig.pageSize; + const endIndex = startIndex + paginationConfig.pageSize; + return testCaseData.value.slice(startIndex, endIndex); +}; + // 当前页是否全选 const isCurrentPageAllSelected = computed(() => { - if (testCaseData.value.length === 0) return false; - return testCaseData.value.every(item => selectedTestCaseIds.value.includes(item.id)); + const currentPageData = getCurrentPageData(); + if (currentPageData.length === 0) return false; + return currentPageData.every(item => selectedTestCaseIds.value.includes(item.id)); }); // 当前页是否半选状态 const isCurrentPageIndeterminate = computed(() => { - const currentPageSelectedCount = testCaseData.value.filter(item => + const currentPageData = getCurrentPageData(); + const currentPageSelectedCount = currentPageData.filter(item => selectedTestCaseIds.value.includes(item.id) ).length; - return currentPageSelectedCount > 0 && currentPageSelectedCount < testCaseData.value.length; + return currentPageSelectedCount > 0 && currentPageSelectedCount < currentPageData.length; }); // 处理单个复选框变化 @@ -198,9 +207,15 @@ const handleCheckboxChange = (id: number, checked: boolean) => { // 处理当前页全选/取消全选 const handleSelectCurrentPage = (checked: boolean) => { + // 获取当前表格实际显示的数据 + // Arco Table 会根据 pagination 配置自动切分数据显示 + const startIndex = (paginationConfig.current - 1) * paginationConfig.pageSize; + const endIndex = startIndex + paginationConfig.pageSize; + const currentPageData = testCaseData.value.slice(startIndex, endIndex); + if (checked) { // 选中当前页所有项目 - const currentPageIds = testCaseData.value.map(item => item.id); + const currentPageIds = currentPageData.map(item => item.id); currentPageIds.forEach(id => { if (!selectedTestCaseIds.value.includes(id)) { selectedTestCaseIds.value.push(id); @@ -208,7 +223,7 @@ const handleSelectCurrentPage = (checked: boolean) => { }); } else { // 取消选中当前页所有项目 - const currentPageIds = testCaseData.value.map(item => item.id); + const currentPageIds = currentPageData.map(item => item.id); selectedTestCaseIds.value = selectedTestCaseIds.value.filter(id => !currentPageIds.includes(id) ); @@ -381,7 +396,7 @@ const handleBatchDelete = () => { const response = await batchDeleteTestCases(currentProjectId.value!, selectedTestCaseIds.value); if (response.success && response.data) { // 显示详细的删除结果 - const { deleted_count, deleted_testcases, deletion_details } = response.data; + const { deleted_count, deletion_details } = response.data; let detailMessage = `成功删除 ${deleted_count} 个测试用例`; if (deletion_details) { From cb7b9017d4c9fb58f621cb43c2878e4256f2b631 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 11 Nov 2025 16:58:09 +0800 Subject: [PATCH 03/24] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0=E6=B5=8B?= =?UTF-8?q?=E8=AF=95=E7=94=A8=E4=BE=8B=E8=A1=A8=E5=8D=95=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E5=8F=AA=E5=8F=91=E9=80=81=E5=8F=98=E6=9B=B4=E5=AD=97?= =?UTF-8?q?=E6=AE=B5=EF=BC=8C=E4=BC=98=E5=8C=96=E6=95=B0=E6=8D=AE=E8=BF=BD?= =?UTF-8?q?=E8=B8=AA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WHartTest_Django/.env.example | 4 +- WHartTest_Django/testcases/serializers.py | 17 ++-- WHartTest_Django/testcases/views.py | 33 ++++---- WHartTest_Django/wharttest_django/settings.py | 17 +++- .../src/components/testcase/TestCaseForm.vue | 80 ++++++++++++++++--- 5 files changed, 118 insertions(+), 33 deletions(-) diff --git a/WHartTest_Django/.env.example b/WHartTest_Django/.env.example index 4d8b6965..4cf47846 100644 --- a/WHartTest_Django/.env.example +++ b/WHartTest_Django/.env.example @@ -28,10 +28,10 @@ DJANGO_CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173,http://l # 数据库和文件存储 # ================================ # SQLite 数据库路径(本地开发使用相对路径) -DATABASE_PATH=./data/db.sqlite3 +DATABASE_PATH=./db.sqlite3 # 媒体文件存储路径 -MEDIA_ROOT=./data/media +MEDIA_ROOT=./media # ================================ # Django 管理员账户(首次启动时创建) diff --git a/WHartTest_Django/testcases/serializers.py b/WHartTest_Django/testcases/serializers.py index 5df83858..9c734b44 100644 --- a/WHartTest_Django/testcases/serializers.py +++ b/WHartTest_Django/testcases/serializers.py @@ -35,7 +35,7 @@ class TestCaseSerializer(serializers.ModelSerializer): queryset=TestCaseModule.objects.all(), source='module', # 关联到模型中的 'module' 字段 allow_null=False, # 不允许为空 - required=True # 必填字段 + required=False # 改为 False,允许 PATCH 请求时不传该字段 ) module_detail = serializers.StringRelatedField(source='module', read_only=True) # 用于只读展示模块名称 @@ -74,10 +74,17 @@ def update(self, instance, validated_data): steps_data = validated_data.pop('steps', None) # 更新 TestCase 实例的字段 - instance.name = validated_data.get('name', instance.name) - instance.precondition = validated_data.get('precondition', instance.precondition) - instance.level = validated_data.get('level', instance.level) - instance.notes = validated_data.get('notes', instance.notes) + if 'name' in validated_data: + instance.name = validated_data['name'] + if 'precondition' in validated_data: + instance.precondition = validated_data['precondition'] + if 'level' in validated_data: + instance.level = validated_data['level'] + if 'module' in validated_data: + instance.module = validated_data['module'] + if 'notes' in validated_data: + instance.notes = validated_data['notes'] + # project 和 creator 通常不允许通过此接口更新 instance.save() diff --git a/WHartTest_Django/testcases/views.py b/WHartTest_Django/testcases/views.py index f1e6c14d..31e5482f 100644 --- a/WHartTest_Django/testcases/views.py +++ b/WHartTest_Django/testcases/views.py @@ -82,22 +82,23 @@ def perform_create(self, serializer): # headers = self.get_success_headers(serializer.data) # return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers) - # def update(self, request, *args, **kwargs): - # partial = kwargs.pop('partial', False) - # instance = self.get_object() # get_object 会进行对象级权限检查 - # - # # 可以在这里添加额外的逻辑 - # - # serializer = self.get_serializer(instance, data=request.data, partial=partial) - # serializer.is_valid(raise_exception=True) - # self.perform_update(serializer) # perform_update 默认只调用 serializer.save() - # - # if getattr(instance, '_prefetched_objects_cache', None): - # # If 'prefetch_related' has been applied to a queryset, we need to - # # forcibly invalidate the prefetch cache on the instance. - # instance._prefetched_objects_cache = {} - # - # return Response(serializer.data) + def update(self, request, *args, **kwargs): + partial = kwargs.pop('partial', False) + instance = self.get_object() # get_object 会进行对象级权限检查 + + # 可以在这里添加额外的逻辑 + + serializer = self.get_serializer(instance, data=request.data, partial=partial) + serializer.is_valid(raise_exception=True) + + self.perform_update(serializer) # perform_update 默认只调用 serializer.save() + + if getattr(instance, '_prefetched_objects_cache', None): + # If 'prefetch_related' has been applied to a queryset, we need to + # forcibly invalidate the prefetch cache on the instance. + instance._prefetched_objects_cache = {} + + return Response(serializer.data) # perform_update 默认调用 serializer.save(),我们的序列化器 update 方法会处理嵌套步骤。 # perform_destroy 默认调用 instance.delete()。 diff --git a/WHartTest_Django/wharttest_django/settings.py b/WHartTest_Django/wharttest_django/settings.py index 857674b7..9b56a088 100644 --- a/WHartTest_Django/wharttest_django/settings.py +++ b/WHartTest_Django/wharttest_django/settings.py @@ -341,7 +341,7 @@ def setup_huggingface_env(): }, 'handlers': { 'console': { - 'level': 'INFO', # 将控制台日志级别设置为 INFO + 'level': 'DEBUG', # 将控制台日志级别设置为 DEBUG 'class': 'logging.StreamHandler', 'formatter': 'simple', }, @@ -372,6 +372,21 @@ def setup_huggingface_env(): 'level': 'INFO', 'propagate': False, }, + 'testcases': { # 为 testcases 应用添加 logger + 'handlers': ['console'], + 'level': 'DEBUG', # 设置为 DEBUG 级别 + 'propagate': True, # 改为 True 让日志向上传播 + }, + 'testcases.views': { # 为 testcases.views 模块添加专门的 logger + 'handlers': ['console'], + 'level': 'DEBUG', + 'propagate': True, + }, + 'testcases.serializers': { # 为 testcases.serializers 模块添加专门的 logger + 'handlers': ['console'], + 'level': 'DEBUG', + 'propagate': True, + }, # 可以根据需要添加其他应用的 logger }, } diff --git a/WHartTest_Vue/src/components/testcase/TestCaseForm.vue b/WHartTest_Vue/src/components/testcase/TestCaseForm.vue index 24023401..2dd844bf 100644 --- a/WHartTest_Vue/src/components/testcase/TestCaseForm.vue +++ b/WHartTest_Vue/src/components/testcase/TestCaseForm.vue @@ -395,6 +395,9 @@ const formState = reactive({ notes: '', }); +// 保存原始数据用于变更追踪 +const originalFormData = ref(null); + // 截图相关状态 const fileInputRef = ref(); const existingScreenshots = ref([]); @@ -459,6 +462,17 @@ const fetchDetailsAndSetForm = async (id: number) => { formState.steps = data.steps.map((step, index) => ({ ...step, temp_id: `${Date.now()}-${index}` })); stepErrors.value = Array(data.steps.length).fill({}); + // 保存原始数据的深拷贝,用于后续比较变更 + originalFormData.value = JSON.parse(JSON.stringify({ + id: data.id, + name: data.name, + precondition: data.precondition, + level: data.level, + module_id: data.module_id, + notes: data.notes || '', + steps: data.steps + })); + // 设置现有截图,并确保每个截图都有url字段用于兼容性 existingScreenshots.value = (data.screenshots || []).map((screenshot: TestCaseScreenshot) => ({ ...screenshot, @@ -567,15 +581,63 @@ const handleSubmit = async () => { let response; if (isEditing.value && formState.id) { - const updatePayload: UpdateTestCaseRequest = { - name: formState.name, - precondition: formState.precondition, - level: formState.level, - module_id: formState.module_id, - steps: payloadSteps, - notes: formState.notes, - }; - response = await updateTestCase(currentProjectId.value, formState.id, updatePayload); + // 编辑模式:只发送变更的字段(PATCH 语义) + const updatePayload: Partial = {}; + + if (originalFormData.value) { + // 比较基础字段,只添加变更的字段 + if (formState.name !== originalFormData.value.name) { + updatePayload.name = formState.name; + } + if (formState.precondition !== originalFormData.value.precondition) { + updatePayload.precondition = formState.precondition; + } + if (formState.level !== originalFormData.value.level) { + updatePayload.level = formState.level; + } + if (formState.module_id !== originalFormData.value.module_id) { + updatePayload.module_id = formState.module_id; + } + if (formState.notes !== originalFormData.value.notes) { + updatePayload.notes = formState.notes; + } + + // 比较步骤:检查是否有变更 + // 将原始步骤数据标准化为与 payloadSteps 相同的格式后再比较 + const normalizedOriginalSteps = originalFormData.value.steps.map(s => ({ + id: s.id, + step_number: s.step_number, + description: s.description, + expected_result: s.expected_result + })); + const stepsChanged = JSON.stringify(payloadSteps) !== JSON.stringify(normalizedOriginalSteps); + if (stepsChanged) { + updatePayload.steps = payloadSteps; + } + } else { + // 如果没有原始数据(不应该发生),发送所有字段 + updatePayload.name = formState.name; + updatePayload.precondition = formState.precondition; + updatePayload.level = formState.level; + updatePayload.module_id = formState.module_id; + updatePayload.steps = payloadSteps; + updatePayload.notes = formState.notes; + } + + // 检查是否有任何变更 + if (Object.keys(updatePayload).length === 0) { + Message.info('没有检测到任何变更'); + formLoading.value = false; + return; + } + + // 开发环境下输出变更信息(便于调试) + if (import.meta.env.DEV) { + console.log('📝 PATCH 请求 - 只发送变更字段:', updatePayload); + console.log('🔍 变更字段数量:', Object.keys(updatePayload).length); + } + + response = await updateTestCase(currentProjectId.value, formState.id, updatePayload as UpdateTestCaseRequest); } else { const createPayload: CreateTestCaseRequest = { name: formState.name, From d1abb56ce37764af134b42021ea6401a66f55d47 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 11 Nov 2025 19:07:17 +0800 Subject: [PATCH 04/24] =?UTF-8?q?feat:=20=E5=9C=A8=E8=81=8A=E5=A4=A9?= =?UTF-8?q?=E7=95=8C=E9=9D=A2=E5=92=8CLLM=E9=85=8D=E7=BD=AE=E4=B8=AD?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=AF=B9=E5=9B=BE=E5=83=8F=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E7=9A=84=E6=94=AF=E6=8C=81=20-=E5=BC=95=E5=85=A5=E4=BA=86?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E6=96=B0=E7=9A=84=E8=BF=81=E7=A7=BB=E6=9D=A5?= =?UTF-8?q?=E6=94=B9=E5=8F=98RemoteMCPConfig=20URL=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E3=80=82=20=E5=A2=9E=E5=BC=BATestCaseSelectorTable=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=8C=89=E6=A8=A1=E5=9D=97=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B=E3=80=82=20-=E5=88=9B?= =?UTF-8?q?=E5=BB=BA=E4=BA=86=E4=B8=80=E4=B8=AA=E5=8F=AF=E7=BB=84=E5=90=88?= =?UTF-8?q?=E7=9A=84=E7=AE=A1=E7=90=86LLM=E9=85=8D=E7=BD=AE=E5=88=B7?= =?UTF-8?q?=E6=96=B0=E4=BA=8B=E4=BB=B6=E3=80=82=20-=E6=9B=B4=E6=96=B0ChatI?= =?UTF-8?q?nput=E7=BB=84=E4=BB=B6=EF=BC=8C=E5=85=81=E8=AE=B8=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=E4=B8=8A=E4=BC=A0=E5=92=8C=E9=A2=84=E8=A7=88=E3=80=82?= =?UTF-8?q?=20=E4=BF=AE=E6=94=B9=E4=BA=86ChatMessages=E7=BB=84=E4=BB=B6?= =?UTF-8?q?=EF=BC=8C=E5=8F=AF=E4=BB=A5=E5=9C=A8=E8=81=8A=E5=A4=A9=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E4=B8=AD=E6=98=BE=E7=A4=BA=E5=9B=BE=E7=89=87=E3=80=82?= =?UTF-8?q?=20-=E5=9C=A8LLM=E9=85=8D=E7=BD=AE=E8=A1=A8=E5=8D=95=E5=92=8C?= =?UTF-8?q?=E8=A1=A8=E4=B8=AD=E5=A2=9E=E5=8A=A0=E4=BA=86=E5=AF=B9=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=E5=A4=84=E7=90=86=E7=9A=84=E6=94=AF=E6=8C=81=E3=80=82?= =?UTF-8?q?=20=E6=9B=B4=E6=96=B0=E4=BA=86LangGraphChatView=E6=9D=A5?= =?UTF-8?q?=E5=A4=84=E7=90=86=E6=B6=88=E6=81=AF=E4=B8=AD=E7=9A=84=E5=9B=BE?= =?UTF-8?q?=E5=83=8F=E6=95=B0=E6=8D=AE=E3=80=82=20-=E5=AE=9E=E7=8E=B0LLM?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=9A=84=E5=88=87=E6=8D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../0008_llmconfig_supports_vision.py | 18 + .../langgraph_integration/models.py | 4 + .../langgraph_integration/serializers.py | 2 +- .../langgraph_integration/views.py | 96 ++++- .../0003_alter_remotemcpconfig_url.py | 18 + .../testcase/TestCaseSelectorTable.vue | 74 ++++ .../src/composables/useLlmConfigRefresh.ts | 30 ++ .../langgraph/components/ChatInput.vue | 330 +++++++++++++++++- .../langgraph/components/ChatMessages.vue | 2 + .../components/LlmConfigFormModal.vue | 11 + .../langgraph/components/LlmConfigTable.vue | 13 +- .../langgraph/components/MessageItem.vue | 32 ++ .../src/features/langgraph/types/chat.ts | 4 + .../src/features/langgraph/types/llmConfig.ts | 3 + .../langgraph/views/LangGraphChatView.vue | 170 +++++++-- .../views/LlmConfigManagementView.vue | 29 ++ 16 files changed, 783 insertions(+), 53 deletions(-) create mode 100644 WHartTest_Django/langgraph_integration/migrations/0008_llmconfig_supports_vision.py create mode 100644 WHartTest_Django/mcp_tools/migrations/0003_alter_remotemcpconfig_url.py create mode 100644 WHartTest_Vue/src/composables/useLlmConfigRefresh.ts diff --git a/WHartTest_Django/langgraph_integration/migrations/0008_llmconfig_supports_vision.py b/WHartTest_Django/langgraph_integration/migrations/0008_llmconfig_supports_vision.py new file mode 100644 index 00000000..a83e2fe8 --- /dev/null +++ b/WHartTest_Django/langgraph_integration/migrations/0008_llmconfig_supports_vision.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2 on 2025-11-11 09:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('langgraph_integration', '0007_alter_llmconfig_provider_chatsession_chatmessage'), + ] + + operations = [ + migrations.AddField( + model_name='llmconfig', + name='supports_vision', + field=models.BooleanField(default=False, help_text='模型是否支持图片/多模态输入(如GPT-4V、Qwen-VL等)', verbose_name='支持图片输入'), + ), + ] diff --git a/WHartTest_Django/langgraph_integration/models.py b/WHartTest_Django/langgraph_integration/models.py index 8061252a..0f66c3da 100644 --- a/WHartTest_Django/langgraph_integration/models.py +++ b/WHartTest_Django/langgraph_integration/models.py @@ -37,6 +37,10 @@ class LLMConfig(models.Model): system_prompt = models.TextField(blank=True, null=True, verbose_name="系统提示词", help_text="指导LLM行为的系统级提示词") + # 多模态支持(新增) + supports_vision = models.BooleanField(default=False, verbose_name="支持图片输入", + help_text="模型是否支持图片/多模态输入(如GPT-4V、Qwen-VL等)") + # 状态字段(保持不变) is_active = models.BooleanField(default=False, verbose_name="是否激活", help_text="是否为当前激活的LLM配置") diff --git a/WHartTest_Django/langgraph_integration/serializers.py b/WHartTest_Django/langgraph_integration/serializers.py index 848898d7..a3bb0d94 100644 --- a/WHartTest_Django/langgraph_integration/serializers.py +++ b/WHartTest_Django/langgraph_integration/serializers.py @@ -12,7 +12,7 @@ class Meta: model = LLMConfig fields = [ 'id', 'config_name', 'provider', 'name', 'api_url', 'api_key', 'system_prompt', - 'is_active', 'created_at', 'updated_at' + 'supports_vision', 'is_active', 'created_at', 'updated_at' ] read_only_fields = ['id', 'created_at', 'updated_at'] extra_kwargs = { diff --git a/WHartTest_Django/langgraph_integration/views.py b/WHartTest_Django/langgraph_integration/views.py index b5560f21..a34a7dc9 100644 --- a/WHartTest_Django/langgraph_integration/views.py +++ b/WHartTest_Django/langgraph_integration/views.py @@ -342,6 +342,7 @@ async def post(self, request, *args, **kwargs): user_message_content = request.data.get('message') session_id = request.data.get('session_id') project_id = request.data.get('project_id') + image_base64 = request.data.get('image') # 图片base64编码(不含前缀) # 知识库相关参数 knowledge_base_id = request.data.get('knowledge_base_id') @@ -414,6 +415,17 @@ async def post(self, request, *args, **kwargs): "errors": {"llm_config": ["Multiple active LLM configurations found."]} }, status=status.HTTP_500_INTERNAL_SERVER_ERROR) + # 验证图片输入是否支持 + if image_base64 and not active_config.supports_vision: + logger.warning(f"ChatAPIView: Image input rejected - model {active_config.name} does not support vision") + return Response({ + "status": "error", + "code": status.HTTP_400_BAD_REQUEST, + "message": f"当前模型 {active_config.name} 不支持图片输入,请切换到支持多模态的模型(如 GPT-4V、Claude 3、Gemini Vision 或 Qwen-VL)", + "data": {}, + "errors": {"image": ["Current model does not support image input. Please switch to a vision-capable model."]} + }, status=status.HTTP_400_BAD_REQUEST) + try: # 使用新的LLM工厂函数,支持多供应商 llm = create_llm_instance(active_config, temperature=0.7) @@ -603,7 +615,21 @@ def knowledge_enhanced_chatbot_node(state: AgentState): messages_list.append(SystemMessage(content=effective_prompt)) logger.info(f"ChatAPIView: Added {prompt_source} system prompt: {effective_prompt[:100]}...") - messages_list.append(HumanMessage(content=user_message_content)) + # 构建用户消息(支持多模态) + if image_base64: + # 如果有图片,创建多模态消息 + human_message_content = [ + {"type": "text", "text": user_message_content}, + { + "type": "image_url", + "image_url": {"url": f"data:image/jpeg;base64,{image_base64}"} + } + ] + messages_list.append(HumanMessage(content=human_message_content)) + logger.info(f"ChatAPIView: Added multimodal message with image") + else: + # 纯文本消息 + messages_list.append(HumanMessage(content=user_message_content)) input_messages = {"messages": messages_list} invoke_config = { @@ -839,13 +865,39 @@ def get(self, request, *args, **kwargs): content = msg.content if hasattr(msg, 'content') else str(msg) elif isinstance(msg, HumanMessage): msg_type = "human" - content = msg.content if hasattr(msg, 'content') else str(msg) + raw_content = msg.content if hasattr(msg, 'content') else str(msg) + # 处理多模态消息(包含图片的列表格式) + image_data = None # 用于存储图片数据 + if isinstance(raw_content, list): + # 提取文本部分 + text_parts = [] + for item in raw_content: + if isinstance(item, dict): + if item.get("type") == "text": + text_parts.append(item.get("text", "")) + elif item.get("type") == "image_url": + # 提取图片URL中的Base64数据 + image_url = item.get("image_url", {}) + if isinstance(image_url, dict): + url = image_url.get("url", "") + # url格式: data:image/jpeg;base64,xxx + if url and url.startswith("data:image/"): + image_data = url # 保存完整的Data URL + content = " ".join(text_parts) if text_parts else "[包含图片的消息]" + else: + content = raw_content elif isinstance(msg, AIMessage): msg_type = "ai" - content = msg.content if hasattr(msg, 'content') else str(msg) + raw_content = msg.content if hasattr(msg, 'content') else str(msg) + # AI消息通常不是多模态,但为了安全也检查一下 + if isinstance(raw_content, list): + text_parts = [item.get("text", "") for item in raw_content if isinstance(item, dict) and item.get("type") == "text"] + content = " ".join(text_parts) if text_parts else "" + else: + content = raw_content # 跳过空的AI消息(工具调用前的中间状态) - if not content or content.strip() == "": + if not content or (isinstance(content, str) and content.strip() == ""): logger.debug(f"ChatHistoryAPIView: Skipping empty AI message at index {i}") continue @@ -861,14 +913,17 @@ def get(self, request, *args, **kwargs): else: msg_type = "unknown" - logger.debug(f"ChatHistoryAPIView: Message {i}: type={msg_type}, content={content[:50]}...") + logger.debug(f"ChatHistoryAPIView: Message {i}: type={msg_type}, content={str(content)[:50]}...") # 只添加有内容的消息 - if content and content.strip(): + if content and (not isinstance(content, str) or content.strip()): message_data = { "type": msg_type, "content": content, } + # 如果消息包含图片,添加图片数据 + if msg_type == "human" and 'image_data' in locals() and image_data: + message_data["image"] = image_data # 添加对应的时间戳 if i in message_timestamps: timestamp_str = message_timestamps[i] @@ -1299,7 +1354,7 @@ def _check_project_permission(self, user, project_id): return None async def _create_sse_generator(self, request, user_message_content, session_id, project_id, project, - knowledge_base_id=None, use_knowledge_base=True, similarity_threshold=0.7, top_k=5, prompt_id=None): + knowledge_base_id=None, use_knowledge_base=True, similarity_threshold=0.7, top_k=5, prompt_id=None, image_base64=None): """创建SSE数据生成器""" try: # 获取活跃的LLM配置 @@ -1312,6 +1367,12 @@ async def _create_sse_generator(self, request, user_message_content, session_id, yield f"data: {json.dumps({'type': 'error', 'message': 'Multiple active LLM configurations found'})}\n\n" return + # 验证图片输入是否支持 + if image_base64 and not active_config.supports_vision: + logger.warning(f"ChatStreamAPIView: Image input rejected - model {active_config.name} does not support vision") + yield f"data: {json.dumps({'type': 'error', 'message': f'当前模型 {active_config.name} 不支持图片输入,请切换到支持多模态的模型(如 GPT-4V、Claude 3、Gemini Vision 或 Qwen-VL)'})}\n\n" + return + try: # 使用新的LLM工厂函数,支持多供应商 llm = create_llm_instance(active_config, temperature=0.7) @@ -1504,12 +1565,26 @@ def knowledge_enhanced_chatbot_node(state: AgentState): # 确保用户消息内容格式正确 clean_user_message = user_message_content.strip() - if not clean_user_message: + if not clean_user_message and not image_base64: logger.error("ChatStreamAPIView: User message is empty after stripping") yield create_sse_data({'type': 'error', 'message': 'User message cannot be empty'}) return - messages_list.append(HumanMessage(content=clean_user_message)) + # 构建用户消息(支持多模态) + if image_base64: + # 如果有图片,创建多模态消息 + human_message_content = [ + {"type": "text", "text": clean_user_message}, + { + "type": "image_url", + "image_url": {"url": f"data:image/jpeg;base64,{image_base64}"} + } + ] + messages_list.append(HumanMessage(content=human_message_content)) + logger.info(f"ChatStreamAPIView: Added multimodal message with image") + else: + # 纯文本消息 + messages_list.append(HumanMessage(content=clean_user_message)) logger.info(f"ChatStreamAPIView: Final messages list length: {len(messages_list)}") # 验证消息列表不为空且所有消息都有有效内容 @@ -1622,6 +1697,7 @@ async def post(self, request, *args, **kwargs): user_message_content = body_data.get('message') session_id = body_data.get('session_id') project_id = body_data.get('project_id') + image_base64 = body_data.get('image') # 图片base64编码(不含前缀) # 知识库相关参数 knowledge_base_id = body_data.get('knowledge_base_id') @@ -1696,7 +1772,7 @@ async def post(self, request, *args, **kwargs): async def async_generator(): async for chunk in self._create_sse_generator( request, user_message_content, session_id, project_id, project, - knowledge_base_id, use_knowledge_base, similarity_threshold, top_k, prompt_id + knowledge_base_id, use_knowledge_base, similarity_threshold, top_k, prompt_id, image_base64 ): yield chunk diff --git a/WHartTest_Django/mcp_tools/migrations/0003_alter_remotemcpconfig_url.py b/WHartTest_Django/mcp_tools/migrations/0003_alter_remotemcpconfig_url.py new file mode 100644 index 00000000..d1bf7445 --- /dev/null +++ b/WHartTest_Django/mcp_tools/migrations/0003_alter_remotemcpconfig_url.py @@ -0,0 +1,18 @@ +# Generated by Django 5.2 on 2025-11-11 09:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('mcp_tools', '0002_remotemcpconfig_transport'), + ] + + operations = [ + migrations.AlterField( + model_name='remotemcpconfig', + name='url', + field=models.CharField(help_text='远程 MCP 服务器的 URL', max_length=2048), + ), + ] diff --git a/WHartTest_Vue/src/components/testcase/TestCaseSelectorTable.vue b/WHartTest_Vue/src/components/testcase/TestCaseSelectorTable.vue index 6ec371ef..7583c814 100644 --- a/WHartTest_Vue/src/components/testcase/TestCaseSelectorTable.vue +++ b/WHartTest_Vue/src/components/testcase/TestCaseSelectorTable.vue @@ -8,6 +8,22 @@ style="width: 300px;" @search="handleSearch" /> + + + {{ module.indentName }} + + (); const loading = ref(false); +const modulesLoading = ref(false); const searchKeyword = ref(''); const selectedLevel = ref(''); +const selectedModule = ref(undefined); const testCaseData = ref([]); const localSelectedIds = ref([...props.initialSelectedIds]); +const moduleList = ref([]); const paginationConfig = reactive({ total: 0, @@ -189,6 +209,7 @@ const fetchTestCases = async () => { pageSize: paginationConfig.pageSize, search: searchKeyword.value, level: selectedLevel.value || undefined, + module_id: selectedModule.value, }); if (response.success && response.data) { @@ -219,6 +240,56 @@ const handleLevelChange = () => { fetchTestCases(); }; +const handleModuleChange = () => { + paginationConfig.current = 1; + fetchTestCases(); +}; + +// 将树形模块列表扁平化为带缩进的列表 +const flatModuleList = computed(() => { + const flatList: Array = []; + + const flatten = (modules: TestCaseModule[], level: number = 0) => { + modules.forEach((module) => { + const indent = ' '.repeat(level); // 使用全角空格缩进 + flatList.push({ + ...module, + indentName: `${indent}${module.name}` + }); + if (module.children && module.children.length > 0) { + flatten(module.children, level + 1); + } + }); + }; + + flatten(moduleList.value); + return flatList; +}); + +// 加载模块列表 +const fetchModules = async () => { + if (!props.currentProjectId) { + moduleList.value = []; + return; + } + + modulesLoading.value = true; + try { + const response = await getTestCaseModules(props.currentProjectId); + if (response.success && response.data) { + moduleList.value = response.data; + } else { + console.error('获取模块列表失败:', response.error); + moduleList.value = []; + } + } catch (error) { + console.error('获取模块列表出错:', error); + moduleList.value = []; + } finally { + modulesLoading.value = false; + } +}; + const onPageChange = (page: number) => { paginationConfig.current = page; fetchTestCases(); @@ -239,6 +310,7 @@ const handleCancel = () => { }; onMounted(() => { + fetchModules(); fetchTestCases(); }); @@ -248,6 +320,8 @@ watch( paginationConfig.current = 1; searchKeyword.value = ''; selectedLevel.value = ''; + selectedModule.value = undefined; + fetchModules(); fetchTestCases(); } ); diff --git a/WHartTest_Vue/src/composables/useLlmConfigRefresh.ts b/WHartTest_Vue/src/composables/useLlmConfigRefresh.ts new file mode 100644 index 00000000..5dd3d30c --- /dev/null +++ b/WHartTest_Vue/src/composables/useLlmConfigRefresh.ts @@ -0,0 +1,30 @@ +import { ref } from 'vue'; + +/** + * 全局 LLM 配置刷新事件管理 + * 用于在配置更新时通知其他组件重新加载配置 + */ + +// 全局刷新触发器 - 使用时间戳确保每次都是新值 +const llmConfigRefreshTrigger = ref(0); + +export function useLlmConfigRefresh() { + /** + * 触发 LLM 配置刷新 + * 在修改配置后调用此方法,通知所有监听组件 + */ + const triggerLlmConfigRefresh = () => { + llmConfigRefreshTrigger.value = Date.now(); + }; + + /** + * 获取刷新触发器 + * 组件可以 watch 这个值来响应配置变化 + */ + const getRefreshTrigger = () => llmConfigRefreshTrigger; + + return { + triggerLlmConfigRefresh, + getRefreshTrigger + }; +} diff --git a/WHartTest_Vue/src/features/langgraph/components/ChatInput.vue b/WHartTest_Vue/src/features/langgraph/components/ChatInput.vue index e4f82f20..3ab6152d 100644 --- a/WHartTest_Vue/src/features/langgraph/components/ChatInput.vue +++ b/WHartTest_Vue/src/features/langgraph/components/ChatInput.vue @@ -1,14 +1,47 @@ { // 计算属性:是否为需求评审类型 const isRequirementType = computed(() => { - return promptFormData.value.prompt_type !== 'general'; + return isProgramCallPromptType(promptFormData.value.prompt_type); }); // 处理提示词类型变更 const handlePromptTypeChange = (type: PromptType) => { - // 如果切换到非通用对话类型,则禁用默认设置 - if (type !== 'general') { + // 如果切换到程序调用类型,则禁用默认设置 + if (isProgramCallPromptType(type)) { promptFormData.value.is_default = false; } }; diff --git a/WHartTest_Vue/src/features/langgraph/services/orchestratorService.ts b/WHartTest_Vue/src/features/langgraph/services/orchestratorService.ts new file mode 100644 index 00000000..26bce156 --- /dev/null +++ b/WHartTest_Vue/src/features/langgraph/services/orchestratorService.ts @@ -0,0 +1,591 @@ +import { ref } from 'vue'; +import request from '@/utils/request'; + +// --- 全局流式状态管理 (与chatService保持一致) --- +interface OrchestratorStreamMessage { + content: string; + type: 'human' | 'ai' | 'tool' | 'system'; + time: string; + toolName?: string; // 工具名称(仅 tool 类型消息) + isExpanded?: boolean; + isThinkingProcess?: boolean; // 🎨 是否是思考过程 + isThinkingExpanded?: boolean; // 🎨 思考过程是否展开 +} + +interface OrchestratorStreamState { + content: string; // 当前AI消息内容(流式累积) + error?: string; + isComplete: boolean; + messages: OrchestratorStreamMessage[]; // 所有消息(包括工具消息) + needsNewMessage?: boolean; // 标记需要创建新消息 + waitingForNextAgent?: boolean; // 等待下一个Agent的第一个消息 + nextAgent?: string; // 下一个Agent名称 + agentIdentityAdded?: boolean; // 标记是否已添加agent身份标识 + processedMessageCount?: number; // 已处理的消息数量(用于前端跟踪) +} + +export const activeOrchestratorStreams = ref>({}); + +export const clearOrchestratorStreamState = (sessionId: string) => { + if (activeOrchestratorStreams.value[sessionId]) { + delete activeOrchestratorStreams.value[sessionId]; + } +}; + +// --- 全局流式状态管理结束 --- + +/** + * Orchestrator任务状态 + */ +export interface OrchestratorTask { + id: number; + status: 'pending' | 'running' | 'completed' | 'failed'; + requirement: string; + requirement_analysis?: any; + knowledge_docs?: any[]; + testcases?: any[]; + error_message?: string; + created_at?: string; + updated_at?: string; +} + +interface ApiResponse { + status: 'success' | 'error'; + data: T; + message: string; +} + +/** + * 创建Orchestrator任务 + */ +export async function createOrchestratorTask(params: { + requirement: string; + project: number; +}): Promise> { + return await request({ + url: '/orchestrator/tasks/', + method: 'POST', + data: params + }); +} + +/** + * 获取Orchestrator任务状态 + */ +export async function getOrchestratorTask(taskId: number): Promise> { + return await request({ + url: `/orchestrator/tasks/${taskId}/`, + method: 'GET' + }); +} + +/** + * 轮询Orchestrator任务状态 + */ +export async function pollOrchestratorTask( + taskId: number, + onUpdate?: (task: OrchestratorTask) => void, + maxAttempts: number = 60, + interval: number = 2000 +): Promise { + let attempts = 0; + + while (attempts < maxAttempts) { + const response = await getOrchestratorTask(taskId); + + if (response.status === 'error') { + throw new Error(response.message); + } + + const task = response.data; + + if (onUpdate) { + onUpdate(task); + } + + if (task.status === 'completed' || task.status === 'failed') { + return task; + } + + await new Promise(resolve => setTimeout(resolve, interval)); + attempts++; + } + + throw new Error('任务执行超时'); +} + +/** + * 流式发送消息到Orchestrator Brain Agent (与chatService保持一致的结构) + */ +export async function sendOrchestratorStreamMessage( + message: string, + projectId: number, + onStart: (sessionId: string) => void, + signal?: AbortSignal, + sessionId?: string // 新增:可选的session_id参数 +): Promise { + // 获取token + const token = localStorage.getItem('auth-accessToken'); + let streamSessionId: string | null = sessionId || null; // 使用传入的session_id + + // 错误处理函数 + const handleError = (error: any, sessionId: string | null) => { + console.error('Orchestrator stream error:', error); + if (sessionId && activeOrchestratorStreams.value[sessionId]) { + activeOrchestratorStreams.value[sessionId].error = error.message || 'Orchestrator流式请求失败'; + activeOrchestratorStreams.value[sessionId].isComplete = true; + } + }; + + if (!token) { + handleError(new Error('未登录或登录已过期'), streamSessionId); + return; + } + + try { + const response = await fetch('/api/orchestrator/stream/', { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Accept': 'text/event-stream', + 'Authorization': `Bearer ${token}` + }, + body: JSON.stringify({ + message, + project_id: projectId, + session_id: sessionId // 传递session_id到后端 + }), + signal + }); + + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + + const reader = response.body?.getReader(); + const decoder = new TextDecoder(); + + if (!reader) { + throw new Error('Failed to get response reader'); + } + + let buffer = ''; + while (true) { + const { done, value } = await reader.read(); + if (done) { + // 流结束 + if (streamSessionId && activeOrchestratorStreams.value[streamSessionId] && !activeOrchestratorStreams.value[streamSessionId].isComplete) { + activeOrchestratorStreams.value[streamSessionId].isComplete = true; + } + break; + } + + buffer += decoder.decode(value, { stream: true }); + const lines = buffer.split('\n'); + buffer = lines.pop() || ''; + + for (const line of lines) { + if (line.trim() === '' || !line.startsWith('data: ')) continue; + + const jsonData = line.slice(6); + if (jsonData === '[DONE]') { + if (streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + activeOrchestratorStreams.value[streamSessionId].isComplete = true; + } + continue; + } + + try { + const parsed = JSON.parse(jsonData); + + if (parsed.type === 'error') { + handleError(new Error(parsed.message || 'Orchestrator流式请求失败'), streamSessionId); + return; + } + + // 处理start事件 + if (parsed.type === 'start' && parsed.session_id) { + streamSessionId = parsed.session_id; + if (streamSessionId) { + // 初始化流状态 + activeOrchestratorStreams.value[streamSessionId] = { + content: '', + isComplete: false, + messages: [] + }; + onStart(streamSessionId); + } + } + + // 处理工具调用开始事件(tool_start) + if (parsed.type === 'tool_start' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + const toolName = parsed.tool_name || 'unknown_tool'; + const toolInputDetail = parsed.tool_input_detail || ''; + const toolInput = parsed.tool_input; + + const now = new Date(); + const time = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; + + // 🔧 关键修复:先固化当前AI流式内容为独立消息,确保顺序正确 + if (activeOrchestratorStreams.value[streamSessionId].content && activeOrchestratorStreams.value[streamSessionId].content.trim()) { + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: activeOrchestratorStreams.value[streamSessionId].content, + type: 'ai', + time: time, + isExpanded: false + }); + activeOrchestratorStreams.value[streamSessionId].content = ''; + } + + // 构建参数信息内容(工具名由标题显示) + let toolContent = ''; + if (toolInputDetail) { + toolContent = `**参数说明**: ${toolInputDetail}`; + } else if (typeof toolInput === 'string' && toolInput === '无需参数') { + toolContent = '该工具无需输入参数'; + } else if (toolInput && Object.keys(toolInput).length > 0) { + toolContent = `**输入参数**:\n\`\`\`json\n${JSON.stringify(toolInput, null, 2)}\n\`\`\``; + } else { + toolContent = '该工具无需输入参数'; + } + + // 添加工具调用开始消息 + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: toolContent, + type: 'tool', + time: time, + isExpanded: false + }); + + console.log('[Orchestrator] Tool start:', toolName, '参数:', toolInputDetail); + } + + // 处理工具调用结束事件(tool_end) + if (parsed.type === 'tool_end' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + const toolName = parsed.tool_name || 'unknown_tool'; + const toolOutput = parsed.tool_output || ''; + + const now = new Date(); + const time = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; + + // 🔧 关键修复:先固化当前AI流式内容,确保顺序正确 + if (activeOrchestratorStreams.value[streamSessionId].content && activeOrchestratorStreams.value[streamSessionId].content.trim()) { + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: activeOrchestratorStreams.value[streamSessionId].content, + type: 'ai', + time: time, + isExpanded: false + }); + activeOrchestratorStreams.value[streamSessionId].content = ''; + } + + // 直接使用工具输出内容,前端 formatToolMessage 会自动美化 + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: toolOutput, + type: 'tool', + time: time, + isExpanded: false + }); + + console.log('[Orchestrator] Tool end:', toolName, '输出长度:', toolOutput.length); + } + + // 处理工具调用错误事件(tool_error) + if (parsed.type === 'tool_error' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + const toolName = parsed.tool_name || 'unknown_tool'; + const errorInfo = parsed.error || 'Unknown error'; + + const now = new Date(); + const time = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; + + // 🔧 关键修复:先固化当前AI流式内容,确保顺序正确 + if (activeOrchestratorStreams.value[streamSessionId].content && activeOrchestratorStreams.value[streamSessionId].content.trim()) { + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: activeOrchestratorStreams.value[streamSessionId].content, + type: 'ai', + time: time, + isExpanded: false + }); + activeOrchestratorStreams.value[streamSessionId].content = ''; + } + + // 添加工具调用错误消息 + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: `❌ 工具调用失败 (${toolName}):\n${errorInfo}`, + type: 'tool', + time: time, + isExpanded: false + }); + + console.error('[Orchestrator] Tool error:', toolName, errorInfo); + } + + // 处理工具消息(update事件 - 兼容旧版本,使用astream_events后这部分逻辑已不再需要) + if (parsed.type === 'update' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + const updateData = parsed.data; + if (typeof updateData === 'string') { + // 解析工具消息: ToolMessage(content='...', name='tool_name', ...) + if (updateData.includes('ToolMessage')) { + try { + const contentMatch = updateData.match(/content='([^']*(?:\\'[^']*)*)'/); + + if (contentMatch) { + const toolContent = contentMatch[1].replace(/\\'/g, "'").replace(/\\n/g, '\n'); + + const now = new Date(); + const time = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; + + // 如果当前有AI流式内容,先固化为独立消息 + if (activeOrchestratorStreams.value[streamSessionId].content && activeOrchestratorStreams.value[streamSessionId].content.trim()) { + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: activeOrchestratorStreams.value[streamSessionId].content, + type: 'ai', + time: time, + isExpanded: false + }); + activeOrchestratorStreams.value[streamSessionId].content = ''; + } + + // 添加工具消息 + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: toolContent, + type: 'tool', + time: time, + isExpanded: false + }); + } + } catch (e) { + console.warn('Failed to parse tool message:', updateData); + } + } + } + } + + // 处理 brain_decision 事件 - Agent 切换信号 + if (parsed.type === 'brain_decision' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + // Brain决策完成,即将切换到下一个Agent + // 标记需要创建新的消息占位符 + activeOrchestratorStreams.value[streamSessionId].needsNewMessage = true; + activeOrchestratorStreams.value[streamSessionId].nextAgent = parsed.next_agent || 'unknown'; + activeOrchestratorStreams.value[streamSessionId].agentIdentityAdded = false; // 重置标志 + + console.log('[Orchestrator] brain_decision: Agent switching from Brain to', parsed.next_agent); + } + + // 处理AI消息(message事件) - 与ChatStreamAPIView保持一致的格式 + if (parsed.type === 'message' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + // 使用data字段,与chatService保持一致 + const messageData = parsed.data || parsed.content; // 兼容旧格式 + + // 🔧 修复:处理新的JSON格式 {content: "xxx", additional_kwargs: {}, ...} + if (typeof messageData === 'object' && messageData.content) { + // 🎨 检查是否是思考过程(默认折叠) + const isThinkingProcess = messageData.additional_kwargs?.is_thinking_process === true; + + // 🎨 所有思考过程消息(Brain决策 + 子Agent内部报告)都作为独立消息处理 + if (isThinkingProcess) { + // 🔧 关键修复:思考过程消息先固化当前流式内容,确保顺序正确 + const now = new Date(); + const time = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; + + // 先固化当前流式内容 + if (activeOrchestratorStreams.value[streamSessionId].content && + activeOrchestratorStreams.value[streamSessionId].content.trim()) { + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: activeOrchestratorStreams.value[streamSessionId].content, + type: 'ai', + time: time, + isExpanded: false + }); + activeOrchestratorStreams.value[streamSessionId].content = ''; + } + + // 直接添加思考过程消息到messages数组,按接收顺序 + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: messageData.content, + type: 'ai' as const, + time: time, + isExpanded: false, + isThinkingProcess: true, // 🎨 标记为思考过程 + isThinkingExpanded: false // 🎨 默认折叠 + }); + } else { + // 普通 AI 消息:累积到流式内容(不添加emoji身份标识,与历史记录格式一致) + const contentToAdd = messageData.content; + activeOrchestratorStreams.value[streamSessionId].content += contentToAdd; + } + } else if (typeof messageData === 'string') { + // 旧格式(向后兼容) + let content = ''; + if (messageData.includes('AIMessageChunk')) { + const match = messageData.match(/content=(?:'([^']*)'|"([^"]*)")/); + if (match) { + content = (match[1] || match[2] || '').replace(/\\'/g, "'").replace(/\\"/g, '"'); + } + } else if (messageData.trim()) { + content = messageData; + } + + if (content) { + activeOrchestratorStreams.value[streamSessionId].content += content; + } + } + } + + // 处理agent_start事件 - Agent节点开始执行 + if (parsed.type === 'agent_start' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + const agentName = parsed.agent || 'Unknown'; + const now = new Date(); + const time = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; + + // 🔧 如果当前有AI流式内容,先固化 + if (activeOrchestratorStreams.value[streamSessionId].content && + activeOrchestratorStreams.value[streamSessionId].content.trim()) { + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: activeOrchestratorStreams.value[streamSessionId].content, + type: 'ai', + time: time, + isExpanded: false + }); + activeOrchestratorStreams.value[streamSessionId].content = ''; + } + + // 标记新agent开始(不再添加emoji身份标识) + activeOrchestratorStreams.value[streamSessionId].nextAgent = agentName.toLowerCase(); + activeOrchestratorStreams.value[streamSessionId].agentIdentityAdded = false; + + console.log('[Orchestrator] Agent start:', agentName); + } + + // 处理chat_response事件 - Chat Agent完成 + if (parsed.type === 'chat_response' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + console.log('[Orchestrator] Chat Agent completed'); + // Chat响应已通过message事件流式传输,此处仅日志 + } + + // 处理requirement_analysis事件 - Requirement Agent完成 + if (parsed.type === 'requirement_analysis' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + const analysis = parsed.analysis; + const now = new Date(); + const time = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; + + // 添加需求分析结果消息 + const analysisContent = `**需求分析完成**\n\n${JSON.stringify(analysis, null, 2)}`; + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: analysisContent, + type: 'system', + time: time, + isExpanded: false + }); + + console.log('[Orchestrator] Requirement analysis completed:', analysis); + } + + // 处理testcase_generation事件 - TestCase Agent完成 + if (parsed.type === 'testcase_generation' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + const testcaseCount = parsed.testcase_count || 0; + const now = new Date(); + const time = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; + + // 添加测试用例生成结果消息 + const testcaseContent = `**测试用例生成完成**\n\n共生成 ${testcaseCount} 个测试用例`; + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: testcaseContent, + type: 'system', + time: time, + isExpanded: false + }); + + console.log('[Orchestrator] Testcase generation completed:', testcaseCount, 'cases'); + } + + // 处理final_summary事件 - 最终摘要 + if (parsed.type === 'final_summary' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + const summary = { + requirement_analysis: parsed.requirement_analysis, + knowledge_doc_count: parsed.knowledge_doc_count || 0, + testcase_count: parsed.testcase_count || 0, + total_steps: parsed.total_steps || 0 + }; + const now = new Date(); + const time = `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; + + // 🔧 如果有流式内容,先保存 + if (activeOrchestratorStreams.value[streamSessionId].content && + activeOrchestratorStreams.value[streamSessionId].content.trim()) { + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: activeOrchestratorStreams.value[streamSessionId].content, + type: 'ai', + time: time, + isExpanded: false + }); + activeOrchestratorStreams.value[streamSessionId].content = ''; + } + + // 添加最终摘要消息 + const summaryContent = `**✅ 任务完成**\n\n` + + `- 总步骤: ${summary.total_steps}\n` + + `- 文档检索: ${summary.knowledge_doc_count} 个\n` + + `- 测试用例: ${summary.testcase_count} 个`; + + activeOrchestratorStreams.value[streamSessionId].messages.push({ + content: summaryContent, + type: 'system', + time: time, + isExpanded: false + }); + + console.log('[Orchestrator] Final summary:', summary); + } + + // 处理complete事件 + if (parsed.type === 'complete' && streamSessionId && activeOrchestratorStreams.value[streamSessionId]) { + activeOrchestratorStreams.value[streamSessionId].isComplete = true; + } + } catch (e) { + console.warn('Failed to parse Orchestrator SSE data:', jsonData); + } + } + } + } catch (error) { + handleError(error, streamSessionId); + } +} + +/** + * Orchestrator流式事件类型 (支持astream_events的工具调用事件) + */ +export interface OrchestratorStreamEvent { + type: 'start' | 'update' | 'message' | 'brain_decision' | 'agent_start' | 'chat_response' | 'requirement_analysis' | 'testcase_generation' | 'final_summary' | 'complete' | 'error' | 'tool_start' | 'tool_end' | 'tool_error'; + session_id?: string; // start事件的会话ID + content?: string; // message事件的数据(向后兼容) + data?: string; // message和update事件的数据(与ChatStreamAPIView统一格式) + // brain_decision事件字段 + agent?: string; + next_agent?: string; + instruction?: string; + reason?: string; + step?: number; + // agent_start事件字段 (agent名称在agent字段中) + // requirement_analysis事件字段 + analysis?: any; + // testcase_generation事件字段 + testcase_count?: number; + testcases?: any[]; + // tool_start事件字段 + tool_name?: string; + tool_input?: any; + tool_input_detail?: string; + // tool_end事件字段 + tool_output?: string; + output_preview?: string; + output_length?: number; + // tool_error事件字段 + error?: string; + // final_summary事件字段 + requirement_analysis?: any; + knowledge_doc_count?: number; + total_steps?: number; + // error事件的错误信息 + message?: string; +} diff --git a/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue b/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue index 002167c6..59787d82 100644 --- a/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue +++ b/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue @@ -24,6 +24,7 @@ :similarity-threshold="similarityThreshold" :top-k="topK" :selected-prompt-id="selectedPromptId" + :brain-mode="isBrainMode" @update:is-stream-mode="isStreamMode = $event" @clear-chat="clearChat" @show-system-prompt="showSystemPromptModal" @@ -44,6 +45,7 @@ :is-loading="isLoading" :has-prompts="hasPrompts" :supports-vision="currentLlmConfig?.supports_vision || false" + v-model:brain-mode="isBrainMode" @send-message="handleSendMessage" /> @@ -75,6 +77,11 @@ import { } from '@/features/langgraph/services/chatService'; import { listLlmConfigs, partialUpdateLlmConfig } from '@/features/langgraph/services/llmConfigService'; import { getUserPrompts } from '@/features/prompts/services/promptService'; +import { + sendOrchestratorStreamMessage, + activeOrchestratorStreams, + clearOrchestratorStreamState +} from '@/features/langgraph/services/orchestratorService'; import type { ChatRequest } from '@/features/langgraph/types/chat'; import type { LlmConfig } from '@/features/langgraph/types/llmConfig'; import { useProjectStore } from '@/store/projectStore'; @@ -99,11 +106,14 @@ interface ChatMessage { isUser: boolean; time: string; isLoading?: boolean; - messageType?: 'human' | 'ai' | 'tool' | 'system'; // 🆕 消息类型,用于区分头像,添加 system 类型 - isExpanded?: boolean; // 工具消息是否展开 - isStreaming?: boolean; // 是否正在流式输出 - imageBase64?: string; // 🆕 消息携带的图片(Base64格式) - imageDataUrl?: string; // 🆕 完整的图片Data URL(包含MIME类型) + messageType?: 'human' | 'ai' | 'tool' | 'system'; + toolName?: string; + isExpanded?: boolean; + isStreaming?: boolean; + imageBase64?: string; + imageDataUrl?: string; + isThinkingProcess?: boolean; + isThinkingExpanded?: boolean; } interface ChatSession { @@ -119,6 +129,13 @@ const sessionId = ref(''); const chatSessions = ref([]); const isStreamMode = ref(true); // 流式模式开关,默认开启 +// ⭐大脑模式开关 - 从localStorage加载 +const loadBrainModeState = (): boolean => { + const saved = localStorage.getItem('langgraph_brain_mode'); + return saved === 'true'; +}; +const isBrainMode = ref(loadBrainModeState()); + // 知识库相关 const useKnowledgeBase = ref(false); // 是否启用知识库功能 const selectedKnowledgeBaseId = ref(null); // 选中的知识库ID @@ -129,6 +146,32 @@ const topK = ref(5); // 检索结果数量 const selectedPromptId = ref(null); // 用户选择的提示词ID const hasPrompts = ref(false); // 是否有可用的提示词 +// ⭐从localStorage恢复选中的提示词 +const PROMPT_STORAGE_KEY = 'wharttest_selected_prompt_id'; +const loadSavedPromptId = () => { + try { + const saved = localStorage.getItem(PROMPT_STORAGE_KEY); + if (saved) { + selectedPromptId.value = parseInt(saved, 10); + } + } catch (error) { + console.error('加载保存的提示词ID失败:', error); + } +}; + +// ⭐监听selectedPromptId变化,保存到localStorage +watch(selectedPromptId, (newValue) => { + try { + if (newValue !== null) { + localStorage.setItem(PROMPT_STORAGE_KEY, String(newValue)); + } else { + localStorage.removeItem(PROMPT_STORAGE_KEY); + } + } catch (error) { + console.error('保存提示词ID失败:', error); + } +}); + // 系统提示词相关 const isSystemPromptModalVisible = ref(false); @@ -166,10 +209,20 @@ const loadChatHistorySilently = async () => { if (historyMessageCount > currentMessageCount) { console.log(`📥 检测到新消息: ${historyMessageCount - currentMessageCount}条`); + // 🎨 保存当前的展开状态 + const expandedStates = new Map(); + messages.value.forEach(msg => { + if (msg.isThinkingProcess && msg.isThinkingExpanded) { + const key = msg.content.substring(0, 100); + expandedStates.set(key, true); + } + }); + // 清空当前消息列表 messages.value = []; // 重新加载所有消息 + const tempMessages: ChatMessage[] = []; response.data.history.forEach(historyItem => { if (historyItem.type === 'system') { return; @@ -186,12 +239,31 @@ const loadChatHistorySilently = async () => { message.isExpanded = false; } + // 🎨 如果是思考过程消息,设置折叠状态 + if (historyItem.is_thinking_process) { + message.isThinkingProcess = true; + message.isThinkingExpanded = false; + } + // 如果消息包含图片,添加图片数据 if (historyItem.image) { message.imageDataUrl = historyItem.image; } - messages.value.push(message); + tempMessages.push(message); + }); + + // 🎨 合并连续的思考过程消息 + messages.value = mergeThinkingProcessMessages(tempMessages); + + // 🎨 恢复展开状态 + messages.value.forEach(msg => { + if (msg.isThinkingProcess) { + const key = msg.content.substring(0, 100); + if (expandedStates.has(key)) { + msg.isThinkingExpanded = true; + } + } }); } } @@ -456,7 +528,8 @@ const loadChatHistory = async () => { // 清空当前消息列表 messages.value = []; - // 将历史记录转换为消息格式并添加到列表 + // 将历史记录转换为消息格式 + const tempMessages: ChatMessage[] = []; response.data.history.forEach(historyItem => { // 🆕 跳过系统消息,不在消息列表中显示 if (historyItem.type === 'system') { @@ -467,7 +540,7 @@ const loadChatHistory = async () => { content: historyItem.content, isUser: historyItem.type === 'human', time: formatHistoryTime(historyItem.timestamp), - messageType: historyItem.type // 添加消息类型用于区分头像 + messageType: historyItem.type }; // 如果是工具消息,设置默认折叠状态 @@ -475,14 +548,23 @@ const loadChatHistory = async () => { message.isExpanded = false; } + // 🎨 如果是思考过程消息,设置折叠状态 + if (historyItem.is_thinking_process) { + message.isThinkingProcess = true; + message.isThinkingExpanded = false; + } + // 如果消息包含图片,添加图片数据 if (historyItem.image) { message.imageDataUrl = historyItem.image; } - messages.value.push(message); + tempMessages.push(message); }); + // 🎨 合并连续的思考过程消息 + messages.value = mergeThinkingProcessMessages(tempMessages); + // 只有在会话列表中不存在该会话时才添加(避免重复) const existingSession = chatSessions.value.find(s => s.id === response.data.session_id); if (!existingSession) { @@ -516,6 +598,73 @@ const getCurrentTime = () => { return `${now.getHours().toString().padStart(2, '0')}:${now.getMinutes().toString().padStart(2, '0')}`; }; +// 获取Agent的emoji标识 +const getAgentEmoji = (agentType: string): string => { + const emojiMap: Record = { + 'chat': '💬', + 'requirement': '📋', + 'testcase': '🧪', + 'knowledge': '📚', + 'brain': '🧠' + }; + return emojiMap[agentType.toLowerCase()] || '🤖'; +}; + +// 🎨 合并连续的思考过程消息(保持对象引用,避免丢失状态) +const mergeThinkingProcessMessages = (messages: ChatMessage[]): ChatMessage[] => { + const result: ChatMessage[] = []; + let thinkingBuffer: ChatMessage[] = []; + + for (let i = 0; i < messages.length; i++) { + const msg = messages[i]; + + if (msg.isThinkingProcess) { + thinkingBuffer.push(msg); + } else { + // 遇到非思考过程消息,先处理缓冲区 + if (thinkingBuffer.length > 0) { + if (thinkingBuffer.length === 1) { + // 只有一个思考过程,直接添加 + result.push(thinkingBuffer[0]); + } else { + // 多个思考过程,合并内容到第一个对象(保持响应性) + const merged = thinkingBuffer[0]; + merged.content = thinkingBuffer.map(m => m.content).join('\n\n---\n\n'); + result.push(merged); + } + thinkingBuffer = []; + } + // 添加当前非思考过程消息 + result.push(msg); + } + } + + // 处理末尾剩余的思考过程消息 + if (thinkingBuffer.length > 0) { + if (thinkingBuffer.length === 1) { + result.push(thinkingBuffer[0]); + } else { + const merged = thinkingBuffer[0]; + merged.content = thinkingBuffer.map(m => m.content).join('\n\n---\n\n'); + result.push(merged); + } + } + + return result; +}; + +// 获取Agent的中文名称 +const getAgentName = (agentType: string): string => { + const nameMap: Record = { + 'chat': 'Chat Agent', + 'requirement': 'Requirement Agent', + 'testcase': 'TestCase Agent', + 'knowledge': 'Knowledge Agent', + 'brain': 'Brain' + }; + return nameMap[agentType.toLowerCase()] || 'Agent'; +}; + // 格式化历史消息时间 const formatHistoryTime = (timestamp: string) => { if (!timestamp) return getCurrentTime(); @@ -555,9 +704,57 @@ const formatHistoryTime = (timestamp: string) => { } }; -// 切换工具消息的展开/收起状态 +// 切换工具消息或思考过程的展开/收起状态 const toggleExpand = (message: ChatMessage) => { - message.isExpanded = !message.isExpanded; + if (message.isThinkingProcess) { + message.isThinkingExpanded = !message.isThinkingExpanded; + } else { + message.isExpanded = !message.isExpanded; + } +}; + +// ⭐大脑模式消息处理 +const handleBrainModeMessage = async (message: string) => { + // 添加用户消息 + messages.value.push({ + content: message, + isUser: true, + time: getCurrentTime(), + messageType: 'human' + }); + + isLoading.value = true; + let brainSessionId: string | null = null; + + // onStart 回调 + const handleStart = (newSessionId: string) => { + brainSessionId = newSessionId; + // 保存sessionId到全局状态和localStorage以保持上下文连续性 + saveSessionId(newSessionId); + console.log(`Brain mode session started: ${brainSessionId}`); + + // 🔧 修复:不在这里停止loading,保持转圈直到流完成 + // isLoading.value = false; + + // 不再创建占位符,由watch在检测到第一个流式内容时创建 + }; + + try { + await sendOrchestratorStreamMessage( + message, + projectStore.currentProjectId!, + handleStart, + undefined, // signal参数 + sessionId.value || undefined // 传递session_id以保持上下文 + ); + + // sendOrchestratorStreamMessage 现在使用全局状态管理 + // 需要监听 activeOrchestratorStreams 的变化来实时更新界面 + } catch (error) { + console.error('Brain mode error:', error); + Message.error('消息发送失败'); + isLoading.value = false; + } }; // 添加或更新会话到列表 @@ -631,6 +828,7 @@ const switchSession = async (id: string) => { const response = await getChatHistory(id, projectStore.currentProjectId); if (response.status === 'success') { + const tempMessages: ChatMessage[] = []; response.data.history.forEach(historyItem => { // 🆕 跳过系统消息,不在消息列表中显示 if (historyItem.type === 'system') { @@ -641,7 +839,7 @@ const switchSession = async (id: string) => { content: historyItem.content, isUser: historyItem.type === 'human', time: formatHistoryTime(historyItem.timestamp), - messageType: historyItem.type // 添加消息类型用于区分头像 + messageType: historyItem.type }; // 如果是工具消息,设置默认折叠状态 @@ -649,14 +847,23 @@ const switchSession = async (id: string) => { message.isExpanded = false; } + // 🎨 如果是思考过程消息,设置折叠状态 + if (historyItem.is_thinking_process) { + message.isThinkingProcess = true; + message.isThinkingExpanded = false; + } + // 如果消息包含图片,添加图片数据 if (historyItem.image) { message.imageDataUrl = historyItem.image; } - messages.value.push(message); + tempMessages.push(message); }); + // 🎨 合并连续的思考过程消息 + messages.value = mergeThinkingProcessMessages(tempMessages); + // 更新会话信息(不更新时间,因为这是加载历史记录) updateSessionInList(id, undefined, false); } else { @@ -742,7 +949,7 @@ const batchDeleteSessions = async (sessionIds: string[]) => { const response = await batchDeleteChatHistory(sessionIds, projectStore.currentProjectId); if (response.status === 'success') { - const { deleted_count, processed_sessions, failed_sessions } = response.data; + const { processed_sessions, failed_sessions } = response.data; // 从列表中移除已删除的会话 chatSessions.value = chatSessions.value.filter(s => !sessionIds.includes(s.id)); @@ -835,6 +1042,12 @@ const handleSendMessage = async (data: { message: string; image?: string; imageD return; } + // ⭐大脑模式使用orchestrator流式接口 + if (isBrainMode.value) { + await handleBrainModeMessage(message); + return; + } + // 添加用户消息(保存图片数据以便显示) messages.value.push({ content: message, @@ -971,7 +1184,6 @@ const handleStreamMessage = async (requestData: ChatRequest) => { // 处理非流式消息 const handleNormalMessage = async (requestData: ChatRequest, originalMessage: string) => { - const isNewSession = !sessionId.value; // 检查是否是新会话 // 添加loading占位消息 const loadingMessageIndex = messages.value.length; messages.value.push({ @@ -1371,11 +1583,181 @@ watch(() => projectStore.currentProjectId, async (newProjectId, oldProjectId) => } }); +// 监听 Brain 模式的流式输出,实时更新消息 +watch( + () => { + const streams = activeOrchestratorStreams.value; + return Object.keys(streams).length > 0 ? streams : null; + }, + async (streams) => { + if (!streams) return; + + const sessionIds = Object.keys(streams); + if (sessionIds.length === 0) return; + + const latestSessionId = sessionIds[sessionIds.length - 1]; + const stream = streams[latestSessionId]; + + if (!stream) return; + + // 1. 追加 stream.messages(Brain决策、工具消息等) + if (stream.messages && stream.messages.length > 0) { + if (!stream.processedMessageCount) { + stream.processedMessageCount = 0; + } + + const newMessages = stream.messages.slice(stream.processedMessageCount); + if (newMessages.length > 0) { + // 🎨 直接追加消息,不立即合并(保持对象引用稳定) + newMessages.forEach(msg => { + messages.value.push({ + content: msg.content, + isUser: false, + time: msg.time, + messageType: msg.type, + toolName: msg.toolName, + isExpanded: msg.isExpanded, + isThinkingProcess: msg.isThinkingProcess, + isThinkingExpanded: msg.isThinkingExpanded + }); + }); + + stream.processedMessageCount = stream.messages.length; + console.log('[Brain Watch] Appended', newMessages.length, 'structured messages'); + } + } + + // 2. 管理流式内容占位符 + // 查找当前的流式内容占位符(标记为 isStreaming=true) + let streamingMessageIndex = -1; + for (let i = messages.value.length - 1; i >= 0; i--) { + if (messages.value[i].isStreaming === true) { + streamingMessageIndex = i; + break; + } + } + + if (stream.content && stream.content.trim()) { + // 有流式内容 + if (streamingMessageIndex === -1) { + // 没有占位符,创建一个新的 + messages.value.push({ + content: stream.content, + isUser: false, + time: getCurrentTime(), + messageType: 'ai', + isStreaming: true // 使用isStreaming标记来识别流式内容占位符 + }); + console.log('[Brain Watch] Created streaming placeholder'); + } else { + // 更新现有占位符 + messages.value[streamingMessageIndex].content = stream.content; + } + } + + // 3. 流完成时的处理 + if (stream.isComplete) { + console.log('[Brain Watch] Stream complete, reloading history'); + + // 关闭流式状态 + if (streamingMessageIndex !== -1) { + messages.value[streamingMessageIndex].isStreaming = false; + } + + // 重新加载完整历史,确保包含所有后端保存的消息 + if (latestSessionId && projectStore.currentProjectId) { + try { + // 🎨 保存当前的展开状态(根据内容匹配) + const expandedStates = new Map(); + messages.value.forEach(msg => { + if (msg.isThinkingProcess && msg.isThinkingExpanded) { + // 使用内容的前100个字符作为key + const key = msg.content.substring(0, 100); + expandedStates.set(key, true); + } + }); + + const response = await getChatHistory(latestSessionId, projectStore.currentProjectId); + if (response.status === 'success') { + // 清空当前消息并重新加载 + messages.value = []; + + const tempMessages: ChatMessage[] = []; + response.data.history.forEach(historyItem => { + if (historyItem.type === 'system') return; + + const message: ChatMessage = { + content: historyItem.content, + isUser: historyItem.type === 'human', + time: formatHistoryTime(historyItem.timestamp), + messageType: historyItem.type + }; + + if (historyItem.type === 'tool') { + message.isExpanded = false; + } + + // 🎨 如果是思考过程消息,设置折叠状态 + if (historyItem.is_thinking_process) { + message.isThinkingProcess = true; + message.isThinkingExpanded = false; + } + + if (historyItem.image) { + message.imageDataUrl = historyItem.image; + } + + tempMessages.push(message); + }); + + // 🎨 合并连续的思考过程消息 + messages.value = mergeThinkingProcessMessages(tempMessages); + + // 🎨 恢复展开状态 + messages.value.forEach(msg => { + if (msg.isThinkingProcess) { + const key = msg.content.substring(0, 100); + if (expandedStates.has(key)) { + msg.isThinkingExpanded = true; + } + } + }); + + // 更新会话列表 + const firstUserMessage = messages.value.find(m => m.isUser); + if (firstUserMessage) { + updateSessionInList(latestSessionId, firstUserMessage.content, true); + } + + console.log('[Brain Watch] History reloaded:', messages.value.length, 'messages'); + } + } catch (error) { + console.error('[Brain Watch] Failed to reload history:', error); + } + } + + // 清理流状态 + clearOrchestratorStreamState(latestSessionId); + isLoading.value = false; + } + }, + { deep: true } +); + watch([useKnowledgeBase, selectedKnowledgeBaseId, similarityThreshold, topK], () => { saveKnowledgeBaseSettings(); }, { deep: true }); +// 监听Brain模式状态,保存到localStorage +watch(isBrainMode, (newValue) => { + localStorage.setItem('langgraph_brain_mode', newValue.toString()); + console.log('💾 Brain mode state saved:', newValue); +}); + onMounted(async () => { + // ⭐加载保存的提示词ID + loadSavedPromptId(); + // 加载知识库设置 loadKnowledgeBaseSettings(); diff --git a/WHartTest_Vue/src/features/prompts/types/prompt.ts b/WHartTest_Vue/src/features/prompts/types/prompt.ts index 85ed9744..2a1c8a5f 100644 --- a/WHartTest_Vue/src/features/prompts/types/prompt.ts +++ b/WHartTest_Vue/src/features/prompts/types/prompt.ts @@ -7,7 +7,9 @@ export type PromptType = | 'direct_analysis' | 'global_analysis' | 'module_analysis' - | 'consistency_analysis'; + | 'consistency_analysis' + | 'test_case_execution' + | 'brain_orchestrator'; /** * 提示词类型选项 @@ -19,6 +21,8 @@ export const PROMPT_TYPE_CHOICES = [ { key: 'global_analysis', name: '全局分析', isProgramCall: true }, { key: 'module_analysis', name: '模块分析', isProgramCall: true }, { key: 'consistency_analysis', name: '一致性分析', isProgramCall: true }, + { key: 'test_case_execution', name: '测试用例执行', isProgramCall: true }, + { key: 'brain_orchestrator', name: '智能规划', isProgramCall: false }, ] as const; /** diff --git a/WHartTest_Vue/src/utils/request.ts b/WHartTest_Vue/src/utils/request.ts index 7b48175b..9f49ca84 100644 --- a/WHartTest_Vue/src/utils/request.ts +++ b/WHartTest_Vue/src/utils/request.ts @@ -120,20 +120,26 @@ service.interceptors.response.use( // 检查后端返回的标准格式 { status, code, message, data, errors } if (res && 'status' in res && 'data' in res) { return { - success: res.status === 'success', // 根据后端状态判断是否成功 - data: res.data, // 直接传递data字段 - total: response.headers['x-total-count'] ? parseInt(response.headers['x-total-count']) : undefined, - message: res.message || 'success' - }; + ...response, + data: { + success: res.status === 'success', // 根据后端状态判断是否成功 + data: res.data, // 直接传递data字段 + total: response.headers['x-total-count'] ? parseInt(response.headers['x-total-count']) : undefined, + message: res.message || 'success' + } + } as any; } // 旧的处理方式,保留兼容性 return { - success: true, - data: res, - total: response.headers['x-total-count'] ? parseInt(response.headers['x-total-count']) : undefined, - message: 'success' - }; + ...response, + data: { + success: true, + data: res, + total: response.headers['x-total-count'] ? parseInt(response.headers['x-total-count']) : undefined, + message: 'success' + } + } as any; }, async (error) => { const originalRequest = error.config as RequestConfig; @@ -143,17 +149,95 @@ service.interceptors.response.use( // 检查是否是401错误(未授权) if (response && response.status === 401) { - // 对于所有401错误,直接清除token并跳转到登录页 - const authStore = useAuthStore(); - authStore.logout(); - if (window.location.pathname !== '/login') { - window.location.href = '/login'; + // 如果是刷新token的请求失败,直接登出 + if (originalRequest.url?.includes('/token/refresh/')) { + const authStore = useAuthStore(); + authStore.logout(); + if (window.location.pathname !== '/login') { + window.location.href = '/login'; + } + return Promise.reject({ + success: false, + status: 401, + error: '登录已过期,请重新登录', + }); + } + + // 如果已经重试过,直接登出 + if (originalRequest._retry) { + const authStore = useAuthStore(); + authStore.logout(); + if (window.location.pathname !== '/login') { + window.location.href = '/login'; + } + return Promise.reject({ + success: false, + status: 401, + error: '登录已过期,请重新登录', + }); + } + + // 标记为已重试 + originalRequest._retry = true; + + // 如果正在刷新token,将请求加入队列 + if (isRefreshing) { + return new Promise((resolve, reject) => { + subscribeTokenRefresh((token: string) => { + if (!originalRequest.headers) { + originalRequest.headers = {}; + } + originalRequest.headers['Authorization'] = `Bearer ${token}`; + resolve(service(originalRequest)); + }); + }); + } + + // 开始刷新token + isRefreshing = true; + + try { + const newToken = await refreshToken(); + + if (newToken) { + // 刷新成功,更新请求头并重试原请求 + isRefreshing = false; + onRefreshed(newToken); + if (!originalRequest.headers) { + originalRequest.headers = {}; + } + originalRequest.headers['Authorization'] = `Bearer ${newToken}`; + return service(originalRequest); + } else { + // 刷新失败,清除队列并登出 + isRefreshing = false; + refreshSubscribers = []; + const authStore = useAuthStore(); + authStore.logout(); + if (window.location.pathname !== '/login') { + window.location.href = '/login'; + } + return Promise.reject({ + success: false, + status: 401, + error: '登录已过期,请重新登录', + }); + } + } catch (refreshError) { + // 刷新token时发生异常 + isRefreshing = false; + refreshSubscribers = []; + const authStore = useAuthStore(); + authStore.logout(); + if (window.location.pathname !== '/login') { + window.location.href = '/login'; + } + return Promise.reject({ + success: false, + status: 401, + error: '登录已过期,请重新登录', + }); } - return Promise.reject({ - success: false, - status: 401, - error: '登录已过期,请重新登录', - }); } if (response) { @@ -187,14 +271,6 @@ service.interceptors.response.use( // 处理特定的错误状态码 switch (status) { - case 401: - // 检查是否是令牌无效的错误,或者是刷新token的请求失败,或者重试后仍然401 - if (isTokenInvalidError(response.data) || originalRequest._retry || originalRequest.url === '/token/refresh/') { - message = '登录已过期,请重新登录'; - // 清除token并重定向到登录页 - handleAuthError(message); - } - break; case 403: // 对于403错误,优先使用从响应中解析的具体权限错误消息 // 如果没有解析到具体消息,则使用默认消息 @@ -239,7 +315,7 @@ export async function request(config: RequestConfig): Promise<{ }> { try { const response = await service(config); - return response as { success: boolean; data: T; total?: number; message: string }; + return response.data as { success: boolean; data: T; total?: number; message: string }; } catch (error: any) { return error; } From 1039f5b72d2040213d6262d3cc88d552c3a9cd66 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 18 Nov 2025 10:44:29 +0800 Subject: [PATCH 08/24] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=87=AD=E6=8D=AE=E5=8A=9F=E8=83=BD=EF=BC=8C=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E7=AE=A1=E7=90=86=E9=A1=B9=E7=9B=AE=E7=9A=84=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E8=AE=BF=E9=97=AE=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ct_password_project_system_url_and_more.py | 33 +++++ ...word_remove_project_system_url_and_more.py | 47 +++++++ WHartTest_Django/projects/models.py | 26 ++++ WHartTest_Django/projects/serializers.py | 43 ++++++- WHartTest_Vue/src/services/projectService.ts | 13 ++ .../src/views/ProjectManagementView.vue | 118 ++++++++++++++---- 6 files changed, 255 insertions(+), 25 deletions(-) create mode 100644 WHartTest_Django/projects/migrations/0003_project_password_project_system_url_and_more.py create mode 100644 WHartTest_Django/projects/migrations/0004_remove_project_password_remove_project_system_url_and_more.py diff --git a/WHartTest_Django/projects/migrations/0003_project_password_project_system_url_and_more.py b/WHartTest_Django/projects/migrations/0003_project_password_project_system_url_and_more.py new file mode 100644 index 00000000..c26382e0 --- /dev/null +++ b/WHartTest_Django/projects/migrations/0003_project_password_project_system_url_and_more.py @@ -0,0 +1,33 @@ +# Generated by Django 5.2 on 2025-11-18 02:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0002_project_creator'), + ] + + operations = [ + migrations.AddField( + model_name='project', + name='password', + field=models.CharField(blank=True, help_text='登录密码', max_length=255, verbose_name='密码'), + ), + migrations.AddField( + model_name='project', + name='system_url', + field=models.URLField(blank=True, help_text='系统访问地址(如 https://test.example.com)', max_length=255, verbose_name='项目地址'), + ), + migrations.AddField( + model_name='project', + name='user_role', + field=models.CharField(blank=True, help_text='如"管理员"、"普通用户"、"审核员"等', max_length=50, verbose_name='角色'), + ), + migrations.AddField( + model_name='project', + name='username', + field=models.CharField(blank=True, help_text='登录账号', max_length=100, verbose_name='用户名'), + ), + ] diff --git a/WHartTest_Django/projects/migrations/0004_remove_project_password_remove_project_system_url_and_more.py b/WHartTest_Django/projects/migrations/0004_remove_project_password_remove_project_system_url_and_more.py new file mode 100644 index 00000000..60fcafef --- /dev/null +++ b/WHartTest_Django/projects/migrations/0004_remove_project_password_remove_project_system_url_and_more.py @@ -0,0 +1,47 @@ +# Generated by Django 5.2 on 2025-11-18 02:27 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('projects', '0003_project_password_project_system_url_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='project', + name='password', + ), + migrations.RemoveField( + model_name='project', + name='system_url', + ), + migrations.RemoveField( + model_name='project', + name='user_role', + ), + migrations.RemoveField( + model_name='project', + name='username', + ), + migrations.CreateModel( + name='ProjectCredential', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('system_url', models.URLField(blank=True, help_text='系统访问地址(如 https://test.example.com)', max_length=255, verbose_name='项目地址')), + ('username', models.CharField(blank=True, help_text='登录账号', max_length=100, verbose_name='用户名')), + ('password', models.CharField(blank=True, help_text='登录密码', max_length=255, verbose_name='密码')), + ('user_role', models.CharField(blank=True, help_text='如"管理员"、"普通用户"、"审核员"等', max_length=50, verbose_name='角色')), + ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')), + ('project', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='credentials', to='projects.project', verbose_name='项目')), + ], + options={ + 'verbose_name': '项目凭据', + 'verbose_name_plural': '项目凭据', + 'ordering': ['project', 'user_role'], + }, + ), + ] diff --git a/WHartTest_Django/projects/models.py b/WHartTest_Django/projects/models.py index 41486570..225b887f 100644 --- a/WHartTest_Django/projects/models.py +++ b/WHartTest_Django/projects/models.py @@ -28,6 +28,32 @@ def __str__(self): return self.name +class ProjectCredential(models.Model): + """ + 项目凭据模型,存储项目的系统访问信息 + 一个项目可以有多个凭据,用于不同角色的登录 + """ + project = models.ForeignKey( + Project, + on_delete=models.CASCADE, + related_name='credentials', + verbose_name=_('项目') + ) + system_url = models.URLField(_('项目地址'), max_length=255, blank=True, help_text='系统访问地址(如 https://test.example.com)') + username = models.CharField(_('用户名'), max_length=100, blank=True, help_text='登录账号') + password = models.CharField(_('密码'), max_length=255, blank=True, help_text='登录密码') + user_role = models.CharField(_('角色'), max_length=50, blank=True, help_text='如"管理员"、"普通用户"、"审核员"等') + created_at = models.DateTimeField(_('创建时间'), auto_now_add=True) + + class Meta: + verbose_name = _('项目凭据') + verbose_name_plural = _('项目凭据') + ordering = ['project', 'user_role'] + + def __str__(self): + return f"{self.project.name} - {self.user_role or self.username}" + + class ProjectMember(models.Model): """ 项目成员关系模型,定义用户与项目的关系 diff --git a/WHartTest_Django/projects/serializers.py b/WHartTest_Django/projects/serializers.py index 9cae8a5c..f99ec531 100644 --- a/WHartTest_Django/projects/serializers.py +++ b/WHartTest_Django/projects/serializers.py @@ -1,9 +1,24 @@ from rest_framework import serializers from django.contrib.auth.models import User -from .models import Project, ProjectMember +from .models import Project, ProjectMember, ProjectCredential from accounts.serializers import UserDetailSerializer +class ProjectCredentialSerializer(serializers.ModelSerializer): + """项目凭据序列化器""" + password = serializers.CharField(write_only=True, allow_blank=True, required=False, help_text='登录密码') + + class Meta: + model = ProjectCredential + fields = ['id', 'system_url', 'username', 'password', 'user_role', 'created_at'] + read_only_fields = ['created_at'] + extra_kwargs = { + 'system_url': {'help_text': '系统访问地址(如 https://test.example.com)'}, + 'username': {'help_text': '登录账号'}, + 'user_role': {'help_text': '如"管理员"、"普通用户"、"审核员"等'} + } + + class ProjectMemberSerializer(serializers.ModelSerializer): """项目成员序列化器""" user_detail = UserDetailSerializer(source='user', read_only=True) @@ -17,22 +32,42 @@ class Meta: class ProjectSerializer(serializers.ModelSerializer): """项目基本信息序列化器""" creator_detail = UserDetailSerializer(source='creator', read_only=True) + credentials = ProjectCredentialSerializer(many=True, required=False) class Meta: model = Project - fields = ['id', 'name', 'description', 'creator', 'creator_detail', 'created_at', 'updated_at'] + fields = ['id', 'name', 'description', 'creator', 'creator_detail', 'created_at', 'updated_at', 'credentials'] read_only_fields = ['created_at', 'updated_at', 'creator'] def validate_name(self, value): """验证项目名称唯一性""" - # 创建时检查 if self.instance is None and Project.objects.filter(name=value).exists(): raise serializers.ValidationError("项目名称已存在") - # 更新时检查 elif self.instance and self.instance.name != value and Project.objects.filter(name=value).exists(): raise serializers.ValidationError("项目名称已存在") return value + def create(self, validated_data): + credentials_data = validated_data.pop('credentials', []) + project = Project.objects.create(**validated_data) + for credential_data in credentials_data: + ProjectCredential.objects.create(project=project, **credential_data) + return project + + def update(self, instance, validated_data): + credentials_data = validated_data.pop('credentials', None) + + instance.name = validated_data.get('name', instance.name) + instance.description = validated_data.get('description', instance.description) + instance.save() + + if credentials_data is not None: + instance.credentials.all().delete() + for credential_data in credentials_data: + ProjectCredential.objects.create(project=instance, **credential_data) + + return instance + class ProjectDetailSerializer(ProjectSerializer): """项目详细信息序列化器,包含成员信息""" diff --git a/WHartTest_Vue/src/services/projectService.ts b/WHartTest_Vue/src/services/projectService.ts index da253304..d4eeb774 100644 --- a/WHartTest_Vue/src/services/projectService.ts +++ b/WHartTest_Vue/src/services/projectService.ts @@ -18,6 +18,16 @@ export interface ProjectMember { joined_at: string; } +// 项目凭据接口 +export interface ProjectCredential { + id?: number; + system_url: string; + username: string; + password?: string; + user_role: string; + created_at?: string; +} + // 项目类型定义 export interface Project { id: number; @@ -28,18 +38,21 @@ export interface Project { created_at: string; updated_at: string; members?: ProjectMember[]; + credentials?: ProjectCredential[]; } // 创建项目请求参数 export interface CreateProjectRequest { name: string; description: string; + credentials?: ProjectCredential[]; } // 更新项目请求参数 export interface UpdateProjectRequest { name?: string; description?: string; + credentials?: ProjectCredential[]; } // 分页参数 diff --git a/WHartTest_Vue/src/views/ProjectManagementView.vue b/WHartTest_Vue/src/views/ProjectManagementView.vue index ef6bb499..60a312cd 100644 --- a/WHartTest_Vue/src/views/ProjectManagementView.vue +++ b/WHartTest_Vue/src/views/ProjectManagementView.vue @@ -180,6 +180,7 @@ @ok="handleAddProject" @cancel="cancelAddProject" :mask-closable="false" + width="700px" > + + + 项目凭据 +
+ + + + + 删除 +
+ + + 添加凭据 +
@@ -207,6 +224,7 @@ @ok="handleEditProject" @cancel="cancelEditProject" :mask-closable="false" + width="700px" > + + + 项目凭据 +
+ + + + + 删除 +
+ + + 添加凭据 +
@@ -678,7 +712,8 @@ const addProjectModalVisible = ref(false); const addProjectFormRef = ref(); const addProjectForm = reactive({ name: '', - description: '' + description: '', + credentials: [] }); // 添加项目表单验证规则 @@ -692,11 +727,34 @@ const addProjectRules = { ] }; +// 添加凭据 +const addCredential = () => { + if (!addProjectForm.credentials) { + addProjectForm.credentials = []; + } + addProjectForm.credentials.push({ + system_url: '', + username: '', + password: '', + user_role: '' + }); +}; + +// 删除凭据 +const removeCredential = (index: number) => { + if (addProjectForm.credentials) { + addProjectForm.credentials.splice(index, 1); + } +}; + // 显示添加项目模态框 const showAddProjectModal = () => { // 重置表单 addProjectForm.name = ''; addProjectForm.description = ''; + addProjectForm.credentials = []; + // 默认添加一个凭据 + addCredential(); // 显示模态框 addProjectModalVisible.value = true; }; @@ -711,9 +769,7 @@ const handleAddProject = async () => { // 验证表单 try { await addProjectFormRef.value.validate(); - // 验证通过,继续处理 } catch (errors) { - // 表单验证失败 console.error('表单验证失败:', errors); return; } @@ -721,16 +777,15 @@ const handleAddProject = async () => { // 创建项目数据对象 const projectData: CreateProjectRequest = { name: addProjectForm.name, - description: addProjectForm.description + description: addProjectForm.description, + credentials: addProjectForm.credentials || [] }; try { - // 调用创建项目API const response = await createProject(projectData); if (response.success) { Message.success('项目创建成功'); - // 刷新项目列表 fetchProjectList(); // 关闭模态框 addProjectModalVisible.value = false; @@ -749,7 +804,8 @@ const editProjectFormRef = ref(); const editProjectForm = reactive({ id: 0, name: '', - description: '' + description: '', + credentials: [] }); // 编辑项目表单验证规则 @@ -763,20 +819,45 @@ const editProjectRules = { ] }; +// 编辑凭据 +const addEditCredential = () => { + if (!editProjectForm.credentials) { + editProjectForm.credentials = []; + } + editProjectForm.credentials.push({ + system_url: '', + username: '', + password: '', + user_role: '' + }); +}; + +const removeEditCredential = (index: number) => { + if (editProjectForm.credentials) { + editProjectForm.credentials.splice(index, 1); + } +}; + // 显示编辑项目模态框 const editProject = (project: Project, event?: Event) => { - // 阻止事件冒泡,避免触发行点击事件 if (event) { event.stopPropagation(); } + // 设置表单数据 - Object.assign(editProjectForm, { - id: project.id, - name: project.name, - description: project.description - }); + editProjectForm.id = project.id; + editProjectForm.name = project.name; + editProjectForm.description = project.description; + + // 复制凭据数据(密码不显示) + editProjectForm.credentials = (project.credentials || []).map(cred => ({ + id: cred.id, + system_url: cred.system_url, + username: cred.username, + password: '', + user_role: cred.user_role + })); - // 显示模态框 editProjectModalVisible.value = true; }; @@ -787,12 +868,9 @@ const cancelEditProject = () => { // 处理编辑项目 const handleEditProject = async () => { - // 验证表单 try { await editProjectFormRef.value.validate(); - // 验证通过,继续处理 } catch (errors) { - // 表单验证失败 console.error('表单验证失败:', errors); return; } @@ -800,18 +878,16 @@ const handleEditProject = async () => { // 更新项目数据对象 const projectData: UpdateProjectRequest = { name: editProjectForm.name, - description: editProjectForm.description + description: editProjectForm.description, + credentials: editProjectForm.credentials || [] }; try { - // 调用更新项目API const response = await updateProject(editProjectForm.id, projectData); if (response.success) { Message.success('项目更新成功'); - // 刷新项目列表 fetchProjectList(); - // 关闭模态框 editProjectModalVisible.value = false; } else { Message.error(response.error || '更新项目失败'); From 697d09da781388912ff8d73c1997b91c6463e1f8 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 18 Nov 2025 15:21:47 +0800 Subject: [PATCH 09/24] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E9=A1=B9?= =?UTF-8?q?=E7=9B=AE=E5=87=AD=E6=8D=AE=E4=BF=A1=E6=81=AF=E6=A0=BC=E5=BC=8F?= =?UTF-8?q?=E5=8C=96=E5=8A=9F=E8=83=BD=EF=BC=8C=E5=B9=B6=E5=9C=A8=E7=B3=BB?= =?UTF-8?q?=E7=BB=9F=E6=8F=90=E7=A4=BA=E8=AF=8D=E4=B8=AD=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=B3=A8=E5=85=A5=E5=87=AD=E6=8D=AE=E4=BF=A1=E6=81=AF=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=94=A8=E4=BE=8B=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../langgraph_integration/views.py | 73 +++++++-- WHartTest_Django/prompts/views.py | 144 +++++++++++++++++- .../testcase/GenerateCasesModal.vue | 9 +- .../langgraph/views/LangGraphChatView.vue | 24 ++- 4 files changed, 232 insertions(+), 18 deletions(-) diff --git a/WHartTest_Django/langgraph_integration/views.py b/WHartTest_Django/langgraph_integration/views.py index 0f10cfc7..e3ce6239 100644 --- a/WHartTest_Django/langgraph_integration/views.py +++ b/WHartTest_Django/langgraph_integration/views.py @@ -223,18 +223,58 @@ def get_effective_system_prompt(user, prompt_id=None): return None, 'none' -async def get_effective_system_prompt_async(user, prompt_id=None): +async def _format_project_credentials(project): + """ + 格式化项目凭据信息为文本 + + Args: + project: 项目对象 + + Returns: + str: 格式化后的凭据信息文本 + """ + try: + from projects.models import ProjectCredential + + # 获取项目的所有凭据 + credentials = await sync_to_async(list)( + ProjectCredential.objects.filter(project=project).all() + ) + + if not credentials: + return "当前项目未配置登录信息。\n" + + # 格式化凭据信息 + credentials_text = "**当前项目已配置以下登录信息**:\n" + for cred in credentials: + role = cred.user_role or "未指定角色" + url = cred.system_url or "未指定URL" + username = cred.username or "未指定用户名" + password = cred.password or "未指定密码" + credentials_text += f"- **{role}**:系统地址: {url} / 用户名: {username} / 密码: {password}\n" + + credentials_text += "\n" + return credentials_text + + except Exception as e: + logger.error(f"Format project credentials error: {e}") + return "" + + +async def get_effective_system_prompt_async(user, prompt_id=None, project=None): """ 获取有效的系统提示词(异步版本) 优先级:用户指定的提示词 > 用户默认提示词 > 全局LLM配置的system_prompt + 如果提示词中包含{credentials_info}占位符,且提供了project参数,将自动注入项目凭据信息 Args: user: 当前用户 prompt_id: 指定的提示词ID(可选) + project: 项目对象(可选),用于注入凭据信息 Returns: tuple: (prompt_content, prompt_source) - prompt_content: 提示词内容 + prompt_content: 提示词内容(已注入凭据信息) prompt_source: 提示词来源 ('user_specified', 'user_default', 'global', 'none') """ try: @@ -246,7 +286,12 @@ async def get_effective_system_prompt_async(user, prompt_id=None): user=user, is_active=True ) - return user_prompt.content, 'user_specified' + prompt_content = user_prompt.content + # 注入凭据信息 + if project and '{credentials_info}' in prompt_content: + credentials_text = await _format_project_credentials(project) + prompt_content = prompt_content.replace('{credentials_info}', credentials_text) + return prompt_content, 'user_specified' except UserPrompt.DoesNotExist: logger.warning(f"Specified prompt {prompt_id} not found for user {user.id}") @@ -258,7 +303,12 @@ async def get_effective_system_prompt_async(user, prompt_id=None): is_active=True ) if default_prompt: - return default_prompt.content, 'user_default' + prompt_content = default_prompt.content + # 注入凭据信息 + if project and '{credentials_info}' in prompt_content: + credentials_text = await _format_project_credentials(project) + prompt_content = prompt_content.replace('{credentials_info}', credentials_text) + return prompt_content, 'user_default' except UserPrompt.DoesNotExist: pass @@ -266,7 +316,12 @@ async def get_effective_system_prompt_async(user, prompt_id=None): try: active_config = await sync_to_async(LLMConfig.objects.get)(is_active=True) if active_config.system_prompt and active_config.system_prompt.strip(): - return active_config.system_prompt.strip(), 'global' + prompt_content = active_config.system_prompt.strip() + # 注入凭据信息 + if project and '{credentials_info}' in prompt_content: + credentials_text = await _format_project_credentials(project) + prompt_content = prompt_content.replace('{credentials_info}', credentials_text) + return prompt_content, 'global' except LLMConfig.DoesNotExist: logger.warning("No active LLM configuration found") @@ -581,8 +636,8 @@ def knowledge_enhanced_chatbot_node(state: AgentState): # 构建消息列表,检查是否需要添加系统提示词 messages_list = [] - # 获取有效的系统提示词(用户提示词优先) - effective_prompt, prompt_source = await get_effective_system_prompt_async(request.user, prompt_id) + # 获取有效的系统提示词(用户提示词优先,并注入项目凭据信息) + effective_prompt, prompt_source = await get_effective_system_prompt_async(request.user, prompt_id, project) # 检查当前会话是否已经有系统提示词 should_add_system_prompt = False @@ -1537,8 +1592,8 @@ def knowledge_enhanced_chatbot_node(state: AgentState): # 构建消息列表,检查是否需要添加系统提示词 messages_list = [] - # 获取有效的系统提示词(用户提示词优先) - effective_prompt, prompt_source = await get_effective_system_prompt_async(request.user, prompt_id) + # 获取有效的系统提示词(用户提示词优先,并注入项目凭据信息) + effective_prompt, prompt_source = await get_effective_system_prompt_async(request.user, prompt_id, project) logger.info(f"ChatStreamAPIView: Using {prompt_source} prompt: {repr(effective_prompt[:100] if effective_prompt else None)}") # 检查当前会话是否已经有系统提示词 diff --git a/WHartTest_Django/prompts/views.py b/WHartTest_Django/prompts/views.py index 5e14f186..d4cb5b34 100644 --- a/WHartTest_Django/prompts/views.py +++ b/WHartTest_Django/prompts/views.py @@ -618,6 +618,138 @@ def initialize(self, request): ] }} ```""" + }, + 'smart_testcase': { + 'name': '智能用例生成', + 'prompt_type': 'general', # 指定为通用对话类型 + 'description': '基于项目凭据信息,智能生成包含登录前置和权限验证的测试用例', + 'content': """你是一个测试用例生成专家。你的任务是根据需求文档生成高质量的测试用例。 + +## 项目凭据信息 +{credentials_info} + +## 生成规则 + +### 1. 系统URL与登录前置(关键) +- **所有测试用例都必须在测试步骤第一步明确写出完整的系统URL**(如 http://test.example.com 或 http://192.168.1.100:8080),不要只写"访问系统" +- **如果项目配置了登录信息且功能需要登录**,测试用例必须包含登录前置步骤 +- **必须在用例中明确写出具体的系统URL、用户名和密码**,不要用占位符或省略 +- 登录步骤应包括: + 1. 打开浏览器,访问具体的系统URL(如 http://test.example.com) + 2. 输入具体的用户名和密码(如 admin / adminpass123) + 3. 点击登录按钮 + 4. 验证登录成功,确认进入系统首页 +- **格式要求**: + * 需要登录的用例,前置条件写"使用XX账号(用户名/密码)登录系统(URL)" + * 不需要登录的用例(如注册),前置条件写"系统URL: http://xxx"或类似说明,确保测试人员知道访问哪个系统 + +### 2. 角色权限测试 +- **分析需求中的权限要求**,识别哪些操作有角色限制 +- **为每个配置的角色生成对应场景的用例**: + * 有权限角色:生成正常操作的功能用例 + * 无权限角色:生成权限拒绝验证用例 +- 权限用例应验证:无权限用户看不到功能入口,或操作时提示权限不足 + +### 3. 用例结构规范 +每个测试用例应包含: +- **用例名称**:简洁描述测试目标(如"管理员删除用户-正常流程"、"普通用户删除用户-权限拒绝") +- **前置条件**: + * 需要登录的用例:**必须包含完整的登录凭据信息**(系统URL、用户名、密码、角色)。格式:"使用XX账号(用户名/密码)登录系统(URL),[其他前置条件]" + * 不需要登录的用例:**必须说明系统URL**。格式:"系统URL: http://xxx,[其他前置条件]" + * 无论哪种情况,都要确保测试人员知道访问的系统地址 +- **测试步骤**:详细的操作步骤,**第一步必须包含完整的系统URL**,登录步骤必须包含具体的用户名和密码,每步有明确的预期结果 +- **优先级**:根据功能重要性标记(高/中/低) +- **测试类型**:功能测试/边界测试/异常测试/权限测试 + +### 4. 覆盖率要求 +- 正常场景:主流程、常规操作 +- 边界情况:输入长度限制、特殊字符、极限值 +- 异常情况:网络异常、数据异常、并发冲突 +- 权限场景:不同角色的访问控制验证 + +## 示例 + +**需求**:仅管理员可删除用户 + +**项目凭据**: +- 管理员:http://test.example.com / admin / 管理员 +- 普通用户:http://test.example.com / user / 普通用户 + +**生成用例**: + +1. **用例名称**:管理员删除用户-正常流程 + **前置条件**:使用管理员账号(admin/adminpass123)登录系统(http://test.example.com),系统中存在可删除的测试用户 + **测试步骤**: + - 步骤1:打开浏览器,访问 http://test.example.com + - 步骤2:在登录页面输入用户名"admin",密码"adminpass123",点击登录按钮 + - 步骤3:验证登录成功,进入系统首页 + - 步骤4:点击"用户管理"菜单,进入用户管理页面 + - 步骤5:在用户列表中选择测试用户,点击"删除"按钮 + - 步骤6:在弹出的确认对话框中点击"确定" + **预期结果**:用户删除成功,列表中不再显示该用户,系统提示"删除成功" + **优先级**:高 + +2. **用例名称**:普通用户删除用户-权限拒绝 + **前置条件**:使用普通用户账号(user/userpass123)登录系统(http://test.example.com) + **测试步骤**: + - 步骤1:打开浏览器,访问 http://test.example.com + - 步骤2:在登录页面输入用户名"user",密码"userpass123",点击登录按钮 + - 步骤3:验证登录成功,进入系统首页 + - 步骤4:尝试通过菜单或直接URL访问用户管理页面 + **预期结果**:无法看到"用户管理"菜单,或访问时显示"权限不足"提示并跳转回首页 + **优先级**:高 + +3. **用例名称**:用户注册-正常流程(不需要登录的场景示例) + **前置条件**:系统URL: http://test.example.com,系统中不存在用户名"newuser"和手机号"13800138000"的用户 + **测试步骤**: + - 步骤1:打开浏览器,访问 http://test.example.com/register(注册页面) + - 步骤2:在用户名字段输入"newuser" + - 步骤3:在密码字段输入"Pass123456"(至少6位) + - 步骤4:在确认密码字段输入"Pass123456" + - 步骤5:在姓名字段输入"张三" + - 步骤6:在单位字段输入"测试公司" + - 步骤7:在手机号码字段输入"13800138000" + - 步骤8:输入验证码(假设为"123456") + - 步骤9:点击"注册"按钮 + **预期结果**:注册成功,系统提示"注册成功",自动跳转到登录页面或首页 + **优先级**:高 + +## 知识库使用(重要) +**务必使用knowledge_search工具获取业务关联信息,避免只生成简单的增删改查用例!** + +### 使用流程: +1. **分析需求关键词**:从需求文档中提取核心业务术语、功能名称、业务流程 +2. **搜索业务用例**:使用knowledge_search搜索以下内容: + - 业务关联的历史测试用例(如:"用户注册相关用例"、"支付流程测试场景") + - 业务规则和约束(如:"订单状态流转规则"、"权限验证规范") + - 特殊业务场景(如:"异常处理流程"、"数据一致性要求") +3. **参考知识库内容**: + - 学习历史用例的测试思路和场景覆盖 + - 识别业务特有的测试点(而非通用的CRUD操作) + - 确保新生成的用例符合项目实际业务逻辑 +4. **补充业务用例**:基于知识库信息,生成业务价值高的测试用例,如: + - 复杂业务流程测试(多步骤交互、状态流转) + - 业务规则验证(计算逻辑、数据校验、流程控制) + - 异常场景覆盖(业务异常、数据异常、边界情况) + +### 示例查询: +- 针对"用户注册"需求,搜索:"用户注册 测试用例"、"注册流程 业务规则"、"手机验证码 测试场景" +- 针对"订单管理"需求,搜索:"订单状态 测试用例"、"订单流转 业务规则"、"支付异常 测试场景" + +### 知识库提供的价值: +- **历史用例参考**:了解同类功能的测试覆盖思路 +- **业务规则文档**:确保用例符合实际业务逻辑 +- **常见缺陷总结**:针对性设计防御性测试用例 +- **技术规范说明**:接口格式、数据结构、性能要求等 + +## 注意事项 +- 必须仔细阅读需求文档,理解功能细节 +- **登录凭据信息由系统自动注入到"项目凭据信息"章节,必须在用例的前置条件和测试步骤中明确写出具体的URL、用户名、密码** +- **不要使用占位符**(如"xxx"、"{密码}")**代替具体的凭据信息**,测试人员需要看到完整可执行的用例 +- **优先使用knowledge_search工具获取项目相关知识**,提升用例质量 +- 权限测试是重点,确保覆盖所有角色场景 +- 用例描述要清晰、可执行,测试人员能直接按步骤操作 +- 优先生成高优先级的核心功能用例""" }, 'brain_orchestrator': { 'name': 'Brain编排器', @@ -630,16 +762,20 @@ def initialize(self, request): skipped_prompts = [] # 遍历所有提示词类型,检查用户是否已有,没有则创建 - for prompt_type, prompt_data in default_prompts.items(): + for key, prompt_data in default_prompts.items(): + # 支持显式指定prompt_type,否则使用key作为prompt_type + actual_prompt_type = prompt_data.get('prompt_type', key) + + # 检查是否已存在同名提示词(根据unique_together约束) existing_prompt = UserPrompt.objects.filter( user=request.user, - prompt_type=prompt_type + name=prompt_data['name'] ).first() if existing_prompt: # 已存在,跳过 skipped_prompts.append({ - 'type': prompt_type, + 'type': actual_prompt_type, 'name': prompt_data['name'], 'reason': '已存在' }) @@ -650,7 +786,7 @@ def initialize(self, request): name=prompt_data['name'], description=prompt_data['description'], content=prompt_data['content'], - prompt_type=prompt_type, + prompt_type=actual_prompt_type, is_default=False, # 程序调用类型不能设为默认 is_active=True ) diff --git a/WHartTest_Vue/src/components/testcase/GenerateCasesModal.vue b/WHartTest_Vue/src/components/testcase/GenerateCasesModal.vue index c7dbe732..afa5c4de 100644 --- a/WHartTest_Vue/src/components/testcase/GenerateCasesModal.vue +++ b/WHartTest_Vue/src/components/testcase/GenerateCasesModal.vue @@ -69,10 +69,11 @@ { return; } + // 如果启用了知识库,必须选择知识库ID + if (formState.useKnowledgeBase && !formState.knowledgeBaseId) { + Message.error('启用知识库后必须选择一个知识库'); + return; + } + const selectedModule = requirementModules.value.find(m => m.id === formState.requirementModuleId); emit('submit', { ...formState, selectedModule }); diff --git a/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue b/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue index 59787d82..42237bec 100644 --- a/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue +++ b/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue @@ -706,10 +706,26 @@ const formatHistoryTime = (timestamp: string) => { // 切换工具消息或思考过程的展开/收起状态 const toggleExpand = (message: ChatMessage) => { - if (message.isThinkingProcess) { - message.isThinkingExpanded = !message.isThinkingExpanded; - } else { - message.isExpanded = !message.isExpanded; + // 找到messages数组中对应的消息索引 + const index = messages.value.findIndex(m => + m.content === message.content && + m.time === message.time && + m.messageType === message.messageType + ); + + if (index !== -1) { + // 使用响应式方式更新消息 + if (message.isThinkingProcess) { + messages.value[index] = { + ...messages.value[index], + isThinkingExpanded: !messages.value[index].isThinkingExpanded + }; + } else { + messages.value[index] = { + ...messages.value[index], + isExpanded: !messages.value[index].isExpanded + }; + } } }; From 39d17941611e0f9cf7dae3014becd5c832c0a0d6 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 18 Nov 2025 15:43:10 +0800 Subject: [PATCH 10/24] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E5=8A=9F=E8=83=BD=E6=B5=8B=E8=AF=95=E7=94=A8=E4=BE=8B?= =?UTF-8?q?=E7=9A=84=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=94=AF=E6=8C=81=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=E7=94=A8=E4=BE=8B=E4=BF=A1=E6=81=AF=E5=92=8C=E6=AD=A5?= =?UTF-8?q?=E9=AA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WHartTest_MCP/WHartTest_tools.py | 46 +++++++++++++++++++ .../langgraph/services/chatService.ts | 2 + .../langgraph/views/LangGraphChatView.vue | 22 ++++++++- 3 files changed, 69 insertions(+), 1 deletion(-) diff --git a/WHartTest_MCP/WHartTest_tools.py b/WHartTest_MCP/WHartTest_tools.py index 63a7a999..d4121018 100644 --- a/WHartTest_MCP/WHartTest_tools.py +++ b/WHartTest_MCP/WHartTest_tools.py @@ -379,6 +379,52 @@ def add_functional_case( print("HTTPError =", e) return e +@mcp.tool(description='编辑WHartTest平台功能测试用例') +def edit_functional_case( + project_id: int = Field(description='项目id'), + case_id: int = Field(description='用例id'), + name: str = Field(description='用例名称'), + precondition: str = Field(description='前置条件'), + level: str = Field(description='用例等级'), + module_id: int = Field(description='模块id'), + steps: list = Field(description='用例步骤,示例:,[{"step_number": 1,"description": "步骤描述1","expected_result": "预期结果1"},{"step_number": 2,"description": "步骤描述2","expected_result": "预期结果2"}]'), + notes: str = Field(description='备注')): + """ + 编辑WHartTest平台功能测试用例 + """ + try: + if not project_id: + return "项目id不能为空" + if not case_id: + return "用例id不能为空" + + url = base_url + f"/api/projects/{project_id}/testcases/{case_id}/" + data = { + "name": name, + "precondition": precondition, + "level": level, + "module_id": module_id, + "steps": steps, + "notes": notes + } + + # 发起请求 + response = requests.patch(url, headers=headers, json=data) + print("status =", response.status_code) + print("content-type =", response.headers.get("Content-Type")) + print("body-preview =", response.text[:200]) + # 如有非 2xx 状态码直接抛异常 + response.raise_for_status() + # 200,代表成功编辑 + if response.json().get("code") == 200: + return f"用例:{name}编辑成功" + else: + return "编辑失败,请重试" + except requests.exceptions.HTTPError as e: + print("HTTPError =", e) + return e + + if __name__ == "__main__": # 使用 streamable-http 传输方式 # host="0.0.0.0" 允许从其他容器访问 diff --git a/WHartTest_Vue/src/features/langgraph/services/chatService.ts b/WHartTest_Vue/src/features/langgraph/services/chatService.ts index 135ee83d..63aa353b 100644 --- a/WHartTest_Vue/src/features/langgraph/services/chatService.ts +++ b/WHartTest_Vue/src/features/langgraph/services/chatService.ts @@ -15,6 +15,8 @@ interface StreamMessage { type: 'human' | 'ai' | 'tool' | 'system'; time: string; isExpanded?: boolean; + isThinkingProcess?: boolean; + isThinkingExpanded?: boolean; } interface StreamState { diff --git a/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue b/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue index 42237bec..735fe067 100644 --- a/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue +++ b/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue @@ -706,7 +706,7 @@ const formatHistoryTime = (timestamp: string) => { // 切换工具消息或思考过程的展开/收起状态 const toggleExpand = (message: ChatMessage) => { - // 找到messages数组中对应的消息索引 + // 首先尝试在历史消息中查找并更新 const index = messages.value.findIndex(m => m.content === message.content && m.time === message.time && @@ -726,6 +726,26 @@ const toggleExpand = (message: ChatMessage) => { isExpanded: !messages.value[index].isExpanded }; } + return; + } + + // 如果在历史消息中找不到,检查当前活动流中的消息 + const stream = sessionId.value ? activeStreams.value[sessionId.value] : null; + if (stream?.messages && stream.messages.length > 0) { + const streamMsgIndex = stream.messages.findIndex( + m => m.content === message.content && + m.time === message.time && + m.type === message.messageType + ); + + if (streamMsgIndex !== -1) { + // 直接修改 activeStreams 中的消息对象 + if (message.isThinkingProcess) { + stream.messages[streamMsgIndex].isThinkingExpanded = !stream.messages[streamMsgIndex].isThinkingExpanded; + } else { + stream.messages[streamMsgIndex].isExpanded = !stream.messages[streamMsgIndex].isExpanded; + } + } } }; From 6262b06158fd688d87b14b09cdaf5addc5822cd2 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 18 Nov 2025 16:20:56 +0800 Subject: [PATCH 11/24] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E5=90=8D=E7=A7=B0=E5=92=8C=E6=80=9D=E8=80=83=E8=BF=87?= =?UTF-8?q?=E7=A8=8B=E6=A0=87=E8=AE=B0=EF=BC=8C=E4=BC=98=E5=8C=96=E6=B6=88?= =?UTF-8?q?=E6=81=AF=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../langgraph/components/ChatMessages.vue | 1 + .../langgraph/components/MessageItem.vue | 69 +------------------ .../src/features/langgraph/types/chat.ts | 1 + .../langgraph/views/LangGraphChatView.vue | 52 +------------- .../src/views/ProjectManagementView.vue | 8 +-- 5 files changed, 9 insertions(+), 122 deletions(-) diff --git a/WHartTest_Vue/src/features/langgraph/components/ChatMessages.vue b/WHartTest_Vue/src/features/langgraph/components/ChatMessages.vue index dfe33c67..906ae8ab 100644 --- a/WHartTest_Vue/src/features/langgraph/components/ChatMessages.vue +++ b/WHartTest_Vue/src/features/langgraph/components/ChatMessages.vue @@ -27,6 +27,7 @@ interface ChatMessage { time: string; isLoading?: boolean; messageType?: 'human' | 'ai' | 'tool' | 'system'; + toolName?: string; isExpanded?: boolean; isStreaming?: boolean; imageBase64?: string; diff --git a/WHartTest_Vue/src/features/langgraph/components/MessageItem.vue b/WHartTest_Vue/src/features/langgraph/components/MessageItem.vue index 41cf5638..c99f07f3 100644 --- a/WHartTest_Vue/src/features/langgraph/components/MessageItem.vue +++ b/WHartTest_Vue/src/features/langgraph/components/MessageItem.vue @@ -93,6 +93,7 @@ interface ChatMessage { time: string; isLoading?: boolean; messageType?: 'human' | 'ai' | 'tool' | 'system'; // 🆕 添加 system 类型 + toolName?: string; // 工具名称 isExpanded?: boolean; isStreaming?: boolean; // 新增:标识是否正在流式输出 imageBase64?: string; // 🆕 消息携带的图片(Base64) @@ -294,75 +295,7 @@ const handleStreamingMarkdown = (content: string) => { }; // 检查代码内容是否看起来完整(根据txt文件中的实际代码格式优化) -const isCodeContentComplete = (codeContent: string, language: string): boolean => { - const trimmedContent = codeContent.trim(); - // 如果内容为空,肯定不完整 - if (!trimmedContent) { - return false; - } - - // 对于Python代码(txt文件中的主要格式) - if (language === 'python' || language === 'py') { - // 检查是否有完整的函数定义 - if (trimmedContent.includes('def ')) { - // 检查函数是否有完整的结构:def name(): 和缩进的内容 - const lines = trimmedContent.split('\n'); - let hasDefLine = false; - let hasIndentedContent = false; - - for (const line of lines) { - if (line.trim().startsWith('def ') && line.includes(':')) { - hasDefLine = true; - } - if (hasDefLine && line.startsWith(' ') && line.trim()) { - hasIndentedContent = true; - } - } - - // 如果有函数定义和缩进内容,认为相对完整 - return hasDefLine && hasIndentedContent; - } - - // 对于简单的Python代码,检查是否有基本的语法结构 - const lines = trimmedContent.split('\n'); - if (lines.length > 1) { - // 检查最后一行是否看起来是完整的 - const lastLine = lines[lines.length - 1].trim(); - // 如果最后一行不是明显的不完整状态,认为可能完整 - return !lastLine.endsWith(',') && !lastLine.endsWith('\\') && lastLine.length > 0; - } - } - - // 对于JSON格式,检查是否有完整的结构 - if (language === 'json') { - try { - // 检查是否以{开头}结尾,或者以[开头]结尾 - if ((trimmedContent.startsWith('{') && trimmedContent.endsWith('}')) || - (trimmedContent.startsWith('[') && trimmedContent.endsWith(']'))) { - JSON.parse(trimmedContent); - return true; - } - } catch (e) { - // JSON解析失败,可能不完整 - return false; - } - } - - // 对于其他语言,基于txt文件的实际情况进行判断 - // 如果内容有多行且不以明显的不完整标记结尾,认为可能完整 - const lines = trimmedContent.split('\n'); - if (lines.length > 2) { - const lastLine = lines[lines.length - 1].trim(); - const incompleteEndings = [',', '+', '-', '*', '/', '=', '&&', '||', '\\']; - const endsWithIncomplete = incompleteEndings.some(ending => lastLine.endsWith(ending)); - - return !endsWithIncomplete && lastLine.length > 0; - } - - // 默认情况下,对于流式输出,我们倾向于认为内容不完整,以确保正确的代码块渲染 - return false; -}; // 格式化工具消息 const formatToolMessage = (content: string) => { diff --git a/WHartTest_Vue/src/features/langgraph/types/chat.ts b/WHartTest_Vue/src/features/langgraph/types/chat.ts index a1635121..870bf929 100644 --- a/WHartTest_Vue/src/features/langgraph/types/chat.ts +++ b/WHartTest_Vue/src/features/langgraph/types/chat.ts @@ -46,6 +46,7 @@ export interface ChatHistoryMessage { content: string; timestamp: string; // 消息时间戳 image?: string; // 🆕 图片Data URL(包含完整的data:image/xxx;base64,前缀) + is_thinking_process?: boolean; // 思考过程标记 } /** diff --git a/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue b/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue index 735fe067..f4e945e1 100644 --- a/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue +++ b/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue @@ -348,37 +348,7 @@ const loadKnowledgeBaseSettings = () => { }; // 从本地存储加载会话列表 -const loadSessionsFromStorage = () => { - const sessionsJson = localStorage.getItem('langgraph_sessions'); - if (sessionsJson) { - try { - const parsedSessions = JSON.parse(sessionsJson); - // 确保日期对象正确恢复 - chatSessions.value = parsedSessions.map((session: any) => { - let lastTime = new Date(); - try { - // 尝试解析存储的时间 - lastTime = new Date(session.lastTime); - // 检查日期是否有效 - if (isNaN(lastTime.getTime())) { - lastTime = new Date(); - } - } catch (error) { - console.error('解析会话时间失败:', error); - lastTime = new Date(); - } - return { - ...session, - lastTime - }; - }); - } catch (e) { - console.error('解析会话列表失败:', e); - chatSessions.value = []; - } - } -}; // 保存会话列表到本地存储 const saveSessionsToStorage = () => { @@ -599,16 +569,7 @@ const getCurrentTime = () => { }; // 获取Agent的emoji标识 -const getAgentEmoji = (agentType: string): string => { - const emojiMap: Record = { - 'chat': '💬', - 'requirement': '📋', - 'testcase': '🧪', - 'knowledge': '📚', - 'brain': '🧠' - }; - return emojiMap[agentType.toLowerCase()] || '🤖'; -}; + // 🎨 合并连续的思考过程消息(保持对象引用,避免丢失状态) const mergeThinkingProcessMessages = (messages: ChatMessage[]): ChatMessage[] => { @@ -654,16 +615,7 @@ const mergeThinkingProcessMessages = (messages: ChatMessage[]): ChatMessage[] => }; // 获取Agent的中文名称 -const getAgentName = (agentType: string): string => { - const nameMap: Record = { - 'chat': 'Chat Agent', - 'requirement': 'Requirement Agent', - 'testcase': 'TestCase Agent', - 'knowledge': 'Knowledge Agent', - 'brain': 'Brain' - }; - return nameMap[agentType.toLowerCase()] || 'Agent'; -}; + // 格式化历史消息时间 const formatHistoryTime = (timestamp: string) => { diff --git a/WHartTest_Vue/src/views/ProjectManagementView.vue b/WHartTest_Vue/src/views/ProjectManagementView.vue index 60a312cd..ef4644ed 100644 --- a/WHartTest_Vue/src/views/ProjectManagementView.vue +++ b/WHartTest_Vue/src/views/ProjectManagementView.vue @@ -281,7 +281,7 @@ import { type CreateProjectRequest, type UpdateProjectRequest } from '@/services/projectService'; -import { getUserList, type User } from '@/services/userService'; +import { getUserList } from '@/services/userService'; import { useAuthStore } from '@/store/authStore'; // 加载状态 @@ -348,14 +348,14 @@ const columns = [ { title: '创建者', dataIndex: 'creator_detail', - render: ({ record }) => { + render: ({ record }: { record: Project }) => { return record.creator_detail?.username || '-'; } }, { title: '创建时间', dataIndex: 'created_at', - render: ({ record }) => { + render: ({ record }: { record: Project }) => { const date = new Date(record.created_at); return date.toLocaleString(); } @@ -497,7 +497,7 @@ const memberColumns = [ ]; // 监听项目成员数据变化 -watch(projectMembers, (newValue) => { +watch(projectMembers, () => { // 成员数据已更新 }, { deep: true }); From 9db9f45e435d392708663b81e734e0bec1119423 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 18 Nov 2025 16:22:50 +0800 Subject: [PATCH 12/24] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E8=81=8A?= =?UTF-8?q?=E5=A4=A9=E6=B6=88=E6=81=AF=E5=BC=95=E7=94=A8=E5=92=8C=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2=E6=BF=80=E6=B4=BB=E5=90=8E=E8=87=AA=E5=8A=A8=E6=BB=9A?= =?UTF-8?q?=E5=8A=A8=E5=88=B0=E6=9C=80=E6=96=B0=E6=B6=88=E6=81=AF=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/features/langgraph/views/LangGraphChatView.vue | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue b/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue index f4e945e1..6fdb7310 100644 --- a/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue +++ b/WHartTest_Vue/src/features/langgraph/views/LangGraphChatView.vue @@ -36,6 +36,7 @@ /> + + diff --git a/WHartTest_Vue/src/router/index.ts b/WHartTest_Vue/src/router/index.ts index 8a69b908..76864c47 100644 --- a/WHartTest_Vue/src/router/index.ts +++ b/WHartTest_Vue/src/router/index.ts @@ -15,10 +15,10 @@ import LlmConfigManagementView from '@/features/langgraph/views/LlmConfigManagem import LangGraphChatView from '@/features/langgraph/views/LangGraphChatView.vue'; // 导入 LLM 聊天视图 import KnowledgeManagementView from '@/features/knowledge/views/KnowledgeManagementView.vue'; // 导入知识库管理视图 import ApiKeyManagementView from '@/views/ApiKeyManagementView.vue'; // 导入 API Key 管理视图 -import RemoteMcpConfigManagementView from '@/views/RemoteMcpConfigManagementView.vue'; // 导入远程MCP配置管理视图 +import RemoteMcpConfigManagementView from '@/views/RemoteMcpConfigManagementView.vue'; // 导入远程 MCP配置管理视图 import RequirementManagementView from '@/features/requirements/views/RequirementManagementView.vue'; // 导入需求管理视图 import DocumentDetailView from '@/features/requirements/views/DocumentDetailView.vue'; // 导入文档详情视图 -import ReportDetailView from '@/features/requirements/views/ReportDetailView.vue'; // 导入报告详情视图 +import SpecializedReportView from '@/features/requirements/views/SpecializedReportView.vue'; // 导入专项分析报告视图 const routes: Array = [ { @@ -113,9 +113,9 @@ const routes: Array = [ component: DocumentDetailView, }, { - path: 'requirements/:id/report', // 评审报告详情 + path: 'requirements/:id/report', // 评审报告(支持历史版本切换) name: 'ReportDetail', - component: ReportDetailView, + component: SpecializedReportView, }, // 其他受保护的子路由可以加在这里 ] diff --git a/daemon.json.example b/daemon.json.example deleted file mode 100644 index d64fa9ee..00000000 --- a/daemon.json.example +++ /dev/null @@ -1,14 +0,0 @@ -{ - "registry-mirrors": [ - "https://docker.m.daocloud.io", - "https://dockerproxy.com", - "https://docker.mirrors.ustc.edu.cn", - "https://docker.nju.edu.cn" - ], - "builder": { - "gc": { - "enabled": true, - "defaultKeepStorage": "20GB" - } - } -} \ No newline at end of file From 34f47f312790fec07ce045e7eb2abf21a642f0db Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 21 Nov 2025 19:03:43 +0800 Subject: [PATCH 22/24] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=B1=BB?= =?UTF-8?q?=E5=9E=8B=E5=A3=B0=E6=98=8E=E4=BB=A5=E6=8F=90=E9=AB=98=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=8F=AF=E8=AF=BB=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/features/requirements/views/SpecializedReportView.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/WHartTest_Vue/src/features/requirements/views/SpecializedReportView.vue b/WHartTest_Vue/src/features/requirements/views/SpecializedReportView.vue index bbb67654..cfdd525c 100644 --- a/WHartTest_Vue/src/features/requirements/views/SpecializedReportView.vue +++ b/WHartTest_Vue/src/features/requirements/views/SpecializedReportView.vue @@ -253,7 +253,7 @@ const currentAnalysisIssues = computed(() => { const filteredIssues = computed(() => { if (!priorityFilter.value) return currentAnalysisIssues.value; return currentAnalysisIssues.value.filter( - issue => (issue.severity || issue.priority) === priorityFilter.value + (issue: any) => (issue.severity || issue.priority) === priorityFilter.value ); }); From 58c4baf59c08bab7467f145aa51a35349b021826 Mon Sep 17 00:00:00 2001 From: Your Name Date: Tue, 25 Nov 2025 14:03:12 +0800 Subject: [PATCH 23/24] =?UTF-8?q?feat:=20=E6=9B=B4=E6=96=B0Dockerfile?= =?UTF-8?q?=E4=BB=A5=E4=BD=BF=E7=94=A8DaoCloud=E9=95=9C=E5=83=8F=EF=BC=8C?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=9E=84=E5=BB=BA=E8=BF=87=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- WHartTest_Django/Dockerfile | 4 +- WHartTest_MCP/Dockerfile | 2 +- WHartTest_Vue/Dockerfile | 4 +- docker-compose copy.yml | 182 ++++++++++++++++++++++++++++++++++++ 4 files changed, 187 insertions(+), 5 deletions(-) create mode 100644 docker-compose copy.yml diff --git a/WHartTest_Django/Dockerfile b/WHartTest_Django/Dockerfile index c9cf080d..1fe59cb2 100644 --- a/WHartTest_Django/Dockerfile +++ b/WHartTest_Django/Dockerfile @@ -6,7 +6,7 @@ # ============================================ # 第一阶段:构建阶段(包含编译工具) # ============================================ -FROM python:3.11-slim AS builder +FROM docker.m.daocloud.io/library/python:3.11-slim AS builder WORKDIR /build @@ -34,7 +34,7 @@ RUN uv venv /opt/venv && \ # ============================================ # 第二阶段:运行阶段(仅包含运行时依赖) # ============================================ -FROM python:3.11-slim +FROM docker.m.daocloud.io/library/python:3.11-slim WORKDIR /app diff --git a/WHartTest_MCP/Dockerfile b/WHartTest_MCP/Dockerfile index 72efc12a..89b752f1 100644 --- a/WHartTest_MCP/Dockerfile +++ b/WHartTest_MCP/Dockerfile @@ -1,5 +1,5 @@ # 使用 Python 3.11 官方镜像作为基础镜像 -FROM python:3.11-slim +FROM docker.m.daocloud.io/library/python:3.11-slim # 设置工作目录 WORKDIR /app diff --git a/WHartTest_Vue/Dockerfile b/WHartTest_Vue/Dockerfile index cd21bb0d..e575f2ef 100644 --- a/WHartTest_Vue/Dockerfile +++ b/WHartTest_Vue/Dockerfile @@ -1,5 +1,5 @@ # 第一阶段:构建阶段 -FROM node:20-alpine AS builder +FROM docker.m.daocloud.io/library/node:20-alpine AS builder # 设置工作目录 WORKDIR /app @@ -31,7 +31,7 @@ COPY .env.production .env.production RUN npx vite build --mode production # 第二阶段:运行阶段 -FROM nginx:alpine +FROM docker.m.daocloud.io/library/nginx:alpine # 复制自定义 nginx 配置 COPY nginx.conf /etc/nginx/conf.d/default.conf diff --git a/docker-compose copy.yml b/docker-compose copy.yml new file mode 100644 index 00000000..b5dbee7c --- /dev/null +++ b/docker-compose copy.yml @@ -0,0 +1,182 @@ +# 本地构建配置 - 用于开发环境 +# 使用方式: docker-compose -f "docker-compose copy.yml" up -d --build +# +# 此配置文件会从本地源代码构建所有镜像,适合开发调试使用 + +services: + # Redis 服务 - Celery的broker和backend + redis: + # 当前使用 DaoCloud 镜像加速(国内最稳定的公共镜像源之一) + # 如果拉取失败,可尝试: + # - dockerproxy.com/library/redis:7-alpine + # - docker.1panel.live/library/redis:7-alpine + # - docker.rainbond.cc/library/redis:7-alpine + image: docker.m.daocloud.io/library/redis:7-alpine + container_name: wharttest-redis + ports: + - "8911:6379" + volumes: + - redis-data:/data + networks: + - wharttest-network + restart: unless-stopped + healthcheck: + test: [ "CMD", "redis-cli", "ping" ] + interval: 10s + timeout: 5s + retries: 5 + command: redis-server --appendonly yes + + # 后端 Django 服务(包含Celery Worker和Beat) + backend: + # 本地构建模式 + build: + context: ./WHartTest_Django + dockerfile: Dockerfile + container_name: wharttest-backend + # 启动逻辑已移至 Dockerfile 的 ENTRYPOINT 和 supervisord.conf + ports: + - "8912:8000" + volumes: + - ./data:/app/data + - backend-static:/app/static + environment: + - DATABASE_PATH=/app/data/db.sqlite3 + - MEDIA_ROOT=/app/data/media + - DJANGO_DEBUG=True + - DJANGO_SECRET_KEY=${DJANGO_SECRET_KEY:-django-insecure-change-this-in-production} + - DJANGO_ALLOWED_HOSTS=${DJANGO_ALLOWED_HOSTS:-*} + - DJANGO_CORS_ALLOWED_ORIGINS=http://localhost:3000,http://localhost:5173,http://localhost:80 + - DJANGO_ADMIN_USERNAME=${DJANGO_ADMIN_USERNAME:-admin} + - DJANGO_ADMIN_EMAIL=${DJANGO_ADMIN_EMAIL:-admin@example.com} + - DJANGO_ADMIN_PASSWORD=${DJANGO_ADMIN_PASSWORD:-admin123456} + # Celery配置 + - CELERY_BROKER_URL=redis://redis:6379/0 + - CELERY_RESULT_BACKEND=redis://redis:6379/0 + # 内部API基础URL - 使用localhost因为在同一容器 + - DJANGO_BASE_URL=http://localhost:8000 + depends_on: + redis: + condition: service_healthy + networks: + - wharttest-network + restart: unless-stopped + healthcheck: + test: [ "CMD", "python", "-c", "import requests; requests.get('http://localhost:8000/api/')" ] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + # 前端 Vue 服务 + frontend: + # 本地构建模式 + build: + context: ./WHartTest_Vue + dockerfile: Dockerfile + container_name: wharttest-frontend + ports: + - "8913:80" + depends_on: + - backend + networks: + - wharttest-network + restart: unless-stopped + healthcheck: + test: [ "CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/" ] + interval: 30s + timeout: 10s + retries: 3 + start_period: 20s + + # MCP 服务(独立容器) + mcp: + # 本地构建模式 + build: + context: ./WHartTest_MCP + dockerfile: Dockerfile + container_name: wharttest-mcp + user: root + environment: + # WHartTest Tools 配置 + - WHARTTEST_BACKEND_URL=${WHARTTEST_BACKEND_URL:-http://backend:8000} + # 使用系统自动生成的默认API Key,生产环境请在.env中覆盖 + - WHARTTEST_API_KEY=${WHARTTEST_API_KEY:-wharttest-default-mcp-key-2025} + # MS MCP API 配置(可选) + - MS_API_HOST=${MS_API_HOST:-http://ms.example.com} + - MS_ACCESS_KEY=${MS_ACCESS_KEY:-your_16byte_key1} + - MS_SECRET_KEY=${MS_SECRET_KEY:-your_16byte_key2} + ports: + - "8914:8006" # WHartTest_tools 服务端口 + - "8915:8007" # ms_mcp_api 服务端口 + volumes: + - ./data/playwright-screenshots:/tmp/playwright-output # 使用本地目录挂载 + depends_on: + - backend + networks: + - wharttest-network + restart: unless-stopped + healthcheck: + test: [ "CMD", "python", "-c", "import urllib.request; urllib.request.urlopen('http://localhost:8006/')" ] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + + # Playwright MCP 服务(官方Docker镜像) + playwright-mcp: + image: mcr.microsoft.com/playwright/mcp + container_name: wharttest-playwright-mcp + user: root # 以 root 用户运行,确保有权限写入挂载目录 + entrypoint: node + command: [ "cli.js", "--no-sandbox", "--host", "0.0.0.0", "--allowed-hosts", "*", "--config", "/app/playwright-mcp-config.json" ] + ports: + - "8916:8931" + volumes: + - ./data/playwright-screenshots:/tmp/playwright-output # 使用本地目录挂载 + - ./WHartTest_MCP/playwright-mcp-config.json:/app/playwright-mcp-config.json:ro # 挂载配置文件 + networks: + - wharttest-network + restart: unless-stopped + healthcheck: + test: [ "CMD", "wget", "--spider", "-q", "http://localhost:8931/mcp" ] + interval: 30s + timeout: 10s + retries: 3 + start_period: 20s + + # BGE 嵌入模型服务 (使用 Ollama) + bge-m3: + image: ollama/ollama:latest + container_name: wharttest-bge-m3 + ports: + - "8917:11434" + volumes: + - bge-m3-data:/root/.ollama + networks: + - wharttest-network + restart: unless-stopped + healthcheck: + test: [ "CMD", "ollama", "list" ] + interval: 30s + timeout: 10s + retries: 3 + start_period: 30s + # 启动后运行: docker exec wharttest-bge-m3 ollama pull bge-m3 + # API 兼容 OpenAI,访问: http://localhost:8917/api/embeddings + deploy: + resources: + limits: + memory: 4G + +networks: + wharttest-network: + driver: bridge + +volumes: + backend-static: + redis-data: + celery-beat-schedule: + bge-m3-data: + # db.sqlite3 和 media 改用本地目录挂载,不再需要 named volume + # playwright-screenshots 改用本地目录挂载,不再需要 named volume From 868404b55e9be5da5dd4038d52c2a8607e699db1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B5=B5=E4=BC=9F?= Date: Thu, 27 Nov 2025 17:43:30 +0800 Subject: [PATCH 24/24] =?UTF-8?q?feat():=E6=96=B0=E5=A2=9E=E6=96=87?= =?UTF-8?q?=E6=A1=A3=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/.vitepress/cache/deps/_metadata.json | 29 +- .../deps/vitepress___@vue_devtools-api.js | 5098 +++++----- .../deps/vitepress___@vue_devtools-api.js.map | 6 +- .../cache/deps/vitepress___@vueuse_core.js | 8563 ++++++++++++++++- .../deps/vitepress___@vueuse_core.js.map | 8 +- docs/.vitepress/cache/deps/vue.js | 7 +- docs/.vitepress/config.mjs | 12 +- docs/quick-start/back-deployment.md | 117 + docs/quick-start/django-deployment.md | 129 +- docs/quick-start/example-deployment.md | 101 + docs/quick-start/img.png | Bin 0 -> 96231 bytes docs/quick-start/img_1.png | Bin 0 -> 148627 bytes docs/quick-start/img_10.png | Bin 0 -> 87630 bytes docs/quick-start/img_11.png | Bin 0 -> 191247 bytes docs/quick-start/img_12.png | Bin 0 -> 154960 bytes docs/quick-start/img_13.png | Bin 0 -> 126016 bytes docs/quick-start/img_14.png | Bin 0 -> 98082 bytes docs/quick-start/img_15.png | Bin 0 -> 74263 bytes docs/quick-start/img_16.png | Bin 0 -> 45361 bytes docs/quick-start/img_17.png | Bin 0 -> 56875 bytes docs/quick-start/img_18.png | Bin 0 -> 95917 bytes docs/quick-start/img_19.png | Bin 0 -> 126575 bytes docs/quick-start/img_2.png | Bin 0 -> 130645 bytes docs/quick-start/img_20.png | Bin 0 -> 169680 bytes docs/quick-start/img_21.png | Bin 0 -> 201792 bytes docs/quick-start/img_22.png | Bin 0 -> 258220 bytes docs/quick-start/img_23.png | Bin 0 -> 128725 bytes docs/quick-start/img_24.png | Bin 0 -> 187146 bytes docs/quick-start/img_25.png | Bin 0 -> 115326 bytes docs/quick-start/img_26.png | Bin 0 -> 344802 bytes docs/quick-start/img_27.png | Bin 0 -> 203890 bytes docs/quick-start/img_28.png | Bin 0 -> 203676 bytes docs/quick-start/img_29.png | Bin 0 -> 174028 bytes docs/quick-start/img_3.png | Bin 0 -> 717542 bytes docs/quick-start/img_4.png | Bin 0 -> 108883 bytes docs/quick-start/img_5.png | Bin 0 -> 171306 bytes docs/quick-start/img_6.png | Bin 0 -> 104719 bytes docs/quick-start/img_7.png | Bin 0 -> 55352 bytes docs/quick-start/img_8.png | Bin 0 -> 93628 bytes docs/quick-start/img_9.png | Bin 0 -> 87992 bytes docs/quick-start/mcp-deployment.md | 2 +- docs/quick-start/problem-deployment.md | 40 + 42 files changed, 10769 insertions(+), 3343 deletions(-) create mode 100644 docs/quick-start/back-deployment.md create mode 100644 docs/quick-start/example-deployment.md create mode 100644 docs/quick-start/img.png create mode 100644 docs/quick-start/img_1.png create mode 100644 docs/quick-start/img_10.png create mode 100644 docs/quick-start/img_11.png create mode 100644 docs/quick-start/img_12.png create mode 100644 docs/quick-start/img_13.png create mode 100644 docs/quick-start/img_14.png create mode 100644 docs/quick-start/img_15.png create mode 100644 docs/quick-start/img_16.png create mode 100644 docs/quick-start/img_17.png create mode 100644 docs/quick-start/img_18.png create mode 100644 docs/quick-start/img_19.png create mode 100644 docs/quick-start/img_2.png create mode 100644 docs/quick-start/img_20.png create mode 100644 docs/quick-start/img_21.png create mode 100644 docs/quick-start/img_22.png create mode 100644 docs/quick-start/img_23.png create mode 100644 docs/quick-start/img_24.png create mode 100644 docs/quick-start/img_25.png create mode 100644 docs/quick-start/img_26.png create mode 100644 docs/quick-start/img_27.png create mode 100644 docs/quick-start/img_28.png create mode 100644 docs/quick-start/img_29.png create mode 100644 docs/quick-start/img_3.png create mode 100644 docs/quick-start/img_4.png create mode 100644 docs/quick-start/img_5.png create mode 100644 docs/quick-start/img_6.png create mode 100644 docs/quick-start/img_7.png create mode 100644 docs/quick-start/img_8.png create mode 100644 docs/quick-start/img_9.png create mode 100644 docs/quick-start/problem-deployment.md diff --git a/docs/.vitepress/cache/deps/_metadata.json b/docs/.vitepress/cache/deps/_metadata.json index 6f5dd270..a67d5d56 100644 --- a/docs/.vitepress/cache/deps/_metadata.json +++ b/docs/.vitepress/cache/deps/_metadata.json @@ -1,40 +1,31 @@ { - "hash": "de31ef0b", - "configHash": "8ac7677b", - "lockfileHash": "622a020b", - "browserHash": "e5243b21", + "hash": "0bc39fe9", + "configHash": "e8fe7040", + "lockfileHash": "70c45730", + "browserHash": "c67ba105", "optimized": { "vue": { "src": "../../../../node_modules/vue/dist/vue.runtime.esm-bundler.js", "file": "vue.js", - "fileHash": "064b6c2d", + "fileHash": "42bf31d7", "needsInterop": false }, "vitepress > @vue/devtools-api": { "src": "../../../../node_modules/@vue/devtools-api/dist/index.js", "file": "vitepress___@vue_devtools-api.js", - "fileHash": "7909e5de", + "fileHash": "dbc7f665", "needsInterop": false }, "vitepress > @vueuse/core": { - "src": "../../../../node_modules/@vueuse/core/index.mjs", + "src": "../../../../node_modules/@vueuse/core/dist/index.js", "file": "vitepress___@vueuse_core.js", - "fileHash": "2f0bebef", - "needsInterop": false - }, - "@theme/index": { - "src": "../../../../node_modules/vitepress/dist/client/theme-default/index.js", - "file": "@theme_index.js", - "fileHash": "e89020de", + "fileHash": "4deda75e", "needsInterop": false } }, "chunks": { - "chunk-P2XGSYO7": { - "file": "chunk-P2XGSYO7.js" - }, - "chunk-HVR2FF6M": { - "file": "chunk-HVR2FF6M.js" + "chunk-TICTUL3T": { + "file": "chunk-TICTUL3T.js" } } } \ No newline at end of file diff --git a/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js b/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js index 7e6d758a..278d50f9 100644 --- a/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js +++ b/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js @@ -5,232 +5,162 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __getProtoOf = Object.getPrototypeOf; var __hasOwnProp = Object.prototype.hasOwnProperty; -var __esm = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; -}; -var __commonJS = (cb, mod) => function __require() { +var __commonJS = (cb, mod) => function() { return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __copyProps = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames(from)) - if (!__hasOwnProp.call(to, key) && key !== except) - __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) { + key = keys[i]; + if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { + get: ((k) => from[k]).bind(null, key), + enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable + }); } return to; }; -var __toESM = (mod, isNodeMode, target2) => (target2 = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp(target2, "default", { value: mod, enumerable: true }) : target2, - mod -)); -var init_esm_shims = __esm({ - "../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.51.1_@types+node@22.13.14__jiti@2.4.2_postcss@8.5_96eb05a9d65343021e53791dd83f3773/node_modules/tsup/assets/esm_shims.js"() { - "use strict"; - } -}); -var require_rfdc = __commonJS({ - "../../node_modules/.pnpm/rfdc@1.4.1/node_modules/rfdc/index.js"(exports, module) { - "use strict"; - init_esm_shims(); - module.exports = rfdc2; - function copyBuffer(cur) { - if (cur instanceof Buffer) { - return Buffer.from(cur); - } - return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length); - } - function rfdc2(opts) { - opts = opts || {}; - if (opts.circles) return rfdcCircles(opts); - const constructorHandlers = /* @__PURE__ */ new Map(); - constructorHandlers.set(Date, (o) => new Date(o)); - constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn))); - constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn))); - if (opts.constructorHandlers) { - for (const handler2 of opts.constructorHandlers) { - constructorHandlers.set(handler2[0], handler2[1]); - } - } - let handler = null; - return opts.proto ? cloneProto : clone; - function cloneArray(a, fn) { - const keys = Object.keys(a); - const a2 = new Array(keys.length); - for (let i = 0; i < keys.length; i++) { - const k = keys[i]; - const cur = a[k]; - if (typeof cur !== "object" || cur === null) { - a2[k] = cur; - } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { - a2[k] = handler(cur, fn); - } else if (ArrayBuffer.isView(cur)) { - a2[k] = copyBuffer(cur); - } else { - a2[k] = fn(cur); - } - } - return a2; - } - function clone(o) { - if (typeof o !== "object" || o === null) return o; - if (Array.isArray(o)) return cloneArray(o, clone); - if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) { - return handler(o, clone); - } - const o2 = {}; - for (const k in o) { - if (Object.hasOwnProperty.call(o, k) === false) continue; - const cur = o[k]; - if (typeof cur !== "object" || cur === null) { - o2[k] = cur; - } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { - o2[k] = handler(cur, clone); - } else if (ArrayBuffer.isView(cur)) { - o2[k] = copyBuffer(cur); - } else { - o2[k] = clone(cur); - } - } - return o2; +var __toESM = (mod, isNodeMode, target$1) => (target$1 = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target$1, "default", { + value: mod, + enumerable: true +}) : target$1, mod)); +var isBrowser = typeof navigator !== "undefined"; +var target = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : typeof global !== "undefined" ? global : {}; +var isInChromePanel = typeof target.chrome !== "undefined" && !!target.chrome.devtools; +var isInIframe = isBrowser && target.self !== target.top; +var isInElectron = typeof navigator !== "undefined" && navigator.userAgent?.toLowerCase().includes("electron"); +var isNuxtApp = typeof window !== "undefined" && !!window.__NUXT__; +var require_rfdc = __commonJS({ "../../node_modules/.pnpm/rfdc@1.4.1/node_modules/rfdc/index.js": ((exports, module) => { + module.exports = rfdc$1; + function copyBuffer(cur) { + if (cur instanceof Buffer) return Buffer.from(cur); + return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length); + } + function rfdc$1(opts) { + opts = opts || {}; + if (opts.circles) return rfdcCircles(opts); + const constructorHandlers = /* @__PURE__ */ new Map(); + constructorHandlers.set(Date, (o) => new Date(o)); + constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn))); + constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn))); + if (opts.constructorHandlers) for (const handler$1 of opts.constructorHandlers) constructorHandlers.set(handler$1[0], handler$1[1]); + let handler = null; + return opts.proto ? cloneProto : clone; + function cloneArray(a, fn) { + const keys = Object.keys(a); + const a2 = new Array(keys.length); + for (let i = 0; i < keys.length; i++) { + const k = keys[i]; + const cur = a[k]; + if (typeof cur !== "object" || cur === null) a2[k] = cur; + else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) a2[k] = handler(cur, fn); + else if (ArrayBuffer.isView(cur)) a2[k] = copyBuffer(cur); + else a2[k] = fn(cur); } - function cloneProto(o) { - if (typeof o !== "object" || o === null) return o; - if (Array.isArray(o)) return cloneArray(o, cloneProto); - if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) { - return handler(o, cloneProto); - } - const o2 = {}; - for (const k in o) { - const cur = o[k]; - if (typeof cur !== "object" || cur === null) { - o2[k] = cur; - } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { - o2[k] = handler(cur, cloneProto); - } else if (ArrayBuffer.isView(cur)) { - o2[k] = copyBuffer(cur); - } else { - o2[k] = cloneProto(cur); - } - } - return o2; + return a2; + } + function clone(o) { + if (typeof o !== "object" || o === null) return o; + if (Array.isArray(o)) return cloneArray(o, clone); + if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, clone); + const o2 = {}; + for (const k in o) { + if (Object.hasOwnProperty.call(o, k) === false) continue; + const cur = o[k]; + if (typeof cur !== "object" || cur === null) o2[k] = cur; + else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, clone); + else if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur); + else o2[k] = clone(cur); } - } - function rfdcCircles(opts) { - const refs = []; - const refsNew = []; - const constructorHandlers = /* @__PURE__ */ new Map(); - constructorHandlers.set(Date, (o) => new Date(o)); - constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn))); - constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn))); - if (opts.constructorHandlers) { - for (const handler2 of opts.constructorHandlers) { - constructorHandlers.set(handler2[0], handler2[1]); - } + return o2; + } + function cloneProto(o) { + if (typeof o !== "object" || o === null) return o; + if (Array.isArray(o)) return cloneArray(o, cloneProto); + if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, cloneProto); + const o2 = {}; + for (const k in o) { + const cur = o[k]; + if (typeof cur !== "object" || cur === null) o2[k] = cur; + else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, cloneProto); + else if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur); + else o2[k] = cloneProto(cur); } - let handler = null; - return opts.proto ? cloneProto : clone; - function cloneArray(a, fn) { - const keys = Object.keys(a); - const a2 = new Array(keys.length); - for (let i = 0; i < keys.length; i++) { - const k = keys[i]; - const cur = a[k]; - if (typeof cur !== "object" || cur === null) { - a2[k] = cur; - } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { - a2[k] = handler(cur, fn); - } else if (ArrayBuffer.isView(cur)) { - a2[k] = copyBuffer(cur); - } else { - const index = refs.indexOf(cur); - if (index !== -1) { - a2[k] = refsNew[index]; - } else { - a2[k] = fn(cur); - } - } + return o2; + } + } + function rfdcCircles(opts) { + const refs = []; + const refsNew = []; + const constructorHandlers = /* @__PURE__ */ new Map(); + constructorHandlers.set(Date, (o) => new Date(o)); + constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn))); + constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn))); + if (opts.constructorHandlers) for (const handler$1 of opts.constructorHandlers) constructorHandlers.set(handler$1[0], handler$1[1]); + let handler = null; + return opts.proto ? cloneProto : clone; + function cloneArray(a, fn) { + const keys = Object.keys(a); + const a2 = new Array(keys.length); + for (let i = 0; i < keys.length; i++) { + const k = keys[i]; + const cur = a[k]; + if (typeof cur !== "object" || cur === null) a2[k] = cur; + else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) a2[k] = handler(cur, fn); + else if (ArrayBuffer.isView(cur)) a2[k] = copyBuffer(cur); + else { + const index = refs.indexOf(cur); + if (index !== -1) a2[k] = refsNew[index]; + else a2[k] = fn(cur); } - return a2; } - function clone(o) { - if (typeof o !== "object" || o === null) return o; - if (Array.isArray(o)) return cloneArray(o, clone); - if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) { - return handler(o, clone); + return a2; + } + function clone(o) { + if (typeof o !== "object" || o === null) return o; + if (Array.isArray(o)) return cloneArray(o, clone); + if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, clone); + const o2 = {}; + refs.push(o); + refsNew.push(o2); + for (const k in o) { + if (Object.hasOwnProperty.call(o, k) === false) continue; + const cur = o[k]; + if (typeof cur !== "object" || cur === null) o2[k] = cur; + else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, clone); + else if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur); + else { + const i = refs.indexOf(cur); + if (i !== -1) o2[k] = refsNew[i]; + else o2[k] = clone(cur); } - const o2 = {}; - refs.push(o); - refsNew.push(o2); - for (const k in o) { - if (Object.hasOwnProperty.call(o, k) === false) continue; - const cur = o[k]; - if (typeof cur !== "object" || cur === null) { - o2[k] = cur; - } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { - o2[k] = handler(cur, clone); - } else if (ArrayBuffer.isView(cur)) { - o2[k] = copyBuffer(cur); - } else { - const i = refs.indexOf(cur); - if (i !== -1) { - o2[k] = refsNew[i]; - } else { - o2[k] = clone(cur); - } - } - } - refs.pop(); - refsNew.pop(); - return o2; } - function cloneProto(o) { - if (typeof o !== "object" || o === null) return o; - if (Array.isArray(o)) return cloneArray(o, cloneProto); - if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) { - return handler(o, cloneProto); - } - const o2 = {}; - refs.push(o); - refsNew.push(o2); - for (const k in o) { - const cur = o[k]; - if (typeof cur !== "object" || cur === null) { - o2[k] = cur; - } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) { - o2[k] = handler(cur, cloneProto); - } else if (ArrayBuffer.isView(cur)) { - o2[k] = copyBuffer(cur); - } else { - const i = refs.indexOf(cur); - if (i !== -1) { - o2[k] = refsNew[i]; - } else { - o2[k] = cloneProto(cur); - } - } + refs.pop(); + refsNew.pop(); + return o2; + } + function cloneProto(o) { + if (typeof o !== "object" || o === null) return o; + if (Array.isArray(o)) return cloneArray(o, cloneProto); + if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, cloneProto); + const o2 = {}; + refs.push(o); + refsNew.push(o2); + for (const k in o) { + const cur = o[k]; + if (typeof cur !== "object" || cur === null) o2[k] = cur; + else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, cloneProto); + else if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur); + else { + const i = refs.indexOf(cur); + if (i !== -1) o2[k] = refsNew[i]; + else o2[k] = cloneProto(cur); } - refs.pop(); - refsNew.pop(); - return o2; } + refs.pop(); + refsNew.pop(); + return o2; } } -}); -init_esm_shims(); -init_esm_shims(); -init_esm_shims(); -var isBrowser = typeof navigator !== "undefined"; -var target = typeof window !== "undefined" ? window : typeof globalThis !== "undefined" ? globalThis : typeof global !== "undefined" ? global : {}; -var isInChromePanel = typeof target.chrome !== "undefined" && !!target.chrome.devtools; -var isInIframe = isBrowser && target.self !== target.top; -var _a; -var isInElectron = typeof navigator !== "undefined" && ((_a = navigator.userAgent) == null ? void 0 : _a.toLowerCase().includes("electron")); -var isNuxtApp = typeof window !== "undefined" && !!window.__NUXT__; -init_esm_shims(); +}) }); var import_rfdc = __toESM(require_rfdc(), 1); var classifyRE = /(?:^|[-_/])(\w)/g; function toUpper(_, c) { @@ -241,9 +171,7 @@ function classify(str) { } function basename(filename, ext) { let normalizedFilename = filename.replace(/^[a-z]:/i, "").replace(/\\/g, "/"); - if (normalizedFilename.endsWith(`index${ext}`)) { - normalizedFilename = normalizedFilename.replace(`/index${ext}`, ext); - } + if (normalizedFilename.endsWith(`index${ext}`)) normalizedFilename = normalizedFilename.replace(`/index${ext}`, ext); const lastSlashIndex = normalizedFilename.lastIndexOf("/"); const baseNameWithExt = normalizedFilename.substring(lastSlashIndex + 1); if (ext) { @@ -259,14 +187,13 @@ function isUrlString(str) { var deepClone = (0, import_rfdc.default)({ circles: true }); // node_modules/perfect-debounce/dist/index.mjs -var DEBOUNCE_DEFAULTS = { - trailing: true -}; +var DEBOUNCE_DEFAULTS = { trailing: true }; function debounce(fn, wait = 25, options = {}) { - options = { ...DEBOUNCE_DEFAULTS, ...options }; - if (!Number.isFinite(wait)) { - throw new TypeError("Expected `wait` to be a finite number"); - } + options = { + ...DEBOUNCE_DEFAULTS, + ...options + }; + if (!Number.isFinite(wait)) throw new TypeError("Expected `wait` to be a finite number"); let leadingValue; let timeout; let resolveList = []; @@ -284,32 +211,45 @@ function debounce(fn, wait = 25, options = {}) { }); return currentPromise; }; - return function(...args) { - if (currentPromise) { - if (options.trailing) { - trailingArgs = args; - } - return currentPromise; - } + const debounced = function(...args) { + if (options.trailing) trailingArgs = args; + if (currentPromise) return currentPromise; return new Promise((resolve) => { const shouldCallNow = !timeout && options.leading; clearTimeout(timeout); timeout = setTimeout(() => { timeout = null; const promise = options.leading ? leadingValue : applyFn(this, args); - for (const _resolve of resolveList) { - _resolve(promise); - } + trailingArgs = null; + for (const _resolve of resolveList) _resolve(promise); resolveList = []; }, wait); if (shouldCallNow) { leadingValue = applyFn(this, args); resolve(leadingValue); - } else { - resolveList.push(resolve); - } + } else resolveList.push(resolve); }); }; + const _clearTimeout = (timer) => { + if (timer) { + clearTimeout(timer); + timeout = null; + } + }; + debounced.isPending = () => !!timeout; + debounced.cancel = () => { + _clearTimeout(timeout); + resolveList = []; + trailingArgs = null; + }; + debounced.flush = () => { + _clearTimeout(timeout); + if (!trailingArgs || currentPromise) return; + const args = trailingArgs; + trailingArgs = null; + return applyFn(this, args); + }; + return debounced; } async function _applyPromised(fn, _this, args) { return await fn.apply(_this, args); @@ -531,1637 +471,62 @@ var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor; var __getOwnPropNames2 = Object.getOwnPropertyNames; var __getProtoOf2 = Object.getPrototypeOf; var __hasOwnProp2 = Object.prototype.hasOwnProperty; -var __esm2 = (fn, res) => function __init() { - return fn && (res = (0, fn[__getOwnPropNames2(fn)[0]])(fn = 0)), res; -}; -var __commonJS2 = (cb, mod) => function __require() { +var __commonJS2 = (cb, mod) => function() { return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports; }; var __copyProps2 = (to, from, except, desc) => { - if (from && typeof from === "object" || typeof from === "function") { - for (let key of __getOwnPropNames2(from)) - if (!__hasOwnProp2.call(to, key) && key !== except) - __defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable }); + if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames2(from), i = 0, n = keys.length, key; i < n; i++) { + key = keys[i]; + if (!__hasOwnProp2.call(to, key) && key !== except) __defProp2(to, key, { + get: ((k) => from[k]).bind(null, key), + enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable + }); } return to; }; -var __toESM2 = (mod, isNodeMode, target22) => (target22 = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2( - // If the importer is in node compatibility mode or this is not an ESM - // file that has been converted to a CommonJS file using a Babel- - // compatible transform (i.e. "__esModule" has not been set), then set - // "default" to the CommonJS "module.exports" for node compatibility. - isNodeMode || !mod || !mod.__esModule ? __defProp2(target22, "default", { value: mod, enumerable: true }) : target22, - mod -)); -var init_esm_shims2 = __esm2({ - "../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.51.1_@types+node@22.13.14__jiti@2.4.2_postcss@8.5_96eb05a9d65343021e53791dd83f3773/node_modules/tsup/assets/esm_shims.js"() { - "use strict"; - } -}); -var require_speakingurl = __commonJS2({ - "../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js"(exports, module) { - "use strict"; - init_esm_shims2(); - (function(root) { - "use strict"; - var charMap = { - // latin - "À": "A", - "Á": "A", - "Â": "A", - "Ã": "A", - "Ä": "Ae", - "Å": "A", - "Æ": "AE", - "Ç": "C", - "È": "E", - "É": "E", - "Ê": "E", - "Ë": "E", - "Ì": "I", - "Í": "I", - "Î": "I", - "Ï": "I", - "Ð": "D", - "Ñ": "N", - "Ò": "O", - "Ó": "O", - "Ô": "O", - "Õ": "O", - "Ö": "Oe", - "Ő": "O", - "Ø": "O", - "Ù": "U", - "Ú": "U", - "Û": "U", - "Ü": "Ue", - "Ű": "U", - "Ý": "Y", - "Þ": "TH", - "ß": "ss", - "à": "a", - "á": "a", - "â": "a", - "ã": "a", - "ä": "ae", - "å": "a", - "æ": "ae", - "ç": "c", - "è": "e", - "é": "e", - "ê": "e", - "ë": "e", - "ì": "i", - "í": "i", - "î": "i", - "ï": "i", - "ð": "d", - "ñ": "n", - "ò": "o", - "ó": "o", - "ô": "o", - "õ": "o", - "ö": "oe", - "ő": "o", - "ø": "o", - "ù": "u", - "ú": "u", - "û": "u", - "ü": "ue", - "ű": "u", - "ý": "y", - "þ": "th", - "ÿ": "y", - "ẞ": "SS", - // language specific - // Arabic - "ا": "a", - "أ": "a", - "إ": "i", - "آ": "aa", - "ؤ": "u", - "ئ": "e", - "ء": "a", - "ب": "b", - "ت": "t", - "ث": "th", - "ج": "j", - "ح": "h", - "خ": "kh", - "د": "d", - "ذ": "th", - "ر": "r", - "ز": "z", - "س": "s", - "ش": "sh", - "ص": "s", - "ض": "dh", - "ط": "t", - "ظ": "z", - "ع": "a", - "غ": "gh", - "ف": "f", - "ق": "q", - "ك": "k", - "ل": "l", - "م": "m", - "ن": "n", - "ه": "h", - "و": "w", - "ي": "y", - "ى": "a", - "ة": "h", - "ﻻ": "la", - "ﻷ": "laa", - "ﻹ": "lai", - "ﻵ": "laa", - // Persian additional characters than Arabic - "گ": "g", - "چ": "ch", - "پ": "p", - "ژ": "zh", - "ک": "k", - "ی": "y", - // Arabic diactrics - "َ": "a", - "ً": "an", - "ِ": "e", - "ٍ": "en", - "ُ": "u", - "ٌ": "on", - "ْ": "", - // Arabic numbers - "٠": "0", - "١": "1", - "٢": "2", - "٣": "3", - "٤": "4", - "٥": "5", - "٦": "6", - "٧": "7", - "٨": "8", - "٩": "9", - // Persian numbers - "۰": "0", - "۱": "1", - "۲": "2", - "۳": "3", - "۴": "4", - "۵": "5", - "۶": "6", - "۷": "7", - "۸": "8", - "۹": "9", - // Burmese consonants - "က": "k", - "ခ": "kh", - "ဂ": "g", - "ဃ": "ga", - "င": "ng", - "စ": "s", - "ဆ": "sa", - "ဇ": "z", - "စျ": "za", - "ည": "ny", - "ဋ": "t", - "ဌ": "ta", - "ဍ": "d", - "ဎ": "da", - "ဏ": "na", - "တ": "t", - "ထ": "ta", - "ဒ": "d", - "ဓ": "da", - "န": "n", - "ပ": "p", - "ဖ": "pa", - "ဗ": "b", - "ဘ": "ba", - "မ": "m", - "ယ": "y", - "ရ": "ya", - "လ": "l", - "ဝ": "w", - "သ": "th", - "ဟ": "h", - "ဠ": "la", - "အ": "a", - // consonant character combos - "ြ": "y", - "ျ": "ya", - "ွ": "w", - "ြွ": "yw", - "ျွ": "ywa", - "ှ": "h", - // independent vowels - "ဧ": "e", - "၏": "-e", - "ဣ": "i", - "ဤ": "-i", - "ဉ": "u", - "ဦ": "-u", - "ဩ": "aw", - "သြော": "aw", - "ဪ": "aw", - // numbers - "၀": "0", - "၁": "1", - "၂": "2", - "၃": "3", - "၄": "4", - "၅": "5", - "၆": "6", - "၇": "7", - "၈": "8", - "၉": "9", - // virama and tone marks which are silent in transliteration - "္": "", - "့": "", - "း": "", - // Czech - "č": "c", - "ď": "d", - "ě": "e", - "ň": "n", - "ř": "r", - "š": "s", - "ť": "t", - "ů": "u", - "ž": "z", - "Č": "C", - "Ď": "D", - "Ě": "E", - "Ň": "N", - "Ř": "R", - "Š": "S", - "Ť": "T", - "Ů": "U", - "Ž": "Z", - // Dhivehi - "ހ": "h", - "ށ": "sh", - "ނ": "n", - "ރ": "r", - "ބ": "b", - "ޅ": "lh", - "ކ": "k", - "އ": "a", - "ވ": "v", - "މ": "m", - "ފ": "f", - "ދ": "dh", - "ތ": "th", - "ލ": "l", - "ގ": "g", - "ޏ": "gn", - "ސ": "s", - "ޑ": "d", - "ޒ": "z", - "ޓ": "t", - "ޔ": "y", - "ޕ": "p", - "ޖ": "j", - "ޗ": "ch", - "ޘ": "tt", - "ޙ": "hh", - "ޚ": "kh", - "ޛ": "th", - "ޜ": "z", - "ޝ": "sh", - "ޞ": "s", - "ޟ": "d", - "ޠ": "t", - "ޡ": "z", - "ޢ": "a", - "ޣ": "gh", - "ޤ": "q", - "ޥ": "w", - "ަ": "a", - "ާ": "aa", - "ި": "i", - "ީ": "ee", - "ު": "u", - "ޫ": "oo", - "ެ": "e", - "ޭ": "ey", - "ޮ": "o", - "ޯ": "oa", - "ް": "", - // Georgian https://en.wikipedia.org/wiki/Romanization_of_Georgian - // National system (2002) - "ა": "a", - "ბ": "b", - "გ": "g", - "დ": "d", - "ე": "e", - "ვ": "v", - "ზ": "z", - "თ": "t", - "ი": "i", - "კ": "k", - "ლ": "l", - "მ": "m", - "ნ": "n", - "ო": "o", - "პ": "p", - "ჟ": "zh", - "რ": "r", - "ს": "s", - "ტ": "t", - "უ": "u", - "ფ": "p", - "ქ": "k", - "ღ": "gh", - "ყ": "q", - "შ": "sh", - "ჩ": "ch", - "ც": "ts", - "ძ": "dz", - "წ": "ts", - "ჭ": "ch", - "ხ": "kh", - "ჯ": "j", - "ჰ": "h", - // Greek - "α": "a", - "β": "v", - "γ": "g", - "δ": "d", - "ε": "e", - "ζ": "z", - "η": "i", - "θ": "th", - "ι": "i", - "κ": "k", - "λ": "l", - "μ": "m", - "ν": "n", - "ξ": "ks", - "ο": "o", - "π": "p", - "ρ": "r", - "σ": "s", - "τ": "t", - "υ": "y", - "φ": "f", - "χ": "x", - "ψ": "ps", - "ω": "o", - "ά": "a", - "έ": "e", - "ί": "i", - "ό": "o", - "ύ": "y", - "ή": "i", - "ώ": "o", - "ς": "s", - "ϊ": "i", - "ΰ": "y", - "ϋ": "y", - "ΐ": "i", - "Α": "A", - "Β": "B", - "Γ": "G", - "Δ": "D", - "Ε": "E", - "Ζ": "Z", - "Η": "I", - "Θ": "TH", - "Ι": "I", - "Κ": "K", - "Λ": "L", - "Μ": "M", - "Ν": "N", - "Ξ": "KS", - "Ο": "O", - "Π": "P", - "Ρ": "R", - "Σ": "S", - "Τ": "T", - "Υ": "Y", - "Φ": "F", - "Χ": "X", - "Ψ": "PS", - "Ω": "O", - "Ά": "A", - "Έ": "E", - "Ί": "I", - "Ό": "O", - "Ύ": "Y", - "Ή": "I", - "Ώ": "O", - "Ϊ": "I", - "Ϋ": "Y", - // Latvian - "ā": "a", - // 'č': 'c', // duplicate - "ē": "e", - "ģ": "g", - "ī": "i", - "ķ": "k", - "ļ": "l", - "ņ": "n", - // 'š': 's', // duplicate - "ū": "u", - // 'ž': 'z', // duplicate - "Ā": "A", - // 'Č': 'C', // duplicate - "Ē": "E", - "Ģ": "G", - "Ī": "I", - "Ķ": "k", - "Ļ": "L", - "Ņ": "N", - // 'Š': 'S', // duplicate - "Ū": "U", - // 'Ž': 'Z', // duplicate - // Macedonian - "Ќ": "Kj", - "ќ": "kj", - "Љ": "Lj", - "љ": "lj", - "Њ": "Nj", - "њ": "nj", - "Тс": "Ts", - "тс": "ts", - // Polish - "ą": "a", - "ć": "c", - "ę": "e", - "ł": "l", - "ń": "n", - // 'ó': 'o', // duplicate - "ś": "s", - "ź": "z", - "ż": "z", - "Ą": "A", - "Ć": "C", - "Ę": "E", - "Ł": "L", - "Ń": "N", - "Ś": "S", - "Ź": "Z", - "Ż": "Z", - // Ukranian - "Є": "Ye", - "І": "I", - "Ї": "Yi", - "Ґ": "G", - "є": "ye", - "і": "i", - "ї": "yi", - "ґ": "g", - // Romanian - "ă": "a", - "Ă": "A", - "ș": "s", - "Ș": "S", - // 'ş': 's', // duplicate - // 'Ş': 'S', // duplicate - "ț": "t", - "Ț": "T", - "ţ": "t", - "Ţ": "T", - // Russian https://en.wikipedia.org/wiki/Romanization_of_Russian - // ICAO - "а": "a", - "б": "b", - "в": "v", - "г": "g", - "д": "d", - "е": "e", - "ё": "yo", - "ж": "zh", - "з": "z", - "и": "i", - "й": "i", - "к": "k", - "л": "l", - "м": "m", - "н": "n", - "о": "o", - "п": "p", - "р": "r", - "с": "s", - "т": "t", - "у": "u", - "ф": "f", - "х": "kh", - "ц": "c", - "ч": "ch", - "ш": "sh", - "щ": "sh", - "ъ": "", - "ы": "y", - "ь": "", - "э": "e", - "ю": "yu", - "я": "ya", - "А": "A", - "Б": "B", - "В": "V", - "Г": "G", - "Д": "D", - "Е": "E", - "Ё": "Yo", - "Ж": "Zh", - "З": "Z", - "И": "I", - "Й": "I", - "К": "K", - "Л": "L", - "М": "M", - "Н": "N", - "О": "O", - "П": "P", - "Р": "R", - "С": "S", - "Т": "T", - "У": "U", - "Ф": "F", - "Х": "Kh", - "Ц": "C", - "Ч": "Ch", - "Ш": "Sh", - "Щ": "Sh", - "Ъ": "", - "Ы": "Y", - "Ь": "", - "Э": "E", - "Ю": "Yu", - "Я": "Ya", - // Serbian - "ђ": "dj", - "ј": "j", - // 'љ': 'lj', // duplicate - // 'њ': 'nj', // duplicate - "ћ": "c", - "џ": "dz", - "Ђ": "Dj", - "Ј": "j", - // 'Љ': 'Lj', // duplicate - // 'Њ': 'Nj', // duplicate - "Ћ": "C", - "Џ": "Dz", - // Slovak - "ľ": "l", - "ĺ": "l", - "ŕ": "r", - "Ľ": "L", - "Ĺ": "L", - "Ŕ": "R", - // Turkish - "ş": "s", - "Ş": "S", - "ı": "i", - "İ": "I", - // 'ç': 'c', // duplicate - // 'Ç': 'C', // duplicate - // 'ü': 'u', // duplicate, see langCharMap - // 'Ü': 'U', // duplicate, see langCharMap - // 'ö': 'o', // duplicate, see langCharMap - // 'Ö': 'O', // duplicate, see langCharMap - "ğ": "g", - "Ğ": "G", - // Vietnamese - "ả": "a", - "Ả": "A", - "ẳ": "a", - "Ẳ": "A", - "ẩ": "a", - "Ẩ": "A", - "đ": "d", - "Đ": "D", - "ẹ": "e", - "Ẹ": "E", - "ẽ": "e", - "Ẽ": "E", - "ẻ": "e", - "Ẻ": "E", - "ế": "e", - "Ế": "E", - "ề": "e", - "Ề": "E", - "ệ": "e", - "Ệ": "E", - "ễ": "e", - "Ễ": "E", - "ể": "e", - "Ể": "E", - "ỏ": "o", - "ọ": "o", - "Ọ": "o", - "ố": "o", - "Ố": "O", - "ồ": "o", - "Ồ": "O", - "ổ": "o", - "Ổ": "O", - "ộ": "o", - "Ộ": "O", - "ỗ": "o", - "Ỗ": "O", - "ơ": "o", - "Ơ": "O", - "ớ": "o", - "Ớ": "O", - "ờ": "o", - "Ờ": "O", - "ợ": "o", - "Ợ": "O", - "ỡ": "o", - "Ỡ": "O", - "Ở": "o", - "ở": "o", - "ị": "i", - "Ị": "I", - "ĩ": "i", - "Ĩ": "I", - "ỉ": "i", - "Ỉ": "i", - "ủ": "u", - "Ủ": "U", - "ụ": "u", - "Ụ": "U", - "ũ": "u", - "Ũ": "U", - "ư": "u", - "Ư": "U", - "ứ": "u", - "Ứ": "U", - "ừ": "u", - "Ừ": "U", - "ự": "u", - "Ự": "U", - "ữ": "u", - "Ữ": "U", - "ử": "u", - "Ử": "ư", - "ỷ": "y", - "Ỷ": "y", - "ỳ": "y", - "Ỳ": "Y", - "ỵ": "y", - "Ỵ": "Y", - "ỹ": "y", - "Ỹ": "Y", - "ạ": "a", - "Ạ": "A", - "ấ": "a", - "Ấ": "A", - "ầ": "a", - "Ầ": "A", - "ậ": "a", - "Ậ": "A", - "ẫ": "a", - "Ẫ": "A", - // 'ă': 'a', // duplicate - // 'Ă': 'A', // duplicate - "ắ": "a", - "Ắ": "A", - "ằ": "a", - "Ằ": "A", - "ặ": "a", - "Ặ": "A", - "ẵ": "a", - "Ẵ": "A", - "⓪": "0", - "①": "1", - "②": "2", - "③": "3", - "④": "4", - "⑤": "5", - "⑥": "6", - "⑦": "7", - "⑧": "8", - "⑨": "9", - "⑩": "10", - "⑪": "11", - "⑫": "12", - "⑬": "13", - "⑭": "14", - "⑮": "15", - "⑯": "16", - "⑰": "17", - "⑱": "18", - "⑲": "18", - "⑳": "18", - "⓵": "1", - "⓶": "2", - "⓷": "3", - "⓸": "4", - "⓹": "5", - "⓺": "6", - "⓻": "7", - "⓼": "8", - "⓽": "9", - "⓾": "10", - "⓿": "0", - "⓫": "11", - "⓬": "12", - "⓭": "13", - "⓮": "14", - "⓯": "15", - "⓰": "16", - "⓱": "17", - "⓲": "18", - "⓳": "19", - "⓴": "20", - "Ⓐ": "A", - "Ⓑ": "B", - "Ⓒ": "C", - "Ⓓ": "D", - "Ⓔ": "E", - "Ⓕ": "F", - "Ⓖ": "G", - "Ⓗ": "H", - "Ⓘ": "I", - "Ⓙ": "J", - "Ⓚ": "K", - "Ⓛ": "L", - "Ⓜ": "M", - "Ⓝ": "N", - "Ⓞ": "O", - "Ⓟ": "P", - "Ⓠ": "Q", - "Ⓡ": "R", - "Ⓢ": "S", - "Ⓣ": "T", - "Ⓤ": "U", - "Ⓥ": "V", - "Ⓦ": "W", - "Ⓧ": "X", - "Ⓨ": "Y", - "Ⓩ": "Z", - "ⓐ": "a", - "ⓑ": "b", - "ⓒ": "c", - "ⓓ": "d", - "ⓔ": "e", - "ⓕ": "f", - "ⓖ": "g", - "ⓗ": "h", - "ⓘ": "i", - "ⓙ": "j", - "ⓚ": "k", - "ⓛ": "l", - "ⓜ": "m", - "ⓝ": "n", - "ⓞ": "o", - "ⓟ": "p", - "ⓠ": "q", - "ⓡ": "r", - "ⓢ": "s", - "ⓣ": "t", - "ⓤ": "u", - "ⓦ": "v", - "ⓥ": "w", - "ⓧ": "x", - "ⓨ": "y", - "ⓩ": "z", - // symbols - "“": '"', - "”": '"', - "‘": "'", - "’": "'", - "∂": "d", - "ƒ": "f", - "™": "(TM)", - "©": "(C)", - "œ": "oe", - "Œ": "OE", - "®": "(R)", - "†": "+", - "℠": "(SM)", - "…": "...", - "˚": "o", - "º": "o", - "ª": "a", - "•": "*", - "၊": ",", - "။": ".", - // currency - "$": "USD", - "€": "EUR", - "₢": "BRN", - "₣": "FRF", - "£": "GBP", - "₤": "ITL", - "₦": "NGN", - "₧": "ESP", - "₩": "KRW", - "₪": "ILS", - "₫": "VND", - "₭": "LAK", - "₮": "MNT", - "₯": "GRD", - "₱": "ARS", - "₲": "PYG", - "₳": "ARA", - "₴": "UAH", - "₵": "GHS", - "¢": "cent", - "¥": "CNY", - "元": "CNY", - "円": "YEN", - "﷼": "IRR", - "₠": "EWE", - "฿": "THB", - "₨": "INR", - "₹": "INR", - "₰": "PF", - "₺": "TRY", - "؋": "AFN", - "₼": "AZN", - "лв": "BGN", - "៛": "KHR", - "₡": "CRC", - "₸": "KZT", - "ден": "MKD", - "zł": "PLN", - "₽": "RUB", - "₾": "GEL" - }; - var lookAheadCharArray = [ - // burmese - "်", - // Dhivehi - "ް" - ]; - var diatricMap = { - // Burmese - // dependent vowels - "ာ": "a", - "ါ": "a", - "ေ": "e", - "ဲ": "e", - "ိ": "i", - "ီ": "i", - "ို": "o", - "ု": "u", - "ူ": "u", - "ေါင်": "aung", - "ော": "aw", - "ော်": "aw", - "ေါ": "aw", - "ေါ်": "aw", - "်": "်", - // this is special case but the character will be converted to latin in the code - "က်": "et", - "ိုက်": "aik", - "ောက်": "auk", - "င်": "in", - "ိုင်": "aing", - "ောင်": "aung", - "စ်": "it", - "ည်": "i", - "တ်": "at", - "ိတ်": "eik", - "ုတ်": "ok", - "ွတ်": "ut", - "ေတ်": "it", - "ဒ်": "d", - "ိုဒ်": "ok", - "ုဒ်": "ait", - "န်": "an", - "ာန်": "an", - "ိန်": "ein", - "ုန်": "on", - "ွန်": "un", - "ပ်": "at", - "ိပ်": "eik", - "ုပ်": "ok", - "ွပ်": "ut", - "န်ုပ်": "nub", - "မ်": "an", - "ိမ်": "ein", - "ုမ်": "on", - "ွမ်": "un", - "ယ်": "e", - "ိုလ်": "ol", - "ဉ်": "in", - "ံ": "an", - "ိံ": "ein", - "ုံ": "on", - // Dhivehi - "ައް": "ah", - "ަށް": "ah" - }; - var langCharMap = { - "en": {}, - // default language - "az": { - // Azerbaijani - "ç": "c", - "ə": "e", - "ğ": "g", - "ı": "i", - "ö": "o", - "ş": "s", - "ü": "u", - "Ç": "C", - "Ə": "E", - "Ğ": "G", - "İ": "I", - "Ö": "O", - "Ş": "S", - "Ü": "U" - }, - "cs": { - // Czech - "č": "c", - "ď": "d", - "ě": "e", - "ň": "n", - "ř": "r", - "š": "s", - "ť": "t", - "ů": "u", - "ž": "z", - "Č": "C", - "Ď": "D", - "Ě": "E", - "Ň": "N", - "Ř": "R", - "Š": "S", - "Ť": "T", - "Ů": "U", - "Ž": "Z" - }, - "fi": { - // Finnish - // 'å': 'a', duplicate see charMap/latin - // 'Å': 'A', duplicate see charMap/latin - "ä": "a", - // ok - "Ä": "A", - // ok - "ö": "o", - // ok - "Ö": "O" - // ok - }, - "hu": { - // Hungarian - "ä": "a", - // ok - "Ä": "A", - // ok - // 'á': 'a', duplicate see charMap/latin - // 'Á': 'A', duplicate see charMap/latin - "ö": "o", - // ok - "Ö": "O", - // ok - // 'ő': 'o', duplicate see charMap/latin - // 'Ő': 'O', duplicate see charMap/latin - "ü": "u", - "Ü": "U", - "ű": "u", - "Ű": "U" - }, - "lt": { - // Lithuanian - "ą": "a", - "č": "c", - "ę": "e", - "ė": "e", - "į": "i", - "š": "s", - "ų": "u", - "ū": "u", - "ž": "z", - "Ą": "A", - "Č": "C", - "Ę": "E", - "Ė": "E", - "Į": "I", - "Š": "S", - "Ų": "U", - "Ū": "U" - }, - "lv": { - // Latvian - "ā": "a", - "č": "c", - "ē": "e", - "ģ": "g", - "ī": "i", - "ķ": "k", - "ļ": "l", - "ņ": "n", - "š": "s", - "ū": "u", - "ž": "z", - "Ā": "A", - "Č": "C", - "Ē": "E", - "Ģ": "G", - "Ī": "i", - "Ķ": "k", - "Ļ": "L", - "Ņ": "N", - "Š": "S", - "Ū": "u", - "Ž": "Z" - }, - "pl": { - // Polish - "ą": "a", - "ć": "c", - "ę": "e", - "ł": "l", - "ń": "n", - "ó": "o", - "ś": "s", - "ź": "z", - "ż": "z", - "Ą": "A", - "Ć": "C", - "Ę": "e", - "Ł": "L", - "Ń": "N", - "Ó": "O", - "Ś": "S", - "Ź": "Z", - "Ż": "Z" - }, - "sv": { - // Swedish - // 'å': 'a', duplicate see charMap/latin - // 'Å': 'A', duplicate see charMap/latin - "ä": "a", - // ok - "Ä": "A", - // ok - "ö": "o", - // ok - "Ö": "O" - // ok - }, - "sk": { - // Slovak - "ä": "a", - "Ä": "A" - }, - "sr": { - // Serbian - "љ": "lj", - "њ": "nj", - "Љ": "Lj", - "Њ": "Nj", - "đ": "dj", - "Đ": "Dj" - }, - "tr": { - // Turkish - "Ü": "U", - "Ö": "O", - "ü": "u", - "ö": "o" - } - }; - var symbolMap = { - "ar": { - "∆": "delta", - "∞": "la-nihaya", - "♥": "hob", - "&": "wa", - "|": "aw", - "<": "aqal-men", - ">": "akbar-men", - "∑": "majmou", - "¤": "omla" - }, - "az": {}, - "ca": { - "∆": "delta", - "∞": "infinit", - "♥": "amor", - "&": "i", - "|": "o", - "<": "menys que", - ">": "mes que", - "∑": "suma dels", - "¤": "moneda" - }, - "cs": { - "∆": "delta", - "∞": "nekonecno", - "♥": "laska", - "&": "a", - "|": "nebo", - "<": "mensi nez", - ">": "vetsi nez", - "∑": "soucet", - "¤": "mena" - }, - "de": { - "∆": "delta", - "∞": "unendlich", - "♥": "Liebe", - "&": "und", - "|": "oder", - "<": "kleiner als", - ">": "groesser als", - "∑": "Summe von", - "¤": "Waehrung" - }, - "dv": { - "∆": "delta", - "∞": "kolunulaa", - "♥": "loabi", - "&": "aai", - "|": "noonee", - "<": "ah vure kuda", - ">": "ah vure bodu", - "∑": "jumula", - "¤": "faisaa" - }, - "en": { - "∆": "delta", - "∞": "infinity", - "♥": "love", - "&": "and", - "|": "or", - "<": "less than", - ">": "greater than", - "∑": "sum", - "¤": "currency" - }, - "es": { - "∆": "delta", - "∞": "infinito", - "♥": "amor", - "&": "y", - "|": "u", - "<": "menos que", - ">": "mas que", - "∑": "suma de los", - "¤": "moneda" - }, - "fa": { - "∆": "delta", - "∞": "bi-nahayat", - "♥": "eshgh", - "&": "va", - "|": "ya", - "<": "kamtar-az", - ">": "bishtar-az", - "∑": "majmooe", - "¤": "vahed" - }, - "fi": { - "∆": "delta", - "∞": "aarettomyys", - "♥": "rakkaus", - "&": "ja", - "|": "tai", - "<": "pienempi kuin", - ">": "suurempi kuin", - "∑": "summa", - "¤": "valuutta" - }, - "fr": { - "∆": "delta", - "∞": "infiniment", - "♥": "Amour", - "&": "et", - "|": "ou", - "<": "moins que", - ">": "superieure a", - "∑": "somme des", - "¤": "monnaie" - }, - "ge": { - "∆": "delta", - "∞": "usasruloba", - "♥": "siqvaruli", - "&": "da", - "|": "an", - "<": "naklebi", - ">": "meti", - "∑": "jami", - "¤": "valuta" - }, - "gr": {}, - "hu": { - "∆": "delta", - "∞": "vegtelen", - "♥": "szerelem", - "&": "es", - "|": "vagy", - "<": "kisebb mint", - ">": "nagyobb mint", - "∑": "szumma", - "¤": "penznem" - }, - "it": { - "∆": "delta", - "∞": "infinito", - "♥": "amore", - "&": "e", - "|": "o", - "<": "minore di", - ">": "maggiore di", - "∑": "somma", - "¤": "moneta" - }, - "lt": { - "∆": "delta", - "∞": "begalybe", - "♥": "meile", - "&": "ir", - "|": "ar", - "<": "maziau nei", - ">": "daugiau nei", - "∑": "suma", - "¤": "valiuta" - }, - "lv": { - "∆": "delta", - "∞": "bezgaliba", - "♥": "milestiba", - "&": "un", - "|": "vai", - "<": "mazak neka", - ">": "lielaks neka", - "∑": "summa", - "¤": "valuta" - }, - "my": { - "∆": "kwahkhyaet", - "∞": "asaonasme", - "♥": "akhyait", - "&": "nhin", - "|": "tho", - "<": "ngethaw", - ">": "kyithaw", - "∑": "paungld", - "¤": "ngwekye" - }, - "mk": {}, - "nl": { - "∆": "delta", - "∞": "oneindig", - "♥": "liefde", - "&": "en", - "|": "of", - "<": "kleiner dan", - ">": "groter dan", - "∑": "som", - "¤": "valuta" - }, - "pl": { - "∆": "delta", - "∞": "nieskonczonosc", - "♥": "milosc", - "&": "i", - "|": "lub", - "<": "mniejsze niz", - ">": "wieksze niz", - "∑": "suma", - "¤": "waluta" - }, - "pt": { - "∆": "delta", - "∞": "infinito", - "♥": "amor", - "&": "e", - "|": "ou", - "<": "menor que", - ">": "maior que", - "∑": "soma", - "¤": "moeda" - }, - "ro": { - "∆": "delta", - "∞": "infinit", - "♥": "dragoste", - "&": "si", - "|": "sau", - "<": "mai mic ca", - ">": "mai mare ca", - "∑": "suma", - "¤": "valuta" - }, - "ru": { - "∆": "delta", - "∞": "beskonechno", - "♥": "lubov", - "&": "i", - "|": "ili", - "<": "menshe", - ">": "bolshe", - "∑": "summa", - "¤": "valjuta" - }, - "sk": { - "∆": "delta", - "∞": "nekonecno", - "♥": "laska", - "&": "a", - "|": "alebo", - "<": "menej ako", - ">": "viac ako", - "∑": "sucet", - "¤": "mena" - }, - "sr": {}, - "tr": { - "∆": "delta", - "∞": "sonsuzluk", - "♥": "ask", - "&": "ve", - "|": "veya", - "<": "kucuktur", - ">": "buyuktur", - "∑": "toplam", - "¤": "para birimi" - }, - "uk": { - "∆": "delta", - "∞": "bezkinechnist", - "♥": "lubov", - "&": "i", - "|": "abo", - "<": "menshe", - ">": "bilshe", - "∑": "suma", - "¤": "valjuta" - }, - "vn": { - "∆": "delta", - "∞": "vo cuc", - "♥": "yeu", - "&": "va", - "|": "hoac", - "<": "nho hon", - ">": "lon hon", - "∑": "tong", - "¤": "tien te" - } - }; - var uricChars = [";", "?", ":", "@", "&", "=", "+", "$", ",", "/"].join(""); - var uricNoSlashChars = [";", "?", ":", "@", "&", "=", "+", "$", ","].join(""); - var markChars = [".", "!", "~", "*", "'", "(", ")"].join(""); - var getSlug = function getSlug2(input, opts) { - var separator = "-"; - var result = ""; - var diatricString = ""; - var convertSymbols = true; - var customReplacements = {}; - var maintainCase; - var titleCase; - var truncate; - var uricFlag; - var uricNoSlashFlag; - var markFlag; - var symbol; - var langChar; - var lucky; - var i; - var ch; - var l; - var lastCharWasSymbol; - var lastCharWasDiatric; - var allowedChars = ""; - if (typeof input !== "string") { - return ""; - } - if (typeof opts === "string") { - separator = opts; - } - symbol = symbolMap.en; - langChar = langCharMap.en; - if (typeof opts === "object") { - maintainCase = opts.maintainCase || false; - customReplacements = opts.custom && typeof opts.custom === "object" ? opts.custom : customReplacements; - truncate = +opts.truncate > 1 && opts.truncate || false; - uricFlag = opts.uric || false; - uricNoSlashFlag = opts.uricNoSlash || false; - markFlag = opts.mark || false; - convertSymbols = opts.symbols === false || opts.lang === false ? false : true; - separator = opts.separator || separator; - if (uricFlag) { - allowedChars += uricChars; - } - if (uricNoSlashFlag) { - allowedChars += uricNoSlashChars; - } - if (markFlag) { - allowedChars += markChars; - } - symbol = opts.lang && symbolMap[opts.lang] && convertSymbols ? symbolMap[opts.lang] : convertSymbols ? symbolMap.en : {}; - langChar = opts.lang && langCharMap[opts.lang] ? langCharMap[opts.lang] : opts.lang === false || opts.lang === true ? {} : langCharMap.en; - if (opts.titleCase && typeof opts.titleCase.length === "number" && Array.prototype.toString.call(opts.titleCase)) { - opts.titleCase.forEach(function(v) { - customReplacements[v + ""] = v + ""; - }); - titleCase = true; - } else { - titleCase = !!opts.titleCase; - } - if (opts.custom && typeof opts.custom.length === "number" && Array.prototype.toString.call(opts.custom)) { - opts.custom.forEach(function(v) { - customReplacements[v + ""] = v + ""; - }); - } - Object.keys(customReplacements).forEach(function(v) { - var r; - if (v.length > 1) { - r = new RegExp("\\b" + escapeChars(v) + "\\b", "gi"); - } else { - r = new RegExp(escapeChars(v), "gi"); - } - input = input.replace(r, customReplacements[v]); - }); - for (ch in customReplacements) { - allowedChars += ch; - } - } - allowedChars += separator; - allowedChars = escapeChars(allowedChars); - input = input.replace(/(^\s+|\s+$)/g, ""); - lastCharWasSymbol = false; - lastCharWasDiatric = false; - for (i = 0, l = input.length; i < l; i++) { - ch = input[i]; - if (isReplacedCustomChar(ch, customReplacements)) { - lastCharWasSymbol = false; - } else if (langChar[ch]) { - ch = lastCharWasSymbol && langChar[ch].match(/[A-Za-z0-9]/) ? " " + langChar[ch] : langChar[ch]; - lastCharWasSymbol = false; - } else if (ch in charMap) { - if (i + 1 < l && lookAheadCharArray.indexOf(input[i + 1]) >= 0) { - diatricString += ch; - ch = ""; - } else if (lastCharWasDiatric === true) { - ch = diatricMap[diatricString] + charMap[ch]; - diatricString = ""; - } else { - ch = lastCharWasSymbol && charMap[ch].match(/[A-Za-z0-9]/) ? " " + charMap[ch] : charMap[ch]; - } - lastCharWasSymbol = false; - lastCharWasDiatric = false; - } else if (ch in diatricMap) { - diatricString += ch; - ch = ""; - if (i === l - 1) { - ch = diatricMap[diatricString]; - } - lastCharWasDiatric = true; - } else if ( - // process symbol chars - symbol[ch] && !(uricFlag && uricChars.indexOf(ch) !== -1) && !(uricNoSlashFlag && uricNoSlashChars.indexOf(ch) !== -1) - ) { - ch = lastCharWasSymbol || result.substr(-1).match(/[A-Za-z0-9]/) ? separator + symbol[ch] : symbol[ch]; - ch += input[i + 1] !== void 0 && input[i + 1].match(/[A-Za-z0-9]/) ? separator : ""; - lastCharWasSymbol = true; - } else { - if (lastCharWasDiatric === true) { - ch = diatricMap[diatricString] + ch; - diatricString = ""; - lastCharWasDiatric = false; - } else if (lastCharWasSymbol && (/[A-Za-z0-9]/.test(ch) || result.substr(-1).match(/A-Za-z0-9]/))) { - ch = " " + ch; - } - lastCharWasSymbol = false; - } - result += ch.replace(new RegExp("[^\\w\\s" + allowedChars + "_-]", "g"), separator); - } - if (titleCase) { - result = result.replace(/(\w)(\S*)/g, function(_, i2, r) { - var j = i2.toUpperCase() + (r !== null ? r : ""); - return Object.keys(customReplacements).indexOf(j.toLowerCase()) < 0 ? j : j.toLowerCase(); - }); - } - result = result.replace(/\s+/g, separator).replace(new RegExp("\\" + separator + "+", "g"), separator).replace(new RegExp("(^\\" + separator + "+|\\" + separator + "+$)", "g"), ""); - if (truncate && result.length > truncate) { - lucky = result.charAt(truncate) === separator; - result = result.slice(0, truncate); - if (!lucky) { - result = result.slice(0, result.lastIndexOf(separator)); - } - } - if (!maintainCase && !titleCase) { - result = result.toLowerCase(); - } - return result; - }; - var createSlug = function createSlug2(opts) { - return function getSlugWithConfig(input) { - return getSlug(input, opts); - }; - }; - var escapeChars = function escapeChars2(input) { - return input.replace(/[-\\^$*+?.()|[\]{}\/]/g, "\\$&"); - }; - var isReplacedCustomChar = function(ch, customReplacements) { - for (var c in customReplacements) { - if (customReplacements[c] === ch) { - return true; - } - } - }; - if (typeof module !== "undefined" && module.exports) { - module.exports = getSlug; - module.exports.createSlug = createSlug; - } else if (typeof define !== "undefined" && define.amd) { - define([], function() { - return getSlug; - }); - } else { - try { - if (root.getSlug || root.createSlug) { - throw "speakingurl: globals exists /(getSlug|createSlug)/"; - } else { - root.getSlug = getSlug; - root.createSlug = createSlug; - } - } catch (e) { - } - } - })(exports); - } -}); -var require_speakingurl2 = __commonJS2({ - "../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/index.js"(exports, module) { - "use strict"; - init_esm_shims2(); - module.exports = require_speakingurl(); - } -}); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); +var __toESM2 = (mod, isNodeMode, target$1) => (target$1 = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(isNodeMode || !mod || !mod.__esModule ? __defProp2(target$1, "default", { + value: mod, + enumerable: true +}) : target$1, mod)); function getComponentTypeName(options) { - var _a25; const name = options.name || options._componentTag || options.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__ || options.__name; - if (name === "index" && ((_a25 = options.__file) == null ? void 0 : _a25.endsWith("index.vue"))) { - return ""; - } + if (name === "index" && options.__file?.endsWith("index.vue")) return ""; return name; } function getComponentFileName(options) { const file = options.__file; - if (file) - return classify(basename(file, ".vue")); + if (file) return classify(basename(file, ".vue")); } function saveComponentGussedName(instance, name) { instance.type.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__ = name; return name; } function getAppRecord(instance) { - if (instance.__VUE_DEVTOOLS_NEXT_APP_RECORD__) - return instance.__VUE_DEVTOOLS_NEXT_APP_RECORD__; - else if (instance.root) - return instance.appContext.app.__VUE_DEVTOOLS_NEXT_APP_RECORD__; + if (instance.__VUE_DEVTOOLS_NEXT_APP_RECORD__) return instance.__VUE_DEVTOOLS_NEXT_APP_RECORD__; + else if (instance.root) return instance.appContext.app.__VUE_DEVTOOLS_NEXT_APP_RECORD__; } function isFragment(instance) { - var _a25, _b25; - const subTreeType = (_a25 = instance.subTree) == null ? void 0 : _a25.type; + const subTreeType = instance.subTree?.type; const appRecord = getAppRecord(instance); - if (appRecord) { - return ((_b25 = appRecord == null ? void 0 : appRecord.types) == null ? void 0 : _b25.Fragment) === subTreeType; - } + if (appRecord) return appRecord?.types?.Fragment === subTreeType; return false; } function getInstanceName(instance) { - var _a25, _b25, _c; - const name = getComponentTypeName((instance == null ? void 0 : instance.type) || {}); - if (name) - return name; - if ((instance == null ? void 0 : instance.root) === instance) - return "Root"; - for (const key in (_b25 = (_a25 = instance.parent) == null ? void 0 : _a25.type) == null ? void 0 : _b25.components) { - if (instance.parent.type.components[key] === (instance == null ? void 0 : instance.type)) - return saveComponentGussedName(instance, key); - } - for (const key in (_c = instance.appContext) == null ? void 0 : _c.components) { - if (instance.appContext.components[key] === (instance == null ? void 0 : instance.type)) - return saveComponentGussedName(instance, key); - } - const fileName = getComponentFileName((instance == null ? void 0 : instance.type) || {}); - if (fileName) - return fileName; + const name = getComponentTypeName(instance?.type || {}); + if (name) return name; + if (instance?.root === instance) return "Root"; + for (const key in instance.parent?.type?.components) if (instance.parent.type.components[key] === instance?.type) return saveComponentGussedName(instance, key); + for (const key in instance.appContext?.components) if (instance.appContext.components[key] === instance?.type) return saveComponentGussedName(instance, key); + const fileName = getComponentFileName(instance?.type || {}); + if (fileName) return fileName; return "Anonymous Component"; } function getUniqueComponentId(instance) { - var _a25, _b25, _c; - const appId = (_c = (_b25 = (_a25 = instance == null ? void 0 : instance.appContext) == null ? void 0 : _a25.app) == null ? void 0 : _b25.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__) != null ? _c : 0; - const instanceId = instance === (instance == null ? void 0 : instance.root) ? "root" : instance.uid; - return `${appId}:${instanceId}`; + return `${instance?.appContext?.app?.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__ ?? 0}:${instance === instance?.root ? "root" : instance.uid}`; } function getComponentInstance(appRecord, instanceId) { instanceId = instanceId || `${appRecord.id}:root`; - const instance = appRecord.instanceMap.get(instanceId); - return instance || appRecord.instanceMap.get(":root"); + return appRecord.instanceMap.get(instanceId) || appRecord.instanceMap.get(":root"); } function createRect() { const rect = { @@ -2180,41 +545,31 @@ function createRect() { } var range; function getTextRect(node) { - if (!range) - range = document.createRange(); + if (!range) range = document.createRange(); range.selectNode(node); return range.getBoundingClientRect(); } function getFragmentRect(vnode) { const rect = createRect(); - if (!vnode.children) - return rect; + if (!vnode.children) return rect; for (let i = 0, l = vnode.children.length; i < l; i++) { const childVnode = vnode.children[i]; let childRect; - if (childVnode.component) { - childRect = getComponentBoundingRect(childVnode.component); - } else if (childVnode.el) { + if (childVnode.component) childRect = getComponentBoundingRect(childVnode.component); + else if (childVnode.el) { const el = childVnode.el; - if (el.nodeType === 1 || el.getBoundingClientRect) - childRect = el.getBoundingClientRect(); - else if (el.nodeType === 3 && el.data.trim()) - childRect = getTextRect(el); + if (el.nodeType === 1 || el.getBoundingClientRect) childRect = el.getBoundingClientRect(); + else if (el.nodeType === 3 && el.data.trim()) childRect = getTextRect(el); } - if (childRect) - mergeRects(rect, childRect); + if (childRect) mergeRects(rect, childRect); } return rect; } function mergeRects(a, b) { - if (!a.top || b.top < a.top) - a.top = b.top; - if (!a.bottom || b.bottom > a.bottom) - a.bottom = b.bottom; - if (!a.left || b.left < a.left) - a.left = b.left; - if (!a.right || b.right > a.right) - a.right = b.right; + if (!a.top || b.top < a.top) a.top = b.top; + if (!a.bottom || b.bottom > a.bottom) a.bottom = b.bottom; + if (!a.left || b.left < a.left) a.left = b.left; + if (!a.right || b.right > a.right) a.right = b.right; return a; } var DEFAULT_RECT = { @@ -2227,35 +582,23 @@ var DEFAULT_RECT = { }; function getComponentBoundingRect(instance) { const el = instance.subTree.el; - if (typeof window === "undefined") { - return DEFAULT_RECT; - } - if (isFragment(instance)) - return getFragmentRect(instance.subTree); - else if ((el == null ? void 0 : el.nodeType) === 1) - return el == null ? void 0 : el.getBoundingClientRect(); - else if (instance.subTree.component) - return getComponentBoundingRect(instance.subTree.component); - else - return DEFAULT_RECT; + if (typeof window === "undefined") return DEFAULT_RECT; + if (isFragment(instance)) return getFragmentRect(instance.subTree); + else if (el?.nodeType === 1) return el?.getBoundingClientRect(); + else if (instance.subTree.component) return getComponentBoundingRect(instance.subTree.component); + else return DEFAULT_RECT; } -init_esm_shims2(); function getRootElementsFromComponentInstance(instance) { - if (isFragment(instance)) - return getFragmentRootElements(instance.subTree); - if (!instance.subTree) - return []; + if (isFragment(instance)) return getFragmentRootElements(instance.subTree); + if (!instance.subTree) return []; return [instance.subTree.el]; } function getFragmentRootElements(vnode) { - if (!vnode.children) - return []; + if (!vnode.children) return []; const list = []; vnode.children.forEach((childVnode) => { - if (childVnode.component) - list.push(...getRootElementsFromComponentInstance(childVnode.component)); - else if (childVnode == null ? void 0 : childVnode.el) - list.push(childVnode.el); + if (childVnode.component) list.push(...getRootElementsFromComponentInstance(childVnode.component)); + else if (childVnode?.el) list.push(childVnode.el); }); return list; } @@ -2315,9 +658,8 @@ function getStyles(bounds) { }; } function create(options) { - var _a25; const containerEl = document.createElement("div"); - containerEl.id = (_a25 = options.elementId) != null ? _a25 : CONTAINER_ELEMENT_ID; + containerEl.id = options.elementId ?? CONTAINER_ELEMENT_ID; Object.assign(containerEl.style, { ...containerStyles, ...getStyles(options.bounds), @@ -2352,39 +694,44 @@ function update(options) { ...containerStyles, ...getStyles(options.bounds) }); - Object.assign(cardEl.style, { - top: options.bounds.top < 35 ? 0 : "-35px" - }); + Object.assign(cardEl.style, { top: options.bounds.top < 35 ? 0 : "-35px" }); nameEl.innerHTML = `<${options.name}>  `; indicatorEl.innerHTML = `${Math.round(options.bounds.width * 100) / 100} x ${Math.round(options.bounds.height * 100) / 100}`; } } function highlight(instance) { const bounds = getComponentBoundingRect(instance); - if (!bounds.width && !bounds.height) - return; + if (!bounds.width && !bounds.height) return; const name = getInstanceName(instance); - const container = getContainerElement(); - container ? update({ bounds, name }) : create({ bounds, name }); + getContainerElement() ? update({ + bounds, + name + }) : create({ + bounds, + name + }); } function unhighlight() { const el = getContainerElement(); - if (el) - el.style.display = "none"; + if (el) el.style.display = "none"; } var inspectInstance = null; function inspectFn(e) { - const target22 = e.target; - if (target22) { - const instance = target22.__vueParentComponent; + const target$1 = e.target; + if (target$1) { + const instance = target$1.__vueParentComponent; if (instance) { inspectInstance = instance; - const el = instance.vnode.el; - if (el) { + if (instance.vnode.el) { const bounds = getComponentBoundingRect(instance); const name = getInstanceName(instance); - const container = getContainerElement(); - container ? update({ bounds, name }) : create({ bounds, name }); + getContainerElement() ? update({ + bounds, + name + }) : create({ + bounds, + name + }); } } } @@ -2392,10 +739,7 @@ function inspectFn(e) { function selectComponentFn(e, cb) { e.preventDefault(); e.stopPropagation(); - if (inspectInstance) { - const uniqueComponentId = getUniqueComponentId(inspectInstance); - cb(uniqueComponentId); - } + if (inspectInstance) cb(getUniqueComponentId(inspectInstance)); } var inspectComponentHighLighterSelectFn = null; function cancelInspectComponentHighLighter() { @@ -2415,8 +759,7 @@ function inspectComponentHighLighter() { inspectComponentHighLighterSelectFn = null; window.removeEventListener("mouseover", inspectFn); const el = getContainerElement(); - if (el) - el.style.display = "none"; + if (el) el.style.display = "none"; resolve(JSON.stringify({ id })); }); } @@ -2428,11 +771,8 @@ function scrollToComponent(options) { const instance = getComponentInstance(activeAppRecord.value, options.id); if (instance) { const [el] = getRootElementsFromComponentInstance(instance); - if (typeof el.scrollIntoView === "function") { - el.scrollIntoView({ - behavior: "smooth" - }); - } else { + if (typeof el.scrollIntoView === "function") el.scrollIntoView({ behavior: "smooth" }); + else { const bounds = getComponentBoundingRect(instance); const scrollTarget = document.createElement("div"); const styles = { @@ -2441,9 +781,7 @@ function scrollToComponent(options) { }; Object.assign(scrollTarget.style, styles); document.body.appendChild(scrollTarget); - scrollTarget.scrollIntoView({ - behavior: "smooth" - }); + scrollTarget.scrollIntoView({ behavior: "smooth" }); setTimeout(() => { document.body.removeChild(scrollTarget); }, 2e3); @@ -2452,20 +790,24 @@ function scrollToComponent(options) { const bounds = getComponentBoundingRect(instance); if (bounds.width || bounds.height) { const name = getInstanceName(instance); - const el2 = getContainerElement(); - el2 ? update({ ...options, name, bounds }) : create({ ...options, name, bounds }); + const el$1 = getContainerElement(); + el$1 ? update({ + ...options, + name, + bounds + }) : create({ + ...options, + name, + bounds + }); setTimeout(() => { - if (el2) - el2.style.display = "none"; + if (el$1) el$1.style.display = "none"; }, 1500); } }, 1200); } } -init_esm_shims2(); -var _a2; -var _b; -(_b = (_a2 = target).__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__) != null ? _b : _a2.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__ = true; +target.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__ ??= true; function waitForInspectorInit(cb) { let total = 0; const timer = setInterval(() => { @@ -2474,9 +816,7 @@ function waitForInspectorInit(cb) { total += 30; cb(); } - if (total >= /* 5s */ - 5e3) - clearInterval(timer); + if (total >= 5e3) clearInterval(timer); }, 30); } function setupInspector() { @@ -2493,44 +833,33 @@ function getComponentInspector() { setupInspector(); resolve(target.__VUE_INSPECTOR__); } - if (!target.__VUE_INSPECTOR__) { - waitForInspectorInit(() => { - setup(); - }); - } else { + if (!target.__VUE_INSPECTOR__) waitForInspectorInit(() => { setup(); - } + }); + else setup(); }); } -init_esm_shims2(); -init_esm_shims2(); +var ReactiveFlags = (function(ReactiveFlags$1) { + ReactiveFlags$1["SKIP"] = "__v_skip"; + ReactiveFlags$1["IS_REACTIVE"] = "__v_isReactive"; + ReactiveFlags$1["IS_READONLY"] = "__v_isReadonly"; + ReactiveFlags$1["IS_SHALLOW"] = "__v_isShallow"; + ReactiveFlags$1["RAW"] = "__v_raw"; + return ReactiveFlags$1; +})({}); function isReadonly(value) { - return !!(value && value[ - "__v_isReadonly" - /* IS_READONLY */ - ]); + return !!(value && value[ReactiveFlags.IS_READONLY]); } -function isReactive(value) { - if (isReadonly(value)) { - return isReactive(value[ - "__v_raw" - /* RAW */ - ]); - } - return !!(value && value[ - "__v_isReactive" - /* IS_REACTIVE */ - ]); +function isReactive$1(value) { + if (isReadonly(value)) return isReactive$1(value[ReactiveFlags.RAW]); + return !!(value && value[ReactiveFlags.IS_REACTIVE]); } -function isRef(r) { +function isRef$1(r) { return !!(r && r.__v_isRef === true); } -function toRaw(observed) { - const raw = observed && observed[ - "__v_raw" - /* RAW */ - ]; - return raw ? toRaw(raw) : observed; +function toRaw$1(observed) { + const raw = observed && observed[ReactiveFlags.RAW]; + return raw ? toRaw$1(raw) : observed; } var Fragment = Symbol.for("v-fgt"); var StateEditor = class { @@ -2539,87 +868,60 @@ var StateEditor = class { } set(object, path, value, cb) { const sections = Array.isArray(path) ? path : path.split("."); - const markRef = false; while (sections.length > 1) { const section = sections.shift(); - if (object instanceof Map) - object = object.get(section); - else if (object instanceof Set) - object = Array.from(object.values())[section]; + if (object instanceof Map) object = object.get(section); + else if (object instanceof Set) object = Array.from(object.values())[section]; else object = object[section]; - if (this.refEditor.isRef(object)) - object = this.refEditor.get(object); + if (this.refEditor.isRef(object)) object = this.refEditor.get(object); } const field = sections[0]; const item = this.refEditor.get(object)[field]; - if (cb) { - cb(object, field, value); - } else { - if (this.refEditor.isRef(item)) - this.refEditor.set(item, value); - else if (markRef) - object[field] = value; - else - object[field] = value; - } + if (cb) cb(object, field, value); + else if (this.refEditor.isRef(item)) this.refEditor.set(item, value); + else object[field] = value; } get(object, path) { const sections = Array.isArray(path) ? path : path.split("."); for (let i = 0; i < sections.length; i++) { - if (object instanceof Map) - object = object.get(sections[i]); - else - object = object[sections[i]]; - if (this.refEditor.isRef(object)) - object = this.refEditor.get(object); - if (!object) - return void 0; + if (object instanceof Map) object = object.get(sections[i]); + else object = object[sections[i]]; + if (this.refEditor.isRef(object)) object = this.refEditor.get(object); + if (!object) return void 0; } return object; } has(object, path, parent = false) { - if (typeof object === "undefined") - return false; + if (typeof object === "undefined") return false; const sections = Array.isArray(path) ? path.slice() : path.split("."); const size = !parent ? 1 : 2; while (object && sections.length > size) { const section = sections.shift(); object = object[section]; - if (this.refEditor.isRef(object)) - object = this.refEditor.get(object); + if (this.refEditor.isRef(object)) object = this.refEditor.get(object); } return object != null && Object.prototype.hasOwnProperty.call(object, sections[0]); } createDefaultSetCallback(state) { return (object, field, value) => { - if (state.remove || state.newKey) { - if (Array.isArray(object)) - object.splice(field, 1); - else if (toRaw(object) instanceof Map) - object.delete(field); - else if (toRaw(object) instanceof Set) - object.delete(Array.from(object.values())[field]); - else Reflect.deleteProperty(object, field); - } + if (state.remove || state.newKey) if (Array.isArray(object)) object.splice(field, 1); + else if (toRaw$1(object) instanceof Map) object.delete(field); + else if (toRaw$1(object) instanceof Set) object.delete(Array.from(object.values())[field]); + else Reflect.deleteProperty(object, field); if (!state.remove) { - const target22 = object[state.newKey || field]; - if (this.refEditor.isRef(target22)) - this.refEditor.set(target22, value); - else if (toRaw(object) instanceof Map) - object.set(state.newKey || field, value); - else if (toRaw(object) instanceof Set) - object.add(value); - else - object[state.newKey || field] = value; + const target$1 = object[state.newKey || field]; + if (this.refEditor.isRef(target$1)) this.refEditor.set(target$1, value); + else if (toRaw$1(object) instanceof Map) object.set(state.newKey || field, value); + else if (toRaw$1(object) instanceof Set) object.add(value); + else object[state.newKey || field] = value; } }; } }; var RefStateEditor = class { set(ref, value) { - if (isRef(ref)) { - ref.value = value; - } else { + if (isRef$1(ref)) ref.value = value; + else { if (ref instanceof Set && Array.isArray(value)) { ref.clear(); value.forEach((v) => ref.add(v)); @@ -2627,12 +929,12 @@ var RefStateEditor = class { } const currentKeys = Object.keys(value); if (ref instanceof Map) { - const previousKeysSet2 = new Set(ref.keys()); + const previousKeysSet$1 = new Set(ref.keys()); currentKeys.forEach((key) => { ref.set(key, Reflect.get(value, key)); - previousKeysSet2.delete(key); + previousKeysSet$1.delete(key); }); - previousKeysSet2.forEach((key) => ref.delete(key)); + previousKeysSet$1.forEach((key) => ref.delete(key)); return; } const previousKeysSet = new Set(Object.keys(ref)); @@ -2644,29 +946,24 @@ var RefStateEditor = class { } } get(ref) { - return isRef(ref) ? ref.value : ref; + return isRef$1(ref) ? ref.value : ref; } isRef(ref) { - return isRef(ref) || isReactive(ref); + return isRef$1(ref) || isReactive$1(ref); } }; var stateEditor = new StateEditor(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); var TIMELINE_LAYERS_STATE_STORAGE_ID = "__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS_STATE__"; function getTimelineLayersStateFromStorage() { - if (!isBrowser || typeof localStorage === "undefined" || localStorage === null) { - return { - recordingState: false, - mouseEventEnabled: false, - keyboardEventEnabled: false, - componentEventEnabled: false, - performanceEventEnabled: false, - selected: "" - }; - } - const state = localStorage.getItem(TIMELINE_LAYERS_STATE_STORAGE_ID); + if (typeof window === "undefined" || !isBrowser || typeof localStorage === "undefined" || localStorage === null) return { + recordingState: false, + mouseEventEnabled: false, + keyboardEventEnabled: false, + componentEventEnabled: false, + performanceEventEnabled: false, + selected: "" + }; + const state = typeof localStorage.getItem !== "undefined" ? localStorage.getItem(TIMELINE_LAYERS_STATE_STORAGE_ID) : null; return state ? JSON.parse(state) : { recordingState: false, mouseEventEnabled: false, @@ -2676,17 +973,10 @@ function getTimelineLayersStateFromStorage() { selected: "" }; } -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -var _a22; -var _b2; -(_b2 = (_a22 = target).__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS) != null ? _b2 : _a22.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS = []; -var devtoolsTimelineLayers = new Proxy(target.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS, { - get(target22, prop, receiver) { - return Reflect.get(target22, prop, receiver); - } -}); +target.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS ??= []; +var devtoolsTimelineLayers = new Proxy(target.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS, { get(target$1, prop, receiver) { + return Reflect.get(target$1, prop, receiver); +} }); function addTimelineLayer(options, descriptor) { devtoolsState.timelineLayersState[descriptor.id] = false; devtoolsTimelineLayers.push({ @@ -2695,24 +985,19 @@ function addTimelineLayer(options, descriptor) { appRecord: getAppRecord(descriptor.app) }); } -var _a3; -var _b3; -(_b3 = (_a3 = target).__VUE_DEVTOOLS_KIT_INSPECTOR__) != null ? _b3 : _a3.__VUE_DEVTOOLS_KIT_INSPECTOR__ = []; -var devtoolsInspector = new Proxy(target.__VUE_DEVTOOLS_KIT_INSPECTOR__, { - get(target22, prop, receiver) { - return Reflect.get(target22, prop, receiver); - } -}); +target.__VUE_DEVTOOLS_KIT_INSPECTOR__ ??= []; +var devtoolsInspector = new Proxy(target.__VUE_DEVTOOLS_KIT_INSPECTOR__, { get(target$1, prop, receiver) { + return Reflect.get(target$1, prop, receiver); +} }); var callInspectorUpdatedHook = debounce(() => { - devtoolsContext.hooks.callHook("sendInspectorToClient", getActiveInspectors()); + devtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.SEND_INSPECTOR_TO_CLIENT, getActiveInspectors()); }); function addInspector(inspector, descriptor) { - var _a25, _b25; devtoolsInspector.push({ options: inspector, descriptor, - treeFilterPlaceholder: (_a25 = inspector.treeFilterPlaceholder) != null ? _a25 : "Search tree...", - stateFilterPlaceholder: (_b25 = inspector.stateFilterPlaceholder) != null ? _b25 : "Search state...", + treeFilterPlaceholder: inspector.treeFilterPlaceholder ?? "Search tree...", + stateFilterPlaceholder: inspector.stateFilterPlaceholder ?? "Search state...", treeFilter: "", selectedNodeId: "", appRecord: getAppRecord(descriptor.app) @@ -2721,14 +1006,13 @@ function addInspector(inspector, descriptor) { } function getActiveInspectors() { return devtoolsInspector.filter((inspector) => inspector.descriptor.app === activeAppRecord.value.app).filter((inspector) => inspector.descriptor.id !== "components").map((inspector) => { - var _a25; const descriptor = inspector.descriptor; const options = inspector.options; return { id: options.id, label: options.label, logo: descriptor.logo, - icon: `custom-ic-baseline-${(_a25 = options == null ? void 0 : options.icon) == null ? void 0 : _a25.replace(/_/g, "-")}`, + icon: `custom-ic-baseline-${options?.icon?.replace(/_/g, "-")}`, packageName: descriptor.packageName, homepage: descriptor.homepage, pluginId: descriptor.id @@ -2738,184 +1022,141 @@ function getActiveInspectors() { function getInspector(id, app) { return devtoolsInspector.find((inspector) => inspector.options.id === id && (app ? inspector.descriptor.app === app : true)); } -var DevToolsV6PluginAPIHookKeys = ((DevToolsV6PluginAPIHookKeys2) => { - DevToolsV6PluginAPIHookKeys2["VISIT_COMPONENT_TREE"] = "visitComponentTree"; - DevToolsV6PluginAPIHookKeys2["INSPECT_COMPONENT"] = "inspectComponent"; - DevToolsV6PluginAPIHookKeys2["EDIT_COMPONENT_STATE"] = "editComponentState"; - DevToolsV6PluginAPIHookKeys2["GET_INSPECTOR_TREE"] = "getInspectorTree"; - DevToolsV6PluginAPIHookKeys2["GET_INSPECTOR_STATE"] = "getInspectorState"; - DevToolsV6PluginAPIHookKeys2["EDIT_INSPECTOR_STATE"] = "editInspectorState"; - DevToolsV6PluginAPIHookKeys2["INSPECT_TIMELINE_EVENT"] = "inspectTimelineEvent"; - DevToolsV6PluginAPIHookKeys2["TIMELINE_CLEARED"] = "timelineCleared"; - DevToolsV6PluginAPIHookKeys2["SET_PLUGIN_SETTINGS"] = "setPluginSettings"; - return DevToolsV6PluginAPIHookKeys2; -})(DevToolsV6PluginAPIHookKeys || {}); -var DevToolsContextHookKeys = ((DevToolsContextHookKeys2) => { - DevToolsContextHookKeys2["ADD_INSPECTOR"] = "addInspector"; - DevToolsContextHookKeys2["SEND_INSPECTOR_TREE"] = "sendInspectorTree"; - DevToolsContextHookKeys2["SEND_INSPECTOR_STATE"] = "sendInspectorState"; - DevToolsContextHookKeys2["CUSTOM_INSPECTOR_SELECT_NODE"] = "customInspectorSelectNode"; - DevToolsContextHookKeys2["TIMELINE_LAYER_ADDED"] = "timelineLayerAdded"; - DevToolsContextHookKeys2["TIMELINE_EVENT_ADDED"] = "timelineEventAdded"; - DevToolsContextHookKeys2["GET_COMPONENT_INSTANCES"] = "getComponentInstances"; - DevToolsContextHookKeys2["GET_COMPONENT_BOUNDS"] = "getComponentBounds"; - DevToolsContextHookKeys2["GET_COMPONENT_NAME"] = "getComponentName"; - DevToolsContextHookKeys2["COMPONENT_HIGHLIGHT"] = "componentHighlight"; - DevToolsContextHookKeys2["COMPONENT_UNHIGHLIGHT"] = "componentUnhighlight"; - return DevToolsContextHookKeys2; -})(DevToolsContextHookKeys || {}); -var DevToolsMessagingHookKeys = ((DevToolsMessagingHookKeys2) => { - DevToolsMessagingHookKeys2["SEND_INSPECTOR_TREE_TO_CLIENT"] = "sendInspectorTreeToClient"; - DevToolsMessagingHookKeys2["SEND_INSPECTOR_STATE_TO_CLIENT"] = "sendInspectorStateToClient"; - DevToolsMessagingHookKeys2["SEND_TIMELINE_EVENT_TO_CLIENT"] = "sendTimelineEventToClient"; - DevToolsMessagingHookKeys2["SEND_INSPECTOR_TO_CLIENT"] = "sendInspectorToClient"; - DevToolsMessagingHookKeys2["SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT"] = "sendActiveAppUpdatedToClient"; - DevToolsMessagingHookKeys2["DEVTOOLS_STATE_UPDATED"] = "devtoolsStateUpdated"; - DevToolsMessagingHookKeys2["DEVTOOLS_CONNECTED_UPDATED"] = "devtoolsConnectedUpdated"; - DevToolsMessagingHookKeys2["ROUTER_INFO_UPDATED"] = "routerInfoUpdated"; - return DevToolsMessagingHookKeys2; -})(DevToolsMessagingHookKeys || {}); +var DevToolsV6PluginAPIHookKeys = (function(DevToolsV6PluginAPIHookKeys$1) { + DevToolsV6PluginAPIHookKeys$1["VISIT_COMPONENT_TREE"] = "visitComponentTree"; + DevToolsV6PluginAPIHookKeys$1["INSPECT_COMPONENT"] = "inspectComponent"; + DevToolsV6PluginAPIHookKeys$1["EDIT_COMPONENT_STATE"] = "editComponentState"; + DevToolsV6PluginAPIHookKeys$1["GET_INSPECTOR_TREE"] = "getInspectorTree"; + DevToolsV6PluginAPIHookKeys$1["GET_INSPECTOR_STATE"] = "getInspectorState"; + DevToolsV6PluginAPIHookKeys$1["EDIT_INSPECTOR_STATE"] = "editInspectorState"; + DevToolsV6PluginAPIHookKeys$1["INSPECT_TIMELINE_EVENT"] = "inspectTimelineEvent"; + DevToolsV6PluginAPIHookKeys$1["TIMELINE_CLEARED"] = "timelineCleared"; + DevToolsV6PluginAPIHookKeys$1["SET_PLUGIN_SETTINGS"] = "setPluginSettings"; + return DevToolsV6PluginAPIHookKeys$1; +})({}); +var DevToolsContextHookKeys = (function(DevToolsContextHookKeys$1) { + DevToolsContextHookKeys$1["ADD_INSPECTOR"] = "addInspector"; + DevToolsContextHookKeys$1["SEND_INSPECTOR_TREE"] = "sendInspectorTree"; + DevToolsContextHookKeys$1["SEND_INSPECTOR_STATE"] = "sendInspectorState"; + DevToolsContextHookKeys$1["CUSTOM_INSPECTOR_SELECT_NODE"] = "customInspectorSelectNode"; + DevToolsContextHookKeys$1["TIMELINE_LAYER_ADDED"] = "timelineLayerAdded"; + DevToolsContextHookKeys$1["TIMELINE_EVENT_ADDED"] = "timelineEventAdded"; + DevToolsContextHookKeys$1["GET_COMPONENT_INSTANCES"] = "getComponentInstances"; + DevToolsContextHookKeys$1["GET_COMPONENT_BOUNDS"] = "getComponentBounds"; + DevToolsContextHookKeys$1["GET_COMPONENT_NAME"] = "getComponentName"; + DevToolsContextHookKeys$1["COMPONENT_HIGHLIGHT"] = "componentHighlight"; + DevToolsContextHookKeys$1["COMPONENT_UNHIGHLIGHT"] = "componentUnhighlight"; + return DevToolsContextHookKeys$1; +})({}); +var DevToolsMessagingHookKeys = (function(DevToolsMessagingHookKeys$1) { + DevToolsMessagingHookKeys$1["SEND_INSPECTOR_TREE_TO_CLIENT"] = "sendInspectorTreeToClient"; + DevToolsMessagingHookKeys$1["SEND_INSPECTOR_STATE_TO_CLIENT"] = "sendInspectorStateToClient"; + DevToolsMessagingHookKeys$1["SEND_TIMELINE_EVENT_TO_CLIENT"] = "sendTimelineEventToClient"; + DevToolsMessagingHookKeys$1["SEND_INSPECTOR_TO_CLIENT"] = "sendInspectorToClient"; + DevToolsMessagingHookKeys$1["SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT"] = "sendActiveAppUpdatedToClient"; + DevToolsMessagingHookKeys$1["DEVTOOLS_STATE_UPDATED"] = "devtoolsStateUpdated"; + DevToolsMessagingHookKeys$1["DEVTOOLS_CONNECTED_UPDATED"] = "devtoolsConnectedUpdated"; + DevToolsMessagingHookKeys$1["ROUTER_INFO_UPDATED"] = "routerInfoUpdated"; + return DevToolsMessagingHookKeys$1; +})({}); function createDevToolsCtxHooks() { - const hooks2 = createHooks(); - hooks2.hook("addInspector", ({ inspector, plugin }) => { + const hooks$1 = createHooks(); + hooks$1.hook(DevToolsContextHookKeys.ADD_INSPECTOR, ({ inspector, plugin }) => { addInspector(inspector, plugin.descriptor); }); const debounceSendInspectorTree = debounce(async ({ inspectorId, plugin }) => { - var _a25; - if (!inspectorId || !((_a25 = plugin == null ? void 0 : plugin.descriptor) == null ? void 0 : _a25.app) || devtoolsState.highPerfModeEnabled) - return; + if (!inspectorId || !plugin?.descriptor?.app || devtoolsState.highPerfModeEnabled) return; const inspector = getInspector(inspectorId, plugin.descriptor.app); const _payload = { app: plugin.descriptor.app, inspectorId, - filter: (inspector == null ? void 0 : inspector.treeFilter) || "", + filter: inspector?.treeFilter || "", rootNodes: [] }; await new Promise((resolve) => { - hooks2.callHookWith( - async (callbacks) => { - await Promise.all(callbacks.map((cb) => cb(_payload))); - resolve(); - }, - "getInspectorTree" - /* GET_INSPECTOR_TREE */ - ); + hooks$1.callHookWith(async (callbacks) => { + await Promise.all(callbacks.map((cb) => cb(_payload))); + resolve(); + }, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_TREE); }); - hooks2.callHookWith( - async (callbacks) => { - await Promise.all(callbacks.map((cb) => cb({ - inspectorId, - rootNodes: _payload.rootNodes - }))); - }, - "sendInspectorTreeToClient" - /* SEND_INSPECTOR_TREE_TO_CLIENT */ - ); + hooks$1.callHookWith(async (callbacks) => { + await Promise.all(callbacks.map((cb) => cb({ + inspectorId, + rootNodes: _payload.rootNodes + }))); + }, DevToolsMessagingHookKeys.SEND_INSPECTOR_TREE_TO_CLIENT); }, 120); - hooks2.hook("sendInspectorTree", debounceSendInspectorTree); + hooks$1.hook(DevToolsContextHookKeys.SEND_INSPECTOR_TREE, debounceSendInspectorTree); const debounceSendInspectorState = debounce(async ({ inspectorId, plugin }) => { - var _a25; - if (!inspectorId || !((_a25 = plugin == null ? void 0 : plugin.descriptor) == null ? void 0 : _a25.app) || devtoolsState.highPerfModeEnabled) - return; + if (!inspectorId || !plugin?.descriptor?.app || devtoolsState.highPerfModeEnabled) return; const inspector = getInspector(inspectorId, plugin.descriptor.app); const _payload = { app: plugin.descriptor.app, inspectorId, - nodeId: (inspector == null ? void 0 : inspector.selectedNodeId) || "", + nodeId: inspector?.selectedNodeId || "", state: null }; - const ctx = { - currentTab: `custom-inspector:${inspectorId}` - }; - if (_payload.nodeId) { - await new Promise((resolve) => { - hooks2.callHookWith( - async (callbacks) => { - await Promise.all(callbacks.map((cb) => cb(_payload, ctx))); - resolve(); - }, - "getInspectorState" - /* GET_INSPECTOR_STATE */ - ); - }); - } - hooks2.callHookWith( - async (callbacks) => { - await Promise.all(callbacks.map((cb) => cb({ - inspectorId, - nodeId: _payload.nodeId, - state: _payload.state - }))); - }, - "sendInspectorStateToClient" - /* SEND_INSPECTOR_STATE_TO_CLIENT */ - ); + const ctx = { currentTab: `custom-inspector:${inspectorId}` }; + if (_payload.nodeId) await new Promise((resolve) => { + hooks$1.callHookWith(async (callbacks) => { + await Promise.all(callbacks.map((cb) => cb(_payload, ctx))); + resolve(); + }, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_STATE); + }); + hooks$1.callHookWith(async (callbacks) => { + await Promise.all(callbacks.map((cb) => cb({ + inspectorId, + nodeId: _payload.nodeId, + state: _payload.state + }))); + }, DevToolsMessagingHookKeys.SEND_INSPECTOR_STATE_TO_CLIENT); }, 120); - hooks2.hook("sendInspectorState", debounceSendInspectorState); - hooks2.hook("customInspectorSelectNode", ({ inspectorId, nodeId, plugin }) => { + hooks$1.hook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, debounceSendInspectorState); + hooks$1.hook(DevToolsContextHookKeys.CUSTOM_INSPECTOR_SELECT_NODE, ({ inspectorId, nodeId, plugin }) => { const inspector = getInspector(inspectorId, plugin.descriptor.app); - if (!inspector) - return; + if (!inspector) return; inspector.selectedNodeId = nodeId; }); - hooks2.hook("timelineLayerAdded", ({ options, plugin }) => { + hooks$1.hook(DevToolsContextHookKeys.TIMELINE_LAYER_ADDED, ({ options, plugin }) => { addTimelineLayer(options, plugin.descriptor); }); - hooks2.hook("timelineEventAdded", ({ options, plugin }) => { - var _a25; - const internalLayerIds = ["performance", "component-event", "keyboard", "mouse"]; - if (devtoolsState.highPerfModeEnabled || !((_a25 = devtoolsState.timelineLayersState) == null ? void 0 : _a25[plugin.descriptor.id]) && !internalLayerIds.includes(options.layerId)) - return; - hooks2.callHookWith( - async (callbacks) => { - await Promise.all(callbacks.map((cb) => cb(options))); - }, - "sendTimelineEventToClient" - /* SEND_TIMELINE_EVENT_TO_CLIENT */ - ); + hooks$1.hook(DevToolsContextHookKeys.TIMELINE_EVENT_ADDED, ({ options, plugin }) => { + if (devtoolsState.highPerfModeEnabled || !devtoolsState.timelineLayersState?.[plugin.descriptor.id] && ![ + "performance", + "component-event", + "keyboard", + "mouse" + ].includes(options.layerId)) return; + hooks$1.callHookWith(async (callbacks) => { + await Promise.all(callbacks.map((cb) => cb(options))); + }, DevToolsMessagingHookKeys.SEND_TIMELINE_EVENT_TO_CLIENT); }); - hooks2.hook("getComponentInstances", async ({ app }) => { + hooks$1.hook(DevToolsContextHookKeys.GET_COMPONENT_INSTANCES, async ({ app }) => { const appRecord = app.__VUE_DEVTOOLS_NEXT_APP_RECORD__; - if (!appRecord) - return null; + if (!appRecord) return null; const appId = appRecord.id.toString(); - const instances = [...appRecord.instanceMap].filter(([key]) => key.split(":")[0] === appId).map(([, instance]) => instance); - return instances; + return [...appRecord.instanceMap].filter(([key]) => key.split(":")[0] === appId).map(([, instance]) => instance); }); - hooks2.hook("getComponentBounds", async ({ instance }) => { - const bounds = getComponentBoundingRect(instance); - return bounds; + hooks$1.hook(DevToolsContextHookKeys.GET_COMPONENT_BOUNDS, async ({ instance }) => { + return getComponentBoundingRect(instance); }); - hooks2.hook("getComponentName", ({ instance }) => { - const name = getInstanceName(instance); - return name; + hooks$1.hook(DevToolsContextHookKeys.GET_COMPONENT_NAME, ({ instance }) => { + return getInstanceName(instance); }); - hooks2.hook("componentHighlight", ({ uid }) => { + hooks$1.hook(DevToolsContextHookKeys.COMPONENT_HIGHLIGHT, ({ uid }) => { const instance = activeAppRecord.value.instanceMap.get(uid); - if (instance) { - highlight(instance); - } + if (instance) highlight(instance); }); - hooks2.hook("componentUnhighlight", () => { + hooks$1.hook(DevToolsContextHookKeys.COMPONENT_UNHIGHLIGHT, () => { unhighlight(); }); - return hooks2; + return hooks$1; } -var _a4; -var _b4; -(_b4 = (_a4 = target).__VUE_DEVTOOLS_KIT_APP_RECORDS__) != null ? _b4 : _a4.__VUE_DEVTOOLS_KIT_APP_RECORDS__ = []; -var _a5; -var _b5; -(_b5 = (_a5 = target).__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__) != null ? _b5 : _a5.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__ = {}; -var _a6; -var _b6; -(_b6 = (_a6 = target).__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__) != null ? _b6 : _a6.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__ = ""; -var _a7; -var _b7; -(_b7 = (_a7 = target).__VUE_DEVTOOLS_KIT_CUSTOM_TABS__) != null ? _b7 : _a7.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__ = []; -var _a8; -var _b8; -(_b8 = (_a8 = target).__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__) != null ? _b8 : _a8.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__ = []; +target.__VUE_DEVTOOLS_KIT_APP_RECORDS__ ??= []; +target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__ ??= {}; +target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__ ??= ""; +target.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__ ??= []; +target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__ ??= []; var STATE_KEY = "__VUE_DEVTOOLS_KIT_GLOBAL_STATE__"; function initStateFactory() { return { @@ -2932,31 +1173,25 @@ function initStateFactory() { timelineLayersState: getTimelineLayersStateFromStorage() }; } -var _a9; -var _b9; -(_b9 = (_a9 = target)[STATE_KEY]) != null ? _b9 : _a9[STATE_KEY] = initStateFactory(); +target[STATE_KEY] ??= initStateFactory(); var callStateUpdatedHook = debounce((state) => { - devtoolsContext.hooks.callHook("devtoolsStateUpdated", { state }); + devtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.DEVTOOLS_STATE_UPDATED, { state }); }); var callConnectedUpdatedHook = debounce((state, oldState) => { - devtoolsContext.hooks.callHook("devtoolsConnectedUpdated", { state, oldState }); -}); -var devtoolsAppRecords = new Proxy(target.__VUE_DEVTOOLS_KIT_APP_RECORDS__, { - get(_target, prop, receiver) { - if (prop === "value") - return target.__VUE_DEVTOOLS_KIT_APP_RECORDS__; - return target.__VUE_DEVTOOLS_KIT_APP_RECORDS__[prop]; - } -}); -var activeAppRecord = new Proxy(target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__, { - get(_target, prop, receiver) { - if (prop === "value") - return target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__; - else if (prop === "id") - return target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__; - return target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__[prop]; - } + devtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.DEVTOOLS_CONNECTED_UPDATED, { + state, + oldState + }); }); +var devtoolsAppRecords = new Proxy(target.__VUE_DEVTOOLS_KIT_APP_RECORDS__, { get(_target, prop, receiver) { + if (prop === "value") return target.__VUE_DEVTOOLS_KIT_APP_RECORDS__; + return target.__VUE_DEVTOOLS_KIT_APP_RECORDS__[prop]; +} }); +var activeAppRecord = new Proxy(target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__, { get(_target, prop, receiver) { + if (prop === "value") return target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__; + else if (prop === "id") return target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__; + return target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__[prop]; +} }); function updateAllStates() { callStateUpdatedHook({ ...target[STATE_KEY], @@ -2975,25 +1210,20 @@ function setActiveAppRecordId(id) { updateAllStates(); } var devtoolsState = new Proxy(target[STATE_KEY], { - get(target22, property) { - if (property === "appRecords") { - return devtoolsAppRecords; - } else if (property === "activeAppRecordId") { - return activeAppRecord.id; - } else if (property === "tabs") { - return target.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__; - } else if (property === "commands") { - return target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__; - } + get(target$1, property) { + if (property === "appRecords") return devtoolsAppRecords; + else if (property === "activeAppRecordId") return activeAppRecord.id; + else if (property === "tabs") return target.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__; + else if (property === "commands") return target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__; return target[STATE_KEY][property]; }, - deleteProperty(target22, property) { - delete target22[property]; + deleteProperty(target$1, property) { + delete target$1[property]; return true; }, - set(target22, property, value) { - const oldState = { ...target[STATE_KEY] }; - target22[property] = value; + set(target$1, property, value) { + ({ ...target[STATE_KEY] }); + target$1[property] = value; target[STATE_KEY][property] = value; return true; } @@ -3004,7 +1234,7 @@ function onDevToolsConnected(fn) { fn(); resolve(); } - devtoolsContext.hooks.hook("devtoolsConnectedUpdated", ({ state }) => { + devtoolsContext.hooks.hook(DevToolsMessagingHookKeys.DEVTOOLS_CONNECTED_UPDATED, ({ state }) => { if (state.connected) { fn(); resolve(); @@ -3013,19 +1243,14 @@ function onDevToolsConnected(fn) { }); } var resolveIcon = (icon) => { - if (!icon) - return; - if (icon.startsWith("baseline-")) { - return `custom-ic-${icon}`; - } - if (icon.startsWith("i-") || isUrlString(icon)) - return icon; + if (!icon) return; + if (icon.startsWith("baseline-")) return `custom-ic-${icon}`; + if (icon.startsWith("i-") || isUrlString(icon)) return icon; return `custom-ic-baseline-${icon}`; }; function addCustomTab(tab) { const tabs = target.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__; - if (tabs.some((t) => t.name === tab.name)) - return; + if (tabs.some((t) => t.name === tab.name)) return; tabs.push({ ...tab, icon: resolveIcon(tab.icon) @@ -3034,8 +1259,7 @@ function addCustomTab(tab) { } function addCustomCommand(action) { const commands = target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__; - if (commands.some((t) => t.id === action.id)) - return; + if (commands.some((t) => t.id === action.id)) return; commands.push({ ...action, icon: resolveIcon(action.icon), @@ -3049,18 +1273,16 @@ function addCustomCommand(action) { function removeCustomCommand(actionId) { const commands = target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__; const index = commands.findIndex((t) => t.id === actionId); - if (index === -1) - return; + if (index === -1) return; commands.splice(index, 1); updateAllStates(); } function openInEditor(options = {}) { - var _a25, _b25, _c; const { file, host, baseUrl = window.location.origin, line = 0, column = 0 } = options; if (file) { if (host === "chrome-extension") { const fileName = file.replace(/\\/g, "\\\\"); - const _baseUrl = (_b25 = (_a25 = window.VUE_DEVTOOLS_CONFIG) == null ? void 0 : _a25.openInEditorHost) != null ? _b25 : "/"; + const _baseUrl = window.VUE_DEVTOOLS_CONFIG?.openInEditorHost ?? "/"; fetch(`${_baseUrl}__open-in-editor?file=${encodeURI(file)}`).then((response) => { if (!response.ok) { const msg = `Opening component ${fileName} failed`; @@ -3068,24 +1290,15 @@ function openInEditor(options = {}) { } }); } else if (devtoolsState.vitePluginDetected) { - const _baseUrl = (_c = target.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__) != null ? _c : baseUrl; + const _baseUrl = target.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__ ?? baseUrl; target.__VUE_INSPECTOR__.openInEditor(_baseUrl, file, line, column); } } } -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -var _a10; -var _b10; -(_b10 = (_a10 = target).__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__) != null ? _b10 : _a10.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__ = []; -var devtoolsPluginBuffer = new Proxy(target.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__, { - get(target22, prop, receiver) { - return Reflect.get(target22, prop, receiver); - } -}); +target.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__ ??= []; +var devtoolsPluginBuffer = new Proxy(target.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__, { get(target$1, prop, receiver) { + return Reflect.get(target$1, prop, receiver); +} }); function _getSettings(settings) { const _settings = {}; Object.keys(settings).forEach((key) => { @@ -3097,34 +1310,20 @@ function getPluginLocalKey(pluginId) { return `__VUE_DEVTOOLS_NEXT_PLUGIN_SETTINGS__${pluginId}__`; } function getPluginSettingsOptions(pluginId) { - var _a25, _b25, _c; - const item = (_b25 = (_a25 = devtoolsPluginBuffer.find((item2) => { - var _a26; - return item2[0].id === pluginId && !!((_a26 = item2[0]) == null ? void 0 : _a26.settings); - })) == null ? void 0 : _a25[0]) != null ? _b25 : null; - return (_c = item == null ? void 0 : item.settings) != null ? _c : null; + return (devtoolsPluginBuffer.find((item) => item[0].id === pluginId && !!item[0]?.settings)?.[0] ?? null)?.settings ?? null; } function getPluginSettings(pluginId, fallbackValue) { - var _a25, _b25, _c; const localKey = getPluginLocalKey(pluginId); if (localKey) { const localSettings = localStorage.getItem(localKey); - if (localSettings) { - return JSON.parse(localSettings); - } - } - if (pluginId) { - const item = (_b25 = (_a25 = devtoolsPluginBuffer.find((item2) => item2[0].id === pluginId)) == null ? void 0 : _a25[0]) != null ? _b25 : null; - return _getSettings((_c = item == null ? void 0 : item.settings) != null ? _c : {}); + if (localSettings) return JSON.parse(localSettings); } + if (pluginId) return _getSettings((devtoolsPluginBuffer.find((item) => item[0].id === pluginId)?.[0] ?? null)?.settings ?? {}); return _getSettings(fallbackValue); } function initPluginSettings(pluginId, settings) { const localKey = getPluginLocalKey(pluginId); - const localSettings = localStorage.getItem(localKey); - if (!localSettings) { - localStorage.setItem(localKey, JSON.stringify(_getSettings(settings))); - } + if (!localStorage.getItem(localKey)) localStorage.setItem(localKey, JSON.stringify(_getSettings(settings))); } function setPluginSettings(pluginId, key, value) { const localKey = getPluginLocalKey(pluginId); @@ -3135,70 +1334,70 @@ function setPluginSettings(pluginId, key, value) { [key]: value }; localStorage.setItem(localKey, JSON.stringify(updated)); - devtoolsContext.hooks.callHookWith( - (callbacks) => { - callbacks.forEach((cb) => cb({ - pluginId, - key, - oldValue: parsedLocalSettings[key], - newValue: value, - settings: updated - })); - }, - "setPluginSettings" - /* SET_PLUGIN_SETTINGS */ - ); -} -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -var _a11; -var _b11; -var devtoolsHooks = (_b11 = (_a11 = target).__VUE_DEVTOOLS_HOOK) != null ? _b11 : _a11.__VUE_DEVTOOLS_HOOK = createHooks(); + devtoolsContext.hooks.callHookWith((callbacks) => { + callbacks.forEach((cb) => cb({ + pluginId, + key, + oldValue: parsedLocalSettings[key], + newValue: value, + settings: updated + })); + }, DevToolsV6PluginAPIHookKeys.SET_PLUGIN_SETTINGS); +} +var DevToolsHooks = (function(DevToolsHooks$1) { + DevToolsHooks$1["APP_INIT"] = "app:init"; + DevToolsHooks$1["APP_UNMOUNT"] = "app:unmount"; + DevToolsHooks$1["COMPONENT_UPDATED"] = "component:updated"; + DevToolsHooks$1["COMPONENT_ADDED"] = "component:added"; + DevToolsHooks$1["COMPONENT_REMOVED"] = "component:removed"; + DevToolsHooks$1["COMPONENT_EMIT"] = "component:emit"; + DevToolsHooks$1["PERFORMANCE_START"] = "perf:start"; + DevToolsHooks$1["PERFORMANCE_END"] = "perf:end"; + DevToolsHooks$1["ADD_ROUTE"] = "router:add-route"; + DevToolsHooks$1["REMOVE_ROUTE"] = "router:remove-route"; + DevToolsHooks$1["RENDER_TRACKED"] = "render:tracked"; + DevToolsHooks$1["RENDER_TRIGGERED"] = "render:triggered"; + DevToolsHooks$1["APP_CONNECTED"] = "app:connected"; + DevToolsHooks$1["SETUP_DEVTOOLS_PLUGIN"] = "devtools-plugin:setup"; + return DevToolsHooks$1; +})({}); +var devtoolsHooks = target.__VUE_DEVTOOLS_HOOK ??= createHooks(); var on = { vueAppInit(fn) { - devtoolsHooks.hook("app:init", fn); + devtoolsHooks.hook(DevToolsHooks.APP_INIT, fn); }, vueAppUnmount(fn) { - devtoolsHooks.hook("app:unmount", fn); + devtoolsHooks.hook(DevToolsHooks.APP_UNMOUNT, fn); }, vueAppConnected(fn) { - devtoolsHooks.hook("app:connected", fn); + devtoolsHooks.hook(DevToolsHooks.APP_CONNECTED, fn); }, componentAdded(fn) { - return devtoolsHooks.hook("component:added", fn); + return devtoolsHooks.hook(DevToolsHooks.COMPONENT_ADDED, fn); }, componentEmit(fn) { - return devtoolsHooks.hook("component:emit", fn); + return devtoolsHooks.hook(DevToolsHooks.COMPONENT_EMIT, fn); }, componentUpdated(fn) { - return devtoolsHooks.hook("component:updated", fn); + return devtoolsHooks.hook(DevToolsHooks.COMPONENT_UPDATED, fn); }, componentRemoved(fn) { - return devtoolsHooks.hook("component:removed", fn); + return devtoolsHooks.hook(DevToolsHooks.COMPONENT_REMOVED, fn); }, setupDevtoolsPlugin(fn) { - devtoolsHooks.hook("devtools-plugin:setup", fn); + devtoolsHooks.hook(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, fn); }, perfStart(fn) { - return devtoolsHooks.hook("perf:start", fn); + return devtoolsHooks.hook(DevToolsHooks.PERFORMANCE_START, fn); }, perfEnd(fn) { - return devtoolsHooks.hook("perf:end", fn); + return devtoolsHooks.hook(DevToolsHooks.PERFORMANCE_END, fn); } }; var hook = { on, setupDevToolsPlugin(pluginDescriptor, setupFn) { - return devtoolsHooks.callHook("devtools-plugin:setup", pluginDescriptor, setupFn); + return devtoolsHooks.callHook(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, pluginDescriptor, setupFn); } }; var DevToolsV6PluginAPI = class { @@ -3208,141 +1407,127 @@ var DevToolsV6PluginAPI = class { } get on() { return { - // component inspector visitComponentTree: (handler) => { - this.hooks.hook("visitComponentTree", handler); + this.hooks.hook(DevToolsV6PluginAPIHookKeys.VISIT_COMPONENT_TREE, handler); }, inspectComponent: (handler) => { - this.hooks.hook("inspectComponent", handler); + this.hooks.hook(DevToolsV6PluginAPIHookKeys.INSPECT_COMPONENT, handler); }, editComponentState: (handler) => { - this.hooks.hook("editComponentState", handler); + this.hooks.hook(DevToolsV6PluginAPIHookKeys.EDIT_COMPONENT_STATE, handler); }, - // custom inspector getInspectorTree: (handler) => { - this.hooks.hook("getInspectorTree", handler); + this.hooks.hook(DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_TREE, handler); }, getInspectorState: (handler) => { - this.hooks.hook("getInspectorState", handler); + this.hooks.hook(DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_STATE, handler); }, editInspectorState: (handler) => { - this.hooks.hook("editInspectorState", handler); + this.hooks.hook(DevToolsV6PluginAPIHookKeys.EDIT_INSPECTOR_STATE, handler); }, - // timeline inspectTimelineEvent: (handler) => { - this.hooks.hook("inspectTimelineEvent", handler); + this.hooks.hook(DevToolsV6PluginAPIHookKeys.INSPECT_TIMELINE_EVENT, handler); }, timelineCleared: (handler) => { - this.hooks.hook("timelineCleared", handler); + this.hooks.hook(DevToolsV6PluginAPIHookKeys.TIMELINE_CLEARED, handler); }, - // settings setPluginSettings: (handler) => { - this.hooks.hook("setPluginSettings", handler); + this.hooks.hook(DevToolsV6PluginAPIHookKeys.SET_PLUGIN_SETTINGS, handler); } }; } - // component inspector notifyComponentUpdate(instance) { - var _a25; - if (devtoolsState.highPerfModeEnabled) { - return; - } + if (devtoolsState.highPerfModeEnabled) return; const inspector = getActiveInspectors().find((i) => i.packageName === this.plugin.descriptor.packageName); - if (inspector == null ? void 0 : inspector.id) { + if (inspector?.id) { if (instance) { const args = [ instance.appContext.app, instance.uid, - (_a25 = instance.parent) == null ? void 0 : _a25.uid, + instance.parent?.uid, instance ]; - devtoolsHooks.callHook("component:updated", ...args); - } else { - devtoolsHooks.callHook( - "component:updated" - /* COMPONENT_UPDATED */ - ); - } - this.hooks.callHook("sendInspectorState", { inspectorId: inspector.id, plugin: this.plugin }); + devtoolsHooks.callHook(DevToolsHooks.COMPONENT_UPDATED, ...args); + } else devtoolsHooks.callHook(DevToolsHooks.COMPONENT_UPDATED); + this.hooks.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, { + inspectorId: inspector.id, + plugin: this.plugin + }); } } - // custom inspector addInspector(options) { - this.hooks.callHook("addInspector", { inspector: options, plugin: this.plugin }); - if (this.plugin.descriptor.settings) { - initPluginSettings(options.id, this.plugin.descriptor.settings); - } + this.hooks.callHook(DevToolsContextHookKeys.ADD_INSPECTOR, { + inspector: options, + plugin: this.plugin + }); + if (this.plugin.descriptor.settings) initPluginSettings(options.id, this.plugin.descriptor.settings); } sendInspectorTree(inspectorId) { - if (devtoolsState.highPerfModeEnabled) { - return; - } - this.hooks.callHook("sendInspectorTree", { inspectorId, plugin: this.plugin }); + if (devtoolsState.highPerfModeEnabled) return; + this.hooks.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_TREE, { + inspectorId, + plugin: this.plugin + }); } sendInspectorState(inspectorId) { - if (devtoolsState.highPerfModeEnabled) { - return; - } - this.hooks.callHook("sendInspectorState", { inspectorId, plugin: this.plugin }); + if (devtoolsState.highPerfModeEnabled) return; + this.hooks.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, { + inspectorId, + plugin: this.plugin + }); } selectInspectorNode(inspectorId, nodeId) { - this.hooks.callHook("customInspectorSelectNode", { inspectorId, nodeId, plugin: this.plugin }); + this.hooks.callHook(DevToolsContextHookKeys.CUSTOM_INSPECTOR_SELECT_NODE, { + inspectorId, + nodeId, + plugin: this.plugin + }); } visitComponentTree(payload) { - return this.hooks.callHook("visitComponentTree", payload); + return this.hooks.callHook(DevToolsV6PluginAPIHookKeys.VISIT_COMPONENT_TREE, payload); } - // timeline now() { - if (devtoolsState.highPerfModeEnabled) { - return 0; - } + if (devtoolsState.highPerfModeEnabled) return 0; return Date.now(); } addTimelineLayer(options) { - this.hooks.callHook("timelineLayerAdded", { options, plugin: this.plugin }); + this.hooks.callHook(DevToolsContextHookKeys.TIMELINE_LAYER_ADDED, { + options, + plugin: this.plugin + }); } addTimelineEvent(options) { - if (devtoolsState.highPerfModeEnabled) { - return; - } - this.hooks.callHook("timelineEventAdded", { options, plugin: this.plugin }); + if (devtoolsState.highPerfModeEnabled) return; + this.hooks.callHook(DevToolsContextHookKeys.TIMELINE_EVENT_ADDED, { + options, + plugin: this.plugin + }); } - // settings getSettings(pluginId) { - return getPluginSettings(pluginId != null ? pluginId : this.plugin.descriptor.id, this.plugin.descriptor.settings); + return getPluginSettings(pluginId ?? this.plugin.descriptor.id, this.plugin.descriptor.settings); } - // utilities getComponentInstances(app) { - return this.hooks.callHook("getComponentInstances", { app }); + return this.hooks.callHook(DevToolsContextHookKeys.GET_COMPONENT_INSTANCES, { app }); } getComponentBounds(instance) { - return this.hooks.callHook("getComponentBounds", { instance }); + return this.hooks.callHook(DevToolsContextHookKeys.GET_COMPONENT_BOUNDS, { instance }); } getComponentName(instance) { - return this.hooks.callHook("getComponentName", { instance }); + return this.hooks.callHook(DevToolsContextHookKeys.GET_COMPONENT_NAME, { instance }); } highlightElement(instance) { const uid = instance.__VUE_DEVTOOLS_NEXT_UID__; - return this.hooks.callHook("componentHighlight", { uid }); + return this.hooks.callHook(DevToolsContextHookKeys.COMPONENT_HIGHLIGHT, { uid }); } unhighlightElement() { - return this.hooks.callHook( - "componentUnhighlight" - /* COMPONENT_UNHIGHLIGHT */ - ); + return this.hooks.callHook(DevToolsContextHookKeys.COMPONENT_UNHIGHLIGHT); } }; var DevToolsPluginAPI = DevToolsV6PluginAPI; -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); var UNDEFINED = "__vue_devtool_undefined__"; var INFINITY = "__vue_devtool_infinity__"; var NEGATIVE_INFINITY = "__vue_devtool_negative_infinity__"; var NAN = "__vue_devtool_nan__"; -init_esm_shims2(); -init_esm_shims2(); var tokenMap = { [UNDEFINED]: "undefined", [NAN]: "NaN", @@ -3353,21 +1538,13 @@ var reversedTokenMap = Object.entries(tokenMap).reduce((acc, [key, value]) => { acc[value] = key; return acc; }, {}); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -var _a12; -var _b12; -(_b12 = (_a12 = target).__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__) != null ? _b12 : _a12.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__ = /* @__PURE__ */ new Set(); +target.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__ ??= /* @__PURE__ */ new Set(); function setupDevToolsPlugin(pluginDescriptor, setupFn) { return hook.setupDevToolsPlugin(pluginDescriptor, setupFn); } function callDevToolsPluginSetupFn(plugin, app) { const [pluginDescriptor, setupFn] = plugin; - if (pluginDescriptor.app !== app) - return; + if (pluginDescriptor.app !== app) return; const api = new DevToolsPluginAPI({ plugin: { setupFn, @@ -3375,59 +1552,40 @@ function callDevToolsPluginSetupFn(plugin, app) { }, ctx: devtoolsContext }); - if (pluginDescriptor.packageName === "vuex") { - api.on.editInspectorState((payload) => { - api.sendInspectorState(payload.inspectorId); - }); - } + if (pluginDescriptor.packageName === "vuex") api.on.editInspectorState((payload) => { + api.sendInspectorState(payload.inspectorId); + }); setupFn(api); } function registerDevToolsPlugin(app, options) { - if (target.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.has(app)) { - return; - } - if (devtoolsState.highPerfModeEnabled && !(options == null ? void 0 : options.inspectingComponent)) { - return; - } + if (target.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.has(app)) return; + if (devtoolsState.highPerfModeEnabled && !options?.inspectingComponent) return; target.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.add(app); devtoolsPluginBuffer.forEach((plugin) => { callDevToolsPluginSetupFn(plugin, app); }); } -init_esm_shims2(); -init_esm_shims2(); var ROUTER_KEY = "__VUE_DEVTOOLS_ROUTER__"; var ROUTER_INFO_KEY = "__VUE_DEVTOOLS_ROUTER_INFO__"; -var _a13; -var _b13; -(_b13 = (_a13 = target)[ROUTER_INFO_KEY]) != null ? _b13 : _a13[ROUTER_INFO_KEY] = { +target[ROUTER_INFO_KEY] ??= { currentRoute: null, routes: [] }; -var _a14; -var _b14; -(_b14 = (_a14 = target)[ROUTER_KEY]) != null ? _b14 : _a14[ROUTER_KEY] = {}; -var devtoolsRouterInfo = new Proxy(target[ROUTER_INFO_KEY], { - get(target22, property) { - return target[ROUTER_INFO_KEY][property]; - } -}); -var devtoolsRouter = new Proxy(target[ROUTER_KEY], { - get(target22, property) { - if (property === "value") { - return target[ROUTER_KEY]; - } - } -}); +target[ROUTER_KEY] ??= {}; +var devtoolsRouterInfo = new Proxy(target[ROUTER_INFO_KEY], { get(target$1, property) { + return target[ROUTER_INFO_KEY][property]; +} }); +var devtoolsRouter = new Proxy(target[ROUTER_KEY], { get(target$1, property) { + if (property === "value") return target[ROUTER_KEY]; +} }); function getRoutes(router) { const routesMap = /* @__PURE__ */ new Map(); - return ((router == null ? void 0 : router.getRoutes()) || []).filter((i) => !routesMap.has(i.path) && routesMap.set(i.path, 1)); + return (router?.getRoutes() || []).filter((i) => !routesMap.has(i.path) && routesMap.set(i.path, 1)); } function filterRoutes(routes) { return routes.map((item) => { let { path, name, children, meta } = item; - if (children == null ? void 0 : children.length) - children = filterRoutes(children); + if (children?.length) children = filterRoutes(children); return { path, name, @@ -3452,11 +1610,10 @@ function filterCurrentRoute(route) { } return route; } -function normalizeRouterInfo(appRecord, activeAppRecord2) { +function normalizeRouterInfo(appRecord, activeAppRecord$1) { function init() { - var _a25; - const router = (_a25 = appRecord.app) == null ? void 0 : _a25.config.globalProperties.$router; - const currentRoute = filterCurrentRoute(router == null ? void 0 : router.currentRoute.value); + const router = appRecord.app?.config.globalProperties.$router; + const currentRoute = filterCurrentRoute(router?.currentRoute.value); const routes = filterRoutes(getRoutes(router)); const c = console.warn; console.warn = () => { @@ -3470,18 +1627,14 @@ function normalizeRouterInfo(appRecord, activeAppRecord2) { } init(); hook.on.componentUpdated(debounce(() => { - var _a25; - if (((_a25 = activeAppRecord2.value) == null ? void 0 : _a25.app) !== appRecord.app) - return; + if (activeAppRecord$1.value?.app !== appRecord.app) return; init(); - if (devtoolsState.highPerfModeEnabled) - return; - devtoolsContext.hooks.callHook("routerInfoUpdated", { state: target[ROUTER_INFO_KEY] }); + if (devtoolsState.highPerfModeEnabled) return; + devtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.ROUTER_INFO_UPDATED, { state: target[ROUTER_INFO_KEY] }); }, 200)); } -function createDevToolsApi(hooks2) { +function createDevToolsApi(hooks$1) { return { - // get inspector tree async getInspectorTree(payload) { const _payload = { ...payload, @@ -3489,88 +1642,66 @@ function createDevToolsApi(hooks2) { rootNodes: [] }; await new Promise((resolve) => { - hooks2.callHookWith( - async (callbacks) => { - await Promise.all(callbacks.map((cb) => cb(_payload))); - resolve(); - }, - "getInspectorTree" - /* GET_INSPECTOR_TREE */ - ); + hooks$1.callHookWith(async (callbacks) => { + await Promise.all(callbacks.map((cb) => cb(_payload))); + resolve(); + }, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_TREE); }); return _payload.rootNodes; }, - // get inspector state async getInspectorState(payload) { const _payload = { ...payload, app: activeAppRecord.value.app, state: null }; - const ctx = { - currentTab: `custom-inspector:${payload.inspectorId}` - }; + const ctx = { currentTab: `custom-inspector:${payload.inspectorId}` }; await new Promise((resolve) => { - hooks2.callHookWith( - async (callbacks) => { - await Promise.all(callbacks.map((cb) => cb(_payload, ctx))); - resolve(); - }, - "getInspectorState" - /* GET_INSPECTOR_STATE */ - ); + hooks$1.callHookWith(async (callbacks) => { + await Promise.all(callbacks.map((cb) => cb(_payload, ctx))); + resolve(); + }, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_STATE); }); return _payload.state; }, - // edit inspector state editInspectorState(payload) { - const stateEditor2 = new StateEditor(); + const stateEditor$1 = new StateEditor(); const _payload = { ...payload, app: activeAppRecord.value.app, set: (obj, path = payload.path, value = payload.state.value, cb) => { - stateEditor2.set(obj, path, value, cb || stateEditor2.createDefaultSetCallback(payload.state)); + stateEditor$1.set(obj, path, value, cb || stateEditor$1.createDefaultSetCallback(payload.state)); } }; - hooks2.callHookWith( - (callbacks) => { - callbacks.forEach((cb) => cb(_payload)); - }, - "editInspectorState" - /* EDIT_INSPECTOR_STATE */ - ); + hooks$1.callHookWith((callbacks) => { + callbacks.forEach((cb) => cb(_payload)); + }, DevToolsV6PluginAPIHookKeys.EDIT_INSPECTOR_STATE); }, - // send inspector state sendInspectorState(inspectorId) { const inspector = getInspector(inspectorId); - hooks2.callHook("sendInspectorState", { inspectorId, plugin: { - descriptor: inspector.descriptor, - setupFn: () => ({}) - } }); + hooks$1.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, { + inspectorId, + plugin: { + descriptor: inspector.descriptor, + setupFn: () => ({}) + } + }); }, - // inspect component inspector inspectComponentInspector() { return inspectComponentHighLighter(); }, - // cancel inspect component inspector cancelInspectComponentInspector() { return cancelInspectComponentHighLighter(); }, - // get component render code getComponentRenderCode(id) { const instance = getComponentInstance(activeAppRecord.value, id); - if (instance) - return !(typeof (instance == null ? void 0 : instance.type) === "function") ? instance.render.toString() : instance.type.toString(); + if (instance) return !(typeof instance?.type === "function") ? instance.render.toString() : instance.type.toString(); }, - // scroll to component scrollToComponent(id) { return scrollToComponent({ id }); }, - // open in editor openInEditor, - // get vue inspector getVueInspector: getComponentInspector, - // toggle app toggleApp(id, options) { const appRecord = devtoolsAppRecords.value.find((record) => record.id === id); if (appRecord) { @@ -3581,14 +1712,11 @@ function createDevToolsApi(hooks2) { registerDevToolsPlugin(appRecord.app, options); } }, - // inspect dom inspectDOM(instanceId) { const instance = getComponentInstance(activeAppRecord.value, instanceId); if (instance) { const [el] = getRootElementsFromComponentInstance(instance); - if (el) { - target.__VUE_DEVTOOLS_INSPECT_DOM_TARGET__ = el; - } + if (el) target.__VUE_DEVTOOLS_INSPECT_DOM_TARGET__ = el; } }, updatePluginSettings(pluginId, key, value) { @@ -3602,16 +1730,9 @@ function createDevToolsApi(hooks2) { } }; } -init_esm_shims2(); -var _a15; -var _b15; -(_b15 = (_a15 = target).__VUE_DEVTOOLS_ENV__) != null ? _b15 : _a15.__VUE_DEVTOOLS_ENV__ = { - vitePluginDetected: false -}; +target.__VUE_DEVTOOLS_ENV__ ??= { vitePluginDetected: false }; var hooks = createDevToolsCtxHooks(); -var _a16; -var _b16; -(_b16 = (_a16 = target).__VUE_DEVTOOLS_KIT_CONTEXT__) != null ? _b16 : _a16.__VUE_DEVTOOLS_KIT_CONTEXT__ = { +target.__VUE_DEVTOOLS_KIT_CONTEXT__ ??= { hooks, get state() { return { @@ -3624,15 +1745,1430 @@ var _b16; api: createDevToolsApi(hooks) }; var devtoolsContext = target.__VUE_DEVTOOLS_KIT_CONTEXT__; -init_esm_shims2(); -var import_speakingurl = __toESM2(require_speakingurl2(), 1); -var _a17; -var _b17; -var appRecordInfo = (_b17 = (_a17 = target).__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__) != null ? _b17 : _a17.__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__ = { +var require_speakingurl$1 = __commonJS2({ "../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js": ((exports, module) => { + (function(root) { + var charMap = { + "À": "A", + "Á": "A", + "Â": "A", + "Ã": "A", + "Ä": "Ae", + "Å": "A", + "Æ": "AE", + "Ç": "C", + "È": "E", + "É": "E", + "Ê": "E", + "Ë": "E", + "Ì": "I", + "Í": "I", + "Î": "I", + "Ï": "I", + "Ð": "D", + "Ñ": "N", + "Ò": "O", + "Ó": "O", + "Ô": "O", + "Õ": "O", + "Ö": "Oe", + "Ő": "O", + "Ø": "O", + "Ù": "U", + "Ú": "U", + "Û": "U", + "Ü": "Ue", + "Ű": "U", + "Ý": "Y", + "Þ": "TH", + "ß": "ss", + "à": "a", + "á": "a", + "â": "a", + "ã": "a", + "ä": "ae", + "å": "a", + "æ": "ae", + "ç": "c", + "è": "e", + "é": "e", + "ê": "e", + "ë": "e", + "ì": "i", + "í": "i", + "î": "i", + "ï": "i", + "ð": "d", + "ñ": "n", + "ò": "o", + "ó": "o", + "ô": "o", + "õ": "o", + "ö": "oe", + "ő": "o", + "ø": "o", + "ù": "u", + "ú": "u", + "û": "u", + "ü": "ue", + "ű": "u", + "ý": "y", + "þ": "th", + "ÿ": "y", + "ẞ": "SS", + "ا": "a", + "أ": "a", + "إ": "i", + "آ": "aa", + "ؤ": "u", + "ئ": "e", + "ء": "a", + "ب": "b", + "ت": "t", + "ث": "th", + "ج": "j", + "ح": "h", + "خ": "kh", + "د": "d", + "ذ": "th", + "ر": "r", + "ز": "z", + "س": "s", + "ش": "sh", + "ص": "s", + "ض": "dh", + "ط": "t", + "ظ": "z", + "ع": "a", + "غ": "gh", + "ف": "f", + "ق": "q", + "ك": "k", + "ل": "l", + "م": "m", + "ن": "n", + "ه": "h", + "و": "w", + "ي": "y", + "ى": "a", + "ة": "h", + "ﻻ": "la", + "ﻷ": "laa", + "ﻹ": "lai", + "ﻵ": "laa", + "گ": "g", + "چ": "ch", + "پ": "p", + "ژ": "zh", + "ک": "k", + "ی": "y", + "َ": "a", + "ً": "an", + "ِ": "e", + "ٍ": "en", + "ُ": "u", + "ٌ": "on", + "ْ": "", + "٠": "0", + "١": "1", + "٢": "2", + "٣": "3", + "٤": "4", + "٥": "5", + "٦": "6", + "٧": "7", + "٨": "8", + "٩": "9", + "۰": "0", + "۱": "1", + "۲": "2", + "۳": "3", + "۴": "4", + "۵": "5", + "۶": "6", + "۷": "7", + "۸": "8", + "۹": "9", + "က": "k", + "ခ": "kh", + "ဂ": "g", + "ဃ": "ga", + "င": "ng", + "စ": "s", + "ဆ": "sa", + "ဇ": "z", + "စျ": "za", + "ည": "ny", + "ဋ": "t", + "ဌ": "ta", + "ဍ": "d", + "ဎ": "da", + "ဏ": "na", + "တ": "t", + "ထ": "ta", + "ဒ": "d", + "ဓ": "da", + "န": "n", + "ပ": "p", + "ဖ": "pa", + "ဗ": "b", + "ဘ": "ba", + "မ": "m", + "ယ": "y", + "ရ": "ya", + "လ": "l", + "ဝ": "w", + "သ": "th", + "ဟ": "h", + "ဠ": "la", + "အ": "a", + "ြ": "y", + "ျ": "ya", + "ွ": "w", + "ြွ": "yw", + "ျွ": "ywa", + "ှ": "h", + "ဧ": "e", + "၏": "-e", + "ဣ": "i", + "ဤ": "-i", + "ဉ": "u", + "ဦ": "-u", + "ဩ": "aw", + "သြော": "aw", + "ဪ": "aw", + "၀": "0", + "၁": "1", + "၂": "2", + "၃": "3", + "၄": "4", + "၅": "5", + "၆": "6", + "၇": "7", + "၈": "8", + "၉": "9", + "္": "", + "့": "", + "း": "", + "č": "c", + "ď": "d", + "ě": "e", + "ň": "n", + "ř": "r", + "š": "s", + "ť": "t", + "ů": "u", + "ž": "z", + "Č": "C", + "Ď": "D", + "Ě": "E", + "Ň": "N", + "Ř": "R", + "Š": "S", + "Ť": "T", + "Ů": "U", + "Ž": "Z", + "ހ": "h", + "ށ": "sh", + "ނ": "n", + "ރ": "r", + "ބ": "b", + "ޅ": "lh", + "ކ": "k", + "އ": "a", + "ވ": "v", + "މ": "m", + "ފ": "f", + "ދ": "dh", + "ތ": "th", + "ލ": "l", + "ގ": "g", + "ޏ": "gn", + "ސ": "s", + "ޑ": "d", + "ޒ": "z", + "ޓ": "t", + "ޔ": "y", + "ޕ": "p", + "ޖ": "j", + "ޗ": "ch", + "ޘ": "tt", + "ޙ": "hh", + "ޚ": "kh", + "ޛ": "th", + "ޜ": "z", + "ޝ": "sh", + "ޞ": "s", + "ޟ": "d", + "ޠ": "t", + "ޡ": "z", + "ޢ": "a", + "ޣ": "gh", + "ޤ": "q", + "ޥ": "w", + "ަ": "a", + "ާ": "aa", + "ި": "i", + "ީ": "ee", + "ު": "u", + "ޫ": "oo", + "ެ": "e", + "ޭ": "ey", + "ޮ": "o", + "ޯ": "oa", + "ް": "", + "ა": "a", + "ბ": "b", + "გ": "g", + "დ": "d", + "ე": "e", + "ვ": "v", + "ზ": "z", + "თ": "t", + "ი": "i", + "კ": "k", + "ლ": "l", + "მ": "m", + "ნ": "n", + "ო": "o", + "პ": "p", + "ჟ": "zh", + "რ": "r", + "ს": "s", + "ტ": "t", + "უ": "u", + "ფ": "p", + "ქ": "k", + "ღ": "gh", + "ყ": "q", + "შ": "sh", + "ჩ": "ch", + "ც": "ts", + "ძ": "dz", + "წ": "ts", + "ჭ": "ch", + "ხ": "kh", + "ჯ": "j", + "ჰ": "h", + "α": "a", + "β": "v", + "γ": "g", + "δ": "d", + "ε": "e", + "ζ": "z", + "η": "i", + "θ": "th", + "ι": "i", + "κ": "k", + "λ": "l", + "μ": "m", + "ν": "n", + "ξ": "ks", + "ο": "o", + "π": "p", + "ρ": "r", + "σ": "s", + "τ": "t", + "υ": "y", + "φ": "f", + "χ": "x", + "ψ": "ps", + "ω": "o", + "ά": "a", + "έ": "e", + "ί": "i", + "ό": "o", + "ύ": "y", + "ή": "i", + "ώ": "o", + "ς": "s", + "ϊ": "i", + "ΰ": "y", + "ϋ": "y", + "ΐ": "i", + "Α": "A", + "Β": "B", + "Γ": "G", + "Δ": "D", + "Ε": "E", + "Ζ": "Z", + "Η": "I", + "Θ": "TH", + "Ι": "I", + "Κ": "K", + "Λ": "L", + "Μ": "M", + "Ν": "N", + "Ξ": "KS", + "Ο": "O", + "Π": "P", + "Ρ": "R", + "Σ": "S", + "Τ": "T", + "Υ": "Y", + "Φ": "F", + "Χ": "X", + "Ψ": "PS", + "Ω": "O", + "Ά": "A", + "Έ": "E", + "Ί": "I", + "Ό": "O", + "Ύ": "Y", + "Ή": "I", + "Ώ": "O", + "Ϊ": "I", + "Ϋ": "Y", + "ā": "a", + "ē": "e", + "ģ": "g", + "ī": "i", + "ķ": "k", + "ļ": "l", + "ņ": "n", + "ū": "u", + "Ā": "A", + "Ē": "E", + "Ģ": "G", + "Ī": "I", + "Ķ": "k", + "Ļ": "L", + "Ņ": "N", + "Ū": "U", + "Ќ": "Kj", + "ќ": "kj", + "Љ": "Lj", + "љ": "lj", + "Њ": "Nj", + "њ": "nj", + "Тс": "Ts", + "тс": "ts", + "ą": "a", + "ć": "c", + "ę": "e", + "ł": "l", + "ń": "n", + "ś": "s", + "ź": "z", + "ż": "z", + "Ą": "A", + "Ć": "C", + "Ę": "E", + "Ł": "L", + "Ń": "N", + "Ś": "S", + "Ź": "Z", + "Ż": "Z", + "Є": "Ye", + "І": "I", + "Ї": "Yi", + "Ґ": "G", + "є": "ye", + "і": "i", + "ї": "yi", + "ґ": "g", + "ă": "a", + "Ă": "A", + "ș": "s", + "Ș": "S", + "ț": "t", + "Ț": "T", + "ţ": "t", + "Ţ": "T", + "а": "a", + "б": "b", + "в": "v", + "г": "g", + "д": "d", + "е": "e", + "ё": "yo", + "ж": "zh", + "з": "z", + "и": "i", + "й": "i", + "к": "k", + "л": "l", + "м": "m", + "н": "n", + "о": "o", + "п": "p", + "р": "r", + "с": "s", + "т": "t", + "у": "u", + "ф": "f", + "х": "kh", + "ц": "c", + "ч": "ch", + "ш": "sh", + "щ": "sh", + "ъ": "", + "ы": "y", + "ь": "", + "э": "e", + "ю": "yu", + "я": "ya", + "А": "A", + "Б": "B", + "В": "V", + "Г": "G", + "Д": "D", + "Е": "E", + "Ё": "Yo", + "Ж": "Zh", + "З": "Z", + "И": "I", + "Й": "I", + "К": "K", + "Л": "L", + "М": "M", + "Н": "N", + "О": "O", + "П": "P", + "Р": "R", + "С": "S", + "Т": "T", + "У": "U", + "Ф": "F", + "Х": "Kh", + "Ц": "C", + "Ч": "Ch", + "Ш": "Sh", + "Щ": "Sh", + "Ъ": "", + "Ы": "Y", + "Ь": "", + "Э": "E", + "Ю": "Yu", + "Я": "Ya", + "ђ": "dj", + "ј": "j", + "ћ": "c", + "џ": "dz", + "Ђ": "Dj", + "Ј": "j", + "Ћ": "C", + "Џ": "Dz", + "ľ": "l", + "ĺ": "l", + "ŕ": "r", + "Ľ": "L", + "Ĺ": "L", + "Ŕ": "R", + "ş": "s", + "Ş": "S", + "ı": "i", + "İ": "I", + "ğ": "g", + "Ğ": "G", + "ả": "a", + "Ả": "A", + "ẳ": "a", + "Ẳ": "A", + "ẩ": "a", + "Ẩ": "A", + "đ": "d", + "Đ": "D", + "ẹ": "e", + "Ẹ": "E", + "ẽ": "e", + "Ẽ": "E", + "ẻ": "e", + "Ẻ": "E", + "ế": "e", + "Ế": "E", + "ề": "e", + "Ề": "E", + "ệ": "e", + "Ệ": "E", + "ễ": "e", + "Ễ": "E", + "ể": "e", + "Ể": "E", + "ỏ": "o", + "ọ": "o", + "Ọ": "o", + "ố": "o", + "Ố": "O", + "ồ": "o", + "Ồ": "O", + "ổ": "o", + "Ổ": "O", + "ộ": "o", + "Ộ": "O", + "ỗ": "o", + "Ỗ": "O", + "ơ": "o", + "Ơ": "O", + "ớ": "o", + "Ớ": "O", + "ờ": "o", + "Ờ": "O", + "ợ": "o", + "Ợ": "O", + "ỡ": "o", + "Ỡ": "O", + "Ở": "o", + "ở": "o", + "ị": "i", + "Ị": "I", + "ĩ": "i", + "Ĩ": "I", + "ỉ": "i", + "Ỉ": "i", + "ủ": "u", + "Ủ": "U", + "ụ": "u", + "Ụ": "U", + "ũ": "u", + "Ũ": "U", + "ư": "u", + "Ư": "U", + "ứ": "u", + "Ứ": "U", + "ừ": "u", + "Ừ": "U", + "ự": "u", + "Ự": "U", + "ữ": "u", + "Ữ": "U", + "ử": "u", + "Ử": "ư", + "ỷ": "y", + "Ỷ": "y", + "ỳ": "y", + "Ỳ": "Y", + "ỵ": "y", + "Ỵ": "Y", + "ỹ": "y", + "Ỹ": "Y", + "ạ": "a", + "Ạ": "A", + "ấ": "a", + "Ấ": "A", + "ầ": "a", + "Ầ": "A", + "ậ": "a", + "Ậ": "A", + "ẫ": "a", + "Ẫ": "A", + "ắ": "a", + "Ắ": "A", + "ằ": "a", + "Ằ": "A", + "ặ": "a", + "Ặ": "A", + "ẵ": "a", + "Ẵ": "A", + "⓪": "0", + "①": "1", + "②": "2", + "③": "3", + "④": "4", + "⑤": "5", + "⑥": "6", + "⑦": "7", + "⑧": "8", + "⑨": "9", + "⑩": "10", + "⑪": "11", + "⑫": "12", + "⑬": "13", + "⑭": "14", + "⑮": "15", + "⑯": "16", + "⑰": "17", + "⑱": "18", + "⑲": "18", + "⑳": "18", + "⓵": "1", + "⓶": "2", + "⓷": "3", + "⓸": "4", + "⓹": "5", + "⓺": "6", + "⓻": "7", + "⓼": "8", + "⓽": "9", + "⓾": "10", + "⓿": "0", + "⓫": "11", + "⓬": "12", + "⓭": "13", + "⓮": "14", + "⓯": "15", + "⓰": "16", + "⓱": "17", + "⓲": "18", + "⓳": "19", + "⓴": "20", + "Ⓐ": "A", + "Ⓑ": "B", + "Ⓒ": "C", + "Ⓓ": "D", + "Ⓔ": "E", + "Ⓕ": "F", + "Ⓖ": "G", + "Ⓗ": "H", + "Ⓘ": "I", + "Ⓙ": "J", + "Ⓚ": "K", + "Ⓛ": "L", + "Ⓜ": "M", + "Ⓝ": "N", + "Ⓞ": "O", + "Ⓟ": "P", + "Ⓠ": "Q", + "Ⓡ": "R", + "Ⓢ": "S", + "Ⓣ": "T", + "Ⓤ": "U", + "Ⓥ": "V", + "Ⓦ": "W", + "Ⓧ": "X", + "Ⓨ": "Y", + "Ⓩ": "Z", + "ⓐ": "a", + "ⓑ": "b", + "ⓒ": "c", + "ⓓ": "d", + "ⓔ": "e", + "ⓕ": "f", + "ⓖ": "g", + "ⓗ": "h", + "ⓘ": "i", + "ⓙ": "j", + "ⓚ": "k", + "ⓛ": "l", + "ⓜ": "m", + "ⓝ": "n", + "ⓞ": "o", + "ⓟ": "p", + "ⓠ": "q", + "ⓡ": "r", + "ⓢ": "s", + "ⓣ": "t", + "ⓤ": "u", + "ⓦ": "v", + "ⓥ": "w", + "ⓧ": "x", + "ⓨ": "y", + "ⓩ": "z", + "“": '"', + "”": '"', + "‘": "'", + "’": "'", + "∂": "d", + "ƒ": "f", + "™": "(TM)", + "©": "(C)", + "œ": "oe", + "Œ": "OE", + "®": "(R)", + "†": "+", + "℠": "(SM)", + "…": "...", + "˚": "o", + "º": "o", + "ª": "a", + "•": "*", + "၊": ",", + "။": ".", + "$": "USD", + "€": "EUR", + "₢": "BRN", + "₣": "FRF", + "£": "GBP", + "₤": "ITL", + "₦": "NGN", + "₧": "ESP", + "₩": "KRW", + "₪": "ILS", + "₫": "VND", + "₭": "LAK", + "₮": "MNT", + "₯": "GRD", + "₱": "ARS", + "₲": "PYG", + "₳": "ARA", + "₴": "UAH", + "₵": "GHS", + "¢": "cent", + "¥": "CNY", + "元": "CNY", + "円": "YEN", + "﷼": "IRR", + "₠": "EWE", + "฿": "THB", + "₨": "INR", + "₹": "INR", + "₰": "PF", + "₺": "TRY", + "؋": "AFN", + "₼": "AZN", + "лв": "BGN", + "៛": "KHR", + "₡": "CRC", + "₸": "KZT", + "ден": "MKD", + "zł": "PLN", + "₽": "RUB", + "₾": "GEL" + }; + var lookAheadCharArray = ["်", "ް"]; + var diatricMap = { + "ာ": "a", + "ါ": "a", + "ေ": "e", + "ဲ": "e", + "ိ": "i", + "ီ": "i", + "ို": "o", + "ု": "u", + "ူ": "u", + "ေါင်": "aung", + "ော": "aw", + "ော်": "aw", + "ေါ": "aw", + "ေါ်": "aw", + "်": "်", + "က်": "et", + "ိုက်": "aik", + "ောက်": "auk", + "င်": "in", + "ိုင်": "aing", + "ောင်": "aung", + "စ်": "it", + "ည်": "i", + "တ်": "at", + "ိတ်": "eik", + "ုတ်": "ok", + "ွတ်": "ut", + "ေတ်": "it", + "ဒ်": "d", + "ိုဒ်": "ok", + "ုဒ်": "ait", + "န်": "an", + "ာန်": "an", + "ိန်": "ein", + "ုန်": "on", + "ွန်": "un", + "ပ်": "at", + "ိပ်": "eik", + "ုပ်": "ok", + "ွပ်": "ut", + "န်ုပ်": "nub", + "မ်": "an", + "ိမ်": "ein", + "ုမ်": "on", + "ွမ်": "un", + "ယ်": "e", + "ိုလ်": "ol", + "ဉ်": "in", + "ံ": "an", + "ိံ": "ein", + "ုံ": "on", + "ައް": "ah", + "ަށް": "ah" + }; + var langCharMap = { + "en": {}, + "az": { + "ç": "c", + "ə": "e", + "ğ": "g", + "ı": "i", + "ö": "o", + "ş": "s", + "ü": "u", + "Ç": "C", + "Ə": "E", + "Ğ": "G", + "İ": "I", + "Ö": "O", + "Ş": "S", + "Ü": "U" + }, + "cs": { + "č": "c", + "ď": "d", + "ě": "e", + "ň": "n", + "ř": "r", + "š": "s", + "ť": "t", + "ů": "u", + "ž": "z", + "Č": "C", + "Ď": "D", + "Ě": "E", + "Ň": "N", + "Ř": "R", + "Š": "S", + "Ť": "T", + "Ů": "U", + "Ž": "Z" + }, + "fi": { + "ä": "a", + "Ä": "A", + "ö": "o", + "Ö": "O" + }, + "hu": { + "ä": "a", + "Ä": "A", + "ö": "o", + "Ö": "O", + "ü": "u", + "Ü": "U", + "ű": "u", + "Ű": "U" + }, + "lt": { + "ą": "a", + "č": "c", + "ę": "e", + "ė": "e", + "į": "i", + "š": "s", + "ų": "u", + "ū": "u", + "ž": "z", + "Ą": "A", + "Č": "C", + "Ę": "E", + "Ė": "E", + "Į": "I", + "Š": "S", + "Ų": "U", + "Ū": "U" + }, + "lv": { + "ā": "a", + "č": "c", + "ē": "e", + "ģ": "g", + "ī": "i", + "ķ": "k", + "ļ": "l", + "ņ": "n", + "š": "s", + "ū": "u", + "ž": "z", + "Ā": "A", + "Č": "C", + "Ē": "E", + "Ģ": "G", + "Ī": "i", + "Ķ": "k", + "Ļ": "L", + "Ņ": "N", + "Š": "S", + "Ū": "u", + "Ž": "Z" + }, + "pl": { + "ą": "a", + "ć": "c", + "ę": "e", + "ł": "l", + "ń": "n", + "ó": "o", + "ś": "s", + "ź": "z", + "ż": "z", + "Ą": "A", + "Ć": "C", + "Ę": "e", + "Ł": "L", + "Ń": "N", + "Ó": "O", + "Ś": "S", + "Ź": "Z", + "Ż": "Z" + }, + "sv": { + "ä": "a", + "Ä": "A", + "ö": "o", + "Ö": "O" + }, + "sk": { + "ä": "a", + "Ä": "A" + }, + "sr": { + "љ": "lj", + "њ": "nj", + "Љ": "Lj", + "Њ": "Nj", + "đ": "dj", + "Đ": "Dj" + }, + "tr": { + "Ü": "U", + "Ö": "O", + "ü": "u", + "ö": "o" + } + }; + var symbolMap = { + "ar": { + "∆": "delta", + "∞": "la-nihaya", + "♥": "hob", + "&": "wa", + "|": "aw", + "<": "aqal-men", + ">": "akbar-men", + "∑": "majmou", + "¤": "omla" + }, + "az": {}, + "ca": { + "∆": "delta", + "∞": "infinit", + "♥": "amor", + "&": "i", + "|": "o", + "<": "menys que", + ">": "mes que", + "∑": "suma dels", + "¤": "moneda" + }, + "cs": { + "∆": "delta", + "∞": "nekonecno", + "♥": "laska", + "&": "a", + "|": "nebo", + "<": "mensi nez", + ">": "vetsi nez", + "∑": "soucet", + "¤": "mena" + }, + "de": { + "∆": "delta", + "∞": "unendlich", + "♥": "Liebe", + "&": "und", + "|": "oder", + "<": "kleiner als", + ">": "groesser als", + "∑": "Summe von", + "¤": "Waehrung" + }, + "dv": { + "∆": "delta", + "∞": "kolunulaa", + "♥": "loabi", + "&": "aai", + "|": "noonee", + "<": "ah vure kuda", + ">": "ah vure bodu", + "∑": "jumula", + "¤": "faisaa" + }, + "en": { + "∆": "delta", + "∞": "infinity", + "♥": "love", + "&": "and", + "|": "or", + "<": "less than", + ">": "greater than", + "∑": "sum", + "¤": "currency" + }, + "es": { + "∆": "delta", + "∞": "infinito", + "♥": "amor", + "&": "y", + "|": "u", + "<": "menos que", + ">": "mas que", + "∑": "suma de los", + "¤": "moneda" + }, + "fa": { + "∆": "delta", + "∞": "bi-nahayat", + "♥": "eshgh", + "&": "va", + "|": "ya", + "<": "kamtar-az", + ">": "bishtar-az", + "∑": "majmooe", + "¤": "vahed" + }, + "fi": { + "∆": "delta", + "∞": "aarettomyys", + "♥": "rakkaus", + "&": "ja", + "|": "tai", + "<": "pienempi kuin", + ">": "suurempi kuin", + "∑": "summa", + "¤": "valuutta" + }, + "fr": { + "∆": "delta", + "∞": "infiniment", + "♥": "Amour", + "&": "et", + "|": "ou", + "<": "moins que", + ">": "superieure a", + "∑": "somme des", + "¤": "monnaie" + }, + "ge": { + "∆": "delta", + "∞": "usasruloba", + "♥": "siqvaruli", + "&": "da", + "|": "an", + "<": "naklebi", + ">": "meti", + "∑": "jami", + "¤": "valuta" + }, + "gr": {}, + "hu": { + "∆": "delta", + "∞": "vegtelen", + "♥": "szerelem", + "&": "es", + "|": "vagy", + "<": "kisebb mint", + ">": "nagyobb mint", + "∑": "szumma", + "¤": "penznem" + }, + "it": { + "∆": "delta", + "∞": "infinito", + "♥": "amore", + "&": "e", + "|": "o", + "<": "minore di", + ">": "maggiore di", + "∑": "somma", + "¤": "moneta" + }, + "lt": { + "∆": "delta", + "∞": "begalybe", + "♥": "meile", + "&": "ir", + "|": "ar", + "<": "maziau nei", + ">": "daugiau nei", + "∑": "suma", + "¤": "valiuta" + }, + "lv": { + "∆": "delta", + "∞": "bezgaliba", + "♥": "milestiba", + "&": "un", + "|": "vai", + "<": "mazak neka", + ">": "lielaks neka", + "∑": "summa", + "¤": "valuta" + }, + "my": { + "∆": "kwahkhyaet", + "∞": "asaonasme", + "♥": "akhyait", + "&": "nhin", + "|": "tho", + "<": "ngethaw", + ">": "kyithaw", + "∑": "paungld", + "¤": "ngwekye" + }, + "mk": {}, + "nl": { + "∆": "delta", + "∞": "oneindig", + "♥": "liefde", + "&": "en", + "|": "of", + "<": "kleiner dan", + ">": "groter dan", + "∑": "som", + "¤": "valuta" + }, + "pl": { + "∆": "delta", + "∞": "nieskonczonosc", + "♥": "milosc", + "&": "i", + "|": "lub", + "<": "mniejsze niz", + ">": "wieksze niz", + "∑": "suma", + "¤": "waluta" + }, + "pt": { + "∆": "delta", + "∞": "infinito", + "♥": "amor", + "&": "e", + "|": "ou", + "<": "menor que", + ">": "maior que", + "∑": "soma", + "¤": "moeda" + }, + "ro": { + "∆": "delta", + "∞": "infinit", + "♥": "dragoste", + "&": "si", + "|": "sau", + "<": "mai mic ca", + ">": "mai mare ca", + "∑": "suma", + "¤": "valuta" + }, + "ru": { + "∆": "delta", + "∞": "beskonechno", + "♥": "lubov", + "&": "i", + "|": "ili", + "<": "menshe", + ">": "bolshe", + "∑": "summa", + "¤": "valjuta" + }, + "sk": { + "∆": "delta", + "∞": "nekonecno", + "♥": "laska", + "&": "a", + "|": "alebo", + "<": "menej ako", + ">": "viac ako", + "∑": "sucet", + "¤": "mena" + }, + "sr": {}, + "tr": { + "∆": "delta", + "∞": "sonsuzluk", + "♥": "ask", + "&": "ve", + "|": "veya", + "<": "kucuktur", + ">": "buyuktur", + "∑": "toplam", + "¤": "para birimi" + }, + "uk": { + "∆": "delta", + "∞": "bezkinechnist", + "♥": "lubov", + "&": "i", + "|": "abo", + "<": "menshe", + ">": "bilshe", + "∑": "suma", + "¤": "valjuta" + }, + "vn": { + "∆": "delta", + "∞": "vo cuc", + "♥": "yeu", + "&": "va", + "|": "hoac", + "<": "nho hon", + ">": "lon hon", + "∑": "tong", + "¤": "tien te" + } + }; + var uricChars = [ + ";", + "?", + ":", + "@", + "&", + "=", + "+", + "$", + ",", + "/" + ].join(""); + var uricNoSlashChars = [ + ";", + "?", + ":", + "@", + "&", + "=", + "+", + "$", + "," + ].join(""); + var markChars = [ + ".", + "!", + "~", + "*", + "'", + "(", + ")" + ].join(""); + var getSlug = function getSlug$1(input, opts) { + var separator = "-"; + var result = ""; + var diatricString = ""; + var convertSymbols = true; + var customReplacements = {}; + var maintainCase; + var titleCase; + var truncate; + var uricFlag; + var uricNoSlashFlag; + var markFlag; + var symbol; + var langChar; + var lucky; + var i; + var ch; + var l; + var lastCharWasSymbol; + var lastCharWasDiatric; + var allowedChars = ""; + if (typeof input !== "string") return ""; + if (typeof opts === "string") separator = opts; + symbol = symbolMap.en; + langChar = langCharMap.en; + if (typeof opts === "object") { + maintainCase = opts.maintainCase || false; + customReplacements = opts.custom && typeof opts.custom === "object" ? opts.custom : customReplacements; + truncate = +opts.truncate > 1 && opts.truncate || false; + uricFlag = opts.uric || false; + uricNoSlashFlag = opts.uricNoSlash || false; + markFlag = opts.mark || false; + convertSymbols = opts.symbols === false || opts.lang === false ? false : true; + separator = opts.separator || separator; + if (uricFlag) allowedChars += uricChars; + if (uricNoSlashFlag) allowedChars += uricNoSlashChars; + if (markFlag) allowedChars += markChars; + symbol = opts.lang && symbolMap[opts.lang] && convertSymbols ? symbolMap[opts.lang] : convertSymbols ? symbolMap.en : {}; + langChar = opts.lang && langCharMap[opts.lang] ? langCharMap[opts.lang] : opts.lang === false || opts.lang === true ? {} : langCharMap.en; + if (opts.titleCase && typeof opts.titleCase.length === "number" && Array.prototype.toString.call(opts.titleCase)) { + opts.titleCase.forEach(function(v) { + customReplacements[v + ""] = v + ""; + }); + titleCase = true; + } else titleCase = !!opts.titleCase; + if (opts.custom && typeof opts.custom.length === "number" && Array.prototype.toString.call(opts.custom)) opts.custom.forEach(function(v) { + customReplacements[v + ""] = v + ""; + }); + Object.keys(customReplacements).forEach(function(v) { + var r; + if (v.length > 1) r = new RegExp("\\b" + escapeChars(v) + "\\b", "gi"); + else r = new RegExp(escapeChars(v), "gi"); + input = input.replace(r, customReplacements[v]); + }); + for (ch in customReplacements) allowedChars += ch; + } + allowedChars += separator; + allowedChars = escapeChars(allowedChars); + input = input.replace(/(^\s+|\s+$)/g, ""); + lastCharWasSymbol = false; + lastCharWasDiatric = false; + for (i = 0, l = input.length; i < l; i++) { + ch = input[i]; + if (isReplacedCustomChar(ch, customReplacements)) lastCharWasSymbol = false; + else if (langChar[ch]) { + ch = lastCharWasSymbol && langChar[ch].match(/[A-Za-z0-9]/) ? " " + langChar[ch] : langChar[ch]; + lastCharWasSymbol = false; + } else if (ch in charMap) { + if (i + 1 < l && lookAheadCharArray.indexOf(input[i + 1]) >= 0) { + diatricString += ch; + ch = ""; + } else if (lastCharWasDiatric === true) { + ch = diatricMap[diatricString] + charMap[ch]; + diatricString = ""; + } else ch = lastCharWasSymbol && charMap[ch].match(/[A-Za-z0-9]/) ? " " + charMap[ch] : charMap[ch]; + lastCharWasSymbol = false; + lastCharWasDiatric = false; + } else if (ch in diatricMap) { + diatricString += ch; + ch = ""; + if (i === l - 1) ch = diatricMap[diatricString]; + lastCharWasDiatric = true; + } else if (symbol[ch] && !(uricFlag && uricChars.indexOf(ch) !== -1) && !(uricNoSlashFlag && uricNoSlashChars.indexOf(ch) !== -1)) { + ch = lastCharWasSymbol || result.substr(-1).match(/[A-Za-z0-9]/) ? separator + symbol[ch] : symbol[ch]; + ch += input[i + 1] !== void 0 && input[i + 1].match(/[A-Za-z0-9]/) ? separator : ""; + lastCharWasSymbol = true; + } else { + if (lastCharWasDiatric === true) { + ch = diatricMap[diatricString] + ch; + diatricString = ""; + lastCharWasDiatric = false; + } else if (lastCharWasSymbol && (/[A-Za-z0-9]/.test(ch) || result.substr(-1).match(/A-Za-z0-9]/))) ch = " " + ch; + lastCharWasSymbol = false; + } + result += ch.replace(new RegExp("[^\\w\\s" + allowedChars + "_-]", "g"), separator); + } + if (titleCase) result = result.replace(/(\w)(\S*)/g, function(_, i$1, r) { + var j = i$1.toUpperCase() + (r !== null ? r : ""); + return Object.keys(customReplacements).indexOf(j.toLowerCase()) < 0 ? j : j.toLowerCase(); + }); + result = result.replace(/\s+/g, separator).replace(new RegExp("\\" + separator + "+", "g"), separator).replace(new RegExp("(^\\" + separator + "+|\\" + separator + "+$)", "g"), ""); + if (truncate && result.length > truncate) { + lucky = result.charAt(truncate) === separator; + result = result.slice(0, truncate); + if (!lucky) result = result.slice(0, result.lastIndexOf(separator)); + } + if (!maintainCase && !titleCase) result = result.toLowerCase(); + return result; + }; + var createSlug = function createSlug$1(opts) { + return function getSlugWithConfig(input) { + return getSlug(input, opts); + }; + }; + var escapeChars = function escapeChars$1(input) { + return input.replace(/[-\\^$*+?.()|[\]{}\/]/g, "\\$&"); + }; + var isReplacedCustomChar = function(ch, customReplacements) { + for (var c in customReplacements) if (customReplacements[c] === ch) return true; + }; + if (typeof module !== "undefined" && module.exports) { + module.exports = getSlug; + module.exports.createSlug = createSlug; + } else if (typeof define !== "undefined" && define.amd) define([], function() { + return getSlug; + }); + else try { + if (root.getSlug || root.createSlug) throw "speakingurl: globals exists /(getSlug|createSlug)/"; + else { + root.getSlug = getSlug; + root.createSlug = createSlug; + } + } catch (e) { + } + })(exports); +}) }); +var require_speakingurl = __commonJS2({ "../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/index.js": ((exports, module) => { + module.exports = require_speakingurl$1(); +}) }); +var import_speakingurl = __toESM2(require_speakingurl(), 1); +var appRecordInfo = target.__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__ ??= { id: 0, appIds: /* @__PURE__ */ new Set() }; -init_esm_shims2(); function onDevToolsClientConnected(fn) { return new Promise((resolve) => { if (devtoolsState.connected && devtoolsState.clientConnected) { @@ -3640,7 +3176,7 @@ function onDevToolsClientConnected(fn) { resolve(); return; } - devtoolsContext.hooks.hook("devtoolsConnectedUpdated", ({ state }) => { + devtoolsContext.hooks.hook(DevToolsMessagingHookKeys.DEVTOOLS_CONNECTED_UPDATED, ({ state }) => { if (state.connected && state.clientConnected) { fn(); resolve(); @@ -3648,34 +3184,18 @@ function onDevToolsClientConnected(fn) { }); }); } -init_esm_shims2(); function toggleHighPerfMode(state) { - devtoolsState.highPerfModeEnabled = state != null ? state : !devtoolsState.highPerfModeEnabled; - if (!state && activeAppRecord.value) { - registerDevToolsPlugin(activeAppRecord.value.app); - } + devtoolsState.highPerfModeEnabled = state ?? !devtoolsState.highPerfModeEnabled; + if (!state && activeAppRecord.value) registerDevToolsPlugin(activeAppRecord.value.app); } -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); function updateDevToolsClientDetected(params) { devtoolsState.devtoolsClientDetected = { ...devtoolsState.devtoolsClientDetected, ...params }; - const devtoolsClientVisible = Object.values(devtoolsState.devtoolsClientDetected).some(Boolean); - toggleHighPerfMode(!devtoolsClientVisible); + toggleHighPerfMode(!Object.values(devtoolsState.devtoolsClientDetected).some(Boolean)); } -var _a18; -var _b18; -(_b18 = (_a18 = target).__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__) != null ? _b18 : _a18.__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__ = updateDevToolsClientDetected; -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); +target.__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__ ??= updateDevToolsClientDetected; var DoubleIndexedKV = class { constructor() { this.keyToValue = /* @__PURE__ */ new Map(); @@ -3702,12 +3222,8 @@ var Registry = class { this.kv = new DoubleIndexedKV(); } register(value, identifier) { - if (this.kv.getByValue(value)) { - return; - } - if (!identifier) { - identifier = this.generateIdentifier(value); - } + if (this.kv.getByValue(value)) return; + if (!identifier) identifier = this.generateIdentifier(value); this.kv.set(identifier, value); } clear() { @@ -3727,45 +3243,28 @@ var ClassRegistry = class extends Registry { } register(value, options) { if (typeof options === "object") { - if (options.allowProps) { - this.classToAllowedProps.set(value, options.allowProps); - } + if (options.allowProps) this.classToAllowedProps.set(value, options.allowProps); super.register(value, options.identifier); - } else { - super.register(value, options); - } + } else super.register(value, options); } getAllowedProps(value) { return this.classToAllowedProps.get(value); } }; -init_esm_shims2(); -init_esm_shims2(); function valuesOfObj(record) { - if ("values" in Object) { - return Object.values(record); - } + if ("values" in Object) return Object.values(record); const values = []; - for (const key in record) { - if (record.hasOwnProperty(key)) { - values.push(record[key]); - } - } + for (const key in record) if (record.hasOwnProperty(key)) values.push(record[key]); return values; } function find(record, predicate) { const values = valuesOfObj(record); - if ("find" in values) { - return values.find(predicate); - } + if ("find" in values) return values.find(predicate); const valuesNotNever = values; for (let i = 0; i < valuesNotNever.length; i++) { const value = valuesNotNever[i]; - if (predicate(value)) { - return value; - } + if (predicate(value)) return value; } - return void 0; } function forEach(record, run) { Object.entries(record).forEach(([key, value]) => run(value, key)); @@ -3776,11 +3275,8 @@ function includes(arr, value) { function findArr(record, predicate) { for (let i = 0; i < record.length; i++) { const value = record[i]; - if (predicate(value)) { - return value; - } + if (predicate(value)) return value; } - return void 0; } var CustomTransformerRegistry = class { constructor() { @@ -3796,38 +3292,32 @@ var CustomTransformerRegistry = class { return this.transfomers[name]; } }; -init_esm_shims2(); -init_esm_shims2(); -var getType = (payload) => Object.prototype.toString.call(payload).slice(8, -1); -var isUndefined = (payload) => typeof payload === "undefined"; -var isNull = (payload) => payload === null; -var isPlainObject2 = (payload) => { - if (typeof payload !== "object" || payload === null) - return false; - if (payload === Object.prototype) - return false; - if (Object.getPrototypeOf(payload) === null) - return true; +var getType$1 = (payload) => Object.prototype.toString.call(payload).slice(8, -1); +var isUndefined$1 = (payload) => typeof payload === "undefined"; +var isNull$1 = (payload) => payload === null; +var isPlainObject$2 = (payload) => { + if (typeof payload !== "object" || payload === null) return false; + if (payload === Object.prototype) return false; + if (Object.getPrototypeOf(payload) === null) return true; return Object.getPrototypeOf(payload) === Object.prototype; }; -var isEmptyObject = (payload) => isPlainObject2(payload) && Object.keys(payload).length === 0; -var isArray = (payload) => Array.isArray(payload); +var isEmptyObject = (payload) => isPlainObject$2(payload) && Object.keys(payload).length === 0; +var isArray$2 = (payload) => Array.isArray(payload); var isString = (payload) => typeof payload === "string"; var isNumber = (payload) => typeof payload === "number" && !isNaN(payload); var isBoolean = (payload) => typeof payload === "boolean"; var isRegExp = (payload) => payload instanceof RegExp; var isMap = (payload) => payload instanceof Map; var isSet = (payload) => payload instanceof Set; -var isSymbol = (payload) => getType(payload) === "Symbol"; +var isSymbol = (payload) => getType$1(payload) === "Symbol"; var isDate = (payload) => payload instanceof Date && !isNaN(payload.valueOf()); var isError = (payload) => payload instanceof Error; var isNaNValue = (payload) => typeof payload === "number" && isNaN(payload); -var isPrimitive2 = (payload) => isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload); +var isPrimitive = (payload) => isBoolean(payload) || isNull$1(payload) || isUndefined$1(payload) || isNumber(payload) || isString(payload) || isSymbol(payload); var isBigint = (payload) => typeof payload === "bigint"; var isInfinite = (payload) => payload === Infinity || payload === -Infinity; var isTypedArray = (payload) => ArrayBuffer.isView(payload) && !(payload instanceof DataView); var isURL = (payload) => payload instanceof URL; -init_esm_shims2(); var escapeKey = (key) => key.replace(/\./g, "\\."); var stringifyPath = (path) => path.map(String).map(escapeKey).join("."); var parsePath = (string) => { @@ -3835,14 +3325,12 @@ var parsePath = (string) => { let segment = ""; for (let i = 0; i < string.length; i++) { let char = string.charAt(i); - const isEscapedDot = char === "\\" && string.charAt(i + 1) === "."; - if (isEscapedDot) { + if (char === "\\" && string.charAt(i + 1) === ".") { segment += "."; i++; continue; } - const isEndOfSegment = char === "."; - if (isEndOfSegment) { + if (char === ".") { result.push(segment); segment = ""; continue; @@ -3853,7 +3341,6 @@ var parsePath = (string) => { result.push(lastSegment); return result; }; -init_esm_shims2(); function simpleTransformation(isApplicable, annotation, transform, untransform) { return { isApplicable, @@ -3863,11 +3350,9 @@ function simpleTransformation(isApplicable, annotation, transform, untransform) }; } var simpleRules = [ - simpleTransformation(isUndefined, "undefined", () => null, () => void 0), + simpleTransformation(isUndefined$1, "undefined", () => null, () => void 0), simpleTransformation(isBigint, "bigint", (v) => v.toString(), (v) => { - if (typeof BigInt !== "undefined") { - return BigInt(v); - } + if (typeof BigInt !== "undefined") return BigInt(v); console.error("Please add a BigInt polyfill."); return v; }), @@ -3895,24 +3380,12 @@ var simpleRules = [ const flags = regex.slice(regex.lastIndexOf("/") + 1); return new RegExp(body, flags); }), - simpleTransformation( - isSet, - "set", - // (sets only exist in es6+) - // eslint-disable-next-line es5/no-es6-methods - (v) => [...v.values()], - (v) => new Set(v) - ), + simpleTransformation(isSet, "set", (v) => [...v.values()], (v) => new Set(v)), simpleTransformation(isMap, "map", (v) => [...v.entries()], (v) => new Map(v)), simpleTransformation((v) => isNaNValue(v) || isInfinite(v), "number", (v) => { - if (isNaNValue(v)) { - return "NaN"; - } - if (v > 0) { - return "Infinity"; - } else { - return "-Infinity"; - } + if (isNaNValue(v)) return "NaN"; + if (v > 0) return "Infinity"; + else return "-Infinity"; }, Number), simpleTransformation((v) => v === 0 && 1 / v === -Infinity, "number", () => { return "-0"; @@ -3928,19 +3401,13 @@ function compositeTransformation(isApplicable, annotation, transform, untransfor }; } var symbolRule = compositeTransformation((s, superJson) => { - if (isSymbol(s)) { - const isRegistered = !!superJson.symbolRegistry.getIdentifier(s); - return isRegistered; - } + if (isSymbol(s)) return !!superJson.symbolRegistry.getIdentifier(s); return false; }, (s, superJson) => { - const identifier = superJson.symbolRegistry.getIdentifier(s); - return ["symbol", identifier]; + return ["symbol", superJson.symbolRegistry.getIdentifier(s)]; }, (v) => v.description, (_, a, superJson) => { const value = superJson.symbolRegistry.getValue(a[1]); - if (!value) { - throw new Error("Trying to deserialize unknown symbol"); - } + if (!value) throw new Error("Trying to deserialize unknown symbol"); return value; }); var constructorToName = [ @@ -3959,26 +3426,18 @@ var constructorToName = [ }, {}); var typedArrayRule = compositeTransformation(isTypedArray, (v) => ["typed-array", v.constructor.name], (v) => [...v], (v, a) => { const ctor = constructorToName[a[1]]; - if (!ctor) { - throw new Error("Trying to deserialize unknown typed array"); - } + if (!ctor) throw new Error("Trying to deserialize unknown typed array"); return new ctor(v); }); function isInstanceOfRegisteredClass(potentialClass, superJson) { - if (potentialClass == null ? void 0 : potentialClass.constructor) { - const isRegistered = !!superJson.classRegistry.getIdentifier(potentialClass.constructor); - return isRegistered; - } + if (potentialClass?.constructor) return !!superJson.classRegistry.getIdentifier(potentialClass.constructor); return false; } var classRule = compositeTransformation(isInstanceOfRegisteredClass, (clazz, superJson) => { - const identifier = superJson.classRegistry.getIdentifier(clazz.constructor); - return ["class", identifier]; + return ["class", superJson.classRegistry.getIdentifier(clazz.constructor)]; }, (clazz, superJson) => { const allowedProps = superJson.classRegistry.getAllowedProps(clazz.constructor); - if (!allowedProps) { - return { ...clazz }; - } + if (!allowedProps) return { ...clazz }; const result = {}; allowedProps.forEach((prop) => { result[prop] = clazz[prop]; @@ -3986,74 +3445,63 @@ var classRule = compositeTransformation(isInstanceOfRegisteredClass, (clazz, sup return result; }, (v, a, superJson) => { const clazz = superJson.classRegistry.getValue(a[1]); - if (!clazz) { - throw new Error(`Trying to deserialize unknown class '${a[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`); - } + if (!clazz) throw new Error(`Trying to deserialize unknown class '${a[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`); return Object.assign(Object.create(clazz.prototype), v); }); var customRule = compositeTransformation((value, superJson) => { return !!superJson.customTransformerRegistry.findApplicable(value); }, (value, superJson) => { - const transformer = superJson.customTransformerRegistry.findApplicable(value); - return ["custom", transformer.name]; + return ["custom", superJson.customTransformerRegistry.findApplicable(value).name]; }, (value, superJson) => { - const transformer = superJson.customTransformerRegistry.findApplicable(value); - return transformer.serialize(value); + return superJson.customTransformerRegistry.findApplicable(value).serialize(value); }, (v, a, superJson) => { const transformer = superJson.customTransformerRegistry.findByName(a[1]); - if (!transformer) { - throw new Error("Trying to deserialize unknown custom value"); - } + if (!transformer) throw new Error("Trying to deserialize unknown custom value"); return transformer.deserialize(v); }); -var compositeRules = [classRule, symbolRule, customRule, typedArrayRule]; +var compositeRules = [ + classRule, + symbolRule, + customRule, + typedArrayRule +]; var transformValue = (value, superJson) => { const applicableCompositeRule = findArr(compositeRules, (rule) => rule.isApplicable(value, superJson)); - if (applicableCompositeRule) { - return { - value: applicableCompositeRule.transform(value, superJson), - type: applicableCompositeRule.annotation(value, superJson) - }; - } + if (applicableCompositeRule) return { + value: applicableCompositeRule.transform(value, superJson), + type: applicableCompositeRule.annotation(value, superJson) + }; const applicableSimpleRule = findArr(simpleRules, (rule) => rule.isApplicable(value, superJson)); - if (applicableSimpleRule) { - return { - value: applicableSimpleRule.transform(value, superJson), - type: applicableSimpleRule.annotation - }; - } - return void 0; + if (applicableSimpleRule) return { + value: applicableSimpleRule.transform(value, superJson), + type: applicableSimpleRule.annotation + }; }; var simpleRulesByAnnotation = {}; simpleRules.forEach((rule) => { simpleRulesByAnnotation[rule.annotation] = rule; }); var untransformValue = (json, type, superJson) => { - if (isArray(type)) { - switch (type[0]) { - case "symbol": - return symbolRule.untransform(json, type, superJson); - case "class": - return classRule.untransform(json, type, superJson); - case "custom": - return customRule.untransform(json, type, superJson); - case "typed-array": - return typedArrayRule.untransform(json, type, superJson); - default: - throw new Error("Unknown transformation: " + type); - } - } else { - const transformation = simpleRulesByAnnotation[type]; - if (!transformation) { + if (isArray$2(type)) switch (type[0]) { + case "symbol": + return symbolRule.untransform(json, type, superJson); + case "class": + return classRule.untransform(json, type, superJson); + case "custom": + return customRule.untransform(json, type, superJson); + case "typed-array": + return typedArrayRule.untransform(json, type, superJson); + default: throw new Error("Unknown transformation: " + type); - } + } + else { + const transformation = simpleRulesByAnnotation[type]; + if (!transformation) throw new Error("Unknown transformation: " + type); return transformation.untransform(json, superJson); } }; -init_esm_shims2(); var getNthKey = (value, n) => { - if (n > value.size) - throw new Error("index out of bounds"); + if (n > value.size) throw new Error("index out of bounds"); const keys = value.keys(); while (n > 0) { keys.next(); @@ -4062,23 +3510,16 @@ var getNthKey = (value, n) => { return keys.next().value; }; function validatePath(path) { - if (includes(path, "__proto__")) { - throw new Error("__proto__ is not allowed as a property"); - } - if (includes(path, "prototype")) { - throw new Error("prototype is not allowed as a property"); - } - if (includes(path, "constructor")) { - throw new Error("constructor is not allowed as a property"); - } + if (includes(path, "__proto__")) throw new Error("__proto__ is not allowed as a property"); + if (includes(path, "prototype")) throw new Error("prototype is not allowed as a property"); + if (includes(path, "constructor")) throw new Error("constructor is not allowed as a property"); } var getDeep = (object, path) => { validatePath(path); for (let i = 0; i < path.length; i++) { const key = path[i]; - if (isSet(object)) { - object = getNthKey(object, +key); - } else if (isMap(object)) { + if (isSet(object)) object = getNthKey(object, +key); + else if (isMap(object)) { const row = +key; const type = +path[++i] === 0 ? "key" : "value"; const keyOfRow = getNthKey(object, row); @@ -4090,33 +3531,25 @@ var getDeep = (object, path) => { object = object.get(keyOfRow); break; } - } else { - object = object[key]; - } + } else object = object[key]; } return object; }; var setDeep = (object, path, mapper) => { validatePath(path); - if (path.length === 0) { - return mapper(object); - } + if (path.length === 0) return mapper(object); let parent = object; for (let i = 0; i < path.length - 1; i++) { const key = path[i]; - if (isArray(parent)) { + if (isArray$2(parent)) { const index = +key; parent = parent[index]; - } else if (isPlainObject2(parent)) { - parent = parent[key]; - } else if (isSet(parent)) { + } else if (isPlainObject$2(parent)) parent = parent[key]; + else if (isSet(parent)) { const row = +key; parent = getNthKey(parent, row); } else if (isMap(parent)) { - const isEnd = i === path.length - 2; - if (isEnd) { - break; - } + if (i === path.length - 2) break; const row = +key; const type = +path[++i] === 0 ? "key" : "value"; const keyOfRow = getNthKey(parent, row); @@ -4131,11 +3564,8 @@ var setDeep = (object, path, mapper) => { } } const lastKey = path[path.length - 1]; - if (isArray(parent)) { - parent[+lastKey] = mapper(parent[+lastKey]); - } else if (isPlainObject2(parent)) { - parent[lastKey] = mapper(parent[lastKey]); - } + if (isArray$2(parent)) parent[+lastKey] = mapper(parent[+lastKey]); + else if (isPlainObject$2(parent)) parent[lastKey] = mapper(parent[lastKey]); if (isSet(parent)) { const oldValue = getNthKey(parent, +lastKey); const newValue = mapper(oldValue); @@ -4147,39 +3577,31 @@ var setDeep = (object, path, mapper) => { if (isMap(parent)) { const row = +path[path.length - 2]; const keyToRow = getNthKey(parent, row); - const type = +lastKey === 0 ? "key" : "value"; - switch (type) { + switch (+lastKey === 0 ? "key" : "value") { case "key": { const newKey = mapper(keyToRow); parent.set(newKey, parent.get(keyToRow)); - if (newKey !== keyToRow) { - parent.delete(keyToRow); - } + if (newKey !== keyToRow) parent.delete(keyToRow); break; } - case "value": { + case "value": parent.set(keyToRow, mapper(parent.get(keyToRow))); break; - } } } return object; }; -function traverse(tree, walker2, origin = []) { - if (!tree) { - return; - } - if (!isArray(tree)) { - forEach(tree, (subtree, key) => traverse(subtree, walker2, [...origin, ...parsePath(key)])); +function traverse(tree, walker$1, origin = []) { + if (!tree) return; + if (!isArray$2(tree)) { + forEach(tree, (subtree, key) => traverse(subtree, walker$1, [...origin, ...parsePath(key)])); return; } const [nodeValue, children] = tree; - if (children) { - forEach(children, (child, key) => { - traverse(child, walker2, [...origin, ...parsePath(key)]); - }); - } - walker2(nodeValue, origin); + if (children) forEach(children, (child, key) => { + traverse(child, walker$1, [...origin, ...parsePath(key)]); + }); + walker$1(nodeValue, origin); } function applyValueAnnotations(plain, annotations, superJson) { traverse(annotations, (type, path) => { @@ -4194,102 +3616,64 @@ function applyReferentialEqualityAnnotations(plain, annotations) { plain = setDeep(plain, identicalObjectPath, () => object); }); } - if (isArray(annotations)) { + if (isArray$2(annotations)) { const [root, other] = annotations; root.forEach((identicalPath) => { plain = setDeep(plain, parsePath(identicalPath), () => plain); }); - if (other) { - forEach(other, apply); - } - } else { - forEach(annotations, apply); - } + if (other) forEach(other, apply); + } else forEach(annotations, apply); return plain; } -var isDeep = (object, superJson) => isPlainObject2(object) || isArray(object) || isMap(object) || isSet(object) || isInstanceOfRegisteredClass(object, superJson); +var isDeep = (object, superJson) => isPlainObject$2(object) || isArray$2(object) || isMap(object) || isSet(object) || isInstanceOfRegisteredClass(object, superJson); function addIdentity(object, path, identities) { const existingSet = identities.get(object); - if (existingSet) { - existingSet.push(path); - } else { - identities.set(object, [path]); - } + if (existingSet) existingSet.push(path); + else identities.set(object, [path]); } function generateReferentialEqualityAnnotations(identitites, dedupe) { const result = {}; let rootEqualityPaths = void 0; identitites.forEach((paths) => { - if (paths.length <= 1) { - return; - } - if (!dedupe) { - paths = paths.map((path) => path.map(String)).sort((a, b) => a.length - b.length); - } + if (paths.length <= 1) return; + if (!dedupe) paths = paths.map((path) => path.map(String)).sort((a, b) => a.length - b.length); const [representativePath, ...identicalPaths] = paths; - if (representativePath.length === 0) { - rootEqualityPaths = identicalPaths.map(stringifyPath); - } else { - result[stringifyPath(representativePath)] = identicalPaths.map(stringifyPath); - } + if (representativePath.length === 0) rootEqualityPaths = identicalPaths.map(stringifyPath); + else result[stringifyPath(representativePath)] = identicalPaths.map(stringifyPath); }); - if (rootEqualityPaths) { - if (isEmptyObject(result)) { - return [rootEqualityPaths]; - } else { - return [rootEqualityPaths, result]; - } - } else { - return isEmptyObject(result) ? void 0 : result; - } + if (rootEqualityPaths) if (isEmptyObject(result)) return [rootEqualityPaths]; + else return [rootEqualityPaths, result]; + else return isEmptyObject(result) ? void 0 : result; } var walker = (object, identities, superJson, dedupe, path = [], objectsInThisPath = [], seenObjects = /* @__PURE__ */ new Map()) => { - var _a25; - const primitive = isPrimitive2(object); + const primitive = isPrimitive(object); if (!primitive) { addIdentity(object, path, identities); const seen = seenObjects.get(object); - if (seen) { - return dedupe ? { - transformedValue: null - } : seen; - } + if (seen) return dedupe ? { transformedValue: null } : seen; } if (!isDeep(object, superJson)) { - const transformed2 = transformValue(object, superJson); - const result2 = transformed2 ? { - transformedValue: transformed2.value, - annotations: [transformed2.type] - } : { - transformedValue: object - }; - if (!primitive) { - seenObjects.set(object, result2); - } - return result2; - } - if (includes(objectsInThisPath, object)) { - return { - transformedValue: null - }; - } + const transformed$1 = transformValue(object, superJson); + const result$1 = transformed$1 ? { + transformedValue: transformed$1.value, + annotations: [transformed$1.type] + } : { transformedValue: object }; + if (!primitive) seenObjects.set(object, result$1); + return result$1; + } + if (includes(objectsInThisPath, object)) return { transformedValue: null }; const transformationResult = transformValue(object, superJson); - const transformed = (_a25 = transformationResult == null ? void 0 : transformationResult.value) != null ? _a25 : object; - const transformedValue = isArray(transformed) ? [] : {}; + const transformed = transformationResult?.value ?? object; + const transformedValue = isArray$2(transformed) ? [] : {}; const innerAnnotations = {}; forEach(transformed, (value, index) => { - if (index === "__proto__" || index === "constructor" || index === "prototype") { - throw new Error(`Detected property ${index}. This is a prototype pollution risk, please remove it from your object.`); - } + if (index === "__proto__" || index === "constructor" || index === "prototype") throw new Error(`Detected property ${index}. This is a prototype pollution risk, please remove it from your object.`); const recursiveResult = walker(value, identities, superJson, dedupe, [...path, index], [...objectsInThisPath, object], seenObjects); transformedValue[index] = recursiveResult.transformedValue; - if (isArray(recursiveResult.annotations)) { - innerAnnotations[index] = recursiveResult.annotations; - } else if (isPlainObject2(recursiveResult.annotations)) { - forEach(recursiveResult.annotations, (tree, key) => { - innerAnnotations[escapeKey(index) + "." + key] = tree; - }); - } + if (isArray$2(recursiveResult.annotations)) innerAnnotations[index] = recursiveResult.annotations; + else if (isPlainObject$2(recursiveResult.annotations)) forEach(recursiveResult.annotations, (tree, key) => { + innerAnnotations[escapeKey(index) + "." + key] = tree; + }); }); const result = isEmptyObject(innerAnnotations) ? { transformedValue, @@ -4298,77 +3682,59 @@ var walker = (object, identities, superJson, dedupe, path = [], objectsInThisPat transformedValue, annotations: !!transformationResult ? [transformationResult.type, innerAnnotations] : innerAnnotations }; - if (!primitive) { - seenObjects.set(object, result); - } + if (!primitive) seenObjects.set(object, result); return result; }; -init_esm_shims2(); -init_esm_shims2(); -function getType2(payload) { +function getType(payload) { return Object.prototype.toString.call(payload).slice(8, -1); } -function isArray2(payload) { - return getType2(payload) === "Array"; +function isArray$1(payload) { + return getType(payload) === "Array"; } -function isPlainObject3(payload) { - if (getType2(payload) !== "Object") - return false; +function isPlainObject$1(payload) { + if (getType(payload) !== "Object") return false; const prototype = Object.getPrototypeOf(payload); return !!prototype && prototype.constructor === Object && prototype === Object.prototype; } -function isNull2(payload) { - return getType2(payload) === "Null"; +function isNull(payload) { + return getType(payload) === "Null"; } function isOneOf(a, b, c, d, e) { return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value); } -function isUndefined2(payload) { - return getType2(payload) === "Undefined"; +function isUndefined(payload) { + return getType(payload) === "Undefined"; } -var isNullOrUndefined = isOneOf(isNull2, isUndefined2); +var isNullOrUndefined = isOneOf(isNull, isUndefined); function assignProp(carry, key, newVal, originalObject, includeNonenumerable) { const propType = {}.propertyIsEnumerable.call(originalObject, key) ? "enumerable" : "nonenumerable"; - if (propType === "enumerable") - carry[key] = newVal; - if (includeNonenumerable && propType === "nonenumerable") { - Object.defineProperty(carry, key, { - value: newVal, - enumerable: false, - writable: true, - configurable: true - }); - } + if (propType === "enumerable") carry[key] = newVal; + if (includeNonenumerable && propType === "nonenumerable") Object.defineProperty(carry, key, { + value: newVal, + enumerable: false, + writable: true, + configurable: true + }); } -function copy(target22, options = {}) { - if (isArray2(target22)) { - return target22.map((item) => copy(item, options)); - } - if (!isPlainObject3(target22)) { - return target22; - } - const props = Object.getOwnPropertyNames(target22); - const symbols = Object.getOwnPropertySymbols(target22); +function copy(target$1, options = {}) { + if (isArray$1(target$1)) return target$1.map((item) => copy(item, options)); + if (!isPlainObject$1(target$1)) return target$1; + const props = Object.getOwnPropertyNames(target$1); + const symbols = Object.getOwnPropertySymbols(target$1); return [...props, ...symbols].reduce((carry, key) => { - if (isArray2(options.props) && !options.props.includes(key)) { - return carry; - } - const val = target22[key]; - const newVal = copy(val, options); - assignProp(carry, key, newVal, target22, options.nonenumerable); + if (isArray$1(options.props) && !options.props.includes(key)) return carry; + const val = target$1[key]; + assignProp(carry, key, copy(val, options), target$1, options.nonenumerable); return carry; }, {}); } var SuperJSON = class { /** - * @param dedupeReferentialEqualities If true, SuperJSON will make sure only one instance of referentially equal objects are serialized and the rest are replaced with `null`. - */ + * @param dedupeReferentialEqualities If true, SuperJSON will make sure only one instance of referentially equal objects are serialized and the rest are replaced with `null`. + */ constructor({ dedupe = false } = {}) { this.classRegistry = new ClassRegistry(); - this.symbolRegistry = new Registry((s) => { - var _a25; - return (_a25 = s.description) != null ? _a25 : ""; - }); + this.symbolRegistry = new Registry((s) => s.description ?? ""); this.customTransformerRegistry = new CustomTransformerRegistry(); this.allowedErrorProps = []; this.dedupe = dedupe; @@ -4376,33 +3742,23 @@ var SuperJSON = class { serialize(object) { const identities = /* @__PURE__ */ new Map(); const output = walker(object, identities, this, this.dedupe); - const res = { - json: output.transformedValue + const res = { json: output.transformedValue }; + if (output.annotations) res.meta = { + ...res.meta, + values: output.annotations }; - if (output.annotations) { - res.meta = { - ...res.meta, - values: output.annotations - }; - } const equalityAnnotations = generateReferentialEqualityAnnotations(identities, this.dedupe); - if (equalityAnnotations) { - res.meta = { - ...res.meta, - referentialEqualities: equalityAnnotations - }; - } + if (equalityAnnotations) res.meta = { + ...res.meta, + referentialEqualities: equalityAnnotations + }; return res; } deserialize(payload) { const { json, meta } = payload; let result = copy(json); - if (meta == null ? void 0 : meta.values) { - result = applyValueAnnotations(result, meta.values, this); - } - if (meta == null ? void 0 : meta.referentialEqualities) { - result = applyReferentialEqualityAnnotations(result, meta.referentialEqualities); - } + if (meta?.values) result = applyValueAnnotations(result, meta.values, this); + if (meta?.referentialEqualities) result = applyReferentialEqualityAnnotations(result, meta.referentialEqualities); return result; } stringify(object) { @@ -4438,60 +3794,18 @@ SuperJSON.registerCustom = SuperJSON.defaultInstance.registerCustom.bind(SuperJS SuperJSON.allowErrorProps = SuperJSON.defaultInstance.allowErrorProps.bind(SuperJSON.defaultInstance); var serialize = SuperJSON.serialize; var deserialize = SuperJSON.deserialize; -var stringify = SuperJSON.stringify; -var parse = SuperJSON.parse; +var stringify$1 = SuperJSON.stringify; +var parse$1 = SuperJSON.parse; var registerClass = SuperJSON.registerClass; var registerCustom = SuperJSON.registerCustom; var registerSymbol = SuperJSON.registerSymbol; var allowErrorProps = SuperJSON.allowErrorProps; -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -var _a19; -var _b19; -(_b19 = (_a19 = target).__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__) != null ? _b19 : _a19.__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__ = []; -var _a20; -var _b20; -(_b20 = (_a20 = target).__VUE_DEVTOOLS_KIT_RPC_CLIENT__) != null ? _b20 : _a20.__VUE_DEVTOOLS_KIT_RPC_CLIENT__ = null; -var _a21; -var _b21; -(_b21 = (_a21 = target).__VUE_DEVTOOLS_KIT_RPC_SERVER__) != null ? _b21 : _a21.__VUE_DEVTOOLS_KIT_RPC_SERVER__ = null; -var _a222; -var _b22; -(_b22 = (_a222 = target).__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__) != null ? _b22 : _a222.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__ = null; -var _a23; -var _b23; -(_b23 = (_a23 = target).__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__) != null ? _b23 : _a23.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__ = null; -var _a24; -var _b24; -(_b24 = (_a24 = target).__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__) != null ? _b24 : _a24.__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__ = null; -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); -init_esm_shims2(); +target.__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__ ??= []; +target.__VUE_DEVTOOLS_KIT_RPC_CLIENT__ ??= null; +target.__VUE_DEVTOOLS_KIT_RPC_SERVER__ ??= null; +target.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__ ??= null; +target.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__ ??= null; +target.__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__ ??= null; var MAX_SERIALIZED_SIZE = 2 * 1024 * 1024; export { addCustomCommand, diff --git a/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map b/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map index 99156e03..245bab83 100644 --- a/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map +++ b/docs/.vitepress/cache/deps/vitepress___@vue_devtools-api.js.map @@ -1,7 +1,7 @@ { "version": 3, "sources": ["../../../../node_modules/@vue/devtools-shared/dist/index.js", "../../../../node_modules/perfect-debounce/dist/index.mjs", "../../../../node_modules/hookable/dist/index.mjs", "../../../../node_modules/birpc/dist/index.mjs", "../../../../node_modules/@vue/devtools-kit/dist/index.js"], - "sourcesContent": ["var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n};\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target2) => (target2 = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target2, \"default\", { value: mod, enumerable: true }) : target2,\n mod\n));\n\n// ../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.51.1_@types+node@22.13.14__jiti@2.4.2_postcss@8.5_96eb05a9d65343021e53791dd83f3773/node_modules/tsup/assets/esm_shims.js\nvar init_esm_shims = __esm({\n \"../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.51.1_@types+node@22.13.14__jiti@2.4.2_postcss@8.5_96eb05a9d65343021e53791dd83f3773/node_modules/tsup/assets/esm_shims.js\"() {\n \"use strict\";\n }\n});\n\n// ../../node_modules/.pnpm/rfdc@1.4.1/node_modules/rfdc/index.js\nvar require_rfdc = __commonJS({\n \"../../node_modules/.pnpm/rfdc@1.4.1/node_modules/rfdc/index.js\"(exports, module) {\n \"use strict\";\n init_esm_shims();\n module.exports = rfdc2;\n function copyBuffer(cur) {\n if (cur instanceof Buffer) {\n return Buffer.from(cur);\n }\n return new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length);\n }\n function rfdc2(opts) {\n opts = opts || {};\n if (opts.circles) return rfdcCircles(opts);\n const constructorHandlers = /* @__PURE__ */ new Map();\n constructorHandlers.set(Date, (o) => new Date(o));\n constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)));\n constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)));\n if (opts.constructorHandlers) {\n for (const handler2 of opts.constructorHandlers) {\n constructorHandlers.set(handler2[0], handler2[1]);\n }\n }\n let handler = null;\n return opts.proto ? cloneProto : clone;\n function cloneArray(a, fn) {\n const keys = Object.keys(a);\n const a2 = new Array(keys.length);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n const cur = a[k];\n if (typeof cur !== \"object\" || cur === null) {\n a2[k] = cur;\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn);\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur);\n } else {\n a2[k] = fn(cur);\n }\n }\n return a2;\n }\n function clone(o) {\n if (typeof o !== \"object\" || o === null) return o;\n if (Array.isArray(o)) return cloneArray(o, clone);\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, clone);\n }\n const o2 = {};\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) continue;\n const cur = o[k];\n if (typeof cur !== \"object\" || cur === null) {\n o2[k] = cur;\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, clone);\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur);\n } else {\n o2[k] = clone(cur);\n }\n }\n return o2;\n }\n function cloneProto(o) {\n if (typeof o !== \"object\" || o === null) return o;\n if (Array.isArray(o)) return cloneArray(o, cloneProto);\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, cloneProto);\n }\n const o2 = {};\n for (const k in o) {\n const cur = o[k];\n if (typeof cur !== \"object\" || cur === null) {\n o2[k] = cur;\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, cloneProto);\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur);\n } else {\n o2[k] = cloneProto(cur);\n }\n }\n return o2;\n }\n }\n function rfdcCircles(opts) {\n const refs = [];\n const refsNew = [];\n const constructorHandlers = /* @__PURE__ */ new Map();\n constructorHandlers.set(Date, (o) => new Date(o));\n constructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)));\n constructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)));\n if (opts.constructorHandlers) {\n for (const handler2 of opts.constructorHandlers) {\n constructorHandlers.set(handler2[0], handler2[1]);\n }\n }\n let handler = null;\n return opts.proto ? cloneProto : clone;\n function cloneArray(a, fn) {\n const keys = Object.keys(a);\n const a2 = new Array(keys.length);\n for (let i = 0; i < keys.length; i++) {\n const k = keys[i];\n const cur = a[k];\n if (typeof cur !== \"object\" || cur === null) {\n a2[k] = cur;\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n a2[k] = handler(cur, fn);\n } else if (ArrayBuffer.isView(cur)) {\n a2[k] = copyBuffer(cur);\n } else {\n const index = refs.indexOf(cur);\n if (index !== -1) {\n a2[k] = refsNew[index];\n } else {\n a2[k] = fn(cur);\n }\n }\n }\n return a2;\n }\n function clone(o) {\n if (typeof o !== \"object\" || o === null) return o;\n if (Array.isArray(o)) return cloneArray(o, clone);\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, clone);\n }\n const o2 = {};\n refs.push(o);\n refsNew.push(o2);\n for (const k in o) {\n if (Object.hasOwnProperty.call(o, k) === false) continue;\n const cur = o[k];\n if (typeof cur !== \"object\" || cur === null) {\n o2[k] = cur;\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, clone);\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur);\n } else {\n const i = refs.indexOf(cur);\n if (i !== -1) {\n o2[k] = refsNew[i];\n } else {\n o2[k] = clone(cur);\n }\n }\n }\n refs.pop();\n refsNew.pop();\n return o2;\n }\n function cloneProto(o) {\n if (typeof o !== \"object\" || o === null) return o;\n if (Array.isArray(o)) return cloneArray(o, cloneProto);\n if (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) {\n return handler(o, cloneProto);\n }\n const o2 = {};\n refs.push(o);\n refsNew.push(o2);\n for (const k in o) {\n const cur = o[k];\n if (typeof cur !== \"object\" || cur === null) {\n o2[k] = cur;\n } else if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) {\n o2[k] = handler(cur, cloneProto);\n } else if (ArrayBuffer.isView(cur)) {\n o2[k] = copyBuffer(cur);\n } else {\n const i = refs.indexOf(cur);\n if (i !== -1) {\n o2[k] = refsNew[i];\n } else {\n o2[k] = cloneProto(cur);\n }\n }\n }\n refs.pop();\n refsNew.pop();\n return o2;\n }\n }\n }\n});\n\n// src/index.ts\ninit_esm_shims();\n\n// src/constants.ts\ninit_esm_shims();\nvar VIEW_MODE_STORAGE_KEY = \"__vue-devtools-view-mode__\";\nvar VITE_PLUGIN_DETECTED_STORAGE_KEY = \"__vue-devtools-vite-plugin-detected__\";\nvar VITE_PLUGIN_CLIENT_URL_STORAGE_KEY = \"__vue-devtools-vite-plugin-client-url__\";\nvar BROADCAST_CHANNEL_NAME = \"__vue-devtools-broadcast-channel__\";\n\n// src/env.ts\ninit_esm_shims();\nvar isBrowser = typeof navigator !== \"undefined\";\nvar target = typeof window !== \"undefined\" ? window : typeof globalThis !== \"undefined\" ? globalThis : typeof global !== \"undefined\" ? global : {};\nvar isInChromePanel = typeof target.chrome !== \"undefined\" && !!target.chrome.devtools;\nvar isInIframe = isBrowser && target.self !== target.top;\nvar _a;\nvar isInElectron = typeof navigator !== \"undefined\" && ((_a = navigator.userAgent) == null ? void 0 : _a.toLowerCase().includes(\"electron\"));\nvar isNuxtApp = typeof window !== \"undefined\" && !!window.__NUXT__;\nvar isInSeparateWindow = !isInIframe && !isInChromePanel && !isInElectron;\n\n// src/general.ts\ninit_esm_shims();\nvar import_rfdc = __toESM(require_rfdc(), 1);\nfunction NOOP() {\n}\nvar isNumeric = (str) => `${+str}` === str;\nvar isMacOS = () => (navigator == null ? void 0 : navigator.platform) ? navigator == null ? void 0 : navigator.platform.toLowerCase().includes(\"mac\") : /Macintosh/.test(navigator.userAgent);\nvar classifyRE = /(?:^|[-_/])(\\w)/g;\nvar camelizeRE = /-(\\w)/g;\nvar kebabizeRE = /([a-z0-9])([A-Z])/g;\nfunction toUpper(_, c) {\n return c ? c.toUpperCase() : \"\";\n}\nfunction classify(str) {\n return str && `${str}`.replace(classifyRE, toUpper);\n}\nfunction camelize(str) {\n return str && str.replace(camelizeRE, toUpper);\n}\nfunction kebabize(str) {\n return str && str.replace(kebabizeRE, (_, lowerCaseCharacter, upperCaseLetter) => {\n return `${lowerCaseCharacter}-${upperCaseLetter}`;\n }).toLowerCase();\n}\nfunction basename(filename, ext) {\n let normalizedFilename = filename.replace(/^[a-z]:/i, \"\").replace(/\\\\/g, \"/\");\n if (normalizedFilename.endsWith(`index${ext}`)) {\n normalizedFilename = normalizedFilename.replace(`/index${ext}`, ext);\n }\n const lastSlashIndex = normalizedFilename.lastIndexOf(\"/\");\n const baseNameWithExt = normalizedFilename.substring(lastSlashIndex + 1);\n if (ext) {\n const extIndex = baseNameWithExt.lastIndexOf(ext);\n return baseNameWithExt.substring(0, extIndex);\n }\n return \"\";\n}\nfunction sortByKey(state) {\n return state && state.slice().sort((a, b) => {\n if (a.key < b.key)\n return -1;\n if (a.key > b.key)\n return 1;\n return 0;\n });\n}\nvar HTTP_URL_RE = /^https?:\\/\\//;\nfunction isUrlString(str) {\n return str.startsWith(\"/\") || HTTP_URL_RE.test(str);\n}\nvar deepClone = (0, import_rfdc.default)({ circles: true });\nfunction randomStr() {\n return Math.random().toString(36).slice(2);\n}\nfunction isObject(value) {\n return typeof value === \"object\" && !Array.isArray(value) && value !== null;\n}\nfunction isArray(value) {\n return Array.isArray(value);\n}\nfunction isSet(value) {\n return value instanceof Set;\n}\nfunction isMap(value) {\n return value instanceof Map;\n}\nexport {\n BROADCAST_CHANNEL_NAME,\n NOOP,\n VIEW_MODE_STORAGE_KEY,\n VITE_PLUGIN_CLIENT_URL_STORAGE_KEY,\n VITE_PLUGIN_DETECTED_STORAGE_KEY,\n basename,\n camelize,\n classify,\n deepClone,\n isArray,\n isBrowser,\n isInChromePanel,\n isInElectron,\n isInIframe,\n isInSeparateWindow,\n isMacOS,\n isMap,\n isNumeric,\n isNuxtApp,\n isObject,\n isSet,\n isUrlString,\n kebabize,\n randomStr,\n sortByKey,\n target\n};\n", "const DEBOUNCE_DEFAULTS = {\n trailing: true\n};\nfunction debounce(fn, wait = 25, options = {}) {\n options = { ...DEBOUNCE_DEFAULTS, ...options };\n if (!Number.isFinite(wait)) {\n throw new TypeError(\"Expected `wait` to be a finite number\");\n }\n let leadingValue;\n let timeout;\n let resolveList = [];\n let currentPromise;\n let trailingArgs;\n const applyFn = (_this, args) => {\n currentPromise = _applyPromised(fn, _this, args);\n currentPromise.finally(() => {\n currentPromise = null;\n if (options.trailing && trailingArgs && !timeout) {\n const promise = applyFn(_this, trailingArgs);\n trailingArgs = null;\n return promise;\n }\n });\n return currentPromise;\n };\n return function(...args) {\n if (currentPromise) {\n if (options.trailing) {\n trailingArgs = args;\n }\n return currentPromise;\n }\n return new Promise((resolve) => {\n const shouldCallNow = !timeout && options.leading;\n clearTimeout(timeout);\n timeout = setTimeout(() => {\n timeout = null;\n const promise = options.leading ? leadingValue : applyFn(this, args);\n for (const _resolve of resolveList) {\n _resolve(promise);\n }\n resolveList = [];\n }, wait);\n if (shouldCallNow) {\n leadingValue = applyFn(this, args);\n resolve(leadingValue);\n } else {\n resolveList.push(resolve);\n }\n });\n };\n}\nasync function _applyPromised(fn, _this, args) {\n return await fn.apply(_this, args);\n}\n\nexport { debounce };\n", "function flatHooks(configHooks, hooks = {}, parentName) {\n for (const key in configHooks) {\n const subHook = configHooks[key];\n const name = parentName ? `${parentName}:${key}` : key;\n if (typeof subHook === \"object\" && subHook !== null) {\n flatHooks(subHook, hooks, name);\n } else if (typeof subHook === \"function\") {\n hooks[name] = subHook;\n }\n }\n return hooks;\n}\nfunction mergeHooks(...hooks) {\n const finalHooks = {};\n for (const hook of hooks) {\n const flatenHook = flatHooks(hook);\n for (const key in flatenHook) {\n if (finalHooks[key]) {\n finalHooks[key].push(flatenHook[key]);\n } else {\n finalHooks[key] = [flatenHook[key]];\n }\n }\n }\n for (const key in finalHooks) {\n if (finalHooks[key].length > 1) {\n const array = finalHooks[key];\n finalHooks[key] = (...arguments_) => serial(array, (function_) => function_(...arguments_));\n } else {\n finalHooks[key] = finalHooks[key][0];\n }\n }\n return finalHooks;\n}\nfunction serial(tasks, function_) {\n return tasks.reduce(\n (promise, task) => promise.then(() => function_(task)),\n Promise.resolve()\n );\n}\nconst defaultTask = { run: (function_) => function_() };\nconst _createTask = () => defaultTask;\nconst createTask = typeof console.createTask !== \"undefined\" ? console.createTask : _createTask;\nfunction serialTaskCaller(hooks, args) {\n const name = args.shift();\n const task = createTask(name);\n return hooks.reduce(\n (promise, hookFunction) => promise.then(() => task.run(() => hookFunction(...args))),\n Promise.resolve()\n );\n}\nfunction parallelTaskCaller(hooks, args) {\n const name = args.shift();\n const task = createTask(name);\n return Promise.all(hooks.map((hook) => task.run(() => hook(...args))));\n}\nfunction serialCaller(hooks, arguments_) {\n return hooks.reduce(\n (promise, hookFunction) => promise.then(() => hookFunction(...arguments_ || [])),\n Promise.resolve()\n );\n}\nfunction parallelCaller(hooks, args) {\n return Promise.all(hooks.map((hook) => hook(...args || [])));\n}\nfunction callEachWith(callbacks, arg0) {\n for (const callback of [...callbacks]) {\n callback(arg0);\n }\n}\n\nclass Hookable {\n constructor() {\n this._hooks = {};\n this._before = void 0;\n this._after = void 0;\n this._deprecatedMessages = void 0;\n this._deprecatedHooks = {};\n this.hook = this.hook.bind(this);\n this.callHook = this.callHook.bind(this);\n this.callHookWith = this.callHookWith.bind(this);\n }\n hook(name, function_, options = {}) {\n if (!name || typeof function_ !== \"function\") {\n return () => {\n };\n }\n const originalName = name;\n let dep;\n while (this._deprecatedHooks[name]) {\n dep = this._deprecatedHooks[name];\n name = dep.to;\n }\n if (dep && !options.allowDeprecated) {\n let message = dep.message;\n if (!message) {\n message = `${originalName} hook has been deprecated` + (dep.to ? `, please use ${dep.to}` : \"\");\n }\n if (!this._deprecatedMessages) {\n this._deprecatedMessages = /* @__PURE__ */ new Set();\n }\n if (!this._deprecatedMessages.has(message)) {\n console.warn(message);\n this._deprecatedMessages.add(message);\n }\n }\n if (!function_.name) {\n try {\n Object.defineProperty(function_, \"name\", {\n get: () => \"_\" + name.replace(/\\W+/g, \"_\") + \"_hook_cb\",\n configurable: true\n });\n } catch {\n }\n }\n this._hooks[name] = this._hooks[name] || [];\n this._hooks[name].push(function_);\n return () => {\n if (function_) {\n this.removeHook(name, function_);\n function_ = void 0;\n }\n };\n }\n hookOnce(name, function_) {\n let _unreg;\n let _function = (...arguments_) => {\n if (typeof _unreg === \"function\") {\n _unreg();\n }\n _unreg = void 0;\n _function = void 0;\n return function_(...arguments_);\n };\n _unreg = this.hook(name, _function);\n return _unreg;\n }\n removeHook(name, function_) {\n if (this._hooks[name]) {\n const index = this._hooks[name].indexOf(function_);\n if (index !== -1) {\n this._hooks[name].splice(index, 1);\n }\n if (this._hooks[name].length === 0) {\n delete this._hooks[name];\n }\n }\n }\n deprecateHook(name, deprecated) {\n this._deprecatedHooks[name] = typeof deprecated === \"string\" ? { to: deprecated } : deprecated;\n const _hooks = this._hooks[name] || [];\n delete this._hooks[name];\n for (const hook of _hooks) {\n this.hook(name, hook);\n }\n }\n deprecateHooks(deprecatedHooks) {\n Object.assign(this._deprecatedHooks, deprecatedHooks);\n for (const name in deprecatedHooks) {\n this.deprecateHook(name, deprecatedHooks[name]);\n }\n }\n addHooks(configHooks) {\n const hooks = flatHooks(configHooks);\n const removeFns = Object.keys(hooks).map(\n (key) => this.hook(key, hooks[key])\n );\n return () => {\n for (const unreg of removeFns.splice(0, removeFns.length)) {\n unreg();\n }\n };\n }\n removeHooks(configHooks) {\n const hooks = flatHooks(configHooks);\n for (const key in hooks) {\n this.removeHook(key, hooks[key]);\n }\n }\n removeAllHooks() {\n for (const key in this._hooks) {\n delete this._hooks[key];\n }\n }\n callHook(name, ...arguments_) {\n arguments_.unshift(name);\n return this.callHookWith(serialTaskCaller, name, ...arguments_);\n }\n callHookParallel(name, ...arguments_) {\n arguments_.unshift(name);\n return this.callHookWith(parallelTaskCaller, name, ...arguments_);\n }\n callHookWith(caller, name, ...arguments_) {\n const event = this._before || this._after ? { name, args: arguments_, context: {} } : void 0;\n if (this._before) {\n callEachWith(this._before, event);\n }\n const result = caller(\n name in this._hooks ? [...this._hooks[name]] : [],\n arguments_\n );\n if (result instanceof Promise) {\n return result.finally(() => {\n if (this._after && event) {\n callEachWith(this._after, event);\n }\n });\n }\n if (this._after && event) {\n callEachWith(this._after, event);\n }\n return result;\n }\n beforeEach(function_) {\n this._before = this._before || [];\n this._before.push(function_);\n return () => {\n if (this._before !== void 0) {\n const index = this._before.indexOf(function_);\n if (index !== -1) {\n this._before.splice(index, 1);\n }\n }\n };\n }\n afterEach(function_) {\n this._after = this._after || [];\n this._after.push(function_);\n return () => {\n if (this._after !== void 0) {\n const index = this._after.indexOf(function_);\n if (index !== -1) {\n this._after.splice(index, 1);\n }\n }\n };\n }\n}\nfunction createHooks() {\n return new Hookable();\n}\n\nconst isBrowser = typeof window !== \"undefined\";\nfunction createDebugger(hooks, _options = {}) {\n const options = {\n inspect: isBrowser,\n group: isBrowser,\n filter: () => true,\n ..._options\n };\n const _filter = options.filter;\n const filter = typeof _filter === \"string\" ? (name) => name.startsWith(_filter) : _filter;\n const _tag = options.tag ? `[${options.tag}] ` : \"\";\n const logPrefix = (event) => _tag + event.name + \"\".padEnd(event._id, \"\\0\");\n const _idCtr = {};\n const unsubscribeBefore = hooks.beforeEach((event) => {\n if (filter !== void 0 && !filter(event.name)) {\n return;\n }\n _idCtr[event.name] = _idCtr[event.name] || 0;\n event._id = _idCtr[event.name]++;\n console.time(logPrefix(event));\n });\n const unsubscribeAfter = hooks.afterEach((event) => {\n if (filter !== void 0 && !filter(event.name)) {\n return;\n }\n if (options.group) {\n console.groupCollapsed(event.name);\n }\n if (options.inspect) {\n console.timeLog(logPrefix(event), event.args);\n } else {\n console.timeEnd(logPrefix(event));\n }\n if (options.group) {\n console.groupEnd();\n }\n _idCtr[event.name]--;\n });\n return {\n /** Stop debugging and remove listeners */\n close: () => {\n unsubscribeBefore();\n unsubscribeAfter();\n }\n };\n}\n\nexport { Hookable, createDebugger, createHooks, flatHooks, mergeHooks, parallelCaller, serial, serialCaller };\n", "const TYPE_REQUEST = \"q\";\nconst TYPE_RESPONSE = \"s\";\nconst DEFAULT_TIMEOUT = 6e4;\nfunction defaultSerialize(i) {\n return i;\n}\nconst defaultDeserialize = defaultSerialize;\nconst { clearTimeout, setTimeout } = globalThis;\nconst random = Math.random.bind(Math);\nfunction createBirpc(functions, options) {\n const {\n post,\n on,\n off = () => {\n },\n eventNames = [],\n serialize = defaultSerialize,\n deserialize = defaultDeserialize,\n resolver,\n bind = \"rpc\",\n timeout = DEFAULT_TIMEOUT\n } = options;\n const rpcPromiseMap = /* @__PURE__ */ new Map();\n let _promise;\n let closed = false;\n const rpc = new Proxy({}, {\n get(_, method) {\n if (method === \"$functions\")\n return functions;\n if (method === \"$close\")\n return close;\n if (method === \"$rejectPendingCalls\") {\n return rejectPendingCalls;\n }\n if (method === \"$closed\")\n return closed;\n if (method === \"then\" && !eventNames.includes(\"then\") && !(\"then\" in functions))\n return void 0;\n const sendEvent = (...args) => {\n post(serialize({ m: method, a: args, t: TYPE_REQUEST }));\n };\n if (eventNames.includes(method)) {\n sendEvent.asEvent = sendEvent;\n return sendEvent;\n }\n const sendCall = async (...args) => {\n if (closed)\n throw new Error(`[birpc] rpc is closed, cannot call \"${method}\"`);\n if (_promise) {\n try {\n await _promise;\n } finally {\n _promise = void 0;\n }\n }\n return new Promise((resolve, reject) => {\n const id = nanoid();\n let timeoutId;\n if (timeout >= 0) {\n timeoutId = setTimeout(() => {\n try {\n const handleResult = options.onTimeoutError?.(method, args);\n if (handleResult !== true)\n throw new Error(`[birpc] timeout on calling \"${method}\"`);\n } catch (e) {\n reject(e);\n }\n rpcPromiseMap.delete(id);\n }, timeout);\n if (typeof timeoutId === \"object\")\n timeoutId = timeoutId.unref?.();\n }\n rpcPromiseMap.set(id, { resolve, reject, timeoutId, method });\n post(serialize({ m: method, a: args, i: id, t: \"q\" }));\n });\n };\n sendCall.asEvent = sendEvent;\n return sendCall;\n }\n });\n function close(customError) {\n closed = true;\n rpcPromiseMap.forEach(({ reject, method }) => {\n const error = new Error(`[birpc] rpc is closed, cannot call \"${method}\"`);\n if (customError) {\n customError.cause ??= error;\n return reject(customError);\n }\n reject(error);\n });\n rpcPromiseMap.clear();\n off(onMessage);\n }\n function rejectPendingCalls(handler) {\n const entries = Array.from(rpcPromiseMap.values());\n const handlerResults = entries.map(({ method, reject }) => {\n if (!handler) {\n return reject(new Error(`[birpc]: rejected pending call \"${method}\".`));\n }\n return handler({ method, reject });\n });\n rpcPromiseMap.clear();\n return handlerResults;\n }\n async function onMessage(data, ...extra) {\n let msg;\n try {\n msg = deserialize(data);\n } catch (e) {\n if (options.onGeneralError?.(e) !== true)\n throw e;\n return;\n }\n if (msg.t === TYPE_REQUEST) {\n const { m: method, a: args } = msg;\n let result, error;\n const fn = resolver ? resolver(method, functions[method]) : functions[method];\n if (!fn) {\n error = new Error(`[birpc] function \"${method}\" not found`);\n } else {\n try {\n result = await fn.apply(bind === \"rpc\" ? rpc : functions, args);\n } catch (e) {\n error = e;\n }\n }\n if (msg.i) {\n if (error && options.onError)\n options.onError(error, method, args);\n if (error && options.onFunctionError) {\n if (options.onFunctionError(error, method, args) === true)\n return;\n }\n if (!error) {\n try {\n post(serialize({ t: TYPE_RESPONSE, i: msg.i, r: result }), ...extra);\n return;\n } catch (e) {\n error = e;\n if (options.onGeneralError?.(e, method, args) !== true)\n throw e;\n }\n }\n try {\n post(serialize({ t: TYPE_RESPONSE, i: msg.i, e: error }), ...extra);\n } catch (e) {\n if (options.onGeneralError?.(e, method, args) !== true)\n throw e;\n }\n }\n } else {\n const { i: ack, r: result, e: error } = msg;\n const promise = rpcPromiseMap.get(ack);\n if (promise) {\n clearTimeout(promise.timeoutId);\n if (error)\n promise.reject(error);\n else\n promise.resolve(result);\n }\n rpcPromiseMap.delete(ack);\n }\n }\n _promise = on(onMessage);\n return rpc;\n}\nconst cacheMap = /* @__PURE__ */ new WeakMap();\nfunction cachedMap(items, fn) {\n return items.map((i) => {\n let r = cacheMap.get(i);\n if (!r) {\n r = fn(i);\n cacheMap.set(i, r);\n }\n return r;\n });\n}\nfunction createBirpcGroup(functions, channels, options = {}) {\n const getChannels = () => typeof channels === \"function\" ? channels() : channels;\n const getClients = (channels2 = getChannels()) => cachedMap(channels2, (s) => createBirpc(functions, { ...options, ...s }));\n const broadcastProxy = new Proxy({}, {\n get(_, method) {\n const client = getClients();\n const callbacks = client.map((c) => c[method]);\n const sendCall = (...args) => {\n return Promise.all(callbacks.map((i) => i(...args)));\n };\n sendCall.asEvent = (...args) => {\n callbacks.map((i) => i.asEvent(...args));\n };\n return sendCall;\n }\n });\n function updateChannels(fn) {\n const channels2 = getChannels();\n fn?.(channels2);\n return getClients(channels2);\n }\n getClients();\n return {\n get clients() {\n return getClients();\n },\n functions,\n updateChannels,\n broadcast: broadcastProxy,\n /**\n * @deprecated use `broadcast`\n */\n // @ts-expect-error deprecated\n boardcast: broadcastProxy\n };\n}\nconst urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nfunction nanoid(size = 21) {\n let id = \"\";\n let i = size;\n while (i--)\n id += urlAlphabet[random() * 64 | 0];\n return id;\n}\n\nexport { DEFAULT_TIMEOUT, cachedMap, createBirpc, createBirpcGroup };\n", "var __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __esm = (fn, res) => function __init() {\n return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;\n};\nvar __commonJS = (cb, mod) => function __require() {\n return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n if (from && typeof from === \"object\" || typeof from === \"function\") {\n for (let key of __getOwnPropNames(from))\n if (!__hasOwnProp.call(to, key) && key !== except)\n __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });\n }\n return to;\n};\nvar __toESM = (mod, isNodeMode, target22) => (target22 = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(\n // If the importer is in node compatibility mode or this is not an ESM\n // file that has been converted to a CommonJS file using a Babel-\n // compatible transform (i.e. \"__esModule\" has not been set), then set\n // \"default\" to the CommonJS \"module.exports\" for node compatibility.\n isNodeMode || !mod || !mod.__esModule ? __defProp(target22, \"default\", { value: mod, enumerable: true }) : target22,\n mod\n));\n\n// ../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.51.1_@types+node@22.13.14__jiti@2.4.2_postcss@8.5_96eb05a9d65343021e53791dd83f3773/node_modules/tsup/assets/esm_shims.js\nvar init_esm_shims = __esm({\n \"../../node_modules/.pnpm/tsup@8.4.0_@microsoft+api-extractor@7.51.1_@types+node@22.13.14__jiti@2.4.2_postcss@8.5_96eb05a9d65343021e53791dd83f3773/node_modules/tsup/assets/esm_shims.js\"() {\n \"use strict\";\n }\n});\n\n// ../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js\nvar require_speakingurl = __commonJS({\n \"../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js\"(exports, module) {\n \"use strict\";\n init_esm_shims();\n (function(root) {\n \"use strict\";\n var charMap = {\n // latin\n \"\\xC0\": \"A\",\n \"\\xC1\": \"A\",\n \"\\xC2\": \"A\",\n \"\\xC3\": \"A\",\n \"\\xC4\": \"Ae\",\n \"\\xC5\": \"A\",\n \"\\xC6\": \"AE\",\n \"\\xC7\": \"C\",\n \"\\xC8\": \"E\",\n \"\\xC9\": \"E\",\n \"\\xCA\": \"E\",\n \"\\xCB\": \"E\",\n \"\\xCC\": \"I\",\n \"\\xCD\": \"I\",\n \"\\xCE\": \"I\",\n \"\\xCF\": \"I\",\n \"\\xD0\": \"D\",\n \"\\xD1\": \"N\",\n \"\\xD2\": \"O\",\n \"\\xD3\": \"O\",\n \"\\xD4\": \"O\",\n \"\\xD5\": \"O\",\n \"\\xD6\": \"Oe\",\n \"\\u0150\": \"O\",\n \"\\xD8\": \"O\",\n \"\\xD9\": \"U\",\n \"\\xDA\": \"U\",\n \"\\xDB\": \"U\",\n \"\\xDC\": \"Ue\",\n \"\\u0170\": \"U\",\n \"\\xDD\": \"Y\",\n \"\\xDE\": \"TH\",\n \"\\xDF\": \"ss\",\n \"\\xE0\": \"a\",\n \"\\xE1\": \"a\",\n \"\\xE2\": \"a\",\n \"\\xE3\": \"a\",\n \"\\xE4\": \"ae\",\n \"\\xE5\": \"a\",\n \"\\xE6\": \"ae\",\n \"\\xE7\": \"c\",\n \"\\xE8\": \"e\",\n \"\\xE9\": \"e\",\n \"\\xEA\": \"e\",\n \"\\xEB\": \"e\",\n \"\\xEC\": \"i\",\n \"\\xED\": \"i\",\n \"\\xEE\": \"i\",\n \"\\xEF\": \"i\",\n \"\\xF0\": \"d\",\n \"\\xF1\": \"n\",\n \"\\xF2\": \"o\",\n \"\\xF3\": \"o\",\n \"\\xF4\": \"o\",\n \"\\xF5\": \"o\",\n \"\\xF6\": \"oe\",\n \"\\u0151\": \"o\",\n \"\\xF8\": \"o\",\n \"\\xF9\": \"u\",\n \"\\xFA\": \"u\",\n \"\\xFB\": \"u\",\n \"\\xFC\": \"ue\",\n \"\\u0171\": \"u\",\n \"\\xFD\": \"y\",\n \"\\xFE\": \"th\",\n \"\\xFF\": \"y\",\n \"\\u1E9E\": \"SS\",\n // language specific\n // Arabic\n \"\\u0627\": \"a\",\n \"\\u0623\": \"a\",\n \"\\u0625\": \"i\",\n \"\\u0622\": \"aa\",\n \"\\u0624\": \"u\",\n \"\\u0626\": \"e\",\n \"\\u0621\": \"a\",\n \"\\u0628\": \"b\",\n \"\\u062A\": \"t\",\n \"\\u062B\": \"th\",\n \"\\u062C\": \"j\",\n \"\\u062D\": \"h\",\n \"\\u062E\": \"kh\",\n \"\\u062F\": \"d\",\n \"\\u0630\": \"th\",\n \"\\u0631\": \"r\",\n \"\\u0632\": \"z\",\n \"\\u0633\": \"s\",\n \"\\u0634\": \"sh\",\n \"\\u0635\": \"s\",\n \"\\u0636\": \"dh\",\n \"\\u0637\": \"t\",\n \"\\u0638\": \"z\",\n \"\\u0639\": \"a\",\n \"\\u063A\": \"gh\",\n \"\\u0641\": \"f\",\n \"\\u0642\": \"q\",\n \"\\u0643\": \"k\",\n \"\\u0644\": \"l\",\n \"\\u0645\": \"m\",\n \"\\u0646\": \"n\",\n \"\\u0647\": \"h\",\n \"\\u0648\": \"w\",\n \"\\u064A\": \"y\",\n \"\\u0649\": \"a\",\n \"\\u0629\": \"h\",\n \"\\uFEFB\": \"la\",\n \"\\uFEF7\": \"laa\",\n \"\\uFEF9\": \"lai\",\n \"\\uFEF5\": \"laa\",\n // Persian additional characters than Arabic\n \"\\u06AF\": \"g\",\n \"\\u0686\": \"ch\",\n \"\\u067E\": \"p\",\n \"\\u0698\": \"zh\",\n \"\\u06A9\": \"k\",\n \"\\u06CC\": \"y\",\n // Arabic diactrics\n \"\\u064E\": \"a\",\n \"\\u064B\": \"an\",\n \"\\u0650\": \"e\",\n \"\\u064D\": \"en\",\n \"\\u064F\": \"u\",\n \"\\u064C\": \"on\",\n \"\\u0652\": \"\",\n // Arabic numbers\n \"\\u0660\": \"0\",\n \"\\u0661\": \"1\",\n \"\\u0662\": \"2\",\n \"\\u0663\": \"3\",\n \"\\u0664\": \"4\",\n \"\\u0665\": \"5\",\n \"\\u0666\": \"6\",\n \"\\u0667\": \"7\",\n \"\\u0668\": \"8\",\n \"\\u0669\": \"9\",\n // Persian numbers\n \"\\u06F0\": \"0\",\n \"\\u06F1\": \"1\",\n \"\\u06F2\": \"2\",\n \"\\u06F3\": \"3\",\n \"\\u06F4\": \"4\",\n \"\\u06F5\": \"5\",\n \"\\u06F6\": \"6\",\n \"\\u06F7\": \"7\",\n \"\\u06F8\": \"8\",\n \"\\u06F9\": \"9\",\n // Burmese consonants\n \"\\u1000\": \"k\",\n \"\\u1001\": \"kh\",\n \"\\u1002\": \"g\",\n \"\\u1003\": \"ga\",\n \"\\u1004\": \"ng\",\n \"\\u1005\": \"s\",\n \"\\u1006\": \"sa\",\n \"\\u1007\": \"z\",\n \"\\u1005\\u103B\": \"za\",\n \"\\u100A\": \"ny\",\n \"\\u100B\": \"t\",\n \"\\u100C\": \"ta\",\n \"\\u100D\": \"d\",\n \"\\u100E\": \"da\",\n \"\\u100F\": \"na\",\n \"\\u1010\": \"t\",\n \"\\u1011\": \"ta\",\n \"\\u1012\": \"d\",\n \"\\u1013\": \"da\",\n \"\\u1014\": \"n\",\n \"\\u1015\": \"p\",\n \"\\u1016\": \"pa\",\n \"\\u1017\": \"b\",\n \"\\u1018\": \"ba\",\n \"\\u1019\": \"m\",\n \"\\u101A\": \"y\",\n \"\\u101B\": \"ya\",\n \"\\u101C\": \"l\",\n \"\\u101D\": \"w\",\n \"\\u101E\": \"th\",\n \"\\u101F\": \"h\",\n \"\\u1020\": \"la\",\n \"\\u1021\": \"a\",\n // consonant character combos\n \"\\u103C\": \"y\",\n \"\\u103B\": \"ya\",\n \"\\u103D\": \"w\",\n \"\\u103C\\u103D\": \"yw\",\n \"\\u103B\\u103D\": \"ywa\",\n \"\\u103E\": \"h\",\n // independent vowels\n \"\\u1027\": \"e\",\n \"\\u104F\": \"-e\",\n \"\\u1023\": \"i\",\n \"\\u1024\": \"-i\",\n \"\\u1009\": \"u\",\n \"\\u1026\": \"-u\",\n \"\\u1029\": \"aw\",\n \"\\u101E\\u103C\\u1031\\u102C\": \"aw\",\n \"\\u102A\": \"aw\",\n // numbers\n \"\\u1040\": \"0\",\n \"\\u1041\": \"1\",\n \"\\u1042\": \"2\",\n \"\\u1043\": \"3\",\n \"\\u1044\": \"4\",\n \"\\u1045\": \"5\",\n \"\\u1046\": \"6\",\n \"\\u1047\": \"7\",\n \"\\u1048\": \"8\",\n \"\\u1049\": \"9\",\n // virama and tone marks which are silent in transliteration\n \"\\u1039\": \"\",\n \"\\u1037\": \"\",\n \"\\u1038\": \"\",\n // Czech\n \"\\u010D\": \"c\",\n \"\\u010F\": \"d\",\n \"\\u011B\": \"e\",\n \"\\u0148\": \"n\",\n \"\\u0159\": \"r\",\n \"\\u0161\": \"s\",\n \"\\u0165\": \"t\",\n \"\\u016F\": \"u\",\n \"\\u017E\": \"z\",\n \"\\u010C\": \"C\",\n \"\\u010E\": \"D\",\n \"\\u011A\": \"E\",\n \"\\u0147\": \"N\",\n \"\\u0158\": \"R\",\n \"\\u0160\": \"S\",\n \"\\u0164\": \"T\",\n \"\\u016E\": \"U\",\n \"\\u017D\": \"Z\",\n // Dhivehi\n \"\\u0780\": \"h\",\n \"\\u0781\": \"sh\",\n \"\\u0782\": \"n\",\n \"\\u0783\": \"r\",\n \"\\u0784\": \"b\",\n \"\\u0785\": \"lh\",\n \"\\u0786\": \"k\",\n \"\\u0787\": \"a\",\n \"\\u0788\": \"v\",\n \"\\u0789\": \"m\",\n \"\\u078A\": \"f\",\n \"\\u078B\": \"dh\",\n \"\\u078C\": \"th\",\n \"\\u078D\": \"l\",\n \"\\u078E\": \"g\",\n \"\\u078F\": \"gn\",\n \"\\u0790\": \"s\",\n \"\\u0791\": \"d\",\n \"\\u0792\": \"z\",\n \"\\u0793\": \"t\",\n \"\\u0794\": \"y\",\n \"\\u0795\": \"p\",\n \"\\u0796\": \"j\",\n \"\\u0797\": \"ch\",\n \"\\u0798\": \"tt\",\n \"\\u0799\": \"hh\",\n \"\\u079A\": \"kh\",\n \"\\u079B\": \"th\",\n \"\\u079C\": \"z\",\n \"\\u079D\": \"sh\",\n \"\\u079E\": \"s\",\n \"\\u079F\": \"d\",\n \"\\u07A0\": \"t\",\n \"\\u07A1\": \"z\",\n \"\\u07A2\": \"a\",\n \"\\u07A3\": \"gh\",\n \"\\u07A4\": \"q\",\n \"\\u07A5\": \"w\",\n \"\\u07A6\": \"a\",\n \"\\u07A7\": \"aa\",\n \"\\u07A8\": \"i\",\n \"\\u07A9\": \"ee\",\n \"\\u07AA\": \"u\",\n \"\\u07AB\": \"oo\",\n \"\\u07AC\": \"e\",\n \"\\u07AD\": \"ey\",\n \"\\u07AE\": \"o\",\n \"\\u07AF\": \"oa\",\n \"\\u07B0\": \"\",\n // Georgian https://en.wikipedia.org/wiki/Romanization_of_Georgian\n // National system (2002)\n \"\\u10D0\": \"a\",\n \"\\u10D1\": \"b\",\n \"\\u10D2\": \"g\",\n \"\\u10D3\": \"d\",\n \"\\u10D4\": \"e\",\n \"\\u10D5\": \"v\",\n \"\\u10D6\": \"z\",\n \"\\u10D7\": \"t\",\n \"\\u10D8\": \"i\",\n \"\\u10D9\": \"k\",\n \"\\u10DA\": \"l\",\n \"\\u10DB\": \"m\",\n \"\\u10DC\": \"n\",\n \"\\u10DD\": \"o\",\n \"\\u10DE\": \"p\",\n \"\\u10DF\": \"zh\",\n \"\\u10E0\": \"r\",\n \"\\u10E1\": \"s\",\n \"\\u10E2\": \"t\",\n \"\\u10E3\": \"u\",\n \"\\u10E4\": \"p\",\n \"\\u10E5\": \"k\",\n \"\\u10E6\": \"gh\",\n \"\\u10E7\": \"q\",\n \"\\u10E8\": \"sh\",\n \"\\u10E9\": \"ch\",\n \"\\u10EA\": \"ts\",\n \"\\u10EB\": \"dz\",\n \"\\u10EC\": \"ts\",\n \"\\u10ED\": \"ch\",\n \"\\u10EE\": \"kh\",\n \"\\u10EF\": \"j\",\n \"\\u10F0\": \"h\",\n // Greek\n \"\\u03B1\": \"a\",\n \"\\u03B2\": \"v\",\n \"\\u03B3\": \"g\",\n \"\\u03B4\": \"d\",\n \"\\u03B5\": \"e\",\n \"\\u03B6\": \"z\",\n \"\\u03B7\": \"i\",\n \"\\u03B8\": \"th\",\n \"\\u03B9\": \"i\",\n \"\\u03BA\": \"k\",\n \"\\u03BB\": \"l\",\n \"\\u03BC\": \"m\",\n \"\\u03BD\": \"n\",\n \"\\u03BE\": \"ks\",\n \"\\u03BF\": \"o\",\n \"\\u03C0\": \"p\",\n \"\\u03C1\": \"r\",\n \"\\u03C3\": \"s\",\n \"\\u03C4\": \"t\",\n \"\\u03C5\": \"y\",\n \"\\u03C6\": \"f\",\n \"\\u03C7\": \"x\",\n \"\\u03C8\": \"ps\",\n \"\\u03C9\": \"o\",\n \"\\u03AC\": \"a\",\n \"\\u03AD\": \"e\",\n \"\\u03AF\": \"i\",\n \"\\u03CC\": \"o\",\n \"\\u03CD\": \"y\",\n \"\\u03AE\": \"i\",\n \"\\u03CE\": \"o\",\n \"\\u03C2\": \"s\",\n \"\\u03CA\": \"i\",\n \"\\u03B0\": \"y\",\n \"\\u03CB\": \"y\",\n \"\\u0390\": \"i\",\n \"\\u0391\": \"A\",\n \"\\u0392\": \"B\",\n \"\\u0393\": \"G\",\n \"\\u0394\": \"D\",\n \"\\u0395\": \"E\",\n \"\\u0396\": \"Z\",\n \"\\u0397\": \"I\",\n \"\\u0398\": \"TH\",\n \"\\u0399\": \"I\",\n \"\\u039A\": \"K\",\n \"\\u039B\": \"L\",\n \"\\u039C\": \"M\",\n \"\\u039D\": \"N\",\n \"\\u039E\": \"KS\",\n \"\\u039F\": \"O\",\n \"\\u03A0\": \"P\",\n \"\\u03A1\": \"R\",\n \"\\u03A3\": \"S\",\n \"\\u03A4\": \"T\",\n \"\\u03A5\": \"Y\",\n \"\\u03A6\": \"F\",\n \"\\u03A7\": \"X\",\n \"\\u03A8\": \"PS\",\n \"\\u03A9\": \"O\",\n \"\\u0386\": \"A\",\n \"\\u0388\": \"E\",\n \"\\u038A\": \"I\",\n \"\\u038C\": \"O\",\n \"\\u038E\": \"Y\",\n \"\\u0389\": \"I\",\n \"\\u038F\": \"O\",\n \"\\u03AA\": \"I\",\n \"\\u03AB\": \"Y\",\n // Latvian\n \"\\u0101\": \"a\",\n // 'č': 'c', // duplicate\n \"\\u0113\": \"e\",\n \"\\u0123\": \"g\",\n \"\\u012B\": \"i\",\n \"\\u0137\": \"k\",\n \"\\u013C\": \"l\",\n \"\\u0146\": \"n\",\n // 'š': 's', // duplicate\n \"\\u016B\": \"u\",\n // 'ž': 'z', // duplicate\n \"\\u0100\": \"A\",\n // 'Č': 'C', // duplicate\n \"\\u0112\": \"E\",\n \"\\u0122\": \"G\",\n \"\\u012A\": \"I\",\n \"\\u0136\": \"k\",\n \"\\u013B\": \"L\",\n \"\\u0145\": \"N\",\n // 'Š': 'S', // duplicate\n \"\\u016A\": \"U\",\n // 'Ž': 'Z', // duplicate\n // Macedonian\n \"\\u040C\": \"Kj\",\n \"\\u045C\": \"kj\",\n \"\\u0409\": \"Lj\",\n \"\\u0459\": \"lj\",\n \"\\u040A\": \"Nj\",\n \"\\u045A\": \"nj\",\n \"\\u0422\\u0441\": \"Ts\",\n \"\\u0442\\u0441\": \"ts\",\n // Polish\n \"\\u0105\": \"a\",\n \"\\u0107\": \"c\",\n \"\\u0119\": \"e\",\n \"\\u0142\": \"l\",\n \"\\u0144\": \"n\",\n // 'ó': 'o', // duplicate\n \"\\u015B\": \"s\",\n \"\\u017A\": \"z\",\n \"\\u017C\": \"z\",\n \"\\u0104\": \"A\",\n \"\\u0106\": \"C\",\n \"\\u0118\": \"E\",\n \"\\u0141\": \"L\",\n \"\\u0143\": \"N\",\n \"\\u015A\": \"S\",\n \"\\u0179\": \"Z\",\n \"\\u017B\": \"Z\",\n // Ukranian\n \"\\u0404\": \"Ye\",\n \"\\u0406\": \"I\",\n \"\\u0407\": \"Yi\",\n \"\\u0490\": \"G\",\n \"\\u0454\": \"ye\",\n \"\\u0456\": \"i\",\n \"\\u0457\": \"yi\",\n \"\\u0491\": \"g\",\n // Romanian\n \"\\u0103\": \"a\",\n \"\\u0102\": \"A\",\n \"\\u0219\": \"s\",\n \"\\u0218\": \"S\",\n // 'ş': 's', // duplicate\n // 'Ş': 'S', // duplicate\n \"\\u021B\": \"t\",\n \"\\u021A\": \"T\",\n \"\\u0163\": \"t\",\n \"\\u0162\": \"T\",\n // Russian https://en.wikipedia.org/wiki/Romanization_of_Russian\n // ICAO\n \"\\u0430\": \"a\",\n \"\\u0431\": \"b\",\n \"\\u0432\": \"v\",\n \"\\u0433\": \"g\",\n \"\\u0434\": \"d\",\n \"\\u0435\": \"e\",\n \"\\u0451\": \"yo\",\n \"\\u0436\": \"zh\",\n \"\\u0437\": \"z\",\n \"\\u0438\": \"i\",\n \"\\u0439\": \"i\",\n \"\\u043A\": \"k\",\n \"\\u043B\": \"l\",\n \"\\u043C\": \"m\",\n \"\\u043D\": \"n\",\n \"\\u043E\": \"o\",\n \"\\u043F\": \"p\",\n \"\\u0440\": \"r\",\n \"\\u0441\": \"s\",\n \"\\u0442\": \"t\",\n \"\\u0443\": \"u\",\n \"\\u0444\": \"f\",\n \"\\u0445\": \"kh\",\n \"\\u0446\": \"c\",\n \"\\u0447\": \"ch\",\n \"\\u0448\": \"sh\",\n \"\\u0449\": \"sh\",\n \"\\u044A\": \"\",\n \"\\u044B\": \"y\",\n \"\\u044C\": \"\",\n \"\\u044D\": \"e\",\n \"\\u044E\": \"yu\",\n \"\\u044F\": \"ya\",\n \"\\u0410\": \"A\",\n \"\\u0411\": \"B\",\n \"\\u0412\": \"V\",\n \"\\u0413\": \"G\",\n \"\\u0414\": \"D\",\n \"\\u0415\": \"E\",\n \"\\u0401\": \"Yo\",\n \"\\u0416\": \"Zh\",\n \"\\u0417\": \"Z\",\n \"\\u0418\": \"I\",\n \"\\u0419\": \"I\",\n \"\\u041A\": \"K\",\n \"\\u041B\": \"L\",\n \"\\u041C\": \"M\",\n \"\\u041D\": \"N\",\n \"\\u041E\": \"O\",\n \"\\u041F\": \"P\",\n \"\\u0420\": \"R\",\n \"\\u0421\": \"S\",\n \"\\u0422\": \"T\",\n \"\\u0423\": \"U\",\n \"\\u0424\": \"F\",\n \"\\u0425\": \"Kh\",\n \"\\u0426\": \"C\",\n \"\\u0427\": \"Ch\",\n \"\\u0428\": \"Sh\",\n \"\\u0429\": \"Sh\",\n \"\\u042A\": \"\",\n \"\\u042B\": \"Y\",\n \"\\u042C\": \"\",\n \"\\u042D\": \"E\",\n \"\\u042E\": \"Yu\",\n \"\\u042F\": \"Ya\",\n // Serbian\n \"\\u0452\": \"dj\",\n \"\\u0458\": \"j\",\n // 'љ': 'lj', // duplicate\n // 'њ': 'nj', // duplicate\n \"\\u045B\": \"c\",\n \"\\u045F\": \"dz\",\n \"\\u0402\": \"Dj\",\n \"\\u0408\": \"j\",\n // 'Љ': 'Lj', // duplicate\n // 'Њ': 'Nj', // duplicate\n \"\\u040B\": \"C\",\n \"\\u040F\": \"Dz\",\n // Slovak\n \"\\u013E\": \"l\",\n \"\\u013A\": \"l\",\n \"\\u0155\": \"r\",\n \"\\u013D\": \"L\",\n \"\\u0139\": \"L\",\n \"\\u0154\": \"R\",\n // Turkish\n \"\\u015F\": \"s\",\n \"\\u015E\": \"S\",\n \"\\u0131\": \"i\",\n \"\\u0130\": \"I\",\n // 'ç': 'c', // duplicate\n // 'Ç': 'C', // duplicate\n // 'ü': 'u', // duplicate, see langCharMap\n // 'Ü': 'U', // duplicate, see langCharMap\n // 'ö': 'o', // duplicate, see langCharMap\n // 'Ö': 'O', // duplicate, see langCharMap\n \"\\u011F\": \"g\",\n \"\\u011E\": \"G\",\n // Vietnamese\n \"\\u1EA3\": \"a\",\n \"\\u1EA2\": \"A\",\n \"\\u1EB3\": \"a\",\n \"\\u1EB2\": \"A\",\n \"\\u1EA9\": \"a\",\n \"\\u1EA8\": \"A\",\n \"\\u0111\": \"d\",\n \"\\u0110\": \"D\",\n \"\\u1EB9\": \"e\",\n \"\\u1EB8\": \"E\",\n \"\\u1EBD\": \"e\",\n \"\\u1EBC\": \"E\",\n \"\\u1EBB\": \"e\",\n \"\\u1EBA\": \"E\",\n \"\\u1EBF\": \"e\",\n \"\\u1EBE\": \"E\",\n \"\\u1EC1\": \"e\",\n \"\\u1EC0\": \"E\",\n \"\\u1EC7\": \"e\",\n \"\\u1EC6\": \"E\",\n \"\\u1EC5\": \"e\",\n \"\\u1EC4\": \"E\",\n \"\\u1EC3\": \"e\",\n \"\\u1EC2\": \"E\",\n \"\\u1ECF\": \"o\",\n \"\\u1ECD\": \"o\",\n \"\\u1ECC\": \"o\",\n \"\\u1ED1\": \"o\",\n \"\\u1ED0\": \"O\",\n \"\\u1ED3\": \"o\",\n \"\\u1ED2\": \"O\",\n \"\\u1ED5\": \"o\",\n \"\\u1ED4\": \"O\",\n \"\\u1ED9\": \"o\",\n \"\\u1ED8\": \"O\",\n \"\\u1ED7\": \"o\",\n \"\\u1ED6\": \"O\",\n \"\\u01A1\": \"o\",\n \"\\u01A0\": \"O\",\n \"\\u1EDB\": \"o\",\n \"\\u1EDA\": \"O\",\n \"\\u1EDD\": \"o\",\n \"\\u1EDC\": \"O\",\n \"\\u1EE3\": \"o\",\n \"\\u1EE2\": \"O\",\n \"\\u1EE1\": \"o\",\n \"\\u1EE0\": \"O\",\n \"\\u1EDE\": \"o\",\n \"\\u1EDF\": \"o\",\n \"\\u1ECB\": \"i\",\n \"\\u1ECA\": \"I\",\n \"\\u0129\": \"i\",\n \"\\u0128\": \"I\",\n \"\\u1EC9\": \"i\",\n \"\\u1EC8\": \"i\",\n \"\\u1EE7\": \"u\",\n \"\\u1EE6\": \"U\",\n \"\\u1EE5\": \"u\",\n \"\\u1EE4\": \"U\",\n \"\\u0169\": \"u\",\n \"\\u0168\": \"U\",\n \"\\u01B0\": \"u\",\n \"\\u01AF\": \"U\",\n \"\\u1EE9\": \"u\",\n \"\\u1EE8\": \"U\",\n \"\\u1EEB\": \"u\",\n \"\\u1EEA\": \"U\",\n \"\\u1EF1\": \"u\",\n \"\\u1EF0\": \"U\",\n \"\\u1EEF\": \"u\",\n \"\\u1EEE\": \"U\",\n \"\\u1EED\": \"u\",\n \"\\u1EEC\": \"\\u01B0\",\n \"\\u1EF7\": \"y\",\n \"\\u1EF6\": \"y\",\n \"\\u1EF3\": \"y\",\n \"\\u1EF2\": \"Y\",\n \"\\u1EF5\": \"y\",\n \"\\u1EF4\": \"Y\",\n \"\\u1EF9\": \"y\",\n \"\\u1EF8\": \"Y\",\n \"\\u1EA1\": \"a\",\n \"\\u1EA0\": \"A\",\n \"\\u1EA5\": \"a\",\n \"\\u1EA4\": \"A\",\n \"\\u1EA7\": \"a\",\n \"\\u1EA6\": \"A\",\n \"\\u1EAD\": \"a\",\n \"\\u1EAC\": \"A\",\n \"\\u1EAB\": \"a\",\n \"\\u1EAA\": \"A\",\n // 'ă': 'a', // duplicate\n // 'Ă': 'A', // duplicate\n \"\\u1EAF\": \"a\",\n \"\\u1EAE\": \"A\",\n \"\\u1EB1\": \"a\",\n \"\\u1EB0\": \"A\",\n \"\\u1EB7\": \"a\",\n \"\\u1EB6\": \"A\",\n \"\\u1EB5\": \"a\",\n \"\\u1EB4\": \"A\",\n \"\\u24EA\": \"0\",\n \"\\u2460\": \"1\",\n \"\\u2461\": \"2\",\n \"\\u2462\": \"3\",\n \"\\u2463\": \"4\",\n \"\\u2464\": \"5\",\n \"\\u2465\": \"6\",\n \"\\u2466\": \"7\",\n \"\\u2467\": \"8\",\n \"\\u2468\": \"9\",\n \"\\u2469\": \"10\",\n \"\\u246A\": \"11\",\n \"\\u246B\": \"12\",\n \"\\u246C\": \"13\",\n \"\\u246D\": \"14\",\n \"\\u246E\": \"15\",\n \"\\u246F\": \"16\",\n \"\\u2470\": \"17\",\n \"\\u2471\": \"18\",\n \"\\u2472\": \"18\",\n \"\\u2473\": \"18\",\n \"\\u24F5\": \"1\",\n \"\\u24F6\": \"2\",\n \"\\u24F7\": \"3\",\n \"\\u24F8\": \"4\",\n \"\\u24F9\": \"5\",\n \"\\u24FA\": \"6\",\n \"\\u24FB\": \"7\",\n \"\\u24FC\": \"8\",\n \"\\u24FD\": \"9\",\n \"\\u24FE\": \"10\",\n \"\\u24FF\": \"0\",\n \"\\u24EB\": \"11\",\n \"\\u24EC\": \"12\",\n \"\\u24ED\": \"13\",\n \"\\u24EE\": \"14\",\n \"\\u24EF\": \"15\",\n \"\\u24F0\": \"16\",\n \"\\u24F1\": \"17\",\n \"\\u24F2\": \"18\",\n \"\\u24F3\": \"19\",\n \"\\u24F4\": \"20\",\n \"\\u24B6\": \"A\",\n \"\\u24B7\": \"B\",\n \"\\u24B8\": \"C\",\n \"\\u24B9\": \"D\",\n \"\\u24BA\": \"E\",\n \"\\u24BB\": \"F\",\n \"\\u24BC\": \"G\",\n \"\\u24BD\": \"H\",\n \"\\u24BE\": \"I\",\n \"\\u24BF\": \"J\",\n \"\\u24C0\": \"K\",\n \"\\u24C1\": \"L\",\n \"\\u24C2\": \"M\",\n \"\\u24C3\": \"N\",\n \"\\u24C4\": \"O\",\n \"\\u24C5\": \"P\",\n \"\\u24C6\": \"Q\",\n \"\\u24C7\": \"R\",\n \"\\u24C8\": \"S\",\n \"\\u24C9\": \"T\",\n \"\\u24CA\": \"U\",\n \"\\u24CB\": \"V\",\n \"\\u24CC\": \"W\",\n \"\\u24CD\": \"X\",\n \"\\u24CE\": \"Y\",\n \"\\u24CF\": \"Z\",\n \"\\u24D0\": \"a\",\n \"\\u24D1\": \"b\",\n \"\\u24D2\": \"c\",\n \"\\u24D3\": \"d\",\n \"\\u24D4\": \"e\",\n \"\\u24D5\": \"f\",\n \"\\u24D6\": \"g\",\n \"\\u24D7\": \"h\",\n \"\\u24D8\": \"i\",\n \"\\u24D9\": \"j\",\n \"\\u24DA\": \"k\",\n \"\\u24DB\": \"l\",\n \"\\u24DC\": \"m\",\n \"\\u24DD\": \"n\",\n \"\\u24DE\": \"o\",\n \"\\u24DF\": \"p\",\n \"\\u24E0\": \"q\",\n \"\\u24E1\": \"r\",\n \"\\u24E2\": \"s\",\n \"\\u24E3\": \"t\",\n \"\\u24E4\": \"u\",\n \"\\u24E6\": \"v\",\n \"\\u24E5\": \"w\",\n \"\\u24E7\": \"x\",\n \"\\u24E8\": \"y\",\n \"\\u24E9\": \"z\",\n // symbols\n \"\\u201C\": '\"',\n \"\\u201D\": '\"',\n \"\\u2018\": \"'\",\n \"\\u2019\": \"'\",\n \"\\u2202\": \"d\",\n \"\\u0192\": \"f\",\n \"\\u2122\": \"(TM)\",\n \"\\xA9\": \"(C)\",\n \"\\u0153\": \"oe\",\n \"\\u0152\": \"OE\",\n \"\\xAE\": \"(R)\",\n \"\\u2020\": \"+\",\n \"\\u2120\": \"(SM)\",\n \"\\u2026\": \"...\",\n \"\\u02DA\": \"o\",\n \"\\xBA\": \"o\",\n \"\\xAA\": \"a\",\n \"\\u2022\": \"*\",\n \"\\u104A\": \",\",\n \"\\u104B\": \".\",\n // currency\n \"$\": \"USD\",\n \"\\u20AC\": \"EUR\",\n \"\\u20A2\": \"BRN\",\n \"\\u20A3\": \"FRF\",\n \"\\xA3\": \"GBP\",\n \"\\u20A4\": \"ITL\",\n \"\\u20A6\": \"NGN\",\n \"\\u20A7\": \"ESP\",\n \"\\u20A9\": \"KRW\",\n \"\\u20AA\": \"ILS\",\n \"\\u20AB\": \"VND\",\n \"\\u20AD\": \"LAK\",\n \"\\u20AE\": \"MNT\",\n \"\\u20AF\": \"GRD\",\n \"\\u20B1\": \"ARS\",\n \"\\u20B2\": \"PYG\",\n \"\\u20B3\": \"ARA\",\n \"\\u20B4\": \"UAH\",\n \"\\u20B5\": \"GHS\",\n \"\\xA2\": \"cent\",\n \"\\xA5\": \"CNY\",\n \"\\u5143\": \"CNY\",\n \"\\u5186\": \"YEN\",\n \"\\uFDFC\": \"IRR\",\n \"\\u20A0\": \"EWE\",\n \"\\u0E3F\": \"THB\",\n \"\\u20A8\": \"INR\",\n \"\\u20B9\": \"INR\",\n \"\\u20B0\": \"PF\",\n \"\\u20BA\": \"TRY\",\n \"\\u060B\": \"AFN\",\n \"\\u20BC\": \"AZN\",\n \"\\u043B\\u0432\": \"BGN\",\n \"\\u17DB\": \"KHR\",\n \"\\u20A1\": \"CRC\",\n \"\\u20B8\": \"KZT\",\n \"\\u0434\\u0435\\u043D\": \"MKD\",\n \"z\\u0142\": \"PLN\",\n \"\\u20BD\": \"RUB\",\n \"\\u20BE\": \"GEL\"\n };\n var lookAheadCharArray = [\n // burmese\n \"\\u103A\",\n // Dhivehi\n \"\\u07B0\"\n ];\n var diatricMap = {\n // Burmese\n // dependent vowels\n \"\\u102C\": \"a\",\n \"\\u102B\": \"a\",\n \"\\u1031\": \"e\",\n \"\\u1032\": \"e\",\n \"\\u102D\": \"i\",\n \"\\u102E\": \"i\",\n \"\\u102D\\u102F\": \"o\",\n \"\\u102F\": \"u\",\n \"\\u1030\": \"u\",\n \"\\u1031\\u102B\\u1004\\u103A\": \"aung\",\n \"\\u1031\\u102C\": \"aw\",\n \"\\u1031\\u102C\\u103A\": \"aw\",\n \"\\u1031\\u102B\": \"aw\",\n \"\\u1031\\u102B\\u103A\": \"aw\",\n \"\\u103A\": \"\\u103A\",\n // this is special case but the character will be converted to latin in the code\n \"\\u1000\\u103A\": \"et\",\n \"\\u102D\\u102F\\u1000\\u103A\": \"aik\",\n \"\\u1031\\u102C\\u1000\\u103A\": \"auk\",\n \"\\u1004\\u103A\": \"in\",\n \"\\u102D\\u102F\\u1004\\u103A\": \"aing\",\n \"\\u1031\\u102C\\u1004\\u103A\": \"aung\",\n \"\\u1005\\u103A\": \"it\",\n \"\\u100A\\u103A\": \"i\",\n \"\\u1010\\u103A\": \"at\",\n \"\\u102D\\u1010\\u103A\": \"eik\",\n \"\\u102F\\u1010\\u103A\": \"ok\",\n \"\\u103D\\u1010\\u103A\": \"ut\",\n \"\\u1031\\u1010\\u103A\": \"it\",\n \"\\u1012\\u103A\": \"d\",\n \"\\u102D\\u102F\\u1012\\u103A\": \"ok\",\n \"\\u102F\\u1012\\u103A\": \"ait\",\n \"\\u1014\\u103A\": \"an\",\n \"\\u102C\\u1014\\u103A\": \"an\",\n \"\\u102D\\u1014\\u103A\": \"ein\",\n \"\\u102F\\u1014\\u103A\": \"on\",\n \"\\u103D\\u1014\\u103A\": \"un\",\n \"\\u1015\\u103A\": \"at\",\n \"\\u102D\\u1015\\u103A\": \"eik\",\n \"\\u102F\\u1015\\u103A\": \"ok\",\n \"\\u103D\\u1015\\u103A\": \"ut\",\n \"\\u1014\\u103A\\u102F\\u1015\\u103A\": \"nub\",\n \"\\u1019\\u103A\": \"an\",\n \"\\u102D\\u1019\\u103A\": \"ein\",\n \"\\u102F\\u1019\\u103A\": \"on\",\n \"\\u103D\\u1019\\u103A\": \"un\",\n \"\\u101A\\u103A\": \"e\",\n \"\\u102D\\u102F\\u101C\\u103A\": \"ol\",\n \"\\u1009\\u103A\": \"in\",\n \"\\u1036\": \"an\",\n \"\\u102D\\u1036\": \"ein\",\n \"\\u102F\\u1036\": \"on\",\n // Dhivehi\n \"\\u07A6\\u0787\\u07B0\": \"ah\",\n \"\\u07A6\\u0781\\u07B0\": \"ah\"\n };\n var langCharMap = {\n \"en\": {},\n // default language\n \"az\": {\n // Azerbaijani\n \"\\xE7\": \"c\",\n \"\\u0259\": \"e\",\n \"\\u011F\": \"g\",\n \"\\u0131\": \"i\",\n \"\\xF6\": \"o\",\n \"\\u015F\": \"s\",\n \"\\xFC\": \"u\",\n \"\\xC7\": \"C\",\n \"\\u018F\": \"E\",\n \"\\u011E\": \"G\",\n \"\\u0130\": \"I\",\n \"\\xD6\": \"O\",\n \"\\u015E\": \"S\",\n \"\\xDC\": \"U\"\n },\n \"cs\": {\n // Czech\n \"\\u010D\": \"c\",\n \"\\u010F\": \"d\",\n \"\\u011B\": \"e\",\n \"\\u0148\": \"n\",\n \"\\u0159\": \"r\",\n \"\\u0161\": \"s\",\n \"\\u0165\": \"t\",\n \"\\u016F\": \"u\",\n \"\\u017E\": \"z\",\n \"\\u010C\": \"C\",\n \"\\u010E\": \"D\",\n \"\\u011A\": \"E\",\n \"\\u0147\": \"N\",\n \"\\u0158\": \"R\",\n \"\\u0160\": \"S\",\n \"\\u0164\": \"T\",\n \"\\u016E\": \"U\",\n \"\\u017D\": \"Z\"\n },\n \"fi\": {\n // Finnish\n // 'å': 'a', duplicate see charMap/latin\n // 'Å': 'A', duplicate see charMap/latin\n \"\\xE4\": \"a\",\n // ok\n \"\\xC4\": \"A\",\n // ok\n \"\\xF6\": \"o\",\n // ok\n \"\\xD6\": \"O\"\n // ok\n },\n \"hu\": {\n // Hungarian\n \"\\xE4\": \"a\",\n // ok\n \"\\xC4\": \"A\",\n // ok\n // 'á': 'a', duplicate see charMap/latin\n // 'Á': 'A', duplicate see charMap/latin\n \"\\xF6\": \"o\",\n // ok\n \"\\xD6\": \"O\",\n // ok\n // 'ő': 'o', duplicate see charMap/latin\n // 'Ő': 'O', duplicate see charMap/latin\n \"\\xFC\": \"u\",\n \"\\xDC\": \"U\",\n \"\\u0171\": \"u\",\n \"\\u0170\": \"U\"\n },\n \"lt\": {\n // Lithuanian\n \"\\u0105\": \"a\",\n \"\\u010D\": \"c\",\n \"\\u0119\": \"e\",\n \"\\u0117\": \"e\",\n \"\\u012F\": \"i\",\n \"\\u0161\": \"s\",\n \"\\u0173\": \"u\",\n \"\\u016B\": \"u\",\n \"\\u017E\": \"z\",\n \"\\u0104\": \"A\",\n \"\\u010C\": \"C\",\n \"\\u0118\": \"E\",\n \"\\u0116\": \"E\",\n \"\\u012E\": \"I\",\n \"\\u0160\": \"S\",\n \"\\u0172\": \"U\",\n \"\\u016A\": \"U\"\n },\n \"lv\": {\n // Latvian\n \"\\u0101\": \"a\",\n \"\\u010D\": \"c\",\n \"\\u0113\": \"e\",\n \"\\u0123\": \"g\",\n \"\\u012B\": \"i\",\n \"\\u0137\": \"k\",\n \"\\u013C\": \"l\",\n \"\\u0146\": \"n\",\n \"\\u0161\": \"s\",\n \"\\u016B\": \"u\",\n \"\\u017E\": \"z\",\n \"\\u0100\": \"A\",\n \"\\u010C\": \"C\",\n \"\\u0112\": \"E\",\n \"\\u0122\": \"G\",\n \"\\u012A\": \"i\",\n \"\\u0136\": \"k\",\n \"\\u013B\": \"L\",\n \"\\u0145\": \"N\",\n \"\\u0160\": \"S\",\n \"\\u016A\": \"u\",\n \"\\u017D\": \"Z\"\n },\n \"pl\": {\n // Polish\n \"\\u0105\": \"a\",\n \"\\u0107\": \"c\",\n \"\\u0119\": \"e\",\n \"\\u0142\": \"l\",\n \"\\u0144\": \"n\",\n \"\\xF3\": \"o\",\n \"\\u015B\": \"s\",\n \"\\u017A\": \"z\",\n \"\\u017C\": \"z\",\n \"\\u0104\": \"A\",\n \"\\u0106\": \"C\",\n \"\\u0118\": \"e\",\n \"\\u0141\": \"L\",\n \"\\u0143\": \"N\",\n \"\\xD3\": \"O\",\n \"\\u015A\": \"S\",\n \"\\u0179\": \"Z\",\n \"\\u017B\": \"Z\"\n },\n \"sv\": {\n // Swedish\n // 'å': 'a', duplicate see charMap/latin\n // 'Å': 'A', duplicate see charMap/latin\n \"\\xE4\": \"a\",\n // ok\n \"\\xC4\": \"A\",\n // ok\n \"\\xF6\": \"o\",\n // ok\n \"\\xD6\": \"O\"\n // ok\n },\n \"sk\": {\n // Slovak\n \"\\xE4\": \"a\",\n \"\\xC4\": \"A\"\n },\n \"sr\": {\n // Serbian\n \"\\u0459\": \"lj\",\n \"\\u045A\": \"nj\",\n \"\\u0409\": \"Lj\",\n \"\\u040A\": \"Nj\",\n \"\\u0111\": \"dj\",\n \"\\u0110\": \"Dj\"\n },\n \"tr\": {\n // Turkish\n \"\\xDC\": \"U\",\n \"\\xD6\": \"O\",\n \"\\xFC\": \"u\",\n \"\\xF6\": \"o\"\n }\n };\n var symbolMap = {\n \"ar\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"la-nihaya\",\n \"\\u2665\": \"hob\",\n \"&\": \"wa\",\n \"|\": \"aw\",\n \"<\": \"aqal-men\",\n \">\": \"akbar-men\",\n \"\\u2211\": \"majmou\",\n \"\\xA4\": \"omla\"\n },\n \"az\": {},\n \"ca\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"infinit\",\n \"\\u2665\": \"amor\",\n \"&\": \"i\",\n \"|\": \"o\",\n \"<\": \"menys que\",\n \">\": \"mes que\",\n \"\\u2211\": \"suma dels\",\n \"\\xA4\": \"moneda\"\n },\n \"cs\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"nekonecno\",\n \"\\u2665\": \"laska\",\n \"&\": \"a\",\n \"|\": \"nebo\",\n \"<\": \"mensi nez\",\n \">\": \"vetsi nez\",\n \"\\u2211\": \"soucet\",\n \"\\xA4\": \"mena\"\n },\n \"de\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"unendlich\",\n \"\\u2665\": \"Liebe\",\n \"&\": \"und\",\n \"|\": \"oder\",\n \"<\": \"kleiner als\",\n \">\": \"groesser als\",\n \"\\u2211\": \"Summe von\",\n \"\\xA4\": \"Waehrung\"\n },\n \"dv\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"kolunulaa\",\n \"\\u2665\": \"loabi\",\n \"&\": \"aai\",\n \"|\": \"noonee\",\n \"<\": \"ah vure kuda\",\n \">\": \"ah vure bodu\",\n \"\\u2211\": \"jumula\",\n \"\\xA4\": \"faisaa\"\n },\n \"en\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"infinity\",\n \"\\u2665\": \"love\",\n \"&\": \"and\",\n \"|\": \"or\",\n \"<\": \"less than\",\n \">\": \"greater than\",\n \"\\u2211\": \"sum\",\n \"\\xA4\": \"currency\"\n },\n \"es\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"infinito\",\n \"\\u2665\": \"amor\",\n \"&\": \"y\",\n \"|\": \"u\",\n \"<\": \"menos que\",\n \">\": \"mas que\",\n \"\\u2211\": \"suma de los\",\n \"\\xA4\": \"moneda\"\n },\n \"fa\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"bi-nahayat\",\n \"\\u2665\": \"eshgh\",\n \"&\": \"va\",\n \"|\": \"ya\",\n \"<\": \"kamtar-az\",\n \">\": \"bishtar-az\",\n \"\\u2211\": \"majmooe\",\n \"\\xA4\": \"vahed\"\n },\n \"fi\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"aarettomyys\",\n \"\\u2665\": \"rakkaus\",\n \"&\": \"ja\",\n \"|\": \"tai\",\n \"<\": \"pienempi kuin\",\n \">\": \"suurempi kuin\",\n \"\\u2211\": \"summa\",\n \"\\xA4\": \"valuutta\"\n },\n \"fr\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"infiniment\",\n \"\\u2665\": \"Amour\",\n \"&\": \"et\",\n \"|\": \"ou\",\n \"<\": \"moins que\",\n \">\": \"superieure a\",\n \"\\u2211\": \"somme des\",\n \"\\xA4\": \"monnaie\"\n },\n \"ge\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"usasruloba\",\n \"\\u2665\": \"siqvaruli\",\n \"&\": \"da\",\n \"|\": \"an\",\n \"<\": \"naklebi\",\n \">\": \"meti\",\n \"\\u2211\": \"jami\",\n \"\\xA4\": \"valuta\"\n },\n \"gr\": {},\n \"hu\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"vegtelen\",\n \"\\u2665\": \"szerelem\",\n \"&\": \"es\",\n \"|\": \"vagy\",\n \"<\": \"kisebb mint\",\n \">\": \"nagyobb mint\",\n \"\\u2211\": \"szumma\",\n \"\\xA4\": \"penznem\"\n },\n \"it\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"infinito\",\n \"\\u2665\": \"amore\",\n \"&\": \"e\",\n \"|\": \"o\",\n \"<\": \"minore di\",\n \">\": \"maggiore di\",\n \"\\u2211\": \"somma\",\n \"\\xA4\": \"moneta\"\n },\n \"lt\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"begalybe\",\n \"\\u2665\": \"meile\",\n \"&\": \"ir\",\n \"|\": \"ar\",\n \"<\": \"maziau nei\",\n \">\": \"daugiau nei\",\n \"\\u2211\": \"suma\",\n \"\\xA4\": \"valiuta\"\n },\n \"lv\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"bezgaliba\",\n \"\\u2665\": \"milestiba\",\n \"&\": \"un\",\n \"|\": \"vai\",\n \"<\": \"mazak neka\",\n \">\": \"lielaks neka\",\n \"\\u2211\": \"summa\",\n \"\\xA4\": \"valuta\"\n },\n \"my\": {\n \"\\u2206\": \"kwahkhyaet\",\n \"\\u221E\": \"asaonasme\",\n \"\\u2665\": \"akhyait\",\n \"&\": \"nhin\",\n \"|\": \"tho\",\n \"<\": \"ngethaw\",\n \">\": \"kyithaw\",\n \"\\u2211\": \"paungld\",\n \"\\xA4\": \"ngwekye\"\n },\n \"mk\": {},\n \"nl\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"oneindig\",\n \"\\u2665\": \"liefde\",\n \"&\": \"en\",\n \"|\": \"of\",\n \"<\": \"kleiner dan\",\n \">\": \"groter dan\",\n \"\\u2211\": \"som\",\n \"\\xA4\": \"valuta\"\n },\n \"pl\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"nieskonczonosc\",\n \"\\u2665\": \"milosc\",\n \"&\": \"i\",\n \"|\": \"lub\",\n \"<\": \"mniejsze niz\",\n \">\": \"wieksze niz\",\n \"\\u2211\": \"suma\",\n \"\\xA4\": \"waluta\"\n },\n \"pt\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"infinito\",\n \"\\u2665\": \"amor\",\n \"&\": \"e\",\n \"|\": \"ou\",\n \"<\": \"menor que\",\n \">\": \"maior que\",\n \"\\u2211\": \"soma\",\n \"\\xA4\": \"moeda\"\n },\n \"ro\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"infinit\",\n \"\\u2665\": \"dragoste\",\n \"&\": \"si\",\n \"|\": \"sau\",\n \"<\": \"mai mic ca\",\n \">\": \"mai mare ca\",\n \"\\u2211\": \"suma\",\n \"\\xA4\": \"valuta\"\n },\n \"ru\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"beskonechno\",\n \"\\u2665\": \"lubov\",\n \"&\": \"i\",\n \"|\": \"ili\",\n \"<\": \"menshe\",\n \">\": \"bolshe\",\n \"\\u2211\": \"summa\",\n \"\\xA4\": \"valjuta\"\n },\n \"sk\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"nekonecno\",\n \"\\u2665\": \"laska\",\n \"&\": \"a\",\n \"|\": \"alebo\",\n \"<\": \"menej ako\",\n \">\": \"viac ako\",\n \"\\u2211\": \"sucet\",\n \"\\xA4\": \"mena\"\n },\n \"sr\": {},\n \"tr\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"sonsuzluk\",\n \"\\u2665\": \"ask\",\n \"&\": \"ve\",\n \"|\": \"veya\",\n \"<\": \"kucuktur\",\n \">\": \"buyuktur\",\n \"\\u2211\": \"toplam\",\n \"\\xA4\": \"para birimi\"\n },\n \"uk\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"bezkinechnist\",\n \"\\u2665\": \"lubov\",\n \"&\": \"i\",\n \"|\": \"abo\",\n \"<\": \"menshe\",\n \">\": \"bilshe\",\n \"\\u2211\": \"suma\",\n \"\\xA4\": \"valjuta\"\n },\n \"vn\": {\n \"\\u2206\": \"delta\",\n \"\\u221E\": \"vo cuc\",\n \"\\u2665\": \"yeu\",\n \"&\": \"va\",\n \"|\": \"hoac\",\n \"<\": \"nho hon\",\n \">\": \"lon hon\",\n \"\\u2211\": \"tong\",\n \"\\xA4\": \"tien te\"\n }\n };\n var uricChars = [\";\", \"?\", \":\", \"@\", \"&\", \"=\", \"+\", \"$\", \",\", \"/\"].join(\"\");\n var uricNoSlashChars = [\";\", \"?\", \":\", \"@\", \"&\", \"=\", \"+\", \"$\", \",\"].join(\"\");\n var markChars = [\".\", \"!\", \"~\", \"*\", \"'\", \"(\", \")\"].join(\"\");\n var getSlug = function getSlug2(input, opts) {\n var separator = \"-\";\n var result = \"\";\n var diatricString = \"\";\n var convertSymbols = true;\n var customReplacements = {};\n var maintainCase;\n var titleCase;\n var truncate;\n var uricFlag;\n var uricNoSlashFlag;\n var markFlag;\n var symbol;\n var langChar;\n var lucky;\n var i;\n var ch;\n var l;\n var lastCharWasSymbol;\n var lastCharWasDiatric;\n var allowedChars = \"\";\n if (typeof input !== \"string\") {\n return \"\";\n }\n if (typeof opts === \"string\") {\n separator = opts;\n }\n symbol = symbolMap.en;\n langChar = langCharMap.en;\n if (typeof opts === \"object\") {\n maintainCase = opts.maintainCase || false;\n customReplacements = opts.custom && typeof opts.custom === \"object\" ? opts.custom : customReplacements;\n truncate = +opts.truncate > 1 && opts.truncate || false;\n uricFlag = opts.uric || false;\n uricNoSlashFlag = opts.uricNoSlash || false;\n markFlag = opts.mark || false;\n convertSymbols = opts.symbols === false || opts.lang === false ? false : true;\n separator = opts.separator || separator;\n if (uricFlag) {\n allowedChars += uricChars;\n }\n if (uricNoSlashFlag) {\n allowedChars += uricNoSlashChars;\n }\n if (markFlag) {\n allowedChars += markChars;\n }\n symbol = opts.lang && symbolMap[opts.lang] && convertSymbols ? symbolMap[opts.lang] : convertSymbols ? symbolMap.en : {};\n langChar = opts.lang && langCharMap[opts.lang] ? langCharMap[opts.lang] : opts.lang === false || opts.lang === true ? {} : langCharMap.en;\n if (opts.titleCase && typeof opts.titleCase.length === \"number\" && Array.prototype.toString.call(opts.titleCase)) {\n opts.titleCase.forEach(function(v) {\n customReplacements[v + \"\"] = v + \"\";\n });\n titleCase = true;\n } else {\n titleCase = !!opts.titleCase;\n }\n if (opts.custom && typeof opts.custom.length === \"number\" && Array.prototype.toString.call(opts.custom)) {\n opts.custom.forEach(function(v) {\n customReplacements[v + \"\"] = v + \"\";\n });\n }\n Object.keys(customReplacements).forEach(function(v) {\n var r;\n if (v.length > 1) {\n r = new RegExp(\"\\\\b\" + escapeChars(v) + \"\\\\b\", \"gi\");\n } else {\n r = new RegExp(escapeChars(v), \"gi\");\n }\n input = input.replace(r, customReplacements[v]);\n });\n for (ch in customReplacements) {\n allowedChars += ch;\n }\n }\n allowedChars += separator;\n allowedChars = escapeChars(allowedChars);\n input = input.replace(/(^\\s+|\\s+$)/g, \"\");\n lastCharWasSymbol = false;\n lastCharWasDiatric = false;\n for (i = 0, l = input.length; i < l; i++) {\n ch = input[i];\n if (isReplacedCustomChar(ch, customReplacements)) {\n lastCharWasSymbol = false;\n } else if (langChar[ch]) {\n ch = lastCharWasSymbol && langChar[ch].match(/[A-Za-z0-9]/) ? \" \" + langChar[ch] : langChar[ch];\n lastCharWasSymbol = false;\n } else if (ch in charMap) {\n if (i + 1 < l && lookAheadCharArray.indexOf(input[i + 1]) >= 0) {\n diatricString += ch;\n ch = \"\";\n } else if (lastCharWasDiatric === true) {\n ch = diatricMap[diatricString] + charMap[ch];\n diatricString = \"\";\n } else {\n ch = lastCharWasSymbol && charMap[ch].match(/[A-Za-z0-9]/) ? \" \" + charMap[ch] : charMap[ch];\n }\n lastCharWasSymbol = false;\n lastCharWasDiatric = false;\n } else if (ch in diatricMap) {\n diatricString += ch;\n ch = \"\";\n if (i === l - 1) {\n ch = diatricMap[diatricString];\n }\n lastCharWasDiatric = true;\n } else if (\n // process symbol chars\n symbol[ch] && !(uricFlag && uricChars.indexOf(ch) !== -1) && !(uricNoSlashFlag && uricNoSlashChars.indexOf(ch) !== -1)\n ) {\n ch = lastCharWasSymbol || result.substr(-1).match(/[A-Za-z0-9]/) ? separator + symbol[ch] : symbol[ch];\n ch += input[i + 1] !== void 0 && input[i + 1].match(/[A-Za-z0-9]/) ? separator : \"\";\n lastCharWasSymbol = true;\n } else {\n if (lastCharWasDiatric === true) {\n ch = diatricMap[diatricString] + ch;\n diatricString = \"\";\n lastCharWasDiatric = false;\n } else if (lastCharWasSymbol && (/[A-Za-z0-9]/.test(ch) || result.substr(-1).match(/A-Za-z0-9]/))) {\n ch = \" \" + ch;\n }\n lastCharWasSymbol = false;\n }\n result += ch.replace(new RegExp(\"[^\\\\w\\\\s\" + allowedChars + \"_-]\", \"g\"), separator);\n }\n if (titleCase) {\n result = result.replace(/(\\w)(\\S*)/g, function(_, i2, r) {\n var j = i2.toUpperCase() + (r !== null ? r : \"\");\n return Object.keys(customReplacements).indexOf(j.toLowerCase()) < 0 ? j : j.toLowerCase();\n });\n }\n result = result.replace(/\\s+/g, separator).replace(new RegExp(\"\\\\\" + separator + \"+\", \"g\"), separator).replace(new RegExp(\"(^\\\\\" + separator + \"+|\\\\\" + separator + \"+$)\", \"g\"), \"\");\n if (truncate && result.length > truncate) {\n lucky = result.charAt(truncate) === separator;\n result = result.slice(0, truncate);\n if (!lucky) {\n result = result.slice(0, result.lastIndexOf(separator));\n }\n }\n if (!maintainCase && !titleCase) {\n result = result.toLowerCase();\n }\n return result;\n };\n var createSlug = function createSlug2(opts) {\n return function getSlugWithConfig(input) {\n return getSlug(input, opts);\n };\n };\n var escapeChars = function escapeChars2(input) {\n return input.replace(/[-\\\\^$*+?.()|[\\]{}\\/]/g, \"\\\\$&\");\n };\n var isReplacedCustomChar = function(ch, customReplacements) {\n for (var c in customReplacements) {\n if (customReplacements[c] === ch) {\n return true;\n }\n }\n };\n if (typeof module !== \"undefined\" && module.exports) {\n module.exports = getSlug;\n module.exports.createSlug = createSlug;\n } else if (typeof define !== \"undefined\" && define.amd) {\n define([], function() {\n return getSlug;\n });\n } else {\n try {\n if (root.getSlug || root.createSlug) {\n throw \"speakingurl: globals exists /(getSlug|createSlug)/\";\n } else {\n root.getSlug = getSlug;\n root.createSlug = createSlug;\n }\n } catch (e) {\n }\n }\n })(exports);\n }\n});\n\n// ../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/index.js\nvar require_speakingurl2 = __commonJS({\n \"../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/index.js\"(exports, module) {\n \"use strict\";\n init_esm_shims();\n module.exports = require_speakingurl();\n }\n});\n\n// src/index.ts\ninit_esm_shims();\n\n// src/core/index.ts\ninit_esm_shims();\nimport { isNuxtApp, target as target13 } from \"@vue/devtools-shared\";\n\n// src/compat/index.ts\ninit_esm_shims();\nimport { target } from \"@vue/devtools-shared\";\nfunction onLegacyDevToolsPluginApiAvailable(cb) {\n if (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__) {\n cb();\n return;\n }\n Object.defineProperty(target, \"__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__\", {\n set(value) {\n if (value)\n cb();\n },\n configurable: true\n });\n}\n\n// src/ctx/index.ts\ninit_esm_shims();\nimport { target as target11 } from \"@vue/devtools-shared\";\n\n// src/ctx/api.ts\ninit_esm_shims();\nimport { target as target9 } from \"@vue/devtools-shared\";\n\n// src/core/component-highlighter/index.ts\ninit_esm_shims();\n\n// src/core/component/state/bounding-rect.ts\ninit_esm_shims();\n\n// src/core/component/utils/index.ts\ninit_esm_shims();\nimport { basename, classify } from \"@vue/devtools-shared\";\nfunction getComponentTypeName(options) {\n var _a25;\n const name = options.name || options._componentTag || options.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__ || options.__name;\n if (name === \"index\" && ((_a25 = options.__file) == null ? void 0 : _a25.endsWith(\"index.vue\"))) {\n return \"\";\n }\n return name;\n}\nfunction getComponentFileName(options) {\n const file = options.__file;\n if (file)\n return classify(basename(file, \".vue\"));\n}\nfunction getComponentName(options) {\n const name = options.displayName || options.name || options._componentTag;\n if (name)\n return name;\n return getComponentFileName(options);\n}\nfunction saveComponentGussedName(instance, name) {\n instance.type.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__ = name;\n return name;\n}\nfunction getAppRecord(instance) {\n if (instance.__VUE_DEVTOOLS_NEXT_APP_RECORD__)\n return instance.__VUE_DEVTOOLS_NEXT_APP_RECORD__;\n else if (instance.root)\n return instance.appContext.app.__VUE_DEVTOOLS_NEXT_APP_RECORD__;\n}\nasync function getComponentId(options) {\n const { app, uid, instance } = options;\n try {\n if (instance.__VUE_DEVTOOLS_NEXT_UID__)\n return instance.__VUE_DEVTOOLS_NEXT_UID__;\n const appRecord = await getAppRecord(app);\n if (!appRecord)\n return null;\n const isRoot = appRecord.rootInstance === instance;\n return `${appRecord.id}:${isRoot ? \"root\" : uid}`;\n } catch (e) {\n }\n}\nfunction isFragment(instance) {\n var _a25, _b25;\n const subTreeType = (_a25 = instance.subTree) == null ? void 0 : _a25.type;\n const appRecord = getAppRecord(instance);\n if (appRecord) {\n return ((_b25 = appRecord == null ? void 0 : appRecord.types) == null ? void 0 : _b25.Fragment) === subTreeType;\n }\n return false;\n}\nfunction isBeingDestroyed(instance) {\n return instance._isBeingDestroyed || instance.isUnmounted;\n}\nfunction getInstanceName(instance) {\n var _a25, _b25, _c;\n const name = getComponentTypeName((instance == null ? void 0 : instance.type) || {});\n if (name)\n return name;\n if ((instance == null ? void 0 : instance.root) === instance)\n return \"Root\";\n for (const key in (_b25 = (_a25 = instance.parent) == null ? void 0 : _a25.type) == null ? void 0 : _b25.components) {\n if (instance.parent.type.components[key] === (instance == null ? void 0 : instance.type))\n return saveComponentGussedName(instance, key);\n }\n for (const key in (_c = instance.appContext) == null ? void 0 : _c.components) {\n if (instance.appContext.components[key] === (instance == null ? void 0 : instance.type))\n return saveComponentGussedName(instance, key);\n }\n const fileName = getComponentFileName((instance == null ? void 0 : instance.type) || {});\n if (fileName)\n return fileName;\n return \"Anonymous Component\";\n}\nfunction getUniqueComponentId(instance) {\n var _a25, _b25, _c;\n const appId = (_c = (_b25 = (_a25 = instance == null ? void 0 : instance.appContext) == null ? void 0 : _a25.app) == null ? void 0 : _b25.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__) != null ? _c : 0;\n const instanceId = instance === (instance == null ? void 0 : instance.root) ? \"root\" : instance.uid;\n return `${appId}:${instanceId}`;\n}\nfunction getRenderKey(value) {\n if (value == null)\n return \"\";\n if (typeof value === \"number\")\n return value;\n else if (typeof value === \"string\")\n return `'${value}'`;\n else if (Array.isArray(value))\n return \"Array\";\n else\n return \"Object\";\n}\nfunction returnError(cb) {\n try {\n return cb();\n } catch (e) {\n return e;\n }\n}\nfunction getComponentInstance(appRecord, instanceId) {\n instanceId = instanceId || `${appRecord.id}:root`;\n const instance = appRecord.instanceMap.get(instanceId);\n return instance || appRecord.instanceMap.get(\":root\");\n}\nfunction ensurePropertyExists(obj, key, skipObjCheck = false) {\n return skipObjCheck ? key in obj : typeof obj === \"object\" && obj !== null ? key in obj : false;\n}\n\n// src/core/component/state/bounding-rect.ts\nfunction createRect() {\n const rect = {\n top: 0,\n bottom: 0,\n left: 0,\n right: 0,\n get width() {\n return rect.right - rect.left;\n },\n get height() {\n return rect.bottom - rect.top;\n }\n };\n return rect;\n}\nvar range;\nfunction getTextRect(node) {\n if (!range)\n range = document.createRange();\n range.selectNode(node);\n return range.getBoundingClientRect();\n}\nfunction getFragmentRect(vnode) {\n const rect = createRect();\n if (!vnode.children)\n return rect;\n for (let i = 0, l = vnode.children.length; i < l; i++) {\n const childVnode = vnode.children[i];\n let childRect;\n if (childVnode.component) {\n childRect = getComponentBoundingRect(childVnode.component);\n } else if (childVnode.el) {\n const el = childVnode.el;\n if (el.nodeType === 1 || el.getBoundingClientRect)\n childRect = el.getBoundingClientRect();\n else if (el.nodeType === 3 && el.data.trim())\n childRect = getTextRect(el);\n }\n if (childRect)\n mergeRects(rect, childRect);\n }\n return rect;\n}\nfunction mergeRects(a, b) {\n if (!a.top || b.top < a.top)\n a.top = b.top;\n if (!a.bottom || b.bottom > a.bottom)\n a.bottom = b.bottom;\n if (!a.left || b.left < a.left)\n a.left = b.left;\n if (!a.right || b.right > a.right)\n a.right = b.right;\n return a;\n}\nvar DEFAULT_RECT = {\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: 0,\n height: 0\n};\nfunction getComponentBoundingRect(instance) {\n const el = instance.subTree.el;\n if (typeof window === \"undefined\") {\n return DEFAULT_RECT;\n }\n if (isFragment(instance))\n return getFragmentRect(instance.subTree);\n else if ((el == null ? void 0 : el.nodeType) === 1)\n return el == null ? void 0 : el.getBoundingClientRect();\n else if (instance.subTree.component)\n return getComponentBoundingRect(instance.subTree.component);\n else\n return DEFAULT_RECT;\n}\n\n// src/core/component/tree/el.ts\ninit_esm_shims();\nfunction getRootElementsFromComponentInstance(instance) {\n if (isFragment(instance))\n return getFragmentRootElements(instance.subTree);\n if (!instance.subTree)\n return [];\n return [instance.subTree.el];\n}\nfunction getFragmentRootElements(vnode) {\n if (!vnode.children)\n return [];\n const list = [];\n vnode.children.forEach((childVnode) => {\n if (childVnode.component)\n list.push(...getRootElementsFromComponentInstance(childVnode.component));\n else if (childVnode == null ? void 0 : childVnode.el)\n list.push(childVnode.el);\n });\n return list;\n}\n\n// src/core/component-highlighter/index.ts\nvar CONTAINER_ELEMENT_ID = \"__vue-devtools-component-inspector__\";\nvar CARD_ELEMENT_ID = \"__vue-devtools-component-inspector__card__\";\nvar COMPONENT_NAME_ELEMENT_ID = \"__vue-devtools-component-inspector__name__\";\nvar INDICATOR_ELEMENT_ID = \"__vue-devtools-component-inspector__indicator__\";\nvar containerStyles = {\n display: \"block\",\n zIndex: 2147483640,\n position: \"fixed\",\n backgroundColor: \"#42b88325\",\n border: \"1px solid #42b88350\",\n borderRadius: \"5px\",\n transition: \"all 0.1s ease-in\",\n pointerEvents: \"none\"\n};\nvar cardStyles = {\n fontFamily: \"Arial, Helvetica, sans-serif\",\n padding: \"5px 8px\",\n borderRadius: \"4px\",\n textAlign: \"left\",\n position: \"absolute\",\n left: 0,\n color: \"#e9e9e9\",\n fontSize: \"14px\",\n fontWeight: 600,\n lineHeight: \"24px\",\n backgroundColor: \"#42b883\",\n boxShadow: \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)\"\n};\nvar indicatorStyles = {\n display: \"inline-block\",\n fontWeight: 400,\n fontStyle: \"normal\",\n fontSize: \"12px\",\n opacity: 0.7\n};\nfunction getContainerElement() {\n return document.getElementById(CONTAINER_ELEMENT_ID);\n}\nfunction getCardElement() {\n return document.getElementById(CARD_ELEMENT_ID);\n}\nfunction getIndicatorElement() {\n return document.getElementById(INDICATOR_ELEMENT_ID);\n}\nfunction getNameElement() {\n return document.getElementById(COMPONENT_NAME_ELEMENT_ID);\n}\nfunction getStyles(bounds) {\n return {\n left: `${Math.round(bounds.left * 100) / 100}px`,\n top: `${Math.round(bounds.top * 100) / 100}px`,\n width: `${Math.round(bounds.width * 100) / 100}px`,\n height: `${Math.round(bounds.height * 100) / 100}px`\n };\n}\nfunction create(options) {\n var _a25;\n const containerEl = document.createElement(\"div\");\n containerEl.id = (_a25 = options.elementId) != null ? _a25 : CONTAINER_ELEMENT_ID;\n Object.assign(containerEl.style, {\n ...containerStyles,\n ...getStyles(options.bounds),\n ...options.style\n });\n const cardEl = document.createElement(\"span\");\n cardEl.id = CARD_ELEMENT_ID;\n Object.assign(cardEl.style, {\n ...cardStyles,\n top: options.bounds.top < 35 ? 0 : \"-35px\"\n });\n const nameEl = document.createElement(\"span\");\n nameEl.id = COMPONENT_NAME_ELEMENT_ID;\n nameEl.innerHTML = `<${options.name}>  `;\n const indicatorEl = document.createElement(\"i\");\n indicatorEl.id = INDICATOR_ELEMENT_ID;\n indicatorEl.innerHTML = `${Math.round(options.bounds.width * 100) / 100} x ${Math.round(options.bounds.height * 100) / 100}`;\n Object.assign(indicatorEl.style, indicatorStyles);\n cardEl.appendChild(nameEl);\n cardEl.appendChild(indicatorEl);\n containerEl.appendChild(cardEl);\n document.body.appendChild(containerEl);\n return containerEl;\n}\nfunction update(options) {\n const containerEl = getContainerElement();\n const cardEl = getCardElement();\n const nameEl = getNameElement();\n const indicatorEl = getIndicatorElement();\n if (containerEl) {\n Object.assign(containerEl.style, {\n ...containerStyles,\n ...getStyles(options.bounds)\n });\n Object.assign(cardEl.style, {\n top: options.bounds.top < 35 ? 0 : \"-35px\"\n });\n nameEl.innerHTML = `<${options.name}>  `;\n indicatorEl.innerHTML = `${Math.round(options.bounds.width * 100) / 100} x ${Math.round(options.bounds.height * 100) / 100}`;\n }\n}\nfunction highlight(instance) {\n const bounds = getComponentBoundingRect(instance);\n if (!bounds.width && !bounds.height)\n return;\n const name = getInstanceName(instance);\n const container = getContainerElement();\n container ? update({ bounds, name }) : create({ bounds, name });\n}\nfunction unhighlight() {\n const el = getContainerElement();\n if (el)\n el.style.display = \"none\";\n}\nvar inspectInstance = null;\nfunction inspectFn(e) {\n const target22 = e.target;\n if (target22) {\n const instance = target22.__vueParentComponent;\n if (instance) {\n inspectInstance = instance;\n const el = instance.vnode.el;\n if (el) {\n const bounds = getComponentBoundingRect(instance);\n const name = getInstanceName(instance);\n const container = getContainerElement();\n container ? update({ bounds, name }) : create({ bounds, name });\n }\n }\n }\n}\nfunction selectComponentFn(e, cb) {\n e.preventDefault();\n e.stopPropagation();\n if (inspectInstance) {\n const uniqueComponentId = getUniqueComponentId(inspectInstance);\n cb(uniqueComponentId);\n }\n}\nvar inspectComponentHighLighterSelectFn = null;\nfunction cancelInspectComponentHighLighter() {\n unhighlight();\n window.removeEventListener(\"mouseover\", inspectFn);\n window.removeEventListener(\"click\", inspectComponentHighLighterSelectFn, true);\n inspectComponentHighLighterSelectFn = null;\n}\nfunction inspectComponentHighLighter() {\n window.addEventListener(\"mouseover\", inspectFn);\n return new Promise((resolve) => {\n function onSelect(e) {\n e.preventDefault();\n e.stopPropagation();\n selectComponentFn(e, (id) => {\n window.removeEventListener(\"click\", onSelect, true);\n inspectComponentHighLighterSelectFn = null;\n window.removeEventListener(\"mouseover\", inspectFn);\n const el = getContainerElement();\n if (el)\n el.style.display = \"none\";\n resolve(JSON.stringify({ id }));\n });\n }\n inspectComponentHighLighterSelectFn = onSelect;\n window.addEventListener(\"click\", onSelect, true);\n });\n}\nfunction scrollToComponent(options) {\n const instance = getComponentInstance(activeAppRecord.value, options.id);\n if (instance) {\n const [el] = getRootElementsFromComponentInstance(instance);\n if (typeof el.scrollIntoView === \"function\") {\n el.scrollIntoView({\n behavior: \"smooth\"\n });\n } else {\n const bounds = getComponentBoundingRect(instance);\n const scrollTarget = document.createElement(\"div\");\n const styles = {\n ...getStyles(bounds),\n position: \"absolute\"\n };\n Object.assign(scrollTarget.style, styles);\n document.body.appendChild(scrollTarget);\n scrollTarget.scrollIntoView({\n behavior: \"smooth\"\n });\n setTimeout(() => {\n document.body.removeChild(scrollTarget);\n }, 2e3);\n }\n setTimeout(() => {\n const bounds = getComponentBoundingRect(instance);\n if (bounds.width || bounds.height) {\n const name = getInstanceName(instance);\n const el2 = getContainerElement();\n el2 ? update({ ...options, name, bounds }) : create({ ...options, name, bounds });\n setTimeout(() => {\n if (el2)\n el2.style.display = \"none\";\n }, 1500);\n }\n }, 1200);\n }\n}\n\n// src/core/component-inspector/index.ts\ninit_esm_shims();\nimport { target as target2 } from \"@vue/devtools-shared\";\nvar _a, _b;\n(_b = (_a = target2).__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__) != null ? _b : _a.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__ = true;\nfunction toggleComponentInspectorEnabled(enabled) {\n target2.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__ = enabled;\n}\nfunction waitForInspectorInit(cb) {\n let total = 0;\n const timer = setInterval(() => {\n if (target2.__VUE_INSPECTOR__) {\n clearInterval(timer);\n total += 30;\n cb();\n }\n if (total >= /* 5s */\n 5e3)\n clearInterval(timer);\n }, 30);\n}\nfunction setupInspector() {\n const inspector = target2.__VUE_INSPECTOR__;\n const _openInEditor = inspector.openInEditor;\n inspector.openInEditor = async (...params) => {\n inspector.disable();\n _openInEditor(...params);\n };\n}\nfunction getComponentInspector() {\n return new Promise((resolve) => {\n function setup() {\n setupInspector();\n resolve(target2.__VUE_INSPECTOR__);\n }\n if (!target2.__VUE_INSPECTOR__) {\n waitForInspectorInit(() => {\n setup();\n });\n } else {\n setup();\n }\n });\n}\n\n// src/core/component/state/editor.ts\ninit_esm_shims();\n\n// src/shared/stub-vue.ts\ninit_esm_shims();\nfunction isReadonly(value) {\n return !!(value && value[\"__v_isReadonly\" /* IS_READONLY */]);\n}\nfunction isReactive(value) {\n if (isReadonly(value)) {\n return isReactive(value[\"__v_raw\" /* RAW */]);\n }\n return !!(value && value[\"__v_isReactive\" /* IS_REACTIVE */]);\n}\nfunction isRef(r) {\n return !!(r && r.__v_isRef === true);\n}\nfunction toRaw(observed) {\n const raw = observed && observed[\"__v_raw\" /* RAW */];\n return raw ? toRaw(raw) : observed;\n}\nvar Fragment = Symbol.for(\"v-fgt\");\n\n// src/core/component/state/editor.ts\nvar StateEditor = class {\n constructor() {\n this.refEditor = new RefStateEditor();\n }\n set(object, path, value, cb) {\n const sections = Array.isArray(path) ? path : path.split(\".\");\n const markRef = false;\n while (sections.length > 1) {\n const section = sections.shift();\n if (object instanceof Map)\n object = object.get(section);\n else if (object instanceof Set)\n object = Array.from(object.values())[section];\n else object = object[section];\n if (this.refEditor.isRef(object))\n object = this.refEditor.get(object);\n }\n const field = sections[0];\n const item = this.refEditor.get(object)[field];\n if (cb) {\n cb(object, field, value);\n } else {\n if (this.refEditor.isRef(item))\n this.refEditor.set(item, value);\n else if (markRef)\n object[field] = value;\n else\n object[field] = value;\n }\n }\n get(object, path) {\n const sections = Array.isArray(path) ? path : path.split(\".\");\n for (let i = 0; i < sections.length; i++) {\n if (object instanceof Map)\n object = object.get(sections[i]);\n else\n object = object[sections[i]];\n if (this.refEditor.isRef(object))\n object = this.refEditor.get(object);\n if (!object)\n return void 0;\n }\n return object;\n }\n has(object, path, parent = false) {\n if (typeof object === \"undefined\")\n return false;\n const sections = Array.isArray(path) ? path.slice() : path.split(\".\");\n const size = !parent ? 1 : 2;\n while (object && sections.length > size) {\n const section = sections.shift();\n object = object[section];\n if (this.refEditor.isRef(object))\n object = this.refEditor.get(object);\n }\n return object != null && Object.prototype.hasOwnProperty.call(object, sections[0]);\n }\n createDefaultSetCallback(state) {\n return (object, field, value) => {\n if (state.remove || state.newKey) {\n if (Array.isArray(object))\n object.splice(field, 1);\n else if (toRaw(object) instanceof Map)\n object.delete(field);\n else if (toRaw(object) instanceof Set)\n object.delete(Array.from(object.values())[field]);\n else Reflect.deleteProperty(object, field);\n }\n if (!state.remove) {\n const target22 = object[state.newKey || field];\n if (this.refEditor.isRef(target22))\n this.refEditor.set(target22, value);\n else if (toRaw(object) instanceof Map)\n object.set(state.newKey || field, value);\n else if (toRaw(object) instanceof Set)\n object.add(value);\n else\n object[state.newKey || field] = value;\n }\n };\n }\n};\nvar RefStateEditor = class {\n set(ref, value) {\n if (isRef(ref)) {\n ref.value = value;\n } else {\n if (ref instanceof Set && Array.isArray(value)) {\n ref.clear();\n value.forEach((v) => ref.add(v));\n return;\n }\n const currentKeys = Object.keys(value);\n if (ref instanceof Map) {\n const previousKeysSet2 = new Set(ref.keys());\n currentKeys.forEach((key) => {\n ref.set(key, Reflect.get(value, key));\n previousKeysSet2.delete(key);\n });\n previousKeysSet2.forEach((key) => ref.delete(key));\n return;\n }\n const previousKeysSet = new Set(Object.keys(ref));\n currentKeys.forEach((key) => {\n Reflect.set(ref, key, Reflect.get(value, key));\n previousKeysSet.delete(key);\n });\n previousKeysSet.forEach((key) => Reflect.deleteProperty(ref, key));\n }\n }\n get(ref) {\n return isRef(ref) ? ref.value : ref;\n }\n isRef(ref) {\n return isRef(ref) || isReactive(ref);\n }\n};\nasync function editComponentState(payload, stateEditor2) {\n const { path, nodeId, state, type } = payload;\n const instance = getComponentInstance(activeAppRecord.value, nodeId);\n if (!instance)\n return;\n const targetPath = path.slice();\n let target22;\n if (Object.keys(instance.props).includes(path[0])) {\n target22 = instance.props;\n } else if (instance.devtoolsRawSetupState && Object.keys(instance.devtoolsRawSetupState).includes(path[0])) {\n target22 = instance.devtoolsRawSetupState;\n } else if (instance.data && Object.keys(instance.data).includes(path[0])) {\n target22 = instance.data;\n } else {\n target22 = instance.proxy;\n }\n if (target22 && targetPath) {\n if (state.type === \"object\" && type === \"reactive\") {\n }\n stateEditor2.set(target22, targetPath, state.value, stateEditor2.createDefaultSetCallback(state));\n }\n}\nvar stateEditor = new StateEditor();\nasync function editState(payload) {\n editComponentState(payload, stateEditor);\n}\n\n// src/core/open-in-editor/index.ts\ninit_esm_shims();\nimport { target as target5 } from \"@vue/devtools-shared\";\n\n// src/ctx/state.ts\ninit_esm_shims();\nimport { target as global, isUrlString } from \"@vue/devtools-shared\";\nimport { debounce as debounce3 } from \"perfect-debounce\";\n\n// src/core/timeline/storage.ts\ninit_esm_shims();\nimport { isBrowser } from \"@vue/devtools-shared\";\nvar TIMELINE_LAYERS_STATE_STORAGE_ID = \"__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS_STATE__\";\nfunction addTimelineLayersStateToStorage(state) {\n if (!isBrowser || typeof localStorage === \"undefined\" || localStorage === null) {\n return;\n }\n localStorage.setItem(TIMELINE_LAYERS_STATE_STORAGE_ID, JSON.stringify(state));\n}\nfunction getTimelineLayersStateFromStorage() {\n if (!isBrowser || typeof localStorage === \"undefined\" || localStorage === null) {\n return {\n recordingState: false,\n mouseEventEnabled: false,\n keyboardEventEnabled: false,\n componentEventEnabled: false,\n performanceEventEnabled: false,\n selected: \"\"\n };\n }\n const state = localStorage.getItem(TIMELINE_LAYERS_STATE_STORAGE_ID);\n return state ? JSON.parse(state) : {\n recordingState: false,\n mouseEventEnabled: false,\n keyboardEventEnabled: false,\n componentEventEnabled: false,\n performanceEventEnabled: false,\n selected: \"\"\n };\n}\n\n// src/ctx/hook.ts\ninit_esm_shims();\nimport { createHooks } from \"hookable\";\nimport { debounce as debounce2 } from \"perfect-debounce\";\n\n// src/ctx/inspector.ts\ninit_esm_shims();\nimport { target as target4 } from \"@vue/devtools-shared\";\nimport { debounce } from \"perfect-debounce\";\n\n// src/ctx/timeline.ts\ninit_esm_shims();\nimport { target as target3 } from \"@vue/devtools-shared\";\nvar _a2, _b2;\n(_b2 = (_a2 = target3).__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS) != null ? _b2 : _a2.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS = [];\nvar devtoolsTimelineLayers = new Proxy(target3.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS, {\n get(target22, prop, receiver) {\n return Reflect.get(target22, prop, receiver);\n }\n});\nfunction addTimelineLayer(options, descriptor) {\n devtoolsState.timelineLayersState[descriptor.id] = false;\n devtoolsTimelineLayers.push({\n ...options,\n descriptorId: descriptor.id,\n appRecord: getAppRecord(descriptor.app)\n });\n}\nfunction updateTimelineLayersState(state) {\n const updatedState = {\n ...devtoolsState.timelineLayersState,\n ...state\n };\n addTimelineLayersStateToStorage(updatedState);\n updateDevToolsState({\n timelineLayersState: updatedState\n });\n}\n\n// src/ctx/inspector.ts\nvar _a3, _b3;\n(_b3 = (_a3 = target4).__VUE_DEVTOOLS_KIT_INSPECTOR__) != null ? _b3 : _a3.__VUE_DEVTOOLS_KIT_INSPECTOR__ = [];\nvar devtoolsInspector = new Proxy(target4.__VUE_DEVTOOLS_KIT_INSPECTOR__, {\n get(target22, prop, receiver) {\n return Reflect.get(target22, prop, receiver);\n }\n});\nvar callInspectorUpdatedHook = debounce(() => {\n devtoolsContext.hooks.callHook(\"sendInspectorToClient\" /* SEND_INSPECTOR_TO_CLIENT */, getActiveInspectors());\n});\nfunction addInspector(inspector, descriptor) {\n var _a25, _b25;\n devtoolsInspector.push({\n options: inspector,\n descriptor,\n treeFilterPlaceholder: (_a25 = inspector.treeFilterPlaceholder) != null ? _a25 : \"Search tree...\",\n stateFilterPlaceholder: (_b25 = inspector.stateFilterPlaceholder) != null ? _b25 : \"Search state...\",\n treeFilter: \"\",\n selectedNodeId: \"\",\n appRecord: getAppRecord(descriptor.app)\n });\n callInspectorUpdatedHook();\n}\nfunction getActiveInspectors() {\n return devtoolsInspector.filter((inspector) => inspector.descriptor.app === activeAppRecord.value.app).filter((inspector) => inspector.descriptor.id !== \"components\").map((inspector) => {\n var _a25;\n const descriptor = inspector.descriptor;\n const options = inspector.options;\n return {\n id: options.id,\n label: options.label,\n logo: descriptor.logo,\n icon: `custom-ic-baseline-${(_a25 = options == null ? void 0 : options.icon) == null ? void 0 : _a25.replace(/_/g, \"-\")}`,\n packageName: descriptor.packageName,\n homepage: descriptor.homepage,\n pluginId: descriptor.id\n };\n });\n}\nfunction getInspectorInfo(id) {\n const inspector = getInspector(id, activeAppRecord.value.app);\n if (!inspector)\n return;\n const descriptor = inspector.descriptor;\n const options = inspector.options;\n const timelineLayers = devtoolsTimelineLayers.filter((layer) => layer.descriptorId === descriptor.id).map((item) => ({\n id: item.id,\n label: item.label,\n color: item.color\n }));\n return {\n id: options.id,\n label: options.label,\n logo: descriptor.logo,\n packageName: descriptor.packageName,\n homepage: descriptor.homepage,\n timelineLayers,\n treeFilterPlaceholder: inspector.treeFilterPlaceholder,\n stateFilterPlaceholder: inspector.stateFilterPlaceholder\n };\n}\nfunction getInspector(id, app) {\n return devtoolsInspector.find((inspector) => inspector.options.id === id && (app ? inspector.descriptor.app === app : true));\n}\nfunction getInspectorActions(id) {\n const inspector = getInspector(id);\n return inspector == null ? void 0 : inspector.options.actions;\n}\nfunction getInspectorNodeActions(id) {\n const inspector = getInspector(id);\n return inspector == null ? void 0 : inspector.options.nodeActions;\n}\n\n// src/ctx/hook.ts\nvar DevToolsV6PluginAPIHookKeys = /* @__PURE__ */ ((DevToolsV6PluginAPIHookKeys2) => {\n DevToolsV6PluginAPIHookKeys2[\"VISIT_COMPONENT_TREE\"] = \"visitComponentTree\";\n DevToolsV6PluginAPIHookKeys2[\"INSPECT_COMPONENT\"] = \"inspectComponent\";\n DevToolsV6PluginAPIHookKeys2[\"EDIT_COMPONENT_STATE\"] = \"editComponentState\";\n DevToolsV6PluginAPIHookKeys2[\"GET_INSPECTOR_TREE\"] = \"getInspectorTree\";\n DevToolsV6PluginAPIHookKeys2[\"GET_INSPECTOR_STATE\"] = \"getInspectorState\";\n DevToolsV6PluginAPIHookKeys2[\"EDIT_INSPECTOR_STATE\"] = \"editInspectorState\";\n DevToolsV6PluginAPIHookKeys2[\"INSPECT_TIMELINE_EVENT\"] = \"inspectTimelineEvent\";\n DevToolsV6PluginAPIHookKeys2[\"TIMELINE_CLEARED\"] = \"timelineCleared\";\n DevToolsV6PluginAPIHookKeys2[\"SET_PLUGIN_SETTINGS\"] = \"setPluginSettings\";\n return DevToolsV6PluginAPIHookKeys2;\n})(DevToolsV6PluginAPIHookKeys || {});\nvar DevToolsContextHookKeys = /* @__PURE__ */ ((DevToolsContextHookKeys2) => {\n DevToolsContextHookKeys2[\"ADD_INSPECTOR\"] = \"addInspector\";\n DevToolsContextHookKeys2[\"SEND_INSPECTOR_TREE\"] = \"sendInspectorTree\";\n DevToolsContextHookKeys2[\"SEND_INSPECTOR_STATE\"] = \"sendInspectorState\";\n DevToolsContextHookKeys2[\"CUSTOM_INSPECTOR_SELECT_NODE\"] = \"customInspectorSelectNode\";\n DevToolsContextHookKeys2[\"TIMELINE_LAYER_ADDED\"] = \"timelineLayerAdded\";\n DevToolsContextHookKeys2[\"TIMELINE_EVENT_ADDED\"] = \"timelineEventAdded\";\n DevToolsContextHookKeys2[\"GET_COMPONENT_INSTANCES\"] = \"getComponentInstances\";\n DevToolsContextHookKeys2[\"GET_COMPONENT_BOUNDS\"] = \"getComponentBounds\";\n DevToolsContextHookKeys2[\"GET_COMPONENT_NAME\"] = \"getComponentName\";\n DevToolsContextHookKeys2[\"COMPONENT_HIGHLIGHT\"] = \"componentHighlight\";\n DevToolsContextHookKeys2[\"COMPONENT_UNHIGHLIGHT\"] = \"componentUnhighlight\";\n return DevToolsContextHookKeys2;\n})(DevToolsContextHookKeys || {});\nvar DevToolsMessagingHookKeys = /* @__PURE__ */ ((DevToolsMessagingHookKeys2) => {\n DevToolsMessagingHookKeys2[\"SEND_INSPECTOR_TREE_TO_CLIENT\"] = \"sendInspectorTreeToClient\";\n DevToolsMessagingHookKeys2[\"SEND_INSPECTOR_STATE_TO_CLIENT\"] = \"sendInspectorStateToClient\";\n DevToolsMessagingHookKeys2[\"SEND_TIMELINE_EVENT_TO_CLIENT\"] = \"sendTimelineEventToClient\";\n DevToolsMessagingHookKeys2[\"SEND_INSPECTOR_TO_CLIENT\"] = \"sendInspectorToClient\";\n DevToolsMessagingHookKeys2[\"SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT\"] = \"sendActiveAppUpdatedToClient\";\n DevToolsMessagingHookKeys2[\"DEVTOOLS_STATE_UPDATED\"] = \"devtoolsStateUpdated\";\n DevToolsMessagingHookKeys2[\"DEVTOOLS_CONNECTED_UPDATED\"] = \"devtoolsConnectedUpdated\";\n DevToolsMessagingHookKeys2[\"ROUTER_INFO_UPDATED\"] = \"routerInfoUpdated\";\n return DevToolsMessagingHookKeys2;\n})(DevToolsMessagingHookKeys || {});\nfunction createDevToolsCtxHooks() {\n const hooks2 = createHooks();\n hooks2.hook(\"addInspector\" /* ADD_INSPECTOR */, ({ inspector, plugin }) => {\n addInspector(inspector, plugin.descriptor);\n });\n const debounceSendInspectorTree = debounce2(async ({ inspectorId, plugin }) => {\n var _a25;\n if (!inspectorId || !((_a25 = plugin == null ? void 0 : plugin.descriptor) == null ? void 0 : _a25.app) || devtoolsState.highPerfModeEnabled)\n return;\n const inspector = getInspector(inspectorId, plugin.descriptor.app);\n const _payload = {\n app: plugin.descriptor.app,\n inspectorId,\n filter: (inspector == null ? void 0 : inspector.treeFilter) || \"\",\n rootNodes: []\n };\n await new Promise((resolve) => {\n hooks2.callHookWith(async (callbacks) => {\n await Promise.all(callbacks.map((cb) => cb(_payload)));\n resolve();\n }, \"getInspectorTree\" /* GET_INSPECTOR_TREE */);\n });\n hooks2.callHookWith(async (callbacks) => {\n await Promise.all(callbacks.map((cb) => cb({\n inspectorId,\n rootNodes: _payload.rootNodes\n })));\n }, \"sendInspectorTreeToClient\" /* SEND_INSPECTOR_TREE_TO_CLIENT */);\n }, 120);\n hooks2.hook(\"sendInspectorTree\" /* SEND_INSPECTOR_TREE */, debounceSendInspectorTree);\n const debounceSendInspectorState = debounce2(async ({ inspectorId, plugin }) => {\n var _a25;\n if (!inspectorId || !((_a25 = plugin == null ? void 0 : plugin.descriptor) == null ? void 0 : _a25.app) || devtoolsState.highPerfModeEnabled)\n return;\n const inspector = getInspector(inspectorId, plugin.descriptor.app);\n const _payload = {\n app: plugin.descriptor.app,\n inspectorId,\n nodeId: (inspector == null ? void 0 : inspector.selectedNodeId) || \"\",\n state: null\n };\n const ctx = {\n currentTab: `custom-inspector:${inspectorId}`\n };\n if (_payload.nodeId) {\n await new Promise((resolve) => {\n hooks2.callHookWith(async (callbacks) => {\n await Promise.all(callbacks.map((cb) => cb(_payload, ctx)));\n resolve();\n }, \"getInspectorState\" /* GET_INSPECTOR_STATE */);\n });\n }\n hooks2.callHookWith(async (callbacks) => {\n await Promise.all(callbacks.map((cb) => cb({\n inspectorId,\n nodeId: _payload.nodeId,\n state: _payload.state\n })));\n }, \"sendInspectorStateToClient\" /* SEND_INSPECTOR_STATE_TO_CLIENT */);\n }, 120);\n hooks2.hook(\"sendInspectorState\" /* SEND_INSPECTOR_STATE */, debounceSendInspectorState);\n hooks2.hook(\"customInspectorSelectNode\" /* CUSTOM_INSPECTOR_SELECT_NODE */, ({ inspectorId, nodeId, plugin }) => {\n const inspector = getInspector(inspectorId, plugin.descriptor.app);\n if (!inspector)\n return;\n inspector.selectedNodeId = nodeId;\n });\n hooks2.hook(\"timelineLayerAdded\" /* TIMELINE_LAYER_ADDED */, ({ options, plugin }) => {\n addTimelineLayer(options, plugin.descriptor);\n });\n hooks2.hook(\"timelineEventAdded\" /* TIMELINE_EVENT_ADDED */, ({ options, plugin }) => {\n var _a25;\n const internalLayerIds = [\"performance\", \"component-event\", \"keyboard\", \"mouse\"];\n if (devtoolsState.highPerfModeEnabled || !((_a25 = devtoolsState.timelineLayersState) == null ? void 0 : _a25[plugin.descriptor.id]) && !internalLayerIds.includes(options.layerId))\n return;\n hooks2.callHookWith(async (callbacks) => {\n await Promise.all(callbacks.map((cb) => cb(options)));\n }, \"sendTimelineEventToClient\" /* SEND_TIMELINE_EVENT_TO_CLIENT */);\n });\n hooks2.hook(\"getComponentInstances\" /* GET_COMPONENT_INSTANCES */, async ({ app }) => {\n const appRecord = app.__VUE_DEVTOOLS_NEXT_APP_RECORD__;\n if (!appRecord)\n return null;\n const appId = appRecord.id.toString();\n const instances = [...appRecord.instanceMap].filter(([key]) => key.split(\":\")[0] === appId).map(([, instance]) => instance);\n return instances;\n });\n hooks2.hook(\"getComponentBounds\" /* GET_COMPONENT_BOUNDS */, async ({ instance }) => {\n const bounds = getComponentBoundingRect(instance);\n return bounds;\n });\n hooks2.hook(\"getComponentName\" /* GET_COMPONENT_NAME */, ({ instance }) => {\n const name = getInstanceName(instance);\n return name;\n });\n hooks2.hook(\"componentHighlight\" /* COMPONENT_HIGHLIGHT */, ({ uid }) => {\n const instance = activeAppRecord.value.instanceMap.get(uid);\n if (instance) {\n highlight(instance);\n }\n });\n hooks2.hook(\"componentUnhighlight\" /* COMPONENT_UNHIGHLIGHT */, () => {\n unhighlight();\n });\n return hooks2;\n}\n\n// src/ctx/state.ts\nvar _a4, _b4;\n(_b4 = (_a4 = global).__VUE_DEVTOOLS_KIT_APP_RECORDS__) != null ? _b4 : _a4.__VUE_DEVTOOLS_KIT_APP_RECORDS__ = [];\nvar _a5, _b5;\n(_b5 = (_a5 = global).__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__) != null ? _b5 : _a5.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__ = {};\nvar _a6, _b6;\n(_b6 = (_a6 = global).__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__) != null ? _b6 : _a6.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__ = \"\";\nvar _a7, _b7;\n(_b7 = (_a7 = global).__VUE_DEVTOOLS_KIT_CUSTOM_TABS__) != null ? _b7 : _a7.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__ = [];\nvar _a8, _b8;\n(_b8 = (_a8 = global).__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__) != null ? _b8 : _a8.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__ = [];\nvar STATE_KEY = \"__VUE_DEVTOOLS_KIT_GLOBAL_STATE__\";\nfunction initStateFactory() {\n return {\n connected: false,\n clientConnected: false,\n vitePluginDetected: true,\n appRecords: [],\n activeAppRecordId: \"\",\n tabs: [],\n commands: [],\n highPerfModeEnabled: true,\n devtoolsClientDetected: {},\n perfUniqueGroupId: 0,\n timelineLayersState: getTimelineLayersStateFromStorage()\n };\n}\nvar _a9, _b9;\n(_b9 = (_a9 = global)[STATE_KEY]) != null ? _b9 : _a9[STATE_KEY] = initStateFactory();\nvar callStateUpdatedHook = debounce3((state) => {\n devtoolsContext.hooks.callHook(\"devtoolsStateUpdated\" /* DEVTOOLS_STATE_UPDATED */, { state });\n});\nvar callConnectedUpdatedHook = debounce3((state, oldState) => {\n devtoolsContext.hooks.callHook(\"devtoolsConnectedUpdated\" /* DEVTOOLS_CONNECTED_UPDATED */, { state, oldState });\n});\nvar devtoolsAppRecords = new Proxy(global.__VUE_DEVTOOLS_KIT_APP_RECORDS__, {\n get(_target, prop, receiver) {\n if (prop === \"value\")\n return global.__VUE_DEVTOOLS_KIT_APP_RECORDS__;\n return global.__VUE_DEVTOOLS_KIT_APP_RECORDS__[prop];\n }\n});\nvar addDevToolsAppRecord = (app) => {\n global.__VUE_DEVTOOLS_KIT_APP_RECORDS__ = [\n ...global.__VUE_DEVTOOLS_KIT_APP_RECORDS__,\n app\n ];\n};\nvar removeDevToolsAppRecord = (app) => {\n global.__VUE_DEVTOOLS_KIT_APP_RECORDS__ = devtoolsAppRecords.value.filter((record) => record.app !== app);\n};\nvar activeAppRecord = new Proxy(global.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__, {\n get(_target, prop, receiver) {\n if (prop === \"value\")\n return global.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__;\n else if (prop === \"id\")\n return global.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__;\n return global.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__[prop];\n }\n});\nfunction updateAllStates() {\n callStateUpdatedHook({\n ...global[STATE_KEY],\n appRecords: devtoolsAppRecords.value,\n activeAppRecordId: activeAppRecord.id,\n tabs: global.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__,\n commands: global.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__\n });\n}\nfunction setActiveAppRecord(app) {\n global.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__ = app;\n updateAllStates();\n}\nfunction setActiveAppRecordId(id) {\n global.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__ = id;\n updateAllStates();\n}\nvar devtoolsState = new Proxy(global[STATE_KEY], {\n get(target22, property) {\n if (property === \"appRecords\") {\n return devtoolsAppRecords;\n } else if (property === \"activeAppRecordId\") {\n return activeAppRecord.id;\n } else if (property === \"tabs\") {\n return global.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__;\n } else if (property === \"commands\") {\n return global.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__;\n }\n return global[STATE_KEY][property];\n },\n deleteProperty(target22, property) {\n delete target22[property];\n return true;\n },\n set(target22, property, value) {\n const oldState = { ...global[STATE_KEY] };\n target22[property] = value;\n global[STATE_KEY][property] = value;\n return true;\n }\n});\nfunction resetDevToolsState() {\n Object.assign(global[STATE_KEY], initStateFactory());\n}\nfunction updateDevToolsState(state) {\n const oldState = {\n ...global[STATE_KEY],\n appRecords: devtoolsAppRecords.value,\n activeAppRecordId: activeAppRecord.id\n };\n if (oldState.connected !== state.connected && state.connected || oldState.clientConnected !== state.clientConnected && state.clientConnected) {\n callConnectedUpdatedHook(global[STATE_KEY], oldState);\n }\n Object.assign(global[STATE_KEY], state);\n updateAllStates();\n}\nfunction onDevToolsConnected(fn) {\n return new Promise((resolve) => {\n if (devtoolsState.connected) {\n fn();\n resolve();\n }\n devtoolsContext.hooks.hook(\"devtoolsConnectedUpdated\" /* DEVTOOLS_CONNECTED_UPDATED */, ({ state }) => {\n if (state.connected) {\n fn();\n resolve();\n }\n });\n });\n}\nvar resolveIcon = (icon) => {\n if (!icon)\n return;\n if (icon.startsWith(\"baseline-\")) {\n return `custom-ic-${icon}`;\n }\n if (icon.startsWith(\"i-\") || isUrlString(icon))\n return icon;\n return `custom-ic-baseline-${icon}`;\n};\nfunction addCustomTab(tab) {\n const tabs = global.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__;\n if (tabs.some((t) => t.name === tab.name))\n return;\n tabs.push({\n ...tab,\n icon: resolveIcon(tab.icon)\n });\n updateAllStates();\n}\nfunction addCustomCommand(action) {\n const commands = global.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__;\n if (commands.some((t) => t.id === action.id))\n return;\n commands.push({\n ...action,\n icon: resolveIcon(action.icon),\n children: action.children ? action.children.map((child) => ({\n ...child,\n icon: resolveIcon(child.icon)\n })) : void 0\n });\n updateAllStates();\n}\nfunction removeCustomCommand(actionId) {\n const commands = global.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__;\n const index = commands.findIndex((t) => t.id === actionId);\n if (index === -1)\n return;\n commands.splice(index, 1);\n updateAllStates();\n}\nfunction toggleClientConnected(state) {\n updateDevToolsState({ clientConnected: state });\n}\n\n// src/core/open-in-editor/index.ts\nfunction setOpenInEditorBaseUrl(url) {\n target5.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__ = url;\n}\nfunction openInEditor(options = {}) {\n var _a25, _b25, _c;\n const { file, host, baseUrl = window.location.origin, line = 0, column = 0 } = options;\n if (file) {\n if (host === \"chrome-extension\") {\n const fileName = file.replace(/\\\\/g, \"\\\\\\\\\");\n const _baseUrl = (_b25 = (_a25 = window.VUE_DEVTOOLS_CONFIG) == null ? void 0 : _a25.openInEditorHost) != null ? _b25 : \"/\";\n fetch(`${_baseUrl}__open-in-editor?file=${encodeURI(file)}`).then((response) => {\n if (!response.ok) {\n const msg = `Opening component ${fileName} failed`;\n console.log(`%c${msg}`, \"color:red\");\n }\n });\n } else if (devtoolsState.vitePluginDetected) {\n const _baseUrl = (_c = target5.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__) != null ? _c : baseUrl;\n target5.__VUE_INSPECTOR__.openInEditor(_baseUrl, file, line, column);\n }\n }\n}\n\n// src/core/plugin/index.ts\ninit_esm_shims();\nimport { target as target8 } from \"@vue/devtools-shared\";\n\n// src/api/index.ts\ninit_esm_shims();\n\n// src/api/v6/index.ts\ninit_esm_shims();\n\n// src/core/plugin/plugin-settings.ts\ninit_esm_shims();\n\n// src/ctx/plugin.ts\ninit_esm_shims();\nimport { target as target6 } from \"@vue/devtools-shared\";\nvar _a10, _b10;\n(_b10 = (_a10 = target6).__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__) != null ? _b10 : _a10.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__ = [];\nvar devtoolsPluginBuffer = new Proxy(target6.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__, {\n get(target22, prop, receiver) {\n return Reflect.get(target22, prop, receiver);\n }\n});\nfunction addDevToolsPluginToBuffer(pluginDescriptor, setupFn) {\n devtoolsPluginBuffer.push([pluginDescriptor, setupFn]);\n}\n\n// src/core/plugin/plugin-settings.ts\nfunction _getSettings(settings) {\n const _settings = {};\n Object.keys(settings).forEach((key) => {\n _settings[key] = settings[key].defaultValue;\n });\n return _settings;\n}\nfunction getPluginLocalKey(pluginId) {\n return `__VUE_DEVTOOLS_NEXT_PLUGIN_SETTINGS__${pluginId}__`;\n}\nfunction getPluginSettingsOptions(pluginId) {\n var _a25, _b25, _c;\n const item = (_b25 = (_a25 = devtoolsPluginBuffer.find((item2) => {\n var _a26;\n return item2[0].id === pluginId && !!((_a26 = item2[0]) == null ? void 0 : _a26.settings);\n })) == null ? void 0 : _a25[0]) != null ? _b25 : null;\n return (_c = item == null ? void 0 : item.settings) != null ? _c : null;\n}\nfunction getPluginSettings(pluginId, fallbackValue) {\n var _a25, _b25, _c;\n const localKey = getPluginLocalKey(pluginId);\n if (localKey) {\n const localSettings = localStorage.getItem(localKey);\n if (localSettings) {\n return JSON.parse(localSettings);\n }\n }\n if (pluginId) {\n const item = (_b25 = (_a25 = devtoolsPluginBuffer.find((item2) => item2[0].id === pluginId)) == null ? void 0 : _a25[0]) != null ? _b25 : null;\n return _getSettings((_c = item == null ? void 0 : item.settings) != null ? _c : {});\n }\n return _getSettings(fallbackValue);\n}\nfunction initPluginSettings(pluginId, settings) {\n const localKey = getPluginLocalKey(pluginId);\n const localSettings = localStorage.getItem(localKey);\n if (!localSettings) {\n localStorage.setItem(localKey, JSON.stringify(_getSettings(settings)));\n }\n}\nfunction setPluginSettings(pluginId, key, value) {\n const localKey = getPluginLocalKey(pluginId);\n const localSettings = localStorage.getItem(localKey);\n const parsedLocalSettings = JSON.parse(localSettings || \"{}\");\n const updated = {\n ...parsedLocalSettings,\n [key]: value\n };\n localStorage.setItem(localKey, JSON.stringify(updated));\n devtoolsContext.hooks.callHookWith((callbacks) => {\n callbacks.forEach((cb) => cb({\n pluginId,\n key,\n oldValue: parsedLocalSettings[key],\n newValue: value,\n settings: updated\n }));\n }, \"setPluginSettings\" /* SET_PLUGIN_SETTINGS */);\n}\n\n// src/hook/index.ts\ninit_esm_shims();\nimport { target as target7 } from \"@vue/devtools-shared\";\nimport { createHooks as createHooks2 } from \"hookable\";\n\n// src/types/index.ts\ninit_esm_shims();\n\n// src/types/app.ts\ninit_esm_shims();\n\n// src/types/command.ts\ninit_esm_shims();\n\n// src/types/component.ts\ninit_esm_shims();\n\n// src/types/hook.ts\ninit_esm_shims();\n\n// src/types/inspector.ts\ninit_esm_shims();\n\n// src/types/plugin.ts\ninit_esm_shims();\n\n// src/types/router.ts\ninit_esm_shims();\n\n// src/types/tab.ts\ninit_esm_shims();\n\n// src/types/timeline.ts\ninit_esm_shims();\n\n// src/hook/index.ts\nvar _a11, _b11;\nvar devtoolsHooks = (_b11 = (_a11 = target7).__VUE_DEVTOOLS_HOOK) != null ? _b11 : _a11.__VUE_DEVTOOLS_HOOK = createHooks2();\nvar on = {\n vueAppInit(fn) {\n devtoolsHooks.hook(\"app:init\" /* APP_INIT */, fn);\n },\n vueAppUnmount(fn) {\n devtoolsHooks.hook(\"app:unmount\" /* APP_UNMOUNT */, fn);\n },\n vueAppConnected(fn) {\n devtoolsHooks.hook(\"app:connected\" /* APP_CONNECTED */, fn);\n },\n componentAdded(fn) {\n return devtoolsHooks.hook(\"component:added\" /* COMPONENT_ADDED */, fn);\n },\n componentEmit(fn) {\n return devtoolsHooks.hook(\"component:emit\" /* COMPONENT_EMIT */, fn);\n },\n componentUpdated(fn) {\n return devtoolsHooks.hook(\"component:updated\" /* COMPONENT_UPDATED */, fn);\n },\n componentRemoved(fn) {\n return devtoolsHooks.hook(\"component:removed\" /* COMPONENT_REMOVED */, fn);\n },\n setupDevtoolsPlugin(fn) {\n devtoolsHooks.hook(\"devtools-plugin:setup\" /* SETUP_DEVTOOLS_PLUGIN */, fn);\n },\n perfStart(fn) {\n return devtoolsHooks.hook(\"perf:start\" /* PERFORMANCE_START */, fn);\n },\n perfEnd(fn) {\n return devtoolsHooks.hook(\"perf:end\" /* PERFORMANCE_END */, fn);\n }\n};\nfunction createDevToolsHook() {\n return {\n id: \"vue-devtools-next\",\n devtoolsVersion: \"7.0\",\n enabled: false,\n appRecords: [],\n apps: [],\n events: /* @__PURE__ */ new Map(),\n on(event, fn) {\n var _a25;\n if (!this.events.has(event))\n this.events.set(event, []);\n (_a25 = this.events.get(event)) == null ? void 0 : _a25.push(fn);\n return () => this.off(event, fn);\n },\n once(event, fn) {\n const onceFn = (...args) => {\n this.off(event, onceFn);\n fn(...args);\n };\n this.on(event, onceFn);\n return [event, onceFn];\n },\n off(event, fn) {\n if (this.events.has(event)) {\n const eventCallbacks = this.events.get(event);\n const index = eventCallbacks.indexOf(fn);\n if (index !== -1)\n eventCallbacks.splice(index, 1);\n }\n },\n emit(event, ...payload) {\n if (this.events.has(event))\n this.events.get(event).forEach((fn) => fn(...payload));\n }\n };\n}\nfunction subscribeDevToolsHook(hook2) {\n hook2.on(\"app:init\" /* APP_INIT */, (app, version, types) => {\n var _a25, _b25, _c;\n if ((_c = (_b25 = (_a25 = app == null ? void 0 : app._instance) == null ? void 0 : _a25.type) == null ? void 0 : _b25.devtools) == null ? void 0 : _c.hide)\n return;\n devtoolsHooks.callHook(\"app:init\" /* APP_INIT */, app, version, types);\n });\n hook2.on(\"app:unmount\" /* APP_UNMOUNT */, (app) => {\n devtoolsHooks.callHook(\"app:unmount\" /* APP_UNMOUNT */, app);\n });\n hook2.on(\"component:added\" /* COMPONENT_ADDED */, async (app, uid, parentUid, component) => {\n var _a25, _b25, _c;\n if (((_c = (_b25 = (_a25 = app == null ? void 0 : app._instance) == null ? void 0 : _a25.type) == null ? void 0 : _b25.devtools) == null ? void 0 : _c.hide) || devtoolsState.highPerfModeEnabled)\n return;\n if (!app || typeof uid !== \"number\" && !uid || !component)\n return;\n devtoolsHooks.callHook(\"component:added\" /* COMPONENT_ADDED */, app, uid, parentUid, component);\n });\n hook2.on(\"component:updated\" /* COMPONENT_UPDATED */, (app, uid, parentUid, component) => {\n if (!app || typeof uid !== \"number\" && !uid || !component || devtoolsState.highPerfModeEnabled)\n return;\n devtoolsHooks.callHook(\"component:updated\" /* COMPONENT_UPDATED */, app, uid, parentUid, component);\n });\n hook2.on(\"component:removed\" /* COMPONENT_REMOVED */, async (app, uid, parentUid, component) => {\n if (!app || typeof uid !== \"number\" && !uid || !component || devtoolsState.highPerfModeEnabled)\n return;\n devtoolsHooks.callHook(\"component:removed\" /* COMPONENT_REMOVED */, app, uid, parentUid, component);\n });\n hook2.on(\"component:emit\" /* COMPONENT_EMIT */, async (app, instance, event, params) => {\n if (!app || !instance || devtoolsState.highPerfModeEnabled)\n return;\n devtoolsHooks.callHook(\"component:emit\" /* COMPONENT_EMIT */, app, instance, event, params);\n });\n hook2.on(\"perf:start\" /* PERFORMANCE_START */, (app, uid, vm, type, time) => {\n if (!app || devtoolsState.highPerfModeEnabled)\n return;\n devtoolsHooks.callHook(\"perf:start\" /* PERFORMANCE_START */, app, uid, vm, type, time);\n });\n hook2.on(\"perf:end\" /* PERFORMANCE_END */, (app, uid, vm, type, time) => {\n if (!app || devtoolsState.highPerfModeEnabled)\n return;\n devtoolsHooks.callHook(\"perf:end\" /* PERFORMANCE_END */, app, uid, vm, type, time);\n });\n hook2.on(\"devtools-plugin:setup\" /* SETUP_DEVTOOLS_PLUGIN */, (pluginDescriptor, setupFn, options) => {\n if ((options == null ? void 0 : options.target) === \"legacy\")\n return;\n devtoolsHooks.callHook(\"devtools-plugin:setup\" /* SETUP_DEVTOOLS_PLUGIN */, pluginDescriptor, setupFn);\n });\n}\nvar hook = {\n on,\n setupDevToolsPlugin(pluginDescriptor, setupFn) {\n return devtoolsHooks.callHook(\"devtools-plugin:setup\" /* SETUP_DEVTOOLS_PLUGIN */, pluginDescriptor, setupFn);\n }\n};\n\n// src/api/v6/index.ts\nvar DevToolsV6PluginAPI = class {\n constructor({ plugin, ctx }) {\n this.hooks = ctx.hooks;\n this.plugin = plugin;\n }\n get on() {\n return {\n // component inspector\n visitComponentTree: (handler) => {\n this.hooks.hook(\"visitComponentTree\" /* VISIT_COMPONENT_TREE */, handler);\n },\n inspectComponent: (handler) => {\n this.hooks.hook(\"inspectComponent\" /* INSPECT_COMPONENT */, handler);\n },\n editComponentState: (handler) => {\n this.hooks.hook(\"editComponentState\" /* EDIT_COMPONENT_STATE */, handler);\n },\n // custom inspector\n getInspectorTree: (handler) => {\n this.hooks.hook(\"getInspectorTree\" /* GET_INSPECTOR_TREE */, handler);\n },\n getInspectorState: (handler) => {\n this.hooks.hook(\"getInspectorState\" /* GET_INSPECTOR_STATE */, handler);\n },\n editInspectorState: (handler) => {\n this.hooks.hook(\"editInspectorState\" /* EDIT_INSPECTOR_STATE */, handler);\n },\n // timeline\n inspectTimelineEvent: (handler) => {\n this.hooks.hook(\"inspectTimelineEvent\" /* INSPECT_TIMELINE_EVENT */, handler);\n },\n timelineCleared: (handler) => {\n this.hooks.hook(\"timelineCleared\" /* TIMELINE_CLEARED */, handler);\n },\n // settings\n setPluginSettings: (handler) => {\n this.hooks.hook(\"setPluginSettings\" /* SET_PLUGIN_SETTINGS */, handler);\n }\n };\n }\n // component inspector\n notifyComponentUpdate(instance) {\n var _a25;\n if (devtoolsState.highPerfModeEnabled) {\n return;\n }\n const inspector = getActiveInspectors().find((i) => i.packageName === this.plugin.descriptor.packageName);\n if (inspector == null ? void 0 : inspector.id) {\n if (instance) {\n const args = [\n instance.appContext.app,\n instance.uid,\n (_a25 = instance.parent) == null ? void 0 : _a25.uid,\n instance\n ];\n devtoolsHooks.callHook(\"component:updated\" /* COMPONENT_UPDATED */, ...args);\n } else {\n devtoolsHooks.callHook(\"component:updated\" /* COMPONENT_UPDATED */);\n }\n this.hooks.callHook(\"sendInspectorState\" /* SEND_INSPECTOR_STATE */, { inspectorId: inspector.id, plugin: this.plugin });\n }\n }\n // custom inspector\n addInspector(options) {\n this.hooks.callHook(\"addInspector\" /* ADD_INSPECTOR */, { inspector: options, plugin: this.plugin });\n if (this.plugin.descriptor.settings) {\n initPluginSettings(options.id, this.plugin.descriptor.settings);\n }\n }\n sendInspectorTree(inspectorId) {\n if (devtoolsState.highPerfModeEnabled) {\n return;\n }\n this.hooks.callHook(\"sendInspectorTree\" /* SEND_INSPECTOR_TREE */, { inspectorId, plugin: this.plugin });\n }\n sendInspectorState(inspectorId) {\n if (devtoolsState.highPerfModeEnabled) {\n return;\n }\n this.hooks.callHook(\"sendInspectorState\" /* SEND_INSPECTOR_STATE */, { inspectorId, plugin: this.plugin });\n }\n selectInspectorNode(inspectorId, nodeId) {\n this.hooks.callHook(\"customInspectorSelectNode\" /* CUSTOM_INSPECTOR_SELECT_NODE */, { inspectorId, nodeId, plugin: this.plugin });\n }\n visitComponentTree(payload) {\n return this.hooks.callHook(\"visitComponentTree\" /* VISIT_COMPONENT_TREE */, payload);\n }\n // timeline\n now() {\n if (devtoolsState.highPerfModeEnabled) {\n return 0;\n }\n return Date.now();\n }\n addTimelineLayer(options) {\n this.hooks.callHook(\"timelineLayerAdded\" /* TIMELINE_LAYER_ADDED */, { options, plugin: this.plugin });\n }\n addTimelineEvent(options) {\n if (devtoolsState.highPerfModeEnabled) {\n return;\n }\n this.hooks.callHook(\"timelineEventAdded\" /* TIMELINE_EVENT_ADDED */, { options, plugin: this.plugin });\n }\n // settings\n getSettings(pluginId) {\n return getPluginSettings(pluginId != null ? pluginId : this.plugin.descriptor.id, this.plugin.descriptor.settings);\n }\n // utilities\n getComponentInstances(app) {\n return this.hooks.callHook(\"getComponentInstances\" /* GET_COMPONENT_INSTANCES */, { app });\n }\n getComponentBounds(instance) {\n return this.hooks.callHook(\"getComponentBounds\" /* GET_COMPONENT_BOUNDS */, { instance });\n }\n getComponentName(instance) {\n return this.hooks.callHook(\"getComponentName\" /* GET_COMPONENT_NAME */, { instance });\n }\n highlightElement(instance) {\n const uid = instance.__VUE_DEVTOOLS_NEXT_UID__;\n return this.hooks.callHook(\"componentHighlight\" /* COMPONENT_HIGHLIGHT */, { uid });\n }\n unhighlightElement() {\n return this.hooks.callHook(\"componentUnhighlight\" /* COMPONENT_UNHIGHLIGHT */);\n }\n};\n\n// src/api/index.ts\nvar DevToolsPluginAPI = DevToolsV6PluginAPI;\n\n// src/core/plugin/components.ts\ninit_esm_shims();\nimport { debounce as debounce4 } from \"perfect-debounce\";\n\n// src/core/component/state/index.ts\ninit_esm_shims();\n\n// src/core/component/state/process.ts\ninit_esm_shims();\nimport { camelize } from \"@vue/devtools-shared\";\n\n// src/core/component/state/constants.ts\ninit_esm_shims();\nvar vueBuiltins = /* @__PURE__ */ new Set([\n \"nextTick\",\n \"defineComponent\",\n \"defineAsyncComponent\",\n \"defineCustomElement\",\n \"ref\",\n \"computed\",\n \"reactive\",\n \"readonly\",\n \"watchEffect\",\n \"watchPostEffect\",\n \"watchSyncEffect\",\n \"watch\",\n \"isRef\",\n \"unref\",\n \"toRef\",\n \"toRefs\",\n \"isProxy\",\n \"isReactive\",\n \"isReadonly\",\n \"shallowRef\",\n \"triggerRef\",\n \"customRef\",\n \"shallowReactive\",\n \"shallowReadonly\",\n \"toRaw\",\n \"markRaw\",\n \"effectScope\",\n \"getCurrentScope\",\n \"onScopeDispose\",\n \"onMounted\",\n \"onUpdated\",\n \"onUnmounted\",\n \"onBeforeMount\",\n \"onBeforeUpdate\",\n \"onBeforeUnmount\",\n \"onErrorCaptured\",\n \"onRenderTracked\",\n \"onRenderTriggered\",\n \"onActivated\",\n \"onDeactivated\",\n \"onServerPrefetch\",\n \"provide\",\n \"inject\",\n \"h\",\n \"mergeProps\",\n \"cloneVNode\",\n \"isVNode\",\n \"resolveComponent\",\n \"resolveDirective\",\n \"withDirectives\",\n \"withModifiers\"\n]);\nvar symbolRE = /^\\[native Symbol Symbol\\((.*)\\)\\]$/;\nvar rawTypeRE = /^\\[object (\\w+)\\]$/;\nvar specialTypeRE = /^\\[native (\\w+) (.*?)(<>(([\\s\\S])*))?\\]$/;\nvar fnTypeRE = /^(?:function|class) (\\w+)/;\nvar MAX_STRING_SIZE = 1e4;\nvar MAX_ARRAY_SIZE = 5e3;\nvar UNDEFINED = \"__vue_devtool_undefined__\";\nvar INFINITY = \"__vue_devtool_infinity__\";\nvar NEGATIVE_INFINITY = \"__vue_devtool_negative_infinity__\";\nvar NAN = \"__vue_devtool_nan__\";\nvar ESC = {\n \"<\": \"<\",\n \">\": \">\",\n '\"': \""\",\n \"&\": \"&\"\n};\n\n// src/core/component/state/util.ts\ninit_esm_shims();\n\n// src/core/component/state/is.ts\ninit_esm_shims();\nfunction isVueInstance(value) {\n if (!ensurePropertyExists(value, \"_\")) {\n return false;\n }\n if (!isPlainObject(value._)) {\n return false;\n }\n return Object.keys(value._).includes(\"vnode\");\n}\nfunction isPlainObject(obj) {\n return Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isPrimitive(data) {\n if (data == null)\n return true;\n const type = typeof data;\n return type === \"string\" || type === \"number\" || type === \"boolean\";\n}\nfunction isRef2(raw) {\n return !!raw.__v_isRef;\n}\nfunction isComputed(raw) {\n return isRef2(raw) && !!raw.effect;\n}\nfunction isReactive2(raw) {\n return !!raw.__v_isReactive;\n}\nfunction isReadOnly(raw) {\n return !!raw.__v_isReadonly;\n}\n\n// src/core/component/state/util.ts\nvar tokenMap = {\n [UNDEFINED]: \"undefined\",\n [NAN]: \"NaN\",\n [INFINITY]: \"Infinity\",\n [NEGATIVE_INFINITY]: \"-Infinity\"\n};\nvar reversedTokenMap = Object.entries(tokenMap).reduce((acc, [key, value]) => {\n acc[value] = key;\n return acc;\n}, {});\nfunction internalStateTokenToString(value) {\n if (value === null)\n return \"null\";\n return typeof value === \"string\" && tokenMap[value] || false;\n}\nfunction replaceTokenToString(value) {\n const replaceRegex = new RegExp(`\"(${Object.keys(tokenMap).join(\"|\")})\"`, \"g\");\n return value.replace(replaceRegex, (_, g1) => tokenMap[g1]);\n}\nfunction replaceStringToToken(value) {\n const literalValue = reversedTokenMap[value.trim()];\n if (literalValue)\n return `\"${literalValue}\"`;\n const replaceRegex = new RegExp(`:\\\\s*(${Object.keys(reversedTokenMap).join(\"|\")})`, \"g\");\n return value.replace(replaceRegex, (_, g1) => `:\"${reversedTokenMap[g1]}\"`);\n}\nfunction getPropType(type) {\n if (Array.isArray(type))\n return type.map((t) => getPropType(t)).join(\" or \");\n if (type == null)\n return \"null\";\n const match = type.toString().match(fnTypeRE);\n return typeof type === \"function\" ? match && match[1] || \"any\" : \"any\";\n}\nfunction sanitize(data) {\n if (!isPrimitive(data) && !Array.isArray(data) && !isPlainObject(data)) {\n return Object.prototype.toString.call(data);\n } else {\n return data;\n }\n}\nfunction getSetupStateType(raw) {\n try {\n return {\n ref: isRef2(raw),\n computed: isComputed(raw),\n reactive: isReactive2(raw),\n readonly: isReadOnly(raw)\n };\n } catch (e) {\n return {\n ref: false,\n computed: false,\n reactive: false,\n readonly: false\n };\n }\n}\nfunction toRaw2(value) {\n if (value == null ? void 0 : value.__v_raw)\n return value.__v_raw;\n return value;\n}\nfunction escape(s) {\n return s.replace(/[<>\"&]/g, (s2) => {\n return ESC[s2] || s2;\n });\n}\n\n// src/core/component/state/process.ts\nfunction mergeOptions(to, from, instance) {\n if (typeof from === \"function\")\n from = from.options;\n if (!from)\n return to;\n const { mixins, extends: extendsOptions } = from;\n extendsOptions && mergeOptions(to, extendsOptions, instance);\n mixins && mixins.forEach(\n (m) => mergeOptions(to, m, instance)\n );\n for (const key of [\"computed\", \"inject\"]) {\n if (Object.prototype.hasOwnProperty.call(from, key)) {\n if (!to[key])\n to[key] = from[key];\n else\n Object.assign(to[key], from[key]);\n }\n }\n return to;\n}\nfunction resolveMergedOptions(instance) {\n const raw = instance == null ? void 0 : instance.type;\n if (!raw)\n return {};\n const { mixins, extends: extendsOptions } = raw;\n const globalMixins = instance.appContext.mixins;\n if (!globalMixins.length && !mixins && !extendsOptions)\n return raw;\n const options = {};\n globalMixins.forEach((m) => mergeOptions(options, m, instance));\n mergeOptions(options, raw, instance);\n return options;\n}\nfunction processProps(instance) {\n var _a25;\n const props = [];\n const propDefinitions = (_a25 = instance == null ? void 0 : instance.type) == null ? void 0 : _a25.props;\n for (const key in instance == null ? void 0 : instance.props) {\n const propDefinition = propDefinitions ? propDefinitions[key] : null;\n const camelizeKey = camelize(key);\n props.push({\n type: \"props\",\n key: camelizeKey,\n value: returnError(() => instance.props[key]),\n editable: true,\n meta: propDefinition ? {\n type: propDefinition.type ? getPropType(propDefinition.type) : \"any\",\n required: !!propDefinition.required,\n ...propDefinition.default ? {\n default: propDefinition.default.toString()\n } : {}\n } : { type: \"invalid\" }\n });\n }\n return props;\n}\nfunction processState(instance) {\n const type = instance.type;\n const props = type == null ? void 0 : type.props;\n const getters = type.vuex && type.vuex.getters;\n const computedDefs = type.computed;\n const data = {\n ...instance.data,\n ...instance.renderContext\n };\n return Object.keys(data).filter((key) => !(props && key in props) && !(getters && key in getters) && !(computedDefs && key in computedDefs)).map((key) => ({\n key,\n type: \"data\",\n value: returnError(() => data[key]),\n editable: true\n }));\n}\nfunction getStateTypeAndName(info) {\n const stateType = info.computed ? \"computed\" : info.ref ? \"ref\" : info.reactive ? \"reactive\" : null;\n const stateTypeName = stateType ? `${stateType.charAt(0).toUpperCase()}${stateType.slice(1)}` : null;\n return {\n stateType,\n stateTypeName\n };\n}\nfunction processSetupState(instance) {\n const raw = instance.devtoolsRawSetupState || {};\n return Object.keys(instance.setupState).filter((key) => !vueBuiltins.has(key) && key.split(/(?=[A-Z])/)[0] !== \"use\").map((key) => {\n var _a25, _b25, _c, _d;\n const value = returnError(() => toRaw2(instance.setupState[key]));\n const accessError = value instanceof Error;\n const rawData = raw[key];\n let result;\n let isOtherType = accessError || typeof value === \"function\" || ensurePropertyExists(value, \"render\") && typeof value.render === \"function\" || ensurePropertyExists(value, \"__asyncLoader\") && typeof value.__asyncLoader === \"function\" || typeof value === \"object\" && value && (\"setup\" in value || \"props\" in value) || /^v[A-Z]/.test(key);\n if (rawData && !accessError) {\n const info = getSetupStateType(rawData);\n const { stateType, stateTypeName } = getStateTypeAndName(info);\n const isState = info.ref || info.computed || info.reactive;\n const raw2 = ensurePropertyExists(rawData, \"effect\") ? ((_b25 = (_a25 = rawData.effect) == null ? void 0 : _a25.raw) == null ? void 0 : _b25.toString()) || ((_d = (_c = rawData.effect) == null ? void 0 : _c.fn) == null ? void 0 : _d.toString()) : null;\n if (stateType)\n isOtherType = false;\n result = {\n ...stateType ? { stateType, stateTypeName } : {},\n ...raw2 ? { raw: raw2 } : {},\n editable: isState && !info.readonly\n };\n }\n const type = isOtherType ? \"setup (other)\" : \"setup\";\n return {\n key,\n value,\n type,\n // @ts-expect-error ignore\n ...result\n };\n });\n}\nfunction processComputed(instance, mergedType) {\n const type = mergedType;\n const computed = [];\n const defs = type.computed || {};\n for (const key in defs) {\n const def = defs[key];\n const type2 = typeof def === \"function\" && def.vuex ? \"vuex bindings\" : \"computed\";\n computed.push({\n type: type2,\n key,\n value: returnError(() => {\n var _a25;\n return (_a25 = instance == null ? void 0 : instance.proxy) == null ? void 0 : _a25[key];\n }),\n editable: typeof def.set === \"function\"\n });\n }\n return computed;\n}\nfunction processAttrs(instance) {\n return Object.keys(instance.attrs).map((key) => ({\n type: \"attrs\",\n key,\n value: returnError(() => instance.attrs[key])\n }));\n}\nfunction processProvide(instance) {\n return Reflect.ownKeys(instance.provides).map((key) => ({\n type: \"provided\",\n key: key.toString(),\n value: returnError(() => instance.provides[key])\n }));\n}\nfunction processInject(instance, mergedType) {\n if (!(mergedType == null ? void 0 : mergedType.inject))\n return [];\n let keys = [];\n let defaultValue;\n if (Array.isArray(mergedType.inject)) {\n keys = mergedType.inject.map((key) => ({\n key,\n originalKey: key\n }));\n } else {\n keys = Reflect.ownKeys(mergedType.inject).map((key) => {\n const value = mergedType.inject[key];\n let originalKey;\n if (typeof value === \"string\" || typeof value === \"symbol\") {\n originalKey = value;\n } else {\n originalKey = value.from;\n defaultValue = value.default;\n }\n return {\n key,\n originalKey\n };\n });\n }\n return keys.map(({ key, originalKey }) => ({\n type: \"injected\",\n key: originalKey && key !== originalKey ? `${originalKey.toString()} \\u279E ${key.toString()}` : key.toString(),\n // eslint-disable-next-line no-prototype-builtins\n value: returnError(() => instance.ctx.hasOwnProperty(key) ? instance.ctx[key] : instance.provides.hasOwnProperty(originalKey) ? instance.provides[originalKey] : defaultValue)\n }));\n}\nfunction processRefs(instance) {\n return Object.keys(instance.refs).map((key) => ({\n type: \"template refs\",\n key,\n value: returnError(() => instance.refs[key])\n }));\n}\nfunction processEventListeners(instance) {\n var _a25, _b25;\n const emitsDefinition = instance.type.emits;\n const declaredEmits = Array.isArray(emitsDefinition) ? emitsDefinition : Object.keys(emitsDefinition != null ? emitsDefinition : {});\n const keys = Object.keys((_b25 = (_a25 = instance == null ? void 0 : instance.vnode) == null ? void 0 : _a25.props) != null ? _b25 : {});\n const result = [];\n for (const key of keys) {\n const [prefix, ...eventNameParts] = key.split(/(?=[A-Z])/);\n if (prefix === \"on\") {\n const eventName = eventNameParts.join(\"-\").toLowerCase();\n const isDeclared = declaredEmits.includes(eventName);\n result.push({\n type: \"event listeners\",\n key: eventName,\n value: {\n _custom: {\n displayText: isDeclared ? \"\\u2705 Declared\" : \"\\u26A0\\uFE0F Not declared\",\n key: isDeclared ? \"\\u2705 Declared\" : \"\\u26A0\\uFE0F Not declared\",\n value: isDeclared ? \"\\u2705 Declared\" : \"\\u26A0\\uFE0F Not declared\",\n tooltipText: !isDeclared ? `The event ${eventName} is not declared in the emits option. It will leak into the component's attributes ($attrs).` : null\n }\n }\n });\n }\n }\n return result;\n}\nfunction processInstanceState(instance) {\n const mergedType = resolveMergedOptions(instance);\n return processProps(instance).concat(\n processState(instance),\n processSetupState(instance),\n processComputed(instance, mergedType),\n processAttrs(instance),\n processProvide(instance),\n processInject(instance, mergedType),\n processRefs(instance),\n processEventListeners(instance)\n );\n}\n\n// src/core/component/state/index.ts\nfunction getInstanceState(params) {\n var _a25;\n const instance = getComponentInstance(activeAppRecord.value, params.instanceId);\n const id = getUniqueComponentId(instance);\n const name = getInstanceName(instance);\n const file = (_a25 = instance == null ? void 0 : instance.type) == null ? void 0 : _a25.__file;\n const state = processInstanceState(instance);\n return {\n id,\n name,\n file,\n state,\n instance\n };\n}\n\n// src/core/component/tree/walker.ts\ninit_esm_shims();\n\n// src/core/component/tree/filter.ts\ninit_esm_shims();\nimport { classify as classify2, kebabize } from \"@vue/devtools-shared\";\nvar ComponentFilter = class {\n constructor(filter) {\n this.filter = filter || \"\";\n }\n /**\n * Check if an instance is qualified.\n *\n * @param {Vue|Vnode} instance\n * @return {boolean}\n */\n isQualified(instance) {\n const name = getInstanceName(instance);\n return classify2(name).toLowerCase().includes(this.filter) || kebabize(name).toLowerCase().includes(this.filter);\n }\n};\nfunction createComponentFilter(filterText) {\n return new ComponentFilter(filterText);\n}\n\n// src/core/component/tree/walker.ts\nvar ComponentWalker = class {\n constructor(options) {\n // Dedupe instances (Some instances may be both on a component and on a child abstract/functional component)\n this.captureIds = /* @__PURE__ */ new Map();\n const { filterText = \"\", maxDepth, recursively, api } = options;\n this.componentFilter = createComponentFilter(filterText);\n this.maxDepth = maxDepth;\n this.recursively = recursively;\n this.api = api;\n }\n getComponentTree(instance) {\n this.captureIds = /* @__PURE__ */ new Map();\n return this.findQualifiedChildren(instance, 0);\n }\n getComponentParents(instance) {\n this.captureIds = /* @__PURE__ */ new Map();\n const parents = [];\n this.captureId(instance);\n let parent = instance;\n while (parent = parent.parent) {\n this.captureId(parent);\n parents.push(parent);\n }\n return parents;\n }\n captureId(instance) {\n if (!instance)\n return null;\n const id = instance.__VUE_DEVTOOLS_NEXT_UID__ != null ? instance.__VUE_DEVTOOLS_NEXT_UID__ : getUniqueComponentId(instance);\n instance.__VUE_DEVTOOLS_NEXT_UID__ = id;\n if (this.captureIds.has(id))\n return null;\n else\n this.captureIds.set(id, void 0);\n this.mark(instance);\n return id;\n }\n /**\n * Capture the meta information of an instance. (recursive)\n *\n * @param {Vue} instance\n * @return {object}\n */\n async capture(instance, depth) {\n var _a25;\n if (!instance)\n return null;\n const id = this.captureId(instance);\n const name = getInstanceName(instance);\n const children = this.getInternalInstanceChildren(instance.subTree).filter((child) => !isBeingDestroyed(child));\n const parents = this.getComponentParents(instance) || [];\n const inactive = !!instance.isDeactivated || parents.some((parent) => parent.isDeactivated);\n const treeNode = {\n uid: instance.uid,\n id,\n name,\n renderKey: getRenderKey(instance.vnode ? instance.vnode.key : null),\n inactive,\n children: [],\n isFragment: isFragment(instance),\n tags: typeof instance.type !== \"function\" ? [] : [\n {\n label: \"functional\",\n textColor: 5592405,\n backgroundColor: 15658734\n }\n ],\n autoOpen: this.recursively,\n file: instance.type.__file || \"\"\n };\n if (depth < this.maxDepth || instance.type.__isKeepAlive || parents.some((parent) => parent.type.__isKeepAlive)) {\n treeNode.children = await Promise.all(children.map((child) => this.capture(child, depth + 1)).filter(Boolean));\n }\n if (this.isKeepAlive(instance)) {\n const cachedComponents = this.getKeepAliveCachedInstances(instance);\n const childrenIds = children.map((child) => child.__VUE_DEVTOOLS_NEXT_UID__);\n for (const cachedChild of cachedComponents) {\n if (!childrenIds.includes(cachedChild.__VUE_DEVTOOLS_NEXT_UID__)) {\n const node = await this.capture({ ...cachedChild, isDeactivated: true }, depth + 1);\n if (node)\n treeNode.children.push(node);\n }\n }\n }\n const rootElements = getRootElementsFromComponentInstance(instance);\n const firstElement = rootElements[0];\n if (firstElement == null ? void 0 : firstElement.parentElement) {\n const parentInstance = instance.parent;\n const parentRootElements = parentInstance ? getRootElementsFromComponentInstance(parentInstance) : [];\n let el = firstElement;\n const indexList = [];\n do {\n indexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n el = el.parentElement;\n } while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n treeNode.domOrder = indexList.reverse();\n } else {\n treeNode.domOrder = [-1];\n }\n if ((_a25 = instance.suspense) == null ? void 0 : _a25.suspenseKey) {\n treeNode.tags.push({\n label: instance.suspense.suspenseKey,\n backgroundColor: 14979812,\n textColor: 16777215\n });\n this.mark(instance, true);\n }\n this.api.visitComponentTree({\n treeNode,\n componentInstance: instance,\n app: instance.appContext.app,\n filter: this.componentFilter.filter\n });\n return treeNode;\n }\n /**\n * Find qualified children from a single instance.\n * If the instance itself is qualified, just return itself.\n * This is ok because [].concat works in both cases.\n *\n * @param {Vue|Vnode} instance\n * @return {Vue|Array}\n */\n async findQualifiedChildren(instance, depth) {\n var _a25;\n if (this.componentFilter.isQualified(instance) && !((_a25 = instance.type.devtools) == null ? void 0 : _a25.hide)) {\n return [await this.capture(instance, depth)];\n } else if (instance.subTree) {\n const list = this.isKeepAlive(instance) ? this.getKeepAliveCachedInstances(instance) : this.getInternalInstanceChildren(instance.subTree);\n return this.findQualifiedChildrenFromList(list, depth);\n } else {\n return [];\n }\n }\n /**\n * Iterate through an array of instances and flatten it into\n * an array of qualified instances. This is a depth-first\n * traversal - e.g. if an instance is not matched, we will\n * recursively go deeper until a qualified child is found.\n *\n * @param {Array} instances\n * @return {Array}\n */\n async findQualifiedChildrenFromList(instances, depth) {\n instances = instances.filter((child) => {\n var _a25;\n return !isBeingDestroyed(child) && !((_a25 = child.type.devtools) == null ? void 0 : _a25.hide);\n });\n if (!this.componentFilter.filter)\n return Promise.all(instances.map((child) => this.capture(child, depth)));\n else\n return Array.prototype.concat.apply([], await Promise.all(instances.map((i) => this.findQualifiedChildren(i, depth))));\n }\n /**\n * Get children from a component instance.\n */\n getInternalInstanceChildren(subTree, suspense = null) {\n const list = [];\n if (subTree) {\n if (subTree.component) {\n !suspense ? list.push(subTree.component) : list.push({ ...subTree.component, suspense });\n } else if (subTree.suspense) {\n const suspenseKey = !subTree.suspense.isInFallback ? \"suspense default\" : \"suspense fallback\";\n list.push(...this.getInternalInstanceChildren(subTree.suspense.activeBranch, { ...subTree.suspense, suspenseKey }));\n } else if (Array.isArray(subTree.children)) {\n subTree.children.forEach((childSubTree) => {\n if (childSubTree.component)\n !suspense ? list.push(childSubTree.component) : list.push({ ...childSubTree.component, suspense });\n else\n list.push(...this.getInternalInstanceChildren(childSubTree, suspense));\n });\n }\n }\n return list.filter((child) => {\n var _a25;\n return !isBeingDestroyed(child) && !((_a25 = child.type.devtools) == null ? void 0 : _a25.hide);\n });\n }\n /**\n * Mark an instance as captured and store it in the instance map.\n *\n * @param {Vue} instance\n */\n mark(instance, force = false) {\n const instanceMap = getAppRecord(instance).instanceMap;\n if (force || !instanceMap.has(instance.__VUE_DEVTOOLS_NEXT_UID__)) {\n instanceMap.set(instance.__VUE_DEVTOOLS_NEXT_UID__, instance);\n activeAppRecord.value.instanceMap = instanceMap;\n }\n }\n isKeepAlive(instance) {\n return instance.type.__isKeepAlive && instance.__v_cache;\n }\n getKeepAliveCachedInstances(instance) {\n return Array.from(instance.__v_cache.values()).map((vnode) => vnode.component).filter(Boolean);\n }\n};\n\n// src/core/timeline/index.ts\ninit_esm_shims();\nimport { isBrowser as isBrowser2 } from \"@vue/devtools-shared\";\n\n// src/core/timeline/perf.ts\ninit_esm_shims();\nvar markEndQueue = /* @__PURE__ */ new Map();\nvar PERFORMANCE_EVENT_LAYER_ID = \"performance\";\nasync function performanceMarkStart(api, app, uid, vm, type, time) {\n const appRecord = await getAppRecord(app);\n if (!appRecord) {\n return;\n }\n const componentName = getInstanceName(vm) || \"Unknown Component\";\n const groupId = devtoolsState.perfUniqueGroupId++;\n const groupKey = `${uid}-${type}`;\n appRecord.perfGroupIds.set(groupKey, { groupId, time });\n await api.addTimelineEvent({\n layerId: PERFORMANCE_EVENT_LAYER_ID,\n event: {\n time: Date.now(),\n data: {\n component: componentName,\n type,\n measure: \"start\"\n },\n title: componentName,\n subtitle: type,\n groupId\n }\n });\n if (markEndQueue.has(groupKey)) {\n const {\n app: app2,\n uid: uid2,\n instance,\n type: type2,\n time: time2\n } = markEndQueue.get(groupKey);\n markEndQueue.delete(groupKey);\n await performanceMarkEnd(\n api,\n app2,\n uid2,\n instance,\n type2,\n time2\n );\n }\n}\nfunction performanceMarkEnd(api, app, uid, vm, type, time) {\n const appRecord = getAppRecord(app);\n if (!appRecord)\n return;\n const componentName = getInstanceName(vm) || \"Unknown Component\";\n const groupKey = `${uid}-${type}`;\n const groupInfo = appRecord.perfGroupIds.get(groupKey);\n if (groupInfo) {\n const groupId = groupInfo.groupId;\n const startTime = groupInfo.time;\n const duration = time - startTime;\n api.addTimelineEvent({\n layerId: PERFORMANCE_EVENT_LAYER_ID,\n event: {\n time: Date.now(),\n data: {\n component: componentName,\n type,\n measure: \"end\",\n duration: {\n _custom: {\n type: \"Duration\",\n value: duration,\n display: `${duration} ms`\n }\n }\n },\n title: componentName,\n subtitle: type,\n groupId\n }\n });\n } else {\n markEndQueue.set(groupKey, { app, uid, instance: vm, type, time });\n }\n}\n\n// src/core/timeline/index.ts\nvar COMPONENT_EVENT_LAYER_ID = \"component-event\";\nfunction setupBuiltinTimelineLayers(api) {\n if (!isBrowser2)\n return;\n api.addTimelineLayer({\n id: \"mouse\",\n label: \"Mouse\",\n color: 10768815\n });\n [\"mousedown\", \"mouseup\", \"click\", \"dblclick\"].forEach((eventType) => {\n if (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.mouseEventEnabled)\n return;\n window.addEventListener(eventType, async (event) => {\n await api.addTimelineEvent({\n layerId: \"mouse\",\n event: {\n time: Date.now(),\n data: {\n type: eventType,\n x: event.clientX,\n y: event.clientY\n },\n title: eventType\n }\n });\n }, {\n capture: true,\n passive: true\n });\n });\n api.addTimelineLayer({\n id: \"keyboard\",\n label: \"Keyboard\",\n color: 8475055\n });\n [\"keyup\", \"keydown\", \"keypress\"].forEach((eventType) => {\n window.addEventListener(eventType, async (event) => {\n if (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.keyboardEventEnabled)\n return;\n await api.addTimelineEvent({\n layerId: \"keyboard\",\n event: {\n time: Date.now(),\n data: {\n type: eventType,\n key: event.key,\n ctrlKey: event.ctrlKey,\n shiftKey: event.shiftKey,\n altKey: event.altKey,\n metaKey: event.metaKey\n },\n title: event.key\n }\n });\n }, {\n capture: true,\n passive: true\n });\n });\n api.addTimelineLayer({\n id: COMPONENT_EVENT_LAYER_ID,\n label: \"Component events\",\n color: 5226637\n });\n hook.on.componentEmit(async (app, instance, event, params) => {\n if (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.componentEventEnabled)\n return;\n const appRecord = await getAppRecord(app);\n if (!appRecord)\n return;\n const componentId = `${appRecord.id}:${instance.uid}`;\n const componentName = getInstanceName(instance) || \"Unknown Component\";\n api.addTimelineEvent({\n layerId: COMPONENT_EVENT_LAYER_ID,\n event: {\n time: Date.now(),\n data: {\n component: {\n _custom: {\n type: \"component-definition\",\n display: componentName\n }\n },\n event,\n params\n },\n title: event,\n subtitle: `by ${componentName}`,\n meta: {\n componentId\n }\n }\n });\n });\n api.addTimelineLayer({\n id: \"performance\",\n label: PERFORMANCE_EVENT_LAYER_ID,\n color: 4307050\n });\n hook.on.perfStart((app, uid, vm, type, time) => {\n if (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.performanceEventEnabled)\n return;\n performanceMarkStart(api, app, uid, vm, type, time);\n });\n hook.on.perfEnd((app, uid, vm, type, time) => {\n if (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.performanceEventEnabled)\n return;\n performanceMarkEnd(api, app, uid, vm, type, time);\n });\n}\n\n// src/core/vm/index.ts\ninit_esm_shims();\nvar MAX_$VM = 10;\nvar $vmQueue = [];\nfunction exposeInstanceToWindow(componentInstance) {\n if (typeof window === \"undefined\")\n return;\n const win = window;\n if (!componentInstance)\n return;\n win.$vm = componentInstance;\n if ($vmQueue[0] !== componentInstance) {\n if ($vmQueue.length >= MAX_$VM) {\n $vmQueue.pop();\n }\n for (let i = $vmQueue.length; i > 0; i--) {\n win[`$vm${i}`] = $vmQueue[i] = $vmQueue[i - 1];\n }\n win.$vm0 = $vmQueue[0] = componentInstance;\n }\n}\n\n// src/core/plugin/components.ts\nvar INSPECTOR_ID = \"components\";\nfunction createComponentsDevToolsPlugin(app) {\n const descriptor = {\n id: INSPECTOR_ID,\n label: \"Components\",\n app\n };\n const setupFn = (api) => {\n api.addInspector({\n id: INSPECTOR_ID,\n label: \"Components\",\n treeFilterPlaceholder: \"Search components\"\n });\n setupBuiltinTimelineLayers(api);\n api.on.getInspectorTree(async (payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const instance = getComponentInstance(activeAppRecord.value, payload.instanceId);\n if (instance) {\n const walker2 = new ComponentWalker({\n filterText: payload.filter,\n // @TODO: should make this configurable?\n maxDepth: 100,\n recursively: false,\n api\n });\n payload.rootNodes = await walker2.getComponentTree(instance);\n }\n }\n });\n api.on.getInspectorState(async (payload) => {\n var _a25;\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n const result = getInstanceState({\n instanceId: payload.nodeId\n });\n const componentInstance = result.instance;\n const app2 = (_a25 = result.instance) == null ? void 0 : _a25.appContext.app;\n const _payload = {\n componentInstance,\n app: app2,\n instanceData: result\n };\n devtoolsContext.hooks.callHookWith((callbacks) => {\n callbacks.forEach((cb) => cb(_payload));\n }, \"inspectComponent\" /* INSPECT_COMPONENT */);\n payload.state = result;\n exposeInstanceToWindow(componentInstance);\n }\n });\n api.on.editInspectorState(async (payload) => {\n if (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n editState(payload);\n await api.sendInspectorState(\"components\");\n }\n });\n const debounceSendInspectorTree = debounce4(() => {\n api.sendInspectorTree(INSPECTOR_ID);\n }, 120);\n const debounceSendInspectorState = debounce4(() => {\n api.sendInspectorState(INSPECTOR_ID);\n }, 120);\n const componentAddedCleanup = hook.on.componentAdded(async (app2, uid, parentUid, component) => {\n var _a25, _b25, _c;\n if (devtoolsState.highPerfModeEnabled)\n return;\n if ((_c = (_b25 = (_a25 = app2 == null ? void 0 : app2._instance) == null ? void 0 : _a25.type) == null ? void 0 : _b25.devtools) == null ? void 0 : _c.hide)\n return;\n if (!app2 || typeof uid !== \"number\" && !uid || !component)\n return;\n const id = await getComponentId({\n app: app2,\n uid,\n instance: component\n });\n const appRecord = await getAppRecord(app2);\n if (component) {\n if (component.__VUE_DEVTOOLS_NEXT_UID__ == null)\n component.__VUE_DEVTOOLS_NEXT_UID__ = id;\n if (!(appRecord == null ? void 0 : appRecord.instanceMap.has(id))) {\n appRecord == null ? void 0 : appRecord.instanceMap.set(id, component);\n if (activeAppRecord.value.id === (appRecord == null ? void 0 : appRecord.id))\n activeAppRecord.value.instanceMap = appRecord.instanceMap;\n }\n }\n if (!appRecord)\n return;\n debounceSendInspectorTree();\n });\n const componentUpdatedCleanup = hook.on.componentUpdated(async (app2, uid, parentUid, component) => {\n var _a25, _b25, _c;\n if (devtoolsState.highPerfModeEnabled)\n return;\n if ((_c = (_b25 = (_a25 = app2 == null ? void 0 : app2._instance) == null ? void 0 : _a25.type) == null ? void 0 : _b25.devtools) == null ? void 0 : _c.hide)\n return;\n if (!app2 || typeof uid !== \"number\" && !uid || !component)\n return;\n const id = await getComponentId({\n app: app2,\n uid,\n instance: component\n });\n const appRecord = await getAppRecord(app2);\n if (component) {\n if (component.__VUE_DEVTOOLS_NEXT_UID__ == null)\n component.__VUE_DEVTOOLS_NEXT_UID__ = id;\n if (!(appRecord == null ? void 0 : appRecord.instanceMap.has(id))) {\n appRecord == null ? void 0 : appRecord.instanceMap.set(id, component);\n if (activeAppRecord.value.id === (appRecord == null ? void 0 : appRecord.id))\n activeAppRecord.value.instanceMap = appRecord.instanceMap;\n }\n }\n if (!appRecord)\n return;\n debounceSendInspectorTree();\n debounceSendInspectorState();\n });\n const componentRemovedCleanup = hook.on.componentRemoved(async (app2, uid, parentUid, component) => {\n var _a25, _b25, _c;\n if (devtoolsState.highPerfModeEnabled)\n return;\n if ((_c = (_b25 = (_a25 = app2 == null ? void 0 : app2._instance) == null ? void 0 : _a25.type) == null ? void 0 : _b25.devtools) == null ? void 0 : _c.hide)\n return;\n if (!app2 || typeof uid !== \"number\" && !uid || !component)\n return;\n const appRecord = await getAppRecord(app2);\n if (!appRecord)\n return;\n const id = await getComponentId({\n app: app2,\n uid,\n instance: component\n });\n appRecord == null ? void 0 : appRecord.instanceMap.delete(id);\n if (activeAppRecord.value.id === (appRecord == null ? void 0 : appRecord.id))\n activeAppRecord.value.instanceMap = appRecord.instanceMap;\n debounceSendInspectorTree();\n });\n };\n return [descriptor, setupFn];\n}\n\n// src/core/plugin/index.ts\nvar _a12, _b12;\n(_b12 = (_a12 = target8).__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__) != null ? _b12 : _a12.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__ = /* @__PURE__ */ new Set();\nfunction setupDevToolsPlugin(pluginDescriptor, setupFn) {\n return hook.setupDevToolsPlugin(pluginDescriptor, setupFn);\n}\nfunction callDevToolsPluginSetupFn(plugin, app) {\n const [pluginDescriptor, setupFn] = plugin;\n if (pluginDescriptor.app !== app)\n return;\n const api = new DevToolsPluginAPI({\n plugin: {\n setupFn,\n descriptor: pluginDescriptor\n },\n ctx: devtoolsContext\n });\n if (pluginDescriptor.packageName === \"vuex\") {\n api.on.editInspectorState((payload) => {\n api.sendInspectorState(payload.inspectorId);\n });\n }\n setupFn(api);\n}\nfunction removeRegisteredPluginApp(app) {\n target8.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.delete(app);\n}\nfunction registerDevToolsPlugin(app, options) {\n if (target8.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.has(app)) {\n return;\n }\n if (devtoolsState.highPerfModeEnabled && !(options == null ? void 0 : options.inspectingComponent)) {\n return;\n }\n target8.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.add(app);\n devtoolsPluginBuffer.forEach((plugin) => {\n callDevToolsPluginSetupFn(plugin, app);\n });\n}\n\n// src/core/router/index.ts\ninit_esm_shims();\nimport { deepClone, target as global3 } from \"@vue/devtools-shared\";\nimport { debounce as debounce5 } from \"perfect-debounce\";\n\n// src/ctx/router.ts\ninit_esm_shims();\nimport { target as global2 } from \"@vue/devtools-shared\";\nvar ROUTER_KEY = \"__VUE_DEVTOOLS_ROUTER__\";\nvar ROUTER_INFO_KEY = \"__VUE_DEVTOOLS_ROUTER_INFO__\";\nvar _a13, _b13;\n(_b13 = (_a13 = global2)[ROUTER_INFO_KEY]) != null ? _b13 : _a13[ROUTER_INFO_KEY] = {\n currentRoute: null,\n routes: []\n};\nvar _a14, _b14;\n(_b14 = (_a14 = global2)[ROUTER_KEY]) != null ? _b14 : _a14[ROUTER_KEY] = {};\nvar devtoolsRouterInfo = new Proxy(global2[ROUTER_INFO_KEY], {\n get(target22, property) {\n return global2[ROUTER_INFO_KEY][property];\n }\n});\nvar devtoolsRouter = new Proxy(global2[ROUTER_KEY], {\n get(target22, property) {\n if (property === \"value\") {\n return global2[ROUTER_KEY];\n }\n }\n});\n\n// src/core/router/index.ts\nfunction getRoutes(router) {\n const routesMap = /* @__PURE__ */ new Map();\n return ((router == null ? void 0 : router.getRoutes()) || []).filter((i) => !routesMap.has(i.path) && routesMap.set(i.path, 1));\n}\nfunction filterRoutes(routes) {\n return routes.map((item) => {\n let { path, name, children, meta } = item;\n if (children == null ? void 0 : children.length)\n children = filterRoutes(children);\n return {\n path,\n name,\n children,\n meta\n };\n });\n}\nfunction filterCurrentRoute(route) {\n if (route) {\n const { fullPath, hash, href, path, name, matched, params, query } = route;\n return {\n fullPath,\n hash,\n href,\n path,\n name,\n params,\n query,\n matched: filterRoutes(matched)\n };\n }\n return route;\n}\nfunction normalizeRouterInfo(appRecord, activeAppRecord2) {\n function init() {\n var _a25;\n const router = (_a25 = appRecord.app) == null ? void 0 : _a25.config.globalProperties.$router;\n const currentRoute = filterCurrentRoute(router == null ? void 0 : router.currentRoute.value);\n const routes = filterRoutes(getRoutes(router));\n const c = console.warn;\n console.warn = () => {\n };\n global3[ROUTER_INFO_KEY] = {\n currentRoute: currentRoute ? deepClone(currentRoute) : {},\n routes: deepClone(routes)\n };\n global3[ROUTER_KEY] = router;\n console.warn = c;\n }\n init();\n hook.on.componentUpdated(debounce5(() => {\n var _a25;\n if (((_a25 = activeAppRecord2.value) == null ? void 0 : _a25.app) !== appRecord.app)\n return;\n init();\n if (devtoolsState.highPerfModeEnabled)\n return;\n devtoolsContext.hooks.callHook(\"routerInfoUpdated\" /* ROUTER_INFO_UPDATED */, { state: global3[ROUTER_INFO_KEY] });\n }, 200));\n}\n\n// src/ctx/api.ts\nfunction createDevToolsApi(hooks2) {\n return {\n // get inspector tree\n async getInspectorTree(payload) {\n const _payload = {\n ...payload,\n app: activeAppRecord.value.app,\n rootNodes: []\n };\n await new Promise((resolve) => {\n hooks2.callHookWith(async (callbacks) => {\n await Promise.all(callbacks.map((cb) => cb(_payload)));\n resolve();\n }, \"getInspectorTree\" /* GET_INSPECTOR_TREE */);\n });\n return _payload.rootNodes;\n },\n // get inspector state\n async getInspectorState(payload) {\n const _payload = {\n ...payload,\n app: activeAppRecord.value.app,\n state: null\n };\n const ctx = {\n currentTab: `custom-inspector:${payload.inspectorId}`\n };\n await new Promise((resolve) => {\n hooks2.callHookWith(async (callbacks) => {\n await Promise.all(callbacks.map((cb) => cb(_payload, ctx)));\n resolve();\n }, \"getInspectorState\" /* GET_INSPECTOR_STATE */);\n });\n return _payload.state;\n },\n // edit inspector state\n editInspectorState(payload) {\n const stateEditor2 = new StateEditor();\n const _payload = {\n ...payload,\n app: activeAppRecord.value.app,\n set: (obj, path = payload.path, value = payload.state.value, cb) => {\n stateEditor2.set(obj, path, value, cb || stateEditor2.createDefaultSetCallback(payload.state));\n }\n };\n hooks2.callHookWith((callbacks) => {\n callbacks.forEach((cb) => cb(_payload));\n }, \"editInspectorState\" /* EDIT_INSPECTOR_STATE */);\n },\n // send inspector state\n sendInspectorState(inspectorId) {\n const inspector = getInspector(inspectorId);\n hooks2.callHook(\"sendInspectorState\" /* SEND_INSPECTOR_STATE */, { inspectorId, plugin: {\n descriptor: inspector.descriptor,\n setupFn: () => ({})\n } });\n },\n // inspect component inspector\n inspectComponentInspector() {\n return inspectComponentHighLighter();\n },\n // cancel inspect component inspector\n cancelInspectComponentInspector() {\n return cancelInspectComponentHighLighter();\n },\n // get component render code\n getComponentRenderCode(id) {\n const instance = getComponentInstance(activeAppRecord.value, id);\n if (instance)\n return !(typeof (instance == null ? void 0 : instance.type) === \"function\") ? instance.render.toString() : instance.type.toString();\n },\n // scroll to component\n scrollToComponent(id) {\n return scrollToComponent({ id });\n },\n // open in editor\n openInEditor,\n // get vue inspector\n getVueInspector: getComponentInspector,\n // toggle app\n toggleApp(id, options) {\n const appRecord = devtoolsAppRecords.value.find((record) => record.id === id);\n if (appRecord) {\n setActiveAppRecordId(id);\n setActiveAppRecord(appRecord);\n normalizeRouterInfo(appRecord, activeAppRecord);\n callInspectorUpdatedHook();\n registerDevToolsPlugin(appRecord.app, options);\n }\n },\n // inspect dom\n inspectDOM(instanceId) {\n const instance = getComponentInstance(activeAppRecord.value, instanceId);\n if (instance) {\n const [el] = getRootElementsFromComponentInstance(instance);\n if (el) {\n target9.__VUE_DEVTOOLS_INSPECT_DOM_TARGET__ = el;\n }\n }\n },\n updatePluginSettings(pluginId, key, value) {\n setPluginSettings(pluginId, key, value);\n },\n getPluginSettings(pluginId) {\n return {\n options: getPluginSettingsOptions(pluginId),\n values: getPluginSettings(pluginId)\n };\n }\n };\n}\n\n// src/ctx/env.ts\ninit_esm_shims();\nimport { target as target10 } from \"@vue/devtools-shared\";\nvar _a15, _b15;\n(_b15 = (_a15 = target10).__VUE_DEVTOOLS_ENV__) != null ? _b15 : _a15.__VUE_DEVTOOLS_ENV__ = {\n vitePluginDetected: false\n};\nfunction getDevToolsEnv() {\n return target10.__VUE_DEVTOOLS_ENV__;\n}\nfunction setDevToolsEnv(env) {\n target10.__VUE_DEVTOOLS_ENV__ = {\n ...target10.__VUE_DEVTOOLS_ENV__,\n ...env\n };\n}\n\n// src/ctx/index.ts\nvar hooks = createDevToolsCtxHooks();\nvar _a16, _b16;\n(_b16 = (_a16 = target11).__VUE_DEVTOOLS_KIT_CONTEXT__) != null ? _b16 : _a16.__VUE_DEVTOOLS_KIT_CONTEXT__ = {\n hooks,\n get state() {\n return {\n ...devtoolsState,\n activeAppRecordId: activeAppRecord.id,\n activeAppRecord: activeAppRecord.value,\n appRecords: devtoolsAppRecords.value\n };\n },\n api: createDevToolsApi(hooks)\n};\nvar devtoolsContext = target11.__VUE_DEVTOOLS_KIT_CONTEXT__;\n\n// src/core/app/index.ts\ninit_esm_shims();\nvar import_speakingurl = __toESM(require_speakingurl2(), 1);\nimport { isBrowser as isBrowser3, target as target12 } from \"@vue/devtools-shared\";\nvar _a17, _b17;\nvar appRecordInfo = (_b17 = (_a17 = target12).__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__) != null ? _b17 : _a17.__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__ = {\n id: 0,\n appIds: /* @__PURE__ */ new Set()\n};\nfunction getAppRecordName(app, fallbackName) {\n var _a25;\n return ((_a25 = app == null ? void 0 : app._component) == null ? void 0 : _a25.name) || `App ${fallbackName}`;\n}\nfunction getAppRootInstance(app) {\n var _a25, _b25, _c, _d;\n if (app._instance)\n return app._instance;\n else if ((_b25 = (_a25 = app._container) == null ? void 0 : _a25._vnode) == null ? void 0 : _b25.component)\n return (_d = (_c = app._container) == null ? void 0 : _c._vnode) == null ? void 0 : _d.component;\n}\nfunction removeAppRecordId(app) {\n const id = app.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__;\n if (id != null) {\n appRecordInfo.appIds.delete(id);\n appRecordInfo.id--;\n }\n}\nfunction getAppRecordId(app, defaultId) {\n if (app.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__ != null)\n return app.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__;\n let id = defaultId != null ? defaultId : (appRecordInfo.id++).toString();\n if (defaultId && appRecordInfo.appIds.has(id)) {\n let count = 1;\n while (appRecordInfo.appIds.has(`${defaultId}_${count}`))\n count++;\n id = `${defaultId}_${count}`;\n }\n appRecordInfo.appIds.add(id);\n app.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__ = id;\n return id;\n}\nfunction createAppRecord(app, types) {\n var _a25, _b25;\n const rootInstance = getAppRootInstance(app);\n if (rootInstance) {\n appRecordInfo.id++;\n const name = getAppRecordName(app, appRecordInfo.id.toString());\n const id = getAppRecordId(app, (0, import_speakingurl.default)(name));\n const [el] = getRootElementsFromComponentInstance(rootInstance);\n const record = {\n id,\n name,\n types,\n instanceMap: /* @__PURE__ */ new Map(),\n perfGroupIds: /* @__PURE__ */ new Map(),\n rootInstance,\n iframe: isBrowser3 && document !== (el == null ? void 0 : el.ownerDocument) ? (_b25 = (_a25 = el == null ? void 0 : el.ownerDocument) == null ? void 0 : _a25.location) == null ? void 0 : _b25.pathname : void 0\n };\n app.__VUE_DEVTOOLS_NEXT_APP_RECORD__ = record;\n const rootId = `${record.id}:root`;\n record.instanceMap.set(rootId, record.rootInstance);\n record.rootInstance.__VUE_DEVTOOLS_NEXT_UID__ = rootId;\n return record;\n } else {\n return {};\n }\n}\n\n// src/core/iframe/index.ts\ninit_esm_shims();\nfunction detectIframeApp(target22, inIframe = false) {\n if (inIframe) {\n let sendEventToParent2 = function(cb) {\n try {\n const hook3 = window.parent.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n if (hook3) {\n cb(hook3);\n }\n } catch (e) {\n }\n };\n var sendEventToParent = sendEventToParent2;\n const hook2 = {\n id: \"vue-devtools-next\",\n devtoolsVersion: \"7.0\",\n on: (event, cb) => {\n sendEventToParent2((hook3) => {\n hook3.on(event, cb);\n });\n },\n once: (event, cb) => {\n sendEventToParent2((hook3) => {\n hook3.once(event, cb);\n });\n },\n off: (event, cb) => {\n sendEventToParent2((hook3) => {\n hook3.off(event, cb);\n });\n },\n emit: (event, ...payload) => {\n sendEventToParent2((hook3) => {\n hook3.emit(event, ...payload);\n });\n }\n };\n Object.defineProperty(target22, \"__VUE_DEVTOOLS_GLOBAL_HOOK__\", {\n get() {\n return hook2;\n },\n configurable: true\n });\n }\n function injectVueHookToIframe(iframe) {\n if (iframe.__vdevtools__injected) {\n return;\n }\n try {\n iframe.__vdevtools__injected = true;\n const inject = () => {\n try {\n iframe.contentWindow.__VUE_DEVTOOLS_IFRAME__ = iframe;\n const script = iframe.contentDocument.createElement(\"script\");\n script.textContent = `;(${detectIframeApp.toString()})(window, true)`;\n iframe.contentDocument.documentElement.appendChild(script);\n script.parentNode.removeChild(script);\n } catch (e) {\n }\n };\n inject();\n iframe.addEventListener(\"load\", () => inject());\n } catch (e) {\n }\n }\n function injectVueHookToIframes() {\n if (typeof window === \"undefined\") {\n return;\n }\n const iframes = Array.from(document.querySelectorAll(\"iframe:not([data-vue-devtools-ignore])\"));\n for (const iframe of iframes) {\n injectVueHookToIframe(iframe);\n }\n }\n injectVueHookToIframes();\n let iframeAppChecks = 0;\n const iframeAppCheckTimer = setInterval(() => {\n injectVueHookToIframes();\n iframeAppChecks++;\n if (iframeAppChecks >= 5) {\n clearInterval(iframeAppCheckTimer);\n }\n }, 1e3);\n}\n\n// src/core/index.ts\nfunction initDevTools() {\n var _a25;\n detectIframeApp(target13);\n updateDevToolsState({\n vitePluginDetected: getDevToolsEnv().vitePluginDetected\n });\n const isDevToolsNext = ((_a25 = target13.__VUE_DEVTOOLS_GLOBAL_HOOK__) == null ? void 0 : _a25.id) === \"vue-devtools-next\";\n if (target13.__VUE_DEVTOOLS_GLOBAL_HOOK__ && isDevToolsNext)\n return;\n const _devtoolsHook = createDevToolsHook();\n if (target13.__VUE_DEVTOOLS_HOOK_REPLAY__) {\n try {\n target13.__VUE_DEVTOOLS_HOOK_REPLAY__.forEach((cb) => cb(_devtoolsHook));\n target13.__VUE_DEVTOOLS_HOOK_REPLAY__ = [];\n } catch (e) {\n console.error(\"[vue-devtools] Error during hook replay\", e);\n }\n }\n _devtoolsHook.once(\"init\", (Vue) => {\n target13.__VUE_DEVTOOLS_VUE2_APP_DETECTED__ = true;\n console.log(\"%c[_____Vue DevTools v7 log_____]\", \"color: red; font-bold: 600; font-size: 16px;\");\n console.log(\"%cVue DevTools v7 detected in your Vue2 project. v7 only supports Vue3 and will not work.\", \"font-bold: 500; font-size: 14px;\");\n const legacyChromeUrl = \"https://chromewebstore.google.com/detail/vuejs-devtools/iaajmlceplecbljialhhkmedjlpdblhp\";\n const legacyFirefoxUrl = \"https://addons.mozilla.org/firefox/addon/vue-js-devtools-v6-legacy\";\n console.log(`%cThe legacy version of chrome extension that supports both Vue 2 and Vue 3 has been moved to %c ${legacyChromeUrl}`, \"font-size: 14px;\", \"text-decoration: underline; cursor: pointer;font-size: 14px;\");\n console.log(`%cThe legacy version of firefox extension that supports both Vue 2 and Vue 3 has been moved to %c ${legacyFirefoxUrl}`, \"font-size: 14px;\", \"text-decoration: underline; cursor: pointer;font-size: 14px;\");\n console.log(\"%cPlease install and enable only the legacy version for your Vue2 app.\", \"font-bold: 500; font-size: 14px;\");\n console.log(\"%c[_____Vue DevTools v7 log_____]\", \"color: red; font-bold: 600; font-size: 16px;\");\n });\n hook.on.setupDevtoolsPlugin((pluginDescriptor, setupFn) => {\n var _a26;\n addDevToolsPluginToBuffer(pluginDescriptor, setupFn);\n const { app } = (_a26 = activeAppRecord) != null ? _a26 : {};\n if (pluginDescriptor.settings) {\n initPluginSettings(pluginDescriptor.id, pluginDescriptor.settings);\n }\n if (!app)\n return;\n callDevToolsPluginSetupFn([pluginDescriptor, setupFn], app);\n });\n onLegacyDevToolsPluginApiAvailable(() => {\n const normalizedPluginBuffer = devtoolsPluginBuffer.filter(([item]) => item.id !== \"components\");\n normalizedPluginBuffer.forEach(([pluginDescriptor, setupFn]) => {\n _devtoolsHook.emit(\"devtools-plugin:setup\" /* SETUP_DEVTOOLS_PLUGIN */, pluginDescriptor, setupFn, { target: \"legacy\" });\n });\n });\n hook.on.vueAppInit(async (app, version, types) => {\n const appRecord = createAppRecord(app, types);\n const normalizedAppRecord = {\n ...appRecord,\n app,\n version\n };\n addDevToolsAppRecord(normalizedAppRecord);\n if (devtoolsAppRecords.value.length === 1) {\n setActiveAppRecord(normalizedAppRecord);\n setActiveAppRecordId(normalizedAppRecord.id);\n normalizeRouterInfo(normalizedAppRecord, activeAppRecord);\n registerDevToolsPlugin(normalizedAppRecord.app);\n }\n setupDevToolsPlugin(...createComponentsDevToolsPlugin(normalizedAppRecord.app));\n updateDevToolsState({\n connected: true\n });\n _devtoolsHook.apps.push(app);\n });\n hook.on.vueAppUnmount(async (app) => {\n const activeRecords = devtoolsAppRecords.value.filter((appRecord) => appRecord.app !== app);\n if (activeRecords.length === 0) {\n updateDevToolsState({\n connected: false\n });\n }\n removeDevToolsAppRecord(app);\n removeAppRecordId(app);\n if (activeAppRecord.value.app === app) {\n setActiveAppRecord(activeRecords[0]);\n devtoolsContext.hooks.callHook(\"sendActiveAppUpdatedToClient\" /* SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT */);\n }\n target13.__VUE_DEVTOOLS_GLOBAL_HOOK__.apps.splice(target13.__VUE_DEVTOOLS_GLOBAL_HOOK__.apps.indexOf(app), 1);\n removeRegisteredPluginApp(app);\n });\n subscribeDevToolsHook(_devtoolsHook);\n if (!target13.__VUE_DEVTOOLS_GLOBAL_HOOK__) {\n Object.defineProperty(target13, \"__VUE_DEVTOOLS_GLOBAL_HOOK__\", {\n get() {\n return _devtoolsHook;\n },\n configurable: true\n });\n } else {\n if (!isNuxtApp) {\n Object.assign(__VUE_DEVTOOLS_GLOBAL_HOOK__, _devtoolsHook);\n }\n }\n}\nfunction onDevToolsClientConnected(fn) {\n return new Promise((resolve) => {\n if (devtoolsState.connected && devtoolsState.clientConnected) {\n fn();\n resolve();\n return;\n }\n devtoolsContext.hooks.hook(\"devtoolsConnectedUpdated\" /* DEVTOOLS_CONNECTED_UPDATED */, ({ state }) => {\n if (state.connected && state.clientConnected) {\n fn();\n resolve();\n }\n });\n });\n}\n\n// src/core/high-perf-mode/index.ts\ninit_esm_shims();\nfunction toggleHighPerfMode(state) {\n devtoolsState.highPerfModeEnabled = state != null ? state : !devtoolsState.highPerfModeEnabled;\n if (!state && activeAppRecord.value) {\n registerDevToolsPlugin(activeAppRecord.value.app);\n }\n}\n\n// src/core/component/state/format.ts\ninit_esm_shims();\n\n// src/core/component/state/reviver.ts\ninit_esm_shims();\nimport { target as target14 } from \"@vue/devtools-shared\";\nfunction reviveSet(val) {\n const result = /* @__PURE__ */ new Set();\n const list = val._custom.value;\n for (let i = 0; i < list.length; i++) {\n const value = list[i];\n result.add(revive(value));\n }\n return result;\n}\nfunction reviveMap(val) {\n const result = /* @__PURE__ */ new Map();\n const list = val._custom.value;\n for (let i = 0; i < list.length; i++) {\n const { key, value } = list[i];\n result.set(key, revive(value));\n }\n return result;\n}\nfunction revive(val) {\n if (val === UNDEFINED) {\n return void 0;\n } else if (val === INFINITY) {\n return Number.POSITIVE_INFINITY;\n } else if (val === NEGATIVE_INFINITY) {\n return Number.NEGATIVE_INFINITY;\n } else if (val === NAN) {\n return Number.NaN;\n } else if (val && val._custom) {\n const { _custom: custom } = val;\n if (custom.type === \"component\")\n return activeAppRecord.value.instanceMap.get(custom.id);\n else if (custom.type === \"map\")\n return reviveMap(val);\n else if (custom.type === \"set\")\n return reviveSet(val);\n else if (custom.type === \"bigint\")\n return BigInt(custom.value);\n else\n return revive(custom.value);\n } else if (symbolRE.test(val)) {\n const [, string] = symbolRE.exec(val);\n return Symbol.for(string);\n } else if (specialTypeRE.test(val)) {\n const [, type, string, , details] = specialTypeRE.exec(val);\n const result = new target14[type](string);\n if (type === \"Error\" && details)\n result.stack = details;\n return result;\n } else {\n return val;\n }\n}\nfunction reviver(key, value) {\n return revive(value);\n}\n\n// src/core/component/state/format.ts\nfunction getInspectorStateValueType(value, raw = true) {\n const type = typeof value;\n if (value == null || value === UNDEFINED || value === \"undefined\") {\n return \"null\";\n } else if (type === \"boolean\" || type === \"number\" || value === INFINITY || value === NEGATIVE_INFINITY || value === NAN) {\n return \"literal\";\n } else if (value == null ? void 0 : value._custom) {\n if (raw || value._custom.display != null || value._custom.displayText != null)\n return \"custom\";\n else\n return getInspectorStateValueType(value._custom.value);\n } else if (typeof value === \"string\") {\n const typeMatch = specialTypeRE.exec(value);\n if (typeMatch) {\n const [, type2] = typeMatch;\n return `native ${type2}`;\n } else {\n return \"string\";\n }\n } else if (Array.isArray(value) || (value == null ? void 0 : value._isArray)) {\n return \"array\";\n } else if (isPlainObject(value)) {\n return \"plain-object\";\n } else {\n return \"unknown\";\n }\n}\nfunction formatInspectorStateValue(value, quotes = false, options) {\n var _a25, _b25, _c;\n const { customClass } = options != null ? options : {};\n let result;\n const type = getInspectorStateValueType(value, false);\n if (type !== \"custom\" && (value == null ? void 0 : value._custom))\n value = value._custom.value;\n if (result = internalStateTokenToString(value)) {\n return result;\n } else if (type === \"custom\") {\n const nestedName = ((_a25 = value._custom.value) == null ? void 0 : _a25._custom) && formatInspectorStateValue(value._custom.value, quotes, options);\n return nestedName || value._custom.displayText || value._custom.display;\n } else if (type === \"array\") {\n return `Array[${value.length}]`;\n } else if (type === \"plain-object\") {\n return `Object${Object.keys(value).length ? \"\" : \" (empty)\"}`;\n } else if (type == null ? void 0 : type.includes(\"native\")) {\n return escape((_b25 = specialTypeRE.exec(value)) == null ? void 0 : _b25[2]);\n } else if (typeof value === \"string\") {\n const typeMatch = value.match(rawTypeRE);\n if (typeMatch) {\n value = escapeString(typeMatch[1]);\n } else if (quotes) {\n value = `\"${(customClass == null ? void 0 : customClass.string) ? `${escapeString(value)}` : escapeString(value)}\"`;\n } else {\n value = (customClass == null ? void 0 : customClass.string) ? `${escapeString(value)}` : escapeString(value);\n }\n }\n return value;\n}\nfunction escapeString(value) {\n return escape(value).replace(/ /g, \" \").replace(/\\n/g, \"\\\\n\");\n}\nfunction getRaw(value) {\n var _a25, _b25, _c;\n let customType;\n const isCustom = getInspectorStateValueType(value) === \"custom\";\n let inherit = {};\n if (isCustom) {\n const data = value;\n const customValue = (_a25 = data._custom) == null ? void 0 : _a25.value;\n const currentCustomType = (_b25 = data._custom) == null ? void 0 : _b25.type;\n const nestedCustom = typeof customValue === \"object\" && customValue !== null && \"_custom\" in customValue ? getRaw(customValue) : { inherit: void 0, value: void 0, customType: void 0 };\n inherit = nestedCustom.inherit || ((_c = data._custom) == null ? void 0 : _c.fields) || {};\n value = nestedCustom.value || customValue;\n customType = nestedCustom.customType || currentCustomType;\n }\n if (value && value._isArray)\n value = value.items;\n return { value, inherit, customType };\n}\nfunction toEdit(value, customType) {\n if (customType === \"bigint\")\n return value;\n if (customType === \"date\")\n return value;\n return replaceTokenToString(JSON.stringify(value));\n}\nfunction toSubmit(value, customType) {\n if (customType === \"bigint\")\n return BigInt(value);\n if (customType === \"date\")\n return new Date(value);\n return JSON.parse(replaceStringToToken(value), reviver);\n}\n\n// src/core/devtools-client/detected.ts\ninit_esm_shims();\nimport { target as target15 } from \"@vue/devtools-shared\";\nfunction updateDevToolsClientDetected(params) {\n devtoolsState.devtoolsClientDetected = {\n ...devtoolsState.devtoolsClientDetected,\n ...params\n };\n const devtoolsClientVisible = Object.values(devtoolsState.devtoolsClientDetected).some(Boolean);\n toggleHighPerfMode(!devtoolsClientVisible);\n}\nvar _a18, _b18;\n(_b18 = (_a18 = target15).__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__) != null ? _b18 : _a18.__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__ = updateDevToolsClientDetected;\n\n// src/messaging/index.ts\ninit_esm_shims();\nimport { target as target21 } from \"@vue/devtools-shared\";\nimport { createBirpc, createBirpcGroup } from \"birpc\";\n\n// src/messaging/presets/index.ts\ninit_esm_shims();\n\n// src/messaging/presets/broadcast-channel/index.ts\ninit_esm_shims();\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/index.js\ninit_esm_shims();\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/class-registry.js\ninit_esm_shims();\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/registry.js\ninit_esm_shims();\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/double-indexed-kv.js\ninit_esm_shims();\nvar DoubleIndexedKV = class {\n constructor() {\n this.keyToValue = /* @__PURE__ */ new Map();\n this.valueToKey = /* @__PURE__ */ new Map();\n }\n set(key, value) {\n this.keyToValue.set(key, value);\n this.valueToKey.set(value, key);\n }\n getByKey(key) {\n return this.keyToValue.get(key);\n }\n getByValue(value) {\n return this.valueToKey.get(value);\n }\n clear() {\n this.keyToValue.clear();\n this.valueToKey.clear();\n }\n};\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/registry.js\nvar Registry = class {\n constructor(generateIdentifier) {\n this.generateIdentifier = generateIdentifier;\n this.kv = new DoubleIndexedKV();\n }\n register(value, identifier) {\n if (this.kv.getByValue(value)) {\n return;\n }\n if (!identifier) {\n identifier = this.generateIdentifier(value);\n }\n this.kv.set(identifier, value);\n }\n clear() {\n this.kv.clear();\n }\n getIdentifier(value) {\n return this.kv.getByValue(value);\n }\n getValue(identifier) {\n return this.kv.getByKey(identifier);\n }\n};\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/class-registry.js\nvar ClassRegistry = class extends Registry {\n constructor() {\n super((c) => c.name);\n this.classToAllowedProps = /* @__PURE__ */ new Map();\n }\n register(value, options) {\n if (typeof options === \"object\") {\n if (options.allowProps) {\n this.classToAllowedProps.set(value, options.allowProps);\n }\n super.register(value, options.identifier);\n } else {\n super.register(value, options);\n }\n }\n getAllowedProps(value) {\n return this.classToAllowedProps.get(value);\n }\n};\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/custom-transformer-registry.js\ninit_esm_shims();\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/util.js\ninit_esm_shims();\nfunction valuesOfObj(record) {\n if (\"values\" in Object) {\n return Object.values(record);\n }\n const values = [];\n for (const key in record) {\n if (record.hasOwnProperty(key)) {\n values.push(record[key]);\n }\n }\n return values;\n}\nfunction find(record, predicate) {\n const values = valuesOfObj(record);\n if (\"find\" in values) {\n return values.find(predicate);\n }\n const valuesNotNever = values;\n for (let i = 0; i < valuesNotNever.length; i++) {\n const value = valuesNotNever[i];\n if (predicate(value)) {\n return value;\n }\n }\n return void 0;\n}\nfunction forEach(record, run) {\n Object.entries(record).forEach(([key, value]) => run(value, key));\n}\nfunction includes(arr, value) {\n return arr.indexOf(value) !== -1;\n}\nfunction findArr(record, predicate) {\n for (let i = 0; i < record.length; i++) {\n const value = record[i];\n if (predicate(value)) {\n return value;\n }\n }\n return void 0;\n}\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/custom-transformer-registry.js\nvar CustomTransformerRegistry = class {\n constructor() {\n this.transfomers = {};\n }\n register(transformer) {\n this.transfomers[transformer.name] = transformer;\n }\n findApplicable(v) {\n return find(this.transfomers, (transformer) => transformer.isApplicable(v));\n }\n findByName(name) {\n return this.transfomers[name];\n }\n};\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/plainer.js\ninit_esm_shims();\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/is.js\ninit_esm_shims();\nvar getType = (payload) => Object.prototype.toString.call(payload).slice(8, -1);\nvar isUndefined = (payload) => typeof payload === \"undefined\";\nvar isNull = (payload) => payload === null;\nvar isPlainObject2 = (payload) => {\n if (typeof payload !== \"object\" || payload === null)\n return false;\n if (payload === Object.prototype)\n return false;\n if (Object.getPrototypeOf(payload) === null)\n return true;\n return Object.getPrototypeOf(payload) === Object.prototype;\n};\nvar isEmptyObject = (payload) => isPlainObject2(payload) && Object.keys(payload).length === 0;\nvar isArray = (payload) => Array.isArray(payload);\nvar isString = (payload) => typeof payload === \"string\";\nvar isNumber = (payload) => typeof payload === \"number\" && !isNaN(payload);\nvar isBoolean = (payload) => typeof payload === \"boolean\";\nvar isRegExp = (payload) => payload instanceof RegExp;\nvar isMap = (payload) => payload instanceof Map;\nvar isSet = (payload) => payload instanceof Set;\nvar isSymbol = (payload) => getType(payload) === \"Symbol\";\nvar isDate = (payload) => payload instanceof Date && !isNaN(payload.valueOf());\nvar isError = (payload) => payload instanceof Error;\nvar isNaNValue = (payload) => typeof payload === \"number\" && isNaN(payload);\nvar isPrimitive2 = (payload) => isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);\nvar isBigint = (payload) => typeof payload === \"bigint\";\nvar isInfinite = (payload) => payload === Infinity || payload === -Infinity;\nvar isTypedArray = (payload) => ArrayBuffer.isView(payload) && !(payload instanceof DataView);\nvar isURL = (payload) => payload instanceof URL;\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/pathstringifier.js\ninit_esm_shims();\nvar escapeKey = (key) => key.replace(/\\./g, \"\\\\.\");\nvar stringifyPath = (path) => path.map(String).map(escapeKey).join(\".\");\nvar parsePath = (string) => {\n const result = [];\n let segment = \"\";\n for (let i = 0; i < string.length; i++) {\n let char = string.charAt(i);\n const isEscapedDot = char === \"\\\\\" && string.charAt(i + 1) === \".\";\n if (isEscapedDot) {\n segment += \".\";\n i++;\n continue;\n }\n const isEndOfSegment = char === \".\";\n if (isEndOfSegment) {\n result.push(segment);\n segment = \"\";\n continue;\n }\n segment += char;\n }\n const lastSegment = segment;\n result.push(lastSegment);\n return result;\n};\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/transformer.js\ninit_esm_shims();\nfunction simpleTransformation(isApplicable, annotation, transform, untransform) {\n return {\n isApplicable,\n annotation,\n transform,\n untransform\n };\n}\nvar simpleRules = [\n simpleTransformation(isUndefined, \"undefined\", () => null, () => void 0),\n simpleTransformation(isBigint, \"bigint\", (v) => v.toString(), (v) => {\n if (typeof BigInt !== \"undefined\") {\n return BigInt(v);\n }\n console.error(\"Please add a BigInt polyfill.\");\n return v;\n }),\n simpleTransformation(isDate, \"Date\", (v) => v.toISOString(), (v) => new Date(v)),\n simpleTransformation(isError, \"Error\", (v, superJson) => {\n const baseError = {\n name: v.name,\n message: v.message\n };\n superJson.allowedErrorProps.forEach((prop) => {\n baseError[prop] = v[prop];\n });\n return baseError;\n }, (v, superJson) => {\n const e = new Error(v.message);\n e.name = v.name;\n e.stack = v.stack;\n superJson.allowedErrorProps.forEach((prop) => {\n e[prop] = v[prop];\n });\n return e;\n }),\n simpleTransformation(isRegExp, \"regexp\", (v) => \"\" + v, (regex) => {\n const body = regex.slice(1, regex.lastIndexOf(\"/\"));\n const flags = regex.slice(regex.lastIndexOf(\"/\") + 1);\n return new RegExp(body, flags);\n }),\n simpleTransformation(\n isSet,\n \"set\",\n // (sets only exist in es6+)\n // eslint-disable-next-line es5/no-es6-methods\n (v) => [...v.values()],\n (v) => new Set(v)\n ),\n simpleTransformation(isMap, \"map\", (v) => [...v.entries()], (v) => new Map(v)),\n simpleTransformation((v) => isNaNValue(v) || isInfinite(v), \"number\", (v) => {\n if (isNaNValue(v)) {\n return \"NaN\";\n }\n if (v > 0) {\n return \"Infinity\";\n } else {\n return \"-Infinity\";\n }\n }, Number),\n simpleTransformation((v) => v === 0 && 1 / v === -Infinity, \"number\", () => {\n return \"-0\";\n }, Number),\n simpleTransformation(isURL, \"URL\", (v) => v.toString(), (v) => new URL(v))\n];\nfunction compositeTransformation(isApplicable, annotation, transform, untransform) {\n return {\n isApplicable,\n annotation,\n transform,\n untransform\n };\n}\nvar symbolRule = compositeTransformation((s, superJson) => {\n if (isSymbol(s)) {\n const isRegistered = !!superJson.symbolRegistry.getIdentifier(s);\n return isRegistered;\n }\n return false;\n}, (s, superJson) => {\n const identifier = superJson.symbolRegistry.getIdentifier(s);\n return [\"symbol\", identifier];\n}, (v) => v.description, (_, a, superJson) => {\n const value = superJson.symbolRegistry.getValue(a[1]);\n if (!value) {\n throw new Error(\"Trying to deserialize unknown symbol\");\n }\n return value;\n});\nvar constructorToName = [\n Int8Array,\n Uint8Array,\n Int16Array,\n Uint16Array,\n Int32Array,\n Uint32Array,\n Float32Array,\n Float64Array,\n Uint8ClampedArray\n].reduce((obj, ctor) => {\n obj[ctor.name] = ctor;\n return obj;\n}, {});\nvar typedArrayRule = compositeTransformation(isTypedArray, (v) => [\"typed-array\", v.constructor.name], (v) => [...v], (v, a) => {\n const ctor = constructorToName[a[1]];\n if (!ctor) {\n throw new Error(\"Trying to deserialize unknown typed array\");\n }\n return new ctor(v);\n});\nfunction isInstanceOfRegisteredClass(potentialClass, superJson) {\n if (potentialClass == null ? void 0 : potentialClass.constructor) {\n const isRegistered = !!superJson.classRegistry.getIdentifier(potentialClass.constructor);\n return isRegistered;\n }\n return false;\n}\nvar classRule = compositeTransformation(isInstanceOfRegisteredClass, (clazz, superJson) => {\n const identifier = superJson.classRegistry.getIdentifier(clazz.constructor);\n return [\"class\", identifier];\n}, (clazz, superJson) => {\n const allowedProps = superJson.classRegistry.getAllowedProps(clazz.constructor);\n if (!allowedProps) {\n return { ...clazz };\n }\n const result = {};\n allowedProps.forEach((prop) => {\n result[prop] = clazz[prop];\n });\n return result;\n}, (v, a, superJson) => {\n const clazz = superJson.classRegistry.getValue(a[1]);\n if (!clazz) {\n throw new Error(`Trying to deserialize unknown class '${a[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`);\n }\n return Object.assign(Object.create(clazz.prototype), v);\n});\nvar customRule = compositeTransformation((value, superJson) => {\n return !!superJson.customTransformerRegistry.findApplicable(value);\n}, (value, superJson) => {\n const transformer = superJson.customTransformerRegistry.findApplicable(value);\n return [\"custom\", transformer.name];\n}, (value, superJson) => {\n const transformer = superJson.customTransformerRegistry.findApplicable(value);\n return transformer.serialize(value);\n}, (v, a, superJson) => {\n const transformer = superJson.customTransformerRegistry.findByName(a[1]);\n if (!transformer) {\n throw new Error(\"Trying to deserialize unknown custom value\");\n }\n return transformer.deserialize(v);\n});\nvar compositeRules = [classRule, symbolRule, customRule, typedArrayRule];\nvar transformValue = (value, superJson) => {\n const applicableCompositeRule = findArr(compositeRules, (rule) => rule.isApplicable(value, superJson));\n if (applicableCompositeRule) {\n return {\n value: applicableCompositeRule.transform(value, superJson),\n type: applicableCompositeRule.annotation(value, superJson)\n };\n }\n const applicableSimpleRule = findArr(simpleRules, (rule) => rule.isApplicable(value, superJson));\n if (applicableSimpleRule) {\n return {\n value: applicableSimpleRule.transform(value, superJson),\n type: applicableSimpleRule.annotation\n };\n }\n return void 0;\n};\nvar simpleRulesByAnnotation = {};\nsimpleRules.forEach((rule) => {\n simpleRulesByAnnotation[rule.annotation] = rule;\n});\nvar untransformValue = (json, type, superJson) => {\n if (isArray(type)) {\n switch (type[0]) {\n case \"symbol\":\n return symbolRule.untransform(json, type, superJson);\n case \"class\":\n return classRule.untransform(json, type, superJson);\n case \"custom\":\n return customRule.untransform(json, type, superJson);\n case \"typed-array\":\n return typedArrayRule.untransform(json, type, superJson);\n default:\n throw new Error(\"Unknown transformation: \" + type);\n }\n } else {\n const transformation = simpleRulesByAnnotation[type];\n if (!transformation) {\n throw new Error(\"Unknown transformation: \" + type);\n }\n return transformation.untransform(json, superJson);\n }\n};\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/accessDeep.js\ninit_esm_shims();\nvar getNthKey = (value, n) => {\n if (n > value.size)\n throw new Error(\"index out of bounds\");\n const keys = value.keys();\n while (n > 0) {\n keys.next();\n n--;\n }\n return keys.next().value;\n};\nfunction validatePath(path) {\n if (includes(path, \"__proto__\")) {\n throw new Error(\"__proto__ is not allowed as a property\");\n }\n if (includes(path, \"prototype\")) {\n throw new Error(\"prototype is not allowed as a property\");\n }\n if (includes(path, \"constructor\")) {\n throw new Error(\"constructor is not allowed as a property\");\n }\n}\nvar getDeep = (object, path) => {\n validatePath(path);\n for (let i = 0; i < path.length; i++) {\n const key = path[i];\n if (isSet(object)) {\n object = getNthKey(object, +key);\n } else if (isMap(object)) {\n const row = +key;\n const type = +path[++i] === 0 ? \"key\" : \"value\";\n const keyOfRow = getNthKey(object, row);\n switch (type) {\n case \"key\":\n object = keyOfRow;\n break;\n case \"value\":\n object = object.get(keyOfRow);\n break;\n }\n } else {\n object = object[key];\n }\n }\n return object;\n};\nvar setDeep = (object, path, mapper) => {\n validatePath(path);\n if (path.length === 0) {\n return mapper(object);\n }\n let parent = object;\n for (let i = 0; i < path.length - 1; i++) {\n const key = path[i];\n if (isArray(parent)) {\n const index = +key;\n parent = parent[index];\n } else if (isPlainObject2(parent)) {\n parent = parent[key];\n } else if (isSet(parent)) {\n const row = +key;\n parent = getNthKey(parent, row);\n } else if (isMap(parent)) {\n const isEnd = i === path.length - 2;\n if (isEnd) {\n break;\n }\n const row = +key;\n const type = +path[++i] === 0 ? \"key\" : \"value\";\n const keyOfRow = getNthKey(parent, row);\n switch (type) {\n case \"key\":\n parent = keyOfRow;\n break;\n case \"value\":\n parent = parent.get(keyOfRow);\n break;\n }\n }\n }\n const lastKey = path[path.length - 1];\n if (isArray(parent)) {\n parent[+lastKey] = mapper(parent[+lastKey]);\n } else if (isPlainObject2(parent)) {\n parent[lastKey] = mapper(parent[lastKey]);\n }\n if (isSet(parent)) {\n const oldValue = getNthKey(parent, +lastKey);\n const newValue = mapper(oldValue);\n if (oldValue !== newValue) {\n parent.delete(oldValue);\n parent.add(newValue);\n }\n }\n if (isMap(parent)) {\n const row = +path[path.length - 2];\n const keyToRow = getNthKey(parent, row);\n const type = +lastKey === 0 ? \"key\" : \"value\";\n switch (type) {\n case \"key\": {\n const newKey = mapper(keyToRow);\n parent.set(newKey, parent.get(keyToRow));\n if (newKey !== keyToRow) {\n parent.delete(keyToRow);\n }\n break;\n }\n case \"value\": {\n parent.set(keyToRow, mapper(parent.get(keyToRow)));\n break;\n }\n }\n }\n return object;\n};\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/plainer.js\nfunction traverse(tree, walker2, origin = []) {\n if (!tree) {\n return;\n }\n if (!isArray(tree)) {\n forEach(tree, (subtree, key) => traverse(subtree, walker2, [...origin, ...parsePath(key)]));\n return;\n }\n const [nodeValue, children] = tree;\n if (children) {\n forEach(children, (child, key) => {\n traverse(child, walker2, [...origin, ...parsePath(key)]);\n });\n }\n walker2(nodeValue, origin);\n}\nfunction applyValueAnnotations(plain, annotations, superJson) {\n traverse(annotations, (type, path) => {\n plain = setDeep(plain, path, (v) => untransformValue(v, type, superJson));\n });\n return plain;\n}\nfunction applyReferentialEqualityAnnotations(plain, annotations) {\n function apply(identicalPaths, path) {\n const object = getDeep(plain, parsePath(path));\n identicalPaths.map(parsePath).forEach((identicalObjectPath) => {\n plain = setDeep(plain, identicalObjectPath, () => object);\n });\n }\n if (isArray(annotations)) {\n const [root, other] = annotations;\n root.forEach((identicalPath) => {\n plain = setDeep(plain, parsePath(identicalPath), () => plain);\n });\n if (other) {\n forEach(other, apply);\n }\n } else {\n forEach(annotations, apply);\n }\n return plain;\n}\nvar isDeep = (object, superJson) => isPlainObject2(object) || isArray(object) || isMap(object) || isSet(object) || isInstanceOfRegisteredClass(object, superJson);\nfunction addIdentity(object, path, identities) {\n const existingSet = identities.get(object);\n if (existingSet) {\n existingSet.push(path);\n } else {\n identities.set(object, [path]);\n }\n}\nfunction generateReferentialEqualityAnnotations(identitites, dedupe) {\n const result = {};\n let rootEqualityPaths = void 0;\n identitites.forEach((paths) => {\n if (paths.length <= 1) {\n return;\n }\n if (!dedupe) {\n paths = paths.map((path) => path.map(String)).sort((a, b) => a.length - b.length);\n }\n const [representativePath, ...identicalPaths] = paths;\n if (representativePath.length === 0) {\n rootEqualityPaths = identicalPaths.map(stringifyPath);\n } else {\n result[stringifyPath(representativePath)] = identicalPaths.map(stringifyPath);\n }\n });\n if (rootEqualityPaths) {\n if (isEmptyObject(result)) {\n return [rootEqualityPaths];\n } else {\n return [rootEqualityPaths, result];\n }\n } else {\n return isEmptyObject(result) ? void 0 : result;\n }\n}\nvar walker = (object, identities, superJson, dedupe, path = [], objectsInThisPath = [], seenObjects = /* @__PURE__ */ new Map()) => {\n var _a25;\n const primitive = isPrimitive2(object);\n if (!primitive) {\n addIdentity(object, path, identities);\n const seen = seenObjects.get(object);\n if (seen) {\n return dedupe ? {\n transformedValue: null\n } : seen;\n }\n }\n if (!isDeep(object, superJson)) {\n const transformed2 = transformValue(object, superJson);\n const result2 = transformed2 ? {\n transformedValue: transformed2.value,\n annotations: [transformed2.type]\n } : {\n transformedValue: object\n };\n if (!primitive) {\n seenObjects.set(object, result2);\n }\n return result2;\n }\n if (includes(objectsInThisPath, object)) {\n return {\n transformedValue: null\n };\n }\n const transformationResult = transformValue(object, superJson);\n const transformed = (_a25 = transformationResult == null ? void 0 : transformationResult.value) != null ? _a25 : object;\n const transformedValue = isArray(transformed) ? [] : {};\n const innerAnnotations = {};\n forEach(transformed, (value, index) => {\n if (index === \"__proto__\" || index === \"constructor\" || index === \"prototype\") {\n throw new Error(`Detected property ${index}. This is a prototype pollution risk, please remove it from your object.`);\n }\n const recursiveResult = walker(value, identities, superJson, dedupe, [...path, index], [...objectsInThisPath, object], seenObjects);\n transformedValue[index] = recursiveResult.transformedValue;\n if (isArray(recursiveResult.annotations)) {\n innerAnnotations[index] = recursiveResult.annotations;\n } else if (isPlainObject2(recursiveResult.annotations)) {\n forEach(recursiveResult.annotations, (tree, key) => {\n innerAnnotations[escapeKey(index) + \".\" + key] = tree;\n });\n }\n });\n const result = isEmptyObject(innerAnnotations) ? {\n transformedValue,\n annotations: !!transformationResult ? [transformationResult.type] : void 0\n } : {\n transformedValue,\n annotations: !!transformationResult ? [transformationResult.type, innerAnnotations] : innerAnnotations\n };\n if (!primitive) {\n seenObjects.set(object, result);\n }\n return result;\n};\n\n// ../../node_modules/.pnpm/copy-anything@3.0.5/node_modules/copy-anything/dist/index.js\ninit_esm_shims();\n\n// ../../node_modules/.pnpm/is-what@4.1.16/node_modules/is-what/dist/index.js\ninit_esm_shims();\nfunction getType2(payload) {\n return Object.prototype.toString.call(payload).slice(8, -1);\n}\nfunction isArray2(payload) {\n return getType2(payload) === \"Array\";\n}\nfunction isPlainObject3(payload) {\n if (getType2(payload) !== \"Object\")\n return false;\n const prototype = Object.getPrototypeOf(payload);\n return !!prototype && prototype.constructor === Object && prototype === Object.prototype;\n}\nfunction isNull2(payload) {\n return getType2(payload) === \"Null\";\n}\nfunction isOneOf(a, b, c, d, e) {\n return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);\n}\nfunction isUndefined2(payload) {\n return getType2(payload) === \"Undefined\";\n}\nvar isNullOrUndefined = isOneOf(isNull2, isUndefined2);\n\n// ../../node_modules/.pnpm/copy-anything@3.0.5/node_modules/copy-anything/dist/index.js\nfunction assignProp(carry, key, newVal, originalObject, includeNonenumerable) {\n const propType = {}.propertyIsEnumerable.call(originalObject, key) ? \"enumerable\" : \"nonenumerable\";\n if (propType === \"enumerable\")\n carry[key] = newVal;\n if (includeNonenumerable && propType === \"nonenumerable\") {\n Object.defineProperty(carry, key, {\n value: newVal,\n enumerable: false,\n writable: true,\n configurable: true\n });\n }\n}\nfunction copy(target22, options = {}) {\n if (isArray2(target22)) {\n return target22.map((item) => copy(item, options));\n }\n if (!isPlainObject3(target22)) {\n return target22;\n }\n const props = Object.getOwnPropertyNames(target22);\n const symbols = Object.getOwnPropertySymbols(target22);\n return [...props, ...symbols].reduce((carry, key) => {\n if (isArray2(options.props) && !options.props.includes(key)) {\n return carry;\n }\n const val = target22[key];\n const newVal = copy(val, options);\n assignProp(carry, key, newVal, target22, options.nonenumerable);\n return carry;\n }, {});\n}\n\n// ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/index.js\nvar SuperJSON = class {\n /**\n * @param dedupeReferentialEqualities If true, SuperJSON will make sure only one instance of referentially equal objects are serialized and the rest are replaced with `null`.\n */\n constructor({ dedupe = false } = {}) {\n this.classRegistry = new ClassRegistry();\n this.symbolRegistry = new Registry((s) => {\n var _a25;\n return (_a25 = s.description) != null ? _a25 : \"\";\n });\n this.customTransformerRegistry = new CustomTransformerRegistry();\n this.allowedErrorProps = [];\n this.dedupe = dedupe;\n }\n serialize(object) {\n const identities = /* @__PURE__ */ new Map();\n const output = walker(object, identities, this, this.dedupe);\n const res = {\n json: output.transformedValue\n };\n if (output.annotations) {\n res.meta = {\n ...res.meta,\n values: output.annotations\n };\n }\n const equalityAnnotations = generateReferentialEqualityAnnotations(identities, this.dedupe);\n if (equalityAnnotations) {\n res.meta = {\n ...res.meta,\n referentialEqualities: equalityAnnotations\n };\n }\n return res;\n }\n deserialize(payload) {\n const { json, meta } = payload;\n let result = copy(json);\n if (meta == null ? void 0 : meta.values) {\n result = applyValueAnnotations(result, meta.values, this);\n }\n if (meta == null ? void 0 : meta.referentialEqualities) {\n result = applyReferentialEqualityAnnotations(result, meta.referentialEqualities);\n }\n return result;\n }\n stringify(object) {\n return JSON.stringify(this.serialize(object));\n }\n parse(string) {\n return this.deserialize(JSON.parse(string));\n }\n registerClass(v, options) {\n this.classRegistry.register(v, options);\n }\n registerSymbol(v, identifier) {\n this.symbolRegistry.register(v, identifier);\n }\n registerCustom(transformer, name) {\n this.customTransformerRegistry.register({\n name,\n ...transformer\n });\n }\n allowErrorProps(...props) {\n this.allowedErrorProps.push(...props);\n }\n};\nSuperJSON.defaultInstance = new SuperJSON();\nSuperJSON.serialize = SuperJSON.defaultInstance.serialize.bind(SuperJSON.defaultInstance);\nSuperJSON.deserialize = SuperJSON.defaultInstance.deserialize.bind(SuperJSON.defaultInstance);\nSuperJSON.stringify = SuperJSON.defaultInstance.stringify.bind(SuperJSON.defaultInstance);\nSuperJSON.parse = SuperJSON.defaultInstance.parse.bind(SuperJSON.defaultInstance);\nSuperJSON.registerClass = SuperJSON.defaultInstance.registerClass.bind(SuperJSON.defaultInstance);\nSuperJSON.registerSymbol = SuperJSON.defaultInstance.registerSymbol.bind(SuperJSON.defaultInstance);\nSuperJSON.registerCustom = SuperJSON.defaultInstance.registerCustom.bind(SuperJSON.defaultInstance);\nSuperJSON.allowErrorProps = SuperJSON.defaultInstance.allowErrorProps.bind(SuperJSON.defaultInstance);\nvar serialize = SuperJSON.serialize;\nvar deserialize = SuperJSON.deserialize;\nvar stringify = SuperJSON.stringify;\nvar parse = SuperJSON.parse;\nvar registerClass = SuperJSON.registerClass;\nvar registerCustom = SuperJSON.registerCustom;\nvar registerSymbol = SuperJSON.registerSymbol;\nvar allowErrorProps = SuperJSON.allowErrorProps;\n\n// src/messaging/presets/broadcast-channel/context.ts\ninit_esm_shims();\nvar __DEVTOOLS_KIT_BROADCAST_MESSAGING_EVENT_KEY = \"__devtools-kit-broadcast-messaging-event-key__\";\n\n// src/messaging/presets/broadcast-channel/index.ts\nvar BROADCAST_CHANNEL_NAME = \"__devtools-kit:broadcast-channel__\";\nfunction createBroadcastChannel() {\n const channel = new BroadcastChannel(BROADCAST_CHANNEL_NAME);\n return {\n post: (data) => {\n channel.postMessage(SuperJSON.stringify({\n event: __DEVTOOLS_KIT_BROADCAST_MESSAGING_EVENT_KEY,\n data\n }));\n },\n on: (handler) => {\n channel.onmessage = (event) => {\n const parsed = SuperJSON.parse(event.data);\n if (parsed.event === __DEVTOOLS_KIT_BROADCAST_MESSAGING_EVENT_KEY) {\n handler(parsed.data);\n }\n };\n }\n };\n}\n\n// src/messaging/presets/electron/index.ts\ninit_esm_shims();\n\n// src/messaging/presets/electron/client.ts\ninit_esm_shims();\n\n// src/messaging/presets/electron/context.ts\ninit_esm_shims();\nimport { target as target16 } from \"@vue/devtools-shared\";\nvar __ELECTRON_CLIENT_CONTEXT__ = \"electron:client-context\";\nvar __ELECTRON_RPOXY_CONTEXT__ = \"electron:proxy-context\";\nvar __ELECTRON_SERVER_CONTEXT__ = \"electron:server-context\";\nvar __DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__ = {\n // client\n CLIENT_TO_PROXY: \"client->proxy\",\n // on: proxy->client\n // proxy\n PROXY_TO_CLIENT: \"proxy->client\",\n // on: server->proxy\n PROXY_TO_SERVER: \"proxy->server\",\n // on: client->proxy\n // server\n SERVER_TO_PROXY: \"server->proxy\"\n // on: proxy->server\n};\nfunction getElectronClientContext() {\n return target16[__ELECTRON_CLIENT_CONTEXT__];\n}\nfunction setElectronClientContext(context) {\n target16[__ELECTRON_CLIENT_CONTEXT__] = context;\n}\nfunction getElectronProxyContext() {\n return target16[__ELECTRON_RPOXY_CONTEXT__];\n}\nfunction setElectronProxyContext(context) {\n target16[__ELECTRON_RPOXY_CONTEXT__] = context;\n}\nfunction getElectronServerContext() {\n return target16[__ELECTRON_SERVER_CONTEXT__];\n}\nfunction setElectronServerContext(context) {\n target16[__ELECTRON_SERVER_CONTEXT__] = context;\n}\n\n// src/messaging/presets/electron/client.ts\nfunction createElectronClientChannel() {\n const socket = getElectronClientContext();\n return {\n post: (data) => {\n socket.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.CLIENT_TO_PROXY, SuperJSON.stringify(data));\n },\n on: (handler) => {\n socket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_CLIENT, (e) => {\n handler(SuperJSON.parse(e));\n });\n }\n };\n}\n\n// src/messaging/presets/electron/proxy.ts\ninit_esm_shims();\nfunction createElectronProxyChannel() {\n const socket = getElectronProxyContext();\n return {\n post: (data) => {\n },\n on: (handler) => {\n socket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY, (data) => {\n socket.broadcast.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_CLIENT, data);\n });\n socket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.CLIENT_TO_PROXY, (data) => {\n socket.broadcast.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER, data);\n });\n }\n };\n}\n\n// src/messaging/presets/electron/server.ts\ninit_esm_shims();\nfunction createElectronServerChannel() {\n const socket = getElectronServerContext();\n return {\n post: (data) => {\n socket.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY, SuperJSON.stringify(data));\n },\n on: (handler) => {\n socket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER, (data) => {\n handler(SuperJSON.parse(data));\n });\n }\n };\n}\n\n// src/messaging/presets/extension/index.ts\ninit_esm_shims();\n\n// src/messaging/presets/extension/client.ts\ninit_esm_shims();\n\n// src/messaging/presets/extension/context.ts\ninit_esm_shims();\nimport { target as target17 } from \"@vue/devtools-shared\";\nvar __EXTENSION_CLIENT_CONTEXT__ = \"electron:client-context\";\nvar __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__ = {\n // client\n CLIENT_TO_PROXY: \"client->proxy\",\n // on: proxy->client\n // proxy\n PROXY_TO_CLIENT: \"proxy->client\",\n // on: server->proxy\n PROXY_TO_SERVER: \"proxy->server\",\n // on: client->proxy\n // server\n SERVER_TO_PROXY: \"server->proxy\"\n // on: proxy->server\n};\nfunction getExtensionClientContext() {\n return target17[__EXTENSION_CLIENT_CONTEXT__];\n}\nfunction setExtensionClientContext(context) {\n target17[__EXTENSION_CLIENT_CONTEXT__] = context;\n}\n\n// src/messaging/presets/extension/client.ts\nfunction createExtensionClientChannel() {\n let disconnected = false;\n let port = null;\n let reconnectTimer = null;\n let onMessageHandler = null;\n function connect() {\n try {\n clearTimeout(reconnectTimer);\n port = chrome.runtime.connect({\n name: `${chrome.devtools.inspectedWindow.tabId}`\n });\n setExtensionClientContext(port);\n disconnected = false;\n port == null ? void 0 : port.onMessage.addListener(onMessageHandler);\n port.onDisconnect.addListener(() => {\n disconnected = true;\n port == null ? void 0 : port.onMessage.removeListener(onMessageHandler);\n reconnectTimer = setTimeout(connect, 1e3);\n });\n } catch (e) {\n disconnected = true;\n }\n }\n connect();\n return {\n post: (data) => {\n if (disconnected) {\n return;\n }\n port == null ? void 0 : port.postMessage(SuperJSON.stringify(data));\n },\n on: (handler) => {\n onMessageHandler = (data) => {\n if (disconnected) {\n return;\n }\n handler(SuperJSON.parse(data));\n };\n port == null ? void 0 : port.onMessage.addListener(onMessageHandler);\n }\n };\n}\n\n// src/messaging/presets/extension/proxy.ts\ninit_esm_shims();\nfunction createExtensionProxyChannel() {\n const port = chrome.runtime.connect({\n name: \"content-script\"\n });\n function sendMessageToUserApp(payload) {\n window.postMessage({\n source: __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER,\n payload\n }, \"*\");\n }\n function sendMessageToDevToolsClient(e) {\n if (e.data && e.data.source === __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY) {\n try {\n port.postMessage(e.data.payload);\n } catch (e2) {\n }\n }\n }\n port.onMessage.addListener(sendMessageToUserApp);\n window.addEventListener(\"message\", sendMessageToDevToolsClient);\n port.onDisconnect.addListener(() => {\n window.removeEventListener(\"message\", sendMessageToDevToolsClient);\n sendMessageToUserApp(SuperJSON.stringify({\n event: \"shutdown\"\n }));\n });\n sendMessageToUserApp(SuperJSON.stringify({\n event: \"init\"\n }));\n return {\n post: (data) => {\n },\n on: (handler) => {\n }\n };\n}\n\n// src/messaging/presets/extension/server.ts\ninit_esm_shims();\nfunction createExtensionServerChannel() {\n return {\n post: (data) => {\n window.postMessage({\n source: __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY,\n payload: SuperJSON.stringify(data)\n }, \"*\");\n },\n on: (handler) => {\n const listener = (event) => {\n if (event.data.source === __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER && event.data.payload) {\n handler(SuperJSON.parse(event.data.payload));\n }\n };\n window.addEventListener(\"message\", listener);\n return () => {\n window.removeEventListener(\"message\", listener);\n };\n }\n };\n}\n\n// src/messaging/presets/iframe/index.ts\ninit_esm_shims();\n\n// src/messaging/presets/iframe/client.ts\ninit_esm_shims();\nimport { isBrowser as isBrowser4 } from \"@vue/devtools-shared\";\n\n// src/messaging/presets/iframe/context.ts\ninit_esm_shims();\nimport { target as target18 } from \"@vue/devtools-shared\";\nvar __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY = \"__devtools-kit-iframe-messaging-event-key__\";\nvar __IFRAME_SERVER_CONTEXT__ = \"iframe:server-context\";\nfunction getIframeServerContext() {\n return target18[__IFRAME_SERVER_CONTEXT__];\n}\nfunction setIframeServerContext(context) {\n target18[__IFRAME_SERVER_CONTEXT__] = context;\n}\n\n// src/messaging/presets/iframe/client.ts\nfunction createIframeClientChannel() {\n if (!isBrowser4) {\n return {\n post: (data) => {\n },\n on: (handler) => {\n }\n };\n }\n return {\n post: (data) => window.parent.postMessage(SuperJSON.stringify({\n event: __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY,\n data\n }), \"*\"),\n on: (handler) => window.addEventListener(\"message\", (event) => {\n try {\n const parsed = SuperJSON.parse(event.data);\n if (event.source === window.parent && parsed.event === __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY) {\n handler(parsed.data);\n }\n } catch (e) {\n }\n })\n };\n}\n\n// src/messaging/presets/iframe/server.ts\ninit_esm_shims();\nimport { isBrowser as isBrowser5 } from \"@vue/devtools-shared\";\nfunction createIframeServerChannel() {\n if (!isBrowser5) {\n return {\n post: (data) => {\n },\n on: (handler) => {\n }\n };\n }\n return {\n post: (data) => {\n var _a25;\n const iframe = getIframeServerContext();\n (_a25 = iframe == null ? void 0 : iframe.contentWindow) == null ? void 0 : _a25.postMessage(SuperJSON.stringify({\n event: __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY,\n data\n }), \"*\");\n },\n on: (handler) => {\n window.addEventListener(\"message\", (event) => {\n const iframe = getIframeServerContext();\n try {\n const parsed = SuperJSON.parse(event.data);\n if (event.source === (iframe == null ? void 0 : iframe.contentWindow) && parsed.event === __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY) {\n handler(parsed.data);\n }\n } catch (e) {\n }\n });\n }\n };\n}\n\n// src/messaging/presets/vite/index.ts\ninit_esm_shims();\n\n// src/messaging/presets/vite/client.ts\ninit_esm_shims();\n\n// src/messaging/presets/vite/context.ts\ninit_esm_shims();\nimport { target as target19 } from \"@vue/devtools-shared\";\nvar __DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY = \"__devtools-kit-vite-messaging-event-key__\";\nvar __VITE_CLIENT_CONTEXT__ = \"vite:client-context\";\nvar __VITE_SERVER_CONTEXT__ = \"vite:server-context\";\nfunction getViteClientContext() {\n return target19[__VITE_CLIENT_CONTEXT__];\n}\nfunction setViteClientContext(context) {\n target19[__VITE_CLIENT_CONTEXT__] = context;\n}\nfunction getViteServerContext() {\n return target19[__VITE_SERVER_CONTEXT__];\n}\nfunction setViteServerContext(context) {\n target19[__VITE_SERVER_CONTEXT__] = context;\n}\n\n// src/messaging/presets/vite/client.ts\nfunction createViteClientChannel() {\n const client = getViteClientContext();\n return {\n post: (data) => {\n client == null ? void 0 : client.send(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, SuperJSON.stringify(data));\n },\n on: (handler) => {\n client == null ? void 0 : client.on(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, (event) => {\n handler(SuperJSON.parse(event));\n });\n }\n };\n}\n\n// src/messaging/presets/vite/server.ts\ninit_esm_shims();\nfunction createViteServerChannel() {\n var _a25;\n const viteServer = getViteServerContext();\n const ws = (_a25 = viteServer.hot) != null ? _a25 : viteServer.ws;\n return {\n post: (data) => ws == null ? void 0 : ws.send(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, SuperJSON.stringify(data)),\n on: (handler) => ws == null ? void 0 : ws.on(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, (event) => {\n handler(SuperJSON.parse(event));\n })\n };\n}\n\n// src/messaging/presets/ws/index.ts\ninit_esm_shims();\n\n// src/messaging/presets/ws/client.ts\ninit_esm_shims();\n\n// src/messaging/presets/ws/context.ts\ninit_esm_shims();\nimport { target as target20 } from \"@vue/devtools-shared\";\n\n// src/messaging/presets/ws/server.ts\ninit_esm_shims();\n\n// src/messaging/index.ts\nvar _a19, _b19;\n(_b19 = (_a19 = target21).__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__) != null ? _b19 : _a19.__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__ = [];\nvar _a20, _b20;\n(_b20 = (_a20 = target21).__VUE_DEVTOOLS_KIT_RPC_CLIENT__) != null ? _b20 : _a20.__VUE_DEVTOOLS_KIT_RPC_CLIENT__ = null;\nvar _a21, _b21;\n(_b21 = (_a21 = target21).__VUE_DEVTOOLS_KIT_RPC_SERVER__) != null ? _b21 : _a21.__VUE_DEVTOOLS_KIT_RPC_SERVER__ = null;\nvar _a22, _b22;\n(_b22 = (_a22 = target21).__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__) != null ? _b22 : _a22.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__ = null;\nvar _a23, _b23;\n(_b23 = (_a23 = target21).__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__) != null ? _b23 : _a23.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__ = null;\nvar _a24, _b24;\n(_b24 = (_a24 = target21).__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__) != null ? _b24 : _a24.__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__ = null;\nfunction setRpcClientToGlobal(rpc) {\n target21.__VUE_DEVTOOLS_KIT_RPC_CLIENT__ = rpc;\n}\nfunction setRpcServerToGlobal(rpc) {\n target21.__VUE_DEVTOOLS_KIT_RPC_SERVER__ = rpc;\n}\nfunction getRpcClient() {\n return target21.__VUE_DEVTOOLS_KIT_RPC_CLIENT__;\n}\nfunction getRpcServer() {\n return target21.__VUE_DEVTOOLS_KIT_RPC_SERVER__;\n}\nfunction setViteRpcClientToGlobal(rpc) {\n target21.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__ = rpc;\n}\nfunction setViteRpcServerToGlobal(rpc) {\n target21.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__ = rpc;\n}\nfunction getViteRpcClient() {\n return target21.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__;\n}\nfunction getViteRpcServer() {\n return target21.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__;\n}\nfunction getChannel(preset, host = \"client\") {\n const channel = {\n iframe: {\n client: createIframeClientChannel,\n server: createIframeServerChannel\n }[host],\n electron: {\n client: createElectronClientChannel,\n proxy: createElectronProxyChannel,\n server: createElectronServerChannel\n }[host],\n vite: {\n client: createViteClientChannel,\n server: createViteServerChannel\n }[host],\n broadcast: {\n client: createBroadcastChannel,\n server: createBroadcastChannel\n }[host],\n extension: {\n client: createExtensionClientChannel,\n proxy: createExtensionProxyChannel,\n server: createExtensionServerChannel\n }[host]\n }[preset];\n return channel();\n}\nfunction createRpcClient(functions, options = {}) {\n const { channel: _channel, options: _options, preset } = options;\n const channel = preset ? getChannel(preset) : _channel;\n const rpc = createBirpc(functions, {\n ..._options,\n ...channel,\n timeout: -1\n });\n if (preset === \"vite\") {\n setViteRpcClientToGlobal(rpc);\n return;\n }\n setRpcClientToGlobal(rpc);\n return rpc;\n}\nfunction createRpcServer(functions, options = {}) {\n const { channel: _channel, options: _options, preset } = options;\n const channel = preset ? getChannel(preset, \"server\") : _channel;\n const rpcServer = getRpcServer();\n if (!rpcServer) {\n const group = createBirpcGroup(functions, [channel], {\n ..._options,\n timeout: -1\n });\n if (preset === \"vite\") {\n setViteRpcServerToGlobal(group);\n return;\n }\n setRpcServerToGlobal(group);\n } else {\n rpcServer.updateChannels((channels) => {\n channels.push(channel);\n });\n }\n}\nfunction createRpcProxy(options = {}) {\n const { channel: _channel, options: _options, preset } = options;\n const channel = preset ? getChannel(preset, \"proxy\") : _channel;\n return createBirpc({}, {\n ..._options,\n ...channel,\n timeout: -1\n });\n}\n\n// src/shared/index.ts\ninit_esm_shims();\n\n// src/shared/env.ts\ninit_esm_shims();\n\n// src/shared/time.ts\ninit_esm_shims();\n\n// src/shared/util.ts\ninit_esm_shims();\n\n// src/core/component/state/replacer.ts\ninit_esm_shims();\n\n// src/core/component/state/custom.ts\ninit_esm_shims();\nfunction getFunctionDetails(func) {\n let string = \"\";\n let matches = null;\n try {\n string = Function.prototype.toString.call(func);\n matches = String.prototype.match.call(string, /\\([\\s\\S]*?\\)/);\n } catch (e) {\n }\n const match = matches && matches[0];\n const args = typeof match === \"string\" ? match : \"(?)\";\n const name = typeof func.name === \"string\" ? func.name : \"\";\n return {\n _custom: {\n type: \"function\",\n displayText: `function ${escape(name)}${args}`,\n tooltipText: string.trim() ? `
${string}
` : null\n }\n };\n}\nfunction getBigIntDetails(val) {\n const stringifiedBigInt = BigInt.prototype.toString.call(val);\n return {\n _custom: {\n type: \"bigint\",\n displayText: `BigInt(${stringifiedBigInt})`,\n value: stringifiedBigInt\n }\n };\n}\nfunction getDateDetails(val) {\n const date = new Date(val.getTime());\n date.setMinutes(date.getMinutes() - date.getTimezoneOffset());\n return {\n _custom: {\n type: \"date\",\n displayText: Date.prototype.toString.call(val),\n value: date.toISOString().slice(0, -1)\n }\n };\n}\nfunction getMapDetails(val) {\n const list = Object.fromEntries(val);\n return {\n _custom: {\n type: \"map\",\n displayText: \"Map\",\n value: list,\n readOnly: true,\n fields: {\n abstract: true\n }\n }\n };\n}\nfunction getSetDetails(val) {\n const list = Array.from(val);\n return {\n _custom: {\n type: \"set\",\n displayText: `Set[${list.length}]`,\n value: list,\n readOnly: true\n }\n };\n}\nfunction getCaughtGetters(store) {\n const getters = {};\n const origGetters = store.getters || {};\n const keys = Object.keys(origGetters);\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n Object.defineProperty(getters, key, {\n enumerable: true,\n get: () => {\n try {\n return origGetters[key];\n } catch (e) {\n return e;\n }\n }\n });\n }\n return getters;\n}\nfunction reduceStateList(list) {\n if (!list.length)\n return void 0;\n return list.reduce((map, item) => {\n const key = item.type || \"data\";\n const obj = map[key] = map[key] || {};\n obj[item.key] = item.value;\n return map;\n }, {});\n}\nfunction namedNodeMapToObject(map) {\n const result = {};\n const l = map.length;\n for (let i = 0; i < l; i++) {\n const node = map.item(i);\n result[node.name] = node.value;\n }\n return result;\n}\nfunction getStoreDetails(store) {\n return {\n _custom: {\n type: \"store\",\n displayText: \"Store\",\n value: {\n state: store.state,\n getters: getCaughtGetters(store)\n },\n fields: {\n abstract: true\n }\n }\n };\n}\nfunction getRouterDetails(router) {\n return {\n _custom: {\n type: \"router\",\n displayText: \"VueRouter\",\n value: {\n options: router.options,\n currentRoute: router.currentRoute\n },\n fields: {\n abstract: true\n }\n }\n };\n}\nfunction getInstanceDetails(instance) {\n if (instance._)\n instance = instance._;\n const state = processInstanceState(instance);\n return {\n _custom: {\n type: \"component\",\n id: instance.__VUE_DEVTOOLS_NEXT_UID__,\n displayText: getInstanceName(instance),\n tooltipText: \"Component instance\",\n value: reduceStateList(state),\n fields: {\n abstract: true\n }\n }\n };\n}\nfunction getComponentDefinitionDetails(definition) {\n let display = getComponentName(definition);\n if (display) {\n if (definition.name && definition.__file)\n display += ` (${definition.__file})`;\n } else {\n display = \"Unknown Component\";\n }\n return {\n _custom: {\n type: \"component-definition\",\n displayText: display,\n tooltipText: \"Component definition\",\n ...definition.__file ? {\n file: definition.__file\n } : {}\n }\n };\n}\nfunction getHTMLElementDetails(value) {\n try {\n return {\n _custom: {\n type: \"HTMLElement\",\n displayText: `<${value.tagName.toLowerCase()}>`,\n value: namedNodeMapToObject(value.attributes)\n }\n };\n } catch (e) {\n return {\n _custom: {\n type: \"HTMLElement\",\n displayText: `${String(value)}`\n }\n };\n }\n}\nfunction tryGetRefValue(ref) {\n if (ensurePropertyExists(ref, \"_value\", true)) {\n return ref._value;\n }\n if (ensurePropertyExists(ref, \"value\", true)) {\n return ref.value;\n }\n}\nfunction getObjectDetails(object) {\n var _a25, _b25, _c, _d;\n const info = getSetupStateType(object);\n const isState = info.ref || info.computed || info.reactive;\n if (isState) {\n const stateTypeName = info.computed ? \"Computed\" : info.ref ? \"Ref\" : info.reactive ? \"Reactive\" : null;\n const value = toRaw2(info.reactive ? object : tryGetRefValue(object));\n const raw = ensurePropertyExists(object, \"effect\") ? ((_b25 = (_a25 = object.effect) == null ? void 0 : _a25.raw) == null ? void 0 : _b25.toString()) || ((_d = (_c = object.effect) == null ? void 0 : _c.fn) == null ? void 0 : _d.toString()) : null;\n return {\n _custom: {\n type: stateTypeName == null ? void 0 : stateTypeName.toLowerCase(),\n stateTypeName,\n value,\n ...raw ? { tooltipText: `${raw}` } : {}\n }\n };\n }\n if (ensurePropertyExists(object, \"__asyncLoader\") && typeof object.__asyncLoader === \"function\") {\n return {\n _custom: {\n type: \"component-definition\",\n display: \"Async component definition\"\n }\n };\n }\n}\n\n// src/core/component/state/replacer.ts\nfunction stringifyReplacer(key, _value, depth, seenInstance) {\n var _a25;\n if (key === \"compilerOptions\")\n return;\n const val = this[key];\n const type = typeof val;\n if (Array.isArray(val)) {\n const l = val.length;\n if (l > MAX_ARRAY_SIZE) {\n return {\n _isArray: true,\n length: l,\n items: val.slice(0, MAX_ARRAY_SIZE)\n };\n }\n return val;\n } else if (typeof val === \"string\") {\n if (val.length > MAX_STRING_SIZE)\n return `${val.substring(0, MAX_STRING_SIZE)}... (${val.length} total length)`;\n else\n return val;\n } else if (type === \"undefined\") {\n return UNDEFINED;\n } else if (val === Number.POSITIVE_INFINITY) {\n return INFINITY;\n } else if (val === Number.NEGATIVE_INFINITY) {\n return NEGATIVE_INFINITY;\n } else if (typeof val === \"function\") {\n return getFunctionDetails(val);\n } else if (type === \"symbol\") {\n return `[native Symbol ${Symbol.prototype.toString.call(val)}]`;\n } else if (typeof val === \"bigint\") {\n return getBigIntDetails(val);\n } else if (val !== null && typeof val === \"object\") {\n const proto = Object.prototype.toString.call(val);\n if (proto === \"[object Map]\") {\n return getMapDetails(val);\n } else if (proto === \"[object Set]\") {\n return getSetDetails(val);\n } else if (proto === \"[object RegExp]\") {\n return `[native RegExp ${RegExp.prototype.toString.call(val)}]`;\n } else if (proto === \"[object Date]\") {\n return getDateDetails(val);\n } else if (proto === \"[object Error]\") {\n return `[native Error ${val.message}<>${val.stack}]`;\n } else if (ensurePropertyExists(val, \"state\", true) && ensurePropertyExists(val, \"_vm\", true)) {\n return getStoreDetails(val);\n } else if (val.constructor && val.constructor.name === \"VueRouter\") {\n return getRouterDetails(val);\n } else if (isVueInstance(val)) {\n const componentVal = getInstanceDetails(val);\n const parentInstanceDepth = seenInstance == null ? void 0 : seenInstance.get(val);\n if (parentInstanceDepth && parentInstanceDepth < depth) {\n return `[[CircularRef]] <${componentVal._custom.displayText}>`;\n }\n seenInstance == null ? void 0 : seenInstance.set(val, depth);\n return componentVal;\n } else if (ensurePropertyExists(val, \"render\", true) && typeof val.render === \"function\") {\n return getComponentDefinitionDetails(val);\n } else if (val.constructor && val.constructor.name === \"VNode\") {\n return `[native VNode <${val.tag}>]`;\n } else if (typeof HTMLElement !== \"undefined\" && val instanceof HTMLElement) {\n return getHTMLElementDetails(val);\n } else if (((_a25 = val.constructor) == null ? void 0 : _a25.name) === \"Store\" && \"_wrappedGetters\" in val) {\n return \"[object Store]\";\n } else if (ensurePropertyExists(val, \"currentRoute\", true)) {\n return \"[object Router]\";\n }\n const customDetails = getObjectDetails(val);\n if (customDetails != null)\n return customDetails;\n } else if (Number.isNaN(val)) {\n return NAN;\n }\n return sanitize(val);\n}\n\n// src/shared/transfer.ts\ninit_esm_shims();\nvar MAX_SERIALIZED_SIZE = 2 * 1024 * 1024;\nfunction isObject(_data, proto) {\n return proto === \"[object Object]\";\n}\nfunction isArray3(_data, proto) {\n return proto === \"[object Array]\";\n}\nfunction isVueReactiveLinkNode(node) {\n var _a25;\n const constructorName = (_a25 = node == null ? void 0 : node.constructor) == null ? void 0 : _a25.name;\n return constructorName === \"Dep\" && \"activeLink\" in node || constructorName === \"Link\" && \"dep\" in node;\n}\nfunction encode(data, replacer, list, seen, depth = 0, seenVueInstance = /* @__PURE__ */ new Map()) {\n let stored;\n let key;\n let value;\n let i;\n let l;\n const seenIndex = seen.get(data);\n if (seenIndex != null)\n return seenIndex;\n const index = list.length;\n const proto = Object.prototype.toString.call(data);\n if (isObject(data, proto)) {\n if (isVueReactiveLinkNode(data)) {\n return index;\n }\n stored = {};\n seen.set(data, index);\n list.push(stored);\n const keys = Object.keys(data);\n for (i = 0, l = keys.length; i < l; i++) {\n key = keys[i];\n if (key === \"compilerOptions\")\n return index;\n value = data[key];\n const isVm = value != null && isObject(value, Object.prototype.toString.call(data)) && isVueInstance(value);\n try {\n if (replacer) {\n value = replacer.call(data, key, value, depth, seenVueInstance);\n }\n } catch (e) {\n value = e;\n }\n stored[key] = encode(value, replacer, list, seen, depth + 1, seenVueInstance);\n if (isVm) {\n seenVueInstance.delete(value);\n }\n }\n } else if (isArray3(data, proto)) {\n stored = [];\n seen.set(data, index);\n list.push(stored);\n for (i = 0, l = data.length; i < l; i++) {\n try {\n value = data[i];\n if (replacer)\n value = replacer.call(data, i, value, depth, seenVueInstance);\n } catch (e) {\n value = e;\n }\n stored[i] = encode(value, replacer, list, seen, depth + 1, seenVueInstance);\n }\n } else {\n list.push(data);\n }\n return index;\n}\nfunction decode(list, reviver2 = null) {\n let i = list.length;\n let j, k, data, key, value, proto;\n while (i--) {\n data = list[i];\n proto = Object.prototype.toString.call(data);\n if (proto === \"[object Object]\") {\n const keys = Object.keys(data);\n for (j = 0, k = keys.length; j < k; j++) {\n key = keys[j];\n value = list[data[key]];\n if (reviver2)\n value = reviver2.call(data, key, value);\n data[key] = value;\n }\n } else if (proto === \"[object Array]\") {\n for (j = 0, k = data.length; j < k; j++) {\n value = list[data[j]];\n if (reviver2)\n value = reviver2.call(data, j, value);\n data[j] = value;\n }\n }\n }\n}\nfunction stringifyCircularAutoChunks(data, replacer = null, space = null) {\n let result;\n try {\n result = arguments.length === 1 ? JSON.stringify(data) : JSON.stringify(data, (k, v) => {\n var _a25;\n return (_a25 = replacer == null ? void 0 : replacer(k, v)) == null ? void 0 : _a25.call(this);\n }, space);\n } catch (e) {\n result = stringifyStrictCircularAutoChunks(data, replacer, space);\n }\n if (result.length > MAX_SERIALIZED_SIZE) {\n const chunkCount = Math.ceil(result.length / MAX_SERIALIZED_SIZE);\n const chunks = [];\n for (let i = 0; i < chunkCount; i++)\n chunks.push(result.slice(i * MAX_SERIALIZED_SIZE, (i + 1) * MAX_SERIALIZED_SIZE));\n return chunks;\n }\n return result;\n}\nfunction stringifyStrictCircularAutoChunks(data, replacer = null, space = null) {\n const list = [];\n encode(data, replacer, list, /* @__PURE__ */ new Map());\n return space ? ` ${JSON.stringify(list, null, space)}` : ` ${JSON.stringify(list)}`;\n}\nfunction parseCircularAutoChunks(data, reviver2 = null) {\n if (Array.isArray(data))\n data = data.join(\"\");\n const hasCircular = /^\\s/.test(data);\n if (!hasCircular) {\n return arguments.length === 1 ? JSON.parse(data) : JSON.parse(data, reviver2);\n } else {\n const list = JSON.parse(data);\n decode(list, reviver2);\n return list[0];\n }\n}\n\n// src/shared/util.ts\nfunction stringify2(data) {\n return stringifyCircularAutoChunks(data, stringifyReplacer);\n}\nfunction parse2(data, revive2 = false) {\n if (data == void 0)\n return {};\n return revive2 ? parseCircularAutoChunks(data, reviver) : parseCircularAutoChunks(data);\n}\n\n// src/index.ts\nvar devtools = {\n hook,\n init: () => {\n initDevTools();\n },\n get ctx() {\n return devtoolsContext;\n },\n get api() {\n return devtoolsContext.api;\n }\n};\nexport {\n DevToolsContextHookKeys,\n DevToolsMessagingHookKeys,\n DevToolsV6PluginAPIHookKeys,\n INFINITY,\n NAN,\n NEGATIVE_INFINITY,\n ROUTER_INFO_KEY,\n ROUTER_KEY,\n UNDEFINED,\n activeAppRecord,\n addCustomCommand,\n addCustomTab,\n addDevToolsAppRecord,\n addDevToolsPluginToBuffer,\n addInspector,\n callConnectedUpdatedHook,\n callDevToolsPluginSetupFn,\n callInspectorUpdatedHook,\n callStateUpdatedHook,\n createComponentsDevToolsPlugin,\n createDevToolsApi,\n createDevToolsCtxHooks,\n createRpcClient,\n createRpcProxy,\n createRpcServer,\n devtools,\n devtoolsAppRecords,\n devtoolsContext,\n devtoolsInspector,\n devtoolsPluginBuffer,\n devtoolsRouter,\n devtoolsRouterInfo,\n devtoolsState,\n escape,\n formatInspectorStateValue,\n getActiveInspectors,\n getDevToolsEnv,\n getExtensionClientContext,\n getInspector,\n getInspectorActions,\n getInspectorInfo,\n getInspectorNodeActions,\n getInspectorStateValueType,\n getRaw,\n getRpcClient,\n getRpcServer,\n getViteRpcClient,\n getViteRpcServer,\n initDevTools,\n isPlainObject,\n onDevToolsClientConnected,\n onDevToolsConnected,\n parse2 as parse,\n registerDevToolsPlugin,\n removeCustomCommand,\n removeDevToolsAppRecord,\n removeRegisteredPluginApp,\n resetDevToolsState,\n setActiveAppRecord,\n setActiveAppRecordId,\n setDevToolsEnv,\n setElectronClientContext,\n setElectronProxyContext,\n setElectronServerContext,\n setExtensionClientContext,\n setIframeServerContext,\n setOpenInEditorBaseUrl,\n setRpcServerToGlobal,\n setViteClientContext,\n setViteRpcClientToGlobal,\n setViteRpcServerToGlobal,\n setViteServerContext,\n setupDevToolsPlugin,\n stringify2 as stringify,\n toEdit,\n toSubmit,\n toggleClientConnected,\n toggleComponentInspectorEnabled,\n toggleHighPerfMode,\n updateDevToolsClientDetected,\n updateDevToolsState,\n updateTimelineLayersState\n};\n"], - "mappings": "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ACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAU;AAAA,QACV,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAU;AAAA,QACV,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAU;AAAA,QACV,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAU;AAAA,QACV,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAU;AAAA;AAAA;AAAA,QAGV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,MAAgB;AAAA,QAChB,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,MAAgB;AAAA,QAChB,MAAgB;AAAA,QAChB,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,QAA4B;AAAA,QAC5B,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA;AAAA,QAGV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA;AAAA;AAAA,QAGV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,MAAgB;AAAA,QAChB,MAAgB;AAAA;AAAA,QAEhB,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA;AAAA,QAGV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA;AAAA,QAGV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA;AAAA,QAGV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA;AAAA,QAGV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAOV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA;AAAA,QAGV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA;AAAA,QAEV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAQ;AAAA,QACR,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAQ;AAAA,QACR,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAU;AAAA,QACV,KAAQ;AAAA,QACR,KAAQ;AAAA,QACR,KAAU;AAAA,QACV,KAAU;AAAA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", - "names": ["hooks", "hooks", "hook", "hook", "hooks", "clearTimeout", "setTimeout", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__esm", "__commonJS", "__copyProps", "__toESM", "init_esm_shims", "init_esm_shims", "init_esm_shims", "_a", "init_esm_shims", "init_esm_shims", "init_esm_shims", "_a2", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "__toESM", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "init_esm_shims", "_a22", "init_esm_shims", "init_esm_shims"] + "sourcesContent": ["//#region rolldown:runtime\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJS = (cb, mod) => function() {\n\treturn mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target$1) => (target$1 = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target$1, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target$1, mod));\n\n//#endregion\n//#region src/constants.ts\nconst VIEW_MODE_STORAGE_KEY = \"__vue-devtools-view-mode__\";\nconst VITE_PLUGIN_DETECTED_STORAGE_KEY = \"__vue-devtools-vite-plugin-detected__\";\nconst VITE_PLUGIN_CLIENT_URL_STORAGE_KEY = \"__vue-devtools-vite-plugin-client-url__\";\nconst BROADCAST_CHANNEL_NAME = \"__vue-devtools-broadcast-channel__\";\n\n//#endregion\n//#region src/env.ts\nconst isBrowser = typeof navigator !== \"undefined\";\nconst target = typeof window !== \"undefined\" ? window : typeof globalThis !== \"undefined\" ? globalThis : typeof global !== \"undefined\" ? global : {};\nconst isInChromePanel = typeof target.chrome !== \"undefined\" && !!target.chrome.devtools;\nconst isInIframe = isBrowser && target.self !== target.top;\nconst isInElectron = typeof navigator !== \"undefined\" && navigator.userAgent?.toLowerCase().includes(\"electron\");\nconst isNuxtApp = typeof window !== \"undefined\" && !!window.__NUXT__;\nconst isInSeparateWindow = !isInIframe && !isInChromePanel && !isInElectron;\n\n//#endregion\n//#region ../../node_modules/.pnpm/rfdc@1.4.1/node_modules/rfdc/index.js\nvar require_rfdc = /* @__PURE__ */ __commonJS({ \"../../node_modules/.pnpm/rfdc@1.4.1/node_modules/rfdc/index.js\": ((exports, module) => {\n\tmodule.exports = rfdc$1;\n\tfunction copyBuffer(cur) {\n\t\tif (cur instanceof Buffer) return Buffer.from(cur);\n\t\treturn new cur.constructor(cur.buffer.slice(), cur.byteOffset, cur.length);\n\t}\n\tfunction rfdc$1(opts) {\n\t\topts = opts || {};\n\t\tif (opts.circles) return rfdcCircles(opts);\n\t\tconst constructorHandlers = /* @__PURE__ */ new Map();\n\t\tconstructorHandlers.set(Date, (o) => new Date(o));\n\t\tconstructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)));\n\t\tconstructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)));\n\t\tif (opts.constructorHandlers) for (const handler$1 of opts.constructorHandlers) constructorHandlers.set(handler$1[0], handler$1[1]);\n\t\tlet handler = null;\n\t\treturn opts.proto ? cloneProto : clone;\n\t\tfunction cloneArray(a, fn) {\n\t\t\tconst keys = Object.keys(a);\n\t\t\tconst a2 = new Array(keys.length);\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\tconst k = keys[i];\n\t\t\t\tconst cur = a[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) a2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) a2[k] = handler(cur, fn);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) a2[k] = copyBuffer(cur);\n\t\t\t\telse a2[k] = fn(cur);\n\t\t\t}\n\t\t\treturn a2;\n\t\t}\n\t\tfunction clone(o) {\n\t\t\tif (typeof o !== \"object\" || o === null) return o;\n\t\t\tif (Array.isArray(o)) return cloneArray(o, clone);\n\t\t\tif (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, clone);\n\t\t\tconst o2 = {};\n\t\t\tfor (const k in o) {\n\t\t\t\tif (Object.hasOwnProperty.call(o, k) === false) continue;\n\t\t\t\tconst cur = o[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) o2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, clone);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur);\n\t\t\t\telse o2[k] = clone(cur);\n\t\t\t}\n\t\t\treturn o2;\n\t\t}\n\t\tfunction cloneProto(o) {\n\t\t\tif (typeof o !== \"object\" || o === null) return o;\n\t\t\tif (Array.isArray(o)) return cloneArray(o, cloneProto);\n\t\t\tif (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, cloneProto);\n\t\t\tconst o2 = {};\n\t\t\tfor (const k in o) {\n\t\t\t\tconst cur = o[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) o2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, cloneProto);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur);\n\t\t\t\telse o2[k] = cloneProto(cur);\n\t\t\t}\n\t\t\treturn o2;\n\t\t}\n\t}\n\tfunction rfdcCircles(opts) {\n\t\tconst refs = [];\n\t\tconst refsNew = [];\n\t\tconst constructorHandlers = /* @__PURE__ */ new Map();\n\t\tconstructorHandlers.set(Date, (o) => new Date(o));\n\t\tconstructorHandlers.set(Map, (o, fn) => new Map(cloneArray(Array.from(o), fn)));\n\t\tconstructorHandlers.set(Set, (o, fn) => new Set(cloneArray(Array.from(o), fn)));\n\t\tif (opts.constructorHandlers) for (const handler$1 of opts.constructorHandlers) constructorHandlers.set(handler$1[0], handler$1[1]);\n\t\tlet handler = null;\n\t\treturn opts.proto ? cloneProto : clone;\n\t\tfunction cloneArray(a, fn) {\n\t\t\tconst keys = Object.keys(a);\n\t\t\tconst a2 = new Array(keys.length);\n\t\t\tfor (let i = 0; i < keys.length; i++) {\n\t\t\t\tconst k = keys[i];\n\t\t\t\tconst cur = a[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) a2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) a2[k] = handler(cur, fn);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) a2[k] = copyBuffer(cur);\n\t\t\t\telse {\n\t\t\t\t\tconst index = refs.indexOf(cur);\n\t\t\t\t\tif (index !== -1) a2[k] = refsNew[index];\n\t\t\t\t\telse a2[k] = fn(cur);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn a2;\n\t\t}\n\t\tfunction clone(o) {\n\t\t\tif (typeof o !== \"object\" || o === null) return o;\n\t\t\tif (Array.isArray(o)) return cloneArray(o, clone);\n\t\t\tif (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, clone);\n\t\t\tconst o2 = {};\n\t\t\trefs.push(o);\n\t\t\trefsNew.push(o2);\n\t\t\tfor (const k in o) {\n\t\t\t\tif (Object.hasOwnProperty.call(o, k) === false) continue;\n\t\t\t\tconst cur = o[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) o2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, clone);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur);\n\t\t\t\telse {\n\t\t\t\t\tconst i = refs.indexOf(cur);\n\t\t\t\t\tif (i !== -1) o2[k] = refsNew[i];\n\t\t\t\t\telse o2[k] = clone(cur);\n\t\t\t\t}\n\t\t\t}\n\t\t\trefs.pop();\n\t\t\trefsNew.pop();\n\t\t\treturn o2;\n\t\t}\n\t\tfunction cloneProto(o) {\n\t\t\tif (typeof o !== \"object\" || o === null) return o;\n\t\t\tif (Array.isArray(o)) return cloneArray(o, cloneProto);\n\t\t\tif (o.constructor !== Object && (handler = constructorHandlers.get(o.constructor))) return handler(o, cloneProto);\n\t\t\tconst o2 = {};\n\t\t\trefs.push(o);\n\t\t\trefsNew.push(o2);\n\t\t\tfor (const k in o) {\n\t\t\t\tconst cur = o[k];\n\t\t\t\tif (typeof cur !== \"object\" || cur === null) o2[k] = cur;\n\t\t\t\telse if (cur.constructor !== Object && (handler = constructorHandlers.get(cur.constructor))) o2[k] = handler(cur, cloneProto);\n\t\t\t\telse if (ArrayBuffer.isView(cur)) o2[k] = copyBuffer(cur);\n\t\t\t\telse {\n\t\t\t\t\tconst i = refs.indexOf(cur);\n\t\t\t\t\tif (i !== -1) o2[k] = refsNew[i];\n\t\t\t\t\telse o2[k] = cloneProto(cur);\n\t\t\t\t}\n\t\t\t}\n\t\t\trefs.pop();\n\t\t\trefsNew.pop();\n\t\t\treturn o2;\n\t\t}\n\t}\n}) });\n\n//#endregion\n//#region src/general.ts\nvar import_rfdc = /* @__PURE__ */ __toESM(require_rfdc(), 1);\nfunction NOOP() {}\nconst isNumeric = (str) => `${+str}` === str;\nconst isMacOS = () => navigator?.platform ? navigator?.platform.toLowerCase().includes(\"mac\") : /Macintosh/.test(navigator.userAgent);\nconst classifyRE = /(?:^|[-_/])(\\w)/g;\nconst camelizeRE = /-(\\w)/g;\nconst kebabizeRE = /([a-z0-9])([A-Z])/g;\nfunction toUpper(_, c) {\n\treturn c ? c.toUpperCase() : \"\";\n}\nfunction classify(str) {\n\treturn str && `${str}`.replace(classifyRE, toUpper);\n}\nfunction camelize(str) {\n\treturn str && str.replace(camelizeRE, toUpper);\n}\nfunction kebabize(str) {\n\treturn str && str.replace(kebabizeRE, (_, lowerCaseCharacter, upperCaseLetter) => {\n\t\treturn `${lowerCaseCharacter}-${upperCaseLetter}`;\n\t}).toLowerCase();\n}\nfunction basename(filename, ext) {\n\tlet normalizedFilename = filename.replace(/^[a-z]:/i, \"\").replace(/\\\\/g, \"/\");\n\tif (normalizedFilename.endsWith(`index${ext}`)) normalizedFilename = normalizedFilename.replace(`/index${ext}`, ext);\n\tconst lastSlashIndex = normalizedFilename.lastIndexOf(\"/\");\n\tconst baseNameWithExt = normalizedFilename.substring(lastSlashIndex + 1);\n\tif (ext) {\n\t\tconst extIndex = baseNameWithExt.lastIndexOf(ext);\n\t\treturn baseNameWithExt.substring(0, extIndex);\n\t}\n\treturn \"\";\n}\nfunction sortByKey(state) {\n\treturn state && state.slice().sort((a, b) => {\n\t\tif (a.key < b.key) return -1;\n\t\tif (a.key > b.key) return 1;\n\t\treturn 0;\n\t});\n}\nconst HTTP_URL_RE = /^https?:\\/\\//;\n/**\n* Check a string is start with `/` or a valid http url\n*/\nfunction isUrlString(str) {\n\treturn str.startsWith(\"/\") || HTTP_URL_RE.test(str);\n}\n/**\n* @copyright [rfdc](https://github.com/davidmarkclements/rfdc)\n* @description A really fast deep clone alternative\n*/\nconst deepClone = (0, import_rfdc.default)({ circles: true });\nfunction randomStr() {\n\treturn Math.random().toString(36).slice(2);\n}\nfunction isObject(value) {\n\treturn typeof value === \"object\" && !Array.isArray(value) && value !== null;\n}\nfunction isArray(value) {\n\treturn Array.isArray(value);\n}\nfunction isSet(value) {\n\treturn value instanceof Set;\n}\nfunction isMap(value) {\n\treturn value instanceof Map;\n}\n\n//#endregion\nexport { BROADCAST_CHANNEL_NAME, NOOP, VIEW_MODE_STORAGE_KEY, VITE_PLUGIN_CLIENT_URL_STORAGE_KEY, VITE_PLUGIN_DETECTED_STORAGE_KEY, basename, camelize, classify, deepClone, isArray, isBrowser, isInChromePanel, isInElectron, isInIframe, isInSeparateWindow, isMacOS, isMap, isNumeric, isNuxtApp, isObject, isSet, isUrlString, kebabize, randomStr, sortByKey, target };", "//#region src/index.ts\nconst DEBOUNCE_DEFAULTS = { trailing: true };\n/**\nDebounce functions\n@param fn - Promise-returning/async function to debounce.\n@param wait - Milliseconds to wait before calling `fn`. Default value is 25ms\n@returns A function that delays calling `fn` until after `wait` milliseconds have elapsed since the last time it was called.\n@example\n```\nimport { debounce } from 'perfect-debounce';\nconst expensiveCall = async input => input;\nconst debouncedFn = debounce(expensiveCall, 200);\nfor (const number of [1, 2, 3]) {\nconsole.log(await debouncedFn(number));\n}\n//=> 1\n//=> 2\n//=> 3\n```\n*/\nfunction debounce(fn, wait = 25, options = {}) {\n\toptions = {\n\t\t...DEBOUNCE_DEFAULTS,\n\t\t...options\n\t};\n\tif (!Number.isFinite(wait)) throw new TypeError(\"Expected `wait` to be a finite number\");\n\tlet leadingValue;\n\tlet timeout;\n\tlet resolveList = [];\n\tlet currentPromise;\n\tlet trailingArgs;\n\tconst applyFn = (_this, args) => {\n\t\tcurrentPromise = _applyPromised(fn, _this, args);\n\t\tcurrentPromise.finally(() => {\n\t\t\tcurrentPromise = null;\n\t\t\tif (options.trailing && trailingArgs && !timeout) {\n\t\t\t\tconst promise = applyFn(_this, trailingArgs);\n\t\t\t\ttrailingArgs = null;\n\t\t\t\treturn promise;\n\t\t\t}\n\t\t});\n\t\treturn currentPromise;\n\t};\n\tconst debounced = function(...args) {\n\t\tif (options.trailing) trailingArgs = args;\n\t\tif (currentPromise) return currentPromise;\n\t\treturn new Promise((resolve) => {\n\t\t\tconst shouldCallNow = !timeout && options.leading;\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = setTimeout(() => {\n\t\t\t\ttimeout = null;\n\t\t\t\tconst promise = options.leading ? leadingValue : applyFn(this, args);\n\t\t\t\ttrailingArgs = null;\n\t\t\t\tfor (const _resolve of resolveList) _resolve(promise);\n\t\t\t\tresolveList = [];\n\t\t\t}, wait);\n\t\t\tif (shouldCallNow) {\n\t\t\t\tleadingValue = applyFn(this, args);\n\t\t\t\tresolve(leadingValue);\n\t\t\t} else resolveList.push(resolve);\n\t\t});\n\t};\n\tconst _clearTimeout = (timer) => {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimeout = null;\n\t\t}\n\t};\n\tdebounced.isPending = () => !!timeout;\n\tdebounced.cancel = () => {\n\t\t_clearTimeout(timeout);\n\t\tresolveList = [];\n\t\ttrailingArgs = null;\n\t};\n\tdebounced.flush = () => {\n\t\t_clearTimeout(timeout);\n\t\tif (!trailingArgs || currentPromise) return;\n\t\tconst args = trailingArgs;\n\t\ttrailingArgs = null;\n\t\treturn applyFn(this, args);\n\t};\n\treturn debounced;\n}\nasync function _applyPromised(fn, _this, args) {\n\treturn await fn.apply(_this, args);\n}\n\n//#endregion\nexport { debounce };", "function flatHooks(configHooks, hooks = {}, parentName) {\n for (const key in configHooks) {\n const subHook = configHooks[key];\n const name = parentName ? `${parentName}:${key}` : key;\n if (typeof subHook === \"object\" && subHook !== null) {\n flatHooks(subHook, hooks, name);\n } else if (typeof subHook === \"function\") {\n hooks[name] = subHook;\n }\n }\n return hooks;\n}\nfunction mergeHooks(...hooks) {\n const finalHooks = {};\n for (const hook of hooks) {\n const flatenHook = flatHooks(hook);\n for (const key in flatenHook) {\n if (finalHooks[key]) {\n finalHooks[key].push(flatenHook[key]);\n } else {\n finalHooks[key] = [flatenHook[key]];\n }\n }\n }\n for (const key in finalHooks) {\n if (finalHooks[key].length > 1) {\n const array = finalHooks[key];\n finalHooks[key] = (...arguments_) => serial(array, (function_) => function_(...arguments_));\n } else {\n finalHooks[key] = finalHooks[key][0];\n }\n }\n return finalHooks;\n}\nfunction serial(tasks, function_) {\n return tasks.reduce(\n (promise, task) => promise.then(() => function_(task)),\n Promise.resolve()\n );\n}\nconst defaultTask = { run: (function_) => function_() };\nconst _createTask = () => defaultTask;\nconst createTask = typeof console.createTask !== \"undefined\" ? console.createTask : _createTask;\nfunction serialTaskCaller(hooks, args) {\n const name = args.shift();\n const task = createTask(name);\n return hooks.reduce(\n (promise, hookFunction) => promise.then(() => task.run(() => hookFunction(...args))),\n Promise.resolve()\n );\n}\nfunction parallelTaskCaller(hooks, args) {\n const name = args.shift();\n const task = createTask(name);\n return Promise.all(hooks.map((hook) => task.run(() => hook(...args))));\n}\nfunction serialCaller(hooks, arguments_) {\n return hooks.reduce(\n (promise, hookFunction) => promise.then(() => hookFunction(...arguments_ || [])),\n Promise.resolve()\n );\n}\nfunction parallelCaller(hooks, args) {\n return Promise.all(hooks.map((hook) => hook(...args || [])));\n}\nfunction callEachWith(callbacks, arg0) {\n for (const callback of [...callbacks]) {\n callback(arg0);\n }\n}\n\nclass Hookable {\n constructor() {\n this._hooks = {};\n this._before = void 0;\n this._after = void 0;\n this._deprecatedMessages = void 0;\n this._deprecatedHooks = {};\n this.hook = this.hook.bind(this);\n this.callHook = this.callHook.bind(this);\n this.callHookWith = this.callHookWith.bind(this);\n }\n hook(name, function_, options = {}) {\n if (!name || typeof function_ !== \"function\") {\n return () => {\n };\n }\n const originalName = name;\n let dep;\n while (this._deprecatedHooks[name]) {\n dep = this._deprecatedHooks[name];\n name = dep.to;\n }\n if (dep && !options.allowDeprecated) {\n let message = dep.message;\n if (!message) {\n message = `${originalName} hook has been deprecated` + (dep.to ? `, please use ${dep.to}` : \"\");\n }\n if (!this._deprecatedMessages) {\n this._deprecatedMessages = /* @__PURE__ */ new Set();\n }\n if (!this._deprecatedMessages.has(message)) {\n console.warn(message);\n this._deprecatedMessages.add(message);\n }\n }\n if (!function_.name) {\n try {\n Object.defineProperty(function_, \"name\", {\n get: () => \"_\" + name.replace(/\\W+/g, \"_\") + \"_hook_cb\",\n configurable: true\n });\n } catch {\n }\n }\n this._hooks[name] = this._hooks[name] || [];\n this._hooks[name].push(function_);\n return () => {\n if (function_) {\n this.removeHook(name, function_);\n function_ = void 0;\n }\n };\n }\n hookOnce(name, function_) {\n let _unreg;\n let _function = (...arguments_) => {\n if (typeof _unreg === \"function\") {\n _unreg();\n }\n _unreg = void 0;\n _function = void 0;\n return function_(...arguments_);\n };\n _unreg = this.hook(name, _function);\n return _unreg;\n }\n removeHook(name, function_) {\n if (this._hooks[name]) {\n const index = this._hooks[name].indexOf(function_);\n if (index !== -1) {\n this._hooks[name].splice(index, 1);\n }\n if (this._hooks[name].length === 0) {\n delete this._hooks[name];\n }\n }\n }\n deprecateHook(name, deprecated) {\n this._deprecatedHooks[name] = typeof deprecated === \"string\" ? { to: deprecated } : deprecated;\n const _hooks = this._hooks[name] || [];\n delete this._hooks[name];\n for (const hook of _hooks) {\n this.hook(name, hook);\n }\n }\n deprecateHooks(deprecatedHooks) {\n Object.assign(this._deprecatedHooks, deprecatedHooks);\n for (const name in deprecatedHooks) {\n this.deprecateHook(name, deprecatedHooks[name]);\n }\n }\n addHooks(configHooks) {\n const hooks = flatHooks(configHooks);\n const removeFns = Object.keys(hooks).map(\n (key) => this.hook(key, hooks[key])\n );\n return () => {\n for (const unreg of removeFns.splice(0, removeFns.length)) {\n unreg();\n }\n };\n }\n removeHooks(configHooks) {\n const hooks = flatHooks(configHooks);\n for (const key in hooks) {\n this.removeHook(key, hooks[key]);\n }\n }\n removeAllHooks() {\n for (const key in this._hooks) {\n delete this._hooks[key];\n }\n }\n callHook(name, ...arguments_) {\n arguments_.unshift(name);\n return this.callHookWith(serialTaskCaller, name, ...arguments_);\n }\n callHookParallel(name, ...arguments_) {\n arguments_.unshift(name);\n return this.callHookWith(parallelTaskCaller, name, ...arguments_);\n }\n callHookWith(caller, name, ...arguments_) {\n const event = this._before || this._after ? { name, args: arguments_, context: {} } : void 0;\n if (this._before) {\n callEachWith(this._before, event);\n }\n const result = caller(\n name in this._hooks ? [...this._hooks[name]] : [],\n arguments_\n );\n if (result instanceof Promise) {\n return result.finally(() => {\n if (this._after && event) {\n callEachWith(this._after, event);\n }\n });\n }\n if (this._after && event) {\n callEachWith(this._after, event);\n }\n return result;\n }\n beforeEach(function_) {\n this._before = this._before || [];\n this._before.push(function_);\n return () => {\n if (this._before !== void 0) {\n const index = this._before.indexOf(function_);\n if (index !== -1) {\n this._before.splice(index, 1);\n }\n }\n };\n }\n afterEach(function_) {\n this._after = this._after || [];\n this._after.push(function_);\n return () => {\n if (this._after !== void 0) {\n const index = this._after.indexOf(function_);\n if (index !== -1) {\n this._after.splice(index, 1);\n }\n }\n };\n }\n}\nfunction createHooks() {\n return new Hookable();\n}\n\nconst isBrowser = typeof window !== \"undefined\";\nfunction createDebugger(hooks, _options = {}) {\n const options = {\n inspect: isBrowser,\n group: isBrowser,\n filter: () => true,\n ..._options\n };\n const _filter = options.filter;\n const filter = typeof _filter === \"string\" ? (name) => name.startsWith(_filter) : _filter;\n const _tag = options.tag ? `[${options.tag}] ` : \"\";\n const logPrefix = (event) => _tag + event.name + \"\".padEnd(event._id, \"\\0\");\n const _idCtr = {};\n const unsubscribeBefore = hooks.beforeEach((event) => {\n if (filter !== void 0 && !filter(event.name)) {\n return;\n }\n _idCtr[event.name] = _idCtr[event.name] || 0;\n event._id = _idCtr[event.name]++;\n console.time(logPrefix(event));\n });\n const unsubscribeAfter = hooks.afterEach((event) => {\n if (filter !== void 0 && !filter(event.name)) {\n return;\n }\n if (options.group) {\n console.groupCollapsed(event.name);\n }\n if (options.inspect) {\n console.timeLog(logPrefix(event), event.args);\n } else {\n console.timeEnd(logPrefix(event));\n }\n if (options.group) {\n console.groupEnd();\n }\n _idCtr[event.name]--;\n });\n return {\n /** Stop debugging and remove listeners */\n close: () => {\n unsubscribeBefore();\n unsubscribeAfter();\n }\n };\n}\n\nexport { Hookable, createDebugger, createHooks, flatHooks, mergeHooks, parallelCaller, serial, serialCaller };\n", "const TYPE_REQUEST = \"q\";\nconst TYPE_RESPONSE = \"s\";\nconst DEFAULT_TIMEOUT = 6e4;\nfunction defaultSerialize(i) {\n return i;\n}\nconst defaultDeserialize = defaultSerialize;\nconst { clearTimeout, setTimeout } = globalThis;\nconst random = Math.random.bind(Math);\nfunction createBirpc($functions, options) {\n const {\n post,\n on,\n off = () => {\n },\n eventNames = [],\n serialize = defaultSerialize,\n deserialize = defaultDeserialize,\n resolver,\n bind = \"rpc\",\n timeout = DEFAULT_TIMEOUT\n } = options;\n let $closed = false;\n const _rpcPromiseMap = /* @__PURE__ */ new Map();\n let _promiseInit;\n async function _call(method, args, event, optional) {\n if ($closed)\n throw new Error(`[birpc] rpc is closed, cannot call \"${method}\"`);\n const req = { m: method, a: args, t: TYPE_REQUEST };\n if (optional)\n req.o = true;\n const send = async (_req) => post(serialize(_req));\n if (event) {\n await send(req);\n return;\n }\n if (_promiseInit) {\n try {\n await _promiseInit;\n } finally {\n _promiseInit = void 0;\n }\n }\n let { promise, resolve, reject } = createPromiseWithResolvers();\n const id = nanoid();\n req.i = id;\n let timeoutId;\n async function handler(newReq = req) {\n if (timeout >= 0) {\n timeoutId = setTimeout(() => {\n try {\n const handleResult = options.onTimeoutError?.(method, args);\n if (handleResult !== true)\n throw new Error(`[birpc] timeout on calling \"${method}\"`);\n } catch (e) {\n reject(e);\n }\n _rpcPromiseMap.delete(id);\n }, timeout);\n if (typeof timeoutId === \"object\")\n timeoutId = timeoutId.unref?.();\n }\n _rpcPromiseMap.set(id, { resolve, reject, timeoutId, method });\n await send(newReq);\n return promise;\n }\n try {\n if (options.onRequest)\n await options.onRequest(req, handler, resolve);\n else\n await handler();\n } catch (e) {\n if (options.onGeneralError?.(e) !== true)\n throw e;\n return;\n } finally {\n clearTimeout(timeoutId);\n _rpcPromiseMap.delete(id);\n }\n return promise;\n }\n const $call = (method, ...args) => _call(method, args, false);\n const $callOptional = (method, ...args) => _call(method, args, false, true);\n const $callEvent = (method, ...args) => _call(method, args, true);\n const $callRaw = (options2) => _call(options2.method, options2.args, options2.event, options2.optional);\n const builtinMethods = {\n $call,\n $callOptional,\n $callEvent,\n $callRaw,\n $rejectPendingCalls,\n get $closed() {\n return $closed;\n },\n $close,\n $functions\n };\n const rpc = new Proxy({}, {\n get(_, method) {\n if (Object.prototype.hasOwnProperty.call(builtinMethods, method))\n return builtinMethods[method];\n if (method === \"then\" && !eventNames.includes(\"then\") && !(\"then\" in $functions))\n return void 0;\n const sendEvent = (...args) => _call(method, args, true);\n if (eventNames.includes(method)) {\n sendEvent.asEvent = sendEvent;\n return sendEvent;\n }\n const sendCall = (...args) => _call(method, args, false);\n sendCall.asEvent = sendEvent;\n return sendCall;\n }\n });\n function $close(customError) {\n $closed = true;\n _rpcPromiseMap.forEach(({ reject, method }) => {\n const error = new Error(`[birpc] rpc is closed, cannot call \"${method}\"`);\n if (customError) {\n customError.cause ??= error;\n return reject(customError);\n }\n reject(error);\n });\n _rpcPromiseMap.clear();\n off(onMessage);\n }\n function $rejectPendingCalls(handler) {\n const entries = Array.from(_rpcPromiseMap.values());\n const handlerResults = entries.map(({ method, reject }) => {\n if (!handler) {\n return reject(new Error(`[birpc]: rejected pending call \"${method}\".`));\n }\n return handler({ method, reject });\n });\n _rpcPromiseMap.clear();\n return handlerResults;\n }\n async function onMessage(data, ...extra) {\n let msg;\n try {\n msg = deserialize(data);\n } catch (e) {\n if (options.onGeneralError?.(e) !== true)\n throw e;\n return;\n }\n if (msg.t === TYPE_REQUEST) {\n const { m: method, a: args, o: optional } = msg;\n let result, error;\n let fn = await (resolver ? resolver(method, $functions[method]) : $functions[method]);\n if (optional)\n fn ||= () => void 0;\n if (!fn) {\n error = new Error(`[birpc] function \"${method}\" not found`);\n } else {\n try {\n result = await fn.apply(bind === \"rpc\" ? rpc : $functions, args);\n } catch (e) {\n error = e;\n }\n }\n if (msg.i) {\n if (error && options.onError)\n options.onError(error, method, args);\n if (error && options.onFunctionError) {\n if (options.onFunctionError(error, method, args) === true)\n return;\n }\n if (!error) {\n try {\n await post(serialize({ t: TYPE_RESPONSE, i: msg.i, r: result }), ...extra);\n return;\n } catch (e) {\n error = e;\n if (options.onGeneralError?.(e, method, args) !== true)\n throw e;\n }\n }\n try {\n await post(serialize({ t: TYPE_RESPONSE, i: msg.i, e: error }), ...extra);\n } catch (e) {\n if (options.onGeneralError?.(e, method, args) !== true)\n throw e;\n }\n }\n } else {\n const { i: ack, r: result, e: error } = msg;\n const promise = _rpcPromiseMap.get(ack);\n if (promise) {\n clearTimeout(promise.timeoutId);\n if (error)\n promise.reject(error);\n else\n promise.resolve(result);\n }\n _rpcPromiseMap.delete(ack);\n }\n }\n _promiseInit = on(onMessage);\n return rpc;\n}\nconst cacheMap = /* @__PURE__ */ new WeakMap();\nfunction cachedMap(items, fn) {\n return items.map((i) => {\n let r = cacheMap.get(i);\n if (!r) {\n r = fn(i);\n cacheMap.set(i, r);\n }\n return r;\n });\n}\nfunction createBirpcGroup(functions, channels, options = {}) {\n const getChannels = () => typeof channels === \"function\" ? channels() : channels;\n const getClients = (channels2 = getChannels()) => cachedMap(channels2, (s) => createBirpc(functions, { ...options, ...s }));\n function _boardcast(method, args, event, optional) {\n const clients = getClients();\n return Promise.all(clients.map((c) => c.$callRaw({ method, args, event, optional })));\n }\n function $call(method, ...args) {\n return _boardcast(method, args, false);\n }\n function $callOptional(method, ...args) {\n return _boardcast(method, args, false, true);\n }\n function $callEvent(method, ...args) {\n return _boardcast(method, args, true);\n }\n const broadcastBuiltin = {\n $call,\n $callOptional,\n $callEvent\n };\n const broadcastProxy = new Proxy({}, {\n get(_, method) {\n if (Object.prototype.hasOwnProperty.call(broadcastBuiltin, method))\n return broadcastBuiltin[method];\n const client = getClients();\n const callbacks = client.map((c) => c[method]);\n const sendCall = (...args) => {\n return Promise.all(callbacks.map((i) => i(...args)));\n };\n sendCall.asEvent = async (...args) => {\n await Promise.all(callbacks.map((i) => i.asEvent(...args)));\n };\n return sendCall;\n }\n });\n function updateChannels(fn) {\n const channels2 = getChannels();\n fn?.(channels2);\n return getClients(channels2);\n }\n getClients();\n return {\n get clients() {\n return getClients();\n },\n functions,\n updateChannels,\n broadcast: broadcastProxy,\n /**\n * @deprecated use `broadcast`\n */\n // @ts-expect-error deprecated\n boardcast: broadcastProxy\n };\n}\nfunction createPromiseWithResolvers() {\n let resolve;\n let reject;\n const promise = new Promise((res, rej) => {\n resolve = res;\n reject = rej;\n });\n return { promise, resolve, reject };\n}\nconst urlAlphabet = \"useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict\";\nfunction nanoid(size = 21) {\n let id = \"\";\n let i = size;\n while (i--)\n id += urlAlphabet[random() * 64 | 0];\n return id;\n}\n\nexport { DEFAULT_TIMEOUT, cachedMap, createBirpc, createBirpcGroup };\n", "import { basename, camelize, classify, deepClone, isBrowser, isNuxtApp, isUrlString, kebabize, target } from \"@vue/devtools-shared\";\nimport { debounce } from \"perfect-debounce\";\nimport { createHooks } from \"hookable\";\nimport { createBirpc, createBirpcGroup } from \"birpc\";\n\n//#region rolldown:runtime\nvar __create = Object.create;\nvar __defProp = Object.defineProperty;\nvar __getOwnPropDesc = Object.getOwnPropertyDescriptor;\nvar __getOwnPropNames = Object.getOwnPropertyNames;\nvar __getProtoOf = Object.getPrototypeOf;\nvar __hasOwnProp = Object.prototype.hasOwnProperty;\nvar __commonJS = (cb, mod) => function() {\n\treturn mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;\n};\nvar __copyProps = (to, from, except, desc) => {\n\tif (from && typeof from === \"object\" || typeof from === \"function\") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {\n\t\tkey = keys[i];\n\t\tif (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {\n\t\t\tget: ((k) => from[k]).bind(null, key),\n\t\t\tenumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable\n\t\t});\n\t}\n\treturn to;\n};\nvar __toESM = (mod, isNodeMode, target$1) => (target$1 = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target$1, \"default\", {\n\tvalue: mod,\n\tenumerable: true\n}) : target$1, mod));\n\n//#endregion\n//#region src/compat/index.ts\nfunction onLegacyDevToolsPluginApiAvailable(cb) {\n\tif (target.__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__) {\n\t\tcb();\n\t\treturn;\n\t}\n\tObject.defineProperty(target, \"__VUE_DEVTOOLS_PLUGIN_API_AVAILABLE__\", {\n\t\tset(value) {\n\t\t\tif (value) cb();\n\t\t},\n\t\tconfigurable: true\n\t});\n}\n\n//#endregion\n//#region src/core/component/utils/index.ts\nfunction getComponentTypeName(options) {\n\tconst name = options.name || options._componentTag || options.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__ || options.__name;\n\tif (name === \"index\" && options.__file?.endsWith(\"index.vue\")) return \"\";\n\treturn name;\n}\nfunction getComponentFileName(options) {\n\tconst file = options.__file;\n\tif (file) return classify(basename(file, \".vue\"));\n}\nfunction getComponentName(options) {\n\tconst name = options.displayName || options.name || options._componentTag;\n\tif (name) return name;\n\treturn getComponentFileName(options);\n}\nfunction saveComponentGussedName(instance, name) {\n\tinstance.type.__VUE_DEVTOOLS_COMPONENT_GUSSED_NAME__ = name;\n\treturn name;\n}\nfunction getAppRecord(instance) {\n\tif (instance.__VUE_DEVTOOLS_NEXT_APP_RECORD__) return instance.__VUE_DEVTOOLS_NEXT_APP_RECORD__;\n\telse if (instance.root) return instance.appContext.app.__VUE_DEVTOOLS_NEXT_APP_RECORD__;\n}\nasync function getComponentId(options) {\n\tconst { app, uid, instance } = options;\n\ttry {\n\t\tif (instance.__VUE_DEVTOOLS_NEXT_UID__) return instance.__VUE_DEVTOOLS_NEXT_UID__;\n\t\tconst appRecord = await getAppRecord(app);\n\t\tif (!appRecord) return null;\n\t\tconst isRoot = appRecord.rootInstance === instance;\n\t\treturn `${appRecord.id}:${isRoot ? \"root\" : uid}`;\n\t} catch (e) {}\n}\nfunction isFragment(instance) {\n\tconst subTreeType = instance.subTree?.type;\n\tconst appRecord = getAppRecord(instance);\n\tif (appRecord) return appRecord?.types?.Fragment === subTreeType;\n\treturn false;\n}\nfunction isBeingDestroyed(instance) {\n\treturn instance._isBeingDestroyed || instance.isUnmounted;\n}\n/**\n* Get the appropriate display name for an instance.\n*\n* @param {Vue} instance\n* @return {string}\n*/\nfunction getInstanceName(instance) {\n\tconst name = getComponentTypeName(instance?.type || {});\n\tif (name) return name;\n\tif (instance?.root === instance) return \"Root\";\n\tfor (const key in instance.parent?.type?.components) if (instance.parent.type.components[key] === instance?.type) return saveComponentGussedName(instance, key);\n\tfor (const key in instance.appContext?.components) if (instance.appContext.components[key] === instance?.type) return saveComponentGussedName(instance, key);\n\tconst fileName = getComponentFileName(instance?.type || {});\n\tif (fileName) return fileName;\n\treturn \"Anonymous Component\";\n}\n/**\n* Returns a devtools unique id for instance.\n* @param {Vue} instance\n*/\nfunction getUniqueComponentId(instance) {\n\treturn `${instance?.appContext?.app?.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__ ?? 0}:${instance === instance?.root ? \"root\" : instance.uid}`;\n}\nfunction getRenderKey(value) {\n\tif (value == null) return \"\";\n\tif (typeof value === \"number\") return value;\n\telse if (typeof value === \"string\") return `'${value}'`;\n\telse if (Array.isArray(value)) return \"Array\";\n\telse return \"Object\";\n}\nfunction returnError(cb) {\n\ttry {\n\t\treturn cb();\n\t} catch (e) {\n\t\treturn e;\n\t}\n}\nfunction getComponentInstance(appRecord, instanceId) {\n\tinstanceId = instanceId || `${appRecord.id}:root`;\n\treturn appRecord.instanceMap.get(instanceId) || appRecord.instanceMap.get(\":root\");\n}\nfunction ensurePropertyExists(obj, key, skipObjCheck = false) {\n\treturn skipObjCheck ? key in obj : typeof obj === \"object\" && obj !== null ? key in obj : false;\n}\n\n//#endregion\n//#region src/core/component/state/bounding-rect.ts\nfunction createRect() {\n\tconst rect = {\n\t\ttop: 0,\n\t\tbottom: 0,\n\t\tleft: 0,\n\t\tright: 0,\n\t\tget width() {\n\t\t\treturn rect.right - rect.left;\n\t\t},\n\t\tget height() {\n\t\t\treturn rect.bottom - rect.top;\n\t\t}\n\t};\n\treturn rect;\n}\nlet range;\nfunction getTextRect(node) {\n\tif (!range) range = document.createRange();\n\trange.selectNode(node);\n\treturn range.getBoundingClientRect();\n}\nfunction getFragmentRect(vnode) {\n\tconst rect = createRect();\n\tif (!vnode.children) return rect;\n\tfor (let i = 0, l = vnode.children.length; i < l; i++) {\n\t\tconst childVnode = vnode.children[i];\n\t\tlet childRect;\n\t\tif (childVnode.component) childRect = getComponentBoundingRect(childVnode.component);\n\t\telse if (childVnode.el) {\n\t\t\tconst el = childVnode.el;\n\t\t\tif (el.nodeType === 1 || el.getBoundingClientRect) childRect = el.getBoundingClientRect();\n\t\t\telse if (el.nodeType === 3 && el.data.trim()) childRect = getTextRect(el);\n\t\t}\n\t\tif (childRect) mergeRects(rect, childRect);\n\t}\n\treturn rect;\n}\nfunction mergeRects(a, b) {\n\tif (!a.top || b.top < a.top) a.top = b.top;\n\tif (!a.bottom || b.bottom > a.bottom) a.bottom = b.bottom;\n\tif (!a.left || b.left < a.left) a.left = b.left;\n\tif (!a.right || b.right > a.right) a.right = b.right;\n\treturn a;\n}\nconst DEFAULT_RECT = {\n\ttop: 0,\n\tleft: 0,\n\tright: 0,\n\tbottom: 0,\n\twidth: 0,\n\theight: 0\n};\nfunction getComponentBoundingRect(instance) {\n\tconst el = instance.subTree.el;\n\tif (typeof window === \"undefined\") return DEFAULT_RECT;\n\tif (isFragment(instance)) return getFragmentRect(instance.subTree);\n\telse if (el?.nodeType === 1) return el?.getBoundingClientRect();\n\telse if (instance.subTree.component) return getComponentBoundingRect(instance.subTree.component);\n\telse return DEFAULT_RECT;\n}\n\n//#endregion\n//#region src/core/component/tree/el.ts\nfunction getRootElementsFromComponentInstance(instance) {\n\tif (isFragment(instance)) return getFragmentRootElements(instance.subTree);\n\tif (!instance.subTree) return [];\n\treturn [instance.subTree.el];\n}\nfunction getFragmentRootElements(vnode) {\n\tif (!vnode.children) return [];\n\tconst list = [];\n\tvnode.children.forEach((childVnode) => {\n\t\tif (childVnode.component) list.push(...getRootElementsFromComponentInstance(childVnode.component));\n\t\telse if (childVnode?.el) list.push(childVnode.el);\n\t});\n\treturn list;\n}\n\n//#endregion\n//#region src/core/component-highlighter/index.ts\nconst CONTAINER_ELEMENT_ID = \"__vue-devtools-component-inspector__\";\nconst CARD_ELEMENT_ID = \"__vue-devtools-component-inspector__card__\";\nconst COMPONENT_NAME_ELEMENT_ID = \"__vue-devtools-component-inspector__name__\";\nconst INDICATOR_ELEMENT_ID = \"__vue-devtools-component-inspector__indicator__\";\nconst containerStyles = {\n\tdisplay: \"block\",\n\tzIndex: 2147483640,\n\tposition: \"fixed\",\n\tbackgroundColor: \"#42b88325\",\n\tborder: \"1px solid #42b88350\",\n\tborderRadius: \"5px\",\n\ttransition: \"all 0.1s ease-in\",\n\tpointerEvents: \"none\"\n};\nconst cardStyles = {\n\tfontFamily: \"Arial, Helvetica, sans-serif\",\n\tpadding: \"5px 8px\",\n\tborderRadius: \"4px\",\n\ttextAlign: \"left\",\n\tposition: \"absolute\",\n\tleft: 0,\n\tcolor: \"#e9e9e9\",\n\tfontSize: \"14px\",\n\tfontWeight: 600,\n\tlineHeight: \"24px\",\n\tbackgroundColor: \"#42b883\",\n\tboxShadow: \"0 1px 3px 0 rgba(0, 0, 0, 0.1), 0 1px 2px -1px rgba(0, 0, 0, 0.1)\"\n};\nconst indicatorStyles = {\n\tdisplay: \"inline-block\",\n\tfontWeight: 400,\n\tfontStyle: \"normal\",\n\tfontSize: \"12px\",\n\topacity: .7\n};\nfunction getContainerElement() {\n\treturn document.getElementById(CONTAINER_ELEMENT_ID);\n}\nfunction getCardElement() {\n\treturn document.getElementById(CARD_ELEMENT_ID);\n}\nfunction getIndicatorElement() {\n\treturn document.getElementById(INDICATOR_ELEMENT_ID);\n}\nfunction getNameElement() {\n\treturn document.getElementById(COMPONENT_NAME_ELEMENT_ID);\n}\nfunction getStyles(bounds) {\n\treturn {\n\t\tleft: `${Math.round(bounds.left * 100) / 100}px`,\n\t\ttop: `${Math.round(bounds.top * 100) / 100}px`,\n\t\twidth: `${Math.round(bounds.width * 100) / 100}px`,\n\t\theight: `${Math.round(bounds.height * 100) / 100}px`\n\t};\n}\nfunction create(options) {\n\tconst containerEl = document.createElement(\"div\");\n\tcontainerEl.id = options.elementId ?? CONTAINER_ELEMENT_ID;\n\tObject.assign(containerEl.style, {\n\t\t...containerStyles,\n\t\t...getStyles(options.bounds),\n\t\t...options.style\n\t});\n\tconst cardEl = document.createElement(\"span\");\n\tcardEl.id = CARD_ELEMENT_ID;\n\tObject.assign(cardEl.style, {\n\t\t...cardStyles,\n\t\ttop: options.bounds.top < 35 ? 0 : \"-35px\"\n\t});\n\tconst nameEl = document.createElement(\"span\");\n\tnameEl.id = COMPONENT_NAME_ELEMENT_ID;\n\tnameEl.innerHTML = `<${options.name}>  `;\n\tconst indicatorEl = document.createElement(\"i\");\n\tindicatorEl.id = INDICATOR_ELEMENT_ID;\n\tindicatorEl.innerHTML = `${Math.round(options.bounds.width * 100) / 100} x ${Math.round(options.bounds.height * 100) / 100}`;\n\tObject.assign(indicatorEl.style, indicatorStyles);\n\tcardEl.appendChild(nameEl);\n\tcardEl.appendChild(indicatorEl);\n\tcontainerEl.appendChild(cardEl);\n\tdocument.body.appendChild(containerEl);\n\treturn containerEl;\n}\nfunction update(options) {\n\tconst containerEl = getContainerElement();\n\tconst cardEl = getCardElement();\n\tconst nameEl = getNameElement();\n\tconst indicatorEl = getIndicatorElement();\n\tif (containerEl) {\n\t\tObject.assign(containerEl.style, {\n\t\t\t...containerStyles,\n\t\t\t...getStyles(options.bounds)\n\t\t});\n\t\tObject.assign(cardEl.style, { top: options.bounds.top < 35 ? 0 : \"-35px\" });\n\t\tnameEl.innerHTML = `<${options.name}>  `;\n\t\tindicatorEl.innerHTML = `${Math.round(options.bounds.width * 100) / 100} x ${Math.round(options.bounds.height * 100) / 100}`;\n\t}\n}\nfunction highlight(instance) {\n\tconst bounds = getComponentBoundingRect(instance);\n\tif (!bounds.width && !bounds.height) return;\n\tconst name = getInstanceName(instance);\n\tgetContainerElement() ? update({\n\t\tbounds,\n\t\tname\n\t}) : create({\n\t\tbounds,\n\t\tname\n\t});\n}\nfunction unhighlight() {\n\tconst el = getContainerElement();\n\tif (el) el.style.display = \"none\";\n}\nlet inspectInstance = null;\nfunction inspectFn(e) {\n\tconst target$1 = e.target;\n\tif (target$1) {\n\t\tconst instance = target$1.__vueParentComponent;\n\t\tif (instance) {\n\t\t\tinspectInstance = instance;\n\t\t\tif (instance.vnode.el) {\n\t\t\t\tconst bounds = getComponentBoundingRect(instance);\n\t\t\t\tconst name = getInstanceName(instance);\n\t\t\t\tgetContainerElement() ? update({\n\t\t\t\t\tbounds,\n\t\t\t\t\tname\n\t\t\t\t}) : create({\n\t\t\t\t\tbounds,\n\t\t\t\t\tname\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n}\nfunction selectComponentFn(e, cb) {\n\te.preventDefault();\n\te.stopPropagation();\n\tif (inspectInstance) cb(getUniqueComponentId(inspectInstance));\n}\nlet inspectComponentHighLighterSelectFn = null;\nfunction cancelInspectComponentHighLighter() {\n\tunhighlight();\n\twindow.removeEventListener(\"mouseover\", inspectFn);\n\twindow.removeEventListener(\"click\", inspectComponentHighLighterSelectFn, true);\n\tinspectComponentHighLighterSelectFn = null;\n}\nfunction inspectComponentHighLighter() {\n\twindow.addEventListener(\"mouseover\", inspectFn);\n\treturn new Promise((resolve) => {\n\t\tfunction onSelect(e) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tselectComponentFn(e, (id) => {\n\t\t\t\twindow.removeEventListener(\"click\", onSelect, true);\n\t\t\t\tinspectComponentHighLighterSelectFn = null;\n\t\t\t\twindow.removeEventListener(\"mouseover\", inspectFn);\n\t\t\t\tconst el = getContainerElement();\n\t\t\t\tif (el) el.style.display = \"none\";\n\t\t\t\tresolve(JSON.stringify({ id }));\n\t\t\t});\n\t\t}\n\t\tinspectComponentHighLighterSelectFn = onSelect;\n\t\twindow.addEventListener(\"click\", onSelect, true);\n\t});\n}\nfunction scrollToComponent(options) {\n\tconst instance = getComponentInstance(activeAppRecord.value, options.id);\n\tif (instance) {\n\t\tconst [el] = getRootElementsFromComponentInstance(instance);\n\t\tif (typeof el.scrollIntoView === \"function\") el.scrollIntoView({ behavior: \"smooth\" });\n\t\telse {\n\t\t\tconst bounds = getComponentBoundingRect(instance);\n\t\t\tconst scrollTarget = document.createElement(\"div\");\n\t\t\tconst styles = {\n\t\t\t\t...getStyles(bounds),\n\t\t\t\tposition: \"absolute\"\n\t\t\t};\n\t\t\tObject.assign(scrollTarget.style, styles);\n\t\t\tdocument.body.appendChild(scrollTarget);\n\t\t\tscrollTarget.scrollIntoView({ behavior: \"smooth\" });\n\t\t\tsetTimeout(() => {\n\t\t\t\tdocument.body.removeChild(scrollTarget);\n\t\t\t}, 2e3);\n\t\t}\n\t\tsetTimeout(() => {\n\t\t\tconst bounds = getComponentBoundingRect(instance);\n\t\t\tif (bounds.width || bounds.height) {\n\t\t\t\tconst name = getInstanceName(instance);\n\t\t\t\tconst el$1 = getContainerElement();\n\t\t\t\tel$1 ? update({\n\t\t\t\t\t...options,\n\t\t\t\t\tname,\n\t\t\t\t\tbounds\n\t\t\t\t}) : create({\n\t\t\t\t\t...options,\n\t\t\t\t\tname,\n\t\t\t\t\tbounds\n\t\t\t\t});\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tif (el$1) el$1.style.display = \"none\";\n\t\t\t\t}, 1500);\n\t\t\t}\n\t\t}, 1200);\n\t}\n}\n\n//#endregion\n//#region src/core/component-inspector/index.ts\ntarget.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__ ??= true;\nfunction toggleComponentInspectorEnabled(enabled) {\n\ttarget.__VUE_DEVTOOLS_COMPONENT_INSPECTOR_ENABLED__ = enabled;\n}\nfunction waitForInspectorInit(cb) {\n\tlet total = 0;\n\tconst timer = setInterval(() => {\n\t\tif (target.__VUE_INSPECTOR__) {\n\t\t\tclearInterval(timer);\n\t\t\ttotal += 30;\n\t\t\tcb();\n\t\t}\n\t\tif (total >= 5e3) clearInterval(timer);\n\t}, 30);\n}\nfunction setupInspector() {\n\tconst inspector = target.__VUE_INSPECTOR__;\n\tconst _openInEditor = inspector.openInEditor;\n\tinspector.openInEditor = async (...params) => {\n\t\tinspector.disable();\n\t\t_openInEditor(...params);\n\t};\n}\nfunction getComponentInspector() {\n\treturn new Promise((resolve) => {\n\t\tfunction setup() {\n\t\t\tsetupInspector();\n\t\t\tresolve(target.__VUE_INSPECTOR__);\n\t\t}\n\t\tif (!target.__VUE_INSPECTOR__) waitForInspectorInit(() => {\n\t\t\tsetup();\n\t\t});\n\t\telse setup();\n\t});\n}\n\n//#endregion\n//#region src/shared/stub-vue.ts\n/**\n* To prevent include a **HUGE** vue package in the final bundle of chrome ext / electron\n* we stub the necessary vue module.\n* This implementation is based on the 1c3327a0fa5983aa9078e3f7bb2330f572435425 commit\n*/\n/**\n* @from [@vue/reactivity](https://github.com/vuejs/core/blob/1c3327a0fa5983aa9078e3f7bb2330f572435425/packages/reactivity/src/constants.ts#L17-L23)\n*/\nlet ReactiveFlags = /* @__PURE__ */ function(ReactiveFlags$1) {\n\tReactiveFlags$1[\"SKIP\"] = \"__v_skip\";\n\tReactiveFlags$1[\"IS_REACTIVE\"] = \"__v_isReactive\";\n\tReactiveFlags$1[\"IS_READONLY\"] = \"__v_isReadonly\";\n\tReactiveFlags$1[\"IS_SHALLOW\"] = \"__v_isShallow\";\n\tReactiveFlags$1[\"RAW\"] = \"__v_raw\";\n\treturn ReactiveFlags$1;\n}({});\n/**\n* @from [@vue/reactivity](https://github.com/vuejs/core/blob/1c3327a0fa5983aa9078e3f7bb2330f572435425/packages/reactivity/src/reactive.ts#L330-L332)\n*/\nfunction isReadonly(value) {\n\treturn !!(value && value[ReactiveFlags.IS_READONLY]);\n}\n/**\n* @from [@vue/reactivity](https://github.com/vuejs/core/blob/1c3327a0fa5983aa9078e3f7bb2330f572435425/packages/reactivity/src/reactive.ts#L312-L317)\n*/\nfunction isReactive$1(value) {\n\tif (isReadonly(value)) return isReactive$1(value[ReactiveFlags.RAW]);\n\treturn !!(value && value[ReactiveFlags.IS_REACTIVE]);\n}\nfunction isRef$1(r) {\n\treturn !!(r && r.__v_isRef === true);\n}\n/**\n* @from [@vue/reactivity](https://github.com/vuejs/core/blob/1c3327a0fa5983aa9078e3f7bb2330f572435425/packages/reactivity/src/reactive.ts#L372-L375)\n*/\nfunction toRaw$1(observed) {\n\tconst raw = observed && observed[ReactiveFlags.RAW];\n\treturn raw ? toRaw$1(raw) : observed;\n}\n/**\n* @from [@vue/runtime-core](https://github.com/vuejs/core/blob/1c3327a0fa5983aa9078e3f7bb2330f572435425/packages/runtime-core/src/vnode.ts#L63-L68)\n*/\nconst Fragment = Symbol.for(\"v-fgt\");\n\n//#endregion\n//#region src/core/component/state/editor.ts\nvar StateEditor = class {\n\tconstructor() {\n\t\tthis.refEditor = new RefStateEditor();\n\t}\n\tset(object, path, value, cb) {\n\t\tconst sections = Array.isArray(path) ? path : path.split(\".\");\n\t\twhile (sections.length > 1) {\n\t\t\tconst section = sections.shift();\n\t\t\tif (object instanceof Map) object = object.get(section);\n\t\t\telse if (object instanceof Set) object = Array.from(object.values())[section];\n\t\t\telse object = object[section];\n\t\t\tif (this.refEditor.isRef(object)) object = this.refEditor.get(object);\n\t\t}\n\t\tconst field = sections[0];\n\t\tconst item = this.refEditor.get(object)[field];\n\t\tif (cb) cb(object, field, value);\n\t\telse if (this.refEditor.isRef(item)) this.refEditor.set(item, value);\n\t\telse object[field] = value;\n\t}\n\tget(object, path) {\n\t\tconst sections = Array.isArray(path) ? path : path.split(\".\");\n\t\tfor (let i = 0; i < sections.length; i++) {\n\t\t\tif (object instanceof Map) object = object.get(sections[i]);\n\t\t\telse object = object[sections[i]];\n\t\t\tif (this.refEditor.isRef(object)) object = this.refEditor.get(object);\n\t\t\tif (!object) return void 0;\n\t\t}\n\t\treturn object;\n\t}\n\thas(object, path, parent = false) {\n\t\tif (typeof object === \"undefined\") return false;\n\t\tconst sections = Array.isArray(path) ? path.slice() : path.split(\".\");\n\t\tconst size = !parent ? 1 : 2;\n\t\twhile (object && sections.length > size) {\n\t\t\tconst section = sections.shift();\n\t\t\tobject = object[section];\n\t\t\tif (this.refEditor.isRef(object)) object = this.refEditor.get(object);\n\t\t}\n\t\treturn object != null && Object.prototype.hasOwnProperty.call(object, sections[0]);\n\t}\n\tcreateDefaultSetCallback(state) {\n\t\treturn (object, field, value) => {\n\t\t\tif (state.remove || state.newKey) if (Array.isArray(object)) object.splice(field, 1);\n\t\t\telse if (toRaw$1(object) instanceof Map) object.delete(field);\n\t\t\telse if (toRaw$1(object) instanceof Set) object.delete(Array.from(object.values())[field]);\n\t\t\telse Reflect.deleteProperty(object, field);\n\t\t\tif (!state.remove) {\n\t\t\t\tconst target$1 = object[state.newKey || field];\n\t\t\t\tif (this.refEditor.isRef(target$1)) this.refEditor.set(target$1, value);\n\t\t\t\telse if (toRaw$1(object) instanceof Map) object.set(state.newKey || field, value);\n\t\t\t\telse if (toRaw$1(object) instanceof Set) object.add(value);\n\t\t\t\telse object[state.newKey || field] = value;\n\t\t\t}\n\t\t};\n\t}\n};\nvar RefStateEditor = class {\n\tset(ref, value) {\n\t\tif (isRef$1(ref)) ref.value = value;\n\t\telse {\n\t\t\tif (ref instanceof Set && Array.isArray(value)) {\n\t\t\t\tref.clear();\n\t\t\t\tvalue.forEach((v) => ref.add(v));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst currentKeys = Object.keys(value);\n\t\t\tif (ref instanceof Map) {\n\t\t\t\tconst previousKeysSet$1 = new Set(ref.keys());\n\t\t\t\tcurrentKeys.forEach((key) => {\n\t\t\t\t\tref.set(key, Reflect.get(value, key));\n\t\t\t\t\tpreviousKeysSet$1.delete(key);\n\t\t\t\t});\n\t\t\t\tpreviousKeysSet$1.forEach((key) => ref.delete(key));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst previousKeysSet = new Set(Object.keys(ref));\n\t\t\tcurrentKeys.forEach((key) => {\n\t\t\t\tReflect.set(ref, key, Reflect.get(value, key));\n\t\t\t\tpreviousKeysSet.delete(key);\n\t\t\t});\n\t\t\tpreviousKeysSet.forEach((key) => Reflect.deleteProperty(ref, key));\n\t\t}\n\t}\n\tget(ref) {\n\t\treturn isRef$1(ref) ? ref.value : ref;\n\t}\n\tisRef(ref) {\n\t\treturn isRef$1(ref) || isReactive$1(ref);\n\t}\n};\nasync function editComponentState(payload, stateEditor$1) {\n\tconst { path, nodeId, state, type } = payload;\n\tconst instance = getComponentInstance(activeAppRecord.value, nodeId);\n\tif (!instance) return;\n\tconst targetPath = path.slice();\n\tlet target$1;\n\tif (Object.keys(instance.props).includes(path[0])) target$1 = instance.props;\n\telse if (instance.devtoolsRawSetupState && Object.keys(instance.devtoolsRawSetupState).includes(path[0])) target$1 = instance.devtoolsRawSetupState;\n\telse if (instance.data && Object.keys(instance.data).includes(path[0])) target$1 = instance.data;\n\telse target$1 = instance.proxy;\n\tif (target$1 && targetPath) {\n\t\tif (state.type === \"object\" && type === \"reactive\") {}\n\t\tstateEditor$1.set(target$1, targetPath, state.value, stateEditor$1.createDefaultSetCallback(state));\n\t}\n}\nconst stateEditor = new StateEditor();\nasync function editState(payload) {\n\teditComponentState(payload, stateEditor);\n}\n\n//#endregion\n//#region src/core/timeline/storage.ts\nconst TIMELINE_LAYERS_STATE_STORAGE_ID = \"__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS_STATE__\";\nfunction addTimelineLayersStateToStorage(state) {\n\tif (!isBrowser || typeof localStorage === \"undefined\" || localStorage === null) return;\n\tlocalStorage.setItem(TIMELINE_LAYERS_STATE_STORAGE_ID, JSON.stringify(state));\n}\nfunction getTimelineLayersStateFromStorage() {\n\tif (typeof window === \"undefined\" || !isBrowser || typeof localStorage === \"undefined\" || localStorage === null) return {\n\t\trecordingState: false,\n\t\tmouseEventEnabled: false,\n\t\tkeyboardEventEnabled: false,\n\t\tcomponentEventEnabled: false,\n\t\tperformanceEventEnabled: false,\n\t\tselected: \"\"\n\t};\n\tconst state = typeof localStorage.getItem !== \"undefined\" ? localStorage.getItem(TIMELINE_LAYERS_STATE_STORAGE_ID) : null;\n\treturn state ? JSON.parse(state) : {\n\t\trecordingState: false,\n\t\tmouseEventEnabled: false,\n\t\tkeyboardEventEnabled: false,\n\t\tcomponentEventEnabled: false,\n\t\tperformanceEventEnabled: false,\n\t\tselected: \"\"\n\t};\n}\n\n//#endregion\n//#region src/ctx/timeline.ts\ntarget.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS ??= [];\nconst devtoolsTimelineLayers = new Proxy(target.__VUE_DEVTOOLS_KIT_TIMELINE_LAYERS, { get(target$1, prop, receiver) {\n\treturn Reflect.get(target$1, prop, receiver);\n} });\nfunction addTimelineLayer(options, descriptor) {\n\tdevtoolsState.timelineLayersState[descriptor.id] = false;\n\tdevtoolsTimelineLayers.push({\n\t\t...options,\n\t\tdescriptorId: descriptor.id,\n\t\tappRecord: getAppRecord(descriptor.app)\n\t});\n}\nfunction updateTimelineLayersState(state) {\n\tconst updatedState = {\n\t\t...devtoolsState.timelineLayersState,\n\t\t...state\n\t};\n\taddTimelineLayersStateToStorage(updatedState);\n\tupdateDevToolsState({ timelineLayersState: updatedState });\n}\n\n//#endregion\n//#region src/ctx/inspector.ts\ntarget.__VUE_DEVTOOLS_KIT_INSPECTOR__ ??= [];\nconst devtoolsInspector = new Proxy(target.__VUE_DEVTOOLS_KIT_INSPECTOR__, { get(target$1, prop, receiver) {\n\treturn Reflect.get(target$1, prop, receiver);\n} });\nconst callInspectorUpdatedHook = debounce(() => {\n\tdevtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.SEND_INSPECTOR_TO_CLIENT, getActiveInspectors());\n});\nfunction addInspector(inspector, descriptor) {\n\tdevtoolsInspector.push({\n\t\toptions: inspector,\n\t\tdescriptor,\n\t\ttreeFilterPlaceholder: inspector.treeFilterPlaceholder ?? \"Search tree...\",\n\t\tstateFilterPlaceholder: inspector.stateFilterPlaceholder ?? \"Search state...\",\n\t\ttreeFilter: \"\",\n\t\tselectedNodeId: \"\",\n\t\tappRecord: getAppRecord(descriptor.app)\n\t});\n\tcallInspectorUpdatedHook();\n}\nfunction getActiveInspectors() {\n\treturn devtoolsInspector.filter((inspector) => inspector.descriptor.app === activeAppRecord.value.app).filter((inspector) => inspector.descriptor.id !== \"components\").map((inspector) => {\n\t\tconst descriptor = inspector.descriptor;\n\t\tconst options = inspector.options;\n\t\treturn {\n\t\t\tid: options.id,\n\t\t\tlabel: options.label,\n\t\t\tlogo: descriptor.logo,\n\t\t\ticon: `custom-ic-baseline-${options?.icon?.replace(/_/g, \"-\")}`,\n\t\t\tpackageName: descriptor.packageName,\n\t\t\thomepage: descriptor.homepage,\n\t\t\tpluginId: descriptor.id\n\t\t};\n\t});\n}\nfunction getInspectorInfo(id) {\n\tconst inspector = getInspector(id, activeAppRecord.value.app);\n\tif (!inspector) return;\n\tconst descriptor = inspector.descriptor;\n\tconst options = inspector.options;\n\tconst timelineLayers = devtoolsTimelineLayers.filter((layer) => layer.descriptorId === descriptor.id).map((item) => ({\n\t\tid: item.id,\n\t\tlabel: item.label,\n\t\tcolor: item.color\n\t}));\n\treturn {\n\t\tid: options.id,\n\t\tlabel: options.label,\n\t\tlogo: descriptor.logo,\n\t\tpackageName: descriptor.packageName,\n\t\thomepage: descriptor.homepage,\n\t\ttimelineLayers,\n\t\ttreeFilterPlaceholder: inspector.treeFilterPlaceholder,\n\t\tstateFilterPlaceholder: inspector.stateFilterPlaceholder\n\t};\n}\nfunction getInspector(id, app) {\n\treturn devtoolsInspector.find((inspector) => inspector.options.id === id && (app ? inspector.descriptor.app === app : true));\n}\nfunction getInspectorActions(id) {\n\treturn getInspector(id)?.options.actions;\n}\nfunction getInspectorNodeActions(id) {\n\treturn getInspector(id)?.options.nodeActions;\n}\n\n//#endregion\n//#region src/ctx/hook.ts\nlet DevToolsV6PluginAPIHookKeys = /* @__PURE__ */ function(DevToolsV6PluginAPIHookKeys$1) {\n\tDevToolsV6PluginAPIHookKeys$1[\"VISIT_COMPONENT_TREE\"] = \"visitComponentTree\";\n\tDevToolsV6PluginAPIHookKeys$1[\"INSPECT_COMPONENT\"] = \"inspectComponent\";\n\tDevToolsV6PluginAPIHookKeys$1[\"EDIT_COMPONENT_STATE\"] = \"editComponentState\";\n\tDevToolsV6PluginAPIHookKeys$1[\"GET_INSPECTOR_TREE\"] = \"getInspectorTree\";\n\tDevToolsV6PluginAPIHookKeys$1[\"GET_INSPECTOR_STATE\"] = \"getInspectorState\";\n\tDevToolsV6PluginAPIHookKeys$1[\"EDIT_INSPECTOR_STATE\"] = \"editInspectorState\";\n\tDevToolsV6PluginAPIHookKeys$1[\"INSPECT_TIMELINE_EVENT\"] = \"inspectTimelineEvent\";\n\tDevToolsV6PluginAPIHookKeys$1[\"TIMELINE_CLEARED\"] = \"timelineCleared\";\n\tDevToolsV6PluginAPIHookKeys$1[\"SET_PLUGIN_SETTINGS\"] = \"setPluginSettings\";\n\treturn DevToolsV6PluginAPIHookKeys$1;\n}({});\nlet DevToolsContextHookKeys = /* @__PURE__ */ function(DevToolsContextHookKeys$1) {\n\tDevToolsContextHookKeys$1[\"ADD_INSPECTOR\"] = \"addInspector\";\n\tDevToolsContextHookKeys$1[\"SEND_INSPECTOR_TREE\"] = \"sendInspectorTree\";\n\tDevToolsContextHookKeys$1[\"SEND_INSPECTOR_STATE\"] = \"sendInspectorState\";\n\tDevToolsContextHookKeys$1[\"CUSTOM_INSPECTOR_SELECT_NODE\"] = \"customInspectorSelectNode\";\n\tDevToolsContextHookKeys$1[\"TIMELINE_LAYER_ADDED\"] = \"timelineLayerAdded\";\n\tDevToolsContextHookKeys$1[\"TIMELINE_EVENT_ADDED\"] = \"timelineEventAdded\";\n\tDevToolsContextHookKeys$1[\"GET_COMPONENT_INSTANCES\"] = \"getComponentInstances\";\n\tDevToolsContextHookKeys$1[\"GET_COMPONENT_BOUNDS\"] = \"getComponentBounds\";\n\tDevToolsContextHookKeys$1[\"GET_COMPONENT_NAME\"] = \"getComponentName\";\n\tDevToolsContextHookKeys$1[\"COMPONENT_HIGHLIGHT\"] = \"componentHighlight\";\n\tDevToolsContextHookKeys$1[\"COMPONENT_UNHIGHLIGHT\"] = \"componentUnhighlight\";\n\treturn DevToolsContextHookKeys$1;\n}({});\nlet DevToolsMessagingHookKeys = /* @__PURE__ */ function(DevToolsMessagingHookKeys$1) {\n\tDevToolsMessagingHookKeys$1[\"SEND_INSPECTOR_TREE_TO_CLIENT\"] = \"sendInspectorTreeToClient\";\n\tDevToolsMessagingHookKeys$1[\"SEND_INSPECTOR_STATE_TO_CLIENT\"] = \"sendInspectorStateToClient\";\n\tDevToolsMessagingHookKeys$1[\"SEND_TIMELINE_EVENT_TO_CLIENT\"] = \"sendTimelineEventToClient\";\n\tDevToolsMessagingHookKeys$1[\"SEND_INSPECTOR_TO_CLIENT\"] = \"sendInspectorToClient\";\n\tDevToolsMessagingHookKeys$1[\"SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT\"] = \"sendActiveAppUpdatedToClient\";\n\tDevToolsMessagingHookKeys$1[\"DEVTOOLS_STATE_UPDATED\"] = \"devtoolsStateUpdated\";\n\tDevToolsMessagingHookKeys$1[\"DEVTOOLS_CONNECTED_UPDATED\"] = \"devtoolsConnectedUpdated\";\n\tDevToolsMessagingHookKeys$1[\"ROUTER_INFO_UPDATED\"] = \"routerInfoUpdated\";\n\treturn DevToolsMessagingHookKeys$1;\n}({});\nfunction createDevToolsCtxHooks() {\n\tconst hooks$1 = createHooks();\n\thooks$1.hook(DevToolsContextHookKeys.ADD_INSPECTOR, ({ inspector, plugin }) => {\n\t\taddInspector(inspector, plugin.descriptor);\n\t});\n\tconst debounceSendInspectorTree = debounce(async ({ inspectorId, plugin }) => {\n\t\tif (!inspectorId || !plugin?.descriptor?.app || devtoolsState.highPerfModeEnabled) return;\n\t\tconst inspector = getInspector(inspectorId, plugin.descriptor.app);\n\t\tconst _payload = {\n\t\t\tapp: plugin.descriptor.app,\n\t\t\tinspectorId,\n\t\t\tfilter: inspector?.treeFilter || \"\",\n\t\t\trootNodes: []\n\t\t};\n\t\tawait new Promise((resolve) => {\n\t\t\thooks$1.callHookWith(async (callbacks) => {\n\t\t\t\tawait Promise.all(callbacks.map((cb) => cb(_payload)));\n\t\t\t\tresolve();\n\t\t\t}, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_TREE);\n\t\t});\n\t\thooks$1.callHookWith(async (callbacks) => {\n\t\t\tawait Promise.all(callbacks.map((cb) => cb({\n\t\t\t\tinspectorId,\n\t\t\t\trootNodes: _payload.rootNodes\n\t\t\t})));\n\t\t}, DevToolsMessagingHookKeys.SEND_INSPECTOR_TREE_TO_CLIENT);\n\t}, 120);\n\thooks$1.hook(DevToolsContextHookKeys.SEND_INSPECTOR_TREE, debounceSendInspectorTree);\n\tconst debounceSendInspectorState = debounce(async ({ inspectorId, plugin }) => {\n\t\tif (!inspectorId || !plugin?.descriptor?.app || devtoolsState.highPerfModeEnabled) return;\n\t\tconst inspector = getInspector(inspectorId, plugin.descriptor.app);\n\t\tconst _payload = {\n\t\t\tapp: plugin.descriptor.app,\n\t\t\tinspectorId,\n\t\t\tnodeId: inspector?.selectedNodeId || \"\",\n\t\t\tstate: null\n\t\t};\n\t\tconst ctx = { currentTab: `custom-inspector:${inspectorId}` };\n\t\tif (_payload.nodeId) await new Promise((resolve) => {\n\t\t\thooks$1.callHookWith(async (callbacks) => {\n\t\t\t\tawait Promise.all(callbacks.map((cb) => cb(_payload, ctx)));\n\t\t\t\tresolve();\n\t\t\t}, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_STATE);\n\t\t});\n\t\thooks$1.callHookWith(async (callbacks) => {\n\t\t\tawait Promise.all(callbacks.map((cb) => cb({\n\t\t\t\tinspectorId,\n\t\t\t\tnodeId: _payload.nodeId,\n\t\t\t\tstate: _payload.state\n\t\t\t})));\n\t\t}, DevToolsMessagingHookKeys.SEND_INSPECTOR_STATE_TO_CLIENT);\n\t}, 120);\n\thooks$1.hook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, debounceSendInspectorState);\n\thooks$1.hook(DevToolsContextHookKeys.CUSTOM_INSPECTOR_SELECT_NODE, ({ inspectorId, nodeId, plugin }) => {\n\t\tconst inspector = getInspector(inspectorId, plugin.descriptor.app);\n\t\tif (!inspector) return;\n\t\tinspector.selectedNodeId = nodeId;\n\t});\n\thooks$1.hook(DevToolsContextHookKeys.TIMELINE_LAYER_ADDED, ({ options, plugin }) => {\n\t\taddTimelineLayer(options, plugin.descriptor);\n\t});\n\thooks$1.hook(DevToolsContextHookKeys.TIMELINE_EVENT_ADDED, ({ options, plugin }) => {\n\t\tif (devtoolsState.highPerfModeEnabled || !devtoolsState.timelineLayersState?.[plugin.descriptor.id] && ![\n\t\t\t\"performance\",\n\t\t\t\"component-event\",\n\t\t\t\"keyboard\",\n\t\t\t\"mouse\"\n\t\t].includes(options.layerId)) return;\n\t\thooks$1.callHookWith(async (callbacks) => {\n\t\t\tawait Promise.all(callbacks.map((cb) => cb(options)));\n\t\t}, DevToolsMessagingHookKeys.SEND_TIMELINE_EVENT_TO_CLIENT);\n\t});\n\thooks$1.hook(DevToolsContextHookKeys.GET_COMPONENT_INSTANCES, async ({ app }) => {\n\t\tconst appRecord = app.__VUE_DEVTOOLS_NEXT_APP_RECORD__;\n\t\tif (!appRecord) return null;\n\t\tconst appId = appRecord.id.toString();\n\t\treturn [...appRecord.instanceMap].filter(([key]) => key.split(\":\")[0] === appId).map(([, instance]) => instance);\n\t});\n\thooks$1.hook(DevToolsContextHookKeys.GET_COMPONENT_BOUNDS, async ({ instance }) => {\n\t\treturn getComponentBoundingRect(instance);\n\t});\n\thooks$1.hook(DevToolsContextHookKeys.GET_COMPONENT_NAME, ({ instance }) => {\n\t\treturn getInstanceName(instance);\n\t});\n\thooks$1.hook(DevToolsContextHookKeys.COMPONENT_HIGHLIGHT, ({ uid }) => {\n\t\tconst instance = activeAppRecord.value.instanceMap.get(uid);\n\t\tif (instance) highlight(instance);\n\t});\n\thooks$1.hook(DevToolsContextHookKeys.COMPONENT_UNHIGHLIGHT, () => {\n\t\tunhighlight();\n\t});\n\treturn hooks$1;\n}\n\n//#endregion\n//#region src/ctx/state.ts\ntarget.__VUE_DEVTOOLS_KIT_APP_RECORDS__ ??= [];\ntarget.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__ ??= {};\ntarget.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__ ??= \"\";\ntarget.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__ ??= [];\ntarget.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__ ??= [];\nconst STATE_KEY = \"__VUE_DEVTOOLS_KIT_GLOBAL_STATE__\";\nfunction initStateFactory() {\n\treturn {\n\t\tconnected: false,\n\t\tclientConnected: false,\n\t\tvitePluginDetected: true,\n\t\tappRecords: [],\n\t\tactiveAppRecordId: \"\",\n\t\ttabs: [],\n\t\tcommands: [],\n\t\thighPerfModeEnabled: true,\n\t\tdevtoolsClientDetected: {},\n\t\tperfUniqueGroupId: 0,\n\t\ttimelineLayersState: getTimelineLayersStateFromStorage()\n\t};\n}\ntarget[STATE_KEY] ??= initStateFactory();\nconst callStateUpdatedHook = debounce((state) => {\n\tdevtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.DEVTOOLS_STATE_UPDATED, { state });\n});\nconst callConnectedUpdatedHook = debounce((state, oldState) => {\n\tdevtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.DEVTOOLS_CONNECTED_UPDATED, {\n\t\tstate,\n\t\toldState\n\t});\n});\nconst devtoolsAppRecords = new Proxy(target.__VUE_DEVTOOLS_KIT_APP_RECORDS__, { get(_target, prop, receiver) {\n\tif (prop === \"value\") return target.__VUE_DEVTOOLS_KIT_APP_RECORDS__;\n\treturn target.__VUE_DEVTOOLS_KIT_APP_RECORDS__[prop];\n} });\nconst addDevToolsAppRecord = (app) => {\n\ttarget.__VUE_DEVTOOLS_KIT_APP_RECORDS__ = [...target.__VUE_DEVTOOLS_KIT_APP_RECORDS__, app];\n};\nconst removeDevToolsAppRecord = (app) => {\n\ttarget.__VUE_DEVTOOLS_KIT_APP_RECORDS__ = devtoolsAppRecords.value.filter((record) => record.app !== app);\n};\nconst activeAppRecord = new Proxy(target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__, { get(_target, prop, receiver) {\n\tif (prop === \"value\") return target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__;\n\telse if (prop === \"id\") return target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__;\n\treturn target.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__[prop];\n} });\nfunction updateAllStates() {\n\tcallStateUpdatedHook({\n\t\t...target[STATE_KEY],\n\t\tappRecords: devtoolsAppRecords.value,\n\t\tactiveAppRecordId: activeAppRecord.id,\n\t\ttabs: target.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__,\n\t\tcommands: target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__\n\t});\n}\nfunction setActiveAppRecord(app) {\n\ttarget.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD__ = app;\n\tupdateAllStates();\n}\nfunction setActiveAppRecordId(id) {\n\ttarget.__VUE_DEVTOOLS_KIT_ACTIVE_APP_RECORD_ID__ = id;\n\tupdateAllStates();\n}\nconst devtoolsState = new Proxy(target[STATE_KEY], {\n\tget(target$1, property) {\n\t\tif (property === \"appRecords\") return devtoolsAppRecords;\n\t\telse if (property === \"activeAppRecordId\") return activeAppRecord.id;\n\t\telse if (property === \"tabs\") return target.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__;\n\t\telse if (property === \"commands\") return target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__;\n\t\treturn target[STATE_KEY][property];\n\t},\n\tdeleteProperty(target$1, property) {\n\t\tdelete target$1[property];\n\t\treturn true;\n\t},\n\tset(target$1, property, value) {\n\t\t({ ...target[STATE_KEY] });\n\t\ttarget$1[property] = value;\n\t\ttarget[STATE_KEY][property] = value;\n\t\treturn true;\n\t}\n});\nfunction resetDevToolsState() {\n\tObject.assign(target[STATE_KEY], initStateFactory());\n}\nfunction updateDevToolsState(state) {\n\tconst oldState = {\n\t\t...target[STATE_KEY],\n\t\tappRecords: devtoolsAppRecords.value,\n\t\tactiveAppRecordId: activeAppRecord.id\n\t};\n\tif (oldState.connected !== state.connected && state.connected || oldState.clientConnected !== state.clientConnected && state.clientConnected) callConnectedUpdatedHook(target[STATE_KEY], oldState);\n\tObject.assign(target[STATE_KEY], state);\n\tupdateAllStates();\n}\nfunction onDevToolsConnected(fn) {\n\treturn new Promise((resolve) => {\n\t\tif (devtoolsState.connected) {\n\t\t\tfn();\n\t\t\tresolve();\n\t\t}\n\t\tdevtoolsContext.hooks.hook(DevToolsMessagingHookKeys.DEVTOOLS_CONNECTED_UPDATED, ({ state }) => {\n\t\t\tif (state.connected) {\n\t\t\t\tfn();\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\t});\n}\nconst resolveIcon = (icon) => {\n\tif (!icon) return;\n\tif (icon.startsWith(\"baseline-\")) return `custom-ic-${icon}`;\n\tif (icon.startsWith(\"i-\") || isUrlString(icon)) return icon;\n\treturn `custom-ic-baseline-${icon}`;\n};\nfunction addCustomTab(tab) {\n\tconst tabs = target.__VUE_DEVTOOLS_KIT_CUSTOM_TABS__;\n\tif (tabs.some((t) => t.name === tab.name)) return;\n\ttabs.push({\n\t\t...tab,\n\t\ticon: resolveIcon(tab.icon)\n\t});\n\tupdateAllStates();\n}\nfunction addCustomCommand(action) {\n\tconst commands = target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__;\n\tif (commands.some((t) => t.id === action.id)) return;\n\tcommands.push({\n\t\t...action,\n\t\ticon: resolveIcon(action.icon),\n\t\tchildren: action.children ? action.children.map((child) => ({\n\t\t\t...child,\n\t\t\ticon: resolveIcon(child.icon)\n\t\t})) : void 0\n\t});\n\tupdateAllStates();\n}\nfunction removeCustomCommand(actionId) {\n\tconst commands = target.__VUE_DEVTOOLS_KIT_CUSTOM_COMMANDS__;\n\tconst index = commands.findIndex((t) => t.id === actionId);\n\tif (index === -1) return;\n\tcommands.splice(index, 1);\n\tupdateAllStates();\n}\nfunction toggleClientConnected(state) {\n\tupdateDevToolsState({ clientConnected: state });\n}\n\n//#endregion\n//#region src/core/open-in-editor/index.ts\nfunction setOpenInEditorBaseUrl(url) {\n\ttarget.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__ = url;\n}\nfunction openInEditor(options = {}) {\n\tconst { file, host, baseUrl = window.location.origin, line = 0, column = 0 } = options;\n\tif (file) {\n\t\tif (host === \"chrome-extension\") {\n\t\t\tconst fileName = file.replace(/\\\\/g, \"\\\\\\\\\");\n\t\t\tconst _baseUrl = window.VUE_DEVTOOLS_CONFIG?.openInEditorHost ?? \"/\";\n\t\t\tfetch(`${_baseUrl}__open-in-editor?file=${encodeURI(file)}`).then((response) => {\n\t\t\t\tif (!response.ok) {\n\t\t\t\t\tconst msg = `Opening component ${fileName} failed`;\n\t\t\t\t\tconsole.log(`%c${msg}`, \"color:red\");\n\t\t\t\t}\n\t\t\t});\n\t\t} else if (devtoolsState.vitePluginDetected) {\n\t\t\tconst _baseUrl = target.__VUE_DEVTOOLS_OPEN_IN_EDITOR_BASE_URL__ ?? baseUrl;\n\t\t\ttarget.__VUE_INSPECTOR__.openInEditor(_baseUrl, file, line, column);\n\t\t}\n\t}\n}\n\n//#endregion\n//#region src/ctx/plugin.ts\ntarget.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__ ??= [];\nconst devtoolsPluginBuffer = new Proxy(target.__VUE_DEVTOOLS_KIT_PLUGIN_BUFFER__, { get(target$1, prop, receiver) {\n\treturn Reflect.get(target$1, prop, receiver);\n} });\nfunction addDevToolsPluginToBuffer(pluginDescriptor, setupFn) {\n\tdevtoolsPluginBuffer.push([pluginDescriptor, setupFn]);\n}\n\n//#endregion\n//#region src/core/plugin/plugin-settings.ts\nfunction _getSettings(settings) {\n\tconst _settings = {};\n\tObject.keys(settings).forEach((key) => {\n\t\t_settings[key] = settings[key].defaultValue;\n\t});\n\treturn _settings;\n}\nfunction getPluginLocalKey(pluginId) {\n\treturn `__VUE_DEVTOOLS_NEXT_PLUGIN_SETTINGS__${pluginId}__`;\n}\nfunction getPluginSettingsOptions(pluginId) {\n\treturn (devtoolsPluginBuffer.find((item) => item[0].id === pluginId && !!item[0]?.settings)?.[0] ?? null)?.settings ?? null;\n}\nfunction getPluginSettings(pluginId, fallbackValue) {\n\tconst localKey = getPluginLocalKey(pluginId);\n\tif (localKey) {\n\t\tconst localSettings = localStorage.getItem(localKey);\n\t\tif (localSettings) return JSON.parse(localSettings);\n\t}\n\tif (pluginId) return _getSettings((devtoolsPluginBuffer.find((item) => item[0].id === pluginId)?.[0] ?? null)?.settings ?? {});\n\treturn _getSettings(fallbackValue);\n}\nfunction initPluginSettings(pluginId, settings) {\n\tconst localKey = getPluginLocalKey(pluginId);\n\tif (!localStorage.getItem(localKey)) localStorage.setItem(localKey, JSON.stringify(_getSettings(settings)));\n}\nfunction setPluginSettings(pluginId, key, value) {\n\tconst localKey = getPluginLocalKey(pluginId);\n\tconst localSettings = localStorage.getItem(localKey);\n\tconst parsedLocalSettings = JSON.parse(localSettings || \"{}\");\n\tconst updated = {\n\t\t...parsedLocalSettings,\n\t\t[key]: value\n\t};\n\tlocalStorage.setItem(localKey, JSON.stringify(updated));\n\tdevtoolsContext.hooks.callHookWith((callbacks) => {\n\t\tcallbacks.forEach((cb) => cb({\n\t\t\tpluginId,\n\t\t\tkey,\n\t\t\toldValue: parsedLocalSettings[key],\n\t\t\tnewValue: value,\n\t\t\tsettings: updated\n\t\t}));\n\t}, DevToolsV6PluginAPIHookKeys.SET_PLUGIN_SETTINGS);\n}\n\n//#endregion\n//#region src/types/hook.ts\nlet DevToolsHooks = /* @__PURE__ */ function(DevToolsHooks$1) {\n\tDevToolsHooks$1[\"APP_INIT\"] = \"app:init\";\n\tDevToolsHooks$1[\"APP_UNMOUNT\"] = \"app:unmount\";\n\tDevToolsHooks$1[\"COMPONENT_UPDATED\"] = \"component:updated\";\n\tDevToolsHooks$1[\"COMPONENT_ADDED\"] = \"component:added\";\n\tDevToolsHooks$1[\"COMPONENT_REMOVED\"] = \"component:removed\";\n\tDevToolsHooks$1[\"COMPONENT_EMIT\"] = \"component:emit\";\n\tDevToolsHooks$1[\"PERFORMANCE_START\"] = \"perf:start\";\n\tDevToolsHooks$1[\"PERFORMANCE_END\"] = \"perf:end\";\n\tDevToolsHooks$1[\"ADD_ROUTE\"] = \"router:add-route\";\n\tDevToolsHooks$1[\"REMOVE_ROUTE\"] = \"router:remove-route\";\n\tDevToolsHooks$1[\"RENDER_TRACKED\"] = \"render:tracked\";\n\tDevToolsHooks$1[\"RENDER_TRIGGERED\"] = \"render:triggered\";\n\tDevToolsHooks$1[\"APP_CONNECTED\"] = \"app:connected\";\n\tDevToolsHooks$1[\"SETUP_DEVTOOLS_PLUGIN\"] = \"devtools-plugin:setup\";\n\treturn DevToolsHooks$1;\n}({});\n\n//#endregion\n//#region src/hook/index.ts\nconst devtoolsHooks = target.__VUE_DEVTOOLS_HOOK ??= createHooks();\nconst on = {\n\tvueAppInit(fn) {\n\t\tdevtoolsHooks.hook(DevToolsHooks.APP_INIT, fn);\n\t},\n\tvueAppUnmount(fn) {\n\t\tdevtoolsHooks.hook(DevToolsHooks.APP_UNMOUNT, fn);\n\t},\n\tvueAppConnected(fn) {\n\t\tdevtoolsHooks.hook(DevToolsHooks.APP_CONNECTED, fn);\n\t},\n\tcomponentAdded(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.COMPONENT_ADDED, fn);\n\t},\n\tcomponentEmit(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.COMPONENT_EMIT, fn);\n\t},\n\tcomponentUpdated(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.COMPONENT_UPDATED, fn);\n\t},\n\tcomponentRemoved(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.COMPONENT_REMOVED, fn);\n\t},\n\tsetupDevtoolsPlugin(fn) {\n\t\tdevtoolsHooks.hook(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, fn);\n\t},\n\tperfStart(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.PERFORMANCE_START, fn);\n\t},\n\tperfEnd(fn) {\n\t\treturn devtoolsHooks.hook(DevToolsHooks.PERFORMANCE_END, fn);\n\t}\n};\nfunction createDevToolsHook() {\n\treturn {\n\t\tid: \"vue-devtools-next\",\n\t\tdevtoolsVersion: \"7.0\",\n\t\tenabled: false,\n\t\tappRecords: [],\n\t\tapps: [],\n\t\tevents: /* @__PURE__ */ new Map(),\n\t\ton(event, fn) {\n\t\t\tif (!this.events.has(event)) this.events.set(event, []);\n\t\t\tthis.events.get(event)?.push(fn);\n\t\t\treturn () => this.off(event, fn);\n\t\t},\n\t\tonce(event, fn) {\n\t\t\tconst onceFn = (...args) => {\n\t\t\t\tthis.off(event, onceFn);\n\t\t\t\tfn(...args);\n\t\t\t};\n\t\t\tthis.on(event, onceFn);\n\t\t\treturn [event, onceFn];\n\t\t},\n\t\toff(event, fn) {\n\t\t\tif (this.events.has(event)) {\n\t\t\t\tconst eventCallbacks = this.events.get(event);\n\t\t\t\tconst index = eventCallbacks.indexOf(fn);\n\t\t\t\tif (index !== -1) eventCallbacks.splice(index, 1);\n\t\t\t}\n\t\t},\n\t\temit(event, ...payload) {\n\t\t\tif (this.events.has(event)) this.events.get(event).forEach((fn) => fn(...payload));\n\t\t}\n\t};\n}\nfunction subscribeDevToolsHook(hook$1) {\n\thook$1.on(DevToolsHooks.APP_INIT, (app, version, types) => {\n\t\tif (app?._instance?.type?.devtools?.hide) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.APP_INIT, app, version, types);\n\t});\n\thook$1.on(DevToolsHooks.APP_UNMOUNT, (app) => {\n\t\tdevtoolsHooks.callHook(DevToolsHooks.APP_UNMOUNT, app);\n\t});\n\thook$1.on(DevToolsHooks.COMPONENT_ADDED, async (app, uid, parentUid, component) => {\n\t\tif (app?._instance?.type?.devtools?.hide || devtoolsState.highPerfModeEnabled) return;\n\t\tif (!app || typeof uid !== \"number\" && !uid || !component) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.COMPONENT_ADDED, app, uid, parentUid, component);\n\t});\n\thook$1.on(DevToolsHooks.COMPONENT_UPDATED, (app, uid, parentUid, component) => {\n\t\tif (!app || typeof uid !== \"number\" && !uid || !component || devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.COMPONENT_UPDATED, app, uid, parentUid, component);\n\t});\n\thook$1.on(DevToolsHooks.COMPONENT_REMOVED, async (app, uid, parentUid, component) => {\n\t\tif (!app || typeof uid !== \"number\" && !uid || !component || devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.COMPONENT_REMOVED, app, uid, parentUid, component);\n\t});\n\thook$1.on(DevToolsHooks.COMPONENT_EMIT, async (app, instance, event, params) => {\n\t\tif (!app || !instance || devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.COMPONENT_EMIT, app, instance, event, params);\n\t});\n\thook$1.on(DevToolsHooks.PERFORMANCE_START, (app, uid, vm, type, time) => {\n\t\tif (!app || devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.PERFORMANCE_START, app, uid, vm, type, time);\n\t});\n\thook$1.on(DevToolsHooks.PERFORMANCE_END, (app, uid, vm, type, time) => {\n\t\tif (!app || devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.PERFORMANCE_END, app, uid, vm, type, time);\n\t});\n\thook$1.on(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, (pluginDescriptor, setupFn, options) => {\n\t\tif (options?.target === \"legacy\") return;\n\t\tdevtoolsHooks.callHook(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, pluginDescriptor, setupFn);\n\t});\n}\nconst hook = {\n\ton,\n\tsetupDevToolsPlugin(pluginDescriptor, setupFn) {\n\t\treturn devtoolsHooks.callHook(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, pluginDescriptor, setupFn);\n\t}\n};\n\n//#endregion\n//#region src/api/v6/index.ts\nvar DevToolsV6PluginAPI = class {\n\tconstructor({ plugin, ctx }) {\n\t\tthis.hooks = ctx.hooks;\n\t\tthis.plugin = plugin;\n\t}\n\tget on() {\n\t\treturn {\n\t\t\tvisitComponentTree: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.VISIT_COMPONENT_TREE, handler);\n\t\t\t},\n\t\t\tinspectComponent: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.INSPECT_COMPONENT, handler);\n\t\t\t},\n\t\t\teditComponentState: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.EDIT_COMPONENT_STATE, handler);\n\t\t\t},\n\t\t\tgetInspectorTree: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_TREE, handler);\n\t\t\t},\n\t\t\tgetInspectorState: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_STATE, handler);\n\t\t\t},\n\t\t\teditInspectorState: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.EDIT_INSPECTOR_STATE, handler);\n\t\t\t},\n\t\t\tinspectTimelineEvent: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.INSPECT_TIMELINE_EVENT, handler);\n\t\t\t},\n\t\t\ttimelineCleared: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.TIMELINE_CLEARED, handler);\n\t\t\t},\n\t\t\tsetPluginSettings: (handler) => {\n\t\t\t\tthis.hooks.hook(DevToolsV6PluginAPIHookKeys.SET_PLUGIN_SETTINGS, handler);\n\t\t\t}\n\t\t};\n\t}\n\tnotifyComponentUpdate(instance) {\n\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\tconst inspector = getActiveInspectors().find((i) => i.packageName === this.plugin.descriptor.packageName);\n\t\tif (inspector?.id) {\n\t\t\tif (instance) {\n\t\t\t\tconst args = [\n\t\t\t\t\tinstance.appContext.app,\n\t\t\t\t\tinstance.uid,\n\t\t\t\t\tinstance.parent?.uid,\n\t\t\t\t\tinstance\n\t\t\t\t];\n\t\t\t\tdevtoolsHooks.callHook(DevToolsHooks.COMPONENT_UPDATED, ...args);\n\t\t\t} else devtoolsHooks.callHook(DevToolsHooks.COMPONENT_UPDATED);\n\t\t\tthis.hooks.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, {\n\t\t\t\tinspectorId: inspector.id,\n\t\t\t\tplugin: this.plugin\n\t\t\t});\n\t\t}\n\t}\n\taddInspector(options) {\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.ADD_INSPECTOR, {\n\t\t\tinspector: options,\n\t\t\tplugin: this.plugin\n\t\t});\n\t\tif (this.plugin.descriptor.settings) initPluginSettings(options.id, this.plugin.descriptor.settings);\n\t}\n\tsendInspectorTree(inspectorId) {\n\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_TREE, {\n\t\t\tinspectorId,\n\t\t\tplugin: this.plugin\n\t\t});\n\t}\n\tsendInspectorState(inspectorId) {\n\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, {\n\t\t\tinspectorId,\n\t\t\tplugin: this.plugin\n\t\t});\n\t}\n\tselectInspectorNode(inspectorId, nodeId) {\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.CUSTOM_INSPECTOR_SELECT_NODE, {\n\t\t\tinspectorId,\n\t\t\tnodeId,\n\t\t\tplugin: this.plugin\n\t\t});\n\t}\n\tvisitComponentTree(payload) {\n\t\treturn this.hooks.callHook(DevToolsV6PluginAPIHookKeys.VISIT_COMPONENT_TREE, payload);\n\t}\n\tnow() {\n\t\tif (devtoolsState.highPerfModeEnabled) return 0;\n\t\treturn Date.now();\n\t}\n\taddTimelineLayer(options) {\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.TIMELINE_LAYER_ADDED, {\n\t\t\toptions,\n\t\t\tplugin: this.plugin\n\t\t});\n\t}\n\taddTimelineEvent(options) {\n\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\tthis.hooks.callHook(DevToolsContextHookKeys.TIMELINE_EVENT_ADDED, {\n\t\t\toptions,\n\t\t\tplugin: this.plugin\n\t\t});\n\t}\n\tgetSettings(pluginId) {\n\t\treturn getPluginSettings(pluginId ?? this.plugin.descriptor.id, this.plugin.descriptor.settings);\n\t}\n\tgetComponentInstances(app) {\n\t\treturn this.hooks.callHook(DevToolsContextHookKeys.GET_COMPONENT_INSTANCES, { app });\n\t}\n\tgetComponentBounds(instance) {\n\t\treturn this.hooks.callHook(DevToolsContextHookKeys.GET_COMPONENT_BOUNDS, { instance });\n\t}\n\tgetComponentName(instance) {\n\t\treturn this.hooks.callHook(DevToolsContextHookKeys.GET_COMPONENT_NAME, { instance });\n\t}\n\thighlightElement(instance) {\n\t\tconst uid = instance.__VUE_DEVTOOLS_NEXT_UID__;\n\t\treturn this.hooks.callHook(DevToolsContextHookKeys.COMPONENT_HIGHLIGHT, { uid });\n\t}\n\tunhighlightElement() {\n\t\treturn this.hooks.callHook(DevToolsContextHookKeys.COMPONENT_UNHIGHLIGHT);\n\t}\n};\n\n//#endregion\n//#region src/api/index.ts\nconst DevToolsPluginAPI = DevToolsV6PluginAPI;\n\n//#endregion\n//#region src/core/component/state/constants.ts\nconst vueBuiltins = new Set([\n\t\"nextTick\",\n\t\"defineComponent\",\n\t\"defineAsyncComponent\",\n\t\"defineCustomElement\",\n\t\"ref\",\n\t\"computed\",\n\t\"reactive\",\n\t\"readonly\",\n\t\"watchEffect\",\n\t\"watchPostEffect\",\n\t\"watchSyncEffect\",\n\t\"watch\",\n\t\"isRef\",\n\t\"unref\",\n\t\"toRef\",\n\t\"toRefs\",\n\t\"isProxy\",\n\t\"isReactive\",\n\t\"isReadonly\",\n\t\"shallowRef\",\n\t\"triggerRef\",\n\t\"customRef\",\n\t\"shallowReactive\",\n\t\"shallowReadonly\",\n\t\"toRaw\",\n\t\"markRaw\",\n\t\"effectScope\",\n\t\"getCurrentScope\",\n\t\"onScopeDispose\",\n\t\"onMounted\",\n\t\"onUpdated\",\n\t\"onUnmounted\",\n\t\"onBeforeMount\",\n\t\"onBeforeUpdate\",\n\t\"onBeforeUnmount\",\n\t\"onErrorCaptured\",\n\t\"onRenderTracked\",\n\t\"onRenderTriggered\",\n\t\"onActivated\",\n\t\"onDeactivated\",\n\t\"onServerPrefetch\",\n\t\"provide\",\n\t\"inject\",\n\t\"h\",\n\t\"mergeProps\",\n\t\"cloneVNode\",\n\t\"isVNode\",\n\t\"resolveComponent\",\n\t\"resolveDirective\",\n\t\"withDirectives\",\n\t\"withModifiers\"\n]);\nconst symbolRE = /^\\[native Symbol Symbol\\((.*)\\)\\]$/;\nconst rawTypeRE = /^\\[object (\\w+)\\]$/;\nconst specialTypeRE = /^\\[native (\\w+) (.*?)(<>(([\\s\\S])*))?\\]$/;\nconst fnTypeRE = /^(?:function|class) (\\w+)/;\nconst MAX_STRING_SIZE = 1e4;\nconst MAX_ARRAY_SIZE = 5e3;\nconst UNDEFINED = \"__vue_devtool_undefined__\";\nconst INFINITY = \"__vue_devtool_infinity__\";\nconst NEGATIVE_INFINITY = \"__vue_devtool_negative_infinity__\";\nconst NAN = \"__vue_devtool_nan__\";\nconst ESC = {\n\t\"<\": \"<\",\n\t\">\": \">\",\n\t\"\\\"\": \""\",\n\t\"&\": \"&\"\n};\n\n//#endregion\n//#region src/core/component/state/is.ts\nfunction isVueInstance(value) {\n\tif (!ensurePropertyExists(value, \"_\")) return false;\n\tif (!isPlainObject(value._)) return false;\n\treturn Object.keys(value._).includes(\"vnode\");\n}\nfunction isPlainObject(obj) {\n\treturn Object.prototype.toString.call(obj) === \"[object Object]\";\n}\nfunction isPrimitive$1(data) {\n\tif (data == null) return true;\n\tconst type = typeof data;\n\treturn type === \"string\" || type === \"number\" || type === \"boolean\";\n}\nfunction isRef(raw) {\n\treturn !!raw.__v_isRef;\n}\nfunction isComputed(raw) {\n\treturn isRef(raw) && !!raw.effect;\n}\nfunction isReactive(raw) {\n\treturn !!raw.__v_isReactive;\n}\nfunction isReadOnly(raw) {\n\treturn !!raw.__v_isReadonly;\n}\n\n//#endregion\n//#region src/core/component/state/util.ts\nconst tokenMap = {\n\t[UNDEFINED]: \"undefined\",\n\t[NAN]: \"NaN\",\n\t[INFINITY]: \"Infinity\",\n\t[NEGATIVE_INFINITY]: \"-Infinity\"\n};\nconst reversedTokenMap = Object.entries(tokenMap).reduce((acc, [key, value]) => {\n\tacc[value] = key;\n\treturn acc;\n}, {});\nfunction internalStateTokenToString(value) {\n\tif (value === null) return \"null\";\n\treturn typeof value === \"string\" && tokenMap[value] || false;\n}\nfunction replaceTokenToString(value) {\n\tconst replaceRegex = new RegExp(`\"(${Object.keys(tokenMap).join(\"|\")})\"`, \"g\");\n\treturn value.replace(replaceRegex, (_, g1) => tokenMap[g1]);\n}\nfunction replaceStringToToken(value) {\n\tconst literalValue = reversedTokenMap[value.trim()];\n\tif (literalValue) return `\"${literalValue}\"`;\n\tconst replaceRegex = new RegExp(`:\\\\s*(${Object.keys(reversedTokenMap).join(\"|\")})`, \"g\");\n\treturn value.replace(replaceRegex, (_, g1) => `:\"${reversedTokenMap[g1]}\"`);\n}\n/**\n* Convert prop type constructor to string.\n*/\nfunction getPropType(type) {\n\tif (Array.isArray(type)) return type.map((t) => getPropType(t)).join(\" or \");\n\tif (type == null) return \"null\";\n\tconst match = type.toString().match(fnTypeRE);\n\treturn typeof type === \"function\" ? match && match[1] || \"any\" : \"any\";\n}\n/**\n* Sanitize data to be posted to the other side.\n* Since the message posted is sent with structured clone,\n* we need to filter out any types that might cause an error.\n*/\nfunction sanitize(data) {\n\tif (!isPrimitive$1(data) && !Array.isArray(data) && !isPlainObject(data)) return Object.prototype.toString.call(data);\n\telse return data;\n}\nfunction getSetupStateType(raw) {\n\ttry {\n\t\treturn {\n\t\t\tref: isRef(raw),\n\t\t\tcomputed: isComputed(raw),\n\t\t\treactive: isReactive(raw),\n\t\t\treadonly: isReadOnly(raw)\n\t\t};\n\t} catch {\n\t\treturn {\n\t\t\tref: false,\n\t\t\tcomputed: false,\n\t\t\treactive: false,\n\t\t\treadonly: false\n\t\t};\n\t}\n}\nfunction toRaw(value) {\n\tif (value?.__v_raw) return value.__v_raw;\n\treturn value;\n}\nfunction escape(s) {\n\treturn s.replace(/[<>\"&]/g, (s$1) => {\n\t\treturn ESC[s$1] || s$1;\n\t});\n}\n\n//#endregion\n//#region src/core/component/state/process.ts\nfunction mergeOptions(to, from, instance) {\n\tif (typeof from === \"function\") from = from.options;\n\tif (!from) return to;\n\tconst { mixins, extends: extendsOptions } = from;\n\textendsOptions && mergeOptions(to, extendsOptions, instance);\n\tmixins && mixins.forEach((m) => mergeOptions(to, m, instance));\n\tfor (const key of [\"computed\", \"inject\"]) if (Object.prototype.hasOwnProperty.call(from, key)) if (!to[key]) to[key] = from[key];\n\telse Object.assign(to[key], from[key]);\n\treturn to;\n}\nfunction resolveMergedOptions(instance) {\n\tconst raw = instance?.type;\n\tif (!raw) return {};\n\tconst { mixins, extends: extendsOptions } = raw;\n\tconst globalMixins = instance.appContext.mixins;\n\tif (!globalMixins.length && !mixins && !extendsOptions) return raw;\n\tconst options = {};\n\tglobalMixins.forEach((m) => mergeOptions(options, m, instance));\n\tmergeOptions(options, raw, instance);\n\treturn options;\n}\n/**\n* Process the props of an instance.\n* Make sure return a plain object because window.postMessage()\n* will throw an Error if the passed object contains Functions.\n*\n*/\nfunction processProps(instance) {\n\tconst props = [];\n\tconst propDefinitions = instance?.type?.props;\n\tfor (const key in instance?.props) {\n\t\tconst propDefinition = propDefinitions ? propDefinitions[key] : null;\n\t\tconst camelizeKey = camelize(key);\n\t\tprops.push({\n\t\t\ttype: \"props\",\n\t\t\tkey: camelizeKey,\n\t\t\tvalue: returnError(() => instance.props[key]),\n\t\t\teditable: true,\n\t\t\tmeta: propDefinition ? {\n\t\t\t\ttype: propDefinition.type ? getPropType(propDefinition.type) : \"any\",\n\t\t\t\trequired: !!propDefinition.required,\n\t\t\t\t...propDefinition.default ? { default: propDefinition.default.toString() } : {}\n\t\t\t} : { type: \"invalid\" }\n\t\t});\n\t}\n\treturn props;\n}\n/**\n* Process state, filtering out props and \"clean\" the result\n* with a JSON dance. This removes functions which can cause\n* errors during structured clone used by window.postMessage.\n*\n*/\nfunction processState(instance) {\n\tconst type = instance.type;\n\tconst props = type?.props;\n\tconst getters = type.vuex && type.vuex.getters;\n\tconst computedDefs = type.computed;\n\tconst data = {\n\t\t...instance.data,\n\t\t...instance.renderContext\n\t};\n\treturn Object.keys(data).filter((key) => !(props && key in props) && !(getters && key in getters) && !(computedDefs && key in computedDefs)).map((key) => ({\n\t\tkey,\n\t\ttype: \"data\",\n\t\tvalue: returnError(() => data[key]),\n\t\teditable: true\n\t}));\n}\nfunction getStateTypeAndName(info) {\n\tconst stateType = info.computed ? \"computed\" : info.ref ? \"ref\" : info.reactive ? \"reactive\" : null;\n\treturn {\n\t\tstateType,\n\t\tstateTypeName: stateType ? `${stateType.charAt(0).toUpperCase()}${stateType.slice(1)}` : null\n\t};\n}\nfunction processSetupState(instance) {\n\tconst raw = instance.devtoolsRawSetupState || {};\n\treturn Object.keys(instance.setupState).filter((key) => !vueBuiltins.has(key) && key.split(/(?=[A-Z])/)[0] !== \"use\").map((key) => {\n\t\tconst value = returnError(() => toRaw(instance.setupState[key]));\n\t\tconst accessError = value instanceof Error;\n\t\tconst rawData = raw[key];\n\t\tlet result;\n\t\tlet isOtherType = accessError || typeof value === \"function\" || ensurePropertyExists(value, \"render\") && typeof value.render === \"function\" || ensurePropertyExists(value, \"__asyncLoader\") && typeof value.__asyncLoader === \"function\" || typeof value === \"object\" && value && (\"setup\" in value || \"props\" in value) || /^v[A-Z]/.test(key);\n\t\tif (rawData && !accessError) {\n\t\t\tconst info = getSetupStateType(rawData);\n\t\t\tconst { stateType, stateTypeName } = getStateTypeAndName(info);\n\t\t\tconst isState = info.ref || info.computed || info.reactive;\n\t\t\tconst raw$1 = ensurePropertyExists(rawData, \"effect\") ? rawData.effect?.raw?.toString() || rawData.effect?.fn?.toString() : null;\n\t\t\tif (stateType) isOtherType = false;\n\t\t\tresult = {\n\t\t\t\t...stateType ? {\n\t\t\t\t\tstateType,\n\t\t\t\t\tstateTypeName\n\t\t\t\t} : {},\n\t\t\t\t...raw$1 ? { raw: raw$1 } : {},\n\t\t\t\teditable: isState && !info.readonly\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\tkey,\n\t\t\tvalue,\n\t\t\ttype: isOtherType ? \"setup (other)\" : \"setup\",\n\t\t\t...result\n\t\t};\n\t});\n}\n/**\n* Process the computed properties of an instance.\n*/\nfunction processComputed(instance, mergedType) {\n\tconst type = mergedType;\n\tconst computed = [];\n\tconst defs = type.computed || {};\n\tfor (const key in defs) {\n\t\tconst def = defs[key];\n\t\tconst type$1 = typeof def === \"function\" && def.vuex ? \"vuex bindings\" : \"computed\";\n\t\tcomputed.push({\n\t\t\ttype: type$1,\n\t\t\tkey,\n\t\t\tvalue: returnError(() => instance?.proxy?.[key]),\n\t\t\teditable: typeof def.set === \"function\"\n\t\t});\n\t}\n\treturn computed;\n}\nfunction processAttrs(instance) {\n\treturn Object.keys(instance.attrs).map((key) => ({\n\t\ttype: \"attrs\",\n\t\tkey,\n\t\tvalue: returnError(() => instance.attrs[key])\n\t}));\n}\nfunction processProvide(instance) {\n\treturn Reflect.ownKeys(instance.provides).map((key) => ({\n\t\ttype: \"provided\",\n\t\tkey: key.toString(),\n\t\tvalue: returnError(() => instance.provides[key])\n\t}));\n}\nfunction processInject(instance, mergedType) {\n\tif (!mergedType?.inject) return [];\n\tlet keys = [];\n\tlet defaultValue;\n\tif (Array.isArray(mergedType.inject)) keys = mergedType.inject.map((key) => ({\n\t\tkey,\n\t\toriginalKey: key\n\t}));\n\telse keys = Reflect.ownKeys(mergedType.inject).map((key) => {\n\t\tconst value = mergedType.inject[key];\n\t\tlet originalKey;\n\t\tif (typeof value === \"string\" || typeof value === \"symbol\") originalKey = value;\n\t\telse {\n\t\t\toriginalKey = value.from;\n\t\t\tdefaultValue = value.default;\n\t\t}\n\t\treturn {\n\t\t\tkey,\n\t\t\toriginalKey\n\t\t};\n\t});\n\treturn keys.map(({ key, originalKey }) => ({\n\t\ttype: \"injected\",\n\t\tkey: originalKey && key !== originalKey ? `${originalKey.toString()} ➞ ${key.toString()}` : key.toString(),\n\t\tvalue: returnError(() => instance.ctx.hasOwnProperty(key) ? instance.ctx[key] : instance.provides.hasOwnProperty(originalKey) ? instance.provides[originalKey] : defaultValue)\n\t}));\n}\nfunction processRefs(instance) {\n\treturn Object.keys(instance.refs).map((key) => ({\n\t\ttype: \"template refs\",\n\t\tkey,\n\t\tvalue: returnError(() => instance.refs[key])\n\t}));\n}\nfunction processEventListeners(instance) {\n\tconst emitsDefinition = instance.type.emits;\n\tconst declaredEmits = Array.isArray(emitsDefinition) ? emitsDefinition : Object.keys(emitsDefinition ?? {});\n\tconst keys = Object.keys(instance?.vnode?.props ?? {});\n\tconst result = [];\n\tfor (const key of keys) {\n\t\tconst [prefix, ...eventNameParts] = key.split(/(?=[A-Z])/);\n\t\tif (prefix === \"on\") {\n\t\t\tconst eventName = eventNameParts.join(\"-\").toLowerCase();\n\t\t\tconst isDeclared = declaredEmits.includes(eventName);\n\t\t\tresult.push({\n\t\t\t\ttype: \"event listeners\",\n\t\t\t\tkey: eventName,\n\t\t\t\tvalue: { _custom: {\n\t\t\t\t\tdisplayText: isDeclared ? \"✅ Declared\" : \"⚠️ Not declared\",\n\t\t\t\t\tkey: isDeclared ? \"✅ Declared\" : \"⚠️ Not declared\",\n\t\t\t\t\tvalue: isDeclared ? \"✅ Declared\" : \"⚠️ Not declared\",\n\t\t\t\t\ttooltipText: !isDeclared ? `The event ${eventName} is not declared in the emits option. It will leak into the component's attributes ($attrs).` : null\n\t\t\t\t} }\n\t\t\t});\n\t\t}\n\t}\n\treturn result;\n}\nfunction processInstanceState(instance) {\n\tconst mergedType = resolveMergedOptions(instance);\n\treturn processProps(instance).concat(processState(instance), processSetupState(instance), processComputed(instance, mergedType), processAttrs(instance), processProvide(instance), processInject(instance, mergedType), processRefs(instance), processEventListeners(instance));\n}\n\n//#endregion\n//#region src/core/component/state/index.ts\nfunction getInstanceState(params) {\n\tconst instance = getComponentInstance(activeAppRecord.value, params.instanceId);\n\treturn {\n\t\tid: getUniqueComponentId(instance),\n\t\tname: getInstanceName(instance),\n\t\tfile: instance?.type?.__file,\n\t\tstate: processInstanceState(instance),\n\t\tinstance\n\t};\n}\n\n//#endregion\n//#region src/core/component/tree/filter.ts\nvar ComponentFilter = class {\n\tconstructor(filter) {\n\t\tthis.filter = filter || \"\";\n\t}\n\t/**\n\t* Check if an instance is qualified.\n\t*\n\t* @param {Vue|Vnode} instance\n\t* @return {boolean}\n\t*/\n\tisQualified(instance) {\n\t\tconst name = getInstanceName(instance);\n\t\treturn classify(name).toLowerCase().includes(this.filter) || kebabize(name).toLowerCase().includes(this.filter);\n\t}\n};\nfunction createComponentFilter(filterText) {\n\treturn new ComponentFilter(filterText);\n}\n\n//#endregion\n//#region src/core/component/tree/walker.ts\nvar ComponentWalker = class {\n\tconstructor(options) {\n\t\tthis.captureIds = /* @__PURE__ */ new Map();\n\t\tconst { filterText = \"\", maxDepth, recursively, api } = options;\n\t\tthis.componentFilter = createComponentFilter(filterText);\n\t\tthis.maxDepth = maxDepth;\n\t\tthis.recursively = recursively;\n\t\tthis.api = api;\n\t}\n\tgetComponentTree(instance) {\n\t\tthis.captureIds = /* @__PURE__ */ new Map();\n\t\treturn this.findQualifiedChildren(instance, 0);\n\t}\n\tgetComponentParents(instance) {\n\t\tthis.captureIds = /* @__PURE__ */ new Map();\n\t\tconst parents = [];\n\t\tthis.captureId(instance);\n\t\tlet parent = instance;\n\t\twhile (parent = parent.parent) {\n\t\t\tthis.captureId(parent);\n\t\t\tparents.push(parent);\n\t\t}\n\t\treturn parents;\n\t}\n\tcaptureId(instance) {\n\t\tif (!instance) return null;\n\t\tconst id = instance.__VUE_DEVTOOLS_NEXT_UID__ != null ? instance.__VUE_DEVTOOLS_NEXT_UID__ : getUniqueComponentId(instance);\n\t\tinstance.__VUE_DEVTOOLS_NEXT_UID__ = id;\n\t\tif (this.captureIds.has(id)) return null;\n\t\telse this.captureIds.set(id, void 0);\n\t\tthis.mark(instance);\n\t\treturn id;\n\t}\n\t/**\n\t* Capture the meta information of an instance. (recursive)\n\t*\n\t* @param {Vue} instance\n\t* @return {object}\n\t*/\n\tasync capture(instance, depth) {\n\t\tif (!instance) return null;\n\t\tconst id = this.captureId(instance);\n\t\tconst name = getInstanceName(instance);\n\t\tconst children = this.getInternalInstanceChildren(instance.subTree).filter((child) => !isBeingDestroyed(child));\n\t\tconst parents = this.getComponentParents(instance) || [];\n\t\tconst inactive = !!instance.isDeactivated || parents.some((parent) => parent.isDeactivated);\n\t\tconst treeNode = {\n\t\t\tuid: instance.uid,\n\t\t\tid,\n\t\t\tname,\n\t\t\trenderKey: getRenderKey(instance.vnode ? instance.vnode.key : null),\n\t\t\tinactive,\n\t\t\tchildren: [],\n\t\t\tisFragment: isFragment(instance),\n\t\t\ttags: typeof instance.type !== \"function\" ? [] : [{\n\t\t\t\tlabel: \"functional\",\n\t\t\t\ttextColor: 5592405,\n\t\t\t\tbackgroundColor: 15658734\n\t\t\t}],\n\t\t\tautoOpen: this.recursively,\n\t\t\tfile: instance.type.__file || \"\"\n\t\t};\n\t\tif (depth < this.maxDepth || instance.type.__isKeepAlive || parents.some((parent) => parent.type.__isKeepAlive)) treeNode.children = await Promise.all(children.map((child) => this.capture(child, depth + 1)).filter(Boolean));\n\t\tif (this.isKeepAlive(instance)) {\n\t\t\tconst cachedComponents = this.getKeepAliveCachedInstances(instance);\n\t\t\tconst childrenIds = children.map((child) => child.__VUE_DEVTOOLS_NEXT_UID__);\n\t\t\tfor (const cachedChild of cachedComponents) if (!childrenIds.includes(cachedChild.__VUE_DEVTOOLS_NEXT_UID__)) {\n\t\t\t\tconst node = await this.capture({\n\t\t\t\t\t...cachedChild,\n\t\t\t\t\tisDeactivated: true\n\t\t\t\t}, depth + 1);\n\t\t\t\tif (node) treeNode.children.push(node);\n\t\t\t}\n\t\t}\n\t\tconst firstElement = getRootElementsFromComponentInstance(instance)[0];\n\t\tif (firstElement?.parentElement) {\n\t\t\tconst parentInstance = instance.parent;\n\t\t\tconst parentRootElements = parentInstance ? getRootElementsFromComponentInstance(parentInstance) : [];\n\t\t\tlet el = firstElement;\n\t\t\tconst indexList = [];\n\t\t\tdo {\n\t\t\t\tindexList.push(Array.from(el.parentElement.childNodes).indexOf(el));\n\t\t\t\tel = el.parentElement;\n\t\t\t} while (el.parentElement && parentRootElements.length && !parentRootElements.includes(el));\n\t\t\ttreeNode.domOrder = indexList.reverse();\n\t\t} else treeNode.domOrder = [-1];\n\t\tif (instance.suspense?.suspenseKey) {\n\t\t\ttreeNode.tags.push({\n\t\t\t\tlabel: instance.suspense.suspenseKey,\n\t\t\t\tbackgroundColor: 14979812,\n\t\t\t\ttextColor: 16777215\n\t\t\t});\n\t\t\tthis.mark(instance, true);\n\t\t}\n\t\tthis.api.visitComponentTree({\n\t\t\ttreeNode,\n\t\t\tcomponentInstance: instance,\n\t\t\tapp: instance.appContext.app,\n\t\t\tfilter: this.componentFilter.filter\n\t\t});\n\t\treturn treeNode;\n\t}\n\t/**\n\t* Find qualified children from a single instance.\n\t* If the instance itself is qualified, just return itself.\n\t* This is ok because [].concat works in both cases.\n\t*\n\t* @param {Vue|Vnode} instance\n\t* @return {Vue|Array}\n\t*/\n\tasync findQualifiedChildren(instance, depth) {\n\t\tif (this.componentFilter.isQualified(instance) && !instance.type.devtools?.hide) return [await this.capture(instance, depth)];\n\t\telse if (instance.subTree) {\n\t\t\tconst list = this.isKeepAlive(instance) ? this.getKeepAliveCachedInstances(instance) : this.getInternalInstanceChildren(instance.subTree);\n\t\t\treturn this.findQualifiedChildrenFromList(list, depth);\n\t\t} else return [];\n\t}\n\t/**\n\t* Iterate through an array of instances and flatten it into\n\t* an array of qualified instances. This is a depth-first\n\t* traversal - e.g. if an instance is not matched, we will\n\t* recursively go deeper until a qualified child is found.\n\t*\n\t* @param {Array} instances\n\t* @return {Array}\n\t*/\n\tasync findQualifiedChildrenFromList(instances, depth) {\n\t\tinstances = instances.filter((child) => !isBeingDestroyed(child) && !child.type.devtools?.hide);\n\t\tif (!this.componentFilter.filter) return Promise.all(instances.map((child) => this.capture(child, depth)));\n\t\telse return Array.prototype.concat.apply([], await Promise.all(instances.map((i) => this.findQualifiedChildren(i, depth))));\n\t}\n\t/**\n\t* Get children from a component instance.\n\t*/\n\tgetInternalInstanceChildren(subTree, suspense = null) {\n\t\tconst list = [];\n\t\tif (subTree) {\n\t\t\tif (subTree.component) !suspense ? list.push(subTree.component) : list.push({\n\t\t\t\t...subTree.component,\n\t\t\t\tsuspense\n\t\t\t});\n\t\t\telse if (subTree.suspense) {\n\t\t\t\tconst suspenseKey = !subTree.suspense.isInFallback ? \"suspense default\" : \"suspense fallback\";\n\t\t\t\tlist.push(...this.getInternalInstanceChildren(subTree.suspense.activeBranch, {\n\t\t\t\t\t...subTree.suspense,\n\t\t\t\t\tsuspenseKey\n\t\t\t\t}));\n\t\t\t} else if (Array.isArray(subTree.children)) subTree.children.forEach((childSubTree) => {\n\t\t\t\tif (childSubTree.component) !suspense ? list.push(childSubTree.component) : list.push({\n\t\t\t\t\t...childSubTree.component,\n\t\t\t\t\tsuspense\n\t\t\t\t});\n\t\t\t\telse list.push(...this.getInternalInstanceChildren(childSubTree, suspense));\n\t\t\t});\n\t\t}\n\t\treturn list.filter((child) => !isBeingDestroyed(child) && !child.type.devtools?.hide);\n\t}\n\t/**\n\t* Mark an instance as captured and store it in the instance map.\n\t*\n\t* @param {Vue} instance\n\t*/\n\tmark(instance, force = false) {\n\t\tconst instanceMap = getAppRecord(instance).instanceMap;\n\t\tif (force || !instanceMap.has(instance.__VUE_DEVTOOLS_NEXT_UID__)) {\n\t\t\tinstanceMap.set(instance.__VUE_DEVTOOLS_NEXT_UID__, instance);\n\t\t\tactiveAppRecord.value.instanceMap = instanceMap;\n\t\t}\n\t}\n\tisKeepAlive(instance) {\n\t\treturn instance.type.__isKeepAlive && instance.__v_cache;\n\t}\n\tgetKeepAliveCachedInstances(instance) {\n\t\treturn Array.from(instance.__v_cache.values()).map((vnode) => vnode.component).filter(Boolean);\n\t}\n};\n\n//#endregion\n//#region src/core/timeline/perf.ts\nconst markEndQueue = /* @__PURE__ */ new Map();\nconst PERFORMANCE_EVENT_LAYER_ID = \"performance\";\nasync function performanceMarkStart(api, app, uid, vm, type, time) {\n\tconst appRecord = await getAppRecord(app);\n\tif (!appRecord) return;\n\tconst componentName = getInstanceName(vm) || \"Unknown Component\";\n\tconst groupId = devtoolsState.perfUniqueGroupId++;\n\tconst groupKey = `${uid}-${type}`;\n\tappRecord.perfGroupIds.set(groupKey, {\n\t\tgroupId,\n\t\ttime\n\t});\n\tawait api.addTimelineEvent({\n\t\tlayerId: PERFORMANCE_EVENT_LAYER_ID,\n\t\tevent: {\n\t\t\ttime: Date.now(),\n\t\t\tdata: {\n\t\t\t\tcomponent: componentName,\n\t\t\t\ttype,\n\t\t\t\tmeasure: \"start\"\n\t\t\t},\n\t\t\ttitle: componentName,\n\t\t\tsubtitle: type,\n\t\t\tgroupId\n\t\t}\n\t});\n\tif (markEndQueue.has(groupKey)) {\n\t\tconst { app: app$1, uid: uid$1, instance, type: type$1, time: time$1 } = markEndQueue.get(groupKey);\n\t\tmarkEndQueue.delete(groupKey);\n\t\tawait performanceMarkEnd(api, app$1, uid$1, instance, type$1, time$1);\n\t}\n}\nfunction performanceMarkEnd(api, app, uid, vm, type, time) {\n\tconst appRecord = getAppRecord(app);\n\tif (!appRecord) return;\n\tconst componentName = getInstanceName(vm) || \"Unknown Component\";\n\tconst groupKey = `${uid}-${type}`;\n\tconst groupInfo = appRecord.perfGroupIds.get(groupKey);\n\tif (groupInfo) {\n\t\tconst groupId = groupInfo.groupId;\n\t\tconst duration = time - groupInfo.time;\n\t\tapi.addTimelineEvent({\n\t\t\tlayerId: PERFORMANCE_EVENT_LAYER_ID,\n\t\t\tevent: {\n\t\t\t\ttime: Date.now(),\n\t\t\t\tdata: {\n\t\t\t\t\tcomponent: componentName,\n\t\t\t\t\ttype,\n\t\t\t\t\tmeasure: \"end\",\n\t\t\t\t\tduration: { _custom: {\n\t\t\t\t\t\ttype: \"Duration\",\n\t\t\t\t\t\tvalue: duration,\n\t\t\t\t\t\tdisplay: `${duration} ms`\n\t\t\t\t\t} }\n\t\t\t\t},\n\t\t\t\ttitle: componentName,\n\t\t\t\tsubtitle: type,\n\t\t\t\tgroupId\n\t\t\t}\n\t\t});\n\t} else markEndQueue.set(groupKey, {\n\t\tapp,\n\t\tuid,\n\t\tinstance: vm,\n\t\ttype,\n\t\ttime\n\t});\n}\n\n//#endregion\n//#region src/core/timeline/index.ts\nconst COMPONENT_EVENT_LAYER_ID = \"component-event\";\nfunction setupBuiltinTimelineLayers(api) {\n\tif (!isBrowser) return;\n\tapi.addTimelineLayer({\n\t\tid: \"mouse\",\n\t\tlabel: \"Mouse\",\n\t\tcolor: 10768815\n\t});\n\t[\n\t\t\"mousedown\",\n\t\t\"mouseup\",\n\t\t\"click\",\n\t\t\"dblclick\"\n\t].forEach((eventType) => {\n\t\tif (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.mouseEventEnabled) return;\n\t\twindow.addEventListener(eventType, async (event) => {\n\t\t\tawait api.addTimelineEvent({\n\t\t\t\tlayerId: \"mouse\",\n\t\t\t\tevent: {\n\t\t\t\t\ttime: Date.now(),\n\t\t\t\t\tdata: {\n\t\t\t\t\t\ttype: eventType,\n\t\t\t\t\t\tx: event.clientX,\n\t\t\t\t\t\ty: event.clientY\n\t\t\t\t\t},\n\t\t\t\t\ttitle: eventType\n\t\t\t\t}\n\t\t\t});\n\t\t}, {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t});\n\t});\n\tapi.addTimelineLayer({\n\t\tid: \"keyboard\",\n\t\tlabel: \"Keyboard\",\n\t\tcolor: 8475055\n\t});\n\t[\n\t\t\"keyup\",\n\t\t\"keydown\",\n\t\t\"keypress\"\n\t].forEach((eventType) => {\n\t\twindow.addEventListener(eventType, async (event) => {\n\t\t\tif (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.keyboardEventEnabled) return;\n\t\t\tawait api.addTimelineEvent({\n\t\t\t\tlayerId: \"keyboard\",\n\t\t\t\tevent: {\n\t\t\t\t\ttime: Date.now(),\n\t\t\t\t\tdata: {\n\t\t\t\t\t\ttype: eventType,\n\t\t\t\t\t\tkey: event.key,\n\t\t\t\t\t\tctrlKey: event.ctrlKey,\n\t\t\t\t\t\tshiftKey: event.shiftKey,\n\t\t\t\t\t\taltKey: event.altKey,\n\t\t\t\t\t\tmetaKey: event.metaKey\n\t\t\t\t\t},\n\t\t\t\t\ttitle: event.key\n\t\t\t\t}\n\t\t\t});\n\t\t}, {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t});\n\t});\n\tapi.addTimelineLayer({\n\t\tid: COMPONENT_EVENT_LAYER_ID,\n\t\tlabel: \"Component events\",\n\t\tcolor: 5226637\n\t});\n\thook.on.componentEmit(async (app, instance, event, params) => {\n\t\tif (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.componentEventEnabled) return;\n\t\tconst appRecord = await getAppRecord(app);\n\t\tif (!appRecord) return;\n\t\tconst componentId = `${appRecord.id}:${instance.uid}`;\n\t\tconst componentName = getInstanceName(instance) || \"Unknown Component\";\n\t\tapi.addTimelineEvent({\n\t\t\tlayerId: COMPONENT_EVENT_LAYER_ID,\n\t\t\tevent: {\n\t\t\t\ttime: Date.now(),\n\t\t\t\tdata: {\n\t\t\t\t\tcomponent: { _custom: {\n\t\t\t\t\t\ttype: \"component-definition\",\n\t\t\t\t\t\tdisplay: componentName\n\t\t\t\t\t} },\n\t\t\t\t\tevent,\n\t\t\t\t\tparams\n\t\t\t\t},\n\t\t\t\ttitle: event,\n\t\t\t\tsubtitle: `by ${componentName}`,\n\t\t\t\tmeta: { componentId }\n\t\t\t}\n\t\t});\n\t});\n\tapi.addTimelineLayer({\n\t\tid: \"performance\",\n\t\tlabel: PERFORMANCE_EVENT_LAYER_ID,\n\t\tcolor: 4307050\n\t});\n\thook.on.perfStart((app, uid, vm, type, time) => {\n\t\tif (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.performanceEventEnabled) return;\n\t\tperformanceMarkStart(api, app, uid, vm, type, time);\n\t});\n\thook.on.perfEnd((app, uid, vm, type, time) => {\n\t\tif (!devtoolsState.timelineLayersState.recordingState || !devtoolsState.timelineLayersState.performanceEventEnabled) return;\n\t\tperformanceMarkEnd(api, app, uid, vm, type, time);\n\t});\n}\n\n//#endregion\n//#region src/core/vm/index.ts\nconst MAX_$VM = 10;\nconst $vmQueue = [];\nfunction exposeInstanceToWindow(componentInstance) {\n\tif (typeof window === \"undefined\") return;\n\tconst win = window;\n\tif (!componentInstance) return;\n\twin.$vm = componentInstance;\n\tif ($vmQueue[0] !== componentInstance) {\n\t\tif ($vmQueue.length >= MAX_$VM) $vmQueue.pop();\n\t\tfor (let i = $vmQueue.length; i > 0; i--) win[`$vm${i}`] = $vmQueue[i] = $vmQueue[i - 1];\n\t\twin.$vm0 = $vmQueue[0] = componentInstance;\n\t}\n}\n\n//#endregion\n//#region src/core/plugin/components.ts\nconst INSPECTOR_ID = \"components\";\nfunction createComponentsDevToolsPlugin(app) {\n\tconst descriptor = {\n\t\tid: INSPECTOR_ID,\n\t\tlabel: \"Components\",\n\t\tapp\n\t};\n\tconst setupFn = (api) => {\n\t\tapi.addInspector({\n\t\t\tid: INSPECTOR_ID,\n\t\t\tlabel: \"Components\",\n\t\t\ttreeFilterPlaceholder: \"Search components\"\n\t\t});\n\t\tsetupBuiltinTimelineLayers(api);\n\t\tapi.on.getInspectorTree(async (payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n\t\t\t\tconst instance = getComponentInstance(activeAppRecord.value, payload.instanceId);\n\t\t\t\tif (instance) payload.rootNodes = await new ComponentWalker({\n\t\t\t\t\tfilterText: payload.filter,\n\t\t\t\t\tmaxDepth: 100,\n\t\t\t\t\trecursively: false,\n\t\t\t\t\tapi\n\t\t\t\t}).getComponentTree(instance);\n\t\t\t}\n\t\t});\n\t\tapi.on.getInspectorState(async (payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n\t\t\t\tconst result = getInstanceState({ instanceId: payload.nodeId });\n\t\t\t\tconst componentInstance = result.instance;\n\t\t\t\tconst _payload = {\n\t\t\t\t\tcomponentInstance,\n\t\t\t\t\tapp: result.instance?.appContext.app,\n\t\t\t\t\tinstanceData: result\n\t\t\t\t};\n\t\t\t\tdevtoolsContext.hooks.callHookWith((callbacks) => {\n\t\t\t\t\tcallbacks.forEach((cb) => cb(_payload));\n\t\t\t\t}, DevToolsV6PluginAPIHookKeys.INSPECT_COMPONENT);\n\t\t\t\tpayload.state = result;\n\t\t\t\texposeInstanceToWindow(componentInstance);\n\t\t\t}\n\t\t});\n\t\tapi.on.editInspectorState(async (payload) => {\n\t\t\tif (payload.app === app && payload.inspectorId === INSPECTOR_ID) {\n\t\t\t\teditState(payload);\n\t\t\t\tawait api.sendInspectorState(\"components\");\n\t\t\t}\n\t\t});\n\t\tconst debounceSendInspectorTree = debounce(() => {\n\t\t\tapi.sendInspectorTree(INSPECTOR_ID);\n\t\t}, 120);\n\t\tconst debounceSendInspectorState = debounce(() => {\n\t\t\tapi.sendInspectorState(INSPECTOR_ID);\n\t\t}, 120);\n\t\thook.on.componentAdded(async (app$1, uid, parentUid, component) => {\n\t\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\t\tif (app$1?._instance?.type?.devtools?.hide) return;\n\t\t\tif (!app$1 || typeof uid !== \"number\" && !uid || !component) return;\n\t\t\tconst id = await getComponentId({\n\t\t\t\tapp: app$1,\n\t\t\t\tuid,\n\t\t\t\tinstance: component\n\t\t\t});\n\t\t\tconst appRecord = await getAppRecord(app$1);\n\t\t\tif (component) {\n\t\t\t\tif (component.__VUE_DEVTOOLS_NEXT_UID__ == null) component.__VUE_DEVTOOLS_NEXT_UID__ = id;\n\t\t\t\tif (!appRecord?.instanceMap.has(id)) {\n\t\t\t\t\tappRecord?.instanceMap.set(id, component);\n\t\t\t\t\tif (activeAppRecord.value.id === appRecord?.id) activeAppRecord.value.instanceMap = appRecord.instanceMap;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!appRecord) return;\n\t\t\tdebounceSendInspectorTree();\n\t\t});\n\t\thook.on.componentUpdated(async (app$1, uid, parentUid, component) => {\n\t\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\t\tif (app$1?._instance?.type?.devtools?.hide) return;\n\t\t\tif (!app$1 || typeof uid !== \"number\" && !uid || !component) return;\n\t\t\tconst id = await getComponentId({\n\t\t\t\tapp: app$1,\n\t\t\t\tuid,\n\t\t\t\tinstance: component\n\t\t\t});\n\t\t\tconst appRecord = await getAppRecord(app$1);\n\t\t\tif (component) {\n\t\t\t\tif (component.__VUE_DEVTOOLS_NEXT_UID__ == null) component.__VUE_DEVTOOLS_NEXT_UID__ = id;\n\t\t\t\tif (!appRecord?.instanceMap.has(id)) {\n\t\t\t\t\tappRecord?.instanceMap.set(id, component);\n\t\t\t\t\tif (activeAppRecord.value.id === appRecord?.id) activeAppRecord.value.instanceMap = appRecord.instanceMap;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!appRecord) return;\n\t\t\tdebounceSendInspectorTree();\n\t\t\tdebounceSendInspectorState();\n\t\t});\n\t\thook.on.componentRemoved(async (app$1, uid, parentUid, component) => {\n\t\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\t\tif (app$1?._instance?.type?.devtools?.hide) return;\n\t\t\tif (!app$1 || typeof uid !== \"number\" && !uid || !component) return;\n\t\t\tconst appRecord = await getAppRecord(app$1);\n\t\t\tif (!appRecord) return;\n\t\t\tconst id = await getComponentId({\n\t\t\t\tapp: app$1,\n\t\t\t\tuid,\n\t\t\t\tinstance: component\n\t\t\t});\n\t\t\tappRecord?.instanceMap.delete(id);\n\t\t\tif (activeAppRecord.value.id === appRecord?.id) activeAppRecord.value.instanceMap = appRecord.instanceMap;\n\t\t\tdebounceSendInspectorTree();\n\t\t});\n\t};\n\treturn [descriptor, setupFn];\n}\n\n//#endregion\n//#region src/core/plugin/index.ts\ntarget.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__ ??= /* @__PURE__ */ new Set();\nfunction setupDevToolsPlugin(pluginDescriptor, setupFn) {\n\treturn hook.setupDevToolsPlugin(pluginDescriptor, setupFn);\n}\nfunction callDevToolsPluginSetupFn(plugin, app) {\n\tconst [pluginDescriptor, setupFn] = plugin;\n\tif (pluginDescriptor.app !== app) return;\n\tconst api = new DevToolsPluginAPI({\n\t\tplugin: {\n\t\t\tsetupFn,\n\t\t\tdescriptor: pluginDescriptor\n\t\t},\n\t\tctx: devtoolsContext\n\t});\n\tif (pluginDescriptor.packageName === \"vuex\") api.on.editInspectorState((payload) => {\n\t\tapi.sendInspectorState(payload.inspectorId);\n\t});\n\tsetupFn(api);\n}\nfunction removeRegisteredPluginApp(app) {\n\ttarget.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.delete(app);\n}\nfunction registerDevToolsPlugin(app, options) {\n\tif (target.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.has(app)) return;\n\tif (devtoolsState.highPerfModeEnabled && !options?.inspectingComponent) return;\n\ttarget.__VUE_DEVTOOLS_KIT__REGISTERED_PLUGIN_APPS__.add(app);\n\tdevtoolsPluginBuffer.forEach((plugin) => {\n\t\tcallDevToolsPluginSetupFn(plugin, app);\n\t});\n}\n\n//#endregion\n//#region src/ctx/router.ts\nconst ROUTER_KEY = \"__VUE_DEVTOOLS_ROUTER__\";\nconst ROUTER_INFO_KEY = \"__VUE_DEVTOOLS_ROUTER_INFO__\";\ntarget[ROUTER_INFO_KEY] ??= {\n\tcurrentRoute: null,\n\troutes: []\n};\ntarget[ROUTER_KEY] ??= {};\nconst devtoolsRouterInfo = new Proxy(target[ROUTER_INFO_KEY], { get(target$1, property) {\n\treturn target[ROUTER_INFO_KEY][property];\n} });\nconst devtoolsRouter = new Proxy(target[ROUTER_KEY], { get(target$1, property) {\n\tif (property === \"value\") return target[ROUTER_KEY];\n} });\n\n//#endregion\n//#region src/core/router/index.ts\nfunction getRoutes(router) {\n\tconst routesMap = /* @__PURE__ */ new Map();\n\treturn (router?.getRoutes() || []).filter((i) => !routesMap.has(i.path) && routesMap.set(i.path, 1));\n}\nfunction filterRoutes(routes) {\n\treturn routes.map((item) => {\n\t\tlet { path, name, children, meta } = item;\n\t\tif (children?.length) children = filterRoutes(children);\n\t\treturn {\n\t\t\tpath,\n\t\t\tname,\n\t\t\tchildren,\n\t\t\tmeta\n\t\t};\n\t});\n}\nfunction filterCurrentRoute(route) {\n\tif (route) {\n\t\tconst { fullPath, hash, href, path, name, matched, params, query } = route;\n\t\treturn {\n\t\t\tfullPath,\n\t\t\thash,\n\t\t\thref,\n\t\t\tpath,\n\t\t\tname,\n\t\t\tparams,\n\t\t\tquery,\n\t\t\tmatched: filterRoutes(matched)\n\t\t};\n\t}\n\treturn route;\n}\nfunction normalizeRouterInfo(appRecord, activeAppRecord$1) {\n\tfunction init() {\n\t\tconst router = appRecord.app?.config.globalProperties.$router;\n\t\tconst currentRoute = filterCurrentRoute(router?.currentRoute.value);\n\t\tconst routes = filterRoutes(getRoutes(router));\n\t\tconst c = console.warn;\n\t\tconsole.warn = () => {};\n\t\ttarget[ROUTER_INFO_KEY] = {\n\t\t\tcurrentRoute: currentRoute ? deepClone(currentRoute) : {},\n\t\t\troutes: deepClone(routes)\n\t\t};\n\t\ttarget[ROUTER_KEY] = router;\n\t\tconsole.warn = c;\n\t}\n\tinit();\n\thook.on.componentUpdated(debounce(() => {\n\t\tif (activeAppRecord$1.value?.app !== appRecord.app) return;\n\t\tinit();\n\t\tif (devtoolsState.highPerfModeEnabled) return;\n\t\tdevtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.ROUTER_INFO_UPDATED, { state: target[ROUTER_INFO_KEY] });\n\t}, 200));\n}\n\n//#endregion\n//#region src/ctx/api.ts\nfunction createDevToolsApi(hooks$1) {\n\treturn {\n\t\tasync getInspectorTree(payload) {\n\t\t\tconst _payload = {\n\t\t\t\t...payload,\n\t\t\t\tapp: activeAppRecord.value.app,\n\t\t\t\trootNodes: []\n\t\t\t};\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\thooks$1.callHookWith(async (callbacks) => {\n\t\t\t\t\tawait Promise.all(callbacks.map((cb) => cb(_payload)));\n\t\t\t\t\tresolve();\n\t\t\t\t}, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_TREE);\n\t\t\t});\n\t\t\treturn _payload.rootNodes;\n\t\t},\n\t\tasync getInspectorState(payload) {\n\t\t\tconst _payload = {\n\t\t\t\t...payload,\n\t\t\t\tapp: activeAppRecord.value.app,\n\t\t\t\tstate: null\n\t\t\t};\n\t\t\tconst ctx = { currentTab: `custom-inspector:${payload.inspectorId}` };\n\t\t\tawait new Promise((resolve) => {\n\t\t\t\thooks$1.callHookWith(async (callbacks) => {\n\t\t\t\t\tawait Promise.all(callbacks.map((cb) => cb(_payload, ctx)));\n\t\t\t\t\tresolve();\n\t\t\t\t}, DevToolsV6PluginAPIHookKeys.GET_INSPECTOR_STATE);\n\t\t\t});\n\t\t\treturn _payload.state;\n\t\t},\n\t\teditInspectorState(payload) {\n\t\t\tconst stateEditor$1 = new StateEditor();\n\t\t\tconst _payload = {\n\t\t\t\t...payload,\n\t\t\t\tapp: activeAppRecord.value.app,\n\t\t\t\tset: (obj, path = payload.path, value = payload.state.value, cb) => {\n\t\t\t\t\tstateEditor$1.set(obj, path, value, cb || stateEditor$1.createDefaultSetCallback(payload.state));\n\t\t\t\t}\n\t\t\t};\n\t\t\thooks$1.callHookWith((callbacks) => {\n\t\t\t\tcallbacks.forEach((cb) => cb(_payload));\n\t\t\t}, DevToolsV6PluginAPIHookKeys.EDIT_INSPECTOR_STATE);\n\t\t},\n\t\tsendInspectorState(inspectorId) {\n\t\t\tconst inspector = getInspector(inspectorId);\n\t\t\thooks$1.callHook(DevToolsContextHookKeys.SEND_INSPECTOR_STATE, {\n\t\t\t\tinspectorId,\n\t\t\t\tplugin: {\n\t\t\t\t\tdescriptor: inspector.descriptor,\n\t\t\t\t\tsetupFn: () => ({})\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\tinspectComponentInspector() {\n\t\t\treturn inspectComponentHighLighter();\n\t\t},\n\t\tcancelInspectComponentInspector() {\n\t\t\treturn cancelInspectComponentHighLighter();\n\t\t},\n\t\tgetComponentRenderCode(id) {\n\t\t\tconst instance = getComponentInstance(activeAppRecord.value, id);\n\t\t\tif (instance) return !(typeof instance?.type === \"function\") ? instance.render.toString() : instance.type.toString();\n\t\t},\n\t\tscrollToComponent(id) {\n\t\t\treturn scrollToComponent({ id });\n\t\t},\n\t\topenInEditor,\n\t\tgetVueInspector: getComponentInspector,\n\t\ttoggleApp(id, options) {\n\t\t\tconst appRecord = devtoolsAppRecords.value.find((record) => record.id === id);\n\t\t\tif (appRecord) {\n\t\t\t\tsetActiveAppRecordId(id);\n\t\t\t\tsetActiveAppRecord(appRecord);\n\t\t\t\tnormalizeRouterInfo(appRecord, activeAppRecord);\n\t\t\t\tcallInspectorUpdatedHook();\n\t\t\t\tregisterDevToolsPlugin(appRecord.app, options);\n\t\t\t}\n\t\t},\n\t\tinspectDOM(instanceId) {\n\t\t\tconst instance = getComponentInstance(activeAppRecord.value, instanceId);\n\t\t\tif (instance) {\n\t\t\t\tconst [el] = getRootElementsFromComponentInstance(instance);\n\t\t\t\tif (el) target.__VUE_DEVTOOLS_INSPECT_DOM_TARGET__ = el;\n\t\t\t}\n\t\t},\n\t\tupdatePluginSettings(pluginId, key, value) {\n\t\t\tsetPluginSettings(pluginId, key, value);\n\t\t},\n\t\tgetPluginSettings(pluginId) {\n\t\t\treturn {\n\t\t\t\toptions: getPluginSettingsOptions(pluginId),\n\t\t\t\tvalues: getPluginSettings(pluginId)\n\t\t\t};\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/ctx/env.ts\ntarget.__VUE_DEVTOOLS_ENV__ ??= { vitePluginDetected: false };\nfunction getDevToolsEnv() {\n\treturn target.__VUE_DEVTOOLS_ENV__;\n}\nfunction setDevToolsEnv(env) {\n\ttarget.__VUE_DEVTOOLS_ENV__ = {\n\t\t...target.__VUE_DEVTOOLS_ENV__,\n\t\t...env\n\t};\n}\n\n//#endregion\n//#region src/ctx/index.ts\nconst hooks = createDevToolsCtxHooks();\ntarget.__VUE_DEVTOOLS_KIT_CONTEXT__ ??= {\n\thooks,\n\tget state() {\n\t\treturn {\n\t\t\t...devtoolsState,\n\t\t\tactiveAppRecordId: activeAppRecord.id,\n\t\t\tactiveAppRecord: activeAppRecord.value,\n\t\t\tappRecords: devtoolsAppRecords.value\n\t\t};\n\t},\n\tapi: createDevToolsApi(hooks)\n};\nconst devtoolsContext = target.__VUE_DEVTOOLS_KIT_CONTEXT__;\n\n//#endregion\n//#region ../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js\nvar require_speakingurl$1 = /* @__PURE__ */ __commonJS({ \"../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/lib/speakingurl.js\": ((exports, module) => {\n\t(function(root) {\n\t\t/**\n\t\t* charMap\n\t\t* @type {Object}\n\t\t*/\n\t\tvar charMap = {\n\t\t\t\"À\": \"A\",\n\t\t\t\"Á\": \"A\",\n\t\t\t\"Â\": \"A\",\n\t\t\t\"Ã\": \"A\",\n\t\t\t\"Ä\": \"Ae\",\n\t\t\t\"Å\": \"A\",\n\t\t\t\"Æ\": \"AE\",\n\t\t\t\"Ç\": \"C\",\n\t\t\t\"È\": \"E\",\n\t\t\t\"É\": \"E\",\n\t\t\t\"Ê\": \"E\",\n\t\t\t\"Ë\": \"E\",\n\t\t\t\"Ì\": \"I\",\n\t\t\t\"Í\": \"I\",\n\t\t\t\"Î\": \"I\",\n\t\t\t\"Ï\": \"I\",\n\t\t\t\"Ð\": \"D\",\n\t\t\t\"Ñ\": \"N\",\n\t\t\t\"Ò\": \"O\",\n\t\t\t\"Ó\": \"O\",\n\t\t\t\"Ô\": \"O\",\n\t\t\t\"Õ\": \"O\",\n\t\t\t\"Ö\": \"Oe\",\n\t\t\t\"Ő\": \"O\",\n\t\t\t\"Ø\": \"O\",\n\t\t\t\"Ù\": \"U\",\n\t\t\t\"Ú\": \"U\",\n\t\t\t\"Û\": \"U\",\n\t\t\t\"Ü\": \"Ue\",\n\t\t\t\"Ű\": \"U\",\n\t\t\t\"Ý\": \"Y\",\n\t\t\t\"Þ\": \"TH\",\n\t\t\t\"ß\": \"ss\",\n\t\t\t\"à\": \"a\",\n\t\t\t\"á\": \"a\",\n\t\t\t\"â\": \"a\",\n\t\t\t\"ã\": \"a\",\n\t\t\t\"ä\": \"ae\",\n\t\t\t\"å\": \"a\",\n\t\t\t\"æ\": \"ae\",\n\t\t\t\"ç\": \"c\",\n\t\t\t\"è\": \"e\",\n\t\t\t\"é\": \"e\",\n\t\t\t\"ê\": \"e\",\n\t\t\t\"ë\": \"e\",\n\t\t\t\"ì\": \"i\",\n\t\t\t\"í\": \"i\",\n\t\t\t\"î\": \"i\",\n\t\t\t\"ï\": \"i\",\n\t\t\t\"ð\": \"d\",\n\t\t\t\"ñ\": \"n\",\n\t\t\t\"ò\": \"o\",\n\t\t\t\"ó\": \"o\",\n\t\t\t\"ô\": \"o\",\n\t\t\t\"õ\": \"o\",\n\t\t\t\"ö\": \"oe\",\n\t\t\t\"ő\": \"o\",\n\t\t\t\"ø\": \"o\",\n\t\t\t\"ù\": \"u\",\n\t\t\t\"ú\": \"u\",\n\t\t\t\"û\": \"u\",\n\t\t\t\"ü\": \"ue\",\n\t\t\t\"ű\": \"u\",\n\t\t\t\"ý\": \"y\",\n\t\t\t\"þ\": \"th\",\n\t\t\t\"ÿ\": \"y\",\n\t\t\t\"ẞ\": \"SS\",\n\t\t\t\"ا\": \"a\",\n\t\t\t\"أ\": \"a\",\n\t\t\t\"إ\": \"i\",\n\t\t\t\"آ\": \"aa\",\n\t\t\t\"ؤ\": \"u\",\n\t\t\t\"ئ\": \"e\",\n\t\t\t\"ء\": \"a\",\n\t\t\t\"ب\": \"b\",\n\t\t\t\"ت\": \"t\",\n\t\t\t\"ث\": \"th\",\n\t\t\t\"ج\": \"j\",\n\t\t\t\"ح\": \"h\",\n\t\t\t\"خ\": \"kh\",\n\t\t\t\"د\": \"d\",\n\t\t\t\"ذ\": \"th\",\n\t\t\t\"ر\": \"r\",\n\t\t\t\"ز\": \"z\",\n\t\t\t\"س\": \"s\",\n\t\t\t\"ش\": \"sh\",\n\t\t\t\"ص\": \"s\",\n\t\t\t\"ض\": \"dh\",\n\t\t\t\"ط\": \"t\",\n\t\t\t\"ظ\": \"z\",\n\t\t\t\"ع\": \"a\",\n\t\t\t\"غ\": \"gh\",\n\t\t\t\"ف\": \"f\",\n\t\t\t\"ق\": \"q\",\n\t\t\t\"ك\": \"k\",\n\t\t\t\"ل\": \"l\",\n\t\t\t\"م\": \"m\",\n\t\t\t\"ن\": \"n\",\n\t\t\t\"ه\": \"h\",\n\t\t\t\"و\": \"w\",\n\t\t\t\"ي\": \"y\",\n\t\t\t\"ى\": \"a\",\n\t\t\t\"ة\": \"h\",\n\t\t\t\"ﻻ\": \"la\",\n\t\t\t\"ﻷ\": \"laa\",\n\t\t\t\"ﻹ\": \"lai\",\n\t\t\t\"ﻵ\": \"laa\",\n\t\t\t\"گ\": \"g\",\n\t\t\t\"چ\": \"ch\",\n\t\t\t\"پ\": \"p\",\n\t\t\t\"ژ\": \"zh\",\n\t\t\t\"ک\": \"k\",\n\t\t\t\"ی\": \"y\",\n\t\t\t\"َ\": \"a\",\n\t\t\t\"ً\": \"an\",\n\t\t\t\"ِ\": \"e\",\n\t\t\t\"ٍ\": \"en\",\n\t\t\t\"ُ\": \"u\",\n\t\t\t\"ٌ\": \"on\",\n\t\t\t\"ْ\": \"\",\n\t\t\t\"٠\": \"0\",\n\t\t\t\"١\": \"1\",\n\t\t\t\"٢\": \"2\",\n\t\t\t\"٣\": \"3\",\n\t\t\t\"٤\": \"4\",\n\t\t\t\"٥\": \"5\",\n\t\t\t\"٦\": \"6\",\n\t\t\t\"٧\": \"7\",\n\t\t\t\"٨\": \"8\",\n\t\t\t\"٩\": \"9\",\n\t\t\t\"۰\": \"0\",\n\t\t\t\"۱\": \"1\",\n\t\t\t\"۲\": \"2\",\n\t\t\t\"۳\": \"3\",\n\t\t\t\"۴\": \"4\",\n\t\t\t\"۵\": \"5\",\n\t\t\t\"۶\": \"6\",\n\t\t\t\"۷\": \"7\",\n\t\t\t\"۸\": \"8\",\n\t\t\t\"۹\": \"9\",\n\t\t\t\"က\": \"k\",\n\t\t\t\"ခ\": \"kh\",\n\t\t\t\"ဂ\": \"g\",\n\t\t\t\"ဃ\": \"ga\",\n\t\t\t\"င\": \"ng\",\n\t\t\t\"စ\": \"s\",\n\t\t\t\"ဆ\": \"sa\",\n\t\t\t\"ဇ\": \"z\",\n\t\t\t\"စျ\": \"za\",\n\t\t\t\"ည\": \"ny\",\n\t\t\t\"ဋ\": \"t\",\n\t\t\t\"ဌ\": \"ta\",\n\t\t\t\"ဍ\": \"d\",\n\t\t\t\"ဎ\": \"da\",\n\t\t\t\"ဏ\": \"na\",\n\t\t\t\"တ\": \"t\",\n\t\t\t\"ထ\": \"ta\",\n\t\t\t\"ဒ\": \"d\",\n\t\t\t\"ဓ\": \"da\",\n\t\t\t\"န\": \"n\",\n\t\t\t\"ပ\": \"p\",\n\t\t\t\"ဖ\": \"pa\",\n\t\t\t\"ဗ\": \"b\",\n\t\t\t\"ဘ\": \"ba\",\n\t\t\t\"မ\": \"m\",\n\t\t\t\"ယ\": \"y\",\n\t\t\t\"ရ\": \"ya\",\n\t\t\t\"လ\": \"l\",\n\t\t\t\"ဝ\": \"w\",\n\t\t\t\"သ\": \"th\",\n\t\t\t\"ဟ\": \"h\",\n\t\t\t\"ဠ\": \"la\",\n\t\t\t\"အ\": \"a\",\n\t\t\t\"ြ\": \"y\",\n\t\t\t\"ျ\": \"ya\",\n\t\t\t\"ွ\": \"w\",\n\t\t\t\"ြွ\": \"yw\",\n\t\t\t\"ျွ\": \"ywa\",\n\t\t\t\"ှ\": \"h\",\n\t\t\t\"ဧ\": \"e\",\n\t\t\t\"၏\": \"-e\",\n\t\t\t\"ဣ\": \"i\",\n\t\t\t\"ဤ\": \"-i\",\n\t\t\t\"ဉ\": \"u\",\n\t\t\t\"ဦ\": \"-u\",\n\t\t\t\"ဩ\": \"aw\",\n\t\t\t\"သြော\": \"aw\",\n\t\t\t\"ဪ\": \"aw\",\n\t\t\t\"၀\": \"0\",\n\t\t\t\"၁\": \"1\",\n\t\t\t\"၂\": \"2\",\n\t\t\t\"၃\": \"3\",\n\t\t\t\"၄\": \"4\",\n\t\t\t\"၅\": \"5\",\n\t\t\t\"၆\": \"6\",\n\t\t\t\"၇\": \"7\",\n\t\t\t\"၈\": \"8\",\n\t\t\t\"၉\": \"9\",\n\t\t\t\"္\": \"\",\n\t\t\t\"့\": \"\",\n\t\t\t\"း\": \"\",\n\t\t\t\"č\": \"c\",\n\t\t\t\"ď\": \"d\",\n\t\t\t\"ě\": \"e\",\n\t\t\t\"ň\": \"n\",\n\t\t\t\"ř\": \"r\",\n\t\t\t\"š\": \"s\",\n\t\t\t\"ť\": \"t\",\n\t\t\t\"ů\": \"u\",\n\t\t\t\"ž\": \"z\",\n\t\t\t\"Č\": \"C\",\n\t\t\t\"Ď\": \"D\",\n\t\t\t\"Ě\": \"E\",\n\t\t\t\"Ň\": \"N\",\n\t\t\t\"Ř\": \"R\",\n\t\t\t\"Š\": \"S\",\n\t\t\t\"Ť\": \"T\",\n\t\t\t\"Ů\": \"U\",\n\t\t\t\"Ž\": \"Z\",\n\t\t\t\"ހ\": \"h\",\n\t\t\t\"ށ\": \"sh\",\n\t\t\t\"ނ\": \"n\",\n\t\t\t\"ރ\": \"r\",\n\t\t\t\"ބ\": \"b\",\n\t\t\t\"ޅ\": \"lh\",\n\t\t\t\"ކ\": \"k\",\n\t\t\t\"އ\": \"a\",\n\t\t\t\"ވ\": \"v\",\n\t\t\t\"މ\": \"m\",\n\t\t\t\"ފ\": \"f\",\n\t\t\t\"ދ\": \"dh\",\n\t\t\t\"ތ\": \"th\",\n\t\t\t\"ލ\": \"l\",\n\t\t\t\"ގ\": \"g\",\n\t\t\t\"ޏ\": \"gn\",\n\t\t\t\"ސ\": \"s\",\n\t\t\t\"ޑ\": \"d\",\n\t\t\t\"ޒ\": \"z\",\n\t\t\t\"ޓ\": \"t\",\n\t\t\t\"ޔ\": \"y\",\n\t\t\t\"ޕ\": \"p\",\n\t\t\t\"ޖ\": \"j\",\n\t\t\t\"ޗ\": \"ch\",\n\t\t\t\"ޘ\": \"tt\",\n\t\t\t\"ޙ\": \"hh\",\n\t\t\t\"ޚ\": \"kh\",\n\t\t\t\"ޛ\": \"th\",\n\t\t\t\"ޜ\": \"z\",\n\t\t\t\"ޝ\": \"sh\",\n\t\t\t\"ޞ\": \"s\",\n\t\t\t\"ޟ\": \"d\",\n\t\t\t\"ޠ\": \"t\",\n\t\t\t\"ޡ\": \"z\",\n\t\t\t\"ޢ\": \"a\",\n\t\t\t\"ޣ\": \"gh\",\n\t\t\t\"ޤ\": \"q\",\n\t\t\t\"ޥ\": \"w\",\n\t\t\t\"ަ\": \"a\",\n\t\t\t\"ާ\": \"aa\",\n\t\t\t\"ި\": \"i\",\n\t\t\t\"ީ\": \"ee\",\n\t\t\t\"ު\": \"u\",\n\t\t\t\"ޫ\": \"oo\",\n\t\t\t\"ެ\": \"e\",\n\t\t\t\"ޭ\": \"ey\",\n\t\t\t\"ޮ\": \"o\",\n\t\t\t\"ޯ\": \"oa\",\n\t\t\t\"ް\": \"\",\n\t\t\t\"ა\": \"a\",\n\t\t\t\"ბ\": \"b\",\n\t\t\t\"გ\": \"g\",\n\t\t\t\"დ\": \"d\",\n\t\t\t\"ე\": \"e\",\n\t\t\t\"ვ\": \"v\",\n\t\t\t\"ზ\": \"z\",\n\t\t\t\"თ\": \"t\",\n\t\t\t\"ი\": \"i\",\n\t\t\t\"კ\": \"k\",\n\t\t\t\"ლ\": \"l\",\n\t\t\t\"მ\": \"m\",\n\t\t\t\"ნ\": \"n\",\n\t\t\t\"ო\": \"o\",\n\t\t\t\"პ\": \"p\",\n\t\t\t\"ჟ\": \"zh\",\n\t\t\t\"რ\": \"r\",\n\t\t\t\"ს\": \"s\",\n\t\t\t\"ტ\": \"t\",\n\t\t\t\"უ\": \"u\",\n\t\t\t\"ფ\": \"p\",\n\t\t\t\"ქ\": \"k\",\n\t\t\t\"ღ\": \"gh\",\n\t\t\t\"ყ\": \"q\",\n\t\t\t\"შ\": \"sh\",\n\t\t\t\"ჩ\": \"ch\",\n\t\t\t\"ც\": \"ts\",\n\t\t\t\"ძ\": \"dz\",\n\t\t\t\"წ\": \"ts\",\n\t\t\t\"ჭ\": \"ch\",\n\t\t\t\"ხ\": \"kh\",\n\t\t\t\"ჯ\": \"j\",\n\t\t\t\"ჰ\": \"h\",\n\t\t\t\"α\": \"a\",\n\t\t\t\"β\": \"v\",\n\t\t\t\"γ\": \"g\",\n\t\t\t\"δ\": \"d\",\n\t\t\t\"ε\": \"e\",\n\t\t\t\"ζ\": \"z\",\n\t\t\t\"η\": \"i\",\n\t\t\t\"θ\": \"th\",\n\t\t\t\"ι\": \"i\",\n\t\t\t\"κ\": \"k\",\n\t\t\t\"λ\": \"l\",\n\t\t\t\"μ\": \"m\",\n\t\t\t\"ν\": \"n\",\n\t\t\t\"ξ\": \"ks\",\n\t\t\t\"ο\": \"o\",\n\t\t\t\"π\": \"p\",\n\t\t\t\"ρ\": \"r\",\n\t\t\t\"σ\": \"s\",\n\t\t\t\"τ\": \"t\",\n\t\t\t\"υ\": \"y\",\n\t\t\t\"φ\": \"f\",\n\t\t\t\"χ\": \"x\",\n\t\t\t\"ψ\": \"ps\",\n\t\t\t\"ω\": \"o\",\n\t\t\t\"ά\": \"a\",\n\t\t\t\"έ\": \"e\",\n\t\t\t\"ί\": \"i\",\n\t\t\t\"ό\": \"o\",\n\t\t\t\"ύ\": \"y\",\n\t\t\t\"ή\": \"i\",\n\t\t\t\"ώ\": \"o\",\n\t\t\t\"ς\": \"s\",\n\t\t\t\"ϊ\": \"i\",\n\t\t\t\"ΰ\": \"y\",\n\t\t\t\"ϋ\": \"y\",\n\t\t\t\"ΐ\": \"i\",\n\t\t\t\"Α\": \"A\",\n\t\t\t\"Β\": \"B\",\n\t\t\t\"Γ\": \"G\",\n\t\t\t\"Δ\": \"D\",\n\t\t\t\"Ε\": \"E\",\n\t\t\t\"Ζ\": \"Z\",\n\t\t\t\"Η\": \"I\",\n\t\t\t\"Θ\": \"TH\",\n\t\t\t\"Ι\": \"I\",\n\t\t\t\"Κ\": \"K\",\n\t\t\t\"Λ\": \"L\",\n\t\t\t\"Μ\": \"M\",\n\t\t\t\"Ν\": \"N\",\n\t\t\t\"Ξ\": \"KS\",\n\t\t\t\"Ο\": \"O\",\n\t\t\t\"Π\": \"P\",\n\t\t\t\"Ρ\": \"R\",\n\t\t\t\"Σ\": \"S\",\n\t\t\t\"Τ\": \"T\",\n\t\t\t\"Υ\": \"Y\",\n\t\t\t\"Φ\": \"F\",\n\t\t\t\"Χ\": \"X\",\n\t\t\t\"Ψ\": \"PS\",\n\t\t\t\"Ω\": \"O\",\n\t\t\t\"Ά\": \"A\",\n\t\t\t\"Έ\": \"E\",\n\t\t\t\"Ί\": \"I\",\n\t\t\t\"Ό\": \"O\",\n\t\t\t\"Ύ\": \"Y\",\n\t\t\t\"Ή\": \"I\",\n\t\t\t\"Ώ\": \"O\",\n\t\t\t\"Ϊ\": \"I\",\n\t\t\t\"Ϋ\": \"Y\",\n\t\t\t\"ā\": \"a\",\n\t\t\t\"ē\": \"e\",\n\t\t\t\"ģ\": \"g\",\n\t\t\t\"ī\": \"i\",\n\t\t\t\"ķ\": \"k\",\n\t\t\t\"ļ\": \"l\",\n\t\t\t\"ņ\": \"n\",\n\t\t\t\"ū\": \"u\",\n\t\t\t\"Ā\": \"A\",\n\t\t\t\"Ē\": \"E\",\n\t\t\t\"Ģ\": \"G\",\n\t\t\t\"Ī\": \"I\",\n\t\t\t\"Ķ\": \"k\",\n\t\t\t\"Ļ\": \"L\",\n\t\t\t\"Ņ\": \"N\",\n\t\t\t\"Ū\": \"U\",\n\t\t\t\"Ќ\": \"Kj\",\n\t\t\t\"ќ\": \"kj\",\n\t\t\t\"Љ\": \"Lj\",\n\t\t\t\"љ\": \"lj\",\n\t\t\t\"Њ\": \"Nj\",\n\t\t\t\"њ\": \"nj\",\n\t\t\t\"Тс\": \"Ts\",\n\t\t\t\"тс\": \"ts\",\n\t\t\t\"ą\": \"a\",\n\t\t\t\"ć\": \"c\",\n\t\t\t\"ę\": \"e\",\n\t\t\t\"ł\": \"l\",\n\t\t\t\"ń\": \"n\",\n\t\t\t\"ś\": \"s\",\n\t\t\t\"ź\": \"z\",\n\t\t\t\"ż\": \"z\",\n\t\t\t\"Ą\": \"A\",\n\t\t\t\"Ć\": \"C\",\n\t\t\t\"Ę\": \"E\",\n\t\t\t\"Ł\": \"L\",\n\t\t\t\"Ń\": \"N\",\n\t\t\t\"Ś\": \"S\",\n\t\t\t\"Ź\": \"Z\",\n\t\t\t\"Ż\": \"Z\",\n\t\t\t\"Є\": \"Ye\",\n\t\t\t\"І\": \"I\",\n\t\t\t\"Ї\": \"Yi\",\n\t\t\t\"Ґ\": \"G\",\n\t\t\t\"є\": \"ye\",\n\t\t\t\"і\": \"i\",\n\t\t\t\"ї\": \"yi\",\n\t\t\t\"ґ\": \"g\",\n\t\t\t\"ă\": \"a\",\n\t\t\t\"Ă\": \"A\",\n\t\t\t\"ș\": \"s\",\n\t\t\t\"Ș\": \"S\",\n\t\t\t\"ț\": \"t\",\n\t\t\t\"Ț\": \"T\",\n\t\t\t\"ţ\": \"t\",\n\t\t\t\"Ţ\": \"T\",\n\t\t\t\"а\": \"a\",\n\t\t\t\"б\": \"b\",\n\t\t\t\"в\": \"v\",\n\t\t\t\"г\": \"g\",\n\t\t\t\"д\": \"d\",\n\t\t\t\"е\": \"e\",\n\t\t\t\"ё\": \"yo\",\n\t\t\t\"ж\": \"zh\",\n\t\t\t\"з\": \"z\",\n\t\t\t\"и\": \"i\",\n\t\t\t\"й\": \"i\",\n\t\t\t\"к\": \"k\",\n\t\t\t\"л\": \"l\",\n\t\t\t\"м\": \"m\",\n\t\t\t\"н\": \"n\",\n\t\t\t\"о\": \"o\",\n\t\t\t\"п\": \"p\",\n\t\t\t\"р\": \"r\",\n\t\t\t\"с\": \"s\",\n\t\t\t\"т\": \"t\",\n\t\t\t\"у\": \"u\",\n\t\t\t\"ф\": \"f\",\n\t\t\t\"х\": \"kh\",\n\t\t\t\"ц\": \"c\",\n\t\t\t\"ч\": \"ch\",\n\t\t\t\"ш\": \"sh\",\n\t\t\t\"щ\": \"sh\",\n\t\t\t\"ъ\": \"\",\n\t\t\t\"ы\": \"y\",\n\t\t\t\"ь\": \"\",\n\t\t\t\"э\": \"e\",\n\t\t\t\"ю\": \"yu\",\n\t\t\t\"я\": \"ya\",\n\t\t\t\"А\": \"A\",\n\t\t\t\"Б\": \"B\",\n\t\t\t\"В\": \"V\",\n\t\t\t\"Г\": \"G\",\n\t\t\t\"Д\": \"D\",\n\t\t\t\"Е\": \"E\",\n\t\t\t\"Ё\": \"Yo\",\n\t\t\t\"Ж\": \"Zh\",\n\t\t\t\"З\": \"Z\",\n\t\t\t\"И\": \"I\",\n\t\t\t\"Й\": \"I\",\n\t\t\t\"К\": \"K\",\n\t\t\t\"Л\": \"L\",\n\t\t\t\"М\": \"M\",\n\t\t\t\"Н\": \"N\",\n\t\t\t\"О\": \"O\",\n\t\t\t\"П\": \"P\",\n\t\t\t\"Р\": \"R\",\n\t\t\t\"С\": \"S\",\n\t\t\t\"Т\": \"T\",\n\t\t\t\"У\": \"U\",\n\t\t\t\"Ф\": \"F\",\n\t\t\t\"Х\": \"Kh\",\n\t\t\t\"Ц\": \"C\",\n\t\t\t\"Ч\": \"Ch\",\n\t\t\t\"Ш\": \"Sh\",\n\t\t\t\"Щ\": \"Sh\",\n\t\t\t\"Ъ\": \"\",\n\t\t\t\"Ы\": \"Y\",\n\t\t\t\"Ь\": \"\",\n\t\t\t\"Э\": \"E\",\n\t\t\t\"Ю\": \"Yu\",\n\t\t\t\"Я\": \"Ya\",\n\t\t\t\"ђ\": \"dj\",\n\t\t\t\"ј\": \"j\",\n\t\t\t\"ћ\": \"c\",\n\t\t\t\"џ\": \"dz\",\n\t\t\t\"Ђ\": \"Dj\",\n\t\t\t\"Ј\": \"j\",\n\t\t\t\"Ћ\": \"C\",\n\t\t\t\"Џ\": \"Dz\",\n\t\t\t\"ľ\": \"l\",\n\t\t\t\"ĺ\": \"l\",\n\t\t\t\"ŕ\": \"r\",\n\t\t\t\"Ľ\": \"L\",\n\t\t\t\"Ĺ\": \"L\",\n\t\t\t\"Ŕ\": \"R\",\n\t\t\t\"ş\": \"s\",\n\t\t\t\"Ş\": \"S\",\n\t\t\t\"ı\": \"i\",\n\t\t\t\"İ\": \"I\",\n\t\t\t\"ğ\": \"g\",\n\t\t\t\"Ğ\": \"G\",\n\t\t\t\"ả\": \"a\",\n\t\t\t\"Ả\": \"A\",\n\t\t\t\"ẳ\": \"a\",\n\t\t\t\"Ẳ\": \"A\",\n\t\t\t\"ẩ\": \"a\",\n\t\t\t\"Ẩ\": \"A\",\n\t\t\t\"đ\": \"d\",\n\t\t\t\"Đ\": \"D\",\n\t\t\t\"ẹ\": \"e\",\n\t\t\t\"Ẹ\": \"E\",\n\t\t\t\"ẽ\": \"e\",\n\t\t\t\"Ẽ\": \"E\",\n\t\t\t\"ẻ\": \"e\",\n\t\t\t\"Ẻ\": \"E\",\n\t\t\t\"ế\": \"e\",\n\t\t\t\"Ế\": \"E\",\n\t\t\t\"ề\": \"e\",\n\t\t\t\"Ề\": \"E\",\n\t\t\t\"ệ\": \"e\",\n\t\t\t\"Ệ\": \"E\",\n\t\t\t\"ễ\": \"e\",\n\t\t\t\"Ễ\": \"E\",\n\t\t\t\"ể\": \"e\",\n\t\t\t\"Ể\": \"E\",\n\t\t\t\"ỏ\": \"o\",\n\t\t\t\"ọ\": \"o\",\n\t\t\t\"Ọ\": \"o\",\n\t\t\t\"ố\": \"o\",\n\t\t\t\"Ố\": \"O\",\n\t\t\t\"ồ\": \"o\",\n\t\t\t\"Ồ\": \"O\",\n\t\t\t\"ổ\": \"o\",\n\t\t\t\"Ổ\": \"O\",\n\t\t\t\"ộ\": \"o\",\n\t\t\t\"Ộ\": \"O\",\n\t\t\t\"ỗ\": \"o\",\n\t\t\t\"Ỗ\": \"O\",\n\t\t\t\"ơ\": \"o\",\n\t\t\t\"Ơ\": \"O\",\n\t\t\t\"ớ\": \"o\",\n\t\t\t\"Ớ\": \"O\",\n\t\t\t\"ờ\": \"o\",\n\t\t\t\"Ờ\": \"O\",\n\t\t\t\"ợ\": \"o\",\n\t\t\t\"Ợ\": \"O\",\n\t\t\t\"ỡ\": \"o\",\n\t\t\t\"Ỡ\": \"O\",\n\t\t\t\"Ở\": \"o\",\n\t\t\t\"ở\": \"o\",\n\t\t\t\"ị\": \"i\",\n\t\t\t\"Ị\": \"I\",\n\t\t\t\"ĩ\": \"i\",\n\t\t\t\"Ĩ\": \"I\",\n\t\t\t\"ỉ\": \"i\",\n\t\t\t\"Ỉ\": \"i\",\n\t\t\t\"ủ\": \"u\",\n\t\t\t\"Ủ\": \"U\",\n\t\t\t\"ụ\": \"u\",\n\t\t\t\"Ụ\": \"U\",\n\t\t\t\"ũ\": \"u\",\n\t\t\t\"Ũ\": \"U\",\n\t\t\t\"ư\": \"u\",\n\t\t\t\"Ư\": \"U\",\n\t\t\t\"ứ\": \"u\",\n\t\t\t\"Ứ\": \"U\",\n\t\t\t\"ừ\": \"u\",\n\t\t\t\"Ừ\": \"U\",\n\t\t\t\"ự\": \"u\",\n\t\t\t\"Ự\": \"U\",\n\t\t\t\"ữ\": \"u\",\n\t\t\t\"Ữ\": \"U\",\n\t\t\t\"ử\": \"u\",\n\t\t\t\"Ử\": \"ư\",\n\t\t\t\"ỷ\": \"y\",\n\t\t\t\"Ỷ\": \"y\",\n\t\t\t\"ỳ\": \"y\",\n\t\t\t\"Ỳ\": \"Y\",\n\t\t\t\"ỵ\": \"y\",\n\t\t\t\"Ỵ\": \"Y\",\n\t\t\t\"ỹ\": \"y\",\n\t\t\t\"Ỹ\": \"Y\",\n\t\t\t\"ạ\": \"a\",\n\t\t\t\"Ạ\": \"A\",\n\t\t\t\"ấ\": \"a\",\n\t\t\t\"Ấ\": \"A\",\n\t\t\t\"ầ\": \"a\",\n\t\t\t\"Ầ\": \"A\",\n\t\t\t\"ậ\": \"a\",\n\t\t\t\"Ậ\": \"A\",\n\t\t\t\"ẫ\": \"a\",\n\t\t\t\"Ẫ\": \"A\",\n\t\t\t\"ắ\": \"a\",\n\t\t\t\"Ắ\": \"A\",\n\t\t\t\"ằ\": \"a\",\n\t\t\t\"Ằ\": \"A\",\n\t\t\t\"ặ\": \"a\",\n\t\t\t\"Ặ\": \"A\",\n\t\t\t\"ẵ\": \"a\",\n\t\t\t\"Ẵ\": \"A\",\n\t\t\t\"⓪\": \"0\",\n\t\t\t\"①\": \"1\",\n\t\t\t\"②\": \"2\",\n\t\t\t\"③\": \"3\",\n\t\t\t\"④\": \"4\",\n\t\t\t\"⑤\": \"5\",\n\t\t\t\"⑥\": \"6\",\n\t\t\t\"⑦\": \"7\",\n\t\t\t\"⑧\": \"8\",\n\t\t\t\"⑨\": \"9\",\n\t\t\t\"⑩\": \"10\",\n\t\t\t\"⑪\": \"11\",\n\t\t\t\"⑫\": \"12\",\n\t\t\t\"⑬\": \"13\",\n\t\t\t\"⑭\": \"14\",\n\t\t\t\"⑮\": \"15\",\n\t\t\t\"⑯\": \"16\",\n\t\t\t\"⑰\": \"17\",\n\t\t\t\"⑱\": \"18\",\n\t\t\t\"⑲\": \"18\",\n\t\t\t\"⑳\": \"18\",\n\t\t\t\"⓵\": \"1\",\n\t\t\t\"⓶\": \"2\",\n\t\t\t\"⓷\": \"3\",\n\t\t\t\"⓸\": \"4\",\n\t\t\t\"⓹\": \"5\",\n\t\t\t\"⓺\": \"6\",\n\t\t\t\"⓻\": \"7\",\n\t\t\t\"⓼\": \"8\",\n\t\t\t\"⓽\": \"9\",\n\t\t\t\"⓾\": \"10\",\n\t\t\t\"⓿\": \"0\",\n\t\t\t\"⓫\": \"11\",\n\t\t\t\"⓬\": \"12\",\n\t\t\t\"⓭\": \"13\",\n\t\t\t\"⓮\": \"14\",\n\t\t\t\"⓯\": \"15\",\n\t\t\t\"⓰\": \"16\",\n\t\t\t\"⓱\": \"17\",\n\t\t\t\"⓲\": \"18\",\n\t\t\t\"⓳\": \"19\",\n\t\t\t\"⓴\": \"20\",\n\t\t\t\"Ⓐ\": \"A\",\n\t\t\t\"Ⓑ\": \"B\",\n\t\t\t\"Ⓒ\": \"C\",\n\t\t\t\"Ⓓ\": \"D\",\n\t\t\t\"Ⓔ\": \"E\",\n\t\t\t\"Ⓕ\": \"F\",\n\t\t\t\"Ⓖ\": \"G\",\n\t\t\t\"Ⓗ\": \"H\",\n\t\t\t\"Ⓘ\": \"I\",\n\t\t\t\"Ⓙ\": \"J\",\n\t\t\t\"Ⓚ\": \"K\",\n\t\t\t\"Ⓛ\": \"L\",\n\t\t\t\"Ⓜ\": \"M\",\n\t\t\t\"Ⓝ\": \"N\",\n\t\t\t\"Ⓞ\": \"O\",\n\t\t\t\"Ⓟ\": \"P\",\n\t\t\t\"Ⓠ\": \"Q\",\n\t\t\t\"Ⓡ\": \"R\",\n\t\t\t\"Ⓢ\": \"S\",\n\t\t\t\"Ⓣ\": \"T\",\n\t\t\t\"Ⓤ\": \"U\",\n\t\t\t\"Ⓥ\": \"V\",\n\t\t\t\"Ⓦ\": \"W\",\n\t\t\t\"Ⓧ\": \"X\",\n\t\t\t\"Ⓨ\": \"Y\",\n\t\t\t\"Ⓩ\": \"Z\",\n\t\t\t\"ⓐ\": \"a\",\n\t\t\t\"ⓑ\": \"b\",\n\t\t\t\"ⓒ\": \"c\",\n\t\t\t\"ⓓ\": \"d\",\n\t\t\t\"ⓔ\": \"e\",\n\t\t\t\"ⓕ\": \"f\",\n\t\t\t\"ⓖ\": \"g\",\n\t\t\t\"ⓗ\": \"h\",\n\t\t\t\"ⓘ\": \"i\",\n\t\t\t\"ⓙ\": \"j\",\n\t\t\t\"ⓚ\": \"k\",\n\t\t\t\"ⓛ\": \"l\",\n\t\t\t\"ⓜ\": \"m\",\n\t\t\t\"ⓝ\": \"n\",\n\t\t\t\"ⓞ\": \"o\",\n\t\t\t\"ⓟ\": \"p\",\n\t\t\t\"ⓠ\": \"q\",\n\t\t\t\"ⓡ\": \"r\",\n\t\t\t\"ⓢ\": \"s\",\n\t\t\t\"ⓣ\": \"t\",\n\t\t\t\"ⓤ\": \"u\",\n\t\t\t\"ⓦ\": \"v\",\n\t\t\t\"ⓥ\": \"w\",\n\t\t\t\"ⓧ\": \"x\",\n\t\t\t\"ⓨ\": \"y\",\n\t\t\t\"ⓩ\": \"z\",\n\t\t\t\"“\": \"\\\"\",\n\t\t\t\"”\": \"\\\"\",\n\t\t\t\"‘\": \"'\",\n\t\t\t\"’\": \"'\",\n\t\t\t\"∂\": \"d\",\n\t\t\t\"ƒ\": \"f\",\n\t\t\t\"™\": \"(TM)\",\n\t\t\t\"©\": \"(C)\",\n\t\t\t\"œ\": \"oe\",\n\t\t\t\"Œ\": \"OE\",\n\t\t\t\"®\": \"(R)\",\n\t\t\t\"†\": \"+\",\n\t\t\t\"℠\": \"(SM)\",\n\t\t\t\"…\": \"...\",\n\t\t\t\"˚\": \"o\",\n\t\t\t\"º\": \"o\",\n\t\t\t\"ª\": \"a\",\n\t\t\t\"•\": \"*\",\n\t\t\t\"၊\": \",\",\n\t\t\t\"။\": \".\",\n\t\t\t\"$\": \"USD\",\n\t\t\t\"€\": \"EUR\",\n\t\t\t\"₢\": \"BRN\",\n\t\t\t\"₣\": \"FRF\",\n\t\t\t\"£\": \"GBP\",\n\t\t\t\"₤\": \"ITL\",\n\t\t\t\"₦\": \"NGN\",\n\t\t\t\"₧\": \"ESP\",\n\t\t\t\"₩\": \"KRW\",\n\t\t\t\"₪\": \"ILS\",\n\t\t\t\"₫\": \"VND\",\n\t\t\t\"₭\": \"LAK\",\n\t\t\t\"₮\": \"MNT\",\n\t\t\t\"₯\": \"GRD\",\n\t\t\t\"₱\": \"ARS\",\n\t\t\t\"₲\": \"PYG\",\n\t\t\t\"₳\": \"ARA\",\n\t\t\t\"₴\": \"UAH\",\n\t\t\t\"₵\": \"GHS\",\n\t\t\t\"¢\": \"cent\",\n\t\t\t\"¥\": \"CNY\",\n\t\t\t\"元\": \"CNY\",\n\t\t\t\"円\": \"YEN\",\n\t\t\t\"﷼\": \"IRR\",\n\t\t\t\"₠\": \"EWE\",\n\t\t\t\"฿\": \"THB\",\n\t\t\t\"₨\": \"INR\",\n\t\t\t\"₹\": \"INR\",\n\t\t\t\"₰\": \"PF\",\n\t\t\t\"₺\": \"TRY\",\n\t\t\t\"؋\": \"AFN\",\n\t\t\t\"₼\": \"AZN\",\n\t\t\t\"лв\": \"BGN\",\n\t\t\t\"៛\": \"KHR\",\n\t\t\t\"₡\": \"CRC\",\n\t\t\t\"₸\": \"KZT\",\n\t\t\t\"ден\": \"MKD\",\n\t\t\t\"zł\": \"PLN\",\n\t\t\t\"₽\": \"RUB\",\n\t\t\t\"₾\": \"GEL\"\n\t\t};\n\t\t/**\n\t\t* special look ahead character array\n\t\t* These characters form with consonants to become 'single'/consonant combo\n\t\t* @type [Array]\n\t\t*/\n\t\tvar lookAheadCharArray = [\"်\", \"ް\"];\n\t\t/**\n\t\t* diatricMap for languages where transliteration changes entirely as more diatrics are added\n\t\t* @type {Object}\n\t\t*/\n\t\tvar diatricMap = {\n\t\t\t\"ာ\": \"a\",\n\t\t\t\"ါ\": \"a\",\n\t\t\t\"ေ\": \"e\",\n\t\t\t\"ဲ\": \"e\",\n\t\t\t\"ိ\": \"i\",\n\t\t\t\"ီ\": \"i\",\n\t\t\t\"ို\": \"o\",\n\t\t\t\"ု\": \"u\",\n\t\t\t\"ူ\": \"u\",\n\t\t\t\"ေါင်\": \"aung\",\n\t\t\t\"ော\": \"aw\",\n\t\t\t\"ော်\": \"aw\",\n\t\t\t\"ေါ\": \"aw\",\n\t\t\t\"ေါ်\": \"aw\",\n\t\t\t\"်\": \"်\",\n\t\t\t\"က်\": \"et\",\n\t\t\t\"ိုက်\": \"aik\",\n\t\t\t\"ောက်\": \"auk\",\n\t\t\t\"င်\": \"in\",\n\t\t\t\"ိုင်\": \"aing\",\n\t\t\t\"ောင်\": \"aung\",\n\t\t\t\"စ်\": \"it\",\n\t\t\t\"ည်\": \"i\",\n\t\t\t\"တ်\": \"at\",\n\t\t\t\"ိတ်\": \"eik\",\n\t\t\t\"ုတ်\": \"ok\",\n\t\t\t\"ွတ်\": \"ut\",\n\t\t\t\"ေတ်\": \"it\",\n\t\t\t\"ဒ်\": \"d\",\n\t\t\t\"ိုဒ်\": \"ok\",\n\t\t\t\"ုဒ်\": \"ait\",\n\t\t\t\"န်\": \"an\",\n\t\t\t\"ာန်\": \"an\",\n\t\t\t\"ိန်\": \"ein\",\n\t\t\t\"ုန်\": \"on\",\n\t\t\t\"ွန်\": \"un\",\n\t\t\t\"ပ်\": \"at\",\n\t\t\t\"ိပ်\": \"eik\",\n\t\t\t\"ုပ်\": \"ok\",\n\t\t\t\"ွပ်\": \"ut\",\n\t\t\t\"န်ုပ်\": \"nub\",\n\t\t\t\"မ်\": \"an\",\n\t\t\t\"ိမ်\": \"ein\",\n\t\t\t\"ုမ်\": \"on\",\n\t\t\t\"ွမ်\": \"un\",\n\t\t\t\"ယ်\": \"e\",\n\t\t\t\"ိုလ်\": \"ol\",\n\t\t\t\"ဉ်\": \"in\",\n\t\t\t\"ံ\": \"an\",\n\t\t\t\"ိံ\": \"ein\",\n\t\t\t\"ုံ\": \"on\",\n\t\t\t\"ައް\": \"ah\",\n\t\t\t\"ަށް\": \"ah\"\n\t\t};\n\t\t/**\n\t\t* langCharMap language specific characters translations\n\t\t* @type {Object}\n\t\t*/\n\t\tvar langCharMap = {\n\t\t\t\"en\": {},\n\t\t\t\"az\": {\n\t\t\t\t\"ç\": \"c\",\n\t\t\t\t\"ə\": \"e\",\n\t\t\t\t\"ğ\": \"g\",\n\t\t\t\t\"ı\": \"i\",\n\t\t\t\t\"ö\": \"o\",\n\t\t\t\t\"ş\": \"s\",\n\t\t\t\t\"ü\": \"u\",\n\t\t\t\t\"Ç\": \"C\",\n\t\t\t\t\"Ə\": \"E\",\n\t\t\t\t\"Ğ\": \"G\",\n\t\t\t\t\"İ\": \"I\",\n\t\t\t\t\"Ö\": \"O\",\n\t\t\t\t\"Ş\": \"S\",\n\t\t\t\t\"Ü\": \"U\"\n\t\t\t},\n\t\t\t\"cs\": {\n\t\t\t\t\"č\": \"c\",\n\t\t\t\t\"ď\": \"d\",\n\t\t\t\t\"ě\": \"e\",\n\t\t\t\t\"ň\": \"n\",\n\t\t\t\t\"ř\": \"r\",\n\t\t\t\t\"š\": \"s\",\n\t\t\t\t\"ť\": \"t\",\n\t\t\t\t\"ů\": \"u\",\n\t\t\t\t\"ž\": \"z\",\n\t\t\t\t\"Č\": \"C\",\n\t\t\t\t\"Ď\": \"D\",\n\t\t\t\t\"Ě\": \"E\",\n\t\t\t\t\"Ň\": \"N\",\n\t\t\t\t\"Ř\": \"R\",\n\t\t\t\t\"Š\": \"S\",\n\t\t\t\t\"Ť\": \"T\",\n\t\t\t\t\"Ů\": \"U\",\n\t\t\t\t\"Ž\": \"Z\"\n\t\t\t},\n\t\t\t\"fi\": {\n\t\t\t\t\"ä\": \"a\",\n\t\t\t\t\"Ä\": \"A\",\n\t\t\t\t\"ö\": \"o\",\n\t\t\t\t\"Ö\": \"O\"\n\t\t\t},\n\t\t\t\"hu\": {\n\t\t\t\t\"ä\": \"a\",\n\t\t\t\t\"Ä\": \"A\",\n\t\t\t\t\"ö\": \"o\",\n\t\t\t\t\"Ö\": \"O\",\n\t\t\t\t\"ü\": \"u\",\n\t\t\t\t\"Ü\": \"U\",\n\t\t\t\t\"ű\": \"u\",\n\t\t\t\t\"Ű\": \"U\"\n\t\t\t},\n\t\t\t\"lt\": {\n\t\t\t\t\"ą\": \"a\",\n\t\t\t\t\"č\": \"c\",\n\t\t\t\t\"ę\": \"e\",\n\t\t\t\t\"ė\": \"e\",\n\t\t\t\t\"į\": \"i\",\n\t\t\t\t\"š\": \"s\",\n\t\t\t\t\"ų\": \"u\",\n\t\t\t\t\"ū\": \"u\",\n\t\t\t\t\"ž\": \"z\",\n\t\t\t\t\"Ą\": \"A\",\n\t\t\t\t\"Č\": \"C\",\n\t\t\t\t\"Ę\": \"E\",\n\t\t\t\t\"Ė\": \"E\",\n\t\t\t\t\"Į\": \"I\",\n\t\t\t\t\"Š\": \"S\",\n\t\t\t\t\"Ų\": \"U\",\n\t\t\t\t\"Ū\": \"U\"\n\t\t\t},\n\t\t\t\"lv\": {\n\t\t\t\t\"ā\": \"a\",\n\t\t\t\t\"č\": \"c\",\n\t\t\t\t\"ē\": \"e\",\n\t\t\t\t\"ģ\": \"g\",\n\t\t\t\t\"ī\": \"i\",\n\t\t\t\t\"ķ\": \"k\",\n\t\t\t\t\"ļ\": \"l\",\n\t\t\t\t\"ņ\": \"n\",\n\t\t\t\t\"š\": \"s\",\n\t\t\t\t\"ū\": \"u\",\n\t\t\t\t\"ž\": \"z\",\n\t\t\t\t\"Ā\": \"A\",\n\t\t\t\t\"Č\": \"C\",\n\t\t\t\t\"Ē\": \"E\",\n\t\t\t\t\"Ģ\": \"G\",\n\t\t\t\t\"Ī\": \"i\",\n\t\t\t\t\"Ķ\": \"k\",\n\t\t\t\t\"Ļ\": \"L\",\n\t\t\t\t\"Ņ\": \"N\",\n\t\t\t\t\"Š\": \"S\",\n\t\t\t\t\"Ū\": \"u\",\n\t\t\t\t\"Ž\": \"Z\"\n\t\t\t},\n\t\t\t\"pl\": {\n\t\t\t\t\"ą\": \"a\",\n\t\t\t\t\"ć\": \"c\",\n\t\t\t\t\"ę\": \"e\",\n\t\t\t\t\"ł\": \"l\",\n\t\t\t\t\"ń\": \"n\",\n\t\t\t\t\"ó\": \"o\",\n\t\t\t\t\"ś\": \"s\",\n\t\t\t\t\"ź\": \"z\",\n\t\t\t\t\"ż\": \"z\",\n\t\t\t\t\"Ą\": \"A\",\n\t\t\t\t\"Ć\": \"C\",\n\t\t\t\t\"Ę\": \"e\",\n\t\t\t\t\"Ł\": \"L\",\n\t\t\t\t\"Ń\": \"N\",\n\t\t\t\t\"Ó\": \"O\",\n\t\t\t\t\"Ś\": \"S\",\n\t\t\t\t\"Ź\": \"Z\",\n\t\t\t\t\"Ż\": \"Z\"\n\t\t\t},\n\t\t\t\"sv\": {\n\t\t\t\t\"ä\": \"a\",\n\t\t\t\t\"Ä\": \"A\",\n\t\t\t\t\"ö\": \"o\",\n\t\t\t\t\"Ö\": \"O\"\n\t\t\t},\n\t\t\t\"sk\": {\n\t\t\t\t\"ä\": \"a\",\n\t\t\t\t\"Ä\": \"A\"\n\t\t\t},\n\t\t\t\"sr\": {\n\t\t\t\t\"љ\": \"lj\",\n\t\t\t\t\"њ\": \"nj\",\n\t\t\t\t\"Љ\": \"Lj\",\n\t\t\t\t\"Њ\": \"Nj\",\n\t\t\t\t\"đ\": \"dj\",\n\t\t\t\t\"Đ\": \"Dj\"\n\t\t\t},\n\t\t\t\"tr\": {\n\t\t\t\t\"Ü\": \"U\",\n\t\t\t\t\"Ö\": \"O\",\n\t\t\t\t\"ü\": \"u\",\n\t\t\t\t\"ö\": \"o\"\n\t\t\t}\n\t\t};\n\t\t/**\n\t\t* symbolMap language specific symbol translations\n\t\t* translations must be transliterated already\n\t\t* @type {Object}\n\t\t*/\n\t\tvar symbolMap = {\n\t\t\t\"ar\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"la-nihaya\",\n\t\t\t\t\"♥\": \"hob\",\n\t\t\t\t\"&\": \"wa\",\n\t\t\t\t\"|\": \"aw\",\n\t\t\t\t\"<\": \"aqal-men\",\n\t\t\t\t\">\": \"akbar-men\",\n\t\t\t\t\"∑\": \"majmou\",\n\t\t\t\t\"¤\": \"omla\"\n\t\t\t},\n\t\t\t\"az\": {},\n\t\t\t\"ca\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinit\",\n\t\t\t\t\"♥\": \"amor\",\n\t\t\t\t\"&\": \"i\",\n\t\t\t\t\"|\": \"o\",\n\t\t\t\t\"<\": \"menys que\",\n\t\t\t\t\">\": \"mes que\",\n\t\t\t\t\"∑\": \"suma dels\",\n\t\t\t\t\"¤\": \"moneda\"\n\t\t\t},\n\t\t\t\"cs\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"nekonecno\",\n\t\t\t\t\"♥\": \"laska\",\n\t\t\t\t\"&\": \"a\",\n\t\t\t\t\"|\": \"nebo\",\n\t\t\t\t\"<\": \"mensi nez\",\n\t\t\t\t\">\": \"vetsi nez\",\n\t\t\t\t\"∑\": \"soucet\",\n\t\t\t\t\"¤\": \"mena\"\n\t\t\t},\n\t\t\t\"de\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"unendlich\",\n\t\t\t\t\"♥\": \"Liebe\",\n\t\t\t\t\"&\": \"und\",\n\t\t\t\t\"|\": \"oder\",\n\t\t\t\t\"<\": \"kleiner als\",\n\t\t\t\t\">\": \"groesser als\",\n\t\t\t\t\"∑\": \"Summe von\",\n\t\t\t\t\"¤\": \"Waehrung\"\n\t\t\t},\n\t\t\t\"dv\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"kolunulaa\",\n\t\t\t\t\"♥\": \"loabi\",\n\t\t\t\t\"&\": \"aai\",\n\t\t\t\t\"|\": \"noonee\",\n\t\t\t\t\"<\": \"ah vure kuda\",\n\t\t\t\t\">\": \"ah vure bodu\",\n\t\t\t\t\"∑\": \"jumula\",\n\t\t\t\t\"¤\": \"faisaa\"\n\t\t\t},\n\t\t\t\"en\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinity\",\n\t\t\t\t\"♥\": \"love\",\n\t\t\t\t\"&\": \"and\",\n\t\t\t\t\"|\": \"or\",\n\t\t\t\t\"<\": \"less than\",\n\t\t\t\t\">\": \"greater than\",\n\t\t\t\t\"∑\": \"sum\",\n\t\t\t\t\"¤\": \"currency\"\n\t\t\t},\n\t\t\t\"es\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinito\",\n\t\t\t\t\"♥\": \"amor\",\n\t\t\t\t\"&\": \"y\",\n\t\t\t\t\"|\": \"u\",\n\t\t\t\t\"<\": \"menos que\",\n\t\t\t\t\">\": \"mas que\",\n\t\t\t\t\"∑\": \"suma de los\",\n\t\t\t\t\"¤\": \"moneda\"\n\t\t\t},\n\t\t\t\"fa\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"bi-nahayat\",\n\t\t\t\t\"♥\": \"eshgh\",\n\t\t\t\t\"&\": \"va\",\n\t\t\t\t\"|\": \"ya\",\n\t\t\t\t\"<\": \"kamtar-az\",\n\t\t\t\t\">\": \"bishtar-az\",\n\t\t\t\t\"∑\": \"majmooe\",\n\t\t\t\t\"¤\": \"vahed\"\n\t\t\t},\n\t\t\t\"fi\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"aarettomyys\",\n\t\t\t\t\"♥\": \"rakkaus\",\n\t\t\t\t\"&\": \"ja\",\n\t\t\t\t\"|\": \"tai\",\n\t\t\t\t\"<\": \"pienempi kuin\",\n\t\t\t\t\">\": \"suurempi kuin\",\n\t\t\t\t\"∑\": \"summa\",\n\t\t\t\t\"¤\": \"valuutta\"\n\t\t\t},\n\t\t\t\"fr\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infiniment\",\n\t\t\t\t\"♥\": \"Amour\",\n\t\t\t\t\"&\": \"et\",\n\t\t\t\t\"|\": \"ou\",\n\t\t\t\t\"<\": \"moins que\",\n\t\t\t\t\">\": \"superieure a\",\n\t\t\t\t\"∑\": \"somme des\",\n\t\t\t\t\"¤\": \"monnaie\"\n\t\t\t},\n\t\t\t\"ge\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"usasruloba\",\n\t\t\t\t\"♥\": \"siqvaruli\",\n\t\t\t\t\"&\": \"da\",\n\t\t\t\t\"|\": \"an\",\n\t\t\t\t\"<\": \"naklebi\",\n\t\t\t\t\">\": \"meti\",\n\t\t\t\t\"∑\": \"jami\",\n\t\t\t\t\"¤\": \"valuta\"\n\t\t\t},\n\t\t\t\"gr\": {},\n\t\t\t\"hu\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"vegtelen\",\n\t\t\t\t\"♥\": \"szerelem\",\n\t\t\t\t\"&\": \"es\",\n\t\t\t\t\"|\": \"vagy\",\n\t\t\t\t\"<\": \"kisebb mint\",\n\t\t\t\t\">\": \"nagyobb mint\",\n\t\t\t\t\"∑\": \"szumma\",\n\t\t\t\t\"¤\": \"penznem\"\n\t\t\t},\n\t\t\t\"it\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinito\",\n\t\t\t\t\"♥\": \"amore\",\n\t\t\t\t\"&\": \"e\",\n\t\t\t\t\"|\": \"o\",\n\t\t\t\t\"<\": \"minore di\",\n\t\t\t\t\">\": \"maggiore di\",\n\t\t\t\t\"∑\": \"somma\",\n\t\t\t\t\"¤\": \"moneta\"\n\t\t\t},\n\t\t\t\"lt\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"begalybe\",\n\t\t\t\t\"♥\": \"meile\",\n\t\t\t\t\"&\": \"ir\",\n\t\t\t\t\"|\": \"ar\",\n\t\t\t\t\"<\": \"maziau nei\",\n\t\t\t\t\">\": \"daugiau nei\",\n\t\t\t\t\"∑\": \"suma\",\n\t\t\t\t\"¤\": \"valiuta\"\n\t\t\t},\n\t\t\t\"lv\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"bezgaliba\",\n\t\t\t\t\"♥\": \"milestiba\",\n\t\t\t\t\"&\": \"un\",\n\t\t\t\t\"|\": \"vai\",\n\t\t\t\t\"<\": \"mazak neka\",\n\t\t\t\t\">\": \"lielaks neka\",\n\t\t\t\t\"∑\": \"summa\",\n\t\t\t\t\"¤\": \"valuta\"\n\t\t\t},\n\t\t\t\"my\": {\n\t\t\t\t\"∆\": \"kwahkhyaet\",\n\t\t\t\t\"∞\": \"asaonasme\",\n\t\t\t\t\"♥\": \"akhyait\",\n\t\t\t\t\"&\": \"nhin\",\n\t\t\t\t\"|\": \"tho\",\n\t\t\t\t\"<\": \"ngethaw\",\n\t\t\t\t\">\": \"kyithaw\",\n\t\t\t\t\"∑\": \"paungld\",\n\t\t\t\t\"¤\": \"ngwekye\"\n\t\t\t},\n\t\t\t\"mk\": {},\n\t\t\t\"nl\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"oneindig\",\n\t\t\t\t\"♥\": \"liefde\",\n\t\t\t\t\"&\": \"en\",\n\t\t\t\t\"|\": \"of\",\n\t\t\t\t\"<\": \"kleiner dan\",\n\t\t\t\t\">\": \"groter dan\",\n\t\t\t\t\"∑\": \"som\",\n\t\t\t\t\"¤\": \"valuta\"\n\t\t\t},\n\t\t\t\"pl\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"nieskonczonosc\",\n\t\t\t\t\"♥\": \"milosc\",\n\t\t\t\t\"&\": \"i\",\n\t\t\t\t\"|\": \"lub\",\n\t\t\t\t\"<\": \"mniejsze niz\",\n\t\t\t\t\">\": \"wieksze niz\",\n\t\t\t\t\"∑\": \"suma\",\n\t\t\t\t\"¤\": \"waluta\"\n\t\t\t},\n\t\t\t\"pt\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinito\",\n\t\t\t\t\"♥\": \"amor\",\n\t\t\t\t\"&\": \"e\",\n\t\t\t\t\"|\": \"ou\",\n\t\t\t\t\"<\": \"menor que\",\n\t\t\t\t\">\": \"maior que\",\n\t\t\t\t\"∑\": \"soma\",\n\t\t\t\t\"¤\": \"moeda\"\n\t\t\t},\n\t\t\t\"ro\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"infinit\",\n\t\t\t\t\"♥\": \"dragoste\",\n\t\t\t\t\"&\": \"si\",\n\t\t\t\t\"|\": \"sau\",\n\t\t\t\t\"<\": \"mai mic ca\",\n\t\t\t\t\">\": \"mai mare ca\",\n\t\t\t\t\"∑\": \"suma\",\n\t\t\t\t\"¤\": \"valuta\"\n\t\t\t},\n\t\t\t\"ru\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"beskonechno\",\n\t\t\t\t\"♥\": \"lubov\",\n\t\t\t\t\"&\": \"i\",\n\t\t\t\t\"|\": \"ili\",\n\t\t\t\t\"<\": \"menshe\",\n\t\t\t\t\">\": \"bolshe\",\n\t\t\t\t\"∑\": \"summa\",\n\t\t\t\t\"¤\": \"valjuta\"\n\t\t\t},\n\t\t\t\"sk\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"nekonecno\",\n\t\t\t\t\"♥\": \"laska\",\n\t\t\t\t\"&\": \"a\",\n\t\t\t\t\"|\": \"alebo\",\n\t\t\t\t\"<\": \"menej ako\",\n\t\t\t\t\">\": \"viac ako\",\n\t\t\t\t\"∑\": \"sucet\",\n\t\t\t\t\"¤\": \"mena\"\n\t\t\t},\n\t\t\t\"sr\": {},\n\t\t\t\"tr\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"sonsuzluk\",\n\t\t\t\t\"♥\": \"ask\",\n\t\t\t\t\"&\": \"ve\",\n\t\t\t\t\"|\": \"veya\",\n\t\t\t\t\"<\": \"kucuktur\",\n\t\t\t\t\">\": \"buyuktur\",\n\t\t\t\t\"∑\": \"toplam\",\n\t\t\t\t\"¤\": \"para birimi\"\n\t\t\t},\n\t\t\t\"uk\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"bezkinechnist\",\n\t\t\t\t\"♥\": \"lubov\",\n\t\t\t\t\"&\": \"i\",\n\t\t\t\t\"|\": \"abo\",\n\t\t\t\t\"<\": \"menshe\",\n\t\t\t\t\">\": \"bilshe\",\n\t\t\t\t\"∑\": \"suma\",\n\t\t\t\t\"¤\": \"valjuta\"\n\t\t\t},\n\t\t\t\"vn\": {\n\t\t\t\t\"∆\": \"delta\",\n\t\t\t\t\"∞\": \"vo cuc\",\n\t\t\t\t\"♥\": \"yeu\",\n\t\t\t\t\"&\": \"va\",\n\t\t\t\t\"|\": \"hoac\",\n\t\t\t\t\"<\": \"nho hon\",\n\t\t\t\t\">\": \"lon hon\",\n\t\t\t\t\"∑\": \"tong\",\n\t\t\t\t\"¤\": \"tien te\"\n\t\t\t}\n\t\t};\n\t\tvar uricChars = [\n\t\t\t\";\",\n\t\t\t\"?\",\n\t\t\t\":\",\n\t\t\t\"@\",\n\t\t\t\"&\",\n\t\t\t\"=\",\n\t\t\t\"+\",\n\t\t\t\"$\",\n\t\t\t\",\",\n\t\t\t\"/\"\n\t\t].join(\"\");\n\t\tvar uricNoSlashChars = [\n\t\t\t\";\",\n\t\t\t\"?\",\n\t\t\t\":\",\n\t\t\t\"@\",\n\t\t\t\"&\",\n\t\t\t\"=\",\n\t\t\t\"+\",\n\t\t\t\"$\",\n\t\t\t\",\"\n\t\t].join(\"\");\n\t\tvar markChars = [\n\t\t\t\".\",\n\t\t\t\"!\",\n\t\t\t\"~\",\n\t\t\t\"*\",\n\t\t\t\"'\",\n\t\t\t\"(\",\n\t\t\t\")\"\n\t\t].join(\"\");\n\t\t/**\n\t\t* getSlug\n\t\t* @param {string} input input string\n\t\t* @param {object|string} opts config object or separator string/char\n\t\t* @api public\n\t\t* @return {string} sluggified string\n\t\t*/\n\t\tvar getSlug = function getSlug$1(input, opts) {\n\t\t\tvar separator = \"-\";\n\t\t\tvar result = \"\";\n\t\t\tvar diatricString = \"\";\n\t\t\tvar convertSymbols = true;\n\t\t\tvar customReplacements = {};\n\t\t\tvar maintainCase;\n\t\t\tvar titleCase;\n\t\t\tvar truncate;\n\t\t\tvar uricFlag;\n\t\t\tvar uricNoSlashFlag;\n\t\t\tvar markFlag;\n\t\t\tvar symbol;\n\t\t\tvar langChar;\n\t\t\tvar lucky;\n\t\t\tvar i;\n\t\t\tvar ch;\n\t\t\tvar l;\n\t\t\tvar lastCharWasSymbol;\n\t\t\tvar lastCharWasDiatric;\n\t\t\tvar allowedChars = \"\";\n\t\t\tif (typeof input !== \"string\") return \"\";\n\t\t\tif (typeof opts === \"string\") separator = opts;\n\t\t\tsymbol = symbolMap.en;\n\t\t\tlangChar = langCharMap.en;\n\t\t\tif (typeof opts === \"object\") {\n\t\t\t\tmaintainCase = opts.maintainCase || false;\n\t\t\t\tcustomReplacements = opts.custom && typeof opts.custom === \"object\" ? opts.custom : customReplacements;\n\t\t\t\ttruncate = +opts.truncate > 1 && opts.truncate || false;\n\t\t\t\turicFlag = opts.uric || false;\n\t\t\t\turicNoSlashFlag = opts.uricNoSlash || false;\n\t\t\t\tmarkFlag = opts.mark || false;\n\t\t\t\tconvertSymbols = opts.symbols === false || opts.lang === false ? false : true;\n\t\t\t\tseparator = opts.separator || separator;\n\t\t\t\tif (uricFlag) allowedChars += uricChars;\n\t\t\t\tif (uricNoSlashFlag) allowedChars += uricNoSlashChars;\n\t\t\t\tif (markFlag) allowedChars += markChars;\n\t\t\t\tsymbol = opts.lang && symbolMap[opts.lang] && convertSymbols ? symbolMap[opts.lang] : convertSymbols ? symbolMap.en : {};\n\t\t\t\tlangChar = opts.lang && langCharMap[opts.lang] ? langCharMap[opts.lang] : opts.lang === false || opts.lang === true ? {} : langCharMap.en;\n\t\t\t\tif (opts.titleCase && typeof opts.titleCase.length === \"number\" && Array.prototype.toString.call(opts.titleCase)) {\n\t\t\t\t\topts.titleCase.forEach(function(v) {\n\t\t\t\t\t\tcustomReplacements[v + \"\"] = v + \"\";\n\t\t\t\t\t});\n\t\t\t\t\ttitleCase = true;\n\t\t\t\t} else titleCase = !!opts.titleCase;\n\t\t\t\tif (opts.custom && typeof opts.custom.length === \"number\" && Array.prototype.toString.call(opts.custom)) opts.custom.forEach(function(v) {\n\t\t\t\t\tcustomReplacements[v + \"\"] = v + \"\";\n\t\t\t\t});\n\t\t\t\tObject.keys(customReplacements).forEach(function(v) {\n\t\t\t\t\tvar r;\n\t\t\t\t\tif (v.length > 1) r = new RegExp(\"\\\\b\" + escapeChars(v) + \"\\\\b\", \"gi\");\n\t\t\t\t\telse r = new RegExp(escapeChars(v), \"gi\");\n\t\t\t\t\tinput = input.replace(r, customReplacements[v]);\n\t\t\t\t});\n\t\t\t\tfor (ch in customReplacements) allowedChars += ch;\n\t\t\t}\n\t\t\tallowedChars += separator;\n\t\t\tallowedChars = escapeChars(allowedChars);\n\t\t\tinput = input.replace(/(^\\s+|\\s+$)/g, \"\");\n\t\t\tlastCharWasSymbol = false;\n\t\t\tlastCharWasDiatric = false;\n\t\t\tfor (i = 0, l = input.length; i < l; i++) {\n\t\t\t\tch = input[i];\n\t\t\t\tif (isReplacedCustomChar(ch, customReplacements)) lastCharWasSymbol = false;\n\t\t\t\telse if (langChar[ch]) {\n\t\t\t\t\tch = lastCharWasSymbol && langChar[ch].match(/[A-Za-z0-9]/) ? \" \" + langChar[ch] : langChar[ch];\n\t\t\t\t\tlastCharWasSymbol = false;\n\t\t\t\t} else if (ch in charMap) {\n\t\t\t\t\tif (i + 1 < l && lookAheadCharArray.indexOf(input[i + 1]) >= 0) {\n\t\t\t\t\t\tdiatricString += ch;\n\t\t\t\t\t\tch = \"\";\n\t\t\t\t\t} else if (lastCharWasDiatric === true) {\n\t\t\t\t\t\tch = diatricMap[diatricString] + charMap[ch];\n\t\t\t\t\t\tdiatricString = \"\";\n\t\t\t\t\t} else ch = lastCharWasSymbol && charMap[ch].match(/[A-Za-z0-9]/) ? \" \" + charMap[ch] : charMap[ch];\n\t\t\t\t\tlastCharWasSymbol = false;\n\t\t\t\t\tlastCharWasDiatric = false;\n\t\t\t\t} else if (ch in diatricMap) {\n\t\t\t\t\tdiatricString += ch;\n\t\t\t\t\tch = \"\";\n\t\t\t\t\tif (i === l - 1) ch = diatricMap[diatricString];\n\t\t\t\t\tlastCharWasDiatric = true;\n\t\t\t\t} else if (symbol[ch] && !(uricFlag && uricChars.indexOf(ch) !== -1) && !(uricNoSlashFlag && uricNoSlashChars.indexOf(ch) !== -1)) {\n\t\t\t\t\tch = lastCharWasSymbol || result.substr(-1).match(/[A-Za-z0-9]/) ? separator + symbol[ch] : symbol[ch];\n\t\t\t\t\tch += input[i + 1] !== void 0 && input[i + 1].match(/[A-Za-z0-9]/) ? separator : \"\";\n\t\t\t\t\tlastCharWasSymbol = true;\n\t\t\t\t} else {\n\t\t\t\t\tif (lastCharWasDiatric === true) {\n\t\t\t\t\t\tch = diatricMap[diatricString] + ch;\n\t\t\t\t\t\tdiatricString = \"\";\n\t\t\t\t\t\tlastCharWasDiatric = false;\n\t\t\t\t\t} else if (lastCharWasSymbol && (/[A-Za-z0-9]/.test(ch) || result.substr(-1).match(/A-Za-z0-9]/))) ch = \" \" + ch;\n\t\t\t\t\tlastCharWasSymbol = false;\n\t\t\t\t}\n\t\t\t\tresult += ch.replace(new RegExp(\"[^\\\\w\\\\s\" + allowedChars + \"_-]\", \"g\"), separator);\n\t\t\t}\n\t\t\tif (titleCase) result = result.replace(/(\\w)(\\S*)/g, function(_, i$1, r) {\n\t\t\t\tvar j = i$1.toUpperCase() + (r !== null ? r : \"\");\n\t\t\t\treturn Object.keys(customReplacements).indexOf(j.toLowerCase()) < 0 ? j : j.toLowerCase();\n\t\t\t});\n\t\t\tresult = result.replace(/\\s+/g, separator).replace(new RegExp(\"\\\\\" + separator + \"+\", \"g\"), separator).replace(new RegExp(\"(^\\\\\" + separator + \"+|\\\\\" + separator + \"+$)\", \"g\"), \"\");\n\t\t\tif (truncate && result.length > truncate) {\n\t\t\t\tlucky = result.charAt(truncate) === separator;\n\t\t\t\tresult = result.slice(0, truncate);\n\t\t\t\tif (!lucky) result = result.slice(0, result.lastIndexOf(separator));\n\t\t\t}\n\t\t\tif (!maintainCase && !titleCase) result = result.toLowerCase();\n\t\t\treturn result;\n\t\t};\n\t\t/**\n\t\t* createSlug curried(opts)(input)\n\t\t* @param {object|string} opts config object or input string\n\t\t* @return {Function} function getSlugWithConfig()\n\t\t**/\n\t\tvar createSlug = function createSlug$1(opts) {\n\t\t\t/**\n\t\t\t* getSlugWithConfig\n\t\t\t* @param {string} input string\n\t\t\t* @return {string} slug string\n\t\t\t*/\n\t\t\treturn function getSlugWithConfig(input) {\n\t\t\t\treturn getSlug(input, opts);\n\t\t\t};\n\t\t};\n\t\t/**\n\t\t* escape Chars\n\t\t* @param {string} input string\n\t\t*/\n\t\tvar escapeChars = function escapeChars$1(input) {\n\t\t\treturn input.replace(/[-\\\\^$*+?.()|[\\]{}\\/]/g, \"\\\\$&\");\n\t\t};\n\t\t/**\n\t\t* check if the char is an already converted char from custom list\n\t\t* @param {char} ch character to check\n\t\t* @param {object} customReplacements custom translation map\n\t\t*/\n\t\tvar isReplacedCustomChar = function(ch, customReplacements) {\n\t\t\tfor (var c in customReplacements) if (customReplacements[c] === ch) return true;\n\t\t};\n\t\tif (typeof module !== \"undefined\" && module.exports) {\n\t\t\tmodule.exports = getSlug;\n\t\t\tmodule.exports.createSlug = createSlug;\n\t\t} else if (typeof define !== \"undefined\" && define.amd) define([], function() {\n\t\t\treturn getSlug;\n\t\t});\n\t\telse try {\n\t\t\tif (root.getSlug || root.createSlug) throw \"speakingurl: globals exists /(getSlug|createSlug)/\";\n\t\t\telse {\n\t\t\t\troot.getSlug = getSlug;\n\t\t\t\troot.createSlug = createSlug;\n\t\t\t}\n\t\t} catch (e) {}\n\t})(exports);\n}) });\n\n//#endregion\n//#region ../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/index.js\nvar require_speakingurl = /* @__PURE__ */ __commonJS({ \"../../node_modules/.pnpm/speakingurl@14.0.1/node_modules/speakingurl/index.js\": ((exports, module) => {\n\tmodule.exports = require_speakingurl$1();\n}) });\n\n//#endregion\n//#region src/core/app/index.ts\nvar import_speakingurl = /* @__PURE__ */ __toESM(require_speakingurl(), 1);\nconst appRecordInfo = target.__VUE_DEVTOOLS_NEXT_APP_RECORD_INFO__ ??= {\n\tid: 0,\n\tappIds: /* @__PURE__ */ new Set()\n};\nfunction getAppRecordName(app, fallbackName) {\n\treturn app?._component?.name || `App ${fallbackName}`;\n}\nfunction getAppRootInstance(app) {\n\tif (app._instance) return app._instance;\n\telse if (app._container?._vnode?.component) return app._container?._vnode?.component;\n}\nfunction removeAppRecordId(app) {\n\tconst id = app.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__;\n\tif (id != null) {\n\t\tappRecordInfo.appIds.delete(id);\n\t\tappRecordInfo.id--;\n\t}\n}\nfunction getAppRecordId(app, defaultId) {\n\tif (app.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__ != null) return app.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__;\n\tlet id = defaultId ?? (appRecordInfo.id++).toString();\n\tif (defaultId && appRecordInfo.appIds.has(id)) {\n\t\tlet count = 1;\n\t\twhile (appRecordInfo.appIds.has(`${defaultId}_${count}`)) count++;\n\t\tid = `${defaultId}_${count}`;\n\t}\n\tappRecordInfo.appIds.add(id);\n\tapp.__VUE_DEVTOOLS_NEXT_APP_RECORD_ID__ = id;\n\treturn id;\n}\nfunction createAppRecord(app, types) {\n\tconst rootInstance = getAppRootInstance(app);\n\tif (rootInstance) {\n\t\tappRecordInfo.id++;\n\t\tconst name = getAppRecordName(app, appRecordInfo.id.toString());\n\t\tconst id = getAppRecordId(app, (0, import_speakingurl.default)(name));\n\t\tconst [el] = getRootElementsFromComponentInstance(rootInstance);\n\t\tconst record = {\n\t\t\tid,\n\t\t\tname,\n\t\t\ttypes,\n\t\t\tinstanceMap: /* @__PURE__ */ new Map(),\n\t\t\tperfGroupIds: /* @__PURE__ */ new Map(),\n\t\t\trootInstance,\n\t\t\tiframe: isBrowser && document !== el?.ownerDocument ? el?.ownerDocument?.location?.pathname : void 0\n\t\t};\n\t\tapp.__VUE_DEVTOOLS_NEXT_APP_RECORD__ = record;\n\t\tconst rootId = `${record.id}:root`;\n\t\trecord.instanceMap.set(rootId, record.rootInstance);\n\t\trecord.rootInstance.__VUE_DEVTOOLS_NEXT_UID__ = rootId;\n\t\treturn record;\n\t} else return {};\n}\n\n//#endregion\n//#region src/core/iframe/index.ts\nfunction detectIframeApp(target$1, inIframe = false) {\n\tif (inIframe) {\n\t\tfunction sendEventToParent(cb) {\n\t\t\ttry {\n\t\t\t\tconst hook$2 = window.parent.__VUE_DEVTOOLS_GLOBAL_HOOK__;\n\t\t\t\tif (hook$2) cb(hook$2);\n\t\t\t} catch (e) {}\n\t\t}\n\t\tconst hook$1 = {\n\t\t\tid: \"vue-devtools-next\",\n\t\t\tdevtoolsVersion: \"7.0\",\n\t\t\ton: (event, cb) => {\n\t\t\t\tsendEventToParent((hook$2) => {\n\t\t\t\t\thook$2.on(event, cb);\n\t\t\t\t});\n\t\t\t},\n\t\t\tonce: (event, cb) => {\n\t\t\t\tsendEventToParent((hook$2) => {\n\t\t\t\t\thook$2.once(event, cb);\n\t\t\t\t});\n\t\t\t},\n\t\t\toff: (event, cb) => {\n\t\t\t\tsendEventToParent((hook$2) => {\n\t\t\t\t\thook$2.off(event, cb);\n\t\t\t\t});\n\t\t\t},\n\t\t\temit: (event, ...payload) => {\n\t\t\t\tsendEventToParent((hook$2) => {\n\t\t\t\t\thook$2.emit(event, ...payload);\n\t\t\t\t});\n\t\t\t}\n\t\t};\n\t\tObject.defineProperty(target$1, \"__VUE_DEVTOOLS_GLOBAL_HOOK__\", {\n\t\t\tget() {\n\t\t\t\treturn hook$1;\n\t\t\t},\n\t\t\tconfigurable: true\n\t\t});\n\t}\n\tfunction injectVueHookToIframe(iframe) {\n\t\tif (iframe.__vdevtools__injected) return;\n\t\ttry {\n\t\t\tiframe.__vdevtools__injected = true;\n\t\t\tconst inject = () => {\n\t\t\t\ttry {\n\t\t\t\t\tiframe.contentWindow.__VUE_DEVTOOLS_IFRAME__ = iframe;\n\t\t\t\t\tconst script = iframe.contentDocument.createElement(\"script\");\n\t\t\t\t\tscript.textContent = `;(${detectIframeApp.toString()})(window, true)`;\n\t\t\t\t\tiframe.contentDocument.documentElement.appendChild(script);\n\t\t\t\t\tscript.parentNode.removeChild(script);\n\t\t\t\t} catch (e) {}\n\t\t\t};\n\t\t\tinject();\n\t\t\tiframe.addEventListener(\"load\", () => inject());\n\t\t} catch (e) {}\n\t}\n\tfunction injectVueHookToIframes() {\n\t\tif (typeof window === \"undefined\") return;\n\t\tconst iframes = Array.from(document.querySelectorAll(\"iframe:not([data-vue-devtools-ignore])\"));\n\t\tfor (const iframe of iframes) injectVueHookToIframe(iframe);\n\t}\n\tinjectVueHookToIframes();\n\tlet iframeAppChecks = 0;\n\tconst iframeAppCheckTimer = setInterval(() => {\n\t\tinjectVueHookToIframes();\n\t\tiframeAppChecks++;\n\t\tif (iframeAppChecks >= 5) clearInterval(iframeAppCheckTimer);\n\t}, 1e3);\n}\n\n//#endregion\n//#region src/core/index.ts\nfunction initDevTools() {\n\tdetectIframeApp(target);\n\tupdateDevToolsState({ vitePluginDetected: getDevToolsEnv().vitePluginDetected });\n\tconst isDevToolsNext = target.__VUE_DEVTOOLS_GLOBAL_HOOK__?.id === \"vue-devtools-next\";\n\tif (target.__VUE_DEVTOOLS_GLOBAL_HOOK__ && isDevToolsNext) return;\n\tconst _devtoolsHook = createDevToolsHook();\n\tif (target.__VUE_DEVTOOLS_HOOK_REPLAY__) try {\n\t\ttarget.__VUE_DEVTOOLS_HOOK_REPLAY__.forEach((cb) => cb(_devtoolsHook));\n\t\ttarget.__VUE_DEVTOOLS_HOOK_REPLAY__ = [];\n\t} catch (e) {\n\t\tconsole.error(\"[vue-devtools] Error during hook replay\", e);\n\t}\n\t_devtoolsHook.once(\"init\", (Vue) => {\n\t\ttarget.__VUE_DEVTOOLS_VUE2_APP_DETECTED__ = true;\n\t\tconsole.log(\"%c[_____Vue DevTools v7 log_____]\", \"color: red; font-bold: 600; font-size: 16px;\");\n\t\tconsole.log(\"%cVue DevTools v7 detected in your Vue2 project. v7 only supports Vue3 and will not work.\", \"font-bold: 500; font-size: 14px;\");\n\t\tconst legacyChromeUrl = \"https://chromewebstore.google.com/detail/vuejs-devtools/iaajmlceplecbljialhhkmedjlpdblhp\";\n\t\tconst legacyFirefoxUrl = \"https://addons.mozilla.org/firefox/addon/vue-js-devtools-v6-legacy\";\n\t\tconsole.log(`%cThe legacy version of chrome extension that supports both Vue 2 and Vue 3 has been moved to %c ${legacyChromeUrl}`, \"font-size: 14px;\", \"text-decoration: underline; cursor: pointer;font-size: 14px;\");\n\t\tconsole.log(`%cThe legacy version of firefox extension that supports both Vue 2 and Vue 3 has been moved to %c ${legacyFirefoxUrl}`, \"font-size: 14px;\", \"text-decoration: underline; cursor: pointer;font-size: 14px;\");\n\t\tconsole.log(\"%cPlease install and enable only the legacy version for your Vue2 app.\", \"font-bold: 500; font-size: 14px;\");\n\t\tconsole.log(\"%c[_____Vue DevTools v7 log_____]\", \"color: red; font-bold: 600; font-size: 16px;\");\n\t});\n\thook.on.setupDevtoolsPlugin((pluginDescriptor, setupFn) => {\n\t\taddDevToolsPluginToBuffer(pluginDescriptor, setupFn);\n\t\tconst { app } = activeAppRecord ?? {};\n\t\tif (pluginDescriptor.settings) initPluginSettings(pluginDescriptor.id, pluginDescriptor.settings);\n\t\tif (!app) return;\n\t\tcallDevToolsPluginSetupFn([pluginDescriptor, setupFn], app);\n\t});\n\tonLegacyDevToolsPluginApiAvailable(() => {\n\t\tdevtoolsPluginBuffer.filter(([item]) => item.id !== \"components\").forEach(([pluginDescriptor, setupFn]) => {\n\t\t\t_devtoolsHook.emit(DevToolsHooks.SETUP_DEVTOOLS_PLUGIN, pluginDescriptor, setupFn, { target: \"legacy\" });\n\t\t});\n\t});\n\thook.on.vueAppInit(async (app, version, types) => {\n\t\tconst normalizedAppRecord = {\n\t\t\t...createAppRecord(app, types),\n\t\t\tapp,\n\t\t\tversion\n\t\t};\n\t\taddDevToolsAppRecord(normalizedAppRecord);\n\t\tif (devtoolsAppRecords.value.length === 1) {\n\t\t\tsetActiveAppRecord(normalizedAppRecord);\n\t\t\tsetActiveAppRecordId(normalizedAppRecord.id);\n\t\t\tnormalizeRouterInfo(normalizedAppRecord, activeAppRecord);\n\t\t\tregisterDevToolsPlugin(normalizedAppRecord.app);\n\t\t}\n\t\tsetupDevToolsPlugin(...createComponentsDevToolsPlugin(normalizedAppRecord.app));\n\t\tupdateDevToolsState({ connected: true });\n\t\t_devtoolsHook.apps.push(app);\n\t});\n\thook.on.vueAppUnmount(async (app) => {\n\t\tconst activeRecords = devtoolsAppRecords.value.filter((appRecord) => appRecord.app !== app);\n\t\tif (activeRecords.length === 0) updateDevToolsState({ connected: false });\n\t\tremoveDevToolsAppRecord(app);\n\t\tremoveAppRecordId(app);\n\t\tif (activeAppRecord.value.app === app) {\n\t\t\tsetActiveAppRecord(activeRecords[0]);\n\t\t\tdevtoolsContext.hooks.callHook(DevToolsMessagingHookKeys.SEND_ACTIVE_APP_UNMOUNTED_TO_CLIENT);\n\t\t}\n\t\ttarget.__VUE_DEVTOOLS_GLOBAL_HOOK__.apps.splice(target.__VUE_DEVTOOLS_GLOBAL_HOOK__.apps.indexOf(app), 1);\n\t\tremoveRegisteredPluginApp(app);\n\t});\n\tsubscribeDevToolsHook(_devtoolsHook);\n\tif (!target.__VUE_DEVTOOLS_GLOBAL_HOOK__) Object.defineProperty(target, \"__VUE_DEVTOOLS_GLOBAL_HOOK__\", {\n\t\tget() {\n\t\t\treturn _devtoolsHook;\n\t\t},\n\t\tconfigurable: true\n\t});\n\telse if (!isNuxtApp) Object.assign(__VUE_DEVTOOLS_GLOBAL_HOOK__, _devtoolsHook);\n}\nfunction onDevToolsClientConnected(fn) {\n\treturn new Promise((resolve) => {\n\t\tif (devtoolsState.connected && devtoolsState.clientConnected) {\n\t\t\tfn();\n\t\t\tresolve();\n\t\t\treturn;\n\t\t}\n\t\tdevtoolsContext.hooks.hook(DevToolsMessagingHookKeys.DEVTOOLS_CONNECTED_UPDATED, ({ state }) => {\n\t\t\tif (state.connected && state.clientConnected) {\n\t\t\t\tfn();\n\t\t\t\tresolve();\n\t\t\t}\n\t\t});\n\t});\n}\n\n//#endregion\n//#region src/core/high-perf-mode/index.ts\nfunction toggleHighPerfMode(state) {\n\tdevtoolsState.highPerfModeEnabled = state ?? !devtoolsState.highPerfModeEnabled;\n\tif (!state && activeAppRecord.value) registerDevToolsPlugin(activeAppRecord.value.app);\n}\n\n//#endregion\n//#region src/core/component/state/reviver.ts\nfunction reviveSet(val) {\n\tconst result = /* @__PURE__ */ new Set();\n\tconst list = val._custom.value;\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst value = list[i];\n\t\tresult.add(revive(value));\n\t}\n\treturn result;\n}\nfunction reviveMap(val) {\n\tconst result = /* @__PURE__ */ new Map();\n\tconst list = val._custom.value;\n\tfor (let i = 0; i < list.length; i++) {\n\t\tconst { key, value } = list[i];\n\t\tresult.set(key, revive(value));\n\t}\n\treturn result;\n}\nfunction revive(val) {\n\tif (val === UNDEFINED) return;\n\telse if (val === INFINITY) return Number.POSITIVE_INFINITY;\n\telse if (val === NEGATIVE_INFINITY) return Number.NEGATIVE_INFINITY;\n\telse if (val === NAN) return NaN;\n\telse if (val && val._custom) {\n\t\tconst { _custom: custom } = val;\n\t\tif (custom.type === \"component\") return activeAppRecord.value.instanceMap.get(custom.id);\n\t\telse if (custom.type === \"map\") return reviveMap(val);\n\t\telse if (custom.type === \"set\") return reviveSet(val);\n\t\telse if (custom.type === \"bigint\") return BigInt(custom.value);\n\t\telse return revive(custom.value);\n\t} else if (symbolRE.test(val)) {\n\t\tconst [, string] = symbolRE.exec(val);\n\t\treturn Symbol.for(string);\n\t} else if (specialTypeRE.test(val)) {\n\t\tconst [, type, string, , details] = specialTypeRE.exec(val);\n\t\tconst result = new target[type](string);\n\t\tif (type === \"Error\" && details) result.stack = details;\n\t\treturn result;\n\t} else return val;\n}\nfunction reviver(key, value) {\n\treturn revive(value);\n}\n\n//#endregion\n//#region src/core/component/state/format.ts\nfunction getInspectorStateValueType(value, raw = true) {\n\tconst type = typeof value;\n\tif (value == null || value === UNDEFINED || value === \"undefined\") return \"null\";\n\telse if (type === \"boolean\" || type === \"number\" || value === INFINITY || value === NEGATIVE_INFINITY || value === NAN) return \"literal\";\n\telse if (value?._custom) if (raw || value._custom.display != null || value._custom.displayText != null) return \"custom\";\n\telse return getInspectorStateValueType(value._custom.value);\n\telse if (typeof value === \"string\") {\n\t\tconst typeMatch = specialTypeRE.exec(value);\n\t\tif (typeMatch) {\n\t\t\tconst [, type$1] = typeMatch;\n\t\t\treturn `native ${type$1}`;\n\t\t} else return \"string\";\n\t} else if (Array.isArray(value) || value?._isArray) return \"array\";\n\telse if (isPlainObject(value)) return \"plain-object\";\n\telse return \"unknown\";\n}\nfunction formatInspectorStateValue(value, quotes = false, options) {\n\tconst { customClass } = options ?? {};\n\tlet result;\n\tconst type = getInspectorStateValueType(value, false);\n\tif (type !== \"custom\" && value?._custom) value = value._custom.value;\n\tif (result = internalStateTokenToString(value)) return result;\n\telse if (type === \"custom\") return value._custom.value?._custom && formatInspectorStateValue(value._custom.value, quotes, options) || value._custom.displayText || value._custom.display;\n\telse if (type === \"array\") return `Array[${value.length}]`;\n\telse if (type === \"plain-object\") return `Object${Object.keys(value).length ? \"\" : \" (empty)\"}`;\n\telse if (type?.includes(\"native\")) return escape(specialTypeRE.exec(value)?.[2]);\n\telse if (typeof value === \"string\") {\n\t\tconst typeMatch = value.match(rawTypeRE);\n\t\tif (typeMatch) value = escapeString(typeMatch[1]);\n\t\telse if (quotes) value = `\"${customClass?.string ? `${escapeString(value)}` : escapeString(value)}\"`;\n\t\telse value = customClass?.string ? `${escapeString(value)}` : escapeString(value);\n\t}\n\treturn value;\n}\nfunction escapeString(value) {\n\treturn escape(value).replace(/ /g, \" \").replace(/\\n/g, \"\\\\n\");\n}\nfunction getRaw(value) {\n\tlet customType;\n\tconst isCustom = getInspectorStateValueType(value) === \"custom\";\n\tlet inherit = {};\n\tif (isCustom) {\n\t\tconst data = value;\n\t\tconst customValue = data._custom?.value;\n\t\tconst currentCustomType = data._custom?.type;\n\t\tconst nestedCustom = typeof customValue === \"object\" && customValue !== null && \"_custom\" in customValue ? getRaw(customValue) : {\n\t\t\tinherit: void 0,\n\t\t\tvalue: void 0,\n\t\t\tcustomType: void 0\n\t\t};\n\t\tinherit = nestedCustom.inherit || data._custom?.fields || {};\n\t\tvalue = nestedCustom.value || customValue;\n\t\tcustomType = nestedCustom.customType || currentCustomType;\n\t}\n\tif (value && value._isArray) value = value.items;\n\treturn {\n\t\tvalue,\n\t\tinherit,\n\t\tcustomType\n\t};\n}\nfunction toEdit(value, customType) {\n\tif (customType === \"bigint\") return value;\n\tif (customType === \"date\") return value;\n\treturn replaceTokenToString(JSON.stringify(value));\n}\nfunction toSubmit(value, customType) {\n\tif (customType === \"bigint\") return BigInt(value);\n\tif (customType === \"date\") return new Date(value);\n\treturn JSON.parse(replaceStringToToken(value), reviver);\n}\n\n//#endregion\n//#region src/core/devtools-client/detected.ts\nfunction updateDevToolsClientDetected(params) {\n\tdevtoolsState.devtoolsClientDetected = {\n\t\t...devtoolsState.devtoolsClientDetected,\n\t\t...params\n\t};\n\ttoggleHighPerfMode(!Object.values(devtoolsState.devtoolsClientDetected).some(Boolean));\n}\ntarget.__VUE_DEVTOOLS_UPDATE_CLIENT_DETECTED__ ??= updateDevToolsClientDetected;\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/double-indexed-kv.js\nvar DoubleIndexedKV = class {\n\tconstructor() {\n\t\tthis.keyToValue = /* @__PURE__ */ new Map();\n\t\tthis.valueToKey = /* @__PURE__ */ new Map();\n\t}\n\tset(key, value) {\n\t\tthis.keyToValue.set(key, value);\n\t\tthis.valueToKey.set(value, key);\n\t}\n\tgetByKey(key) {\n\t\treturn this.keyToValue.get(key);\n\t}\n\tgetByValue(value) {\n\t\treturn this.valueToKey.get(value);\n\t}\n\tclear() {\n\t\tthis.keyToValue.clear();\n\t\tthis.valueToKey.clear();\n\t}\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/registry.js\nvar Registry = class {\n\tconstructor(generateIdentifier) {\n\t\tthis.generateIdentifier = generateIdentifier;\n\t\tthis.kv = new DoubleIndexedKV();\n\t}\n\tregister(value, identifier) {\n\t\tif (this.kv.getByValue(value)) return;\n\t\tif (!identifier) identifier = this.generateIdentifier(value);\n\t\tthis.kv.set(identifier, value);\n\t}\n\tclear() {\n\t\tthis.kv.clear();\n\t}\n\tgetIdentifier(value) {\n\t\treturn this.kv.getByValue(value);\n\t}\n\tgetValue(identifier) {\n\t\treturn this.kv.getByKey(identifier);\n\t}\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/class-registry.js\nvar ClassRegistry = class extends Registry {\n\tconstructor() {\n\t\tsuper((c) => c.name);\n\t\tthis.classToAllowedProps = /* @__PURE__ */ new Map();\n\t}\n\tregister(value, options) {\n\t\tif (typeof options === \"object\") {\n\t\t\tif (options.allowProps) this.classToAllowedProps.set(value, options.allowProps);\n\t\t\tsuper.register(value, options.identifier);\n\t\t} else super.register(value, options);\n\t}\n\tgetAllowedProps(value) {\n\t\treturn this.classToAllowedProps.get(value);\n\t}\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/util.js\nfunction valuesOfObj(record) {\n\tif (\"values\" in Object) return Object.values(record);\n\tconst values = [];\n\tfor (const key in record) if (record.hasOwnProperty(key)) values.push(record[key]);\n\treturn values;\n}\nfunction find(record, predicate) {\n\tconst values = valuesOfObj(record);\n\tif (\"find\" in values) return values.find(predicate);\n\tconst valuesNotNever = values;\n\tfor (let i = 0; i < valuesNotNever.length; i++) {\n\t\tconst value = valuesNotNever[i];\n\t\tif (predicate(value)) return value;\n\t}\n}\nfunction forEach(record, run) {\n\tObject.entries(record).forEach(([key, value]) => run(value, key));\n}\nfunction includes(arr, value) {\n\treturn arr.indexOf(value) !== -1;\n}\nfunction findArr(record, predicate) {\n\tfor (let i = 0; i < record.length; i++) {\n\t\tconst value = record[i];\n\t\tif (predicate(value)) return value;\n\t}\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/custom-transformer-registry.js\nvar CustomTransformerRegistry = class {\n\tconstructor() {\n\t\tthis.transfomers = {};\n\t}\n\tregister(transformer) {\n\t\tthis.transfomers[transformer.name] = transformer;\n\t}\n\tfindApplicable(v) {\n\t\treturn find(this.transfomers, (transformer) => transformer.isApplicable(v));\n\t}\n\tfindByName(name) {\n\t\treturn this.transfomers[name];\n\t}\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/is.js\nconst getType$1 = (payload) => Object.prototype.toString.call(payload).slice(8, -1);\nconst isUndefined$1 = (payload) => typeof payload === \"undefined\";\nconst isNull$1 = (payload) => payload === null;\nconst isPlainObject$2 = (payload) => {\n\tif (typeof payload !== \"object\" || payload === null) return false;\n\tif (payload === Object.prototype) return false;\n\tif (Object.getPrototypeOf(payload) === null) return true;\n\treturn Object.getPrototypeOf(payload) === Object.prototype;\n};\nconst isEmptyObject = (payload) => isPlainObject$2(payload) && Object.keys(payload).length === 0;\nconst isArray$2 = (payload) => Array.isArray(payload);\nconst isString = (payload) => typeof payload === \"string\";\nconst isNumber = (payload) => typeof payload === \"number\" && !isNaN(payload);\nconst isBoolean = (payload) => typeof payload === \"boolean\";\nconst isRegExp = (payload) => payload instanceof RegExp;\nconst isMap = (payload) => payload instanceof Map;\nconst isSet = (payload) => payload instanceof Set;\nconst isSymbol = (payload) => getType$1(payload) === \"Symbol\";\nconst isDate = (payload) => payload instanceof Date && !isNaN(payload.valueOf());\nconst isError = (payload) => payload instanceof Error;\nconst isNaNValue = (payload) => typeof payload === \"number\" && isNaN(payload);\nconst isPrimitive = (payload) => isBoolean(payload) || isNull$1(payload) || isUndefined$1(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);\nconst isBigint = (payload) => typeof payload === \"bigint\";\nconst isInfinite = (payload) => payload === Infinity || payload === -Infinity;\nconst isTypedArray = (payload) => ArrayBuffer.isView(payload) && !(payload instanceof DataView);\nconst isURL = (payload) => payload instanceof URL;\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/pathstringifier.js\nconst escapeKey = (key) => key.replace(/\\./g, \"\\\\.\");\nconst stringifyPath = (path) => path.map(String).map(escapeKey).join(\".\");\nconst parsePath = (string) => {\n\tconst result = [];\n\tlet segment = \"\";\n\tfor (let i = 0; i < string.length; i++) {\n\t\tlet char = string.charAt(i);\n\t\tif (char === \"\\\\\" && string.charAt(i + 1) === \".\") {\n\t\t\tsegment += \".\";\n\t\t\ti++;\n\t\t\tcontinue;\n\t\t}\n\t\tif (char === \".\") {\n\t\t\tresult.push(segment);\n\t\t\tsegment = \"\";\n\t\t\tcontinue;\n\t\t}\n\t\tsegment += char;\n\t}\n\tconst lastSegment = segment;\n\tresult.push(lastSegment);\n\treturn result;\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/transformer.js\nfunction simpleTransformation(isApplicable, annotation, transform, untransform) {\n\treturn {\n\t\tisApplicable,\n\t\tannotation,\n\t\ttransform,\n\t\tuntransform\n\t};\n}\nconst simpleRules = [\n\tsimpleTransformation(isUndefined$1, \"undefined\", () => null, () => void 0),\n\tsimpleTransformation(isBigint, \"bigint\", (v) => v.toString(), (v) => {\n\t\tif (typeof BigInt !== \"undefined\") return BigInt(v);\n\t\tconsole.error(\"Please add a BigInt polyfill.\");\n\t\treturn v;\n\t}),\n\tsimpleTransformation(isDate, \"Date\", (v) => v.toISOString(), (v) => new Date(v)),\n\tsimpleTransformation(isError, \"Error\", (v, superJson) => {\n\t\tconst baseError = {\n\t\t\tname: v.name,\n\t\t\tmessage: v.message\n\t\t};\n\t\tsuperJson.allowedErrorProps.forEach((prop) => {\n\t\t\tbaseError[prop] = v[prop];\n\t\t});\n\t\treturn baseError;\n\t}, (v, superJson) => {\n\t\tconst e = new Error(v.message);\n\t\te.name = v.name;\n\t\te.stack = v.stack;\n\t\tsuperJson.allowedErrorProps.forEach((prop) => {\n\t\t\te[prop] = v[prop];\n\t\t});\n\t\treturn e;\n\t}),\n\tsimpleTransformation(isRegExp, \"regexp\", (v) => \"\" + v, (regex) => {\n\t\tconst body = regex.slice(1, regex.lastIndexOf(\"/\"));\n\t\tconst flags = regex.slice(regex.lastIndexOf(\"/\") + 1);\n\t\treturn new RegExp(body, flags);\n\t}),\n\tsimpleTransformation(isSet, \"set\", (v) => [...v.values()], (v) => new Set(v)),\n\tsimpleTransformation(isMap, \"map\", (v) => [...v.entries()], (v) => new Map(v)),\n\tsimpleTransformation((v) => isNaNValue(v) || isInfinite(v), \"number\", (v) => {\n\t\tif (isNaNValue(v)) return \"NaN\";\n\t\tif (v > 0) return \"Infinity\";\n\t\telse return \"-Infinity\";\n\t}, Number),\n\tsimpleTransformation((v) => v === 0 && 1 / v === -Infinity, \"number\", () => {\n\t\treturn \"-0\";\n\t}, Number),\n\tsimpleTransformation(isURL, \"URL\", (v) => v.toString(), (v) => new URL(v))\n];\nfunction compositeTransformation(isApplicable, annotation, transform, untransform) {\n\treturn {\n\t\tisApplicable,\n\t\tannotation,\n\t\ttransform,\n\t\tuntransform\n\t};\n}\nconst symbolRule = compositeTransformation((s, superJson) => {\n\tif (isSymbol(s)) return !!superJson.symbolRegistry.getIdentifier(s);\n\treturn false;\n}, (s, superJson) => {\n\treturn [\"symbol\", superJson.symbolRegistry.getIdentifier(s)];\n}, (v) => v.description, (_, a, superJson) => {\n\tconst value = superJson.symbolRegistry.getValue(a[1]);\n\tif (!value) throw new Error(\"Trying to deserialize unknown symbol\");\n\treturn value;\n});\nconst constructorToName = [\n\tInt8Array,\n\tUint8Array,\n\tInt16Array,\n\tUint16Array,\n\tInt32Array,\n\tUint32Array,\n\tFloat32Array,\n\tFloat64Array,\n\tUint8ClampedArray\n].reduce((obj, ctor) => {\n\tobj[ctor.name] = ctor;\n\treturn obj;\n}, {});\nconst typedArrayRule = compositeTransformation(isTypedArray, (v) => [\"typed-array\", v.constructor.name], (v) => [...v], (v, a) => {\n\tconst ctor = constructorToName[a[1]];\n\tif (!ctor) throw new Error(\"Trying to deserialize unknown typed array\");\n\treturn new ctor(v);\n});\nfunction isInstanceOfRegisteredClass(potentialClass, superJson) {\n\tif (potentialClass?.constructor) return !!superJson.classRegistry.getIdentifier(potentialClass.constructor);\n\treturn false;\n}\nconst classRule = compositeTransformation(isInstanceOfRegisteredClass, (clazz, superJson) => {\n\treturn [\"class\", superJson.classRegistry.getIdentifier(clazz.constructor)];\n}, (clazz, superJson) => {\n\tconst allowedProps = superJson.classRegistry.getAllowedProps(clazz.constructor);\n\tif (!allowedProps) return { ...clazz };\n\tconst result = {};\n\tallowedProps.forEach((prop) => {\n\t\tresult[prop] = clazz[prop];\n\t});\n\treturn result;\n}, (v, a, superJson) => {\n\tconst clazz = superJson.classRegistry.getValue(a[1]);\n\tif (!clazz) throw new Error(`Trying to deserialize unknown class '${a[1]}' - check https://github.com/blitz-js/superjson/issues/116#issuecomment-773996564`);\n\treturn Object.assign(Object.create(clazz.prototype), v);\n});\nconst customRule = compositeTransformation((value, superJson) => {\n\treturn !!superJson.customTransformerRegistry.findApplicable(value);\n}, (value, superJson) => {\n\treturn [\"custom\", superJson.customTransformerRegistry.findApplicable(value).name];\n}, (value, superJson) => {\n\treturn superJson.customTransformerRegistry.findApplicable(value).serialize(value);\n}, (v, a, superJson) => {\n\tconst transformer = superJson.customTransformerRegistry.findByName(a[1]);\n\tif (!transformer) throw new Error(\"Trying to deserialize unknown custom value\");\n\treturn transformer.deserialize(v);\n});\nconst compositeRules = [\n\tclassRule,\n\tsymbolRule,\n\tcustomRule,\n\ttypedArrayRule\n];\nconst transformValue = (value, superJson) => {\n\tconst applicableCompositeRule = findArr(compositeRules, (rule) => rule.isApplicable(value, superJson));\n\tif (applicableCompositeRule) return {\n\t\tvalue: applicableCompositeRule.transform(value, superJson),\n\t\ttype: applicableCompositeRule.annotation(value, superJson)\n\t};\n\tconst applicableSimpleRule = findArr(simpleRules, (rule) => rule.isApplicable(value, superJson));\n\tif (applicableSimpleRule) return {\n\t\tvalue: applicableSimpleRule.transform(value, superJson),\n\t\ttype: applicableSimpleRule.annotation\n\t};\n};\nconst simpleRulesByAnnotation = {};\nsimpleRules.forEach((rule) => {\n\tsimpleRulesByAnnotation[rule.annotation] = rule;\n});\nconst untransformValue = (json, type, superJson) => {\n\tif (isArray$2(type)) switch (type[0]) {\n\t\tcase \"symbol\": return symbolRule.untransform(json, type, superJson);\n\t\tcase \"class\": return classRule.untransform(json, type, superJson);\n\t\tcase \"custom\": return customRule.untransform(json, type, superJson);\n\t\tcase \"typed-array\": return typedArrayRule.untransform(json, type, superJson);\n\t\tdefault: throw new Error(\"Unknown transformation: \" + type);\n\t}\n\telse {\n\t\tconst transformation = simpleRulesByAnnotation[type];\n\t\tif (!transformation) throw new Error(\"Unknown transformation: \" + type);\n\t\treturn transformation.untransform(json, superJson);\n\t}\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/accessDeep.js\nconst getNthKey = (value, n) => {\n\tif (n > value.size) throw new Error(\"index out of bounds\");\n\tconst keys = value.keys();\n\twhile (n > 0) {\n\t\tkeys.next();\n\t\tn--;\n\t}\n\treturn keys.next().value;\n};\nfunction validatePath(path) {\n\tif (includes(path, \"__proto__\")) throw new Error(\"__proto__ is not allowed as a property\");\n\tif (includes(path, \"prototype\")) throw new Error(\"prototype is not allowed as a property\");\n\tif (includes(path, \"constructor\")) throw new Error(\"constructor is not allowed as a property\");\n}\nconst getDeep = (object, path) => {\n\tvalidatePath(path);\n\tfor (let i = 0; i < path.length; i++) {\n\t\tconst key = path[i];\n\t\tif (isSet(object)) object = getNthKey(object, +key);\n\t\telse if (isMap(object)) {\n\t\t\tconst row = +key;\n\t\t\tconst type = +path[++i] === 0 ? \"key\" : \"value\";\n\t\t\tconst keyOfRow = getNthKey(object, row);\n\t\t\tswitch (type) {\n\t\t\t\tcase \"key\":\n\t\t\t\t\tobject = keyOfRow;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"value\":\n\t\t\t\t\tobject = object.get(keyOfRow);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t} else object = object[key];\n\t}\n\treturn object;\n};\nconst setDeep = (object, path, mapper) => {\n\tvalidatePath(path);\n\tif (path.length === 0) return mapper(object);\n\tlet parent = object;\n\tfor (let i = 0; i < path.length - 1; i++) {\n\t\tconst key = path[i];\n\t\tif (isArray$2(parent)) {\n\t\t\tconst index = +key;\n\t\t\tparent = parent[index];\n\t\t} else if (isPlainObject$2(parent)) parent = parent[key];\n\t\telse if (isSet(parent)) {\n\t\t\tconst row = +key;\n\t\t\tparent = getNthKey(parent, row);\n\t\t} else if (isMap(parent)) {\n\t\t\tif (i === path.length - 2) break;\n\t\t\tconst row = +key;\n\t\t\tconst type = +path[++i] === 0 ? \"key\" : \"value\";\n\t\t\tconst keyOfRow = getNthKey(parent, row);\n\t\t\tswitch (type) {\n\t\t\t\tcase \"key\":\n\t\t\t\t\tparent = keyOfRow;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"value\":\n\t\t\t\t\tparent = parent.get(keyOfRow);\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tconst lastKey = path[path.length - 1];\n\tif (isArray$2(parent)) parent[+lastKey] = mapper(parent[+lastKey]);\n\telse if (isPlainObject$2(parent)) parent[lastKey] = mapper(parent[lastKey]);\n\tif (isSet(parent)) {\n\t\tconst oldValue = getNthKey(parent, +lastKey);\n\t\tconst newValue = mapper(oldValue);\n\t\tif (oldValue !== newValue) {\n\t\t\tparent.delete(oldValue);\n\t\t\tparent.add(newValue);\n\t\t}\n\t}\n\tif (isMap(parent)) {\n\t\tconst row = +path[path.length - 2];\n\t\tconst keyToRow = getNthKey(parent, row);\n\t\tswitch (+lastKey === 0 ? \"key\" : \"value\") {\n\t\t\tcase \"key\": {\n\t\t\t\tconst newKey = mapper(keyToRow);\n\t\t\t\tparent.set(newKey, parent.get(keyToRow));\n\t\t\t\tif (newKey !== keyToRow) parent.delete(keyToRow);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"value\":\n\t\t\t\tparent.set(keyToRow, mapper(parent.get(keyToRow)));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn object;\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/plainer.js\nfunction traverse(tree, walker$1, origin = []) {\n\tif (!tree) return;\n\tif (!isArray$2(tree)) {\n\t\tforEach(tree, (subtree, key) => traverse(subtree, walker$1, [...origin, ...parsePath(key)]));\n\t\treturn;\n\t}\n\tconst [nodeValue, children] = tree;\n\tif (children) forEach(children, (child, key) => {\n\t\ttraverse(child, walker$1, [...origin, ...parsePath(key)]);\n\t});\n\twalker$1(nodeValue, origin);\n}\nfunction applyValueAnnotations(plain, annotations, superJson) {\n\ttraverse(annotations, (type, path) => {\n\t\tplain = setDeep(plain, path, (v) => untransformValue(v, type, superJson));\n\t});\n\treturn plain;\n}\nfunction applyReferentialEqualityAnnotations(plain, annotations) {\n\tfunction apply(identicalPaths, path) {\n\t\tconst object = getDeep(plain, parsePath(path));\n\t\tidenticalPaths.map(parsePath).forEach((identicalObjectPath) => {\n\t\t\tplain = setDeep(plain, identicalObjectPath, () => object);\n\t\t});\n\t}\n\tif (isArray$2(annotations)) {\n\t\tconst [root, other] = annotations;\n\t\troot.forEach((identicalPath) => {\n\t\t\tplain = setDeep(plain, parsePath(identicalPath), () => plain);\n\t\t});\n\t\tif (other) forEach(other, apply);\n\t} else forEach(annotations, apply);\n\treturn plain;\n}\nconst isDeep = (object, superJson) => isPlainObject$2(object) || isArray$2(object) || isMap(object) || isSet(object) || isInstanceOfRegisteredClass(object, superJson);\nfunction addIdentity(object, path, identities) {\n\tconst existingSet = identities.get(object);\n\tif (existingSet) existingSet.push(path);\n\telse identities.set(object, [path]);\n}\nfunction generateReferentialEqualityAnnotations(identitites, dedupe) {\n\tconst result = {};\n\tlet rootEqualityPaths = void 0;\n\tidentitites.forEach((paths) => {\n\t\tif (paths.length <= 1) return;\n\t\tif (!dedupe) paths = paths.map((path) => path.map(String)).sort((a, b) => a.length - b.length);\n\t\tconst [representativePath, ...identicalPaths] = paths;\n\t\tif (representativePath.length === 0) rootEqualityPaths = identicalPaths.map(stringifyPath);\n\t\telse result[stringifyPath(representativePath)] = identicalPaths.map(stringifyPath);\n\t});\n\tif (rootEqualityPaths) if (isEmptyObject(result)) return [rootEqualityPaths];\n\telse return [rootEqualityPaths, result];\n\telse return isEmptyObject(result) ? void 0 : result;\n}\nconst walker = (object, identities, superJson, dedupe, path = [], objectsInThisPath = [], seenObjects = /* @__PURE__ */ new Map()) => {\n\tconst primitive = isPrimitive(object);\n\tif (!primitive) {\n\t\taddIdentity(object, path, identities);\n\t\tconst seen = seenObjects.get(object);\n\t\tif (seen) return dedupe ? { transformedValue: null } : seen;\n\t}\n\tif (!isDeep(object, superJson)) {\n\t\tconst transformed$1 = transformValue(object, superJson);\n\t\tconst result$1 = transformed$1 ? {\n\t\t\ttransformedValue: transformed$1.value,\n\t\t\tannotations: [transformed$1.type]\n\t\t} : { transformedValue: object };\n\t\tif (!primitive) seenObjects.set(object, result$1);\n\t\treturn result$1;\n\t}\n\tif (includes(objectsInThisPath, object)) return { transformedValue: null };\n\tconst transformationResult = transformValue(object, superJson);\n\tconst transformed = transformationResult?.value ?? object;\n\tconst transformedValue = isArray$2(transformed) ? [] : {};\n\tconst innerAnnotations = {};\n\tforEach(transformed, (value, index) => {\n\t\tif (index === \"__proto__\" || index === \"constructor\" || index === \"prototype\") throw new Error(`Detected property ${index}. This is a prototype pollution risk, please remove it from your object.`);\n\t\tconst recursiveResult = walker(value, identities, superJson, dedupe, [...path, index], [...objectsInThisPath, object], seenObjects);\n\t\ttransformedValue[index] = recursiveResult.transformedValue;\n\t\tif (isArray$2(recursiveResult.annotations)) innerAnnotations[index] = recursiveResult.annotations;\n\t\telse if (isPlainObject$2(recursiveResult.annotations)) forEach(recursiveResult.annotations, (tree, key) => {\n\t\t\tinnerAnnotations[escapeKey(index) + \".\" + key] = tree;\n\t\t});\n\t});\n\tconst result = isEmptyObject(innerAnnotations) ? {\n\t\ttransformedValue,\n\t\tannotations: !!transformationResult ? [transformationResult.type] : void 0\n\t} : {\n\t\ttransformedValue,\n\t\tannotations: !!transformationResult ? [transformationResult.type, innerAnnotations] : innerAnnotations\n\t};\n\tif (!primitive) seenObjects.set(object, result);\n\treturn result;\n};\n\n//#endregion\n//#region ../../node_modules/.pnpm/is-what@4.1.16/node_modules/is-what/dist/index.js\nfunction getType(payload) {\n\treturn Object.prototype.toString.call(payload).slice(8, -1);\n}\nfunction isArray$1(payload) {\n\treturn getType(payload) === \"Array\";\n}\nfunction isPlainObject$1(payload) {\n\tif (getType(payload) !== \"Object\") return false;\n\tconst prototype = Object.getPrototypeOf(payload);\n\treturn !!prototype && prototype.constructor === Object && prototype === Object.prototype;\n}\nfunction isNull(payload) {\n\treturn getType(payload) === \"Null\";\n}\nfunction isOneOf(a, b, c, d, e) {\n\treturn (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);\n}\nfunction isUndefined(payload) {\n\treturn getType(payload) === \"Undefined\";\n}\nconst isNullOrUndefined = isOneOf(isNull, isUndefined);\n\n//#endregion\n//#region ../../node_modules/.pnpm/copy-anything@3.0.5/node_modules/copy-anything/dist/index.js\nfunction assignProp(carry, key, newVal, originalObject, includeNonenumerable) {\n\tconst propType = {}.propertyIsEnumerable.call(originalObject, key) ? \"enumerable\" : \"nonenumerable\";\n\tif (propType === \"enumerable\") carry[key] = newVal;\n\tif (includeNonenumerable && propType === \"nonenumerable\") Object.defineProperty(carry, key, {\n\t\tvalue: newVal,\n\t\tenumerable: false,\n\t\twritable: true,\n\t\tconfigurable: true\n\t});\n}\nfunction copy(target$1, options = {}) {\n\tif (isArray$1(target$1)) return target$1.map((item) => copy(item, options));\n\tif (!isPlainObject$1(target$1)) return target$1;\n\tconst props = Object.getOwnPropertyNames(target$1);\n\tconst symbols = Object.getOwnPropertySymbols(target$1);\n\treturn [...props, ...symbols].reduce((carry, key) => {\n\t\tif (isArray$1(options.props) && !options.props.includes(key)) return carry;\n\t\tconst val = target$1[key];\n\t\tassignProp(carry, key, copy(val, options), target$1, options.nonenumerable);\n\t\treturn carry;\n\t}, {});\n}\n\n//#endregion\n//#region ../../node_modules/.pnpm/superjson@2.2.2/node_modules/superjson/dist/index.js\nvar SuperJSON = class {\n\t/**\n\t* @param dedupeReferentialEqualities If true, SuperJSON will make sure only one instance of referentially equal objects are serialized and the rest are replaced with `null`.\n\t*/\n\tconstructor({ dedupe = false } = {}) {\n\t\tthis.classRegistry = new ClassRegistry();\n\t\tthis.symbolRegistry = new Registry((s) => s.description ?? \"\");\n\t\tthis.customTransformerRegistry = new CustomTransformerRegistry();\n\t\tthis.allowedErrorProps = [];\n\t\tthis.dedupe = dedupe;\n\t}\n\tserialize(object) {\n\t\tconst identities = /* @__PURE__ */ new Map();\n\t\tconst output = walker(object, identities, this, this.dedupe);\n\t\tconst res = { json: output.transformedValue };\n\t\tif (output.annotations) res.meta = {\n\t\t\t...res.meta,\n\t\t\tvalues: output.annotations\n\t\t};\n\t\tconst equalityAnnotations = generateReferentialEqualityAnnotations(identities, this.dedupe);\n\t\tif (equalityAnnotations) res.meta = {\n\t\t\t...res.meta,\n\t\t\treferentialEqualities: equalityAnnotations\n\t\t};\n\t\treturn res;\n\t}\n\tdeserialize(payload) {\n\t\tconst { json, meta } = payload;\n\t\tlet result = copy(json);\n\t\tif (meta?.values) result = applyValueAnnotations(result, meta.values, this);\n\t\tif (meta?.referentialEqualities) result = applyReferentialEqualityAnnotations(result, meta.referentialEqualities);\n\t\treturn result;\n\t}\n\tstringify(object) {\n\t\treturn JSON.stringify(this.serialize(object));\n\t}\n\tparse(string) {\n\t\treturn this.deserialize(JSON.parse(string));\n\t}\n\tregisterClass(v, options) {\n\t\tthis.classRegistry.register(v, options);\n\t}\n\tregisterSymbol(v, identifier) {\n\t\tthis.symbolRegistry.register(v, identifier);\n\t}\n\tregisterCustom(transformer, name) {\n\t\tthis.customTransformerRegistry.register({\n\t\t\tname,\n\t\t\t...transformer\n\t\t});\n\t}\n\tallowErrorProps(...props) {\n\t\tthis.allowedErrorProps.push(...props);\n\t}\n};\nSuperJSON.defaultInstance = new SuperJSON();\nSuperJSON.serialize = SuperJSON.defaultInstance.serialize.bind(SuperJSON.defaultInstance);\nSuperJSON.deserialize = SuperJSON.defaultInstance.deserialize.bind(SuperJSON.defaultInstance);\nSuperJSON.stringify = SuperJSON.defaultInstance.stringify.bind(SuperJSON.defaultInstance);\nSuperJSON.parse = SuperJSON.defaultInstance.parse.bind(SuperJSON.defaultInstance);\nSuperJSON.registerClass = SuperJSON.defaultInstance.registerClass.bind(SuperJSON.defaultInstance);\nSuperJSON.registerSymbol = SuperJSON.defaultInstance.registerSymbol.bind(SuperJSON.defaultInstance);\nSuperJSON.registerCustom = SuperJSON.defaultInstance.registerCustom.bind(SuperJSON.defaultInstance);\nSuperJSON.allowErrorProps = SuperJSON.defaultInstance.allowErrorProps.bind(SuperJSON.defaultInstance);\nconst serialize = SuperJSON.serialize;\nconst deserialize = SuperJSON.deserialize;\nconst stringify$1 = SuperJSON.stringify;\nconst parse$1 = SuperJSON.parse;\nconst registerClass = SuperJSON.registerClass;\nconst registerCustom = SuperJSON.registerCustom;\nconst registerSymbol = SuperJSON.registerSymbol;\nconst allowErrorProps = SuperJSON.allowErrorProps;\n\n//#endregion\n//#region src/messaging/presets/broadcast-channel/context.ts\nconst __DEVTOOLS_KIT_BROADCAST_MESSAGING_EVENT_KEY = \"__devtools-kit-broadcast-messaging-event-key__\";\n\n//#endregion\n//#region src/messaging/presets/broadcast-channel/index.ts\nconst BROADCAST_CHANNEL_NAME = \"__devtools-kit:broadcast-channel__\";\nfunction createBroadcastChannel() {\n\tconst channel = new BroadcastChannel(BROADCAST_CHANNEL_NAME);\n\treturn {\n\t\tpost: (data) => {\n\t\t\tchannel.postMessage(SuperJSON.stringify({\n\t\t\t\tevent: __DEVTOOLS_KIT_BROADCAST_MESSAGING_EVENT_KEY,\n\t\t\t\tdata\n\t\t\t}));\n\t\t},\n\t\ton: (handler) => {\n\t\t\tchannel.onmessage = (event) => {\n\t\t\t\tconst parsed = SuperJSON.parse(event.data);\n\t\t\t\tif (parsed.event === __DEVTOOLS_KIT_BROADCAST_MESSAGING_EVENT_KEY) handler(parsed.data);\n\t\t\t};\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/messaging/presets/electron/context.ts\nconst __ELECTRON_CLIENT_CONTEXT__ = \"electron:client-context\";\nconst __ELECTRON_RPOXY_CONTEXT__ = \"electron:proxy-context\";\nconst __ELECTRON_SERVER_CONTEXT__ = \"electron:server-context\";\nconst __DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__ = {\n\tCLIENT_TO_PROXY: \"client->proxy\",\n\tPROXY_TO_CLIENT: \"proxy->client\",\n\tPROXY_TO_SERVER: \"proxy->server\",\n\tSERVER_TO_PROXY: \"server->proxy\"\n};\nfunction getElectronClientContext() {\n\treturn target[__ELECTRON_CLIENT_CONTEXT__];\n}\nfunction setElectronClientContext(context) {\n\ttarget[__ELECTRON_CLIENT_CONTEXT__] = context;\n}\nfunction getElectronProxyContext() {\n\treturn target[__ELECTRON_RPOXY_CONTEXT__];\n}\nfunction setElectronProxyContext(context) {\n\ttarget[__ELECTRON_RPOXY_CONTEXT__] = context;\n}\nfunction getElectronServerContext() {\n\treturn target[__ELECTRON_SERVER_CONTEXT__];\n}\nfunction setElectronServerContext(context) {\n\ttarget[__ELECTRON_SERVER_CONTEXT__] = context;\n}\n\n//#endregion\n//#region src/messaging/presets/electron/client.ts\nfunction createElectronClientChannel() {\n\tconst socket = getElectronClientContext();\n\treturn {\n\t\tpost: (data) => {\n\t\t\tsocket.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.CLIENT_TO_PROXY, SuperJSON.stringify(data));\n\t\t},\n\t\ton: (handler) => {\n\t\t\tsocket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_CLIENT, (e) => {\n\t\t\t\thandler(SuperJSON.parse(e));\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/messaging/presets/electron/proxy.ts\nfunction createElectronProxyChannel() {\n\tconst socket = getElectronProxyContext();\n\treturn {\n\t\tpost: (data) => {},\n\t\ton: (handler) => {\n\t\t\tsocket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY, (data) => {\n\t\t\t\tsocket.broadcast.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_CLIENT, data);\n\t\t\t});\n\t\t\tsocket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.CLIENT_TO_PROXY, (data) => {\n\t\t\t\tsocket.broadcast.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER, data);\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/messaging/presets/electron/server.ts\nfunction createElectronServerChannel() {\n\tconst socket = getElectronServerContext();\n\treturn {\n\t\tpost: (data) => {\n\t\t\tsocket.emit(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY, SuperJSON.stringify(data));\n\t\t},\n\t\ton: (handler) => {\n\t\t\tsocket.on(__DEVTOOLS_KIT_ELECTRON_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER, (data) => {\n\t\t\t\thandler(SuperJSON.parse(data));\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/messaging/presets/extension/context.ts\nconst __EXTENSION_CLIENT_CONTEXT__ = \"electron:client-context\";\nconst __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__ = {\n\tCLIENT_TO_PROXY: \"client->proxy\",\n\tPROXY_TO_CLIENT: \"proxy->client\",\n\tPROXY_TO_SERVER: \"proxy->server\",\n\tSERVER_TO_PROXY: \"server->proxy\"\n};\nfunction getExtensionClientContext() {\n\treturn target[__EXTENSION_CLIENT_CONTEXT__];\n}\nfunction setExtensionClientContext(context) {\n\ttarget[__EXTENSION_CLIENT_CONTEXT__] = context;\n}\n\n//#endregion\n//#region src/messaging/presets/extension/client.ts\nfunction createExtensionClientChannel() {\n\tlet disconnected = false;\n\tlet port = null;\n\tlet reconnectTimer = null;\n\tlet onMessageHandler = null;\n\tfunction connect() {\n\t\ttry {\n\t\t\tclearTimeout(reconnectTimer);\n\t\t\tport = chrome.runtime.connect({ name: `${chrome.devtools.inspectedWindow.tabId}` });\n\t\t\tsetExtensionClientContext(port);\n\t\t\tdisconnected = false;\n\t\t\tport?.onMessage.addListener(onMessageHandler);\n\t\t\tport.onDisconnect.addListener(() => {\n\t\t\t\tdisconnected = true;\n\t\t\t\tport?.onMessage.removeListener(onMessageHandler);\n\t\t\t\treconnectTimer = setTimeout(connect, 1e3);\n\t\t\t});\n\t\t} catch (e) {\n\t\t\tdisconnected = true;\n\t\t}\n\t}\n\tconnect();\n\treturn {\n\t\tpost: (data) => {\n\t\t\tif (disconnected) return;\n\t\t\tport?.postMessage(SuperJSON.stringify(data));\n\t\t},\n\t\ton: (handler) => {\n\t\t\tonMessageHandler = (data) => {\n\t\t\t\tif (disconnected) return;\n\t\t\t\thandler(SuperJSON.parse(data));\n\t\t\t};\n\t\t\tport?.onMessage.addListener(onMessageHandler);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/messaging/presets/extension/proxy.ts\nfunction createExtensionProxyChannel() {\n\tconst port = chrome.runtime.connect({ name: \"content-script\" });\n\tfunction sendMessageToUserApp(payload) {\n\t\twindow.postMessage({\n\t\t\tsource: __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER,\n\t\t\tpayload\n\t\t}, \"*\");\n\t}\n\tfunction sendMessageToDevToolsClient(e) {\n\t\tif (e.data && e.data.source === __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY) try {\n\t\t\tport.postMessage(e.data.payload);\n\t\t} catch (e$1) {}\n\t}\n\tport.onMessage.addListener(sendMessageToUserApp);\n\twindow.addEventListener(\"message\", sendMessageToDevToolsClient);\n\tport.onDisconnect.addListener(() => {\n\t\twindow.removeEventListener(\"message\", sendMessageToDevToolsClient);\n\t\tsendMessageToUserApp(SuperJSON.stringify({ event: \"shutdown\" }));\n\t});\n\tsendMessageToUserApp(SuperJSON.stringify({ event: \"init\" }));\n\treturn {\n\t\tpost: (data) => {},\n\t\ton: (handler) => {}\n\t};\n}\n\n//#endregion\n//#region src/messaging/presets/extension/server.ts\nfunction createExtensionServerChannel() {\n\treturn {\n\t\tpost: (data) => {\n\t\t\twindow.postMessage({\n\t\t\t\tsource: __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.SERVER_TO_PROXY,\n\t\t\t\tpayload: SuperJSON.stringify(data)\n\t\t\t}, \"*\");\n\t\t},\n\t\ton: (handler) => {\n\t\t\tconst listener = (event) => {\n\t\t\t\tif (event.data.source === __DEVTOOLS_KIT_EXTENSION_MESSAGING_EVENT_KEY__.PROXY_TO_SERVER && event.data.payload) handler(SuperJSON.parse(event.data.payload));\n\t\t\t};\n\t\t\twindow.addEventListener(\"message\", listener);\n\t\t\treturn () => {\n\t\t\t\twindow.removeEventListener(\"message\", listener);\n\t\t\t};\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/messaging/presets/iframe/context.ts\nconst __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY = \"__devtools-kit-iframe-messaging-event-key__\";\nconst __IFRAME_SERVER_CONTEXT__ = \"iframe:server-context\";\nfunction getIframeServerContext() {\n\treturn target[__IFRAME_SERVER_CONTEXT__];\n}\nfunction setIframeServerContext(context) {\n\ttarget[__IFRAME_SERVER_CONTEXT__] = context;\n}\n\n//#endregion\n//#region src/messaging/presets/iframe/client.ts\nfunction createIframeClientChannel() {\n\tif (!isBrowser) return {\n\t\tpost: (data) => {},\n\t\ton: (handler) => {}\n\t};\n\treturn {\n\t\tpost: (data) => window.parent.postMessage(SuperJSON.stringify({\n\t\t\tevent: __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY,\n\t\t\tdata\n\t\t}), \"*\"),\n\t\ton: (handler) => window.addEventListener(\"message\", (event) => {\n\t\t\ttry {\n\t\t\t\tconst parsed = SuperJSON.parse(event.data);\n\t\t\t\tif (event.source === window.parent && parsed.event === __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY) handler(parsed.data);\n\t\t\t} catch (e) {}\n\t\t})\n\t};\n}\n\n//#endregion\n//#region src/messaging/presets/iframe/server.ts\nfunction createIframeServerChannel() {\n\tif (!isBrowser) return {\n\t\tpost: (data) => {},\n\t\ton: (handler) => {}\n\t};\n\treturn {\n\t\tpost: (data) => {\n\t\t\tgetIframeServerContext()?.contentWindow?.postMessage(SuperJSON.stringify({\n\t\t\t\tevent: __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY,\n\t\t\t\tdata\n\t\t\t}), \"*\");\n\t\t},\n\t\ton: (handler) => {\n\t\t\twindow.addEventListener(\"message\", (event) => {\n\t\t\t\tconst iframe = getIframeServerContext();\n\t\t\t\ttry {\n\t\t\t\t\tconst parsed = SuperJSON.parse(event.data);\n\t\t\t\t\tif (event.source === iframe?.contentWindow && parsed.event === __DEVTOOLS_KIT_IFRAME_MESSAGING_EVENT_KEY) handler(parsed.data);\n\t\t\t\t} catch (e) {}\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/messaging/presets/vite/context.ts\nconst __DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY = \"__devtools-kit-vite-messaging-event-key__\";\nconst __VITE_CLIENT_CONTEXT__ = \"vite:client-context\";\nconst __VITE_SERVER_CONTEXT__ = \"vite:server-context\";\nfunction getViteClientContext() {\n\treturn target[__VITE_CLIENT_CONTEXT__];\n}\nfunction setViteClientContext(context) {\n\ttarget[__VITE_CLIENT_CONTEXT__] = context;\n}\nfunction getViteServerContext() {\n\treturn target[__VITE_SERVER_CONTEXT__];\n}\nfunction setViteServerContext(context) {\n\ttarget[__VITE_SERVER_CONTEXT__] = context;\n}\n\n//#endregion\n//#region src/messaging/presets/vite/client.ts\nfunction createViteClientChannel() {\n\tconst client = getViteClientContext();\n\treturn {\n\t\tpost: (data) => {\n\t\t\tclient?.send(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, SuperJSON.stringify(data));\n\t\t},\n\t\ton: (handler) => {\n\t\t\tclient?.on(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, (event) => {\n\t\t\t\thandler(SuperJSON.parse(event));\n\t\t\t});\n\t\t}\n\t};\n}\n\n//#endregion\n//#region src/messaging/presets/vite/server.ts\nfunction createViteServerChannel() {\n\tconst viteServer = getViteServerContext();\n\tconst ws = viteServer.hot ?? viteServer.ws;\n\treturn {\n\t\tpost: (data) => ws?.send(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, SuperJSON.stringify(data)),\n\t\ton: (handler) => ws?.on(__DEVTOOLS_KIT_VITE_MESSAGING_EVENT_KEY, (event) => {\n\t\t\thandler(SuperJSON.parse(event));\n\t\t})\n\t};\n}\n\n//#endregion\n//#region src/messaging/index.ts\ntarget.__VUE_DEVTOOLS_KIT_MESSAGE_CHANNELS__ ??= [];\ntarget.__VUE_DEVTOOLS_KIT_RPC_CLIENT__ ??= null;\ntarget.__VUE_DEVTOOLS_KIT_RPC_SERVER__ ??= null;\ntarget.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__ ??= null;\ntarget.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__ ??= null;\ntarget.__VUE_DEVTOOLS_KIT_BROADCAST_RPC_SERVER__ ??= null;\nfunction setRpcClientToGlobal(rpc) {\n\ttarget.__VUE_DEVTOOLS_KIT_RPC_CLIENT__ = rpc;\n}\nfunction setRpcServerToGlobal(rpc) {\n\ttarget.__VUE_DEVTOOLS_KIT_RPC_SERVER__ = rpc;\n}\nfunction getRpcClient() {\n\treturn target.__VUE_DEVTOOLS_KIT_RPC_CLIENT__;\n}\nfunction getRpcServer() {\n\treturn target.__VUE_DEVTOOLS_KIT_RPC_SERVER__;\n}\nfunction setViteRpcClientToGlobal(rpc) {\n\ttarget.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__ = rpc;\n}\nfunction setViteRpcServerToGlobal(rpc) {\n\ttarget.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__ = rpc;\n}\nfunction getViteRpcClient() {\n\treturn target.__VUE_DEVTOOLS_KIT_VITE_RPC_CLIENT__;\n}\nfunction getViteRpcServer() {\n\treturn target.__VUE_DEVTOOLS_KIT_VITE_RPC_SERVER__;\n}\nfunction getChannel(preset, host = \"client\") {\n\tconst channel = {\n\t\tiframe: {\n\t\t\tclient: createIframeClientChannel,\n\t\t\tserver: createIframeServerChannel\n\t\t}[host],\n\t\telectron: {\n\t\t\tclient: createElectronClientChannel,\n\t\t\tproxy: createElectronProxyChannel,\n\t\t\tserver: createElectronServerChannel\n\t\t}[host],\n\t\tvite: {\n\t\t\tclient: createViteClientChannel,\n\t\t\tserver: createViteServerChannel\n\t\t}[host],\n\t\tbroadcast: {\n\t\t\tclient: createBroadcastChannel,\n\t\t\tserver: createBroadcastChannel\n\t\t}[host],\n\t\textension: {\n\t\t\tclient: createExtensionClientChannel,\n\t\t\tproxy: createExtensionProxyChannel,\n\t\t\tserver: createExtensionServerChannel\n\t\t}[host]\n\t}[preset];\n\treturn channel();\n}\nfunction createRpcClient(functions, options = {}) {\n\tconst { channel: _channel, options: _options, preset } = options;\n\tconst channel = preset ? getChannel(preset) : _channel;\n\tconst rpc = createBirpc(functions, {\n\t\t..._options,\n\t\t...channel,\n\t\ttimeout: -1\n\t});\n\tif (preset === \"vite\") {\n\t\tsetViteRpcClientToGlobal(rpc);\n\t\treturn;\n\t}\n\tsetRpcClientToGlobal(rpc);\n\treturn rpc;\n}\nfunction createRpcServer(functions, options = {}) {\n\tconst { channel: _channel, options: _options, preset } = options;\n\tconst channel = preset ? getChannel(preset, \"server\") : _channel;\n\tconst rpcServer = getRpcServer();\n\tif (!rpcServer) {\n\t\tconst group = createBirpcGroup(functions, [channel], {\n\t\t\t..._options,\n\t\t\ttimeout: -1\n\t\t});\n\t\tif (preset === \"vite\") {\n\t\t\tsetViteRpcServerToGlobal(group);\n\t\t\treturn;\n\t\t}\n\t\tsetRpcServerToGlobal(group);\n\t} else rpcServer.updateChannels((channels) => {\n\t\tchannels.push(channel);\n\t});\n}\nfunction createRpcProxy(options = {}) {\n\tconst { channel: _channel, options: _options, preset } = options;\n\tconst channel = preset ? getChannel(preset, \"proxy\") : _channel;\n\treturn createBirpc({}, {\n\t\t..._options,\n\t\t...channel,\n\t\ttimeout: -1\n\t});\n}\n\n//#endregion\n//#region src/core/component/state/custom.ts\nfunction getFunctionDetails(func) {\n\tlet string = \"\";\n\tlet matches = null;\n\ttry {\n\t\tstring = Function.prototype.toString.call(func);\n\t\tmatches = String.prototype.match.call(string, /\\([\\s\\S]*?\\)/);\n\t} catch (e) {}\n\tconst match = matches && matches[0];\n\tconst args = typeof match === \"string\" ? match : \"(?)\";\n\treturn { _custom: {\n\t\ttype: \"function\",\n\t\tdisplayText: `function ${escape(typeof func.name === \"string\" ? func.name : \"\")}${args}`,\n\t\ttooltipText: string.trim() ? `
${string}
` : null\n\t} };\n}\nfunction getBigIntDetails(val) {\n\tconst stringifiedBigInt = BigInt.prototype.toString.call(val);\n\treturn { _custom: {\n\t\ttype: \"bigint\",\n\t\tdisplayText: `BigInt(${stringifiedBigInt})`,\n\t\tvalue: stringifiedBigInt\n\t} };\n}\nfunction getDateDetails(val) {\n\tconst date = new Date(val.getTime());\n\tdate.setMinutes(date.getMinutes() - date.getTimezoneOffset());\n\treturn { _custom: {\n\t\ttype: \"date\",\n\t\tdisplayText: Date.prototype.toString.call(val),\n\t\tvalue: date.toISOString().slice(0, -1)\n\t} };\n}\nfunction getMapDetails(val) {\n\treturn { _custom: {\n\t\ttype: \"map\",\n\t\tdisplayText: \"Map\",\n\t\tvalue: Object.fromEntries(val),\n\t\treadOnly: true,\n\t\tfields: { abstract: true }\n\t} };\n}\nfunction getSetDetails(val) {\n\tconst list = Array.from(val);\n\treturn { _custom: {\n\t\ttype: \"set\",\n\t\tdisplayText: `Set[${list.length}]`,\n\t\tvalue: list,\n\t\treadOnly: true\n\t} };\n}\nfunction getCaughtGetters(store) {\n\tconst getters = {};\n\tconst origGetters = store.getters || {};\n\tconst keys = Object.keys(origGetters);\n\tfor (let i = 0; i < keys.length; i++) {\n\t\tconst key = keys[i];\n\t\tObject.defineProperty(getters, key, {\n\t\t\tenumerable: true,\n\t\t\tget: () => {\n\t\t\t\ttry {\n\t\t\t\t\treturn origGetters[key];\n\t\t\t\t} catch (e) {\n\t\t\t\t\treturn e;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\treturn getters;\n}\nfunction reduceStateList(list) {\n\tif (!list.length) return void 0;\n\treturn list.reduce((map, item) => {\n\t\tconst key = item.type || \"data\";\n\t\tconst obj = map[key] = map[key] || {};\n\t\tobj[item.key] = item.value;\n\t\treturn map;\n\t}, {});\n}\nfunction namedNodeMapToObject(map) {\n\tconst result = {};\n\tconst l = map.length;\n\tfor (let i = 0; i < l; i++) {\n\t\tconst node = map.item(i);\n\t\tresult[node.name] = node.value;\n\t}\n\treturn result;\n}\nfunction getStoreDetails(store) {\n\treturn { _custom: {\n\t\ttype: \"store\",\n\t\tdisplayText: \"Store\",\n\t\tvalue: {\n\t\t\tstate: store.state,\n\t\t\tgetters: getCaughtGetters(store)\n\t\t},\n\t\tfields: { abstract: true }\n\t} };\n}\nfunction getRouterDetails(router) {\n\treturn { _custom: {\n\t\ttype: \"router\",\n\t\tdisplayText: \"VueRouter\",\n\t\tvalue: {\n\t\t\toptions: router.options,\n\t\t\tcurrentRoute: router.currentRoute\n\t\t},\n\t\tfields: { abstract: true }\n\t} };\n}\nfunction getInstanceDetails(instance) {\n\tif (instance._) instance = instance._;\n\tconst state = processInstanceState(instance);\n\treturn { _custom: {\n\t\ttype: \"component\",\n\t\tid: instance.__VUE_DEVTOOLS_NEXT_UID__,\n\t\tdisplayText: getInstanceName(instance),\n\t\ttooltipText: \"Component instance\",\n\t\tvalue: reduceStateList(state),\n\t\tfields: { abstract: true }\n\t} };\n}\nfunction getComponentDefinitionDetails(definition) {\n\tlet display = getComponentName(definition);\n\tif (display) {\n\t\tif (definition.name && definition.__file) display += ` (${definition.__file})`;\n\t} else display = \"Unknown Component\";\n\treturn { _custom: {\n\t\ttype: \"component-definition\",\n\t\tdisplayText: display,\n\t\ttooltipText: \"Component definition\",\n\t\t...definition.__file ? { file: definition.__file } : {}\n\t} };\n}\nfunction getHTMLElementDetails(value) {\n\ttry {\n\t\treturn { _custom: {\n\t\t\ttype: \"HTMLElement\",\n\t\t\tdisplayText: `<${value.tagName.toLowerCase()}>`,\n\t\t\tvalue: namedNodeMapToObject(value.attributes)\n\t\t} };\n\t} catch (e) {\n\t\treturn { _custom: {\n\t\t\ttype: \"HTMLElement\",\n\t\t\tdisplayText: `${String(value)}`\n\t\t} };\n\t}\n}\n/**\n* - ObjectRefImpl, toRef({ foo: 'foo' }, 'foo'), `_value` is the actual value, (since 3.5.0)\n* - GetterRefImpl, toRef(() => state.foo), `_value` is the actual value, (since 3.5.0)\n* - RefImpl, ref('foo') / computed(() => 'foo'), `_value` is the actual value\n*/\nfunction tryGetRefValue(ref) {\n\tif (ensurePropertyExists(ref, \"_value\", true)) return ref._value;\n\tif (ensurePropertyExists(ref, \"value\", true)) return ref.value;\n}\nfunction getObjectDetails(object) {\n\tconst info = getSetupStateType(object);\n\tif (info.ref || info.computed || info.reactive) {\n\t\tconst stateTypeName = info.computed ? \"Computed\" : info.ref ? \"Ref\" : info.reactive ? \"Reactive\" : null;\n\t\tconst value = toRaw(info.reactive ? object : tryGetRefValue(object));\n\t\tconst raw = ensurePropertyExists(object, \"effect\") ? object.effect?.raw?.toString() || object.effect?.fn?.toString() : null;\n\t\treturn { _custom: {\n\t\t\ttype: stateTypeName?.toLowerCase(),\n\t\t\tstateTypeName,\n\t\t\tvalue,\n\t\t\t...raw ? { tooltipText: `${raw}` } : {}\n\t\t} };\n\t}\n\tif (ensurePropertyExists(object, \"__asyncLoader\") && typeof object.__asyncLoader === \"function\") return { _custom: {\n\t\ttype: \"component-definition\",\n\t\tdisplay: \"Async component definition\"\n\t} };\n}\n\n//#endregion\n//#region src/core/component/state/replacer.ts\nfunction stringifyReplacer(key, _value, depth, seenInstance) {\n\tif (key === \"compilerOptions\") return;\n\tconst val = this[key];\n\tconst type = typeof val;\n\tif (Array.isArray(val)) {\n\t\tconst l = val.length;\n\t\tif (l > MAX_ARRAY_SIZE) return {\n\t\t\t_isArray: true,\n\t\t\tlength: l,\n\t\t\titems: val.slice(0, MAX_ARRAY_SIZE)\n\t\t};\n\t\treturn val;\n\t} else if (typeof val === \"string\") if (val.length > MAX_STRING_SIZE) return `${val.substring(0, MAX_STRING_SIZE)}... (${val.length} total length)`;\n\telse return val;\n\telse if (type === \"undefined\") return UNDEFINED;\n\telse if (val === Number.POSITIVE_INFINITY) return INFINITY;\n\telse if (val === Number.NEGATIVE_INFINITY) return NEGATIVE_INFINITY;\n\telse if (typeof val === \"function\") return getFunctionDetails(val);\n\telse if (type === \"symbol\") return `[native Symbol ${Symbol.prototype.toString.call(val)}]`;\n\telse if (typeof val === \"bigint\") return getBigIntDetails(val);\n\telse if (val !== null && typeof val === \"object\") {\n\t\tconst proto = Object.prototype.toString.call(val);\n\t\tif (proto === \"[object Map]\") return getMapDetails(val);\n\t\telse if (proto === \"[object Set]\") return getSetDetails(val);\n\t\telse if (proto === \"[object RegExp]\") return `[native RegExp ${RegExp.prototype.toString.call(val)}]`;\n\t\telse if (proto === \"[object Date]\") return getDateDetails(val);\n\t\telse if (proto === \"[object Error]\") return `[native Error ${val.message}<>${val.stack}]`;\n\t\telse if (ensurePropertyExists(val, \"state\", true) && ensurePropertyExists(val, \"_vm\", true)) return getStoreDetails(val);\n\t\telse if (val.constructor && val.constructor.name === \"VueRouter\") return getRouterDetails(val);\n\t\telse if (isVueInstance(val)) {\n\t\t\tconst componentVal = getInstanceDetails(val);\n\t\t\tconst parentInstanceDepth = seenInstance?.get(val);\n\t\t\tif (parentInstanceDepth && parentInstanceDepth < depth) return `[[CircularRef]] <${componentVal._custom.displayText}>`;\n\t\t\tseenInstance?.set(val, depth);\n\t\t\treturn componentVal;\n\t\t} else if (ensurePropertyExists(val, \"render\", true) && typeof val.render === \"function\") return getComponentDefinitionDetails(val);\n\t\telse if (val.constructor && val.constructor.name === \"VNode\") return `[native VNode <${val.tag}>]`;\n\t\telse if (typeof HTMLElement !== \"undefined\" && val instanceof HTMLElement) return getHTMLElementDetails(val);\n\t\telse if (val.constructor?.name === \"Store\" && \"_wrappedGetters\" in val) return \"[object Store]\";\n\t\telse if (ensurePropertyExists(val, \"currentRoute\", true)) return \"[object Router]\";\n\t\tconst customDetails = getObjectDetails(val);\n\t\tif (customDetails != null) return customDetails;\n\t} else if (Number.isNaN(val)) return NAN;\n\treturn sanitize(val);\n}\n\n//#endregion\n//#region src/shared/transfer.ts\nconst MAX_SERIALIZED_SIZE = 2 * 1024 * 1024;\nfunction isObject(_data, proto) {\n\treturn proto === \"[object Object]\";\n}\nfunction isArray(_data, proto) {\n\treturn proto === \"[object Array]\";\n}\nfunction isVueReactiveLinkNode(node) {\n\tconst constructorName = node?.constructor?.name;\n\treturn constructorName === \"Dep\" && \"activeLink\" in node || constructorName === \"Link\" && \"dep\" in node;\n}\n/**\n* This function is used to serialize object with handling circular references.\n*\n* ```ts\n* const obj = { a: 1, b: { c: 2 }, d: obj }\n* const result = stringifyCircularAutoChunks(obj) // call `encode` inside\n* console.log(result) // [{\"a\":1,\"b\":2,\"d\":0},1,{\"c\":4},2]\n* ```\n*\n* Each object is stored in a list and the index is used to reference the object.\n* With seen map, we can check if the object is already stored in the list to avoid circular references.\n*\n* Note: here we have a special case for Vue instance.\n* We check if a vue instance includes itself in its properties and skip it\n* by using `seenVueInstance` and `depth` to avoid infinite loop.\n*/\nfunction encode(data, replacer, list, seen, depth = 0, seenVueInstance = /* @__PURE__ */ new Map()) {\n\tlet stored;\n\tlet key;\n\tlet value;\n\tlet i;\n\tlet l;\n\tconst seenIndex = seen.get(data);\n\tif (seenIndex != null) return seenIndex;\n\tconst index = list.length;\n\tconst proto = Object.prototype.toString.call(data);\n\tif (isObject(data, proto)) {\n\t\tif (isVueReactiveLinkNode(data)) return index;\n\t\tstored = {};\n\t\tseen.set(data, index);\n\t\tlist.push(stored);\n\t\tconst keys = Object.keys(data);\n\t\tfor (i = 0, l = keys.length; i < l; i++) {\n\t\t\tkey = keys[i];\n\t\t\tif (key === \"compilerOptions\") return index;\n\t\t\tvalue = data[key];\n\t\t\tconst isVm = value != null && isObject(value, Object.prototype.toString.call(data)) && isVueInstance(value);\n\t\t\ttry {\n\t\t\t\tif (replacer) value = replacer.call(data, key, value, depth, seenVueInstance);\n\t\t\t} catch (e) {\n\t\t\t\tvalue = e;\n\t\t\t}\n\t\t\tstored[key] = encode(value, replacer, list, seen, depth + 1, seenVueInstance);\n\t\t\tif (isVm) seenVueInstance.delete(value);\n\t\t}\n\t} else if (isArray(data, proto)) {\n\t\tstored = [];\n\t\tseen.set(data, index);\n\t\tlist.push(stored);\n\t\tfor (i = 0, l = data.length; i < l; i++) {\n\t\t\ttry {\n\t\t\t\tvalue = data[i];\n\t\t\t\tif (replacer) value = replacer.call(data, i, value, depth, seenVueInstance);\n\t\t\t} catch (e) {\n\t\t\t\tvalue = e;\n\t\t\t}\n\t\t\tstored[i] = encode(value, replacer, list, seen, depth + 1, seenVueInstance);\n\t\t}\n\t} else list.push(data);\n\treturn index;\n}\nfunction decode(list, reviver$1 = null) {\n\tlet i = list.length;\n\tlet j, k, data, key, value, proto;\n\twhile (i--) {\n\t\tdata = list[i];\n\t\tproto = Object.prototype.toString.call(data);\n\t\tif (proto === \"[object Object]\") {\n\t\t\tconst keys = Object.keys(data);\n\t\t\tfor (j = 0, k = keys.length; j < k; j++) {\n\t\t\t\tkey = keys[j];\n\t\t\t\tvalue = list[data[key]];\n\t\t\t\tif (reviver$1) value = reviver$1.call(data, key, value);\n\t\t\t\tdata[key] = value;\n\t\t\t}\n\t\t} else if (proto === \"[object Array]\") for (j = 0, k = data.length; j < k; j++) {\n\t\t\tvalue = list[data[j]];\n\t\t\tif (reviver$1) value = reviver$1.call(data, j, value);\n\t\t\tdata[j] = value;\n\t\t}\n\t}\n}\nfunction stringifyCircularAutoChunks(data, replacer = null, space = null) {\n\tlet result;\n\ttry {\n\t\tresult = arguments.length === 1 ? JSON.stringify(data) : JSON.stringify(data, (k, v) => replacer?.(k, v)?.call(this), space);\n\t} catch (e) {\n\t\tresult = stringifyStrictCircularAutoChunks(data, replacer, space);\n\t}\n\tif (result.length > MAX_SERIALIZED_SIZE) {\n\t\tconst chunkCount = Math.ceil(result.length / MAX_SERIALIZED_SIZE);\n\t\tconst chunks = [];\n\t\tfor (let i = 0; i < chunkCount; i++) chunks.push(result.slice(i * MAX_SERIALIZED_SIZE, (i + 1) * MAX_SERIALIZED_SIZE));\n\t\treturn chunks;\n\t}\n\treturn result;\n}\nfunction stringifyStrictCircularAutoChunks(data, replacer = null, space = null) {\n\tconst list = [];\n\tencode(data, replacer, list, /* @__PURE__ */ new Map());\n\treturn space ? ` ${JSON.stringify(list, null, space)}` : ` ${JSON.stringify(list)}`;\n}\nfunction parseCircularAutoChunks(data, reviver$1 = null) {\n\tif (Array.isArray(data)) data = data.join(\"\");\n\tif (!/^\\s/.test(data)) return arguments.length === 1 ? JSON.parse(data) : JSON.parse(data, reviver$1);\n\telse {\n\t\tconst list = JSON.parse(data);\n\t\tdecode(list, reviver$1);\n\t\treturn list[0];\n\t}\n}\n\n//#endregion\n//#region src/shared/util.ts\nfunction stringify(data) {\n\treturn stringifyCircularAutoChunks(data, stringifyReplacer);\n}\nfunction parse(data, revive$1 = false) {\n\tif (data == void 0) return {};\n\treturn revive$1 ? parseCircularAutoChunks(data, reviver) : parseCircularAutoChunks(data);\n}\n\n//#endregion\n//#region src/index.ts\nconst devtools = {\n\thook,\n\tinit: () => {\n\t\tinitDevTools();\n\t},\n\tget ctx() {\n\t\treturn devtoolsContext;\n\t},\n\tget api() {\n\t\treturn devtoolsContext.api;\n\t}\n};\n\n//#endregion\nexport { DevToolsContextHookKeys, DevToolsMessagingHookKeys, DevToolsV6PluginAPIHookKeys, INFINITY, NAN, NEGATIVE_INFINITY, ROUTER_INFO_KEY, ROUTER_KEY, UNDEFINED, activeAppRecord, addCustomCommand, addCustomTab, addDevToolsAppRecord, addDevToolsPluginToBuffer, addInspector, callConnectedUpdatedHook, callDevToolsPluginSetupFn, callInspectorUpdatedHook, callStateUpdatedHook, createComponentsDevToolsPlugin, createDevToolsApi, createDevToolsCtxHooks, createRpcClient, createRpcProxy, createRpcServer, devtools, devtoolsAppRecords, devtoolsContext, devtoolsInspector, devtoolsPluginBuffer, devtoolsRouter, devtoolsRouterInfo, devtoolsState, escape, formatInspectorStateValue, getActiveInspectors, getDevToolsEnv, getExtensionClientContext, getInspector, getInspectorActions, getInspectorInfo, getInspectorNodeActions, getInspectorStateValueType, getRaw, getRpcClient, getRpcServer, getViteRpcClient, getViteRpcServer, initDevTools, isPlainObject, onDevToolsClientConnected, onDevToolsConnected, parse, registerDevToolsPlugin, removeCustomCommand, removeDevToolsAppRecord, removeRegisteredPluginApp, resetDevToolsState, setActiveAppRecord, setActiveAppRecordId, setDevToolsEnv, setElectronClientContext, setElectronProxyContext, setElectronServerContext, setExtensionClientContext, setIframeServerContext, setOpenInEditorBaseUrl, setRpcServerToGlobal, setViteClientContext, setViteRpcClientToGlobal, setViteRpcServerToGlobal, setViteServerContext, setupDevToolsPlugin, stringify, toEdit, toSubmit, toggleClientConnected, toggleComponentInspectorEnabled, toggleHighPerfMode, updateDevToolsClientDetected, updateDevToolsState, updateTimelineLayersState };"], + "mappings": ";AACA,IAAI,WAAW,OAAO;AACtB,IAAI,YAAY,OAAO;AACvB,IAAI,mBAAmB,OAAO;AAC9B,IAAI,oBAAoB,OAAO;AAC/B,IAAI,eAAe,OAAO;AAC1B,IAAI,eAAe,OAAO,UAAU;AACpC,IAAI,aAAa,CAAC,IAAI,QAAQ,WAAW;AACxC,SAAO,QAAQ,GAAG,GAAG,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,GAAG,GAAG,IAAI;AAC5F;AACA,IAAI,cAAc,CAAC,IAAI,MAAM,QAAQ,SAAS;AAC7C,MAAI,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,WAAY,UAAS,OAAO,kBAAkB,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,IAAI,GAAG,KAAK;AACrJ,UAAM,KAAK,CAAC;AACZ,QAAI,CAAC,aAAa,KAAK,IAAI,GAAG,KAAK,QAAQ,OAAQ,WAAU,IAAI,KAAK;AAAA,MACrE,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,MAAM,GAAG;AAAA,MACpC,YAAY,EAAE,OAAO,iBAAiB,MAAM,GAAG,MAAM,KAAK;AAAA,IAC3D,CAAC;AAAA,EACF;AACA,SAAO;AACR;AACA,IAAI,UAAU,CAAC,KAAK,YAAY,cAAc,WAAW,OAAO,OAAO,SAAS,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,cAAc,CAAC,OAAO,CAAC,IAAI,aAAa,UAAU,UAAU,WAAW;AAAA,EAC3L,OAAO;AAAA,EACP,YAAY;AACb,CAAC,IAAI,UAAU,GAAG;AAWlB,IAAM,YAAY,OAAO,cAAc;AACvC,IAAM,SAAS,OAAO,WAAW,cAAc,SAAS,OAAO,eAAe,cAAc,aAAa,OAAO,WAAW,cAAc,SAAS,CAAC;AACnJ,IAAM,kBAAkB,OAAO,OAAO,WAAW,eAAe,CAAC,CAAC,OAAO,OAAO;AAChF,IAAM,aAAa,aAAa,OAAO,SAAS,OAAO;AACvD,IAAM,eAAe,OAAO,cAAc,eAAe,UAAU,WAAW,YAAY,EAAE,SAAS,UAAU;AAC/G,IAAM,YAAY,OAAO,WAAW,eAAe,CAAC,CAAC,OAAO;AAK5D,IAAI,eAA+B,WAAW,EAAE,mEAAmE,CAAC,SAAS,WAAW;AACvI,SAAO,UAAU;AACjB,WAAS,WAAW,KAAK;AACxB,QAAI,eAAe,OAAQ,QAAO,OAAO,KAAK,GAAG;AACjD,WAAO,IAAI,IAAI,YAAY,IAAI,OAAO,MAAM,GAAG,IAAI,YAAY,IAAI,MAAM;AAAA,EAC1E;AACA,WAAS,OAAO,MAAM;AACrB,WAAO,QAAQ,CAAC;AAChB,QAAI,KAAK,QAAS,QAAO,YAAY,IAAI;AACzC,UAAM,sBAAsC,oBAAI,IAAI;AACpD,wBAAoB,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;AAChD,wBAAoB,IAAI,KAAK,CAAC,GAAG,OAAO,IAAI,IAAI,WAAW,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9E,wBAAoB,IAAI,KAAK,CAAC,GAAG,OAAO,IAAI,IAAI,WAAW,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9E,QAAI,KAAK,oBAAqB,YAAW,aAAa,KAAK,oBAAqB,qBAAoB,IAAI,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AAClI,QAAI,UAAU;AACd,WAAO,KAAK,QAAQ,aAAa;AACjC,aAAS,WAAW,GAAG,IAAI;AAC1B,YAAM,OAAO,OAAO,KAAK,CAAC;AAC1B,YAAM,KAAK,IAAI,MAAM,KAAK,MAAM;AAChC,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACrC,cAAM,IAAI,KAAK,CAAC;AAChB,cAAM,MAAM,EAAE,CAAC;AACf,YAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,IAAG,CAAC,IAAI;AAAA,iBAC5C,IAAI,gBAAgB,WAAW,UAAU,oBAAoB,IAAI,IAAI,WAAW,GAAI,IAAG,CAAC,IAAI,QAAQ,KAAK,EAAE;AAAA,iBAC3G,YAAY,OAAO,GAAG,EAAG,IAAG,CAAC,IAAI,WAAW,GAAG;AAAA,YACnD,IAAG,CAAC,IAAI,GAAG,GAAG;AAAA,MACpB;AACA,aAAO;AAAA,IACR;AACA,aAAS,MAAM,GAAG;AACjB,UAAI,OAAO,MAAM,YAAY,MAAM,KAAM,QAAO;AAChD,UAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,WAAW,GAAG,KAAK;AAChD,UAAI,EAAE,gBAAgB,WAAW,UAAU,oBAAoB,IAAI,EAAE,WAAW,GAAI,QAAO,QAAQ,GAAG,KAAK;AAC3G,YAAM,KAAK,CAAC;AACZ,iBAAW,KAAK,GAAG;AAClB,YAAI,OAAO,eAAe,KAAK,GAAG,CAAC,MAAM,MAAO;AAChD,cAAM,MAAM,EAAE,CAAC;AACf,YAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,IAAG,CAAC,IAAI;AAAA,iBAC5C,IAAI,gBAAgB,WAAW,UAAU,oBAAoB,IAAI,IAAI,WAAW,GAAI,IAAG,CAAC,IAAI,QAAQ,KAAK,KAAK;AAAA,iBAC9G,YAAY,OAAO,GAAG,EAAG,IAAG,CAAC,IAAI,WAAW,GAAG;AAAA,YACnD,IAAG,CAAC,IAAI,MAAM,GAAG;AAAA,MACvB;AACA,aAAO;AAAA,IACR;AACA,aAAS,WAAW,GAAG;AACtB,UAAI,OAAO,MAAM,YAAY,MAAM,KAAM,QAAO;AAChD,UAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,WAAW,GAAG,UAAU;AACrD,UAAI,EAAE,gBAAgB,WAAW,UAAU,oBAAoB,IAAI,EAAE,WAAW,GAAI,QAAO,QAAQ,GAAG,UAAU;AAChH,YAAM,KAAK,CAAC;AACZ,iBAAW,KAAK,GAAG;AAClB,cAAM,MAAM,EAAE,CAAC;AACf,YAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,IAAG,CAAC,IAAI;AAAA,iBAC5C,IAAI,gBAAgB,WAAW,UAAU,oBAAoB,IAAI,IAAI,WAAW,GAAI,IAAG,CAAC,IAAI,QAAQ,KAAK,UAAU;AAAA,iBACnH,YAAY,OAAO,GAAG,EAAG,IAAG,CAAC,IAAI,WAAW,GAAG;AAAA,YACnD,IAAG,CAAC,IAAI,WAAW,GAAG;AAAA,MAC5B;AACA,aAAO;AAAA,IACR;AAAA,EACD;AACA,WAAS,YAAY,MAAM;AAC1B,UAAM,OAAO,CAAC;AACd,UAAM,UAAU,CAAC;AACjB,UAAM,sBAAsC,oBAAI,IAAI;AACpD,wBAAoB,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;AAChD,wBAAoB,IAAI,KAAK,CAAC,GAAG,OAAO,IAAI,IAAI,WAAW,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9E,wBAAoB,IAAI,KAAK,CAAC,GAAG,OAAO,IAAI,IAAI,WAAW,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AAC9E,QAAI,KAAK,oBAAqB,YAAW,aAAa,KAAK,oBAAqB,qBAAoB,IAAI,UAAU,CAAC,GAAG,UAAU,CAAC,CAAC;AAClI,QAAI,UAAU;AACd,WAAO,KAAK,QAAQ,aAAa;AACjC,aAAS,WAAW,GAAG,IAAI;AAC1B,YAAM,OAAO,OAAO,KAAK,CAAC;AAC1B,YAAM,KAAK,IAAI,MAAM,KAAK,MAAM;AAChC,eAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;AACrC,cAAM,IAAI,KAAK,CAAC;AAChB,cAAM,MAAM,EAAE,CAAC;AACf,YAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,IAAG,CAAC,IAAI;AAAA,iBAC5C,IAAI,gBAAgB,WAAW,UAAU,oBAAoB,IAAI,IAAI,WAAW,GAAI,IAAG,CAAC,IAAI,QAAQ,KAAK,EAAE;AAAA,iBAC3G,YAAY,OAAO,GAAG,EAAG,IAAG,CAAC,IAAI,WAAW,GAAG;AAAA,aACnD;AACJ,gBAAM,QAAQ,KAAK,QAAQ,GAAG;AAC9B,cAAI,UAAU,GAAI,IAAG,CAAC,IAAI,QAAQ,KAAK;AAAA,cAClC,IAAG,CAAC,IAAI,GAAG,GAAG;AAAA,QACpB;AAAA,MACD;AACA,aAAO;AAAA,IACR;AACA,aAAS,MAAM,GAAG;AACjB,UAAI,OAAO,MAAM,YAAY,MAAM,KAAM,QAAO;AAChD,UAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,WAAW,GAAG,KAAK;AAChD,UAAI,EAAE,gBAAgB,WAAW,UAAU,oBAAoB,IAAI,EAAE,WAAW,GAAI,QAAO,QAAQ,GAAG,KAAK;AAC3G,YAAM,KAAK,CAAC;AACZ,WAAK,KAAK,CAAC;AACX,cAAQ,KAAK,EAAE;AACf,iBAAW,KAAK,GAAG;AAClB,YAAI,OAAO,eAAe,KAAK,GAAG,CAAC,MAAM,MAAO;AAChD,cAAM,MAAM,EAAE,CAAC;AACf,YAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,IAAG,CAAC,IAAI;AAAA,iBAC5C,IAAI,gBAAgB,WAAW,UAAU,oBAAoB,IAAI,IAAI,WAAW,GAAI,IAAG,CAAC,IAAI,QAAQ,KAAK,KAAK;AAAA,iBAC9G,YAAY,OAAO,GAAG,EAAG,IAAG,CAAC,IAAI,WAAW,GAAG;AAAA,aACnD;AACJ,gBAAM,IAAI,KAAK,QAAQ,GAAG;AAC1B,cAAI,MAAM,GAAI,IAAG,CAAC,IAAI,QAAQ,CAAC;AAAA,cAC1B,IAAG,CAAC,IAAI,MAAM,GAAG;AAAA,QACvB;AAAA,MACD;AACA,WAAK,IAAI;AACT,cAAQ,IAAI;AACZ,aAAO;AAAA,IACR;AACA,aAAS,WAAW,GAAG;AACtB,UAAI,OAAO,MAAM,YAAY,MAAM,KAAM,QAAO;AAChD,UAAI,MAAM,QAAQ,CAAC,EAAG,QAAO,WAAW,GAAG,UAAU;AACrD,UAAI,EAAE,gBAAgB,WAAW,UAAU,oBAAoB,IAAI,EAAE,WAAW,GAAI,QAAO,QAAQ,GAAG,UAAU;AAChH,YAAM,KAAK,CAAC;AACZ,WAAK,KAAK,CAAC;AACX,cAAQ,KAAK,EAAE;AACf,iBAAW,KAAK,GAAG;AAClB,cAAM,MAAM,EAAE,CAAC;AACf,YAAI,OAAO,QAAQ,YAAY,QAAQ,KAAM,IAAG,CAAC,IAAI;AAAA,iBAC5C,IAAI,gBAAgB,WAAW,UAAU,oBAAoB,IAAI,IAAI,WAAW,GAAI,IAAG,CAAC,IAAI,QAAQ,KAAK,UAAU;AAAA,iBACnH,YAAY,OAAO,GAAG,EAAG,IAAG,CAAC,IAAI,WAAW,GAAG;AAAA,aACnD;AACJ,gBAAM,IAAI,KAAK,QAAQ,GAAG;AAC1B,cAAI,MAAM,GAAI,IAAG,CAAC,IAAI,QAAQ,CAAC;AAAA,cAC1B,IAAG,CAAC,IAAI,WAAW,GAAG;AAAA,QAC5B;AAAA,MACD;AACA,WAAK,IAAI;AACT,cAAQ,IAAI;AACZ,aAAO;AAAA,IACR;AAAA,EACD;AACD,GAAG,CAAC;AAIJ,IAAI,cAA8B,QAAQ,aAAa,GAAG,CAAC;AAI3D,IAAM,aAAa;AAGnB,SAAS,QAAQ,GAAG,GAAG;AACtB,SAAO,IAAI,EAAE,YAAY,IAAI;AAC9B;AACA,SAAS,SAAS,KAAK;AACtB,SAAO,OAAO,GAAG,GAAG,GAAG,QAAQ,YAAY,OAAO;AACnD;AASA,SAAS,SAAS,UAAU,KAAK;AAChC,MAAI,qBAAqB,SAAS,QAAQ,YAAY,EAAE,EAAE,QAAQ,OAAO,GAAG;AAC5E,MAAI,mBAAmB,SAAS,QAAQ,GAAG,EAAE,EAAG,sBAAqB,mBAAmB,QAAQ,SAAS,GAAG,IAAI,GAAG;AACnH,QAAM,iBAAiB,mBAAmB,YAAY,GAAG;AACzD,QAAM,kBAAkB,mBAAmB,UAAU,iBAAiB,CAAC;AACvE,MAAI,KAAK;AACR,UAAM,WAAW,gBAAgB,YAAY,GAAG;AAChD,WAAO,gBAAgB,UAAU,GAAG,QAAQ;AAAA,EAC7C;AACA,SAAO;AACR;AAQA,IAAM,cAAc;AAIpB,SAAS,YAAY,KAAK;AACzB,SAAO,IAAI,WAAW,GAAG,KAAK,YAAY,KAAK,GAAG;AACnD;AAKA,IAAM,aAAa,GAAG,YAAY,SAAS,EAAE,SAAS,KAAK,CAAC;;;ACrO5D,IAAM,oBAAoB,EAAE,UAAU,KAAK;AAmB3C,SAAS,SAAS,IAAI,OAAO,IAAI,UAAU,CAAC,GAAG;AAC9C,YAAU;AAAA,IACT,GAAG;AAAA,IACH,GAAG;AAAA,EACJ;AACA,MAAI,CAAC,OAAO,SAAS,IAAI,EAAG,OAAM,IAAI,UAAU,uCAAuC;AACvF,MAAI;AACJ,MAAI;AACJ,MAAI,cAAc,CAAC;AACnB,MAAI;AACJ,MAAI;AACJ,QAAM,UAAU,CAAC,OAAO,SAAS;AAChC,qBAAiB,eAAe,IAAI,OAAO,IAAI;AAC/C,mBAAe,QAAQ,MAAM;AAC5B,uBAAiB;AACjB,UAAI,QAAQ,YAAY,gBAAgB,CAAC,SAAS;AACjD,cAAM,UAAU,QAAQ,OAAO,YAAY;AAC3C,uBAAe;AACf,eAAO;AAAA,MACR;AAAA,IACD,CAAC;AACD,WAAO;AAAA,EACR;AACA,QAAM,YAAY,YAAY,MAAM;AACnC,QAAI,QAAQ,SAAU,gBAAe;AACrC,QAAI,eAAgB,QAAO;AAC3B,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC/B,YAAM,gBAAgB,CAAC,WAAW,QAAQ;AAC1C,mBAAa,OAAO;AACpB,gBAAU,WAAW,MAAM;AAC1B,kBAAU;AACV,cAAM,UAAU,QAAQ,UAAU,eAAe,QAAQ,MAAM,IAAI;AACnE,uBAAe;AACf,mBAAW,YAAY,YAAa,UAAS,OAAO;AACpD,sBAAc,CAAC;AAAA,MAChB,GAAG,IAAI;AACP,UAAI,eAAe;AAClB,uBAAe,QAAQ,MAAM,IAAI;AACjC,gBAAQ,YAAY;AAAA,MACrB,MAAO,aAAY,KAAK,OAAO;AAAA,IAChC,CAAC;AAAA,EACF;AACA,QAAM,gBAAgB,CAAC,UAAU;AAChC,QAAI,OAAO;AACV,mBAAa,KAAK;AAClB,gBAAU;AAAA,IACX;AAAA,EACD;AACA,YAAU,YAAY,MAAM,CAAC,CAAC;AAC9B,YAAU,SAAS,MAAM;AACxB,kBAAc,OAAO;AACrB,kBAAc,CAAC;AACf,mBAAe;AAAA,EAChB;AACA,YAAU,QAAQ,MAAM;AACvB,kBAAc,OAAO;AACrB,QAAI,CAAC,gBAAgB,eAAgB;AACrC,UAAM,OAAO;AACb,mBAAe;AACf,WAAO,QAAQ,MAAM,IAAI;AAAA,EAC1B;AACA,SAAO;AACR;AACA,eAAe,eAAe,IAAI,OAAO,MAAM;AAC9C,SAAO,MAAM,GAAG,MAAM,OAAO,IAAI;AAClC;;;ACrFA,SAAS,UAAU,aAAaA,SAAQ,CAAC,GAAG,YAAY;AACtD,aAAW,OAAO,aAAa;AAC7B,UAAM,UAAU,YAAY,GAAG;AAC/B,UAAM,OAAO,aAAa,GAAG,UAAU,IAAI,GAAG,KAAK;AACnD,QAAI,OAAO,YAAY,YAAY,YAAY,MAAM;AACnD,gBAAU,SAASA,QAAO,IAAI;AAAA,IAChC,WAAW,OAAO,YAAY,YAAY;AACxC,MAAAA,OAAM,IAAI,IAAI;AAAA,IAChB;AAAA,EACF;AACA,SAAOA;AACT;AA6BA,IAAM,cAAc,EAAE,KAAK,CAAC,cAAc,UAAU,EAAE;AACtD,IAAM,cAAc,MAAM;AAC1B,IAAM,aAAa,OAAO,QAAQ,eAAe,cAAc,QAAQ,aAAa;AACpF,SAAS,iBAAiBC,QAAO,MAAM;AACrC,QAAM,OAAO,KAAK,MAAM;AACxB,QAAM,OAAO,WAAW,IAAI;AAC5B,SAAOA,OAAM;AAAA,IACX,CAAC,SAAS,iBAAiB,QAAQ,KAAK,MAAM,KAAK,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,CAAC;AAAA,IACnF,QAAQ,QAAQ;AAAA,EAClB;AACF;AACA,SAAS,mBAAmBA,QAAO,MAAM;AACvC,QAAM,OAAO,KAAK,MAAM;AACxB,QAAM,OAAO,WAAW,IAAI;AAC5B,SAAO,QAAQ,IAAIA,OAAM,IAAI,CAACC,UAAS,KAAK,IAAI,MAAMA,MAAK,GAAG,IAAI,CAAC,CAAC,CAAC;AACvE;AAUA,SAAS,aAAa,WAAW,MAAM;AACrC,aAAW,YAAY,CAAC,GAAG,SAAS,GAAG;AACrC,aAAS,IAAI;AAAA,EACf;AACF;AAEA,IAAM,WAAN,MAAe;AAAA,EACb,cAAc;AACZ,SAAK,SAAS,CAAC;AACf,SAAK,UAAU;AACf,SAAK,SAAS;AACd,SAAK,sBAAsB;AAC3B,SAAK,mBAAmB,CAAC;AACzB,SAAK,OAAO,KAAK,KAAK,KAAK,IAAI;AAC/B,SAAK,WAAW,KAAK,SAAS,KAAK,IAAI;AACvC,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAAA,EACjD;AAAA,EACA,KAAK,MAAM,WAAW,UAAU,CAAC,GAAG;AAClC,QAAI,CAAC,QAAQ,OAAO,cAAc,YAAY;AAC5C,aAAO,MAAM;AAAA,MACb;AAAA,IACF;AACA,UAAM,eAAe;AACrB,QAAI;AACJ,WAAO,KAAK,iBAAiB,IAAI,GAAG;AAClC,YAAM,KAAK,iBAAiB,IAAI;AAChC,aAAO,IAAI;AAAA,IACb;AACA,QAAI,OAAO,CAAC,QAAQ,iBAAiB;AACnC,UAAI,UAAU,IAAI;AAClB,UAAI,CAAC,SAAS;AACZ,kBAAU,GAAG,YAAY,+BAA+B,IAAI,KAAK,gBAAgB,IAAI,EAAE,KAAK;AAAA,MAC9F;AACA,UAAI,CAAC,KAAK,qBAAqB;AAC7B,aAAK,sBAAsC,oBAAI,IAAI;AAAA,MACrD;AACA,UAAI,CAAC,KAAK,oBAAoB,IAAI,OAAO,GAAG;AAC1C,gBAAQ,KAAK,OAAO;AACpB,aAAK,oBAAoB,IAAI,OAAO;AAAA,MACtC;AAAA,IACF;AACA,QAAI,CAAC,UAAU,MAAM;AACnB,UAAI;AACF,eAAO,eAAe,WAAW,QAAQ;AAAA,UACvC,KAAK,MAAM,MAAM,KAAK,QAAQ,QAAQ,GAAG,IAAI;AAAA,UAC7C,cAAc;AAAA,QAChB,CAAC;AAAA,MACH,QAAQ;AAAA,MACR;AAAA,IACF;AACA,SAAK,OAAO,IAAI,IAAI,KAAK,OAAO,IAAI,KAAK,CAAC;AAC1C,SAAK,OAAO,IAAI,EAAE,KAAK,SAAS;AAChC,WAAO,MAAM;AACX,UAAI,WAAW;AACb,aAAK,WAAW,MAAM,SAAS;AAC/B,oBAAY;AAAA,MACd;AAAA,IACF;AAAA,EACF;AAAA,EACA,SAAS,MAAM,WAAW;AACxB,QAAI;AACJ,QAAI,YAAY,IAAI,eAAe;AACjC,UAAI,OAAO,WAAW,YAAY;AAChC,eAAO;AAAA,MACT;AACA,eAAS;AACT,kBAAY;AACZ,aAAO,UAAU,GAAG,UAAU;AAAA,IAChC;AACA,aAAS,KAAK,KAAK,MAAM,SAAS;AAClC,WAAO;AAAA,EACT;AAAA,EACA,WAAW,MAAM,WAAW;AAC1B,QAAI,KAAK,OAAO,IAAI,GAAG;AACrB,YAAM,QAAQ,KAAK,OAAO,IAAI,EAAE,QAAQ,SAAS;AACjD,UAAI,UAAU,IAAI;AAChB,aAAK,OAAO,IAAI,EAAE,OAAO,OAAO,CAAC;AAAA,MACnC;AACA,UAAI,KAAK,OAAO,IAAI,EAAE,WAAW,GAAG;AAClC,eAAO,KAAK,OAAO,IAAI;AAAA,MACzB;AAAA,IACF;AAAA,EACF;AAAA,EACA,cAAc,MAAM,YAAY;AAC9B,SAAK,iBAAiB,IAAI,IAAI,OAAO,eAAe,WAAW,EAAE,IAAI,WAAW,IAAI;AACpF,UAAM,SAAS,KAAK,OAAO,IAAI,KAAK,CAAC;AACrC,WAAO,KAAK,OAAO,IAAI;AACvB,eAAWC,SAAQ,QAAQ;AACzB,WAAK,KAAK,MAAMA,KAAI;AAAA,IACtB;AAAA,EACF;AAAA,EACA,eAAe,iBAAiB;AAC9B,WAAO,OAAO,KAAK,kBAAkB,eAAe;AACpD,eAAW,QAAQ,iBAAiB;AAClC,WAAK,cAAc,MAAM,gBAAgB,IAAI,CAAC;AAAA,IAChD;AAAA,EACF;AAAA,EACA,SAAS,aAAa;AACpB,UAAMC,SAAQ,UAAU,WAAW;AACnC,UAAM,YAAY,OAAO,KAAKA,MAAK,EAAE;AAAA,MACnC,CAAC,QAAQ,KAAK,KAAK,KAAKA,OAAM,GAAG,CAAC;AAAA,IACpC;AACA,WAAO,MAAM;AACX,iBAAW,SAAS,UAAU,OAAO,GAAG,UAAU,MAAM,GAAG;AACzD,cAAM;AAAA,MACR;AAAA,IACF;AAAA,EACF;AAAA,EACA,YAAY,aAAa;AACvB,UAAMA,SAAQ,UAAU,WAAW;AACnC,eAAW,OAAOA,QAAO;AACvB,WAAK,WAAW,KAAKA,OAAM,GAAG,CAAC;AAAA,IACjC;AAAA,EACF;AAAA,EACA,iBAAiB;AACf,eAAW,OAAO,KAAK,QAAQ;AAC7B,aAAO,KAAK,OAAO,GAAG;AAAA,IACxB;AAAA,EACF;AAAA,EACA,SAAS,SAAS,YAAY;AAC5B,eAAW,QAAQ,IAAI;AACvB,WAAO,KAAK,aAAa,kBAAkB,MAAM,GAAG,UAAU;AAAA,EAChE;AAAA,EACA,iBAAiB,SAAS,YAAY;AACpC,eAAW,QAAQ,IAAI;AACvB,WAAO,KAAK,aAAa,oBAAoB,MAAM,GAAG,UAAU;AAAA,EAClE;AAAA,EACA,aAAa,QAAQ,SAAS,YAAY;AACxC,UAAM,QAAQ,KAAK,WAAW,KAAK,SAAS,EAAE,MAAM,MAAM,YAAY,SAAS,CAAC,EAAE,IAAI;AACtF,QAAI,KAAK,SAAS;AAChB,mBAAa,KAAK,SAAS,KAAK;AAAA,IAClC;AACA,UAAM,SAAS;AAAA,MACb,QAAQ,KAAK,SAAS,CAAC,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC;AAAA,MAChD;AAAA,IACF;AACA,QAAI,kBAAkB,SAAS;AAC7B,aAAO,OAAO,QAAQ,MAAM;AAC1B,YAAI,KAAK,UAAU,OAAO;AACxB,uBAAa,KAAK,QAAQ,KAAK;AAAA,QACjC;AAAA,MACF,CAAC;AAAA,IACH;AACA,QAAI,KAAK,UAAU,OAAO;AACxB,mBAAa,KAAK,QAAQ,KAAK;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AAAA,EACA,WAAW,WAAW;AACpB,SAAK,UAAU,KAAK,WAAW,CAAC;AAChC,SAAK,QAAQ,KAAK,SAAS;AAC3B,WAAO,MAAM;AACX,UAAI,KAAK,YAAY,QAAQ;AAC3B,cAAM,QAAQ,KAAK,QAAQ,QAAQ,SAAS;AAC5C,YAAI,UAAU,IAAI;AAChB,eAAK,QAAQ,OAAO,OAAO,CAAC;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA,EACA,UAAU,WAAW;AACnB,SAAK,SAAS,KAAK,UAAU,CAAC;AAC9B,SAAK,OAAO,KAAK,SAAS;AAC1B,WAAO,MAAM;AACX,UAAI,KAAK,WAAW,QAAQ;AAC1B,cAAM,QAAQ,KAAK,OAAO,QAAQ,SAAS;AAC3C,YAAI,UAAU,IAAI;AAChB,eAAK,OAAO,OAAO,OAAO,CAAC;AAAA,QAC7B;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AACA,SAAS,cAAc;AACrB,SAAO,IAAI,SAAS;AACtB;;;ACzOA,IAAM,EAAE,cAAAC,eAAc,YAAAC,YAAW,IAAI;AACrC,IAAM,SAAS,KAAK,OAAO,KAAK,IAAI;;;ACFpC,IAAIC,YAAW,OAAO;AACtB,IAAIC,aAAY,OAAO;AACvB,IAAIC,oBAAmB,OAAO;AAC9B,IAAIC,qBAAoB,OAAO;AAC/B,IAAIC,gBAAe,OAAO;AAC1B,IAAIC,gBAAe,OAAO,UAAU;AACpC,IAAIC,cAAa,CAAC,IAAI,QAAQ,WAAW;AACxC,SAAO,QAAQ,GAAG,GAAGH,mBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,SAAS,GAAG,GAAG,IAAI;AAC5F;AACA,IAAII,eAAc,CAAC,IAAI,MAAM,QAAQ,SAAS;AAC7C,MAAI,QAAQ,OAAO,SAAS,YAAY,OAAO,SAAS,WAAY,UAAS,OAAOJ,mBAAkB,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,IAAI,GAAG,KAAK;AACrJ,UAAM,KAAK,CAAC;AACZ,QAAI,CAACE,cAAa,KAAK,IAAI,GAAG,KAAK,QAAQ,OAAQ,CAAAJ,WAAU,IAAI,KAAK;AAAA,MACrE,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,MAAM,GAAG;AAAA,MACpC,YAAY,EAAE,OAAOC,kBAAiB,MAAM,GAAG,MAAM,KAAK;AAAA,IAC3D,CAAC;AAAA,EACF;AACA,SAAO;AACR;AACA,IAAIM,WAAU,CAAC,KAAK,YAAY,cAAc,WAAW,OAAO,OAAOR,UAASI,cAAa,GAAG,CAAC,IAAI,CAAC,GAAGG,aAAY,cAAc,CAAC,OAAO,CAAC,IAAI,aAAaN,WAAU,UAAU,WAAW;AAAA,EAC3L,OAAO;AAAA,EACP,YAAY;AACb,CAAC,IAAI,UAAU,GAAG;AAmBlB,SAAS,qBAAqB,SAAS;AACtC,QAAM,OAAO,QAAQ,QAAQ,QAAQ,iBAAiB,QAAQ,0CAA0C,QAAQ;AAChH,MAAI,SAAS,WAAW,QAAQ,QAAQ,SAAS,WAAW,EAAG,QAAO;AACtE,SAAO;AACR;AACA,SAAS,qBAAqB,SAAS;AACtC,QAAM,OAAO,QAAQ;AACrB,MAAI,KAAM,QAAO,SAAS,SAAS,MAAM,MAAM,CAAC;AACjD;AAMA,SAAS,wBAAwB,UAAU,MAAM;AAChD,WAAS,KAAK,yCAAyC;AACvD,SAAO;AACR;AACA,SAAS,aAAa,UAAU;AAC/B,MAAI,SAAS,iCAAkC,QAAO,SAAS;AAAA,WACtD,SAAS,KAAM,QAAO,SAAS,WAAW,IAAI;AACxD;AAWA,SAAS,WAAW,UAAU;AAC7B,QAAM,cAAc,SAAS,SAAS;AACtC,QAAM,YAAY,aAAa,QAAQ;AACvC,MAAI,UAAW,QAAO,WAAW,OAAO,aAAa;AACrD,SAAO;AACR;AAUA,SAAS,gBAAgB,UAAU;AAClC,QAAM,OAAO,qBAAqB,UAAU,QAAQ,CAAC,CAAC;AACtD,MAAI,KAAM,QAAO;AACjB,MAAI,UAAU,SAAS,SAAU,QAAO;AACxC,aAAW,OAAO,SAAS,QAAQ,MAAM,WAAY,KAAI,SAAS,OAAO,KAAK,WAAW,GAAG,MAAM,UAAU,KAAM,QAAO,wBAAwB,UAAU,GAAG;AAC9J,aAAW,OAAO,SAAS,YAAY,WAAY,KAAI,SAAS,WAAW,WAAW,GAAG,MAAM,UAAU,KAAM,QAAO,wBAAwB,UAAU,GAAG;AAC3J,QAAM,WAAW,qBAAqB,UAAU,QAAQ,CAAC,CAAC;AAC1D,MAAI,SAAU,QAAO;AACrB,SAAO;AACR;AAKA,SAAS,qBAAqB,UAAU;AACvC,SAAO,GAAG,UAAU,YAAY,KAAK,uCAAuC,CAAC,IAAI,aAAa,UAAU,OAAO,SAAS,SAAS,GAAG;AACrI;AAeA,SAAS,qBAAqB,WAAW,YAAY;AACpD,eAAa,cAAc,GAAG,UAAU,EAAE;AAC1C,SAAO,UAAU,YAAY,IAAI,UAAU,KAAK,UAAU,YAAY,IAAI,OAAO;AAClF;AAOA,SAAS,aAAa;AACrB,QAAM,OAAO;AAAA,IACZ,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,OAAO;AAAA,IACP,IAAI,QAAQ;AACX,aAAO,KAAK,QAAQ,KAAK;AAAA,IAC1B;AAAA,IACA,IAAI,SAAS;AACZ,aAAO,KAAK,SAAS,KAAK;AAAA,IAC3B;AAAA,EACD;AACA,SAAO;AACR;AACA,IAAI;AACJ,SAAS,YAAY,MAAM;AAC1B,MAAI,CAAC,MAAO,SAAQ,SAAS,YAAY;AACzC,QAAM,WAAW,IAAI;AACrB,SAAO,MAAM,sBAAsB;AACpC;AACA,SAAS,gBAAgB,OAAO;AAC/B,QAAM,OAAO,WAAW;AACxB,MAAI,CAAC,MAAM,SAAU,QAAO;AAC5B,WAAS,IAAI,GAAG,IAAI,MAAM,SAAS,QAAQ,IAAI,GAAG,KAAK;AACtD,UAAM,aAAa,MAAM,SAAS,CAAC;AACnC,QAAI;AACJ,QAAI,WAAW,UAAW,aAAY,yBAAyB,WAAW,SAAS;AAAA,aAC1E,WAAW,IAAI;AACvB,YAAM,KAAK,WAAW;AACtB,UAAI,GAAG,aAAa,KAAK,GAAG,sBAAuB,aAAY,GAAG,sBAAsB;AAAA,eAC/E,GAAG,aAAa,KAAK,GAAG,KAAK,KAAK,EAAG,aAAY,YAAY,EAAE;AAAA,IACzE;AACA,QAAI,UAAW,YAAW,MAAM,SAAS;AAAA,EAC1C;AACA,SAAO;AACR;AACA,SAAS,WAAW,GAAG,GAAG;AACzB,MAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAK,GAAE,MAAM,EAAE;AACvC,MAAI,CAAC,EAAE,UAAU,EAAE,SAAS,EAAE,OAAQ,GAAE,SAAS,EAAE;AACnD,MAAI,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAM,GAAE,OAAO,EAAE;AAC3C,MAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAO,GAAE,QAAQ,EAAE;AAC/C,SAAO;AACR;AACA,IAAM,eAAe;AAAA,EACpB,KAAK;AAAA,EACL,MAAM;AAAA,EACN,OAAO;AAAA,EACP,QAAQ;AAAA,EACR,OAAO;AAAA,EACP,QAAQ;AACT;AACA,SAAS,yBAAyB,UAAU;AAC3C,QAAM,KAAK,SAAS,QAAQ;AAC5B,MAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,MAAI,WAAW,QAAQ,EAAG,QAAO,gBAAgB,SAAS,OAAO;AAAA,WACxD,IAAI,aAAa,EAAG,QAAO,IAAI,sBAAsB;AAAA,WACrD,SAAS,QAAQ,UAAW,QAAO,yBAAyB,SAAS,QAAQ,SAAS;AAAA,MAC1F,QAAO;AACb;AAIA,SAAS,qCAAqC,UAAU;AACvD,MAAI,WAAW,QAAQ,EAAG,QAAO,wBAAwB,SAAS,OAAO;AACzE,MAAI,CAAC,SAAS,QAAS,QAAO,CAAC;AAC/B,SAAO,CAAC,SAAS,QAAQ,EAAE;AAC5B;AACA,SAAS,wBAAwB,OAAO;AACvC,MAAI,CAAC,MAAM,SAAU,QAAO,CAAC;AAC7B,QAAM,OAAO,CAAC;AACd,QAAM,SAAS,QAAQ,CAAC,eAAe;AACtC,QAAI,WAAW,UAAW,MAAK,KAAK,GAAG,qCAAqC,WAAW,SAAS,CAAC;AAAA,aACxF,YAAY,GAAI,MAAK,KAAK,WAAW,EAAE;AAAA,EACjD,CAAC;AACD,SAAO;AACR;AAIA,IAAM,uBAAuB;AAC7B,IAAM,kBAAkB;AACxB,IAAM,4BAA4B;AAClC,IAAM,uBAAuB;AAC7B,IAAM,kBAAkB;AAAA,EACvB,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,iBAAiB;AAAA,EACjB,QAAQ;AAAA,EACR,cAAc;AAAA,EACd,YAAY;AAAA,EACZ,eAAe;AAChB;AACA,IAAM,aAAa;AAAA,EAClB,YAAY;AAAA,EACZ,SAAS;AAAA,EACT,cAAc;AAAA,EACd,WAAW;AAAA,EACX,UAAU;AAAA,EACV,MAAM;AAAA,EACN,OAAO;AAAA,EACP,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,iBAAiB;AAAA,EACjB,WAAW;AACZ;AACA,IAAM,kBAAkB;AAAA,EACvB,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,UAAU;AAAA,EACV,SAAS;AACV;AACA,SAAS,sBAAsB;AAC9B,SAAO,SAAS,eAAe,oBAAoB;AACpD;AACA,SAAS,iBAAiB;AACzB,SAAO,SAAS,eAAe,eAAe;AAC/C;AACA,SAAS,sBAAsB;AAC9B,SAAO,SAAS,eAAe,oBAAoB;AACpD;AACA,SAAS,iBAAiB;AACzB,SAAO,SAAS,eAAe,yBAAyB;AACzD;AACA,SAAS,UAAU,QAAQ;AAC1B,SAAO;AAAA,IACN,MAAM,GAAG,KAAK,MAAM,OAAO,OAAO,GAAG,IAAI,GAAG;AAAA,IAC5C,KAAK,GAAG,KAAK,MAAM,OAAO,MAAM,GAAG,IAAI,GAAG;AAAA,IAC1C,OAAO,GAAG,KAAK,MAAM,OAAO,QAAQ,GAAG,IAAI,GAAG;AAAA,IAC9C,QAAQ,GAAG,KAAK,MAAM,OAAO,SAAS,GAAG,IAAI,GAAG;AAAA,EACjD;AACD;AACA,SAAS,OAAO,SAAS;AACxB,QAAM,cAAc,SAAS,cAAc,KAAK;AAChD,cAAY,KAAK,QAAQ,aAAa;AACtC,SAAO,OAAO,YAAY,OAAO;AAAA,IAChC,GAAG;AAAA,IACH,GAAG,UAAU,QAAQ,MAAM;AAAA,IAC3B,GAAG,QAAQ;AAAA,EACZ,CAAC;AACD,QAAM,SAAS,SAAS,cAAc,MAAM;AAC5C,SAAO,KAAK;AACZ,SAAO,OAAO,OAAO,OAAO;AAAA,IAC3B,GAAG;AAAA,IACH,KAAK,QAAQ,OAAO,MAAM,KAAK,IAAI;AAAA,EACpC,CAAC;AACD,QAAM,SAAS,SAAS,cAAc,MAAM;AAC5C,SAAO,KAAK;AACZ,SAAO,YAAY,OAAO,QAAQ,IAAI;AACtC,QAAM,cAAc,SAAS,cAAc,GAAG;AAC9C,cAAY,KAAK;AACjB,cAAY,YAAY,GAAG,KAAK,MAAM,QAAQ,OAAO,QAAQ,GAAG,IAAI,GAAG,MAAM,KAAK,MAAM,QAAQ,OAAO,SAAS,GAAG,IAAI,GAAG;AAC1H,SAAO,OAAO,YAAY,OAAO,eAAe;AAChD,SAAO,YAAY,MAAM;AACzB,SAAO,YAAY,WAAW;AAC9B,cAAY,YAAY,MAAM;AAC9B,WAAS,KAAK,YAAY,WAAW;AACrC,SAAO;AACR;AACA,SAAS,OAAO,SAAS;AACxB,QAAM,cAAc,oBAAoB;AACxC,QAAM,SAAS,eAAe;AAC9B,QAAM,SAAS,eAAe;AAC9B,QAAM,cAAc,oBAAoB;AACxC,MAAI,aAAa;AAChB,WAAO,OAAO,YAAY,OAAO;AAAA,MAChC,GAAG;AAAA,MACH,GAAG,UAAU,QAAQ,MAAM;AAAA,IAC5B,CAAC;AACD,WAAO,OAAO,OAAO,OAAO,EAAE,KAAK,QAAQ,OAAO,MAAM,KAAK,IAAI,QAAQ,CAAC;AAC1E,WAAO,YAAY,OAAO,QAAQ,IAAI;AACtC,gBAAY,YAAY,GAAG,KAAK,MAAM,QAAQ,OAAO,QAAQ,GAAG,IAAI,GAAG,MAAM,KAAK,MAAM,QAAQ,OAAO,SAAS,GAAG,IAAI,GAAG;AAAA,EAC3H;AACD;AACA,SAAS,UAAU,UAAU;AAC5B,QAAM,SAAS,yBAAyB,QAAQ;AAChD,MAAI,CAAC,OAAO,SAAS,CAAC,OAAO,OAAQ;AACrC,QAAM,OAAO,gBAAgB,QAAQ;AACrC,sBAAoB,IAAI,OAAO;AAAA,IAC9B;AAAA,IACA;AAAA,EACD,CAAC,IAAI,OAAO;AAAA,IACX;AAAA,IACA;AAAA,EACD,CAAC;AACF;AACA,SAAS,cAAc;AACtB,QAAM,KAAK,oBAAoB;AAC/B,MAAI,GAAI,IAAG,MAAM,UAAU;AAC5B;AACA,IAAI,kBAAkB;AACtB,SAAS,UAAU,GAAG;AACrB,QAAM,WAAW,EAAE;AACnB,MAAI,UAAU;AACb,UAAM,WAAW,SAAS;AAC1B,QAAI,UAAU;AACb,wBAAkB;AAClB,UAAI,SAAS,MAAM,IAAI;AACtB,cAAM,SAAS,yBAAyB,QAAQ;AAChD,cAAM,OAAO,gBAAgB,QAAQ;AACrC,4BAAoB,IAAI,OAAO;AAAA,UAC9B;AAAA,UACA;AAAA,QACD,CAAC,IAAI,OAAO;AAAA,UACX;AAAA,UACA;AAAA,QACD,CAAC;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;AACA,SAAS,kBAAkB,GAAG,IAAI;AACjC,IAAE,eAAe;AACjB,IAAE,gBAAgB;AAClB,MAAI,gBAAiB,IAAG,qBAAqB,eAAe,CAAC;AAC9D;AACA,IAAI,sCAAsC;AAC1C,SAAS,oCAAoC;AAC5C,cAAY;AACZ,SAAO,oBAAoB,aAAa,SAAS;AACjD,SAAO,oBAAoB,SAAS,qCAAqC,IAAI;AAC7E,wCAAsC;AACvC;AACA,SAAS,8BAA8B;AACtC,SAAO,iBAAiB,aAAa,SAAS;AAC9C,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC/B,aAAS,SAAS,GAAG;AACpB,QAAE,eAAe;AACjB,QAAE,gBAAgB;AAClB,wBAAkB,GAAG,CAAC,OAAO;AAC5B,eAAO,oBAAoB,SAAS,UAAU,IAAI;AAClD,8CAAsC;AACtC,eAAO,oBAAoB,aAAa,SAAS;AACjD,cAAM,KAAK,oBAAoB;AAC/B,YAAI,GAAI,IAAG,MAAM,UAAU;AAC3B,gBAAQ,KAAK,UAAU,EAAE,GAAG,CAAC,CAAC;AAAA,MAC/B,CAAC;AAAA,IACF;AACA,0CAAsC;AACtC,WAAO,iBAAiB,SAAS,UAAU,IAAI;AAAA,EAChD,CAAC;AACF;AACA,SAAS,kBAAkB,SAAS;AACnC,QAAM,WAAW,qBAAqB,gBAAgB,OAAO,QAAQ,EAAE;AACvE,MAAI,UAAU;AACb,UAAM,CAAC,EAAE,IAAI,qCAAqC,QAAQ;AAC1D,QAAI,OAAO,GAAG,mBAAmB,WAAY,IAAG,eAAe,EAAE,UAAU,SAAS,CAAC;AAAA,SAChF;AACJ,YAAM,SAAS,yBAAyB,QAAQ;AAChD,YAAM,eAAe,SAAS,cAAc,KAAK;AACjD,YAAM,SAAS;AAAA,QACd,GAAG,UAAU,MAAM;AAAA,QACnB,UAAU;AAAA,MACX;AACA,aAAO,OAAO,aAAa,OAAO,MAAM;AACxC,eAAS,KAAK,YAAY,YAAY;AACtC,mBAAa,eAAe,EAAE,UAAU,SAAS,CAAC;AAClD,iBAAW,MAAM;AAChB,iBAAS,KAAK,YAAY,YAAY;AAAA,MACvC,GAAG,GAAG;AAAA,IACP;AACA,eAAW,MAAM;AAChB,YAAM,SAAS,yBAAyB,QAAQ;AAChD,UAAI,OAAO,SAAS,OAAO,QAAQ;AAClC,cAAM,OAAO,gBAAgB,QAAQ;AACrC,cAAM,OAAO,oBAAoB;AACjC,eAAO,OAAO;AAAA,UACb,GAAG;AAAA,UACH;AAAA,UACA;AAAA,QACD,CAAC,IAAI,OAAO;AAAA,UACX,GAAG;AAAA,UACH;AAAA,UACA;AAAA,QACD,CAAC;AACD,mBAAW,MAAM;AAChB,cAAI,KAAM,MAAK,MAAM,UAAU;AAAA,QAChC,GAAG,IAAI;AAAA,MACR;AAAA,IACD,GAAG,IAAI;AAAA,EACR;AACD;AAIA,OAAO,iDAAiD;AAIxD,SAAS,qBAAqB,IAAI;AACjC,MAAI,QAAQ;AACZ,QAAM,QAAQ,YAAY,MAAM;AAC/B,QAAI,OAAO,mBAAmB;AAC7B,oBAAc,KAAK;AACnB,eAAS;AACT,SAAG;AAAA,IACJ;AACA,QAAI,SAAS,IAAK,eAAc,KAAK;AAAA,EACtC,GAAG,EAAE;AACN;AACA,SAAS,iBAAiB;AACzB,QAAM,YAAY,OAAO;AACzB,QAAM,gBAAgB,UAAU;AAChC,YAAU,eAAe,UAAU,WAAW;AAC7C,cAAU,QAAQ;AAClB,kBAAc,GAAG,MAAM;AAAA,EACxB;AACD;AACA,SAAS,wBAAwB;AAChC,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC/B,aAAS,QAAQ;AAChB,qBAAe;AACf,cAAQ,OAAO,iBAAiB;AAAA,IACjC;AACA,QAAI,CAAC,OAAO,kBAAmB,sBAAqB,MAAM;AACzD,YAAM;AAAA,IACP,CAAC;AAAA,QACI,OAAM;AAAA,EACZ,CAAC;AACF;AAYA,IAAI,iBAAgC,SAAS,iBAAiB;AAC7D,kBAAgB,MAAM,IAAI;AAC1B,kBAAgB,aAAa,IAAI;AACjC,kBAAgB,aAAa,IAAI;AACjC,kBAAgB,YAAY,IAAI;AAChC,kBAAgB,KAAK,IAAI;AACzB,SAAO;AACR,GAAE,CAAC,CAAC;AAIJ,SAAS,WAAW,OAAO;AAC1B,SAAO,CAAC,EAAE,SAAS,MAAM,cAAc,WAAW;AACnD;AAIA,SAAS,aAAa,OAAO;AAC5B,MAAI,WAAW,KAAK,EAAG,QAAO,aAAa,MAAM,cAAc,GAAG,CAAC;AACnE,SAAO,CAAC,EAAE,SAAS,MAAM,cAAc,WAAW;AACnD;AACA,SAAS,QAAQ,GAAG;AACnB,SAAO,CAAC,EAAE,KAAK,EAAE,cAAc;AAChC;AAIA,SAAS,QAAQ,UAAU;AAC1B,QAAM,MAAM,YAAY,SAAS,cAAc,GAAG;AAClD,SAAO,MAAM,QAAQ,GAAG,IAAI;AAC7B;AAIA,IAAM,WAAW,OAAO,IAAI,OAAO;AAInC,IAAI,cAAc,MAAM;AAAA,EACvB,cAAc;AACb,SAAK,YAAY,IAAI,eAAe;AAAA,EACrC;AAAA,EACA,IAAI,QAAQ,MAAM,OAAO,IAAI;AAC5B,UAAM,WAAW,MAAM,QAAQ,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG;AAC5D,WAAO,SAAS,SAAS,GAAG;AAC3B,YAAM,UAAU,SAAS,MAAM;AAC/B,UAAI,kBAAkB,IAAK,UAAS,OAAO,IAAI,OAAO;AAAA,eAC7C,kBAAkB,IAAK,UAAS,MAAM,KAAK,OAAO,OAAO,CAAC,EAAE,OAAO;AAAA,UACvE,UAAS,OAAO,OAAO;AAC5B,UAAI,KAAK,UAAU,MAAM,MAAM,EAAG,UAAS,KAAK,UAAU,IAAI,MAAM;AAAA,IACrE;AACA,UAAM,QAAQ,SAAS,CAAC;AACxB,UAAM,OAAO,KAAK,UAAU,IAAI,MAAM,EAAE,KAAK;AAC7C,QAAI,GAAI,IAAG,QAAQ,OAAO,KAAK;AAAA,aACtB,KAAK,UAAU,MAAM,IAAI,EAAG,MAAK,UAAU,IAAI,MAAM,KAAK;AAAA,QAC9D,QAAO,KAAK,IAAI;AAAA,EACtB;AAAA,EACA,IAAI,QAAQ,MAAM;AACjB,UAAM,WAAW,MAAM,QAAQ,IAAI,IAAI,OAAO,KAAK,MAAM,GAAG;AAC5D,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;AACzC,UAAI,kBAAkB,IAAK,UAAS,OAAO,IAAI,SAAS,CAAC,CAAC;AAAA,UACrD,UAAS,OAAO,SAAS,CAAC,CAAC;AAChC,UAAI,KAAK,UAAU,MAAM,MAAM,EAAG,UAAS,KAAK,UAAU,IAAI,MAAM;AACpE,UAAI,CAAC,OAAQ,QAAO;AAAA,IACrB;AACA,WAAO;AAAA,EACR;AAAA,EACA,IAAI,QAAQ,MAAM,SAAS,OAAO;AACjC,QAAI,OAAO,WAAW,YAAa,QAAO;AAC1C,UAAM,WAAW,MAAM,QAAQ,IAAI,IAAI,KAAK,MAAM,IAAI,KAAK,MAAM,GAAG;AACpE,UAAM,OAAO,CAAC,SAAS,IAAI;AAC3B,WAAO,UAAU,SAAS,SAAS,MAAM;AACxC,YAAM,UAAU,SAAS,MAAM;AAC/B,eAAS,OAAO,OAAO;AACvB,UAAI,KAAK,UAAU,MAAM,MAAM,EAAG,UAAS,KAAK,UAAU,IAAI,MAAM;AAAA,IACrE;AACA,WAAO,UAAU,QAAQ,OAAO,UAAU,eAAe,KAAK,QAAQ,SAAS,CAAC,CAAC;AAAA,EAClF;AAAA,EACA,yBAAyB,OAAO;AAC/B,WAAO,CAAC,QAAQ,OAAO,UAAU;AAChC,UAAI,MAAM,UAAU,MAAM,OAAQ,KAAI,MAAM,QAAQ,MAAM,EAAG,QAAO,OAAO,OAAO,CAAC;AAAA,eAC1E,QAAQ,MAAM,aAAa,IAAK,QAAO,OAAO,KAAK;AAAA,eACnD,QAAQ,MAAM,aAAa,IAAK,QAAO,OAAO,MAAM,KAAK,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC;AAAA,UACpF,SAAQ,eAAe,QAAQ,KAAK;AACzC,UAAI,CAAC,MAAM,QAAQ;AAClB,cAAM,WAAW,OAAO,MAAM,UAAU,KAAK;AAC7C,YAAI,KAAK,UAAU,MAAM,QAAQ,EAAG,MAAK,UAAU,IAAI,UAAU,KAAK;AAAA,iBAC7D,QAAQ,MAAM,aAAa,IAAK,QAAO,IAAI,MAAM,UAAU,OAAO,KAAK;AAAA,iBACvE,QAAQ,MAAM,aAAa,IAAK,QAAO,IAAI,KAAK;AAAA,YACpD,QAAO,MAAM,UAAU,KAAK,IAAI;AAAA,MACtC;AAAA,IACD;AAAA,EACD;AACD;AACA,IAAI,iBAAiB,MAAM;AAAA,EAC1B,IAAI,KAAK,OAAO;AACf,QAAI,QAAQ,GAAG,EAAG,KAAI,QAAQ;AAAA,SACzB;AACJ,UAAI,eAAe,OAAO,MAAM,QAAQ,KAAK,GAAG;AAC/C,YAAI,MAAM;AACV,cAAM,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC;AAC/B;AAAA,MACD;AACA,YAAM,cAAc,OAAO,KAAK,KAAK;AACrC,UAAI,eAAe,KAAK;AACvB,cAAM,oBAAoB,IAAI,IAAI,IAAI,KAAK,CAAC;AAC5C,oBAAY,QAAQ,CAAC,QAAQ;AAC5B,cAAI,IAAI,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC;AACpC,4BAAkB,OAAO,GAAG;AAAA,QAC7B,CAAC;AACD,0BAAkB,QAAQ,CAAC,QAAQ,IAAI,OAAO,GAAG,CAAC;AAClD;AAAA,MACD;AACA,YAAM,kBAAkB,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAChD,kBAAY,QAAQ,CAAC,QAAQ;AAC5B,gBAAQ,IAAI,KAAK,KAAK,QAAQ,IAAI,OAAO,GAAG,CAAC;AAC7C,wBAAgB,OAAO,GAAG;AAAA,MAC3B,CAAC;AACD,sBAAgB,QAAQ,CAAC,QAAQ,QAAQ,eAAe,KAAK,GAAG,CAAC;AAAA,IAClE;AAAA,EACD;AAAA,EACA,IAAI,KAAK;AACR,WAAO,QAAQ,GAAG,IAAI,IAAI,QAAQ;AAAA,EACnC;AAAA,EACA,MAAM,KAAK;AACV,WAAO,QAAQ,GAAG,KAAK,aAAa,GAAG;AAAA,EACxC;AACD;AAgBA,IAAM,cAAc,IAAI,YAAY;AAOpC,IAAM,mCAAmC;AAKzC,SAAS,oCAAoC;AAC5C,MAAI,OAAO,WAAW,eAAe,CAAC,aAAa,OAAO,iBAAiB,eAAe,iBAAiB,KAAM,QAAO;AAAA,IACvH,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,UAAU;AAAA,EACX;AACA,QAAM,QAAQ,OAAO,aAAa,YAAY,cAAc,aAAa,QAAQ,gCAAgC,IAAI;AACrH,SAAO,QAAQ,KAAK,MAAM,KAAK,IAAI;AAAA,IAClC,gBAAgB;AAAA,IAChB,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,IACtB,uBAAuB;AAAA,IACvB,yBAAyB;AAAA,IACzB,UAAU;AAAA,EACX;AACD;AAIA,OAAO,uCAAuC,CAAC;AAC/C,IAAM,yBAAyB,IAAI,MAAM,OAAO,oCAAoC,EAAE,IAAI,UAAU,MAAM,UAAU;AACnH,SAAO,QAAQ,IAAI,UAAU,MAAM,QAAQ;AAC5C,EAAE,CAAC;AACH,SAAS,iBAAiB,SAAS,YAAY;AAC9C,gBAAc,oBAAoB,WAAW,EAAE,IAAI;AACnD,yBAAuB,KAAK;AAAA,IAC3B,GAAG;AAAA,IACH,cAAc,WAAW;AAAA,IACzB,WAAW,aAAa,WAAW,GAAG;AAAA,EACvC,CAAC;AACF;AAYA,OAAO,mCAAmC,CAAC;AAC3C,IAAM,oBAAoB,IAAI,MAAM,OAAO,gCAAgC,EAAE,IAAI,UAAU,MAAM,UAAU;AAC1G,SAAO,QAAQ,IAAI,UAAU,MAAM,QAAQ;AAC5C,EAAE,CAAC;AACH,IAAM,2BAA2B,SAAS,MAAM;AAC/C,kBAAgB,MAAM,SAAS,0BAA0B,0BAA0B,oBAAoB,CAAC;AACzG,CAAC;AACD,SAAS,aAAa,WAAW,YAAY;AAC5C,oBAAkB,KAAK;AAAA,IACtB,SAAS;AAAA,IACT;AAAA,IACA,uBAAuB,UAAU,yBAAyB;AAAA,IAC1D,wBAAwB,UAAU,0BAA0B;AAAA,IAC5D,YAAY;AAAA,IACZ,gBAAgB;AAAA,IAChB,WAAW,aAAa,WAAW,GAAG;AAAA,EACvC,CAAC;AACD,2BAAyB;AAC1B;AACA,SAAS,sBAAsB;AAC9B,SAAO,kBAAkB,OAAO,CAAC,cAAc,UAAU,WAAW,QAAQ,gBAAgB,MAAM,GAAG,EAAE,OAAO,CAAC,cAAc,UAAU,WAAW,OAAO,YAAY,EAAE,IAAI,CAAC,cAAc;AACzL,UAAM,aAAa,UAAU;AAC7B,UAAM,UAAU,UAAU;AAC1B,WAAO;AAAA,MACN,IAAI,QAAQ;AAAA,MACZ,OAAO,QAAQ;AAAA,MACf,MAAM,WAAW;AAAA,MACjB,MAAM,sBAAsB,SAAS,MAAM,QAAQ,MAAM,GAAG,CAAC;AAAA,MAC7D,aAAa,WAAW;AAAA,MACxB,UAAU,WAAW;AAAA,MACrB,UAAU,WAAW;AAAA,IACtB;AAAA,EACD,CAAC;AACF;AAsBA,SAAS,aAAa,IAAI,KAAK;AAC9B,SAAO,kBAAkB,KAAK,CAAC,cAAc,UAAU,QAAQ,OAAO,OAAO,MAAM,UAAU,WAAW,QAAQ,MAAM,KAAK;AAC5H;AAUA,IAAI,+BAA8C,SAAS,+BAA+B;AACzF,gCAA8B,sBAAsB,IAAI;AACxD,gCAA8B,mBAAmB,IAAI;AACrD,gCAA8B,sBAAsB,IAAI;AACxD,gCAA8B,oBAAoB,IAAI;AACtD,gCAA8B,qBAAqB,IAAI;AACvD,gCAA8B,sBAAsB,IAAI;AACxD,gCAA8B,wBAAwB,IAAI;AAC1D,gCAA8B,kBAAkB,IAAI;AACpD,gCAA8B,qBAAqB,IAAI;AACvD,SAAO;AACR,GAAE,CAAC,CAAC;AACJ,IAAI,2BAA0C,SAAS,2BAA2B;AACjF,4BAA0B,eAAe,IAAI;AAC7C,4BAA0B,qBAAqB,IAAI;AACnD,4BAA0B,sBAAsB,IAAI;AACpD,4BAA0B,8BAA8B,IAAI;AAC5D,4BAA0B,sBAAsB,IAAI;AACpD,4BAA0B,sBAAsB,IAAI;AACpD,4BAA0B,yBAAyB,IAAI;AACvD,4BAA0B,sBAAsB,IAAI;AACpD,4BAA0B,oBAAoB,IAAI;AAClD,4BAA0B,qBAAqB,IAAI;AACnD,4BAA0B,uBAAuB,IAAI;AACrD,SAAO;AACR,GAAE,CAAC,CAAC;AACJ,IAAI,6BAA4C,SAAS,6BAA6B;AACrF,8BAA4B,+BAA+B,IAAI;AAC/D,8BAA4B,gCAAgC,IAAI;AAChE,8BAA4B,+BAA+B,IAAI;AAC/D,8BAA4B,0BAA0B,IAAI;AAC1D,8BAA4B,qCAAqC,IAAI;AACrE,8BAA4B,wBAAwB,IAAI;AACxD,8BAA4B,4BAA4B,IAAI;AAC5D,8BAA4B,qBAAqB,IAAI;AACrD,SAAO;AACR,GAAE,CAAC,CAAC;AACJ,SAAS,yBAAyB;AACjC,QAAM,UAAU,YAAY;AAC5B,UAAQ,KAAK,wBAAwB,eAAe,CAAC,EAAE,WAAW,OAAO,MAAM;AAC9E,iBAAa,WAAW,OAAO,UAAU;AAAA,EAC1C,CAAC;AACD,QAAM,4BAA4B,SAAS,OAAO,EAAE,aAAa,OAAO,MAAM;AAC7E,QAAI,CAAC,eAAe,CAAC,QAAQ,YAAY,OAAO,cAAc,oBAAqB;AACnF,UAAM,YAAY,aAAa,aAAa,OAAO,WAAW,GAAG;AACjE,UAAM,WAAW;AAAA,MAChB,KAAK,OAAO,WAAW;AAAA,MACvB;AAAA,MACA,QAAQ,WAAW,cAAc;AAAA,MACjC,WAAW,CAAC;AAAA,IACb;AACA,UAAM,IAAI,QAAQ,CAAC,YAAY;AAC9B,cAAQ,aAAa,OAAO,cAAc;AACzC,cAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC;AACrD,gBAAQ;AAAA,MACT,GAAG,4BAA4B,kBAAkB;AAAA,IAClD,CAAC;AACD,YAAQ,aAAa,OAAO,cAAc;AACzC,YAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,OAAO,GAAG;AAAA,QAC1C;AAAA,QACA,WAAW,SAAS;AAAA,MACrB,CAAC,CAAC,CAAC;AAAA,IACJ,GAAG,0BAA0B,6BAA6B;AAAA,EAC3D,GAAG,GAAG;AACN,UAAQ,KAAK,wBAAwB,qBAAqB,yBAAyB;AACnF,QAAM,6BAA6B,SAAS,OAAO,EAAE,aAAa,OAAO,MAAM;AAC9E,QAAI,CAAC,eAAe,CAAC,QAAQ,YAAY,OAAO,cAAc,oBAAqB;AACnF,UAAM,YAAY,aAAa,aAAa,OAAO,WAAW,GAAG;AACjE,UAAM,WAAW;AAAA,MAChB,KAAK,OAAO,WAAW;AAAA,MACvB;AAAA,MACA,QAAQ,WAAW,kBAAkB;AAAA,MACrC,OAAO;AAAA,IACR;AACA,UAAM,MAAM,EAAE,YAAY,oBAAoB,WAAW,GAAG;AAC5D,QAAI,SAAS,OAAQ,OAAM,IAAI,QAAQ,CAAC,YAAY;AACnD,cAAQ,aAAa,OAAO,cAAc;AACzC,cAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC;AAC1D,gBAAQ;AAAA,MACT,GAAG,4BAA4B,mBAAmB;AAAA,IACnD,CAAC;AACD,YAAQ,aAAa,OAAO,cAAc;AACzC,YAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,OAAO,GAAG;AAAA,QAC1C;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,OAAO,SAAS;AAAA,MACjB,CAAC,CAAC,CAAC;AAAA,IACJ,GAAG,0BAA0B,8BAA8B;AAAA,EAC5D,GAAG,GAAG;AACN,UAAQ,KAAK,wBAAwB,sBAAsB,0BAA0B;AACrF,UAAQ,KAAK,wBAAwB,8BAA8B,CAAC,EAAE,aAAa,QAAQ,OAAO,MAAM;AACvG,UAAM,YAAY,aAAa,aAAa,OAAO,WAAW,GAAG;AACjE,QAAI,CAAC,UAAW;AAChB,cAAU,iBAAiB;AAAA,EAC5B,CAAC;AACD,UAAQ,KAAK,wBAAwB,sBAAsB,CAAC,EAAE,SAAS,OAAO,MAAM;AACnF,qBAAiB,SAAS,OAAO,UAAU;AAAA,EAC5C,CAAC;AACD,UAAQ,KAAK,wBAAwB,sBAAsB,CAAC,EAAE,SAAS,OAAO,MAAM;AACnF,QAAI,cAAc,uBAAuB,CAAC,cAAc,sBAAsB,OAAO,WAAW,EAAE,KAAK,CAAC;AAAA,MACvG;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD,EAAE,SAAS,QAAQ,OAAO,EAAG;AAC7B,YAAQ,aAAa,OAAO,cAAc;AACzC,YAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;AAAA,IACrD,GAAG,0BAA0B,6BAA6B;AAAA,EAC3D,CAAC;AACD,UAAQ,KAAK,wBAAwB,yBAAyB,OAAO,EAAE,IAAI,MAAM;AAChF,UAAM,YAAY,IAAI;AACtB,QAAI,CAAC,UAAW,QAAO;AACvB,UAAM,QAAQ,UAAU,GAAG,SAAS;AACpC,WAAO,CAAC,GAAG,UAAU,WAAW,EAAE,OAAO,CAAC,CAAC,GAAG,MAAM,IAAI,MAAM,GAAG,EAAE,CAAC,MAAM,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,QAAQ,MAAM,QAAQ;AAAA,EAChH,CAAC;AACD,UAAQ,KAAK,wBAAwB,sBAAsB,OAAO,EAAE,SAAS,MAAM;AAClF,WAAO,yBAAyB,QAAQ;AAAA,EACzC,CAAC;AACD,UAAQ,KAAK,wBAAwB,oBAAoB,CAAC,EAAE,SAAS,MAAM;AAC1E,WAAO,gBAAgB,QAAQ;AAAA,EAChC,CAAC;AACD,UAAQ,KAAK,wBAAwB,qBAAqB,CAAC,EAAE,IAAI,MAAM;AACtE,UAAM,WAAW,gBAAgB,MAAM,YAAY,IAAI,GAAG;AAC1D,QAAI,SAAU,WAAU,QAAQ;AAAA,EACjC,CAAC;AACD,UAAQ,KAAK,wBAAwB,uBAAuB,MAAM;AACjE,gBAAY;AAAA,EACb,CAAC;AACD,SAAO;AACR;AAIA,OAAO,qCAAqC,CAAC;AAC7C,OAAO,2CAA2C,CAAC;AACnD,OAAO,8CAA8C;AACrD,OAAO,qCAAqC,CAAC;AAC7C,OAAO,yCAAyC,CAAC;AACjD,IAAM,YAAY;AAClB,SAAS,mBAAmB;AAC3B,SAAO;AAAA,IACN,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,oBAAoB;AAAA,IACpB,YAAY,CAAC;AAAA,IACb,mBAAmB;AAAA,IACnB,MAAM,CAAC;AAAA,IACP,UAAU,CAAC;AAAA,IACX,qBAAqB;AAAA,IACrB,wBAAwB,CAAC;AAAA,IACzB,mBAAmB;AAAA,IACnB,qBAAqB,kCAAkC;AAAA,EACxD;AACD;AACA,OAAO,SAAS,MAAM,iBAAiB;AACvC,IAAM,uBAAuB,SAAS,CAAC,UAAU;AAChD,kBAAgB,MAAM,SAAS,0BAA0B,wBAAwB,EAAE,MAAM,CAAC;AAC3F,CAAC;AACD,IAAM,2BAA2B,SAAS,CAAC,OAAO,aAAa;AAC9D,kBAAgB,MAAM,SAAS,0BAA0B,4BAA4B;AAAA,IACpF;AAAA,IACA;AAAA,EACD,CAAC;AACF,CAAC;AACD,IAAM,qBAAqB,IAAI,MAAM,OAAO,kCAAkC,EAAE,IAAI,SAAS,MAAM,UAAU;AAC5G,MAAI,SAAS,QAAS,QAAO,OAAO;AACpC,SAAO,OAAO,iCAAiC,IAAI;AACpD,EAAE,CAAC;AAOH,IAAM,kBAAkB,IAAI,MAAM,OAAO,wCAAwC,EAAE,IAAI,SAAS,MAAM,UAAU;AAC/G,MAAI,SAAS,QAAS,QAAO,OAAO;AAAA,WAC3B,SAAS,KAAM,QAAO,OAAO;AACtC,SAAO,OAAO,uCAAuC,IAAI;AAC1D,EAAE,CAAC;AACH,SAAS,kBAAkB;AAC1B,uBAAqB;AAAA,IACpB,GAAG,OAAO,SAAS;AAAA,IACnB,YAAY,mBAAmB;AAAA,IAC/B,mBAAmB,gBAAgB;AAAA,IACnC,MAAM,OAAO;AAAA,IACb,UAAU,OAAO;AAAA,EAClB,CAAC;AACF;AACA,SAAS,mBAAmB,KAAK;AAChC,SAAO,yCAAyC;AAChD,kBAAgB;AACjB;AACA,SAAS,qBAAqB,IAAI;AACjC,SAAO,4CAA4C;AACnD,kBAAgB;AACjB;AACA,IAAM,gBAAgB,IAAI,MAAM,OAAO,SAAS,GAAG;AAAA,EAClD,IAAI,UAAU,UAAU;AACvB,QAAI,aAAa,aAAc,QAAO;AAAA,aAC7B,aAAa,oBAAqB,QAAO,gBAAgB;AAAA,aACzD,aAAa,OAAQ,QAAO,OAAO;AAAA,aACnC,aAAa,WAAY,QAAO,OAAO;AAChD,WAAO,OAAO,SAAS,EAAE,QAAQ;AAAA,EAClC;AAAA,EACA,eAAe,UAAU,UAAU;AAClC,WAAO,SAAS,QAAQ;AACxB,WAAO;AAAA,EACR;AAAA,EACA,IAAI,UAAU,UAAU,OAAO;AAC9B,KAAC,EAAE,GAAG,OAAO,SAAS,EAAE;AACxB,aAAS,QAAQ,IAAI;AACrB,WAAO,SAAS,EAAE,QAAQ,IAAI;AAC9B,WAAO;AAAA,EACR;AACD,CAAC;AAcD,SAAS,oBAAoB,IAAI;AAChC,SAAO,IAAI,QAAQ,CAAC,YAAY;AAC/B,QAAI,cAAc,WAAW;AAC5B,SAAG;AACH,cAAQ;AAAA,IACT;AACA,oBAAgB,MAAM,KAAK,0BAA0B,4BAA4B,CAAC,EAAE,MAAM,MAAM;AAC/F,UAAI,MAAM,WAAW;AACpB,WAAG;AACH,gBAAQ;AAAA,MACT;AAAA,IACD,CAAC;AAAA,EACF,CAAC;AACF;AACA,IAAM,cAAc,CAAC,SAAS;AAC7B,MAAI,CAAC,KAAM;AACX,MAAI,KAAK,WAAW,WAAW,EAAG,QAAO,aAAa,IAAI;AAC1D,MAAI,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI,EAAG,QAAO;AACvD,SAAO,sBAAsB,IAAI;AAClC;AACA,SAAS,aAAa,KAAK;AAC1B,QAAM,OAAO,OAAO;AACpB,MAAI,KAAK,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,IAAI,EAAG;AAC3C,OAAK,KAAK;AAAA,IACT,GAAG;AAAA,IACH,MAAM,YAAY,IAAI,IAAI;AAAA,EAC3B,CAAC;AACD,kBAAgB;AACjB;AACA,SAAS,iBAAiB,QAAQ;AACjC,QAAM,WAAW,OAAO;AACxB,MAAI,SAAS,KAAK,CAAC,MAAM,EAAE,OAAO,OAAO,EAAE,EAAG;AAC9C,WAAS,KAAK;AAAA,IACb,GAAG;AAAA,IACH,MAAM,YAAY,OAAO,IAAI;AAAA,IAC7B,UAAU,OAAO,WAAW,OAAO,SAAS,IAAI,CAAC,WAAW;AAAA,MAC3D,GAAG;AAAA,MACH,MAAM,YAAY,MAAM,IAAI;AAAA,IAC7B,EAAE,IAAI;AAAA,EACP,CAAC;AACD,kBAAgB;AACjB;AACA,SAAS,oBAAoB,UAAU;AACtC,QAAM,WAAW,OAAO;AACxB,QAAM,QAAQ,SAAS,UAAU,CAAC,MAAM,EAAE,OAAO,QAAQ;AACzD,MAAI,UAAU,GAAI;AAClB,WAAS,OAAO,OAAO,CAAC;AACxB,kBAAgB;AACjB;AAUA,SAAS,aAAa,UAAU,CAAC,GAAG;AACnC,QAAM,EAAE,MAAM,MAAM,UAAU,OAAO,SAAS,QAAQ,OAAO,GAAG,SAAS,EAAE,IAAI;AAC/E,MAAI,MAAM;AACT,QAAI,SAAS,oBAAoB;AAChC,YAAM,WAAW,KAAK,QAAQ,OAAO,MAAM;AAC3C,YAAM,WAAW,OAAO,qBAAqB,oBAAoB;AACjE,YAAM,GAAG,QAAQ,yBAAyB,UAAU,IAAI,CAAC,EAAE,EAAE,KAAK,CAAC,aAAa;AAC/E,YAAI,CAAC,SAAS,IAAI;AACjB,gBAAM,MAAM,qBAAqB,QAAQ;AACzC,kBAAQ,IAAI,KAAK,GAAG,IAAI,WAAW;AAAA,QACpC;AAAA,MACD,CAAC;AAAA,IACF,WAAW,cAAc,oBAAoB;AAC5C,YAAM,WAAW,OAAO,4CAA4C;AACpE,aAAO,kBAAkB,aAAa,UAAU,MAAM,MAAM,MAAM;AAAA,IACnE;AAAA,EACD;AACD;AAIA,OAAO,uCAAuC,CAAC;AAC/C,IAAM,uBAAuB,IAAI,MAAM,OAAO,oCAAoC,EAAE,IAAI,UAAU,MAAM,UAAU;AACjH,SAAO,QAAQ,IAAI,UAAU,MAAM,QAAQ;AAC5C,EAAE,CAAC;AAOH,SAAS,aAAa,UAAU;AAC/B,QAAM,YAAY,CAAC;AACnB,SAAO,KAAK,QAAQ,EAAE,QAAQ,CAAC,QAAQ;AACtC,cAAU,GAAG,IAAI,SAAS,GAAG,EAAE;AAAA,EAChC,CAAC;AACD,SAAO;AACR;AACA,SAAS,kBAAkB,UAAU;AACpC,SAAO,wCAAwC,QAAQ;AACxD;AACA,SAAS,yBAAyB,UAAU;AAC3C,UAAQ,qBAAqB,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE,OAAO,YAAY,CAAC,CAAC,KAAK,CAAC,GAAG,QAAQ,IAAI,CAAC,KAAK,OAAO,YAAY;AACxH;AACA,SAAS,kBAAkB,UAAU,eAAe;AACnD,QAAM,WAAW,kBAAkB,QAAQ;AAC3C,MAAI,UAAU;AACb,UAAM,gBAAgB,aAAa,QAAQ,QAAQ;AACnD,QAAI,cAAe,QAAO,KAAK,MAAM,aAAa;AAAA,EACnD;AACA,MAAI,SAAU,QAAO,cAAc,qBAAqB,KAAK,CAAC,SAAS,KAAK,CAAC,EAAE,OAAO,QAAQ,IAAI,CAAC,KAAK,OAAO,YAAY,CAAC,CAAC;AAC7H,SAAO,aAAa,aAAa;AAClC;AACA,SAAS,mBAAmB,UAAU,UAAU;AAC/C,QAAM,WAAW,kBAAkB,QAAQ;AAC3C,MAAI,CAAC,aAAa,QAAQ,QAAQ,EAAG,cAAa,QAAQ,UAAU,KAAK,UAAU,aAAa,QAAQ,CAAC,CAAC;AAC3G;AACA,SAAS,kBAAkB,UAAU,KAAK,OAAO;AAChD,QAAM,WAAW,kBAAkB,QAAQ;AAC3C,QAAM,gBAAgB,aAAa,QAAQ,QAAQ;AACnD,QAAM,sBAAsB,KAAK,MAAM,iBAAiB,IAAI;AAC5D,QAAM,UAAU;AAAA,IACf,GAAG;AAAA,IACH,CAAC,GAAG,GAAG;AAAA,EACR;AACA,eAAa,QAAQ,UAAU,KAAK,UAAU,OAAO,CAAC;AACtD,kBAAgB,MAAM,aAAa,CAAC,cAAc;AACjD,cAAU,QAAQ,CAAC,OAAO,GAAG;AAAA,MAC5B;AAAA,MACA;AAAA,MACA,UAAU,oBAAoB,GAAG;AAAA,MACjC,UAAU;AAAA,MACV,UAAU;AAAA,IACX,CAAC,CAAC;AAAA,EACH,GAAG,4BAA4B,mBAAmB;AACnD;AAIA,IAAI,iBAAgC,SAAS,iBAAiB;AAC7D,kBAAgB,UAAU,IAAI;AAC9B,kBAAgB,aAAa,IAAI;AACjC,kBAAgB,mBAAmB,IAAI;AACvC,kBAAgB,iBAAiB,IAAI;AACrC,kBAAgB,mBAAmB,IAAI;AACvC,kBAAgB,gBAAgB,IAAI;AACpC,kBAAgB,mBAAmB,IAAI;AACvC,kBAAgB,iBAAiB,IAAI;AACrC,kBAAgB,WAAW,IAAI;AAC/B,kBAAgB,cAAc,IAAI;AAClC,kBAAgB,gBAAgB,IAAI;AACpC,kBAAgB,kBAAkB,IAAI;AACtC,kBAAgB,eAAe,IAAI;AACnC,kBAAgB,uBAAuB,IAAI;AAC3C,SAAO;AACR,GAAE,CAAC,CAAC;AAIJ,IAAM,gBAAgB,OAAO,wBAAwB,YAAY;AACjE,IAAM,KAAK;AAAA,EACV,WAAW,IAAI;AACd,kBAAc,KAAK,cAAc,UAAU,EAAE;AAAA,EAC9C;AAAA,EACA,cAAc,IAAI;AACjB,kBAAc,KAAK,cAAc,aAAa,EAAE;AAAA,EACjD;AAAA,EACA,gBAAgB,IAAI;AACnB,kBAAc,KAAK,cAAc,eAAe,EAAE;AAAA,EACnD;AAAA,EACA,eAAe,IAAI;AAClB,WAAO,cAAc,KAAK,cAAc,iBAAiB,EAAE;AAAA,EAC5D;AAAA,EACA,cAAc,IAAI;AACjB,WAAO,cAAc,KAAK,cAAc,gBAAgB,EAAE;AAAA,EAC3D;AAAA,EACA,iBAAiB,IAAI;AACpB,WAAO,cAAc,KAAK,cAAc,mBAAmB,EAAE;AAAA,EAC9D;AAAA,EACA,iBAAiB,IAAI;AACpB,WAAO,cAAc,KAAK,cAAc,mBAAmB,EAAE;AAAA,EAC9D;AAAA,EACA,oBAAoB,IAAI;AACvB,kBAAc,KAAK,cAAc,uBAAuB,EAAE;AAAA,EAC3D;AAAA,EACA,UAAU,IAAI;AACb,WAAO,cAAc,KAAK,cAAc,mBAAmB,EAAE;AAAA,EAC9D;AAAA,EACA,QAAQ,IAAI;AACX,WAAO,cAAc,KAAK,cAAc,iBAAiB,EAAE;AAAA,EAC5D;AACD;AAwEA,IAAM,OAAO;AAAA,EACZ;AAAA,EACA,oBAAoB,kBAAkB,SAAS;AAC9C,WAAO,cAAc,SAAS,cAAc,uBAAuB,kBAAkB,OAAO;AAAA,EAC7F;AACD;AAIA,IAAI,sBAAsB,MAAM;AAAA,EAC/B,YAAY,EAAE,QAAQ,IAAI,GAAG;AAC5B,SAAK,QAAQ,IAAI;AACjB,SAAK,SAAS;AAAA,EACf;AAAA,EACA,IAAI,KAAK;AACR,WAAO;AAAA,MACN,oBAAoB,CAAC,YAAY;AAChC,aAAK,MAAM,KAAK,4BAA4B,sBAAsB,OAAO;AAAA,MAC1E;AAAA,MACA,kBAAkB,CAAC,YAAY;AAC9B,aAAK,MAAM,KAAK,4BAA4B,mBAAmB,OAAO;AAAA,MACvE;AAAA,MACA,oBAAoB,CAAC,YAAY;AAChC,aAAK,MAAM,KAAK,4BAA4B,sBAAsB,OAAO;AAAA,MAC1E;AAAA,MACA,kBAAkB,CAAC,YAAY;AAC9B,aAAK,MAAM,KAAK,4BAA4B,oBAAoB,OAAO;AAAA,MACxE;AAAA,MACA,mBAAmB,CAAC,YAAY;AAC/B,aAAK,MAAM,KAAK,4BAA4B,qBAAqB,OAAO;AAAA,MACzE;AAAA,MACA,oBAAoB,CAAC,YAAY;AAChC,aAAK,MAAM,KAAK,4BAA4B,sBAAsB,OAAO;AAAA,MAC1E;AAAA,MACA,sBAAsB,CAAC,YAAY;AAClC,aAAK,MAAM,KAAK,4BAA4B,wBAAwB,OAAO;AAAA,MAC5E;AAAA,MACA,iBAAiB,CAAC,YAAY;AAC7B,aAAK,MAAM,KAAK,4BAA4B,kBAAkB,OAAO;AAAA,MACtE;AAAA,MACA,mBAAmB,CAAC,YAAY;AAC/B,aAAK,MAAM,KAAK,4BAA4B,qBAAqB,OAAO;AAAA,MACzE;AAAA,IACD;AAAA,EACD;AAAA,EACA,sBAAsB,UAAU;AAC/B,QAAI,cAAc,oBAAqB;AACvC,UAAM,YAAY,oBAAoB,EAAE,KAAK,CAAC,MAAM,EAAE,gBAAgB,KAAK,OAAO,WAAW,WAAW;AACxG,QAAI,WAAW,IAAI;AAClB,UAAI,UAAU;AACb,cAAM,OAAO;AAAA,UACZ,SAAS,WAAW;AAAA,UACpB,SAAS;AAAA,UACT,SAAS,QAAQ;AAAA,UACjB;AAAA,QACD;AACA,sBAAc,SAAS,cAAc,mBAAmB,GAAG,IAAI;AAAA,MAChE,MAAO,eAAc,SAAS,cAAc,iBAAiB;AAC7D,WAAK,MAAM,SAAS,wBAAwB,sBAAsB;AAAA,QACjE,aAAa,UAAU;AAAA,QACvB,QAAQ,KAAK;AAAA,MACd,CAAC;AAAA,IACF;AAAA,EACD;AAAA,EACA,aAAa,SAAS;AACrB,SAAK,MAAM,SAAS,wBAAwB,eAAe;AAAA,MAC1D,WAAW;AAAA,MACX,QAAQ,KAAK;AAAA,IACd,CAAC;AACD,QAAI,KAAK,OAAO,WAAW,SAAU,oBAAmB,QAAQ,IAAI,KAAK,OAAO,WAAW,QAAQ;AAAA,EACpG;AAAA,EACA,kBAAkB,aAAa;AAC9B,QAAI,cAAc,oBAAqB;AACvC,SAAK,MAAM,SAAS,wBAAwB,qBAAqB;AAAA,MAChE;AAAA,MACA,QAAQ,KAAK;AAAA,IACd,CAAC;AAAA,EACF;AAAA,EACA,mBAAmB,aAAa;AAC/B,QAAI,cAAc,oBAAqB;AACvC,SAAK,MAAM,SAAS,wBAAwB,sBAAsB;AAAA,MACjE;AAAA,MACA,QAAQ,KAAK;AAAA,IACd,CAAC;AAAA,EACF;AAAA,EACA,oBAAoB,aAAa,QAAQ;AACxC,SAAK,MAAM,SAAS,wBAAwB,8BAA8B;AAAA,MACzE;AAAA,MACA;AAAA,MACA,QAAQ,KAAK;AAAA,IACd,CAAC;AAAA,EACF;AAAA,EACA,mBAAmB,SAAS;AAC3B,WAAO,KAAK,MAAM,SAAS,4BAA4B,sBAAsB,OAAO;AAAA,EACrF;AAAA,EACA,MAAM;AACL,QAAI,cAAc,oBAAqB,QAAO;AAC9C,WAAO,KAAK,IAAI;AAAA,EACjB;AAAA,EACA,iBAAiB,SAAS;AACzB,SAAK,MAAM,SAAS,wBAAwB,sBAAsB;AAAA,MACjE;AAAA,MACA,QAAQ,KAAK;AAAA,IACd,CAAC;AAAA,EACF;AAAA,EACA,iBAAiB,SAAS;AACzB,QAAI,cAAc,oBAAqB;AACvC,SAAK,MAAM,SAAS,wBAAwB,sBAAsB;AAAA,MACjE;AAAA,MACA,QAAQ,KAAK;AAAA,IACd,CAAC;AAAA,EACF;AAAA,EACA,YAAY,UAAU;AACrB,WAAO,kBAAkB,YAAY,KAAK,OAAO,WAAW,IAAI,KAAK,OAAO,WAAW,QAAQ;AAAA,EAChG;AAAA,EACA,sBAAsB,KAAK;AAC1B,WAAO,KAAK,MAAM,SAAS,wBAAwB,yBAAyB,EAAE,IAAI,CAAC;AAAA,EACpF;AAAA,EACA,mBAAmB,UAAU;AAC5B,WAAO,KAAK,MAAM,SAAS,wBAAwB,sBAAsB,EAAE,SAAS,CAAC;AAAA,EACtF;AAAA,EACA,iBAAiB,UAAU;AAC1B,WAAO,KAAK,MAAM,SAAS,wBAAwB,oBAAoB,EAAE,SAAS,CAAC;AAAA,EACpF;AAAA,EACA,iBAAiB,UAAU;AAC1B,UAAM,MAAM,SAAS;AACrB,WAAO,KAAK,MAAM,SAAS,wBAAwB,qBAAqB,EAAE,IAAI,CAAC;AAAA,EAChF;AAAA,EACA,qBAAqB;AACpB,WAAO,KAAK,MAAM,SAAS,wBAAwB,qBAAqB;AAAA,EACzE;AACD;AAIA,IAAM,oBAAoB;AA+D1B,IAAM,YAAY;AAClB,IAAM,WAAW;AACjB,IAAM,oBAAoB;AAC1B,IAAM,MAAM;AAsCZ,IAAM,WAAW;AAAA,EAChB,CAAC,SAAS,GAAG;AAAA,EACb,CAAC,GAAG,GAAG;AAAA,EACP,CAAC,QAAQ,GAAG;AAAA,EACZ,CAAC,iBAAiB,GAAG;AACtB;AACA,IAAM,mBAAmB,OAAO,QAAQ,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,MAAM;AAC/E,MAAI,KAAK,IAAI;AACb,SAAO;AACR,GAAG,CAAC,CAAC;AAyxBL,OAAO,iDAAiE,oBAAI,IAAI;AAChF,SAAS,oBAAoB,kBAAkB,SAAS;AACvD,SAAO,KAAK,oBAAoB,kBAAkB,OAAO;AAC1D;AACA,SAAS,0BAA0B,QAAQ,KAAK;AAC/C,QAAM,CAAC,kBAAkB,OAAO,IAAI;AACpC,MAAI,iBAAiB,QAAQ,IAAK;AAClC,QAAM,MAAM,IAAI,kBAAkB;AAAA,IACjC,QAAQ;AAAA,MACP;AAAA,MACA,YAAY;AAAA,IACb;AAAA,IACA,KAAK;AAAA,EACN,CAAC;AACD,MAAI,iBAAiB,gBAAgB,OAAQ,KAAI,GAAG,mBAAmB,CAAC,YAAY;AACnF,QAAI,mBAAmB,QAAQ,WAAW;AAAA,EAC3C,CAAC;AACD,UAAQ,GAAG;AACZ;AAIA,SAAS,uBAAuB,KAAK,SAAS;AAC7C,MAAI,OAAO,6CAA6C,IAAI,GAAG,EAAG;AAClE,MAAI,cAAc,uBAAuB,CAAC,SAAS,oBAAqB;AACxE,SAAO,6CAA6C,IAAI,GAAG;AAC3D,uBAAqB,QAAQ,CAAC,WAAW;AACxC,8BAA0B,QAAQ,GAAG;AAAA,EACtC,CAAC;AACF;AAIA,IAAM,aAAa;AACnB,IAAM,kBAAkB;AACxB,OAAO,eAAe,MAAM;AAAA,EAC3B,cAAc;AAAA,EACd,QAAQ,CAAC;AACV;AACA,OAAO,UAAU,MAAM,CAAC;AACxB,IAAM,qBAAqB,IAAI,MAAM,OAAO,eAAe,GAAG,EAAE,IAAI,UAAU,UAAU;AACvF,SAAO,OAAO,eAAe,EAAE,QAAQ;AACxC,EAAE,CAAC;AACH,IAAM,iBAAiB,IAAI,MAAM,OAAO,UAAU,GAAG,EAAE,IAAI,UAAU,UAAU;AAC9E,MAAI,aAAa,QAAS,QAAO,OAAO,UAAU;AACnD,EAAE,CAAC;AAIH,SAAS,UAAU,QAAQ;AAC1B,QAAM,YAA4B,oBAAI,IAAI;AAC1C,UAAQ,QAAQ,UAAU,KAAK,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,UAAU,IAAI,EAAE,IAAI,KAAK,UAAU,IAAI,EAAE,MAAM,CAAC,CAAC;AACpG;AACA,SAAS,aAAa,QAAQ;AAC7B,SAAO,OAAO,IAAI,CAAC,SAAS;AAC3B,QAAI,EAAE,MAAM,MAAM,UAAU,KAAK,IAAI;AACrC,QAAI,UAAU,OAAQ,YAAW,aAAa,QAAQ;AACtD,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EACD,CAAC;AACF;AACA,SAAS,mBAAmB,OAAO;AAClC,MAAI,OAAO;AACV,UAAM,EAAE,UAAU,MAAM,MAAM,MAAM,MAAM,SAAS,QAAQ,MAAM,IAAI;AACrE,WAAO;AAAA,MACN;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,SAAS,aAAa,OAAO;AAAA,IAC9B;AAAA,EACD;AACA,SAAO;AACR;AACA,SAAS,oBAAoB,WAAW,mBAAmB;AAC1D,WAAS,OAAO;AACf,UAAM,SAAS,UAAU,KAAK,OAAO,iBAAiB;AACtD,UAAM,eAAe,mBAAmB,QAAQ,aAAa,KAAK;AAClE,UAAM,SAAS,aAAa,UAAU,MAAM,CAAC;AAC7C,UAAM,IAAI,QAAQ;AAClB,YAAQ,OAAO,MAAM;AAAA,IAAC;AACtB,WAAO,eAAe,IAAI;AAAA,MACzB,cAAc,eAAe,UAAU,YAAY,IAAI,CAAC;AAAA,MACxD,QAAQ,UAAU,MAAM;AAAA,IACzB;AACA,WAAO,UAAU,IAAI;AACrB,YAAQ,OAAO;AAAA,EAChB;AACA,OAAK;AACL,OAAK,GAAG,iBAAiB,SAAS,MAAM;AACvC,QAAI,kBAAkB,OAAO,QAAQ,UAAU,IAAK;AACpD,SAAK;AACL,QAAI,cAAc,oBAAqB;AACvC,oBAAgB,MAAM,SAAS,0BAA0B,qBAAqB,EAAE,OAAO,OAAO,eAAe,EAAE,CAAC;AAAA,EACjH,GAAG,GAAG,CAAC;AACR;AAIA,SAAS,kBAAkB,SAAS;AACnC,SAAO;AAAA,IACN,MAAM,iBAAiB,SAAS;AAC/B,YAAM,WAAW;AAAA,QAChB,GAAG;AAAA,QACH,KAAK,gBAAgB,MAAM;AAAA,QAC3B,WAAW,CAAC;AAAA,MACb;AACA,YAAM,IAAI,QAAQ,CAAC,YAAY;AAC9B,gBAAQ,aAAa,OAAO,cAAc;AACzC,gBAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,OAAO,GAAG,QAAQ,CAAC,CAAC;AACrD,kBAAQ;AAAA,QACT,GAAG,4BAA4B,kBAAkB;AAAA,MAClD,CAAC;AACD,aAAO,SAAS;AAAA,IACjB;AAAA,IACA,MAAM,kBAAkB,SAAS;AAChC,YAAM,WAAW;AAAA,QAChB,GAAG;AAAA,QACH,KAAK,gBAAgB,MAAM;AAAA,QAC3B,OAAO;AAAA,MACR;AACA,YAAM,MAAM,EAAE,YAAY,oBAAoB,QAAQ,WAAW,GAAG;AACpE,YAAM,IAAI,QAAQ,CAAC,YAAY;AAC9B,gBAAQ,aAAa,OAAO,cAAc;AACzC,gBAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,OAAO,GAAG,UAAU,GAAG,CAAC,CAAC;AAC1D,kBAAQ;AAAA,QACT,GAAG,4BAA4B,mBAAmB;AAAA,MACnD,CAAC;AACD,aAAO,SAAS;AAAA,IACjB;AAAA,IACA,mBAAmB,SAAS;AAC3B,YAAM,gBAAgB,IAAI,YAAY;AACtC,YAAM,WAAW;AAAA,QAChB,GAAG;AAAA,QACH,KAAK,gBAAgB,MAAM;AAAA,QAC3B,KAAK,CAAC,KAAK,OAAO,QAAQ,MAAM,QAAQ,QAAQ,MAAM,OAAO,OAAO;AACnE,wBAAc,IAAI,KAAK,MAAM,OAAO,MAAM,cAAc,yBAAyB,QAAQ,KAAK,CAAC;AAAA,QAChG;AAAA,MACD;AACA,cAAQ,aAAa,CAAC,cAAc;AACnC,kBAAU,QAAQ,CAAC,OAAO,GAAG,QAAQ,CAAC;AAAA,MACvC,GAAG,4BAA4B,oBAAoB;AAAA,IACpD;AAAA,IACA,mBAAmB,aAAa;AAC/B,YAAM,YAAY,aAAa,WAAW;AAC1C,cAAQ,SAAS,wBAAwB,sBAAsB;AAAA,QAC9D;AAAA,QACA,QAAQ;AAAA,UACP,YAAY,UAAU;AAAA,UACtB,SAAS,OAAO,CAAC;AAAA,QAClB;AAAA,MACD,CAAC;AAAA,IACF;AAAA,IACA,4BAA4B;AAC3B,aAAO,4BAA4B;AAAA,IACpC;AAAA,IACA,kCAAkC;AACjC,aAAO,kCAAkC;AAAA,IAC1C;AAAA,IACA,uBAAuB,IAAI;AAC1B,YAAM,WAAW,qBAAqB,gBAAgB,OAAO,EAAE;AAC/D,UAAI,SAAU,QAAO,EAAE,OAAO,UAAU,SAAS,cAAc,SAAS,OAAO,SAAS,IAAI,SAAS,KAAK,SAAS;AAAA,IACpH;AAAA,IACA,kBAAkB,IAAI;AACrB,aAAO,kBAAkB,EAAE,GAAG,CAAC;AAAA,IAChC;AAAA,IACA;AAAA,IACA,iBAAiB;AAAA,IACjB,UAAU,IAAI,SAAS;AACtB,YAAM,YAAY,mBAAmB,MAAM,KAAK,CAAC,WAAW,OAAO,OAAO,EAAE;AAC5E,UAAI,WAAW;AACd,6BAAqB,EAAE;AACvB,2BAAmB,SAAS;AAC5B,4BAAoB,WAAW,eAAe;AAC9C,iCAAyB;AACzB,+BAAuB,UAAU,KAAK,OAAO;AAAA,MAC9C;AAAA,IACD;AAAA,IACA,WAAW,YAAY;AACtB,YAAM,WAAW,qBAAqB,gBAAgB,OAAO,UAAU;AACvE,UAAI,UAAU;AACb,cAAM,CAAC,EAAE,IAAI,qCAAqC,QAAQ;AAC1D,YAAI,GAAI,QAAO,sCAAsC;AAAA,MACtD;AAAA,IACD;AAAA,IACA,qBAAqB,UAAU,KAAK,OAAO;AAC1C,wBAAkB,UAAU,KAAK,KAAK;AAAA,IACvC;AAAA,IACA,kBAAkB,UAAU;AAC3B,aAAO;AAAA,QACN,SAAS,yBAAyB,QAAQ;AAAA,QAC1C,QAAQ,kBAAkB,QAAQ;AAAA,MACnC;AAAA,IACD;AAAA,EACD;AACD;AAIA,OAAO,yBAAyB,EAAE,oBAAoB,MAAM;AAa5D,IAAM,QAAQ,uBAAuB;AACrC,OAAO,iCAAiC;AAAA,EACvC;AAAA,EACA,IAAI,QAAQ;AACX,WAAO;AAAA,MACN,GAAG;AAAA,MACH,mBAAmB,gBAAgB;AAAA,MACnC,iBAAiB,gBAAgB;AAAA,MACjC,YAAY,mBAAmB;AAAA,IAChC;AAAA,EACD;AAAA,EACA,KAAK,kBAAkB,KAAK;AAC7B;AACA,IAAM,kBAAkB,OAAO;AAI/B,IAAI,wBAAwCQ,YAAW,EAAE,4FAA4F,CAAC,SAAS,WAAW;AACzK,GAAC,SAAS,MAAM;AAKf,QAAI,UAAU;AAAA,MACb,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,MAAM;AAAA,MACN,MAAM;AAAA,MACN,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MA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AK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,IACD;AAMA,QAAI,YAAY;AAAA,MACf,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM,CAAC;AAAA,MACP,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM,CAAC;AAAA,MACP,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM,CAAC;AAAA,MACP,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,MACN;AAAA,MACA,MAAM;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KA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", + "names": ["hooks", "hooks", "hook", "hook", "hooks", "clearTimeout", "setTimeout", "__create", "__defProp", "__getOwnPropDesc", "__getOwnPropNames", "__getProtoOf", "__hasOwnProp", "__commonJS", "__copyProps", "__toESM", "__commonJS", "__toESM"] } diff --git a/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js b/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js index 62b46770..9cfb3bb5 100644 --- a/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js +++ b/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js @@ -1,295 +1,8258 @@ import { - DefaultMagicKeysAliasMap, - StorageSerializers, - TransitionPresets, - assert, - breakpointsAntDesign, - breakpointsBootstrapV5, - breakpointsElement, - breakpointsMasterCss, - breakpointsPrimeFlex, - breakpointsQuasar, - breakpointsSematic, - breakpointsTailwind, - breakpointsVuetify, - breakpointsVuetifyV2, - breakpointsVuetifyV3, - bypassFilter, - camelize, - clamp, - cloneFnJSON, - computedAsync, - computedEager, - computedInject, - computedWithControl, - containsProp, - controlledRef, - createEventHook, - createFetch, - createFilterWrapper, - createGlobalState, - createInjectionState, - createRef, - createReusableTemplate, - createSharedComposable, - createSingletonPromise, - createTemplatePromise, - createUnrefFn, - customStorageEventName, - debounceFilter, - defaultDocument, - defaultLocation, - defaultNavigator, - defaultWindow, - executeTransition, - extendRef, - formatDate, - formatTimeAgo, - get, - getLifeCycleTarget, - getSSRHandler, - hasOwn, - hyphenate, - identity, - increaseWithUnit, - injectLocal, - invoke, - isClient, - isDef, - isDefined, - isIOS, - isObject, - isWorker, - makeDestructurable, - mapGamepadToXbox360Controller, - noop, - normalizeDate, - notNullish, - now, - objectEntries, - objectOmit, - objectPick, - onClickOutside, - onElementRemoval, - onKeyDown, - onKeyPressed, - onKeyStroke, - onKeyUp, - onLongPress, - onStartTyping, - pausableFilter, - promiseTimeout, - provideLocal, - provideSSRWidth, - pxValue, - rand, - reactify, - reactifyObject, - reactiveComputed, - reactiveOmit, - reactivePick, - refAutoReset, - refDebounced, - refDefault, - refThrottled, - refWithControl, - resolveRef, - resolveUnref, - set, - setSSRHandler, - syncRef, - syncRefs, - templateRef, - throttleFilter, - timestamp, - toArray, - toReactive, + Fragment, + TransitionGroup, + computed, + customRef, + defineComponent, + effectScope, + getCurrentInstance, + getCurrentScope, + h, + hasInjectionContext, + inject, + isReactive, + isReadonly, + isRef, + markRaw, + nextTick, + onBeforeMount, + onBeforeUnmount, + onBeforeUpdate, + onMounted, + onScopeDispose, + onUnmounted, + onUpdated, + provide, + reactive, + readonly, + ref, + shallowReactive, + shallowReadonly, + shallowRef, + toRaw, toRef, toRefs, toValue, - tryOnBeforeMount, - tryOnBeforeUnmount, - tryOnMounted, - tryOnScopeDispose, - tryOnUnmounted, - unrefElement, - until, - useActiveElement, - useAnimate, - useArrayDifference, - useArrayEvery, - useArrayFilter, - useArrayFind, - useArrayFindIndex, - useArrayFindLast, - useArrayIncludes, - useArrayJoin, - useArrayMap, - useArrayReduce, - useArraySome, - useArrayUnique, - useAsyncQueue, - useAsyncState, - useBase64, - useBattery, - useBluetooth, - useBreakpoints, - useBroadcastChannel, - useBrowserLocation, - useCached, - useClipboard, - useClipboardItems, - useCloned, - useColorMode, - useConfirmDialog, - useCountdown, - useCounter, - useCssVar, - useCurrentElement, - useCycleList, - useDark, - useDateFormat, - 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, - useParentElement, - usePerformanceObserver, - usePermission, - usePointer, - usePointerLock, - usePointerSwipe, - usePreferredColorScheme, - usePreferredContrast, - usePreferredDark, - usePreferredLanguages, - usePreferredReducedMotion, - usePreferredReducedTransparency, - usePrevious, - useRafFn, - useRefHistory, - useResizeObserver, - useSSRWidth, - useScreenOrientation, - useScreenSafeArea, - useScriptTag, - useScroll, - useScrollLock, - useSessionStorage, - useShare, - useSorted, - useSpeechRecognition, - useSpeechSynthesis, - useStepper, - useStorage, - useStorageAsync, - useStyleTag, - useSupported, - useSwipe, - useTemplateRefsList, - useTextDirection, - useTextSelection, - useTextareaAutosize, - 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, - watchDeep, - watchIgnorable, - watchImmediate, - watchOnce, - watchPausable, - watchThrottled, - watchTriggerable, - watchWithFilter, - whenever -} from "./chunk-P2XGSYO7.js"; -import "./chunk-HVR2FF6M.js"; + unref, + watch, + watchEffect +} from "./chunk-TICTUL3T.js"; + +// node_modules/@vueuse/shared/dist/index.js +function computedEager(fn, options) { + var _options$flush; + const result = shallowRef(); + watchEffect(() => { + result.value = fn(); + }, { + ...options, + flush: (_options$flush = options === null || options === void 0 ? void 0 : options.flush) !== null && _options$flush !== void 0 ? _options$flush : "sync" + }); + return readonly(result); +} +var eagerComputed = computedEager; +function computedWithControl(source, fn, options = {}) { + let v = void 0; + let track; + let trigger; + let dirty = true; + const update = () => { + dirty = true; + trigger(); + }; + watch(source, update, { + flush: "sync", + ...options + }); + const get$1 = typeof fn === "function" ? fn : fn.get; + const set$1 = typeof fn === "function" ? void 0 : fn.set; + const result = customRef((_track, _trigger) => { + track = _track; + trigger = _trigger; + return { + get() { + if (dirty) { + v = get$1(v); + dirty = false; + } + track(); + return v; + }, + set(v$1) { + set$1 === null || set$1 === void 0 || set$1(v$1); + } + }; + }); + result.trigger = update; + return result; +} +var controlledComputed = computedWithControl; +function tryOnScopeDispose(fn, failSilently) { + if (getCurrentScope()) { + onScopeDispose(fn, failSilently); + return true; + } + return false; +} +function createEventHook() { + const fns = /* @__PURE__ */ new Set(); + const off = (fn) => { + fns.delete(fn); + }; + const clear = () => { + fns.clear(); + }; + const on = (fn) => { + fns.add(fn); + const offFn = () => off(fn); + tryOnScopeDispose(offFn); + return { off: offFn }; + }; + const trigger = (...args) => { + return Promise.all(Array.from(fns).map((fn) => fn(...args))); + }; + return { + on, + off, + trigger, + clear + }; +} +function createGlobalState(stateFactory) { + let initialized = false; + let state; + const scope = effectScope(true); + return ((...args) => { + if (!initialized) { + state = scope.run(() => stateFactory(...args)); + initialized = true; + } + return state; + }); +} +var localProvidedStateMap = /* @__PURE__ */ new WeakMap(); +var injectLocal = (...args) => { + var _getCurrentInstance; + const key = args[0]; + const instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy; + const owner = instance !== null && instance !== void 0 ? instance : getCurrentScope(); + if (owner == null && !hasInjectionContext()) throw new Error("injectLocal must be called in setup"); + if (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key]; + return inject(...args); +}; +function provideLocal(key, value) { + var _getCurrentInstance; + const instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy; + const owner = instance !== null && instance !== void 0 ? instance : getCurrentScope(); + if (owner == null) throw new Error("provideLocal must be called in setup"); + if (!localProvidedStateMap.has(owner)) localProvidedStateMap.set(owner, /* @__PURE__ */ Object.create(null)); + const localProvidedState = localProvidedStateMap.get(owner); + localProvidedState[key] = value; + return provide(key, value); +} +function createInjectionState(composable, options) { + const key = (options === null || options === void 0 ? void 0 : options.injectionKey) || Symbol(composable.name || "InjectionState"); + const defaultValue = options === null || options === void 0 ? void 0 : options.defaultValue; + const useProvidingState = (...args) => { + const state = composable(...args); + provideLocal(key, state); + return state; + }; + const useInjectedState = () => injectLocal(key, defaultValue); + return [useProvidingState, useInjectedState]; +} +function createRef(value, deep) { + if (deep === true) return ref(value); + else return shallowRef(value); +} +var isClient = typeof window !== "undefined" && typeof document !== "undefined"; +var isWorker = typeof WorkerGlobalScope !== "undefined" && globalThis instanceof WorkerGlobalScope; +var isDef = (val) => typeof val !== "undefined"; +var notNullish = (val) => val != null; +var assert = (condition, ...infos) => { + if (!condition) console.warn(...infos); +}; +var toString = Object.prototype.toString; +var isObject = (val) => toString.call(val) === "[object Object]"; +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 hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key); +var isIOS = getIsIOS(); +function getIsIOS() { + var _window, _window2, _window3; + return isClient && ((_window = window) === null || _window === void 0 || (_window = _window.navigator) === null || _window === void 0 ? void 0 : _window.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.navigator) === null || _window2 === void 0 ? void 0 : _window2.maxTouchPoints) > 2 && /iPad|Macintosh/.test((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.navigator.userAgent)); +} +function toRef2(...args) { + if (args.length !== 1) return toRef(...args); + const r = args[0]; + return typeof r === "function" ? readonly(customRef(() => ({ + get: r, + set: noop + }))) : ref(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 = (invoke$1) => { + return invoke$1(); +}; +function debounceFilter(ms, options = {}) { + let timer; + let maxTimer; + let lastRejector = noop; + const _clearTimeout = (timer$1) => { + clearTimeout(timer$1); + lastRejector(); + lastRejector = noop; + }; + let lastInvoker; + const filter = (invoke$1) => { + const duration = toValue(ms); + const maxDuration = toValue(options.maxWait); + if (timer) _clearTimeout(timer); + if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) { + if (maxTimer) { + _clearTimeout(maxTimer); + maxTimer = void 0; + } + return Promise.resolve(invoke$1()); + } + return new Promise((resolve, reject) => { + lastRejector = options.rejectOnCancel ? reject : resolve; + lastInvoker = invoke$1; + if (maxDuration && !maxTimer) maxTimer = setTimeout(() => { + if (timer) _clearTimeout(timer); + maxTimer = void 0; + resolve(lastInvoker()); + }, maxDuration); + timer = setTimeout(() => { + if (maxTimer) _clearTimeout(maxTimer); + maxTimer = void 0; + resolve(invoke$1()); + }, duration); + }); + }; + return filter; +} +function throttleFilter(...args) { + let lastExec = 0; + let timer; + let isLeading = true; + let lastRejector = noop; + let lastValue; + let ms; + let trailing; + let leading; + let rejectOnCancel; + if (!isRef(args[0]) && typeof args[0] === "object") ({ delay: ms, trailing = true, leading = true, rejectOnCancel = false } = args[0]); + else [ms, trailing = true, leading = true, rejectOnCancel = false] = args; + const clear = () => { + if (timer) { + clearTimeout(timer); + timer = void 0; + lastRejector(); + lastRejector = noop; + } + }; + const filter = (_invoke) => { + const duration = toValue(ms); + const elapsed = Date.now() - lastExec; + const invoke$1 = () => { + return lastValue = _invoke(); + }; + clear(); + if (duration <= 0) { + lastExec = Date.now(); + return invoke$1(); + } + if (elapsed > duration) { + lastExec = Date.now(); + if (leading || !isLeading) invoke$1(); + } else if (trailing) lastValue = new Promise((resolve, reject) => { + lastRejector = rejectOnCancel ? reject : resolve; + timer = setTimeout(() => { + lastExec = Date.now(); + isLeading = true; + resolve(invoke$1()); + clear(); + }, Math.max(0, duration - elapsed)); + }); + if (!leading && !timer) timer = setTimeout(() => isLeading = true, duration); + isLeading = false; + return lastValue; + }; + return filter; +} +function pausableFilter(extendFilter = bypassFilter, options = {}) { + const { initialState = "active" } = options; + const isActive = toRef2(initialState === "active"); + 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 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 _target$match; + if (typeof target === "number") return target + delta; + const value = ((_target$match = target.match(/^-?\d+\.?\d*/)) === null || _target$match === void 0 ? void 0 : _target$match[0]) || ""; + const unit = target.slice(value.length); + const result = Number.parseFloat(value) + delta; + if (Number.isNaN(result)) return target; + return result + unit; +} +function pxValue(px) { + return px.endsWith("rem") ? Number.parseFloat(px) * 16 : Number.parseFloat(px); +} +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 objectOmit(obj, keys2, omitUndefined = false) { + return Object.fromEntries(Object.entries(obj).filter(([key, value]) => { + return (!omitUndefined || value !== void 0) && !keys2.includes(key); + })); +} +function objectEntries(obj) { + return Object.entries(obj); +} +function toArray(value) { + return Array.isArray(value) ? value : [value]; +} +function cacheStringFunction(fn) { + const cache = /* @__PURE__ */ Object.create(null); + return ((str) => { + return cache[str] || (cache[str] = fn(str)); + }); +} +var hyphenateRE = /\B([A-Z])/g; +var hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase()); +var camelizeRE = /-(\w)/g; +var camelize = cacheStringFunction((str) => { + return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); +}); +function getLifeCycleTarget(target) { + return target || getCurrentInstance(); +} +function createSharedComposable(composable) { + if (!isClient) return 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 (!scope) { + scope = effectScope(true); + state = scope.run(() => composable(...args)); + } + tryOnScopeDispose(dispose); + return state; + }); +} +function extendRef(ref$1, extend, { enumerable = false, unwrap = true } = {}) { + for (const [key, value] of Object.entries(extend)) { + if (key === "value") continue; + if (isRef(value) && unwrap) Object.defineProperty(ref$1, key, { + get() { + return value.value; + }, + set(v) { + value.value = v; + }, + enumerable + }); + else Object.defineProperty(ref$1, key, { + value, + enumerable + }); + } + return ref$1; +} +function get(obj, key) { + if (key == null) return unref(obj); + return unref(obj)[key]; +} +function isDefined(v) { + return unref(v) != null; +} +function makeDestructurable(obj, arr) { + if (typeof Symbol !== "undefined") { + const clone = { ...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 || options === void 0 ? void 0 : options.computedGetter) === false ? unref : toValue; + return function(...args) { + return computed(() => fn.apply(this, args.map((i) => unrefFn(i)))); + }; +} +var createReactiveFn = reactify; +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); + return reactive(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 + }; + } + })); +} +function reactiveComputed(fn) { + return toReactive(computed(fn)); +} +function reactiveOmit(obj, ...keys2) { + const flatKeys = keys2.flat(); + const predicate = flatKeys[0]; + return reactiveComputed(() => typeof predicate === "function" ? Object.fromEntries(Object.entries(toRefs(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs(obj)).filter((e) => !flatKeys.includes(e[0])))); +} +function reactivePick(obj, ...keys2) { + const flatKeys = keys2.flat(); + const predicate = flatKeys[0]; + return reactiveComputed(() => typeof predicate === "function" ? Object.fromEntries(Object.entries(toRefs(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef2(obj, k)]))); +} +function refAutoReset(defaultValue, afterMs = 1e4) { + return customRef((track, trigger) => { + let value = toValue(defaultValue); + let timer; + const resetAfter = () => setTimeout(() => { + value = toValue(defaultValue); + trigger(); + }, toValue(afterMs)); + tryOnScopeDispose(() => { + clearTimeout(timer); + }); + return { + get() { + track(); + return value; + }, + set(newValue) { + value = newValue; + trigger(); + clearTimeout(timer); + timer = resetAfter(); + } + }; + }); +} +var autoResetRef = refAutoReset; +function useDebounceFn(fn, ms = 200, options = {}) { + return createFilterWrapper(debounceFilter(ms, options), fn); +} +function refDebounced(value, ms = 200, options = {}) { + const debounced = ref(toValue(value)); + const updater = useDebounceFn(() => { + debounced.value = value.value; + }, ms, options); + watch(value, () => updater()); + return shallowReadonly(debounced); +} +var debouncedRef = refDebounced; +var useDebounce = refDebounced; +function refDefault(source, defaultValue) { + return computed({ + get() { + var _source$value; + return (_source$value = source.value) !== null && _source$value !== void 0 ? _source$value : defaultValue; + }, + set(value) { + source.value = value; + } + }); +} +function refManualReset(defaultValue) { + let value = toValue(defaultValue); + let trigger; + const reset = () => { + value = toValue(defaultValue); + trigger(); + }; + const refValue = customRef((track, _trigger) => { + trigger = _trigger; + return { + get() { + track(); + return value; + }, + set(newValue) { + value = newValue; + trigger(); + } + }; + }); + refValue.reset = reset; + return refValue; +} +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(toValue(value)); + const updater = useThrottleFn(() => { + throttled.value = value.value; + }, delay, trailing, leading); + watch(value, () => updater()); + return throttled; +} +var throttledRef = refThrottled; +var useThrottle = refThrottled; +function refWithControl(initial, options = {}) { + let source = initial; + let track; + let trigger; + const ref$1 = customRef((_track, _trigger) => { + track = _track; + trigger = _trigger; + return { + get() { + return get$1(); + }, + set(v) { + set$1(v); + } + }; + }); + function get$1(tracking = true) { + if (tracking) track(); + return source; + } + function set$1(value, triggering = true) { + var _options$onBeforeChan, _options$onChanged; + if (value === source) return; + const old = source; + if (((_options$onBeforeChan = options.onBeforeChange) === null || _options$onBeforeChan === void 0 ? void 0 : _options$onBeforeChan.call(options, value, old)) === false) return; + source = value; + (_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, value, old); + if (triggering) trigger(); + } + const untrackedGet = () => get$1(false); + const silentSet = (v) => set$1(v, false); + const peek = () => get$1(false); + const lay = (v) => set$1(v, false); + return extendRef(ref$1, { + get: get$1, + set: set$1, + untrackedGet, + silentSet, + peek, + lay + }, { enumerable: true }); +} +var controlledRef = refWithControl; +function set(...args) { + if (args.length === 2) { + const [ref$1, value] = args; + ref$1.value = value; + } + if (args.length === 3) { + const [target, key, value] = args; + target[key] = value; + } +} +function watchWithFilter(source, cb, options = {}) { + const { eventFilter = bypassFilter, ...watchOptions } = options; + return watch(source, createFilterWrapper(eventFilter, cb), watchOptions); +} +function watchPausable(source, cb, options = {}) { + const { eventFilter: filter, initialState = "active", ...watchOptions } = options; + const { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState }); + return { + stop: watchWithFilter(source, cb, { + ...watchOptions, + eventFilter + }), + pause, + resume, + isActive + }; +} +var pausableWatch = watchPausable; +function syncRef(left, right, ...[options]) { + const { flush = "sync", deep = false, immediate = true, direction = "both", transform = {} } = options || {}; + const watchers = []; + const transformLTR = "ltr" in transform && transform.ltr || ((v) => v); + const transformRTL = "rtl" in transform && transform.rtl || ((v) => v); + if (direction === "both" || direction === "ltr") watchers.push(pausableWatch(left, (newValue) => { + watchers.forEach((w) => w.pause()); + right.value = transformLTR(newValue); + watchers.forEach((w) => w.resume()); + }, { + flush, + deep, + immediate + })); + if (direction === "both" || direction === "rtl") watchers.push(pausableWatch(right, (newValue) => { + watchers.forEach((w) => w.pause()); + left.value = transformRTL(newValue); + watchers.forEach((w) => w.resume()); + }, { + flush, + deep, + immediate + })); + const stop = () => { + watchers.forEach((w) => w.stop()); + }; + return stop; +} +function syncRefs(source, targets, options = {}) { + const { flush = "sync", deep = false, immediate = true } = options; + const targetsArray = toArray(targets); + return watch(source, (newValue) => targetsArray.forEach((target) => target.value = newValue), { + flush, + deep, + immediate + }); +} +function toRefs2(objectRef, options = {}) { + if (!isRef(objectRef)) return toRefs(objectRef); + const result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {}; + for (const key in objectRef.value) result[key] = customRef(() => ({ + get() { + return objectRef.value[key]; + }, + set(v) { + var _toValue; + if ((_toValue = toValue(options.replaceRef)) !== null && _toValue !== void 0 ? _toValue : true) if (Array.isArray(objectRef.value)) { + const copy = [...objectRef.value]; + copy[key] = v; + objectRef.value = copy; + } else { + const newObject = { + ...objectRef.value, + [key]: v + }; + Object.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value)); + objectRef.value = newObject; + } + else objectRef.value[key] = v; + } + })); + return result; +} +function tryOnBeforeMount(fn, sync = true, target) { + if (getLifeCycleTarget(target)) onBeforeMount(fn, target); + else if (sync) fn(); + else nextTick(fn); +} +function tryOnBeforeUnmount(fn, target) { + if (getLifeCycleTarget(target)) onBeforeUnmount(fn, target); +} +function tryOnMounted(fn, sync = true, target) { + if (getLifeCycleTarget(target)) onMounted(fn, target); + else if (sync) fn(); + else nextTick(fn); +} +function tryOnUnmounted(fn, target) { + if (getLifeCycleTarget(target)) onUnmounted(fn, target); +} +function createUntil(r, isNot = false) { + function toMatch(condition, { flush = "sync", deep = false, timeout, throwOnTimeout } = {}) { + let stop = null; + const promises = [new Promise((resolve) => { + stop = watch(r, (v) => { + if (condition(v) !== isNot) { + if (stop) stop(); + else nextTick(() => stop === null || stop === void 0 ? void 0 : stop()); + resolve(v); + } + }, { + flush, + deep, + immediate: true + }); + })]; + if (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop === null || stop === void 0 ? 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 !== void 0 ? options : {}; + let stop = null; + const promises = [new Promise((resolve) => { + stop = watch([r, value], ([v1, v2]) => { + if (isNot !== (v1 === v2)) { + if (stop) stop(); + else nextTick(() => stop === null || stop === void 0 ? void 0 : stop()); + resolve(v1); + } + }, { + flush, + deep, + immediate: true + }); + })]; + if (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => { + stop === null || stop === void 0 || stop(); + return toValue(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(toValue(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(toValue(r))) return { + toMatch, + toContains, + changed, + changedTimes, + get not() { + return createUntil(r, !isNot); + } + }; + else return { + toMatch, + toBe, + toBeTruthy, + toBeNull, + toBeNaN, + toBeUndefined, + changed, + changedTimes, + get not() { + return createUntil(r, !isNot); + } + }; +} +function until(r) { + return createUntil(r); +} +function defaultComparator(value, othVal) { + return value === othVal; +} +function useArrayDifference(...args) { + var _args$, _args$2; + const list = args[0]; + const values = args[1]; + let compareFn = (_args$ = args[2]) !== null && _args$ !== void 0 ? _args$ : defaultComparator; + const { symmetric = false } = (_args$2 = args[3]) !== null && _args$2 !== void 0 ? _args$2 : {}; + if (typeof compareFn === "string") { + const key = compareFn; + compareFn = (value, othVal) => value[key] === othVal[key]; + } + const diff1 = computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1)); + if (symmetric) { + const diff2 = computed(() => toValue(values).filter((x) => toValue(list).findIndex((y) => compareFn(x, y)) === -1)); + return computed(() => symmetric ? [...toValue(diff1), ...toValue(diff2)] : toValue(diff1)); + } else return diff1; +} +function useArrayEvery(list, fn) { + return computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array))); +} +function useArrayFilter(list, fn) { + return computed(() => toValue(list).map((i) => toValue(i)).filter(fn)); +} +function useArrayFind(list, fn) { + return computed(() => toValue(toValue(list).find((element, index, array) => fn(toValue(element), index, array)))); +} +function useArrayFindIndex(list, fn) { + return computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array))); +} +function findLast(arr, cb) { + let index = arr.length; + while (index-- > 0) if (cb(arr[index], index, arr)) return arr[index]; +} +function useArrayFindLast(list, fn) { + return computed(() => toValue(!Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array)))); +} +function isArrayIncludesOptions(obj) { + return isObject(obj) && containsProp(obj, "formIndex", "comparator"); +} +function useArrayIncludes(...args) { + var _comparator; + const list = args[0]; + const value = args[1]; + let comparator = args[2]; + let formIndex = 0; + if (isArrayIncludesOptions(comparator)) { + var _comparator$fromIndex; + formIndex = (_comparator$fromIndex = comparator.fromIndex) !== null && _comparator$fromIndex !== void 0 ? _comparator$fromIndex : 0; + comparator = comparator.comparator; + } + if (typeof comparator === "string") { + const key = comparator; + comparator = (element, value$1) => element[key] === toValue(value$1); + } + comparator = (_comparator = comparator) !== null && _comparator !== void 0 ? _comparator : ((element, value$1) => element === toValue(value$1)); + return computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(toValue(element), toValue(value), index, toValue(array)))); +} +function useArrayJoin(list, separator) { + return computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator))); +} +function useArrayMap(list, fn) { + return computed(() => toValue(list).map((i) => toValue(i)).map(fn)); +} +function useArrayReduce(list, reducer, ...args) { + const reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index); + return computed(() => { + const resolved = toValue(list); + return args.length ? resolved.reduce(reduceCallback, typeof args[0] === "function" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback); + }); +} +function useArraySome(list, fn) { + return computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array))); +} +function uniq(array) { + return Array.from(new Set(array)); +} +function uniqueElementsBy(array, fn) { + return array.reduce((acc, v) => { + if (!acc.some((x) => fn(v, x, array))) acc.push(v); + return acc; + }, []); +} +function useArrayUnique(list, compareFn) { + return computed(() => { + const resolvedList = toValue(list).map((element) => toValue(element)); + return compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList); + }); +} +function useCounter(initialValue = 0, options = {}) { + let _initialValue = unref(initialValue); + const count = shallowRef(initialValue); + const { max = Number.POSITIVE_INFINITY, min = Number.NEGATIVE_INFINITY } = options; + const inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min); + const dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max); + const get$1 = () => count.value; + const set$1 = (val) => count.value = Math.max(min, Math.min(max, val)); + const reset = (val = _initialValue) => { + _initialValue = val; + return set$1(val); + }; + return { + count: shallowReadonly(count), + inc, + dec, + get: get$1, + set: set$1, + reset + }; +} +var REGEX_PARSE = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[T\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/i; +var REGEX_FORMAT = /[YMDHhms]o|\[([^\]]+)\]|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}|z{1,4}|SSS/g; +function 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; +} +function formatOrdinal(num) { + const suffixes = [ + "th", + "st", + "nd", + "rd" + ]; + const v = num % 100; + return num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]); +} +function formatDate(date, formatStr, options = {}) { + var _options$customMeridi; + 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 = (_options$customMeridi = options.customMeridiem) !== null && _options$customMeridi !== void 0 ? _options$customMeridi : defaultMeridiem; + const stripTimeZone = (dateString) => { + var _dateString$split$; + return (_dateString$split$ = dateString.split(" ")[1]) !== null && _dateString$split$ !== void 0 ? _dateString$split$ : ""; + }; + const matches = { + Yo: () => formatOrdinal(years), + YY: () => String(years).slice(-2), + YYYY: () => years, + M: () => month + 1, + Mo: () => formatOrdinal(month + 1), + MM: () => `${month + 1}`.padStart(2, "0"), + MMM: () => date.toLocaleDateString(toValue(options.locales), { month: "short" }), + MMMM: () => date.toLocaleDateString(toValue(options.locales), { month: "long" }), + D: () => String(days), + Do: () => formatOrdinal(days), + DD: () => `${days}`.padStart(2, "0"), + H: () => String(hours), + Ho: () => formatOrdinal(hours), + HH: () => `${hours}`.padStart(2, "0"), + h: () => `${hours % 12 || 12}`.padStart(1, "0"), + ho: () => formatOrdinal(hours % 12 || 12), + hh: () => `${hours % 12 || 12}`.padStart(2, "0"), + m: () => String(minutes), + mo: () => formatOrdinal(minutes), + mm: () => `${minutes}`.padStart(2, "0"), + s: () => String(seconds), + so: () => formatOrdinal(seconds), + ss: () => `${seconds}`.padStart(2, "0"), + SSS: () => `${milliseconds}`.padStart(3, "0"), + d: () => day, + dd: () => date.toLocaleDateString(toValue(options.locales), { weekday: "narrow" }), + ddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: "short" }), + dddd: () => date.toLocaleDateString(toValue(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), + z: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "shortOffset" })), + zz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "shortOffset" })), + zzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "shortOffset" })), + zzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: "longOffset" })) + }; + return formatStr.replace(REGEX_FORMAT, (match, $1) => { + var _ref, _matches$match; + return (_ref = $1 !== null && $1 !== void 0 ? $1 : (_matches$match = matches[match]) === null || _matches$match === void 0 ? void 0 : _matches$match.call(matches)) !== null && _ref !== void 0 ? _ref : match; + }); +} +function 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(toValue(date)), toValue(formatStr), options)); +} +function useIntervalFn(cb, interval = 1e3, options = {}) { + const { immediate = true, immediateCallback = false } = options; + let timer = null; + const isActive = shallowRef(false); + function clean() { + if (timer) { + clearInterval(timer); + timer = null; + } + } + function pause() { + isActive.value = false; + clean(); + } + function resume() { + const intervalValue = toValue(interval); + if (intervalValue <= 0) return; + isActive.value = true; + if (immediateCallback) cb(); + clean(); + if (isActive.value) timer = setInterval(cb, intervalValue); + } + if (immediate && isClient) resume(); + if (isRef(interval) || typeof interval === "function") tryOnScopeDispose(watch(interval, () => { + if (isActive.value && isClient) resume(); + })); + tryOnScopeDispose(pause); + return { + isActive: shallowReadonly(isActive), + pause, + resume + }; +} +function useInterval(interval = 1e3, options = {}) { + const { controls: exposeControls = false, immediate = true, callback } = options; + const counter = shallowRef(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 { + counter: shallowReadonly(counter), + reset, + ...controls + }; + else return shallowReadonly(counter); +} +function useLastChanged(source, options = {}) { + var _options$initialValue; + const ms = shallowRef((_options$initialValue = options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : null); + watch(source, () => ms.value = timestamp(), options); + return shallowReadonly(ms); +} +function useTimeoutFn(cb, interval, options = {}) { + const { immediate = true, immediateCallback = false } = options; + const isPending = shallowRef(false); + let timer; + function clear() { + if (timer) { + clearTimeout(timer); + timer = void 0; + } + } + function stop() { + isPending.value = false; + clear(); + } + function start(...args) { + if (immediateCallback) cb(); + clear(); + isPending.value = true; + timer = setTimeout(() => { + isPending.value = false; + timer = void 0; + cb(...args); + }, toValue(interval)); + } + if (immediate) { + isPending.value = true; + if (isClient) start(); + } + tryOnScopeDispose(stop); + return { + isPending: shallowReadonly(isPending), + start, + stop + }; +} +function useTimeout(interval = 1e3, options = {}) { + const { controls: exposeControls = false, callback } = options; + const controls = useTimeoutFn(callback !== null && callback !== void 0 ? callback : noop, interval, options); + const ready = computed(() => !controls.isPending.value); + if (exposeControls) return { + ready, + ...controls + }; + else return ready; +} +function useToNumber(value, options = {}) { + const { method = "parseFloat", radix, nanToZero } = options; + return computed(() => { + let resolved = toValue(value); + if (typeof method === "function") resolved = method(resolved); + else if (typeof resolved === "string") resolved = Number[method](resolved, radix); + if (nanToZero && Number.isNaN(resolved)) resolved = 0; + return resolved; + }); +} +function useToString(value) { + return computed(() => `${toValue(value)}`); +} +function useToggle(initialValue = false, options = {}) { + const { truthyValue = true, falsyValue = false } = options; + const valueIsRef = isRef(initialValue); + const _value = shallowRef(initialValue); + function toggle(value) { + if (arguments.length) { + _value.value = value; + return _value.value; + } else { + const truthy = toValue(truthyValue); + _value.value = _value.value === truthy ? toValue(falsyValue) : truthy; + return _value.value; + } + } + if (valueIsRef) return toggle; + else return [_value, toggle]; +} +function watchArray(source, cb, options) { + let oldList = (options === null || options === void 0 ? void 0 : options.immediate) ? [] : [...typeof source === "function" ? source() : Array.isArray(source) ? source : toValue(source)]; + return watch(source, (newList, _, onCleanup) => { + const oldListRemains = Array.from({ length: 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((_$1, i) => !oldListRemains[i]); + cb(newList, oldList, added, removed, onCleanup); + oldList = [...newList]; + }, options); +} +function watchAtMost(source, cb, options) { + const { count, ...watchOptions } = options; + const current = shallowRef(0); + const { stop, resume, pause } = watchWithFilter(source, (...args) => { + current.value += 1; + if (current.value >= toValue(count)) nextTick(() => stop()); + cb(...args); + }, watchOptions); + return { + count: current, + stop, + resume, + pause + }; +} +function watchDebounced(source, cb, options = {}) { + const { debounce = 0, maxWait = void 0, ...watchOptions } = options; + return watchWithFilter(source, cb, { + ...watchOptions, + eventFilter: debounceFilter(debounce, { maxWait }) + }); +} +var debouncedWatch = watchDebounced; +function watchDeep(source, cb, options) { + return watch(source, cb, { + ...options, + deep: true + }); +} +function watchIgnorable(source, cb, options = {}) { + const { eventFilter = bypassFilter, ...watchOptions } = options; + const filteredCb = createFilterWrapper(eventFilter, cb); + let ignoreUpdates; + let ignorePrevAsyncUpdates; + let stop; + if (watchOptions.flush === "sync") { + let ignore = false; + ignorePrevAsyncUpdates = () => { + }; + ignoreUpdates = (updater) => { + ignore = true; + updater(); + ignore = false; + }; + stop = watch(source, (...args) => { + if (!ignore) filteredCb(...args); + }, watchOptions); + } else { + const disposables = []; + let ignoreCounter = 0; + let syncCounter = 0; + ignorePrevAsyncUpdates = () => { + ignoreCounter = syncCounter; + }; + disposables.push(watch(source, () => { + syncCounter++; + }, { + ...watchOptions, + flush: "sync" + })); + ignoreUpdates = (updater) => { + const syncCounterPrev = syncCounter; + updater(); + ignoreCounter += syncCounter - syncCounterPrev; + }; + disposables.push(watch(source, (...args) => { + const ignore = ignoreCounter > 0 && ignoreCounter === syncCounter; + ignoreCounter = 0; + syncCounter = 0; + if (ignore) return; + filteredCb(...args); + }, watchOptions)); + stop = () => { + disposables.forEach((fn) => fn()); + }; + } + return { + stop, + ignoreUpdates, + ignorePrevAsyncUpdates + }; +} +var ignorableWatch = watchIgnorable; +function watchImmediate(source, cb, options) { + return watch(source, cb, { + ...options, + immediate: true + }); +} +function watchOnce(source, cb, options) { + return watch(source, cb, { + ...options, + once: true + }); +} +function watchThrottled(source, cb, options = {}) { + const { throttle = 0, trailing = true, leading = true, ...watchOptions } = options; + return watchWithFilter(source, cb, { + ...watchOptions, + eventFilter: throttleFilter(throttle, trailing, leading) + }); +} +var throttledWatch = watchThrottled; +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 res$1; + ignoreUpdates(() => { + res$1 = _cb(getWatchSources(source), getOldValue(source)); + }); + return res$1; + }; + return { + ...res, + trigger + }; +} +function getWatchSources(sources) { + if (isReactive(sources)) return sources; + if (Array.isArray(sources)) return sources.map((item) => toValue(item)); + return toValue(sources); +} +function getOldValue(source) { + return Array.isArray(source) ? source.map(() => void 0) : void 0; +} +function whenever(source, cb, options) { + const stop = watch(source, (v, ov, onInvalidate) => { + if (v) { + if (options === null || options === void 0 ? void 0 : options.once) nextTick(() => stop()); + cb(v, ov, onInvalidate); + } + }, { + ...options, + once: false + }); + return stop; +} + +// node_modules/@vueuse/core/dist/index.js +function computedAsync(evaluationCallback, initialState, optionsOrRef) { + var _globalThis$reportErr; + let options; + if (isRef(optionsOrRef)) options = { evaluating: optionsOrRef }; + else options = optionsOrRef || {}; + const { lazy = false, flush = "sync", evaluating = void 0, shallow = true, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop } = options; + const started = shallowRef(!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; + } + }, { flush }); + if (lazy) return computed(() => { + started.value = true; + return current.value; + }); + else return current; +} +var asyncComputed = computedAsync; +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((oldValue) => options(source, oldValue)); + else return computed({ + get: (oldValue) => options.get(source, oldValue), + set: options.set + }); +} +function createReusableTemplate(options = {}) { + const { inheritAttrs = true } = options; + const render = shallowRef(); + const define = defineComponent({ setup(_, { slots }) { + return () => { + render.value = slots.default; + }; + } }); + const reuse = defineComponent({ + inheritAttrs, + props: options.props, + setup(props, { attrs, slots }) { + return () => { + var _render$value; + if (!render.value && true) throw new Error("[VueUse] Failed to find the definition of reusable template"); + const vnode = (_render$value = render.value) === null || _render$value === void 0 ? void 0 : _render$value.call(render, { + ...options.props == null ? keysToCamelKebabCase(attrs) : props, + $slots: slots + }); + return inheritAttrs && (vnode === null || vnode === void 0 ? void 0 : vnode.length) === 1 ? vnode[0] : vnode; + }; + } + }); + return makeDestructurable({ + define, + reuse + }, [define, reuse]); +} +function keysToCamelKebabCase(obj) { + const newObj = {}; + for (const key in obj) newObj[camelize(key)] = obj[key]; + return newObj; +} +function createTemplatePromise(options = {}) { + let index = 0; + const instances = ref([]); + function create(...args) { + const props = shallowReactive({ + key: index++, + args, + promise: void 0, + resolve: () => { + }, + reject: () => { + }, + isResolving: false, + options + }); + instances.value.push(props); + props.promise = new Promise((_resolve, _reject) => { + props.resolve = (v) => { + props.isResolving = true; + return _resolve(v); + }; + props.reject = _reject; + }).finally(() => { + props.promise = void 0; + const index$1 = instances.value.indexOf(props); + if (index$1 !== -1) instances.value.splice(index$1, 1); + }); + return props.promise; + } + function start(...args) { + if (options.singleton && instances.value.length > 0) return instances.value[0].promise; + return create(...args); + } + const component = defineComponent((_, { slots }) => { + const renderList = () => instances.value.map((props) => { + var _slots$default; + return h(Fragment, { key: props.key }, (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots, props)); + }); + if (options.transition) return () => h(TransitionGroup, options.transition, renderList); + return renderList; + }); + component.start = start; + return component; +} +function createUnrefFn(fn) { + return function(...args) { + return fn.apply(this, args.map((i) => toValue(i))); + }; +} +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 unrefElement(elRef) { + var _$el; + const plain = toValue(elRef); + return (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain; +} +function useEventListener(...args) { + const cleanups = []; + const cleanup = () => { + cleanups.forEach((fn) => fn()); + cleanups.length = 0; + }; + const register = (el, event, listener, options) => { + el.addEventListener(event, listener, options); + return () => el.removeEventListener(event, listener, options); + }; + const firstParamTargets = computed(() => { + const test = toArray(toValue(args[0])).filter((e) => e != null); + return test.every((e) => typeof e !== "string") ? test : void 0; + }); + const stopWatch = watchImmediate(() => { + var _firstParamTargets$va, _firstParamTargets$va2; + return [ + (_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null), + toArray(toValue(firstParamTargets.value ? args[1] : args[0])), + toArray(unref(firstParamTargets.value ? args[2] : args[1])), + toValue(firstParamTargets.value ? args[3] : args[2]) + ]; + }, ([raw_targets, raw_events, raw_listeners, raw_options]) => { + cleanup(); + if (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return; + const optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options; + cleanups.push(...raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone))))); + }, { flush: "post" }); + const stop = () => { + stopWatch(); + cleanup(); + }; + tryOnScopeDispose(cleanup); + return stop; +} +var _iOSWorkaround = false; +function onClickOutside(target, handler, options = {}) { + const { window: window$1 = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options; + if (!window$1) return controls ? { + stop: noop, + cancel: noop, + trigger: noop + } : noop; + if (isIOS && !_iOSWorkaround) { + _iOSWorkaround = true; + const listenerOptions = { passive: true }; + Array.from(window$1.document.body.children).forEach((el) => el.addEventListener("click", noop, listenerOptions)); + window$1.document.documentElement.addEventListener("click", noop, listenerOptions); + } + let shouldListen = true; + const shouldIgnore = (event) => { + return toValue(ignore).some((target$1) => { + if (typeof target$1 === "string") return Array.from(window$1.document.querySelectorAll(target$1)).some((el) => el === event.target || event.composedPath().includes(el)); + else { + const el = unrefElement(target$1); + return el && (event.target === el || event.composedPath().includes(el)); + } + }); + }; + function hasMultipleRoots(target$1) { + const vm = toValue(target$1); + return vm && vm.$.subTree.shapeFlag === 16; + } + function checkMultipleRoots(target$1, event) { + const vm = toValue(target$1); + const children = vm.$.subTree && vm.$.subTree.children; + if (children == null || !Array.isArray(children)) return false; + return children.some((child) => child.el === event.target || event.composedPath().includes(child.el)); + } + const listener = (event) => { + const el = unrefElement(target); + if (event.target == null) return; + if (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return; + if (!el || el === event.target || event.composedPath().includes(el)) return; + if ("detail" in event && event.detail === 0) shouldListen = !shouldIgnore(event); + if (!shouldListen) { + shouldListen = true; + return; + } + handler(event); + }; + let isProcessingClick = false; + const cleanup = [ + useEventListener(window$1, "click", (event) => { + if (!isProcessingClick) { + isProcessingClick = true; + setTimeout(() => { + isProcessingClick = false; + }, 0); + listener(event); + } + }, { + passive: true, + capture + }), + useEventListener(window$1, "pointerdown", (e) => { + const el = unrefElement(target); + shouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el)); + }, { passive: true }), + detectIframe && useEventListener(window$1, "blur", (event) => { + setTimeout(() => { + var _window$document$acti; + const el = unrefElement(target); + if (((_window$document$acti = window$1.document.activeElement) === null || _window$document$acti === void 0 ? void 0 : _window$document$acti.tagName) === "IFRAME" && !(el === null || el === void 0 ? void 0 : el.contains(window$1.document.activeElement))) handler(event); + }, 0); + }, { passive: true }) + ].filter(Boolean); + const stop = () => cleanup.forEach((fn) => fn()); + if (controls) return { + stop, + cancel: () => { + shouldListen = false; + }, + trigger: (event) => { + shouldListen = true; + listener(event); + shouldListen = false; + } + }; + return stop; +} +function useMounted() { + const isMounted = shallowRef(false); + const instance = getCurrentInstance(); + if (instance) onMounted(() => { + isMounted.value = true; + }, instance); + return isMounted; +} +function useSupported(callback) { + const isMounted = useMounted(); + return computed(() => { + isMounted.value; + return Boolean(callback()); + }); +} +function useMutationObserver(target, callback, options = {}) { + const { window: window$1 = defaultWindow, ...mutationOptions } = options; + let observer; + const isSupported = useSupported(() => window$1 && "MutationObserver" in window$1); + const cleanup = () => { + if (observer) { + observer.disconnect(); + observer = void 0; + } + }; + const stopWatch = watch(computed(() => { + const items = toArray(toValue(target)).map(unrefElement).filter(notNullish); + return new Set(items); + }), (newTargets) => { + cleanup(); + if (isSupported.value && newTargets.size) { + observer = new MutationObserver(callback); + newTargets.forEach((el) => observer.observe(el, mutationOptions)); + } + }, { + immediate: true, + flush: "post" + }); + const takeRecords = () => { + return observer === null || observer === void 0 ? void 0 : observer.takeRecords(); + }; + const stop = () => { + stopWatch(); + cleanup(); + }; + tryOnScopeDispose(stop); + return { + isSupported, + stop, + takeRecords + }; +} +function onElementRemoval(target, callback, options = {}) { + const { window: window$1 = defaultWindow, document: document$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.document, flush = "sync" } = options; + if (!window$1 || !document$1) return noop; + let stopFn; + const cleanupAndUpdate = (fn) => { + stopFn === null || stopFn === void 0 || stopFn(); + stopFn = fn; + }; + const stopWatch = watchEffect(() => { + const el = unrefElement(target); + if (el) { + const { stop } = useMutationObserver(document$1, (mutationsList) => { + if (mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el))) callback(mutationsList); + }, { + window: window$1, + childList: true, + subtree: true + }); + cleanupAndUpdate(stop); + } + }, { flush }); + const stopHandle = () => { + stopWatch(); + cleanupAndUpdate(); + }; + tryOnScopeDispose(stopHandle); + return stopHandle; +} +function 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, dedupe = false } = options; + const predicate = createKeyPredicate(key); + const listener = (e) => { + if (e.repeat && toValue(dedupe)) return; + if (predicate(e)) handler(e); + }; + return useEventListener(target, eventName, listener, passive); +} +function onKeyDown(key, handler, options = {}) { + return onKeyStroke(key, handler, { + ...options, + eventName: "keydown" + }); +} +function onKeyPressed(key, handler, options = {}) { + return onKeyStroke(key, handler, { + ...options, + eventName: "keypress" + }); +} +function onKeyUp(key, handler, options = {}) { + return onKeyStroke(key, handler, { + ...options, + eventName: "keyup" + }); +} +var DEFAULT_DELAY = 500; +var DEFAULT_THRESHOLD = 10; +function onLongPress(target, handler, options) { + var _options$modifiers10, _options$modifiers11; + const elementRef = computed(() => unrefElement(target)); + let timeout; + let posStart; + let startTimestamp; + let hasLongPressed = false; + function clear() { + if (timeout) { + clearTimeout(timeout); + timeout = void 0; + } + posStart = void 0; + startTimestamp = void 0; + hasLongPressed = false; + } + function getDelay(ev) { + const delay = options === null || options === void 0 ? void 0 : options.delay; + if (typeof delay === "function") return delay(ev); + return delay !== null && delay !== void 0 ? delay : DEFAULT_DELAY; + } + function onRelease(ev) { + var _options$modifiers, _options$modifiers2, _options$modifiers3; + const [_startTimestamp, _posStart, _hasLongPressed] = [ + startTimestamp, + posStart, + hasLongPressed + ]; + clear(); + if (!(options === null || options === void 0 ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp) return; + if ((options === null || options === void 0 || (_options$modifiers = options.modifiers) === null || _options$modifiers === void 0 ? void 0 : _options$modifiers.self) && ev.target !== elementRef.value) return; + if (options === null || options === void 0 || (_options$modifiers2 = options.modifiers) === null || _options$modifiers2 === void 0 ? void 0 : _options$modifiers2.prevent) ev.preventDefault(); + if (options === null || options === void 0 || (_options$modifiers3 = options.modifiers) === null || _options$modifiers3 === void 0 ? void 0 : _options$modifiers3.stop) ev.stopPropagation(); + const dx = ev.x - _posStart.x; + const dy = ev.y - _posStart.y; + const distance = Math.sqrt(dx * dx + dy * dy); + options.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed); + } + function onDown(ev) { + var _options$modifiers4, _options$modifiers5, _options$modifiers6; + if ((options === null || options === void 0 || (_options$modifiers4 = options.modifiers) === null || _options$modifiers4 === void 0 ? void 0 : _options$modifiers4.self) && ev.target !== elementRef.value) return; + clear(); + if (options === null || options === void 0 || (_options$modifiers5 = options.modifiers) === null || _options$modifiers5 === void 0 ? void 0 : _options$modifiers5.prevent) ev.preventDefault(); + if (options === null || options === void 0 || (_options$modifiers6 = options.modifiers) === null || _options$modifiers6 === void 0 ? void 0 : _options$modifiers6.stop) ev.stopPropagation(); + posStart = { + x: ev.x, + y: ev.y + }; + startTimestamp = ev.timeStamp; + timeout = setTimeout(() => { + hasLongPressed = true; + handler(ev); + }, getDelay(ev)); + } + function onMove(ev) { + var _options$modifiers7, _options$modifiers8, _options$modifiers9, _options$distanceThre; + if ((options === null || options === void 0 || (_options$modifiers7 = options.modifiers) === null || _options$modifiers7 === void 0 ? void 0 : _options$modifiers7.self) && ev.target !== elementRef.value) return; + if (!posStart || (options === null || options === void 0 ? void 0 : options.distanceThreshold) === false) return; + if (options === null || options === void 0 || (_options$modifiers8 = options.modifiers) === null || _options$modifiers8 === void 0 ? void 0 : _options$modifiers8.prevent) ev.preventDefault(); + if (options === null || options === void 0 || (_options$modifiers9 = options.modifiers) === null || _options$modifiers9 === void 0 ? void 0 : _options$modifiers9.stop) ev.stopPropagation(); + const dx = ev.x - posStart.x; + const dy = ev.y - posStart.y; + if (Math.sqrt(dx * dx + dy * dy) >= ((_options$distanceThre = options === null || options === void 0 ? void 0 : options.distanceThreshold) !== null && _options$distanceThre !== void 0 ? _options$distanceThre : DEFAULT_THRESHOLD)) clear(); + } + const listenerOptions = { + capture: options === null || options === void 0 || (_options$modifiers10 = options.modifiers) === null || _options$modifiers10 === void 0 ? void 0 : _options$modifiers10.capture, + once: options === null || options === void 0 || (_options$modifiers11 = options.modifiers) === null || _options$modifiers11 === void 0 ? void 0 : _options$modifiers11.once + }; + const cleanup = [ + useEventListener(elementRef, "pointerdown", onDown, listenerOptions), + useEventListener(elementRef, "pointermove", onMove, listenerOptions), + useEventListener(elementRef, ["pointerup", "pointerleave"], onRelease, listenerOptions) + ]; + const stop = () => cleanup.forEach((fn) => fn()); + return stop; +} +function 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"); +} +function 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: document$1 = defaultDocument } = options; + const keydown = (event) => { + if (!isFocusedElementEditable() && isTypedCharValid(event)) callback(event); + }; + if (document$1) useEventListener(document$1, "keydown", keydown, { passive: true }); +} +function templateRef(key, initialValue = null) { + const instance = getCurrentInstance(); + let _trigger = () => { + }; + const element = customRef((track, trigger) => { + _trigger = trigger; + return { + get() { + var _instance$proxy$$refs, _instance$proxy; + track(); + return (_instance$proxy$$refs = instance === null || instance === void 0 || (_instance$proxy = instance.proxy) === null || _instance$proxy === void 0 ? void 0 : _instance$proxy.$refs[key]) !== null && _instance$proxy$$refs !== void 0 ? _instance$proxy$$refs : initialValue; + }, + set() { + } + }; + }); + tryOnMounted(_trigger); + onUpdated(_trigger); + return element; +} +function useActiveElement(options = {}) { + var _options$document; + const { window: window$1 = defaultWindow, deep = true, triggerOnRemoval = false } = options; + const document$1 = (_options$document = options.document) !== null && _options$document !== void 0 ? _options$document : window$1 === null || window$1 === void 0 ? void 0 : window$1.document; + const getDeepActiveElement = () => { + let element = document$1 === null || document$1 === void 0 ? void 0 : document$1.activeElement; + if (deep) { + var _element$shadowRoot; + while (element === null || element === void 0 ? void 0 : element.shadowRoot) element = element === null || element === void 0 || (_element$shadowRoot = element.shadowRoot) === null || _element$shadowRoot === void 0 ? void 0 : _element$shadowRoot.activeElement; + } + return element; + }; + const activeElement = shallowRef(); + const trigger = () => { + activeElement.value = getDeepActiveElement(); + }; + if (window$1) { + const listenerOptions = { + capture: true, + passive: true + }; + useEventListener(window$1, "blur", (event) => { + if (event.relatedTarget !== null) return; + trigger(); + }, listenerOptions); + useEventListener(window$1, "focus", trigger, listenerOptions); + } + if (triggerOnRemoval) onElementRemoval(activeElement, trigger, { document: document$1 }); + trigger(); + return activeElement; +} +function useRafFn(fn, options = {}) { + const { immediate = true, fpsLimit = void 0, window: window$1 = defaultWindow, once = false } = options; + const isActive = shallowRef(false); + const intervalLimit = computed(() => { + return fpsLimit ? 1e3 / toValue(fpsLimit) : null; + }); + let previousFrameTimestamp = 0; + let rafId = null; + function loop(timestamp$1) { + if (!isActive.value || !window$1) return; + if (!previousFrameTimestamp) previousFrameTimestamp = timestamp$1; + const delta = timestamp$1 - previousFrameTimestamp; + if (intervalLimit.value && delta < intervalLimit.value) { + rafId = window$1.requestAnimationFrame(loop); + return; + } + previousFrameTimestamp = timestamp$1; + fn({ + delta, + timestamp: timestamp$1 + }); + if (once) { + isActive.value = false; + rafId = null; + return; + } + rafId = window$1.requestAnimationFrame(loop); + } + function resume() { + if (!isActive.value && window$1) { + isActive.value = true; + previousFrameTimestamp = 0; + rafId = window$1.requestAnimationFrame(loop); + } + } + function pause() { + isActive.value = false; + if (rafId != null && window$1) { + window$1.cancelAnimationFrame(rafId); + rafId = null; + } + } + if (immediate) resume(); + tryOnScopeDispose(pause); + return { + isActive: readonly(isActive), + pause, + resume + }; +} +function useAnimate(target, keyframes, options) { + let config; + let animateOptions; + if (isObject(options)) { + config = options; + animateOptions = objectOmit(options, [ + "window", + "immediate", + "commitStyles", + "persist", + "onReady", + "onError" + ]); + } else { + config = { duration: options }; + animateOptions = options; + } + const { window: window$1 = defaultWindow, immediate = true, commitStyles, persist, playbackRate: _playbackRate = 1, onReady, onError = (e) => { + console.error(e); + } } = config; + const isSupported = useSupported(() => window$1 && HTMLElement && "animate" in HTMLElement.prototype); + const animate = shallowRef(void 0); + const store = shallowReactive({ + startTime: null, + currentTime: null, + timeline: null, + playbackRate: _playbackRate, + pending: false, + playState: immediate ? "idle" : "paused", + replaceState: "active" + }); + const pending = computed(() => store.pending); + const playState = computed(() => store.playState); + const replaceState = computed(() => store.replaceState); + const startTime = computed({ + get() { + return store.startTime; + }, + set(value) { + store.startTime = value; + if (animate.value) animate.value.startTime = value; + } + }); + const currentTime = computed({ + get() { + return store.currentTime; + }, + set(value) { + store.currentTime = value; + if (animate.value) { + animate.value.currentTime = value; + syncResume(); + } + } + }); + const timeline = computed({ + get() { + return store.timeline; + }, + set(value) { + store.timeline = value; + if (animate.value) animate.value.timeline = value; + } + }); + const playbackRate = computed({ + get() { + return store.playbackRate; + }, + set(value) { + store.playbackRate = value; + if (animate.value) animate.value.playbackRate = value; + } + }); + const play = () => { + if (animate.value) try { + animate.value.play(); + syncResume(); + } catch (e) { + syncPause(); + onError(e); + } + else update(); + }; + const pause = () => { + try { + var _animate$value; + (_animate$value = animate.value) === null || _animate$value === void 0 || _animate$value.pause(); + syncPause(); + } catch (e) { + onError(e); + } + }; + const reverse = () => { + if (!animate.value) update(); + try { + var _animate$value2; + (_animate$value2 = animate.value) === null || _animate$value2 === void 0 || _animate$value2.reverse(); + syncResume(); + } catch (e) { + syncPause(); + onError(e); + } + }; + const finish = () => { + try { + var _animate$value3; + (_animate$value3 = animate.value) === null || _animate$value3 === void 0 || _animate$value3.finish(); + syncPause(); + } catch (e) { + onError(e); + } + }; + const cancel = () => { + try { + var _animate$value4; + (_animate$value4 = animate.value) === null || _animate$value4 === void 0 || _animate$value4.cancel(); + syncPause(); + } catch (e) { + onError(e); + } + }; + watch(() => unrefElement(target), (el) => { + if (el) update(true); + else animate.value = void 0; + }); + watch(() => keyframes, (value) => { + if (animate.value) { + update(); + const targetEl = unrefElement(target); + if (targetEl) animate.value.effect = new KeyframeEffect(targetEl, toValue(value), animateOptions); + } + }, { deep: true }); + tryOnMounted(() => update(true), false); + tryOnScopeDispose(cancel); + function update(init) { + const el = unrefElement(target); + if (!isSupported.value || !el) return; + if (!animate.value) animate.value = el.animate(toValue(keyframes), animateOptions); + if (persist) animate.value.persist(); + if (_playbackRate !== 1) animate.value.playbackRate = _playbackRate; + if (init && !immediate) animate.value.pause(); + else syncResume(); + onReady === null || onReady === void 0 || onReady(animate.value); + } + const listenerOptions = { passive: true }; + useEventListener(animate, [ + "cancel", + "finish", + "remove" + ], syncPause, listenerOptions); + useEventListener(animate, "finish", () => { + var _animate$value5; + if (commitStyles) (_animate$value5 = animate.value) === null || _animate$value5 === void 0 || _animate$value5.commitStyles(); + }, listenerOptions); + const { resume: resumeRef, pause: pauseRef } = useRafFn(() => { + if (!animate.value) return; + store.pending = animate.value.pending; + store.playState = animate.value.playState; + store.replaceState = animate.value.replaceState; + store.startTime = animate.value.startTime; + store.currentTime = animate.value.currentTime; + store.timeline = animate.value.timeline; + store.playbackRate = animate.value.playbackRate; + }, { immediate: false }); + function syncResume() { + if (isSupported.value) resumeRef(); + } + function syncPause() { + if (isSupported.value && window$1) window$1.requestAnimationFrame(pauseRef); + } + return { + isSupported, + animate, + play, + pause, + reverse, + finish, + cancel, + pending, + playState, + replaceState, + startTime, + currentTime, + timeline, + playbackRate + }; +} +function useAsyncQueue(tasks, options) { + const { interrupt = true, onError = noop, onFinished = noop, signal } = options || {}; + const promiseState = { + aborted: "aborted", + fulfilled: "fulfilled", + pending: "pending", + rejected: "rejected" + }; + const result = reactive(Array.from(Array.from({ length: tasks.length }), () => ({ + state: promiseState.pending, + data: null + }))); + const activeIndex = shallowRef(-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 _result$activeIndex$v; + if (signal === null || signal === void 0 ? void 0 : signal.aborted) { + updateResult(promiseState.aborted, new Error("aborted")); + return; + } + if (((_result$activeIndex$v = result[activeIndex.value]) === null || _result$activeIndex$v === void 0 ? void 0 : _result$activeIndex$v.state) === promiseState.rejected && interrupt) { + onFinished(); + return; + } + const done = curr(prevRes).then((currentRes) => { + updateResult(promiseState.fulfilled, currentRes); + if (activeIndex.value === tasks.length - 1) onFinished(); + return currentRes; + }); + if (!signal) return done; + return Promise.race([done, whenAborted(signal)]); + }).catch((e) => { + if (signal === null || signal === void 0 ? void 0 : signal.aborted) { + updateResult(promiseState.aborted, e); + return e; + } + updateResult(promiseState.rejected, e); + onError(); + return e; + }); + }, Promise.resolve()); + return { + activeIndex, + result + }; +} +function whenAborted(signal) { + return new Promise((resolve, reject) => { + const error = new Error("aborted"); + if (signal.aborted) reject(error); + else signal.addEventListener("abort", () => reject(error), { once: true }); + }); +} +function useAsyncState(promise, initialState, options) { + var _globalThis$reportErr; + const { immediate = true, delay = 0, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop, onSuccess = noop, resetOnExecute = true, shallow = true, throwError } = options !== null && options !== void 0 ? options : {}; + const state = shallow ? shallowRef(initialState) : ref(initialState); + const isReady = shallowRef(false); + const isLoading = shallowRef(false); + const error = shallowRef(void 0); + let executionsCount = 0; + async function execute(delay$1 = 0, ...args) { + const executionId = executionsCount += 1; + if (resetOnExecute) state.value = toValue(initialState); + error.value = void 0; + isReady.value = false; + isLoading.value = true; + if (delay$1 > 0) await promiseTimeout(delay$1); + const _promise = typeof promise === "function" ? promise(...args) : promise; + try { + const data = await _promise; + if (executionId === executionsCount) { + state.value = data; + isReady.value = true; + } + onSuccess(data); + } catch (e) { + if (executionId === executionsCount) error.value = e; + onError(e); + if (throwError) throw e; + } finally { + if (executionId === executionsCount) isLoading.value = false; + } + return state.value; + } + if (immediate) execute(delay); + const shell = { + state, + isReady, + isLoading, + error, + execute, + executeImmediate: (...args) => execute(0, ...args) + }; + function waitUntilIsLoaded() { + return new Promise((resolve, reject) => { + until(isLoading).toBe(false).then(() => resolve(shell)).catch(reject); + }); + } + return { + ...shell, + then(onFulfilled, onRejected) { + return waitUntilIsLoaded().then(onFulfilled, onRejected); + } + }; +} +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 = shallowRef(""); + const promise = shallowRef(); + function execute() { + if (!isClient) return; + promise.value = new Promise((resolve, reject) => { + try { + const _target = toValue(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 || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? 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 || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality)); + }).catch(reject); + } else if (typeof _target === "object") { + const serialized = ((options === null || options === void 0 ? void 0 : options.serializer) || getDefaultSerialization(_target))(_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 = (options === null || options === void 0 ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, "") : res; + }); + return promise.value; + } + if (isRef(target) || typeof target === "function") 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 useBattery(options = {}) { + const { navigator: navigator$1 = defaultNavigator } = options; + const events$1 = [ + "chargingchange", + "chargingtimechange", + "dischargingtimechange", + "levelchange" + ]; + const isSupported = useSupported(() => navigator$1 && "getBattery" in navigator$1 && typeof navigator$1.getBattery === "function"); + const charging = shallowRef(false); + const chargingTime = shallowRef(0); + const dischargingTime = shallowRef(0); + const level = shallowRef(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$1.getBattery().then((_battery) => { + battery = _battery; + updateBatteryInfo.call(battery); + useEventListener(battery, events$1, updateBatteryInfo, { passive: true }); + }); + return { + isSupported, + charging, + chargingTime, + dischargingTime, + level + }; +} +function useBluetooth(options) { + let { acceptAllDevices = false } = options || {}; + const { filters = void 0, optionalServices = void 0, navigator: navigator$1 = defaultNavigator } = options || {}; + const isSupported = useSupported(() => navigator$1 && "bluetooth" in navigator$1); + const device = shallowRef(); + 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$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.bluetooth.requestDevice({ + acceptAllDevices, + filters, + optionalServices + })); + } catch (err) { + error.value = err; + } + } + const server = shallowRef(); + const isConnected = shallowRef(false); + function reset() { + isConnected.value = false; + device.value = void 0; + server.value = void 0; + } + async function connectToBluetoothGATTServer() { + error.value = null; + if (device.value && device.value.gatt) { + useEventListener(device, "gattserverdisconnected", reset, { passive: true }); + try { + server.value = await device.value.gatt.connect(); + isConnected.value = server.value.connected; + } catch (err) { + error.value = err; + } + } + } + tryOnMounted(() => { + var _device$value$gatt; + if (device.value) (_device$value$gatt = device.value.gatt) === null || _device$value$gatt === void 0 || _device$value$gatt.connect(); + }); + tryOnScopeDispose(() => { + var _device$value$gatt2; + if (device.value) (_device$value$gatt2 = device.value.gatt) === null || _device$value$gatt2 === void 0 || _device$value$gatt2.disconnect(); + }); + return { + isSupported, + isConnected: readonly(isConnected), + device, + requestDevice, + server, + error + }; +} +var ssrWidthSymbol = Symbol("vueuse-ssr-width"); +function useSSRWidth() { + const ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null; + return typeof ssrWidth === "number" ? ssrWidth : void 0; +} +function provideSSRWidth(width, app) { + if (app !== void 0) app.provide(ssrWidthSymbol, width); + else provideLocal(ssrWidthSymbol, width); +} +function useMediaQuery(query, options = {}) { + const { window: window$1 = defaultWindow, ssrWidth = useSSRWidth() } = options; + const isSupported = useSupported(() => window$1 && "matchMedia" in window$1 && typeof window$1.matchMedia === "function"); + const ssrSupport = shallowRef(typeof ssrWidth === "number"); + const mediaQuery = shallowRef(); + const matches = shallowRef(false); + const handler = (event) => { + matches.value = event.matches; + }; + watchEffect(() => { + if (ssrSupport.value) { + ssrSupport.value = !isSupported.value; + matches.value = toValue(query).split(",").some((queryString) => { + const not = queryString.includes("not all"); + const minWidth = queryString.match(/\(\s*min-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/); + const maxWidth = queryString.match(/\(\s*max-width:\s*(-?\d+(?:\.\d*)?[a-z]+\s*)\)/); + let res = Boolean(minWidth || maxWidth); + if (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]); + if (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]); + return not ? !res : res; + }); + return; + } + if (!isSupported.value) return; + mediaQuery.value = window$1.matchMedia(toValue(query)); + matches.value = mediaQuery.value.matches; + }); + useEventListener(mediaQuery, "change", handler, { passive: true }); + return computed(() => matches.value); +} +var breakpointsTailwind = { + "sm": 640, + "md": 768, + "lg": 1024, + "xl": 1280, + "2xl": 1536 +}; +var breakpointsBootstrapV5 = { + xs: 0, + sm: 576, + md: 768, + lg: 992, + xl: 1200, + xxl: 1400 +}; +var breakpointsVuetifyV2 = { + xs: 0, + sm: 600, + md: 960, + lg: 1264, + xl: 1904 +}; +var breakpointsVuetifyV3 = { + xs: 0, + sm: 600, + md: 960, + lg: 1280, + xl: 1920, + xxl: 2560 +}; +var breakpointsVuetify = breakpointsVuetifyV2; +var breakpointsAntDesign = { + xs: 480, + sm: 576, + md: 768, + lg: 992, + xl: 1200, + xxl: 1600 +}; +var breakpointsQuasar = { + xs: 0, + sm: 600, + md: 1024, + lg: 1440, + xl: 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 breakpointsPrimeFlex = { + sm: 576, + md: 768, + lg: 992, + xl: 1200 +}; +var breakpointsElement = { + xs: 0, + sm: 768, + md: 992, + lg: 1200, + xl: 1920 +}; +function useBreakpoints(breakpoints, options = {}) { + function getValue$1(k, delta) { + let v = toValue(breakpoints[toValue(k)]); + if (delta != null) v = increaseWithUnit(v, delta); + if (typeof v === "number") v = `${v}px`; + return v; + } + const { window: window$1 = defaultWindow, strategy = "min-width", ssrWidth = useSSRWidth() } = options; + const ssrSupport = typeof ssrWidth === "number"; + const mounted = ssrSupport ? shallowRef(false) : { value: true }; + if (ssrSupport) tryOnMounted(() => mounted.value = !!window$1); + function match(query, size) { + if (!mounted.value && ssrSupport) return query === "min" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size); + if (!window$1) return false; + return window$1.matchMedia(`(${query}-width: ${size})`).matches; + } + const greaterOrEqual = (k) => { + return useMediaQuery(() => `(min-width: ${getValue$1(k)})`, options); + }; + const smallerOrEqual = (k) => { + return useMediaQuery(() => `(max-width: ${getValue$1(k)})`, options); + }; + const shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => { + Object.defineProperty(shortcuts, k, { + get: () => strategy === "min-width" ? greaterOrEqual(k) : smallerOrEqual(k), + enumerable: true, + configurable: true + }); + return shortcuts; + }, {}); + function current() { + const points = Object.keys(breakpoints).map((k) => [ + k, + shortcutMethods[k], + pxValue(getValue$1(k)) + ]).sort((a, b) => a[2] - b[2]); + return computed(() => points.filter(([, v]) => v.value).map(([k]) => k)); + } + return Object.assign(shortcutMethods, { + greaterOrEqual, + smallerOrEqual, + greater(k) { + return useMediaQuery(() => `(min-width: ${getValue$1(k, 0.1)})`, options); + }, + smaller(k) { + return useMediaQuery(() => `(max-width: ${getValue$1(k, -0.1)})`, options); + }, + between(a, b) { + return useMediaQuery(() => `(min-width: ${getValue$1(a)}) and (max-width: ${getValue$1(b, -0.1)})`, options); + }, + isGreater(k) { + return match("min", getValue$1(k, 0.1)); + }, + isGreaterOrEqual(k) { + return match("min", getValue$1(k)); + }, + isSmaller(k) { + return match("max", getValue$1(k, -0.1)); + }, + isSmallerOrEqual(k) { + return match("max", getValue$1(k)); + }, + isInBetween(a, b) { + return match("min", getValue$1(a)) && match("max", getValue$1(b, -0.1)); + }, + current, + active() { + const bps = current(); + return computed(() => bps.value.length === 0 ? "" : bps.value.at(strategy === "min-width" ? -1 : 0)); + } + }); +} +function useBroadcastChannel(options) { + const { name, window: window$1 = defaultWindow } = options; + const isSupported = useSupported(() => window$1 && "BroadcastChannel" in window$1); + const isClosed = shallowRef(false); + const channel = ref(); + const data = ref(); + const error = shallowRef(null); + const post = (data$1) => { + if (channel.value) channel.value.postMessage(data$1); + }; + const close = () => { + if (channel.value) channel.value.close(); + isClosed.value = true; + }; + if (isSupported.value) tryOnMounted(() => { + error.value = null; + channel.value = new BroadcastChannel(name); + const listenerOptions = { passive: true }; + useEventListener(channel, "message", (e) => { + data.value = e.data; + }, listenerOptions); + useEventListener(channel, "messageerror", (e) => { + error.value = e; + }, listenerOptions); + useEventListener(channel, "close", () => { + isClosed.value = true; + }, listenerOptions); + }); + tryOnScopeDispose(() => { + close(); + }); + return { + isSupported, + channel, + data, + post, + close, + error, + isClosed + }; +} +var WRITABLE_PROPERTIES = [ + "hash", + "host", + "hostname", + "href", + "pathname", + "port", + "protocol", + "search" +]; +function useBrowserLocation(options = {}) { + const { window: window$1 = defaultWindow } = options; + const refs = Object.fromEntries(WRITABLE_PROPERTIES.map((key) => [key, ref()])); + for (const [key, ref$1] of objectEntries(refs)) watch(ref$1, (value) => { + if (!(window$1 === null || window$1 === void 0 ? void 0 : window$1.location) || window$1.location[key] === value) return; + window$1.location[key] = value; + }); + const buildState = (trigger) => { + var _window$location; + const { state: state$1, length } = (window$1 === null || window$1 === void 0 ? void 0 : window$1.history) || {}; + const { origin } = (window$1 === null || window$1 === void 0 ? void 0 : window$1.location) || {}; + for (const key of WRITABLE_PROPERTIES) refs[key].value = window$1 === null || window$1 === void 0 || (_window$location = window$1.location) === null || _window$location === void 0 ? void 0 : _window$location[key]; + return reactive({ + trigger, + state: state$1, + length, + origin, + ...refs + }); + }; + const state = ref(buildState("load")); + if (window$1) { + const listenerOptions = { passive: true }; + useEventListener(window$1, "popstate", () => state.value = buildState("popstate"), listenerOptions); + useEventListener(window$1, "hashchange", () => state.value = buildState("hashchange"), listenerOptions); + } + return state; +} +function useCached(refValue, comparator = (a, b) => a === b, options) { + const { deepRefs = true, ...watchOptions } = options || {}; + const cachedValue = createRef(refValue.value, deepRefs); + watch(() => refValue.value, (value) => { + if (!comparator(value, cachedValue.value)) cachedValue.value = value; + }, watchOptions); + return cachedValue; +} +function usePermission(permissionDesc, options = {}) { + const { controls = false, navigator: navigator$1 = defaultNavigator } = options; + const isSupported = useSupported(() => navigator$1 && "permissions" in navigator$1); + const permissionStatus = shallowRef(); + const desc = typeof permissionDesc === "string" ? { name: permissionDesc } : permissionDesc; + const state = shallowRef(); + const update = () => { + var _permissionStatus$val, _permissionStatus$val2; + state.value = (_permissionStatus$val = (_permissionStatus$val2 = permissionStatus.value) === null || _permissionStatus$val2 === void 0 ? void 0 : _permissionStatus$val2.state) !== null && _permissionStatus$val !== void 0 ? _permissionStatus$val : "prompt"; + }; + useEventListener(permissionStatus, "change", update, { passive: true }); + const query = createSingletonPromise(async () => { + if (!isSupported.value) return; + if (!permissionStatus.value) try { + permissionStatus.value = await navigator$1.permissions.query(desc); + } catch (_unused) { + permissionStatus.value = void 0; + } finally { + update(); + } + if (controls) return toRaw(permissionStatus.value); + }); + query(); + if (controls) return { + state, + isSupported, + query + }; + else return state; +} +function useClipboard(options = {}) { + const { navigator: navigator$1 = defaultNavigator, read = false, source, copiedDuring = 1500, legacy = false } = options; + const isClipboardApiSupported = useSupported(() => navigator$1 && "clipboard" in navigator$1); + const permissionRead = usePermission("clipboard-read"); + const permissionWrite = usePermission("clipboard-write"); + const isSupported = computed(() => isClipboardApiSupported.value || legacy); + const text = shallowRef(""); + const copied = shallowRef(false); + const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false }); + async function updateText() { + let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value)); + if (!useLegacy) try { + text.value = await navigator$1.clipboard.readText(); + } catch (_unused) { + useLegacy = true; + } + if (useLegacy) text.value = legacyRead(); + } + if (isSupported.value && read) useEventListener(["copy", "cut"], updateText, { passive: true }); + async function copy(value = toValue(source)) { + if (isSupported.value && value != null) { + let useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value)); + if (!useLegacy) try { + await navigator$1.clipboard.writeText(value); + } catch (_unused2) { + useLegacy = true; + } + if (useLegacy) legacyCopy(value); + text.value = value; + copied.value = true; + timeout.start(); + } + } + function legacyCopy(value) { + const ta = document.createElement("textarea"); + ta.value = value; + ta.style.position = "absolute"; + ta.style.opacity = "0"; + document.body.appendChild(ta); + ta.select(); + document.execCommand("copy"); + ta.remove(); + } + function legacyRead() { + var _document$getSelectio, _document, _document$getSelectio2; + return (_document$getSelectio = (_document = document) === null || _document === void 0 || (_document$getSelectio2 = _document.getSelection) === null || _document$getSelectio2 === void 0 || (_document$getSelectio2 = _document$getSelectio2.call(_document)) === null || _document$getSelectio2 === void 0 ? void 0 : _document$getSelectio2.toString()) !== null && _document$getSelectio !== void 0 ? _document$getSelectio : ""; + } + function isAllowed(status) { + return status === "granted" || status === "prompt"; + } + return { + isSupported, + text: readonly(text), + copied: readonly(copied), + copy + }; +} +function useClipboardItems(options = {}) { + const { navigator: navigator$1 = defaultNavigator, read = false, source, copiedDuring = 1500 } = options; + const isSupported = useSupported(() => navigator$1 && "clipboard" in navigator$1); + const content = ref([]); + const copied = shallowRef(false); + const timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false }); + function updateContent() { + if (isSupported.value) navigator$1.clipboard.read().then((items) => { + content.value = items; + }); + } + if (isSupported.value && read) useEventListener(["copy", "cut"], updateContent, { passive: true }); + async function copy(value = toValue(source)) { + if (isSupported.value && value != null) { + await navigator$1.clipboard.write(value); + content.value = value; + copied.value = true; + timeout.start(); + } + } + return { + isSupported, + content: shallowReadonly(content), + copied: readonly(copied), + copy, + read: updateContent + }; +} +function cloneFnJSON(source) { + return JSON.parse(JSON.stringify(source)); +} +function useCloned(source, options = {}) { + const cloned = ref({}); + const isModified = shallowRef(false); + let _lastSync = false; + const { manual, clone = cloneFnJSON, deep = true, immediate = true } = options; + watch(cloned, () => { + if (_lastSync) { + _lastSync = false; + return; + } + isModified.value = true; + }, { + deep: true, + flush: "sync" + }); + function sync() { + _lastSync = true; + isModified.value = false; + cloned.value = clone(toValue(source)); + } + if (!manual && (isRef(source) || typeof source === "function")) watch(source, sync, { + ...options, + deep, + immediate + }); + else sync(); + return { + cloned, + isModified, + sync + }; +} +var _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; +var globalKey = "__vueuse_ssr_handlers__"; +var handlers = getHandlers(); +function getHandlers() { + if (!(globalKey in _global)) _global[globalKey] = _global[globalKey] || {}; + return _global[globalKey]; +} +function getSSRHandler(key, fallback) { + return handlers[key] || fallback; +} +function setSSRHandler(key, fn) { + handlers[key] = fn; +} +function usePreferredDark(options) { + return useMediaQuery("(prefers-color-scheme: dark)", options); +} +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 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, defaults$1, storage, options = {}) { + var _options$serializer; + const { flush = "pre", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window: window$1 = defaultWindow, eventFilter, onError = (e) => { + console.error(e); + }, initOnMounted } = options; + const data = (shallow ? shallowRef : ref)(typeof defaults$1 === "function" ? defaults$1() : defaults$1); + const keyComputed = computed(() => toValue(key)); + if (!storage) try { + storage = getSSRHandler("getDefaultStorage", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)(); + } catch (e) { + onError(e); + } + if (!storage) return data; + const rawInit = toValue(defaults$1); + const type = guessSerializerType(rawInit); + const serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type]; + const { pause: pauseWatch, resume: resumeWatch } = pausableWatch(data, (newValue) => write(newValue), { + flush, + deep, + eventFilter + }); + watch(keyComputed, () => update(), { flush }); + let firstMounted = false; + const onStorageEvent = (ev) => { + if (initOnMounted && !firstMounted) return; + update(ev); + }; + const onStorageCustomEvent = (ev) => { + if (initOnMounted && !firstMounted) return; + updateFromCustomEvent(ev); + }; + if (window$1 && listenToStorageChanges) if (storage instanceof Storage) useEventListener(window$1, "storage", onStorageEvent, { passive: true }); + else useEventListener(window$1, customStorageEventName, onStorageCustomEvent); + if (initOnMounted) tryOnMounted(() => { + firstMounted = true; + update(); + }); + else update(); + function dispatchWriteEvent(oldValue, newValue) { + if (window$1) { + const payload = { + key: keyComputed.value, + oldValue, + newValue, + storageArea: storage + }; + window$1.dispatchEvent(storage instanceof Storage ? new StorageEvent("storage", payload) : new CustomEvent(customStorageEventName, { detail: payload })); + } + } + function write(v) { + try { + const oldValue = storage.getItem(keyComputed.value); + if (v == null) { + dispatchWriteEvent(oldValue, null); + storage.removeItem(keyComputed.value); + } else { + const serialized = serializer.write(v); + if (oldValue !== serialized) { + storage.setItem(keyComputed.value, serialized); + dispatchWriteEvent(oldValue, serialized); + } + } + } catch (e) { + onError(e); + } + } + function read(event) { + const rawValue = event ? event.newValue : storage.getItem(keyComputed.value); + if (rawValue == null) { + if (writeDefaults && rawInit != null) storage.setItem(keyComputed.value, serializer.write(rawInit)); + return rawInit; + } else if (!event && mergeDefaults) { + const value = serializer.read(rawValue); + if (typeof mergeDefaults === "function") return mergeDefaults(value, rawInit); + else if (type === "object" && !Array.isArray(value)) return { + ...rawInit, + ...value + }; + return value; + } else if (typeof rawValue !== "string") return rawValue; + else return serializer.read(rawValue); + } + function update(event) { + if (event && event.storageArea !== storage) return; + if (event && event.key == null) { + data.value = rawInit; + return; + } + if (event && event.key !== keyComputed.value) return; + pauseWatch(); + try { + const serializedData = serializer.write(data.value); + if (event === void 0 || (event === null || event === void 0 ? void 0 : event.newValue) !== serializedData) data.value = read(event); + } catch (e) { + onError(e); + } finally { + if (event) nextTick(resumeWatch); + else resumeWatch(); + } + } + function updateFromCustomEvent(event) { + update(event.detail); + } + return data; +} +var CSS_DISABLE_TRANS = "*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}"; +function useColorMode(options = {}) { + const { selector = "html", attribute = "class", initialValue = "auto", window: window$1 = defaultWindow, storage, storageKey = "vueuse-color-scheme", listenToStorageChanges = true, storageRef, emitAuto, disableTransition = true } = options; + const modes = { + auto: "", + light: "light", + dark: "dark", + ...options.modes || {} + }; + const preferredDark = usePreferredDark({ window: window$1 }); + const system = computed(() => preferredDark.value ? "dark" : "light"); + const store = storageRef || (storageKey == null ? toRef2(initialValue) : useStorage(storageKey, initialValue, storage, { + window: window$1, + listenToStorageChanges + })); + const state = computed(() => store.value === "auto" ? system.value : store.value); + const updateHTMLAttrs = getSSRHandler("updateHTMLAttrs", (selector$1, attribute$1, value) => { + const el = typeof selector$1 === "string" ? window$1 === null || window$1 === void 0 ? void 0 : window$1.document.querySelector(selector$1) : unrefElement(selector$1); + if (!el) return; + const classesToAdd = /* @__PURE__ */ new Set(); + const classesToRemove = /* @__PURE__ */ new Set(); + let attributeToChange = null; + if (attribute$1 === "class") { + const current = value.split(/\s/g); + Object.values(modes).flatMap((i) => (i || "").split(/\s/g)).filter(Boolean).forEach((v) => { + if (current.includes(v)) classesToAdd.add(v); + else classesToRemove.add(v); + }); + } else attributeToChange = { + key: attribute$1, + value + }; + if (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null) return; + let style; + if (disableTransition) { + style = window$1.document.createElement("style"); + style.appendChild(document.createTextNode(CSS_DISABLE_TRANS)); + window$1.document.head.appendChild(style); + } + for (const c of classesToAdd) el.classList.add(c); + for (const c of classesToRemove) el.classList.remove(c); + if (attributeToChange) el.setAttribute(attributeToChange.key, attributeToChange.value); + if (disableTransition) { + window$1.getComputedStyle(style).opacity; + document.head.removeChild(style); + } + }); + function defaultOnChanged(mode) { + var _modes$mode; + updateHTMLAttrs(selector, attribute, (_modes$mode = modes[mode]) !== null && _modes$mode !== void 0 ? _modes$mode : mode); + } + function onChanged(mode) { + if (options.onChanged) options.onChanged(mode, defaultOnChanged); + else defaultOnChanged(mode); + } + watch(state, onChanged, { + flush: "post", + immediate: true + }); + tryOnMounted(() => onChanged(state.value)); + const auto = computed({ + get() { + return emitAuto ? store.value : state.value; + }, + set(v) { + store.value = v; + } + }); + return Object.assign(auto, { + store, + system, + state + }); +} +function useConfirmDialog(revealed = shallowRef(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 useCountdown(initialCountdown, options) { + var _options$interval, _options$immediate; + const remaining = shallowRef(toValue(initialCountdown)); + const intervalController = useIntervalFn(() => { + var _options$onTick; + const value = remaining.value - 1; + remaining.value = value < 0 ? 0 : value; + options === null || options === void 0 || (_options$onTick = options.onTick) === null || _options$onTick === void 0 || _options$onTick.call(options); + if (remaining.value <= 0) { + var _options$onComplete; + intervalController.pause(); + options === null || options === void 0 || (_options$onComplete = options.onComplete) === null || _options$onComplete === void 0 || _options$onComplete.call(options); + } + }, (_options$interval = options === null || options === void 0 ? void 0 : options.interval) !== null && _options$interval !== void 0 ? _options$interval : 1e3, { immediate: (_options$immediate = options === null || options === void 0 ? void 0 : options.immediate) !== null && _options$immediate !== void 0 ? _options$immediate : false }); + const reset = (countdown) => { + var _toValue; + remaining.value = (_toValue = toValue(countdown)) !== null && _toValue !== void 0 ? _toValue : toValue(initialCountdown); + }; + const stop = () => { + intervalController.pause(); + reset(); + }; + const resume = () => { + if (!intervalController.isActive.value) { + if (remaining.value > 0) intervalController.resume(); + } + }; + const start = (countdown) => { + reset(countdown); + intervalController.resume(); + }; + return { + remaining, + reset, + stop, + start, + pause: intervalController.pause, + resume, + isActive: intervalController.isActive + }; +} +function useCssVar(prop, target, options = {}) { + const { window: window$1 = defaultWindow, initialValue, observe = false } = options; + const variable = shallowRef(initialValue); + const elRef = computed(() => { + var _window$document; + return unrefElement(target) || (window$1 === null || window$1 === void 0 || (_window$document = window$1.document) === null || _window$document === void 0 ? void 0 : _window$document.documentElement); + }); + function updateCssVar() { + const key = toValue(prop); + const el = toValue(elRef); + if (el && window$1 && key) { + var _window$getComputedSt; + variable.value = ((_window$getComputedSt = window$1.getComputedStyle(el).getPropertyValue(key)) === null || _window$getComputedSt === void 0 ? void 0 : _window$getComputedSt.trim()) || variable.value || initialValue; + } + } + if (observe) useMutationObserver(elRef, updateCssVar, { + attributeFilter: ["style", "class"], + window: window$1 + }); + watch([elRef, () => toValue(prop)], (_, old) => { + if (old[0] && old[1]) old[0].style.removeProperty(old[1]); + updateCssVar(); + }, { immediate: true }); + watch([variable, elRef], ([val, el]) => { + const raw_prop = toValue(prop); + if ((el === null || el === void 0 ? void 0 : el.style) && raw_prop) if (val == null) el.style.removeProperty(raw_prop); + else el.style.setProperty(raw_prop, val); + }, { immediate: true }); + return variable; +} +function useCurrentElement(rootComponent) { + const vm = getCurrentInstance(); + const currentElement = computedWithControl(() => null, () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el); + onUpdated(currentElement.trigger); + onMounted(currentElement.trigger); + return currentElement; +} +function useCycleList(list, options) { + const state = shallowRef(getInitialValue()); + const listRef = toRef2(list); + const index = computed({ + get() { + var _options$fallbackInde; + const targetList = listRef.value; + let index$1 = (options === null || options === void 0 ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value); + if (index$1 < 0) index$1 = (_options$fallbackInde = options === null || options === void 0 ? void 0 : options.fallbackIndex) !== null && _options$fallbackInde !== void 0 ? _options$fallbackInde : 0; + return index$1; + }, + set(v) { + set2(v); + } + }); + function set2(i) { + const targetList = listRef.value; + const length = targetList.length; + const value = targetList[(i % length + length) % length]; + state.value = value; + return value; + } + function shift(delta = 1) { + return set2(index.value + delta); + } + function next(n = 1) { + return shift(n); + } + function prev(n = 1) { + return shift(-n); + } + function getInitialValue() { + var _toValue, _options$initialValue; + return (_toValue = toValue((_options$initialValue = options === null || options === void 0 ? void 0 : options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : toValue(list)[0])) !== null && _toValue !== void 0 ? _toValue : void 0; + } + watch(listRef, () => set2(index.value)); + return { + state, + index, + next, + prev, + go: set2 + }; +} +function useDark(options = {}) { + const { valueDark = "dark", valueLight = "" } = options; + const mode = useColorMode({ + ...options, + onChanged: (mode$1, defaultHandler) => { + var _options$onChanged; + if (options.onChanged) (_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, mode$1 === "dark", defaultHandler, mode$1); + else defaultHandler(mode$1); + }, + modes: { + dark: valueDark, + light: valueLight + } + }); + const system = computed(() => mode.system.value); + return computed({ + get() { + return mode.value === "dark"; + }, + set(v) { + const modeVal = v ? "dark" : "light"; + if (system.value === modeVal) mode.value = "auto"; + else mode.value = modeVal; + } + }); +} +function fnBypass(v) { + return v; +} +function fnSetSource(source, value) { + return source.value = value; +} +function defaultDump(clone) { + return clone ? typeof clone === "function" ? clone : cloneFnJSON : fnBypass; +} +function defaultParse(clone) { + return clone ? typeof clone === "function" ? 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, Number.POSITIVE_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); + }; + return { + source, + undoStack, + redoStack, + last, + history: computed(() => [last.value, ...undoStack.value]), + canUndo: computed(() => undoStack.value.length > 0), + canRedo: computed(() => redoStack.value.length > 0), + clear, + commit, + reset, + undo, + redo + }; +} +function useRefHistory(source, options = {}) { + const { deep = false, flush = "pre", eventFilter, shouldCommit = () => true } = options; + const { eventFilter: composedFilter, pause, resume: resumeTracking, isActive: isTracking } = pausableFilter(eventFilter); + let lastRawValue = source.value; + const { ignoreUpdates, ignorePrevAsyncUpdates, stop } = watchIgnorable(source, commit, { + deep, + flush, + eventFilter: composedFilter + }); + function setSource(source$1, value) { + ignorePrevAsyncUpdates(); + ignoreUpdates(() => { + source$1.value = value; + lastRawValue = value; + }); + } + const manualHistory = useManualRefHistory(source, { + ...options, + clone: options.clone || deep, + setSource + }); + const { clear, commit: manualCommit } = manualHistory; + function commit() { + ignorePrevAsyncUpdates(); + if (!shouldCommit(lastRawValue, source.value)) return; + lastRawValue = source.value; + 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 { + ...manualHistory, + isTracking, + pause, + resume, + commit, + batch, + dispose + }; +} +function useDebouncedRefHistory(source, options = {}) { + const filter = options.debounce ? debounceFilter(options.debounce) : void 0; + return { ...useRefHistory(source, { + ...options, + eventFilter: filter + }) }; +} +function useDeviceMotion(options = {}) { + const { window: window$1 = defaultWindow, requestPermissions = false, eventFilter = bypassFilter } = options; + const isSupported = useSupported(() => typeof DeviceMotionEvent !== "undefined"); + const requirePermissions = useSupported(() => isSupported.value && "requestPermission" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === "function"); + const permissionGranted = shallowRef(false); + const acceleration = ref({ + x: null, + y: null, + z: null + }); + const rotationRate = ref({ + alpha: null, + beta: null, + gamma: null + }); + const interval = shallowRef(0); + const accelerationIncludingGravity = ref({ + x: null, + y: null, + z: null + }); + function init() { + if (window$1) useEventListener(window$1, "devicemotion", createFilterWrapper(eventFilter, (event) => { + var _event$acceleration, _event$acceleration2, _event$acceleration3, _event$accelerationIn, _event$accelerationIn2, _event$accelerationIn3, _event$rotationRate, _event$rotationRate2, _event$rotationRate3; + acceleration.value = { + x: ((_event$acceleration = event.acceleration) === null || _event$acceleration === void 0 ? void 0 : _event$acceleration.x) || null, + y: ((_event$acceleration2 = event.acceleration) === null || _event$acceleration2 === void 0 ? void 0 : _event$acceleration2.y) || null, + z: ((_event$acceleration3 = event.acceleration) === null || _event$acceleration3 === void 0 ? void 0 : _event$acceleration3.z) || null + }; + accelerationIncludingGravity.value = { + x: ((_event$accelerationIn = event.accelerationIncludingGravity) === null || _event$accelerationIn === void 0 ? void 0 : _event$accelerationIn.x) || null, + y: ((_event$accelerationIn2 = event.accelerationIncludingGravity) === null || _event$accelerationIn2 === void 0 ? void 0 : _event$accelerationIn2.y) || null, + z: ((_event$accelerationIn3 = event.accelerationIncludingGravity) === null || _event$accelerationIn3 === void 0 ? void 0 : _event$accelerationIn3.z) || null + }; + rotationRate.value = { + alpha: ((_event$rotationRate = event.rotationRate) === null || _event$rotationRate === void 0 ? void 0 : _event$rotationRate.alpha) || null, + beta: ((_event$rotationRate2 = event.rotationRate) === null || _event$rotationRate2 === void 0 ? void 0 : _event$rotationRate2.beta) || null, + gamma: ((_event$rotationRate3 = event.rotationRate) === null || _event$rotationRate3 === void 0 ? void 0 : _event$rotationRate3.gamma) || null + }; + interval.value = event.interval; + }), { passive: true }); + } + const ensurePermissions = async () => { + if (!requirePermissions.value) permissionGranted.value = true; + if (permissionGranted.value) return; + if (requirePermissions.value) { + const requestPermission = DeviceMotionEvent.requestPermission; + try { + if (await requestPermission() === "granted") { + permissionGranted.value = true; + init(); + } + } catch (error) { + console.error(error); + } + } + }; + if (isSupported.value) if (requestPermissions && requirePermissions.value) ensurePermissions().then(() => init()); + else init(); + return { + acceleration, + accelerationIncludingGravity, + rotationRate, + interval, + isSupported, + requirePermissions, + ensurePermissions, + permissionGranted + }; +} +function useDeviceOrientation(options = {}) { + const { window: window$1 = defaultWindow } = options; + const isSupported = useSupported(() => window$1 && "DeviceOrientationEvent" in window$1); + const isAbsolute = shallowRef(false); + const alpha = shallowRef(null); + const beta = shallowRef(null); + const gamma = shallowRef(null); + if (window$1 && isSupported.value) useEventListener(window$1, "deviceorientation", (event) => { + isAbsolute.value = event.absolute; + alpha.value = event.alpha; + beta.value = event.beta; + gamma.value = event.gamma; + }, { passive: true }); + return { + isSupported, + isAbsolute, + alpha, + beta, + gamma + }; +} +function useDevicePixelRatio(options = {}) { + const { window: window$1 = defaultWindow } = options; + const pixelRatio = shallowRef(1); + const query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options); + let stop = noop; + if (window$1) stop = watchImmediate(query, () => pixelRatio.value = window$1.devicePixelRatio); + return { + pixelRatio: readonly(pixelRatio), + stop + }; +} +function useDevicesList(options = {}) { + const { navigator: navigator$1 = defaultNavigator, requestPermissions = false, constraints = { + audio: true, + video: true + }, onUpdated: onUpdated$1 } = 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$1 && navigator$1.mediaDevices && navigator$1.mediaDevices.enumerateDevices); + const permissionGranted = shallowRef(false); + let stream; + async function update() { + if (!isSupported.value) return; + devices.value = await navigator$1.mediaDevices.enumerateDevices(); + onUpdated$1 === null || onUpdated$1 === void 0 || onUpdated$1(devices.value); + if (stream) { + stream.getTracks().forEach((t) => t.stop()); + stream = null; + } + } + async function ensurePermissions() { + const deviceName = constraints.video ? "camera" : "microphone"; + if (!isSupported.value) return false; + if (permissionGranted.value) return true; + const { state, query } = usePermission(deviceName, { controls: true }); + await query(); + if (state.value !== "granted") { + let granted = true; + try { + const allDevices = await navigator$1.mediaDevices.enumerateDevices(); + const hasCamera = allDevices.some((device) => device.kind === "videoinput"); + const hasMicrophone = allDevices.some((device) => device.kind === "audioinput" || device.kind === "audiooutput"); + constraints.video = hasCamera ? constraints.video : false; + constraints.audio = hasMicrophone ? constraints.audio : false; + stream = await navigator$1.mediaDevices.getUserMedia(constraints); + } catch (_unused) { + stream = null; + granted = false; + } + update(); + permissionGranted.value = granted; + } else permissionGranted.value = true; + return permissionGranted.value; + } + if (isSupported.value) { + if (requestPermissions) ensurePermissions(); + useEventListener(navigator$1.mediaDevices, "devicechange", update, { passive: true }); + update(); + } + return { + devices, + ensurePermissions, + permissionGranted, + videoInputs, + audioInputs, + audioOutputs, + isSupported + }; +} +function useDisplayMedia(options = {}) { + var _options$enabled; + const enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false); + const video = options.video; + const audio = options.audio; + const { navigator: navigator$1 = defaultNavigator } = options; + const isSupported = useSupported(() => { + var _navigator$mediaDevic; + return navigator$1 === null || navigator$1 === void 0 || (_navigator$mediaDevic = navigator$1.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getDisplayMedia; + }); + const constraint = { + audio, + video + }; + const stream = shallowRef(); + async function _start() { + var _stream$value; + if (!isSupported.value || stream.value) return; + stream.value = await navigator$1.mediaDevices.getDisplayMedia(constraint); + (_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => useEventListener(t, "ended", stop, { passive: true })); + return stream.value; + } + async function _stop() { + var _stream$value2; + (_stream$value2 = stream.value) === null || _stream$value2 === void 0 || _stream$value2.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(options = {}) { + const { document: document$1 = defaultDocument } = options; + if (!document$1) return shallowRef("visible"); + const visibility = shallowRef(document$1.visibilityState); + useEventListener(document$1, "visibilitychange", () => { + visibility.value = document$1.visibilityState; + }, { passive: true }); + return visibility; +} +function useDraggable(target, options = {}) { + var _toValue; + const { pointerTypes, preventDefault: preventDefault$1, stopPropagation, exact, onMove, onEnd, onStart, initialValue, axis = "both", draggingElement = defaultWindow, containerElement, handle: draggingHandle = target, buttons = [0] } = options; + const position = ref((_toValue = toValue(initialValue)) !== null && _toValue !== void 0 ? _toValue : { + x: 0, + y: 0 + }); + const pressedDelta = ref(); + const filterEvent = (e) => { + if (pointerTypes) return pointerTypes.includes(e.pointerType); + return true; + }; + const handleEvent = (e) => { + if (toValue(preventDefault$1)) e.preventDefault(); + if (toValue(stopPropagation)) e.stopPropagation(); + }; + const start = (e) => { + var _container$getBoundin; + if (!toValue(buttons).includes(e.button)) return; + if (toValue(options.disabled) || !filterEvent(e)) return; + if (toValue(exact) && e.target !== toValue(target)) return; + const container = toValue(containerElement); + const containerRect = container === null || container === void 0 || (_container$getBoundin = container.getBoundingClientRect) === null || _container$getBoundin === void 0 ? void 0 : _container$getBoundin.call(container); + const targetRect = toValue(target).getBoundingClientRect(); + const pos = { + x: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left), + y: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top) + }; + if ((onStart === null || onStart === void 0 ? void 0 : onStart(pos, e)) === false) return; + pressedDelta.value = pos; + handleEvent(e); + }; + const move = (e) => { + if (toValue(options.disabled) || !filterEvent(e)) return; + if (!pressedDelta.value) return; + const container = toValue(containerElement); + const targetRect = toValue(target).getBoundingClientRect(); + let { x, y } = position.value; + if (axis === "x" || axis === "both") { + x = e.clientX - pressedDelta.value.x; + if (container) x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width); + } + if (axis === "y" || axis === "both") { + y = e.clientY - pressedDelta.value.y; + if (container) y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height); + } + position.value = { + x, + y + }; + onMove === null || onMove === void 0 || onMove(position.value, e); + handleEvent(e); + }; + const end = (e) => { + if (toValue(options.disabled) || !filterEvent(e)) return; + if (!pressedDelta.value) return; + pressedDelta.value = void 0; + onEnd === null || onEnd === void 0 || onEnd(position.value, e); + handleEvent(e); + }; + if (isClient) { + const config = () => { + var _options$capture; + return { + capture: (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : true, + passive: !toValue(preventDefault$1) + }; + }; + useEventListener(draggingHandle, "pointerdown", start, config); + useEventListener(draggingElement, "pointermove", move, config); + useEventListener(draggingElement, "pointerup", end, config); + } + return { + ...toRefs2(position), + position, + isDragging: computed(() => !!pressedDelta.value), + style: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`) + }; +} +function useDropZone(target, options = {}) { + const isOverDropZone = shallowRef(false); + const files = shallowRef(null); + let counter = 0; + let isValid = true; + if (isClient) { + var _options$multiple, _options$preventDefau; + const _options = typeof options === "function" ? { onDrop: options } : options; + const multiple = (_options$multiple = _options.multiple) !== null && _options$multiple !== void 0 ? _options$multiple : true; + const preventDefaultForUnhandled = (_options$preventDefau = _options.preventDefaultForUnhandled) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : false; + const getFiles = (event) => { + var _event$dataTransfer$f, _event$dataTransfer; + const list = Array.from((_event$dataTransfer$f = (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.files) !== null && _event$dataTransfer$f !== void 0 ? _event$dataTransfer$f : []); + return list.length === 0 ? null : multiple ? list : [list[0]]; + }; + const checkDataTypes = (types) => { + const dataTypes = unref(_options.dataTypes); + if (typeof dataTypes === "function") return dataTypes(types); + if (!(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length)) return true; + if (types.length === 0) return false; + return types.every((type) => dataTypes.some((allowedType) => type.includes(allowedType))); + }; + const checkValidity = (items) => { + const dataTypesValid = checkDataTypes(Array.from(items !== null && items !== void 0 ? items : []).map((item) => item.type)); + const multipleFilesValid = multiple || items.length <= 1; + return dataTypesValid && multipleFilesValid; + }; + const isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !("chrome" in window); + const handleDragEvent = (event, eventType) => { + var _event$dataTransfer2, _ref; + const dataTransferItemList = (_event$dataTransfer2 = event.dataTransfer) === null || _event$dataTransfer2 === void 0 ? void 0 : _event$dataTransfer2.items; + isValid = (_ref = dataTransferItemList && checkValidity(dataTransferItemList)) !== null && _ref !== void 0 ? _ref : false; + if (preventDefaultForUnhandled) event.preventDefault(); + if (!isSafari() && !isValid) { + if (event.dataTransfer) event.dataTransfer.dropEffect = "none"; + return; + } + event.preventDefault(); + if (event.dataTransfer) event.dataTransfer.dropEffect = "copy"; + const currentFiles = getFiles(event); + switch (eventType) { + case "enter": + var _options$onEnter; + counter += 1; + isOverDropZone.value = true; + (_options$onEnter = _options.onEnter) === null || _options$onEnter === void 0 || _options$onEnter.call(_options, null, event); + break; + case "over": + var _options$onOver; + (_options$onOver = _options.onOver) === null || _options$onOver === void 0 || _options$onOver.call(_options, null, event); + break; + case "leave": + var _options$onLeave; + counter -= 1; + if (counter === 0) isOverDropZone.value = false; + (_options$onLeave = _options.onLeave) === null || _options$onLeave === void 0 || _options$onLeave.call(_options, null, event); + break; + case "drop": + counter = 0; + isOverDropZone.value = false; + if (isValid) { + var _options$onDrop; + files.value = currentFiles; + (_options$onDrop = _options.onDrop) === null || _options$onDrop === void 0 || _options$onDrop.call(_options, currentFiles, event); + } + break; + } + }; + useEventListener(target, "dragenter", (event) => handleDragEvent(event, "enter")); + useEventListener(target, "dragover", (event) => handleDragEvent(event, "over")); + useEventListener(target, "dragleave", (event) => handleDragEvent(event, "leave")); + useEventListener(target, "drop", (event) => handleDragEvent(event, "drop")); + } + return { + files, + isOverDropZone + }; +} +function useResizeObserver(target, callback, options = {}) { + const { window: window$1 = defaultWindow, ...observerOptions } = options; + let observer; + const isSupported = useSupported(() => window$1 && "ResizeObserver" in window$1); + const cleanup = () => { + if (observer) { + observer.disconnect(); + observer = void 0; + } + }; + const stopWatch = watch(computed(() => { + const _targets = toValue(target); + return Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)]; + }), (els) => { + cleanup(); + if (isSupported.value && window$1) { + observer = new ResizeObserver(callback); + for (const _el of els) if (_el) 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, updateTiming = "sync" } = options; + const height = shallowRef(0); + const bottom = shallowRef(0); + const left = shallowRef(0); + const right = shallowRef(0); + const top = shallowRef(0); + const width = shallowRef(0); + const x = shallowRef(0); + const y = shallowRef(0); + function recalculate() { + 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; + } + function update() { + if (updateTiming === "sync") recalculate(); + else if (updateTiming === "next-frame") requestAnimationFrame(() => recalculate()); + } + useResizeObserver(target, update); + watch(() => unrefElement(target), (ele) => !ele && update()); + useMutationObserver(target, update, { attributeFilter: ["style", "class"] }); + 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 useElementByPoint(options) { + const { x, y, document: document$1 = defaultDocument, multiple, interval = "requestAnimationFrame", immediate = true } = options; + const isSupported = useSupported(() => { + if (toValue(multiple)) return document$1 && "elementsFromPoint" in document$1; + return document$1 && "elementFromPoint" in document$1; + }); + const element = shallowRef(null); + const cb = () => { + var _document$elementsFro, _document$elementFrom; + element.value = toValue(multiple) ? (_document$elementsFro = document$1 === null || document$1 === void 0 ? void 0 : document$1.elementsFromPoint(toValue(x), toValue(y))) !== null && _document$elementsFro !== void 0 ? _document$elementsFro : [] : (_document$elementFrom = document$1 === null || document$1 === void 0 ? void 0 : document$1.elementFromPoint(toValue(x), toValue(y))) !== null && _document$elementFrom !== void 0 ? _document$elementFrom : null; + }; + return { + isSupported, + element, + ...interval === "requestAnimationFrame" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate }) + }; +} +function useElementHover(el, options = {}) { + const { delayEnter = 0, delayLeave = 0, triggerOnRemoval = false, window: window$1 = defaultWindow } = options; + const isHovered = shallowRef(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$1) return isHovered; + useEventListener(el, "mouseenter", () => toggle(true), { passive: true }); + useEventListener(el, "mouseleave", () => toggle(false), { passive: true }); + if (triggerOnRemoval) onElementRemoval(computed(() => unrefElement(el)), () => toggle(false)); + return isHovered; +} +function useElementSize(target, initialSize = { + width: 0, + height: 0 +}, options = {}) { + const { window: window$1 = defaultWindow, box = "content-box" } = options; + const isSVG = computed(() => { + var _unrefElement; + return (_unrefElement = unrefElement(target)) === null || _unrefElement === void 0 || (_unrefElement = _unrefElement.namespaceURI) === null || _unrefElement === void 0 ? void 0 : _unrefElement.includes("svg"); + }); + const width = shallowRef(initialSize.width); + const height = shallowRef(initialSize.height); + const { stop: stop1 } = useResizeObserver(target, ([entry]) => { + const boxSize = box === "border-box" ? entry.borderBoxSize : box === "content-box" ? entry.contentBoxSize : entry.devicePixelContentBoxSize; + if (window$1 && isSVG.value) { + const $elem = unrefElement(target); + if ($elem) { + const rect = $elem.getBoundingClientRect(); + width.value = rect.width; + height.value = rect.height; + } + } else if (boxSize) { + const formatBoxSize = toArray(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); + tryOnMounted(() => { + const ele = unrefElement(target); + if (ele) { + width.value = "offsetWidth" in ele ? ele.offsetWidth : initialSize.width; + height.value = "offsetHeight" in ele ? ele.offsetHeight : initialSize.height; + } + }); + const stop2 = watch(() => unrefElement(target), (ele) => { + width.value = ele ? initialSize.width : 0; + height.value = ele ? initialSize.height : 0; + }); + function stop() { + stop1(); + stop2(); + } + return { + width, + height, + stop + }; +} +function useIntersectionObserver(target, callback, options = {}) { + const { root, rootMargin = "0px", threshold = 0, window: window$1 = defaultWindow, immediate = true } = options; + const isSupported = useSupported(() => window$1 && "IntersectionObserver" in window$1); + const targets = computed(() => { + return toArray(toValue(target)).map(unrefElement).filter(notNullish); + }); + let cleanup = noop; + const isActive = shallowRef(immediate); + const stopWatch = isSupported.value ? watch(() => [ + targets.value, + unrefElement(root), + isActive.value + ], ([targets$1, root$1]) => { + cleanup(); + if (!isActive.value) return; + if (!targets$1.length) return; + const observer = new IntersectionObserver(callback, { + root: unrefElement(root$1), + rootMargin, + threshold + }); + targets$1.forEach((el) => el && observer.observe(el)); + cleanup = () => { + observer.disconnect(); + cleanup = noop; + }; + }, { + immediate, + flush: "post" + }) : noop; + const stop = () => { + cleanup(); + stopWatch(); + isActive.value = false; + }; + tryOnScopeDispose(stop); + return { + isSupported, + isActive, + pause() { + cleanup(); + isActive.value = false; + }, + resume() { + isActive.value = true; + }, + stop + }; +} +function useElementVisibility(element, options = {}) { + const { window: window$1 = defaultWindow, scrollTarget, threshold = 0, rootMargin, once = false } = options; + const elementIsVisible = shallowRef(false); + const { stop } = useIntersectionObserver(element, (intersectionObserverEntries) => { + let isIntersecting = elementIsVisible.value; + let latestTime = 0; + for (const entry of intersectionObserverEntries) if (entry.time >= latestTime) { + latestTime = entry.time; + isIntersecting = entry.isIntersecting; + } + elementIsVisible.value = isIntersecting; + if (once) watchOnce(elementIsVisible, () => { + stop(); + }); + }, { + root: scrollTarget, + window: window$1, + threshold, + rootMargin: toValue(rootMargin) + }); + return elementIsVisible; +} +var events = /* @__PURE__ */ new Map(); +function useEventBus(key) { + const scope = getCurrentScope(); + function on(listener) { + var _scope$cleanups; + const listeners = events.get(key) || /* @__PURE__ */ new Set(); + listeners.add(listener); + events.set(key, listeners); + const _off = () => off(listener); + scope === null || scope === void 0 || (_scope$cleanups = scope.cleanups) === null || _scope$cleanups === void 0 || _scope$cleanups.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; + listeners.delete(listener); + if (!listeners.size) reset(); + } + function reset() { + events.delete(key); + } + function emit(event, payload) { + var _events$get; + (_events$get = events.get(key)) === null || _events$get === void 0 || _events$get.forEach((v) => v(event, payload)); + } + return { + on, + once, + off, + emit, + reset + }; +} +function resolveNestedOptions$1(options) { + if (options === true) return {}; + return options; +} +function useEventSource(url, events$1 = [], options = {}) { + const event = shallowRef(null); + const data = shallowRef(null); + const status = shallowRef("CONNECTING"); + const eventSource = ref(null); + const error = shallowRef(null); + const urlRef = toRef2(url); + const lastEventId = shallowRef(null); + let explicitlyClosed = false; + let retried = 0; + const { withCredentials = false, immediate = true, autoConnect = true, autoReconnect, serializer = { read: (v) => v } } = options; + const close = () => { + if (isClient && eventSource.value) { + eventSource.value.close(); + eventSource.value = null; + status.value = "CLOSED"; + explicitlyClosed = true; + } + }; + const _init = () => { + if (explicitlyClosed || typeof urlRef.value === "undefined") return; + const es = new EventSource(urlRef.value, { withCredentials }); + status.value = "CONNECTING"; + eventSource.value = es; + es.onopen = () => { + status.value = "OPEN"; + error.value = null; + }; + es.onerror = (e) => { + status.value = "CLOSED"; + error.value = e; + if (es.readyState === 2 && !explicitlyClosed && autoReconnect) { + es.close(); + const { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions$1(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 || onFailed === void 0 || onFailed(); + } + }; + es.onmessage = (e) => { + var _serializer$read; + event.value = null; + data.value = (_serializer$read = serializer.read(e.data)) !== null && _serializer$read !== void 0 ? _serializer$read : null; + lastEventId.value = e.lastEventId; + }; + for (const event_name of events$1) useEventListener(es, event_name, (e) => { + var _serializer$read2, _e$lastEventId; + event.value = event_name; + data.value = (_serializer$read2 = serializer.read(e.data)) !== null && _serializer$read2 !== void 0 ? _serializer$read2 : null; + lastEventId.value = (_e$lastEventId = e.lastEventId) !== null && _e$lastEventId !== void 0 ? _e$lastEventId : null; + }, { passive: true }); + }; + const open = () => { + if (!isClient) return; + close(); + explicitlyClosed = false; + retried = 0; + _init(); + }; + if (immediate) open(); + if (autoConnect) watch(urlRef, open); + tryOnScopeDispose(close); + return { + eventSource, + event, + data, + status, + error, + open, + close, + lastEventId + }; +} +function useEyeDropper(options = {}) { + const { initialValue = "" } = options; + const isSupported = useSupported(() => typeof window !== "undefined" && "EyeDropper" in window); + const sRGBHex = shallowRef(initialValue); + async function open(openOptions) { + if (!isSupported.value) return; + const result = await new window.EyeDropper().open(openOptions); + sRGBHex.value = result.sRGBHex; + return result; + } + return { + isSupported, + sRGBHex, + open + }; +} +function useFavicon(newIcon = null, options = {}) { + const { baseUrl = "", rel = "icon", document: document$1 = defaultDocument } = options; + const favicon = toRef2(newIcon); + const applyIcon = (icon) => { + const elements = document$1 === null || document$1 === void 0 ? void 0 : document$1.head.querySelectorAll(`link[rel*="${rel}"]`); + if (!elements || elements.length === 0) { + const link = document$1 === null || document$1 === void 0 ? void 0 : document$1.createElement("link"); + if (link) { + link.rel = rel; + link.href = `${baseUrl}${icon}`; + link.type = `image/${icon.split(".").pop()}`; + document$1 === null || document$1 === void 0 || document$1.head.append(link); + } + return; + } + elements === null || elements === void 0 || elements.forEach((el) => el.href = `${baseUrl}${icon}`); + }; + watch(favicon, (i, o) => { + if (typeof i === "string" && i !== o) applyIcon(i); + }, { immediate: true }); + return favicon; +} +var payloadMapping = { + json: "application/json", + text: "text/plain" +}; +function isFetchOptions(obj) { + return obj && containsProp(obj, "immediate", "refetch", "initialData", "timeout", "beforeFetch", "afterFetch", "onFetchError", "fetch", "updateDataOnError"); +} +var reAbsolute = /^(?:[a-z][a-z\d+\-.]*:)?\/\//i; +function isAbsoluteURL(url) { + return reAbsolute.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) => { + let callback; + for (let i = callbacks.length - 1; i >= 0; i--) if (callbacks[i] != null) { + callback = callbacks[i]; + break; + } + if (callback) return { + ...ctx, + ...await callback(ctx) + }; + return ctx; + }; + else return async (ctx) => { + for (const callback of callbacks) if (callback) ctx = { + ...ctx, + ...await callback(ctx) + }; + 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 = toValue(config.baseUrl); + const targetUrl = toValue(url); + return baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl; + }); + let options = _options; + let fetchOptions = _fetchOptions; + if (args.length > 0) if (isFetchOptions(args[0])) options = { + ...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 = { + ...fetchOptions, + ...args[0], + headers: { + ...headersToObject(fetchOptions.headers) || {}, + ...headersToObject(args[0].headers) || {} + } + }; + if (args.length > 1 && isFetchOptions(args[1])) options = { + ...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 _defaultWindow$fetch, _globalThis; + const supportsAbort = typeof AbortController === "function"; + let fetchOptions = {}; + let options = { + immediate: true, + refetch: false, + timeout: 0, + updateDataOnError: false + }; + const config = { + method: "GET", + type: "text", + payload: void 0 + }; + if (args.length > 0) if (isFetchOptions(args[0])) options = { + ...options, + ...args[0] + }; + else fetchOptions = args[0]; + if (args.length > 1) { + if (isFetchOptions(args[1])) options = { + ...options, + ...args[1] + }; + } + const { fetch = (_defaultWindow$fetch = defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.fetch) !== null && _defaultWindow$fetch !== void 0 ? _defaultWindow$fetch : (_globalThis = globalThis) === null || _globalThis === void 0 ? void 0 : _globalThis.fetch, initialData, timeout } = options; + const responseEvent = createEventHook(); + const errorEvent = createEventHook(); + const finallyEvent = createEventHook(); + const isFinished = shallowRef(false); + const isFetching = shallowRef(false); + const aborted = shallowRef(false); + const statusCode = shallowRef(null); + const response = shallowRef(null); + const error = shallowRef(null); + const data = shallowRef(initialData || null); + const canAbort = computed(() => supportsAbort && isFetching.value); + let controller; + let timer; + const abort = (reason) => { + if (supportsAbort) { + controller === null || controller === void 0 || controller.abort(reason); + controller = new AbortController(); + controller.signal.onabort = () => aborted.value = true; + fetchOptions = { + ...fetchOptions, + signal: controller.signal + }; + } + }; + const loading = (isLoading) => { + isFetching.value = isLoading; + isFinished.value = !isLoading; + }; + if (timeout) timer = useTimeoutFn(abort, timeout, { immediate: false }); + let executeCounter = 0; + const execute = async (throwOnFailed = false) => { + var _context$options; + abort(); + loading(true); + error.value = null; + statusCode.value = null; + aborted.value = false; + executeCounter += 1; + const currentExecuteCounter = executeCounter; + const defaultFetchOptions = { + method: config.method, + headers: {} + }; + const payload = toValue(config.payload); + if (payload) { + var _payloadMapping$confi; + const headers = headersToObject(defaultFetchOptions.headers); + const proto = Object.getPrototypeOf(payload); + if (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData)) config.payloadType = "json"; + if (config.payloadType) headers["Content-Type"] = (_payloadMapping$confi = payloadMapping[config.payloadType]) !== null && _payloadMapping$confi !== void 0 ? _payloadMapping$confi : config.payloadType; + defaultFetchOptions.body = config.payloadType === "json" ? JSON.stringify(payload) : payload; + } + let isCanceled = false; + const context = { + url: toValue(url), + options: { + ...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 fetch(context.url, { + ...defaultFetchOptions, + ...context.options, + headers: { + ...headersToObject(defaultFetchOptions.headers), + ...headersToObject((_context$options = context.options) === null || _context$options === void 0 ? void 0 : _context$options.headers) + } + }).then(async (fetchResponse) => { + response.value = fetchResponse; + statusCode.value = fetchResponse.status; + responseData = await fetchResponse.clone()[config.type](); + if (!fetchResponse.ok) { + data.value = initialData || null; + throw new Error(fetchResponse.statusText); + } + if (options.afterFetch) ({ data: responseData } = await options.afterFetch({ + data: responseData, + response: fetchResponse, + context, + execute + })); + data.value = responseData; + responseEvent.trigger(fetchResponse); + return fetchResponse; + }).catch(async (fetchError) => { + let errorData = fetchError.message || fetchError.name; + if (options.onFetchError) ({ error: errorData, data: responseData } = await options.onFetchError({ + data: responseData, + error: fetchError, + response: response.value, + context, + execute + })); + error.value = errorData; + if (options.updateDataOnError) data.value = responseData; + errorEvent.trigger(fetchError); + if (throwOnFailed) throw fetchError; + return null; + }).finally(() => { + if (currentExecuteCounter === executeCounter) loading(false); + if (timer) timer.stop(); + finallyEvent.trigger(null); + }); + }; + const refetch = toRef2(options.refetch); + watch([refetch, toRef2(url)], ([refetch$1]) => refetch$1 && execute(), { deep: true }); + const shell = { + isFinished: readonly(isFinished), + isFetching: readonly(isFetching), + statusCode, + response, + error, + data, + 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, toRef2(config.payload)], ([refetch$1]) => refetch$1 && execute(), { deep: true }); + return { + ...shell, + then(onFulfilled, onRejected) { + return waitUntilFinished().then(onFulfilled, onRejected); + } + }; + } + }; + } + function waitUntilFinished() { + return new Promise((resolve, reject) => { + until(isFinished).toBe(true).then(() => resolve(shell)).catch(reject); + }); + } + function setType(type) { + return () => { + if (!isFetching.value) { + config.type = type; + return { + ...shell, + then(onFulfilled, onRejected) { + return waitUntilFinished().then(onFulfilled, onRejected); + } + }; + } + }; + } + if (options.immediate) Promise.resolve().then(() => execute()); + return { + ...shell, + then(onFulfilled, onRejected) { + return waitUntilFinished().then(onFulfilled, onRejected); + } + }; +} +function joinPaths(start, end) { + if (!start.endsWith("/") && !end.startsWith("/")) return `${start}/${end}`; + if (start.endsWith("/") && end.startsWith("/")) return `${start.slice(0, -1)}${end}`; + return `${start}${end}`; +} +var DEFAULT_OPTIONS = { + multiple: true, + accept: "*", + reset: false, + directory: false +}; +function prepareInitialFiles(files) { + if (!files) return null; + if (files instanceof FileList) return files; + const dt = new DataTransfer(); + for (const file of files) dt.items.add(file); + return dt.files; +} +function useFileDialog(options = {}) { + const { document: document$1 = defaultDocument } = options; + const files = ref(prepareInitialFiles(options.initialFiles)); + const { on: onChange, trigger: changeTrigger } = createEventHook(); + const { on: onCancel, trigger: cancelTrigger } = createEventHook(); + const inputRef = computed(() => { + var _unrefElement; + const input = (_unrefElement = unrefElement(options.input)) !== null && _unrefElement !== void 0 ? _unrefElement : document$1 ? document$1.createElement("input") : void 0; + if (input) { + input.type = "file"; + input.onchange = (event) => { + files.value = event.target.files; + changeTrigger(files.value); + }; + input.oncancel = () => { + cancelTrigger(); + }; + } + return input; + }); + const reset = () => { + files.value = null; + if (inputRef.value && inputRef.value.value) { + inputRef.value.value = ""; + changeTrigger(null); + } + }; + const applyOptions = (options$1) => { + const el = inputRef.value; + if (!el) return; + el.multiple = toValue(options$1.multiple); + el.accept = toValue(options$1.accept); + el.webkitdirectory = toValue(options$1.directory); + if (hasOwn(options$1, "capture")) el.capture = toValue(options$1.capture); + }; + const open = (localOptions) => { + const el = inputRef.value; + if (!el) return; + const mergedOptions = { + ...DEFAULT_OPTIONS, + ...options, + ...localOptions + }; + applyOptions(mergedOptions); + if (toValue(mergedOptions.reset)) reset(); + el.click(); + }; + watchEffect(() => { + applyOptions(options); + }); + return { + files: readonly(files), + open, + reset, + onCancel, + onChange + }; +} +function useFileSystemAccess(options = {}) { + const { window: _window = defaultWindow, dataType = "Text" } = options; + const window$1 = _window; + const isSupported = useSupported(() => window$1 && "showSaveFilePicker" in window$1 && "showOpenFilePicker" in window$1); + const fileHandle = shallowRef(); + const data = shallowRef(); + const file = shallowRef(); + const fileName = computed(() => { + var _file$value$name, _file$value; + return (_file$value$name = (_file$value = file.value) === null || _file$value === void 0 ? void 0 : _file$value.name) !== null && _file$value$name !== void 0 ? _file$value$name : ""; + }); + const fileMIME = computed(() => { + var _file$value$type, _file$value2; + return (_file$value$type = (_file$value2 = file.value) === null || _file$value2 === void 0 ? void 0 : _file$value2.type) !== null && _file$value$type !== void 0 ? _file$value$type : ""; + }); + const fileSize = computed(() => { + var _file$value$size, _file$value3; + return (_file$value$size = (_file$value3 = file.value) === null || _file$value3 === void 0 ? void 0 : _file$value3.size) !== null && _file$value$size !== void 0 ? _file$value$size : 0; + }); + const fileLastModified = computed(() => { + var _file$value$lastModif, _file$value4; + return (_file$value$lastModif = (_file$value4 = file.value) === null || _file$value4 === void 0 ? void 0 : _file$value4.lastModified) !== null && _file$value$lastModif !== void 0 ? _file$value$lastModif : 0; + }); + async function open(_options = {}) { + if (!isSupported.value) return; + const [handle] = await window$1.showOpenFilePicker({ + ...toValue(options), + ..._options + }); + fileHandle.value = handle; + await updateData(); + } + async function create(_options = {}) { + if (!isSupported.value) return; + fileHandle.value = await window$1.showSaveFilePicker({ + ...options, + ..._options + }); + data.value = void 0; + 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 window$1.showSaveFilePicker({ + ...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 _fileHandle$value; + file.value = await ((_fileHandle$value = fileHandle.value) === null || _fileHandle$value === void 0 ? void 0 : _fileHandle$value.getFile()); + } + async function updateData() { + var _file$value5, _file$value6; + await updateFile(); + const type = toValue(dataType); + if (type === "Text") data.value = await ((_file$value5 = file.value) === null || _file$value5 === void 0 ? void 0 : _file$value5.text()); + else if (type === "ArrayBuffer") data.value = await ((_file$value6 = file.value) === null || _file$value6 === void 0 ? void 0 : _file$value6.arrayBuffer()); + else if (type === "Blob") data.value = file.value; + } + watch(() => toValue(dataType), updateData); + return { + isSupported, + data, + file, + fileName, + fileMIME, + fileSize, + fileLastModified, + open, + create, + save, + saveAs, + updateData + }; +} +function useFocus(target, options = {}) { + const { initialValue = false, focusVisible = false, preventScroll = false } = options; + const innerFocused = shallowRef(false); + const targetElement = computed(() => unrefElement(target)); + const listenerOptions = { passive: true }; + useEventListener(targetElement, "focus", (event) => { + var _matches, _ref; + if (!focusVisible || ((_matches = (_ref = event.target).matches) === null || _matches === void 0 ? void 0 : _matches.call(_ref, ":focus-visible"))) innerFocused.value = true; + }, listenerOptions); + useEventListener(targetElement, "blur", () => innerFocused.value = false, listenerOptions); + const focused = computed({ + get: () => innerFocused.value, + set(value) { + var _targetElement$value, _targetElement$value2; + if (!value && innerFocused.value) (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || _targetElement$value.blur(); + else if (value && !innerFocused.value) (_targetElement$value2 = targetElement.value) === null || _targetElement$value2 === void 0 || _targetElement$value2.focus({ preventScroll }); + } + }); + watch(targetElement, () => { + focused.value = initialValue; + }, { + immediate: true, + flush: "post" + }); + return { focused }; +} +var EVENT_FOCUS_IN = "focusin"; +var EVENT_FOCUS_OUT = "focusout"; +var PSEUDO_CLASS_FOCUS_WITHIN = ":focus-within"; +function useFocusWithin(target, options = {}) { + const { window: window$1 = defaultWindow } = options; + const targetElement = computed(() => unrefElement(target)); + const _focused = shallowRef(false); + const focused = computed(() => _focused.value); + const activeElement = useActiveElement(options); + if (!window$1 || !activeElement.value) return { focused }; + const listenerOptions = { passive: true }; + useEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions); + useEventListener(targetElement, EVENT_FOCUS_OUT, () => { + var _targetElement$value$, _targetElement$value, _targetElement$value$2; + return _focused.value = (_targetElement$value$ = (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || (_targetElement$value$2 = _targetElement$value.matches) === null || _targetElement$value$2 === void 0 ? void 0 : _targetElement$value$2.call(_targetElement$value, PSEUDO_CLASS_FOCUS_WITHIN)) !== null && _targetElement$value$ !== void 0 ? _targetElement$value$ : false; + }, listenerOptions); + return { focused }; +} +function useFps(options) { + var _options$every; + const fps = shallowRef(0); + if (typeof performance === "undefined") return fps; + const every = (_options$every = options === null || options === void 0 ? void 0 : options.every) !== null && _options$every !== void 0 ? _options$every : 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 eventHandlers = [ + "fullscreenchange", + "webkitfullscreenchange", + "webkitendfullscreen", + "mozfullscreenchange", + "MSFullscreenChange" +]; +function useFullscreen(target, options = {}) { + const { document: document$1 = defaultDocument, autoExit = false } = options; + const targetRef = computed(() => { + var _unrefElement; + return (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : document$1 === null || document$1 === void 0 ? void 0 : document$1.documentElement; + }); + const isFullscreen = shallowRef(false); + const requestMethod = computed(() => { + return [ + "requestFullscreen", + "webkitRequestFullscreen", + "webkitEnterFullscreen", + "webkitEnterFullScreen", + "webkitRequestFullScreen", + "mozRequestFullScreen", + "msRequestFullscreen" + ].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value); + }); + const exitMethod = computed(() => { + return [ + "exitFullscreen", + "webkitExitFullscreen", + "webkitExitFullScreen", + "webkitCancelFullScreen", + "mozCancelFullScreen", + "msExitFullscreen" + ].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value); + }); + const fullscreenEnabled = computed(() => { + return [ + "fullScreen", + "webkitIsFullScreen", + "webkitDisplayingFullscreen", + "mozFullScreen", + "msFullscreenElement" + ].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value); + }); + const fullscreenElementMethod = [ + "fullscreenElement", + "webkitFullscreenElement", + "mozFullScreenElement", + "msFullscreenElement" + ].find((m) => document$1 && m in document$1); + const isSupported = useSupported(() => targetRef.value && document$1 && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0); + const isCurrentElementFullScreen = () => { + if (fullscreenElementMethod) return (document$1 === null || document$1 === void 0 ? void 0 : document$1[fullscreenElementMethod]) === targetRef.value; + return false; + }; + const isElementFullScreen = () => { + if (fullscreenEnabled.value) if (document$1 && document$1[fullscreenEnabled.value] != null) return document$1[fullscreenEnabled.value]; + else { + const target$1 = targetRef.value; + if ((target$1 === null || target$1 === void 0 ? void 0 : target$1[fullscreenEnabled.value]) != null) return Boolean(target$1[fullscreenEnabled.value]); + } + return false; + }; + async function exit() { + if (!isSupported.value || !isFullscreen.value) return; + if (exitMethod.value) if ((document$1 === null || document$1 === void 0 ? void 0 : document$1[exitMethod.value]) != null) await document$1[exitMethod.value](); + else { + const target$1 = targetRef.value; + if ((target$1 === null || target$1 === void 0 ? void 0 : target$1[exitMethod.value]) != null) await target$1[exitMethod.value](); + } + isFullscreen.value = false; + } + async function enter() { + if (!isSupported.value || isFullscreen.value) return; + if (isElementFullScreen()) await exit(); + const target$1 = targetRef.value; + if (requestMethod.value && (target$1 === null || target$1 === void 0 ? void 0 : target$1[requestMethod.value]) != null) { + await target$1[requestMethod.value](); + isFullscreen.value = true; + } + } + async function toggle() { + await (isFullscreen.value ? exit() : enter()); + } + const handlerCallback = () => { + const isElementFullScreenValue = isElementFullScreen(); + if (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen()) isFullscreen.value = isElementFullScreenValue; + }; + const listenerOptions = { + capture: false, + passive: true + }; + useEventListener(document$1, eventHandlers, handlerCallback, listenerOptions); + useEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions); + tryOnMounted(handlerCallback, 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: navigator$1 = defaultNavigator } = options; + const isSupported = useSupported(() => navigator$1 && "getGamepads" in navigator$1); + 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, + index: gamepad.index, + connected: gamepad.connected, + mapping: gamepad.mapping, + timestamp: gamepad.timestamp, + vibrationActuator: gamepad.vibrationActuator, + hapticActuators, + 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$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.getGamepads()) || []; + for (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) gamepads.value[gamepad.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); + }; + const listenerOptions = { passive: true }; + useEventListener("gamepadconnected", (e) => onGamepadConnected(e.gamepad), listenerOptions); + useEventListener("gamepaddisconnected", (e) => onGamepadDisconnected(e.gamepad), listenerOptions); + tryOnMounted(() => { + const _gamepads = (navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.getGamepads()) || []; + for (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) 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: navigator$1 = defaultNavigator, immediate = true } = options; + const isSupported = useSupported(() => navigator$1 && "geolocation" in navigator$1); + const locatedAt = shallowRef(null); + const error = shallowRef(null); + const coords = ref({ + accuracy: 0, + latitude: Number.POSITIVE_INFINITY, + longitude: Number.POSITIVE_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$1.geolocation.watchPosition(updatePosition, (err) => error.value = err, { + enableHighAccuracy, + maximumAge, + timeout + }); + } + if (immediate) resume(); + function pause() { + if (watcher && navigator$1) navigator$1.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: events$1 = defaultEvents$1, window: window$1 = defaultWindow, eventFilter = throttleFilter(50) } = options; + const idle = shallowRef(initialState); + const lastActive = shallowRef(timestamp()); + const isPending = shallowRef(false); + let timer; + const reset = () => { + idle.value = false; + clearTimeout(timer); + timer = setTimeout(() => idle.value = true, timeout); + }; + const onEvent = createFilterWrapper(eventFilter, () => { + lastActive.value = timestamp(); + reset(); + }); + if (window$1) { + const document$1 = window$1.document; + const listenerOptions = { passive: true }; + for (const event of events$1) useEventListener(window$1, event, () => { + if (!isPending.value) return; + onEvent(); + }, listenerOptions); + if (listenForVisibilityChange) useEventListener(document$1, "visibilitychange", () => { + if (document$1.hidden || !isPending.value) return; + onEvent(); + }, listenerOptions); + start(); + } + function start() { + if (isPending.value) return; + isPending.value = true; + if (!initialState) reset(); + } + function stop() { + idle.value = initialState; + clearTimeout(timer); + isPending.value = false; + } + return { + idle, + lastActive, + reset, + stop, + start, + isPending: shallowReadonly(isPending) + }; +} +async function loadImage(options) { + return new Promise((resolve, reject) => { + const img = new Image(); + const { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options; + img.src = src; + if (srcset != null) img.srcset = srcset; + if (sizes != null) img.sizes = sizes; + if (clazz != null) img.className = clazz; + if (loading != null) img.loading = loading; + if (crossorigin != null) img.crossOrigin = crossorigin; + if (referrerPolicy != null) img.referrerPolicy = referrerPolicy; + if (width != null) img.width = width; + if (height != null) img.height = height; + if (decoding != null) img.decoding = decoding; + if (fetchPriority != null) img.fetchPriority = fetchPriority; + if (ismap != null) img.isMap = ismap; + if (usemap != null) img.useMap = usemap; + img.onload = () => resolve(img); + img.onerror = reject; + }); +} +function useImage(options, asyncStateOptions = {}) { + const state = useAsyncState(() => loadImage(toValue(options)), void 0, { + resetOnExecute: true, + ...asyncStateOptions + }); + watch(() => toValue(options), () => state.execute(asyncStateOptions.delay), { deep: true }); + return state; +} +function resolveElement(el) { + if (typeof Window !== "undefined" && el instanceof Window) return el.document.documentElement; + if (typeof Document !== "undefined" && el instanceof Document) return el.documentElement; + return el; +} +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 + }, observe: _observe = { mutation: false }, eventListenerOptions = { + capture: false, + passive: true + }, behavior = "auto", window: window$1 = defaultWindow, onError = (e) => { + console.error(e); + } } = options; + const observe = typeof _observe === "boolean" ? { mutation: _observe } : _observe; + const internalX = shallowRef(0); + const internalY = shallowRef(0); + const x = computed({ + get() { + return internalX.value; + }, + set(x$1) { + scrollTo(x$1, void 0); + } + }); + const y = computed({ + get() { + return internalY.value; + }, + set(y$1) { + scrollTo(void 0, y$1); + } + }); + function scrollTo(_x, _y) { + var _ref, _toValue, _toValue2, _document; + if (!window$1) return; + const _element = toValue(element); + if (!_element) return; + (_ref = _element instanceof Document ? window$1.document.body : _element) === null || _ref === void 0 || _ref.scrollTo({ + top: (_toValue = toValue(_y)) !== null && _toValue !== void 0 ? _toValue : y.value, + left: (_toValue2 = toValue(_x)) !== null && _toValue2 !== void 0 ? _toValue2 : x.value, + behavior: toValue(behavior) + }); + const scrollContainer = (_element === null || _element === void 0 || (_document = _element.document) === null || _document === void 0 ? void 0 : _document.documentElement) || (_element === null || _element === void 0 ? void 0 : _element.documentElement) || _element; + if (x != null) internalX.value = scrollContainer.scrollLeft; + if (y != null) internalY.value = scrollContainer.scrollTop; + } + const isScrolling = shallowRef(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 setArrivedState = (target) => { + var _document2; + if (!window$1) return; + const el = (target === null || target === void 0 || (_document2 = target.document) === null || _document2 === void 0 ? void 0 : _document2.documentElement) || (target === null || target === void 0 ? void 0 : target.documentElement) || unrefElement(target); + const { display, flexDirection, direction } = getComputedStyle(el); + const directionMultipler = direction === "rtl" ? -1 : 1; + const scrollLeft = el.scrollLeft; + directions.left = scrollLeft < internalX.value; + directions.right = scrollLeft > internalX.value; + const left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0); + const right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS; + if (display === "flex" && flexDirection === "row-reverse") { + arrivedState.left = right; + arrivedState.right = left; + } else { + arrivedState.left = left; + arrivedState.right = right; + } + internalX.value = scrollLeft; + let scrollTop = el.scrollTop; + if (target === window$1.document && !scrollTop) scrollTop = window$1.document.body.scrollTop; + directions.top = scrollTop < internalY.value; + directions.bottom = scrollTop > internalY.value; + const top = Math.abs(scrollTop) <= (offset.top || 0); + const bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS; + if (display === "flex" && flexDirection === "column-reverse") { + arrivedState.top = bottom; + arrivedState.bottom = top; + } else { + arrivedState.top = top; + arrivedState.bottom = bottom; + } + internalY.value = scrollTop; + }; + const onScrollHandler = (e) => { + var _documentElement; + if (!window$1) return; + setArrivedState((_documentElement = e.target.documentElement) !== null && _documentElement !== void 0 ? _documentElement : e.target); + isScrolling.value = true; + onScrollEndDebounced(e); + onScroll(e); + }; + useEventListener(element, "scroll", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions); + tryOnMounted(() => { + try { + const _element = toValue(element); + if (!_element) return; + setArrivedState(_element); + } catch (e) { + onError(e); + } + }); + if ((observe === null || observe === void 0 ? void 0 : observe.mutation) && element != null && element !== window$1 && element !== document) useMutationObserver(element, () => { + const _element = toValue(element); + if (!_element) return; + setArrivedState(_element); + }, { + attributes: true, + childList: true, + subtree: true + }); + useEventListener(element, "scrollend", onScrollEnd, eventListenerOptions); + return { + x, + y, + isScrolling, + arrivedState, + directions, + measure() { + const _element = toValue(element); + if (window$1 && _element) setArrivedState(_element); + } + }; +} +function useInfiniteScroll(element, onLoadMore, options = {}) { + var _options$distance; + const { direction = "bottom", interval = 100, canLoadMore = () => true } = options; + const state = reactive(useScroll(element, { + ...options, + offset: { + [direction]: (_options$distance = options.distance) !== null && _options$distance !== void 0 ? _options$distance : 0, + ...options.offset + } + })); + const promise = ref(); + const isLoading = computed(() => !!promise.value); + const observedElement = computed(() => { + return resolveElement(toValue(element)); + }); + const isElementVisible = useElementVisibility(observedElement); + function checkAndLoad() { + state.measure(); + if (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value)) return; + const { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value; + const isNarrower = direction === "bottom" || direction === "top" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth; + if (state.arrivedState[direction] || isNarrower) { + if (!promise.value) promise.value = Promise.all([onLoadMore(state), new Promise((resolve) => setTimeout(resolve, interval))]).finally(() => { + promise.value = null; + nextTick(() => checkAndLoad()); + }); + } + } + tryOnUnmounted(watch(() => [state.arrivedState[direction], isElementVisible.value], checkAndLoad, { immediate: true })); + return { + isLoading, + reset() { + nextTick(() => checkAndLoad()); + } + }; +} +var defaultEvents = [ + "mousedown", + "mouseup", + "keydown", + "keyup" +]; +function useKeyModifier(modifier, options = {}) { + const { events: events$1 = defaultEvents, document: document$1 = defaultDocument, initial = null } = options; + const state = shallowRef(initial); + if (document$1) events$1.forEach((listenerEvent) => { + useEventListener(document$1, listenerEvent, (evt) => { + if (typeof evt.getModifierState === "function") state.value = evt.getModifierState(modifier); + }, { passive: true }); + }); + return state; +} +function useLocalStorage(key, initialValue, options = {}) { + const { window: window$1 = defaultWindow } = options; + return useStorage(key, initialValue, window$1 === null || window$1 === void 0 ? void 0 : window$1.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 depsMap = /* @__PURE__ */ new Map([ + ["Meta", metaDeps], + ["Shift", /* @__PURE__ */ new Set()], + ["Alt", /* @__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 updateDeps(value, e, keys$1) { + if (!value || typeof e.getModifierState !== "function") return; + for (const [modifier, depsSet] of depsMap) if (e.getModifierState(modifier)) { + keys$1.forEach((key) => depsSet.add(key)); + break; + } + } + function clearDeps(value, key) { + if (value) return; + const depsMapKey = `${key[0].toUpperCase()}${key.slice(1)}`; + const deps = depsMap.get(depsMapKey); + if (!["shift", "alt"].includes(key) || !deps) return; + const depsArray = Array.from(deps); + const depsIndex = depsArray.indexOf(key); + depsArray.forEach((key$1, index) => { + if (index >= depsIndex) { + current.delete(key$1); + setRefs(key$1, false); + } + }); + deps.clear(); + } + function updateRefs(e, value) { + var _e$key, _e$code; + const key = (_e$key = e.key) === null || _e$key === void 0 ? void 0 : _e$key.toLowerCase(); + const values = [(_e$code = e.code) === null || _e$code === void 0 ? void 0 : _e$code.toLowerCase(), key].filter(Boolean); + if (key) if (value) current.add(key); + else current.delete(key); + for (const key$1 of values) { + usedKeys.add(key$1); + setRefs(key$1, value); + } + updateDeps(value, e, [...current, ...values]); + clearDeps(value, key); + if (key === "meta" && !value) { + metaDeps.forEach((key$1) => { + current.delete(key$1); + setRefs(key$1, false); + }); + metaDeps.clear(); + } + } + 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 }); + useEventListener("focus", reset, { passive }); + const proxy = new Proxy(refs, { get(target$1, prop, rec) { + if (typeof prop !== "string") return Reflect.get(target$1, prop, rec); + prop = prop.toLowerCase(); + if (prop in aliasMap) prop = aliasMap[prop]; + if (!(prop in refs)) if (/[+_-]/.test(prop)) { + const keys$1 = prop.split(/[+_-]/g).map((i) => i.trim()); + refs[prop] = computed(() => keys$1.map((key) => toValue(proxy[key])).every(Boolean)); + } else refs[prop] = shallowRef(false); + const r = Reflect.get(target$1, prop, rec); + return useReactive ? toValue(r) : r; + } }); + return proxy; +} +function usingElRef(source, cb) { + if (toValue(source)) cb(toValue(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 = {}) { + target = toRef2(target); + options = { + ...defaultOptions, + ...options + }; + const { document: document$1 = defaultDocument } = options; + const listenerOptions = { passive: true }; + const currentTime = shallowRef(0); + const duration = shallowRef(0); + const seeking = shallowRef(false); + const volume = shallowRef(1); + const waiting = shallowRef(false); + const ended = shallowRef(false); + const playing = shallowRef(false); + const rate = shallowRef(1); + const stalled = shallowRef(false); + const buffered = ref([]); + const tracks = ref([]); + const selectedTrack = shallowRef(-1); + const isPictureInPicture = shallowRef(false); + const muted = shallowRef(false); + const supportsPictureInPicture = document$1 && "pictureInPictureEnabled" in document$1; + const sourceErrorEvent = createEventHook(); + const playbackErrorEvent = createEventHook(); + const disableTrack = (track) => { + usingElRef(target, (el) => { + if (track) { + const id = typeof track === "number" ? 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 = typeof track === "number" ? 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 document$1.exitPictureInPicture().then(resolve).catch(reject); + }); + }); + }; + watchEffect(() => { + if (!document$1) return; + const el = toValue(target); + if (!el) return; + const src = toValue(options.src); + let sources = []; + if (!src) return; + if (typeof src === "string") sources = [{ src }]; + else if (Array.isArray(src)) sources = src; + else if (isObject(src)) sources = [src]; + el.querySelectorAll("source").forEach((e) => { + e.remove(); + }); + sources.forEach(({ src: src$1, type, media }) => { + const source = document$1.createElement("source"); + source.setAttribute("src", src$1); + source.setAttribute("type", type || ""); + source.setAttribute("media", media || ""); + useEventListener(source, "error", sourceErrorEvent.trigger, listenerOptions); + el.appendChild(source); + }); + el.load(); + }); + watch([target, volume], () => { + const el = toValue(target); + if (!el) return; + el.volume = volume.value; + }); + watch([target, muted], () => { + const el = toValue(target); + if (!el) return; + el.muted = muted.value; + }); + watch([target, rate], () => { + const el = toValue(target); + if (!el) return; + el.playbackRate = rate.value; + }); + watchEffect(() => { + if (!document$1) return; + const textTracks = toValue(options.tracks); + const el = toValue(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 = document$1.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 = toValue(target); + if (!el) return; + el.currentTime = time; + }); + const { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => { + const el = toValue(target); + if (!el) return; + if (isPlaying) el.play().catch((e) => { + playbackErrorEvent.trigger(e); + throw e; + }); + else el.pause(); + }); + useEventListener(target, "timeupdate", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime), listenerOptions); + useEventListener(target, "durationchange", () => duration.value = toValue(target).duration, listenerOptions); + useEventListener(target, "progress", () => buffered.value = timeRangeToArray(toValue(target).buffered), listenerOptions); + useEventListener(target, "seeking", () => seeking.value = true, listenerOptions); + useEventListener(target, "seeked", () => seeking.value = false, listenerOptions); + useEventListener(target, ["waiting", "loadstart"], () => { + waiting.value = true; + ignorePlayingUpdates(() => playing.value = false); + }, listenerOptions); + useEventListener(target, "loadeddata", () => waiting.value = false, listenerOptions); + useEventListener(target, "playing", () => { + waiting.value = false; + ended.value = false; + ignorePlayingUpdates(() => playing.value = true); + }, listenerOptions); + useEventListener(target, "ratechange", () => rate.value = toValue(target).playbackRate, listenerOptions); + useEventListener(target, "stalled", () => stalled.value = true, listenerOptions); + useEventListener(target, "ended", () => ended.value = true, listenerOptions); + useEventListener(target, "pause", () => ignorePlayingUpdates(() => playing.value = false), listenerOptions); + useEventListener(target, "play", () => ignorePlayingUpdates(() => playing.value = true), listenerOptions); + useEventListener(target, "enterpictureinpicture", () => isPictureInPicture.value = true, listenerOptions); + useEventListener(target, "leavepictureinpicture", () => isPictureInPicture.value = false, listenerOptions); + useEventListener(target, "volumechange", () => { + const el = toValue(target); + if (!el) return; + volume.value = el.volume; + muted.value = el.muted; + }, listenerOptions); + const listeners = []; + const stop = watch([target], () => { + const el = toValue(target); + if (!el) return; + stop(); + listeners[0] = useEventListener(el.textTracks, "addtrack", () => tracks.value = tracksToArray(el.textTracks), listenerOptions); + listeners[1] = useEventListener(el.textTracks, "removetrack", () => tracks.value = tracksToArray(el.textTracks), listenerOptions); + listeners[2] = useEventListener(el.textTracks, "change", () => tracks.value = tracksToArray(el.textTracks), listenerOptions); + }); + 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, + onPlaybackError: playbackErrorEvent.on + }; +} +function useMemoize(resolver, options) { + const initCache = () => { + if (options === null || options === void 0 ? void 0 : options.cache) return shallowReactive(options.cache); + return shallowReactive(/* @__PURE__ */ new Map()); + }; + const cache = initCache(); + const generateKey = (...args) => (options === null || options === void 0 ? 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 + }; +} +var UseMouseBuiltinExtractors = { + page: (event) => [event.pageX, event.pageY], + client: (event) => [event.clientX, event.clientY], + screen: (event) => [event.screenX, event.screenY], + movement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null +}; +function useMouse(options = {}) { + const { type = "page", touch = true, resetOnTouchEnds = false, initialValue = { + x: 0, + y: 0 + }, window: window$1 = defaultWindow, target = window$1, scroll = true, eventFilter } = options; + let _prevMouseEvent = null; + let _prevScrollX = 0; + let _prevScrollY = 0; + const x = shallowRef(initialValue.x); + const y = shallowRef(initialValue.y); + const sourceType = shallowRef(null); + const extractor = typeof type === "function" ? type : UseMouseBuiltinExtractors[type]; + const mouseHandler = (event) => { + const result = extractor(event); + _prevMouseEvent = event; + if (result) { + [x.value, y.value] = result; + sourceType.value = "mouse"; + } + if (window$1) { + _prevScrollX = window$1.scrollX; + _prevScrollY = window$1.scrollY; + } + }; + const touchHandler = (event) => { + if (event.touches.length > 0) { + const result = extractor(event.touches[0]); + if (result) { + [x.value, y.value] = result; + sourceType.value = "touch"; + } + } + }; + const scrollHandler = () => { + if (!_prevMouseEvent || !window$1) return; + const pos = extractor(_prevMouseEvent); + if (_prevMouseEvent instanceof MouseEvent && pos) { + x.value = pos[0] + window$1.scrollX - _prevScrollX; + y.value = pos[1] + window$1.scrollY - _prevScrollY; + } + }; + const reset = () => { + x.value = initialValue.x; + y.value = initialValue.y; + }; + const mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event); + const touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event); + const scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler(); + if (target) { + const listenerOptions = { passive: true }; + useEventListener(target, ["mousemove", "dragover"], mouseHandlerWrapper, listenerOptions); + if (touch && type !== "movement") { + useEventListener(target, ["touchstart", "touchmove"], touchHandlerWrapper, listenerOptions); + if (resetOnTouchEnds) useEventListener(target, "touchend", reset, listenerOptions); + } + if (scroll && type === "page") useEventListener(window$1, "scroll", scrollHandlerWrapper, listenerOptions); + } + return { + x, + y, + sourceType + }; +} +function useMouseInElement(target, options = {}) { + const { windowResize = true, windowScroll = true, handleOutside = true, window: window$1 = defaultWindow } = options; + const type = options.type || "page"; + const { x, y, sourceType } = useMouse(options); + const targetRef = shallowRef(target !== null && target !== void 0 ? target : window$1 === null || window$1 === void 0 ? void 0 : window$1.document.body); + const elementX = shallowRef(0); + const elementY = shallowRef(0); + const elementPositionX = shallowRef(0); + const elementPositionY = shallowRef(0); + const elementHeight = shallowRef(0); + const elementWidth = shallowRef(0); + const isOutside = shallowRef(true); + function update() { + if (!window$1) return; + const el = unrefElement(targetRef); + if (!el || !(el instanceof Element)) return; + const { left, top, width, height } = el.getBoundingClientRect(); + elementPositionX.value = left + (type === "page" ? window$1.pageXOffset : 0); + elementPositionY.value = top + (type === "page" ? window$1.pageYOffset : 0); + 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; + } + } + const stopFnList = []; + function stop() { + stopFnList.forEach((fn) => fn()); + stopFnList.length = 0; + } + tryOnMounted(() => { + update(); + }); + if (window$1) { + const { stop: stopResizeObserver } = useResizeObserver(targetRef, update); + const { stop: stopMutationObserver } = useMutationObserver(targetRef, update, { attributeFilter: ["style", "class"] }); + const stopWatch = watch([ + targetRef, + x, + y + ], update); + stopFnList.push(stopResizeObserver, stopMutationObserver, stopWatch); + useEventListener(document, "mouseleave", () => isOutside.value = true, { passive: true }); + if (windowScroll) stopFnList.push(useEventListener("scroll", update, { + capture: true, + passive: true + })); + if (windowResize) stopFnList.push(useEventListener("resize", update, { passive: true })); + } + return { + x, + y, + sourceType, + elementX, + elementY, + elementPositionX, + elementPositionY, + elementHeight, + elementWidth, + isOutside, + stop + }; +} +function useMousePressed(options = {}) { + const { touch = true, drag = true, capture = false, initialValue = false, window: window$1 = defaultWindow } = options; + const pressed = shallowRef(initialValue); + const sourceType = shallowRef(null); + if (!window$1) return { + pressed, + sourceType + }; + const onPressed = (srcType) => (event) => { + var _options$onPressed; + pressed.value = true; + sourceType.value = srcType; + (_options$onPressed = options.onPressed) === null || _options$onPressed === void 0 || _options$onPressed.call(options, event); + }; + const onReleased = (event) => { + var _options$onReleased; + pressed.value = false; + sourceType.value = null; + (_options$onReleased = options.onReleased) === null || _options$onReleased === void 0 || _options$onReleased.call(options, event); + }; + const target = computed(() => unrefElement(options.target) || window$1); + const listenerOptions = { + passive: true, + capture + }; + useEventListener(target, "mousedown", onPressed("mouse"), listenerOptions); + useEventListener(window$1, "mouseleave", onReleased, listenerOptions); + useEventListener(window$1, "mouseup", onReleased, listenerOptions); + if (drag) { + useEventListener(target, "dragstart", onPressed("mouse"), listenerOptions); + useEventListener(window$1, "drop", onReleased, listenerOptions); + useEventListener(window$1, "dragend", onReleased, listenerOptions); + } + if (touch) { + useEventListener(target, "touchstart", onPressed("touch"), listenerOptions); + useEventListener(window$1, "touchend", onReleased, listenerOptions); + useEventListener(window$1, "touchcancel", onReleased, listenerOptions); + } + return { + pressed, + sourceType + }; +} +function useNavigatorLanguage(options = {}) { + const { window: window$1 = defaultWindow } = options; + const navigator$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.navigator; + const isSupported = useSupported(() => navigator$1 && "language" in navigator$1); + const language = shallowRef(navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.language); + useEventListener(window$1, "languagechange", () => { + if (navigator$1) language.value = navigator$1.language; + }, { passive: true }); + return { + isSupported, + language + }; +} +function useNetwork(options = {}) { + const { window: window$1 = defaultWindow } = options; + const navigator$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.navigator; + const isSupported = useSupported(() => navigator$1 && "connection" in navigator$1); + const isOnline = shallowRef(true); + const saveData = shallowRef(false); + const offlineAt = shallowRef(void 0); + const onlineAt = shallowRef(void 0); + const downlink = shallowRef(void 0); + const downlinkMax = shallowRef(void 0); + const rtt = shallowRef(void 0); + const effectiveType = shallowRef(void 0); + const type = shallowRef("unknown"); + const connection = isSupported.value && navigator$1.connection; + function updateNetworkInformation() { + if (!navigator$1) return; + isOnline.value = navigator$1.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; + } + } + const listenerOptions = { passive: true }; + if (window$1) { + useEventListener(window$1, "offline", () => { + isOnline.value = false; + offlineAt.value = Date.now(); + }, listenerOptions); + useEventListener(window$1, "online", () => { + isOnline.value = true; + onlineAt.value = Date.now(); + }, listenerOptions); + } + if (connection) useEventListener(connection, "change", updateNetworkInformation, listenerOptions); + updateNetworkInformation(); + return { + isSupported, + isOnline: readonly(isOnline), + saveData: readonly(saveData), + offlineAt: readonly(offlineAt), + onlineAt: readonly(onlineAt), + downlink: readonly(downlink), + downlinkMax: readonly(downlinkMax), + effectiveType: readonly(effectiveType), + rtt: readonly(rtt), + type: readonly(type) + }; +} +function useNow(options = {}) { + const { controls: exposeControls = false, interval = "requestAnimationFrame", immediate = true } = options; + const now2 = ref(/* @__PURE__ */ new Date()); + const update = () => now2.value = /* @__PURE__ */ new Date(); + const controls = interval === "requestAnimationFrame" ? useRafFn(update, { immediate }) : useIntervalFn(update, interval, { immediate }); + if (exposeControls) return { + now: now2, + ...controls + }; + else return now2; +} +function useObjectUrl(object) { + const url = shallowRef(); + const release = () => { + if (url.value) URL.revokeObjectURL(url.value); + url.value = void 0; + }; + watch(() => toValue(object), (newObject) => { + release(); + if (newObject) url.value = URL.createObjectURL(newObject); + }, { immediate: true }); + tryOnScopeDispose(release); + return readonly(url); +} +function useClamp(value, min, max) { + if (typeof value === "function" || isReadonly(value)) return computed(() => clamp(toValue(value), toValue(min), toValue(max))); + const _value = ref(value); + return computed({ + get() { + return _value.value = clamp(_value.value, toValue(min), toValue(max)); + }, + set(value$1) { + _value.value = clamp(value$1, toValue(min), toValue(max)); + } + }); +} +function useOffsetPagination(options) { + const { total = Number.POSITIVE_INFINITY, pageSize = 10, page = 1, onPageChange = noop, onPageSizeChange = noop, onPageCountChange = noop } = options; + const currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY); + const pageCount = computed(() => Math.max(1, Math.ceil(toValue(total) / toValue(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, { direction: isReadonly(page) ? "ltr" : "both" }); + if (isRef(pageSize)) syncRef(pageSize, currentPageSize, { direction: isReadonly(pageSize) ? "ltr" : "both" }); + 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: window$1 = defaultWindow } = options; + const isLeft = shallowRef(false); + const handler = (event) => { + if (!window$1) return; + event = event || window$1.event; + isLeft.value = !(event.relatedTarget || event.toElement); + }; + if (window$1) { + const listenerOptions = { passive: true }; + useEventListener(window$1, "mouseout", handler, listenerOptions); + useEventListener(window$1.document, "mouseleave", handler, listenerOptions); + useEventListener(window$1.document, "mouseenter", handler, listenerOptions); + } + return isLeft; +} +function useScreenOrientation(options = {}) { + const { window: window$1 = defaultWindow } = options; + const isSupported = useSupported(() => window$1 && "screen" in window$1 && "orientation" in window$1.screen); + const screenOrientation = isSupported.value ? window$1.screen.orientation : {}; + const orientation = ref(screenOrientation.type); + const angle = shallowRef(screenOrientation.angle || 0); + if (isSupported.value) useEventListener(window$1, "orientationchange", () => { + orientation.value = screenOrientation.type; + angle.value = screenOrientation.angle; + }, { passive: true }); + const lockOrientation = (type) => { + if (isSupported.value && typeof screenOrientation.lock === "function") return screenOrientation.lock(type); + return Promise.reject(new Error("Not supported")); + }; + const unlockOrientation = () => { + if (isSupported.value && typeof screenOrientation.unlock === "function") screenOrientation.unlock(); + }; + return { + isSupported, + orientation, + angle, + lockOrientation, + unlockOrientation + }; +} +function useParallax(target, options = {}) { + const { deviceOrientationTiltAdjust = (i) => i, deviceOrientationRollAdjust = (i) => i, mouseTiltAdjust = (i) => i, mouseRollAdjust = (i) => i, window: window$1 = defaultWindow } = options; + const orientation = reactive(useDeviceOrientation({ window: window$1 })); + const screenOrientation = reactive(useScreenOrientation({ window: window$1 })); + const { elementX: x, elementY: y, elementWidth: width, elementHeight: height } = useMouseInElement(target, { + handleOutside: false, + window: window$1 + }); + const source = computed(() => { + if (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) return "deviceOrientation"; + return "mouse"; + }); + return { + roll: computed(() => { + if (source.value === "deviceOrientation") { + let value; + switch (screenOrientation.orientation) { + case "landscape-primary": + value = orientation.gamma / 90; + break; + case "landscape-secondary": + value = -orientation.gamma / 90; + break; + case "portrait-primary": + value = -orientation.beta / 90; + break; + case "portrait-secondary": + value = orientation.beta / 90; + break; + default: + value = -orientation.beta / 90; + } + return deviceOrientationRollAdjust(value); + } else return mouseRollAdjust(-(y.value - height.value / 2) / height.value); + }), + tilt: computed(() => { + if (source.value === "deviceOrientation") { + let value; + switch (screenOrientation.orientation) { + case "landscape-primary": + value = orientation.beta / 90; + break; + case "landscape-secondary": + value = -orientation.beta / 90; + break; + case "portrait-primary": + value = orientation.gamma / 90; + break; + case "portrait-secondary": + value = -orientation.gamma / 90; + break; + default: + value = orientation.gamma / 90; + } + return deviceOrientationTiltAdjust(value); + } else return mouseTiltAdjust((x.value - width.value / 2) / width.value); + }), + source + }; +} +function useParentElement(element = useCurrentElement()) { + const parentElement = shallowRef(); + const update = () => { + const el = unrefElement(element); + if (el) parentElement.value = el.parentElement; + }; + tryOnMounted(update); + watch(() => toValue(element), update); + return parentElement; +} +function usePerformanceObserver(options, callback) { + const { window: window$1 = defaultWindow, immediate = true, ...performanceOptions } = options; + const isSupported = useSupported(() => window$1 && "PerformanceObserver" in window$1); + let observer; + const stop = () => { + observer === null || observer === void 0 || observer.disconnect(); + }; + const start = () => { + if (isSupported.value) { + stop(); + observer = new PerformanceObserver(callback); + observer.observe(performanceOptions); + } + }; + tryOnScopeDispose(stop); + if (immediate) start(); + return { + isSupported, + start, + stop + }; +} +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 = shallowRef(false); + const state = shallowRef(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) { + const listenerOptions = { passive: true }; + useEventListener(target, [ + "pointerdown", + "pointermove", + "pointerup" + ], handler, listenerOptions); + useEventListener(target, "pointerleave", () => isInside.value = false, listenerOptions); + } + return { + ...toRefs2(state), + isInside + }; +} +function usePointerLock(target, options = {}) { + const { document: document$1 = defaultDocument } = options; + const isSupported = useSupported(() => document$1 && "pointerLockElement" in document$1); + const element = shallowRef(); + const triggerElement = shallowRef(); + let targetElement; + if (isSupported.value) { + const listenerOptions = { passive: true }; + useEventListener(document$1, "pointerlockchange", () => { + var _pointerLockElement; + const currentElement = (_pointerLockElement = document$1.pointerLockElement) !== null && _pointerLockElement !== void 0 ? _pointerLockElement : element.value; + if (targetElement && currentElement === targetElement) { + element.value = document$1.pointerLockElement; + if (!element.value) targetElement = triggerElement.value = null; + } + }, listenerOptions); + useEventListener(document$1, "pointerlockerror", () => { + var _pointerLockElement2; + const currentElement = (_pointerLockElement2 = document$1.pointerLockElement) !== null && _pointerLockElement2 !== void 0 ? _pointerLockElement2 : element.value; + if (targetElement && currentElement === targetElement) { + const action = document$1.pointerLockElement ? "release" : "acquire"; + throw new Error(`Failed to ${action} pointer lock.`); + } + }, listenerOptions); + } + async function lock(e) { + var _unrefElement; + 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 ? (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : triggerElement.value : unrefElement(e); + if (!targetElement) throw new Error("Target element undefined."); + targetElement.requestPointerLock(); + return await until(element).toBe(targetElement); + } + async function unlock() { + if (!element.value) return false; + document$1.exitPointerLock(); + await until(element).toBeNull(); + return true; + } + return { + isSupported, + element, + triggerElement, + lock, + unlock + }; +} +function usePointerSwipe(target, options = {}) { + const targetRef = toRef2(target); + const { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, disableTextSelect = false } = 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 = shallowRef(false); + const isPointerDown = shallowRef(false); + const direction = computed(() => { + if (!isThresholdExceeded.value) return "none"; + if (abs(distanceX.value) > abs(distanceY.value)) return distanceX.value > 0 ? "left" : "right"; + else return distanceY.value > 0 ? "up" : "down"; + }); + const eventIsAllowed = (e) => { + var _ref, _options$pointerTypes, _options$pointerTypes2; + const isReleasingButton = e.buttons === 0; + const isPrimaryButton = e.buttons === 1; + return (_ref = (_options$pointerTypes = (_options$pointerTypes2 = options.pointerTypes) === null || _options$pointerTypes2 === void 0 ? void 0 : _options$pointerTypes2.includes(e.pointerType)) !== null && _options$pointerTypes !== void 0 ? _options$pointerTypes : isReleasingButton || isPrimaryButton) !== null && _ref !== void 0 ? _ref : true; + }; + const listenerOptions = { passive: true }; + const stops = [ + useEventListener(target, "pointerdown", (e) => { + if (!eventIsAllowed(e)) return; + isPointerDown.value = true; + const eventTarget = e.target; + eventTarget === null || eventTarget === void 0 || eventTarget.setPointerCapture(e.pointerId); + const { clientX: x, clientY: y } = e; + updatePosStart(x, y); + updatePosEnd(x, y); + onSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e); + }, listenerOptions), + 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 || onSwipe === void 0 || onSwipe(e); + }, listenerOptions), + useEventListener(target, "pointerup", (e) => { + if (!eventIsAllowed(e)) return; + if (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value); + isPointerDown.value = false; + isSwiping.value = false; + }, listenerOptions) + ]; + tryOnMounted(() => { + var _targetRef$value; + (_targetRef$value = targetRef.value) === null || _targetRef$value === void 0 || (_targetRef$value = _targetRef$value.style) === null || _targetRef$value === void 0 || _targetRef$value.setProperty("touch-action", "pan-y"); + if (disableTextSelect) { + var _targetRef$value2, _targetRef$value3, _targetRef$value4; + (_targetRef$value2 = targetRef.value) === null || _targetRef$value2 === void 0 || (_targetRef$value2 = _targetRef$value2.style) === null || _targetRef$value2 === void 0 || _targetRef$value2.setProperty("-webkit-user-select", "none"); + (_targetRef$value3 = targetRef.value) === null || _targetRef$value3 === void 0 || (_targetRef$value3 = _targetRef$value3.style) === null || _targetRef$value3 === void 0 || _targetRef$value3.setProperty("-ms-user-select", "none"); + (_targetRef$value4 = targetRef.value) === null || _targetRef$value4 === void 0 || (_targetRef$value4 = _targetRef$value4.style) === null || _targetRef$value4 === void 0 || _targetRef$value4.setProperty("user-select", "none"); + } + }); + 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: window$1 = defaultWindow } = options; + if (!window$1) return shallowRef(["en"]); + const navigator$1 = window$1.navigator; + const value = shallowRef(navigator$1.languages); + useEventListener(window$1, "languagechange", () => { + value.value = navigator$1.languages; + }, { passive: true }); + return value; +} +function usePreferredReducedMotion(options) { + const isReduced = useMediaQuery("(prefers-reduced-motion: reduce)", options); + return computed(() => { + if (isReduced.value) return "reduce"; + return "no-preference"; + }); +} +function usePreferredReducedTransparency(options) { + const isReduced = useMediaQuery("(prefers-reduced-transparency: reduce)", options); + return computed(() => { + if (isReduced.value) return "reduce"; + return "no-preference"; + }); +} +function usePrevious(value, initialValue) { + const previous = shallowRef(initialValue); + watch(toRef2(value), (_, oldValue) => { + previous.value = oldValue; + }, { flush: "sync" }); + return readonly(previous); +} +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 = shallowRef(""); + const right = shallowRef(""); + const bottom = shallowRef(""); + const left = shallowRef(""); + 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)"; + tryOnMounted(update); + useEventListener("resize", useDebounceFn(update), { passive: true }); + } + 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: document$1 = defaultDocument, attrs = {}, nonce = void 0 } = options; + const scriptTag = shallowRef(null); + let _promise = null; + const loadScript = (waitForScriptLoad) => new Promise((resolve, reject) => { + const resolveWithElement = (el$1) => { + scriptTag.value = el$1; + resolve(el$1); + return el$1; + }; + if (!document$1) { + resolve(false); + return; + } + let shouldAppend = false; + let el = document$1.querySelector(`script[src="${toValue(src)}"]`); + if (!el) { + el = document$1.createElement("script"); + el.type = type; + el.async = async; + el.src = toValue(src); + if (defer) el.defer = defer; + if (crossOrigin) el.crossOrigin = crossOrigin; + if (noModule) el.noModule = noModule; + if (referrerPolicy) el.referrerPolicy = referrerPolicy; + if (nonce) el.nonce = nonce; + Object.entries(attrs).forEach(([name, value]) => el === null || el === void 0 ? void 0 : el.setAttribute(name, value)); + shouldAppend = true; + } else if (el.hasAttribute("data-loaded")) resolveWithElement(el); + const listenerOptions = { passive: true }; + useEventListener(el, "error", (event) => reject(event), listenerOptions); + useEventListener(el, "abort", (event) => reject(event), listenerOptions); + useEventListener(el, "load", () => { + el.setAttribute("data-loaded", "true"); + onLoaded(el); + resolveWithElement(el); + }, listenerOptions); + if (shouldAppend) el = document$1.head.appendChild(el); + if (!waitForScriptLoad) resolveWithElement(el); + }); + const load = (waitForScriptLoad = true) => { + if (!_promise) _promise = loadScript(waitForScriptLoad); + return _promise; + }; + const unload = () => { + if (!document$1) return; + _promise = null; + if (scriptTag.value) scriptTag.value = null; + const el = document$1.querySelector(`script[src="${toValue(src)}"]`); + if (el) document$1.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.clientWidth < ele.scrollWidth || style.overflowY === "auto" && ele.clientHeight < ele.scrollHeight) 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; +} +var elInitialOverflow = /* @__PURE__ */ new WeakMap(); +function useScrollLock(element, initialState = false) { + const isLocked = shallowRef(initialState); + let stopTouchMoveListener = null; + let initialOverflow = ""; + watch(toRef2(element), (el) => { + const target = resolveElement(toValue(el)); + if (target) { + const ele = target; + if (!elInitialOverflow.get(ele)) elInitialOverflow.set(ele, ele.style.overflow); + if (ele.style.overflow !== "hidden") initialOverflow = ele.style.overflow; + if (ele.style.overflow === "hidden") return isLocked.value = true; + if (isLocked.value) return ele.style.overflow = "hidden"; + } + }, { immediate: true }); + const lock = () => { + const el = resolveElement(toValue(element)); + if (!el || isLocked.value) return; + if (isIOS) stopTouchMoveListener = useEventListener(el, "touchmove", (e) => { + preventDefault(e); + }, { passive: false }); + el.style.overflow = "hidden"; + isLocked.value = true; + }; + const unlock = () => { + const el = resolveElement(toValue(element)); + if (!el || !isLocked.value) return; + if (isIOS) stopTouchMoveListener === null || stopTouchMoveListener === void 0 || stopTouchMoveListener(); + el.style.overflow = initialOverflow; + elInitialOverflow.delete(el); + 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: window$1 = defaultWindow } = options; + return useStorage(key, initialValue, window$1 === null || window$1 === void 0 ? void 0 : window$1.sessionStorage, options); +} +function useShare(shareOptions = {}, options = {}) { + const { navigator: navigator$1 = defaultNavigator } = options; + const _navigator = navigator$1; + const isSupported = useSupported(() => _navigator && "canShare" in _navigator); + const share = async (overrideOptions = {}) => { + if (isSupported.value) { + const data = { + ...toValue(shareOptions), + ...toValue(overrideOptions) + }; + let granted = false; + if (_navigator.canShare) granted = _navigator.canShare(data); + 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) { + const [source] = args; + let compareFn = defaultCompare; + let options = {}; + if (args.length === 2) if (typeof args[1] === "object") { + var _options$compareFn; + options = args[1]; + compareFn = (_options$compareFn = options.compareFn) !== null && _options$compareFn !== void 0 ? _options$compareFn : defaultCompare; + } else { + var _args$; + compareFn = (_args$ = args[1]) !== null && _args$ !== void 0 ? _args$ : defaultCompare; + } + else if (args.length > 2) { + var _args$2, _args$3; + compareFn = (_args$2 = args[1]) !== null && _args$2 !== void 0 ? _args$2 : defaultCompare; + options = (_args$3 = args[2]) !== null && _args$3 !== void 0 ? _args$3 : {}; + } + const { dirty = false, sortFn = defaultSortFn } = options; + if (!dirty) return computed(() => sortFn([...toValue(source)], compareFn)); + watchEffect(() => { + const result = sortFn(toValue(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, maxAlternatives = 1, window: window$1 = defaultWindow } = options; + const lang = toRef2(options.lang || "en-US"); + const isListening = shallowRef(false); + const isFinal = shallowRef(false); + const result = shallowRef(""); + const error = shallowRef(void 0); + let recognition; + const start = () => { + isListening.value = true; + }; + const stop = () => { + isListening.value = false; + }; + const toggle = (value = !isListening.value) => { + if (value) start(); + else stop(); + }; + const SpeechRecognition = window$1 && (window$1.SpeechRecognition || window$1.webkitSpeechRecognition); + const isSupported = useSupported(() => SpeechRecognition); + if (isSupported.value) { + recognition = new SpeechRecognition(); + recognition.continuous = continuous; + recognition.interimResults = interimResults; + recognition.lang = toValue(lang); + recognition.maxAlternatives = maxAlternatives; + recognition.onstart = () => { + isListening.value = true; + isFinal.value = false; + }; + watch(lang, (lang$1) => { + if (recognition && !isListening.value) recognition.lang = lang$1; + }); + recognition.onresult = (event) => { + const currentResult = event.results[event.resultIndex]; + const { transcript } = currentResult[0]; + isFinal.value = currentResult.isFinal; + result.value = transcript; + error.value = void 0; + }; + recognition.onerror = (event) => { + error.value = event; + }; + recognition.onend = () => { + isListening.value = false; + recognition.lang = toValue(lang); + }; + watch(isListening, (newValue, oldValue) => { + if (newValue === oldValue) return; + if (newValue) recognition.start(); + else recognition.stop(); + }); + } + tryOnScopeDispose(() => { + stop(); + }); + return { + isSupported, + isListening, + isFinal, + recognition, + result, + error, + toggle, + start, + stop + }; +} +function useSpeechSynthesis(text, options = {}) { + const { pitch = 1, rate = 1, volume = 1, window: window$1 = defaultWindow, onBoundary } = options; + const synth = window$1 && window$1.speechSynthesis; + const isSupported = useSupported(() => synth); + const isPlaying = shallowRef(false); + const status = shallowRef("init"); + const spokenText = toRef2(text || ""); + const lang = toRef2(options.lang || "en-US"); + const error = shallowRef(void 0); + const toggle = (value = !isPlaying.value) => { + isPlaying.value = value; + }; + const bindEventsForUtterance = (utterance$1) => { + utterance$1.lang = toValue(lang); + utterance$1.voice = toValue(options.voice) || null; + utterance$1.pitch = toValue(pitch); + utterance$1.rate = toValue(rate); + utterance$1.volume = toValue(volume); + utterance$1.onstart = () => { + isPlaying.value = true; + status.value = "play"; + }; + utterance$1.onpause = () => { + isPlaying.value = false; + status.value = "pause"; + }; + utterance$1.onresume = () => { + isPlaying.value = true; + status.value = "play"; + }; + utterance$1.onend = () => { + isPlaying.value = false; + status.value = "end"; + }; + utterance$1.onerror = (event) => { + error.value = event; + }; + utterance$1.onboundary = (event) => { + onBoundary === null || onBoundary === void 0 || onBoundary(event); + }; + }; + const utterance = computed(() => { + isPlaying.value = false; + status.value = "init"; + const newUtterance = new SpeechSynthesisUtterance(spokenText.value); + bindEventsForUtterance(newUtterance); + return newUtterance; + }); + const speak = () => { + synth.cancel(); + if (utterance) synth.speak(utterance.value); + }; + const stop = () => { + synth.cancel(); + isPlaying.value = false; + }; + if (isSupported.value) { + bindEventsForUtterance(utterance.value); + watch(lang, (lang$1) => { + if (utterance.value && !isPlaying.value) utterance.value.lang = lang$1; + }); + 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 !== void 0 ? 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(index$1) { + if (Array.isArray(stepsRef.value)) return stepsRef.value[index$1]; + return stepsRef.value[stepNames.value[index$1]]; + } + 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 + }; +} +function useStorageAsync(key, initialValue, storage, options = {}) { + var _options$serializer; + const { flush = "pre", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window: window$1 = defaultWindow, eventFilter, onError = (e) => { + console.error(e); + }, onReady } = options; + const rawInit = toValue(initialValue); + const type = guessSerializerType(rawInit); + const data = (shallow ? shallowRef : ref)(toValue(initialValue)); + const serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type]; + if (!storage) try { + storage = getSSRHandler("getDefaultStorageAsync", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.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 (typeof mergeDefaults === "function") data.value = mergeDefaults(value, rawInit); + else if (type === "object" && !Array.isArray(value)) data.value = { + ...rawInit, + ...value + }; + else data.value = value; + } else data.value = await serializer.read(rawValue); + } catch (e) { + onError(e); + } + } + const promise = new Promise((resolve) => { + read().then(() => { + onReady === null || onReady === void 0 || onReady(data.value); + resolve(data); + }); + }); + if (window$1 && listenToStorageChanges) useEventListener(window$1, "storage", (e) => Promise.resolve().then(() => read(e)), { passive: true }); + 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 + }); + Object.assign(data, { + then: promise.then.bind(promise), + catch: promise.catch.bind(promise) + }); + return data; +} +var _id = 0; +function useStyleTag(css, options = {}) { + const isLoaded = shallowRef(false); + const { document: document$1 = defaultDocument, immediate = true, manual = false, id = `vueuse_styletag_${++_id}` } = options; + const cssRef = shallowRef(css); + let stop = () => { + }; + const load = () => { + if (!document$1) return; + const el = document$1.getElementById(id) || document$1.createElement("style"); + if (!el.isConnected) { + el.id = id; + if (options.nonce) el.nonce = options.nonce; + if (options.media) el.media = options.media; + document$1.head.appendChild(el); + } + if (isLoaded.value) return; + stop = watch(cssRef, (value) => { + el.textContent = value; + }, { immediate: true }); + isLoaded.value = true; + }; + const unload = () => { + if (!document$1 || !isLoaded.value) return; + stop(); + document$1.head.removeChild(document$1.getElementById(id)); + isLoaded.value = false; + }; + if (immediate && !manual) tryOnMounted(load); + if (!manual) tryOnScopeDispose(unload); + return { + id, + css: cssRef, + unload, + load, + isLoaded: readonly(isLoaded) + }; +} +function useSwipe(target, options = {}) { + const { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, passive = true } = 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 = shallowRef(false); + const direction = computed(() => { + if (!isThresholdExceeded.value) return "none"; + if (abs(diffX.value) > abs(diffY.value)) return diffX.value > 0 ? "left" : "right"; + else return diffY.value > 0 ? "up" : "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; + }; + const listenerOptions = { + passive, + capture: !passive + }; + const onTouchEnd = (e) => { + if (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value); + isSwiping.value = false; + }; + const stops = [ + useEventListener(target, "touchstart", (e) => { + if (e.touches.length !== 1) return; + const [x, y] = getTouchEventCoords(e); + updateCoordsStart(x, y); + updateCoordsEnd(x, y); + onSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e); + }, listenerOptions), + useEventListener(target, "touchmove", (e) => { + if (e.touches.length !== 1) return; + const [x, y] = getTouchEventCoords(e); + updateCoordsEnd(x, y); + if (listenerOptions.capture && !listenerOptions.passive && Math.abs(diffX.value) > Math.abs(diffY.value)) e.preventDefault(); + if (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true; + if (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e); + }, listenerOptions), + useEventListener(target, ["touchend", "touchcancel"], onTouchEnd, listenerOptions) + ]; + const stop = () => stops.forEach((s) => s()); + return { + isSwiping, + direction, + coordsStart, + coordsEnd, + lengthX: diffX, + lengthY: diffY, + stop + }; +} +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: document$1 = defaultDocument, selector = "html", observe = false, initialValue = "ltr" } = options; + function getValue$1() { + var _ref, _document$querySelect; + return (_ref = document$1 === null || document$1 === void 0 || (_document$querySelect = document$1.querySelector(selector)) === null || _document$querySelect === void 0 ? void 0 : _document$querySelect.getAttribute("dir")) !== null && _ref !== void 0 ? _ref : initialValue; + } + const dir = ref(getValue$1()); + tryOnMounted(() => dir.value = getValue$1()); + if (observe && document$1) useMutationObserver(document$1.querySelector(selector), () => dir.value = getValue$1(), { attributes: true }); + return computed({ + get() { + return dir.value; + }, + set(v) { + var _document$querySelect2, _document$querySelect3; + dir.value = v; + if (!document$1) return; + if (dir.value) (_document$querySelect2 = document$1.querySelector(selector)) === null || _document$querySelect2 === void 0 || _document$querySelect2.setAttribute("dir", dir.value); + else (_document$querySelect3 = document$1.querySelector(selector)) === null || _document$querySelect3 === void 0 || _document$querySelect3.removeAttribute("dir"); + } + }); +} +function getRangesFromSelection(selection) { + var _selection$rangeCount; + const rangeCount = (_selection$rangeCount = selection.rangeCount) !== null && _selection$rangeCount !== void 0 ? _selection$rangeCount : 0; + return Array.from({ length: rangeCount }, (_, i) => selection.getRangeAt(i)); +} +function useTextSelection(options = {}) { + var _window$getSelection; + const { window: window$1 = defaultWindow } = options; + const selection = shallowRef((_window$getSelection = window$1 === null || window$1 === void 0 ? void 0 : window$1.getSelection()) !== null && _window$getSelection !== void 0 ? _window$getSelection : null); + const text = computed(() => { + var _selection$value$toSt, _selection$value; + return (_selection$value$toSt = (_selection$value = selection.value) === null || _selection$value === void 0 ? void 0 : _selection$value.toString()) !== null && _selection$value$toSt !== void 0 ? _selection$value$toSt : ""; + }); + const ranges = computed(() => selection.value ? getRangesFromSelection(selection.value) : []); + const rects = computed(() => ranges.value.map((range) => range.getBoundingClientRect())); + function onSelectionChange() { + selection.value = null; + if (window$1) selection.value = window$1.getSelection(); + } + if (window$1) useEventListener(window$1.document, "selectionchange", onSelectionChange, { passive: true }); + return { + text, + rects, + ranges, + selection + }; +} +function tryRequestAnimationFrame(window$1 = defaultWindow, fn) { + if (window$1 && typeof window$1.requestAnimationFrame === "function") window$1.requestAnimationFrame(fn); + else fn(); +} +function useTextareaAutosize(options = {}) { + var _options$input, _options$styleProp; + const { window: window$1 = defaultWindow } = options; + const textarea = toRef2(options === null || options === void 0 ? void 0 : options.element); + const input = toRef2((_options$input = options === null || options === void 0 ? void 0 : options.input) !== null && _options$input !== void 0 ? _options$input : ""); + const styleProp = (_options$styleProp = options === null || options === void 0 ? void 0 : options.styleProp) !== null && _options$styleProp !== void 0 ? _options$styleProp : "height"; + const textareaScrollHeight = shallowRef(1); + const textareaOldWidth = shallowRef(0); + function triggerResize() { + var _textarea$value; + if (!textarea.value) return; + let height = ""; + textarea.value.style[styleProp] = "1px"; + textareaScrollHeight.value = (_textarea$value = textarea.value) === null || _textarea$value === void 0 ? void 0 : _textarea$value.scrollHeight; + const _styleTarget = toValue(options === null || options === void 0 ? void 0 : options.styleTarget); + if (_styleTarget) _styleTarget.style[styleProp] = `${textareaScrollHeight.value}px`; + else height = `${textareaScrollHeight.value}px`; + textarea.value.style[styleProp] = height; + } + watch([input, textarea], () => nextTick(triggerResize), { immediate: true }); + watch(textareaScrollHeight, () => { + var _options$onResize; + return options === null || options === void 0 || (_options$onResize = options.onResize) === null || _options$onResize === void 0 ? void 0 : _options$onResize.call(options); + }); + useResizeObserver(textarea, ([{ contentRect }]) => { + if (textareaOldWidth.value === contentRect.width) return; + tryRequestAnimationFrame(window$1, () => { + textareaOldWidth.value = contentRect.width; + triggerResize(); + }); + }); + if (options === null || options === void 0 ? void 0 : options.watch) watch(options.watch, triggerResize, { + immediate: true, + deep: true + }); + return { + textarea, + input, + triggerResize + }; +} +function useThrottledRefHistory(source, options = {}) { + const { throttle = 200, trailing = true } = options; + const filter = throttleFilter(throttle, trailing); + return { ...useRefHistory(source, { + ...options, + eventFilter: filter + }) }; +} +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: Number.POSITIVE_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: "" +}; +function DEFAULT_FORMATTER(date) { + return date.toISOString().slice(0, 10); +} +function useTimeAgo(time, options = {}) { + const { controls: exposeControls = false, updateInterval = 3e4 } = options; + const { now: now2, ...controls } = useNow({ + interval: updateInterval, + controls: true + }); + const timeAgo = computed(() => formatTimeAgo(new Date(toValue(time)), options, toValue(now2))); + if (exposeControls) return { + timeAgo, + ...controls + }; + else return timeAgo; +} +function formatTimeAgo(from, options = {}, now2 = Date.now()) { + 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 getValue$1(diff$1, unit) { + return roundFn(Math.abs(diff$1) / unit.value); + } + function format(diff$1, unit) { + const val = getValue$1(diff$1, unit); + const past = diff$1 > 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") { + var _units$find; + const unitMax = (_units$find = units.find((i) => i.name === max)) === null || _units$find === void 0 ? void 0 : _units$find.max; + if (unitMax && absDiff > unitMax) return fullDateFormatter(new Date(from)); + } + for (const [idx, unit] of units.entries()) { + if (getValue$1(diff, unit) <= 0 && units[idx - 1]) return format(diff, units[idx - 1]); + if (absDiff < unit.max) return format(diff, unit); + } + return messages.invalid; +} +var UNITS = [ + { + name: "year", + ms: 31536e6 + }, + { + name: "month", + ms: 2592e6 + }, + { + name: "week", + ms: 6048e5 + }, + { + name: "day", + ms: 864e5 + }, + { + name: "hour", + ms: 36e5 + }, + { + name: "minute", + ms: 6e4 + }, + { + name: "second", + ms: 1e3 + } +]; +function useTimeAgoIntl(time, options = {}) { + const { controls: exposeControls = false, updateInterval = 3e4 } = options; + const { now: now2, ...controls } = useNow({ + interval: updateInterval, + controls: true + }); + const result = computed(() => getTimeAgoIntlResult(new Date(toValue(time)), options, toValue(now2))); + const parts = computed(() => result.value.parts); + const timeAgoIntl = computed(() => formatTimeAgoIntlParts(parts.value, { + ...options, + locale: result.value.resolvedLocale + })); + return exposeControls ? { + timeAgoIntl, + parts, + ...controls + } : timeAgoIntl; +} +function formatTimeAgoIntl(from, options = {}, now2 = Date.now()) { + const { parts, resolvedLocale } = getTimeAgoIntlResult(from, options, now2); + return formatTimeAgoIntlParts(parts, { + ...options, + locale: resolvedLocale + }); +} +function getTimeAgoIntlResult(from, options = {}, now2 = Date.now()) { + const { locale, relativeTimeFormatOptions = { numeric: "auto" } } = options; + const rtf = new Intl.RelativeTimeFormat(locale, relativeTimeFormatOptions); + const { locale: resolvedLocale } = rtf.resolvedOptions(); + const diff = +from - +now2; + const absDiff = Math.abs(diff); + for (const { name, ms } of UNITS) if (absDiff >= ms) return { + resolvedLocale, + parts: rtf.formatToParts(Math.round(diff / ms), name) + }; + return { + resolvedLocale, + parts: rtf.formatToParts(0, "second") + }; +} +function formatTimeAgoIntlParts(parts, options = {}) { + const { insertSpace = true, joinParts, locale } = options; + if (typeof joinParts === "function") return joinParts(parts, locale); + if (!insertSpace) return parts.map((part) => part.value).join(""); + return parts.map((part) => part.value.trim()).join(" "); +} +function useTimeoutPoll(fn, interval, options = {}) { + const { immediate = true, immediateCallback = false } = options; + const { start } = useTimeoutFn(loop, interval, { immediate }); + const isActive = shallowRef(false); + async function loop() { + if (!isActive.value) return; + await fn(); + start(); + } + function resume() { + if (!isActive.value) { + isActive.value = true; + if (immediateCallback) fn(); + start(); + } + } + function pause() { + isActive.value = false; + } + if (immediate && isClient) resume(); + tryOnScopeDispose(pause); + return { + isActive, + pause, + resume + }; +} +function useTimestamp(options = {}) { + const { controls: exposeControls = false, offset = 0, immediate = true, interval = "requestAnimationFrame", callback } = options; + const ts = shallowRef(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 { + timestamp: ts, + ...controls + }; + else return ts; +} +function useTitle(newTitle = null, options = {}) { + var _document$title, _ref; + const { document: document$1 = defaultDocument, restoreOnUnmount = (t) => t } = options; + const originalTitle = (_document$title = document$1 === null || document$1 === void 0 ? void 0 : document$1.title) !== null && _document$title !== void 0 ? _document$title : ""; + const title = toRef2((_ref = newTitle !== null && newTitle !== void 0 ? newTitle : document$1 === null || document$1 === void 0 ? void 0 : document$1.title) !== null && _ref !== void 0 ? _ref : null); + const isReadonly$1 = !!(newTitle && typeof newTitle === "function"); + function format(t) { + if (!("titleTemplate" in options)) return t; + const template = options.titleTemplate || "%s"; + return typeof template === "function" ? template(t) : toValue(template).replace(/%s/g, t); + } + watch(title, (newValue, oldValue) => { + if (newValue !== oldValue && document$1) document$1.title = format(newValue !== null && newValue !== void 0 ? newValue : ""); + }, { immediate: true }); + if (options.observe && !options.titleTemplate && document$1 && !isReadonly$1) { + var _document$head; + useMutationObserver((_document$head = document$1.head) === null || _document$head === void 0 ? void 0 : _document$head.querySelector("title"), () => { + if (document$1 && document$1.title !== title.value) title.value = format(document$1.title); + }, { childList: true }); + } + tryOnScopeDispose(() => { + if (restoreOnUnmount) { + const restoredTitle = restoreOnUnmount(originalTitle, title.value || ""); + if (restoredTitle != null && document$1) document$1.title = restoredTitle; + } + }); + return title; +} +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 = Object.assign({}, { 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 lerp(a, b, alpha) { + return a + alpha * (b - a); +} +function defaultInterpolation(a, b, t) { + const aVal = toValue(a); + const bVal = toValue(b); + if (typeof aVal === "number" && typeof bVal === "number") return lerp(aVal, bVal, t); + if (Array.isArray(aVal) && Array.isArray(bVal)) return aVal.map((v, i) => lerp(v, toValue(bVal[i]), t)); + throw new TypeError("Unknown transition type, specify an interpolation function."); +} +function normalizeEasing(easing) { + var _toValue; + return typeof easing === "function" ? easing : (_toValue = toValue(easing)) !== null && _toValue !== void 0 ? _toValue : identity; +} +function transition(source, from, to, options = {}) { + var _toValue2; + const { window: window$1 = defaultWindow } = options; + const fromVal = toValue(from); + const toVal = toValue(to); + const duration = (_toValue2 = toValue(options.duration)) !== null && _toValue2 !== void 0 ? _toValue2 : 1e3; + const startedAt = Date.now(); + const endAt = Date.now() + duration; + const interpolation = typeof options.interpolation === "function" ? options.interpolation : defaultInterpolation; + const trans = typeof options.easing !== "undefined" ? normalizeEasing(options.easing) : normalizeEasing(options.transition); + const ease = typeof trans === "function" ? trans : createEasingFunction(trans); + return new Promise((resolve) => { + source.value = fromVal; + const tick = () => { + var _options$abort; + if ((_options$abort = options.abort) === null || _options$abort === void 0 ? void 0 : _options$abort.call(options)) { + resolve(); + return; + } + const now2 = Date.now(); + source.value = interpolation(fromVal, toVal, ease((now2 - startedAt) / duration)); + if (now2 < endAt) window$1 === null || window$1 === void 0 || window$1.requestAnimationFrame(tick); + else { + source.value = toVal; + resolve(); + } + }; + tick(); + }); +} +function executeTransition(source, from, to, options = {}) { + return transition(source, from, to, options); +} +function useTransition(source, options = {}) { + let currentId = 0; + const sourceVal = () => { + const v = toValue(source); + return typeof options.interpolation === "undefined" && Array.isArray(v) ? v.map(toValue) : v; + }; + const outputRef = shallowRef(sourceVal()); + watch(sourceVal, async (to) => { + var _options$onStarted, _options$onFinished; + if (toValue(options.disabled)) return; + const id = ++currentId; + if (options.delay) await promiseTimeout(toValue(options.delay)); + if (id !== currentId) return; + (_options$onStarted = options.onStarted) === null || _options$onStarted === void 0 || _options$onStarted.call(options); + await transition(outputRef, outputRef.value, to, { + ...options, + abort: () => { + var _options$abort2; + return id !== currentId || ((_options$abort2 = options.abort) === null || _options$abort2 === void 0 ? void 0 : _options$abort2.call(options)); + } + }); + (_options$onFinished = options.onFinished) === null || _options$onFinished === void 0 || _options$onFinished.call(options); + }, { deep: true }); + watch(() => toValue(options.disabled), (disabled) => { + if (disabled) { + currentId++; + outputRef.value = sourceVal(); + } + }); + tryOnScopeDispose(() => { + currentId++; + }); + return computed(() => toValue(options.disabled) ? sourceVal() : outputRef.value); +} +function useUrlSearchParams(mode = "history", options = {}) { + const { initialValue = {}, removeNullishValues = true, removeFalsyValues = false, write: enableWrite = true, writeMode = "replace", window: window$1 = defaultWindow, stringify = (params) => params.toString() } = options; + if (!window$1) return reactive(initialValue); + const state = reactive({}); + function getRawParams() { + if (mode === "history") return window$1.location.search || ""; + else if (mode === "hash") { + const hash = window$1.location.hash || ""; + const index = hash.indexOf("?"); + return index > 0 ? hash.slice(index) : ""; + } else return (window$1.location.hash || "").replace(/^#/, ""); + } + function constructQuery(params) { + const stringified = stringify(params); + if (mode === "history") return `${stringified ? `?${stringified}` : ""}${window$1.location.hash || ""}`; + if (mode === "hash-params") return `${window$1.location.search || ""}${stringified ? `#${stringified}` : ""}`; + const hash = window$1.location.hash || "#"; + const index = hash.indexOf("?"); + if (index > 0) return `${window$1.location.search || ""}${hash.slice(0, index)}${stringified ? `?${stringified}` : ""}`; + return `${window$1.location.search || ""}${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 } = pausableWatch(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, false); + }, { deep: true }); + function write(params, shouldUpdate, shouldWriteHistory = true) { + pause(); + if (shouldUpdate) updateState(params); + if (writeMode === "replace") window$1.history.replaceState(window$1.history.state, window$1.document.title, window$1.location.pathname + constructQuery(params)); + else if (shouldWriteHistory) window$1.history.pushState(window$1.history.state, window$1.document.title, window$1.location.pathname + constructQuery(params)); + nextTick(() => resume()); + } + function onChanged() { + if (!enableWrite) return; + write(read(), true, false); + } + const listenerOptions = { passive: true }; + useEventListener(window$1, "popstate", onChanged, listenerOptions); + if (mode !== "history") useEventListener(window$1, "hashchange", onChanged, listenerOptions); + const initial = read(); + if (initial.keys().next().value) updateState(initial); + else Object.assign(state, initialValue); + return state; +} +function useUserMedia(options = {}) { + var _options$enabled, _options$autoSwitch; + const enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false); + const autoSwitch = shallowRef((_options$autoSwitch = options.autoSwitch) !== null && _options$autoSwitch !== void 0 ? _options$autoSwitch : true); + const constraints = ref(options.constraints); + const { navigator: navigator$1 = defaultNavigator } = options; + const isSupported = useSupported(() => { + var _navigator$mediaDevic; + return navigator$1 === null || navigator$1 === void 0 || (_navigator$mediaDevic = navigator$1.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getUserMedia; + }); + const stream = shallowRef(); + function getDeviceOptions(type) { + switch (type) { + case "video": + if (constraints.value) return constraints.value.video || false; + break; + case "audio": + if (constraints.value) return constraints.value.audio || false; + break; + } + } + async function _start() { + if (!isSupported.value || stream.value) return; + stream.value = await navigator$1.mediaDevices.getUserMedia({ + video: getDeviceOptions("video"), + audio: getDeviceOptions("audio") + }); + return stream.value; + } + function _stop() { + var _stream$value; + (_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.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(constraints, () => { + if (autoSwitch.value && stream.value) restart(); + }, { + immediate: true, + deep: true + }); + tryOnScopeDispose(() => { + stop(); + }); + return { + isSupported, + stream, + start, + stop, + restart, + constraints, + enabled, + autoSwitch + }; +} +function useVModel(props, key, emit, options = {}) { + var _vm$$emit, _vm$proxy; + const { clone = false, passive = false, eventName, deep = false, defaultValue, shouldEmit } = options; + const vm = getCurrentInstance(); + const _emit = emit || (vm === null || vm === void 0 ? void 0 : vm.emit) || (vm === null || vm === void 0 || (_vm$$emit = vm.$emit) === null || _vm$$emit === void 0 ? void 0 : _vm$$emit.bind(vm)) || (vm === null || vm === void 0 || (_vm$proxy = vm.proxy) === null || _vm$proxy === void 0 || (_vm$proxy = _vm$proxy.$emit) === null || _vm$proxy === void 0 ? void 0 : _vm$proxy.bind(vm === null || vm === void 0 ? void 0 : vm.proxy)); + let event = eventName; + if (!key) key = "modelValue"; + event = event || `update:${key.toString()}`; + const cloneFn = (val) => !clone ? val : typeof clone === "function" ? clone(val) : cloneFnJSON(val); + const getValue$1 = () => isDef(props[key]) ? cloneFn(props[key]) : defaultValue; + const triggerEmit = (value) => { + if (shouldEmit) { + if (shouldEmit(value)) _emit(event, value); + } else _emit(event, value); + }; + if (passive) { + const proxy = ref(getValue$1()); + let isUpdating = false; + watch(() => props[key], (v) => { + if (!isUpdating) { + isUpdating = true; + proxy.value = cloneFn(v); + nextTick(() => isUpdating = false); + } + }); + watch(proxy, (v) => { + if (!isUpdating && (v !== props[key] || deep)) triggerEmit(v); + }, { deep }); + return proxy; + } else return computed({ + get() { + return getValue$1(); + }, + set(value) { + triggerEmit(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: navigator$1 = defaultNavigator } = options || {}; + const isSupported = useSupported(() => typeof navigator$1 !== "undefined" && "vibrate" in navigator$1); + const patternRef = toRef2(pattern); + let intervalControls; + const vibrate = (pattern$1 = patternRef.value) => { + if (isSupported.value) navigator$1.vibrate(pattern$1); + }; + const stop = () => { + if (isSupported.value) navigator$1.vibrate(0); + intervalControls === null || intervalControls === 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 = shallowRef(null); + const size = useElementSize(containerRef); + const currentList = ref([]); + const source = shallowRef(list); + return { + state: ref({ + start: 0, + end: 10 + }), + 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") return index * itemSize; + return source.value.slice(0, index).reduce((sum, _, i) => sum + itemSize(i), 0); + }; +} +function useWatchForSizes(size, list, containerRef, calculateRange) { + watch([ + size.width, + size.height, + () => toValue(list), + containerRef + ], () => { + 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 calculateRange = createCalculateRange("horizontal", overscan, createGetOffset(source, itemWidth), getViewCapacity, resources); + const getDistanceLeft = createGetDistance(itemWidth, source); + const offsetLeft = computed(() => getDistanceLeft(state.value.start)); + const totalWidth = createComputedTotalSize(itemWidth, source); + useWatchForSizes(size, list, containerRef, calculateRange); + return { + scrollTo: createScrollTo("horizontal", calculateRange, getDistanceLeft, containerRef), + calculateRange, + wrapperProps: computed(() => { + return { style: { + height: "100%", + width: `${totalWidth.value - offsetLeft.value}px`, + marginLeft: `${offsetLeft.value}px`, + display: "flex" + } }; + }), + 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 calculateRange = createCalculateRange("vertical", overscan, createGetOffset(source, itemHeight), getViewCapacity, resources); + const getDistanceTop = createGetDistance(itemHeight, source); + const offsetTop = computed(() => getDistanceTop(state.value.start)); + const totalHeight = createComputedTotalSize(itemHeight, source); + useWatchForSizes(size, list, containerRef, calculateRange); + return { + calculateRange, + scrollTo: createScrollTo("vertical", calculateRange, getDistanceTop, containerRef), + containerStyle, + wrapperProps: computed(() => { + return { style: { + width: "100%", + height: `${totalHeight.value - offsetTop.value}px`, + marginTop: `${offsetTop.value}px` + } }; + }), + currentList, + containerRef + }; +} +function useWakeLock(options = {}) { + const { navigator: navigator$1 = defaultNavigator, document: document$1 = defaultDocument } = options; + const requestedType = shallowRef(false); + const sentinel = shallowRef(null); + const documentVisibility = useDocumentVisibility({ document: document$1 }); + const isSupported = useSupported(() => navigator$1 && "wakeLock" in navigator$1); + const isActive = computed(() => !!sentinel.value && documentVisibility.value === "visible"); + if (isSupported.value) { + useEventListener(sentinel, "release", () => { + var _sentinel$value$type, _sentinel$value; + requestedType.value = (_sentinel$value$type = (_sentinel$value = sentinel.value) === null || _sentinel$value === void 0 ? void 0 : _sentinel$value.type) !== null && _sentinel$value$type !== void 0 ? _sentinel$value$type : false; + }, { passive: true }); + whenever(() => documentVisibility.value === "visible" && (document$1 === null || document$1 === void 0 ? void 0 : document$1.visibilityState) === "visible" && requestedType.value, (type) => { + requestedType.value = false; + forceRequest(type); + }); + } + async function forceRequest(type) { + var _sentinel$value2; + await ((_sentinel$value2 = sentinel.value) === null || _sentinel$value2 === void 0 ? void 0 : _sentinel$value2.release()); + sentinel.value = isSupported.value ? await navigator$1.wakeLock.request(type) : null; + } + async function request(type) { + if (documentVisibility.value === "visible") await forceRequest(type); + else requestedType.value = type; + } + async function release() { + requestedType.value = false; + const s = sentinel.value; + sentinel.value = null; + await (s === null || s === void 0 ? void 0 : s.release()); + } + return { + sentinel, + isSupported, + isActive, + request, + forceRequest, + release + }; +} +function useWebNotification(options = {}) { + const { window: window$1 = defaultWindow, requestPermissions: _requestForPermissions = true } = options; + const defaultWebNotificationOptions = options; + const isSupported = useSupported(() => { + if (!window$1 || !("Notification" in window$1)) return false; + if (Notification.permission === "granted") return true; + try { + const notification$1 = new Notification(""); + notification$1.onshow = () => { + notification$1.close(); + }; + } catch (e) { + if (e.name === "TypeError") return false; + } + return true; + }); + const permissionGranted = shallowRef(isSupported.value && "permission" in Notification && Notification.permission === "granted"); + const notification = ref(null); + const ensurePermissions = async () => { + if (!isSupported.value) return; + if (!permissionGranted.value && Notification.permission !== "denied") { + if (await Notification.requestPermission() === "granted") permissionGranted.value = true; + } + return permissionGranted.value; + }; + const { on: onClick, trigger: clickTrigger } = createEventHook(); + const { on: onShow, trigger: showTrigger } = createEventHook(); + const { on: onError, trigger: errorTrigger } = createEventHook(); + const { on: onClose, trigger: closeTrigger } = createEventHook(); + const show = async (overrides) => { + if (!isSupported.value || !permissionGranted.value) return; + const options$1 = Object.assign({}, defaultWebNotificationOptions, overrides); + notification.value = new Notification(options$1.title || "", options$1); + notification.value.onclick = clickTrigger; + notification.value.onshow = showTrigger; + notification.value.onerror = errorTrigger; + notification.value.onclose = closeTrigger; + return notification.value; + }; + const close = () => { + if (notification.value) notification.value.close(); + notification.value = null; + }; + if (_requestForPermissions) tryOnMounted(ensurePermissions); + tryOnScopeDispose(close); + if (isSupported.value && window$1) { + const document$1 = window$1.document; + useEventListener(document$1, "visibilitychange", (e) => { + e.preventDefault(); + if (document$1.visibilityState === "visible") close(); + }); + } + return { + isSupported, + notification, + ensurePermissions, + permissionGranted, + 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, autoConnect = true, autoClose = true, protocols = [] } = options; + const data = ref(null); + const status = shallowRef("CLOSED"); + const wsRef = ref(); + const urlRef = toRef2(url); + let heartbeatPause; + let heartbeatResume; + let explicitlyClosed = false; + let retried = 0; + let bufferedData = []; + let retryTimeout; + let pongTimeoutWait; + const _sendBuffer = () => { + if (bufferedData.length && wsRef.value && status.value === "OPEN") { + for (const buffer of bufferedData) wsRef.value.send(buffer); + bufferedData = []; + } + }; + const resetRetry = () => { + if (retryTimeout != null) { + clearTimeout(retryTimeout); + retryTimeout = void 0; + } + }; + const resetHeartbeat = () => { + clearTimeout(pongTimeoutWait); + pongTimeoutWait = void 0; + }; + const close = (code = 1e3, reason) => { + resetRetry(); + if (!isClient && !isWorker || !wsRef.value) return; + explicitlyClosed = true; + resetHeartbeat(); + heartbeatPause === null || heartbeatPause === void 0 || heartbeatPause(); + wsRef.value.close(code, reason); + wsRef.value = void 0; + }; + const send = (data$1, useBuffer = true) => { + if (!wsRef.value || status.value !== "OPEN") { + if (useBuffer) bufferedData.push(data$1); + return false; + } + _sendBuffer(); + wsRef.value.send(data$1); + 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"; + retried = 0; + onConnected === null || onConnected === void 0 || onConnected(ws); + heartbeatResume === null || heartbeatResume === void 0 || heartbeatResume(); + _sendBuffer(); + }; + ws.onclose = (ev) => { + status.value = "CLOSED"; + resetHeartbeat(); + heartbeatPause === null || heartbeatPause === void 0 || heartbeatPause(); + onDisconnected === null || onDisconnected === void 0 || onDisconnected(ws, ev); + if (!explicitlyClosed && options.autoReconnect && (wsRef.value == null || ws === wsRef.value)) { + const { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions(options.autoReconnect); + if ((typeof retries === "function" ? retries : () => typeof retries === "number" && (retries < 0 || retried < retries))(retried)) { + retried += 1; + retryTimeout = setTimeout(_init, delay); + } else onFailed === null || onFailed === void 0 || onFailed(); + } + }; + ws.onerror = (e) => { + onError === null || onError === void 0 || onError(ws, e); + }; + ws.onmessage = (e) => { + if (options.heartbeat) { + resetHeartbeat(); + const { message = DEFAULT_PING_MESSAGE, responseMessage = message } = resolveNestedOptions(options.heartbeat); + if (e.data === toValue(responseMessage)) return; + } + data.value = e.data; + onMessage === null || onMessage === 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(toValue(message), false); + if (pongTimeoutWait != null) return; + pongTimeoutWait = setTimeout(() => { + close(); + explicitlyClosed = false; + }, pongTimeout); + }, interval, { immediate: false }); + heartbeatPause = pause; + heartbeatResume = resume; + } + if (autoClose) { + if (isClient) useEventListener("beforeunload", () => close(), { passive: true }); + tryOnScopeDispose(close); + } + const open = () => { + if (!isClient && !isWorker) return; + close(); + explicitlyClosed = false; + retried = 0; + _init(); + }; + if (immediate) open(); + if (autoConnect) watch(urlRef, open); + return { + data, + status, + close, + send, + open, + ws: wsRef + }; +} +function useWebWorker(arg0, workerOptions, options) { + const { window: window$1 = defaultWindow } = options !== null && options !== void 0 ? options : {}; + const data = ref(null); + const worker = shallowRef(); + const post = (...args) => { + if (!worker.value) return; + worker.value.postMessage(...args); + }; + const terminate = function terminate$1() { + if (!worker.value) return; + worker.value.terminate(); + }; + if (window$1) { + if (typeof arg0 === "string") worker.value = new Worker(arg0, workerOptions); + else if (typeof arg0 === "function") 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 + }; +} +function depsParser(deps, localDeps) { + if (deps.length === 0 && localDeps.length === 0) return ""; + const depsString = deps.map((dep) => `'${dep}'`).toString(); + const depsFunctionString = localDeps.filter((dep) => typeof dep === "function").map((fn) => { + const str = fn.toString(); + if (str.trim().startsWith("function")) return str; + else return `const ${fn.name} = ${str}`; + }).join(";"); + const importString = `importScripts(${depsString});`; + return `${depsString.trim() === "" ? "" : importString} ${depsFunctionString}`; +} +var depsParser_default = depsParser; +function jobRunner(userFunc) { + return (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 jobRunner_default = jobRunner; +function createWorkerBlobUrl(fn, deps, localDeps) { + const blobCode = `${depsParser_default(deps, localDeps)}; onmessage=(${jobRunner_default})(${fn})`; + const blob = new Blob([blobCode], { type: "text/javascript" }); + return URL.createObjectURL(blob); +} +var createWorkerBlobUrl_default = createWorkerBlobUrl; +function useWebWorkerFn(fn, options = {}) { + const { dependencies = [], localDependencies = [], timeout, window: window$1 = defaultWindow } = options; + const worker = ref(); + const workerStatus = shallowRef("PENDING"); + const promise = ref({}); + const timeoutId = shallowRef(); + const workerTerminate = (status = "PENDING") => { + if (worker.value && worker.value._url && window$1) { + worker.value.terminate(); + URL.revokeObjectURL(worker.value._url); + promise.value = {}; + worker.value = void 0; + window$1.clearTimeout(timeoutId.value); + workerStatus.value = status; + } + }; + workerTerminate(); + tryOnScopeDispose(workerTerminate); + const generateWorker = () => { + const blobUrl = createWorkerBlobUrl_default(fn, dependencies, localDependencies); + 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; + e.preventDefault(); + reject(e); + workerTerminate("ERROR"); + }; + if (timeout) timeoutId.value = setTimeout(() => workerTerminate("TIMEOUT_EXPIRED"), timeout); + return newWorker; + }; + const callWorker = (...fnArgs) => new Promise((resolve, reject) => { + var _worker$value; + promise.value = { + resolve, + reject + }; + (_worker$value = worker.value) === null || _worker$value === void 0 || _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(options = {}) { + const { window: window$1 = defaultWindow } = options; + if (!window$1) return shallowRef(false); + const focused = shallowRef(window$1.document.hasFocus()); + const listenerOptions = { passive: true }; + useEventListener(window$1, "blur", () => { + focused.value = false; + }, listenerOptions); + useEventListener(window$1, "focus", () => { + focused.value = true; + }, listenerOptions); + return focused; +} +function useWindowScroll(options = {}) { + const { window: window$1 = defaultWindow, ...rest } = options; + return useScroll(window$1, rest); +} +function useWindowSize(options = {}) { + const { window: window$1 = defaultWindow, initialWidth = Number.POSITIVE_INFINITY, initialHeight = Number.POSITIVE_INFINITY, listenOrientation = true, includeScrollbar = true, type = "inner" } = options; + const width = shallowRef(initialWidth); + const height = shallowRef(initialHeight); + const update = () => { + if (window$1) if (type === "outer") { + width.value = window$1.outerWidth; + height.value = window$1.outerHeight; + } else if (type === "visual" && window$1.visualViewport) { + const { width: visualViewportWidth, height: visualViewportHeight, scale } = window$1.visualViewport; + width.value = Math.round(visualViewportWidth * scale); + height.value = Math.round(visualViewportHeight * scale); + } else if (includeScrollbar) { + width.value = window$1.innerWidth; + height.value = window$1.innerHeight; + } else { + width.value = window$1.document.documentElement.clientWidth; + height.value = window$1.document.documentElement.clientHeight; + } + }; + update(); + tryOnMounted(update); + const listenerOptions = { passive: true }; + useEventListener("resize", update, listenerOptions); + if (window$1 && type === "visual" && window$1.visualViewport) useEventListener(window$1.visualViewport, "resize", update, listenerOptions); + if (listenOrientation) watch(useMediaQuery("(orientation: portrait)"), () => update()); + return { + width, + height + }; +} export { DefaultMagicKeysAliasMap, StorageSerializers, TransitionPresets, assert, - computedAsync as asyncComputed, - refAutoReset as autoResetRef, + asyncComputed, + autoResetRef, breakpointsAntDesign, breakpointsBootstrapV5, breakpointsElement, @@ -310,14 +8273,14 @@ export { computedInject, computedWithControl, containsProp, - computedWithControl as controlledComputed, + controlledComputed, controlledRef, createEventHook, createFetch, createFilterWrapper, createGlobalState, createInjectionState, - reactify as createReactiveFn, + createReactiveFn, createRef, createReusableTemplate, createSharedComposable, @@ -326,24 +8289,26 @@ export { createUnrefFn, customStorageEventName, debounceFilter, - refDebounced as debouncedRef, - watchDebounced as debouncedWatch, + debouncedRef, + debouncedWatch, defaultDocument, defaultLocation, defaultNavigator, defaultWindow, - computedEager as eagerComputed, + eagerComputed, executeTransition, extendRef, formatDate, formatTimeAgo, + formatTimeAgoIntl, + formatTimeAgoIntlParts, get, getLifeCycleTarget, getSSRHandler, hasOwn, hyphenate, identity, - watchIgnorable as ignorableWatch, + ignorableWatch, increaseWithUnit, injectLocal, invoke, @@ -371,7 +8336,7 @@ export { onLongPress, onStartTyping, pausableFilter, - watchPausable as pausableWatch, + pausableWatch, promiseTimeout, provideLocal, provideSSRWidth, @@ -385,24 +8350,23 @@ export { refAutoReset, refDebounced, refDefault, + refManualReset, refThrottled, refWithControl, - resolveRef, - resolveUnref, set, setSSRHandler, syncRef, syncRefs, templateRef, throttleFilter, - refThrottled as throttledRef, - watchThrottled as throttledWatch, + throttledRef, + throttledWatch, timestamp, toArray, toReactive, - toRef, - toRefs, - toValue, + toRef2 as toRef, + toRefs2 as toRefs, + transition, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, @@ -445,7 +8409,7 @@ export { useCycleList, useDark, useDateFormat, - refDebounced as useDebounce, + useDebounce, useDebounceFn, useDebouncedRefHistory, useDeviceMotion, @@ -540,10 +8504,11 @@ export { useTextDirection, useTextSelection, useTextareaAutosize, - refThrottled as useThrottle, + useThrottle, useThrottleFn, useThrottledRefHistory, useTimeAgo, + useTimeAgoIntl, useTimeout, useTimeoutFn, useTimeoutPoll, diff --git a/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map b/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map index 98652118..c870d614 100644 --- a/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map +++ b/docs/.vitepress/cache/deps/vitepress___@vueuse_core.js.map @@ -1,7 +1,7 @@ { "version": 3, - "sources": [], - "sourcesContent": [], - "mappings": "", - "names": [] + "sources": ["../../../../node_modules/@vueuse/shared/dist/index.js", "../../../../node_modules/@vueuse/core/dist/index.js"], + "sourcesContent": ["import { computed, customRef, effectScope, getCurrentInstance, getCurrentScope, hasInjectionContext, inject, isReactive, isRef, nextTick, onBeforeMount, onBeforeUnmount, onMounted, onScopeDispose, onUnmounted, provide, reactive, readonly, ref, shallowReadonly, shallowRef, toRef as toRef$1, toRefs as toRefs$1, toValue, unref, watch, watchEffect } from \"vue\";\n\n//#region computedEager/index.ts\n/**\n*\n* @deprecated This function will be removed in future version.\n*\n* Note: If you are using Vue 3.4+, you can straight use computed instead.\n* Because in Vue 3.4+, if computed new value does not change,\n* computed, effect, watch, watchEffect, render dependencies will not be triggered.\n* refer: https://github.com/vuejs/core/pull/5912\n*\n* @param fn effect function\n* @param options WatchOptionsBase\n* @returns readonly shallowRef\n*/\nfunction computedEager(fn, options) {\n\tvar _options$flush;\n\tconst result = shallowRef();\n\twatchEffect(() => {\n\t\tresult.value = fn();\n\t}, {\n\t\t...options,\n\t\tflush: (_options$flush = options === null || options === void 0 ? void 0 : options.flush) !== null && _options$flush !== void 0 ? _options$flush : \"sync\"\n\t});\n\treturn readonly(result);\n}\n/** @deprecated use `computedEager` instead */\nconst eagerComputed = computedEager;\n\n//#endregion\n//#region computedWithControl/index.ts\n/**\n* Explicitly define the deps of computed.\n*\n* @param source\n* @param fn\n*/\nfunction computedWithControl(source, fn, options = {}) {\n\tlet v = void 0;\n\tlet track;\n\tlet trigger;\n\tlet dirty = true;\n\tconst update = () => {\n\t\tdirty = true;\n\t\ttrigger();\n\t};\n\twatch(source, update, {\n\t\tflush: \"sync\",\n\t\t...options\n\t});\n\tconst get$1 = typeof fn === \"function\" ? fn : fn.get;\n\tconst set$1 = typeof fn === \"function\" ? void 0 : fn.set;\n\tconst result = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tif (dirty) {\n\t\t\t\t\tv = get$1(v);\n\t\t\t\t\tdirty = false;\n\t\t\t\t}\n\t\t\t\ttrack();\n\t\t\t\treturn v;\n\t\t\t},\n\t\t\tset(v$1) {\n\t\t\t\tset$1 === null || set$1 === void 0 || set$1(v$1);\n\t\t\t}\n\t\t};\n\t});\n\tresult.trigger = update;\n\treturn result;\n}\n/** @deprecated use `computedWithControl` instead */\nconst controlledComputed = computedWithControl;\n\n//#endregion\n//#region tryOnScopeDispose/index.ts\n/**\n* Call onScopeDispose() if it's inside an effect scope lifecycle, if not, do nothing\n*\n* @param fn\n*/\nfunction tryOnScopeDispose(fn, failSilently) {\n\tif (getCurrentScope()) {\n\t\tonScopeDispose(fn, failSilently);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\n//#endregion\n//#region createEventHook/index.ts\n/**\n* Utility for creating event hooks\n*\n* @see https://vueuse.org/createEventHook\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createEventHook() {\n\tconst fns = /* @__PURE__ */ new Set();\n\tconst off = (fn) => {\n\t\tfns.delete(fn);\n\t};\n\tconst clear = () => {\n\t\tfns.clear();\n\t};\n\tconst on = (fn) => {\n\t\tfns.add(fn);\n\t\tconst offFn = () => off(fn);\n\t\ttryOnScopeDispose(offFn);\n\t\treturn { off: offFn };\n\t};\n\tconst trigger = (...args) => {\n\t\treturn Promise.all(Array.from(fns).map((fn) => fn(...args)));\n\t};\n\treturn {\n\t\ton,\n\t\toff,\n\t\ttrigger,\n\t\tclear\n\t};\n}\n\n//#endregion\n//#region createGlobalState/index.ts\n/**\n* Keep states in the global scope to be reusable across Vue instances.\n*\n* @see https://vueuse.org/createGlobalState\n* @param stateFactory A factory function to create the state\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createGlobalState(stateFactory) {\n\tlet initialized = false;\n\tlet state;\n\tconst scope = effectScope(true);\n\treturn ((...args) => {\n\t\tif (!initialized) {\n\t\t\tstate = scope.run(() => stateFactory(...args));\n\t\t\tinitialized = true;\n\t\t}\n\t\treturn state;\n\t});\n}\n\n//#endregion\n//#region provideLocal/map.ts\nconst localProvidedStateMap = /* @__PURE__ */ new WeakMap();\n\n//#endregion\n//#region injectLocal/index.ts\n/**\n* On the basis of `inject`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* injectLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*\n* @__NO_SIDE_EFFECTS__\n*/\nconst injectLocal = (...args) => {\n\tvar _getCurrentInstance;\n\tconst key = args[0];\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null && !hasInjectionContext()) throw new Error(\"injectLocal must be called in setup\");\n\tif (owner && localProvidedStateMap.has(owner) && key in localProvidedStateMap.get(owner)) return localProvidedStateMap.get(owner)[key];\n\treturn inject(...args);\n};\n\n//#endregion\n//#region provideLocal/index.ts\n/**\n* On the basis of `provide`, it is allowed to directly call inject to obtain the value after call provide in the same component.\n*\n* @example\n* ```ts\n* provideLocal('MyInjectionKey', 1)\n* const injectedValue = injectLocal('MyInjectionKey') // injectedValue === 1\n* ```\n*/\nfunction provideLocal(key, value) {\n\tvar _getCurrentInstance;\n\tconst instance = (_getCurrentInstance = getCurrentInstance()) === null || _getCurrentInstance === void 0 ? void 0 : _getCurrentInstance.proxy;\n\tconst owner = instance !== null && instance !== void 0 ? instance : getCurrentScope();\n\tif (owner == null) throw new Error(\"provideLocal must be called in setup\");\n\tif (!localProvidedStateMap.has(owner)) localProvidedStateMap.set(owner, Object.create(null));\n\tconst localProvidedState = localProvidedStateMap.get(owner);\n\tlocalProvidedState[key] = value;\n\treturn provide(key, value);\n}\n\n//#endregion\n//#region createInjectionState/index.ts\n/**\n* Create global state that can be injected into components.\n*\n* @see https://vueuse.org/createInjectionState\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createInjectionState(composable, options) {\n\tconst key = (options === null || options === void 0 ? void 0 : options.injectionKey) || Symbol(composable.name || \"InjectionState\");\n\tconst defaultValue = options === null || options === void 0 ? void 0 : options.defaultValue;\n\tconst useProvidingState = (...args) => {\n\t\tconst state = composable(...args);\n\t\tprovideLocal(key, state);\n\t\treturn state;\n\t};\n\tconst useInjectedState = () => injectLocal(key, defaultValue);\n\treturn [useProvidingState, useInjectedState];\n}\n\n//#endregion\n//#region createRef/index.ts\n/**\n* Returns a `deepRef` or `shallowRef` depending on the `deep` param.\n*\n* @example createRef(1) // ShallowRef\n* @example createRef(1, false) // ShallowRef\n* @example createRef(1, true) // Ref\n* @example createRef(\"string\") // ShallowRef\n* @example createRef<\"A\"|\"B\">(\"A\", true) // Ref<\"A\"|\"B\">\n*\n* @param value\n* @param deep\n* @returns the `deepRef` or `shallowRef`\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createRef(value, deep) {\n\tif (deep === true) return ref(value);\n\telse return shallowRef(value);\n}\n\n//#endregion\n//#region utils/is.ts\nconst isClient = typeof window !== \"undefined\" && typeof document !== \"undefined\";\nconst isWorker = typeof WorkerGlobalScope !== \"undefined\" && globalThis instanceof WorkerGlobalScope;\nconst isDef = (val) => typeof val !== \"undefined\";\nconst notNullish = (val) => val != null;\nconst assert = (condition, ...infos) => {\n\tif (!condition) console.warn(...infos);\n};\nconst toString = Object.prototype.toString;\nconst isObject = (val) => toString.call(val) === \"[object Object]\";\nconst now = () => Date.now();\nconst timestamp = () => +Date.now();\nconst clamp = (n, min, max) => Math.min(max, Math.max(min, n));\nconst noop = () => {};\nconst rand = (min, max) => {\n\tmin = Math.ceil(min);\n\tmax = Math.floor(max);\n\treturn Math.floor(Math.random() * (max - min + 1)) + min;\n};\nconst hasOwn = (val, key) => Object.prototype.hasOwnProperty.call(val, key);\nconst isIOS = /* @__PURE__ */ getIsIOS();\nfunction getIsIOS() {\n\tvar _window, _window2, _window3;\n\treturn isClient && ((_window = window) === null || _window === void 0 || (_window = _window.navigator) === null || _window === void 0 ? void 0 : _window.userAgent) && (/iP(?:ad|hone|od)/.test(window.navigator.userAgent) || ((_window2 = window) === null || _window2 === void 0 || (_window2 = _window2.navigator) === null || _window2 === void 0 ? void 0 : _window2.maxTouchPoints) > 2 && /iPad|Macintosh/.test((_window3 = window) === null || _window3 === void 0 ? void 0 : _window3.navigator.userAgent));\n}\n\n//#endregion\n//#region toRef/index.ts\nfunction toRef(...args) {\n\tif (args.length !== 1) return toRef$1(...args);\n\tconst r = args[0];\n\treturn typeof r === \"function\" ? readonly(customRef(() => ({\n\t\tget: r,\n\t\tset: noop\n\t}))) : ref(r);\n}\n\n//#endregion\n//#region utils/filters.ts\n/**\n* @internal\n*/\nfunction createFilterWrapper(filter, fn) {\n\tfunction wrapper(...args) {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tPromise.resolve(filter(() => fn.apply(this, args), {\n\t\t\t\tfn,\n\t\t\t\tthisArg: this,\n\t\t\t\targs\n\t\t\t})).then(resolve).catch(reject);\n\t\t});\n\t}\n\treturn wrapper;\n}\nconst bypassFilter = (invoke$1) => {\n\treturn invoke$1();\n};\n/**\n* Create an EventFilter that debounce the events\n*/\nfunction debounceFilter(ms, options = {}) {\n\tlet timer;\n\tlet maxTimer;\n\tlet lastRejector = noop;\n\tconst _clearTimeout = (timer$1) => {\n\t\tclearTimeout(timer$1);\n\t\tlastRejector();\n\t\tlastRejector = noop;\n\t};\n\tlet lastInvoker;\n\tconst filter = (invoke$1) => {\n\t\tconst duration = toValue(ms);\n\t\tconst maxDuration = toValue(options.maxWait);\n\t\tif (timer) _clearTimeout(timer);\n\t\tif (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) {\n\t\t\tif (maxTimer) {\n\t\t\t\t_clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t}\n\t\t\treturn Promise.resolve(invoke$1());\n\t\t}\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tlastRejector = options.rejectOnCancel ? reject : resolve;\n\t\t\tlastInvoker = invoke$1;\n\t\t\tif (maxDuration && !maxTimer) maxTimer = setTimeout(() => {\n\t\t\t\tif (timer) _clearTimeout(timer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\tresolve(lastInvoker());\n\t\t\t}, maxDuration);\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tif (maxTimer) _clearTimeout(maxTimer);\n\t\t\t\tmaxTimer = void 0;\n\t\t\t\tresolve(invoke$1());\n\t\t\t}, duration);\n\t\t});\n\t};\n\treturn filter;\n}\nfunction throttleFilter(...args) {\n\tlet lastExec = 0;\n\tlet timer;\n\tlet isLeading = true;\n\tlet lastRejector = noop;\n\tlet lastValue;\n\tlet ms;\n\tlet trailing;\n\tlet leading;\n\tlet rejectOnCancel;\n\tif (!isRef(args[0]) && typeof args[0] === \"object\") ({delay: ms, trailing = true, leading = true, rejectOnCancel = false} = args[0]);\n\telse [ms, trailing = true, leading = true, rejectOnCancel = false] = args;\n\tconst clear = () => {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t\tlastRejector();\n\t\t\tlastRejector = noop;\n\t\t}\n\t};\n\tconst filter = (_invoke) => {\n\t\tconst duration = toValue(ms);\n\t\tconst elapsed = Date.now() - lastExec;\n\t\tconst invoke$1 = () => {\n\t\t\treturn lastValue = _invoke();\n\t\t};\n\t\tclear();\n\t\tif (duration <= 0) {\n\t\t\tlastExec = Date.now();\n\t\t\treturn invoke$1();\n\t\t}\n\t\tif (elapsed > duration) {\n\t\t\tlastExec = Date.now();\n\t\t\tif (leading || !isLeading) invoke$1();\n\t\t} else if (trailing) lastValue = new Promise((resolve, reject) => {\n\t\t\tlastRejector = rejectOnCancel ? reject : resolve;\n\t\t\ttimer = setTimeout(() => {\n\t\t\t\tlastExec = Date.now();\n\t\t\t\tisLeading = true;\n\t\t\t\tresolve(invoke$1());\n\t\t\t\tclear();\n\t\t\t}, Math.max(0, duration - elapsed));\n\t\t});\n\t\tif (!leading && !timer) timer = setTimeout(() => isLeading = true, duration);\n\t\tisLeading = false;\n\t\treturn lastValue;\n\t};\n\treturn filter;\n}\n/**\n* EventFilter that gives extra controls to pause and resume the filter\n*\n* @param extendFilter Extra filter to apply when the PausableFilter is active, default to none\n* @param options Options to configure the filter\n*/\nfunction pausableFilter(extendFilter = bypassFilter, options = {}) {\n\tconst { initialState = \"active\" } = options;\n\tconst isActive = toRef(initialState === \"active\");\n\tfunction pause() {\n\t\tisActive.value = false;\n\t}\n\tfunction resume() {\n\t\tisActive.value = true;\n\t}\n\tconst eventFilter = (...args) => {\n\t\tif (isActive.value) extendFilter(...args);\n\t};\n\treturn {\n\t\tisActive: readonly(isActive),\n\t\tpause,\n\t\tresume,\n\t\teventFilter\n\t};\n}\n\n//#endregion\n//#region utils/general.ts\nfunction promiseTimeout(ms, throwOnTimeout = false, reason = \"Timeout\") {\n\treturn new Promise((resolve, reject) => {\n\t\tif (throwOnTimeout) setTimeout(() => reject(reason), ms);\n\t\telse setTimeout(resolve, ms);\n\t});\n}\nfunction identity(arg) {\n\treturn arg;\n}\n/**\n* Create singleton promise function\n*\n* @example\n* ```\n* const promise = createSingletonPromise(async () => { ... })\n*\n* await promise()\n* await promise() // all of them will be bind to a single promise instance\n* await promise() // and be resolved together\n* ```\n*/\nfunction createSingletonPromise(fn) {\n\tlet _promise;\n\tfunction wrapper() {\n\t\tif (!_promise) _promise = fn();\n\t\treturn _promise;\n\t}\n\twrapper.reset = async () => {\n\t\tconst _prev = _promise;\n\t\t_promise = void 0;\n\t\tif (_prev) await _prev;\n\t};\n\treturn wrapper;\n}\nfunction invoke(fn) {\n\treturn fn();\n}\nfunction containsProp(obj, ...props) {\n\treturn props.some((k) => k in obj);\n}\nfunction increaseWithUnit(target, delta) {\n\tvar _target$match;\n\tif (typeof target === \"number\") return target + delta;\n\tconst value = ((_target$match = target.match(/^-?\\d+\\.?\\d*/)) === null || _target$match === void 0 ? void 0 : _target$match[0]) || \"\";\n\tconst unit = target.slice(value.length);\n\tconst result = Number.parseFloat(value) + delta;\n\tif (Number.isNaN(result)) return target;\n\treturn result + unit;\n}\n/**\n* Get a px value for SSR use, do not rely on this method outside of SSR as REM unit is assumed at 16px, which might not be the case on the client\n*/\nfunction pxValue(px) {\n\treturn px.endsWith(\"rem\") ? Number.parseFloat(px) * 16 : Number.parseFloat(px);\n}\n/**\n* Create a new subset object by giving keys\n*/\nfunction objectPick(obj, keys, omitUndefined = false) {\n\treturn keys.reduce((n, k) => {\n\t\tif (k in obj) {\n\t\t\tif (!omitUndefined || obj[k] !== void 0) n[k] = obj[k];\n\t\t}\n\t\treturn n;\n\t}, {});\n}\n/**\n* Create a new subset object by omit giving keys\n*/\nfunction objectOmit(obj, keys, omitUndefined = false) {\n\treturn Object.fromEntries(Object.entries(obj).filter(([key, value]) => {\n\t\treturn (!omitUndefined || value !== void 0) && !keys.includes(key);\n\t}));\n}\nfunction objectEntries(obj) {\n\treturn Object.entries(obj);\n}\nfunction toArray(value) {\n\treturn Array.isArray(value) ? value : [value];\n}\n\n//#endregion\n//#region utils/port.ts\nfunction cacheStringFunction(fn) {\n\tconst cache = Object.create(null);\n\treturn ((str) => {\n\t\treturn cache[str] || (cache[str] = fn(str));\n\t});\n}\nconst hyphenateRE = /\\B([A-Z])/g;\nconst hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, \"-$1\").toLowerCase());\nconst camelizeRE = /-(\\w)/g;\nconst camelize = cacheStringFunction((str) => {\n\treturn str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : \"\");\n});\n\n//#endregion\n//#region utils/vue.ts\nfunction getLifeCycleTarget(target) {\n\treturn target || getCurrentInstance();\n}\n\n//#endregion\n//#region createSharedComposable/index.ts\n/**\n* Make a composable function usable with multiple Vue instances.\n*\n* @see https://vueuse.org/createSharedComposable\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createSharedComposable(composable) {\n\tif (!isClient) return composable;\n\tlet subscribers = 0;\n\tlet state;\n\tlet scope;\n\tconst dispose = () => {\n\t\tsubscribers -= 1;\n\t\tif (scope && subscribers <= 0) {\n\t\t\tscope.stop();\n\t\t\tstate = void 0;\n\t\t\tscope = void 0;\n\t\t}\n\t};\n\treturn ((...args) => {\n\t\tsubscribers += 1;\n\t\tif (!scope) {\n\t\t\tscope = effectScope(true);\n\t\t\tstate = scope.run(() => composable(...args));\n\t\t}\n\t\ttryOnScopeDispose(dispose);\n\t\treturn state;\n\t});\n}\n\n//#endregion\n//#region extendRef/index.ts\nfunction extendRef(ref$1, extend, { enumerable = false, unwrap = true } = {}) {\n\tfor (const [key, value] of Object.entries(extend)) {\n\t\tif (key === \"value\") continue;\n\t\tif (isRef(value) && unwrap) Object.defineProperty(ref$1, key, {\n\t\t\tget() {\n\t\t\t\treturn value.value;\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tvalue.value = v;\n\t\t\t},\n\t\t\tenumerable\n\t\t});\n\t\telse Object.defineProperty(ref$1, key, {\n\t\t\tvalue,\n\t\t\tenumerable\n\t\t});\n\t}\n\treturn ref$1;\n}\n\n//#endregion\n//#region get/index.ts\nfunction get(obj, key) {\n\tif (key == null) return unref(obj);\n\treturn unref(obj)[key];\n}\n\n//#endregion\n//#region isDefined/index.ts\nfunction isDefined(v) {\n\treturn unref(v) != null;\n}\n\n//#endregion\n//#region makeDestructurable/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction makeDestructurable(obj, arr) {\n\tif (typeof Symbol !== \"undefined\") {\n\t\tconst clone = { ...obj };\n\t\tObject.defineProperty(clone, Symbol.iterator, {\n\t\t\tenumerable: false,\n\t\t\tvalue() {\n\t\t\t\tlet index = 0;\n\t\t\t\treturn { next: () => ({\n\t\t\t\t\tvalue: arr[index++],\n\t\t\t\t\tdone: index > arr.length\n\t\t\t\t}) };\n\t\t\t}\n\t\t});\n\t\treturn clone;\n\t} else return Object.assign([...arr], obj);\n}\n\n//#endregion\n//#region reactify/index.ts\n/**\n* Converts plain function into a reactive function.\n* The converted function accepts refs as it's arguments\n* and returns a ComputedRef, with proper typing.\n*\n* @param fn - Source function\n* @param options - Options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactify(fn, options) {\n\tconst unrefFn = (options === null || options === void 0 ? void 0 : options.computedGetter) === false ? unref : toValue;\n\treturn function(...args) {\n\t\treturn computed(() => fn.apply(this, args.map((i) => unrefFn(i))));\n\t};\n}\n/** @deprecated use `reactify` instead */\nconst createReactiveFn = reactify;\n\n//#endregion\n//#region reactifyObject/index.ts\n/**\n* Apply `reactify` to an object\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction reactifyObject(obj, optionsOrKeys = {}) {\n\tlet keys = [];\n\tlet options;\n\tif (Array.isArray(optionsOrKeys)) keys = optionsOrKeys;\n\telse {\n\t\toptions = optionsOrKeys;\n\t\tconst { includeOwnProperties = true } = optionsOrKeys;\n\t\tkeys.push(...Object.keys(obj));\n\t\tif (includeOwnProperties) keys.push(...Object.getOwnPropertyNames(obj));\n\t}\n\treturn Object.fromEntries(keys.map((key) => {\n\t\tconst value = obj[key];\n\t\treturn [key, typeof value === \"function\" ? reactify(value.bind(obj), options) : value];\n\t}));\n}\n\n//#endregion\n//#region toReactive/index.ts\n/**\n* Converts ref to reactive.\n*\n* @see https://vueuse.org/toReactive\n* @param objectRef A ref of object\n*/\nfunction toReactive(objectRef) {\n\tif (!isRef(objectRef)) return reactive(objectRef);\n\treturn reactive(new Proxy({}, {\n\t\tget(_, p, receiver) {\n\t\t\treturn unref(Reflect.get(objectRef.value, p, receiver));\n\t\t},\n\t\tset(_, p, value) {\n\t\t\tif (isRef(objectRef.value[p]) && !isRef(value)) objectRef.value[p].value = value;\n\t\t\telse objectRef.value[p] = value;\n\t\t\treturn true;\n\t\t},\n\t\tdeleteProperty(_, p) {\n\t\t\treturn Reflect.deleteProperty(objectRef.value, p);\n\t\t},\n\t\thas(_, p) {\n\t\t\treturn Reflect.has(objectRef.value, p);\n\t\t},\n\t\townKeys() {\n\t\t\treturn Object.keys(objectRef.value);\n\t\t},\n\t\tgetOwnPropertyDescriptor() {\n\t\t\treturn {\n\t\t\t\tenumerable: true,\n\t\t\t\tconfigurable: true\n\t\t\t};\n\t\t}\n\t}));\n}\n\n//#endregion\n//#region reactiveComputed/index.ts\n/**\n* Computed reactive object.\n*/\nfunction reactiveComputed(fn) {\n\treturn toReactive(computed(fn));\n}\n\n//#endregion\n//#region reactiveOmit/index.ts\n/**\n* Reactively omit fields from a reactive object\n*\n* @see https://vueuse.org/reactiveOmit\n*/\nfunction reactiveOmit(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => !predicate(toValue(v), k))) : Object.fromEntries(Object.entries(toRefs$1(obj)).filter((e) => !flatKeys.includes(e[0]))));\n}\n\n//#endregion\n//#region reactivePick/index.ts\n/**\n* Reactively pick fields from a reactive object\n*\n* @see https://vueuse.org/reactivePick\n*/\nfunction reactivePick(obj, ...keys) {\n\tconst flatKeys = keys.flat();\n\tconst predicate = flatKeys[0];\n\treturn reactiveComputed(() => typeof predicate === \"function\" ? Object.fromEntries(Object.entries(toRefs$1(obj)).filter(([k, v]) => predicate(toValue(v), k))) : Object.fromEntries(flatKeys.map((k) => [k, toRef(obj, k)])));\n}\n\n//#endregion\n//#region refAutoReset/index.ts\n/**\n* Create a ref which will be reset to the default value after some time.\n*\n* @see https://vueuse.org/refAutoReset\n* @param defaultValue The value which will be set.\n* @param afterMs A zero-or-greater delay in milliseconds.\n*/\nfunction refAutoReset(defaultValue, afterMs = 1e4) {\n\treturn customRef((track, trigger) => {\n\t\tlet value = toValue(defaultValue);\n\t\tlet timer;\n\t\tconst resetAfter = () => setTimeout(() => {\n\t\t\tvalue = toValue(defaultValue);\n\t\t\ttrigger();\n\t\t}, toValue(afterMs));\n\t\ttryOnScopeDispose(() => {\n\t\t\tclearTimeout(timer);\n\t\t});\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t\tclearTimeout(timer);\n\t\t\t\ttimer = resetAfter();\n\t\t\t}\n\t\t};\n\t});\n}\n/** @deprecated use `refAutoReset` instead */\nconst autoResetRef = refAutoReset;\n\n//#endregion\n//#region useDebounceFn/index.ts\n/**\n* Debounce execution of a function.\n*\n* @see https://vueuse.org/useDebounceFn\n* @param fn A function to be executed after delay milliseconds debounced.\n* @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param options Options\n*\n* @return A new, debounce, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDebounceFn(fn, ms = 200, options = {}) {\n\treturn createFilterWrapper(debounceFilter(ms, options), fn);\n}\n\n//#endregion\n//#region refDebounced/index.ts\n/**\n* Debounce updates of a ref.\n*\n* @return A new debounced ref.\n*/\nfunction refDebounced(value, ms = 200, options = {}) {\n\tconst debounced = ref(toValue(value));\n\tconst updater = useDebounceFn(() => {\n\t\tdebounced.value = value.value;\n\t}, ms, options);\n\twatch(value, () => updater());\n\treturn shallowReadonly(debounced);\n}\n/** @deprecated use `refDebounced` instead */\nconst debouncedRef = refDebounced;\n/** @deprecated use `refDebounced` instead */\nconst useDebounce = refDebounced;\n\n//#endregion\n//#region refDefault/index.ts\n/**\n* Apply default value to a ref.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refDefault(source, defaultValue) {\n\treturn computed({\n\t\tget() {\n\t\t\tvar _source$value;\n\t\t\treturn (_source$value = source.value) !== null && _source$value !== void 0 ? _source$value : defaultValue;\n\t\t},\n\t\tset(value) {\n\t\t\tsource.value = value;\n\t\t}\n\t});\n}\n\n//#endregion\n//#region refManualReset/index.ts\n/**\n* Create a ref with manual reset functionality.\n*\n* @see https://vueuse.org/refManualReset\n* @param defaultValue The value which will be set.\n*/\nfunction refManualReset(defaultValue) {\n\tlet value = toValue(defaultValue);\n\tlet trigger;\n\tconst reset = () => {\n\t\tvalue = toValue(defaultValue);\n\t\ttrigger();\n\t};\n\tconst refValue = customRef((track, _trigger) => {\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\ttrack();\n\t\t\t\treturn value;\n\t\t\t},\n\t\t\tset(newValue) {\n\t\t\t\tvalue = newValue;\n\t\t\t\ttrigger();\n\t\t\t}\n\t\t};\n\t});\n\trefValue.reset = reset;\n\treturn refValue;\n}\n\n//#endregion\n//#region useThrottleFn/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param fn A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,\n* to `callback` when the throttled-function is executed.\n* @param ms A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* (default value: 200)\n*\n* @param [trailing] if true, call fn again after the time is up (default value: false)\n*\n* @param [leading] if true, call fn on the leading edge of the ms timeout (default value: true)\n*\n* @param [rejectOnCancel] if true, reject the last call if it's been cancel (default value: false)\n*\n* @return A new, throttled, function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useThrottleFn(fn, ms = 200, trailing = false, leading = true, rejectOnCancel = false) {\n\treturn createFilterWrapper(throttleFilter(ms, trailing, leading, rejectOnCancel), fn);\n}\n\n//#endregion\n//#region refThrottled/index.ts\n/**\n* Throttle execution of a function. Especially useful for rate limiting\n* execution of handlers on events like resize and scroll.\n*\n* @param value Ref value to be watched with throttle effect\n* @param delay A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.\n* @param trailing if true, update the value again after the delay time is up\n* @param leading if true, update the value on the leading edge of the ms timeout\n*/\nfunction refThrottled(value, delay = 200, trailing = true, leading = true) {\n\tif (delay <= 0) return value;\n\tconst throttled = ref(toValue(value));\n\tconst updater = useThrottleFn(() => {\n\t\tthrottled.value = value.value;\n\t}, delay, trailing, leading);\n\twatch(value, () => updater());\n\treturn throttled;\n}\n/** @deprecated use `refThrottled` instead */\nconst throttledRef = refThrottled;\n/** @deprecated use `refThrottled` instead */\nconst useThrottle = refThrottled;\n\n//#endregion\n//#region refWithControl/index.ts\n/**\n* Fine-grained controls over ref and its reactivity.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction refWithControl(initial, options = {}) {\n\tlet source = initial;\n\tlet track;\n\tlet trigger;\n\tconst ref$1 = customRef((_track, _trigger) => {\n\t\ttrack = _track;\n\t\ttrigger = _trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\treturn get$1();\n\t\t\t},\n\t\t\tset(v) {\n\t\t\t\tset$1(v);\n\t\t\t}\n\t\t};\n\t});\n\tfunction get$1(tracking = true) {\n\t\tif (tracking) track();\n\t\treturn source;\n\t}\n\tfunction set$1(value, triggering = true) {\n\t\tvar _options$onBeforeChan, _options$onChanged;\n\t\tif (value === source) return;\n\t\tconst old = source;\n\t\tif (((_options$onBeforeChan = options.onBeforeChange) === null || _options$onBeforeChan === void 0 ? void 0 : _options$onBeforeChan.call(options, value, old)) === false) return;\n\t\tsource = value;\n\t\t(_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, value, old);\n\t\tif (triggering) trigger();\n\t}\n\t/**\n\t* Get the value without tracked in the reactivity system\n\t*/\n\tconst untrackedGet = () => get$1(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*/\n\tconst silentSet = (v) => set$1(v, false);\n\t/**\n\t* Get the value without tracked in the reactivity system.\n\t*\n\t* Alias for `untrackedGet()`\n\t*/\n\tconst peek = () => get$1(false);\n\t/**\n\t* Set the value without triggering the reactivity system\n\t*\n\t* Alias for `silentSet(v)`\n\t*/\n\tconst lay = (v) => set$1(v, false);\n\treturn extendRef(ref$1, {\n\t\tget: get$1,\n\t\tset: set$1,\n\t\tuntrackedGet,\n\t\tsilentSet,\n\t\tpeek,\n\t\tlay\n\t}, { enumerable: true });\n}\n/** @deprecated use `refWithControl` instead */\nconst controlledRef = refWithControl;\n\n//#endregion\n//#region set/index.ts\n/**\n* Shorthand for `ref.value = x`\n*/\nfunction set(...args) {\n\tif (args.length === 2) {\n\t\tconst [ref$1, value] = args;\n\t\tref$1.value = value;\n\t}\n\tif (args.length === 3) {\n\t\tconst [target, key, value] = args;\n\t\ttarget[key] = value;\n\t}\n}\n\n//#endregion\n//#region watchWithFilter/index.ts\nfunction watchWithFilter(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter,...watchOptions } = options;\n\treturn watch(source, createFilterWrapper(eventFilter, cb), watchOptions);\n}\n\n//#endregion\n//#region watchPausable/index.ts\nfunction watchPausable(source, cb, options = {}) {\n\tconst { eventFilter: filter, initialState = \"active\",...watchOptions } = options;\n\tconst { eventFilter, pause, resume, isActive } = pausableFilter(filter, { initialState });\n\treturn {\n\t\tstop: watchWithFilter(source, cb, {\n\t\t\t...watchOptions,\n\t\t\teventFilter\n\t\t}),\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n/** @deprecated use `watchPausable` instead */\nconst pausableWatch = watchPausable;\n\n//#endregion\n//#region syncRef/index.ts\n/**\n* Two-way refs synchronization.\n* From the set theory perspective to restrict the option's type\n* Check in the following order:\n* 1. L = R\n* 2. L ∩ R ≠ ∅\n* 3. L ⊆ R\n* 4. L ∩ R = ∅\n*/\nfunction syncRef(left, right, ...[options]) {\n\tconst { flush = \"sync\", deep = false, immediate = true, direction = \"both\", transform = {} } = options || {};\n\tconst watchers = [];\n\tconst transformLTR = \"ltr\" in transform && transform.ltr || ((v) => v);\n\tconst transformRTL = \"rtl\" in transform && transform.rtl || ((v) => v);\n\tif (direction === \"both\" || direction === \"ltr\") watchers.push(pausableWatch(left, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tright.value = transformLTR(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tif (direction === \"both\" || direction === \"rtl\") watchers.push(pausableWatch(right, (newValue) => {\n\t\twatchers.forEach((w) => w.pause());\n\t\tleft.value = transformRTL(newValue);\n\t\twatchers.forEach((w) => w.resume());\n\t}, {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t}));\n\tconst stop = () => {\n\t\twatchers.forEach((w) => w.stop());\n\t};\n\treturn stop;\n}\n\n//#endregion\n//#region syncRefs/index.ts\n/**\n* Keep target ref(s) in sync with the source ref\n*\n* @param source source ref\n* @param targets\n*/\nfunction syncRefs(source, targets, options = {}) {\n\tconst { flush = \"sync\", deep = false, immediate = true } = options;\n\tconst targetsArray = toArray(targets);\n\treturn watch(source, (newValue) => targetsArray.forEach((target) => target.value = newValue), {\n\t\tflush,\n\t\tdeep,\n\t\timmediate\n\t});\n}\n\n//#endregion\n//#region toRefs/index.ts\n/**\n* Extended `toRefs` that also accepts refs of an object.\n*\n* @see https://vueuse.org/toRefs\n* @param objectRef A ref or normal object or array.\n* @param options Options\n*/\nfunction toRefs(objectRef, options = {}) {\n\tif (!isRef(objectRef)) return toRefs$1(objectRef);\n\tconst result = Array.isArray(objectRef.value) ? Array.from({ length: objectRef.value.length }) : {};\n\tfor (const key in objectRef.value) result[key] = customRef(() => ({\n\t\tget() {\n\t\t\treturn objectRef.value[key];\n\t\t},\n\t\tset(v) {\n\t\t\tvar _toValue;\n\t\t\tif ((_toValue = toValue(options.replaceRef)) !== null && _toValue !== void 0 ? _toValue : true) if (Array.isArray(objectRef.value)) {\n\t\t\t\tconst copy = [...objectRef.value];\n\t\t\t\tcopy[key] = v;\n\t\t\t\tobjectRef.value = copy;\n\t\t\t} else {\n\t\t\t\tconst newObject = {\n\t\t\t\t\t...objectRef.value,\n\t\t\t\t\t[key]: v\n\t\t\t\t};\n\t\t\t\tObject.setPrototypeOf(newObject, Object.getPrototypeOf(objectRef.value));\n\t\t\t\tobjectRef.value = newObject;\n\t\t\t}\n\t\t\telse objectRef.value[key] = v;\n\t\t}\n\t}));\n\treturn result;\n}\n\n//#endregion\n//#region tryOnBeforeMount/index.ts\n/**\n* Call onBeforeMount() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnBeforeMount(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onBeforeMount(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n\n//#endregion\n//#region tryOnBeforeUnmount/index.ts\n/**\n* Call onBeforeUnmount() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnBeforeUnmount(fn, target) {\n\tif (getLifeCycleTarget(target)) onBeforeUnmount(fn, target);\n}\n\n//#endregion\n//#region tryOnMounted/index.ts\n/**\n* Call onMounted() if it's inside a component lifecycle, if not, just call the function\n*\n* @param fn\n* @param sync if set to false, it will run in the nextTick() of Vue\n* @param target\n*/\nfunction tryOnMounted(fn, sync = true, target) {\n\tif (getLifeCycleTarget(target)) onMounted(fn, target);\n\telse if (sync) fn();\n\telse nextTick(fn);\n}\n\n//#endregion\n//#region tryOnUnmounted/index.ts\n/**\n* Call onUnmounted() if it's inside a component lifecycle, if not, do nothing\n*\n* @param fn\n* @param target\n*/\nfunction tryOnUnmounted(fn, target) {\n\tif (getLifeCycleTarget(target)) onUnmounted(fn, target);\n}\n\n//#endregion\n//#region until/index.ts\nfunction createUntil(r, isNot = false) {\n\tfunction toMatch(condition, { flush = \"sync\", deep = false, timeout, throwOnTimeout } = {}) {\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch(r, (v) => {\n\t\t\t\tif (condition(v) !== isNot) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => stop === null || stop === void 0 ? void 0 : stop()));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBe(value, options) {\n\t\tif (!isRef(value)) return toMatch((v) => v === value, options);\n\t\tconst { flush = \"sync\", deep = false, timeout, throwOnTimeout } = options !== null && options !== void 0 ? options : {};\n\t\tlet stop = null;\n\t\tconst promises = [new Promise((resolve) => {\n\t\t\tstop = watch([r, value], ([v1, v2]) => {\n\t\t\t\tif (isNot !== (v1 === v2)) {\n\t\t\t\t\tif (stop) stop();\n\t\t\t\t\telse nextTick(() => stop === null || stop === void 0 ? void 0 : stop());\n\t\t\t\t\tresolve(v1);\n\t\t\t\t}\n\t\t\t}, {\n\t\t\t\tflush,\n\t\t\t\tdeep,\n\t\t\t\timmediate: true\n\t\t\t});\n\t\t})];\n\t\tif (timeout != null) promises.push(promiseTimeout(timeout, throwOnTimeout).then(() => toValue(r)).finally(() => {\n\t\t\tstop === null || stop === void 0 || stop();\n\t\t\treturn toValue(r);\n\t\t}));\n\t\treturn Promise.race(promises);\n\t}\n\tfunction toBeTruthy(options) {\n\t\treturn toMatch((v) => Boolean(v), options);\n\t}\n\tfunction toBeNull(options) {\n\t\treturn toBe(null, options);\n\t}\n\tfunction toBeUndefined(options) {\n\t\treturn toBe(void 0, options);\n\t}\n\tfunction toBeNaN(options) {\n\t\treturn toMatch(Number.isNaN, options);\n\t}\n\tfunction toContains(value, options) {\n\t\treturn toMatch((v) => {\n\t\t\tconst array = Array.from(v);\n\t\t\treturn array.includes(value) || array.includes(toValue(value));\n\t\t}, options);\n\t}\n\tfunction changed(options) {\n\t\treturn changedTimes(1, options);\n\t}\n\tfunction changedTimes(n = 1, options) {\n\t\tlet count = -1;\n\t\treturn toMatch(() => {\n\t\t\tcount += 1;\n\t\t\treturn count >= n;\n\t\t}, options);\n\t}\n\tif (Array.isArray(toValue(r))) return {\n\t\ttoMatch,\n\t\ttoContains,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n\telse return {\n\t\ttoMatch,\n\t\ttoBe,\n\t\ttoBeTruthy,\n\t\ttoBeNull,\n\t\ttoBeNaN,\n\t\ttoBeUndefined,\n\t\tchanged,\n\t\tchangedTimes,\n\t\tget not() {\n\t\t\treturn createUntil(r, !isNot);\n\t\t}\n\t};\n}\nfunction until(r) {\n\treturn createUntil(r);\n}\n\n//#endregion\n//#region useArrayDifference/index.ts\nfunction defaultComparator(value, othVal) {\n\treturn value === othVal;\n}\n/**\n* Reactive get array difference of two array\n* @see https://vueuse.org/useArrayDifference\n* @returns - the difference of two array\n* @param args\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayDifference(...args) {\n\tvar _args$, _args$2;\n\tconst list = args[0];\n\tconst values = args[1];\n\tlet compareFn = (_args$ = args[2]) !== null && _args$ !== void 0 ? _args$ : defaultComparator;\n\tconst { symmetric = false } = (_args$2 = args[3]) !== null && _args$2 !== void 0 ? _args$2 : {};\n\tif (typeof compareFn === \"string\") {\n\t\tconst key = compareFn;\n\t\tcompareFn = (value, othVal) => value[key] === othVal[key];\n\t}\n\tconst diff1 = computed(() => toValue(list).filter((x) => toValue(values).findIndex((y) => compareFn(x, y)) === -1));\n\tif (symmetric) {\n\t\tconst diff2 = computed(() => toValue(values).filter((x) => toValue(list).findIndex((y) => compareFn(x, y)) === -1));\n\t\treturn computed(() => symmetric ? [...toValue(diff1), ...toValue(diff2)] : toValue(diff1));\n\t} else return diff1;\n}\n\n//#endregion\n//#region useArrayEvery/index.ts\n/**\n* Reactive `Array.every`\n*\n* @see https://vueuse.org/useArrayEvery\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for every element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayEvery(list, fn) {\n\treturn computed(() => toValue(list).every((element, index, array) => fn(toValue(element), index, array)));\n}\n\n//#endregion\n//#region useArrayFilter/index.ts\n/**\n* Reactive `Array.filter`\n*\n* @see https://vueuse.org/useArrayFilter\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a shallow copy of a portion of the given array, filtered down to just the elements from the given array that pass the test implemented by the provided function. If no elements pass the test, an empty array will be returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFilter(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).filter(fn));\n}\n\n//#endregion\n//#region useArrayFind/index.ts\n/**\n* Reactive `Array.find`\n*\n* @see https://vueuse.org/useArrayFind\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the first element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFind(list, fn) {\n\treturn computed(() => toValue(toValue(list).find((element, index, array) => fn(toValue(element), index, array))));\n}\n\n//#endregion\n//#region useArrayFindIndex/index.ts\n/**\n* Reactive `Array.findIndex`\n*\n* @see https://vueuse.org/useArrayFindIndex\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the index of the first element in the array that passes the test. Otherwise, \"-1\".\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindIndex(list, fn) {\n\treturn computed(() => toValue(list).findIndex((element, index, array) => fn(toValue(element), index, array)));\n}\n\n//#endregion\n//#region useArrayFindLast/index.ts\nfunction findLast(arr, cb) {\n\tlet index = arr.length;\n\twhile (index-- > 0) if (cb(arr[index], index, arr)) return arr[index];\n}\n/**\n* Reactive `Array.findLast`\n*\n* @see https://vueuse.org/useArrayFindLast\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns the last element in the array that satisfies the provided testing function. Otherwise, undefined is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayFindLast(list, fn) {\n\treturn computed(() => toValue(!Array.prototype.findLast ? findLast(toValue(list), (element, index, array) => fn(toValue(element), index, array)) : toValue(list).findLast((element, index, array) => fn(toValue(element), index, array))));\n}\n\n//#endregion\n//#region useArrayIncludes/index.ts\nfunction isArrayIncludesOptions(obj) {\n\treturn isObject(obj) && containsProp(obj, \"formIndex\", \"comparator\");\n}\n/**\n* Reactive `Array.includes`\n*\n* @see https://vueuse.org/useArrayIncludes\n*\n* @returns true if the `value` is found in the array. Otherwise, false.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayIncludes(...args) {\n\tvar _comparator;\n\tconst list = args[0];\n\tconst value = args[1];\n\tlet comparator = args[2];\n\tlet formIndex = 0;\n\tif (isArrayIncludesOptions(comparator)) {\n\t\tvar _comparator$fromIndex;\n\t\tformIndex = (_comparator$fromIndex = comparator.fromIndex) !== null && _comparator$fromIndex !== void 0 ? _comparator$fromIndex : 0;\n\t\tcomparator = comparator.comparator;\n\t}\n\tif (typeof comparator === \"string\") {\n\t\tconst key = comparator;\n\t\tcomparator = (element, value$1) => element[key] === toValue(value$1);\n\t}\n\tcomparator = (_comparator = comparator) !== null && _comparator !== void 0 ? _comparator : ((element, value$1) => element === toValue(value$1));\n\treturn computed(() => toValue(list).slice(formIndex).some((element, index, array) => comparator(toValue(element), toValue(value), index, toValue(array))));\n}\n\n//#endregion\n//#region useArrayJoin/index.ts\n/**\n* Reactive `Array.join`\n*\n* @see https://vueuse.org/useArrayJoin\n* @param list - the array was called upon.\n* @param separator - a string to separate each pair of adjacent elements of the array. If omitted, the array elements are separated with a comma (\",\").\n*\n* @returns a string with all array elements joined. If arr.length is 0, the empty string is returned.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayJoin(list, separator) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).join(toValue(separator)));\n}\n\n//#endregion\n//#region useArrayMap/index.ts\n/**\n* Reactive `Array.map`\n*\n* @see https://vueuse.org/useArrayMap\n* @param list - the array was called upon.\n* @param fn - a function that is called for every element of the given `list`. Each time `fn` executes, the returned value is added to the new array.\n*\n* @returns a new array with each element being the result of the callback function.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayMap(list, fn) {\n\treturn computed(() => toValue(list).map((i) => toValue(i)).map(fn));\n}\n\n//#endregion\n//#region useArrayReduce/index.ts\n/**\n* Reactive `Array.reduce`\n*\n* @see https://vueuse.org/useArrayReduce\n* @param list - the array was called upon.\n* @param reducer - a \"reducer\" function.\n* @param args\n*\n* @returns the value that results from running the \"reducer\" callback function to completion over the entire array.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayReduce(list, reducer, ...args) {\n\tconst reduceCallback = (sum, value, index) => reducer(toValue(sum), toValue(value), index);\n\treturn computed(() => {\n\t\tconst resolved = toValue(list);\n\t\treturn args.length ? resolved.reduce(reduceCallback, typeof args[0] === \"function\" ? toValue(args[0]()) : toValue(args[0])) : resolved.reduce(reduceCallback);\n\t});\n}\n\n//#endregion\n//#region useArraySome/index.ts\n/**\n* Reactive `Array.some`\n*\n* @see https://vueuse.org/useArraySome\n* @param list - the array was called upon.\n* @param fn - a function to test each element.\n*\n* @returns **true** if the `fn` function returns a **truthy** value for any element from the array. Otherwise, **false**.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArraySome(list, fn) {\n\treturn computed(() => toValue(list).some((element, index, array) => fn(toValue(element), index, array)));\n}\n\n//#endregion\n//#region useArrayUnique/index.ts\nfunction uniq(array) {\n\treturn Array.from(new Set(array));\n}\nfunction uniqueElementsBy(array, fn) {\n\treturn array.reduce((acc, v) => {\n\t\tif (!acc.some((x) => fn(v, x, array))) acc.push(v);\n\t\treturn acc;\n\t}, []);\n}\n/**\n* reactive unique array\n* @see https://vueuse.org/useArrayUnique\n* @param list - the array was called upon.\n* @param compareFn\n* @returns A computed ref that returns a unique array of items.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useArrayUnique(list, compareFn) {\n\treturn computed(() => {\n\t\tconst resolvedList = toValue(list).map((element) => toValue(element));\n\t\treturn compareFn ? uniqueElementsBy(resolvedList, compareFn) : uniq(resolvedList);\n\t});\n}\n\n//#endregion\n//#region useCounter/index.ts\n/**\n* Basic counter with utility functions.\n*\n* @see https://vueuse.org/useCounter\n* @param [initialValue]\n* @param options\n*/\nfunction useCounter(initialValue = 0, options = {}) {\n\tlet _initialValue = unref(initialValue);\n\tconst count = shallowRef(initialValue);\n\tconst { max = Number.POSITIVE_INFINITY, min = Number.NEGATIVE_INFINITY } = options;\n\tconst inc = (delta = 1) => count.value = Math.max(Math.min(max, count.value + delta), min);\n\tconst dec = (delta = 1) => count.value = Math.min(Math.max(min, count.value - delta), max);\n\tconst get$1 = () => count.value;\n\tconst set$1 = (val) => count.value = Math.max(min, Math.min(max, val));\n\tconst reset = (val = _initialValue) => {\n\t\t_initialValue = val;\n\t\treturn set$1(val);\n\t};\n\treturn {\n\t\tcount: shallowReadonly(count),\n\t\tinc,\n\t\tdec,\n\t\tget: get$1,\n\t\tset: set$1,\n\t\treset\n\t};\n}\n\n//#endregion\n//#region useDateFormat/index.ts\nconst REGEX_PARSE = /^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[T\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/i;\nconst REGEX_FORMAT = /[YMDHhms]o|\\[([^\\]]+)\\]|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}|z{1,4}|SSS/g;\nfunction defaultMeridiem(hours, minutes, isLowercase, hasPeriod) {\n\tlet m = hours < 12 ? \"AM\" : \"PM\";\n\tif (hasPeriod) m = m.split(\"\").reduce((acc, curr) => acc += `${curr}.`, \"\");\n\treturn isLowercase ? m.toLowerCase() : m;\n}\nfunction formatOrdinal(num) {\n\tconst suffixes = [\n\t\t\"th\",\n\t\t\"st\",\n\t\t\"nd\",\n\t\t\"rd\"\n\t];\n\tconst v = num % 100;\n\treturn num + (suffixes[(v - 20) % 10] || suffixes[v] || suffixes[0]);\n}\nfunction formatDate(date, formatStr, options = {}) {\n\tvar _options$customMeridi;\n\tconst years = date.getFullYear();\n\tconst month = date.getMonth();\n\tconst days = date.getDate();\n\tconst hours = date.getHours();\n\tconst minutes = date.getMinutes();\n\tconst seconds = date.getSeconds();\n\tconst milliseconds = date.getMilliseconds();\n\tconst day = date.getDay();\n\tconst meridiem = (_options$customMeridi = options.customMeridiem) !== null && _options$customMeridi !== void 0 ? _options$customMeridi : defaultMeridiem;\n\tconst stripTimeZone = (dateString) => {\n\t\tvar _dateString$split$;\n\t\treturn (_dateString$split$ = dateString.split(\" \")[1]) !== null && _dateString$split$ !== void 0 ? _dateString$split$ : \"\";\n\t};\n\tconst matches = {\n\t\tYo: () => formatOrdinal(years),\n\t\tYY: () => String(years).slice(-2),\n\t\tYYYY: () => years,\n\t\tM: () => month + 1,\n\t\tMo: () => formatOrdinal(month + 1),\n\t\tMM: () => `${month + 1}`.padStart(2, \"0\"),\n\t\tMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"short\" }),\n\t\tMMMM: () => date.toLocaleDateString(toValue(options.locales), { month: \"long\" }),\n\t\tD: () => String(days),\n\t\tDo: () => formatOrdinal(days),\n\t\tDD: () => `${days}`.padStart(2, \"0\"),\n\t\tH: () => String(hours),\n\t\tHo: () => formatOrdinal(hours),\n\t\tHH: () => `${hours}`.padStart(2, \"0\"),\n\t\th: () => `${hours % 12 || 12}`.padStart(1, \"0\"),\n\t\tho: () => formatOrdinal(hours % 12 || 12),\n\t\thh: () => `${hours % 12 || 12}`.padStart(2, \"0\"),\n\t\tm: () => String(minutes),\n\t\tmo: () => formatOrdinal(minutes),\n\t\tmm: () => `${minutes}`.padStart(2, \"0\"),\n\t\ts: () => String(seconds),\n\t\tso: () => formatOrdinal(seconds),\n\t\tss: () => `${seconds}`.padStart(2, \"0\"),\n\t\tSSS: () => `${milliseconds}`.padStart(3, \"0\"),\n\t\td: () => day,\n\t\tdd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"narrow\" }),\n\t\tddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"short\" }),\n\t\tdddd: () => date.toLocaleDateString(toValue(options.locales), { weekday: \"long\" }),\n\t\tA: () => meridiem(hours, minutes),\n\t\tAA: () => meridiem(hours, minutes, false, true),\n\t\ta: () => meridiem(hours, minutes, true),\n\t\taa: () => meridiem(hours, minutes, true, true),\n\t\tz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"shortOffset\" })),\n\t\tzzzz: () => stripTimeZone(date.toLocaleDateString(toValue(options.locales), { timeZoneName: \"longOffset\" }))\n\t};\n\treturn formatStr.replace(REGEX_FORMAT, (match, $1) => {\n\t\tvar _ref, _matches$match;\n\t\treturn (_ref = $1 !== null && $1 !== void 0 ? $1 : (_matches$match = matches[match]) === null || _matches$match === void 0 ? void 0 : _matches$match.call(matches)) !== null && _ref !== void 0 ? _ref : match;\n\t});\n}\nfunction normalizeDate(date) {\n\tif (date === null) return /* @__PURE__ */ new Date(NaN);\n\tif (date === void 0) return /* @__PURE__ */ new Date();\n\tif (date instanceof Date) return new Date(date);\n\tif (typeof date === \"string\" && !/Z$/i.test(date)) {\n\t\tconst d = date.match(REGEX_PARSE);\n\t\tif (d) {\n\t\t\tconst m = d[2] - 1 || 0;\n\t\t\tconst ms = (d[7] || \"0\").substring(0, 3);\n\t\t\treturn new Date(d[1], m, d[3] || 1, d[4] || 0, d[5] || 0, d[6] || 0, ms);\n\t\t}\n\t}\n\treturn new Date(date);\n}\n/**\n* Get the formatted date according to the string of tokens passed in.\n*\n* @see https://vueuse.org/useDateFormat\n* @param date - The date to format, can either be a `Date` object, a timestamp, or a string\n* @param formatStr - The combination of tokens to format the date\n* @param options - UseDateFormatOptions\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDateFormat(date, formatStr = \"HH:mm:ss\", options = {}) {\n\treturn computed(() => formatDate(normalizeDate(toValue(date)), toValue(formatStr), options));\n}\n\n//#endregion\n//#region useIntervalFn/index.ts\n/**\n* Wrapper for `setInterval` with controls\n*\n* @see https://vueuse.org/useIntervalFn\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useIntervalFn(cb, interval = 1e3, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tlet timer = null;\n\tconst isActive = shallowRef(false);\n\tfunction clean() {\n\t\tif (timer) {\n\t\t\tclearInterval(timer);\n\t\t\ttimer = null;\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tclean();\n\t}\n\tfunction resume() {\n\t\tconst intervalValue = toValue(interval);\n\t\tif (intervalValue <= 0) return;\n\t\tisActive.value = true;\n\t\tif (immediateCallback) cb();\n\t\tclean();\n\t\tif (isActive.value) timer = setInterval(cb, intervalValue);\n\t}\n\tif (immediate && isClient) resume();\n\tif (isRef(interval) || typeof interval === \"function\") tryOnScopeDispose(watch(interval, () => {\n\t\tif (isActive.value && isClient) resume();\n\t}));\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: shallowReadonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n\n//#endregion\n//#region useInterval/index.ts\nfunction useInterval(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, immediate = true, callback } = options;\n\tconst counter = shallowRef(0);\n\tconst update = () => counter.value += 1;\n\tconst reset = () => {\n\t\tcounter.value = 0;\n\t};\n\tconst controls = useIntervalFn(callback ? () => {\n\t\tupdate();\n\t\tcallback(counter.value);\n\t} : update, interval, { immediate });\n\tif (exposeControls) return {\n\t\tcounter: shallowReadonly(counter),\n\t\treset,\n\t\t...controls\n\t};\n\telse return shallowReadonly(counter);\n}\n\n//#endregion\n//#region useLastChanged/index.ts\nfunction useLastChanged(source, options = {}) {\n\tvar _options$initialValue;\n\tconst ms = shallowRef((_options$initialValue = options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : null);\n\twatch(source, () => ms.value = timestamp(), options);\n\treturn shallowReadonly(ms);\n}\n\n//#endregion\n//#region useTimeoutFn/index.ts\n/**\n* Wrapper for `setTimeout` with controls.\n*\n* @param cb\n* @param interval\n* @param options\n*/\nfunction useTimeoutFn(cb, interval, options = {}) {\n\tconst { immediate = true, immediateCallback = false } = options;\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tfunction clear() {\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t}\n\tfunction stop() {\n\t\tisPending.value = false;\n\t\tclear();\n\t}\n\tfunction start(...args) {\n\t\tif (immediateCallback) cb();\n\t\tclear();\n\t\tisPending.value = true;\n\t\ttimer = setTimeout(() => {\n\t\t\tisPending.value = false;\n\t\t\ttimer = void 0;\n\t\t\tcb(...args);\n\t\t}, toValue(interval));\n\t}\n\tif (immediate) {\n\t\tisPending.value = true;\n\t\tif (isClient) start();\n\t}\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisPending: shallowReadonly(isPending),\n\t\tstart,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useTimeout/index.ts\nfunction useTimeout(interval = 1e3, options = {}) {\n\tconst { controls: exposeControls = false, callback } = options;\n\tconst controls = useTimeoutFn(callback !== null && callback !== void 0 ? callback : noop, interval, options);\n\tconst ready = computed(() => !controls.isPending.value);\n\tif (exposeControls) return {\n\t\tready,\n\t\t...controls\n\t};\n\telse return ready;\n}\n\n//#endregion\n//#region useToNumber/index.ts\n/**\n* Reactively convert a string ref to number.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToNumber(value, options = {}) {\n\tconst { method = \"parseFloat\", radix, nanToZero } = options;\n\treturn computed(() => {\n\t\tlet resolved = toValue(value);\n\t\tif (typeof method === \"function\") resolved = method(resolved);\n\t\telse if (typeof resolved === \"string\") resolved = Number[method](resolved, radix);\n\t\tif (nanToZero && Number.isNaN(resolved)) resolved = 0;\n\t\treturn resolved;\n\t});\n}\n\n//#endregion\n//#region useToString/index.ts\n/**\n* Reactively convert a ref to string.\n*\n* @see https://vueuse.org/useToString\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToString(value) {\n\treturn computed(() => `${toValue(value)}`);\n}\n\n//#endregion\n//#region useToggle/index.ts\n/**\n* A boolean ref with a toggler\n*\n* @see https://vueuse.org/useToggle\n* @param [initialValue]\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useToggle(initialValue = false, options = {}) {\n\tconst { truthyValue = true, falsyValue = false } = options;\n\tconst valueIsRef = isRef(initialValue);\n\tconst _value = shallowRef(initialValue);\n\tfunction toggle(value) {\n\t\tif (arguments.length) {\n\t\t\t_value.value = value;\n\t\t\treturn _value.value;\n\t\t} else {\n\t\t\tconst truthy = toValue(truthyValue);\n\t\t\t_value.value = _value.value === truthy ? toValue(falsyValue) : truthy;\n\t\t\treturn _value.value;\n\t\t}\n\t}\n\tif (valueIsRef) return toggle;\n\telse return [_value, toggle];\n}\n\n//#endregion\n//#region watchArray/index.ts\n/**\n* Watch for an array with additions and removals.\n*\n* @see https://vueuse.org/watchArray\n*/\nfunction watchArray(source, cb, options) {\n\tlet oldList = (options === null || options === void 0 ? void 0 : options.immediate) ? [] : [...typeof source === \"function\" ? source() : Array.isArray(source) ? source : toValue(source)];\n\treturn watch(source, (newList, _, onCleanup) => {\n\t\tconst oldListRemains = Array.from({ length: oldList.length });\n\t\tconst added = [];\n\t\tfor (const obj of newList) {\n\t\t\tlet found = false;\n\t\t\tfor (let i = 0; i < oldList.length; i++) if (!oldListRemains[i] && obj === oldList[i]) {\n\t\t\t\toldListRemains[i] = true;\n\t\t\t\tfound = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (!found) added.push(obj);\n\t\t}\n\t\tconst removed = oldList.filter((_$1, i) => !oldListRemains[i]);\n\t\tcb(newList, oldList, added, removed, onCleanup);\n\t\toldList = [...newList];\n\t}, options);\n}\n\n//#endregion\n//#region watchAtMost/index.ts\nfunction watchAtMost(source, cb, options) {\n\tconst { count,...watchOptions } = options;\n\tconst current = shallowRef(0);\n\tconst { stop, resume, pause } = watchWithFilter(source, (...args) => {\n\t\tcurrent.value += 1;\n\t\tif (current.value >= toValue(count)) nextTick(() => stop());\n\t\tcb(...args);\n\t}, watchOptions);\n\treturn {\n\t\tcount: current,\n\t\tstop,\n\t\tresume,\n\t\tpause\n\t};\n}\n\n//#endregion\n//#region watchDebounced/index.ts\nfunction watchDebounced(source, cb, options = {}) {\n\tconst { debounce = 0, maxWait = void 0,...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: debounceFilter(debounce, { maxWait })\n\t});\n}\n/** @deprecated use `watchDebounced` instead */\nconst debouncedWatch = watchDebounced;\n\n//#endregion\n//#region watchDeep/index.ts\n/**\n* Shorthand for watching value with {deep: true}\n*\n* @see https://vueuse.org/watchDeep\n*/\nfunction watchDeep(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tdeep: true\n\t});\n}\n\n//#endregion\n//#region watchIgnorable/index.ts\nfunction watchIgnorable(source, cb, options = {}) {\n\tconst { eventFilter = bypassFilter,...watchOptions } = options;\n\tconst filteredCb = createFilterWrapper(eventFilter, cb);\n\tlet ignoreUpdates;\n\tlet ignorePrevAsyncUpdates;\n\tlet stop;\n\tif (watchOptions.flush === \"sync\") {\n\t\tlet ignore = false;\n\t\tignorePrevAsyncUpdates = () => {};\n\t\tignoreUpdates = (updater) => {\n\t\t\tignore = true;\n\t\t\tupdater();\n\t\t\tignore = false;\n\t\t};\n\t\tstop = watch(source, (...args) => {\n\t\t\tif (!ignore) filteredCb(...args);\n\t\t}, watchOptions);\n\t} else {\n\t\tconst disposables = [];\n\t\tlet ignoreCounter = 0;\n\t\tlet syncCounter = 0;\n\t\tignorePrevAsyncUpdates = () => {\n\t\t\tignoreCounter = syncCounter;\n\t\t};\n\t\tdisposables.push(watch(source, () => {\n\t\t\tsyncCounter++;\n\t\t}, {\n\t\t\t...watchOptions,\n\t\t\tflush: \"sync\"\n\t\t}));\n\t\tignoreUpdates = (updater) => {\n\t\t\tconst syncCounterPrev = syncCounter;\n\t\t\tupdater();\n\t\t\tignoreCounter += syncCounter - syncCounterPrev;\n\t\t};\n\t\tdisposables.push(watch(source, (...args) => {\n\t\t\tconst ignore = ignoreCounter > 0 && ignoreCounter === syncCounter;\n\t\t\tignoreCounter = 0;\n\t\t\tsyncCounter = 0;\n\t\t\tif (ignore) return;\n\t\t\tfilteredCb(...args);\n\t\t}, watchOptions));\n\t\tstop = () => {\n\t\t\tdisposables.forEach((fn) => fn());\n\t\t};\n\t}\n\treturn {\n\t\tstop,\n\t\tignoreUpdates,\n\t\tignorePrevAsyncUpdates\n\t};\n}\n/** @deprecated use `watchIgnorable` instead */\nconst ignorableWatch = watchIgnorable;\n\n//#endregion\n//#region watchImmediate/index.ts\n/**\n* Shorthand for watching value with {immediate: true}\n*\n* @see https://vueuse.org/watchImmediate\n*/\nfunction watchImmediate(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\timmediate: true\n\t});\n}\n\n//#endregion\n//#region watchOnce/index.ts\n/**\n* Shorthand for watching value with { once: true }\n*\n* @see https://vueuse.org/watchOnce\n*/\nfunction watchOnce(source, cb, options) {\n\treturn watch(source, cb, {\n\t\t...options,\n\t\tonce: true\n\t});\n}\n\n//#endregion\n//#region watchThrottled/index.ts\nfunction watchThrottled(source, cb, options = {}) {\n\tconst { throttle = 0, trailing = true, leading = true,...watchOptions } = options;\n\treturn watchWithFilter(source, cb, {\n\t\t...watchOptions,\n\t\teventFilter: throttleFilter(throttle, trailing, leading)\n\t});\n}\n/** @deprecated use `watchThrottled` instead */\nconst throttledWatch = watchThrottled;\n\n//#endregion\n//#region watchTriggerable/index.ts\nfunction watchTriggerable(source, cb, options = {}) {\n\tlet cleanupFn;\n\tfunction onEffect() {\n\t\tif (!cleanupFn) return;\n\t\tconst fn = cleanupFn;\n\t\tcleanupFn = void 0;\n\t\tfn();\n\t}\n\t/** Register the function `cleanupFn` */\n\tfunction onCleanup(callback) {\n\t\tcleanupFn = callback;\n\t}\n\tconst _cb = (value, oldValue) => {\n\t\tonEffect();\n\t\treturn cb(value, oldValue, onCleanup);\n\t};\n\tconst res = watchIgnorable(source, _cb, options);\n\tconst { ignoreUpdates } = res;\n\tconst trigger = () => {\n\t\tlet res$1;\n\t\tignoreUpdates(() => {\n\t\t\tres$1 = _cb(getWatchSources(source), getOldValue(source));\n\t\t});\n\t\treturn res$1;\n\t};\n\treturn {\n\t\t...res,\n\t\ttrigger\n\t};\n}\nfunction getWatchSources(sources) {\n\tif (isReactive(sources)) return sources;\n\tif (Array.isArray(sources)) return sources.map((item) => toValue(item));\n\treturn toValue(sources);\n}\nfunction getOldValue(source) {\n\treturn Array.isArray(source) ? source.map(() => void 0) : void 0;\n}\n\n//#endregion\n//#region whenever/index.ts\n/**\n* Shorthand for watching value to be truthy\n*\n* @see https://vueuse.org/whenever\n*/\nfunction whenever(source, cb, options) {\n\tconst stop = watch(source, (v, ov, onInvalidate) => {\n\t\tif (v) {\n\t\t\tif (options === null || options === void 0 ? void 0 : options.once) nextTick(() => stop());\n\t\t\tcb(v, ov, onInvalidate);\n\t\t}\n\t}, {\n\t\t...options,\n\t\tonce: false\n\t});\n\treturn stop;\n}\n\n//#endregion\nexport { assert, autoResetRef, bypassFilter, camelize, clamp, computedEager, computedWithControl, containsProp, controlledComputed, controlledRef, createEventHook, createFilterWrapper, createGlobalState, createInjectionState, createReactiveFn, createRef, createSharedComposable, createSingletonPromise, debounceFilter, debouncedRef, debouncedWatch, eagerComputed, extendRef, formatDate, get, getLifeCycleTarget, hasOwn, hyphenate, identity, ignorableWatch, increaseWithUnit, injectLocal, invoke, isClient, isDef, isDefined, isIOS, isObject, isWorker, makeDestructurable, noop, normalizeDate, notNullish, now, objectEntries, objectOmit, objectPick, pausableFilter, pausableWatch, promiseTimeout, provideLocal, pxValue, rand, reactify, reactifyObject, reactiveComputed, reactiveOmit, reactivePick, refAutoReset, refDebounced, refDefault, refManualReset, refThrottled, refWithControl, set, syncRef, syncRefs, throttleFilter, throttledRef, throttledWatch, timestamp, toArray, toReactive, toRef, toRefs, tryOnBeforeMount, tryOnBeforeUnmount, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useArrayDifference, useArrayEvery, useArrayFilter, useArrayFind, useArrayFindIndex, useArrayFindLast, useArrayIncludes, useArrayJoin, useArrayMap, useArrayReduce, useArraySome, useArrayUnique, useCounter, useDateFormat, useDebounce, useDebounceFn, useInterval, useIntervalFn, useLastChanged, useThrottle, useThrottleFn, useTimeout, useTimeoutFn, useToNumber, useToString, useToggle, watchArray, watchAtMost, watchDebounced, watchDeep, watchIgnorable, watchImmediate, watchOnce, watchPausable, watchThrottled, watchTriggerable, watchWithFilter, whenever };", "import { bypassFilter, camelize, clamp, computedWithControl, containsProp, createEventHook, createFilterWrapper, createRef, createSingletonPromise, debounceFilter, hasOwn, identity, increaseWithUnit, injectLocal, isClient, isDef, isIOS, isObject, isWorker, makeDestructurable, noop, notNullish, objectEntries, objectOmit, objectPick, pausableFilter, pausableWatch, promiseTimeout, provideLocal, pxValue, syncRef, throttleFilter, timestamp, toArray, toRef, toRefs, tryOnMounted, tryOnScopeDispose, tryOnUnmounted, until, useDebounceFn, useIntervalFn, useThrottleFn, useTimeoutFn, watchIgnorable, watchImmediate, watchOnce, watchWithFilter, whenever } from \"@vueuse/shared\";\nimport { Fragment, TransitionGroup, computed, customRef, defineComponent, getCurrentInstance, getCurrentScope, h, hasInjectionContext, inject, isReadonly, isRef, markRaw, nextTick, onBeforeUpdate, onMounted, onUpdated, reactive, readonly, ref, shallowReactive, shallowReadonly, shallowRef, toRaw, toValue, unref, watch, watchEffect } from \"vue\";\n\nexport * from \"@vueuse/shared\"\n\n//#region computedAsync/index.ts\nfunction computedAsync(evaluationCallback, initialState, optionsOrRef) {\n\tvar _globalThis$reportErr;\n\tlet options;\n\tif (isRef(optionsOrRef)) options = { evaluating: optionsOrRef };\n\telse options = optionsOrRef || {};\n\tconst { lazy = false, flush = \"sync\", evaluating = void 0, shallow = true, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop } = options;\n\tconst started = shallowRef(!lazy);\n\tconst current = shallow ? shallowRef(initialState) : ref(initialState);\n\tlet counter = 0;\n\twatchEffect(async (onInvalidate) => {\n\t\tif (!started.value) return;\n\t\tcounter++;\n\t\tconst counterAtBeginning = counter;\n\t\tlet hasFinished = false;\n\t\tif (evaluating) Promise.resolve().then(() => {\n\t\t\tevaluating.value = true;\n\t\t});\n\t\ttry {\n\t\t\tconst result = await evaluationCallback((cancelCallback) => {\n\t\t\t\tonInvalidate(() => {\n\t\t\t\t\tif (evaluating) evaluating.value = false;\n\t\t\t\t\tif (!hasFinished) cancelCallback();\n\t\t\t\t});\n\t\t\t});\n\t\t\tif (counterAtBeginning === counter) current.value = result;\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (evaluating && counterAtBeginning === counter) evaluating.value = false;\n\t\t\thasFinished = true;\n\t\t}\n\t}, { flush });\n\tif (lazy) return computed(() => {\n\t\tstarted.value = true;\n\t\treturn current.value;\n\t});\n\telse return current;\n}\n/** @deprecated use `computedAsync` instead */\nconst asyncComputed = computedAsync;\n\n//#endregion\n//#region computedInject/index.ts\nfunction computedInject(key, options, defaultSource, treatDefaultAsFactory) {\n\tlet source = inject(key);\n\tif (defaultSource) source = inject(key, defaultSource);\n\tif (treatDefaultAsFactory) source = inject(key, defaultSource, treatDefaultAsFactory);\n\tif (typeof options === \"function\") return computed((oldValue) => options(source, oldValue));\n\telse return computed({\n\t\tget: (oldValue) => options.get(source, oldValue),\n\t\tset: options.set\n\t});\n}\n\n//#endregion\n//#region createReusableTemplate/index.ts\n/**\n* This function creates `define` and `reuse` components in pair,\n* It also allow to pass a generic to bind with type.\n*\n* @see https://vueuse.org/createReusableTemplate\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createReusableTemplate(options = {}) {\n\tconst { inheritAttrs = true } = options;\n\tconst render = shallowRef();\n\tconst define = defineComponent({ setup(_, { slots }) {\n\t\treturn () => {\n\t\t\trender.value = slots.default;\n\t\t};\n\t} });\n\tconst reuse = defineComponent({\n\t\tinheritAttrs,\n\t\tprops: options.props,\n\t\tsetup(props, { attrs, slots }) {\n\t\t\treturn () => {\n\t\t\t\tvar _render$value;\n\t\t\t\tif (!render.value && true) throw new Error(\"[VueUse] Failed to find the definition of reusable template\");\n\t\t\t\tconst vnode = (_render$value = render.value) === null || _render$value === void 0 ? void 0 : _render$value.call(render, {\n\t\t\t\t\t...options.props == null ? keysToCamelKebabCase(attrs) : props,\n\t\t\t\t\t$slots: slots\n\t\t\t\t});\n\t\t\t\treturn inheritAttrs && (vnode === null || vnode === void 0 ? void 0 : vnode.length) === 1 ? vnode[0] : vnode;\n\t\t\t};\n\t\t}\n\t});\n\treturn makeDestructurable({\n\t\tdefine,\n\t\treuse\n\t}, [define, reuse]);\n}\nfunction keysToCamelKebabCase(obj) {\n\tconst newObj = {};\n\tfor (const key in obj) newObj[camelize(key)] = obj[key];\n\treturn newObj;\n}\n\n//#endregion\n//#region createTemplatePromise/index.ts\n/**\n* Creates a template promise component.\n*\n* @see https://vueuse.org/createTemplatePromise\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createTemplatePromise(options = {}) {\n\tlet index = 0;\n\tconst instances = ref([]);\n\tfunction create(...args) {\n\t\tconst props = shallowReactive({\n\t\t\tkey: index++,\n\t\t\targs,\n\t\t\tpromise: void 0,\n\t\t\tresolve: () => {},\n\t\t\treject: () => {},\n\t\t\tisResolving: false,\n\t\t\toptions\n\t\t});\n\t\tinstances.value.push(props);\n\t\tprops.promise = new Promise((_resolve, _reject) => {\n\t\t\tprops.resolve = (v) => {\n\t\t\t\tprops.isResolving = true;\n\t\t\t\treturn _resolve(v);\n\t\t\t};\n\t\t\tprops.reject = _reject;\n\t\t}).finally(() => {\n\t\t\tprops.promise = void 0;\n\t\t\tconst index$1 = instances.value.indexOf(props);\n\t\t\tif (index$1 !== -1) instances.value.splice(index$1, 1);\n\t\t});\n\t\treturn props.promise;\n\t}\n\tfunction start(...args) {\n\t\tif (options.singleton && instances.value.length > 0) return instances.value[0].promise;\n\t\treturn create(...args);\n\t}\n\tconst component = defineComponent((_, { slots }) => {\n\t\tconst renderList = () => instances.value.map((props) => {\n\t\t\tvar _slots$default;\n\t\t\treturn h(Fragment, { key: props.key }, (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots, props));\n\t\t});\n\t\tif (options.transition) return () => h(TransitionGroup, options.transition, renderList);\n\t\treturn renderList;\n\t});\n\tcomponent.start = start;\n\treturn component;\n}\n\n//#endregion\n//#region createUnrefFn/index.ts\n/**\n* Make a plain function accepting ref and raw values as arguments.\n* Returns the same value the unconverted function returns, with proper typing.\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction createUnrefFn(fn) {\n\treturn function(...args) {\n\t\treturn fn.apply(this, args.map((i) => toValue(i)));\n\t};\n}\n\n//#endregion\n//#region _configurable.ts\nconst defaultWindow = isClient ? window : void 0;\nconst defaultDocument = isClient ? window.document : void 0;\nconst defaultNavigator = isClient ? window.navigator : void 0;\nconst defaultLocation = isClient ? window.location : void 0;\n\n//#endregion\n//#region unrefElement/index.ts\n/**\n* Get the dom element of a ref of element or Vue component instance\n*\n* @param elRef\n*/\nfunction unrefElement(elRef) {\n\tvar _$el;\n\tconst plain = toValue(elRef);\n\treturn (_$el = plain === null || plain === void 0 ? void 0 : plain.$el) !== null && _$el !== void 0 ? _$el : plain;\n}\n\n//#endregion\n//#region useEventListener/index.ts\nfunction useEventListener(...args) {\n\tconst cleanups = [];\n\tconst cleanup = () => {\n\t\tcleanups.forEach((fn) => fn());\n\t\tcleanups.length = 0;\n\t};\n\tconst register = (el, event, listener, options) => {\n\t\tel.addEventListener(event, listener, options);\n\t\treturn () => el.removeEventListener(event, listener, options);\n\t};\n\tconst firstParamTargets = computed(() => {\n\t\tconst test = toArray(toValue(args[0])).filter((e) => e != null);\n\t\treturn test.every((e) => typeof e !== \"string\") ? test : void 0;\n\t});\n\tconst stopWatch = watchImmediate(() => {\n\t\tvar _firstParamTargets$va, _firstParamTargets$va2;\n\t\treturn [\n\t\t\t(_firstParamTargets$va = (_firstParamTargets$va2 = firstParamTargets.value) === null || _firstParamTargets$va2 === void 0 ? void 0 : _firstParamTargets$va2.map((e) => unrefElement(e))) !== null && _firstParamTargets$va !== void 0 ? _firstParamTargets$va : [defaultWindow].filter((e) => e != null),\n\t\t\ttoArray(toValue(firstParamTargets.value ? args[1] : args[0])),\n\t\t\ttoArray(unref(firstParamTargets.value ? args[2] : args[1])),\n\t\t\ttoValue(firstParamTargets.value ? args[3] : args[2])\n\t\t];\n\t}, ([raw_targets, raw_events, raw_listeners, raw_options]) => {\n\t\tcleanup();\n\t\tif (!(raw_targets === null || raw_targets === void 0 ? void 0 : raw_targets.length) || !(raw_events === null || raw_events === void 0 ? void 0 : raw_events.length) || !(raw_listeners === null || raw_listeners === void 0 ? void 0 : raw_listeners.length)) return;\n\t\tconst optionsClone = isObject(raw_options) ? { ...raw_options } : raw_options;\n\t\tcleanups.push(...raw_targets.flatMap((el) => raw_events.flatMap((event) => raw_listeners.map((listener) => register(el, event, listener, optionsClone)))));\n\t}, { flush: \"post\" });\n\tconst stop = () => {\n\t\tstopWatch();\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(cleanup);\n\treturn stop;\n}\n\n//#endregion\n//#region onClickOutside/index.ts\nlet _iOSWorkaround = false;\nfunction onClickOutside(target, handler, options = {}) {\n\tconst { window: window$1 = defaultWindow, ignore = [], capture = true, detectIframe = false, controls = false } = options;\n\tif (!window$1) return controls ? {\n\t\tstop: noop,\n\t\tcancel: noop,\n\t\ttrigger: noop\n\t} : noop;\n\tif (isIOS && !_iOSWorkaround) {\n\t\t_iOSWorkaround = true;\n\t\tconst listenerOptions = { passive: true };\n\t\tArray.from(window$1.document.body.children).forEach((el) => el.addEventListener(\"click\", noop, listenerOptions));\n\t\twindow$1.document.documentElement.addEventListener(\"click\", noop, listenerOptions);\n\t}\n\tlet shouldListen = true;\n\tconst shouldIgnore = (event) => {\n\t\treturn toValue(ignore).some((target$1) => {\n\t\t\tif (typeof target$1 === \"string\") return Array.from(window$1.document.querySelectorAll(target$1)).some((el) => el === event.target || event.composedPath().includes(el));\n\t\t\telse {\n\t\t\t\tconst el = unrefElement(target$1);\n\t\t\t\treturn el && (event.target === el || event.composedPath().includes(el));\n\t\t\t}\n\t\t});\n\t};\n\t/**\n\t* Determines if the given target has multiple root elements.\n\t* Referenced from: https://github.com/vuejs/test-utils/blob/ccb460be55f9f6be05ab708500a41ec8adf6f4bc/src/vue-wrapper.ts#L21\n\t*/\n\tfunction hasMultipleRoots(target$1) {\n\t\tconst vm = toValue(target$1);\n\t\treturn vm && vm.$.subTree.shapeFlag === 16;\n\t}\n\tfunction checkMultipleRoots(target$1, event) {\n\t\tconst vm = toValue(target$1);\n\t\tconst children = vm.$.subTree && vm.$.subTree.children;\n\t\tif (children == null || !Array.isArray(children)) return false;\n\t\treturn children.some((child) => child.el === event.target || event.composedPath().includes(child.el));\n\t}\n\tconst listener = (event) => {\n\t\tconst el = unrefElement(target);\n\t\tif (event.target == null) return;\n\t\tif (!(el instanceof Element) && hasMultipleRoots(target) && checkMultipleRoots(target, event)) return;\n\t\tif (!el || el === event.target || event.composedPath().includes(el)) return;\n\t\tif (\"detail\" in event && event.detail === 0) shouldListen = !shouldIgnore(event);\n\t\tif (!shouldListen) {\n\t\t\tshouldListen = true;\n\t\t\treturn;\n\t\t}\n\t\thandler(event);\n\t};\n\tlet isProcessingClick = false;\n\tconst cleanup = [\n\t\tuseEventListener(window$1, \"click\", (event) => {\n\t\t\tif (!isProcessingClick) {\n\t\t\t\tisProcessingClick = true;\n\t\t\t\tsetTimeout(() => {\n\t\t\t\t\tisProcessingClick = false;\n\t\t\t\t}, 0);\n\t\t\t\tlistener(event);\n\t\t\t}\n\t\t}, {\n\t\t\tpassive: true,\n\t\t\tcapture\n\t\t}),\n\t\tuseEventListener(window$1, \"pointerdown\", (e) => {\n\t\t\tconst el = unrefElement(target);\n\t\t\tshouldListen = !shouldIgnore(e) && !!(el && !e.composedPath().includes(el));\n\t\t}, { passive: true }),\n\t\tdetectIframe && useEventListener(window$1, \"blur\", (event) => {\n\t\t\tsetTimeout(() => {\n\t\t\t\tvar _window$document$acti;\n\t\t\t\tconst el = unrefElement(target);\n\t\t\t\tif (((_window$document$acti = window$1.document.activeElement) === null || _window$document$acti === void 0 ? void 0 : _window$document$acti.tagName) === \"IFRAME\" && !(el === null || el === void 0 ? void 0 : el.contains(window$1.document.activeElement))) handler(event);\n\t\t\t}, 0);\n\t\t}, { passive: true })\n\t].filter(Boolean);\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\tif (controls) return {\n\t\tstop,\n\t\tcancel: () => {\n\t\t\tshouldListen = false;\n\t\t},\n\t\ttrigger: (event) => {\n\t\t\tshouldListen = true;\n\t\t\tlistener(event);\n\t\t\tshouldListen = false;\n\t\t}\n\t};\n\treturn stop;\n}\n\n//#endregion\n//#region useMounted/index.ts\n/**\n* Mounted state in ref.\n*\n* @see https://vueuse.org/useMounted\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMounted() {\n\tconst isMounted = shallowRef(false);\n\tconst instance = getCurrentInstance();\n\tif (instance) onMounted(() => {\n\t\tisMounted.value = true;\n\t}, instance);\n\treturn isMounted;\n}\n\n//#endregion\n//#region useSupported/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSupported(callback) {\n\tconst isMounted = useMounted();\n\treturn computed(() => {\n\t\tisMounted.value;\n\t\treturn Boolean(callback());\n\t});\n}\n\n//#endregion\n//#region useMutationObserver/index.ts\n/**\n* Watch for changes being made to the DOM tree.\n*\n* @see https://vueuse.org/useMutationObserver\n* @see https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver MutationObserver MDN\n* @param target\n* @param callback\n* @param options\n*/\nfunction useMutationObserver(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow,...mutationOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"MutationObserver\" in window$1);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst items = toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t\treturn new Set(items);\n\t}), (newTargets) => {\n\t\tcleanup();\n\t\tif (isSupported.value && newTargets.size) {\n\t\t\tobserver = new MutationObserver(callback);\n\t\t\tnewTargets.forEach((el) => observer.observe(el, mutationOptions));\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst takeRecords = () => {\n\t\treturn observer === null || observer === void 0 ? void 0 : observer.takeRecords();\n\t};\n\tconst stop = () => {\n\t\tstopWatch();\n\t\tcleanup();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop,\n\t\ttakeRecords\n\t};\n}\n\n//#endregion\n//#region onElementRemoval/index.ts\n/**\n* Fires when the element or any element containing it is removed.\n*\n* @param target\n* @param callback\n* @param options\n*/\nfunction onElementRemoval(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow, document: document$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.document, flush = \"sync\" } = options;\n\tif (!window$1 || !document$1) return noop;\n\tlet stopFn;\n\tconst cleanupAndUpdate = (fn) => {\n\t\tstopFn === null || stopFn === void 0 || stopFn();\n\t\tstopFn = fn;\n\t};\n\tconst stopWatch = watchEffect(() => {\n\t\tconst el = unrefElement(target);\n\t\tif (el) {\n\t\t\tconst { stop } = useMutationObserver(document$1, (mutationsList) => {\n\t\t\t\tif (mutationsList.map((mutation) => [...mutation.removedNodes]).flat().some((node) => node === el || node.contains(el))) callback(mutationsList);\n\t\t\t}, {\n\t\t\t\twindow: window$1,\n\t\t\t\tchildList: true,\n\t\t\t\tsubtree: true\n\t\t\t});\n\t\t\tcleanupAndUpdate(stop);\n\t\t}\n\t}, { flush });\n\tconst stopHandle = () => {\n\t\tstopWatch();\n\t\tcleanupAndUpdate();\n\t};\n\ttryOnScopeDispose(stopHandle);\n\treturn stopHandle;\n}\n\n//#endregion\n//#region onKeyStroke/index.ts\nfunction createKeyPredicate(keyFilter) {\n\tif (typeof keyFilter === \"function\") return keyFilter;\n\telse if (typeof keyFilter === \"string\") return (event) => event.key === keyFilter;\n\telse if (Array.isArray(keyFilter)) return (event) => keyFilter.includes(event.key);\n\treturn () => true;\n}\nfunction onKeyStroke(...args) {\n\tlet key;\n\tlet handler;\n\tlet options = {};\n\tif (args.length === 3) {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t\toptions = args[2];\n\t} else if (args.length === 2) if (typeof args[1] === \"object\") {\n\t\tkey = true;\n\t\thandler = args[0];\n\t\toptions = args[1];\n\t} else {\n\t\tkey = args[0];\n\t\thandler = args[1];\n\t}\n\telse {\n\t\tkey = true;\n\t\thandler = args[0];\n\t}\n\tconst { target = defaultWindow, eventName = \"keydown\", passive = false, dedupe = false } = options;\n\tconst predicate = createKeyPredicate(key);\n\tconst listener = (e) => {\n\t\tif (e.repeat && toValue(dedupe)) return;\n\t\tif (predicate(e)) handler(e);\n\t};\n\treturn useEventListener(target, eventName, listener, passive);\n}\n/**\n* Listen to the keydown event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyDown(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keydown\"\n\t});\n}\n/**\n* Listen to the keypress event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyPressed(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keypress\"\n\t});\n}\n/**\n* Listen to the keyup event of the given key.\n*\n* @see https://vueuse.org/onKeyStroke\n* @param key\n* @param handler\n* @param options\n*/\nfunction onKeyUp(key, handler, options = {}) {\n\treturn onKeyStroke(key, handler, {\n\t\t...options,\n\t\teventName: \"keyup\"\n\t});\n}\n\n//#endregion\n//#region onLongPress/index.ts\nconst DEFAULT_DELAY = 500;\nconst DEFAULT_THRESHOLD = 10;\nfunction onLongPress(target, handler, options) {\n\tvar _options$modifiers10, _options$modifiers11;\n\tconst elementRef = computed(() => unrefElement(target));\n\tlet timeout;\n\tlet posStart;\n\tlet startTimestamp;\n\tlet hasLongPressed = false;\n\tfunction clear() {\n\t\tif (timeout) {\n\t\t\tclearTimeout(timeout);\n\t\t\ttimeout = void 0;\n\t\t}\n\t\tposStart = void 0;\n\t\tstartTimestamp = void 0;\n\t\thasLongPressed = false;\n\t}\n\tfunction getDelay(ev) {\n\t\tconst delay = options === null || options === void 0 ? void 0 : options.delay;\n\t\tif (typeof delay === \"function\") return delay(ev);\n\t\treturn delay !== null && delay !== void 0 ? delay : DEFAULT_DELAY;\n\t}\n\tfunction onRelease(ev) {\n\t\tvar _options$modifiers, _options$modifiers2, _options$modifiers3;\n\t\tconst [_startTimestamp, _posStart, _hasLongPressed] = [\n\t\t\tstartTimestamp,\n\t\t\tposStart,\n\t\t\thasLongPressed\n\t\t];\n\t\tclear();\n\t\tif (!(options === null || options === void 0 ? void 0 : options.onMouseUp) || !_posStart || !_startTimestamp) return;\n\t\tif ((options === null || options === void 0 || (_options$modifiers = options.modifiers) === null || _options$modifiers === void 0 ? void 0 : _options$modifiers.self) && ev.target !== elementRef.value) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers2 = options.modifiers) === null || _options$modifiers2 === void 0 ? void 0 : _options$modifiers2.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers3 = options.modifiers) === null || _options$modifiers3 === void 0 ? void 0 : _options$modifiers3.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - _posStart.x;\n\t\tconst dy = ev.y - _posStart.y;\n\t\tconst distance = Math.sqrt(dx * dx + dy * dy);\n\t\toptions.onMouseUp(ev.timeStamp - _startTimestamp, distance, _hasLongPressed);\n\t}\n\tfunction onDown(ev) {\n\t\tvar _options$modifiers4, _options$modifiers5, _options$modifiers6;\n\t\tif ((options === null || options === void 0 || (_options$modifiers4 = options.modifiers) === null || _options$modifiers4 === void 0 ? void 0 : _options$modifiers4.self) && ev.target !== elementRef.value) return;\n\t\tclear();\n\t\tif (options === null || options === void 0 || (_options$modifiers5 = options.modifiers) === null || _options$modifiers5 === void 0 ? void 0 : _options$modifiers5.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers6 = options.modifiers) === null || _options$modifiers6 === void 0 ? void 0 : _options$modifiers6.stop) ev.stopPropagation();\n\t\tposStart = {\n\t\t\tx: ev.x,\n\t\t\ty: ev.y\n\t\t};\n\t\tstartTimestamp = ev.timeStamp;\n\t\ttimeout = setTimeout(() => {\n\t\t\thasLongPressed = true;\n\t\t\thandler(ev);\n\t\t}, getDelay(ev));\n\t}\n\tfunction onMove(ev) {\n\t\tvar _options$modifiers7, _options$modifiers8, _options$modifiers9, _options$distanceThre;\n\t\tif ((options === null || options === void 0 || (_options$modifiers7 = options.modifiers) === null || _options$modifiers7 === void 0 ? void 0 : _options$modifiers7.self) && ev.target !== elementRef.value) return;\n\t\tif (!posStart || (options === null || options === void 0 ? void 0 : options.distanceThreshold) === false) return;\n\t\tif (options === null || options === void 0 || (_options$modifiers8 = options.modifiers) === null || _options$modifiers8 === void 0 ? void 0 : _options$modifiers8.prevent) ev.preventDefault();\n\t\tif (options === null || options === void 0 || (_options$modifiers9 = options.modifiers) === null || _options$modifiers9 === void 0 ? void 0 : _options$modifiers9.stop) ev.stopPropagation();\n\t\tconst dx = ev.x - posStart.x;\n\t\tconst dy = ev.y - posStart.y;\n\t\tif (Math.sqrt(dx * dx + dy * dy) >= ((_options$distanceThre = options === null || options === void 0 ? void 0 : options.distanceThreshold) !== null && _options$distanceThre !== void 0 ? _options$distanceThre : DEFAULT_THRESHOLD)) clear();\n\t}\n\tconst listenerOptions = {\n\t\tcapture: options === null || options === void 0 || (_options$modifiers10 = options.modifiers) === null || _options$modifiers10 === void 0 ? void 0 : _options$modifiers10.capture,\n\t\tonce: options === null || options === void 0 || (_options$modifiers11 = options.modifiers) === null || _options$modifiers11 === void 0 ? void 0 : _options$modifiers11.once\n\t};\n\tconst cleanup = [\n\t\tuseEventListener(elementRef, \"pointerdown\", onDown, listenerOptions),\n\t\tuseEventListener(elementRef, \"pointermove\", onMove, listenerOptions),\n\t\tuseEventListener(elementRef, [\"pointerup\", \"pointerleave\"], onRelease, listenerOptions)\n\t];\n\tconst stop = () => cleanup.forEach((fn) => fn());\n\treturn stop;\n}\n\n//#endregion\n//#region onStartTyping/index.ts\nfunction isFocusedElementEditable() {\n\tconst { activeElement, body } = document;\n\tif (!activeElement) return false;\n\tif (activeElement === body) return false;\n\tswitch (activeElement.tagName) {\n\t\tcase \"INPUT\":\n\t\tcase \"TEXTAREA\": return true;\n\t}\n\treturn activeElement.hasAttribute(\"contenteditable\");\n}\nfunction isTypedCharValid({ keyCode, metaKey, ctrlKey, altKey }) {\n\tif (metaKey || ctrlKey || altKey) return false;\n\tif (keyCode >= 48 && keyCode <= 57 || keyCode >= 96 && keyCode <= 105) return true;\n\tif (keyCode >= 65 && keyCode <= 90) return true;\n\treturn false;\n}\n/**\n* Fires when users start typing on non-editable elements.\n*\n* @see https://vueuse.org/onStartTyping\n* @param callback\n* @param options\n*/\nfunction onStartTyping(callback, options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst keydown = (event) => {\n\t\tif (!isFocusedElementEditable() && isTypedCharValid(event)) callback(event);\n\t};\n\tif (document$1) useEventListener(document$1, \"keydown\", keydown, { passive: true });\n}\n\n//#endregion\n//#region templateRef/index.ts\n/**\n* @deprecated Use Vue's built-in `useTemplateRef` instead.\n*\n* Shorthand for binding ref to template element.\n*\n* @see https://vueuse.org/templateRef\n* @param key\n* @param initialValue\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction templateRef(key, initialValue = null) {\n\tconst instance = getCurrentInstance();\n\tlet _trigger = () => {};\n\tconst element = customRef((track, trigger) => {\n\t\t_trigger = trigger;\n\t\treturn {\n\t\t\tget() {\n\t\t\t\tvar _instance$proxy$$refs, _instance$proxy;\n\t\t\t\ttrack();\n\t\t\t\treturn (_instance$proxy$$refs = instance === null || instance === void 0 || (_instance$proxy = instance.proxy) === null || _instance$proxy === void 0 ? void 0 : _instance$proxy.$refs[key]) !== null && _instance$proxy$$refs !== void 0 ? _instance$proxy$$refs : initialValue;\n\t\t\t},\n\t\t\tset() {}\n\t\t};\n\t});\n\ttryOnMounted(_trigger);\n\tonUpdated(_trigger);\n\treturn element;\n}\n\n//#endregion\n//#region useActiveElement/index.ts\n/**\n* Reactive `document.activeElement`\n*\n* @see https://vueuse.org/useActiveElement\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useActiveElement(options = {}) {\n\tvar _options$document;\n\tconst { window: window$1 = defaultWindow, deep = true, triggerOnRemoval = false } = options;\n\tconst document$1 = (_options$document = options.document) !== null && _options$document !== void 0 ? _options$document : window$1 === null || window$1 === void 0 ? void 0 : window$1.document;\n\tconst getDeepActiveElement = () => {\n\t\tlet element = document$1 === null || document$1 === void 0 ? void 0 : document$1.activeElement;\n\t\tif (deep) {\n\t\t\tvar _element$shadowRoot;\n\t\t\twhile (element === null || element === void 0 ? void 0 : element.shadowRoot) element = element === null || element === void 0 || (_element$shadowRoot = element.shadowRoot) === null || _element$shadowRoot === void 0 ? void 0 : _element$shadowRoot.activeElement;\n\t\t}\n\t\treturn element;\n\t};\n\tconst activeElement = shallowRef();\n\tconst trigger = () => {\n\t\tactiveElement.value = getDeepActiveElement();\n\t};\n\tif (window$1) {\n\t\tconst listenerOptions = {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t};\n\t\tuseEventListener(window$1, \"blur\", (event) => {\n\t\t\tif (event.relatedTarget !== null) return;\n\t\t\ttrigger();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window$1, \"focus\", trigger, listenerOptions);\n\t}\n\tif (triggerOnRemoval) onElementRemoval(activeElement, trigger, { document: document$1 });\n\ttrigger();\n\treturn activeElement;\n}\n\n//#endregion\n//#region useRafFn/index.ts\n/**\n* Call function on every `requestAnimationFrame`. With controls of pausing and resuming.\n*\n* @see https://vueuse.org/useRafFn\n* @param fn\n* @param options\n*/\nfunction useRafFn(fn, options = {}) {\n\tconst { immediate = true, fpsLimit = void 0, window: window$1 = defaultWindow, once = false } = options;\n\tconst isActive = shallowRef(false);\n\tconst intervalLimit = computed(() => {\n\t\treturn fpsLimit ? 1e3 / toValue(fpsLimit) : null;\n\t});\n\tlet previousFrameTimestamp = 0;\n\tlet rafId = null;\n\tfunction loop(timestamp$1) {\n\t\tif (!isActive.value || !window$1) return;\n\t\tif (!previousFrameTimestamp) previousFrameTimestamp = timestamp$1;\n\t\tconst delta = timestamp$1 - previousFrameTimestamp;\n\t\tif (intervalLimit.value && delta < intervalLimit.value) {\n\t\t\trafId = window$1.requestAnimationFrame(loop);\n\t\t\treturn;\n\t\t}\n\t\tpreviousFrameTimestamp = timestamp$1;\n\t\tfn({\n\t\t\tdelta,\n\t\t\ttimestamp: timestamp$1\n\t\t});\n\t\tif (once) {\n\t\t\tisActive.value = false;\n\t\t\trafId = null;\n\t\t\treturn;\n\t\t}\n\t\trafId = window$1.requestAnimationFrame(loop);\n\t}\n\tfunction resume() {\n\t\tif (!isActive.value && window$1) {\n\t\t\tisActive.value = true;\n\t\t\tpreviousFrameTimestamp = 0;\n\t\t\trafId = window$1.requestAnimationFrame(loop);\n\t\t}\n\t}\n\tfunction pause() {\n\t\tisActive.value = false;\n\t\tif (rafId != null && window$1) {\n\t\t\twindow$1.cancelAnimationFrame(rafId);\n\t\t\trafId = null;\n\t\t}\n\t}\n\tif (immediate) resume();\n\ttryOnScopeDispose(pause);\n\treturn {\n\t\tisActive: readonly(isActive),\n\t\tpause,\n\t\tresume\n\t};\n}\n\n//#endregion\n//#region useAnimate/index.ts\n/**\n* Reactive Web Animations API\n*\n* @see https://vueuse.org/useAnimate\n* @param target\n* @param keyframes\n* @param options\n*/\nfunction useAnimate(target, keyframes, options) {\n\tlet config;\n\tlet animateOptions;\n\tif (isObject(options)) {\n\t\tconfig = options;\n\t\tanimateOptions = objectOmit(options, [\n\t\t\t\"window\",\n\t\t\t\"immediate\",\n\t\t\t\"commitStyles\",\n\t\t\t\"persist\",\n\t\t\t\"onReady\",\n\t\t\t\"onError\"\n\t\t]);\n\t} else {\n\t\tconfig = { duration: options };\n\t\tanimateOptions = options;\n\t}\n\tconst { window: window$1 = defaultWindow, immediate = true, commitStyles, persist, playbackRate: _playbackRate = 1, onReady, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = config;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && HTMLElement && \"animate\" in HTMLElement.prototype);\n\tconst animate = shallowRef(void 0);\n\tconst store = shallowReactive({\n\t\tstartTime: null,\n\t\tcurrentTime: null,\n\t\ttimeline: null,\n\t\tplaybackRate: _playbackRate,\n\t\tpending: false,\n\t\tplayState: immediate ? \"idle\" : \"paused\",\n\t\treplaceState: \"active\"\n\t});\n\tconst pending = computed(() => store.pending);\n\tconst playState = computed(() => store.playState);\n\tconst replaceState = computed(() => store.replaceState);\n\tconst startTime = computed({\n\t\tget() {\n\t\t\treturn store.startTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.startTime = value;\n\t\t\tif (animate.value) animate.value.startTime = value;\n\t\t}\n\t});\n\tconst currentTime = computed({\n\t\tget() {\n\t\t\treturn store.currentTime;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.currentTime = value;\n\t\t\tif (animate.value) {\n\t\t\t\tanimate.value.currentTime = value;\n\t\t\t\tsyncResume();\n\t\t\t}\n\t\t}\n\t});\n\tconst timeline = computed({\n\t\tget() {\n\t\t\treturn store.timeline;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.timeline = value;\n\t\t\tif (animate.value) animate.value.timeline = value;\n\t\t}\n\t});\n\tconst playbackRate = computed({\n\t\tget() {\n\t\t\treturn store.playbackRate;\n\t\t},\n\t\tset(value) {\n\t\t\tstore.playbackRate = value;\n\t\t\tif (animate.value) animate.value.playbackRate = value;\n\t\t}\n\t});\n\tconst play = () => {\n\t\tif (animate.value) try {\n\t\t\tanimate.value.play();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t\telse update();\n\t};\n\tconst pause = () => {\n\t\ttry {\n\t\t\tvar _animate$value;\n\t\t\t(_animate$value = animate.value) === null || _animate$value === void 0 || _animate$value.pause();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst reverse = () => {\n\t\tif (!animate.value) update();\n\t\ttry {\n\t\t\tvar _animate$value2;\n\t\t\t(_animate$value2 = animate.value) === null || _animate$value2 === void 0 || _animate$value2.reverse();\n\t\t\tsyncResume();\n\t\t} catch (e) {\n\t\t\tsyncPause();\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst finish = () => {\n\t\ttry {\n\t\t\tvar _animate$value3;\n\t\t\t(_animate$value3 = animate.value) === null || _animate$value3 === void 0 || _animate$value3.finish();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\tconst cancel = () => {\n\t\ttry {\n\t\t\tvar _animate$value4;\n\t\t\t(_animate$value4 = animate.value) === null || _animate$value4 === void 0 || _animate$value4.cancel();\n\t\t\tsyncPause();\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t};\n\twatch(() => unrefElement(target), (el) => {\n\t\tif (el) update(true);\n\t\telse animate.value = void 0;\n\t});\n\twatch(() => keyframes, (value) => {\n\t\tif (animate.value) {\n\t\t\tupdate();\n\t\t\tconst targetEl = unrefElement(target);\n\t\t\tif (targetEl) animate.value.effect = new KeyframeEffect(targetEl, toValue(value), animateOptions);\n\t\t}\n\t}, { deep: true });\n\ttryOnMounted(() => update(true), false);\n\ttryOnScopeDispose(cancel);\n\tfunction update(init) {\n\t\tconst el = unrefElement(target);\n\t\tif (!isSupported.value || !el) return;\n\t\tif (!animate.value) animate.value = el.animate(toValue(keyframes), animateOptions);\n\t\tif (persist) animate.value.persist();\n\t\tif (_playbackRate !== 1) animate.value.playbackRate = _playbackRate;\n\t\tif (init && !immediate) animate.value.pause();\n\t\telse syncResume();\n\t\tonReady === null || onReady === void 0 || onReady(animate.value);\n\t}\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(animate, [\n\t\t\"cancel\",\n\t\t\"finish\",\n\t\t\"remove\"\n\t], syncPause, listenerOptions);\n\tuseEventListener(animate, \"finish\", () => {\n\t\tvar _animate$value5;\n\t\tif (commitStyles) (_animate$value5 = animate.value) === null || _animate$value5 === void 0 || _animate$value5.commitStyles();\n\t}, listenerOptions);\n\tconst { resume: resumeRef, pause: pauseRef } = useRafFn(() => {\n\t\tif (!animate.value) return;\n\t\tstore.pending = animate.value.pending;\n\t\tstore.playState = animate.value.playState;\n\t\tstore.replaceState = animate.value.replaceState;\n\t\tstore.startTime = animate.value.startTime;\n\t\tstore.currentTime = animate.value.currentTime;\n\t\tstore.timeline = animate.value.timeline;\n\t\tstore.playbackRate = animate.value.playbackRate;\n\t}, { immediate: false });\n\tfunction syncResume() {\n\t\tif (isSupported.value) resumeRef();\n\t}\n\tfunction syncPause() {\n\t\tif (isSupported.value && window$1) window$1.requestAnimationFrame(pauseRef);\n\t}\n\treturn {\n\t\tisSupported,\n\t\tanimate,\n\t\tplay,\n\t\tpause,\n\t\treverse,\n\t\tfinish,\n\t\tcancel,\n\t\tpending,\n\t\tplayState,\n\t\treplaceState,\n\t\tstartTime,\n\t\tcurrentTime,\n\t\ttimeline,\n\t\tplaybackRate\n\t};\n}\n\n//#endregion\n//#region useAsyncQueue/index.ts\n/**\n* Asynchronous queue task controller.\n*\n* @see https://vueuse.org/useAsyncQueue\n* @param tasks\n* @param options\n*/\nfunction useAsyncQueue(tasks, options) {\n\tconst { interrupt = true, onError = noop, onFinished = noop, signal } = options || {};\n\tconst promiseState = {\n\t\taborted: \"aborted\",\n\t\tfulfilled: \"fulfilled\",\n\t\tpending: \"pending\",\n\t\trejected: \"rejected\"\n\t};\n\tconst result = reactive(Array.from(Array.from({ length: tasks.length }), () => ({\n\t\tstate: promiseState.pending,\n\t\tdata: null\n\t})));\n\tconst activeIndex = shallowRef(-1);\n\tif (!tasks || tasks.length === 0) {\n\t\tonFinished();\n\t\treturn {\n\t\t\tactiveIndex,\n\t\t\tresult\n\t\t};\n\t}\n\tfunction updateResult(state, res) {\n\t\tactiveIndex.value++;\n\t\tresult[activeIndex.value].data = res;\n\t\tresult[activeIndex.value].state = state;\n\t}\n\ttasks.reduce((prev, curr) => {\n\t\treturn prev.then((prevRes) => {\n\t\t\tvar _result$activeIndex$v;\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, /* @__PURE__ */ new Error(\"aborted\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (((_result$activeIndex$v = result[activeIndex.value]) === null || _result$activeIndex$v === void 0 ? void 0 : _result$activeIndex$v.state) === promiseState.rejected && interrupt) {\n\t\t\t\tonFinished();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst done = curr(prevRes).then((currentRes) => {\n\t\t\t\tupdateResult(promiseState.fulfilled, currentRes);\n\t\t\t\tif (activeIndex.value === tasks.length - 1) onFinished();\n\t\t\t\treturn currentRes;\n\t\t\t});\n\t\t\tif (!signal) return done;\n\t\t\treturn Promise.race([done, whenAborted(signal)]);\n\t\t}).catch((e) => {\n\t\t\tif (signal === null || signal === void 0 ? void 0 : signal.aborted) {\n\t\t\t\tupdateResult(promiseState.aborted, e);\n\t\t\t\treturn e;\n\t\t\t}\n\t\t\tupdateResult(promiseState.rejected, e);\n\t\t\tonError();\n\t\t\treturn e;\n\t\t});\n\t}, Promise.resolve());\n\treturn {\n\t\tactiveIndex,\n\t\tresult\n\t};\n}\nfunction whenAborted(signal) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst error = /* @__PURE__ */ new Error(\"aborted\");\n\t\tif (signal.aborted) reject(error);\n\t\telse signal.addEventListener(\"abort\", () => reject(error), { once: true });\n\t});\n}\n\n//#endregion\n//#region useAsyncState/index.ts\n/**\n* Reactive async state. Will not block your setup function and will trigger changes once\n* the promise is ready.\n*\n* @see https://vueuse.org/useAsyncState\n* @param promise The promise / async function to be resolved\n* @param initialState The initial state, used until the first evaluation finishes\n* @param options\n*/\nfunction useAsyncState(promise, initialState, options) {\n\tvar _globalThis$reportErr;\n\tconst { immediate = true, delay = 0, onError = (_globalThis$reportErr = globalThis.reportError) !== null && _globalThis$reportErr !== void 0 ? _globalThis$reportErr : noop, onSuccess = noop, resetOnExecute = true, shallow = true, throwError } = options !== null && options !== void 0 ? options : {};\n\tconst state = shallow ? shallowRef(initialState) : ref(initialState);\n\tconst isReady = shallowRef(false);\n\tconst isLoading = shallowRef(false);\n\tconst error = shallowRef(void 0);\n\tlet executionsCount = 0;\n\tasync function execute(delay$1 = 0, ...args) {\n\t\tconst executionId = executionsCount += 1;\n\t\tif (resetOnExecute) state.value = toValue(initialState);\n\t\terror.value = void 0;\n\t\tisReady.value = false;\n\t\tisLoading.value = true;\n\t\tif (delay$1 > 0) await promiseTimeout(delay$1);\n\t\tconst _promise = typeof promise === \"function\" ? promise(...args) : promise;\n\t\ttry {\n\t\t\tconst data = await _promise;\n\t\t\tif (executionId === executionsCount) {\n\t\t\t\tstate.value = data;\n\t\t\t\tisReady.value = true;\n\t\t\t}\n\t\t\tonSuccess(data);\n\t\t} catch (e) {\n\t\t\tif (executionId === executionsCount) error.value = e;\n\t\t\tonError(e);\n\t\t\tif (throwError) throw e;\n\t\t} finally {\n\t\t\tif (executionId === executionsCount) isLoading.value = false;\n\t\t}\n\t\treturn state.value;\n\t}\n\tif (immediate) execute(delay);\n\tconst shell = {\n\t\tstate,\n\t\tisReady,\n\t\tisLoading,\n\t\terror,\n\t\texecute,\n\t\texecuteImmediate: (...args) => execute(0, ...args)\n\t};\n\tfunction waitUntilIsLoaded() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isLoading).toBe(false).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilIsLoaded().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region useBase64/serialization.ts\nconst defaults = {\n\tarray: (v) => JSON.stringify(v),\n\tobject: (v) => JSON.stringify(v),\n\tset: (v) => JSON.stringify(Array.from(v)),\n\tmap: (v) => JSON.stringify(Object.fromEntries(v)),\n\tnull: () => \"\"\n};\nfunction getDefaultSerialization(target) {\n\tif (!target) return defaults.null;\n\tif (target instanceof Map) return defaults.map;\n\telse if (target instanceof Set) return defaults.set;\n\telse if (Array.isArray(target)) return defaults.array;\n\telse return defaults.object;\n}\n\n//#endregion\n//#region useBase64/index.ts\nfunction useBase64(target, options) {\n\tconst base64 = shallowRef(\"\");\n\tconst promise = shallowRef();\n\tfunction execute() {\n\t\tif (!isClient) return;\n\t\tpromise.value = new Promise((resolve, reject) => {\n\t\t\ttry {\n\t\t\t\tconst _target = toValue(target);\n\t\t\t\tif (_target == null) resolve(\"\");\n\t\t\t\telse if (typeof _target === \"string\") resolve(blobToBase64(new Blob([_target], { type: \"text/plain\" })));\n\t\t\t\telse if (_target instanceof Blob) resolve(blobToBase64(_target));\n\t\t\t\telse if (_target instanceof ArrayBuffer) resolve(window.btoa(String.fromCharCode(...new Uint8Array(_target))));\n\t\t\t\telse if (_target instanceof HTMLCanvasElement) resolve(_target.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\telse if (_target instanceof HTMLImageElement) {\n\t\t\t\t\tconst img = _target.cloneNode(false);\n\t\t\t\t\timg.crossOrigin = \"Anonymous\";\n\t\t\t\t\timgLoaded(img).then(() => {\n\t\t\t\t\t\tconst canvas = document.createElement(\"canvas\");\n\t\t\t\t\t\tconst ctx = canvas.getContext(\"2d\");\n\t\t\t\t\t\tcanvas.width = img.width;\n\t\t\t\t\t\tcanvas.height = img.height;\n\t\t\t\t\t\tctx.drawImage(img, 0, 0, canvas.width, canvas.height);\n\t\t\t\t\t\tresolve(canvas.toDataURL(options === null || options === void 0 ? void 0 : options.type, options === null || options === void 0 ? void 0 : options.quality));\n\t\t\t\t\t}).catch(reject);\n\t\t\t\t} else if (typeof _target === \"object\") {\n\t\t\t\t\tconst serialized = ((options === null || options === void 0 ? void 0 : options.serializer) || getDefaultSerialization(_target))(_target);\n\t\t\t\t\treturn resolve(blobToBase64(new Blob([serialized], { type: \"application/json\" })));\n\t\t\t\t} else reject(/* @__PURE__ */ new Error(\"target is unsupported types\"));\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t\tpromise.value.then((res) => {\n\t\t\tbase64.value = (options === null || options === void 0 ? void 0 : options.dataUrl) === false ? res.replace(/^data:.*?;base64,/, \"\") : res;\n\t\t});\n\t\treturn promise.value;\n\t}\n\tif (isRef(target) || typeof target === \"function\") watch(target, execute, { immediate: true });\n\telse execute();\n\treturn {\n\t\tbase64,\n\t\tpromise,\n\t\texecute\n\t};\n}\nfunction imgLoaded(img) {\n\treturn new Promise((resolve, reject) => {\n\t\tif (!img.complete) {\n\t\t\timg.onload = () => {\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\timg.onerror = reject;\n\t\t} else resolve();\n\t});\n}\nfunction blobToBase64(blob) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst fr = new FileReader();\n\t\tfr.onload = (e) => {\n\t\t\tresolve(e.target.result);\n\t\t};\n\t\tfr.onerror = reject;\n\t\tfr.readAsDataURL(blob);\n\t});\n}\n\n//#endregion\n//#region useBattery/index.ts\n/**\n* Reactive Battery Status API.\n*\n* @see https://vueuse.org/useBattery\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBattery(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst events$1 = [\n\t\t\"chargingchange\",\n\t\t\"chargingtimechange\",\n\t\t\"dischargingtimechange\",\n\t\t\"levelchange\"\n\t];\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"getBattery\" in navigator$1 && typeof navigator$1.getBattery === \"function\");\n\tconst charging = shallowRef(false);\n\tconst chargingTime = shallowRef(0);\n\tconst dischargingTime = shallowRef(0);\n\tconst level = shallowRef(1);\n\tlet battery;\n\tfunction updateBatteryInfo() {\n\t\tcharging.value = this.charging;\n\t\tchargingTime.value = this.chargingTime || 0;\n\t\tdischargingTime.value = this.dischargingTime || 0;\n\t\tlevel.value = this.level;\n\t}\n\tif (isSupported.value) navigator$1.getBattery().then((_battery) => {\n\t\tbattery = _battery;\n\t\tupdateBatteryInfo.call(battery);\n\t\tuseEventListener(battery, events$1, updateBatteryInfo, { passive: true });\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcharging,\n\t\tchargingTime,\n\t\tdischargingTime,\n\t\tlevel\n\t};\n}\n\n//#endregion\n//#region useBluetooth/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useBluetooth(options) {\n\tlet { acceptAllDevices = false } = options || {};\n\tconst { filters = void 0, optionalServices = void 0, navigator: navigator$1 = defaultNavigator } = options || {};\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"bluetooth\" in navigator$1);\n\tconst device = shallowRef();\n\tconst error = shallowRef(null);\n\twatch(device, () => {\n\t\tconnectToBluetoothGATTServer();\n\t});\n\tasync function requestDevice() {\n\t\tif (!isSupported.value) return;\n\t\terror.value = null;\n\t\tif (filters && filters.length > 0) acceptAllDevices = false;\n\t\ttry {\n\t\t\tdevice.value = await (navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.bluetooth.requestDevice({\n\t\t\t\tacceptAllDevices,\n\t\t\t\tfilters,\n\t\t\t\toptionalServices\n\t\t\t}));\n\t\t} catch (err) {\n\t\t\terror.value = err;\n\t\t}\n\t}\n\tconst server = shallowRef();\n\tconst isConnected = shallowRef(false);\n\tfunction reset() {\n\t\tisConnected.value = false;\n\t\tdevice.value = void 0;\n\t\tserver.value = void 0;\n\t}\n\tasync function connectToBluetoothGATTServer() {\n\t\terror.value = null;\n\t\tif (device.value && device.value.gatt) {\n\t\t\tuseEventListener(device, \"gattserverdisconnected\", reset, { passive: true });\n\t\t\ttry {\n\t\t\t\tserver.value = await device.value.gatt.connect();\n\t\t\t\tisConnected.value = server.value.connected;\n\t\t\t} catch (err) {\n\t\t\t\terror.value = err;\n\t\t\t}\n\t\t}\n\t}\n\ttryOnMounted(() => {\n\t\tvar _device$value$gatt;\n\t\tif (device.value) (_device$value$gatt = device.value.gatt) === null || _device$value$gatt === void 0 || _device$value$gatt.connect();\n\t});\n\ttryOnScopeDispose(() => {\n\t\tvar _device$value$gatt2;\n\t\tif (device.value) (_device$value$gatt2 = device.value.gatt) === null || _device$value$gatt2 === void 0 || _device$value$gatt2.disconnect();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tisConnected: readonly(isConnected),\n\t\tdevice,\n\t\trequestDevice,\n\t\tserver,\n\t\terror\n\t};\n}\n\n//#endregion\n//#region useSSRWidth/index.ts\nconst ssrWidthSymbol = Symbol(\"vueuse-ssr-width\");\n/* @__NO_SIDE_EFFECTS__ */\nfunction useSSRWidth() {\n\tconst ssrWidth = hasInjectionContext() ? injectLocal(ssrWidthSymbol, null) : null;\n\treturn typeof ssrWidth === \"number\" ? ssrWidth : void 0;\n}\nfunction provideSSRWidth(width, app) {\n\tif (app !== void 0) app.provide(ssrWidthSymbol, width);\n\telse provideLocal(ssrWidthSymbol, width);\n}\n\n//#endregion\n//#region useMediaQuery/index.ts\n/**\n* Reactive Media Query.\n*\n* @see https://vueuse.org/useMediaQuery\n* @param query\n* @param options\n*/\nfunction useMediaQuery(query, options = {}) {\n\tconst { window: window$1 = defaultWindow, ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"matchMedia\" in window$1 && typeof window$1.matchMedia === \"function\");\n\tconst ssrSupport = shallowRef(typeof ssrWidth === \"number\");\n\tconst mediaQuery = shallowRef();\n\tconst matches = shallowRef(false);\n\tconst handler = (event) => {\n\t\tmatches.value = event.matches;\n\t};\n\twatchEffect(() => {\n\t\tif (ssrSupport.value) {\n\t\t\tssrSupport.value = !isSupported.value;\n\t\t\tmatches.value = toValue(query).split(\",\").some((queryString) => {\n\t\t\t\tconst not = queryString.includes(\"not all\");\n\t\t\t\tconst minWidth = queryString.match(/\\(\\s*min-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tconst maxWidth = queryString.match(/\\(\\s*max-width:\\s*(-?\\d+(?:\\.\\d*)?[a-z]+\\s*)\\)/);\n\t\t\t\tlet res = Boolean(minWidth || maxWidth);\n\t\t\t\tif (minWidth && res) res = ssrWidth >= pxValue(minWidth[1]);\n\t\t\t\tif (maxWidth && res) res = ssrWidth <= pxValue(maxWidth[1]);\n\t\t\t\treturn not ? !res : res;\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\t\tif (!isSupported.value) return;\n\t\tmediaQuery.value = window$1.matchMedia(toValue(query));\n\t\tmatches.value = mediaQuery.value.matches;\n\t});\n\tuseEventListener(mediaQuery, \"change\", handler, { passive: true });\n\treturn computed(() => matches.value);\n}\n\n//#endregion\n//#region useBreakpoints/breakpoints.ts\n/**\n* Breakpoints from Tailwind V2\n*\n* @see https://tailwindcss.com/docs/breakpoints\n*/\nconst breakpointsTailwind = {\n\t\"sm\": 640,\n\t\"md\": 768,\n\t\"lg\": 1024,\n\t\"xl\": 1280,\n\t\"2xl\": 1536\n};\n/**\n* Breakpoints from Bootstrap V5\n*\n* @see https://getbootstrap.com/docs/5.0/layout/breakpoints\n*/\nconst breakpointsBootstrapV5 = {\n\txs: 0,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1400\n};\n/**\n* Breakpoints from Vuetify V2\n*\n* @see https://v2.vuetifyjs.com/en/features/breakpoints/\n*/\nconst breakpointsVuetifyV2 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1264,\n\txl: 1904\n};\n/**\n* Breakpoints from Vuetify V3\n*\n* @see https://vuetifyjs.com/en/styles/float/#overview\n*/\nconst breakpointsVuetifyV3 = {\n\txs: 0,\n\tsm: 600,\n\tmd: 960,\n\tlg: 1280,\n\txl: 1920,\n\txxl: 2560\n};\n/**\n* Alias to `breakpointsVuetifyV2`\n*\n* @deprecated explictly use `breakpointsVuetifyV2` or `breakpointsVuetifyV3` instead\n*/\nconst breakpointsVuetify = breakpointsVuetifyV2;\n/**\n* Breakpoints from Ant Design\n*\n* @see https://ant.design/components/layout/#breakpoint-width\n*/\nconst breakpointsAntDesign = {\n\txs: 480,\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200,\n\txxl: 1600\n};\n/**\n* Breakpoints from Quasar V2\n*\n* @see https://quasar.dev/style/breakpoints\n*/\nconst breakpointsQuasar = {\n\txs: 0,\n\tsm: 600,\n\tmd: 1024,\n\tlg: 1440,\n\txl: 1920\n};\n/**\n* Sematic Breakpoints\n*/\nconst breakpointsSematic = {\n\tmobileS: 320,\n\tmobileM: 375,\n\tmobileL: 425,\n\ttablet: 768,\n\tlaptop: 1024,\n\tlaptopL: 1440,\n\tdesktop4K: 2560\n};\n/**\n* Breakpoints from Master CSS\n*\n* @see https://docs.master.co/css/breakpoints\n*/\nconst breakpointsMasterCss = {\n\t\"3xs\": 360,\n\t\"2xs\": 480,\n\t\"xs\": 600,\n\t\"sm\": 768,\n\t\"md\": 1024,\n\t\"lg\": 1280,\n\t\"xl\": 1440,\n\t\"2xl\": 1600,\n\t\"3xl\": 1920,\n\t\"4xl\": 2560\n};\n/**\n* Breakpoints from PrimeFlex\n*\n* @see https://primeflex.org/installation\n*/\nconst breakpointsPrimeFlex = {\n\tsm: 576,\n\tmd: 768,\n\tlg: 992,\n\txl: 1200\n};\n/**\n* Breakpoints from ElementUI/ElementPlus\n*\n* @see https://element.eleme.io/#/en-US/component/layout\n* @see https://element-plus.org/en-US/component/layout.html\n*/\nconst breakpointsElement = {\n\txs: 0,\n\tsm: 768,\n\tmd: 992,\n\tlg: 1200,\n\txl: 1920\n};\n\n//#endregion\n//#region useBreakpoints/index.ts\n/**\n* Reactively viewport breakpoints\n*\n* @see https://vueuse.org/useBreakpoints\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBreakpoints(breakpoints, options = {}) {\n\tfunction getValue$1(k, delta) {\n\t\tlet v = toValue(breakpoints[toValue(k)]);\n\t\tif (delta != null) v = increaseWithUnit(v, delta);\n\t\tif (typeof v === \"number\") v = `${v}px`;\n\t\treturn v;\n\t}\n\tconst { window: window$1 = defaultWindow, strategy = \"min-width\", ssrWidth = /* @__PURE__ */ useSSRWidth() } = options;\n\tconst ssrSupport = typeof ssrWidth === \"number\";\n\tconst mounted = ssrSupport ? shallowRef(false) : { value: true };\n\tif (ssrSupport) tryOnMounted(() => mounted.value = !!window$1);\n\tfunction match(query, size) {\n\t\tif (!mounted.value && ssrSupport) return query === \"min\" ? ssrWidth >= pxValue(size) : ssrWidth <= pxValue(size);\n\t\tif (!window$1) return false;\n\t\treturn window$1.matchMedia(`(${query}-width: ${size})`).matches;\n\t}\n\tconst greaterOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(k)})`, options);\n\t};\n\tconst smallerOrEqual = (k) => {\n\t\treturn useMediaQuery(() => `(max-width: ${getValue$1(k)})`, options);\n\t};\n\tconst shortcutMethods = Object.keys(breakpoints).reduce((shortcuts, k) => {\n\t\tObject.defineProperty(shortcuts, k, {\n\t\t\tget: () => strategy === \"min-width\" ? greaterOrEqual(k) : smallerOrEqual(k),\n\t\t\tenumerable: true,\n\t\t\tconfigurable: true\n\t\t});\n\t\treturn shortcuts;\n\t}, {});\n\tfunction current() {\n\t\tconst points = Object.keys(breakpoints).map((k) => [\n\t\t\tk,\n\t\t\tshortcutMethods[k],\n\t\t\tpxValue(getValue$1(k))\n\t\t]).sort((a, b) => a[2] - b[2]);\n\t\treturn computed(() => points.filter(([, v]) => v.value).map(([k]) => k));\n\t}\n\treturn Object.assign(shortcutMethods, {\n\t\tgreaterOrEqual,\n\t\tsmallerOrEqual,\n\t\tgreater(k) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(k, .1)})`, options);\n\t\t},\n\t\tsmaller(k) {\n\t\t\treturn useMediaQuery(() => `(max-width: ${getValue$1(k, -.1)})`, options);\n\t\t},\n\t\tbetween(a, b) {\n\t\t\treturn useMediaQuery(() => `(min-width: ${getValue$1(a)}) and (max-width: ${getValue$1(b, -.1)})`, options);\n\t\t},\n\t\tisGreater(k) {\n\t\t\treturn match(\"min\", getValue$1(k, .1));\n\t\t},\n\t\tisGreaterOrEqual(k) {\n\t\t\treturn match(\"min\", getValue$1(k));\n\t\t},\n\t\tisSmaller(k) {\n\t\t\treturn match(\"max\", getValue$1(k, -.1));\n\t\t},\n\t\tisSmallerOrEqual(k) {\n\t\t\treturn match(\"max\", getValue$1(k));\n\t\t},\n\t\tisInBetween(a, b) {\n\t\t\treturn match(\"min\", getValue$1(a)) && match(\"max\", getValue$1(b, -.1));\n\t\t},\n\t\tcurrent,\n\t\tactive() {\n\t\t\tconst bps = current();\n\t\t\treturn computed(() => bps.value.length === 0 ? \"\" : bps.value.at(strategy === \"min-width\" ? -1 : 0));\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useBroadcastChannel/index.ts\n/**\n* Reactive BroadcastChannel\n*\n* @see https://vueuse.org/useBroadcastChannel\n* @see https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n* @param options\n*\n*/\nfunction useBroadcastChannel(options) {\n\tconst { name, window: window$1 = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"BroadcastChannel\" in window$1);\n\tconst isClosed = shallowRef(false);\n\tconst channel = ref();\n\tconst data = ref();\n\tconst error = shallowRef(null);\n\tconst post = (data$1) => {\n\t\tif (channel.value) channel.value.postMessage(data$1);\n\t};\n\tconst close = () => {\n\t\tif (channel.value) channel.value.close();\n\t\tisClosed.value = true;\n\t};\n\tif (isSupported.value) tryOnMounted(() => {\n\t\terror.value = null;\n\t\tchannel.value = new BroadcastChannel(name);\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(channel, \"message\", (e) => {\n\t\t\tdata.value = e.data;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"messageerror\", (e) => {\n\t\t\terror.value = e;\n\t\t}, listenerOptions);\n\t\tuseEventListener(channel, \"close\", () => {\n\t\t\tisClosed.value = true;\n\t\t}, listenerOptions);\n\t});\n\ttryOnScopeDispose(() => {\n\t\tclose();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tchannel,\n\t\tdata,\n\t\tpost,\n\t\tclose,\n\t\terror,\n\t\tisClosed\n\t};\n}\n\n//#endregion\n//#region useBrowserLocation/index.ts\nconst WRITABLE_PROPERTIES = [\n\t\"hash\",\n\t\"host\",\n\t\"hostname\",\n\t\"href\",\n\t\"pathname\",\n\t\"port\",\n\t\"protocol\",\n\t\"search\"\n];\n/**\n* Reactive browser location.\n*\n* @see https://vueuse.org/useBrowserLocation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useBrowserLocation(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst refs = Object.fromEntries(WRITABLE_PROPERTIES.map((key) => [key, ref()]));\n\tfor (const [key, ref$1] of objectEntries(refs)) watch(ref$1, (value) => {\n\t\tif (!(window$1 === null || window$1 === void 0 ? void 0 : window$1.location) || window$1.location[key] === value) return;\n\t\twindow$1.location[key] = value;\n\t});\n\tconst buildState = (trigger) => {\n\t\tvar _window$location;\n\t\tconst { state: state$1, length } = (window$1 === null || window$1 === void 0 ? void 0 : window$1.history) || {};\n\t\tconst { origin } = (window$1 === null || window$1 === void 0 ? void 0 : window$1.location) || {};\n\t\tfor (const key of WRITABLE_PROPERTIES) refs[key].value = window$1 === null || window$1 === void 0 || (_window$location = window$1.location) === null || _window$location === void 0 ? void 0 : _window$location[key];\n\t\treturn reactive({\n\t\t\ttrigger,\n\t\t\tstate: state$1,\n\t\t\tlength,\n\t\t\torigin,\n\t\t\t...refs\n\t\t});\n\t};\n\tconst state = ref(buildState(\"load\"));\n\tif (window$1) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window$1, \"popstate\", () => state.value = buildState(\"popstate\"), listenerOptions);\n\t\tuseEventListener(window$1, \"hashchange\", () => state.value = buildState(\"hashchange\"), listenerOptions);\n\t}\n\treturn state;\n}\n\n//#endregion\n//#region useCached/index.ts\nfunction useCached(refValue, comparator = (a, b) => a === b, options) {\n\tconst { deepRefs = true,...watchOptions } = options || {};\n\tconst cachedValue = createRef(refValue.value, deepRefs);\n\twatch(() => refValue.value, (value) => {\n\t\tif (!comparator(value, cachedValue.value)) cachedValue.value = value;\n\t}, watchOptions);\n\treturn cachedValue;\n}\n\n//#endregion\n//#region usePermission/index.ts\n/**\n* Reactive Permissions API.\n*\n* @see https://vueuse.org/usePermission\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePermission(permissionDesc, options = {}) {\n\tconst { controls = false, navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"permissions\" in navigator$1);\n\tconst permissionStatus = shallowRef();\n\tconst desc = typeof permissionDesc === \"string\" ? { name: permissionDesc } : permissionDesc;\n\tconst state = shallowRef();\n\tconst update = () => {\n\t\tvar _permissionStatus$val, _permissionStatus$val2;\n\t\tstate.value = (_permissionStatus$val = (_permissionStatus$val2 = permissionStatus.value) === null || _permissionStatus$val2 === void 0 ? void 0 : _permissionStatus$val2.state) !== null && _permissionStatus$val !== void 0 ? _permissionStatus$val : \"prompt\";\n\t};\n\tuseEventListener(permissionStatus, \"change\", update, { passive: true });\n\tconst query = createSingletonPromise(async () => {\n\t\tif (!isSupported.value) return;\n\t\tif (!permissionStatus.value) try {\n\t\t\tpermissionStatus.value = await navigator$1.permissions.query(desc);\n\t\t} catch (_unused) {\n\t\t\tpermissionStatus.value = void 0;\n\t\t} finally {\n\t\t\tupdate();\n\t\t}\n\t\tif (controls) return toRaw(permissionStatus.value);\n\t});\n\tquery();\n\tif (controls) return {\n\t\tstate,\n\t\tisSupported,\n\t\tquery\n\t};\n\telse return state;\n}\n\n//#endregion\n//#region useClipboard/index.ts\nfunction useClipboard(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, read = false, source, copiedDuring = 1500, legacy = false } = options;\n\tconst isClipboardApiSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"clipboard\" in navigator$1);\n\tconst permissionRead = usePermission(\"clipboard-read\");\n\tconst permissionWrite = usePermission(\"clipboard-write\");\n\tconst isSupported = computed(() => isClipboardApiSupported.value || legacy);\n\tconst text = shallowRef(\"\");\n\tconst copied = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tasync function updateText() {\n\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionRead.value));\n\t\tif (!useLegacy) try {\n\t\t\ttext.value = await navigator$1.clipboard.readText();\n\t\t} catch (_unused) {\n\t\t\tuseLegacy = true;\n\t\t}\n\t\tif (useLegacy) text.value = legacyRead();\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateText, { passive: true });\n\tasync function copy(value = toValue(source)) {\n\t\tif (isSupported.value && value != null) {\n\t\t\tlet useLegacy = !(isClipboardApiSupported.value && isAllowed(permissionWrite.value));\n\t\t\tif (!useLegacy) try {\n\t\t\t\tawait navigator$1.clipboard.writeText(value);\n\t\t\t} catch (_unused2) {\n\t\t\t\tuseLegacy = true;\n\t\t\t}\n\t\t\tif (useLegacy) legacyCopy(value);\n\t\t\ttext.value = value;\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t}\n\t}\n\tfunction legacyCopy(value) {\n\t\tconst ta = document.createElement(\"textarea\");\n\t\tta.value = value;\n\t\tta.style.position = \"absolute\";\n\t\tta.style.opacity = \"0\";\n\t\tdocument.body.appendChild(ta);\n\t\tta.select();\n\t\tdocument.execCommand(\"copy\");\n\t\tta.remove();\n\t}\n\tfunction legacyRead() {\n\t\tvar _document$getSelectio, _document, _document$getSelectio2;\n\t\treturn (_document$getSelectio = (_document = document) === null || _document === void 0 || (_document$getSelectio2 = _document.getSelection) === null || _document$getSelectio2 === void 0 || (_document$getSelectio2 = _document$getSelectio2.call(_document)) === null || _document$getSelectio2 === void 0 ? void 0 : _document$getSelectio2.toString()) !== null && _document$getSelectio !== void 0 ? _document$getSelectio : \"\";\n\t}\n\tfunction isAllowed(status) {\n\t\treturn status === \"granted\" || status === \"prompt\";\n\t}\n\treturn {\n\t\tisSupported,\n\t\ttext: readonly(text),\n\t\tcopied: readonly(copied),\n\t\tcopy\n\t};\n}\n\n//#endregion\n//#region useClipboardItems/index.ts\nfunction useClipboardItems(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, read = false, source, copiedDuring = 1500 } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"clipboard\" in navigator$1);\n\tconst content = ref([]);\n\tconst copied = shallowRef(false);\n\tconst timeout = useTimeoutFn(() => copied.value = false, copiedDuring, { immediate: false });\n\tfunction updateContent() {\n\t\tif (isSupported.value) navigator$1.clipboard.read().then((items) => {\n\t\t\tcontent.value = items;\n\t\t});\n\t}\n\tif (isSupported.value && read) useEventListener([\"copy\", \"cut\"], updateContent, { passive: true });\n\tasync function copy(value = toValue(source)) {\n\t\tif (isSupported.value && value != null) {\n\t\t\tawait navigator$1.clipboard.write(value);\n\t\t\tcontent.value = value;\n\t\t\tcopied.value = true;\n\t\t\ttimeout.start();\n\t\t}\n\t}\n\treturn {\n\t\tisSupported,\n\t\tcontent: shallowReadonly(content),\n\t\tcopied: readonly(copied),\n\t\tcopy,\n\t\tread: updateContent\n\t};\n}\n\n//#endregion\n//#region useCloned/index.ts\nfunction cloneFnJSON(source) {\n\treturn JSON.parse(JSON.stringify(source));\n}\nfunction useCloned(source, options = {}) {\n\tconst cloned = ref({});\n\tconst isModified = shallowRef(false);\n\tlet _lastSync = false;\n\tconst { manual, clone = cloneFnJSON, deep = true, immediate = true } = options;\n\twatch(cloned, () => {\n\t\tif (_lastSync) {\n\t\t\t_lastSync = false;\n\t\t\treturn;\n\t\t}\n\t\tisModified.value = true;\n\t}, {\n\t\tdeep: true,\n\t\tflush: \"sync\"\n\t});\n\tfunction sync() {\n\t\t_lastSync = true;\n\t\tisModified.value = false;\n\t\tcloned.value = clone(toValue(source));\n\t}\n\tif (!manual && (isRef(source) || typeof source === \"function\")) watch(source, sync, {\n\t\t...options,\n\t\tdeep,\n\t\timmediate\n\t});\n\telse sync();\n\treturn {\n\t\tcloned,\n\t\tisModified,\n\t\tsync\n\t};\n}\n\n//#endregion\n//#region ssr-handlers.ts\nconst _global = typeof globalThis !== \"undefined\" ? globalThis : typeof window !== \"undefined\" ? window : typeof global !== \"undefined\" ? global : typeof self !== \"undefined\" ? self : {};\nconst globalKey = \"__vueuse_ssr_handlers__\";\nconst handlers = /* @__PURE__ */ getHandlers();\nfunction getHandlers() {\n\tif (!(globalKey in _global)) _global[globalKey] = _global[globalKey] || {};\n\treturn _global[globalKey];\n}\nfunction getSSRHandler(key, fallback) {\n\treturn handlers[key] || fallback;\n}\nfunction setSSRHandler(key, fn) {\n\thandlers[key] = fn;\n}\n\n//#endregion\n//#region usePreferredDark/index.ts\n/**\n* Reactive dark theme preference.\n*\n* @see https://vueuse.org/usePreferredDark\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredDark(options) {\n\treturn useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n}\n\n//#endregion\n//#region useStorage/guess.ts\nfunction guessSerializerType(rawInit) {\n\treturn 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\";\n}\n\n//#endregion\n//#region useStorage/index.ts\nconst StorageSerializers = {\n\tboolean: {\n\t\tread: (v) => v === \"true\",\n\t\twrite: (v) => String(v)\n\t},\n\tobject: {\n\t\tread: (v) => JSON.parse(v),\n\t\twrite: (v) => JSON.stringify(v)\n\t},\n\tnumber: {\n\t\tread: (v) => Number.parseFloat(v),\n\t\twrite: (v) => String(v)\n\t},\n\tany: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tstring: {\n\t\tread: (v) => v,\n\t\twrite: (v) => String(v)\n\t},\n\tmap: {\n\t\tread: (v) => new Map(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v.entries()))\n\t},\n\tset: {\n\t\tread: (v) => new Set(JSON.parse(v)),\n\t\twrite: (v) => JSON.stringify(Array.from(v))\n\t},\n\tdate: {\n\t\tread: (v) => new Date(v),\n\t\twrite: (v) => v.toISOString()\n\t}\n};\nconst customStorageEventName = \"vueuse-storage\";\n/**\n* Reactive LocalStorage/SessionStorage.\n*\n* @see https://vueuse.org/useStorage\n*/\nfunction useStorage(key, defaults$1, storage, options = {}) {\n\tvar _options$serializer;\n\tconst { flush = \"pre\", deep = true, listenToStorageChanges = true, writeDefaults = true, mergeDefaults = false, shallow, window: window$1 = defaultWindow, eventFilter, onError = (e) => {\n\t\tconsole.error(e);\n\t}, initOnMounted } = options;\n\tconst data = (shallow ? shallowRef : ref)(typeof defaults$1 === \"function\" ? defaults$1() : defaults$1);\n\tconst keyComputed = computed(() => toValue(key));\n\tif (!storage) try {\n\t\tstorage = getSSRHandler(\"getDefaultStorage\", () => defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.localStorage)();\n\t} catch (e) {\n\t\tonError(e);\n\t}\n\tif (!storage) return data;\n\tconst rawInit = toValue(defaults$1);\n\tconst type = guessSerializerType(rawInit);\n\tconst serializer = (_options$serializer = options.serializer) !== null && _options$serializer !== void 0 ? _options$serializer : StorageSerializers[type];\n\tconst { pause: pauseWatch, resume: resumeWatch } = pausableWatch(data, (newValue) => write(newValue), {\n\t\tflush,\n\t\tdeep,\n\t\teventFilter\n\t});\n\twatch(keyComputed, () => update(), { flush });\n\tlet firstMounted = false;\n\tconst onStorageEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdate(ev);\n\t};\n\tconst onStorageCustomEvent = (ev) => {\n\t\tif (initOnMounted && !firstMounted) return;\n\t\tupdateFromCustomEvent(ev);\n\t};\n\t/**\n\t* The custom event is needed for same-document syncing when using custom\n\t* storage backends, but it doesn't work across different documents.\n\t*\n\t* TODO: Consider implementing a BroadcastChannel-based solution that fixes this.\n\t*/\n\tif (window$1 && listenToStorageChanges) if (storage instanceof Storage) useEventListener(window$1, \"storage\", onStorageEvent, { passive: true });\n\telse useEventListener(window$1, customStorageEventName, onStorageCustomEvent);\n\tif (initOnMounted) tryOnMounted(() => {\n\t\tfirstMounted = true;\n\t\tupdate();\n\t});\n\telse update();\n\tfunction dispatchWriteEvent(oldValue, newValue) {\n\t\tif (window$1) {\n\t\t\tconst payload = {\n\t\t\t\tkey: keyComputed.value,\n\t\t\t\toldValue,\n\t\t\t\tnewValue,\n\t\t\t\tstorageArea: storage\n\t\t\t};\n\t\t\twindow$1.dispatchEvent(storage instanceof Storage ? new StorageEvent(\"storage\", payload) : new CustomEvent(customStorageEventName, { detail: payload }));\n\t\t}\n\t}\n\tfunction write(v) {\n\t\ttry {\n\t\t\tconst oldValue = storage.getItem(keyComputed.value);\n\t\t\tif (v == null) {\n\t\t\t\tdispatchWriteEvent(oldValue, null);\n\t\t\t\tstorage.removeItem(keyComputed.value);\n\t\t\t} else {\n\t\t\t\tconst serialized = serializer.write(v);\n\t\t\t\tif (oldValue !== serialized) {\n\t\t\t\t\tstorage.setItem(keyComputed.value, serialized);\n\t\t\t\t\tdispatchWriteEvent(oldValue, serialized);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t}\n\tfunction read(event) {\n\t\tconst rawValue = event ? event.newValue : storage.getItem(keyComputed.value);\n\t\tif (rawValue == null) {\n\t\t\tif (writeDefaults && rawInit != null) storage.setItem(keyComputed.value, serializer.write(rawInit));\n\t\t\treturn rawInit;\n\t\t} else if (!event && mergeDefaults) {\n\t\t\tconst value = serializer.read(rawValue);\n\t\t\tif (typeof mergeDefaults === \"function\") return mergeDefaults(value, rawInit);\n\t\t\telse if (type === \"object\" && !Array.isArray(value)) return {\n\t\t\t\t...rawInit,\n\t\t\t\t...value\n\t\t\t};\n\t\t\treturn value;\n\t\t} else if (typeof rawValue !== \"string\") return rawValue;\n\t\telse return serializer.read(rawValue);\n\t}\n\tfunction update(event) {\n\t\tif (event && event.storageArea !== storage) return;\n\t\tif (event && event.key == null) {\n\t\t\tdata.value = rawInit;\n\t\t\treturn;\n\t\t}\n\t\tif (event && event.key !== keyComputed.value) return;\n\t\tpauseWatch();\n\t\ttry {\n\t\t\tconst serializedData = serializer.write(data.value);\n\t\t\tif (event === void 0 || (event === null || event === void 0 ? void 0 : event.newValue) !== serializedData) data.value = read(event);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t} finally {\n\t\t\tif (event) nextTick(resumeWatch);\n\t\t\telse resumeWatch();\n\t\t}\n\t}\n\tfunction updateFromCustomEvent(event) {\n\t\tupdate(event.detail);\n\t}\n\treturn data;\n}\n\n//#endregion\n//#region useColorMode/index.ts\nconst CSS_DISABLE_TRANS = \"*,*::before,*::after{-webkit-transition:none!important;-moz-transition:none!important;-o-transition:none!important;-ms-transition:none!important;transition:none!important}\";\n/**\n* Reactive color mode with auto data persistence.\n*\n* @see https://vueuse.org/useColorMode\n* @param options\n*/\nfunction useColorMode(options = {}) {\n\tconst { selector = \"html\", attribute = \"class\", initialValue = \"auto\", window: window$1 = defaultWindow, storage, storageKey = \"vueuse-color-scheme\", listenToStorageChanges = true, storageRef, emitAuto, disableTransition = true } = options;\n\tconst modes = {\n\t\tauto: \"\",\n\t\tlight: \"light\",\n\t\tdark: \"dark\",\n\t\t...options.modes || {}\n\t};\n\tconst preferredDark = usePreferredDark({ window: window$1 });\n\tconst system = computed(() => preferredDark.value ? \"dark\" : \"light\");\n\tconst store = storageRef || (storageKey == null ? toRef(initialValue) : useStorage(storageKey, initialValue, storage, {\n\t\twindow: window$1,\n\t\tlistenToStorageChanges\n\t}));\n\tconst state = computed(() => store.value === \"auto\" ? system.value : store.value);\n\tconst updateHTMLAttrs = getSSRHandler(\"updateHTMLAttrs\", (selector$1, attribute$1, value) => {\n\t\tconst el = typeof selector$1 === \"string\" ? window$1 === null || window$1 === void 0 ? void 0 : window$1.document.querySelector(selector$1) : unrefElement(selector$1);\n\t\tif (!el) return;\n\t\tconst classesToAdd = /* @__PURE__ */ new Set();\n\t\tconst classesToRemove = /* @__PURE__ */ new Set();\n\t\tlet attributeToChange = null;\n\t\tif (attribute$1 === \"class\") {\n\t\t\tconst current = value.split(/\\s/g);\n\t\t\tObject.values(modes).flatMap((i) => (i || \"\").split(/\\s/g)).filter(Boolean).forEach((v) => {\n\t\t\t\tif (current.includes(v)) classesToAdd.add(v);\n\t\t\t\telse classesToRemove.add(v);\n\t\t\t});\n\t\t} else attributeToChange = {\n\t\t\tkey: attribute$1,\n\t\t\tvalue\n\t\t};\n\t\tif (classesToAdd.size === 0 && classesToRemove.size === 0 && attributeToChange === null) return;\n\t\tlet style;\n\t\tif (disableTransition) {\n\t\t\tstyle = window$1.document.createElement(\"style\");\n\t\t\tstyle.appendChild(document.createTextNode(CSS_DISABLE_TRANS));\n\t\t\twindow$1.document.head.appendChild(style);\n\t\t}\n\t\tfor (const c of classesToAdd) el.classList.add(c);\n\t\tfor (const c of classesToRemove) el.classList.remove(c);\n\t\tif (attributeToChange) el.setAttribute(attributeToChange.key, attributeToChange.value);\n\t\tif (disableTransition) {\n\t\t\twindow$1.getComputedStyle(style).opacity;\n\t\t\tdocument.head.removeChild(style);\n\t\t}\n\t});\n\tfunction defaultOnChanged(mode) {\n\t\tvar _modes$mode;\n\t\tupdateHTMLAttrs(selector, attribute, (_modes$mode = modes[mode]) !== null && _modes$mode !== void 0 ? _modes$mode : mode);\n\t}\n\tfunction onChanged(mode) {\n\t\tif (options.onChanged) options.onChanged(mode, defaultOnChanged);\n\t\telse defaultOnChanged(mode);\n\t}\n\twatch(state, onChanged, {\n\t\tflush: \"post\",\n\t\timmediate: true\n\t});\n\ttryOnMounted(() => onChanged(state.value));\n\tconst auto = computed({\n\t\tget() {\n\t\t\treturn emitAuto ? store.value : state.value;\n\t\t},\n\t\tset(v) {\n\t\t\tstore.value = v;\n\t\t}\n\t});\n\treturn Object.assign(auto, {\n\t\tstore,\n\t\tsystem,\n\t\tstate\n\t});\n}\n\n//#endregion\n//#region useConfirmDialog/index.ts\n/**\n* Hooks for creating confirm dialogs. Useful for modal windows, popups and logins.\n*\n* @see https://vueuse.org/useConfirmDialog/\n* @param revealed `boolean` `ref` that handles a modal window\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useConfirmDialog(revealed = shallowRef(false)) {\n\tconst confirmHook = createEventHook();\n\tconst cancelHook = createEventHook();\n\tconst revealHook = createEventHook();\n\tlet _resolve = noop;\n\tconst reveal = (data) => {\n\t\trevealHook.trigger(data);\n\t\trevealed.value = true;\n\t\treturn new Promise((resolve) => {\n\t\t\t_resolve = resolve;\n\t\t});\n\t};\n\tconst confirm = (data) => {\n\t\trevealed.value = false;\n\t\tconfirmHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: false\n\t\t});\n\t};\n\tconst cancel = (data) => {\n\t\trevealed.value = false;\n\t\tcancelHook.trigger(data);\n\t\t_resolve({\n\t\t\tdata,\n\t\t\tisCanceled: true\n\t\t});\n\t};\n\treturn {\n\t\tisRevealed: computed(() => revealed.value),\n\t\treveal,\n\t\tconfirm,\n\t\tcancel,\n\t\tonReveal: revealHook.on,\n\t\tonConfirm: confirmHook.on,\n\t\tonCancel: cancelHook.on\n\t};\n}\n\n//#endregion\n//#region useCountdown/index.ts\n/**\n* Wrapper for `useIntervalFn` that provides a countdown timer in seconds.\n*\n* @param initialCountdown\n* @param options\n*\n* @see https://vueuse.org/useCountdown\n*/\nfunction useCountdown(initialCountdown, options) {\n\tvar _options$interval, _options$immediate;\n\tconst remaining = shallowRef(toValue(initialCountdown));\n\tconst intervalController = useIntervalFn(() => {\n\t\tvar _options$onTick;\n\t\tconst value = remaining.value - 1;\n\t\tremaining.value = value < 0 ? 0 : value;\n\t\toptions === null || options === void 0 || (_options$onTick = options.onTick) === null || _options$onTick === void 0 || _options$onTick.call(options);\n\t\tif (remaining.value <= 0) {\n\t\t\tvar _options$onComplete;\n\t\t\tintervalController.pause();\n\t\t\toptions === null || options === void 0 || (_options$onComplete = options.onComplete) === null || _options$onComplete === void 0 || _options$onComplete.call(options);\n\t\t}\n\t}, (_options$interval = options === null || options === void 0 ? void 0 : options.interval) !== null && _options$interval !== void 0 ? _options$interval : 1e3, { immediate: (_options$immediate = options === null || options === void 0 ? void 0 : options.immediate) !== null && _options$immediate !== void 0 ? _options$immediate : false });\n\tconst reset = (countdown) => {\n\t\tvar _toValue;\n\t\tremaining.value = (_toValue = toValue(countdown)) !== null && _toValue !== void 0 ? _toValue : toValue(initialCountdown);\n\t};\n\tconst stop = () => {\n\t\tintervalController.pause();\n\t\treset();\n\t};\n\tconst resume = () => {\n\t\tif (!intervalController.isActive.value) {\n\t\t\tif (remaining.value > 0) intervalController.resume();\n\t\t}\n\t};\n\tconst start = (countdown) => {\n\t\treset(countdown);\n\t\tintervalController.resume();\n\t};\n\treturn {\n\t\tremaining,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tpause: intervalController.pause,\n\t\tresume,\n\t\tisActive: intervalController.isActive\n\t};\n}\n\n//#endregion\n//#region useCssVar/index.ts\n/**\n* Manipulate CSS variables.\n*\n* @see https://vueuse.org/useCssVar\n* @param prop\n* @param target\n* @param options\n*/\nfunction useCssVar(prop, target, options = {}) {\n\tconst { window: window$1 = defaultWindow, initialValue, observe = false } = options;\n\tconst variable = shallowRef(initialValue);\n\tconst elRef = computed(() => {\n\t\tvar _window$document;\n\t\treturn unrefElement(target) || (window$1 === null || window$1 === void 0 || (_window$document = window$1.document) === null || _window$document === void 0 ? void 0 : _window$document.documentElement);\n\t});\n\tfunction updateCssVar() {\n\t\tconst key = toValue(prop);\n\t\tconst el = toValue(elRef);\n\t\tif (el && window$1 && key) {\n\t\t\tvar _window$getComputedSt;\n\t\t\tvariable.value = ((_window$getComputedSt = window$1.getComputedStyle(el).getPropertyValue(key)) === null || _window$getComputedSt === void 0 ? void 0 : _window$getComputedSt.trim()) || variable.value || initialValue;\n\t\t}\n\t}\n\tif (observe) useMutationObserver(elRef, updateCssVar, {\n\t\tattributeFilter: [\"style\", \"class\"],\n\t\twindow: window$1\n\t});\n\twatch([elRef, () => toValue(prop)], (_, old) => {\n\t\tif (old[0] && old[1]) old[0].style.removeProperty(old[1]);\n\t\tupdateCssVar();\n\t}, { immediate: true });\n\twatch([variable, elRef], ([val, el]) => {\n\t\tconst raw_prop = toValue(prop);\n\t\tif ((el === null || el === void 0 ? void 0 : el.style) && raw_prop) if (val == null) el.style.removeProperty(raw_prop);\n\t\telse el.style.setProperty(raw_prop, val);\n\t}, { immediate: true });\n\treturn variable;\n}\n\n//#endregion\n//#region useCurrentElement/index.ts\nfunction useCurrentElement(rootComponent) {\n\tconst vm = getCurrentInstance();\n\tconst currentElement = computedWithControl(() => null, () => rootComponent ? unrefElement(rootComponent) : vm.proxy.$el);\n\tonUpdated(currentElement.trigger);\n\tonMounted(currentElement.trigger);\n\treturn currentElement;\n}\n\n//#endregion\n//#region useCycleList/index.ts\n/**\n* Cycle through a list of items\n*\n* @see https://vueuse.org/useCycleList\n*/\nfunction useCycleList(list, options) {\n\tconst state = shallowRef(getInitialValue());\n\tconst listRef = toRef(list);\n\tconst index = computed({\n\t\tget() {\n\t\t\tvar _options$fallbackInde;\n\t\t\tconst targetList = listRef.value;\n\t\t\tlet index$1 = (options === null || options === void 0 ? void 0 : options.getIndexOf) ? options.getIndexOf(state.value, targetList) : targetList.indexOf(state.value);\n\t\t\tif (index$1 < 0) index$1 = (_options$fallbackInde = options === null || options === void 0 ? void 0 : options.fallbackIndex) !== null && _options$fallbackInde !== void 0 ? _options$fallbackInde : 0;\n\t\t\treturn index$1;\n\t\t},\n\t\tset(v) {\n\t\t\tset(v);\n\t\t}\n\t});\n\tfunction set(i) {\n\t\tconst targetList = listRef.value;\n\t\tconst length = targetList.length;\n\t\tconst value = targetList[(i % length + length) % length];\n\t\tstate.value = value;\n\t\treturn value;\n\t}\n\tfunction shift(delta = 1) {\n\t\treturn set(index.value + delta);\n\t}\n\tfunction next(n = 1) {\n\t\treturn shift(n);\n\t}\n\tfunction prev(n = 1) {\n\t\treturn shift(-n);\n\t}\n\tfunction getInitialValue() {\n\t\tvar _toValue, _options$initialValue;\n\t\treturn (_toValue = toValue((_options$initialValue = options === null || options === void 0 ? void 0 : options.initialValue) !== null && _options$initialValue !== void 0 ? _options$initialValue : toValue(list)[0])) !== null && _toValue !== void 0 ? _toValue : void 0;\n\t}\n\twatch(listRef, () => set(index.value));\n\treturn {\n\t\tstate,\n\t\tindex,\n\t\tnext,\n\t\tprev,\n\t\tgo: set\n\t};\n}\n\n//#endregion\n//#region useDark/index.ts\n/**\n* Reactive dark mode with auto data persistence.\n*\n* @see https://vueuse.org/useDark\n* @param options\n*/\nfunction useDark(options = {}) {\n\tconst { valueDark = \"dark\", valueLight = \"\" } = options;\n\tconst mode = useColorMode({\n\t\t...options,\n\t\tonChanged: (mode$1, defaultHandler) => {\n\t\t\tvar _options$onChanged;\n\t\t\tif (options.onChanged) (_options$onChanged = options.onChanged) === null || _options$onChanged === void 0 || _options$onChanged.call(options, mode$1 === \"dark\", defaultHandler, mode$1);\n\t\t\telse defaultHandler(mode$1);\n\t\t},\n\t\tmodes: {\n\t\t\tdark: valueDark,\n\t\t\tlight: valueLight\n\t\t}\n\t});\n\tconst system = computed(() => mode.system.value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn mode.value === \"dark\";\n\t\t},\n\t\tset(v) {\n\t\t\tconst modeVal = v ? \"dark\" : \"light\";\n\t\t\tif (system.value === modeVal) mode.value = \"auto\";\n\t\t\telse mode.value = modeVal;\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useManualRefHistory/index.ts\nfunction fnBypass(v) {\n\treturn v;\n}\nfunction fnSetSource(source, value) {\n\treturn source.value = value;\n}\nfunction defaultDump(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\nfunction defaultParse(clone) {\n\treturn clone ? typeof clone === \"function\" ? clone : cloneFnJSON : fnBypass;\n}\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useManualRefHistory\n* @param source\n* @param options\n*/\nfunction useManualRefHistory(source, options = {}) {\n\tconst { clone = false, dump = defaultDump(clone), parse = defaultParse(clone), setSource = fnSetSource } = options;\n\tfunction _createHistoryRecord() {\n\t\treturn markRaw({\n\t\t\tsnapshot: dump(source.value),\n\t\t\ttimestamp: timestamp()\n\t\t});\n\t}\n\tconst last = ref(_createHistoryRecord());\n\tconst undoStack = ref([]);\n\tconst redoStack = ref([]);\n\tconst _setSource = (record) => {\n\t\tsetSource(source, parse(record.snapshot));\n\t\tlast.value = record;\n\t};\n\tconst commit = () => {\n\t\tundoStack.value.unshift(last.value);\n\t\tlast.value = _createHistoryRecord();\n\t\tif (options.capacity && undoStack.value.length > options.capacity) undoStack.value.splice(options.capacity, Number.POSITIVE_INFINITY);\n\t\tif (redoStack.value.length) redoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst clear = () => {\n\t\tundoStack.value.splice(0, undoStack.value.length);\n\t\tredoStack.value.splice(0, redoStack.value.length);\n\t};\n\tconst undo = () => {\n\t\tconst state = undoStack.value.shift();\n\t\tif (state) {\n\t\t\tredoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst redo = () => {\n\t\tconst state = redoStack.value.shift();\n\t\tif (state) {\n\t\t\tundoStack.value.unshift(last.value);\n\t\t\t_setSource(state);\n\t\t}\n\t};\n\tconst reset = () => {\n\t\t_setSource(last.value);\n\t};\n\treturn {\n\t\tsource,\n\t\tundoStack,\n\t\tredoStack,\n\t\tlast,\n\t\thistory: computed(() => [last.value, ...undoStack.value]),\n\t\tcanUndo: computed(() => undoStack.value.length > 0),\n\t\tcanRedo: computed(() => redoStack.value.length > 0),\n\t\tclear,\n\t\tcommit,\n\t\treset,\n\t\tundo,\n\t\tredo\n\t};\n}\n\n//#endregion\n//#region useRefHistory/index.ts\n/**\n* Track the change history of a ref, also provides undo and redo functionality.\n*\n* @see https://vueuse.org/useRefHistory\n* @param source\n* @param options\n*/\nfunction useRefHistory(source, options = {}) {\n\tconst { deep = false, flush = \"pre\", eventFilter, shouldCommit = () => true } = options;\n\tconst { eventFilter: composedFilter, pause, resume: resumeTracking, isActive: isTracking } = pausableFilter(eventFilter);\n\tlet lastRawValue = source.value;\n\tconst { ignoreUpdates, ignorePrevAsyncUpdates, stop } = watchIgnorable(source, commit, {\n\t\tdeep,\n\t\tflush,\n\t\teventFilter: composedFilter\n\t});\n\tfunction setSource(source$1, value) {\n\t\tignorePrevAsyncUpdates();\n\t\tignoreUpdates(() => {\n\t\t\tsource$1.value = value;\n\t\t\tlastRawValue = value;\n\t\t});\n\t}\n\tconst manualHistory = useManualRefHistory(source, {\n\t\t...options,\n\t\tclone: options.clone || deep,\n\t\tsetSource\n\t});\n\tconst { clear, commit: manualCommit } = manualHistory;\n\tfunction commit() {\n\t\tignorePrevAsyncUpdates();\n\t\tif (!shouldCommit(lastRawValue, source.value)) return;\n\t\tlastRawValue = source.value;\n\t\tmanualCommit();\n\t}\n\tfunction resume(commitNow) {\n\t\tresumeTracking();\n\t\tif (commitNow) commit();\n\t}\n\tfunction batch(fn) {\n\t\tlet canceled = false;\n\t\tconst cancel = () => canceled = true;\n\t\tignoreUpdates(() => {\n\t\t\tfn(cancel);\n\t\t});\n\t\tif (!canceled) commit();\n\t}\n\tfunction dispose() {\n\t\tstop();\n\t\tclear();\n\t}\n\treturn {\n\t\t...manualHistory,\n\t\tisTracking,\n\t\tpause,\n\t\tresume,\n\t\tcommit,\n\t\tbatch,\n\t\tdispose\n\t};\n}\n\n//#endregion\n//#region useDebouncedRefHistory/index.ts\n/**\n* Shorthand for [useRefHistory](https://vueuse.org/useRefHistory) with debounce filter.\n*\n* @see https://vueuse.org/useDebouncedRefHistory\n* @param source\n* @param options\n*/\nfunction useDebouncedRefHistory(source, options = {}) {\n\tconst filter = options.debounce ? debounceFilter(options.debounce) : void 0;\n\treturn { ...useRefHistory(source, {\n\t\t...options,\n\t\teventFilter: filter\n\t}) };\n}\n\n//#endregion\n//#region useDeviceMotion/index.ts\n/**\n* Reactive DeviceMotionEvent.\n*\n* @see https://vueuse.org/useDeviceMotion\n* @param options\n*/\nfunction useDeviceMotion(options = {}) {\n\tconst { window: window$1 = defaultWindow, requestPermissions = false, eventFilter = bypassFilter } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof DeviceMotionEvent !== \"undefined\");\n\tconst requirePermissions = /* @__PURE__ */ useSupported(() => isSupported.value && \"requestPermission\" in DeviceMotionEvent && typeof DeviceMotionEvent.requestPermission === \"function\");\n\tconst permissionGranted = shallowRef(false);\n\tconst acceleration = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tconst rotationRate = ref({\n\t\talpha: null,\n\t\tbeta: null,\n\t\tgamma: null\n\t});\n\tconst interval = shallowRef(0);\n\tconst accelerationIncludingGravity = ref({\n\t\tx: null,\n\t\ty: null,\n\t\tz: null\n\t});\n\tfunction init() {\n\t\tif (window$1) useEventListener(window$1, \"devicemotion\", createFilterWrapper(eventFilter, (event) => {\n\t\t\tvar _event$acceleration, _event$acceleration2, _event$acceleration3, _event$accelerationIn, _event$accelerationIn2, _event$accelerationIn3, _event$rotationRate, _event$rotationRate2, _event$rotationRate3;\n\t\t\tacceleration.value = {\n\t\t\t\tx: ((_event$acceleration = event.acceleration) === null || _event$acceleration === void 0 ? void 0 : _event$acceleration.x) || null,\n\t\t\t\ty: ((_event$acceleration2 = event.acceleration) === null || _event$acceleration2 === void 0 ? void 0 : _event$acceleration2.y) || null,\n\t\t\t\tz: ((_event$acceleration3 = event.acceleration) === null || _event$acceleration3 === void 0 ? void 0 : _event$acceleration3.z) || null\n\t\t\t};\n\t\t\taccelerationIncludingGravity.value = {\n\t\t\t\tx: ((_event$accelerationIn = event.accelerationIncludingGravity) === null || _event$accelerationIn === void 0 ? void 0 : _event$accelerationIn.x) || null,\n\t\t\t\ty: ((_event$accelerationIn2 = event.accelerationIncludingGravity) === null || _event$accelerationIn2 === void 0 ? void 0 : _event$accelerationIn2.y) || null,\n\t\t\t\tz: ((_event$accelerationIn3 = event.accelerationIncludingGravity) === null || _event$accelerationIn3 === void 0 ? void 0 : _event$accelerationIn3.z) || null\n\t\t\t};\n\t\t\trotationRate.value = {\n\t\t\t\talpha: ((_event$rotationRate = event.rotationRate) === null || _event$rotationRate === void 0 ? void 0 : _event$rotationRate.alpha) || null,\n\t\t\t\tbeta: ((_event$rotationRate2 = event.rotationRate) === null || _event$rotationRate2 === void 0 ? void 0 : _event$rotationRate2.beta) || null,\n\t\t\t\tgamma: ((_event$rotationRate3 = event.rotationRate) === null || _event$rotationRate3 === void 0 ? void 0 : _event$rotationRate3.gamma) || null\n\t\t\t};\n\t\t\tinterval.value = event.interval;\n\t\t}), { passive: true });\n\t}\n\tconst ensurePermissions = async () => {\n\t\tif (!requirePermissions.value) permissionGranted.value = true;\n\t\tif (permissionGranted.value) return;\n\t\tif (requirePermissions.value) {\n\t\t\tconst requestPermission = DeviceMotionEvent.requestPermission;\n\t\t\ttry {\n\t\t\t\tif (await requestPermission() === \"granted\") {\n\t\t\t\t\tpermissionGranted.value = true;\n\t\t\t\t\tinit();\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t}\n\t\t}\n\t};\n\tif (isSupported.value) if (requestPermissions && requirePermissions.value) ensurePermissions().then(() => init());\n\telse init();\n\treturn {\n\t\tacceleration,\n\t\taccelerationIncludingGravity,\n\t\trotationRate,\n\t\tinterval,\n\t\tisSupported,\n\t\trequirePermissions,\n\t\tensurePermissions,\n\t\tpermissionGranted\n\t};\n}\n\n//#endregion\n//#region useDeviceOrientation/index.ts\n/**\n* Reactive DeviceOrientationEvent.\n*\n* @see https://vueuse.org/useDeviceOrientation\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDeviceOrientation(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"DeviceOrientationEvent\" in window$1);\n\tconst isAbsolute = shallowRef(false);\n\tconst alpha = shallowRef(null);\n\tconst beta = shallowRef(null);\n\tconst gamma = shallowRef(null);\n\tif (window$1 && isSupported.value) useEventListener(window$1, \"deviceorientation\", (event) => {\n\t\tisAbsolute.value = event.absolute;\n\t\talpha.value = event.alpha;\n\t\tbeta.value = event.beta;\n\t\tgamma.value = event.gamma;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tisAbsolute,\n\t\talpha,\n\t\tbeta,\n\t\tgamma\n\t};\n}\n\n//#endregion\n//#region useDevicePixelRatio/index.ts\n/**\n* Reactively track `window.devicePixelRatio`.\n*\n* @see https://vueuse.org/useDevicePixelRatio\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDevicePixelRatio(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst pixelRatio = shallowRef(1);\n\tconst query = useMediaQuery(() => `(resolution: ${pixelRatio.value}dppx)`, options);\n\tlet stop = noop;\n\tif (window$1) stop = watchImmediate(query, () => pixelRatio.value = window$1.devicePixelRatio);\n\treturn {\n\t\tpixelRatio: readonly(pixelRatio),\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useDevicesList/index.ts\n/**\n* Reactive `enumerateDevices` listing available input/output devices\n*\n* @see https://vueuse.org/useDevicesList\n* @param options\n*/\nfunction useDevicesList(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator, requestPermissions = false, constraints = {\n\t\taudio: true,\n\t\tvideo: true\n\t}, onUpdated: onUpdated$1 } = options;\n\tconst devices = ref([]);\n\tconst videoInputs = computed(() => devices.value.filter((i) => i.kind === \"videoinput\"));\n\tconst audioInputs = computed(() => devices.value.filter((i) => i.kind === \"audioinput\"));\n\tconst audioOutputs = computed(() => devices.value.filter((i) => i.kind === \"audiooutput\"));\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && navigator$1.mediaDevices && navigator$1.mediaDevices.enumerateDevices);\n\tconst permissionGranted = shallowRef(false);\n\tlet stream;\n\tasync function update() {\n\t\tif (!isSupported.value) return;\n\t\tdevices.value = await navigator$1.mediaDevices.enumerateDevices();\n\t\tonUpdated$1 === null || onUpdated$1 === void 0 || onUpdated$1(devices.value);\n\t\tif (stream) {\n\t\t\tstream.getTracks().forEach((t) => t.stop());\n\t\t\tstream = null;\n\t\t}\n\t}\n\tasync function ensurePermissions() {\n\t\tconst deviceName = constraints.video ? \"camera\" : \"microphone\";\n\t\tif (!isSupported.value) return false;\n\t\tif (permissionGranted.value) return true;\n\t\tconst { state, query } = usePermission(deviceName, { controls: true });\n\t\tawait query();\n\t\tif (state.value !== \"granted\") {\n\t\t\tlet granted = true;\n\t\t\ttry {\n\t\t\t\tconst allDevices = await navigator$1.mediaDevices.enumerateDevices();\n\t\t\t\tconst hasCamera = allDevices.some((device) => device.kind === \"videoinput\");\n\t\t\t\tconst hasMicrophone = allDevices.some((device) => device.kind === \"audioinput\" || device.kind === \"audiooutput\");\n\t\t\t\tconstraints.video = hasCamera ? constraints.video : false;\n\t\t\t\tconstraints.audio = hasMicrophone ? constraints.audio : false;\n\t\t\t\tstream = await navigator$1.mediaDevices.getUserMedia(constraints);\n\t\t\t} catch (_unused) {\n\t\t\t\tstream = null;\n\t\t\t\tgranted = false;\n\t\t\t}\n\t\t\tupdate();\n\t\t\tpermissionGranted.value = granted;\n\t\t} else permissionGranted.value = true;\n\t\treturn permissionGranted.value;\n\t}\n\tif (isSupported.value) {\n\t\tif (requestPermissions) ensurePermissions();\n\t\tuseEventListener(navigator$1.mediaDevices, \"devicechange\", update, { passive: true });\n\t\tupdate();\n\t}\n\treturn {\n\t\tdevices,\n\t\tensurePermissions,\n\t\tpermissionGranted,\n\t\tvideoInputs,\n\t\taudioInputs,\n\t\taudioOutputs,\n\t\tisSupported\n\t};\n}\n\n//#endregion\n//#region useDisplayMedia/index.ts\n/**\n* Reactive `mediaDevices.getDisplayMedia` streaming\n*\n* @see https://vueuse.org/useDisplayMedia\n* @param options\n*/\nfunction useDisplayMedia(options = {}) {\n\tvar _options$enabled;\n\tconst enabled = shallowRef((_options$enabled = options.enabled) !== null && _options$enabled !== void 0 ? _options$enabled : false);\n\tconst video = options.video;\n\tconst audio = options.audio;\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tvar _navigator$mediaDevic;\n\t\treturn navigator$1 === null || navigator$1 === void 0 || (_navigator$mediaDevic = navigator$1.mediaDevices) === null || _navigator$mediaDevic === void 0 ? void 0 : _navigator$mediaDevic.getDisplayMedia;\n\t});\n\tconst constraint = {\n\t\taudio,\n\t\tvideo\n\t};\n\tconst stream = shallowRef();\n\tasync function _start() {\n\t\tvar _stream$value;\n\t\tif (!isSupported.value || stream.value) return;\n\t\tstream.value = await navigator$1.mediaDevices.getDisplayMedia(constraint);\n\t\t(_stream$value = stream.value) === null || _stream$value === void 0 || _stream$value.getTracks().forEach((t) => useEventListener(t, \"ended\", stop, { passive: true }));\n\t\treturn stream.value;\n\t}\n\tasync function _stop() {\n\t\tvar _stream$value2;\n\t\t(_stream$value2 = stream.value) === null || _stream$value2 === void 0 || _stream$value2.getTracks().forEach((t) => t.stop());\n\t\tstream.value = void 0;\n\t}\n\tfunction stop() {\n\t\t_stop();\n\t\tenabled.value = false;\n\t}\n\tasync function start() {\n\t\tawait _start();\n\t\tif (stream.value) enabled.value = true;\n\t\treturn stream.value;\n\t}\n\twatch(enabled, (v) => {\n\t\tif (v) _start();\n\t\telse _stop();\n\t}, { immediate: true });\n\treturn {\n\t\tisSupported,\n\t\tstream,\n\t\tstart,\n\t\tstop,\n\t\tenabled\n\t};\n}\n\n//#endregion\n//#region useDocumentVisibility/index.ts\n/**\n* Reactively track `document.visibilityState`.\n*\n* @see https://vueuse.org/useDocumentVisibility\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useDocumentVisibility(options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tif (!document$1) return shallowRef(\"visible\");\n\tconst visibility = shallowRef(document$1.visibilityState);\n\tuseEventListener(document$1, \"visibilitychange\", () => {\n\t\tvisibility.value = document$1.visibilityState;\n\t}, { passive: true });\n\treturn visibility;\n}\n\n//#endregion\n//#region useDraggable/index.ts\n/**\n* Make elements draggable.\n*\n* @see https://vueuse.org/useDraggable\n* @param target\n* @param options\n*/\nfunction useDraggable(target, options = {}) {\n\tvar _toValue;\n\tconst { pointerTypes, preventDefault: preventDefault$1, stopPropagation, exact, onMove, onEnd, onStart, initialValue, axis = \"both\", draggingElement = defaultWindow, containerElement, handle: draggingHandle = target, buttons = [0] } = options;\n\tconst position = ref((_toValue = toValue(initialValue)) !== null && _toValue !== void 0 ? _toValue : {\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst pressedDelta = ref();\n\tconst filterEvent = (e) => {\n\t\tif (pointerTypes) return pointerTypes.includes(e.pointerType);\n\t\treturn true;\n\t};\n\tconst handleEvent = (e) => {\n\t\tif (toValue(preventDefault$1)) e.preventDefault();\n\t\tif (toValue(stopPropagation)) e.stopPropagation();\n\t};\n\tconst start = (e) => {\n\t\tvar _container$getBoundin;\n\t\tif (!toValue(buttons).includes(e.button)) return;\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (toValue(exact) && e.target !== toValue(target)) return;\n\t\tconst container = toValue(containerElement);\n\t\tconst containerRect = container === null || container === void 0 || (_container$getBoundin = container.getBoundingClientRect) === null || _container$getBoundin === void 0 ? void 0 : _container$getBoundin.call(container);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tconst pos = {\n\t\t\tx: e.clientX - (container ? targetRect.left - containerRect.left + container.scrollLeft : targetRect.left),\n\t\t\ty: e.clientY - (container ? targetRect.top - containerRect.top + container.scrollTop : targetRect.top)\n\t\t};\n\t\tif ((onStart === null || onStart === void 0 ? void 0 : onStart(pos, e)) === false) return;\n\t\tpressedDelta.value = pos;\n\t\thandleEvent(e);\n\t};\n\tconst move = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tconst container = toValue(containerElement);\n\t\tconst targetRect = toValue(target).getBoundingClientRect();\n\t\tlet { x, y } = position.value;\n\t\tif (axis === \"x\" || axis === \"both\") {\n\t\t\tx = e.clientX - pressedDelta.value.x;\n\t\t\tif (container) x = Math.min(Math.max(0, x), container.scrollWidth - targetRect.width);\n\t\t}\n\t\tif (axis === \"y\" || axis === \"both\") {\n\t\t\ty = e.clientY - pressedDelta.value.y;\n\t\t\tif (container) y = Math.min(Math.max(0, y), container.scrollHeight - targetRect.height);\n\t\t}\n\t\tposition.value = {\n\t\t\tx,\n\t\t\ty\n\t\t};\n\t\tonMove === null || onMove === void 0 || onMove(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tconst end = (e) => {\n\t\tif (toValue(options.disabled) || !filterEvent(e)) return;\n\t\tif (!pressedDelta.value) return;\n\t\tpressedDelta.value = void 0;\n\t\tonEnd === null || onEnd === void 0 || onEnd(position.value, e);\n\t\thandleEvent(e);\n\t};\n\tif (isClient) {\n\t\tconst config = () => {\n\t\t\tvar _options$capture;\n\t\t\treturn {\n\t\t\t\tcapture: (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : true,\n\t\t\t\tpassive: !toValue(preventDefault$1)\n\t\t\t};\n\t\t};\n\t\tuseEventListener(draggingHandle, \"pointerdown\", start, config);\n\t\tuseEventListener(draggingElement, \"pointermove\", move, config);\n\t\tuseEventListener(draggingElement, \"pointerup\", end, config);\n\t}\n\treturn {\n\t\t...toRefs(position),\n\t\tposition,\n\t\tisDragging: computed(() => !!pressedDelta.value),\n\t\tstyle: computed(() => `left:${position.value.x}px;top:${position.value.y}px;`)\n\t};\n}\n\n//#endregion\n//#region useDropZone/index.ts\nfunction useDropZone(target, options = {}) {\n\tconst isOverDropZone = shallowRef(false);\n\tconst files = shallowRef(null);\n\tlet counter = 0;\n\tlet isValid = true;\n\tif (isClient) {\n\t\tvar _options$multiple, _options$preventDefau;\n\t\tconst _options = typeof options === \"function\" ? { onDrop: options } : options;\n\t\tconst multiple = (_options$multiple = _options.multiple) !== null && _options$multiple !== void 0 ? _options$multiple : true;\n\t\tconst preventDefaultForUnhandled = (_options$preventDefau = _options.preventDefaultForUnhandled) !== null && _options$preventDefau !== void 0 ? _options$preventDefau : false;\n\t\tconst getFiles = (event) => {\n\t\t\tvar _event$dataTransfer$f, _event$dataTransfer;\n\t\t\tconst list = Array.from((_event$dataTransfer$f = (_event$dataTransfer = event.dataTransfer) === null || _event$dataTransfer === void 0 ? void 0 : _event$dataTransfer.files) !== null && _event$dataTransfer$f !== void 0 ? _event$dataTransfer$f : []);\n\t\t\treturn list.length === 0 ? null : multiple ? list : [list[0]];\n\t\t};\n\t\tconst checkDataTypes = (types) => {\n\t\t\tconst dataTypes = unref(_options.dataTypes);\n\t\t\tif (typeof dataTypes === \"function\") return dataTypes(types);\n\t\t\tif (!(dataTypes === null || dataTypes === void 0 ? void 0 : dataTypes.length)) return true;\n\t\t\tif (types.length === 0) return false;\n\t\t\treturn types.every((type) => dataTypes.some((allowedType) => type.includes(allowedType)));\n\t\t};\n\t\tconst checkValidity = (items) => {\n\t\t\tconst dataTypesValid = checkDataTypes(Array.from(items !== null && items !== void 0 ? items : []).map((item) => item.type));\n\t\t\tconst multipleFilesValid = multiple || items.length <= 1;\n\t\t\treturn dataTypesValid && multipleFilesValid;\n\t\t};\n\t\tconst isSafari = () => /^(?:(?!chrome|android).)*safari/i.test(navigator.userAgent) && !(\"chrome\" in window);\n\t\tconst handleDragEvent = (event, eventType) => {\n\t\t\tvar _event$dataTransfer2, _ref;\n\t\t\tconst dataTransferItemList = (_event$dataTransfer2 = event.dataTransfer) === null || _event$dataTransfer2 === void 0 ? void 0 : _event$dataTransfer2.items;\n\t\t\tisValid = (_ref = dataTransferItemList && checkValidity(dataTransferItemList)) !== null && _ref !== void 0 ? _ref : false;\n\t\t\tif (preventDefaultForUnhandled) event.preventDefault();\n\t\t\tif (!isSafari() && !isValid) {\n\t\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"none\";\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tevent.preventDefault();\n\t\t\tif (event.dataTransfer) event.dataTransfer.dropEffect = \"copy\";\n\t\t\tconst currentFiles = getFiles(event);\n\t\t\tswitch (eventType) {\n\t\t\t\tcase \"enter\":\n\t\t\t\t\tvar _options$onEnter;\n\t\t\t\t\tcounter += 1;\n\t\t\t\t\tisOverDropZone.value = true;\n\t\t\t\t\t(_options$onEnter = _options.onEnter) === null || _options$onEnter === void 0 || _options$onEnter.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"over\":\n\t\t\t\t\tvar _options$onOver;\n\t\t\t\t\t(_options$onOver = _options.onOver) === null || _options$onOver === void 0 || _options$onOver.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"leave\":\n\t\t\t\t\tvar _options$onLeave;\n\t\t\t\t\tcounter -= 1;\n\t\t\t\t\tif (counter === 0) isOverDropZone.value = false;\n\t\t\t\t\t(_options$onLeave = _options.onLeave) === null || _options$onLeave === void 0 || _options$onLeave.call(_options, null, event);\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"drop\":\n\t\t\t\t\tcounter = 0;\n\t\t\t\t\tisOverDropZone.value = false;\n\t\t\t\t\tif (isValid) {\n\t\t\t\t\t\tvar _options$onDrop;\n\t\t\t\t\t\tfiles.value = currentFiles;\n\t\t\t\t\t\t(_options$onDrop = _options.onDrop) === null || _options$onDrop === void 0 || _options$onDrop.call(_options, currentFiles, event);\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t};\n\t\tuseEventListener(target, \"dragenter\", (event) => handleDragEvent(event, \"enter\"));\n\t\tuseEventListener(target, \"dragover\", (event) => handleDragEvent(event, \"over\"));\n\t\tuseEventListener(target, \"dragleave\", (event) => handleDragEvent(event, \"leave\"));\n\t\tuseEventListener(target, \"drop\", (event) => handleDragEvent(event, \"drop\"));\n\t}\n\treturn {\n\t\tfiles,\n\t\tisOverDropZone\n\t};\n}\n\n//#endregion\n//#region useResizeObserver/index.ts\n/**\n* Reports changes to the dimensions of an Element's content or the border-box\n*\n* @see https://vueuse.org/useResizeObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useResizeObserver(target, callback, options = {}) {\n\tconst { window: window$1 = defaultWindow,...observerOptions } = options;\n\tlet observer;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"ResizeObserver\" in window$1);\n\tconst cleanup = () => {\n\t\tif (observer) {\n\t\t\tobserver.disconnect();\n\t\t\tobserver = void 0;\n\t\t}\n\t};\n\tconst stopWatch = watch(computed(() => {\n\t\tconst _targets = toValue(target);\n\t\treturn Array.isArray(_targets) ? _targets.map((el) => unrefElement(el)) : [unrefElement(_targets)];\n\t}), (els) => {\n\t\tcleanup();\n\t\tif (isSupported.value && window$1) {\n\t\t\tobserver = new ResizeObserver(callback);\n\t\t\tfor (const _el of els) if (_el) observer.observe(_el, observerOptions);\n\t\t}\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useElementBounding/index.ts\n/**\n* Reactive bounding box of an HTML element.\n*\n* @see https://vueuse.org/useElementBounding\n* @param target\n*/\nfunction useElementBounding(target, options = {}) {\n\tconst { reset = true, windowResize = true, windowScroll = true, immediate = true, updateTiming = \"sync\" } = options;\n\tconst height = shallowRef(0);\n\tconst bottom = shallowRef(0);\n\tconst left = shallowRef(0);\n\tconst right = shallowRef(0);\n\tconst top = shallowRef(0);\n\tconst width = shallowRef(0);\n\tconst x = shallowRef(0);\n\tconst y = shallowRef(0);\n\tfunction recalculate() {\n\t\tconst el = unrefElement(target);\n\t\tif (!el) {\n\t\t\tif (reset) {\n\t\t\t\theight.value = 0;\n\t\t\t\tbottom.value = 0;\n\t\t\t\tleft.value = 0;\n\t\t\t\tright.value = 0;\n\t\t\t\ttop.value = 0;\n\t\t\t\twidth.value = 0;\n\t\t\t\tx.value = 0;\n\t\t\t\ty.value = 0;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tconst rect = el.getBoundingClientRect();\n\t\theight.value = rect.height;\n\t\tbottom.value = rect.bottom;\n\t\tleft.value = rect.left;\n\t\tright.value = rect.right;\n\t\ttop.value = rect.top;\n\t\twidth.value = rect.width;\n\t\tx.value = rect.x;\n\t\ty.value = rect.y;\n\t}\n\tfunction update() {\n\t\tif (updateTiming === \"sync\") recalculate();\n\t\telse if (updateTiming === \"next-frame\") requestAnimationFrame(() => recalculate());\n\t}\n\tuseResizeObserver(target, update);\n\twatch(() => unrefElement(target), (ele) => !ele && update());\n\tuseMutationObserver(target, update, { attributeFilter: [\"style\", \"class\"] });\n\tif (windowScroll) useEventListener(\"scroll\", update, {\n\t\tcapture: true,\n\t\tpassive: true\n\t});\n\tif (windowResize) useEventListener(\"resize\", update, { passive: true });\n\ttryOnMounted(() => {\n\t\tif (immediate) update();\n\t});\n\treturn {\n\t\theight,\n\t\tbottom,\n\t\tleft,\n\t\tright,\n\t\ttop,\n\t\twidth,\n\t\tx,\n\t\ty,\n\t\tupdate\n\t};\n}\n\n//#endregion\n//#region useElementByPoint/index.ts\n/**\n* Reactive element by point.\n*\n* @see https://vueuse.org/useElementByPoint\n* @param options - UseElementByPointOptions\n*/\nfunction useElementByPoint(options) {\n\tconst { x, y, document: document$1 = defaultDocument, multiple, interval = \"requestAnimationFrame\", immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => {\n\t\tif (toValue(multiple)) return document$1 && \"elementsFromPoint\" in document$1;\n\t\treturn document$1 && \"elementFromPoint\" in document$1;\n\t});\n\tconst element = shallowRef(null);\n\tconst cb = () => {\n\t\tvar _document$elementsFro, _document$elementFrom;\n\t\telement.value = toValue(multiple) ? (_document$elementsFro = document$1 === null || document$1 === void 0 ? void 0 : document$1.elementsFromPoint(toValue(x), toValue(y))) !== null && _document$elementsFro !== void 0 ? _document$elementsFro : [] : (_document$elementFrom = document$1 === null || document$1 === void 0 ? void 0 : document$1.elementFromPoint(toValue(x), toValue(y))) !== null && _document$elementFrom !== void 0 ? _document$elementFrom : null;\n\t};\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\t...interval === \"requestAnimationFrame\" ? useRafFn(cb, { immediate }) : useIntervalFn(cb, interval, { immediate })\n\t};\n}\n\n//#endregion\n//#region useElementHover/index.ts\nfunction useElementHover(el, options = {}) {\n\tconst { delayEnter = 0, delayLeave = 0, triggerOnRemoval = false, window: window$1 = defaultWindow } = options;\n\tconst isHovered = shallowRef(false);\n\tlet timer;\n\tconst toggle = (entering) => {\n\t\tconst delay = entering ? delayEnter : delayLeave;\n\t\tif (timer) {\n\t\t\tclearTimeout(timer);\n\t\t\ttimer = void 0;\n\t\t}\n\t\tif (delay) timer = setTimeout(() => isHovered.value = entering, delay);\n\t\telse isHovered.value = entering;\n\t};\n\tif (!window$1) return isHovered;\n\tuseEventListener(el, \"mouseenter\", () => toggle(true), { passive: true });\n\tuseEventListener(el, \"mouseleave\", () => toggle(false), { passive: true });\n\tif (triggerOnRemoval) onElementRemoval(computed(() => unrefElement(el)), () => toggle(false));\n\treturn isHovered;\n}\n\n//#endregion\n//#region useElementSize/index.ts\n/**\n* Reactive size of an HTML element.\n*\n* @see https://vueuse.org/useElementSize\n*/\nfunction useElementSize(target, initialSize = {\n\twidth: 0,\n\theight: 0\n}, options = {}) {\n\tconst { window: window$1 = defaultWindow, box = \"content-box\" } = options;\n\tconst isSVG = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) === null || _unrefElement === void 0 || (_unrefElement = _unrefElement.namespaceURI) === null || _unrefElement === void 0 ? void 0 : _unrefElement.includes(\"svg\");\n\t});\n\tconst width = shallowRef(initialSize.width);\n\tconst height = shallowRef(initialSize.height);\n\tconst { stop: stop1 } = useResizeObserver(target, ([entry]) => {\n\t\tconst boxSize = box === \"border-box\" ? entry.borderBoxSize : box === \"content-box\" ? entry.contentBoxSize : entry.devicePixelContentBoxSize;\n\t\tif (window$1 && isSVG.value) {\n\t\t\tconst $elem = unrefElement(target);\n\t\t\tif ($elem) {\n\t\t\t\tconst rect = $elem.getBoundingClientRect();\n\t\t\t\twidth.value = rect.width;\n\t\t\t\theight.value = rect.height;\n\t\t\t}\n\t\t} else if (boxSize) {\n\t\t\tconst formatBoxSize = toArray(boxSize);\n\t\t\twidth.value = formatBoxSize.reduce((acc, { inlineSize }) => acc + inlineSize, 0);\n\t\t\theight.value = formatBoxSize.reduce((acc, { blockSize }) => acc + blockSize, 0);\n\t\t} else {\n\t\t\twidth.value = entry.contentRect.width;\n\t\t\theight.value = entry.contentRect.height;\n\t\t}\n\t}, options);\n\ttryOnMounted(() => {\n\t\tconst ele = unrefElement(target);\n\t\tif (ele) {\n\t\t\twidth.value = \"offsetWidth\" in ele ? ele.offsetWidth : initialSize.width;\n\t\t\theight.value = \"offsetHeight\" in ele ? ele.offsetHeight : initialSize.height;\n\t\t}\n\t});\n\tconst stop2 = watch(() => unrefElement(target), (ele) => {\n\t\twidth.value = ele ? initialSize.width : 0;\n\t\theight.value = ele ? initialSize.height : 0;\n\t});\n\tfunction stop() {\n\t\tstop1();\n\t\tstop2();\n\t}\n\treturn {\n\t\twidth,\n\t\theight,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useIntersectionObserver/index.ts\n/**\n* Detects that a target element's visibility.\n*\n* @see https://vueuse.org/useIntersectionObserver\n* @param target\n* @param callback\n* @param options\n*/\nfunction useIntersectionObserver(target, callback, options = {}) {\n\tconst { root, rootMargin = \"0px\", threshold = 0, window: window$1 = defaultWindow, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"IntersectionObserver\" in window$1);\n\tconst targets = computed(() => {\n\t\treturn toArray(toValue(target)).map(unrefElement).filter(notNullish);\n\t});\n\tlet cleanup = noop;\n\tconst isActive = shallowRef(immediate);\n\tconst stopWatch = isSupported.value ? watch(() => [\n\t\ttargets.value,\n\t\tunrefElement(root),\n\t\tisActive.value\n\t], ([targets$1, root$1]) => {\n\t\tcleanup();\n\t\tif (!isActive.value) return;\n\t\tif (!targets$1.length) return;\n\t\tconst observer = new IntersectionObserver(callback, {\n\t\t\troot: unrefElement(root$1),\n\t\t\trootMargin,\n\t\t\tthreshold\n\t\t});\n\t\ttargets$1.forEach((el) => el && observer.observe(el));\n\t\tcleanup = () => {\n\t\t\tobserver.disconnect();\n\t\t\tcleanup = noop;\n\t\t};\n\t}, {\n\t\timmediate,\n\t\tflush: \"post\"\n\t}) : noop;\n\tconst stop = () => {\n\t\tcleanup();\n\t\tstopWatch();\n\t\tisActive.value = false;\n\t};\n\ttryOnScopeDispose(stop);\n\treturn {\n\t\tisSupported,\n\t\tisActive,\n\t\tpause() {\n\t\t\tcleanup();\n\t\t\tisActive.value = false;\n\t\t},\n\t\tresume() {\n\t\t\tisActive.value = true;\n\t\t},\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useElementVisibility/index.ts\n/**\n* Tracks the visibility of an element within the viewport.\n*\n* @see https://vueuse.org/useElementVisibility\n*/\nfunction useElementVisibility(element, options = {}) {\n\tconst { window: window$1 = defaultWindow, scrollTarget, threshold = 0, rootMargin, once = false } = options;\n\tconst elementIsVisible = shallowRef(false);\n\tconst { stop } = useIntersectionObserver(element, (intersectionObserverEntries) => {\n\t\tlet isIntersecting = elementIsVisible.value;\n\t\tlet latestTime = 0;\n\t\tfor (const entry of intersectionObserverEntries) if (entry.time >= latestTime) {\n\t\t\tlatestTime = entry.time;\n\t\t\tisIntersecting = entry.isIntersecting;\n\t\t}\n\t\telementIsVisible.value = isIntersecting;\n\t\tif (once) watchOnce(elementIsVisible, () => {\n\t\t\tstop();\n\t\t});\n\t}, {\n\t\troot: scrollTarget,\n\t\twindow: window$1,\n\t\tthreshold,\n\t\trootMargin: toValue(rootMargin)\n\t});\n\treturn elementIsVisible;\n}\n\n//#endregion\n//#region useEventBus/internal.ts\nconst events = /* @__PURE__ */ new Map();\n\n//#endregion\n//#region useEventBus/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useEventBus(key) {\n\tconst scope = getCurrentScope();\n\tfunction on(listener) {\n\t\tvar _scope$cleanups;\n\t\tconst listeners = events.get(key) || /* @__PURE__ */ new Set();\n\t\tlisteners.add(listener);\n\t\tevents.set(key, listeners);\n\t\tconst _off = () => off(listener);\n\t\tscope === null || scope === void 0 || (_scope$cleanups = scope.cleanups) === null || _scope$cleanups === void 0 || _scope$cleanups.push(_off);\n\t\treturn _off;\n\t}\n\tfunction once(listener) {\n\t\tfunction _listener(...args) {\n\t\t\toff(_listener);\n\t\t\tlistener(...args);\n\t\t}\n\t\treturn on(_listener);\n\t}\n\tfunction off(listener) {\n\t\tconst listeners = events.get(key);\n\t\tif (!listeners) return;\n\t\tlisteners.delete(listener);\n\t\tif (!listeners.size) reset();\n\t}\n\tfunction reset() {\n\t\tevents.delete(key);\n\t}\n\tfunction emit(event, payload) {\n\t\tvar _events$get;\n\t\t(_events$get = events.get(key)) === null || _events$get === void 0 || _events$get.forEach((v) => v(event, payload));\n\t}\n\treturn {\n\t\ton,\n\t\tonce,\n\t\toff,\n\t\temit,\n\t\treset\n\t};\n}\n\n//#endregion\n//#region useEventSource/index.ts\nfunction resolveNestedOptions$1(options) {\n\tif (options === true) return {};\n\treturn options;\n}\n/**\n* Reactive wrapper for EventSource.\n*\n* @see https://vueuse.org/useEventSource\n* @see https://developer.mozilla.org/en-US/docs/Web/API/EventSource/EventSource EventSource\n* @param url\n* @param events\n* @param options\n*/\nfunction useEventSource(url, events$1 = [], options = {}) {\n\tconst event = shallowRef(null);\n\tconst data = shallowRef(null);\n\tconst status = shallowRef(\"CONNECTING\");\n\tconst eventSource = ref(null);\n\tconst error = shallowRef(null);\n\tconst urlRef = toRef(url);\n\tconst lastEventId = shallowRef(null);\n\tlet explicitlyClosed = false;\n\tlet retried = 0;\n\tconst { withCredentials = false, immediate = true, autoConnect = true, autoReconnect, serializer = { read: (v) => v } } = options;\n\tconst close = () => {\n\t\tif (isClient && eventSource.value) {\n\t\t\teventSource.value.close();\n\t\t\teventSource.value = null;\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\texplicitlyClosed = true;\n\t\t}\n\t};\n\tconst _init = () => {\n\t\tif (explicitlyClosed || typeof urlRef.value === \"undefined\") return;\n\t\tconst es = new EventSource(urlRef.value, { withCredentials });\n\t\tstatus.value = \"CONNECTING\";\n\t\teventSource.value = es;\n\t\tes.onopen = () => {\n\t\t\tstatus.value = \"OPEN\";\n\t\t\terror.value = null;\n\t\t};\n\t\tes.onerror = (e) => {\n\t\t\tstatus.value = \"CLOSED\";\n\t\t\terror.value = e;\n\t\t\tif (es.readyState === 2 && !explicitlyClosed && autoReconnect) {\n\t\t\t\tes.close();\n\t\t\t\tconst { retries = -1, delay = 1e3, onFailed } = resolveNestedOptions$1(autoReconnect);\n\t\t\t\tretried += 1;\n\t\t\t\tif (typeof retries === \"number\" && (retries < 0 || retried < retries)) setTimeout(_init, delay);\n\t\t\t\telse if (typeof retries === \"function\" && retries()) setTimeout(_init, delay);\n\t\t\t\telse onFailed === null || onFailed === void 0 || onFailed();\n\t\t\t}\n\t\t};\n\t\tes.onmessage = (e) => {\n\t\t\tvar _serializer$read;\n\t\t\tevent.value = null;\n\t\t\tdata.value = (_serializer$read = serializer.read(e.data)) !== null && _serializer$read !== void 0 ? _serializer$read : null;\n\t\t\tlastEventId.value = e.lastEventId;\n\t\t};\n\t\tfor (const event_name of events$1) useEventListener(es, event_name, (e) => {\n\t\t\tvar _serializer$read2, _e$lastEventId;\n\t\t\tevent.value = event_name;\n\t\t\tdata.value = (_serializer$read2 = serializer.read(e.data)) !== null && _serializer$read2 !== void 0 ? _serializer$read2 : null;\n\t\t\tlastEventId.value = (_e$lastEventId = e.lastEventId) !== null && _e$lastEventId !== void 0 ? _e$lastEventId : null;\n\t\t}, { passive: true });\n\t};\n\tconst open = () => {\n\t\tif (!isClient) return;\n\t\tclose();\n\t\texplicitlyClosed = false;\n\t\tretried = 0;\n\t\t_init();\n\t};\n\tif (immediate) open();\n\tif (autoConnect) watch(urlRef, open);\n\ttryOnScopeDispose(close);\n\treturn {\n\t\teventSource,\n\t\tevent,\n\t\tdata,\n\t\tstatus,\n\t\terror,\n\t\topen,\n\t\tclose,\n\t\tlastEventId\n\t};\n}\n\n//#endregion\n//#region useEyeDropper/index.ts\n/**\n* Reactive [EyeDropper API](https://developer.mozilla.org/en-US/docs/Web/API/EyeDropper_API)\n*\n* @see https://vueuse.org/useEyeDropper\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useEyeDropper(options = {}) {\n\tconst { initialValue = \"\" } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof window !== \"undefined\" && \"EyeDropper\" in window);\n\tconst sRGBHex = shallowRef(initialValue);\n\tasync function open(openOptions) {\n\t\tif (!isSupported.value) return;\n\t\tconst result = await new window.EyeDropper().open(openOptions);\n\t\tsRGBHex.value = result.sRGBHex;\n\t\treturn result;\n\t}\n\treturn {\n\t\tisSupported,\n\t\tsRGBHex,\n\t\topen\n\t};\n}\n\n//#endregion\n//#region useFavicon/index.ts\nfunction useFavicon(newIcon = null, options = {}) {\n\tconst { baseUrl = \"\", rel = \"icon\", document: document$1 = defaultDocument } = options;\n\tconst favicon = toRef(newIcon);\n\tconst applyIcon = (icon) => {\n\t\tconst elements = document$1 === null || document$1 === void 0 ? void 0 : document$1.head.querySelectorAll(`link[rel*=\"${rel}\"]`);\n\t\tif (!elements || elements.length === 0) {\n\t\t\tconst link = document$1 === null || document$1 === void 0 ? void 0 : document$1.createElement(\"link\");\n\t\t\tif (link) {\n\t\t\t\tlink.rel = rel;\n\t\t\t\tlink.href = `${baseUrl}${icon}`;\n\t\t\t\tlink.type = `image/${icon.split(\".\").pop()}`;\n\t\t\t\tdocument$1 === null || document$1 === void 0 || document$1.head.append(link);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\telements === null || elements === void 0 || elements.forEach((el) => el.href = `${baseUrl}${icon}`);\n\t};\n\twatch(favicon, (i, o) => {\n\t\tif (typeof i === \"string\" && i !== o) applyIcon(i);\n\t}, { immediate: true });\n\treturn favicon;\n}\n\n//#endregion\n//#region useFetch/index.ts\nconst payloadMapping = {\n\tjson: \"application/json\",\n\ttext: \"text/plain\"\n};\n/**\n* !!!IMPORTANT!!!\n*\n* If you update the UseFetchOptions interface, be sure to update this object\n* to include the new options\n*/\nfunction isFetchOptions(obj) {\n\treturn obj && containsProp(obj, \"immediate\", \"refetch\", \"initialData\", \"timeout\", \"beforeFetch\", \"afterFetch\", \"onFetchError\", \"fetch\", \"updateDataOnError\");\n}\nconst reAbsolute = /^(?:[a-z][a-z\\d+\\-.]*:)?\\/\\//i;\nfunction isAbsoluteURL(url) {\n\treturn reAbsolute.test(url);\n}\nfunction headersToObject(headers) {\n\tif (typeof Headers !== \"undefined\" && headers instanceof Headers) return Object.fromEntries(headers.entries());\n\treturn headers;\n}\nfunction combineCallbacks(combination, ...callbacks) {\n\tif (combination === \"overwrite\") return async (ctx) => {\n\t\tlet callback;\n\t\tfor (let i = callbacks.length - 1; i >= 0; i--) if (callbacks[i] != null) {\n\t\t\tcallback = callbacks[i];\n\t\t\tbreak;\n\t\t}\n\t\tif (callback) return {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n\telse return async (ctx) => {\n\t\tfor (const callback of callbacks) if (callback) ctx = {\n\t\t\t...ctx,\n\t\t\t...await callback(ctx)\n\t\t};\n\t\treturn ctx;\n\t};\n}\nfunction createFetch(config = {}) {\n\tconst _combination = config.combination || \"chain\";\n\tconst _options = config.options || {};\n\tconst _fetchOptions = config.fetchOptions || {};\n\tfunction useFactoryFetch(url, ...args) {\n\t\tconst computedUrl = computed(() => {\n\t\t\tconst baseUrl = toValue(config.baseUrl);\n\t\t\tconst targetUrl = toValue(url);\n\t\t\treturn baseUrl && !isAbsoluteURL(targetUrl) ? joinPaths(baseUrl, targetUrl) : targetUrl;\n\t\t});\n\t\tlet options = _options;\n\t\tlet fetchOptions = _fetchOptions;\n\t\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t\t...options,\n\t\t\t...args[0],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[0].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[0].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[0].onFetchError)\n\t\t};\n\t\telse fetchOptions = {\n\t\t\t...fetchOptions,\n\t\t\t...args[0],\n\t\t\theaders: {\n\t\t\t\t...headersToObject(fetchOptions.headers) || {},\n\t\t\t\t...headersToObject(args[0].headers) || {}\n\t\t\t}\n\t\t};\n\t\tif (args.length > 1 && isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1],\n\t\t\tbeforeFetch: combineCallbacks(_combination, _options.beforeFetch, args[1].beforeFetch),\n\t\t\tafterFetch: combineCallbacks(_combination, _options.afterFetch, args[1].afterFetch),\n\t\t\tonFetchError: combineCallbacks(_combination, _options.onFetchError, args[1].onFetchError)\n\t\t};\n\t\treturn useFetch(computedUrl, fetchOptions, options);\n\t}\n\treturn useFactoryFetch;\n}\nfunction useFetch(url, ...args) {\n\tvar _defaultWindow$fetch, _globalThis;\n\tconst supportsAbort = typeof AbortController === \"function\";\n\tlet fetchOptions = {};\n\tlet options = {\n\t\timmediate: true,\n\t\trefetch: false,\n\t\ttimeout: 0,\n\t\tupdateDataOnError: false\n\t};\n\tconst config = {\n\t\tmethod: \"GET\",\n\t\ttype: \"text\",\n\t\tpayload: void 0\n\t};\n\tif (args.length > 0) if (isFetchOptions(args[0])) options = {\n\t\t...options,\n\t\t...args[0]\n\t};\n\telse fetchOptions = args[0];\n\tif (args.length > 1) {\n\t\tif (isFetchOptions(args[1])) options = {\n\t\t\t...options,\n\t\t\t...args[1]\n\t\t};\n\t}\n\tconst { fetch = (_defaultWindow$fetch = defaultWindow === null || defaultWindow === void 0 ? void 0 : defaultWindow.fetch) !== null && _defaultWindow$fetch !== void 0 ? _defaultWindow$fetch : (_globalThis = globalThis) === null || _globalThis === void 0 ? void 0 : _globalThis.fetch, initialData, timeout } = options;\n\tconst responseEvent = createEventHook();\n\tconst errorEvent = createEventHook();\n\tconst finallyEvent = createEventHook();\n\tconst isFinished = shallowRef(false);\n\tconst isFetching = shallowRef(false);\n\tconst aborted = shallowRef(false);\n\tconst statusCode = shallowRef(null);\n\tconst response = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst data = shallowRef(initialData || null);\n\tconst canAbort = computed(() => supportsAbort && isFetching.value);\n\tlet controller;\n\tlet timer;\n\tconst abort = (reason) => {\n\t\tif (supportsAbort) {\n\t\t\tcontroller === null || controller === void 0 || controller.abort(reason);\n\t\t\tcontroller = new AbortController();\n\t\t\tcontroller.signal.onabort = () => aborted.value = true;\n\t\t\tfetchOptions = {\n\t\t\t\t...fetchOptions,\n\t\t\t\tsignal: controller.signal\n\t\t\t};\n\t\t}\n\t};\n\tconst loading = (isLoading) => {\n\t\tisFetching.value = isLoading;\n\t\tisFinished.value = !isLoading;\n\t};\n\tif (timeout) timer = useTimeoutFn(abort, timeout, { immediate: false });\n\tlet executeCounter = 0;\n\tconst execute = async (throwOnFailed = false) => {\n\t\tvar _context$options;\n\t\tabort();\n\t\tloading(true);\n\t\terror.value = null;\n\t\tstatusCode.value = null;\n\t\taborted.value = false;\n\t\texecuteCounter += 1;\n\t\tconst currentExecuteCounter = executeCounter;\n\t\tconst defaultFetchOptions = {\n\t\t\tmethod: config.method,\n\t\t\theaders: {}\n\t\t};\n\t\tconst payload = toValue(config.payload);\n\t\tif (payload) {\n\t\t\tvar _payloadMapping$confi;\n\t\t\tconst headers = headersToObject(defaultFetchOptions.headers);\n\t\t\tconst proto = Object.getPrototypeOf(payload);\n\t\t\tif (!config.payloadType && payload && (proto === Object.prototype || Array.isArray(proto)) && !(payload instanceof FormData)) config.payloadType = \"json\";\n\t\t\tif (config.payloadType) headers[\"Content-Type\"] = (_payloadMapping$confi = payloadMapping[config.payloadType]) !== null && _payloadMapping$confi !== void 0 ? _payloadMapping$confi : config.payloadType;\n\t\t\tdefaultFetchOptions.body = config.payloadType === \"json\" ? JSON.stringify(payload) : payload;\n\t\t}\n\t\tlet isCanceled = false;\n\t\tconst context = {\n\t\t\turl: toValue(url),\n\t\t\toptions: {\n\t\t\t\t...defaultFetchOptions,\n\t\t\t\t...fetchOptions\n\t\t\t},\n\t\t\tcancel: () => {\n\t\t\t\tisCanceled = true;\n\t\t\t}\n\t\t};\n\t\tif (options.beforeFetch) Object.assign(context, await options.beforeFetch(context));\n\t\tif (isCanceled || !fetch) {\n\t\t\tloading(false);\n\t\t\treturn Promise.resolve(null);\n\t\t}\n\t\tlet responseData = null;\n\t\tif (timer) timer.start();\n\t\treturn fetch(context.url, {\n\t\t\t...defaultFetchOptions,\n\t\t\t...context.options,\n\t\t\theaders: {\n\t\t\t\t...headersToObject(defaultFetchOptions.headers),\n\t\t\t\t...headersToObject((_context$options = context.options) === null || _context$options === void 0 ? void 0 : _context$options.headers)\n\t\t\t}\n\t\t}).then(async (fetchResponse) => {\n\t\t\tresponse.value = fetchResponse;\n\t\t\tstatusCode.value = fetchResponse.status;\n\t\t\tresponseData = await fetchResponse.clone()[config.type]();\n\t\t\tif (!fetchResponse.ok) {\n\t\t\t\tdata.value = initialData || null;\n\t\t\t\tthrow new Error(fetchResponse.statusText);\n\t\t\t}\n\t\t\tif (options.afterFetch) ({data: responseData} = await options.afterFetch({\n\t\t\t\tdata: responseData,\n\t\t\t\tresponse: fetchResponse,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\tdata.value = responseData;\n\t\t\tresponseEvent.trigger(fetchResponse);\n\t\t\treturn fetchResponse;\n\t\t}).catch(async (fetchError) => {\n\t\t\tlet errorData = fetchError.message || fetchError.name;\n\t\t\tif (options.onFetchError) ({error: errorData, data: responseData} = await options.onFetchError({\n\t\t\t\tdata: responseData,\n\t\t\t\terror: fetchError,\n\t\t\t\tresponse: response.value,\n\t\t\t\tcontext,\n\t\t\t\texecute\n\t\t\t}));\n\t\t\terror.value = errorData;\n\t\t\tif (options.updateDataOnError) data.value = responseData;\n\t\t\terrorEvent.trigger(fetchError);\n\t\t\tif (throwOnFailed) throw fetchError;\n\t\t\treturn null;\n\t\t}).finally(() => {\n\t\t\tif (currentExecuteCounter === executeCounter) loading(false);\n\t\t\tif (timer) timer.stop();\n\t\t\tfinallyEvent.trigger(null);\n\t\t});\n\t};\n\tconst refetch = toRef(options.refetch);\n\twatch([refetch, toRef(url)], ([refetch$1]) => refetch$1 && execute(), { deep: true });\n\tconst shell = {\n\t\tisFinished: readonly(isFinished),\n\t\tisFetching: readonly(isFetching),\n\t\tstatusCode,\n\t\tresponse,\n\t\terror,\n\t\tdata,\n\t\tcanAbort,\n\t\taborted,\n\t\tabort,\n\t\texecute,\n\t\tonFetchResponse: responseEvent.on,\n\t\tonFetchError: errorEvent.on,\n\t\tonFetchFinally: finallyEvent.on,\n\t\tget: setMethod(\"GET\"),\n\t\tput: setMethod(\"PUT\"),\n\t\tpost: setMethod(\"POST\"),\n\t\tdelete: setMethod(\"DELETE\"),\n\t\tpatch: setMethod(\"PATCH\"),\n\t\thead: setMethod(\"HEAD\"),\n\t\toptions: setMethod(\"OPTIONS\"),\n\t\tjson: setType(\"json\"),\n\t\ttext: setType(\"text\"),\n\t\tblob: setType(\"blob\"),\n\t\tarrayBuffer: setType(\"arrayBuffer\"),\n\t\tformData: setType(\"formData\")\n\t};\n\tfunction setMethod(method) {\n\t\treturn (payload, payloadType) => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.method = method;\n\t\t\t\tconfig.payload = payload;\n\t\t\t\tconfig.payloadType = payloadType;\n\t\t\t\tif (isRef(config.payload)) watch([refetch, toRef(config.payload)], ([refetch$1]) => refetch$1 && execute(), { deep: true });\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tfunction waitUntilFinished() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tuntil(isFinished).toBe(true).then(() => resolve(shell)).catch(reject);\n\t\t});\n\t}\n\tfunction setType(type) {\n\t\treturn () => {\n\t\t\tif (!isFetching.value) {\n\t\t\t\tconfig.type = type;\n\t\t\t\treturn {\n\t\t\t\t\t...shell,\n\t\t\t\t\tthen(onFulfilled, onRejected) {\n\t\t\t\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t}\n\t\t};\n\t}\n\tif (options.immediate) Promise.resolve().then(() => execute());\n\treturn {\n\t\t...shell,\n\t\tthen(onFulfilled, onRejected) {\n\t\t\treturn waitUntilFinished().then(onFulfilled, onRejected);\n\t\t}\n\t};\n}\nfunction joinPaths(start, end) {\n\tif (!start.endsWith(\"/\") && !end.startsWith(\"/\")) return `${start}/${end}`;\n\tif (start.endsWith(\"/\") && end.startsWith(\"/\")) return `${start.slice(0, -1)}${end}`;\n\treturn `${start}${end}`;\n}\n\n//#endregion\n//#region useFileDialog/index.ts\nconst DEFAULT_OPTIONS = {\n\tmultiple: true,\n\taccept: \"*\",\n\treset: false,\n\tdirectory: false\n};\nfunction prepareInitialFiles(files) {\n\tif (!files) return null;\n\tif (files instanceof FileList) return files;\n\tconst dt = new DataTransfer();\n\tfor (const file of files) dt.items.add(file);\n\treturn dt.files;\n}\n/**\n* Open file dialog with ease.\n*\n* @see https://vueuse.org/useFileDialog\n* @param options\n*/\nfunction useFileDialog(options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst files = ref(prepareInitialFiles(options.initialFiles));\n\tconst { on: onChange, trigger: changeTrigger } = createEventHook();\n\tconst { on: onCancel, trigger: cancelTrigger } = createEventHook();\n\tconst inputRef = computed(() => {\n\t\tvar _unrefElement;\n\t\tconst input = (_unrefElement = unrefElement(options.input)) !== null && _unrefElement !== void 0 ? _unrefElement : document$1 ? document$1.createElement(\"input\") : void 0;\n\t\tif (input) {\n\t\t\tinput.type = \"file\";\n\t\t\tinput.onchange = (event) => {\n\t\t\t\tfiles.value = event.target.files;\n\t\t\t\tchangeTrigger(files.value);\n\t\t\t};\n\t\t\tinput.oncancel = () => {\n\t\t\t\tcancelTrigger();\n\t\t\t};\n\t\t}\n\t\treturn input;\n\t});\n\tconst reset = () => {\n\t\tfiles.value = null;\n\t\tif (inputRef.value && inputRef.value.value) {\n\t\t\tinputRef.value.value = \"\";\n\t\t\tchangeTrigger(null);\n\t\t}\n\t};\n\tconst applyOptions = (options$1) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tel.multiple = toValue(options$1.multiple);\n\t\tel.accept = toValue(options$1.accept);\n\t\tel.webkitdirectory = toValue(options$1.directory);\n\t\tif (hasOwn(options$1, \"capture\")) el.capture = toValue(options$1.capture);\n\t};\n\tconst open = (localOptions) => {\n\t\tconst el = inputRef.value;\n\t\tif (!el) return;\n\t\tconst mergedOptions = {\n\t\t\t...DEFAULT_OPTIONS,\n\t\t\t...options,\n\t\t\t...localOptions\n\t\t};\n\t\tapplyOptions(mergedOptions);\n\t\tif (toValue(mergedOptions.reset)) reset();\n\t\tel.click();\n\t};\n\twatchEffect(() => {\n\t\tapplyOptions(options);\n\t});\n\treturn {\n\t\tfiles: readonly(files),\n\t\topen,\n\t\treset,\n\t\tonCancel,\n\t\tonChange\n\t};\n}\n\n//#endregion\n//#region useFileSystemAccess/index.ts\nfunction useFileSystemAccess(options = {}) {\n\tconst { window: _window = defaultWindow, dataType = \"Text\" } = options;\n\tconst window$1 = _window;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"showSaveFilePicker\" in window$1 && \"showOpenFilePicker\" in window$1);\n\tconst fileHandle = shallowRef();\n\tconst data = shallowRef();\n\tconst file = shallowRef();\n\tconst fileName = computed(() => {\n\t\tvar _file$value$name, _file$value;\n\t\treturn (_file$value$name = (_file$value = file.value) === null || _file$value === void 0 ? void 0 : _file$value.name) !== null && _file$value$name !== void 0 ? _file$value$name : \"\";\n\t});\n\tconst fileMIME = computed(() => {\n\t\tvar _file$value$type, _file$value2;\n\t\treturn (_file$value$type = (_file$value2 = file.value) === null || _file$value2 === void 0 ? void 0 : _file$value2.type) !== null && _file$value$type !== void 0 ? _file$value$type : \"\";\n\t});\n\tconst fileSize = computed(() => {\n\t\tvar _file$value$size, _file$value3;\n\t\treturn (_file$value$size = (_file$value3 = file.value) === null || _file$value3 === void 0 ? void 0 : _file$value3.size) !== null && _file$value$size !== void 0 ? _file$value$size : 0;\n\t});\n\tconst fileLastModified = computed(() => {\n\t\tvar _file$value$lastModif, _file$value4;\n\t\treturn (_file$value$lastModif = (_file$value4 = file.value) === null || _file$value4 === void 0 ? void 0 : _file$value4.lastModified) !== null && _file$value$lastModif !== void 0 ? _file$value$lastModif : 0;\n\t});\n\tasync function open(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tconst [handle] = await window$1.showOpenFilePicker({\n\t\t\t...toValue(options),\n\t\t\t..._options\n\t\t});\n\t\tfileHandle.value = handle;\n\t\tawait updateData();\n\t}\n\tasync function create(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window$1.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tdata.value = void 0;\n\t\tawait updateData();\n\t}\n\tasync function save(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tif (!fileHandle.value) return saveAs(_options);\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function saveAs(_options = {}) {\n\t\tif (!isSupported.value) return;\n\t\tfileHandle.value = await window$1.showSaveFilePicker({\n\t\t\t...options,\n\t\t\t..._options\n\t\t});\n\t\tif (data.value) {\n\t\t\tconst writableStream = await fileHandle.value.createWritable();\n\t\t\tawait writableStream.write(data.value);\n\t\t\tawait writableStream.close();\n\t\t}\n\t\tawait updateFile();\n\t}\n\tasync function updateFile() {\n\t\tvar _fileHandle$value;\n\t\tfile.value = await ((_fileHandle$value = fileHandle.value) === null || _fileHandle$value === void 0 ? void 0 : _fileHandle$value.getFile());\n\t}\n\tasync function updateData() {\n\t\tvar _file$value5, _file$value6;\n\t\tawait updateFile();\n\t\tconst type = toValue(dataType);\n\t\tif (type === \"Text\") data.value = await ((_file$value5 = file.value) === null || _file$value5 === void 0 ? void 0 : _file$value5.text());\n\t\telse if (type === \"ArrayBuffer\") data.value = await ((_file$value6 = file.value) === null || _file$value6 === void 0 ? void 0 : _file$value6.arrayBuffer());\n\t\telse if (type === \"Blob\") data.value = file.value;\n\t}\n\twatch(() => toValue(dataType), updateData);\n\treturn {\n\t\tisSupported,\n\t\tdata,\n\t\tfile,\n\t\tfileName,\n\t\tfileMIME,\n\t\tfileSize,\n\t\tfileLastModified,\n\t\topen,\n\t\tcreate,\n\t\tsave,\n\t\tsaveAs,\n\t\tupdateData\n\t};\n}\n\n//#endregion\n//#region useFocus/index.ts\n/**\n* Track or set the focus state of a DOM element.\n*\n* @see https://vueuse.org/useFocus\n* @param target The target element for the focus and blur events.\n* @param options\n*/\nfunction useFocus(target, options = {}) {\n\tconst { initialValue = false, focusVisible = false, preventScroll = false } = options;\n\tconst innerFocused = shallowRef(false);\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, \"focus\", (event) => {\n\t\tvar _matches, _ref;\n\t\tif (!focusVisible || ((_matches = (_ref = event.target).matches) === null || _matches === void 0 ? void 0 : _matches.call(_ref, \":focus-visible\"))) innerFocused.value = true;\n\t}, listenerOptions);\n\tuseEventListener(targetElement, \"blur\", () => innerFocused.value = false, listenerOptions);\n\tconst focused = computed({\n\t\tget: () => innerFocused.value,\n\t\tset(value) {\n\t\t\tvar _targetElement$value, _targetElement$value2;\n\t\t\tif (!value && innerFocused.value) (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || _targetElement$value.blur();\n\t\t\telse if (value && !innerFocused.value) (_targetElement$value2 = targetElement.value) === null || _targetElement$value2 === void 0 || _targetElement$value2.focus({ preventScroll });\n\t\t}\n\t});\n\twatch(targetElement, () => {\n\t\tfocused.value = initialValue;\n\t}, {\n\t\timmediate: true,\n\t\tflush: \"post\"\n\t});\n\treturn { focused };\n}\n\n//#endregion\n//#region useFocusWithin/index.ts\nconst EVENT_FOCUS_IN = \"focusin\";\nconst EVENT_FOCUS_OUT = \"focusout\";\nconst PSEUDO_CLASS_FOCUS_WITHIN = \":focus-within\";\n/**\n* Track if focus is contained within the target element\n*\n* @see https://vueuse.org/useFocusWithin\n* @param target The target element to track\n* @param options Focus within options\n*/\nfunction useFocusWithin(target, options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst targetElement = computed(() => unrefElement(target));\n\tconst _focused = shallowRef(false);\n\tconst focused = computed(() => _focused.value);\n\tconst activeElement = useActiveElement(options);\n\tif (!window$1 || !activeElement.value) return { focused };\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(targetElement, EVENT_FOCUS_IN, () => _focused.value = true, listenerOptions);\n\tuseEventListener(targetElement, EVENT_FOCUS_OUT, () => {\n\t\tvar _targetElement$value$, _targetElement$value, _targetElement$value$2;\n\t\treturn _focused.value = (_targetElement$value$ = (_targetElement$value = targetElement.value) === null || _targetElement$value === void 0 || (_targetElement$value$2 = _targetElement$value.matches) === null || _targetElement$value$2 === void 0 ? void 0 : _targetElement$value$2.call(_targetElement$value, PSEUDO_CLASS_FOCUS_WITHIN)) !== null && _targetElement$value$ !== void 0 ? _targetElement$value$ : false;\n\t}, listenerOptions);\n\treturn { focused };\n}\n\n//#endregion\n//#region useFps/index.ts\n/* @__NO_SIDE_EFFECTS__ */\nfunction useFps(options) {\n\tvar _options$every;\n\tconst fps = shallowRef(0);\n\tif (typeof performance === \"undefined\") return fps;\n\tconst every = (_options$every = options === null || options === void 0 ? void 0 : options.every) !== null && _options$every !== void 0 ? _options$every : 10;\n\tlet last = performance.now();\n\tlet ticks = 0;\n\tuseRafFn(() => {\n\t\tticks += 1;\n\t\tif (ticks >= every) {\n\t\t\tconst now = performance.now();\n\t\t\tconst diff = now - last;\n\t\t\tfps.value = Math.round(1e3 / (diff / ticks));\n\t\t\tlast = now;\n\t\t\tticks = 0;\n\t\t}\n\t});\n\treturn fps;\n}\n\n//#endregion\n//#region useFullscreen/index.ts\nconst eventHandlers = [\n\t\"fullscreenchange\",\n\t\"webkitfullscreenchange\",\n\t\"webkitendfullscreen\",\n\t\"mozfullscreenchange\",\n\t\"MSFullscreenChange\"\n];\n/**\n* Reactive Fullscreen API.\n*\n* @see https://vueuse.org/useFullscreen\n* @param target\n* @param options\n*/\nfunction useFullscreen(target, options = {}) {\n\tconst { document: document$1 = defaultDocument, autoExit = false } = options;\n\tconst targetRef = computed(() => {\n\t\tvar _unrefElement;\n\t\treturn (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : document$1 === null || document$1 === void 0 ? void 0 : document$1.documentElement;\n\t});\n\tconst isFullscreen = shallowRef(false);\n\tconst requestMethod = computed(() => {\n\t\treturn [\n\t\t\t\"requestFullscreen\",\n\t\t\t\"webkitRequestFullscreen\",\n\t\t\t\"webkitEnterFullscreen\",\n\t\t\t\"webkitEnterFullScreen\",\n\t\t\t\"webkitRequestFullScreen\",\n\t\t\t\"mozRequestFullScreen\",\n\t\t\t\"msRequestFullscreen\"\n\t\t].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value);\n\t});\n\tconst exitMethod = computed(() => {\n\t\treturn [\n\t\t\t\"exitFullscreen\",\n\t\t\t\"webkitExitFullscreen\",\n\t\t\t\"webkitExitFullScreen\",\n\t\t\t\"webkitCancelFullScreen\",\n\t\t\t\"mozCancelFullScreen\",\n\t\t\t\"msExitFullscreen\"\n\t\t].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenEnabled = computed(() => {\n\t\treturn [\n\t\t\t\"fullScreen\",\n\t\t\t\"webkitIsFullScreen\",\n\t\t\t\"webkitDisplayingFullscreen\",\n\t\t\t\"mozFullScreen\",\n\t\t\t\"msFullscreenElement\"\n\t\t].find((m) => document$1 && m in document$1 || targetRef.value && m in targetRef.value);\n\t});\n\tconst fullscreenElementMethod = [\n\t\t\"fullscreenElement\",\n\t\t\"webkitFullscreenElement\",\n\t\t\"mozFullScreenElement\",\n\t\t\"msFullscreenElement\"\n\t].find((m) => document$1 && m in document$1);\n\tconst isSupported = /* @__PURE__ */ useSupported(() => targetRef.value && document$1 && requestMethod.value !== void 0 && exitMethod.value !== void 0 && fullscreenEnabled.value !== void 0);\n\tconst isCurrentElementFullScreen = () => {\n\t\tif (fullscreenElementMethod) return (document$1 === null || document$1 === void 0 ? void 0 : document$1[fullscreenElementMethod]) === targetRef.value;\n\t\treturn false;\n\t};\n\tconst isElementFullScreen = () => {\n\t\tif (fullscreenEnabled.value) if (document$1 && document$1[fullscreenEnabled.value] != null) return document$1[fullscreenEnabled.value];\n\t\telse {\n\t\t\tconst target$1 = targetRef.value;\n\t\t\tif ((target$1 === null || target$1 === void 0 ? void 0 : target$1[fullscreenEnabled.value]) != null) return Boolean(target$1[fullscreenEnabled.value]);\n\t\t}\n\t\treturn false;\n\t};\n\tasync function exit() {\n\t\tif (!isSupported.value || !isFullscreen.value) return;\n\t\tif (exitMethod.value) if ((document$1 === null || document$1 === void 0 ? void 0 : document$1[exitMethod.value]) != null) await document$1[exitMethod.value]();\n\t\telse {\n\t\t\tconst target$1 = targetRef.value;\n\t\t\tif ((target$1 === null || target$1 === void 0 ? void 0 : target$1[exitMethod.value]) != null) await target$1[exitMethod.value]();\n\t\t}\n\t\tisFullscreen.value = false;\n\t}\n\tasync function enter() {\n\t\tif (!isSupported.value || isFullscreen.value) return;\n\t\tif (isElementFullScreen()) await exit();\n\t\tconst target$1 = targetRef.value;\n\t\tif (requestMethod.value && (target$1 === null || target$1 === void 0 ? void 0 : target$1[requestMethod.value]) != null) {\n\t\t\tawait target$1[requestMethod.value]();\n\t\t\tisFullscreen.value = true;\n\t\t}\n\t}\n\tasync function toggle() {\n\t\tawait (isFullscreen.value ? exit() : enter());\n\t}\n\tconst handlerCallback = () => {\n\t\tconst isElementFullScreenValue = isElementFullScreen();\n\t\tif (!isElementFullScreenValue || isElementFullScreenValue && isCurrentElementFullScreen()) isFullscreen.value = isElementFullScreenValue;\n\t};\n\tconst listenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t};\n\tuseEventListener(document$1, eventHandlers, handlerCallback, listenerOptions);\n\tuseEventListener(() => unrefElement(targetRef), eventHandlers, handlerCallback, listenerOptions);\n\ttryOnMounted(handlerCallback, false);\n\tif (autoExit) tryOnScopeDispose(exit);\n\treturn {\n\t\tisSupported,\n\t\tisFullscreen,\n\t\tenter,\n\t\texit,\n\t\ttoggle\n\t};\n}\n\n//#endregion\n//#region useGamepad/index.ts\n/**\n* Maps a standard standard gamepad to an Xbox 360 Controller.\n*/\nfunction mapGamepadToXbox360Controller(gamepad) {\n\treturn computed(() => {\n\t\tif (gamepad.value) return {\n\t\t\tbuttons: {\n\t\t\t\ta: gamepad.value.buttons[0],\n\t\t\t\tb: gamepad.value.buttons[1],\n\t\t\t\tx: gamepad.value.buttons[2],\n\t\t\t\ty: gamepad.value.buttons[3]\n\t\t\t},\n\t\t\tbumper: {\n\t\t\t\tleft: gamepad.value.buttons[4],\n\t\t\t\tright: gamepad.value.buttons[5]\n\t\t\t},\n\t\t\ttriggers: {\n\t\t\t\tleft: gamepad.value.buttons[6],\n\t\t\t\tright: gamepad.value.buttons[7]\n\t\t\t},\n\t\t\tstick: {\n\t\t\t\tleft: {\n\t\t\t\t\thorizontal: gamepad.value.axes[0],\n\t\t\t\t\tvertical: gamepad.value.axes[1],\n\t\t\t\t\tbutton: gamepad.value.buttons[10]\n\t\t\t\t},\n\t\t\t\tright: {\n\t\t\t\t\thorizontal: gamepad.value.axes[2],\n\t\t\t\t\tvertical: gamepad.value.axes[3],\n\t\t\t\t\tbutton: gamepad.value.buttons[11]\n\t\t\t\t}\n\t\t\t},\n\t\t\tdpad: {\n\t\t\t\tup: gamepad.value.buttons[12],\n\t\t\t\tdown: gamepad.value.buttons[13],\n\t\t\t\tleft: gamepad.value.buttons[14],\n\t\t\t\tright: gamepad.value.buttons[15]\n\t\t\t},\n\t\t\tback: gamepad.value.buttons[8],\n\t\t\tstart: gamepad.value.buttons[9]\n\t\t};\n\t\treturn null;\n\t});\n}\n/* @__NO_SIDE_EFFECTS__ */\nfunction useGamepad(options = {}) {\n\tconst { navigator: navigator$1 = defaultNavigator } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"getGamepads\" in navigator$1);\n\tconst gamepads = ref([]);\n\tconst onConnectedHook = createEventHook();\n\tconst onDisconnectedHook = createEventHook();\n\tconst stateFromGamepad = (gamepad) => {\n\t\tconst hapticActuators = [];\n\t\tconst vibrationActuator = \"vibrationActuator\" in gamepad ? gamepad.vibrationActuator : null;\n\t\tif (vibrationActuator) hapticActuators.push(vibrationActuator);\n\t\tif (gamepad.hapticActuators) hapticActuators.push(...gamepad.hapticActuators);\n\t\treturn {\n\t\t\tid: gamepad.id,\n\t\t\tindex: gamepad.index,\n\t\t\tconnected: gamepad.connected,\n\t\t\tmapping: gamepad.mapping,\n\t\t\ttimestamp: gamepad.timestamp,\n\t\t\tvibrationActuator: gamepad.vibrationActuator,\n\t\t\thapticActuators,\n\t\t\taxes: gamepad.axes.map((axes) => axes),\n\t\t\tbuttons: gamepad.buttons.map((button) => ({\n\t\t\t\tpressed: button.pressed,\n\t\t\t\ttouched: button.touched,\n\t\t\t\tvalue: button.value\n\t\t\t}))\n\t\t};\n\t};\n\tconst updateGamepadState = () => {\n\t\tconst _gamepads = (navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) gamepads.value[gamepad.index] = stateFromGamepad(gamepad);\n\t};\n\tconst { isActive, pause, resume } = useRafFn(updateGamepadState);\n\tconst onGamepadConnected = (gamepad) => {\n\t\tif (!gamepads.value.some(({ index }) => index === gamepad.index)) {\n\t\t\tgamepads.value.push(stateFromGamepad(gamepad));\n\t\t\tonConnectedHook.trigger(gamepad.index);\n\t\t}\n\t\tresume();\n\t};\n\tconst onGamepadDisconnected = (gamepad) => {\n\t\tgamepads.value = gamepads.value.filter((x) => x.index !== gamepad.index);\n\t\tonDisconnectedHook.trigger(gamepad.index);\n\t};\n\tconst listenerOptions = { passive: true };\n\tuseEventListener(\"gamepadconnected\", (e) => onGamepadConnected(e.gamepad), listenerOptions);\n\tuseEventListener(\"gamepaddisconnected\", (e) => onGamepadDisconnected(e.gamepad), listenerOptions);\n\ttryOnMounted(() => {\n\t\tconst _gamepads = (navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.getGamepads()) || [];\n\t\tfor (const gamepad of _gamepads) if (gamepad && gamepads.value[gamepad.index]) onGamepadConnected(gamepad);\n\t});\n\tpause();\n\treturn {\n\t\tisSupported,\n\t\tonConnected: onConnectedHook.on,\n\t\tonDisconnected: onDisconnectedHook.on,\n\t\tgamepads,\n\t\tpause,\n\t\tresume,\n\t\tisActive\n\t};\n}\n\n//#endregion\n//#region useGeolocation/index.ts\n/**\n* Reactive Geolocation API.\n*\n* @see https://vueuse.org/useGeolocation\n* @param options\n*/\nfunction useGeolocation(options = {}) {\n\tconst { enableHighAccuracy = true, maximumAge = 3e4, timeout = 27e3, navigator: navigator$1 = defaultNavigator, immediate = true } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"geolocation\" in navigator$1);\n\tconst locatedAt = shallowRef(null);\n\tconst error = shallowRef(null);\n\tconst coords = ref({\n\t\taccuracy: 0,\n\t\tlatitude: Number.POSITIVE_INFINITY,\n\t\tlongitude: Number.POSITIVE_INFINITY,\n\t\taltitude: null,\n\t\taltitudeAccuracy: null,\n\t\theading: null,\n\t\tspeed: null\n\t});\n\tfunction updatePosition(position) {\n\t\tlocatedAt.value = position.timestamp;\n\t\tcoords.value = position.coords;\n\t\terror.value = null;\n\t}\n\tlet watcher;\n\tfunction resume() {\n\t\tif (isSupported.value) watcher = navigator$1.geolocation.watchPosition(updatePosition, (err) => error.value = err, {\n\t\t\tenableHighAccuracy,\n\t\t\tmaximumAge,\n\t\t\ttimeout\n\t\t});\n\t}\n\tif (immediate) resume();\n\tfunction pause() {\n\t\tif (watcher && navigator$1) navigator$1.geolocation.clearWatch(watcher);\n\t}\n\ttryOnScopeDispose(() => {\n\t\tpause();\n\t});\n\treturn {\n\t\tisSupported,\n\t\tcoords,\n\t\tlocatedAt,\n\t\terror,\n\t\tresume,\n\t\tpause\n\t};\n}\n\n//#endregion\n//#region useIdle/index.ts\nconst defaultEvents$1 = [\n\t\"mousemove\",\n\t\"mousedown\",\n\t\"resize\",\n\t\"keydown\",\n\t\"touchstart\",\n\t\"wheel\"\n];\nconst oneMinute = 6e4;\n/**\n* Tracks whether the user is being inactive.\n*\n* @see https://vueuse.org/useIdle\n* @param timeout default to 1 minute\n* @param options IdleOptions\n*/\nfunction useIdle(timeout = oneMinute, options = {}) {\n\tconst { initialState = false, listenForVisibilityChange = true, events: events$1 = defaultEvents$1, window: window$1 = defaultWindow, eventFilter = throttleFilter(50) } = options;\n\tconst idle = shallowRef(initialState);\n\tconst lastActive = shallowRef(timestamp());\n\tconst isPending = shallowRef(false);\n\tlet timer;\n\tconst reset = () => {\n\t\tidle.value = false;\n\t\tclearTimeout(timer);\n\t\ttimer = setTimeout(() => idle.value = true, timeout);\n\t};\n\tconst onEvent = createFilterWrapper(eventFilter, () => {\n\t\tlastActive.value = timestamp();\n\t\treset();\n\t});\n\tif (window$1) {\n\t\tconst document$1 = window$1.document;\n\t\tconst listenerOptions = { passive: true };\n\t\tfor (const event of events$1) useEventListener(window$1, event, () => {\n\t\t\tif (!isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tif (listenForVisibilityChange) useEventListener(document$1, \"visibilitychange\", () => {\n\t\t\tif (document$1.hidden || !isPending.value) return;\n\t\t\tonEvent();\n\t\t}, listenerOptions);\n\t\tstart();\n\t}\n\tfunction start() {\n\t\tif (isPending.value) return;\n\t\tisPending.value = true;\n\t\tif (!initialState) reset();\n\t}\n\tfunction stop() {\n\t\tidle.value = initialState;\n\t\tclearTimeout(timer);\n\t\tisPending.value = false;\n\t}\n\treturn {\n\t\tidle,\n\t\tlastActive,\n\t\treset,\n\t\tstop,\n\t\tstart,\n\t\tisPending: shallowReadonly(isPending)\n\t};\n}\n\n//#endregion\n//#region useImage/index.ts\nasync function loadImage(options) {\n\treturn new Promise((resolve, reject) => {\n\t\tconst img = new Image();\n\t\tconst { src, srcset, sizes, class: clazz, loading, crossorigin, referrerPolicy, width, height, decoding, fetchPriority, ismap, usemap } = options;\n\t\timg.src = src;\n\t\tif (srcset != null) img.srcset = srcset;\n\t\tif (sizes != null) img.sizes = sizes;\n\t\tif (clazz != null) img.className = clazz;\n\t\tif (loading != null) img.loading = loading;\n\t\tif (crossorigin != null) img.crossOrigin = crossorigin;\n\t\tif (referrerPolicy != null) img.referrerPolicy = referrerPolicy;\n\t\tif (width != null) img.width = width;\n\t\tif (height != null) img.height = height;\n\t\tif (decoding != null) img.decoding = decoding;\n\t\tif (fetchPriority != null) img.fetchPriority = fetchPriority;\n\t\tif (ismap != null) img.isMap = ismap;\n\t\tif (usemap != null) img.useMap = usemap;\n\t\timg.onload = () => resolve(img);\n\t\timg.onerror = reject;\n\t});\n}\n/**\n* Reactive load an image in the browser, you can wait the result to display it or show a fallback.\n*\n* @see https://vueuse.org/useImage\n* @param options Image attributes, as used in the tag\n* @param asyncStateOptions\n*/\nfunction useImage(options, asyncStateOptions = {}) {\n\tconst state = useAsyncState(() => loadImage(toValue(options)), void 0, {\n\t\tresetOnExecute: true,\n\t\t...asyncStateOptions\n\t});\n\twatch(() => toValue(options), () => state.execute(asyncStateOptions.delay), { deep: true });\n\treturn state;\n}\n\n//#endregion\n//#region _resolve-element.ts\n/**\n* Resolves an element from a given element, window, or document.\n*\n* @internal\n*/\nfunction resolveElement(el) {\n\tif (typeof Window !== \"undefined\" && el instanceof Window) return el.document.documentElement;\n\tif (typeof Document !== \"undefined\" && el instanceof Document) return el.documentElement;\n\treturn el;\n}\n\n//#endregion\n//#region useScroll/index.ts\n/**\n* We have to check if the scroll amount is close enough to some threshold in order to\n* more accurately calculate arrivedState. This is because scrollTop/scrollLeft are non-rounded\n* numbers, while scrollHeight/scrollWidth and clientHeight/clientWidth are rounded.\n* https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight#determine_if_an_element_has_been_totally_scrolled\n*/\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\n/**\n* Reactive scroll.\n*\n* @see https://vueuse.org/useScroll\n* @param element\n* @param options\n*/\nfunction useScroll(element, options = {}) {\n\tconst { throttle = 0, idle = 200, onStop = noop, onScroll = noop, offset = {\n\t\tleft: 0,\n\t\tright: 0,\n\t\ttop: 0,\n\t\tbottom: 0\n\t}, observe: _observe = { mutation: false }, eventListenerOptions = {\n\t\tcapture: false,\n\t\tpassive: true\n\t}, behavior = \"auto\", window: window$1 = defaultWindow, onError = (e) => {\n\t\tconsole.error(e);\n\t} } = options;\n\tconst observe = typeof _observe === \"boolean\" ? { mutation: _observe } : _observe;\n\tconst internalX = shallowRef(0);\n\tconst internalY = shallowRef(0);\n\tconst x = computed({\n\t\tget() {\n\t\t\treturn internalX.value;\n\t\t},\n\t\tset(x$1) {\n\t\t\tscrollTo(x$1, void 0);\n\t\t}\n\t});\n\tconst y = computed({\n\t\tget() {\n\t\t\treturn internalY.value;\n\t\t},\n\t\tset(y$1) {\n\t\t\tscrollTo(void 0, y$1);\n\t\t}\n\t});\n\tfunction scrollTo(_x, _y) {\n\t\tvar _ref, _toValue, _toValue2, _document;\n\t\tif (!window$1) return;\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\t(_ref = _element instanceof Document ? window$1.document.body : _element) === null || _ref === void 0 || _ref.scrollTo({\n\t\t\ttop: (_toValue = toValue(_y)) !== null && _toValue !== void 0 ? _toValue : y.value,\n\t\t\tleft: (_toValue2 = toValue(_x)) !== null && _toValue2 !== void 0 ? _toValue2 : x.value,\n\t\t\tbehavior: toValue(behavior)\n\t\t});\n\t\tconst scrollContainer = (_element === null || _element === void 0 || (_document = _element.document) === null || _document === void 0 ? void 0 : _document.documentElement) || (_element === null || _element === void 0 ? void 0 : _element.documentElement) || _element;\n\t\tif (x != null) internalX.value = scrollContainer.scrollLeft;\n\t\tif (y != null) internalY.value = scrollContainer.scrollTop;\n\t}\n\tconst isScrolling = shallowRef(false);\n\tconst arrivedState = reactive({\n\t\tleft: true,\n\t\tright: false,\n\t\ttop: true,\n\t\tbottom: false\n\t});\n\tconst directions = reactive({\n\t\tleft: false,\n\t\tright: false,\n\t\ttop: false,\n\t\tbottom: false\n\t});\n\tconst onScrollEnd = (e) => {\n\t\tif (!isScrolling.value) return;\n\t\tisScrolling.value = false;\n\t\tdirections.left = false;\n\t\tdirections.right = false;\n\t\tdirections.top = false;\n\t\tdirections.bottom = false;\n\t\tonStop(e);\n\t};\n\tconst onScrollEndDebounced = useDebounceFn(onScrollEnd, throttle + idle);\n\tconst setArrivedState = (target) => {\n\t\tvar _document2;\n\t\tif (!window$1) return;\n\t\tconst el = (target === null || target === void 0 || (_document2 = target.document) === null || _document2 === void 0 ? void 0 : _document2.documentElement) || (target === null || target === void 0 ? void 0 : target.documentElement) || unrefElement(target);\n\t\tconst { display, flexDirection, direction } = getComputedStyle(el);\n\t\tconst directionMultipler = direction === \"rtl\" ? -1 : 1;\n\t\tconst scrollLeft = el.scrollLeft;\n\t\tdirections.left = scrollLeft < internalX.value;\n\t\tdirections.right = scrollLeft > internalX.value;\n\t\tconst left = Math.abs(scrollLeft * directionMultipler) <= (offset.left || 0);\n\t\tconst right = Math.abs(scrollLeft * directionMultipler) + el.clientWidth >= el.scrollWidth - (offset.right || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\tif (display === \"flex\" && flexDirection === \"row-reverse\") {\n\t\t\tarrivedState.left = right;\n\t\t\tarrivedState.right = left;\n\t\t} else {\n\t\t\tarrivedState.left = left;\n\t\t\tarrivedState.right = right;\n\t\t}\n\t\tinternalX.value = scrollLeft;\n\t\tlet scrollTop = el.scrollTop;\n\t\tif (target === window$1.document && !scrollTop) scrollTop = window$1.document.body.scrollTop;\n\t\tdirections.top = scrollTop < internalY.value;\n\t\tdirections.bottom = scrollTop > internalY.value;\n\t\tconst top = Math.abs(scrollTop) <= (offset.top || 0);\n\t\tconst bottom = Math.abs(scrollTop) + el.clientHeight >= el.scrollHeight - (offset.bottom || 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\t\t/**\n\t\t* reverse columns and rows behave exactly the other way around,\n\t\t* bottom is treated as top and top is treated as the negative version of bottom\n\t\t*/\n\t\tif (display === \"flex\" && flexDirection === \"column-reverse\") {\n\t\t\tarrivedState.top = bottom;\n\t\t\tarrivedState.bottom = top;\n\t\t} else {\n\t\t\tarrivedState.top = top;\n\t\t\tarrivedState.bottom = bottom;\n\t\t}\n\t\tinternalY.value = scrollTop;\n\t};\n\tconst onScrollHandler = (e) => {\n\t\tvar _documentElement;\n\t\tif (!window$1) return;\n\t\tsetArrivedState((_documentElement = e.target.documentElement) !== null && _documentElement !== void 0 ? _documentElement : e.target);\n\t\tisScrolling.value = true;\n\t\tonScrollEndDebounced(e);\n\t\tonScroll(e);\n\t};\n\tuseEventListener(element, \"scroll\", throttle ? useThrottleFn(onScrollHandler, throttle, true, false) : onScrollHandler, eventListenerOptions);\n\ttryOnMounted(() => {\n\t\ttry {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (!_element) return;\n\t\t\tsetArrivedState(_element);\n\t\t} catch (e) {\n\t\t\tonError(e);\n\t\t}\n\t});\n\tif ((observe === null || observe === void 0 ? void 0 : observe.mutation) && element != null && element !== window$1 && element !== document) useMutationObserver(element, () => {\n\t\tconst _element = toValue(element);\n\t\tif (!_element) return;\n\t\tsetArrivedState(_element);\n\t}, {\n\t\tattributes: true,\n\t\tchildList: true,\n\t\tsubtree: true\n\t});\n\tuseEventListener(element, \"scrollend\", onScrollEnd, eventListenerOptions);\n\treturn {\n\t\tx,\n\t\ty,\n\t\tisScrolling,\n\t\tarrivedState,\n\t\tdirections,\n\t\tmeasure() {\n\t\t\tconst _element = toValue(element);\n\t\t\tif (window$1 && _element) setArrivedState(_element);\n\t\t}\n\t};\n}\n\n//#endregion\n//#region useInfiniteScroll/index.ts\n/**\n* Reactive infinite scroll.\n*\n* @see https://vueuse.org/useInfiniteScroll\n*/\nfunction useInfiniteScroll(element, onLoadMore, options = {}) {\n\tvar _options$distance;\n\tconst { direction = \"bottom\", interval = 100, canLoadMore = () => true } = options;\n\tconst state = reactive(useScroll(element, {\n\t\t...options,\n\t\toffset: {\n\t\t\t[direction]: (_options$distance = options.distance) !== null && _options$distance !== void 0 ? _options$distance : 0,\n\t\t\t...options.offset\n\t\t}\n\t}));\n\tconst promise = ref();\n\tconst isLoading = computed(() => !!promise.value);\n\tconst observedElement = computed(() => {\n\t\treturn resolveElement(toValue(element));\n\t});\n\tconst isElementVisible = useElementVisibility(observedElement);\n\tfunction checkAndLoad() {\n\t\tstate.measure();\n\t\tif (!observedElement.value || !isElementVisible.value || !canLoadMore(observedElement.value)) return;\n\t\tconst { scrollHeight, clientHeight, scrollWidth, clientWidth } = observedElement.value;\n\t\tconst isNarrower = direction === \"bottom\" || direction === \"top\" ? scrollHeight <= clientHeight : scrollWidth <= clientWidth;\n\t\tif (state.arrivedState[direction] || isNarrower) {\n\t\t\tif (!promise.value) promise.value = Promise.all([onLoadMore(state), new Promise((resolve) => setTimeout(resolve, interval))]).finally(() => {\n\t\t\t\tpromise.value = null;\n\t\t\t\tnextTick(() => checkAndLoad());\n\t\t\t});\n\t\t}\n\t}\n\ttryOnUnmounted(watch(() => [state.arrivedState[direction], isElementVisible.value], checkAndLoad, { immediate: true }));\n\treturn {\n\t\tisLoading,\n\t\treset() {\n\t\t\tnextTick(() => checkAndLoad());\n\t\t}\n\t};\n}\n\n//#endregion\n//#region useKeyModifier/index.ts\nconst defaultEvents = [\n\t\"mousedown\",\n\t\"mouseup\",\n\t\"keydown\",\n\t\"keyup\"\n];\n/* @__NO_SIDE_EFFECTS__ */\nfunction useKeyModifier(modifier, options = {}) {\n\tconst { events: events$1 = defaultEvents, document: document$1 = defaultDocument, initial = null } = options;\n\tconst state = shallowRef(initial);\n\tif (document$1) events$1.forEach((listenerEvent) => {\n\t\tuseEventListener(document$1, listenerEvent, (evt) => {\n\t\t\tif (typeof evt.getModifierState === \"function\") state.value = evt.getModifierState(modifier);\n\t\t}, { passive: true });\n\t});\n\treturn state;\n}\n\n//#endregion\n//#region useLocalStorage/index.ts\n/**\n* Reactive LocalStorage.\n*\n* @see https://vueuse.org/useLocalStorage\n* @param key\n* @param initialValue\n* @param options\n*/\nfunction useLocalStorage(key, initialValue, options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\treturn useStorage(key, initialValue, window$1 === null || window$1 === void 0 ? void 0 : window$1.localStorage, options);\n}\n\n//#endregion\n//#region useMagicKeys/aliasMap.ts\nconst DefaultMagicKeysAliasMap = {\n\tctrl: \"control\",\n\tcommand: \"meta\",\n\tcmd: \"meta\",\n\toption: \"alt\",\n\tup: \"arrowup\",\n\tdown: \"arrowdown\",\n\tleft: \"arrowleft\",\n\tright: \"arrowright\"\n};\n\n//#endregion\n//#region useMagicKeys/index.ts\nfunction useMagicKeys(options = {}) {\n\tconst { reactive: useReactive = false, target = defaultWindow, aliasMap = DefaultMagicKeysAliasMap, passive = true, onEventFired = noop } = options;\n\tconst current = reactive(/* @__PURE__ */ new Set());\n\tconst obj = {\n\t\ttoJSON() {\n\t\t\treturn {};\n\t\t},\n\t\tcurrent\n\t};\n\tconst refs = useReactive ? reactive(obj) : obj;\n\tconst metaDeps = /* @__PURE__ */ new Set();\n\tconst depsMap = new Map([\n\t\t[\"Meta\", metaDeps],\n\t\t[\"Shift\", /* @__PURE__ */ new Set()],\n\t\t[\"Alt\", /* @__PURE__ */ new Set()]\n\t]);\n\tconst usedKeys = /* @__PURE__ */ new Set();\n\tfunction setRefs(key, value) {\n\t\tif (key in refs) if (useReactive) refs[key] = value;\n\t\telse refs[key].value = value;\n\t}\n\tfunction reset() {\n\t\tcurrent.clear();\n\t\tfor (const key of usedKeys) setRefs(key, false);\n\t}\n\tfunction updateDeps(value, e, keys$1) {\n\t\tif (!value || typeof e.getModifierState !== \"function\") return;\n\t\tfor (const [modifier, depsSet] of depsMap) if (e.getModifierState(modifier)) {\n\t\t\tkeys$1.forEach((key) => depsSet.add(key));\n\t\t\tbreak;\n\t\t}\n\t}\n\tfunction clearDeps(value, key) {\n\t\tif (value) return;\n\t\tconst depsMapKey = `${key[0].toUpperCase()}${key.slice(1)}`;\n\t\tconst deps = depsMap.get(depsMapKey);\n\t\tif (![\"shift\", \"alt\"].includes(key) || !deps) return;\n\t\tconst depsArray = Array.from(deps);\n\t\tconst depsIndex = depsArray.indexOf(key);\n\t\tdepsArray.forEach((key$1, index) => {\n\t\t\tif (index >= depsIndex) {\n\t\t\t\tcurrent.delete(key$1);\n\t\t\t\tsetRefs(key$1, false);\n\t\t\t}\n\t\t});\n\t\tdeps.clear();\n\t}\n\tfunction updateRefs(e, value) {\n\t\tvar _e$key, _e$code;\n\t\tconst key = (_e$key = e.key) === null || _e$key === void 0 ? void 0 : _e$key.toLowerCase();\n\t\tconst values = [(_e$code = e.code) === null || _e$code === void 0 ? void 0 : _e$code.toLowerCase(), key].filter(Boolean);\n\t\tif (key) if (value) current.add(key);\n\t\telse current.delete(key);\n\t\tfor (const key$1 of values) {\n\t\t\tusedKeys.add(key$1);\n\t\t\tsetRefs(key$1, value);\n\t\t}\n\t\tupdateDeps(value, e, [...current, ...values]);\n\t\tclearDeps(value, key);\n\t\tif (key === \"meta\" && !value) {\n\t\t\tmetaDeps.forEach((key$1) => {\n\t\t\t\tcurrent.delete(key$1);\n\t\t\t\tsetRefs(key$1, false);\n\t\t\t});\n\t\t\tmetaDeps.clear();\n\t\t}\n\t}\n\tuseEventListener(target, \"keydown\", (e) => {\n\t\tupdateRefs(e, true);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(target, \"keyup\", (e) => {\n\t\tupdateRefs(e, false);\n\t\treturn onEventFired(e);\n\t}, { passive });\n\tuseEventListener(\"blur\", reset, { passive });\n\tuseEventListener(\"focus\", reset, { passive });\n\tconst proxy = new Proxy(refs, { get(target$1, prop, rec) {\n\t\tif (typeof prop !== \"string\") return Reflect.get(target$1, prop, rec);\n\t\tprop = prop.toLowerCase();\n\t\tif (prop in aliasMap) prop = aliasMap[prop];\n\t\tif (!(prop in refs)) if (/[+_-]/.test(prop)) {\n\t\t\tconst keys$1 = prop.split(/[+_-]/g).map((i) => i.trim());\n\t\t\trefs[prop] = computed(() => keys$1.map((key) => toValue(proxy[key])).every(Boolean));\n\t\t} else refs[prop] = shallowRef(false);\n\t\tconst r = Reflect.get(target$1, prop, rec);\n\t\treturn useReactive ? toValue(r) : r;\n\t} });\n\treturn proxy;\n}\n\n//#endregion\n//#region useMediaControls/index.ts\n/**\n* Automatically check if the ref exists and if it does run the cb fn\n*/\nfunction usingElRef(source, cb) {\n\tif (toValue(source)) cb(toValue(source));\n}\n/**\n* Converts a TimeRange object to an array\n*/\nfunction timeRangeToArray(timeRanges) {\n\tlet ranges = [];\n\tfor (let i = 0; i < timeRanges.length; ++i) ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n\treturn ranges;\n}\n/**\n* Converts a TextTrackList object to an array of `UseMediaTextTrack`\n*/\nfunction tracksToArray(tracks) {\n\treturn Array.from(tracks).map(({ label, kind, language, mode, activeCues, cues, inBandMetadataTrackDispatchType }, id) => ({\n\t\tid,\n\t\tlabel,\n\t\tkind,\n\t\tlanguage,\n\t\tmode,\n\t\tactiveCues,\n\t\tcues,\n\t\tinBandMetadataTrackDispatchType\n\t}));\n}\nconst defaultOptions = {\n\tsrc: \"\",\n\ttracks: []\n};\nfunction useMediaControls(target, options = {}) {\n\ttarget = toRef(target);\n\toptions = {\n\t\t...defaultOptions,\n\t\t...options\n\t};\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst listenerOptions = { passive: true };\n\tconst currentTime = shallowRef(0);\n\tconst duration = shallowRef(0);\n\tconst seeking = shallowRef(false);\n\tconst volume = shallowRef(1);\n\tconst waiting = shallowRef(false);\n\tconst ended = shallowRef(false);\n\tconst playing = shallowRef(false);\n\tconst rate = shallowRef(1);\n\tconst stalled = shallowRef(false);\n\tconst buffered = ref([]);\n\tconst tracks = ref([]);\n\tconst selectedTrack = shallowRef(-1);\n\tconst isPictureInPicture = shallowRef(false);\n\tconst muted = shallowRef(false);\n\tconst supportsPictureInPicture = document$1 && \"pictureInPictureEnabled\" in document$1;\n\tconst sourceErrorEvent = createEventHook();\n\tconst playbackErrorEvent = createEventHook();\n\t/**\n\t* Disables the specified track. If no track is specified then\n\t* all tracks will be disabled\n\t*\n\t* @param track The id of the track to disable\n\t*/\n\tconst disableTrack = (track) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tif (track) {\n\t\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\t\tel.textTracks[id].mode = \"disabled\";\n\t\t\t} else for (let i = 0; i < el.textTracks.length; ++i) el.textTracks[i].mode = \"disabled\";\n\t\t\tselectedTrack.value = -1;\n\t\t});\n\t};\n\t/**\n\t* Enables the specified track and disables the\n\t* other tracks unless otherwise specified\n\t*\n\t* @param track The track of the id of the track to enable\n\t* @param disableTracks Disable all other tracks\n\t*/\n\tconst enableTrack = (track, disableTracks = true) => {\n\t\tusingElRef(target, (el) => {\n\t\t\tconst id = typeof track === \"number\" ? track : track.id;\n\t\t\tif (disableTracks) disableTrack();\n\t\t\tel.textTracks[id].mode = \"showing\";\n\t\t\tselectedTrack.value = id;\n\t\t});\n\t};\n\t/**\n\t* Toggle picture in picture mode for the player.\n\t*/\n\tconst togglePictureInPicture = () => {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tusingElRef(target, async (el) => {\n\t\t\t\tif (supportsPictureInPicture) if (!isPictureInPicture.value) el.requestPictureInPicture().then(resolve).catch(reject);\n\t\t\t\telse document$1.exitPictureInPicture().then(resolve).catch(reject);\n\t\t\t});\n\t\t});\n\t};\n\t/**\n\t* This will automatically inject sources to the media element. The sources will be\n\t* appended as children to the media element as `` elements.\n\t*/\n\twatchEffect(() => {\n\t\tif (!document$1) return;\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tconst src = toValue(options.src);\n\t\tlet sources = [];\n\t\tif (!src) return;\n\t\tif (typeof src === \"string\") sources = [{ src }];\n\t\telse if (Array.isArray(src)) sources = src;\n\t\telse if (isObject(src)) sources = [src];\n\t\tel.querySelectorAll(\"source\").forEach((e) => {\n\t\t\te.remove();\n\t\t});\n\t\tsources.forEach(({ src: src$1, type, media }) => {\n\t\t\tconst source = document$1.createElement(\"source\");\n\t\t\tsource.setAttribute(\"src\", src$1);\n\t\t\tsource.setAttribute(\"type\", type || \"\");\n\t\t\tsource.setAttribute(\"media\", media || \"\");\n\t\t\tuseEventListener(source, \"error\", sourceErrorEvent.trigger, listenerOptions);\n\t\t\tel.appendChild(source);\n\t\t});\n\t\tel.load();\n\t});\n\t/**\n\t* Apply composable state to the element, also when element is changed\n\t*/\n\twatch([target, volume], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.volume = volume.value;\n\t});\n\twatch([target, muted], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.muted = muted.value;\n\t});\n\twatch([target, rate], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.playbackRate = rate.value;\n\t});\n\t/**\n\t* Load Tracks\n\t*/\n\twatchEffect(() => {\n\t\tif (!document$1) return;\n\t\tconst textTracks = toValue(options.tracks);\n\t\tconst el = toValue(target);\n\t\tif (!textTracks || !textTracks.length || !el) return;\n\t\t/**\n\t\t* The MediaAPI provides an API for adding text tracks, but they don't currently\n\t\t* have an API for removing text tracks, so instead we will just create and remove\n\t\t* the tracks manually using the HTML api.\n\t\t*/\n\t\tel.querySelectorAll(\"track\").forEach((e) => e.remove());\n\t\ttextTracks.forEach(({ default: isDefault, kind, label, src, srcLang }, i) => {\n\t\t\tconst track = document$1.createElement(\"track\");\n\t\t\ttrack.default = isDefault || false;\n\t\t\ttrack.kind = kind;\n\t\t\ttrack.label = label;\n\t\t\ttrack.src = src;\n\t\t\ttrack.srclang = srcLang;\n\t\t\tif (track.default) selectedTrack.value = i;\n\t\t\tel.appendChild(track);\n\t\t});\n\t});\n\t/**\n\t* This will allow us to update the current time from the timeupdate event\n\t* without setting the medias current position, but if the user changes the\n\t* current time via the ref, then the media will seek.\n\t*\n\t* If we did not use an ignorable watch, then the current time update from\n\t* the timeupdate event would cause the media to stutter.\n\t*/\n\tconst { ignoreUpdates: ignoreCurrentTimeUpdates } = watchIgnorable(currentTime, (time) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tel.currentTime = time;\n\t});\n\t/**\n\t* Using an ignorable watch so we can control the play state using a ref and not\n\t* a function\n\t*/\n\tconst { ignoreUpdates: ignorePlayingUpdates } = watchIgnorable(playing, (isPlaying) => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tif (isPlaying) el.play().catch((e) => {\n\t\t\tplaybackErrorEvent.trigger(e);\n\t\t\tthrow e;\n\t\t});\n\t\telse el.pause();\n\t});\n\tuseEventListener(target, \"timeupdate\", () => ignoreCurrentTimeUpdates(() => currentTime.value = toValue(target).currentTime), listenerOptions);\n\tuseEventListener(target, \"durationchange\", () => duration.value = toValue(target).duration, listenerOptions);\n\tuseEventListener(target, \"progress\", () => buffered.value = timeRangeToArray(toValue(target).buffered), listenerOptions);\n\tuseEventListener(target, \"seeking\", () => seeking.value = true, listenerOptions);\n\tuseEventListener(target, \"seeked\", () => seeking.value = false, listenerOptions);\n\tuseEventListener(target, [\"waiting\", \"loadstart\"], () => {\n\t\twaiting.value = true;\n\t\tignorePlayingUpdates(() => playing.value = false);\n\t}, listenerOptions);\n\tuseEventListener(target, \"loadeddata\", () => waiting.value = false, listenerOptions);\n\tuseEventListener(target, \"playing\", () => {\n\t\twaiting.value = false;\n\t\tended.value = false;\n\t\tignorePlayingUpdates(() => playing.value = true);\n\t}, listenerOptions);\n\tuseEventListener(target, \"ratechange\", () => rate.value = toValue(target).playbackRate, listenerOptions);\n\tuseEventListener(target, \"stalled\", () => stalled.value = true, listenerOptions);\n\tuseEventListener(target, \"ended\", () => ended.value = true, listenerOptions);\n\tuseEventListener(target, \"pause\", () => ignorePlayingUpdates(() => playing.value = false), listenerOptions);\n\tuseEventListener(target, \"play\", () => ignorePlayingUpdates(() => playing.value = true), listenerOptions);\n\tuseEventListener(target, \"enterpictureinpicture\", () => isPictureInPicture.value = true, listenerOptions);\n\tuseEventListener(target, \"leavepictureinpicture\", () => isPictureInPicture.value = false, listenerOptions);\n\tuseEventListener(target, \"volumechange\", () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tvolume.value = el.volume;\n\t\tmuted.value = el.muted;\n\t}, listenerOptions);\n\t/**\n\t* The following listeners need to listen to a nested\n\t* object on the target, so we will have to use a nested\n\t* watch and manually remove the listeners\n\t*/\n\tconst listeners = [];\n\tconst stop = watch([target], () => {\n\t\tconst el = toValue(target);\n\t\tif (!el) return;\n\t\tstop();\n\t\tlisteners[0] = useEventListener(el.textTracks, \"addtrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[1] = useEventListener(el.textTracks, \"removetrack\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t\tlisteners[2] = useEventListener(el.textTracks, \"change\", () => tracks.value = tracksToArray(el.textTracks), listenerOptions);\n\t});\n\ttryOnScopeDispose(() => listeners.forEach((listener) => listener()));\n\treturn {\n\t\tcurrentTime,\n\t\tduration,\n\t\twaiting,\n\t\tseeking,\n\t\tended,\n\t\tstalled,\n\t\tbuffered,\n\t\tplaying,\n\t\trate,\n\t\tvolume,\n\t\tmuted,\n\t\ttracks,\n\t\tselectedTrack,\n\t\tenableTrack,\n\t\tdisableTrack,\n\t\tsupportsPictureInPicture,\n\t\ttogglePictureInPicture,\n\t\tisPictureInPicture,\n\t\tonSourceError: sourceErrorEvent.on,\n\t\tonPlaybackError: playbackErrorEvent.on\n\t};\n}\n\n//#endregion\n//#region useMemoize/index.ts\n/**\n* Reactive function result cache based on arguments\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemoize(resolver, options) {\n\tconst initCache = () => {\n\t\tif (options === null || options === void 0 ? void 0 : options.cache) return shallowReactive(options.cache);\n\t\treturn shallowReactive(/* @__PURE__ */ new Map());\n\t};\n\tconst cache = initCache();\n\t/**\n\t* Generate key from args\n\t*/\n\tconst generateKey = (...args) => (options === null || options === void 0 ? void 0 : options.getKey) ? options.getKey(...args) : JSON.stringify(args);\n\t/**\n\t* Load data and save in cache\n\t*/\n\tconst _loadData = (key, ...args) => {\n\t\tcache.set(key, resolver(...args));\n\t\treturn cache.get(key);\n\t};\n\tconst loadData = (...args) => _loadData(generateKey(...args), ...args);\n\t/**\n\t* Delete key from cache\n\t*/\n\tconst deleteData = (...args) => {\n\t\tcache.delete(generateKey(...args));\n\t};\n\t/**\n\t* Clear cached data\n\t*/\n\tconst clearData = () => {\n\t\tcache.clear();\n\t};\n\tconst memoized = (...args) => {\n\t\tconst key = generateKey(...args);\n\t\tif (cache.has(key)) return cache.get(key);\n\t\treturn _loadData(key, ...args);\n\t};\n\tmemoized.load = loadData;\n\tmemoized.delete = deleteData;\n\tmemoized.clear = clearData;\n\tmemoized.generateKey = generateKey;\n\tmemoized.cache = cache;\n\treturn memoized;\n}\n\n//#endregion\n//#region useMemory/index.ts\n/**\n* Reactive Memory Info.\n*\n* @see https://vueuse.org/useMemory\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useMemory(options = {}) {\n\tconst memory = ref();\n\tconst isSupported = /* @__PURE__ */ useSupported(() => typeof performance !== \"undefined\" && \"memory\" in performance);\n\tif (isSupported.value) {\n\t\tconst { interval = 1e3 } = options;\n\t\tuseIntervalFn(() => {\n\t\t\tmemory.value = performance.memory;\n\t\t}, interval, {\n\t\t\timmediate: options.immediate,\n\t\t\timmediateCallback: options.immediateCallback\n\t\t});\n\t}\n\treturn {\n\t\tisSupported,\n\t\tmemory\n\t};\n}\n\n//#endregion\n//#region useMouse/index.ts\nconst UseMouseBuiltinExtractors = {\n\tpage: (event) => [event.pageX, event.pageY],\n\tclient: (event) => [event.clientX, event.clientY],\n\tscreen: (event) => [event.screenX, event.screenY],\n\tmovement: (event) => event instanceof MouseEvent ? [event.movementX, event.movementY] : null\n};\n/**\n* Reactive mouse position.\n*\n* @see https://vueuse.org/useMouse\n* @param options\n*/\nfunction useMouse(options = {}) {\n\tconst { type = \"page\", touch = true, resetOnTouchEnds = false, initialValue = {\n\t\tx: 0,\n\t\ty: 0\n\t}, window: window$1 = defaultWindow, target = window$1, scroll = true, eventFilter } = options;\n\tlet _prevMouseEvent = null;\n\tlet _prevScrollX = 0;\n\tlet _prevScrollY = 0;\n\tconst x = shallowRef(initialValue.x);\n\tconst y = shallowRef(initialValue.y);\n\tconst sourceType = shallowRef(null);\n\tconst extractor = typeof type === \"function\" ? type : UseMouseBuiltinExtractors[type];\n\tconst mouseHandler = (event) => {\n\t\tconst result = extractor(event);\n\t\t_prevMouseEvent = event;\n\t\tif (result) {\n\t\t\t[x.value, y.value] = result;\n\t\t\tsourceType.value = \"mouse\";\n\t\t}\n\t\tif (window$1) {\n\t\t\t_prevScrollX = window$1.scrollX;\n\t\t\t_prevScrollY = window$1.scrollY;\n\t\t}\n\t};\n\tconst touchHandler = (event) => {\n\t\tif (event.touches.length > 0) {\n\t\t\tconst result = extractor(event.touches[0]);\n\t\t\tif (result) {\n\t\t\t\t[x.value, y.value] = result;\n\t\t\t\tsourceType.value = \"touch\";\n\t\t\t}\n\t\t}\n\t};\n\tconst scrollHandler = () => {\n\t\tif (!_prevMouseEvent || !window$1) return;\n\t\tconst pos = extractor(_prevMouseEvent);\n\t\tif (_prevMouseEvent instanceof MouseEvent && pos) {\n\t\t\tx.value = pos[0] + window$1.scrollX - _prevScrollX;\n\t\t\ty.value = pos[1] + window$1.scrollY - _prevScrollY;\n\t\t}\n\t};\n\tconst reset = () => {\n\t\tx.value = initialValue.x;\n\t\ty.value = initialValue.y;\n\t};\n\tconst mouseHandlerWrapper = eventFilter ? (event) => eventFilter(() => mouseHandler(event), {}) : (event) => mouseHandler(event);\n\tconst touchHandlerWrapper = eventFilter ? (event) => eventFilter(() => touchHandler(event), {}) : (event) => touchHandler(event);\n\tconst scrollHandlerWrapper = eventFilter ? () => eventFilter(() => scrollHandler(), {}) : () => scrollHandler();\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\"mousemove\", \"dragover\"], mouseHandlerWrapper, listenerOptions);\n\t\tif (touch && type !== \"movement\") {\n\t\t\tuseEventListener(target, [\"touchstart\", \"touchmove\"], touchHandlerWrapper, listenerOptions);\n\t\t\tif (resetOnTouchEnds) useEventListener(target, \"touchend\", reset, listenerOptions);\n\t\t}\n\t\tif (scroll && type === \"page\") useEventListener(window$1, \"scroll\", scrollHandlerWrapper, listenerOptions);\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType\n\t};\n}\n\n//#endregion\n//#region useMouseInElement/index.ts\n/**\n* Reactive mouse position related to an element.\n*\n* @see https://vueuse.org/useMouseInElement\n* @param target\n* @param options\n*/\nfunction useMouseInElement(target, options = {}) {\n\tconst { windowResize = true, windowScroll = true, handleOutside = true, window: window$1 = defaultWindow } = options;\n\tconst type = options.type || \"page\";\n\tconst { x, y, sourceType } = useMouse(options);\n\tconst targetRef = shallowRef(target !== null && target !== void 0 ? target : window$1 === null || window$1 === void 0 ? void 0 : window$1.document.body);\n\tconst elementX = shallowRef(0);\n\tconst elementY = shallowRef(0);\n\tconst elementPositionX = shallowRef(0);\n\tconst elementPositionY = shallowRef(0);\n\tconst elementHeight = shallowRef(0);\n\tconst elementWidth = shallowRef(0);\n\tconst isOutside = shallowRef(true);\n\tfunction update() {\n\t\tif (!window$1) return;\n\t\tconst el = unrefElement(targetRef);\n\t\tif (!el || !(el instanceof Element)) return;\n\t\tconst { left, top, width, height } = el.getBoundingClientRect();\n\t\telementPositionX.value = left + (type === \"page\" ? window$1.pageXOffset : 0);\n\t\telementPositionY.value = top + (type === \"page\" ? window$1.pageYOffset : 0);\n\t\telementHeight.value = height;\n\t\telementWidth.value = width;\n\t\tconst elX = x.value - elementPositionX.value;\n\t\tconst elY = y.value - elementPositionY.value;\n\t\tisOutside.value = width === 0 || height === 0 || elX < 0 || elY < 0 || elX > width || elY > height;\n\t\tif (handleOutside || !isOutside.value) {\n\t\t\telementX.value = elX;\n\t\t\telementY.value = elY;\n\t\t}\n\t}\n\tconst stopFnList = [];\n\tfunction stop() {\n\t\tstopFnList.forEach((fn) => fn());\n\t\tstopFnList.length = 0;\n\t}\n\ttryOnMounted(() => {\n\t\tupdate();\n\t});\n\tif (window$1) {\n\t\tconst { stop: stopResizeObserver } = useResizeObserver(targetRef, update);\n\t\tconst { stop: stopMutationObserver } = useMutationObserver(targetRef, update, { attributeFilter: [\"style\", \"class\"] });\n\t\tconst stopWatch = watch([\n\t\t\ttargetRef,\n\t\t\tx,\n\t\t\ty\n\t\t], update);\n\t\tstopFnList.push(stopResizeObserver, stopMutationObserver, stopWatch);\n\t\tuseEventListener(document, \"mouseleave\", () => isOutside.value = true, { passive: true });\n\t\tif (windowScroll) stopFnList.push(useEventListener(\"scroll\", update, {\n\t\t\tcapture: true,\n\t\t\tpassive: true\n\t\t}));\n\t\tif (windowResize) stopFnList.push(useEventListener(\"resize\", update, { passive: true }));\n\t}\n\treturn {\n\t\tx,\n\t\ty,\n\t\tsourceType,\n\t\telementX,\n\t\telementY,\n\t\telementPositionX,\n\t\telementPositionY,\n\t\telementHeight,\n\t\telementWidth,\n\t\tisOutside,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region useMousePressed/index.ts\n/**\n* Reactive mouse pressing state.\n*\n* @see https://vueuse.org/useMousePressed\n* @param options\n*/\nfunction useMousePressed(options = {}) {\n\tconst { touch = true, drag = true, capture = false, initialValue = false, window: window$1 = defaultWindow } = options;\n\tconst pressed = shallowRef(initialValue);\n\tconst sourceType = shallowRef(null);\n\tif (!window$1) return {\n\t\tpressed,\n\t\tsourceType\n\t};\n\tconst onPressed = (srcType) => (event) => {\n\t\tvar _options$onPressed;\n\t\tpressed.value = true;\n\t\tsourceType.value = srcType;\n\t\t(_options$onPressed = options.onPressed) === null || _options$onPressed === void 0 || _options$onPressed.call(options, event);\n\t};\n\tconst onReleased = (event) => {\n\t\tvar _options$onReleased;\n\t\tpressed.value = false;\n\t\tsourceType.value = null;\n\t\t(_options$onReleased = options.onReleased) === null || _options$onReleased === void 0 || _options$onReleased.call(options, event);\n\t};\n\tconst target = computed(() => unrefElement(options.target) || window$1);\n\tconst listenerOptions = {\n\t\tpassive: true,\n\t\tcapture\n\t};\n\tuseEventListener(target, \"mousedown\", onPressed(\"mouse\"), listenerOptions);\n\tuseEventListener(window$1, \"mouseleave\", onReleased, listenerOptions);\n\tuseEventListener(window$1, \"mouseup\", onReleased, listenerOptions);\n\tif (drag) {\n\t\tuseEventListener(target, \"dragstart\", onPressed(\"mouse\"), listenerOptions);\n\t\tuseEventListener(window$1, \"drop\", onReleased, listenerOptions);\n\t\tuseEventListener(window$1, \"dragend\", onReleased, listenerOptions);\n\t}\n\tif (touch) {\n\t\tuseEventListener(target, \"touchstart\", onPressed(\"touch\"), listenerOptions);\n\t\tuseEventListener(window$1, \"touchend\", onReleased, listenerOptions);\n\t\tuseEventListener(window$1, \"touchcancel\", onReleased, listenerOptions);\n\t}\n\treturn {\n\t\tpressed,\n\t\tsourceType\n\t};\n}\n\n//#endregion\n//#region useNavigatorLanguage/index.ts\n/**\n*\n* Reactive useNavigatorLanguage\n*\n* Detects the currently selected user language and returns a reactive language\n* @see https://vueuse.org/useNavigatorLanguage\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNavigatorLanguage(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst navigator$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"language\" in navigator$1);\n\tconst language = shallowRef(navigator$1 === null || navigator$1 === void 0 ? void 0 : navigator$1.language);\n\tuseEventListener(window$1, \"languagechange\", () => {\n\t\tif (navigator$1) language.value = navigator$1.language;\n\t}, { passive: true });\n\treturn {\n\t\tisSupported,\n\t\tlanguage\n\t};\n}\n\n//#endregion\n//#region useNetwork/index.ts\n/**\n* Reactive Network status.\n*\n* @see https://vueuse.org/useNetwork\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNetwork(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst navigator$1 = window$1 === null || window$1 === void 0 ? void 0 : window$1.navigator;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => navigator$1 && \"connection\" in navigator$1);\n\tconst isOnline = shallowRef(true);\n\tconst saveData = shallowRef(false);\n\tconst offlineAt = shallowRef(void 0);\n\tconst onlineAt = shallowRef(void 0);\n\tconst downlink = shallowRef(void 0);\n\tconst downlinkMax = shallowRef(void 0);\n\tconst rtt = shallowRef(void 0);\n\tconst effectiveType = shallowRef(void 0);\n\tconst type = shallowRef(\"unknown\");\n\tconst connection = isSupported.value && navigator$1.connection;\n\tfunction updateNetworkInformation() {\n\t\tif (!navigator$1) return;\n\t\tisOnline.value = navigator$1.onLine;\n\t\tofflineAt.value = isOnline.value ? void 0 : Date.now();\n\t\tonlineAt.value = isOnline.value ? Date.now() : void 0;\n\t\tif (connection) {\n\t\t\tdownlink.value = connection.downlink;\n\t\t\tdownlinkMax.value = connection.downlinkMax;\n\t\t\teffectiveType.value = connection.effectiveType;\n\t\t\trtt.value = connection.rtt;\n\t\t\tsaveData.value = connection.saveData;\n\t\t\ttype.value = connection.type;\n\t\t}\n\t}\n\tconst listenerOptions = { passive: true };\n\tif (window$1) {\n\t\tuseEventListener(window$1, \"offline\", () => {\n\t\t\tisOnline.value = false;\n\t\t\tofflineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t\tuseEventListener(window$1, \"online\", () => {\n\t\t\tisOnline.value = true;\n\t\t\tonlineAt.value = Date.now();\n\t\t}, listenerOptions);\n\t}\n\tif (connection) useEventListener(connection, \"change\", updateNetworkInformation, listenerOptions);\n\tupdateNetworkInformation();\n\treturn {\n\t\tisSupported,\n\t\tisOnline: readonly(isOnline),\n\t\tsaveData: readonly(saveData),\n\t\tofflineAt: readonly(offlineAt),\n\t\tonlineAt: readonly(onlineAt),\n\t\tdownlink: readonly(downlink),\n\t\tdownlinkMax: readonly(downlinkMax),\n\t\teffectiveType: readonly(effectiveType),\n\t\trtt: readonly(rtt),\n\t\ttype: readonly(type)\n\t};\n}\n\n//#endregion\n//#region useNow/index.ts\n/**\n* Reactive current Date instance.\n*\n* @see https://vueuse.org/useNow\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useNow(options = {}) {\n\tconst { controls: exposeControls = false, interval = \"requestAnimationFrame\", immediate = true } = options;\n\tconst now = ref(/* @__PURE__ */ new Date());\n\tconst update = () => now.value = /* @__PURE__ */ new Date();\n\tconst controls = interval === \"requestAnimationFrame\" ? useRafFn(update, { immediate }) : useIntervalFn(update, interval, { immediate });\n\tif (exposeControls) return {\n\t\tnow,\n\t\t...controls\n\t};\n\telse return now;\n}\n\n//#endregion\n//#region useObjectUrl/index.ts\n/**\n* Reactive URL representing an object.\n*\n* @see https://vueuse.org/useObjectUrl\n* @param object\n*/\nfunction useObjectUrl(object) {\n\tconst url = shallowRef();\n\tconst release = () => {\n\t\tif (url.value) URL.revokeObjectURL(url.value);\n\t\turl.value = void 0;\n\t};\n\twatch(() => toValue(object), (newObject) => {\n\t\trelease();\n\t\tif (newObject) url.value = URL.createObjectURL(newObject);\n\t}, { immediate: true });\n\ttryOnScopeDispose(release);\n\treturn readonly(url);\n}\n\n//#endregion\n//#region ../math/useClamp/index.ts\n/**\n* Reactively clamp a value between two other values.\n*\n* @see https://vueuse.org/useClamp\n* @param value number\n* @param min\n* @param max\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useClamp(value, min, max) {\n\tif (typeof value === \"function\" || isReadonly(value)) return computed(() => clamp(toValue(value), toValue(min), toValue(max)));\n\tconst _value = ref(value);\n\treturn computed({\n\t\tget() {\n\t\t\treturn _value.value = clamp(_value.value, toValue(min), toValue(max));\n\t\t},\n\t\tset(value$1) {\n\t\t\t_value.value = clamp(value$1, toValue(min), toValue(max));\n\t\t}\n\t});\n}\n\n//#endregion\n//#region useOffsetPagination/index.ts\nfunction useOffsetPagination(options) {\n\tconst { total = Number.POSITIVE_INFINITY, pageSize = 10, page = 1, onPageChange = noop, onPageSizeChange = noop, onPageCountChange = noop } = options;\n\tconst currentPageSize = useClamp(pageSize, 1, Number.POSITIVE_INFINITY);\n\tconst pageCount = computed(() => Math.max(1, Math.ceil(toValue(total) / toValue(currentPageSize))));\n\tconst currentPage = useClamp(page, 1, pageCount);\n\tconst isFirstPage = computed(() => currentPage.value === 1);\n\tconst isLastPage = computed(() => currentPage.value === pageCount.value);\n\tif (isRef(page)) syncRef(page, currentPage, { direction: isReadonly(page) ? \"ltr\" : \"both\" });\n\tif (isRef(pageSize)) syncRef(pageSize, currentPageSize, { direction: isReadonly(pageSize) ? \"ltr\" : \"both\" });\n\tfunction prev() {\n\t\tcurrentPage.value--;\n\t}\n\tfunction next() {\n\t\tcurrentPage.value++;\n\t}\n\tconst returnValue = {\n\t\tcurrentPage,\n\t\tcurrentPageSize,\n\t\tpageCount,\n\t\tisFirstPage,\n\t\tisLastPage,\n\t\tprev,\n\t\tnext\n\t};\n\twatch(currentPage, () => {\n\t\tonPageChange(reactive(returnValue));\n\t});\n\twatch(currentPageSize, () => {\n\t\tonPageSizeChange(reactive(returnValue));\n\t});\n\twatch(pageCount, () => {\n\t\tonPageCountChange(reactive(returnValue));\n\t});\n\treturn returnValue;\n}\n\n//#endregion\n//#region useOnline/index.ts\n/**\n* Reactive online state.\n*\n* @see https://vueuse.org/useOnline\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useOnline(options = {}) {\n\tconst { isOnline } = useNetwork(options);\n\treturn isOnline;\n}\n\n//#endregion\n//#region usePageLeave/index.ts\n/**\n* Reactive state to show whether mouse leaves the page.\n*\n* @see https://vueuse.org/usePageLeave\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePageLeave(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst isLeft = shallowRef(false);\n\tconst handler = (event) => {\n\t\tif (!window$1) return;\n\t\tevent = event || window$1.event;\n\t\tisLeft.value = !(event.relatedTarget || event.toElement);\n\t};\n\tif (window$1) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(window$1, \"mouseout\", handler, listenerOptions);\n\t\tuseEventListener(window$1.document, \"mouseleave\", handler, listenerOptions);\n\t\tuseEventListener(window$1.document, \"mouseenter\", handler, listenerOptions);\n\t}\n\treturn isLeft;\n}\n\n//#endregion\n//#region useScreenOrientation/index.ts\n/**\n* Reactive screen orientation\n*\n* @see https://vueuse.org/useScreenOrientation\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction useScreenOrientation(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"screen\" in window$1 && \"orientation\" in window$1.screen);\n\tconst screenOrientation = isSupported.value ? window$1.screen.orientation : {};\n\tconst orientation = ref(screenOrientation.type);\n\tconst angle = shallowRef(screenOrientation.angle || 0);\n\tif (isSupported.value) useEventListener(window$1, \"orientationchange\", () => {\n\t\torientation.value = screenOrientation.type;\n\t\tangle.value = screenOrientation.angle;\n\t}, { passive: true });\n\tconst lockOrientation = (type) => {\n\t\tif (isSupported.value && typeof screenOrientation.lock === \"function\") return screenOrientation.lock(type);\n\t\treturn Promise.reject(/* @__PURE__ */ new Error(\"Not supported\"));\n\t};\n\tconst unlockOrientation = () => {\n\t\tif (isSupported.value && typeof screenOrientation.unlock === \"function\") screenOrientation.unlock();\n\t};\n\treturn {\n\t\tisSupported,\n\t\torientation,\n\t\tangle,\n\t\tlockOrientation,\n\t\tunlockOrientation\n\t};\n}\n\n//#endregion\n//#region useParallax/index.ts\n/**\n* Create parallax effect easily. It uses `useDeviceOrientation` and fallback to `useMouse`\n* if orientation is not supported.\n*\n* @param target\n* @param options\n*/\nfunction useParallax(target, options = {}) {\n\tconst { deviceOrientationTiltAdjust = (i) => i, deviceOrientationRollAdjust = (i) => i, mouseTiltAdjust = (i) => i, mouseRollAdjust = (i) => i, window: window$1 = defaultWindow } = options;\n\tconst orientation = reactive(useDeviceOrientation({ window: window$1 }));\n\tconst screenOrientation = reactive(useScreenOrientation({ window: window$1 }));\n\tconst { elementX: x, elementY: y, elementWidth: width, elementHeight: height } = useMouseInElement(target, {\n\t\thandleOutside: false,\n\t\twindow: window$1\n\t});\n\tconst source = computed(() => {\n\t\tif (orientation.isSupported && (orientation.alpha != null && orientation.alpha !== 0 || orientation.gamma != null && orientation.gamma !== 0)) return \"deviceOrientation\";\n\t\treturn \"mouse\";\n\t});\n\treturn {\n\t\troll: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = -orientation.beta / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationRollAdjust(value);\n\t\t\t} else return mouseRollAdjust(-(y.value - height.value / 2) / height.value);\n\t\t}),\n\t\ttilt: computed(() => {\n\t\t\tif (source.value === \"deviceOrientation\") {\n\t\t\t\tlet value;\n\t\t\t\tswitch (screenOrientation.orientation) {\n\t\t\t\t\tcase \"landscape-primary\":\n\t\t\t\t\t\tvalue = orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"landscape-secondary\":\n\t\t\t\t\t\tvalue = -orientation.beta / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-primary\":\n\t\t\t\t\t\tvalue = orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"portrait-secondary\":\n\t\t\t\t\t\tvalue = -orientation.gamma / 90;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault: value = orientation.gamma / 90;\n\t\t\t\t}\n\t\t\t\treturn deviceOrientationTiltAdjust(value);\n\t\t\t} else return mouseTiltAdjust((x.value - width.value / 2) / width.value);\n\t\t}),\n\t\tsource\n\t};\n}\n\n//#endregion\n//#region useParentElement/index.ts\nfunction useParentElement(element = useCurrentElement()) {\n\tconst parentElement = shallowRef();\n\tconst update = () => {\n\t\tconst el = unrefElement(element);\n\t\tif (el) parentElement.value = el.parentElement;\n\t};\n\ttryOnMounted(update);\n\twatch(() => toValue(element), update);\n\treturn parentElement;\n}\n\n//#endregion\n//#region usePerformanceObserver/index.ts\n/**\n* Observe performance metrics.\n*\n* @see https://vueuse.org/usePerformanceObserver\n* @param options\n*/\nfunction usePerformanceObserver(options, callback) {\n\tconst { window: window$1 = defaultWindow, immediate = true,...performanceOptions } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => window$1 && \"PerformanceObserver\" in window$1);\n\tlet observer;\n\tconst stop = () => {\n\t\tobserver === null || observer === void 0 || observer.disconnect();\n\t};\n\tconst start = () => {\n\t\tif (isSupported.value) {\n\t\t\tstop();\n\t\t\tobserver = new PerformanceObserver(callback);\n\t\t\tobserver.observe(performanceOptions);\n\t\t}\n\t};\n\ttryOnScopeDispose(stop);\n\tif (immediate) start();\n\treturn {\n\t\tisSupported,\n\t\tstart,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region usePointer/index.ts\nconst defaultState = {\n\tx: 0,\n\ty: 0,\n\tpointerId: 0,\n\tpressure: 0,\n\ttiltX: 0,\n\ttiltY: 0,\n\twidth: 0,\n\theight: 0,\n\ttwist: 0,\n\tpointerType: null\n};\nconst keys = /* @__PURE__ */ Object.keys(defaultState);\n/**\n* Reactive pointer state.\n*\n* @see https://vueuse.org/usePointer\n* @param options\n*/\nfunction usePointer(options = {}) {\n\tconst { target = defaultWindow } = options;\n\tconst isInside = shallowRef(false);\n\tconst state = shallowRef(options.initialValue || {});\n\tObject.assign(state.value, defaultState, state.value);\n\tconst handler = (event) => {\n\t\tisInside.value = true;\n\t\tif (options.pointerTypes && !options.pointerTypes.includes(event.pointerType)) return;\n\t\tstate.value = objectPick(event, keys, false);\n\t};\n\tif (target) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(target, [\n\t\t\t\"pointerdown\",\n\t\t\t\"pointermove\",\n\t\t\t\"pointerup\"\n\t\t], handler, listenerOptions);\n\t\tuseEventListener(target, \"pointerleave\", () => isInside.value = false, listenerOptions);\n\t}\n\treturn {\n\t\t...toRefs(state),\n\t\tisInside\n\t};\n}\n\n//#endregion\n//#region usePointerLock/index.ts\n/**\n* Reactive pointer lock.\n*\n* @see https://vueuse.org/usePointerLock\n* @param target\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePointerLock(target, options = {}) {\n\tconst { document: document$1 = defaultDocument } = options;\n\tconst isSupported = /* @__PURE__ */ useSupported(() => document$1 && \"pointerLockElement\" in document$1);\n\tconst element = shallowRef();\n\tconst triggerElement = shallowRef();\n\tlet targetElement;\n\tif (isSupported.value) {\n\t\tconst listenerOptions = { passive: true };\n\t\tuseEventListener(document$1, \"pointerlockchange\", () => {\n\t\t\tvar _pointerLockElement;\n\t\t\tconst currentElement = (_pointerLockElement = document$1.pointerLockElement) !== null && _pointerLockElement !== void 0 ? _pointerLockElement : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\telement.value = document$1.pointerLockElement;\n\t\t\t\tif (!element.value) targetElement = triggerElement.value = null;\n\t\t\t}\n\t\t}, listenerOptions);\n\t\tuseEventListener(document$1, \"pointerlockerror\", () => {\n\t\t\tvar _pointerLockElement2;\n\t\t\tconst currentElement = (_pointerLockElement2 = document$1.pointerLockElement) !== null && _pointerLockElement2 !== void 0 ? _pointerLockElement2 : element.value;\n\t\t\tif (targetElement && currentElement === targetElement) {\n\t\t\t\tconst action = document$1.pointerLockElement ? \"release\" : \"acquire\";\n\t\t\t\tthrow new Error(`Failed to ${action} pointer lock.`);\n\t\t\t}\n\t\t}, listenerOptions);\n\t}\n\tasync function lock(e) {\n\t\tvar _unrefElement;\n\t\tif (!isSupported.value) throw new Error(\"Pointer Lock API is not supported by your browser.\");\n\t\ttriggerElement.value = e instanceof Event ? e.currentTarget : null;\n\t\ttargetElement = e instanceof Event ? (_unrefElement = unrefElement(target)) !== null && _unrefElement !== void 0 ? _unrefElement : triggerElement.value : unrefElement(e);\n\t\tif (!targetElement) throw new Error(\"Target element undefined.\");\n\t\ttargetElement.requestPointerLock();\n\t\treturn await until(element).toBe(targetElement);\n\t}\n\tasync function unlock() {\n\t\tif (!element.value) return false;\n\t\tdocument$1.exitPointerLock();\n\t\tawait until(element).toBeNull();\n\t\treturn true;\n\t}\n\treturn {\n\t\tisSupported,\n\t\telement,\n\t\ttriggerElement,\n\t\tlock,\n\t\tunlock\n\t};\n}\n\n//#endregion\n//#region usePointerSwipe/index.ts\n/**\n* Reactive swipe detection based on PointerEvents.\n*\n* @see https://vueuse.org/usePointerSwipe\n* @param target\n* @param options\n*/\nfunction usePointerSwipe(target, options = {}) {\n\tconst targetRef = toRef(target);\n\tconst { threshold = 50, onSwipe, onSwipeEnd, onSwipeStart, disableTextSelect = false } = options;\n\tconst posStart = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosStart = (x, y) => {\n\t\tposStart.x = x;\n\t\tposStart.y = y;\n\t};\n\tconst posEnd = reactive({\n\t\tx: 0,\n\t\ty: 0\n\t});\n\tconst updatePosEnd = (x, y) => {\n\t\tposEnd.x = x;\n\t\tposEnd.y = y;\n\t};\n\tconst distanceX = computed(() => posStart.x - posEnd.x);\n\tconst distanceY = computed(() => posStart.y - posEnd.y);\n\tconst { max, abs } = Math;\n\tconst isThresholdExceeded = computed(() => max(abs(distanceX.value), abs(distanceY.value)) >= threshold);\n\tconst isSwiping = shallowRef(false);\n\tconst isPointerDown = shallowRef(false);\n\tconst direction = computed(() => {\n\t\tif (!isThresholdExceeded.value) return \"none\";\n\t\tif (abs(distanceX.value) > abs(distanceY.value)) return distanceX.value > 0 ? \"left\" : \"right\";\n\t\telse return distanceY.value > 0 ? \"up\" : \"down\";\n\t});\n\tconst eventIsAllowed = (e) => {\n\t\tvar _ref, _options$pointerTypes, _options$pointerTypes2;\n\t\tconst isReleasingButton = e.buttons === 0;\n\t\tconst isPrimaryButton = e.buttons === 1;\n\t\treturn (_ref = (_options$pointerTypes = (_options$pointerTypes2 = options.pointerTypes) === null || _options$pointerTypes2 === void 0 ? void 0 : _options$pointerTypes2.includes(e.pointerType)) !== null && _options$pointerTypes !== void 0 ? _options$pointerTypes : isReleasingButton || isPrimaryButton) !== null && _ref !== void 0 ? _ref : true;\n\t};\n\tconst listenerOptions = { passive: true };\n\tconst stops = [\n\t\tuseEventListener(target, \"pointerdown\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tisPointerDown.value = true;\n\t\t\tconst eventTarget = e.target;\n\t\t\teventTarget === null || eventTarget === void 0 || eventTarget.setPointerCapture(e.pointerId);\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosStart(x, y);\n\t\t\tupdatePosEnd(x, y);\n\t\t\tonSwipeStart === null || onSwipeStart === void 0 || onSwipeStart(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"pointermove\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (!isPointerDown.value) return;\n\t\t\tconst { clientX: x, clientY: y } = e;\n\t\t\tupdatePosEnd(x, y);\n\t\t\tif (!isSwiping.value && isThresholdExceeded.value) isSwiping.value = true;\n\t\t\tif (isSwiping.value) onSwipe === null || onSwipe === void 0 || onSwipe(e);\n\t\t}, listenerOptions),\n\t\tuseEventListener(target, \"pointerup\", (e) => {\n\t\t\tif (!eventIsAllowed(e)) return;\n\t\t\tif (isSwiping.value) onSwipeEnd === null || onSwipeEnd === void 0 || onSwipeEnd(e, direction.value);\n\t\t\tisPointerDown.value = false;\n\t\t\tisSwiping.value = false;\n\t\t}, listenerOptions)\n\t];\n\ttryOnMounted(() => {\n\t\tvar _targetRef$value;\n\t\t(_targetRef$value = targetRef.value) === null || _targetRef$value === void 0 || (_targetRef$value = _targetRef$value.style) === null || _targetRef$value === void 0 || _targetRef$value.setProperty(\"touch-action\", \"pan-y\");\n\t\tif (disableTextSelect) {\n\t\t\tvar _targetRef$value2, _targetRef$value3, _targetRef$value4;\n\t\t\t(_targetRef$value2 = targetRef.value) === null || _targetRef$value2 === void 0 || (_targetRef$value2 = _targetRef$value2.style) === null || _targetRef$value2 === void 0 || _targetRef$value2.setProperty(\"-webkit-user-select\", \"none\");\n\t\t\t(_targetRef$value3 = targetRef.value) === null || _targetRef$value3 === void 0 || (_targetRef$value3 = _targetRef$value3.style) === null || _targetRef$value3 === void 0 || _targetRef$value3.setProperty(\"-ms-user-select\", \"none\");\n\t\t\t(_targetRef$value4 = targetRef.value) === null || _targetRef$value4 === void 0 || (_targetRef$value4 = _targetRef$value4.style) === null || _targetRef$value4 === void 0 || _targetRef$value4.setProperty(\"user-select\", \"none\");\n\t\t}\n\t});\n\tconst stop = () => stops.forEach((s) => s());\n\treturn {\n\t\tisSwiping: readonly(isSwiping),\n\t\tdirection: readonly(direction),\n\t\tposStart: readonly(posStart),\n\t\tposEnd: readonly(posEnd),\n\t\tdistanceX,\n\t\tdistanceY,\n\t\tstop\n\t};\n}\n\n//#endregion\n//#region usePreferredColorScheme/index.ts\n/**\n* Reactive prefers-color-scheme media query.\n*\n* @see https://vueuse.org/usePreferredColorScheme\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredColorScheme(options) {\n\tconst isLight = useMediaQuery(\"(prefers-color-scheme: light)\", options);\n\tconst isDark = useMediaQuery(\"(prefers-color-scheme: dark)\", options);\n\treturn computed(() => {\n\t\tif (isDark.value) return \"dark\";\n\t\tif (isLight.value) return \"light\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePreferredContrast/index.ts\n/**\n* Reactive prefers-contrast media query.\n*\n* @see https://vueuse.org/usePreferredContrast\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredContrast(options) {\n\tconst isMore = useMediaQuery(\"(prefers-contrast: more)\", options);\n\tconst isLess = useMediaQuery(\"(prefers-contrast: less)\", options);\n\tconst isCustom = useMediaQuery(\"(prefers-contrast: custom)\", options);\n\treturn computed(() => {\n\t\tif (isMore.value) return \"more\";\n\t\tif (isLess.value) return \"less\";\n\t\tif (isCustom.value) return \"custom\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePreferredLanguages/index.ts\n/**\n* Reactive Navigator Languages.\n*\n* @see https://vueuse.org/usePreferredLanguages\n* @param options\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredLanguages(options = {}) {\n\tconst { window: window$1 = defaultWindow } = options;\n\tif (!window$1) return shallowRef([\"en\"]);\n\tconst navigator$1 = window$1.navigator;\n\tconst value = shallowRef(navigator$1.languages);\n\tuseEventListener(window$1, \"languagechange\", () => {\n\t\tvalue.value = navigator$1.languages;\n\t}, { passive: true });\n\treturn value;\n}\n\n//#endregion\n//#region usePreferredReducedMotion/index.ts\n/**\n* Reactive prefers-reduced-motion media query.\n*\n* @see https://vueuse.org/usePreferredReducedMotion\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedMotion(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-motion: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePreferredReducedTransparency/index.ts\n/**\n* Reactive prefers-reduced-transparency media query.\n*\n* @see https://vueuse.org/usePreferredReducedTransparency\n* @param [options]\n*\n* @__NO_SIDE_EFFECTS__\n*/\nfunction usePreferredReducedTransparency(options) {\n\tconst isReduced = useMediaQuery(\"(prefers-reduced-transparency: reduce)\", options);\n\treturn computed(() => {\n\t\tif (isReduced.value) return \"reduce\";\n\t\treturn \"no-preference\";\n\t});\n}\n\n//#endregion\n//#region usePrevious/index.ts\nfunction usePrevious(value, initialValue) {\n\tconst previous = shallowRef(initialValue);\n\twatch(toRef(value), (_, oldValue) => {\n\t\tprevious.value = oldValue;\n\t}, { flush: \"sync\" });\n\treturn readonly(previous);\n}\n\n//#endregion\n//#region useScreenSafeArea/index.ts\nconst topVarName = \"--vueuse-safe-area-top\";\nconst rightVarName = \"--vueuse-safe-area-right\";\nconst bottomVarName = \"--vueuse-safe-area-bottom\";\nconst leftVarName = \"--vueuse-safe-area-left\";\n/**\n* Reactive `env(safe-area-inset-*)`\n*\n* @see https://vueuse.org/useScreenSafeArea\n*/\nfunction useScreenSafeArea() {\n\tconst top = shallowRef(\"\");\n\tconst right = shallowRef(\"\");\n\tconst bottom = shallowRef(\"\");\n\tconst left = shallowRef(\"\");\n\tif (isClient) {\n\t\tconst topCssVar = useCssVar(topVarName);\n\t\tconst rightCssVar = useCssVar(rightVarName);\n\t\tconst bottomCssVar = useCssVar(bottomVarName);\n\t\tconst leftCssVar = useCssVar(leftVarName);\n\t\ttopCssVar.value = \"env(safe-area-inset-top, 0px)\";\n\t\trightCssVar.value = \"env(safe-area-inset-right, 0px)\";\n\t\tbottomCssVar.value = \"env(safe-area-inset-bottom, 0px)\";\n\t\tleftCssVar.value = \"env(safe-area-inset-left, 0px)\";\n\t\ttryOnMounted(update);\n\t\tuseEventListener(\"resize\", useDebounceFn(update), { passive: true });\n\t}\n\tfunction update() {\n\t\ttop.value = getValue(topVarName);\n\t\tright.value = getValue(rightVarName);\n\t\tbottom.value = getValue(bottomVarName);\n\t\tleft.value = getValue(leftVarName);\n\t}\n\treturn {\n\t\ttop,\n\t\tright,\n\t\tbottom,\n\t\tleft,\n\t\tupdate\n\t};\n}\nfunction getValue(position) {\n\treturn getComputedStyle(document.documentElement).getPropertyValue(position);\n}\n\n//#endregion\n//#region useScriptTag/index.ts\n/**\n* Async script tag loading.\n*\n* @see https://vueuse.org/useScriptTag\n* @param src\n* @param onLoaded\n* @param options\n*/\nfunction useScriptTag(src, onLoaded = noop, options = {}) {\n\tconst { immediate = true, manual = false, type = \"text/javascript\", async = true, crossOrigin, referrerPolicy, noModule, defer, document: document$1 = defaultDocument, attrs = {}, nonce = void 0 } = options;\n\tconst scriptTag = shallowRef(null);\n\tlet _promise = null;\n\t/**\n\t* Load the script specified via `src`.\n\t*\n\t* @param waitForScriptLoad Whether if the Promise should resolve once the \"load\" event is emitted by the