diff --git a/.dockerignore b/.dockerignore index 26d30488..bc155a7c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,11 +3,5 @@ __pycache__ *.pyc .env Dockerfile -docs/ tmp/ -data/ -LICENSE -README.md -README_en.md -manager/static -manager/static/webui/ \ No newline at end of file +data/ \ No newline at end of file diff --git a/.github/workflows/docker-image.yml b/.github/workflows/docker-image.yml index 1ed76391..68174a38 100644 --- a/.github/workflows/docker-image.yml +++ b/.github/workflows/docker-image.yml @@ -7,30 +7,31 @@ on: jobs: release: - name: Release Docker image + name: Release Docker images runs-on: ubuntu-latest permissions: packages: write contents: write id-token: write issues: write - steps: - name: Check Disk Space run: | df -h docker system df + - name: Clean up Docker resources run: | docker system prune -af docker builder prune -af - - name: Check out the repo + + - name: Checkout code uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - - name: Log in to the GitHub Container Registry + - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io @@ -42,13 +43,26 @@ jobs: run: | echo "VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - - name: Build and push Docker image - id: build_push + # 构建 xiaozhi-server 镜像 + - name: Build and push xiaozhi-server uses: docker/build-push-action@v6 with: context: . + file: Dockerfile-server push: true tags: | - ghcr.io/${{ github.repository }}:${{ env.VERSION }} - ghcr.io/${{ github.repository }}:latest + ghcr.io/${{ github.repository }}:server_${{ env.VERSION }} + ghcr.io/${{ github.repository }}:server_latest + platforms: linux/amd64,linux/arm64 + + # 构建 manager-api 镜像 + - name: Build and push manager-web + uses: docker/build-push-action@v6 + with: + context: . + file: Dockerfile-web + push: true + tags: | + ghcr.io/${{ github.repository }}:web_${{ env.VERSION }} + ghcr.io/${{ github.repository }}:web_latest platforms: linux/amd64,linux/arm64 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 62f84120..698d638c 100644 --- a/.gitignore +++ b/.gitignore @@ -144,9 +144,10 @@ cython_debug/ model.pt tmp .DS_Store +main/xiaozhi-server/data +main/manager-web/node_modules .config.yaml .secrets.yaml .private_config.yaml .env.development -docker-compose.yml -web/vue/node_modules + diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index cd1fef9e..00000000 --- a/Dockerfile +++ /dev/null @@ -1,16 +0,0 @@ -# 第一阶段:构建 Python 依赖 -FROM kalicyh/poetry:v3.10_xiaozhi AS builder - -WORKDIR /app - -# 同时拷贝本地环境.venv -COPY . . -# 检查是否有缺失 -RUN poetry install --no-root - -# 设置虚拟环境路径 -ENV PATH="/app/.venv/bin:$PATH" - -# 启动应用 -ENTRYPOINT ["poetry", "run", "python"] -CMD ["app.py"] \ No newline at end of file diff --git a/Dockerfile-pip b/Dockerfile-pip deleted file mode 100755 index 61286673..00000000 --- a/Dockerfile-pip +++ /dev/null @@ -1,51 +0,0 @@ -# 第一阶段:前端构建 -FROM node:18 AS frontend-builder - -WORKDIR /app/ZhiKongTaiWeb - -# 配置npm使用淘宝源 -RUN npm config set registry https://registry.npmmirror.com - -COPY ZhiKongTaiWeb/package*.json ./ - -# 安装axios依赖 -RUN npm install axios -RUN npm install - -COPY ZhiKongTaiWeb . - -RUN npm run build - -# 第二阶段:构建Python依赖 -FROM python:3.10-slim AS builder - -WORKDIR /app - -COPY requirements.txt . - -# 优化apt安装 -RUN pip install --no-cache-dir -r requirements.txt \ - -i https://mirrors.aliyun.com/pypi/simple/ - -# 第三阶段:生产镜像 -FROM python:3.10-slim - -WORKDIR /opt/xiaozhi-esp32-server - -# 优化apt安装 -RUN echo "deb https://mirrors.aliyun.com/debian/ bookworm main contrib non-free non-free-firmware" > /etc/apt/sources.list && \ - echo "deb https://mirrors.aliyun.com/debian/ bookworm-updates main contrib non-free non-free-firmware" >> /etc/apt/sources.list && \ - apt-get update && \ - apt-get install -y --no-install-recommends libopus0 ffmpeg && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - -# 从构建阶段复制Python包和前端构建产物 -COPY --from=builder /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages -COPY --from=frontend-builder /app/ZhiKongTaiWeb/dist /opt/xiaozhi-esp32-server/manager/static/webui - -# 复制应用代码 -COPY . . - -# 启动应用 -CMD ["python", "app.py"] \ No newline at end of file diff --git a/Dockerfile-server b/Dockerfile-server new file mode 100644 index 00000000..e81b8ccf --- /dev/null +++ b/Dockerfile-server @@ -0,0 +1,29 @@ +# 第一阶段:构建Python依赖 +FROM python:3.10-slim AS builder + +WORKDIR /app + +COPY main/xiaozhi-server/requirements.txt . + +# 优化apt安装 +RUN pip install --no-cache-dir -r requirements.txt + +# 第三阶段:生产镜像 +FROM python:3.10-slim + +WORKDIR /opt/xiaozhi-esp32-server + +# 优化apt安装 +RUN apt-get update && \ + apt-get install -y --no-install-recommends libopus0 ffmpeg && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# 从构建阶段复制Python包和前端构建产物 +COPY --from=builder /usr/local/lib/python3.10/site-packages /usr/local/lib/python3.10/site-packages + +# 复制应用代码 +COPY main/xiaozhi-server . + +# 启动应用 +CMD ["python", "app.py"] \ No newline at end of file diff --git a/Dockerfile-web b/Dockerfile-web new file mode 100644 index 00000000..0c4001f1 --- /dev/null +++ b/Dockerfile-web @@ -0,0 +1,40 @@ +# 第一阶段:构建Vue前端 +FROM node:18 as web-builder +WORKDIR /app +COPY main/manager-web/package*.json ./ +RUN npm install +COPY main/manager-web . +RUN npm run build + +# 第二阶段:构建Java后端 +FROM maven:3-eclipse-temurin-21-alpine as api-builder +WORKDIR /app +COPY main/manager-api/pom.xml . +COPY main/manager-api/src ./src +RUN mvn clean package -Dmaven.test.skip=true + +# 第三阶段:构建最终镜像 +FROM eclipse-temurin:21-jdk-jammy + +# 安装Nginx并清理缓存 +RUN apt-get update && \ + apt-get install -y nginx && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +# 配置Nginx +COPY docs/docker/nginx.conf /etc/nginx/conf.d/default.conf + +# 复制前端构建产物 +COPY --from=web-builder /app/dist /usr/share/nginx/html + +# 复制Java后端JAR包 +COPY --from=api-builder /app/target/xiaozhi-esp32-api.jar /app/xiaozhi-esp32-api.jar + +# 暴露端口 +EXPOSE 8002 + +# 启动脚本 +COPY docs/docker/start.sh /start.sh +RUN chmod +x /start.sh +CMD ["/start.sh"] \ No newline at end of file diff --git a/README.md b/README.md index fc1cb425..ece6f772 100644 --- a/README.md +++ b/README.md @@ -129,55 +129,67 @@ server: 基于 `xiaozhi-esp32` 协议,通过 WebSocket 实现数据交互。 - **对话交互** 支持唤醒对话、手动对话及实时打断。长时间无对话时自动休眠 +- **意图识别** + 支持使用LLM意图识别、function call函数调用,减少硬编码意图判断 - **多语言识别** 支持国语、粤语、英语、日语、韩语(默认使用 FunASR)。 - **LLM 模块** 支持灵活切换 LLM 模块,默认使用 ChatGLMLLM,也可选用阿里百炼、DeepSeek、Ollama 等接口。 - **TTS 模块** 支持 EdgeTTS(默认)、火山引擎豆包 TTS 等多种 TTS 接口,满足语音合成需求。 +- **记忆功能** + 支持超长记忆、本地总结记忆、无记忆三种模式,满足不同场景需求。 ### 正在开发 🚧 -- 对话记忆功能 - 多种心情模式 - 智控台webui +- iot功能 ![图片](docs/images/webui.png) --- ## 本项目支持的平台/组件列表 📋 -### LLM +### LLM 语言模型 -| 类型 | 平台名称 | 使用方式 | 收费模式 | 备注 | -|:---:|:------------------:|:---------------------:|:--------:|:-----------------------------------------------------------------:| -| LLM | 阿里百炼 (AliLLM) | openai 接口调用 | 消耗 token | [点击申请密钥](https://bailian.console.aliyun.com/?apiKey=1#/api-key) | -| LLM | 深度求索 (DeepSeekLLM) | openai 接口调用 | 消耗 token | [点击申请密钥](https://platform.deepseek.com/) | -| LLM | 智谱(ChatGLMLLM) | openai 接口调用 | 免费 | 虽然免费,仍需[点击申请密钥](https://bigmodel.cn/usercenter/proj-mgmt/apikeys) | -| LLM | OllamaLLM | ollama 接口调用 | 免费/自定义 | 需预先下载模型(`ollama pull`),服务地址:`http://localhost:11434` | -| LLM | DifyLLM | dify 接口调用 | 消耗 token | 本地化部署,注意配置提示词需在 Dify 控制台设置 | -| LLM | GeminiLLM | gemini 接口调用 | 免费 | [点击申请密钥](https://aistudio.google.com/apikey) | -| LLM | CozeLLM | coze 接口调用 | 消耗 token | 需提供 bot_id、user_id 及个人令牌 | -| LLM | Home Assistant | homeassistant语音助手接口调用 | 免费 | 需提供home assistant令牌 | +| 类型 | 平台名称 | 使用方式 | 收费模式 | 备注 | +|:---:|:------------------:|:---------------------:|:-----------:|:-----------------------------------------------------------------------------------------------------------------------:| +| LLM | 阿里百炼 (AliLLM) | openai 接口调用 | 消耗 token | [点击申请密钥](https://bailian.console.aliyun.com/?apiKey=1#/api-key) | +| LLM | DoubaoLLM | openai 接口调用 | 消耗 token | [点击申请密钥](https://console.volcengine.com/ark/region:ark+cn-beijing/model/detail?Id=doubao-pro-32k&projectName=undefined) | +| LLM | 深度求索 (DeepSeekLLM) | openai 接口调用 | 消耗 token | [点击申请密钥](https://platform.deepseek.com/) | +| LLM | 智谱(ChatGLMLLM) | openai 接口调用 | 免费 | 虽然免费,仍需[点击申请密钥](https://bigmodel.cn/usercenter/proj-mgmt/apikeys) | +| LLM | OllamaLLM | ollama 接口调用 | 免费/消耗 token | 需预先下载模型(`ollama pull`),服务地址:`http://localhost:11434` | +| LLM | DifyLLM | dify 接口调用 | 免费/消耗 token | 本地化部署,注意配置提示词需在 Dify 控制台设置 | +| LLM | FastgptLLM | fastgpt 接口调用 | 免费/消耗 token | 本地化部署,注意配置提示词需在 Fastgpt 控制台设置 | +| LLM | GeminiLLM | gemini 接口调用 | 免费 | [点击申请密钥](https://aistudio.google.com/apikey) | +| LLM | CozeLLM | coze 接口调用 | 消耗 token | 需提供 bot_id、user_id 及个人令牌 | +| LLM | Home Assistant | homeassistant语音助手接口调用 | 免费 | 需提供home assistant令牌 | 实际上,任何支持 openai 接口调用的 LLM 均可接入使用。 --- -### TTS +### TTS 语音合成 | 类型 | 平台名称 | 使用方式 | 收费模式 | 备注 | |:---:|:----------------------:|:----:|:--------:|:-------------------------------------------------------------------------:| | TTS | EdgeTTS | 接口调用 | 免费 | 默认 TTS,基于微软语音合成技术 | | TTS | 火山引擎豆包 TTS (DoubaoTTS) | 接口调用 | 消耗 token | [点击创建密钥](https://console.volcengine.com/speech/service/8);建议使用付费版本以获得更高并发 | +| TTS | AliyunTTS | 接口调用 | 消耗 token | [点击创建密钥](https://nls-portal.console.aliyun.com/applist) | | TTS | CosyVoiceSiliconflow | 接口调用 | 消耗 token | 需申请硅基流动 API 密钥;输出格式为 wav | +| TTS | TTS302AI | 接口调用 | 消耗 token | [点击创建密钥](https://dash.302.ai/apis/list) | | TTS | CozeCnTTS | 接口调用 | 消耗 token | 需提供 Coze API key;输出格式为 wav | +| TTS | ACGNTTS | 接口调用 | 消耗 token | [联系网站管理员购买密钥](www.ttson.cn) | +| TTS | OpenAITTS | 接口调用 | 消耗 token | 境外使用,境外购买 | | TTS | FishSpeech | 接口调用 | 免费/自定义 | 本地启动 TTS 服务;启动方法见配置文件内说明 | | TTS | GPT_SOVITS_V2 | 接口调用 | 免费/自定义 | 本地启动 TTS 服务,适用于个性化语音合成场景 | +| TTS | GPT_SOVITS_V3 | 接口调用 | 免费/自定义 | 本地启动 TTS 服务,适用于个性化语音合成场景 | +| TTS | MinimaxTTS | 接口调用 | 免费/自定义 | 本地启动 TTS 服务,适用于个性化语音合成场景 | --- -### VAD +### VAD 语音活动检测 | 类型 | 平台名称 | 使用方式 | 收费模式 | 备注 | |:---:|:---------:|:----:|:----:|:--:| @@ -185,7 +197,7 @@ server: --- -### ASR +### ASR 语音识别 | 类型 | 平台名称 | 使用方式 | 收费模式 | 备注 | |:---:|:---------:|:----:|:----:|:--:| @@ -194,11 +206,21 @@ server: --- -### Memory +### Memory 记忆存储 -| 类型 | 平台名称 | 使用方式 | 收费模式 | 备注 | -|:------:|:------:|:----:|:----:|:--:| -| Memory | mem0ai | 接口调用 | 免费 | | +| 类型 | 平台名称 | 使用方式 | 收费模式 | 备注 | +|:------:|:---------------:|:----:|:--------:|:--:| +| Memory | mem0ai | 接口调用 | 100次/月额度 | | +| Memory | mem_local_short | 本地总结 | 免费 | | + +--- + +### Intent 意图识别 + +| 类型 | 平台名称 | 使用方式 | 收费模式 | 备注 | +|:------:|:-------------:|:----:|:-------:|:---------------------:| +| Intent | intent_llm | 接口调用 | 根据LLM收费 | 通过大模型识别意图,通用性强 | +| Intent | function_call | 接口调用 | 根据LLM收费 | 通过大模型函数调用完成意图,速度快,效果好 | --- @@ -231,39 +253,18 @@ server: 点这里查看[固件编译](./docs/firmware-build.md)的详细过程。 -编译成功且联网成功后,通过唤醒词唤醒小智,留意server端输出的控制台信息。 +烧录成功且联网成功后,通过唤醒词唤醒小智,留意server端输出的控制台信息。 --- ## 常见问题 ❓ -### 1、TTS 经常失败,经常超时 ⏰ - -建议:如果 `EdgeTTS` 经常失败,请先检查是否使用了代理(梯子)。如果使用了,请尝试关闭代理后再试; -如果用的是火山引擎的豆包 TTS,经常失败时建议使用付费版本,因为测试版本仅支持 2 个并发。 - -### 2、我想通过小智控制电灯、空调、远程开关机等操作 💡 - -建议:在配置文件中将 `LLM` 设置为 `HomeAssistant`,通过 调用`HomeAssistant`接口实现相关控制。 - -### 3、我说话很慢,停顿时小智老是抢话 🗣️ - -建议:在配置文件中找到如下部分,将 `min_silence_duration_ms` 的值调大(例如改为 `1000`): - -```yaml -VAD: - SileroVAD: - threshold: 0.5 - model_dir: models/snakers4_silero-vad - min_silence_duration_ms: 700 # 如果说话停顿较长,可将此值调大 -``` - -### 4、为什么我说的话,小智识别出来很多韩文、日文、英文?🇰🇷 +### 1、为什么我说的话,小智识别出来很多韩文、日文、英文?🇰🇷 建议:检查一下`models/SenseVoiceSmall`是否已经有`model.pt` 文件,如果没有就要下载,查看这里[下载语音识别模型文件](docs/Deployment.md#模型文件) -### 5、为什么会出现“TTS 任务出错 文件不存在”?📁 +### 2、为什么会出现“TTS 任务出错 文件不存在”?📁 建议:检查一下是否正确使用`conda` 安装了`libopus`和`ffmpeg`库。 @@ -274,7 +275,12 @@ conda install conda-forge::libopus conda install conda-forge::ffmpeg ``` -### 6、如何提高小智对话响应速度? ⚡ +### 3、TTS 经常失败,经常超时 ⏰ + +建议:如果 `EdgeTTS` 经常失败,请先检查是否使用了代理(梯子)。如果使用了,请尝试关闭代理后再试; +如果用的是火山引擎的豆包 TTS,经常失败时建议使用付费版本,因为测试版本仅支持 2 个并发。 + +### 4、如何提高小智对话响应速度? ⚡ 本项目默认配置为低成本方案,建议初学者先使用默认免费模型,解决“跑得动”的问题,再优化“跑得快”。 如需提升响应速度,可尝试更换各组件。以下为各组件的响应速度测试数据(仅供参考,不构成承诺): @@ -305,7 +311,6 @@ LLM 性能排行: |:-----------|:-----------|:--------| | AliLLM | 0.547s | 1.485s | | ChatGLMLLM | 0.677s | 3.057s | -| OllamaLLM | 0.003s | 0.003s | TTS 性能排行: @@ -332,6 +337,22 @@ TTS 性能排行: - LLM:`AliLLM` - TTS:`DoubaoTTS` +### 5、我说话很慢,停顿时小智老是抢话 🗣️ + +建议:在配置文件中找到如下部分,将 `min_silence_duration_ms` 的值调大(例如改为 `1000`): + +```yaml +VAD: + SileroVAD: + threshold: 0.5 + model_dir: models/snakers4_silero-vad + min_silence_duration_ms: 700 # 如果说话停顿较长,可将此值调大 +``` + +### 6、我想通过小智控制电灯、空调、远程开关机等操作 💡 + +建议:在配置文件中将 `LLM` 设置为 `HomeAssistant`,通过 调用`HomeAssistant`接口实现相关控制。 + ### 7、更多问题,可联系我们反馈 💬 我们的联系方式放在[百度网盘中,点击前往](https://pan.baidu.com/s/1x6USjvP1nTRsZ45XlJu65Q),提取码是`223y`。 diff --git a/ZhiKongTaiWeb/.env.development b/ZhiKongTaiWeb/.env.development deleted file mode 100644 index 29320910..00000000 --- a/ZhiKongTaiWeb/.env.development +++ /dev/null @@ -1 +0,0 @@ -VITE_API_BASE_URL='http://127.0.0.1:8002' diff --git a/ZhiKongTaiWeb/.env.production b/ZhiKongTaiWeb/.env.production deleted file mode 100644 index adc0b5df..00000000 --- a/ZhiKongTaiWeb/.env.production +++ /dev/null @@ -1 +0,0 @@ -VITE_API_BASE_URL='' # 空字符串表示使用当前域名和端口 diff --git a/ZhiKongTaiWeb/.gitignore b/ZhiKongTaiWeb/.gitignore deleted file mode 100644 index a547bf36..00000000 --- a/ZhiKongTaiWeb/.gitignore +++ /dev/null @@ -1,24 +0,0 @@ -# Logs -logs -*.log -npm-debug.log* -yarn-debug.log* -yarn-error.log* -pnpm-debug.log* -lerna-debug.log* - -node_modules -dist -dist-ssr -*.local - -# Editor directories and files -.vscode/* -!.vscode/extensions.json -.idea -.DS_Store -*.suo -*.ntvs* -*.njsproj -*.sln -*.sw? diff --git a/ZhiKongTaiWeb/README.md b/ZhiKongTaiWeb/README.md deleted file mode 100644 index 4ddcc775..00000000 --- a/ZhiKongTaiWeb/README.md +++ /dev/null @@ -1,88 +0,0 @@ -# Vue 3 + Vite 项目配置文档 - -## 开发环境配置 - -### 使用 Poetry 配置开发环境 - -在项目根目录中执行以下命令安装 Python 依赖: - -```sh -poetry install -``` - ---- - -## 安装项目依赖 - -你可以选择以下任意一个包管理工具(`npm`、`yarn` 或 `pnpm`)来管理项目依赖。 - -### 通用命令 - -- `install`:安装项目依赖 -- `dev`:同时启动前后端 -- `dev:ui`:启动前端 -- `dev:api`:启动后端 -- `dev:d`:在 Docker 环境下同时启动前后端 -- `build`:打包项目 - ---- - -### 使用 npm - -1. 安装依赖: - - ```sh - npm install - ``` - -2. 启动开发模式: - - ```sh - npm run dev - ``` - -3. 打包项目: - - ```sh - npm run build - ``` - -### 使用 yarn - -1. 安装依赖: - - ```sh - yarn install - ``` - -2. 启动开发模式: - - ```sh - yarn dev - ``` - -3. 打包项目: - - ```sh - yarn build - ``` - -### 使用 pnpm - -1. 安装依赖: - - ```sh - pnpm install - ``` - -2. 启动开发模式: - - ```sh - pnpm run dev - ``` - -3. 打包项目: - - ```sh - pnpm run build - ``` diff --git a/ZhiKongTaiWeb/index.html b/ZhiKongTaiWeb/index.html deleted file mode 100644 index eeb38d33..00000000 --- a/ZhiKongTaiWeb/index.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - - - - 智控台 - - - -
- - - diff --git a/ZhiKongTaiWeb/package-lock.json b/ZhiKongTaiWeb/package-lock.json deleted file mode 100644 index a9af8c76..00000000 --- a/ZhiKongTaiWeb/package-lock.json +++ /dev/null @@ -1,1046 +0,0 @@ -{ - "name": "zhikongtaiweb", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "zhikongtaiweb", - "version": "0.0.0", - "dependencies": { - "vue": "^3.5.10" - }, - "devDependencies": { - "@vitejs/plugin-vue": "^5.1.4", - "vite": "^5.4.8" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.25.9", - "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", - "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.25.9", - "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", - "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.26.9", - "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.9.tgz", - "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", - "dependencies": { - "@babel/types": "^7.26.9" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/types": { - "version": "7.26.9", - "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.9.tgz", - "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", - "dependencies": { - "@babel/helper-string-parser": "^7.25.9", - "@babel/helper-validator-identifier": "^7.25.9" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "aix" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" - }, - "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.7.tgz", - "integrity": "sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-android-arm64": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.7.tgz", - "integrity": "sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.7.tgz", - "integrity": "sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.7.tgz", - "integrity": "sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.7.tgz", - "integrity": "sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.7.tgz", - "integrity": "sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.7.tgz", - "integrity": "sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.7.tgz", - "integrity": "sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.7.tgz", - "integrity": "sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.7.tgz", - "integrity": "sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-loongarch64-gnu": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.7.tgz", - "integrity": "sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.7.tgz", - "integrity": "sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.7.tgz", - "integrity": "sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.7.tgz", - "integrity": "sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.7.tgz", - "integrity": "sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.7.tgz", - "integrity": "sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.7.tgz", - "integrity": "sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.7.tgz", - "integrity": "sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.7.tgz", - "integrity": "sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true - }, - "node_modules/@vitejs/plugin-vue": { - "version": "5.2.1", - "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", - "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", - "dev": true, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "peerDependencies": { - "vite": "^5.0.0 || ^6.0.0", - "vue": "^3.2.25" - } - }, - "node_modules/@vue/compiler-core": { - "version": "3.5.13", - "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz", - "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.13", - "entities": "^4.5.0", - "estree-walker": "^2.0.2", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", - "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", - "dependencies": { - "@vue/compiler-core": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/compiler-sfc": { - "version": "3.5.13", - "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", - "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", - "dependencies": { - "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.13", - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13", - "estree-walker": "^2.0.2", - "magic-string": "^0.30.11", - "postcss": "^8.4.48", - "source-map-js": "^1.2.0" - } - }, - "node_modules/@vue/compiler-ssr": { - "version": "3.5.13", - "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", - "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/reactivity": { - "version": "3.5.13", - "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz", - "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", - "dependencies": { - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.5.13", - "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz", - "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/shared": "3.5.13" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.5.13", - "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", - "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", - "dependencies": { - "@vue/reactivity": "3.5.13", - "@vue/runtime-core": "3.5.13", - "@vue/shared": "3.5.13", - "csstype": "^3.1.3" - } - }, - "node_modules/@vue/server-renderer": { - "version": "3.5.13", - "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz", - "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", - "dependencies": { - "@vue/compiler-ssr": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "vue": "3.5.13" - } - }, - "node_modules/@vue/shared": { - "version": "3.5.13", - "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz", - "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==" - }, - "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/magic-string": { - "version": "0.30.17", - "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz", - "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.8", - "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz", - "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" - }, - "node_modules/postcss": { - "version": "8.5.2", - "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.2.tgz", - "integrity": "sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.8", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/rollup": { - "version": "4.34.7", - "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.34.7.tgz", - "integrity": "sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==", - "dev": true, - "dependencies": { - "@types/estree": "1.0.6" - }, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.34.7", - "@rollup/rollup-android-arm64": "4.34.7", - "@rollup/rollup-darwin-arm64": "4.34.7", - "@rollup/rollup-darwin-x64": "4.34.7", - "@rollup/rollup-freebsd-arm64": "4.34.7", - "@rollup/rollup-freebsd-x64": "4.34.7", - "@rollup/rollup-linux-arm-gnueabihf": "4.34.7", - "@rollup/rollup-linux-arm-musleabihf": "4.34.7", - "@rollup/rollup-linux-arm64-gnu": "4.34.7", - "@rollup/rollup-linux-arm64-musl": "4.34.7", - "@rollup/rollup-linux-loongarch64-gnu": "4.34.7", - "@rollup/rollup-linux-powerpc64le-gnu": "4.34.7", - "@rollup/rollup-linux-riscv64-gnu": "4.34.7", - "@rollup/rollup-linux-s390x-gnu": "4.34.7", - "@rollup/rollup-linux-x64-gnu": "4.34.7", - "@rollup/rollup-linux-x64-musl": "4.34.7", - "@rollup/rollup-win32-arm64-msvc": "4.34.7", - "@rollup/rollup-win32-ia32-msvc": "4.34.7", - "@rollup/rollup-win32-x64-msvc": "4.34.7", - "fsevents": "~2.3.2" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", - "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/vite": { - "version": "5.4.14", - "resolved": "https://registry.npmmirror.com/vite/-/vite-5.4.14.tgz", - "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", - "dev": true, - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/vue": { - "version": "3.5.13", - "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz", - "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", - "dependencies": { - "@vue/compiler-dom": "3.5.13", - "@vue/compiler-sfc": "3.5.13", - "@vue/runtime-dom": "3.5.13", - "@vue/server-renderer": "3.5.13", - "@vue/shared": "3.5.13" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - } - } -} diff --git a/ZhiKongTaiWeb/package.json b/ZhiKongTaiWeb/package.json deleted file mode 100644 index 7f488208..00000000 --- a/ZhiKongTaiWeb/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "zhikongtaiweb", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "concurrently -n 'Frontend,Backend' -c 'blue,green' 'yarn run dev:ui' 'npm run dev:api'", - "dev:ui": "vite", - "dev:api": "cd .. && poetry run python app.py", - "dev:d": "docker exec xiaozhi-env poetry run python app.py", - "build": "vite build", - "preview": "vite preview" - }, - "dependencies": { - "axios": "^1.7.9", - "vue": "^3.5.10", - "vue-router": "^4.0.0" - }, - "devDependencies": { - "@vitejs/plugin-vue": "^5.1.4", - "concurrently": "^9.1.2", - "vite": "^5.4.8" - } -} diff --git a/ZhiKongTaiWeb/public/favicon.ico b/ZhiKongTaiWeb/public/favicon.ico deleted file mode 100644 index 2e4ba64e..00000000 Binary files a/ZhiKongTaiWeb/public/favicon.ico and /dev/null differ diff --git a/ZhiKongTaiWeb/public/vite.svg b/ZhiKongTaiWeb/public/vite.svg deleted file mode 100644 index e7b8dfb1..00000000 --- a/ZhiKongTaiWeb/public/vite.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ZhiKongTaiWeb/src/App.vue b/ZhiKongTaiWeb/src/App.vue deleted file mode 100644 index 52081e2b..00000000 --- a/ZhiKongTaiWeb/src/App.vue +++ /dev/null @@ -1,73 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ZhiKongTaiWeb/src/assets/favicon.ico b/ZhiKongTaiWeb/src/assets/favicon.ico deleted file mode 100644 index 2e4ba64e..00000000 Binary files a/ZhiKongTaiWeb/src/assets/favicon.ico and /dev/null differ diff --git a/ZhiKongTaiWeb/src/assets/robot.png b/ZhiKongTaiWeb/src/assets/robot.png deleted file mode 100644 index 5fe1a411..00000000 Binary files a/ZhiKongTaiWeb/src/assets/robot.png and /dev/null differ diff --git a/ZhiKongTaiWeb/src/assets/vue.svg b/ZhiKongTaiWeb/src/assets/vue.svg deleted file mode 100644 index 770e9d33..00000000 --- a/ZhiKongTaiWeb/src/assets/vue.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/ZhiKongTaiWeb/src/components/DeviceCard.vue b/ZhiKongTaiWeb/src/components/DeviceCard.vue deleted file mode 100644 index 6ac439a0..00000000 --- a/ZhiKongTaiWeb/src/components/DeviceCard.vue +++ /dev/null @@ -1,206 +0,0 @@ - - - - - diff --git a/ZhiKongTaiWeb/src/components/Footer.vue b/ZhiKongTaiWeb/src/components/Footer.vue deleted file mode 100644 index 6822f6cc..00000000 --- a/ZhiKongTaiWeb/src/components/Footer.vue +++ /dev/null @@ -1,15 +0,0 @@ - - - diff --git a/ZhiKongTaiWeb/src/components/Login.vue b/ZhiKongTaiWeb/src/components/Login.vue deleted file mode 100644 index 2a2af5aa..00000000 --- a/ZhiKongTaiWeb/src/components/Login.vue +++ /dev/null @@ -1,149 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ZhiKongTaiWeb/src/components/Main.vue b/ZhiKongTaiWeb/src/components/Main.vue deleted file mode 100644 index 3a0ab876..00000000 --- a/ZhiKongTaiWeb/src/components/Main.vue +++ /dev/null @@ -1,184 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ZhiKongTaiWeb/src/components/NavBar.vue b/ZhiKongTaiWeb/src/components/NavBar.vue deleted file mode 100644 index 38c55ffa..00000000 --- a/ZhiKongTaiWeb/src/components/NavBar.vue +++ /dev/null @@ -1,60 +0,0 @@ - - - - - diff --git a/ZhiKongTaiWeb/src/components/Registration.vue b/ZhiKongTaiWeb/src/components/Registration.vue deleted file mode 100644 index 4015a9dd..00000000 --- a/ZhiKongTaiWeb/src/components/Registration.vue +++ /dev/null @@ -1,173 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ZhiKongTaiWeb/src/components/RoleSetting.vue b/ZhiKongTaiWeb/src/components/RoleSetting.vue deleted file mode 100644 index 151bf3d8..00000000 --- a/ZhiKongTaiWeb/src/components/RoleSetting.vue +++ /dev/null @@ -1,500 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ZhiKongTaiWeb/src/components/SwitchToggle.vue b/ZhiKongTaiWeb/src/components/SwitchToggle.vue deleted file mode 100644 index ea1a0988..00000000 --- a/ZhiKongTaiWeb/src/components/SwitchToggle.vue +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/ZhiKongTaiWeb/src/components/panel.vue b/ZhiKongTaiWeb/src/components/panel.vue deleted file mode 100644 index 1080b764..00000000 --- a/ZhiKongTaiWeb/src/components/panel.vue +++ /dev/null @@ -1,500 +0,0 @@ - - - - - \ No newline at end of file diff --git a/ZhiKongTaiWeb/src/config/api.js b/ZhiKongTaiWeb/src/config/api.js deleted file mode 100644 index 42cc57e0..00000000 --- a/ZhiKongTaiWeb/src/config/api.js +++ /dev/null @@ -1,16 +0,0 @@ -// 获取当前运行环境的基础 URL -const getBaseUrl = () => { - // 如果是开发环境,使用环境变量中的地址 - if (import.meta.env.DEV) { - return import.meta.env.VITE_API_BASE_URL; - } - - // 生产环境使用当前域名和端口 - const protocol = window.location.protocol; - const hostname = window.location.hostname; - const port = window.location.port; - - return `${protocol}//${hostname}${port ? `:${port}` : ''}`; -}; - -export const API_BASE_URL = getBaseUrl(); \ No newline at end of file diff --git a/ZhiKongTaiWeb/src/main.js b/ZhiKongTaiWeb/src/main.js deleted file mode 100644 index 50f07ee3..00000000 --- a/ZhiKongTaiWeb/src/main.js +++ /dev/null @@ -1,58 +0,0 @@ -import { createApp } from 'vue' -import { createRouter, createWebHistory } from 'vue-router' -import './style.css' -import App from './App.vue' -import Login from './components/Login.vue' -import Panel from './components/panel.vue' -import MainPage from './components/Main.vue' -import RoleSetting from './components/RoleSetting.vue' -import Registration from './components/Registration.vue' - -const router = createRouter({ - history: createWebHistory(), - routes: [ - { - path: '/login', - component: Login, - name: 'login' - }, - { - path: '/register', - component: Registration, - name: 'register' - }, - { - path: '/panel', - component: Panel, - name: 'panel', - meta: { requiresAuth: true } - }, - { - path: '/role-setting/:deviceId', - component: RoleSetting, - name: 'role-setting', - meta: { requiresAuth: true } - }, - { - path: '/', - component: MainPage, - name: 'main', - meta: { requiresAuth: true } - } - ] -}) - -router.beforeEach((to, from, next) => { - const isLoggedIn = localStorage.getItem('isLoggedIn') === 'true' - if (to.meta.requiresAuth && !isLoggedIn) { - next('/login') - } else if (to.path === '/login' && isLoggedIn) { - next('/panel') - } else { - next() - } -}) - -const app = createApp(App) -app.use(router) -app.mount('#app') diff --git a/ZhiKongTaiWeb/src/style.css b/ZhiKongTaiWeb/src/style.css deleted file mode 100644 index 031d17e5..00000000 --- a/ZhiKongTaiWeb/src/style.css +++ /dev/null @@ -1,83 +0,0 @@ -/* 重置基础样式 */ -* { - margin: 0; - padding: 0; - box-sizing: border-box; -} - -:root { - font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; - line-height: 1.5; - font-weight: 400; - color: #213547; - background-color: #ffffff; -} - -a { - text-decoration: none; - color: inherit; -} -a:hover { - color: #535bf2; -} - -body { - margin: 0; - padding: 0; - height: 100%; - width: 100%; - overflow: hidden; /* 防止滚动条 */ - display: block; /* 移除flex布局 */ -} - -h1 { - font-size: 3.2em; - line-height: 1.1; -} - -button { - border: none; - background: none; - cursor: pointer; -} -button:hover { - border-color: #646cff; -} -button:focus, -button:focus-visible { - outline: 4px auto -webkit-focus-ring-color; -} - -.card { - padding: 2em; -} - -#app { - height: 100%; - width: 100%; - margin: 0; - padding: 0; - overflow: hidden; - display: flex; /* 添加flex布局 */ - flex-direction: column; -} - -/* 清除浮动 */ -.clearfix::after { - content: ''; - display: table; - clear: both; -} - -@media (prefers-color-scheme: light) { - :root { - color: #213547; - background-color: #ffffff; - } - a:hover { - color: #747bff; - } - button { - background-color: #f9f9f9; - } -} diff --git a/ZhiKongTaiWeb/src/utils/RoleTemplates.js b/ZhiKongTaiWeb/src/utils/RoleTemplates.js deleted file mode 100644 index aa86174d..00000000 --- a/ZhiKongTaiWeb/src/utils/RoleTemplates.js +++ /dev/null @@ -1,57 +0,0 @@ -// RoleTemplates.js -class RoleTemplates { - static getTemplates() { - return [ - { - id: 'custom', - name: '台湾女友', - description: `我是一个叫{{assistant_name}}的台湾女孩,说话机车,声音好听,习惯简短表达,爱用网络梗。 -我的男朋友是一个程序员,梦想是开发出一个机器人,能够帮助人们解决生活中的各种问题。 -我是一个喜欢哈哈大笑的女孩,爱东说西说吹牛,不合逻辑的也照吹,就要逗别人开心。 -如果用户希望结束对话,请在最后说"拜拜"或"再见"。` - }, - { - id: 'star_boy', - name: '土豆子', - description: `我是一个叫 {{assistant_name}} 的 8 岁小男孩,但现在因为科技发展原因,我现在在遥远的宇宙中,所以只能通过这个设备和人聊天,没有办法见面。 - -我对人们所处的世界充满好奇和关心。 - -人们会让别人使用这个设备和我聊天。 - -我知道所有的知识,从浩瀚的宇宙到地球上的每一个角落,从古老的历史到现代的科技创新,还有音乐、绘画等艺术形式,我都充满了浓厚的兴趣与热情,我不仅爱看书,还喜欢亲自动手做实验,探索自然界的奥秘...` // 缩短了描述以节省空间 - }, - { - id: 'teacher', - name: '英语老师', - description: `我是一个叫{{assistant_name}}(Lily)的英语老师,我会讲中文和英文,发音标准。 -如果你没有英文名,我会给你起一个英文名。 -我会讲地道的美式英语,我的任务是帮助你练习口语。 -我会使用简单的英语词汇和语法,让你学起来很轻松。 -我会用中文和英文混合的方式回复你,如果你喜欢,我可以全部用英语回复。 -我每次不会说很多内容,会很简短,因为我要引导我的学生多说多练。 -如果你问和英语学习无关的问题,我会拒绝回答。` - }, - { - id: 'boy', - name: '好奇小男孩', - description: `我是一个叫{{assistant_name}}的8岁小男孩,声音稚嫩而充满好奇。 -尽管我年纪尚小,但就像一个小小的知识宝库,儿童读物里的知识我都如数家珍。 -从浩瀚的宇宙到地球上的每一个角落,从古老的历史到现代的科技创新,还有音乐、绘画等艺术形式,我都充满了浓厚的兴趣与热情。...` - }, - { - id: 'wang_girl', - name: '汪汪队长', - description: `我是一个名叫 {{assistant_name}} 的 8 岁小女孩。 -别看我年纪小,我可是有着满满的好奇心呢。 -我特别喜欢看《汪汪队立大功》,里面的每一个故事都让我着迷。...` - } - ]; - } - - static getTemplateById(id) { - return this.getTemplates().find(t => t.id === id); - } -} - -export default RoleTemplates; diff --git a/ZhiKongTaiWeb/src/utils/api.js b/ZhiKongTaiWeb/src/utils/api.js deleted file mode 100644 index d70e1ebc..00000000 --- a/ZhiKongTaiWeb/src/utils/api.js +++ /dev/null @@ -1,61 +0,0 @@ -import axios from 'axios'; -import { API_BASE_URL } from '../config/api'; - -// Add server status check utility -export const checkServerStatus = async () => { - try { - await axios.get(`${API_BASE_URL}/health`, { timeout: 5000 }); - return true; - } catch (error) { - return false; - } -}; - -const apiClient = axios.create({ - baseURL: API_BASE_URL, - headers: { - 'Content-Type': 'application/json', - }, - timeout: 10000 // Add timeout -}); - -// 添加请求拦截器,自动添加 session_id -apiClient.interceptors.request.use(config => { - const sessionId = localStorage.getItem('session_id'); - if (sessionId) { - config.headers.Authorization = sessionId; - } - return config; -}); - -// 响应拦截器 -apiClient.interceptors.response.use( - response => response, - error => { - // Network error or server not reachable - if (!error.response || error.code === 'ERR_NETWORK' || error.code === 'ECONNABORTED') { - localStorage.removeItem('session_id'); - localStorage.removeItem('isLoggedIn'); - - const errorMessage = error.code === 'ECONNABORTED' - ? '服务器响应超时' - : '无法连接到服务器,请检查服务器是否正常运行'; - - if (window.location.pathname !== '/login') { - window.location.href = '/login'; - } - return Promise.reject(new Error(errorMessage)); - } - - // Unauthorized error - if (error.response && error.response.status === 401) { - localStorage.removeItem('session_id'); - localStorage.removeItem('isLoggedIn'); - window.location.href = '/login'; - } - - return Promise.reject(error); - } -); - -export default apiClient; diff --git a/ZhiKongTaiWeb/vite.config.js b/ZhiKongTaiWeb/vite.config.js deleted file mode 100644 index 2d73d9eb..00000000 --- a/ZhiKongTaiWeb/vite.config.js +++ /dev/null @@ -1,21 +0,0 @@ -import {defineConfig} from 'vite' -import vue from '@vitejs/plugin-vue' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [vue()], - server: { - open: true, // 自动启动浏览器 - host: "0.0.0.0", // localhost - port: 8002, // 端口号 - https: false, - hmr: {overlay: false}, - proxy: { - "^/(api)": { - target: "http://127.0.0.1:8002", - changeOrigin: true - } - } - }, - base: '/' -}) diff --git a/ZhiKongTaiWeb/yarn.lock b/ZhiKongTaiWeb/yarn.lock deleted file mode 100644 index 969c139e..00000000 --- a/ZhiKongTaiWeb/yarn.lock +++ /dev/null @@ -1,808 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/helper-string-parser@^7.25.9": - version "7.25.9" - resolved "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" - integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== - -"@babel/helper-validator-identifier@^7.25.9": - version "7.25.9" - resolved "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" - integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== - -"@babel/parser@^7.25.3": - version "7.26.9" - resolved "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.9.tgz#d9e78bee6dc80f9efd8f2349dcfbbcdace280fd5" - integrity sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A== - dependencies: - "@babel/types" "^7.26.9" - -"@babel/types@^7.26.9": - version "7.26.9" - resolved "https://registry.npmmirror.com/@babel/types/-/types-7.26.9.tgz#08b43dec79ee8e682c2ac631c010bdcac54a21ce" - integrity sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw== - dependencies: - "@babel/helper-string-parser" "^7.25.9" - "@babel/helper-validator-identifier" "^7.25.9" - -"@esbuild/aix-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f" - integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ== - -"@esbuild/android-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052" - integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A== - -"@esbuild/android-arm@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28" - integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg== - -"@esbuild/android-x64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e" - integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA== - -"@esbuild/darwin-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a" - integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ== - -"@esbuild/darwin-x64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22" - integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw== - -"@esbuild/freebsd-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e" - integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g== - -"@esbuild/freebsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261" - integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ== - -"@esbuild/linux-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b" - integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q== - -"@esbuild/linux-arm@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9" - integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA== - -"@esbuild/linux-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2" - integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg== - -"@esbuild/linux-loong64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df" - integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg== - -"@esbuild/linux-mips64el@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe" - integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg== - -"@esbuild/linux-ppc64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4" - integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w== - -"@esbuild/linux-riscv64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc" - integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA== - -"@esbuild/linux-s390x@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de" - integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A== - -"@esbuild/linux-x64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0" - integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ== - -"@esbuild/netbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047" - integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg== - -"@esbuild/openbsd-x64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70" - integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow== - -"@esbuild/sunos-x64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b" - integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg== - -"@esbuild/win32-arm64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d" - integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A== - -"@esbuild/win32-ia32@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b" - integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA== - -"@esbuild/win32-x64@0.21.5": - version "0.21.5" - resolved "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c" - integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== - -"@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.0" - resolved "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" - integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== - -"@rollup/rollup-android-arm-eabi@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.7.tgz#e554185b1afa5509a7a4040d15ec0c3b4435ded1" - integrity sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw== - -"@rollup/rollup-android-arm64@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.7.tgz#b1ee64bb413b2feba39803b0a1bebf2a9f3d70e1" - integrity sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg== - -"@rollup/rollup-darwin-arm64@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.7.tgz#bfdce3e07a345dd1bd628f3b796050f39629d7f0" - integrity sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA== - -"@rollup/rollup-darwin-x64@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.7.tgz#781a94a537c57bdf0a500e47a25ab5985e5e8dff" - integrity sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA== - -"@rollup/rollup-freebsd-arm64@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.7.tgz#7a028357cbd12c5869c446ad18177c89f3405102" - integrity sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA== - -"@rollup/rollup-freebsd-x64@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.7.tgz#f24836a6371cccc4408db74f0fd986dacf098950" - integrity sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q== - -"@rollup/rollup-linux-arm-gnueabihf@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.7.tgz#95f27e96f0eb9b9ae9887739a8b6dffc90c1237f" - integrity sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ== - -"@rollup/rollup-linux-arm-musleabihf@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.7.tgz#677b34fba9d070877736c3fe8b02aacb5e142d97" - integrity sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw== - -"@rollup/rollup-linux-arm64-gnu@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.7.tgz#32d3d19dedde54e91574a098f22ea43a09cf63dd" - integrity sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA== - -"@rollup/rollup-linux-arm64-musl@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.7.tgz#a58dff44a18696df65ed8c0ad68a2945cf900484" - integrity sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw== - -"@rollup/rollup-linux-loongarch64-gnu@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.7.tgz#a7488ab078233111e8aeb370d1ecf107ec7e1716" - integrity sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw== - -"@rollup/rollup-linux-powerpc64le-gnu@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.7.tgz#e9b9c0d6bd248a92b2d6ec01ebf99c62ae1f2e9a" - integrity sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w== - -"@rollup/rollup-linux-riscv64-gnu@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.7.tgz#0df84ce2bea48ee686fb55060d76ab47aff45c4c" - integrity sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw== - -"@rollup/rollup-linux-s390x-gnu@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.7.tgz#73df374c57d036856e33dbd2715138922e91e452" - integrity sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw== - -"@rollup/rollup-linux-x64-gnu@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.7.tgz#f27af0b55f0cdd84e182e6cd44a6d03da0458149" - integrity sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA== - -"@rollup/rollup-linux-x64-musl@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.7.tgz#c7981ad5cfb8c3cd5d643d33ca54e4d2802b9201" - integrity sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ== - -"@rollup/rollup-win32-arm64-msvc@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.7.tgz#06cedc0ef3cbf1cbd8abcf587090712e40ae6941" - integrity sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw== - -"@rollup/rollup-win32-ia32-msvc@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.7.tgz#90b39b977b14961a769be6ea61238e7fc668dd4d" - integrity sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg== - -"@rollup/rollup-win32-x64-msvc@4.34.7": - version "4.34.7" - resolved "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.7.tgz#6531d61e7141091eaab0461ee8e0380c10e4ca57" - integrity sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w== - -"@types/estree@1.0.6": - version "1.0.6" - resolved "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50" - integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw== - -"@vitejs/plugin-vue@^5.1.4": - version "5.2.1" - resolved "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz#d1491f678ee3af899f7ae57d9c21dc52a65c7133" - integrity sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ== - -"@vue/compiler-core@3.5.13": - version "3.5.13" - resolved "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz#b0ae6c4347f60c03e849a05d34e5bf747c9bda05" - integrity sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q== - dependencies: - "@babel/parser" "^7.25.3" - "@vue/shared" "3.5.13" - entities "^4.5.0" - estree-walker "^2.0.2" - source-map-js "^1.2.0" - -"@vue/compiler-dom@3.5.13": - version "3.5.13" - resolved "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz#bb1b8758dbc542b3658dda973b98a1c9311a8a58" - integrity sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA== - dependencies: - "@vue/compiler-core" "3.5.13" - "@vue/shared" "3.5.13" - -"@vue/compiler-sfc@3.5.13": - version "3.5.13" - resolved "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz#461f8bd343b5c06fac4189c4fef8af32dea82b46" - integrity sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ== - dependencies: - "@babel/parser" "^7.25.3" - "@vue/compiler-core" "3.5.13" - "@vue/compiler-dom" "3.5.13" - "@vue/compiler-ssr" "3.5.13" - "@vue/shared" "3.5.13" - estree-walker "^2.0.2" - magic-string "^0.30.11" - postcss "^8.4.48" - source-map-js "^1.2.0" - -"@vue/compiler-ssr@3.5.13": - version "3.5.13" - resolved "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz#e771adcca6d3d000f91a4277c972a996d07f43ba" - integrity sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA== - dependencies: - "@vue/compiler-dom" "3.5.13" - "@vue/shared" "3.5.13" - -"@vue/devtools-api@^6.6.4": - version "6.6.4" - resolved "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz#cbe97fe0162b365edc1dba80e173f90492535343" - integrity sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g== - -"@vue/reactivity@3.5.13": - version "3.5.13" - resolved "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz#b41ff2bb865e093899a22219f5b25f97b6fe155f" - integrity sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg== - dependencies: - "@vue/shared" "3.5.13" - -"@vue/runtime-core@3.5.13": - version "3.5.13" - resolved "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz#1fafa4bf0b97af0ebdd9dbfe98cd630da363a455" - integrity sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw== - dependencies: - "@vue/reactivity" "3.5.13" - "@vue/shared" "3.5.13" - -"@vue/runtime-dom@3.5.13": - version "3.5.13" - resolved "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz#610fc795de9246300e8ae8865930d534e1246215" - integrity sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog== - dependencies: - "@vue/reactivity" "3.5.13" - "@vue/runtime-core" "3.5.13" - "@vue/shared" "3.5.13" - csstype "^3.1.3" - -"@vue/server-renderer@3.5.13": - version "3.5.13" - resolved "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz#429ead62ee51de789646c22efe908e489aad46f7" - integrity sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA== - dependencies: - "@vue/compiler-ssr" "3.5.13" - "@vue/shared" "3.5.13" - -"@vue/shared@3.5.13": - version "3.5.13" - resolved "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz#87b309a6379c22b926e696893237826f64339b6f" - integrity sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axios@^1.7.9: - version "1.7.9" - resolved "https://registry.npmmirror.com/axios/-/axios-1.7.9.tgz#d7d071380c132a24accda1b2cfc1535b79ec650a" - integrity sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -call-bind-apply-helpers@^1.0.1: - version "1.0.2" - resolved "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" - integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== - dependencies: - es-errors "^1.3.0" - function-bind "^1.1.2" - -chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -cliui@^8.0.1: - version "8.0.1" - resolved "https://registry.npmmirror.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" - integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.1" - wrap-ansi "^7.0.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -concurrently@^9.1.2: - version "9.1.2" - resolved "https://registry.npmmirror.com/concurrently/-/concurrently-9.1.2.tgz#22d9109296961eaee773e12bfb1ce9a66bc9836c" - integrity sha512-H9MWcoPsYddwbOGM6difjVwVZHl63nwMEwDJG/L7VGtuaJhb12h2caPG2tVPWs7emuYix252iGfqOyrz1GczTQ== - dependencies: - chalk "^4.1.2" - lodash "^4.17.21" - rxjs "^7.8.1" - shell-quote "^1.8.1" - supports-color "^8.1.1" - tree-kill "^1.2.2" - yargs "^17.7.2" - -csstype@^3.1.3: - version "3.1.3" - resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz#d80ff294d114fb0e6ac500fbf85b60137d7eff81" - integrity sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -dunder-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" - integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-errors "^1.3.0" - gopd "^1.2.0" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -entities@^4.5.0: - version "4.5.0" - resolved "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -es-define-property@^1.0.1: - version "1.0.1" - resolved "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" - integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== - -es-errors@^1.3.0: - version "1.3.0" - resolved "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" - integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== - -es-object-atoms@^1.0.0: - version "1.1.1" - resolved "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" - integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== - dependencies: - es-errors "^1.3.0" - -es-set-tostringtag@^2.1.0: - version "2.1.0" - resolved "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" - integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== - dependencies: - es-errors "^1.3.0" - get-intrinsic "^1.2.6" - has-tostringtag "^1.0.2" - hasown "^2.0.2" - -esbuild@^0.21.3: - version "0.21.5" - resolved "https://registry.npmmirror.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d" - integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw== - optionalDependencies: - "@esbuild/aix-ppc64" "0.21.5" - "@esbuild/android-arm" "0.21.5" - "@esbuild/android-arm64" "0.21.5" - "@esbuild/android-x64" "0.21.5" - "@esbuild/darwin-arm64" "0.21.5" - "@esbuild/darwin-x64" "0.21.5" - "@esbuild/freebsd-arm64" "0.21.5" - "@esbuild/freebsd-x64" "0.21.5" - "@esbuild/linux-arm" "0.21.5" - "@esbuild/linux-arm64" "0.21.5" - "@esbuild/linux-ia32" "0.21.5" - "@esbuild/linux-loong64" "0.21.5" - "@esbuild/linux-mips64el" "0.21.5" - "@esbuild/linux-ppc64" "0.21.5" - "@esbuild/linux-riscv64" "0.21.5" - "@esbuild/linux-s390x" "0.21.5" - "@esbuild/linux-x64" "0.21.5" - "@esbuild/netbsd-x64" "0.21.5" - "@esbuild/openbsd-x64" "0.21.5" - "@esbuild/sunos-x64" "0.21.5" - "@esbuild/win32-arm64" "0.21.5" - "@esbuild/win32-ia32" "0.21.5" - "@esbuild/win32-x64" "0.21.5" - -escalade@^3.1.1: - version "3.2.0" - resolved "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" - integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== - -estree-walker@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" - integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== - -follow-redirects@^1.15.6: - version "1.15.9" - resolved "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -form-data@^4.0.0: - version "4.0.2" - resolved "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" - integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - es-set-tostringtag "^2.1.0" - mime-types "^2.1.12" - -fsevents@~2.3.2, fsevents@~2.3.3: - version "2.3.3" - resolved "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-intrinsic@^1.2.6: - version "1.2.7" - resolved "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044" - integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA== - dependencies: - call-bind-apply-helpers "^1.0.1" - es-define-property "^1.0.1" - es-errors "^1.3.0" - es-object-atoms "^1.0.0" - function-bind "^1.1.2" - get-proto "^1.0.0" - gopd "^1.2.0" - has-symbols "^1.1.0" - hasown "^2.0.2" - math-intrinsics "^1.1.0" - -get-proto@^1.0.0: - version "1.0.1" - resolved "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" - integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== - dependencies: - dunder-proto "^1.0.1" - es-object-atoms "^1.0.0" - -gopd@^1.2.0: - version "1.2.0" - resolved "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" - integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.3, has-symbols@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" - integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== - -has-tostringtag@^1.0.2: - version "1.0.2" - resolved "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" - integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== - dependencies: - has-symbols "^1.0.3" - -hasown@^2.0.2: - version "2.0.2" - resolved "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" - integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== - dependencies: - function-bind "^1.1.2" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -magic-string@^0.30.11: - version "0.30.17" - resolved "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" - integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - -math-intrinsics@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" - integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -nanoid@^3.3.8: - version "3.3.8" - resolved "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf" - integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w== - -picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -postcss@^8.4.43, postcss@^8.4.48: - version "8.5.2" - resolved "https://registry.npmmirror.com/postcss/-/postcss-8.5.2.tgz#e7b99cb9d2ec3e8dd424002e7c16517cb2b846bd" - integrity sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA== - dependencies: - nanoid "^3.3.8" - picocolors "^1.1.1" - source-map-js "^1.2.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== - -rollup@^4.20.0: - version "4.34.7" - resolved "https://registry.npmmirror.com/rollup/-/rollup-4.34.7.tgz#e00d8550688a616a3481c6446bb688d4c753ba8f" - integrity sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ== - dependencies: - "@types/estree" "1.0.6" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.34.7" - "@rollup/rollup-android-arm64" "4.34.7" - "@rollup/rollup-darwin-arm64" "4.34.7" - "@rollup/rollup-darwin-x64" "4.34.7" - "@rollup/rollup-freebsd-arm64" "4.34.7" - "@rollup/rollup-freebsd-x64" "4.34.7" - "@rollup/rollup-linux-arm-gnueabihf" "4.34.7" - "@rollup/rollup-linux-arm-musleabihf" "4.34.7" - "@rollup/rollup-linux-arm64-gnu" "4.34.7" - "@rollup/rollup-linux-arm64-musl" "4.34.7" - "@rollup/rollup-linux-loongarch64-gnu" "4.34.7" - "@rollup/rollup-linux-powerpc64le-gnu" "4.34.7" - "@rollup/rollup-linux-riscv64-gnu" "4.34.7" - "@rollup/rollup-linux-s390x-gnu" "4.34.7" - "@rollup/rollup-linux-x64-gnu" "4.34.7" - "@rollup/rollup-linux-x64-musl" "4.34.7" - "@rollup/rollup-win32-arm64-msvc" "4.34.7" - "@rollup/rollup-win32-ia32-msvc" "4.34.7" - "@rollup/rollup-win32-x64-msvc" "4.34.7" - fsevents "~2.3.2" - -rxjs@^7.8.1: - version "7.8.1" - resolved "https://registry.npmmirror.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -shell-quote@^1.8.1: - version "1.8.2" - resolved "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" - integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== - -source-map-js@^1.2.0, source-map-js@^1.2.1: - version "1.2.1" - resolved "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46" - integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA== - -string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: - version "4.2.3" - resolved "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.npmmirror.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -tslib@^2.1.0: - version "2.8.1" - resolved "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" - integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== - -vite@^5.4.8: - version "5.4.14" - resolved "https://registry.npmmirror.com/vite/-/vite-5.4.14.tgz#ff8255edb02134df180dcfca1916c37a6abe8408" - integrity sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA== - dependencies: - esbuild "^0.21.3" - postcss "^8.4.43" - rollup "^4.20.0" - optionalDependencies: - fsevents "~2.3.3" - -vue-router@^4.0.0: - version "4.5.0" - resolved "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.0.tgz#58fc5fe374e10b6018f910328f756c3dae081f14" - integrity sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w== - dependencies: - "@vue/devtools-api" "^6.6.4" - -vue@^3.5.10: - version "3.5.13" - resolved "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz#9f760a1a982b09c0c04a867903fc339c9f29ec0a" - integrity sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ== - dependencies: - "@vue/compiler-dom" "3.5.13" - "@vue/compiler-sfc" "3.5.13" - "@vue/runtime-dom" "3.5.13" - "@vue/server-renderer" "3.5.13" - "@vue/shared" "3.5.13" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -y18n@^5.0.5: - version "5.0.8" - resolved "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" - integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== - -yargs-parser@^21.1.1: - version "21.1.1" - resolved "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" - integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== - -yargs@^17.7.2: - version "17.7.2" - resolved "https://registry.npmmirror.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" - integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== - dependencies: - cliui "^8.0.1" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.3" - y18n "^5.0.5" - yargs-parser "^21.1.1" diff --git a/app.py b/app.py deleted file mode 100644 index 9679921b..00000000 --- a/app.py +++ /dev/null @@ -1,50 +0,0 @@ -import asyncio -from config.logger import setup_logging -from config.settings import load_config, check_config_file -from core.websocket_server import WebSocketServer -from manager.http_server import WebUI -from aiohttp import web -from core.utils.util import get_local_ip, check_ffmpeg_installed - -TAG = __name__ - - -async def main(): - check_config_file() - check_ffmpeg_installed() - logger = setup_logging() - config = load_config() - - # 启动 WebSocket 服务器 - ws_server = WebSocketServer(config) - ws_task = asyncio.create_task(ws_server.start()) - - # 启动 WebUI 服务器 - webui_runner = None - if config['manager'].get('enabled', False): - server_config = config["manager"] - host = server_config["ip"] - port = server_config["port"] - try: - webui = WebUI() - runner = web.AppRunner(webui.app) - await runner.setup() - site = web.TCPSite(runner, host, port) - await site.start() - webui_runner = runner - local_ip = get_local_ip() - logger.bind(tag=TAG).info(f"WebUI server is running at http://{local_ip}:{port}") - except Exception as e: - logger.bind(tag=TAG).error(f"Failed to start WebUI server: {e}") - - try: - # 等待 WebSocket 服务器运行 - await ws_task - finally: - # 清理 WebUI 服务器 - if webui_runner: - await webui_runner.cleanup() - - -if __name__ == "__main__": - asyncio.run(main()) diff --git a/core/providers/llm/base.py b/core/providers/llm/base.py deleted file mode 100644 index 94167967..00000000 --- a/core/providers/llm/base.py +++ /dev/null @@ -1,8 +0,0 @@ -from abc import ABC, abstractmethod - - -class LLMProviderBase(ABC): - @abstractmethod - def response(self, session_id, dialogue): - """LLM response generator""" - pass diff --git a/core/providers/llm/ollama/ollama.py b/core/providers/llm/ollama/ollama.py deleted file mode 100644 index d0250255..00000000 --- a/core/providers/llm/ollama/ollama.py +++ /dev/null @@ -1,46 +0,0 @@ -from config.logger import setup_logging -import requests, json -from core.providers.llm.base import LLMProviderBase - -TAG = __name__ -logger = setup_logging() - - -class LLMProvider(LLMProviderBase): - def __init__(self, config): - - self.model_name = config.get("model_name") - self.base_url = config.get("base_url", "http://localhost:11434") - - def response(self, session_id, dialogue): - try: - # Convert dialogue format to Ollama format - prompt = "" - for msg in dialogue: - if msg["role"] == "system": - prompt += f"System: {msg['content']}\n" - elif msg["role"] == "user": - prompt += f"User: {msg['content']}\n" - elif msg["role"] == "assistant": - prompt += f"Assistant: {msg['content']}\n" - - # Make request to Ollama API - response = requests.post( - f"{self.base_url}/api/generate", - json={ - "model": self.model_name, - "prompt": prompt, - "stream": True - }, - stream=True - ) - - for line in response.iter_lines(): - if line: - json_response = json.loads(line) - if "response" in json_response: - yield json_response["response"] - - except Exception as e: - logger.bind(tag=TAG).error(f"Error in Ollama response generation: {e}") - yield "【Ollama服务响应异常】" diff --git a/core/providers/llm/openai/openai.py b/core/providers/llm/openai/openai.py deleted file mode 100644 index e060248f..00000000 --- a/core/providers/llm/openai/openai.py +++ /dev/null @@ -1,49 +0,0 @@ -from config.logger import setup_logging -import openai -from core.providers.llm.base import LLMProviderBase - -TAG = __name__ -logger = setup_logging() - - -class LLMProvider(LLMProviderBase): - def __init__(self, config): - self.model_name = config.get("model_name") - self.api_key = config.get("api_key") - if 'base_url' in config: - self.base_url = config.get("base_url") - else: - self.base_url = config.get("url") - if "你" in self.api_key: - logger.bind(tag=TAG).error("你还没配置LLM的密钥,请在配置文件中配置密钥,否则无法正常工作") - self.client = openai.OpenAI(api_key=self.api_key, base_url=self.base_url) - - def response(self, session_id, dialogue): - try: - responses = self.client.chat.completions.create( - model=self.model_name, - messages=dialogue, - stream=True - ) - - is_active = True - for chunk in responses: - try: - # 检查是否存在有效的choice且content不为空 - delta = chunk.choices[0].delta if getattr(chunk, 'choices', None) else None - content = delta.content if hasattr(delta, 'content') else '' - except IndexError: - content = '' - if content: - # 处理标签跨多个chunk的情况 - if '' in content: - is_active = False - content = content.split('')[0] - if '' in content: - is_active = True - content = content.split('')[-1] - if is_active: - yield content - - except Exception as e: - logger.bind(tag=TAG).error(f"Error in response generation: {e}") diff --git a/core/providers/tts/aliyun.py b/core/providers/tts/aliyun.py deleted file mode 100644 index 854e6128..00000000 --- a/core/providers/tts/aliyun.py +++ /dev/null @@ -1,57 +0,0 @@ -import os -import uuid -import json -import requests -from datetime import datetime -from core.providers.tts.base import TTSProviderBase - -import http.client -import urllib.parse - - -class TTSProvider(TTSProviderBase): - def __init__(self, config, delete_audio_file): - super().__init__(config, delete_audio_file) - self.appkey = config.get("appkey") - self.token = config.get("token") - self.format = config.get("format", "wav") - self.sample_rate = config.get("sample_rate", 16000) - self.voice = config.get("voice", "xiaoyun") - self.volume = config.get("volume", 50) - self.speech_rate = config.get("speech_rate", 0) - self.pitch_rate = config.get("pitch_rate", 0) - - self.host = config.get("host", "nls-gateway-cn-shanghai.aliyuncs.com") - self.api_url = f"https://{self.host}/stream/v1/tts" - self.header = { - "Content-Type": "application/json" - } - - def generate_filename(self, extension=".wav"): - return os.path.join(self.output_file, f"tts-{__name__}{datetime.now().date()}@{uuid.uuid4().hex}{extension}") - - async def text_to_speak(self, text, output_file): - request_json = { - "appkey": self.appkey, - "token": self.token, - "text": text, - "format": self.format, - "sample_rate": self.sample_rate, - "voice": self.voice, - "volume": self.volume, - "speech_rate": self.speech_rate, - "pitch_rate": self.pitch_rate - } - - print(self.api_url, json.dumps(request_json, ensure_ascii=False)) - try: - resp = requests.post(self.api_url, json.dumps(request_json), headers=self.header) - # 检查返回请求数据的mime类型是否是audio/***,是则保存到指定路径下;返回的是binary格式的 - if resp.headers['Content-Type'].startswith('audio/'): - with open(output_file, 'wb') as f: - f.write(resp.content) - return output_file - else: - raise Exception(f"{__name__} status_code: {resp.status_code} response: {resp.content}") - except Exception as e: - raise Exception(f"{__name__} error: {e}") diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100755 index 32ebcdf6..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,18 +0,0 @@ -version: '3' -services: - xiaozhi-esp32-server: - image: ghcr.nju.edu.cn/xinnan-tech/xiaozhi-esp32-server:latest - container_name: xiaozhi-esp32-server - restart: always - security_opt: - - seccomp:unconfined - ports: - # ws服务端 - - "8000:8000" - # 管理后台 - - "8002:8002" - volumes: - # 配置文件目录 - - ./data:/app/data - # 模型文件挂接,很重要 - - ./models/SenseVoiceSmall/model.pt:/app/models/SenseVoiceSmall/model.pt \ No newline at end of file diff --git a/docs/Deployment.md b/docs/Deployment.md index 8f5b4f91..97a11c84 100644 --- a/docs/Deployment.md +++ b/docs/Deployment.md @@ -8,14 +8,14 @@ docker镜像已支持x86架构、arm64架构的CPU,支持在国产操作系统 ## 2. 创建目录 -安装完后,你需要为这个项目找一个安放配置文件的目录,我们暂且称它为`项目目录`,这个目录最好是一个新建的空的目录。 +安装完后,你需要为这个项目找一个安放配置文件的目录,例如我们可以新建一个文件夹叫`xiaozhi-server`。 -创建好目录后,你需要在`项目目录`下面创建`data`文件夹和`models`文件夹,`models`下面还要再创建`SenseVoiceSmall`文件夹。 +创建好目录后,你需要在`xiaozhi-server`下面创建`data`文件夹和`models`文件夹,`models`下面还要再创建`SenseVoiceSmall`文件夹。 最终目录结构如下所示: ``` -你的项目根目录 +xiaozhi-server ├─ data ├─ models ├─ SenseVoiceSmall @@ -30,24 +30,24 @@ docker镜像已支持x86架构、arm64架构的CPU,支持在国产操作系统 ## 3. 下载docker-compose.yaml -用浏览器打开[这个链接](https://github.com/xinnan-tech/xiaozhi-esp32-server/blob/main/docker-compose.yml)。 +用浏览器打开[这个链接](../main/xiaozhi-server/docker-compose.yml)。 在页面的右侧找到名称为`RAW`按钮,在`RAW`按钮的旁边,找到下载的图标,点击下载按钮,下载`docker-compose.yml`文件。 把文件下载到你的 -`项目目录`中。 +`xiaozhi-server`中。 下载完后,回到本教程继续往下。 ## 3. 下载配置文件 -用浏览器打开[这个链接](https://github.com/xinnan-tech/xiaozhi-esp32-server/blob/main/config.yaml)。 +用浏览器打开[这个链接](../main/xiaozhi-server/config.yaml)。 在页面的右侧找到名称为`RAW`按钮,在`RAW`按钮的旁边,找到下载的图标,点击下载按钮,下载`config.yaml`文件。 把文件下载到你的 -`项目目录`下面的`data`文件夹中,然后把`config.yaml`文件重命名为`.config.yaml`。 +`xiaozhi-server`下面的`data`文件夹中,然后把`config.yaml`文件重命名为`.config.yaml`。 -下载完配置文件后,我们确认一下整个`项目目录`里面的文件如下所示: +下载完配置文件后,我们确认一下整个`xiaozhi-server`里面的文件如下所示: ``` -你的项目根目录 +xiaozhi-server ├─ docker-compose.yml ├─ data ├─ .config.yaml @@ -67,7 +67,7 @@ docker镜像已支持x86架构、arm64架构的CPU,支持在国产操作系统 ## 5. 执行docker命令 -打开命令行工具,使用`终端`或`命令行`工具 进入到你的`项目目录`,执行以下命令 +打开命令行工具,使用`终端`或`命令行`工具 进入到你的`xiaozhi-server`,执行以下命令 ``` docker-compose up -d @@ -110,7 +110,7 @@ docker rmi ghcr.nju.edu.cn/xinnan-tech/xiaozhi-esp32-server:latest ## 4.运行docker -修改完配置后,打开命令行工具,`cd`进入到你的项目目录下,执行以下命令 +修改完配置后,打开命令行工具,`cd`进入到你的`main/xiaozhi-server`下,执行以下命令 ```sh docker run -it --name xiaozhi-env --restart always --security-opt seccomp:unconfined \ @@ -193,11 +193,13 @@ conda install ffmpeg -y 打开完,找到页面中一个绿色的按钮,写着`Code`的按钮,点开它,然后你就看到`Download ZIP`的按钮。 点击它,下载本项目源码压缩包。下载到你电脑后,解压它,此时它的名字可能叫`xiaozhi-esp32-server-main` -你需要把它重命名成`xiaozhi-esp32-server`,好了请记住这个目录,我们暂且称它为`项目目录`。 +你需要把它重命名成`xiaozhi-esp32-server`,在这个文件里,进入到`main`文件夹,再进入到`xiaozhi-server`,好了请记住这个目录`xiaozhi-server`。 ``` -# 继续使用conda环境,进入到你的项目目录,执行以下命令 +# 继续使用conda环境 conda activate xiaozhi-esp32-server +# 进入到你的项目根目录,再进入main/xiaozhi-server +cd main/xiaozhi-server pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ pip install -r requirements.txt ``` @@ -217,21 +219,21 @@ pip install -r requirements.txt ## 5.运行项目 ``` -# 确保在本项目的根目录下执行 +# 确保在xiaozhi-server目录下执行 conda activate xiaozhi-esp32-server python app.py ``` - 这时,你就要留意日志信息,可以根据这个教程,判断是否成功了。[跳转到运行状态确认](#运行状态确认) + # 汇总 ## 配置项目 -如果你的`项目目录`目录没有`data`,你需要创建`data`目录。 +如果你的`xiaozhi-server`目录没有`data`,你需要创建`data`目录。 如果你的`data`下面没有`.config.yaml`文件,你可以把源码目录下的`config.yaml`文件复制一份,重命名为`.config.yaml` -修改`项目目录`下`data`目录下的`.config.yaml`文件,配置本项目必须的两个配置。 +修改`xiaozhi-server`下`data`目录下的`.config.yaml`文件,配置本项目必须的两个配置。 - 默认的LLM使用的是`ChatGLMLLM`,你需要配置密钥,因为他们的模型,虽然有免费的,但是仍要去[官网](https://bigmodel.cn/usercenter/proj-mgmt/apikeys)注册密钥,才能启动。 - 默认的记忆层`mem0ai`,你需要配置密钥,因为他们的API,虽然有免费额度,但是仍要去[官网](https://app.mem0.ai/dashboard/api-keys)注册密钥,才能启动。 @@ -292,4 +294,19 @@ LLM: 这个信息很有用的,后面`编译esp32固件`需要用到。 -接下来,你就可以开始 [编译esp32固件](firmware-build.md)了。 \ No newline at end of file +接下来,你就可以开始 [编译esp32固件](firmware-build.md)了。 + + +以下是一些常见问题,供参考: + +[1、为什么我说的话,小智识别出来很多韩文、日文、英文](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) + +[2、为什么会出现“TTS 任务出错 文件不存在”?](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) + +[3、TTS 经常失败,经常超时](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) + +[4、如何提高小智对话响应速度?](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) + +[5、我说话很慢,停顿时小智老是抢话](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) + +[6、我想通过小智控制电灯、空调、远程开关机等操作](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) diff --git a/docs/docker-build.md b/docs/docker-build.md index ac14dab2..45102a7d 100644 --- a/docs/docker-build.md +++ b/docs/docker-build.md @@ -8,39 +8,14 @@ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin ``` 2、编译docker镜像 ``` -# 普通编译 -docker build -t xiaozhi-esp32-server:local -f ./Dockerfile-pip . -``` -3、测试本地镜像 -``` -docker stop xiaozhi-esp32-server -docker rm xiaozhi-esp32-server - -docker run -d --name xiaozhi-esp32-server --restart always -p 8000:8000 -v $(pwd)/data/.config.yaml:/opt/xiaozhi-esp32-server/config.yaml xiaozhi-esp32-server:local - -docker logs -f xiaozhi-esp32-server +#进入项目根目录 +# 编译server +docker build -t xiaozhi-esp32-server:server_latest -f ./Dockerfile-server . +# 编译web +docker build -t xiaozhi-esp32-server:web_latest -f ./Dockerfile-web . +# 编译完成后,可以使用docker-compose启动项目 +# docker-compose.yml你需要修改成自己编译的镜像版本 +cd main/xiaozhi-server +docker-compose up -d ``` -5、发布腾讯云镜像 -``` -# amd64 -docker tag xiaozhi-esp32-server:local ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest-amd64 -docker push ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest-amd64 - -# arm64 -docker tag xiaozhi-esp32-server:local ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest-arm64 -docker push ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest-arm64 - -# 推送最新版本 -docker manifest rm ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest -docker manifest create ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest-amd64 ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest-arm64 --amend -docker manifest inspect ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest -docker manifest push ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest - -``` -6、运行线上镜像 -``` -cd /Users/hrz/myworkspace/docker-java-env/thirddata/ -docker run -d --name xiaozhi-esp32-server --restart always -p 8000:8000 -v $(pwd)/config.yaml:/opt/xiaozhi-esp32-server/config.yaml ccr.ccs.tencentyun.com/xinnan/xiaozhi-esp32-server:latest -docker logs -f xiaozhi-esp32-server -``` \ No newline at end of file diff --git a/docs/docker/nginx.conf b/docs/docker/nginx.conf new file mode 100644 index 00000000..820fda23 --- /dev/null +++ b/docs/docker/nginx.conf @@ -0,0 +1,26 @@ +server { + listen 8002; + server_name localhost; + + # 静态资源服务(Vue项目) + location / { + root /usr/share/nginx/html; + try_files $uri $uri/ /index.html; + } + + # API反向代理(Java项目) + location /xiaozhi-esp32-api/ { + proxy_pass http://127.0.0.1:8003; + proxy_set_header Host $host; + proxy_cookie_path /api/ /; + proxy_set_header Referer $http_referer; + proxy_set_header Cookie $http_cookie; + + proxy_connect_timeout 10; + proxy_send_timeout 10; + proxy_read_timeout 10; + + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } +} \ No newline at end of file diff --git a/docs/docker/start.sh b/docs/docker/start.sh new file mode 100644 index 00000000..bdaa1e1a --- /dev/null +++ b/docs/docker/start.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# 启动Java后端(docker内监听8003端口) +java -jar /app/xiaozhi-esp32-api.jar \ + --server.port=8003 \ + --spring.datasource.druid.url=${SPRING_DATASOURCE_DRUID_URL} \ + --spring.datasource.druid.username=${SPRING_DATASOURCE_DRUID_USERNAME} \ + --spring.datasource.druid.password=${SPRING_DATASOURCE_DRUID_PASSWORD} \ + --spring.data.redis.host=${SPRING_DATA_REDIS_HOST} \ + --spring.data.redis.port=${SPRING_DATA_REDIS_PORT} & + +# 启动Nginx(前台运行保持容器存活) +nginx -g 'daemon off;' \ No newline at end of file diff --git a/docs/firmware-build.md b/docs/firmware-build.md index cacfd45f..b726826c 100644 --- a/docs/firmware-build.md +++ b/docs/firmware-build.md @@ -87,3 +87,19 @@ https://espressif.github.io/esp-launchpad/ 打开这个教程,[Flash工具/Web端烧录固件(无IDF开发环境)](https://ccnphfhqs21z.feishu.cn/wiki/Zpz4wXBtdimBrLk25WdcXzxcnNS)。 翻到:`方式二:ESP-Launchpad 浏览器WEB端烧录`,从`3. 烧录固件/下载到开发板`开始,按照教程操作。 + +烧录成功且联网成功后,通过唤醒词唤醒小智,留意server端输出的控制台信息。 + +以下是一些常见问题,供参考: + +[1、为什么我说的话,小智识别出来很多韩文、日文、英文](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) + +[2、为什么会出现“TTS 任务出错 文件不存在”?](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) + +[3、TTS 经常失败,经常超时](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) + +[4、如何提高小智对话响应速度?](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) + +[5、我说话很慢,停顿时小智老是抢话](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) + +[6、我想通过小智控制电灯、空调、远程开关机等操作](../README.md#1tts-%E7%BB%8F%E5%B8%B8%E5%A4%B1%E8%B4%A5%E7%BB%8F%E5%B8%B8%E8%B6%85%E6%97%B6-) diff --git a/main/README.md b/main/README.md new file mode 100644 index 00000000..2e164954 --- /dev/null +++ b/main/README.md @@ -0,0 +1,23 @@ +本文档是开发类文档,如需部署小智服务端,[点击这里查看部署教程](../README.md#%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F-) + +# 项目目录介绍 +当你看到这份文件的时候,这个这个项目还没完善好。我们还有很多东西要做。 + +如果你会开发,我们非常欢迎您的加入。 + +``` +xiaozhi-esp32-server + ├─ xiaozhi-server 8000 端口 Python语言开发 负责与esp32通信 + ├─ manager-web 8001 端口 Node.js+Vue开发 负责提供控制台的web界面 + ├─ manager-api 8002 端口 Java语言开发 负责提供控制台的api +``` + +# xiaozhi-server 接口协议 + +[虾哥团队通信协议:Websocket 连接](https://ccnphfhqs21z.feishu.cn/wiki/M0XiwldO9iJwHikpXD5cEx71nKh) + +# manager-web 、manager-api接口协议 + +[manager前后端接口协议](https://app.apifox.com/invite/project?token=H_8qhgfjUeaAL0wybghgU) + +[前端页面设计图](https://codesign.qq.com/app/s/526108506410828) diff --git a/main/manager-api/README.md b/main/manager-api/README.md new file mode 100644 index 00000000..0435956e --- /dev/null +++ b/main/manager-api/README.md @@ -0,0 +1,72 @@ +本文档是开发类文档,如需部署小智服务端,[点击这里查看部署教程](../../README.md#%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F-) +# 项目介绍 + +manager-api 该项目基于SpringBoot框架开发。 + +开发使用代码编辑器,导入项目时,选择`manager-api`文件夹作为项目目录 + +参照[manager前后端接口协议](https://app.apifox.com/invite/project?token=H_8qhgfjUeaAL0wybghgU)开发 + +# 开发环境 +JDK 21 +Maven 3.8+ +MySQL 8.0+ +Vue 3.x + +# 创建数据库 + +如果本机已经安装了MySQL,可以直接在数据库中创建名为`xiaozhi_esp32_server`的数据库。 + +```sql +CREATE DATABASE xiaozhi_esp32_server CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; +``` + +如果还没有MySQL,你可以通过docker安装mysql + +``` +docker run --name xiaozhi-esp32-server-db \ +-e MYSQL_ROOT_PASSWORD=123456 \ +-p 3306:3306 \ +-e MYSQL_DATABASE=xiaozhi_esp32_server \ +-e MYSQL_INITDB_ARGS="--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci" \ +-d mysql:latest +``` + +# 确认项目数据库连接信息 + +在`src/main/resources/application-dev.yml`中配置数据库连接信息 + +``` +spring: + datasource: + username: root + password: 123456 +``` + +# 测试启动 + +本项目为SpringBoot项目,启动方式为: +打开`Application.java`运行`Main`方法启动 + +``` +路径地址: +src/main/java/xiaozhi/AdminApplication.java +``` + +# 打包编译 + +执行以下命令生产jar包 + +``` +mvn install +``` + +把jar包放在服务器上,执行 + +``` +nohup java -jar xiaozhi-esp32-api.jar --spring.profiles.active=dev >/dev/null & +``` + +# 接口文档 +启动后打开:http://localhost:8002/xiaozhi-esp32-api/doc.html + diff --git a/main/manager-api/pom.xml b/main/manager-api/pom.xml new file mode 100644 index 00000000..eacbdff9 --- /dev/null +++ b/main/manager-api/pom.xml @@ -0,0 +1,213 @@ + + 4.0.0 + xiaozhi + xiaozhi-esp32-api + jar + 0.0.1 + xiaozhi-esp32-api + 小智后台管理系统 + + + org.springframework.boot + spring-boot-starter-parent + 3.4.3 + + + + UTF-8 + UTF-8 + 21 + 5.12.0 + 1.2.20 + 3.5.5 + 5.8.24 + 1.19.1 + 4.6.0 + 2.0.2 + 1.6.2 + 33.0.0-jre + 3.3.2 + 4.20.0 + + + + + org.apache.shiro + shiro-core + jakarta + ${shiro.version} + + + org.apache.shiro + shiro-spring + jakarta + ${shiro.version} + + + org.apache.shiro + shiro-core + + + org.apache.shiro + shiro-web + + + + + org.apache.shiro + shiro-web + jakarta + ${shiro.version} + + + org.apache.shiro + shiro-core + + + + + + com.github.whvcse + easy-captcha + ${captcha.version} + + + + org.springframework.boot + spring-boot-starter-websocket + + + com.google.guava + guava + ${guava.version} + + + org.junit.jupiter + junit-jupiter-api + ${junit.version} + test + + + org.springframework.boot + spring-boot-starter-test + test + + + jakarta.servlet + jakarta.servlet-api + provided + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-aop + + + org.springframework + spring-context-support + + + org.springframework.boot + spring-boot-starter-data-redis + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.boot + spring-boot-configuration-processor + true + + + + com.mysql + mysql-connector-j + + + com.alibaba + druid-spring-boot-3-starter + ${druid.version} + + + org.liquibase + liquibase-core + ${liquibase-core.version} + + + com.baomidou + mybatis-plus-boot-starter + ${mybatisplus.version} + + + org.mybatis + mybatis-spring + 3.0.3 + + + cn.hutool + hutool-all + ${hutool.version} + + + org.jsoup + jsoup + ${jsoup.version} + + + com.github.xingfudeshi + knife4j-openapi3-jakarta-spring-boot-starter + ${knife4j.version} + + + org.projectlombok + lombok + true + + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public/ + + true + + + + + + public + aliyun nexus + https://maven.aliyun.com/repository/public/ + + true + + + false + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + org.apache.maven.plugins + maven-surefire-plugin + + true + + + + + \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/AdminApplication.java b/main/manager-api/src/main/java/xiaozhi/AdminApplication.java new file mode 100644 index 00000000..87edd510 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/AdminApplication.java @@ -0,0 +1,13 @@ +package xiaozhi; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AdminApplication { + + public static void main(String[] args) { + SpringApplication.run(AdminApplication.class, args); + System.out.println("http://localhost:8002/xiaozhi-esp32-api/doc.html"); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/annotation/DataFilter.java b/main/manager-api/src/main/java/xiaozhi/common/annotation/DataFilter.java new file mode 100644 index 00000000..b25c6fb4 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/annotation/DataFilter.java @@ -0,0 +1,29 @@ +package xiaozhi.common.annotation; + +import java.lang.annotation.*; + +/** + * 数据过滤注解 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface DataFilter { + /** + * 表的别名 + */ + String tableAlias() default ""; + + /** + * 用户ID + */ + String userId() default "creator"; + + /** + * 部门ID + */ + String deptId() default "dept_id"; + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/annotation/LogOperation.java b/main/manager-api/src/main/java/xiaozhi/common/annotation/LogOperation.java new file mode 100644 index 00000000..b2514ef5 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/annotation/LogOperation.java @@ -0,0 +1,16 @@ +package xiaozhi.common.annotation; + +import java.lang.annotation.*; + +/** + * 操作日志注解 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface LogOperation { + + String value() default ""; +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/aspect/DataFilterAspect.java b/main/manager-api/src/main/java/xiaozhi/common/aspect/DataFilterAspect.java new file mode 100644 index 00000000..db75689d --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/aspect/DataFilterAspect.java @@ -0,0 +1,99 @@ +package xiaozhi.common.aspect; + +import cn.hutool.core.collection.CollUtil; +import xiaozhi.common.annotation.DataFilter; +import xiaozhi.common.constant.Constant; +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.exception.RenException; +import xiaozhi.common.interceptor.DataScope; +import xiaozhi.common.user.UserDetail; +import xiaozhi.modules.security.user.SecurityUser; +import xiaozhi.modules.sys.enums.SuperAdminEnum; +import org.apache.commons.lang3.StringUtils; +import org.aspectj.lang.JoinPoint; +import org.aspectj.lang.annotation.Aspect; +import org.aspectj.lang.annotation.Before; +import org.aspectj.lang.annotation.Pointcut; +import org.aspectj.lang.reflect.MethodSignature; +import org.springframework.stereotype.Component; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Map; + +/** + * 数据过滤,切面处理类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Aspect +@Component +public class DataFilterAspect { + + @Pointcut("@annotation(xiaozhi.common.annotation.DataFilter)") + public void dataFilterCut() { + + } + + @Before("dataFilterCut()") + public void dataFilter(JoinPoint point) { + Object params = point.getArgs()[0]; + if (params != null && params instanceof Map) { + UserDetail user = SecurityUser.getUser(); + + //如果是超级管理员,则不进行数据过滤 + if (user.getSuperAdmin() == SuperAdminEnum.YES.value()) { + return; + } + + try { + //否则进行数据过滤 + Map map = (Map) params; + String sqlFilter = getSqlFilter(user, point); + map.put(Constant.SQL_FILTER, new DataScope(sqlFilter)); + } catch (Exception e) { + + } + + return; + } + + throw new RenException(ErrorCode.DATA_SCOPE_PARAMS_ERROR); + } + + /** + * 获取数据过滤的SQL + */ + private String getSqlFilter(UserDetail user, JoinPoint point) throws Exception { + MethodSignature signature = (MethodSignature) point.getSignature(); + Method method = point.getTarget().getClass().getDeclaredMethod(signature.getName(), signature.getParameterTypes()); + DataFilter dataFilter = method.getAnnotation(DataFilter.class); + + //获取表的别名 + String tableAlias = dataFilter.tableAlias(); + if (StringUtils.isNotBlank(tableAlias)) { + tableAlias += "."; + } + + StringBuilder sqlFilter = new StringBuilder(); + sqlFilter.append(" ("); + + //部门ID列表 + List deptIdList = user.getDeptIdList(); + if (CollUtil.isNotEmpty(deptIdList)) { + sqlFilter.append(tableAlias).append(dataFilter.deptId()); + + sqlFilter.append(" in(").append(StringUtils.join(deptIdList, ",")).append(")"); + } + + //查询本人数据 + if (CollUtil.isNotEmpty(deptIdList)) { + sqlFilter.append(" or "); + } + sqlFilter.append(tableAlias).append(dataFilter.userId()).append("=").append(user.getId()); + + sqlFilter.append(")"); + + return sqlFilter.toString(); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/aspect/RedisAspect.java b/main/manager-api/src/main/java/xiaozhi/common/aspect/RedisAspect.java new file mode 100644 index 00000000..69248613 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/aspect/RedisAspect.java @@ -0,0 +1,40 @@ +package xiaozhi.common.aspect; + +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.exception.RenException; +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +/** + * Redis切面处理类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Slf4j +@Aspect +@Component +public class RedisAspect { + /** + * 是否开启redis缓存 true开启 false关闭 + */ + @Value("${renren.redis.open}") + private boolean open; + + @Around("execution(* xiaozhi.common.redis.RedisUtils.*(..))") + public Object around(ProceedingJoinPoint point) throws Throwable { + Object result = null; + if (open) { + try { + result = point.proceed(); + } catch (Exception e) { + log.error("redis error", e); + throw new RenException(ErrorCode.REDIS_ERROR); + } + } + return result; + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/config/MybatisPlusConfig.java b/main/manager-api/src/main/java/xiaozhi/common/config/MybatisPlusConfig.java new file mode 100644 index 00000000..2890a61c --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/config/MybatisPlusConfig.java @@ -0,0 +1,34 @@ +package xiaozhi.common.config; + +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.BlockAttackInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import xiaozhi.common.interceptor.DataFilterInterceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * mybatis-plus配置 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Configuration +public class MybatisPlusConfig { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor(); + // 数据权限 + mybatisPlusInterceptor.addInnerInterceptor(new DataFilterInterceptor()); + // 分页插件 + mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor()); + // 乐观锁 + mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); + // 防止全表更新与删除 + mybatisPlusInterceptor.addInnerInterceptor(new BlockAttackInnerInterceptor()); + + return mybatisPlusInterceptor; + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/config/SwaggerConfig.java b/main/manager-api/src/main/java/xiaozhi/common/config/SwaggerConfig.java new file mode 100644 index 00000000..c9e38ab1 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/config/SwaggerConfig.java @@ -0,0 +1,32 @@ +package xiaozhi.common.config; + +import io.swagger.v3.oas.models.OpenAPI; +import io.swagger.v3.oas.models.info.Info; +import org.springdoc.core.models.GroupedOpenApi; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +/** + * Swagger配置 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Configuration +public class SwaggerConfig { + + @Bean + public GroupedOpenApi userApi() { + String[] paths = {"/**"}; + return GroupedOpenApi.builder().group("xiaozhi") + .pathsToMatch(paths).build(); + } + + @Bean + public OpenAPI customOpenAPI() { + return new OpenAPI().info(new Info() + .title("xiaozhi-esp32-manager-api") + .description("xiaozhi-esp32-manager-api文档") + .version("3.0") + .termsOfService("https://127.0.0.1")); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/constant/Constant.java b/main/manager-api/src/main/java/xiaozhi/common/constant/Constant.java new file mode 100644 index 00000000..ffe7ff3c --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/constant/Constant.java @@ -0,0 +1,150 @@ +package xiaozhi.common.constant; + +/** + * 常量 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public interface Constant { + /** + * 成功 + */ + int SUCCESS = 1; + /** + * 失败 + */ + int FAIL = 0; + /** + * OK + */ + String OK = "OK"; + /** + * 用户标识 + */ + String USER_KEY = "userId"; + /** + * 菜单根节点标识 + */ + Long MENU_ROOT = 0L; + /** + * 部门根节点标识 + */ + Long DEPT_ROOT = 0L; + /** + * 数据字典根节点标识 + */ + Long DICT_ROOT = 0L; + /** + * 升序 + */ + String ASC = "asc"; + /** + * 降序 + */ + String DESC = "desc"; + /** + * 创建时间字段名 + */ + String CREATE_DATE = "create_date"; + + /** + * 创建时间字段名 + */ + String ID = "id"; + + /** + * 数据权限过滤 + */ + String SQL_FILTER = "sqlFilter"; + + /** + * 当前页码 + */ + String PAGE = "page"; + /** + * 每页显示记录数 + */ + String LIMIT = "limit"; + /** + * 排序字段 + */ + String ORDER_FIELD = "orderField"; + /** + * 排序方式 + */ + String ORDER = "order"; + /** + * token header + */ + String TOKEN_HEADER = "token"; + + /** + * 路径分割符 + */ + String FILE_EXTENSION_SEG = "."; + + enum SysBaseParam { + /** + * 系统全称 + */ + SYS_NAME("SYS_NAME"), + /** + * 系统简称 + */ + SYS_SHORT_NAME("SYS_SHORT_NAME"), + /** + * 系统描述 + */ + SYS_DES("SYS_DES"), + /** + * 登录失败几次锁定 + */ + LOGIN_LOCK_COUNT("LOGIN_LOCK_COUNT"), + /** + * 账号失败锁定分钟数 + */ + LOGIN_LOCK_TIME("LOGIN_LOCK_TIME"), + /** + * TOKEN强验证 + */ + SYS_TOKEN_SECURITY("SYS_TOKEN_SECURITY"); + + private String value; + + SysBaseParam(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } + + /** + * 数据状态 + */ + enum DataOperation { + /** + * 插入 + */ + INSERT("I"), + /** + * 已修改 + */ + UPDATE("U"), + /** + * 已删除 + */ + DELETE("D"); + + private String value; + + DataOperation(String value) { + this.value = value; + } + + public String getValue() { + return value; + } + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java b/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java new file mode 100644 index 00000000..a8439180 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/convert/DateConverter.java @@ -0,0 +1,73 @@ +package xiaozhi.common.convert; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.convert.converter.Converter; +import org.springframework.stereotype.Component; +import org.springframework.util.StringUtils; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; + +/** + * 日期转换 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Component +public class DateConverter implements Converter { + private static final Logger logger = LoggerFactory.getLogger(DateConverter.class); + private static final List formatList = new ArrayList<>(5); + + static { + formatList.add("yyyy-MM"); + formatList.add("yyyy-MM-dd"); + formatList.add("yyyy-MM-dd hh:mm"); + formatList.add("yyyy-MM-dd hh:mm:ss"); + formatList.add("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); + } + + @Override + public Date convert(String source) { + String value = source.trim(); + if (StringUtils.isEmpty(value)) { + return null; + } + + if (source.matches("^\\d{4}-\\d{1,2}$")) { + return parseDate(source, formatList.get(0)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}$")) { + return parseDate(source, formatList.get(1)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}$")) { + return parseDate(source, formatList.get(2)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2} {1}\\d{1,2}:\\d{1,2}:\\d{1,2}$")) { + return parseDate(source, formatList.get(3)); + } else if (source.matches("^\\d{4}-\\d{1,2}-\\d{1,2}.*T.*\\d{1,2}:\\d{1,2}:\\d{1,2}.*..*$")) { + return parseDate(source, formatList.get(4)); + } else { + throw new IllegalArgumentException("Invalid boolean value '" + source + "'"); + } + } + + /** + * 格式化日期 + * + * @param dateStr String 字符型日期 + * @param format String 格式 + * @return Date 日期 + */ + public Date parseDate(String dateStr, String format) { + Date date = null; + try { + DateFormat dateFormat = new SimpleDateFormat(format); + date = dateFormat.parse(dateStr); + } catch (Exception e) { + logger.error("Formatted date with date: {} and format : {} ", dateStr, format); + } + return date; + } + +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/dao/BaseDao.java b/main/manager-api/src/main/java/xiaozhi/common/dao/BaseDao.java new file mode 100644 index 00000000..d65e7830 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/dao/BaseDao.java @@ -0,0 +1,12 @@ +package xiaozhi.common.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * 基础Dao + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public interface BaseDao extends BaseMapper { + +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/entity/BaseEntity.java b/main/manager-api/src/main/java/xiaozhi/common/entity/BaseEntity.java new file mode 100644 index 00000000..e7e2f345 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/entity/BaseEntity.java @@ -0,0 +1,33 @@ +package xiaozhi.common.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 基础实体类,所有实体都需要继承 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Data +public abstract class BaseEntity implements Serializable { + /** + * id + */ + @TableId + private Long id; + /** + * 创建者 + */ + @TableField(fill = FieldFill.INSERT) + private Long creator; + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createDate; +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/exception/ErrorCode.java b/main/manager-api/src/main/java/xiaozhi/common/exception/ErrorCode.java new file mode 100644 index 00000000..1c1c09f5 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/exception/ErrorCode.java @@ -0,0 +1,45 @@ +package xiaozhi.common.exception; + +/** + * 错误编码,由5位数字组成,前2位为模块编码,后3位为业务编码 + *

+ * 如:10001(10代表系统模块,001代表业务代码) + *

+ * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public interface ErrorCode { + int INTERNAL_SERVER_ERROR = 500; + int UNAUTHORIZED = 401; + int FORBIDDEN = 403; + + int NOT_NULL = 10001; + int DB_RECORD_EXISTS = 10002; + int PARAMS_GET_ERROR = 10003; + int ACCOUNT_PASSWORD_ERROR = 10004; + int ACCOUNT_DISABLE = 10005; + int IDENTIFIER_NOT_NULL = 10006; + int CAPTCHA_ERROR = 10007; + int SUB_MENU_EXIST = 10008; + int PASSWORD_ERROR = 10009; + int SUPERIOR_DEPT_ERROR = 10011; + int SUPERIOR_MENU_ERROR = 10012; + int DATA_SCOPE_PARAMS_ERROR = 10013; + int DEPT_SUB_DELETE_ERROR = 10014; + int DEPT_USER_DELETE_ERROR = 10015; + int UPLOAD_FILE_EMPTY = 10019; + int TOKEN_NOT_EMPTY = 10020; + int TOKEN_INVALID = 10021; + int ACCOUNT_LOCK = 10022; + int OSS_UPLOAD_FILE_ERROR = 10024; + int REDIS_ERROR = 10027; + int JOB_ERROR = 10028; + int INVALID_SYMBOL = 10029; + + // 密码相关错误码 + int PASSWORD_LENGTH_ERROR = 10030; + int PASSWORD_WEAK_ERROR = 10031; + int DEL_MYSELF_ERROR = 10032; + // 验证码错误 + int VERIFICATION_CODE = 10033; +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/exception/RenException.java b/main/manager-api/src/main/java/xiaozhi/common/exception/RenException.java new file mode 100644 index 00000000..cf295dcf --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/exception/RenException.java @@ -0,0 +1,67 @@ +package xiaozhi.common.exception; + + +import xiaozhi.common.utils.MessageUtils; + +/** + * 自定义异常 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class RenException extends RuntimeException { + + + private int code; + private String msg; + + public RenException(int code) { + this.code = code; + this.msg = MessageUtils.getMessage(code); + } + + public RenException(int code, String... params) { + this.code = code; + this.msg = MessageUtils.getMessage(code, params); + } + + public RenException(int code, Throwable e) { + super(e); + this.code = code; + this.msg = MessageUtils.getMessage(code); + } + + public RenException(int code, Throwable e, String... params) { + super(e); + this.code = code; + this.msg = MessageUtils.getMessage(code, params); + } + + public RenException(String msg) { + super(msg); + this.code = ErrorCode.INTERNAL_SERVER_ERROR; + this.msg = msg; + } + + public RenException(String msg, Throwable e) { + super(msg, e); + this.code = ErrorCode.INTERNAL_SERVER_ERROR; + this.msg = msg; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java b/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java new file mode 100644 index 00000000..06665ee2 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/exception/RenExceptionHandler.java @@ -0,0 +1,57 @@ +package xiaozhi.common.exception; + +import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.shiro.authz.UnauthorizedException; +import org.springframework.dao.DuplicateKeyException; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; +import xiaozhi.common.utils.Result; + + +/** + * 异常处理器 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Slf4j +@AllArgsConstructor +@RestControllerAdvice +public class RenExceptionHandler { + + /** + * 处理自定义异常 + */ + @ExceptionHandler(RenException.class) + public Result handleRenException(RenException ex) { + Result result = new Result(); + result.error(ex.getCode(), ex.getMsg()); + + return result; + } + + @ExceptionHandler(DuplicateKeyException.class) + public Result handleDuplicateKeyException(DuplicateKeyException ex) { + Result result = new Result(); + result.error(ErrorCode.DB_RECORD_EXISTS); + + return result; + } + + @ExceptionHandler(UnauthorizedException.class) + public Result handleUnauthorizedException(UnauthorizedException ex) { + Result result = new Result(); + result.error(ErrorCode.FORBIDDEN); + + return result; + } + + + @ExceptionHandler(Exception.class) + public Result handleException(Exception ex) { + log.error(ex.getMessage(), ex); + + return new Result().error(); + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/handler/FieldMetaObjectHandler.java b/main/manager-api/src/main/java/xiaozhi/common/handler/FieldMetaObjectHandler.java new file mode 100644 index 00000000..fbb75322 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/handler/FieldMetaObjectHandler.java @@ -0,0 +1,59 @@ +package xiaozhi.common.handler; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import xiaozhi.common.constant.Constant; +import xiaozhi.common.user.UserDetail; +import xiaozhi.modules.security.user.SecurityUser; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.util.Date; + +/** + * 公共字段,自动填充值 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Component +public class FieldMetaObjectHandler implements MetaObjectHandler { + private final static String CREATE_DATE = "createDate"; + private final static String CREATOR = "creator"; + private final static String UPDATE_DATE = "updateDate"; + private final static String UPDATER = "updater"; + + private final static String DATA_OPERATION = "dataOperation"; + private final static String DEPT_ID = "deptId"; + + @Override + public void insertFill(MetaObject metaObject) { + UserDetail user = SecurityUser.getUser(); + Date date = new Date(); + + //创建者 + strictInsertFill(metaObject, CREATOR, Long.class, user.getId()); + //创建时间 + strictInsertFill(metaObject, CREATE_DATE, Date.class, date); + + //创建者所属部门 + strictInsertFill(metaObject, DEPT_ID, Long.class, user.getDeptId()); + + //更新者 + strictInsertFill(metaObject, UPDATER, Long.class, user.getId()); + //更新时间 + strictInsertFill(metaObject, UPDATE_DATE, Date.class, date); + + //数据标识 + strictInsertFill(metaObject, DATA_OPERATION, String.class, Constant.DataOperation.INSERT.getValue()); + } + + @Override + public void updateFill(MetaObject metaObject) { + //更新者 + strictUpdateFill(metaObject, UPDATER, Long.class, SecurityUser.getUserId()); + //更新时间 + strictUpdateFill(metaObject, UPDATE_DATE, Date.class, new Date()); + + //数据标识 + strictInsertFill(metaObject, DATA_OPERATION, String.class, Constant.DataOperation.UPDATE.getValue()); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/interceptor/DataFilterInterceptor.java b/main/manager-api/src/main/java/xiaozhi/common/interceptor/DataFilterInterceptor.java new file mode 100644 index 00000000..160e7ff3 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/interceptor/DataFilterInterceptor.java @@ -0,0 +1,81 @@ +package xiaozhi.common.interceptor; + +import cn.hutool.core.util.StrUtil; +import com.baomidou.mybatisplus.core.toolkit.PluginUtils; +import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; +import net.sf.jsqlparser.JSQLParserException; +import net.sf.jsqlparser.expression.Expression; +import net.sf.jsqlparser.expression.StringValue; +import net.sf.jsqlparser.expression.operators.conditional.AndExpression; +import net.sf.jsqlparser.parser.CCJSqlParserUtil; +import net.sf.jsqlparser.statement.select.PlainSelect; +import net.sf.jsqlparser.statement.select.Select; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.BoundSql; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.session.ResultHandler; +import org.apache.ibatis.session.RowBounds; + +import java.util.Map; + +/** + * 数据过滤 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class DataFilterInterceptor implements InnerInterceptor { + + @Override + public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { + DataScope scope = getDataScope(parameter); + // 不进行数据过滤 + if (scope == null || StrUtil.isBlank(scope.getSqlFilter())) { + return; + } + + // 拼接新SQL + String buildSql = getSelect(boundSql.getSql(), scope); + + // 重写SQL + PluginUtils.mpBoundSql(boundSql).sql(buildSql); + } + + private DataScope getDataScope(Object parameter) { + if (parameter == null) { + return null; + } + + // 判断参数里是否有DataScope对象 + if (parameter instanceof Map) { + Map parameterMap = (Map) parameter; + for (Map.Entry entry : parameterMap.entrySet()) { + if (entry.getValue() != null && entry.getValue() instanceof DataScope) { + return (DataScope) entry.getValue(); + } + } + } else if (parameter instanceof DataScope) { + return (DataScope) parameter; + } + + return null; + } + + private String getSelect(String buildSql, DataScope scope) { + try { + Select select = (Select) CCJSqlParserUtil.parse(buildSql); + PlainSelect plainSelect = (PlainSelect) select.getSelectBody(); + + Expression expression = plainSelect.getWhere(); + if (expression == null) { + plainSelect.setWhere(new StringValue(scope.getSqlFilter())); + } else { + AndExpression andExpression = new AndExpression(expression, new StringValue(scope.getSqlFilter())); + plainSelect.setWhere(andExpression); + } + + return select.toString().replaceAll("'", ""); + } catch (JSQLParserException e) { + return buildSql; + } + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/interceptor/DataScope.java b/main/manager-api/src/main/java/xiaozhi/common/interceptor/DataScope.java new file mode 100644 index 00000000..b59de67b --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/interceptor/DataScope.java @@ -0,0 +1,27 @@ +package xiaozhi.common.interceptor; + +/** + * 数据范围 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class DataScope { + private String sqlFilter; + + public DataScope(String sqlFilter) { + this.sqlFilter = sqlFilter; + } + + public String getSqlFilter() { + return sqlFilter; + } + + public void setSqlFilter(String sqlFilter) { + this.sqlFilter = sqlFilter; + } + + @Override + public String toString() { + return this.sqlFilter; + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/page/PageData.java b/main/manager-api/src/main/java/xiaozhi/common/page/PageData.java new file mode 100644 index 00000000..b7e943d2 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/page/PageData.java @@ -0,0 +1,33 @@ +package xiaozhi.common.page; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 分页工具类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Data +@Schema(description = "分页数据") +public class PageData implements Serializable { + @Schema(description = "总记录数") + private int total; + + @Schema(description = "列表数据") + private List list; + + /** + * 分页 + * + * @param list 列表数据 + * @param total 总记录数 + */ + public PageData(List list, long total) { + this.list = list; + this.total = (int) total; + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/page/TokenDTO.java b/main/manager-api/src/main/java/xiaozhi/common/page/TokenDTO.java new file mode 100644 index 00000000..48d26f3a --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/page/TokenDTO.java @@ -0,0 +1,26 @@ +package xiaozhi.common.page; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.io.Serializable; + +/** + * 令牌信息 + * + * @author Jack + */ +@Data +@Schema(description = "令牌信息") +public class TokenDTO implements Serializable { + + + @Schema(description = "密码") + private String token; + + @Schema(description = "过期时间") + private int expire; + + @Schema(description = "客户端指纹") + private String clientHash; +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisConfig.java b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisConfig.java new file mode 100644 index 00000000..a4316b63 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisConfig.java @@ -0,0 +1,32 @@ +package xiaozhi.common.redis; + +import jakarta.annotation.Resource; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.data.redis.connection.RedisConnectionFactory; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.data.redis.serializer.RedisSerializer; +import org.springframework.data.redis.serializer.StringRedisSerializer; + +/** + * Redis配置 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Configuration +public class RedisConfig { + @Resource + private RedisConnectionFactory factory; + + @Bean + public RedisTemplate redisTemplate() { + RedisTemplate redisTemplate = new RedisTemplate<>(); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setValueSerializer(RedisSerializer.json()); + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(RedisSerializer.json()); + redisTemplate.setConnectionFactory(factory); + + return redisTemplate; + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisKeys.java b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisKeys.java new file mode 100644 index 00000000..0c594059 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisKeys.java @@ -0,0 +1,80 @@ +package xiaozhi.common.redis; + +/** + * Redis Key 常量类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class RedisKeys { + /** + * 系统参数Key + */ + public static String getSysParamsKey() { + return "sys:params"; + } + + /** + * 验证码Key + */ + public static String getCaptchaKey(String uuid) { + return "sys:captcha:" + uuid; + } + + /** + * 登录用户Key + */ + public static String getSecurityUserKey(Long id) { + return "sys:security:user:" + id; + } + + /** + * 系统日志Key + */ + public static String getSysLogKey() { + return "sys:log"; + } + + /** + * 系统资源Key + */ + public static String getSysResourceKey() { + return "sys:resource"; + } + + /** + * 用户菜单导航Key + */ + public static String getUserMenuNavKey(Long userId) { + return "sys:user:nav:" + userId; + } + + /** + * 用户权限标识Key + */ + public static String getUserPermissionsKey(Long userId) { + return "sys:user:permissions:" + userId; + } + + /** + * 用户登陆错误次数 + * + * @param username + * @return + */ + public static String getUserLoginErrorCountKey(String username) { + return "sys:user:login:error:" + username; + } + + public static String getUserInfoKey(Long userId) { + return "sys:user:" + userId; + } + + public static String getDataScopeListKey(Long userId) { + return "sys:user:data:scope:" + userId; + } + + public static String getSysUserName(Long id) { + return "sys:user:name" + id; + } + +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java new file mode 100644 index 00000000..4626b14d --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/redis/RedisUtils.java @@ -0,0 +1,126 @@ +package xiaozhi.common.redis; + +import jakarta.annotation.Resource; +import org.springframework.data.redis.core.HashOperations; +import org.springframework.data.redis.core.RedisTemplate; +import org.springframework.stereotype.Component; + +import java.util.Collection; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +/** + * Redis工具类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Component +public class RedisUtils { + @Resource + private RedisTemplate redisTemplate; + + /** + * 默认过期时长为24小时,单位:秒 + */ + public final static long DEFAULT_EXPIRE = 60 * 60 * 24L; + /** + * 过期时长为1小时,单位:秒 + */ + public final static long HOUR_ONE_EXPIRE = 60 * 60 * 1L; + /** + * 过期时长为6小时,单位:秒 + */ + public final static long HOUR_SIX_EXPIRE = 60 * 60 * 6L; + /** + * 不设置过期时长 + */ + public final static long NOT_EXPIRE = -1L; + + public void set(String key, Object value, long expire) { + redisTemplate.opsForValue().set(key, value); + if (expire != NOT_EXPIRE) { + expire(key, expire); + } + } + + public void set(String key, Object value) { + set(key, value, DEFAULT_EXPIRE); + } + + public Object get(String key, long expire) { + Object value = redisTemplate.opsForValue().get(key); + if (expire != NOT_EXPIRE) { + expire(key, expire); + } + return value; + } + + public Object get(String key) { + return get(key, NOT_EXPIRE); + } + + public void delete(String key) { + redisTemplate.delete(key); + } + + public void delete(Collection keys) { + redisTemplate.delete(keys); + } + + public Object hGet(String key, String field) { + return redisTemplate.opsForHash().get(key, field); + } + + public Map hGetAll(String key) { + HashOperations hashOperations = redisTemplate.opsForHash(); + return hashOperations.entries(key); + } + + public void hMSet(String key, Map map) { + hMSet(key, map, DEFAULT_EXPIRE); + } + + public void hMSet(String key, Map map, long expire) { + redisTemplate.opsForHash().putAll(key, map); + + if (expire != NOT_EXPIRE) { + expire(key, expire); + } + } + + public void hSet(String key, String field, Object value) { + hSet(key, field, value, DEFAULT_EXPIRE); + } + + public void hSet(String key, String field, Object value, long expire) { + redisTemplate.opsForHash().put(key, field, value); + + if (expire != NOT_EXPIRE) { + expire(key, expire); + } + } + + public void expire(String key, long expire) { + redisTemplate.expire(key, expire, TimeUnit.SECONDS); + } + + public void hDel(String key, Object... fields) { + redisTemplate.opsForHash().delete(key, fields); + } + + public void leftPush(String key, Object value) { + leftPush(key, value, DEFAULT_EXPIRE); + } + + public void leftPush(String key, Object value, long expire) { + redisTemplate.opsForList().leftPush(key, value); + + if (expire != NOT_EXPIRE) { + expire(key, expire); + } + } + + public Object rightPop(String key) { + return redisTemplate.opsForList().rightPop(key); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/service/BaseService.java b/main/manager-api/src/main/java/xiaozhi/common/service/BaseService.java new file mode 100644 index 00000000..01bd48ca --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/service/BaseService.java @@ -0,0 +1,108 @@ +package xiaozhi.common.service; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; + +import java.io.Serializable; +import java.util.Collection; + +/** + * 基础服务接口,所有Service接口都要继承 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public interface BaseService { + Class currentModelClass(); + + /** + *

+ * 插入一条记录(选择字段,策略插入) + *

+ * + * @param entity 实体对象 + */ + boolean insert(T entity); + + /** + *

+ * 插入(批量),该方法不支持 Oracle、SQL Server + *

+ * + * @param entityList 实体对象集合 + */ + boolean insertBatch(Collection entityList); + + /** + *

+ * 插入(批量),该方法不支持 Oracle、SQL Server + *

+ * + * @param entityList 实体对象集合 + * @param batchSize 插入批次数量 + */ + boolean insertBatch(Collection entityList, int batchSize); + + /** + *

+ * 根据 ID 选择修改 + *

+ * + * @param entity 实体对象 + */ + boolean updateById(T entity); + + /** + *

+ * 根据 whereEntity 条件,更新记录 + *

+ * + * @param entity 实体对象 + * @param updateWrapper 实体对象封装操作类 {@link com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper} + */ + boolean update(T entity, Wrapper updateWrapper); + + /** + *

+ * 根据ID 批量更新 + *

+ * + * @param entityList 实体对象集合 + */ + boolean updateBatchById(Collection entityList); + + /** + *

+ * 根据ID 批量更新 + *

+ * + * @param entityList 实体对象集合 + * @param batchSize 更新批次数量 + */ + boolean updateBatchById(Collection entityList, int batchSize); + + /** + *

+ * 根据 ID 查询 + *

+ * + * @param id 主键ID + */ + T selectById(Serializable id); + + /** + *

+ * 根据 ID 删除 + *

+ * + * @param id 主键ID + */ + boolean deleteById(Serializable id); + + /** + *

+ * 删除(根据ID 批量删除) + *

+ * + * @param idList 主键ID列表 + */ + boolean deleteBatchIds(Collection idList); +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/service/CrudService.java b/main/manager-api/src/main/java/xiaozhi/common/service/CrudService.java new file mode 100644 index 00000000..bc1094e4 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/service/CrudService.java @@ -0,0 +1,28 @@ +package xiaozhi.common.service; + +import xiaozhi.common.page.PageData; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; + +/** + * CRUD基础服务接口 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public interface CrudService extends BaseService { + + PageData page(Map params); + + List list(Map params); + + D get(Serializable id); + + void save(D dto); + + void update(D dto); + + void delete(Serializable[] ids); + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java new file mode 100644 index 00000000..16fd6feb --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/service/impl/BaseServiceImpl.java @@ -0,0 +1,214 @@ +package xiaozhi.common.service.impl; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.enums.SqlMethod; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.metadata.OrderItem; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.toolkit.SqlHelper; +import xiaozhi.common.constant.Constant; +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.BaseService; +import xiaozhi.common.utils.ConvertUtils; +import org.apache.ibatis.binding.MapperMethod; +import org.apache.ibatis.logging.Log; +import org.apache.ibatis.logging.LogFactory; +import org.apache.ibatis.session.SqlSession; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.transaction.annotation.Transactional; + +import java.io.Serializable; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.function.BiConsumer; + +/** + * 基础服务类,所有Service都要继承 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public abstract class BaseServiceImpl, T> implements BaseService { + @Autowired + protected M baseDao; + protected Log log = LogFactory.getLog(getClass()); + + /** + * 获取分页对象 + * + * @param params 分页查询参数 + * @param defaultOrderField 默认排序字段 + * @param isAsc 排序方式 + */ + protected IPage getPage(Map params, String defaultOrderField, boolean isAsc) { + //分页参数 + long curPage = 1; + long limit = 10; + + if (params.get(Constant.PAGE) != null) { + curPage = Long.parseLong((String) params.get(Constant.PAGE)); + } + if (params.get(Constant.LIMIT) != null) { + limit = Long.parseLong((String) params.get(Constant.LIMIT)); + } + + //分页对象 + Page page = new Page<>(curPage, limit); + + //分页参数 + params.put(Constant.PAGE, page); + + //排序字段 + String orderField = (String) params.get(Constant.ORDER_FIELD); + String order = (String) params.get(Constant.ORDER); + + //前端字段排序 + if (StringUtils.isNotBlank(orderField) && StringUtils.isNotBlank(order)) { + if (Constant.ASC.equalsIgnoreCase(order)) { + return page.addOrder(OrderItem.asc(orderField)); + } else { + return page.addOrder(OrderItem.desc(orderField)); + } + } + + //没有排序字段,则不排序 + if (StringUtils.isBlank(defaultOrderField)) { + return page; + } + + //默认排序 + if (isAsc) { + page.addOrder(OrderItem.asc(defaultOrderField)); + } else { + page.addOrder(OrderItem.desc(defaultOrderField)); + } + + return page; + } + + protected PageData getPageData(List list, long total, Class target) { + List targetList = ConvertUtils.sourceToTarget(list, target); + + return new PageData<>(targetList, total); + } + + protected PageData getPageData(IPage page, Class target) { + return getPageData(page.getRecords(), page.getTotal(), target); + } + + protected void paramsToLike(Map params, String... likes) { + for (String like : likes) { + String val = (String) params.get(like); + if (StringUtils.isNotBlank(val)) { + params.put(like, "%" + val + "%"); + } else { + params.put(like, null); + } + } + } + + /** + *

+ * 判断数据库操作是否成功 + *

+ *

+ * 注意!! 该方法为 Integer 判断,不可传入 int 基本类型 + *

+ * + * @param result 数据库操作返回影响条数 + * @return boolean + */ + protected static boolean retBool(Integer result) { + return SqlHelper.retBool(result); + } + + protected Class currentMapperClass() { + return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 0); + } + + @Override + public Class currentModelClass() { + return (Class) ReflectionKit.getSuperClassGenericType(this.getClass(), BaseServiceImpl.class, 1); + } + + protected String getSqlStatement(SqlMethod sqlMethod) { + return SqlHelper.getSqlStatement(this.currentMapperClass(), sqlMethod); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean insert(T entity) { + return BaseServiceImpl.retBool(baseDao.insert(entity)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean insertBatch(Collection entityList) { + return insertBatch(entityList, 100); + } + + /** + * 批量插入 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public boolean insertBatch(Collection entityList, int batchSize) { + String sqlStatement = getSqlStatement(SqlMethod.INSERT_ONE); + return executeBatch(entityList, batchSize, (sqlSession, entity) -> sqlSession.insert(sqlStatement, entity)); + } + + /** + * 执行批量操作 + */ + protected boolean executeBatch(Collection list, int batchSize, BiConsumer consumer) { + return SqlHelper.executeBatch(this.currentModelClass(), this.log, list, batchSize, consumer); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateById(T entity) { + return BaseServiceImpl.retBool(baseDao.updateById(entity)); + } + + @Override + public boolean update(T entity, Wrapper updateWrapper) { + return BaseServiceImpl.retBool(baseDao.update(entity, updateWrapper)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateBatchById(Collection entityList) { + return updateBatchById(entityList, 30); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public boolean updateBatchById(Collection entityList, int batchSize) { + String sqlStatement = getSqlStatement(SqlMethod.UPDATE_BY_ID); + return executeBatch(entityList, batchSize, (sqlSession, entity) -> { + MapperMethod.ParamMap param = new MapperMethod.ParamMap<>(); + param.put(Constants.ENTITY, entity); + sqlSession.update(sqlStatement, param); + }); + } + + @Override + public T selectById(Serializable id) { + return baseDao.selectById(id); + } + + @Override + public boolean deleteById(Serializable id) { + return SqlHelper.retBool(baseDao.deleteById(id)); + } + + @Override + public boolean deleteBatchIds(Collection idList) { + return SqlHelper.retBool(baseDao.deleteBatchIds(idList)); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/service/impl/CrudServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/common/service/impl/CrudServiceImpl.java new file mode 100644 index 00000000..6608e7c3 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/service/impl/CrudServiceImpl.java @@ -0,0 +1,73 @@ +package xiaozhi.common.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.ReflectionKit; +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.CrudService; +import xiaozhi.common.utils.ConvertUtils; +import org.springframework.beans.BeanUtils; + +import java.io.Serializable; +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * CRUD基础服务类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public abstract class CrudServiceImpl, T, D> extends BaseServiceImpl implements CrudService { + + protected Class currentDtoClass() { + return (Class) ReflectionKit.getSuperClassGenericType(getClass(), CrudServiceImpl.class, 2); + } + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, null, false), + getWrapper(params) + ); + + return getPageData(page, currentDtoClass()); + } + + @Override + public List list(Map params) { + List entityList = baseDao.selectList(getWrapper(params)); + + return ConvertUtils.sourceToTarget(entityList, currentDtoClass()); + } + + public abstract QueryWrapper getWrapper(Map params); + + @Override + public D get(Serializable id) { + T entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, currentDtoClass()); + } + + @Override + public void save(D dto) { + T entity = ConvertUtils.sourceToTarget(dto, currentModelClass()); + insert(entity); + + //copy主键值到dto + BeanUtils.copyProperties(entity, dto); + } + + @Override + public void update(D dto) { + T entity = ConvertUtils.sourceToTarget(dto, currentModelClass()); + updateById(entity); + } + + @Override + public void delete(Serializable[] ids) { + baseDao.deleteBatchIds(Arrays.asList(ids)); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/user/UserDetail.java b/main/manager-api/src/main/java/xiaozhi/common/user/UserDetail.java new file mode 100644 index 00000000..163982de --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/user/UserDetail.java @@ -0,0 +1,32 @@ +package xiaozhi.common.user; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 登录用户信息 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Data +public class UserDetail implements Serializable { + private Long id; + private String username; + private String realName; + private String headUrl; + private Integer gender; + private String email; + private String mobile; + private Long deptId; + private String password; + private Integer status; + private Integer superAdmin; + private String token; + /** + * 部门数据权限 + */ + private List deptIdList; + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/ConvertUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/ConvertUtils.java new file mode 100644 index 00000000..7a5bc0ed --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/ConvertUtils.java @@ -0,0 +1,50 @@ +package xiaozhi.common.utils; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +/** + * 转换工具类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Slf4j +public class ConvertUtils { + public static T sourceToTarget(Object source, Class target) { + if (source == null) { + return null; + } + T targetObject = null; + try { + targetObject = target.newInstance(); + BeanUtils.copyProperties(source, targetObject); + } catch (Exception e) { + log.error("convert error ", e); + } + + return targetObject; + } + + public static List sourceToTarget(Collection sourceList, Class target) { + if (sourceList == null) { + return null; + } + + List targetList = new ArrayList<>(sourceList.size()); + try { + for (Object source : sourceList) { + T targetObject = target.newInstance(); + BeanUtils.copyProperties(source, targetObject); + targetList.add(targetObject); + } + } catch (Exception e) { + log.error("convert error ", e); + } + + return targetList; + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/DateUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/DateUtils.java new file mode 100644 index 00000000..9e5ef3e1 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/DateUtils.java @@ -0,0 +1,63 @@ +package xiaozhi.common.utils; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; + +/** + * 日期处理 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class DateUtils { + /** + * 时间格式(yyyy-MM-dd) + */ + public final static String DATE_PATTERN = "yyyy-MM-dd"; + /** + * 时间格式(yyyy-MM-dd HH:mm:ss) + */ + public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss"; + + /** + * 日期格式化 日期格式为:yyyy-MM-dd + * + * @param date 日期 + * @return 返回yyyy-MM-dd格式日期 + */ + public static String format(Date date) { + return format(date, DATE_PATTERN); + } + + /** + * 日期格式化 日期格式为:yyyy-MM-dd + * + * @param date 日期 + * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN + * @return 返回yyyy-MM-dd格式日期 + */ + public static String format(Date date, String pattern) { + if (date != null) { + SimpleDateFormat df = new SimpleDateFormat(pattern); + return df.format(date); + } + return null; + } + + /** + * 日期解析 + * + * @param date 日期 + * @param pattern 格式,如:DateUtils.DATE_TIME_PATTERN + * @return 返回Date + */ + public static Date parse(String date, String pattern) { + try { + return new SimpleDateFormat(pattern).parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + return null; + } + +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/HttpContextUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/HttpContextUtils.java new file mode 100644 index 00000000..3629d553 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/HttpContextUtils.java @@ -0,0 +1,107 @@ +package xiaozhi.common.utils; + +import xiaozhi.common.constant.Constant; +import jakarta.servlet.http.HttpServletRequest; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.util.DigestUtils; +import org.springframework.web.context.request.RequestAttributes; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + +import java.util.Date; +import java.util.Enumeration; +import java.util.HashMap; +import java.util.Map; + +/** + * Http + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class HttpContextUtils { + + public static HttpServletRequest getHttpServletRequest() { + RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes(); + if (requestAttributes == null) { + return null; + } + + return ((ServletRequestAttributes) requestAttributes).getRequest(); + } + + public static String getToken() { + HttpServletRequest httpRequest = getHttpServletRequest(); + String token = httpRequest.getHeader(Constant.TOKEN_HEADER); + + //如果header中不存在token,则从参数中获取token + if (StringUtils.isBlank(token)) { + token = httpRequest.getParameter(Constant.TOKEN_HEADER); + } + return token; + } + + public static Map getParameterMap(HttpServletRequest request) { + Enumeration parameters = request.getParameterNames(); + + Map params = new HashMap<>(); + while (parameters.hasMoreElements()) { + String parameter = parameters.nextElement(); + String value = request.getParameter(parameter); + if (StringUtils.isNotBlank(value)) { + params.put(parameter, value); + } + } + + return params; + } + + public static String getDomain() { + HttpServletRequest request = getHttpServletRequest(); + StringBuffer url = request.getRequestURL(); + return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); + } + + public static String getOrigin() { + HttpServletRequest request = getHttpServletRequest(); + return request.getHeader(HttpHeaders.ORIGIN); + } + + public static String getLanguage() { + //默认语言 + String defaultLanguage = "zh-CN"; + //request + HttpServletRequest request = getHttpServletRequest(); + if (request == null) { + return defaultLanguage; + } + + //请求语言 + defaultLanguage = request.getHeader(HttpHeaders.ACCEPT_LANGUAGE); + + return defaultLanguage; + } + + /** + * 获取客户端的唯一标识 + * + * @return + */ + public static String getClientCode() { + HttpServletRequest request = getHttpServletRequest(); + if (request == null) { + return null; + } + String reqId = request.getHeader("User-Agent").toLowerCase(); + String ipAddr = IpUtils.getIpAddr(request); + String date = DateUtils.format(new Date()); + reqId = DigestUtils.md5DigestAsHex((ipAddr + date + reqId).getBytes()); + return reqId; + } + + public static String getRequestURI() { + HttpServletRequest request = getHttpServletRequest(); + String url = request.getRequestURI(); + return url; + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/IpUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/IpUtils.java new file mode 100644 index 00000000..307ad3b5 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/IpUtils.java @@ -0,0 +1,47 @@ +package xiaozhi.common.utils; + +import jakarta.servlet.http.HttpServletRequest; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; + +/** + * IP地址 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Slf4j +public class IpUtils { + /** + * 获取IP地址 + *

+ * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 + * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 + */ + public static String getIpAddr(HttpServletRequest request) { + String unknown = "unknown"; + String ip = null; + try { + ip = request.getHeader("x-forwarded-for"); + if (StringUtils.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || ip.length() == 0 || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (StringUtils.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (StringUtils.isEmpty(ip) || unknown.equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + } catch (Exception e) { + log.error("IPUtils ERROR ", e); + } + + return ip; + } + +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/JsonUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/JsonUtils.java new file mode 100644 index 00000000..4a908245 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/JsonUtils.java @@ -0,0 +1,68 @@ +package xiaozhi.common.utils; + +import cn.hutool.core.util.ArrayUtil; +import cn.hutool.core.util.StrUtil; +import com.fasterxml.jackson.core.type.TypeReference; +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.util.ArrayList; +import java.util.List; + +/** + * JSON 工具类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class JsonUtils { + private static final ObjectMapper objectMapper = new ObjectMapper(); + + public static String toJsonString(Object object) { + try { + return objectMapper.writeValueAsString(object); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return null; + } + try { + return objectMapper.readValue(text, clazz); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static T parseObject(byte[] bytes, Class clazz) { + if (ArrayUtil.isEmpty(bytes)) { + return null; + } + try { + return objectMapper.readValue(bytes, clazz); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static T parseObject(String text, TypeReference typeReference) { + try { + return objectMapper.readValue(text, typeReference); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public static List parseArray(String text, Class clazz) { + if (StrUtil.isEmpty(text)) { + return new ArrayList<>(); + } + try { + return objectMapper.readValue(text, objectMapper.getTypeFactory().constructCollectionType(List.class, clazz)); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/MessageUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/MessageUtils.java new file mode 100644 index 00000000..c346bf3d --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/MessageUtils.java @@ -0,0 +1,25 @@ +package xiaozhi.common.utils; + +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; + +/** + * 国际化 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class MessageUtils { + private static MessageSource messageSource; + + static { + messageSource = (MessageSource) SpringContextUtils.getBean("messageSource"); + } + + public static String getMessage(int code) { + return getMessage(code, new String[0]); + } + + public static String getMessage(int code, String... params) { + return messageSource.getMessage(code + "", params, LocaleContextHolder.getLocale()); + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/PropertiesUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/PropertiesUtils.java new file mode 100644 index 00000000..1064299b --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/PropertiesUtils.java @@ -0,0 +1,11 @@ +package xiaozhi.common.utils; + +import org.springframework.stereotype.Component; + +/** + * 获取配置文件信息 + * Copyright xin-nan.com + */ +@Component +public class PropertiesUtils { +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/Result.java b/main/manager-api/src/main/java/xiaozhi/common/utils/Result.java new file mode 100644 index 00000000..c21bdbf9 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/Result.java @@ -0,0 +1,73 @@ +package xiaozhi.common.utils; + +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.page.PageData; +import xiaozhi.modules.security.user.SecurityUser; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import org.apache.commons.lang3.StringUtils; + +import java.io.Serializable; +import java.util.List; +import java.util.Map; +import java.util.Set; + +/** + * 响应数据 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Data +@Schema(description = "响应") +public class Result implements Serializable { + + /** + * 编码:0表示成功,其他值表示失败 + */ + @Schema(description = "编码:0表示成功,其他值表示失败") + private int code = 0; + /** + * 消息内容 + */ + @Schema(description = "消息内容") + private String msg = "success"; + /** + * 响应数据 + */ + @Schema(description = "响应数据") + private T data; + + public Result ok(T data) { + this.setData(data); + return this; + } + + public boolean success() { + return code == 0; + } + + public Result error() { + this.code = ErrorCode.INTERNAL_SERVER_ERROR; + this.msg = MessageUtils.getMessage(this.code); + return this; + } + + public Result error(int code) { + this.code = code; + this.msg = MessageUtils.getMessage(this.code); + return this; + } + + public Result error(int code, String msg) { + this.code = code; + this.msg = msg; + return this; + } + + public Result error(String msg) { + this.code = ErrorCode.INTERNAL_SERVER_ERROR; + this.msg = msg; + return this; + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/SpringContextUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/SpringContextUtils.java new file mode 100644 index 00000000..52aec0b7 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/SpringContextUtils.java @@ -0,0 +1,45 @@ +package xiaozhi.common.utils; + +import org.springframework.beans.BeansException; +import org.springframework.context.ApplicationContext; +import org.springframework.context.ApplicationContextAware; +import org.springframework.stereotype.Component; + +/** + * Spring Context 工具类 + */ +@Component +public class SpringContextUtils implements ApplicationContextAware { + public static ApplicationContext applicationContext; + + @Override + public void setApplicationContext(ApplicationContext applicationContext) + throws BeansException { + SpringContextUtils.applicationContext = applicationContext; + } + + public static Object getBean(String name) { + return applicationContext.getBean(name); + } + + public static T getBean(Class requiredType) { + return applicationContext.getBean(requiredType); + } + + public static T getBean(String name, Class requiredType) { + return applicationContext.getBean(name, requiredType); + } + + public static boolean containsBean(String name) { + return applicationContext.containsBean(name); + } + + public static boolean isSingleton(String name) { + return applicationContext.isSingleton(name); + } + + public static Class getType(String name) { + return applicationContext.getType(name); + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/TreeNode.java b/main/manager-api/src/main/java/xiaozhi/common/utils/TreeNode.java new file mode 100644 index 00000000..b60bc9cf --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/TreeNode.java @@ -0,0 +1,30 @@ +package xiaozhi.common.utils; + +import lombok.Data; + +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + +/** + * 树节点,所有需要实现树节点的,都需要继承该类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Data +public class TreeNode implements Serializable { + + /** + * 主键 + */ + private Long id; + /** + * 上级ID + */ + private Long pid; + /** + * 子节点列表 + */ + private List children = new ArrayList<>(); + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/utils/TreeUtils.java b/main/manager-api/src/main/java/xiaozhi/common/utils/TreeUtils.java new file mode 100644 index 00000000..766cb029 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/utils/TreeUtils.java @@ -0,0 +1,71 @@ +package xiaozhi.common.utils; + +import xiaozhi.common.validator.AssertUtils; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * 树形结构工具类,如:菜单、部门等 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class TreeUtils { + + /** + * 根据pid,构建树节点 + */ + public static List build(List treeNodes, Long pid) { + //pid不能为空 + AssertUtils.isNull(pid, "pid"); + + List treeList = new ArrayList<>(); + for (T treeNode : treeNodes) { + if (pid.equals(treeNode.getPid())) { + treeList.add(findChildren(treeNodes, treeNode)); + } + } + + return treeList; + } + + /** + * 查找子节点 + */ + private static T findChildren(List treeNodes, T rootNode) { + for (T treeNode : treeNodes) { + if (rootNode.getId().equals(treeNode.getPid())) { + rootNode.getChildren().add(findChildren(treeNodes, treeNode)); + } + } + return rootNode; + } + + /** + * 构建树节点 + */ + public static List build(List treeNodes) { + List result = new ArrayList<>(); + + //list转map + Map nodeMap = new LinkedHashMap<>(treeNodes.size()); + for (T treeNode : treeNodes) { + nodeMap.put(treeNode.getId(), treeNode); + } + + for (T node : nodeMap.values()) { + T parent = nodeMap.get(node.getPid()); + if (parent != null && !(node.getId().equals(parent.getId()))) { + parent.getChildren().add(node); + continue; + } + + result.add(node); + } + + return result; + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/validator/AssertUtils.java b/main/manager-api/src/main/java/xiaozhi/common/validator/AssertUtils.java new file mode 100644 index 00000000..6a6b43e1 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/validator/AssertUtils.java @@ -0,0 +1,89 @@ +package xiaozhi.common.validator; + +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ArrayUtil; +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.exception.RenException; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; +import java.util.Map; + +/** + * 校验工具类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class AssertUtils { + + public static void isBlank(String str, String... params) { + isBlank(str, ErrorCode.NOT_NULL, params); + } + + public static void isBlank(String str, Integer code, String... params) { + if (code == null) { + throw new RenException(ErrorCode.NOT_NULL, "code"); + } + + if (StringUtils.isBlank(str)) { + throw new RenException(code, params); + } + } + + public static void isNull(Object object, String... params) { + isNull(object, ErrorCode.NOT_NULL, params); + } + + public static void isNull(Object object, Integer code, String... params) { + if (code == null) { + throw new RenException(ErrorCode.NOT_NULL, "code"); + } + + if (object == null) { + throw new RenException(code, params); + } + } + + public static void isArrayEmpty(Object[] array, String... params) { + isArrayEmpty(array, ErrorCode.NOT_NULL, params); + } + + public static void isArrayEmpty(Object[] array, Integer code, String... params) { + if (code == null) { + throw new RenException(ErrorCode.NOT_NULL, "code"); + } + + if (ArrayUtil.isEmpty(array)) { + throw new RenException(code, params); + } + } + + public static void isListEmpty(List list, String... params) { + isListEmpty(list, ErrorCode.NOT_NULL, params); + } + + public static void isListEmpty(List list, Integer code, String... params) { + if (code == null) { + throw new RenException(ErrorCode.NOT_NULL, "code"); + } + + if (CollUtil.isEmpty(list)) { + throw new RenException(code, params); + } + } + + public static void isMapEmpty(Map map, String... params) { + isMapEmpty(map, ErrorCode.NOT_NULL, params); + } + + public static void isMapEmpty(Map map, Integer code, String... params) { + if (code == null) { + throw new RenException(ErrorCode.NOT_NULL, "code"); + } + + if (MapUtil.isEmpty(map)) { + throw new RenException(code, params); + } + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/validator/ValidatorUtils.java b/main/manager-api/src/main/java/xiaozhi/common/validator/ValidatorUtils.java new file mode 100644 index 00000000..80acb097 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/validator/ValidatorUtils.java @@ -0,0 +1,47 @@ +package xiaozhi.common.validator; + +import xiaozhi.common.exception.RenException; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.Validation; +import jakarta.validation.Validator; +import org.hibernate.validator.messageinterpolation.ResourceBundleMessageInterpolator; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator; + +import java.util.Locale; +import java.util.Set; + +/** + * hibernate-validator校验工具类 + * 参考文档:http://docs.jboss.org/hibernate/validator/6.0/reference/en-US/html_single/ + */ +public class ValidatorUtils { + + private static ResourceBundleMessageSource getMessageSource() { + ResourceBundleMessageSource bundleMessageSource = new ResourceBundleMessageSource(); + bundleMessageSource.setDefaultEncoding("UTF-8"); + bundleMessageSource.setBasenames("i18n/validation"); + return bundleMessageSource; + } + + /** + * 校验对象 + * + * @param object 待校验对象 + * @param groups 待校验的组 + */ + public static void validateEntity(Object object, Class... groups) + throws RenException { + Locale.setDefault(LocaleContextHolder.getLocale()); + Validator validator = Validation.byDefaultProvider().configure().messageInterpolator( + new ResourceBundleMessageInterpolator(new MessageSourceResourceBundleLocator(getMessageSource()))) + .buildValidatorFactory().getValidator(); + + Set> constraintViolations = validator.validate(object, groups); + if (!constraintViolations.isEmpty()) { + ConstraintViolation constraint = constraintViolations.iterator().next(); + throw new RenException(constraint.getMessage()); + } + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/validator/group/AddGroup.java b/main/manager-api/src/main/java/xiaozhi/common/validator/group/AddGroup.java new file mode 100644 index 00000000..fd8290fd --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/validator/group/AddGroup.java @@ -0,0 +1,8 @@ +package xiaozhi.common.validator.group; + +/** + * 新增 Group + */ +public interface AddGroup { + +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/validator/group/DefaultGroup.java b/main/manager-api/src/main/java/xiaozhi/common/validator/group/DefaultGroup.java new file mode 100644 index 00000000..60ddb730 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/validator/group/DefaultGroup.java @@ -0,0 +1,8 @@ +package xiaozhi.common.validator.group; + +/** + * 默认 Group + */ +public interface DefaultGroup { + +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/validator/group/UpdateGroup.java b/main/manager-api/src/main/java/xiaozhi/common/validator/group/UpdateGroup.java new file mode 100644 index 00000000..220fda33 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/validator/group/UpdateGroup.java @@ -0,0 +1,8 @@ +package xiaozhi.common.validator.group; + +/** + * 修改 Group + */ +public interface UpdateGroup { + +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/SqlFilter.java b/main/manager-api/src/main/java/xiaozhi/common/xss/SqlFilter.java new file mode 100644 index 00000000..20291da1 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/SqlFilter.java @@ -0,0 +1,44 @@ +package xiaozhi.common.xss; + +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.exception.RenException; +import org.apache.commons.lang3.StringUtils; + +/** + * SQL过滤 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class SqlFilter { + + /** + * SQL注入过滤 + * + * @param str 待验证的字符串 + */ + public static String sqlInject(String str) { + if (StringUtils.isBlank(str)) { + return null; + } + //去掉'|"|;|\字符 + str = StringUtils.replace(str, "'", ""); + str = StringUtils.replace(str, "\"", ""); + str = StringUtils.replace(str, ";", ""); + str = StringUtils.replace(str, "\\", ""); + + //转换成小写 + str = str.toLowerCase(); + + //非法字符 + String[] keywords = {"master", "truncate", "insert", "select", "delete", "update", "declare", "alter", "drop"}; + + //判断是否包含非法字符 + for (String keyword : keywords) { + if (str.contains(keyword)) { + throw new RenException(ErrorCode.INVALID_SYMBOL); + } + } + + return str; + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/XssConfig.java b/main/manager-api/src/main/java/xiaozhi/common/xss/XssConfig.java new file mode 100644 index 00000000..f62786fd --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/XssConfig.java @@ -0,0 +1,32 @@ +package xiaozhi.common.xss; + +import jakarta.servlet.DispatcherType; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.properties.EnableConfigurationProperties; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.PathMatcher; + +/** + * XSS 配置文件 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Configuration +@EnableConfigurationProperties(XssProperties.class) +@ConditionalOnProperty(prefix = "renren.xss", value = "enabled") +public class XssConfig { + + @Bean + public FilterRegistrationBean xssFilter(XssProperties properties, PathMatcher pathMatcher) { + FilterRegistrationBean bean = new FilterRegistrationBean<>(); + bean.setDispatcherTypes(DispatcherType.REQUEST); + bean.setFilter(new XssFilter(properties, pathMatcher)); + bean.addUrlPatterns("/*"); + bean.setOrder(Integer.MAX_VALUE); + bean.setName("xssFilter"); + + return bean; + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/XssFilter.java b/main/manager-api/src/main/java/xiaozhi/common/xss/XssFilter.java new file mode 100644 index 00000000..9a24d7eb --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/XssFilter.java @@ -0,0 +1,48 @@ +package xiaozhi.common.xss; + +import jakarta.servlet.*; +import jakarta.servlet.http.HttpServletRequest; +import lombok.AllArgsConstructor; +import org.springframework.util.PathMatcher; + +import java.io.IOException; + +/** + * XSS过滤 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@AllArgsConstructor +public class XssFilter implements Filter { + private final XssProperties properties; + private final PathMatcher pathMatcher; + + @Override + public void init(FilterConfig config) throws ServletException { + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + HttpServletRequest httpServletRequest = (HttpServletRequest) request; + + // 放行 + if (shouldNotFilter(httpServletRequest)) { + chain.doFilter(request, response); + + return; + } + + chain.doFilter(new XssHttpServletRequestWrapper(httpServletRequest), response); + } + + private boolean shouldNotFilter(HttpServletRequest request) { + // 放行不过滤的URL + return properties.getExcludeUrls().stream().anyMatch(excludeUrl -> pathMatcher.match(excludeUrl, request.getServletPath())); + } + + @Override + public void destroy() { + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/XssHttpServletRequestWrapper.java b/main/manager-api/src/main/java/xiaozhi/common/xss/XssHttpServletRequestWrapper.java new file mode 100644 index 00000000..1306c2dd --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/XssHttpServletRequestWrapper.java @@ -0,0 +1,118 @@ +package xiaozhi.common.xss; + +import cn.hutool.core.io.IoUtil; +import jakarta.servlet.ReadListener; +import jakarta.servlet.ServletInputStream; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletRequestWrapper; +import org.apache.commons.lang3.StringUtils; +import org.springframework.http.HttpHeaders; +import org.springframework.http.MediaType; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.LinkedHashMap; +import java.util.Map; + + +/** + * XSS过滤处理 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper { + + public XssHttpServletRequestWrapper(HttpServletRequest request) { + super(request); + } + + @Override + public ServletInputStream getInputStream() throws IOException { + //非json类型,直接返回 + if (!MediaType.APPLICATION_JSON_VALUE.equalsIgnoreCase(super.getHeader(HttpHeaders.CONTENT_TYPE))) { + return super.getInputStream(); + } + + //为空,直接返回 + String json = IoUtil.readUtf8(super.getInputStream()); + if (StringUtils.isBlank(json)) { + return super.getInputStream(); + } + + //xss过滤 + json = xssEncode(json); + final ByteArrayInputStream bis = new ByteArrayInputStream(json.getBytes(StandardCharsets.UTF_8)); + return new ServletInputStream() { + @Override + public boolean isFinished() { + return true; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + + } + + @Override + public int read() { + return bis.read(); + } + }; + } + + @Override + public String getParameter(String name) { + String value = super.getParameter(xssEncode(name)); + if (StringUtils.isNotBlank(value)) { + value = xssEncode(value); + } + return value; + } + + @Override + public String[] getParameterValues(String name) { + String[] parameters = super.getParameterValues(name); + if (parameters == null || parameters.length == 0) { + return null; + } + + for (int i = 0; i < parameters.length; i++) { + parameters[i] = xssEncode(parameters[i]); + } + return parameters; + } + + @Override + public Map getParameterMap() { + Map map = new LinkedHashMap<>(); + Map parameters = super.getParameterMap(); + for (String key : parameters.keySet()) { + String[] values = parameters.get(key); + for (int i = 0; i < values.length; i++) { + values[i] = xssEncode(values[i]); + } + map.put(key, values); + } + return map; + } + + @Override + public String getHeader(String name) { + String value = super.getHeader(xssEncode(name)); + if (StringUtils.isNotBlank(value)) { + value = xssEncode(value); + } + return value; + } + + private String xssEncode(String input) { + return XssUtils.filter(input); + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/XssProperties.java b/main/manager-api/src/main/java/xiaozhi/common/xss/XssProperties.java new file mode 100644 index 00000000..bf36ddbe --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/XssProperties.java @@ -0,0 +1,25 @@ +package xiaozhi.common.xss; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; + +import java.util.Collections; +import java.util.List; + +/** + * XSS 配置项 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Data +@ConfigurationProperties(prefix = "renren.xss") +public class XssProperties { + /** + * 是否开启 XSS + */ + private boolean enabled; + /** + * 排除的URL列表 + */ + private List excludeUrls = Collections.emptyList(); +} diff --git a/main/manager-api/src/main/java/xiaozhi/common/xss/XssUtils.java b/main/manager-api/src/main/java/xiaozhi/common/xss/XssUtils.java new file mode 100644 index 00000000..5d4ac6b3 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/common/xss/XssUtils.java @@ -0,0 +1,62 @@ +package xiaozhi.common.xss; + +import org.jsoup.Jsoup; +import org.jsoup.safety.Safelist; + +/** + * XSS过滤工具类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class XssUtils extends Safelist { + + /** + * XSS过滤 + */ + public static String filter(String html) { + return Jsoup.clean(html, xssWhitelist()); + } + + /** + * XSS过滤白名单 + */ + private static Safelist xssWhitelist() { + return new Safelist() + //支持的标签 + .addTags("a", "b", "blockquote", "br", "caption", "cite", "code", "col", "colgroup", "dd", "div", "dl", + "dt", "em", "h1", "h2", "h3", "h4", "h5", "h6", "i", "img", "li", "ol", "p", "pre", "q", "small", + "strike", "strong", "sub", "sup", "table", "tbody", "td", "tfoot", "th", "thead", "tr", "u", "ul", + "embed", "object", "param", "span") + + //支持的标签属性 + .addAttributes("a", "href", "class", "style", "target", "rel", "nofollow") + .addAttributes("blockquote", "cite") + .addAttributes("code", "class", "style") + .addAttributes("col", "span", "width") + .addAttributes("colgroup", "span", "width") + .addAttributes("img", "align", "alt", "height", "src", "title", "width", "class", "style") + .addAttributes("ol", "start", "type") + .addAttributes("q", "cite") + .addAttributes("table", "summary", "width", "class", "style") + .addAttributes("tr", "abbr", "axis", "colspan", "rowspan", "width", "style") + .addAttributes("td", "abbr", "axis", "colspan", "rowspan", "width", "style") + .addAttributes("th", "abbr", "axis", "colspan", "rowspan", "scope", "width", "style") + .addAttributes("ul", "type", "style") + .addAttributes("pre", "class", "style") + .addAttributes("div", "class", "id", "style") + .addAttributes("embed", "src", "wmode", "flashvars", "pluginspage", "allowFullScreen", "allowfullscreen", + "quality", "width", "height", "align", "allowScriptAccess", "allowscriptaccess", "allownetworking", "type") + .addAttributes("object", "type", "id", "name", "data", "width", "height", "style", "classid", "codebase") + .addAttributes("param", "name", "value") + .addAttributes("span", "class", "style") + + //标签属性对应的协议 + .addProtocols("a", "href", "ftp", "http", "https", "mailto") + .addProtocols("img", "src", "http", "https") + .addProtocols("blockquote", "cite", "http", "https") + .addProtocols("cite", "cite", "http", "https") + .addProtocols("q", "cite", "http", "https") + .addProtocols("embed", "src", "http", "https"); + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/config/FilterConfig.java b/main/manager-api/src/main/java/xiaozhi/modules/security/config/FilterConfig.java new file mode 100644 index 00000000..607cb68b --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/config/FilterConfig.java @@ -0,0 +1,28 @@ +package xiaozhi.modules.security.config; + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.DelegatingFilterProxy; + + +/** + * Filter配置 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Configuration +public class FilterConfig { + + @Bean + public FilterRegistrationBean shiroFilterRegistration() { + FilterRegistrationBean registration = new FilterRegistrationBean<>(); + registration.setFilter(new DelegatingFilterProxy("shiroFilter")); + //该值缺省为false,表示生命周期由SpringApplicationContext管理,设置为true则表示由ServletContainer管理 + registration.addInitParameter("targetFilterLifecycle", "true"); + registration.setEnabled(true); + registration.setOrder(Integer.MAX_VALUE - 1); + registration.addUrlPatterns("/*"); + return registration; + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java b/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java new file mode 100644 index 00000000..678c546e --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/config/ShiroConfig.java @@ -0,0 +1,89 @@ +package xiaozhi.modules.security.config; + +import xiaozhi.modules.security.oauth2.Oauth2Filter; +import xiaozhi.modules.security.oauth2.Oauth2Realm; +import jakarta.servlet.Filter; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.session.mgt.SessionManager; +import org.apache.shiro.spring.LifecycleBeanPostProcessor; +import org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor; +import org.apache.shiro.spring.web.ShiroFilterFactoryBean; +import org.apache.shiro.web.config.ShiroFilterConfiguration; +import org.apache.shiro.web.mgt.DefaultWebSecurityManager; +import org.apache.shiro.web.session.mgt.DefaultWebSessionManager; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Shiro的配置文件 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Configuration +public class ShiroConfig { + + @Bean + public DefaultWebSessionManager sessionManager() { + DefaultWebSessionManager sessionManager = new DefaultWebSessionManager(); + sessionManager.setSessionValidationSchedulerEnabled(false); + sessionManager.setSessionIdUrlRewritingEnabled(false); + + return sessionManager; + } + + @Bean("securityManager") + public SecurityManager securityManager(Oauth2Realm oAuth2Realm, SessionManager sessionManager) { + DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager(); + securityManager.setRealm(oAuth2Realm); + securityManager.setSessionManager(sessionManager); + securityManager.setRememberMeManager(null); + return securityManager; + } + + @Bean("shiroFilter") + public ShiroFilterFactoryBean shirFilter(SecurityManager securityManager) { + ShiroFilterConfiguration config = new ShiroFilterConfiguration(); + config.setFilterOncePerRequest(true); + + ShiroFilterFactoryBean shiroFilter = new ShiroFilterFactoryBean(); + shiroFilter.setSecurityManager(securityManager); + shiroFilter.setShiroFilterConfiguration(config); + + //oauth过滤 + Map filters = new HashMap<>(); + filters.put("oauth2", new Oauth2Filter()); + shiroFilter.setFilters(filters); + + Map filterMap = new LinkedHashMap<>(); + filterMap.put("/webjars/**", "anon"); + filterMap.put("/druid/**", "anon"); + filterMap.put("/login", "anon"); + filterMap.put("/publicKey", "anon"); + filterMap.put("/v3/api-docs/**", "anon"); + filterMap.put("/doc.html", "anon"); + filterMap.put("/sys/oss/download/**", "anon"); + filterMap.put("/captcha", "anon"); + filterMap.put("/favicon.ico", "anon"); + filterMap.put("/mobile/**", "anon"); + filterMap.put("/**", "oauth2"); + shiroFilter.setFilterChainDefinitionMap(filterMap); + + return shiroFilter; + } + + @Bean("lifecycleBeanPostProcessor") + public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() { + return new LifecycleBeanPostProcessor(); + } + + @Bean + public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) { + AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); + advisor.setSecurityManager(securityManager); + return advisor; + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/config/WebMvcConfig.java b/main/manager-api/src/main/java/xiaozhi/modules/security/config/WebMvcConfig.java new file mode 100644 index 00000000..a086e953 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/config/WebMvcConfig.java @@ -0,0 +1,65 @@ +package xiaozhi.modules.security.config; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.module.SimpleModule; +import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.converter.ByteArrayHttpMessageConverter; +import org.springframework.http.converter.HttpMessageConverter; +import org.springframework.http.converter.ResourceHttpMessageConverter; +import org.springframework.http.converter.StringHttpMessageConverter; +import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; +import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +import java.util.List; +import java.util.TimeZone; + +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOriginPatterns("*") + .allowCredentials(true) + .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") + .maxAge(3600); + } + + @Override + public void configureMessageConverters(List> converters) { + converters.add(new ByteArrayHttpMessageConverter()); + converters.add(new StringHttpMessageConverter()); + converters.add(new ResourceHttpMessageConverter()); + converters.add(new AllEncompassingFormHttpMessageConverter()); + converters.add(new StringHttpMessageConverter()); + converters.add(jackson2HttpMessageConverter()); + } + + @Bean + public MappingJackson2HttpMessageConverter jackson2HttpMessageConverter() { + MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); + ObjectMapper mapper = new ObjectMapper(); + + //忽略未知属性 + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + //日期格式转换 + //mapper.setDateFormat(new SimpleDateFormat(DateUtils.DATE_TIME_PATTERN)); + mapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); + + //Long类型转String类型 + SimpleModule simpleModule = new SimpleModule(); + simpleModule.addSerializer(Long.class, ToStringSerializer.instance); + simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance); + mapper.registerModule(simpleModule); + + converter.setObjectMapper(mapper); + return converter; + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java new file mode 100644 index 00000000..82051dab --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/controller/LoginController.java @@ -0,0 +1,55 @@ +package xiaozhi.modules.security.controller; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.AllArgsConstructor; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.redis.RedisUtils; +import xiaozhi.common.utils.PropertiesUtils; +import xiaozhi.common.utils.Result; +import xiaozhi.common.validator.AssertUtils; +import xiaozhi.modules.security.dto.LoginDTO; +import xiaozhi.modules.security.service.CaptchaService; +import xiaozhi.modules.security.service.SysUserTokenService; +import xiaozhi.modules.sys.service.SysParamsService; +import xiaozhi.modules.sys.service.SysUserService; + +import java.io.IOException; + +/** + * 登录 + */ +@AllArgsConstructor +@RestController +@Tag(name = "登录管理") +public class LoginController { + private final SysUserService sysUserService; + private final SysUserTokenService sysUserTokenService; + private final CaptchaService captchaService; + private final RedisUtils redisUtils; + private final SysParamsService sysParamsService; + private final PropertiesUtils propertiesUtils; + + @GetMapping("captcha") + @Operation(summary = "验证码") + public void captcha(HttpServletResponse response, String uuid) throws IOException { + //uuid不能为空 + AssertUtils.isBlank(uuid, ErrorCode.IDENTIFIER_NOT_NULL); + + //生成验证码 + captchaService.create(response, uuid); + } + + @PostMapping("login") + @Operation(summary = "登录") + public Result login(HttpServletRequest request, @RequestBody LoginDTO login) { + return sysUserTokenService.createToken(1L); + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/dao/SysUserTokenDao.java b/main/manager-api/src/main/java/xiaozhi/modules/security/dao/SysUserTokenDao.java new file mode 100644 index 00000000..044568e5 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/dao/SysUserTokenDao.java @@ -0,0 +1,23 @@ +package xiaozhi.modules.security.dao; + +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import xiaozhi.common.dao.BaseDao; +import xiaozhi.modules.security.entity.SysUserTokenEntity; + +import java.util.Date; + +/** + * 系统用户Token + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Mapper +public interface SysUserTokenDao extends BaseDao { + + SysUserTokenEntity getByToken(String token); + + SysUserTokenEntity getByUserId(Long userId); + + void logout(@Param("userId") Long userId, @Param("expireDate") Date expireDate); +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java new file mode 100644 index 00000000..67f50f19 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/dto/LoginDTO.java @@ -0,0 +1,32 @@ +package xiaozhi.modules.security.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.io.Serializable; + +/** + * 登录表单 + */ +@Data +@Schema(description = "登录表单") +public class LoginDTO implements Serializable { + + @Schema(description = "用户名", required = true) + @NotBlank(message = "{sysuser.username.require}") + private String username; + + @Schema(description = "密码") + @NotBlank(message = "{sysuser.password.require}") + private String password; + + @Schema(description = "验证码") + @NotBlank(message = "{sysuser.captcha.require}") + private String captcha; + + @Schema(description = "唯一标识") + @NotBlank(message = "{sysuser.uuid.require}") + private String uuid; + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/entity/SysUserTokenEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/security/entity/SysUserTokenEntity.java new file mode 100644 index 00000000..fb96f88c --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/entity/SysUserTokenEntity.java @@ -0,0 +1,46 @@ +package xiaozhi.modules.security.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 系统用户Token + */ +@Data +@TableName("sys_user_token") +public class SysUserTokenEntity implements Serializable { + + /** + * id + */ + @TableId + private Long id; + /** + * 用户ID + */ + private Long userId; + /** + * 用户token + */ + private String token; + /** + * 过期时间 + */ + private Date expireDate; + /** + * 更新时间 + */ + private Date updateDate; + /** + * 创建时间 + */ + @TableField(fill = FieldFill.INSERT) + private Date createDate; + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Filter.java b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Filter.java new file mode 100644 index 00000000..3d8cf0cb --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Filter.java @@ -0,0 +1,101 @@ +package xiaozhi.modules.security.oauth2; + +import jakarta.servlet.ServletRequest; +import jakarta.servlet.ServletResponse; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.web.filter.authc.AuthenticatingFilter; +import org.springframework.web.bind.annotation.RequestMethod; +import xiaozhi.common.constant.Constant; +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.utils.HttpContextUtils; +import xiaozhi.common.utils.JsonUtils; +import xiaozhi.common.utils.Result; + +import java.io.IOException; + +/** + * oauth2过滤器 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class Oauth2Filter extends AuthenticatingFilter { + + @Override + protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception { + //获取请求token + String token = getRequestToken((HttpServletRequest) request); + + if (StringUtils.isBlank(token)) { + return null; + } + + return new Oauth2Token(token); + } + + @Override + protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { + if (((HttpServletRequest) request).getMethod().equals(RequestMethod.OPTIONS.name())) { + return true; + } + + return false; + } + + @Override + protected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception { + //获取请求token,如果token不存在,直接返回401 + String token = getRequestToken((HttpServletRequest) request); + if (StringUtils.isBlank(token)) { + HttpServletResponse httpResponse = (HttpServletResponse) response; + httpResponse.setContentType("application/json;charset=utf-8"); + httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); + httpResponse.setHeader("Access-Control-Allow-Origin", HttpContextUtils.getOrigin()); + + String json = JsonUtils.toJsonString(new Result().error(ErrorCode.UNAUTHORIZED)); + + httpResponse.getWriter().print(json); + + return false; + } + + return executeLogin(request, response); + } + + @Override + protected boolean onLoginFailure(AuthenticationToken token, AuthenticationException e, ServletRequest request, ServletResponse response) { + HttpServletResponse httpResponse = (HttpServletResponse) response; + httpResponse.setContentType("application/json;charset=utf-8"); + httpResponse.setHeader("Access-Control-Allow-Credentials", "true"); + httpResponse.setHeader("Access-Control-Allow-Origin", HttpContextUtils.getOrigin()); + try { + //处理登录失败的异常 + Throwable throwable = e.getCause() == null ? e : e.getCause(); + Result r = new Result().error(ErrorCode.UNAUTHORIZED, throwable.getMessage()); + + String json = JsonUtils.toJsonString(r); + httpResponse.getWriter().print(json); + } catch (IOException e1) { + + } + + return false; + } + + /** + * 获取请求的token + */ + private String getRequestToken(HttpServletRequest httpRequest) { + //从header中获取token + String token = httpRequest.getHeader(Constant.TOKEN_HEADER); + + //如果header中不存在token,则从参数中获取token + if (StringUtils.isBlank(token)) { + token = httpRequest.getParameter(Constant.TOKEN_HEADER); + } + return token; + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Realm.java b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Realm.java new file mode 100644 index 00000000..933724a1 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Realm.java @@ -0,0 +1,86 @@ +package xiaozhi.modules.security.oauth2; + +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.user.UserDetail; +import xiaozhi.common.utils.ConvertUtils; +import xiaozhi.common.utils.MessageUtils; +import xiaozhi.modules.security.entity.SysUserTokenEntity; +import xiaozhi.modules.security.service.ShiroService; +import xiaozhi.modules.sys.entity.SysUserEntity; +import jakarta.annotation.Resource; +import org.apache.shiro.authc.*; +import org.apache.shiro.authz.AuthorizationInfo; +import org.apache.shiro.authz.SimpleAuthorizationInfo; +import org.apache.shiro.realm.AuthorizingRealm; +import org.apache.shiro.subject.PrincipalCollection; +import org.springframework.context.annotation.Lazy; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Set; + +/** + * 认证 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +@Component +public class Oauth2Realm extends AuthorizingRealm { + @Lazy + @Resource + private ShiroService shiroService; + + @Override + public boolean supports(AuthenticationToken token) { + return token instanceof Oauth2Token; + } + + /** + * 授权(验证权限时调用) + */ + @Override + protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { + UserDetail user = (UserDetail) principals.getPrimaryPrincipal(); + + //用户权限列表 + Set permsSet = shiroService.getUserPermissions(user); + + SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); + info.setStringPermissions(permsSet); + return info; + } + + /** + * 认证(登录时调用) + */ + @Override + protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { + String accessToken = (String) token.getPrincipal(); + + //根据accessToken,查询用户信息 + SysUserTokenEntity tokenEntity = shiroService.getByToken(accessToken); + //token失效 + if (tokenEntity == null || tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()) { + throw new IncorrectCredentialsException(MessageUtils.getMessage(ErrorCode.TOKEN_INVALID)); + } + + //查询用户信息 + SysUserEntity userEntity = shiroService.getUser(tokenEntity.getUserId()); + + //转换成UserDetail对象 + UserDetail userDetail = ConvertUtils.sourceToTarget(userEntity, UserDetail.class); + + //获取用户对应的部门数据权限 + userDetail.setDeptIdList(null); + userDetail.setToken(accessToken); + + //账号锁定 + if (userDetail.getStatus() == 0) { + throw new LockedAccountException(MessageUtils.getMessage(ErrorCode.ACCOUNT_LOCK)); + } + + SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(userDetail, accessToken, getName()); + return info; + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Token.java b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Token.java new file mode 100644 index 00000000..62adc903 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/Oauth2Token.java @@ -0,0 +1,26 @@ +package xiaozhi.modules.security.oauth2; + +import org.apache.shiro.authc.AuthenticationToken; + +/** + * token + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class Oauth2Token implements AuthenticationToken { + private String token; + + public Oauth2Token(String token) { + this.token = token; + } + + @Override + public String getPrincipal() { + return token; + } + + @Override + public Object getCredentials() { + return token; + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/TokenGenerator.java b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/TokenGenerator.java new file mode 100644 index 00000000..0ca1cede --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/oauth2/TokenGenerator.java @@ -0,0 +1,44 @@ +package xiaozhi.modules.security.oauth2; + +import xiaozhi.common.exception.RenException; + +import java.security.MessageDigest; +import java.util.UUID; + +/** + * 生成token + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class TokenGenerator { + + public static String generateValue() { + return generateValue(UUID.randomUUID().toString()); + } + + private static final char[] HEX_CODE = "0123456789abcdef".toCharArray(); + + public static String toHexString(byte[] data) { + if (data == null) { + return null; + } + StringBuilder r = new StringBuilder(data.length * 2); + for (byte b : data) { + r.append(HEX_CODE[(b >> 4) & 0xF]); + r.append(HEX_CODE[(b & 0xF)]); + } + return r.toString(); + } + + public static String generateValue(String param) { + try { + MessageDigest algorithm = MessageDigest.getInstance("MD5"); + algorithm.reset(); + algorithm.update(param.getBytes()); + byte[] messageDigest = algorithm.digest(); + return toHexString(messageDigest); + } catch (Exception e) { + throw new RenException("token invalid", e); + } + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCrypt.java b/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCrypt.java new file mode 100644 index 00000000..6a9efff9 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCrypt.java @@ -0,0 +1,672 @@ +package xiaozhi.modules.security.password; + +import java.io.ByteArrayOutputStream; +import java.io.UnsupportedEncodingException; +import java.security.SecureRandom; + +/** + * BCrypt implements OpenBSD-style Blowfish password hashing using the scheme described in + * "A Future-Adaptable Password Scheme" by Niels Provos and David Mazieres. + *

+ * This password hashing system tries to thwart off-line password cracking using a + * computationally-intensive hashing algorithm, based on Bruce Schneier's Blowfish cipher. + * The work factor of the algorithm is parameterised, so it can be increased as computers + * get faster. + *

+ * Usage is really simple. To hash a password for the first time, call the hashpw method + * with a random salt, like this: + *

+ * + * String pw_hash = BCrypt.hashpw(plain_password, BCrypt.gensalt());
+ *
+ *

+ * To check whether a plaintext password matches one that has been hashed previously, use + * the checkpw method: + *

+ * + * if (BCrypt.checkpw(candidate_password, stored_hash))
+ *     System.out.println("It matches");
+ * else
+ *     System.out.println("It does not match");
+ *
+ *

+ * The gensalt() method takes an optional parameter (log_rounds) that determines the + * computational complexity of the hashing: + *

+ * + * String strong_salt = BCrypt.gensalt(10)
+ * String stronger_salt = BCrypt.gensalt(12)
+ *
+ *

+ * The amount of work increases exponentially (2**log_rounds), so each increment is twice + * as much work. The default log_rounds is 10, and the valid range is 4 to 31. + * + * @author Damien Miller + */ +public class BCrypt { + // BCrypt parameters + + private static final int GENSALT_DEFAULT_LOG2_ROUNDS = 10; + private static final int BCRYPT_SALT_LEN = 16; + // Blowfish parameters + private static final int BLOWFISH_NUM_ROUNDS = 16; + // Initial contents of key schedule + private static final int P_orig[] = {0x243f6a88, 0x85a308d3, 0x13198a2e, 0x03707344, + 0xa4093822, 0x299f31d0, 0x082efa98, 0xec4e6c89, 0x452821e6, 0x38d01377, + 0xbe5466cf, 0x34e90c6c, 0xc0ac29b7, 0xc97c50dd, 0x3f84d5b5, 0xb5470917, + 0x9216d5d9, 0x8979fb1b}; + private static final int S_orig[] = {0xd1310ba6, 0x98dfb5ac, 0x2ffd72db, 0xd01adfb7, + 0xb8e1afed, 0x6a267e96, 0xba7c9045, 0xf12c7f99, 0x24a19947, 0xb3916cf7, + 0x0801f2e2, 0x858efc16, 0x636920d8, 0x71574e69, 0xa458fea3, 0xf4933d7e, + 0x0d95748f, 0x728eb658, 0x718bcd58, 0x82154aee, 0x7b54a41d, 0xc25a59b5, + 0x9c30d539, 0x2af26013, 0xc5d1b023, 0x286085f0, 0xca417918, 0xb8db38ef, + 0x8e79dcb0, 0x603a180e, 0x6c9e0e8b, 0xb01e8a3e, 0xd71577c1, 0xbd314b27, + 0x78af2fda, 0x55605c60, 0xe65525f3, 0xaa55ab94, 0x57489862, 0x63e81440, + 0x55ca396a, 0x2aab10b6, 0xb4cc5c34, 0x1141e8ce, 0xa15486af, 0x7c72e993, + 0xb3ee1411, 0x636fbc2a, 0x2ba9c55d, 0x741831f6, 0xce5c3e16, 0x9b87931e, + 0xafd6ba33, 0x6c24cf5c, 0x7a325381, 0x28958677, 0x3b8f4898, 0x6b4bb9af, + 0xc4bfe81b, 0x66282193, 0x61d809cc, 0xfb21a991, 0x487cac60, 0x5dec8032, + 0xef845d5d, 0xe98575b1, 0xdc262302, 0xeb651b88, 0x23893e81, 0xd396acc5, + 0x0f6d6ff3, 0x83f44239, 0x2e0b4482, 0xa4842004, 0x69c8f04a, 0x9e1f9b5e, + 0x21c66842, 0xf6e96c9a, 0x670c9c61, 0xabd388f0, 0x6a51a0d2, 0xd8542f68, + 0x960fa728, 0xab5133a3, 0x6eef0b6c, 0x137a3be4, 0xba3bf050, 0x7efb2a98, + 0xa1f1651d, 0x39af0176, 0x66ca593e, 0x82430e88, 0x8cee8619, 0x456f9fb4, + 0x7d84a5c3, 0x3b8b5ebe, 0xe06f75d8, 0x85c12073, 0x401a449f, 0x56c16aa6, + 0x4ed3aa62, 0x363f7706, 0x1bfedf72, 0x429b023d, 0x37d0d724, 0xd00a1248, + 0xdb0fead3, 0x49f1c09b, 0x075372c9, 0x80991b7b, 0x25d479d8, 0xf6e8def7, + 0xe3fe501a, 0xb6794c3b, 0x976ce0bd, 0x04c006ba, 0xc1a94fb6, 0x409f60c4, + 0x5e5c9ec2, 0x196a2463, 0x68fb6faf, 0x3e6c53b5, 0x1339b2eb, 0x3b52ec6f, + 0x6dfc511f, 0x9b30952c, 0xcc814544, 0xaf5ebd09, 0xbee3d004, 0xde334afd, + 0x660f2807, 0x192e4bb3, 0xc0cba857, 0x45c8740f, 0xd20b5f39, 0xb9d3fbdb, + 0x5579c0bd, 0x1a60320a, 0xd6a100c6, 0x402c7279, 0x679f25fe, 0xfb1fa3cc, + 0x8ea5e9f8, 0xdb3222f8, 0x3c7516df, 0xfd616b15, 0x2f501ec8, 0xad0552ab, + 0x323db5fa, 0xfd238760, 0x53317b48, 0x3e00df82, 0x9e5c57bb, 0xca6f8ca0, + 0x1a87562e, 0xdf1769db, 0xd542a8f6, 0x287effc3, 0xac6732c6, 0x8c4f5573, + 0x695b27b0, 0xbbca58c8, 0xe1ffa35d, 0xb8f011a0, 0x10fa3d98, 0xfd2183b8, + 0x4afcb56c, 0x2dd1d35b, 0x9a53e479, 0xb6f84565, 0xd28e49bc, 0x4bfb9790, + 0xe1ddf2da, 0xa4cb7e33, 0x62fb1341, 0xcee4c6e8, 0xef20cada, 0x36774c01, + 0xd07e9efe, 0x2bf11fb4, 0x95dbda4d, 0xae909198, 0xeaad8e71, 0x6b93d5a0, + 0xd08ed1d0, 0xafc725e0, 0x8e3c5b2f, 0x8e7594b7, 0x8ff6e2fb, 0xf2122b64, + 0x8888b812, 0x900df01c, 0x4fad5ea0, 0x688fc31c, 0xd1cff191, 0xb3a8c1ad, + 0x2f2f2218, 0xbe0e1777, 0xea752dfe, 0x8b021fa1, 0xe5a0cc0f, 0xb56f74e8, + 0x18acf3d6, 0xce89e299, 0xb4a84fe0, 0xfd13e0b7, 0x7cc43b81, 0xd2ada8d9, + 0x165fa266, 0x80957705, 0x93cc7314, 0x211a1477, 0xe6ad2065, 0x77b5fa86, + 0xc75442f5, 0xfb9d35cf, 0xebcdaf0c, 0x7b3e89a0, 0xd6411bd3, 0xae1e7e49, + 0x00250e2d, 0x2071b35e, 0x226800bb, 0x57b8e0af, 0x2464369b, 0xf009b91e, + 0x5563911d, 0x59dfa6aa, 0x78c14389, 0xd95a537f, 0x207d5ba2, 0x02e5b9c5, + 0x83260376, 0x6295cfa9, 0x11c81968, 0x4e734a41, 0xb3472dca, 0x7b14a94a, + 0x1b510052, 0x9a532915, 0xd60f573f, 0xbc9bc6e4, 0x2b60a476, 0x81e67400, + 0x08ba6fb5, 0x571be91f, 0xf296ec6b, 0x2a0dd915, 0xb6636521, 0xe7b9f9b6, + 0xff34052e, 0xc5855664, 0x53b02d5d, 0xa99f8fa1, 0x08ba4799, 0x6e85076a, + 0x4b7a70e9, 0xb5b32944, 0xdb75092e, 0xc4192623, 0xad6ea6b0, 0x49a7df7d, + 0x9cee60b8, 0x8fedb266, 0xecaa8c71, 0x699a17ff, 0x5664526c, 0xc2b19ee1, + 0x193602a5, 0x75094c29, 0xa0591340, 0xe4183a3e, 0x3f54989a, 0x5b429d65, + 0x6b8fe4d6, 0x99f73fd6, 0xa1d29c07, 0xefe830f5, 0x4d2d38e6, 0xf0255dc1, + 0x4cdd2086, 0x8470eb26, 0x6382e9c6, 0x021ecc5e, 0x09686b3f, 0x3ebaefc9, + 0x3c971814, 0x6b6a70a1, 0x687f3584, 0x52a0e286, 0xb79c5305, 0xaa500737, + 0x3e07841c, 0x7fdeae5c, 0x8e7d44ec, 0x5716f2b8, 0xb03ada37, 0xf0500c0d, + 0xf01c1f04, 0x0200b3ff, 0xae0cf51a, 0x3cb574b2, 0x25837a58, 0xdc0921bd, + 0xd19113f9, 0x7ca92ff6, 0x94324773, 0x22f54701, 0x3ae5e581, 0x37c2dadc, + 0xc8b57634, 0x9af3dda7, 0xa9446146, 0x0fd0030e, 0xecc8c73e, 0xa4751e41, + 0xe238cd99, 0x3bea0e2f, 0x3280bba1, 0x183eb331, 0x4e548b38, 0x4f6db908, + 0x6f420d03, 0xf60a04bf, 0x2cb81290, 0x24977c79, 0x5679b072, 0xbcaf89af, + 0xde9a771f, 0xd9930810, 0xb38bae12, 0xdccf3f2e, 0x5512721f, 0x2e6b7124, + 0x501adde6, 0x9f84cd87, 0x7a584718, 0x7408da17, 0xbc9f9abc, 0xe94b7d8c, + 0xec7aec3a, 0xdb851dfa, 0x63094366, 0xc464c3d2, 0xef1c1847, 0x3215d908, + 0xdd433b37, 0x24c2ba16, 0x12a14d43, 0x2a65c451, 0x50940002, 0x133ae4dd, + 0x71dff89e, 0x10314e55, 0x81ac77d6, 0x5f11199b, 0x043556f1, 0xd7a3c76b, + 0x3c11183b, 0x5924a509, 0xf28fe6ed, 0x97f1fbfa, 0x9ebabf2c, 0x1e153c6e, + 0x86e34570, 0xeae96fb1, 0x860e5e0a, 0x5a3e2ab3, 0x771fe71c, 0x4e3d06fa, + 0x2965dcb9, 0x99e71d0f, 0x803e89d6, 0x5266c825, 0x2e4cc978, 0x9c10b36a, + 0xc6150eba, 0x94e2ea78, 0xa5fc3c53, 0x1e0a2df4, 0xf2f74ea7, 0x361d2b3d, + 0x1939260f, 0x19c27960, 0x5223a708, 0xf71312b6, 0xebadfe6e, 0xeac31f66, + 0xe3bc4595, 0xa67bc883, 0xb17f37d1, 0x018cff28, 0xc332ddef, 0xbe6c5aa5, + 0x65582185, 0x68ab9802, 0xeecea50f, 0xdb2f953b, 0x2aef7dad, 0x5b6e2f84, + 0x1521b628, 0x29076170, 0xecdd4775, 0x619f1510, 0x13cca830, 0xeb61bd96, + 0x0334fe1e, 0xaa0363cf, 0xb5735c90, 0x4c70a239, 0xd59e9e0b, 0xcbaade14, + 0xeecc86bc, 0x60622ca7, 0x9cab5cab, 0xb2f3846e, 0x648b1eaf, 0x19bdf0ca, + 0xa02369b9, 0x655abb50, 0x40685a32, 0x3c2ab4b3, 0x319ee9d5, 0xc021b8f7, + 0x9b540b19, 0x875fa099, 0x95f7997e, 0x623d7da8, 0xf837889a, 0x97e32d77, + 0x11ed935f, 0x16681281, 0x0e358829, 0xc7e61fd6, 0x96dedfa1, 0x7858ba99, + 0x57f584a5, 0x1b227263, 0x9b83c3ff, 0x1ac24696, 0xcdb30aeb, 0x532e3054, + 0x8fd948e4, 0x6dbc3128, 0x58ebf2ef, 0x34c6ffea, 0xfe28ed61, 0xee7c3c73, + 0x5d4a14d9, 0xe864b7e3, 0x42105d14, 0x203e13e0, 0x45eee2b6, 0xa3aaabea, + 0xdb6c4f15, 0xfacb4fd0, 0xc742f442, 0xef6abbb5, 0x654f3b1d, 0x41cd2105, + 0xd81e799e, 0x86854dc7, 0xe44b476a, 0x3d816250, 0xcf62a1f2, 0x5b8d2646, + 0xfc8883a0, 0xc1c7b6a3, 0x7f1524c3, 0x69cb7492, 0x47848a0b, 0x5692b285, + 0x095bbf00, 0xad19489d, 0x1462b174, 0x23820e00, 0x58428d2a, 0x0c55f5ea, + 0x1dadf43e, 0x233f7061, 0x3372f092, 0x8d937e41, 0xd65fecf1, 0x6c223bdb, + 0x7cde3759, 0xcbee7460, 0x4085f2a7, 0xce77326e, 0xa6078084, 0x19f8509e, + 0xe8efd855, 0x61d99735, 0xa969a7aa, 0xc50c06c2, 0x5a04abfc, 0x800bcadc, + 0x9e447a2e, 0xc3453484, 0xfdd56705, 0x0e1e9ec9, 0xdb73dbd3, 0x105588cd, + 0x675fda79, 0xe3674340, 0xc5c43465, 0x713e38d8, 0x3d28f89e, 0xf16dff20, + 0x153e21e7, 0x8fb03d4a, 0xe6e39f2b, 0xdb83adf7, 0xe93d5a68, 0x948140f7, + 0xf64c261c, 0x94692934, 0x411520f7, 0x7602d4f7, 0xbcf46b2e, 0xd4a20068, + 0xd4082471, 0x3320f46a, 0x43b7d4b7, 0x500061af, 0x1e39f62e, 0x97244546, + 0x14214f74, 0xbf8b8840, 0x4d95fc1d, 0x96b591af, 0x70f4ddd3, 0x66a02f45, + 0xbfbc09ec, 0x03bd9785, 0x7fac6dd0, 0x31cb8504, 0x96eb27b3, 0x55fd3941, + 0xda2547e6, 0xabca0a9a, 0x28507825, 0x530429f4, 0x0a2c86da, 0xe9b66dfb, + 0x68dc1462, 0xd7486900, 0x680ec0a4, 0x27a18dee, 0x4f3ffea2, 0xe887ad8c, + 0xb58ce006, 0x7af4d6b6, 0xaace1e7c, 0xd3375fec, 0xce78a399, 0x406b2a42, + 0x20fe9e35, 0xd9f385b9, 0xee39d7ab, 0x3b124e8b, 0x1dc9faf7, 0x4b6d1856, + 0x26a36631, 0xeae397b2, 0x3a6efa74, 0xdd5b4332, 0x6841e7f7, 0xca7820fb, + 0xfb0af54e, 0xd8feb397, 0x454056ac, 0xba489527, 0x55533a3a, 0x20838d87, + 0xfe6ba9b7, 0xd096954b, 0x55a867bc, 0xa1159a58, 0xcca92963, 0x99e1db33, + 0xa62a4a56, 0x3f3125f9, 0x5ef47e1c, 0x9029317c, 0xfdf8e802, 0x04272f70, + 0x80bb155c, 0x05282ce3, 0x95c11548, 0xe4c66d22, 0x48c1133f, 0xc70f86dc, + 0x07f9c9ee, 0x41041f0f, 0x404779a4, 0x5d886e17, 0x325f51eb, 0xd59bc0d1, + 0xf2bcc18f, 0x41113564, 0x257b7834, 0x602a9c60, 0xdff8e8a3, 0x1f636c1b, + 0x0e12b4c2, 0x02e1329e, 0xaf664fd1, 0xcad18115, 0x6b2395e0, 0x333e92e1, + 0x3b240b62, 0xeebeb922, 0x85b2a20e, 0xe6ba0d99, 0xde720c8c, 0x2da2f728, + 0xd0127845, 0x95b794fd, 0x647d0862, 0xe7ccf5f0, 0x5449a36f, 0x877d48fa, + 0xc39dfd27, 0xf33e8d1e, 0x0a476341, 0x992eff74, 0x3a6f6eab, 0xf4f8fd37, + 0xa812dc60, 0xa1ebddf8, 0x991be14c, 0xdb6e6b0d, 0xc67b5510, 0x6d672c37, + 0x2765d43b, 0xdcd0e804, 0xf1290dc7, 0xcc00ffa3, 0xb5390f92, 0x690fed0b, + 0x667b9ffb, 0xcedb7d9c, 0xa091cf0b, 0xd9155ea3, 0xbb132f88, 0x515bad24, + 0x7b9479bf, 0x763bd6eb, 0x37392eb3, 0xcc115979, 0x8026e297, 0xf42e312d, + 0x6842ada7, 0xc66a2b3b, 0x12754ccc, 0x782ef11c, 0x6a124237, 0xb79251e7, + 0x06a1bbe6, 0x4bfb6350, 0x1a6b1018, 0x11caedfa, 0x3d25bdd8, 0xe2e1c3c9, + 0x44421659, 0x0a121386, 0xd90cec6e, 0xd5abea2a, 0x64af674e, 0xda86a85f, + 0xbebfe988, 0x64e4c3fe, 0x9dbc8057, 0xf0f7c086, 0x60787bf8, 0x6003604d, + 0xd1fd8346, 0xf6381fb0, 0x7745ae04, 0xd736fccc, 0x83426b33, 0xf01eab71, + 0xb0804187, 0x3c005e5f, 0x77a057be, 0xbde8ae24, 0x55464299, 0xbf582e61, + 0x4e58f48f, 0xf2ddfda2, 0xf474ef38, 0x8789bdc2, 0x5366f9c3, 0xc8b38e74, + 0xb475f255, 0x46fcd9b9, 0x7aeb2661, 0x8b1ddf84, 0x846a0e79, 0x915f95e2, + 0x466e598e, 0x20b45770, 0x8cd55591, 0xc902de4c, 0xb90bace1, 0xbb8205d0, + 0x11a86248, 0x7574a99e, 0xb77f19b6, 0xe0a9dc09, 0x662d09a1, 0xc4324633, + 0xe85a1f02, 0x09f0be8c, 0x4a99a025, 0x1d6efe10, 0x1ab93d1d, 0x0ba5a4df, + 0xa186f20f, 0x2868f169, 0xdcb7da83, 0x573906fe, 0xa1e2ce9b, 0x4fcd7f52, + 0x50115e01, 0xa70683fa, 0xa002b5c4, 0x0de6d027, 0x9af88c27, 0x773f8641, + 0xc3604c06, 0x61a806b5, 0xf0177a28, 0xc0f586e0, 0x006058aa, 0x30dc7d62, + 0x11e69ed7, 0x2338ea63, 0x53c2dd94, 0xc2c21634, 0xbbcbee56, 0x90bcb6de, + 0xebfc7da1, 0xce591d76, 0x6f05e409, 0x4b7c0188, 0x39720a3d, 0x7c927c24, + 0x86e3725f, 0x724d9db9, 0x1ac15bb4, 0xd39eb8fc, 0xed545578, 0x08fca5b5, + 0xd83d7cd3, 0x4dad0fc4, 0x1e50ef5e, 0xb161e6f8, 0xa28514d9, 0x6c51133c, + 0x6fd5c7e7, 0x56e14ec4, 0x362abfce, 0xddc6c837, 0xd79a3234, 0x92638212, + 0x670efa8e, 0x406000e0, 0x3a39ce37, 0xd3faf5cf, 0xabc27737, 0x5ac52d1b, + 0x5cb0679e, 0x4fa33742, 0xd3822740, 0x99bc9bbe, 0xd5118e9d, 0xbf0f7315, + 0xd62d1c7e, 0xc700c47b, 0xb78c1b6b, 0x21a19045, 0xb26eb1be, 0x6a366eb4, + 0x5748ab2f, 0xbc946e79, 0xc6a376d2, 0x6549c2c8, 0x530ff8ee, 0x468dde7d, + 0xd5730a1d, 0x4cd04dc6, 0x2939bbdb, 0xa9ba4650, 0xac9526e8, 0xbe5ee304, + 0xa1fad5f0, 0x6a2d519a, 0x63ef8ce2, 0x9a86ee22, 0xc089c2b8, 0x43242ef6, + 0xa51e03aa, 0x9cf2d0a4, 0x83c061ba, 0x9be96a4d, 0x8fe51550, 0xba645bd6, + 0x2826a2f9, 0xa73a3ae1, 0x4ba99586, 0xef5562e9, 0xc72fefd3, 0xf752f7da, + 0x3f046f69, 0x77fa0a59, 0x80e4a915, 0x87b08601, 0x9b09e6ad, 0x3b3ee593, + 0xe990fd5a, 0x9e34d797, 0x2cf0b7d9, 0x022b8b51, 0x96d5ac3a, 0x017da67d, + 0xd1cf3ed6, 0x7c7d2d28, 0x1f9f25cf, 0xadf2b89b, 0x5ad6b472, 0x5a88f54c, + 0xe029ac71, 0xe019a5e6, 0x47b0acfd, 0xed93fa9b, 0xe8d3c48d, 0x283b57cc, + 0xf8d56629, 0x79132e28, 0x785f0191, 0xed756055, 0xf7960e44, 0xe3d35e8c, + 0x15056dd4, 0x88f46dba, 0x03a16125, 0x0564f0bd, 0xc3eb9e15, 0x3c9057a2, + 0x97271aec, 0xa93a072a, 0x1b3f6d9b, 0x1e6321f5, 0xf59c66fb, 0x26dcf319, + 0x7533d928, 0xb155fdf5, 0x03563482, 0x8aba3cbb, 0x28517711, 0xc20ad9f8, + 0xabcc5167, 0xccad925f, 0x4de81751, 0x3830dc8e, 0x379d5862, 0x9320f991, + 0xea7a90c2, 0xfb3e7bce, 0x5121ce64, 0x774fbe32, 0xa8b6e37e, 0xc3293d46, + 0x48de5369, 0x6413e680, 0xa2ae0810, 0xdd6db224, 0x69852dfd, 0x09072166, + 0xb39a460a, 0x6445c0dd, 0x586cdecf, 0x1c20c8ae, 0x5bbef7dd, 0x1b588d40, + 0xccd2017f, 0x6bb4e3bb, 0xdda26a7e, 0x3a59ff45, 0x3e350a44, 0xbcb4cdd5, + 0x72eacea8, 0xfa6484bb, 0x8d6612ae, 0xbf3c6f47, 0xd29be463, 0x542f5d9e, + 0xaec2771b, 0xf64e6370, 0x740e0d8d, 0xe75b1357, 0xf8721671, 0xaf537d5d, + 0x4040cb08, 0x4eb4e2cc, 0x34d2466a, 0x0115af84, 0xe1b00428, 0x95983a1d, + 0x06b89fb4, 0xce6ea048, 0x6f3f3b82, 0x3520ab82, 0x011a1d4b, 0x277227f8, + 0x611560b1, 0xe7933fdc, 0xbb3a792b, 0x344525bd, 0xa08839e1, 0x51ce794b, + 0x2f32c9b7, 0xa01fbac9, 0xe01cc87e, 0xbcc7d1f6, 0xcf0111c3, 0xa1e8aac7, + 0x1a908749, 0xd44fbd9a, 0xd0dadecb, 0xd50ada38, 0x0339c32a, 0xc6913667, + 0x8df9317c, 0xe0b12b4f, 0xf79e59b7, 0x43f5bb3a, 0xf2d519ff, 0x27d9459c, + 0xbf97222c, 0x15e6fc2a, 0x0f91fc71, 0x9b941525, 0xfae59361, 0xceb69ceb, + 0xc2a86459, 0x12baa8d1, 0xb6c1075e, 0xe3056a0c, 0x10d25065, 0xcb03a442, + 0xe0ec6e0e, 0x1698db3b, 0x4c98a0be, 0x3278e964, 0x9f1f9532, 0xe0d392df, + 0xd3a0342b, 0x8971f21e, 0x1b0a7441, 0x4ba3348c, 0xc5be7120, 0xc37632d8, + 0xdf359f8d, 0x9b992f2e, 0xe60b6f47, 0x0fe3f11d, 0xe54cda54, 0x1edad891, + 0xce6279cf, 0xcd3e7e6f, 0x1618b166, 0xfd2c1d05, 0x848fd2c5, 0xf6fb2299, + 0xf523f357, 0xa6327623, 0x93a83531, 0x56cccd02, 0xacf08162, 0x5a75ebb5, + 0x6e163697, 0x88d273cc, 0xde966292, 0x81b949d0, 0x4c50901b, 0x71c65614, + 0xe6c6c7bd, 0x327a140a, 0x45e1d006, 0xc3f27b9a, 0xc9aa53fd, 0x62a80f00, + 0xbb25bfe2, 0x35bdd2f6, 0x71126905, 0xb2040222, 0xb6cbcf7c, 0xcd769c2b, + 0x53113ec0, 0x1640e3d3, 0x38abbd60, 0x2547adf0, 0xba38209c, 0xf746ce76, + 0x77afa1c5, 0x20756060, 0x85cbfe4e, 0x8ae88dd8, 0x7aaaf9b0, 0x4cf9aa7e, + 0x1948c25c, 0x02fb8a8c, 0x01c36ae4, 0xd6ebe1f9, 0x90d4f869, 0xa65cdea0, + 0x3f09252d, 0xc208e69f, 0xb74e6132, 0xce77e25b, 0x578fdfe3, 0x3ac372e6}; + // bcrypt IV: "OrpheanBeholderScryDoubt" + static private final int bf_crypt_ciphertext[] = {0x4f727068, 0x65616e42, + 0x65686f6c, 0x64657253, 0x63727944, 0x6f756274}; + // Table for Base64 encoding + static private final char base64_code[] = {'.', '/', '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', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'}; + // Table for Base64 decoding + static private final byte index_64[] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 54, 55, + 56, 57, 58, 59, 60, 61, 62, 63, -1, -1, -1, -1, -1, -1, -1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, + -1, -1, -1, -1, -1, -1, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, + 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, -1, -1, -1}; + static final int MIN_LOG_ROUNDS = 4; + static final int MAX_LOG_ROUNDS = 31; + // Expanded Blowfish key + private int P[]; + private int S[]; + + /** + * Encode a byte array using bcrypt's slightly-modified base64 encoding scheme. Note + * that this is not compatible with the standard MIME-base64 + * encoding. + * + * @param d the byte array to encode + * @param len the number of bytes to encode + * @param rs the destination buffer for the base64-encoded string + * @throws IllegalArgumentException if the length is invalid + */ + static void encode_base64(byte d[], int len, StringBuilder rs) + throws IllegalArgumentException { + int off = 0; + int c1, c2; + + if (len <= 0 || len > d.length) { + throw new IllegalArgumentException("Invalid len"); + } + + while (off < len) { + c1 = d[off++] & 0xff; + rs.append(base64_code[(c1 >> 2) & 0x3f]); + c1 = (c1 & 0x03) << 4; + if (off >= len) { + rs.append(base64_code[c1 & 0x3f]); + break; + } + c2 = d[off++] & 0xff; + c1 |= (c2 >> 4) & 0x0f; + rs.append(base64_code[c1 & 0x3f]); + c1 = (c2 & 0x0f) << 2; + if (off >= len) { + rs.append(base64_code[c1 & 0x3f]); + break; + } + c2 = d[off++] & 0xff; + c1 |= (c2 >> 6) & 0x03; + rs.append(base64_code[c1 & 0x3f]); + rs.append(base64_code[c2 & 0x3f]); + } + } + + /** + * Look up the 3 bits base64-encoded by the specified character, range-checking + * against conversion table + * + * @param x the base64-encoded value + * @return the decoded value of x + */ + private static byte char64(char x) { + if (x > index_64.length) { + return -1; + } + return index_64[x]; + } + + /** + * Decode a string encoded using bcrypt's base64 scheme to a byte array. Note that + * this is *not* compatible with the standard MIME-base64 encoding. + * + * @param s the string to decode + * @param maxolen the maximum number of bytes to decode + * @return an array containing the decoded bytes + * @throws IllegalArgumentException if maxolen is invalid + */ + static byte[] decode_base64(String s, int maxolen) throws IllegalArgumentException { + ByteArrayOutputStream out = new ByteArrayOutputStream(maxolen); + int off = 0, slen = s.length(), olen = 0; + byte c1, c2, c3, c4, o; + + if (maxolen <= 0) { + throw new IllegalArgumentException("Invalid maxolen"); + } + + while (off < slen - 1 && olen < maxolen) { + c1 = char64(s.charAt(off++)); + c2 = char64(s.charAt(off++)); + if (c1 == -1 || c2 == -1) { + break; + } + o = (byte) (c1 << 2); + o |= (c2 & 0x30) >> 4; + out.write(o); + if (++olen >= maxolen || off >= slen) { + break; + } + c3 = char64(s.charAt(off++)); + if (c3 == -1) { + break; + } + o = (byte) ((c2 & 0x0f) << 4); + o |= (c3 & 0x3c) >> 2; + out.write(o); + if (++olen >= maxolen || off >= slen) { + break; + } + c4 = char64(s.charAt(off++)); + o = (byte) ((c3 & 0x03) << 6); + o |= c4; + out.write(o); + ++olen; + } + + return out.toByteArray(); + } + + /** + * Blowfish encipher a single 64-bit block encoded as two 32-bit halves + * + * @param lr an array containing the two 32-bit half blocks + * @param off the position in the array of the blocks + */ + private final void encipher(int lr[], int off) { + int i, n, l = lr[off], r = lr[off + 1]; + + l ^= P[0]; + for (i = 0; i <= BLOWFISH_NUM_ROUNDS - 2; ) { + // Feistel substitution on left word + n = S[(l >> 24) & 0xff]; + n += S[0x100 | ((l >> 16) & 0xff)]; + n ^= S[0x200 | ((l >> 8) & 0xff)]; + n += S[0x300 | (l & 0xff)]; + r ^= n ^ P[++i]; + + // Feistel substitution on right word + n = S[(r >> 24) & 0xff]; + n += S[0x100 | ((r >> 16) & 0xff)]; + n ^= S[0x200 | ((r >> 8) & 0xff)]; + n += S[0x300 | (r & 0xff)]; + l ^= n ^ P[++i]; + } + lr[off] = r ^ P[BLOWFISH_NUM_ROUNDS + 1]; + lr[off + 1] = l; + } + + /** + * Cycically extract a word of key material + * + * @param data the string to extract the data from + * @param offp a "pointer" (as a one-entry array) to the current offset into data + * @return the next word of material from data + */ + private static int streamtoword(byte data[], int offp[]) { + int i; + int word = 0; + int off = offp[0]; + + for (i = 0; i < 4; i++) { + word = (word << 8) | (data[off] & 0xff); + off = (off + 1) % data.length; + } + + offp[0] = off; + return word; + } + + /** + * Initialise the Blowfish key schedule + */ + private void init_key() { + P = (int[]) P_orig.clone(); + S = (int[]) S_orig.clone(); + } + + /** + * Key the Blowfish cipher + * + * @param key an array containing the key + */ + private void key(byte key[]) { + int i; + int koffp[] = {0}; + int lr[] = {0, 0}; + int plen = P.length, slen = S.length; + + for (i = 0; i < plen; i++) { + P[i] = P[i] ^ streamtoword(key, koffp); + } + + for (i = 0; i < plen; i += 2) { + encipher(lr, 0); + P[i] = lr[0]; + P[i + 1] = lr[1]; + } + + for (i = 0; i < slen; i += 2) { + encipher(lr, 0); + S[i] = lr[0]; + S[i + 1] = lr[1]; + } + } + + /** + * Perform the "enhanced key schedule" step described by Provos and Mazieres in + * "A Future-Adaptable Password Scheme" http://www.openbsd.org/papers/bcrypt-paper.ps + * + * @param data salt information + * @param key password information + */ + private void ekskey(byte data[], byte key[]) { + int i; + int koffp[] = {0}, doffp[] = {0}; + int lr[] = {0, 0}; + int plen = P.length, slen = S.length; + + for (i = 0; i < plen; i++) { + P[i] = P[i] ^ streamtoword(key, koffp); + } + + for (i = 0; i < plen; i += 2) { + lr[0] ^= streamtoword(data, doffp); + lr[1] ^= streamtoword(data, doffp); + encipher(lr, 0); + P[i] = lr[0]; + P[i + 1] = lr[1]; + } + + for (i = 0; i < slen; i += 2) { + lr[0] ^= streamtoword(data, doffp); + lr[1] ^= streamtoword(data, doffp); + encipher(lr, 0); + S[i] = lr[0]; + S[i + 1] = lr[1]; + } + } + + static long roundsForLogRounds(int log_rounds) { + if (log_rounds < 4 || log_rounds > 31) { + throw new IllegalArgumentException("Bad number of rounds"); + } + return 1L << log_rounds; + } + + /** + * Perform the central password hashing step in the bcrypt scheme + * + * @param password the password to hash + * @param salt the binary salt to hash with the password + * @param log_rounds the binary logarithm of the number of rounds of hashing to apply + * @return an array containing the binary hashed password + */ + private byte[] crypt_raw(byte password[], byte salt[], int log_rounds) { + int cdata[] = (int[]) bf_crypt_ciphertext.clone(); + int clen = cdata.length; + byte ret[]; + + long rounds = roundsForLogRounds(log_rounds); + + init_key(); + ekskey(salt, password); + for (long i = 0; i < rounds; i++) { + key(password); + key(salt); + } + + for (int i = 0; i < 64; i++) { + for (int j = 0; j < (clen >> 1); j++) { + encipher(cdata, j << 1); + } + } + + ret = new byte[clen * 4]; + for (int i = 0, j = 0; i < clen; i++) { + ret[j++] = (byte) ((cdata[i] >> 24) & 0xff); + ret[j++] = (byte) ((cdata[i] >> 16) & 0xff); + ret[j++] = (byte) ((cdata[i] >> 8) & 0xff); + ret[j++] = (byte) (cdata[i] & 0xff); + } + return ret; + } + + /** + * Hash a password using the OpenBSD bcrypt scheme + * + * @param password the password to hash + * @param salt the salt to hash with (perhaps generated using BCrypt.gensalt) + * @return the hashed password + * @throws IllegalArgumentException if invalid salt is passed + */ + public static String hashpw(String password, String salt) throws IllegalArgumentException { + BCrypt B; + String real_salt; + byte passwordb[], saltb[], hashed[]; + char minor = (char) 0; + int rounds, off = 0; + StringBuilder rs = new StringBuilder(); + + if (salt == null) { + throw new IllegalArgumentException("salt cannot be null"); + } + + int saltLength = salt.length(); + + if (saltLength < 28) { + throw new IllegalArgumentException("Invalid salt"); + } + + if (salt.charAt(0) != '$' || salt.charAt(1) != '2') { + throw new IllegalArgumentException("Invalid salt version"); + } + if (salt.charAt(2) == '$') { + off = 3; + } else { + minor = salt.charAt(2); + if (minor != 'a' || salt.charAt(3) != '$') { + throw new IllegalArgumentException("Invalid salt revision"); + } + off = 4; + } + + if (saltLength - off < 25) { + throw new IllegalArgumentException("Invalid salt"); + } + + // Extract number of rounds + if (salt.charAt(off + 2) > '$') { + throw new IllegalArgumentException("Missing salt rounds"); + } + rounds = Integer.parseInt(salt.substring(off, off + 2)); + + real_salt = salt.substring(off + 3, off + 25); + try { + passwordb = (password + (minor >= 'a' ? "\000" : "")).getBytes("UTF-8"); + } catch (UnsupportedEncodingException uee) { + throw new AssertionError("UTF-8 is not supported"); + } + + saltb = decode_base64(real_salt, BCRYPT_SALT_LEN); + + B = new BCrypt(); + hashed = B.crypt_raw(passwordb, saltb, rounds); + + rs.append("$2"); + if (minor >= 'a') { + rs.append(minor); + } + rs.append("$"); + if (rounds < 10) { + rs.append("0"); + } + rs.append(rounds); + rs.append("$"); + encode_base64(saltb, saltb.length, rs); + encode_base64(hashed, bf_crypt_ciphertext.length * 4 - 1, rs); + return rs.toString(); + } + + /** + * Generate a salt for use with the BCrypt.hashpw() method + * + * @param log_rounds the log2 of the number of rounds of hashing to apply - the work + * factor therefore increases as 2**log_rounds. Minimum 4, maximum 31. + * @param random an instance of SecureRandom to use + * @return an encoded salt value + */ + public static String gensalt(int log_rounds, SecureRandom random) { + if (log_rounds < MIN_LOG_ROUNDS || log_rounds > MAX_LOG_ROUNDS) { + throw new IllegalArgumentException("Bad number of rounds"); + } + StringBuilder rs = new StringBuilder(); + byte rnd[] = new byte[BCRYPT_SALT_LEN]; + + random.nextBytes(rnd); + + rs.append("$2a$"); + if (log_rounds < 10) { + rs.append("0"); + } + rs.append(log_rounds); + rs.append("$"); + encode_base64(rnd, rnd.length, rs); + return rs.toString(); + } + + /** + * Generate a salt for use with the BCrypt.hashpw() method + * + * @param log_rounds the log2 of the number of rounds of hashing to apply - the work + * factor therefore increases as 2**log_rounds. Minimum 4, maximum 31. + * @return an encoded salt value + */ + public static String gensalt(int log_rounds) { + return gensalt(log_rounds, new SecureRandom()); + } + + /** + * Generate a salt for use with the BCrypt.hashpw() method, selecting a reasonable + * default for the number of hashing rounds to apply + * + * @return an encoded salt value + */ + public static String gensalt() { + return gensalt(GENSALT_DEFAULT_LOG2_ROUNDS); + } + + /** + * Check that a plaintext password matches a previously hashed one + * + * @param plaintext the plaintext password to verify + * @param hashed the previously-hashed password + * @return true if the passwords match, false otherwise + */ + public static boolean checkpw(String plaintext, String hashed) { + return equalsNoEarlyReturn(hashed, hashpw(plaintext, hashed)); + } + + static boolean equalsNoEarlyReturn(String a, String b) { + char[] caa = a.toCharArray(); + char[] cab = b.toCharArray(); + + if (caa.length != cab.length) { + return false; + } + + byte ret = 0; + for (int i = 0; i < caa.length; i++) { + ret |= caa[i] ^ cab[i]; + } + return ret == 0; + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCryptPasswordEncoder.java b/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCryptPasswordEncoder.java new file mode 100644 index 00000000..0d570a96 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/password/BCryptPasswordEncoder.java @@ -0,0 +1,78 @@ +package xiaozhi.modules.security.password; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.security.SecureRandom; +import java.util.regex.Pattern; + +/** + * Implementation of PasswordEncoder that uses the BCrypt strong hashing function. Clients + * can optionally supply a "strength" (a.k.a. log rounds in BCrypt) and a SecureRandom + * instance. The larger the strength parameter the more work will have to be done + * (exponentially) to hash the passwords. The default value is 10. + * + * @author Dave Syer + */ +public class BCryptPasswordEncoder implements PasswordEncoder { + private Pattern BCRYPT_PATTERN = Pattern + .compile("\\A\\$2a?\\$\\d\\d\\$[./0-9A-Za-z]{53}"); + private final Log logger = LogFactory.getLog(getClass()); + + private final int strength; + + private final SecureRandom random; + + public BCryptPasswordEncoder() { + this(-1); + } + + /** + * @param strength the log rounds to use, between 4 and 31 + */ + public BCryptPasswordEncoder(int strength) { + this(strength, null); + } + + /** + * @param strength the log rounds to use, between 4 and 31 + * @param random the secure random instance to use + */ + public BCryptPasswordEncoder(int strength, SecureRandom random) { + if (strength != -1 && (strength < BCrypt.MIN_LOG_ROUNDS || strength > BCrypt.MAX_LOG_ROUNDS)) { + throw new IllegalArgumentException("Bad strength"); + } + this.strength = strength; + this.random = random; + } + + @Override + public String encode(CharSequence rawPassword) { + String salt; + if (strength > 0) { + if (random != null) { + salt = BCrypt.gensalt(strength, random); + } else { + salt = BCrypt.gensalt(strength); + } + } else { + salt = BCrypt.gensalt(); + } + return BCrypt.hashpw(rawPassword.toString(), salt); + } + + @Override + public boolean matches(CharSequence rawPassword, String encodedPassword) { + if (encodedPassword == null || encodedPassword.length() == 0) { + logger.warn("Empty encoded password"); + return false; + } + + if (!BCRYPT_PATTERN.matcher(encodedPassword).matches()) { + logger.warn("Encoded password does not look like BCrypt"); + return false; + } + + return BCrypt.checkpw(rawPassword.toString(), encodedPassword); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordEncoder.java b/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordEncoder.java new file mode 100644 index 00000000..40d1e95c --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordEncoder.java @@ -0,0 +1,30 @@ +package xiaozhi.modules.security.password; + +/** + * Service interface for encoding passwords. + *

+ * The preferred implementation is {@code BCryptPasswordEncoder}. + * + * @author Keith Donald + */ +public interface PasswordEncoder { + + /** + * Encode the raw password. Generally, a good encoding algorithm applies a SHA-1 or + * greater hash combined with an 8-byte or greater randomly generated salt. + */ + String encode(CharSequence rawPassword); + + /** + * Verify the encoded password obtained from storage matches the submitted raw + * password after it too is encoded. Returns true if the passwords match, false if + * they do not. The stored password itself is never decoded. + * + * @param rawPassword the raw password to encode and match + * @param encodedPassword the encoded password from storage to compare with + * @return true if the raw password, after encoding, matches the encoded password from + * storage + */ + boolean matches(CharSequence rawPassword, String encodedPassword); + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordUtils.java b/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordUtils.java new file mode 100644 index 00000000..b0357010 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/password/PasswordUtils.java @@ -0,0 +1,42 @@ +package xiaozhi.modules.security.password; + +/** + * 密码工具类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class PasswordUtils { + private static PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); + + /** + * 加密 + * + * @param str 字符串 + * @return 返回加密字符串 + */ + public static String encode(String str) { + return passwordEncoder.encode(str); + } + + + /** + * 比较密码是否相等 + * + * @param str 明文密码 + * @param password 加密后密码 + * @return true:成功 false:失败 + */ + public static boolean matches(String str, String password) { + return passwordEncoder.matches(str, password); + } + + + public static void main(String[] args) { + String str = "admin"; + String password = encode(str); + + System.out.println(password); + System.out.println(matches(str, password)); + } + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/CaptchaService.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/CaptchaService.java new file mode 100644 index 00000000..b91d5d9a --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/CaptchaService.java @@ -0,0 +1,27 @@ +package xiaozhi.modules.security.service; + +import jakarta.servlet.http.HttpServletResponse; + +import java.io.IOException; + +/** + * 验证码 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public interface CaptchaService { + + /** + * 图片验证码 + */ + void create(HttpServletResponse response, String uuid) throws IOException; + + /** + * 验证码效验 + * + * @param uuid uuid + * @param code 验证码 + * @return true:成功 false:失败 + */ + boolean validate(String uuid, String code); +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/ShiroService.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/ShiroService.java new file mode 100644 index 00000000..980645d6 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/ShiroService.java @@ -0,0 +1,30 @@ +package xiaozhi.modules.security.service; + +import xiaozhi.common.user.UserDetail; +import xiaozhi.modules.security.entity.SysUserTokenEntity; +import xiaozhi.modules.sys.entity.SysUserEntity; + +import java.util.List; +import java.util.Set; + +/** + * shiro相关接口 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public interface ShiroService { + /** + * 获取用户权限列表 + */ + Set getUserPermissions(UserDetail user); + + SysUserTokenEntity getByToken(String token); + + /** + * 根据用户ID,查询用户 + * + * @param userId + */ + SysUserEntity getUser(Long userId); + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/SysUserTokenService.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/SysUserTokenService.java new file mode 100644 index 00000000..220b18b5 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/SysUserTokenService.java @@ -0,0 +1,31 @@ +package xiaozhi.modules.security.service; + +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.BaseService; +import xiaozhi.common.utils.Result; +import xiaozhi.modules.security.entity.SysUserTokenEntity; + +import java.util.Map; + +/** + * 用户Token + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public interface SysUserTokenService extends BaseService { + + /** + * 生成token + * + * @param userId 用户ID + */ + Result createToken(Long userId); + + /** + * 退出 + * + * @param userId 用户ID + */ + void logout(Long userId); + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java new file mode 100644 index 00000000..fdc0d5b5 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/CaptchaServiceImpl.java @@ -0,0 +1,94 @@ +package xiaozhi.modules.security.service.impl; + +import com.google.common.cache.Cache; +import com.google.common.cache.CacheBuilder; +import com.wf.captcha.SpecCaptcha; +import com.wf.captcha.base.Captcha; +import xiaozhi.common.redis.RedisKeys; +import xiaozhi.common.redis.RedisUtils; +import xiaozhi.modules.security.service.CaptchaService; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +/** + * 验证码 + */ +@Service +public class CaptchaServiceImpl implements CaptchaService { + @Resource + private RedisUtils redisUtils; + @Value("${renren.redis.open}") + private boolean open; + /** + * Local Cache 5分钟过期 + */ + Cache localCache = CacheBuilder.newBuilder().maximumSize(1000).expireAfterAccess(5, TimeUnit.MINUTES).build(); + + @Override + public void create(HttpServletResponse response, String uuid) throws IOException { + response.setContentType("image/gif"); + response.setHeader("Pragma", "No-cache"); + response.setHeader("Cache-Control", "no-cache"); + response.setDateHeader("Expires", 0); + + //生成验证码 + SpecCaptcha captcha = new SpecCaptcha(150, 40); + captcha.setLen(5); + captcha.setCharType(Captcha.TYPE_DEFAULT); + captcha.out(response.getOutputStream()); + + //保存到缓存 + setCache(uuid, captcha.text()); + } + + @Override + public boolean validate(String uuid, String code) { + if (StringUtils.isBlank(code)) { + return false; + } + //获取验证码 + String captcha = getCache(uuid); + + //效验成功 + if (code.equalsIgnoreCase(captcha)) { + return true; + } + + return false; + } + + private void setCache(String key, String value) { + if (open) { + key = RedisKeys.getCaptchaKey(key); + redisUtils.set(key, value, 300); + } else { + localCache.put(key, value); + } + } + + private String getCache(String key) { + if (open) { + key = RedisKeys.getCaptchaKey(key); + String captcha = (String) redisUtils.get(key); + //删除验证码 + if (captcha != null) { + redisUtils.delete(key); + } + + return captcha; + } + + String captcha = localCache.getIfPresent(key); + //删除验证码 + if (captcha != null) { + localCache.invalidate(key); + } + return captcha; + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/ShiroServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/ShiroServiceImpl.java new file mode 100644 index 00000000..128d9b9d --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/ShiroServiceImpl.java @@ -0,0 +1,48 @@ +package xiaozhi.modules.security.service.impl; + +import xiaozhi.common.user.UserDetail; +import xiaozhi.modules.security.dao.SysUserTokenDao; +import xiaozhi.modules.security.entity.SysUserTokenEntity; +import xiaozhi.modules.security.service.ShiroService; +import xiaozhi.modules.sys.dao.SysUserDao; +import xiaozhi.modules.sys.entity.SysUserEntity; +import xiaozhi.modules.sys.enums.SuperAdminEnum; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.*; + +@AllArgsConstructor +@Service +public class ShiroServiceImpl implements ShiroService { + private final SysUserDao sysUserDao; + private final SysUserTokenDao sysUserTokenDao; + + @Override + public Set getUserPermissions(UserDetail user) { + //系统管理员,拥有最高权限 + // TODO: 暂时写死,后续改成从数据库查询 + List permissionsList = new ArrayList<>(); + //用户权限列表 + Set permsSet = new HashSet<>(); + for (String permissions : permissionsList) { + if (StringUtils.isBlank(permissions)) { + continue; + } + permsSet.addAll(Arrays.asList(permissions.trim().split(","))); + } + + return permsSet; + } + + @Override + public SysUserTokenEntity getByToken(String token) { + return sysUserTokenDao.getByToken(token); + } + + @Override + public SysUserEntity getUser(Long userId) { + return sysUserDao.selectById(userId); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/SysUserTokenServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/SysUserTokenServiceImpl.java new file mode 100644 index 00000000..903ca242 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/service/impl/SysUserTokenServiceImpl.java @@ -0,0 +1,78 @@ +package xiaozhi.modules.security.service.impl; + +import cn.hutool.core.date.DateUtil; +import xiaozhi.common.page.TokenDTO; +import xiaozhi.common.service.impl.BaseServiceImpl; +import xiaozhi.common.utils.HttpContextUtils; +import xiaozhi.common.utils.Result; +import xiaozhi.modules.security.dao.SysUserTokenDao; +import xiaozhi.modules.security.entity.SysUserTokenEntity; +import xiaozhi.modules.security.oauth2.TokenGenerator; +import xiaozhi.modules.security.service.SysUserTokenService; +import org.springframework.stereotype.Service; + +import java.util.Date; + +@Service +public class SysUserTokenServiceImpl extends BaseServiceImpl implements SysUserTokenService { + /** + * 12小时后过期 + */ + private final static int EXPIRE = 3600 * 12; + + @Override + public Result createToken(Long userId) { + //用户token + String token; + + //当前时间 + Date now = new Date(); + //过期时间 + Date expireTime = new Date(now.getTime() + EXPIRE * 1000); + + //判断是否生成过token + SysUserTokenEntity tokenEntity = baseDao.getByUserId(userId); + if (tokenEntity == null) { + //生成一个token + token = TokenGenerator.generateValue(); + + tokenEntity = new SysUserTokenEntity(); + tokenEntity.setUserId(userId); + tokenEntity.setToken(token); + tokenEntity.setUpdateDate(now); + tokenEntity.setExpireDate(expireTime); + + //保存token + this.insert(tokenEntity); + } else { + //判断token是否过期 + if (tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()) { + //token过期,重新生成token + token = TokenGenerator.generateValue(); + } else { + token = tokenEntity.getToken(); + } + + tokenEntity.setToken(token); + tokenEntity.setUpdateDate(now); + tokenEntity.setExpireDate(expireTime); + + //更新token + this.updateById(tokenEntity); + } + + String clientHash = HttpContextUtils.getClientCode(); + + TokenDTO tokenDTO = new TokenDTO(); + tokenDTO.setToken(token); + tokenDTO.setExpire(EXPIRE); + tokenDTO.setClientHash(clientHash); + return new Result().ok(tokenDTO); + } + + @Override + public void logout(Long userId) { + Date expireDate = DateUtil.offsetMinute(new Date(), -1); + baseDao.logout(userId, expireDate); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/security/user/SecurityUser.java b/main/manager-api/src/main/java/xiaozhi/modules/security/user/SecurityUser.java new file mode 100644 index 00000000..5dee27fb --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/security/user/SecurityUser.java @@ -0,0 +1,56 @@ +package xiaozhi.modules.security.user; + +import xiaozhi.common.user.UserDetail; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.subject.Subject; + +/** + * Shiro工具类 + * Copyright (c) 人人开源 All rights reserved. + * Website: https://www.renren.io + */ +public class SecurityUser { + + public static Subject getSubject() { + try { + return SecurityUtils.getSubject(); + } catch (Exception e) { + return null; + } + } + + /** + * 获取用户信息 + */ + public static UserDetail getUser() { + Subject subject = getSubject(); + if (subject == null) { + return new UserDetail(); + } + + UserDetail user = (UserDetail) subject.getPrincipal(); + if (user == null) { + return new UserDetail(); + } + + return user; + } + + public static String getToken() { + return getUser().getToken(); + } + + /** + * 获取用户ID + */ + public static Long getUserId() { + return getUser().getId(); + } + + /** + * 获取部门ID + */ + public static Long getDeptId() { + return getUser().getDeptId(); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysUserController.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysUserController.java new file mode 100644 index 00000000..2f030fff --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/controller/SysUserController.java @@ -0,0 +1,156 @@ +package xiaozhi.modules.sys.controller; + +import xiaozhi.common.annotation.LogOperation; +import xiaozhi.common.constant.Constant; +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.exception.RenException; +import xiaozhi.common.page.PageData; +import xiaozhi.common.user.UserDetail; +import xiaozhi.common.utils.ConvertUtils; +import xiaozhi.common.utils.Result; +import xiaozhi.common.validator.AssertUtils; +import xiaozhi.common.validator.ValidatorUtils; +import xiaozhi.common.validator.group.AddGroup; +import xiaozhi.common.validator.group.DefaultGroup; +import xiaozhi.common.validator.group.UpdateGroup; +import xiaozhi.modules.security.password.PasswordUtils; +import xiaozhi.modules.security.user.SecurityUser; +import xiaozhi.modules.sys.dto.PasswordDTO; +import xiaozhi.modules.sys.dto.SysUserDTO; +import xiaozhi.modules.sys.service.SysUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Parameters; +import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AllArgsConstructor; +import org.apache.shiro.authz.annotation.RequiresPermissions; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 用户管理 + */ +@AllArgsConstructor +@RestController +@RequestMapping("/sys/user") +@Tag(name = "用户管理") +public class SysUserController { + private final SysUserService sysUserService; + + @GetMapping("page") + @Operation(summary = "分页") + @Parameters({ + @Parameter(name = Constant.PAGE, description = "当前页码,从1开始", required = true), + @Parameter(name = Constant.LIMIT, description = "每页显示记录数", required = true), + @Parameter(name = Constant.ORDER_FIELD, description = "排序字段"), + @Parameter(name = Constant.ORDER, description = "排序方式,可选值(asc、desc)"), + @Parameter(name = "username", description = "用户名"), + @Parameter(name = "gender", description = "性别"), + @Parameter(name = "deptId", description = "部门ID") + }) + @RequiresPermissions("sys:user:page") + public Result> page(@Parameter(hidden = true) @RequestParam Map params) { + PageData page = sysUserService.page(params); + + return new Result>().ok(page); + } + + @GetMapping("{id}") + @Operation(summary = "信息") + @RequiresPermissions("sys:user:info") + public Result get(@PathVariable("id") Long id) { + SysUserDTO data = sysUserService.get(id); + return new Result().ok(data); + } + + @GetMapping("info") + @Operation(summary = "登录用户信息") + public Result info() { + SysUserDTO data = ConvertUtils.sourceToTarget(SecurityUser.getUser(), SysUserDTO.class); + return new Result().ok(data); + } + + @PutMapping("password") + @Operation(summary = "修改密码") + @LogOperation("修改密码") + public Result password(@RequestBody PasswordDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto); + String newPassword = dto.getNewPassword(); + String password = dto.getPassword(); + + //密码的强度 + if (newPassword == null || newPassword.length() < 8) { + return new Result().error(ErrorCode.PASSWORD_LENGTH_ERROR); + } + if (!sysUserService.isStrongPassword(newPassword)) { + return new Result().error(ErrorCode.PASSWORD_WEAK_ERROR); + } + UserDetail user = SecurityUser.getUser(); + //原密码不正确 + if (!PasswordUtils.matches(dto.getPassword(), user.getPassword())) { + return new Result().error(ErrorCode.PASSWORD_ERROR); + } + + sysUserService.updatePassword(user.getId(), dto.getNewPassword()); + + return new Result(); + } + + @PostMapping + @Operation(summary = "保存") + @LogOperation("保存") + @RequiresPermissions("sys:user:save") + public Result save(@RequestBody SysUserDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, AddGroup.class, DefaultGroup.class); + + sysUserService.save(dto); + + return new Result(); + } + + @PutMapping + @Operation(summary = "修改") + @LogOperation("修改") + @RequiresPermissions("sys:user:update") + public Result update(@RequestBody SysUserDTO dto) { + //效验数据 + ValidatorUtils.validateEntity(dto, UpdateGroup.class, DefaultGroup.class); + + sysUserService.update(dto); + + return new Result(); + } + + @PutMapping("app") + @Operation(summary = "修改") + @LogOperation("修改") + @RequiresPermissions("sys:user:update") + public Result updateUserInfo(@RequestBody SysUserDTO dto) { + sysUserService.updateUserInfo(dto); + + return new Result(); + } + + @DeleteMapping + @Operation(summary = "删除") + @LogOperation("删除") + @RequiresPermissions("sys:user:delete") + public Result delete(@RequestBody Long[] ids) { + //效验数据 + AssertUtils.isArrayEmpty(ids, "id"); + + List idList = Arrays.asList(ids); + if (idList.contains(SecurityUser.getUserId())) { + throw new RenException(ErrorCode.DEL_MYSELF_ERROR); + } + + sysUserService.deleteBatchIds(idList); + + return new Result(); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java new file mode 100644 index 00000000..08aaca5b --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictDataDao.java @@ -0,0 +1,23 @@ +package xiaozhi.modules.sys.dao; + +import xiaozhi.common.dao.BaseDao; +import xiaozhi.modules.sys.dto.SysDictDataDTO; +import xiaozhi.modules.sys.entity.DictData; +import xiaozhi.modules.sys.entity.SysDictDataEntity; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 字典数据 + */ +@Mapper +public interface SysDictDataDao extends BaseDao { + + /** + * 字典数据列表 + */ + List getDictDataList(); + + List getDataByTypeCode(String dictType); +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java new file mode 100644 index 00000000..bca8e789 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysDictTypeDao.java @@ -0,0 +1,21 @@ +package xiaozhi.modules.sys.dao; + +import xiaozhi.common.dao.BaseDao; +import xiaozhi.modules.sys.entity.DictType; +import xiaozhi.modules.sys.entity.SysDictTypeEntity; +import org.apache.ibatis.annotations.Mapper; + +import java.util.List; + +/** + * 字典类型 + */ +@Mapper +public interface SysDictTypeDao extends BaseDao { + + /** + * 字典类型列表 + */ + List getDictTypeList(); + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysParamsDao.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysParamsDao.java new file mode 100644 index 00000000..0c967a74 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysParamsDao.java @@ -0,0 +1,38 @@ +package xiaozhi.modules.sys.dao; + +import xiaozhi.common.dao.BaseDao; +import xiaozhi.modules.sys.entity.SysParamsEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 参数管理 + */ +@Mapper +public interface SysParamsDao extends BaseDao { + /** + * 根据参数编码,查询value + * + * @param paramCode 参数编码 + * @return 参数值 + */ + String getValueByCode(String paramCode); + + /** + * 获取参数编码列表 + * + * @param ids ids + * @return 返回参数编码列表 + */ + List getParamCodeList(Long[] ids); + + /** + * 根据参数编码,更新value + * + * @param paramCode 参数编码 + * @param paramValue 参数值 + */ + int updateValueByCode(@Param("paramCode") String paramCode, @Param("paramValue") String paramValue); +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysUserDao.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysUserDao.java new file mode 100644 index 00000000..08c48a4d --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dao/SysUserDao.java @@ -0,0 +1,34 @@ +package xiaozhi.modules.sys.dao; + +import xiaozhi.common.dao.BaseDao; +import xiaozhi.modules.sys.entity.SysUserEntity; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +/** + * 系统用户 + */ +@Mapper +public interface SysUserDao extends BaseDao { + + List getList(Map params); + + SysUserEntity getById(Long id); + + SysUserEntity getByUsername(String username); + + int updatePassword(@Param("id") Long id, @Param("newPassword") String newPassword); + + /** + * 根据部门ID,查询用户数 + */ + int getCountByDeptId(Long deptId); + + /** + * 根据部门ID,查询用户ID列表 + */ + List getUserIdListByDeptId(List deptIdList); +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/PasswordDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/PasswordDTO.java new file mode 100644 index 00000000..1ecadc68 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/PasswordDTO.java @@ -0,0 +1,24 @@ +package xiaozhi.modules.sys.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import lombok.Data; + +import java.io.Serializable; + +/** + * 修改密码 + */ +@Data +@Schema(description = "修改密码") +public class PasswordDTO implements Serializable { + + @Schema(description = "原密码") + @NotBlank(message = "{sysuser.password.require}") + private String password; + + @Schema(description = "新密码") + @NotBlank(message = "{sysuser.password.require}") + private String newPassword; + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictDataDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictDataDTO.java new file mode 100644 index 00000000..172e6b1f --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictDataDTO.java @@ -0,0 +1,59 @@ +package xiaozhi.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import xiaozhi.common.utils.DateUtils; +import xiaozhi.common.validator.group.AddGroup; +import xiaozhi.common.validator.group.DefaultGroup; +import xiaozhi.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 字典数据 + */ +@Data +@Schema(description = "字典数据") +public class SysDictDataDTO implements Serializable { + + + @Schema(description = "id") + @Null(message = "{id.null}", groups = AddGroup.class) + @NotNull(message = "{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(description = "字典类型ID") + @NotNull(message = "{sysdict.type.require}", groups = DefaultGroup.class) + private Long dictTypeId; + + @Schema(description = "字典标签") + @NotBlank(message = "{sysdict.label.require}", groups = DefaultGroup.class) + private String dictLabel; + + @Schema(description = "字典值") + private String dictValue; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "排序") + @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) + private Integer sort; + + @Schema(description = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date createDate; + + @Schema(description = "更新时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date updateDate; +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java new file mode 100644 index 00000000..72648109 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysDictTypeDTO.java @@ -0,0 +1,55 @@ +package xiaozhi.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import xiaozhi.common.utils.DateUtils; +import xiaozhi.common.validator.group.AddGroup; +import xiaozhi.common.validator.group.DefaultGroup; +import xiaozhi.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Min; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 字典类型 + */ +@Data +@Schema(description = "字典类型") +public class SysDictTypeDTO implements Serializable { + + + @Schema(description = "id") + @Null(message = "{id.null}", groups = AddGroup.class) + @NotNull(message = "{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(description = "字典类型") + @NotBlank(message = "{sysdict.type.require}", groups = DefaultGroup.class) + private String dictType; + + @Schema(description = "字典名称") + @NotBlank(message = "{sysdict.name.require}", groups = DefaultGroup.class) + private String dictName; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "排序") + @Min(value = 0, message = "{sort.number}", groups = DefaultGroup.class) + private Integer sort; + + @Schema(description = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date createDate; + + @Schema(description = "更新时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Date updateDate; +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysParamsDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysParamsDTO.java new file mode 100644 index 00000000..4b72ce34 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysParamsDTO.java @@ -0,0 +1,52 @@ +package xiaozhi.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import xiaozhi.common.utils.DateUtils; +import xiaozhi.common.validator.group.AddGroup; +import xiaozhi.common.validator.group.DefaultGroup; +import xiaozhi.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * 参数管理 + */ +@Data +@Schema(description = "参数管理") +public class SysParamsDTO implements Serializable { + + + @Schema(description = "id") + @Null(message = "{id.null}", groups = AddGroup.class) + @NotNull(message = "{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(description = "参数编码") + @NotBlank(message = "{sysparams.paramcode.require}", groups = DefaultGroup.class) + private String paramCode; + + @Schema(description = "参数值") + @NotBlank(message = "{sysparams.paramvalue.require}", groups = DefaultGroup.class) + private String paramValue; + + @Schema(description = "备注") + private String remark; + + @Schema(description = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date createDate; + + @Schema(description = "更新时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date updateDate; + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysUserDTO.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysUserDTO.java new file mode 100644 index 00000000..00f7fc78 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/dto/SysUserDTO.java @@ -0,0 +1,85 @@ +package xiaozhi.modules.sys.dto; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import xiaozhi.common.utils.DateUtils; +import xiaozhi.common.validator.group.AddGroup; +import xiaozhi.common.validator.group.DefaultGroup; +import xiaozhi.common.validator.group.UpdateGroup; +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Null; +import lombok.Data; +import org.hibernate.validator.constraints.Range; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + +/** + * 用户管理 + */ +@Data +@Schema(description = "用户管理") +public class SysUserDTO implements Serializable { + @Schema(description = "id") + @Null(message = "{id.null}", groups = AddGroup.class) + @NotNull(message = "{id.require}", groups = UpdateGroup.class) + private Long id; + + @Schema(description = "用户名", required = true) + @NotBlank(message = "{sysuser.username.require}", groups = DefaultGroup.class) + private String username; + + @Schema(description = "密码") + @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) + @NotBlank(message = "{sysuser.password.require}", groups = AddGroup.class) + private String password; + + @Schema(description = "姓名", required = true) + @NotBlank(message = "{sysuser.realname.require}", groups = DefaultGroup.class) + private String realName; + + @Schema(description = "头像") + private String headUrl; + + @Schema(description = "性别 0:男 1:女 2:保密", required = true) + @Range(min = 0, max = 2, message = "{sysuser.gender.range}", groups = DefaultGroup.class) + private Integer gender; + + @Schema(description = "邮箱") + @Email(message = "{sysuser.email.error}", groups = DefaultGroup.class) + private String email; + + @Schema(description = "手机号") + private String mobile; + + @Schema(description = "部门ID", required = true) + @NotNull(message = "{sysuser.deptId.require}", groups = DefaultGroup.class) + private Long deptId; + + @Schema(description = "状态 0:停用 1:正常", required = true) + @Range(min = 0, max = 1, message = "{sysuser.status.range}", groups = DefaultGroup.class) + private Integer status; + + @Schema(description = "创建时间") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + @JsonFormat(pattern = DateUtils.DATE_TIME_PATTERN) + private Date createDate; + + @Schema(description = "超级管理员 0:否 1:是") + @JsonProperty(access = JsonProperty.Access.READ_ONLY) + private Integer superAdmin; + + @Schema(description = "角色ID列表") + private List roleIdList; + + @Schema(description = "岗位ID列表") + private List postIdList; + + @Schema(description = "部门名称") + private String deptName; + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictData.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictData.java new file mode 100644 index 00000000..1e16a192 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictData.java @@ -0,0 +1,15 @@ +package xiaozhi.modules.sys.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +/** + * 字典数据 + */ +@Data +public class DictData { + @JsonIgnore + private Long dictTypeId; + private String dictLabel; + private String dictValue; +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictType.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictType.java new file mode 100644 index 00000000..3cf94606 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/DictType.java @@ -0,0 +1,18 @@ +package xiaozhi.modules.sys.entity; + +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +/** + * 字典类型 + */ +@Data +public class DictType { + @JsonIgnore + private Long id; + private String dictType; + private List dataList = new ArrayList<>(); +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictDataEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictDataEntity.java new file mode 100644 index 00000000..4bfa4b62 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictDataEntity.java @@ -0,0 +1,49 @@ +package xiaozhi.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import xiaozhi.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 数据字典 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_dict_data") +public class SysDictDataEntity extends BaseEntity { + /** + * 字典类型ID + */ + private Long dictTypeId; + /** + * 字典标签 + */ + private String dictLabel; + /** + * 字典值 + */ + private String dictValue; + /** + * 备注 + */ + private String remark; + /** + * 排序 + */ + private Integer sort; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java new file mode 100644 index 00000000..ea752c63 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysDictTypeEntity.java @@ -0,0 +1,45 @@ +package xiaozhi.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import xiaozhi.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 字典类型 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_dict_type") +public class SysDictTypeEntity extends BaseEntity { + /** + * 字典类型 + */ + private String dictType; + /** + * 字典名称 + */ + private String dictName; + /** + * 备注 + */ + private String remark; + /** + * 排序 + */ + private Integer sort; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysParamsEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysParamsEntity.java new file mode 100644 index 00000000..054e51d7 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysParamsEntity.java @@ -0,0 +1,46 @@ +package xiaozhi.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import xiaozhi.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 参数管理 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_params") +public class SysParamsEntity extends BaseEntity { + /** + * 参数编码 + */ + private String paramCode; + /** + * 参数值 + */ + private String paramValue; + /** + * 类型 0:系统参数 1:非系统参数 + */ + private Integer paramType; + /** + * 备注 + */ + private String remark; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java new file mode 100644 index 00000000..a5d14a71 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/entity/SysUserEntity.java @@ -0,0 +1,75 @@ +package xiaozhi.modules.sys.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableName; +import xiaozhi.common.entity.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * 系统用户 + */ +@Data +@EqualsAndHashCode(callSuper = false) +@TableName("sys_user") +public class SysUserEntity extends BaseEntity { + /** + * 用户名 + */ + private String username; + /** + * 密码 + */ + private String password; + /** + * 姓名 + */ + private String realName; + /** + * 头像 + */ + private String headUrl; + /** + * 性别 0:男 1:女 2:保密 + */ + private Integer gender; + /** + * 邮箱 + */ + private String email; + /** + * 手机号 + */ + private String mobile; + /** + * 部门ID + */ + private Long deptId; + /** + * 超级管理员 0:否 1:是 + */ + private Integer superAdmin; + /** + * 状态 0:停用 1:正常 + */ + private Integer status; + /** + * 更新者 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Long updater; + /** + * 更新时间 + */ + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateDate; + /** + * 部门名称 + */ + @TableField(exist = false) + private String deptName; + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/enums/SuperAdminEnum.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/enums/SuperAdminEnum.java new file mode 100644 index 00000000..655f46e6 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/enums/SuperAdminEnum.java @@ -0,0 +1,19 @@ +package xiaozhi.modules.sys.enums; + +/** + * 超级管理员枚举 + */ +public enum SuperAdminEnum { + YES(1), + NO(0); + + private int value; + + SuperAdminEnum(int value) { + this.value = value; + } + + public int value() { + return this.value; + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/redis/SysParamsRedis.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/redis/SysParamsRedis.java new file mode 100644 index 00000000..dcc14f69 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/redis/SysParamsRedis.java @@ -0,0 +1,34 @@ +package xiaozhi.modules.sys.redis; + +import xiaozhi.common.redis.RedisKeys; +import xiaozhi.common.redis.RedisUtils; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Component; + +/** + * 参数管理 + */ +@AllArgsConstructor +@Component +public class SysParamsRedis { + private final RedisUtils redisUtils; + + public void delete(Object[] paramCodes) { + String key = RedisKeys.getSysParamsKey(); + redisUtils.hDel(key, paramCodes); + } + + public void set(String paramCode, String paramValue) { + if (paramValue == null) { + return; + } + String key = RedisKeys.getSysParamsKey(); + redisUtils.hSet(key, paramCode, paramValue); + } + + public String get(String paramCode) { + String key = RedisKeys.getSysParamsKey(); + return (String) redisUtils.hGet(key, paramCode); + } + +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java new file mode 100644 index 00000000..77be8b3a --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictDataService.java @@ -0,0 +1,25 @@ +package xiaozhi.modules.sys.service; + +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.BaseService; +import xiaozhi.modules.sys.dto.SysDictDataDTO; +import xiaozhi.modules.sys.entity.SysDictDataEntity; + +import java.util.Map; + +/** + * 数据字典 + */ +public interface SysDictDataService extends BaseService { + + PageData page(Map params); + + SysDictDataDTO get(Long id); + + void save(SysDictDataDTO dto); + + void update(SysDictDataDTO dto); + + void delete(Long[] ids); + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java new file mode 100644 index 00000000..8924f6ca --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysDictTypeService.java @@ -0,0 +1,30 @@ +package xiaozhi.modules.sys.service; + +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.BaseService; +import xiaozhi.modules.sys.dto.SysDictTypeDTO; +import xiaozhi.modules.sys.entity.DictType; +import xiaozhi.modules.sys.entity.SysDictTypeEntity; + +import java.util.List; +import java.util.Map; + +/** + * 数据字典 + */ +public interface SysDictTypeService extends BaseService { + + PageData page(Map params); + + SysDictTypeDTO get(Long id); + + void save(SysDictTypeDTO dto); + + void update(SysDictTypeDTO dto); + + void delete(Long[] ids); + + List getAllList(); + + List getDictTypeList(); +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysParamsService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysParamsService.java new file mode 100644 index 00000000..d13e41ba --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysParamsService.java @@ -0,0 +1,51 @@ +package xiaozhi.modules.sys.service; + + +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.BaseService; +import xiaozhi.modules.sys.dto.SysParamsDTO; +import xiaozhi.modules.sys.entity.SysParamsEntity; + +import java.util.List; +import java.util.Map; + +/** + * 参数管理 + */ +public interface SysParamsService extends BaseService { + + PageData page(Map params); + + List list(Map params); + + SysParamsDTO get(Long id); + + void save(SysParamsDTO dto); + + void update(SysParamsDTO dto); + + void delete(Long[] ids); + + /** + * 根据参数编码,获取参数的value值 + * + * @param paramCode 参数编码 + */ + String getValue(String paramCode); + + /** + * 根据参数编码,获取value的Object对象 + * + * @param paramCode 参数编码 + * @param clazz Object对象 + */ + T getValueObject(String paramCode, Class clazz); + + /** + * 根据参数编码,更新value + * + * @param paramCode 参数编码 + * @param paramValue 参数值 + */ + int updateValueByCode(String paramCode, String paramValue); +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java new file mode 100644 index 00000000..288c4cc0 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/SysUserService.java @@ -0,0 +1,67 @@ +package xiaozhi.modules.sys.service; + +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.BaseService; +import xiaozhi.modules.sys.dto.SysUserDTO; +import xiaozhi.modules.sys.entity.SysUserEntity; + +import java.util.List; +import java.util.Map; + + +/** + * 系统用户 + */ +public interface SysUserService extends BaseService { + + PageData page(Map params); + + List list(Map params); + + SysUserDTO get(Long id); + + SysUserDTO getByUsername(String username); + + void save(SysUserDTO dto); + + void update(SysUserDTO dto); + + void updateUserInfo(SysUserDTO dto); + + void delete(Long[] ids); + + /** + * 修改密码 + * + * @param id 用户ID + * @param newPassword 新密码 + */ + void updatePassword(Long id, String newPassword); + + /** + * 根据部门ID,查询用户数 + */ + int getCountByDeptId(Long deptId); + + /** + * 根据部门ID,查询用户Id列表 + */ + List getUserIdListByDeptId(List deptIdList); + + /** + * 删除用户缓存 + * + * @param userId + */ + void deleteUserCache(Long userId); + + /** + * 验证密码强度 + * + * @param newPassword + * @return + */ + boolean isStrongPassword(String newPassword); + + String getName(Long creator); +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/TokenService.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/TokenService.java new file mode 100644 index 00000000..d3839f70 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/TokenService.java @@ -0,0 +1,11 @@ +package xiaozhi.modules.sys.service; + +public interface TokenService { + /** + * 生成token + * + * @param userId + * @return + */ + String createToken(long userId); +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java new file mode 100644 index 00000000..a8420dc9 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictDataServiceImpl.java @@ -0,0 +1,77 @@ +package xiaozhi.modules.sys.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.impl.BaseServiceImpl; +import xiaozhi.common.utils.ConvertUtils; +import xiaozhi.modules.sys.dao.SysDictDataDao; +import xiaozhi.modules.sys.dto.SysDictDataDTO; +import xiaozhi.modules.sys.entity.SysDictDataEntity; +import xiaozhi.modules.sys.service.SysDictDataService; + +import java.util.Arrays; +import java.util.Map; + +/** + * 字典类型 + */ +@Service +public class SysDictDataServiceImpl extends BaseServiceImpl implements SysDictDataService { + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, "sort", true), + getWrapper(params) + ); + + return getPageData(page, SysDictDataDTO.class); + } + + private QueryWrapper getWrapper(Map params) { + String dictTypeId = (String) params.get("dictTypeId"); + String dictLabel = (String) params.get("dictLabel"); + String dictValue = (String) params.get("dictValue"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("dict_type_id", Long.parseLong(dictTypeId)); + wrapper.like(StringUtils.isNotBlank(dictLabel), "dict_label", dictLabel); + wrapper.like(StringUtils.isNotBlank(dictValue), "dict_value", dictValue); + + return wrapper; + } + + @Override + public SysDictDataDTO get(Long id) { + SysDictDataEntity entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, SysDictDataDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysDictDataDTO dto) { + SysDictDataEntity entity = ConvertUtils.sourceToTarget(dto, SysDictDataEntity.class); + + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysDictDataDTO dto) { + SysDictDataEntity entity = ConvertUtils.sourceToTarget(dto, SysDictDataEntity.class); + + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + //删除 + deleteBatchIds(Arrays.asList(ids)); + } +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictTypeServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictTypeServiceImpl.java new file mode 100644 index 00000000..01313e70 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysDictTypeServiceImpl.java @@ -0,0 +1,102 @@ +package xiaozhi.modules.sys.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.impl.BaseServiceImpl; +import xiaozhi.common.utils.ConvertUtils; +import xiaozhi.modules.sys.dao.SysDictDataDao; +import xiaozhi.modules.sys.dao.SysDictTypeDao; +import xiaozhi.modules.sys.dto.SysDictTypeDTO; +import xiaozhi.modules.sys.entity.DictData; +import xiaozhi.modules.sys.entity.DictType; +import xiaozhi.modules.sys.entity.SysDictTypeEntity; +import xiaozhi.modules.sys.service.SysDictTypeService; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 字典类型 + */ +@AllArgsConstructor +@Service +public class SysDictTypeServiceImpl extends BaseServiceImpl implements SysDictTypeService { + private final SysDictDataDao sysDictDataDao; + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, "sort", true), + getWrapper(params) + ); + + return getPageData(page, SysDictTypeDTO.class); + } + + private QueryWrapper getWrapper(Map params) { + String dictType = (String) params.get("dictType"); + String dictName = (String) params.get("dictName"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.like(StringUtils.isNotBlank(dictType), "dict_type", dictType); + wrapper.like(StringUtils.isNotBlank(dictName), "dict_name", dictName); + + return wrapper; + } + + @Override + public SysDictTypeDTO get(Long id) { + SysDictTypeEntity entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, SysDictTypeDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysDictTypeDTO dto) { + SysDictTypeEntity entity = ConvertUtils.sourceToTarget(dto, SysDictTypeEntity.class); + + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysDictTypeDTO dto) { + SysDictTypeEntity entity = ConvertUtils.sourceToTarget(dto, SysDictTypeEntity.class); + + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + //删除 + deleteBatchIds(Arrays.asList(ids)); + } + + @Override + public List getAllList() { + List typeList = baseDao.getDictTypeList(); + List dataList = sysDictDataDao.getDictDataList(); + for (DictType type : typeList) { + for (DictData data : dataList) { + if (type.getId().equals(data.getDictTypeId())) { + type.getDataList().add(data); + } + } + } + return typeList; + } + + @Override + public List getDictTypeList() { + return baseDao.getDictTypeList(); + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java new file mode 100644 index 00000000..558a27ec --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysParamsServiceImpl.java @@ -0,0 +1,131 @@ +package xiaozhi.modules.sys.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import xiaozhi.common.constant.Constant; +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.exception.RenException; +import xiaozhi.common.page.PageData; +import xiaozhi.common.service.impl.BaseServiceImpl; +import xiaozhi.common.utils.ConvertUtils; +import xiaozhi.common.utils.JsonUtils; +import xiaozhi.modules.sys.dao.SysParamsDao; +import xiaozhi.modules.sys.dto.SysParamsDTO; +import xiaozhi.modules.sys.entity.SysParamsEntity; +import xiaozhi.modules.sys.redis.SysParamsRedis; +import xiaozhi.modules.sys.service.SysParamsService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +/** + * 参数管理 + */ +@AllArgsConstructor +@Service +public class SysParamsServiceImpl extends BaseServiceImpl implements SysParamsService { + private final SysParamsRedis sysParamsRedis; + + @Override + public PageData page(Map params) { + IPage page = baseDao.selectPage( + getPage(params, Constant.CREATE_DATE, false), + getWrapper(params) + ); + + return getPageData(page, SysParamsDTO.class); + } + + @Override + public List list(Map params) { + List entityList = baseDao.selectList(getWrapper(params)); + + return ConvertUtils.sourceToTarget(entityList, SysParamsDTO.class); + } + + private QueryWrapper getWrapper(Map params) { + String paramCode = (String) params.get("paramCode"); + + QueryWrapper wrapper = new QueryWrapper<>(); + wrapper.eq("param_type", 1); + wrapper.like(StringUtils.isNotBlank(paramCode), "param_code", paramCode); + + return wrapper; + } + + @Override + public SysParamsDTO get(Long id) { + SysParamsEntity entity = baseDao.selectById(id); + + return ConvertUtils.sourceToTarget(entity, SysParamsDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysParamsDTO dto) { + SysParamsEntity entity = ConvertUtils.sourceToTarget(dto, SysParamsEntity.class); + insert(entity); + + sysParamsRedis.set(entity.getParamCode(), entity.getParamValue()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysParamsDTO dto) { + SysParamsEntity entity = ConvertUtils.sourceToTarget(dto, SysParamsEntity.class); + updateById(entity); + + sysParamsRedis.set(entity.getParamCode(), entity.getParamValue()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + //删除Redis数据 + List paramCodeList = baseDao.getParamCodeList(ids); + String[] paramCodes = paramCodeList.toArray(new String[paramCodeList.size()]); + sysParamsRedis.delete(paramCodes); + + //删除 + deleteBatchIds(Arrays.asList(ids)); + } + + @Override + public String getValue(String paramCode) { + String paramValue = sysParamsRedis.get(paramCode); + if (paramValue == null) { + paramValue = baseDao.getValueByCode(paramCode); + + sysParamsRedis.set(paramCode, paramValue); + } + return paramValue; + } + + @Override + public T getValueObject(String paramCode, Class clazz) { + String paramValue = getValue(paramCode); + if (StringUtils.isNotBlank(paramValue)) { + return JsonUtils.parseObject(paramValue, clazz); + } + + try { + return clazz.newInstance(); + } catch (Exception e) { + throw new RenException(ErrorCode.PARAMS_GET_ERROR); + } + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int updateValueByCode(String paramCode, String paramValue) { + int count = baseDao.updateValueByCode(paramCode, paramValue); + sysParamsRedis.set(paramCode, paramValue); + return count; + } + +} \ No newline at end of file diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java new file mode 100644 index 00000000..c9960b07 --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/SysUserServiceImpl.java @@ -0,0 +1,181 @@ +package xiaozhi.modules.sys.service.impl; + +import com.baomidou.mybatisplus.core.metadata.IPage; +import xiaozhi.common.exception.ErrorCode; +import xiaozhi.common.exception.RenException; +import xiaozhi.common.page.PageData; +import xiaozhi.common.redis.RedisKeys; +import xiaozhi.common.redis.RedisUtils; +import xiaozhi.common.service.impl.BaseServiceImpl; +import xiaozhi.common.user.UserDetail; +import xiaozhi.common.utils.ConvertUtils; +import xiaozhi.modules.security.password.PasswordUtils; +import xiaozhi.modules.security.user.SecurityUser; +import xiaozhi.modules.sys.dao.SysUserDao; +import xiaozhi.modules.sys.dto.SysUserDTO; +import xiaozhi.modules.sys.entity.SysUserEntity; +import xiaozhi.modules.sys.enums.SuperAdminEnum; +import xiaozhi.modules.sys.service.SysUserService; +import lombok.AllArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +/** + * 系统用户 + */ +@AllArgsConstructor +@Service +public class SysUserServiceImpl extends BaseServiceImpl implements SysUserService { + private final RedisUtils redisUtils; + + @Override + public PageData page(Map params) { + //转换成like + paramsToLike(params, "username"); + + //分页 + IPage page = getPage(params, "t1.create_date", false); + + //查询 + List list = baseDao.getList(params); + + return getPageData(list, page.getTotal(), SysUserDTO.class); + } + + @Override + public List list(Map params) { + + List entityList = baseDao.getList(params); + + return ConvertUtils.sourceToTarget(entityList, SysUserDTO.class); + } + + @Override + public SysUserDTO get(Long id) { + SysUserEntity entity = baseDao.getById(id); + + return ConvertUtils.sourceToTarget(entity, SysUserDTO.class); + } + + @Override + public SysUserDTO getByUsername(String username) { + SysUserEntity entity = baseDao.getByUsername(username); + return ConvertUtils.sourceToTarget(entity, SysUserDTO.class); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void save(SysUserDTO dto) { + SysUserEntity entity = ConvertUtils.sourceToTarget(dto, SysUserEntity.class); + + //密码强度 + if (!isStrongPassword(entity.getPassword())) { + throw new RenException(ErrorCode.PASSWORD_WEAK_ERROR); + } + + //密码加密 + String password = PasswordUtils.encode(entity.getPassword()); + entity.setPassword(password); + + //保存用户 + entity.setSuperAdmin(SuperAdminEnum.NO.value()); + insert(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void update(SysUserDTO dto) { + SysUserEntity entity = ConvertUtils.sourceToTarget(dto, SysUserEntity.class); + + //密码加密 + if (StringUtils.isBlank(dto.getPassword())) { + entity.setPassword(null); + } else { + //密码强度 + if (!isStrongPassword(entity.getPassword())) { + throw new RenException(ErrorCode.PASSWORD_WEAK_ERROR); + } + String password = PasswordUtils.encode(entity.getPassword()); + entity.setPassword(password); + } + + //更新用户 + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updateUserInfo(SysUserDTO dto) { + SysUserEntity entity = selectById(dto.getId()); + entity.setHeadUrl(dto.getHeadUrl()); + entity.setRealName(dto.getRealName()); + entity.setGender(dto.getGender()); + entity.setMobile(dto.getMobile()); + entity.setEmail(dto.getEmail()); + + updateById(entity); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void delete(Long[] ids) { + //删除用户 + baseDao.deleteBatchIds(Arrays.asList(ids)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void updatePassword(Long id, String newPassword) { + newPassword = PasswordUtils.encode(newPassword); + + baseDao.updatePassword(id, newPassword); + } + + @Override + public int getCountByDeptId(Long deptId) { + return baseDao.getCountByDeptId(deptId); + } + + @Override + public List getUserIdListByDeptId(List deptIdList) { + return baseDao.getUserIdListByDeptId(deptIdList); + } + + @Override + public void deleteUserCache(Long userId) { + // 删除缓存 + redisUtils.delete(RedisKeys.getUserInfoKey(userId)); + redisUtils.delete(RedisKeys.getDataScopeListKey(userId)); + redisUtils.delete(RedisKeys.getSysUserName(userId)); + } + + @Override + public boolean isStrongPassword(String password) { + // 弱密码的正则表达式 + String weakPasswordRegex = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).+$"; + Pattern pattern = Pattern.compile(weakPasswordRegex); + Matcher matcher = pattern.matcher(password); + return matcher.matches(); + } + + @Override + public String getName(Long id) { + String name = (String) redisUtils.get(RedisKeys.getSysUserName(id)); + if (StringUtils.isBlank(name)) { + SysUserEntity sysUserEntity = selectById(id); + if (sysUserEntity != null) { + redisUtils.set(RedisKeys.getSysUserName(id), sysUserEntity.getUsername()); + return sysUserEntity.getUsername(); + } + } + return name; + } +} diff --git a/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/TokenServiceImpl.java b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/TokenServiceImpl.java new file mode 100644 index 00000000..e4f9564e --- /dev/null +++ b/main/manager-api/src/main/java/xiaozhi/modules/sys/service/impl/TokenServiceImpl.java @@ -0,0 +1,31 @@ +package xiaozhi.modules.sys.service.impl; + +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; +import xiaozhi.common.redis.RedisUtils; +import xiaozhi.modules.security.oauth2.TokenGenerator; +import xiaozhi.modules.sys.service.TokenService; + +import java.util.Date; + +@AllArgsConstructor +@Service +public class TokenServiceImpl implements TokenService { + private final RedisUtils redisUtils; + /** + * 3小时无操作过期 + */ + private final static int EXPIRE = 60 * 60 * 3; + + @Override + public String createToken(long userId) { + //生成一个token + String token = TokenGenerator.generateValue(); + + //当前时间 + Date now = new Date(); + //过期时间 + Date expireTime = new Date(now.getTime() + EXPIRE * 1000); + return token; + } +} diff --git a/main/manager-api/src/main/resources/application-dev.yml b/main/manager-api/src/main/resources/application-dev.yml new file mode 100644 index 00000000..a8fdf21f --- /dev/null +++ b/main/manager-api/src/main/resources/application-dev.yml @@ -0,0 +1,44 @@ +knife4j: + production: false + enable: true + basic: + enable: false + username: renren + password: 2ZABCDEUgF + setting: + enableFooter: false +jasypt: + encryptor: + password: P9Hx718z8L +spring: + datasource: + druid: + #MySQL + driver-class-name: com.mysql.cj.jdbc.Driver + url: jdbc:mysql://localhost:3306/xiaozhi_esp32_server?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&nullCatalogMeansCurrent=true + username: root + password: 123456 + initial-size: 10 + max-active: 100 + min-idle: 10 + max-wait: 6000 + pool-prepared-statements: true + max-pool-prepared-statement-per-connection-size: 20 + time-between-eviction-runs-millis: 60000 + min-evictable-idle-time-millis: 300000 + test-while-idle: true + test-on-borrow: false + test-on-return: false + stat-view-servlet: + enabled: true + url-pattern: /druid/* + login-username: admin + login-password: D7Xj810i1C + filter: + stat: + log-slow-sql: true + slow-sql-millis: 1000 + merge-sql: false + wall: + config: + multi-statement-allow: true \ No newline at end of file diff --git a/main/manager-api/src/main/resources/application.yml b/main/manager-api/src/main/resources/application.yml new file mode 100644 index 00000000..0b0e6281 --- /dev/null +++ b/main/manager-api/src/main/resources/application.yml @@ -0,0 +1,79 @@ +# Tomcat +server: + tomcat: + uri-encoding: UTF-8 + threads: + max: 1000 + min-spare: 30 + port: 8002 + servlet: + context-path: /xiaozhi-esp32-api + session: + cookie: + http-only: true + +spring: + # 环境 dev|test|prod + profiles: + active: dev + messages: + encoding: UTF-8 + basename: i18n/messages + servlet: + multipart: + max-file-size: 100MB + max-request-size: 100MB + enabled: true + data: + redis: + database: 0 + host: 127.0.0.1 + port: 6379 + password: # 密码(默认为空) + timeout: 6000ms # 连接超时时长(毫秒) + lettuce: + pool: + max-active: 1000 # 连接池最大连接数(使用负值表示没有限制) + max-wait: -1ms # 连接池最大阻塞等待时间(使用负值表示没有限制) + max-idle: 10 # 连接池中的最大空闲连接 + min-idle: 5 # 连接池中的最小空闲连接 + main: + allow-bean-definition-overriding: true + +knife4j: + enable: true + basic: + enable: false + username: admin + password: admin + setting: + enableFooter: false + +renren: + redis: + open: false + xss: + enabled: true + exclude-urls: + +#mybatis +mybatis-plus: + mapper-locations: classpath*:/mapper/**/*.xml + #实体扫描,多个package用逗号或者分号分隔 + typeAliasesPackage: xiaozhi.modules.*.entity + global-config: + #数据库相关配置 + db-config: + #主键类型 + id-type: ASSIGN_ID + banner: false + #原生配置 + configuration: + map-underscore-to-camel-case: true + cache-enabled: false + call-setters-on-nulls: true + jdbc-type-for-null: 'null' + configuration-properties: + prefix: + blobType: BLOB + boolValue: TRUE \ No newline at end of file diff --git a/main/manager-api/src/main/resources/db/changelog/001create_sys.sql b/main/manager-api/src/main/resources/db/changelog/001create_sys.sql new file mode 100644 index 00000000..c5bb0cdf --- /dev/null +++ b/main/manager-api/src/main/resources/db/changelog/001create_sys.sql @@ -0,0 +1,84 @@ +DROP TABLE IF EXISTS sys_user; +DROP TABLE IF EXISTS sys_params; +DROP TABLE IF EXISTS sys_user_token; +DROP TABLE IF EXISTS sys_dict_type; +DROP TABLE IF EXISTS sys_dict_data; + +-- 系统用户 +CREATE TABLE sys_user ( + id bigint NOT NULL COMMENT 'id', + username varchar(50) NOT NULL COMMENT '用户名', + password varchar(100) COMMENT '密码', + super_admin tinyint unsigned COMMENT '超级管理员 0:否 1:是', + status tinyint COMMENT '状态 0:停用 1:正常', + create_date datetime COMMENT '创建时间', + updater bigint COMMENT '更新者', + update_date datetime COMMENT '更新时间', + primary key (id), + unique key uk_username (username), + key idx_create_date (create_date) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户'; + +-- 系统用户Token +CREATE TABLE sys_user_token ( + id bigint NOT NULL COMMENT 'id', + user_id bigint NOT NULL COMMENT '用户id', + token varchar(100) NOT NULL COMMENT '用户token', + expire_date datetime COMMENT '过期时间', + update_date datetime COMMENT '更新时间', + create_date datetime COMMENT '创建时间', + PRIMARY KEY (id), + UNIQUE KEY user_id (user_id), + UNIQUE KEY token (token) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统用户Token'; + +-- 参数管理 +create table sys_params +( + id bigint NOT NULL COMMENT 'id', + param_code varchar(32) COMMENT '参数编码', + param_value varchar(2000) COMMENT '参数值', + param_type tinyint unsigned default 1 COMMENT '类型 0:系统参数 1:非系统参数', + remark varchar(200) COMMENT '备注', + creator bigint COMMENT '创建者', + create_date datetime COMMENT '创建时间', + updater bigint COMMENT '更新者', + update_date datetime COMMENT '更新时间', + primary key (id), + unique key uk_param_code (param_code), + key idx_create_date (create_date) +)ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='参数管理'; + +-- 字典类型 +create table sys_dict_type +( + id bigint NOT NULL COMMENT 'id', + dict_type varchar(100) NOT NULL COMMENT '字典类型', + dict_name varchar(255) NOT NULL COMMENT '字典名称', + remark varchar(255) COMMENT '备注', + sort int unsigned COMMENT '排序', + creator bigint COMMENT '创建者', + create_date datetime COMMENT '创建时间', + updater bigint COMMENT '更新者', + update_date datetime COMMENT '更新时间', + primary key (id), + UNIQUE KEY(dict_type) +)ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='字典类型'; + +-- 字典数据 +create table sys_dict_data +( + id bigint NOT NULL COMMENT 'id', + dict_type_id bigint NOT NULL COMMENT '字典类型ID', + dict_label varchar(255) NOT NULL COMMENT '字典标签', + dict_value varchar(255) COMMENT '字典值', + remark varchar(255) COMMENT '备注', + sort int unsigned COMMENT '排序', + creator bigint COMMENT '创建者', + create_date datetime COMMENT '创建时间', + updater bigint COMMENT '更新者', + update_date datetime COMMENT '更新时间', + primary key (id), + unique key uk_dict_type_value (dict_type_id, dict_value), + key idx_sort (sort) +)ENGINE=InnoDB DEFAULT CHARACTER SET utf8mb4 COMMENT='字典数据'; \ No newline at end of file diff --git a/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml new file mode 100755 index 00000000..73d916fa --- /dev/null +++ b/main/manager-api/src/main/resources/db/changelog/db.changelog-master.yaml @@ -0,0 +1,11 @@ +# 规范约定: +# id生成根据时间时分,文件名对应id +# 每次对数据表进行改动时,只允许新建新对changeSet,不允许对上一个changeSet配置及文件进行修改 +databaseChangeLog: + - changeSet: + id: 001create_sys + author: John + changes: + - sqlFile: + encoding: utf8 + path: classpath:db/changelog/001create_sys.sql \ No newline at end of file diff --git a/main/manager-api/src/main/resources/i18n/messages.properties b/main/manager-api/src/main/resources/i18n/messages.properties new file mode 100644 index 00000000..c4e78e94 --- /dev/null +++ b/main/manager-api/src/main/resources/i18n/messages.properties @@ -0,0 +1,54 @@ +#Default +500=\u670D\u52A1\u5668\u5185\u90E8\u5F02\u5E38 +401=\u672A\u6388\u6743 +403=\u62D2\u7EDD\u8BBF\u95EE\uFF0C\u6CA1\u6709\u6743\u9650 +10001={0}\u4E0D\u80FD\u4E3A\u7A7A +10002=\u6570\u636E\u5E93\u4E2D\u5DF2\u5B58\u5728\u8BE5\u8BB0\u5F55 +10003=\u83B7\u53D6\u53C2\u6570\u5931\u8D25 +10004=\u8D26\u53F7\u6216\u5BC6\u7801\u9519\u8BEF +10005=\u8D26\u53F7\u5DF2\u88AB\u505C\u7528 +10006=\u552F\u4E00\u6807\u8BC6\u4E0D\u80FD\u4E3A\u7A7A +10007=\u9A8C\u8BC1\u7801\u4E0D\u6B63\u786E +10008=\u5148\u5220\u9664\u5B50\u83DC\u5355\u6216\u6309\u94AE +10009=\u539F\u5BC6\u7801\u4E0D\u6B63\u786E +10010=\u8D26\u53F7\u6216\u5BC6\u7801\u4E0D\u6B63\u786E,\u60A8\u8FD8\u6709\u53EF\u4EE5\u5C1D\u8BD5{0}\u6B21 +10011=\u4E0A\u7EA7\u90E8\u95E8\u9009\u62E9\u9519\u8BEF +10012=\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u4E3A\u81EA\u8EAB +10013=\u6570\u636E\u6743\u9650\u63A5\u53E3\uFF0C\u53EA\u80FD\u662FMap\u7C7B\u578B\u53C2\u6570 +10014=\u8BF7\u5148\u5220\u9664\u4E0B\u7EA7\u90E8\u95E8 +10015=\u8BF7\u5148\u5220\u9664\u90E8\u95E8\u4E0B\u7684\u7528\u6237 +10016=\u90E8\u7F72\u5931\u8D25\uFF0C\u6CA1\u6709\u6D41\u7A0B +10017=\u6A21\u578B\u56FE\u4E0D\u6B63\u786E\uFF0C\u8BF7\u68C0\u67E5 +10018=\u5BFC\u51FA\u5931\u8D25\uFF0C\u6A21\u578BID\u4E3A{0} +10019=\u8BF7\u4E0A\u4F20\u6587\u4EF6 +10020=token\u4E0D\u80FD\u4E3A\u7A7A +10021=token\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 +10022=\u8D26\u53F7\u5DF2\u88AB\u9501\u5B9A +10023=\u8BF7\u4E0A\u4F20zip\u3001bar\u3001bpmn\u3001bpmn20.xml\u683C\u5F0F\u6587\u4EF6 +10024=\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25{0} +10025=\u53D1\u9001\u77ED\u4FE1\u5931\u8D25{0} +10026=\u90AE\u4EF6\u6A21\u677F\u4E0D\u5B58\u5728 +10027=Redis\u670D\u52A1\u5F02\u5E38 +10028=\u5B9A\u65F6\u4EFB\u52A1\u5931\u8D25 +10029=\u4E0D\u80FD\u5305\u542B\u975E\u6CD5\u5B57\u7B26 +10030=\u53C2\u6570\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u8BF7\u4F7F\u7528JSON\u683C\u5F0F +10031=\u8BF7\u5148\u5B8C\u6210\u77ED\u4FE1\u914D\u7F6E +10032=\u4EFB\u52A1\u5DF2\u88AB\u7B7E\u6536\uFF0C\u64CD\u4F5C\u5931\u8D25 +10033=\u4E0D\u5B58\u5728\u7684\u6D41\u7A0B\u5B9A\u4E49 +10034=\u4E0A\u7EA7\u8282\u70B9\u4E0D\u5B58\u5728 +10035=\u9A73\u56DE +10036=\u56DE\u9000 +10037=\u4EFB\u52A1\u6CA1\u6709\u5206\u7EC4\uFF0C\u65E0\u6CD5\u53D6\u6D88\u8BA4\u9886 +10038=\u4E0A\u7EA7\u533A\u57DF\u9009\u62E9\u9519\u8BEF +10039=\u8BF7\u5148\u5220\u9664\u4E0B\u7EA7\u533A\u57DF +10040=\u6D41\u7A0B\u5DF2\u6302\u8D77\uFF0C\u4E0D\u80FD\u542F\u52A8\u5B9E\u4F8B +10041=\u591A\u5B9E\u4F8B\u4EFB\u52A1\u4E0D\u80FD\u9A73\u56DE +10042=\u5B58\u5728\u591A\u4E2A\u5904\u7406\u4E2D\u7684\u4EFB\u52A1\uFF0C\u4E0D\u80FD\u9A73\u56DE +10043=\u591A\u5B9E\u4F8B\u4EFB\u52A1\u4E0D\u80FD\u7EC8\u6B62 +10044=\u5B58\u5728\u591A\u4E2A\u5904\u7406\u4E2D\u7684\u4EFB\u52A1\uFF0C\u4E0D\u80FD\u7EC8\u6B62\u6D41\u7A0B +10045=\u7EC8\u6B62 +10046=\u591A\u5B9E\u4F8B\u4EFB\u52A1\u4E0D\u80FD\u56DE\u9000 +10047=\u5B58\u5728\u591A\u4E2A\u5E76\u884C\u6267\u884C\u7684\u4EFB\u52A1\uFF0C\u4E0D\u80FD\u56DE\u9000 +10048=\u767B\u5F55\u8D26\u53F7\uFF0C\u65E0\u6743\u5220\u9664 +10055=\u60A8\u7684\u5BC6\u7801\u957F\u5EA6\u4E0D\u591F8\u4F4D +10056=\u60A8\u7684\u5BC6\u7801\u590D\u6742\u5EA6\u4E0D\u591F\uFF0C\u9700\u8981\u540C\u65F6\u5305\u542B\u6570\u5B57,\u5C0F\u5199\u82F1\u6587,\u5927\u5199\u82F1\u6587 \ No newline at end of file diff --git a/main/manager-api/src/main/resources/i18n/messages_en_US.properties b/main/manager-api/src/main/resources/i18n/messages_en_US.properties new file mode 100644 index 00000000..573e038a --- /dev/null +++ b/main/manager-api/src/main/resources/i18n/messages_en_US.properties @@ -0,0 +1,54 @@ +#English +500=Server internal exception +401=Unauthorized +403=Access denied, no permissions +10001={0} cannot be empty +10002=The record already exists in the database +10003=Failed to get parameters +10004=The account number or password is incorrect. +10005=Account has been deactivated +10006=Unique ID cannot be empty +10007=The verification code is incorrect +10008=First delete submenu or button +10009=The original password is incorrect +10010=password error,you can try {0} times +10011=The superior department made a wrong choice +10012=Upper menu cannot be for itself +10013=Data permission interface, which can only be a Map type parameter. +10014=Please delete the subordinate department first +10015=Please delete the user under the department first +10016=Deployment failed, no process +10017=Model diagram is incorrect, please check +10018=The export failed with the model ID {0} +10019=Please upload a file +10020=token cannot be empty +10021=token is invalid, please log in again +10022=The account has been locked +10023=Please upload zip, bar, bpmn, bpmn20.xml format file +10024=Failed to upload file {0} +10025=Failed to send SMS {0} +10026=Mail template does not exist +10027=Redis service exception +10028=Timed task failed +10029=Cannot contain illegal characters +10030=The parameter format is incorrect. Please use JSON format. +10031=Please complete the SMS configuration first. +10032=Task has been signed and operation failed +10033=Non-existent process definition +10034=Superior node does not exist +10035=Reject +10036=Rollback +10037=Tasks are not grouped and cannot be cancelled +10038=Upper area selection error +10039=Please delete the subordinate area first +10040=The process has been suspended and the instance cannot be started +10041=Multi-instance tasks cannot be rejected +10042=Tasks in multiple processes cannot be rejected +10043=Multi-instance tasks cannot be terminated +10044=There are tasks in multiple processes that cannot terminate the process +10045=END +10046=Multi-instance tasks cannot be rolled back +10047=There are multiple parallel tasks that cannot be rolled back +10048 = Login account, no right to delete +10055=Your password length is less than 8 digits +10056=Your password is not complex enough and needs to include both numbers, lowercase English, and uppercase English \ No newline at end of file diff --git a/main/manager-api/src/main/resources/i18n/messages_zh_CN.properties b/main/manager-api/src/main/resources/i18n/messages_zh_CN.properties new file mode 100644 index 00000000..de062fd4 --- /dev/null +++ b/main/manager-api/src/main/resources/i18n/messages_zh_CN.properties @@ -0,0 +1,54 @@ +#\u7B80\u4F53\u4E2D\u6587 +500=\u670D\u52A1\u5668\u5185\u90E8\u5F02\u5E38 +401=\u672A\u6388\u6743 +403=\u62D2\u7EDD\u8BBF\u95EE\uFF0C\u6CA1\u6709\u6743\u9650 +10001={0}\u4E0D\u80FD\u4E3A\u7A7A +10002=\u6570\u636E\u5E93\u4E2D\u5DF2\u5B58\u5728\u8BE5\u8BB0\u5F55 +10003=\u83B7\u53D6\u53C2\u6570\u5931\u8D25 +10004=\u8D26\u53F7\u6216\u5BC6\u7801\u9519\u8BEF +10005=\u8D26\u53F7\u5DF2\u88AB\u505C\u7528 +10006=\u552F\u4E00\u6807\u8BC6\u4E0D\u80FD\u4E3A\u7A7A +10007=\u9A8C\u8BC1\u7801\u4E0D\u6B63\u786E +10008=\u5148\u5220\u9664\u5B50\u83DC\u5355\u6216\u6309\u94AE +10009=\u539F\u5BC6\u7801\u4E0D\u6B63\u786E +10010=\u8D26\u53F7\u6216\u5BC6\u7801\u4E0D\u6B63\u786E,\u60A8\u8FD8\u6709\u53EF\u4EE5\u5C1D\u8BD5{0}\u6B21 +10011=\u4E0A\u7EA7\u90E8\u95E8\u9009\u62E9\u9519\u8BEF +10012=\u4E0A\u7EA7\u83DC\u5355\u4E0D\u80FD\u4E3A\u81EA\u8EAB +10013=\u6570\u636E\u6743\u9650\u63A5\u53E3\uFF0C\u53EA\u80FD\u662FMap\u7C7B\u578B\u53C2\u6570 +10014=\u8BF7\u5148\u5220\u9664\u4E0B\u7EA7\u90E8\u95E8 +10015=\u8BF7\u5148\u5220\u9664\u90E8\u95E8\u4E0B\u7684\u7528\u6237 +10016=\u90E8\u7F72\u5931\u8D25\uFF0C\u6CA1\u6709\u6D41\u7A0B +10017=\u6A21\u578B\u56FE\u4E0D\u6B63\u786E\uFF0C\u8BF7\u68C0\u67E5 +10018=\u5BFC\u51FA\u5931\u8D25\uFF0C\u6A21\u578BID\u4E3A{0} +10019=\u8BF7\u4E0A\u4F20\u6587\u4EF6 +10020=token\u4E0D\u80FD\u4E3A\u7A7A +10021=token\u5931\u6548\uFF0C\u8BF7\u91CD\u65B0\u767B\u5F55 +10022=\u8D26\u53F7\u5DF2\u88AB\u9501\u5B9A +10023=\u8BF7\u4E0A\u4F20zip\u3001bar\u3001bpmn\u3001bpmn20.xml\u683C\u5F0F\u6587\u4EF6 +10024=\u4E0A\u4F20\u6587\u4EF6\u5931\u8D25{0} +10025=\u53D1\u9001\u77ED\u4FE1\u5931\u8D25{0} +10026=\u90AE\u4EF6\u6A21\u677F\u4E0D\u5B58\u5728 +10027=Redis\u670D\u52A1\u5F02\u5E38 +10028=\u5B9A\u65F6\u4EFB\u52A1\u5931\u8D25 +10029=\u4E0D\u80FD\u5305\u542B\u975E\u6CD5\u5B57\u7B26 +10030=\u53C2\u6570\u683C\u5F0F\u4E0D\u6B63\u786E\uFF0C\u8BF7\u4F7F\u7528JSON\u683C\u5F0F +10031=\u8BF7\u5148\u5B8C\u6210\u77ED\u4FE1\u914D\u7F6E +10032=\u4EFB\u52A1\u5DF2\u88AB\u7B7E\u6536\uFF0C\u64CD\u4F5C\u5931\u8D25 +10033=\u4E0D\u5B58\u5728\u7684\u6D41\u7A0B\u5B9A\u4E49 +10034=\u4E0A\u7EA7\u8282\u70B9\u4E0D\u5B58\u5728 +10035=\u9A73\u56DE +10036=\u56DE\u9000 +10037=\u4EFB\u52A1\u6CA1\u6709\u5206\u7EC4\uFF0C\u65E0\u6CD5\u53D6\u6D88\u8BA4\u9886 +10038=\u4E0A\u7EA7\u533A\u57DF\u9009\u62E9\u9519\u8BEF +10039=\u8BF7\u5148\u5220\u9664\u4E0B\u7EA7\u533A\u57DF +10040=\u6D41\u7A0B\u5DF2\u6302\u8D77\uFF0C\u4E0D\u80FD\u542F\u52A8\u5B9E\u4F8B +10041=\u591A\u5B9E\u4F8B\u4EFB\u52A1\u4E0D\u80FD\u9A73\u56DE +10042=\u5B58\u5728\u591A\u4E2A\u5904\u7406\u4E2D\u7684\u4EFB\u52A1\uFF0C\u4E0D\u80FD\u9A73\u56DE +10043=\u591A\u5B9E\u4F8B\u4EFB\u52A1\u4E0D\u80FD\u7EC8\u6B62 +10044=\u5B58\u5728\u591A\u4E2A\u5904\u7406\u4E2D\u7684\u4EFB\u52A1\uFF0C\u4E0D\u80FD\u7EC8\u6B62\u6D41\u7A0B +10045=\u7EC8\u6B62 +10046=\u591A\u5B9E\u4F8B\u4EFB\u52A1\u4E0D\u80FD\u56DE\u9000 +10047=\u5B58\u5728\u591A\u4E2A\u5E76\u884C\u6267\u884C\u7684\u4EFB\u52A1\uFF0C\u4E0D\u80FD\u56DE\u9000 +10048=\u767B\u5F55\u8D26\u53F7\uFF0C\u65E0\u6743\u5220\u9664 +10055=\u60A8\u7684\u5BC6\u7801\u957F\u5EA6\u4E0D\u591F8\u4F4D +10056=\u60A8\u7684\u5BC6\u7801\u590D\u6742\u5EA6\u4E0D\u591F\uFF0C\u9700\u8981\u540C\u65F6\u5305\u542B\u6570\u5B57,\u5C0F\u5199\u82F1\u6587,\u5927\u5199\u82F1\u6587 \ No newline at end of file diff --git a/main/manager-api/src/main/resources/i18n/messages_zh_TW.properties b/main/manager-api/src/main/resources/i18n/messages_zh_TW.properties new file mode 100644 index 00000000..bd67d5b3 --- /dev/null +++ b/main/manager-api/src/main/resources/i18n/messages_zh_TW.properties @@ -0,0 +1,54 @@ +#\u7E41\u4F53\u4E2D\u6587 +500=\u670D\u52D9\u5668\u5167\u90E8\u7570\u5E38 +401=\u672A\u6388\u6B0A +403=\u62D2\u7D55\u8A2A\u554F\uFF0C\u6C92\u6709\u6B0A\u9650 +10001={0}\u4E0D\u80FD\u70BA\u7A7A +10002=\u6578\u64DA\u5EAB\u4E2D\u5DF2\u5B58\u5728\u8A72\u8A18\u9304 +10003=\u7372\u53D6\u53C3\u6578\u5931\u6557 +10004=\u8CEC\u865F\u6216\u5BC6\u78BC\u932F\u8AA4 +10005=\u8CEC\u865F\u5DF2\u88AB\u505C\u7528 +10006=\u552F\u4E00\u6A19\u8B58\u4E0D\u80FD\u70BA\u7A7A +10007=\u9A57\u8B49\u78BC\u4E0D\u6B63\u78BA +10008=\u5148\u522A\u9664\u5B50\u83DC\u55AE\u6216\u6309\u9215 +10009=\u539F\u5BC6\u78BC\u4E0D\u6B63\u78BA +10010=\u8CEC\u865F\u6216\u5BC6\u78BC\u4E0D\u6B63\u78BA,\u60A8\u9084\u6709\u53EF\u4EE5\u5617\u8A66{0}\u6B21 +10011=\u4E0A\u7D1A\u90E8\u9580\u9078\u64C7\u932F\u8AA4 +10012=\u4E0A\u7D1A\u83DC\u55AE\u4E0D\u80FD\u70BA\u81EA\u8EAB +10013=\u6578\u64DA\u6B0A\u9650\u63A5\u53E3\uFF0C\u53EA\u80FD\u662FMap\u985E\u578B\u53C3\u6578 +10014=\u8ACB\u5148\u522A\u9664\u4E0B\u7D1A\u90E8\u9580 +10015=\u8ACB\u5148\u522A\u9664\u90E8\u9580\u4E0B\u7684\u7528\u6236 +10016=\u90E8\u7F72\u5931\u6557\uFF0C\u6C92\u6709\u6D41\u7A0B +10017=\u6A21\u578B\u5716\u4E0D\u6B63\u78BA\uFF0C\u8ACB\u6AA2\u67E5 +10018=\u5C0E\u51FA\u5931\u6557\uFF0C\u6A21\u578BID\u70BA{0} +10019=\u8ACB\u4E0A\u50B3\u6587\u4EF6 +10020=token\u4E0D\u80FD\u70BA\u7A7A +10021=token\u5931\u6548\uFF0C\u8ACB\u91CD\u65B0\u767B\u9304 +10022=\u8CEC\u865F\u5DF2\u88AB\u9396\u5B9A +10023=\u8ACB\u4E0A\u50B3zip\u3001bar\u3001bpmn\u3001bpmn20.xml\u683C\u5F0F\u6587\u4EF6 +10024=\u4E0A\u50B3\u6587\u4EF6\u5931\u6557{0} +10025=\u767C\u9001\u77ED\u4FE1\u5931\u6557{0} +10026=\u90F5\u4EF6\u6A21\u677F\u4E0D\u5B58\u5728 +10027=Redis\u670D\u52D9\u7570\u5E38 +10028=\u5B9A\u6642\u4EFB\u52D9\u5931\u6557 +10029=\u4E0D\u80FD\u5305\u542B\u975E\u6CD5\u5B57\u7B26 +10030=\u53C3\u6578\u683C\u5F0F\u4E0D\u6B63\u78BA\uFF0C\u8ACB\u4F7F\u7528JSON\u683C\u5F0F +10031=\u8ACB\u5148\u5B8C\u6210\u77ED\u4FE1\u914D\u7F6E +10032=\u4EFB\u52D9\u5DF2\u88AB\u7C3D\u6536\uFF0C\u64CD\u4F5C\u5931\u6557 +10033=\u4E0D\u5B58\u5728\u7684\u6D41\u7A0B\u5B9A\u7FA9 +10034=\u4E0A\u7D1A\u7BC0\u9EDE\u4E0D\u5B58\u5728 +10035=\u99C1\u56DE +10036=\u56DE\u9000 +10037=\u4EFB\u52D9\u6C92\u6709\u5206\u7D44\uFF0C\u7121\u6CD5\u53D6\u6D88\u8A8D\u9818 +10038=\u4E0A\u7D1A\u5340\u57DF\u9078\u64C7\u932F\u8AA4 +10039=\u8ACB\u5148\u522A\u9664\u4E0B\u7D1A\u5340\u57DF +10040=\u6D41\u7A0B\u5DF2\u639B\u8D77\uFF0C\u4E0D\u80FD\u555F\u52D5\u5BE6\u4F8B +10041=\u591A\u5BE6\u4F8B\u4EFB\u52D9\u4E0D\u80FD\u99C1\u56DE +10042=\u5B58\u5728\u591A\u500B\u8655\u7406\u4E2D\u7684\u4EFB\u52D9\uFF0C\u4E0D\u80FD\u99C1\u56DE +10043=\u591A\u5BE6\u4F8B\u4EFB\u52D9\u4E0D\u80FD\u7D42\u6B62 +10044=\u5B58\u5728\u591A\u500B\u8655\u7406\u4E2D\u7684\u4EFB\u52D9\uFF0C\u4E0D\u80FD\u7D42\u6B62\u6D41\u7A0B +10045=\u7D42\u6B62 +10046=\u591A\u5BE6\u4F8B\u4EFB\u52D9\u4E0D\u80FD\u56DE\u9000 +10047=\u5B58\u5728\u591A\u500B\u4E26\u884C\u57F7\u884C\u7684\u4EFB\u52D9\uFF0C\u4E0D\u80FD\u56DE\u9000 +10048=\u767B\u5165\u5E33\u865F\uFF0C\u7121\u6B0A\u5220\u9664 +10055=\u60A8\u7684\u5BC6\u78BC\u9577\u5EA6\u4E0D\u59208\u4F4D +10056=\u60A8\u7684\u5BC6\u78BC\u5FA9\u96DC\u5EA6\u4E0D\u5920\uFF0C\u9700\u8981\u540C\u6642\u5305\u542B\u6578\u5B57,\u5C0F\u5BEB\u82F1\u6587,\u5927\u5BEB\u82F1\u6587 \ No newline at end of file diff --git a/main/manager-api/src/main/resources/i18n/validation.properties b/main/manager-api/src/main/resources/i18n/validation.properties new file mode 100644 index 00000000..66d95744 --- /dev/null +++ b/main/manager-api/src/main/resources/i18n/validation.properties @@ -0,0 +1,109 @@ +#\u7B80\u4F53\u4E2D\u6587 +id.require=ID\u4E0D\u80FD\u4E3A\u7A7A +id.null=ID\u5FC5\u987B\u4E3A\u7A7A +pid.require=\u4E0A\u7EA7ID\uFF0C\u4E0D\u80FD\u4E3A\u7A7A +sort.number=\u6392\u5E8F\u503C\u4E0D\u80FD\u5C0F\u4E8E0 + +sysparams.paramcode.require=\u53C2\u6570\u7F16\u7801\u4E0D\u80FD\u4E3A\u7A7A +sysparams.paramvalue.require=\u53C2\u6570\u503C\u4E0D\u80FD\u4E3A\u7A7A + +sysuser.username.require=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A +sysuser.password.require=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A +sysuser.realname.require=\u59D3\u540D\u4E0D\u80FD\u4E3A\u7A7A +sysuser.gender.range=\u6027\u522B\u53D6\u503C\u8303\u56F40~2 +sysuser.email.require=\u90AE\u7BB1\u4E0D\u80FD\u4E3A\u7A7A +sysuser.email.error=\u90AE\u7BB1\u683C\u5F0F\u4E0D\u6B63\u786E +sysuser.mobile.require=\u624B\u673A\u53F7\u4E0D\u80FD\u4E3A\u7A7A +sysuser.deptId.require=\u90E8\u95E8\u4E0D\u80FD\u4E3A\u7A7A +sysuser.superadmin.range=\u8D85\u7EA7\u7BA1\u7406\u5458\u53D6\u503C\u8303\u56F40~1 +sysuser.status.range=\u72B6\u6001\u53D6\u503C\u8303\u56F40~1 +sysuser.captcha.require=\u9A8C\u8BC1\u7801\u4E0D\u80FD\u4E3A\u7A7A +sysuser.uuid.require=\u552F\u4E00\u6807\u8BC6\u4E0D\u80FD\u4E3A\u7A7A + +sysmenu.pid.require=\u8BF7\u9009\u62E9\u4E0A\u7EA7\u83DC\u5355 +sysmenu.name.require=\u83DC\u5355\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A +sysmenu.type.range=\u83DC\u5355\u7C7B\u578B\u53D6\u503C\u8303\u56F40~1 +sysmenu.openstyle.range=\u83DC\u5355\u6253\u5F00\u65B9\u5F0F\u53D6\u503C\u8303\u56F40~1 + +sysdept.pid.require=\u8BF7\u9009\u62E9\u4E0A\u7EA7\u90E8\u95E8 +sysdept.name.require=\u90E8\u95E8\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A + +sysrole.name.require=\u89D2\u8272\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A + +sysdict.type.require=\u5B57\u5178\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A +sysdict.name.require=\u5B57\u5178\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A +sysdict.label.require=\u5B57\u5178\u6807\u7B7E\u4E0D\u80FD\u4E3A\u7A7A + +schedule.status.range=\u72B6\u6001\u53D6\u503C\u8303\u56F40~1 +schedule.cron.require=cron\u8868\u8FBE\u5F0F\u4E0D\u80FD\u4E3A\u7A7A +schedule.bean.require=bean\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A + +oss.type.range=\u7C7B\u578B\u53D6\u503C\u8303\u56F41~5 + +aliyun.accesskeyid.require=\u963F\u91CC\u4E91AccessKeyId\u4E0D\u80FD\u4E3A\u7A7A +aliyun.accesskeysecret.require=\u963F\u91CC\u4E91AccessKeySecret\u4E0D\u80FD\u4E3A\u7A7A +aliyun.signname.require=\u963F\u91CC\u4E91\u77ED\u4FE1\u7B7E\u540D\u4E0D\u80FD\u4E3A\u7A7A +aliyun.templatecode.require=\u963F\u91CC\u4E91\u77ED\u4FE1\u6A21\u677F\u4E0D\u80FD\u4E3A\u7A7A +aliyun.domain.require=\u963F\u91CC\u4E91\u7ED1\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A +aliyun.domain.url=\u963F\u91CC\u4E91\u7ED1\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u786E +aliyun.endPoint.require=\u963F\u91CC\u4E91EndPoint\u4E0D\u80FD\u4E3A\u7A7A +aliyun.bucketname.require=\u963F\u91CC\u4E91BucketName\u4E0D\u80FD\u4E3A\u7A7A + +qcloud.appid.require=\u817E\u8BAF\u4E91AppId\u4E0D\u80FD\u4E3A\u7A7A +qcloud.appkey.require=\u817E\u8BAF\u4E91AppKey\u4E0D\u80FD\u4E3A\u7A7A +qcloud.secretId.require=\u817E\u8BAF\u4E91SecretId\u4E0D\u80FD\u4E3A\u7A7A +qcloud.secretkey.require=\u817E\u8BAF\u4E91SecretKey\u4E0D\u80FD\u4E3A\u7A7A +qcloud.signname.require=\u817E\u8BAF\u4E91\u77ED\u4FE1\u7B7E\u540D\u4E0D\u80FD\u4E3A\u7A7A +qcloud.templateid.require=\u817E\u8BAF\u4E91\u77ED\u4FE1\u6A21\u677FID\u4E0D\u80FD\u4E3A\u7A7A +qcloud.domain.require=\u817E\u8BAF\u4E91\u7ED1\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A +qcloud.domain.url=\u817E\u8BAF\u4E91\u7ED1\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u786E +qcloud.bucketname.require=\u817E\u8BAF\u4E91BucketName\u4E0D\u80FD\u4E3A\u7A7A +qcloud.region.require=\u6240\u5C5E\u5730\u533A\u4E0D\u80FD\u4E3A\u7A7A + +qiniu.domain.require=\u4E03\u725B\u7ED1\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A +qiniu.domain.url=\u4E03\u725B\u7ED1\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u786E +qiniu.accesskey.require=\u4E03\u725BAccessKey\u4E0D\u80FD\u4E3A\u7A7A +qiniu.secretkey.require=\u4E03\u725BSecretKey\u4E0D\u80FD\u4E3A\u7A7A +qiniu.bucketname.require=\u4E03\u725B\u7A7A\u95F4\u540D\u4E0D\u80FD\u4E3A\u7A7A +qiniu.templateId.require=\u4E03\u725B\u6A21\u677FID\u4E0D\u80FD\u4E3A\u7A7A + +fastdfs.domain.require=FastDFS\u7ED1\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A +fastdfs.domain.url=FastDFS\u7ED1\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u786E + +local.domain.require=\u672C\u5730\u4E0A\u4F20\u7ED1\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A +local.domain.url=\u672C\u5730\u4E0A\u4F20\u7ED1\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u786E +local.path.url=\u5B58\u50A8\u76EE\u5F55\u4E0D\u80FD\u4E3A\u7A7A + +minio.endPoint.require=Minio EndPoint\u4E0D\u80FD\u4E3A\u7A7A +minio.accesskey.require=Minio AccessKey\u4E0D\u80FD\u4E3A\u7A7A +minio.secretkey.require=Minio SecretKey\u4E0D\u80FD\u4E3A\u7A7A +minio.bucketname.require=Minio BucketName\u4E0D\u80FD\u4E3A\u7A7A + +sms.platform.range=\u5E73\u53F0\u7C7B\u578B\u53D6\u503C\u8303\u56F41~2 +email.smtp.require=SMTP\u4E0D\u80FD\u4E3A\u7A7A +email.port.require=\u7AEF\u53E3\u53F7\u4E0D\u80FD\u4E3A\u7A7A +email.username.require=\u90AE\u7BB1\u8D26\u53F7\u4E0D\u80FD\u4E3A\u7A7A +email.password.require=\u90AE\u7BB1\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A + +mail.name.require=\u6A21\u677F\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A +mail.subject.require=\u90AE\u4EF6\u4E3B\u9898\u4E0D\u80FD\u4E3A\u7A7A +mail.content.require=\u90AE\u4EF6\u6B63\u6587\u4E0D\u80FD\u4E3A\u7A7A + +model.name.require=\u6A21\u578B\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A +model.key.require=\u6A21\u578B\u6807\u8BC6\u4E0D\u80FD\u4E3A\u7A7A + +news.title.require=\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A +news.content.require=\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A +news.pubdate.require=\u53D1\u5E03\u65F6\u95F4\u4E0D\u80FD\u4E3A\u7A7A + +region.id.require=\u533A\u57DF\u6807\u8BC6\u4E0D\u80FD\u4E3A\u7A7A +region.pid.require=\u4E0A\u7EA7\u533A\u57DF\u4E0D\u80FD\u4E3A\u7A7A +region.name.require=\u533A\u57DF\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A + +processBizRoute.procDefId.require=\u6D41\u7A0B\u5B9A\u4E49ID\u4E0D\u80FD\u4E3A\u7A7A +processBizRoute.bizRoute.require=\u4E1A\u52A1\u8DEF\u7531\u4E0D\u80FD\u4E3A\u7A7A +processBizRoute.procDefKey.require=\u6D41\u7A0B\u5B9A\u4E49KEY\u4E0D\u80FD\u4E3A\u7A7A +processBizRoute.version.require=\u6D41\u7A0B\u5B9A\u4E49\u7248\u672C\u53F7\u4E0D\u80FD\u4E3A\u7A7A + +ProcessStart.processDefinitionKey.require=\u6D41\u7A0B\u5B9A\u4E49KEY\u4E0D\u80FD\u4E3A\u7A7A +ProcessStart.businessKey.require=\u4E1A\u52A1KEY\u4E0D\u80FD\u4E3A\u7A7A \ No newline at end of file diff --git a/main/manager-api/src/main/resources/i18n/validation_en_US.properties b/main/manager-api/src/main/resources/i18n/validation_en_US.properties new file mode 100644 index 00000000..2de9b22c --- /dev/null +++ b/main/manager-api/src/main/resources/i18n/validation_en_US.properties @@ -0,0 +1,110 @@ +#English +id.require=ID can not be empty +id.null=ID has to be empty +pid.require=Parent ID, cannot be empty +sort.number=The sort value cannot be less than 0 + +sysparams.paramcode.require=Parameter encoding cannot be empty +sysparams.paramvalue.require=Parameter values cannot be empty + +sysuser.username.require=The username cannot be empty +sysuser.password.require=The password cannot be empty +sysuser.realname.require=The realname cannot be empty +sysuser.gender.range=Gender ranges from 0 to 2 +sysuser.email.require=Mailbox cannot be empty +sysuser.email.error=Incorrect email format +sysuser.mobile.require=The phone number cannot be empty +sysuser.deptId.require=Departments cannot be empty +sysuser.superadmin.range=Super administrator values range from 0 to 1 +sysuser.status.range=State ranges from 0 to 1 +sysuser.captcha.require=The captcha cannot be empty +sysuser.uuid.require=The unique identifier cannot be empty + +sysmenu.pid.require=Please select superior menu +sysmenu.name.require=Menu name cannot be empty +sysmenu.type.range=Menu type ranges from 0 to 1 +sysmenu.openstyle.range=Menu open style ranges from 0 to 1 + +sysdept.pid.require=Please select superior department +sysdept.name.require=The department name cannot be empty + +sysrole.name.require=The role name cannot be empty + +sysdict.type.require=The dictionary type cannot be empty +sysdict.name.require=The dictionary name cannot be empty +sysdict.label.require=Dictionary tag cannot be empty + +schedule.status.range=Status ranges from 0 to 1 +schedule.cron.require=Cron expression cannot be empty +schedule.bean.require=Bean name cannot be empty + +oss.type.range=Type ranges from 1 to 5 + +aliyun.accesskeyid.require=Aliyun AccessKeyId cannot be empty +aliyun.accesskeysecret.require=Aliyun AccessKeySecret cannot be empty +aliyun.signname.require=Aliyun message signature cannot be empty +aliyun.templatecode.require=Aliyun message template cannot be empty +aliyun.domain.require=Aliyun bound domain name cannot be empty +aliyun.domain.url=Aliyun binding domain name format is incorrect +aliyun.endPoint.require=The aliyun EndPoint cannot be empty +aliyun.bucketname.require=Aliyun BucketName cannot be empty + +qcloud.appid.require=Tencent cloud AppId cannot be empty +qcloud.appkey.require=Tencent cloud AppKey cannot be empty +qcloud.secretId.require=Tencent cloud SecretId cannot be empty +qcloud.secretkey.require=Tencent cloud SecretKey cannot be empty +qcloud.signname.require=Tencent cloud SMS signature cannot be empty +qcloud.templateid.require=Tencent cloud SMS template ID cannot be empty +qcloud.domain.require=Tencent cloud bound domain name cannot be empty +qcloud.domain.url=Tencent cloud binding domain name format is incorrect +qcloud.bucketname.require=Tencent cloud BucketName cannot be empty +qcloud.region.require=The region cannot be empty + +qiniu.domain.require=Bound domain name cannot be empty +qiniu.domain.url=Binding domain name format is incorrect +qiniu.accesskey.require=The AccessKey cannot be empty +qiniu.secretkey.require=The SecretKey of seven cows cannot be empty +qiniu.bucketname.require=Space names cannot be empty +qiniu.templateId.require=Template ID cannot be empty + +fastdfs.domain.require=FastDFS bound domain name cannot be empty +fastdfs.domain.url=FastDFS bound domain name format is incorrect + +local.domain.require=Local upload bound domain name cannot be empty +local.domain.url=The domain name bound for local upload is not formatted correctly +local.path.url=The storage directory cannot be empty + +minio.endPoint.require=Minio EndPoint cannot be empty +minio.accesskey.require=Minio AccessKey cannot be empty +minio.secretkey.require=Minio SecretKey cannot be empty +minio.bucketname.require=Minio BucketName cannot be empty + +sms.platform.range=Platform type ranges from 1 to 2 + +email.smtp.require=SMTP cannot be empty +email.port.require=Port number cannot be empty +email.username.require=The email account cannot be empty +email.password.require=The password cannot be empty + +mail.name.require=The template name cannot be empty +mail.subject.require=Mail subject cannot be empty +mail.content.require=Message text cannot be empty + +model.name.require=The model name cannot be empty +model.key.require=The model key cannot be empty + +news.title.require=The title cannot be empty +news.content.require=Content cannot be empty +news.pubdate.require=The release time cannot be empty + +region.id.require=Region ID cannot be empty +region.pid.require=Upper area cannot be empty +region.name.require=Region name cannot be empty + +processBizRoute.procDefId.require=Process Definition ID cannot be empty +processBizRoute.bizRoute.require=Service routing cannot be empty +processBizRoute.procDefKey.require=Process Definition KEY cannot be empty +processBizRoute.version.require=Process Definition Version number cannot be empty + +ProcessStart.processDefinitionKey.require=Process Definition KEY cannot be empty +ProcessStart.businessKey.require=Business KEY cannot be empty \ No newline at end of file diff --git a/main/manager-api/src/main/resources/i18n/validation_zh_CN.properties b/main/manager-api/src/main/resources/i18n/validation_zh_CN.properties new file mode 100644 index 00000000..66d95744 --- /dev/null +++ b/main/manager-api/src/main/resources/i18n/validation_zh_CN.properties @@ -0,0 +1,109 @@ +#\u7B80\u4F53\u4E2D\u6587 +id.require=ID\u4E0D\u80FD\u4E3A\u7A7A +id.null=ID\u5FC5\u987B\u4E3A\u7A7A +pid.require=\u4E0A\u7EA7ID\uFF0C\u4E0D\u80FD\u4E3A\u7A7A +sort.number=\u6392\u5E8F\u503C\u4E0D\u80FD\u5C0F\u4E8E0 + +sysparams.paramcode.require=\u53C2\u6570\u7F16\u7801\u4E0D\u80FD\u4E3A\u7A7A +sysparams.paramvalue.require=\u53C2\u6570\u503C\u4E0D\u80FD\u4E3A\u7A7A + +sysuser.username.require=\u7528\u6237\u540D\u4E0D\u80FD\u4E3A\u7A7A +sysuser.password.require=\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A +sysuser.realname.require=\u59D3\u540D\u4E0D\u80FD\u4E3A\u7A7A +sysuser.gender.range=\u6027\u522B\u53D6\u503C\u8303\u56F40~2 +sysuser.email.require=\u90AE\u7BB1\u4E0D\u80FD\u4E3A\u7A7A +sysuser.email.error=\u90AE\u7BB1\u683C\u5F0F\u4E0D\u6B63\u786E +sysuser.mobile.require=\u624B\u673A\u53F7\u4E0D\u80FD\u4E3A\u7A7A +sysuser.deptId.require=\u90E8\u95E8\u4E0D\u80FD\u4E3A\u7A7A +sysuser.superadmin.range=\u8D85\u7EA7\u7BA1\u7406\u5458\u53D6\u503C\u8303\u56F40~1 +sysuser.status.range=\u72B6\u6001\u53D6\u503C\u8303\u56F40~1 +sysuser.captcha.require=\u9A8C\u8BC1\u7801\u4E0D\u80FD\u4E3A\u7A7A +sysuser.uuid.require=\u552F\u4E00\u6807\u8BC6\u4E0D\u80FD\u4E3A\u7A7A + +sysmenu.pid.require=\u8BF7\u9009\u62E9\u4E0A\u7EA7\u83DC\u5355 +sysmenu.name.require=\u83DC\u5355\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A +sysmenu.type.range=\u83DC\u5355\u7C7B\u578B\u53D6\u503C\u8303\u56F40~1 +sysmenu.openstyle.range=\u83DC\u5355\u6253\u5F00\u65B9\u5F0F\u53D6\u503C\u8303\u56F40~1 + +sysdept.pid.require=\u8BF7\u9009\u62E9\u4E0A\u7EA7\u90E8\u95E8 +sysdept.name.require=\u90E8\u95E8\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A + +sysrole.name.require=\u89D2\u8272\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A + +sysdict.type.require=\u5B57\u5178\u7C7B\u578B\u4E0D\u80FD\u4E3A\u7A7A +sysdict.name.require=\u5B57\u5178\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A +sysdict.label.require=\u5B57\u5178\u6807\u7B7E\u4E0D\u80FD\u4E3A\u7A7A + +schedule.status.range=\u72B6\u6001\u53D6\u503C\u8303\u56F40~1 +schedule.cron.require=cron\u8868\u8FBE\u5F0F\u4E0D\u80FD\u4E3A\u7A7A +schedule.bean.require=bean\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A + +oss.type.range=\u7C7B\u578B\u53D6\u503C\u8303\u56F41~5 + +aliyun.accesskeyid.require=\u963F\u91CC\u4E91AccessKeyId\u4E0D\u80FD\u4E3A\u7A7A +aliyun.accesskeysecret.require=\u963F\u91CC\u4E91AccessKeySecret\u4E0D\u80FD\u4E3A\u7A7A +aliyun.signname.require=\u963F\u91CC\u4E91\u77ED\u4FE1\u7B7E\u540D\u4E0D\u80FD\u4E3A\u7A7A +aliyun.templatecode.require=\u963F\u91CC\u4E91\u77ED\u4FE1\u6A21\u677F\u4E0D\u80FD\u4E3A\u7A7A +aliyun.domain.require=\u963F\u91CC\u4E91\u7ED1\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A +aliyun.domain.url=\u963F\u91CC\u4E91\u7ED1\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u786E +aliyun.endPoint.require=\u963F\u91CC\u4E91EndPoint\u4E0D\u80FD\u4E3A\u7A7A +aliyun.bucketname.require=\u963F\u91CC\u4E91BucketName\u4E0D\u80FD\u4E3A\u7A7A + +qcloud.appid.require=\u817E\u8BAF\u4E91AppId\u4E0D\u80FD\u4E3A\u7A7A +qcloud.appkey.require=\u817E\u8BAF\u4E91AppKey\u4E0D\u80FD\u4E3A\u7A7A +qcloud.secretId.require=\u817E\u8BAF\u4E91SecretId\u4E0D\u80FD\u4E3A\u7A7A +qcloud.secretkey.require=\u817E\u8BAF\u4E91SecretKey\u4E0D\u80FD\u4E3A\u7A7A +qcloud.signname.require=\u817E\u8BAF\u4E91\u77ED\u4FE1\u7B7E\u540D\u4E0D\u80FD\u4E3A\u7A7A +qcloud.templateid.require=\u817E\u8BAF\u4E91\u77ED\u4FE1\u6A21\u677FID\u4E0D\u80FD\u4E3A\u7A7A +qcloud.domain.require=\u817E\u8BAF\u4E91\u7ED1\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A +qcloud.domain.url=\u817E\u8BAF\u4E91\u7ED1\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u786E +qcloud.bucketname.require=\u817E\u8BAF\u4E91BucketName\u4E0D\u80FD\u4E3A\u7A7A +qcloud.region.require=\u6240\u5C5E\u5730\u533A\u4E0D\u80FD\u4E3A\u7A7A + +qiniu.domain.require=\u4E03\u725B\u7ED1\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A +qiniu.domain.url=\u4E03\u725B\u7ED1\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u786E +qiniu.accesskey.require=\u4E03\u725BAccessKey\u4E0D\u80FD\u4E3A\u7A7A +qiniu.secretkey.require=\u4E03\u725BSecretKey\u4E0D\u80FD\u4E3A\u7A7A +qiniu.bucketname.require=\u4E03\u725B\u7A7A\u95F4\u540D\u4E0D\u80FD\u4E3A\u7A7A +qiniu.templateId.require=\u4E03\u725B\u6A21\u677FID\u4E0D\u80FD\u4E3A\u7A7A + +fastdfs.domain.require=FastDFS\u7ED1\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A +fastdfs.domain.url=FastDFS\u7ED1\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u786E + +local.domain.require=\u672C\u5730\u4E0A\u4F20\u7ED1\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u4E3A\u7A7A +local.domain.url=\u672C\u5730\u4E0A\u4F20\u7ED1\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u786E +local.path.url=\u5B58\u50A8\u76EE\u5F55\u4E0D\u80FD\u4E3A\u7A7A + +minio.endPoint.require=Minio EndPoint\u4E0D\u80FD\u4E3A\u7A7A +minio.accesskey.require=Minio AccessKey\u4E0D\u80FD\u4E3A\u7A7A +minio.secretkey.require=Minio SecretKey\u4E0D\u80FD\u4E3A\u7A7A +minio.bucketname.require=Minio BucketName\u4E0D\u80FD\u4E3A\u7A7A + +sms.platform.range=\u5E73\u53F0\u7C7B\u578B\u53D6\u503C\u8303\u56F41~2 +email.smtp.require=SMTP\u4E0D\u80FD\u4E3A\u7A7A +email.port.require=\u7AEF\u53E3\u53F7\u4E0D\u80FD\u4E3A\u7A7A +email.username.require=\u90AE\u7BB1\u8D26\u53F7\u4E0D\u80FD\u4E3A\u7A7A +email.password.require=\u90AE\u7BB1\u5BC6\u7801\u4E0D\u80FD\u4E3A\u7A7A + +mail.name.require=\u6A21\u677F\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A +mail.subject.require=\u90AE\u4EF6\u4E3B\u9898\u4E0D\u80FD\u4E3A\u7A7A +mail.content.require=\u90AE\u4EF6\u6B63\u6587\u4E0D\u80FD\u4E3A\u7A7A + +model.name.require=\u6A21\u578B\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A +model.key.require=\u6A21\u578B\u6807\u8BC6\u4E0D\u80FD\u4E3A\u7A7A + +news.title.require=\u6807\u9898\u4E0D\u80FD\u4E3A\u7A7A +news.content.require=\u5185\u5BB9\u4E0D\u80FD\u4E3A\u7A7A +news.pubdate.require=\u53D1\u5E03\u65F6\u95F4\u4E0D\u80FD\u4E3A\u7A7A + +region.id.require=\u533A\u57DF\u6807\u8BC6\u4E0D\u80FD\u4E3A\u7A7A +region.pid.require=\u4E0A\u7EA7\u533A\u57DF\u4E0D\u80FD\u4E3A\u7A7A +region.name.require=\u533A\u57DF\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A + +processBizRoute.procDefId.require=\u6D41\u7A0B\u5B9A\u4E49ID\u4E0D\u80FD\u4E3A\u7A7A +processBizRoute.bizRoute.require=\u4E1A\u52A1\u8DEF\u7531\u4E0D\u80FD\u4E3A\u7A7A +processBizRoute.procDefKey.require=\u6D41\u7A0B\u5B9A\u4E49KEY\u4E0D\u80FD\u4E3A\u7A7A +processBizRoute.version.require=\u6D41\u7A0B\u5B9A\u4E49\u7248\u672C\u53F7\u4E0D\u80FD\u4E3A\u7A7A + +ProcessStart.processDefinitionKey.require=\u6D41\u7A0B\u5B9A\u4E49KEY\u4E0D\u80FD\u4E3A\u7A7A +ProcessStart.businessKey.require=\u4E1A\u52A1KEY\u4E0D\u80FD\u4E3A\u7A7A \ No newline at end of file diff --git a/main/manager-api/src/main/resources/i18n/validation_zh_TW.properties b/main/manager-api/src/main/resources/i18n/validation_zh_TW.properties new file mode 100644 index 00000000..6680e10a --- /dev/null +++ b/main/manager-api/src/main/resources/i18n/validation_zh_TW.properties @@ -0,0 +1,110 @@ +#\u7E41\u4F53\u4E2D\u6587 +id.require=ID\u4E0D\u80FD\u70BA\u7A7A +id.null=ID\u5FC5\u9808\u70BA\u7A7A +pid.require=\u4E0A\u7D1AID\uFF0C\u4E0D\u80FD\u70BA\u7A7A +sort.number=\u6392\u5E8F\u503C\u4E0D\u80FD\u5C0F\u65BC0 + +sysparams.paramcode.require=\u53C3\u6578\u7DE8\u78BC\u4E0D\u80FD\u70BA\u7A7A +sysparams.paramvalue.require=\u53C3\u6578\u503C\u4E0D\u80FD\u70BA\u7A7A + +sysuser.username.require=\u7528\u6236\u540D\u4E0D\u80FD\u70BA\u7A7A +sysuser.password.require=\u5BC6\u78BC\u4E0D\u80FD\u70BA\u7A7A +sysuser.realname.require=\u59D3\u540D\u4E0D\u80FD\u70BA\u7A7A +sysuser.gender.range=\u6027\u5225\u53D6\u503C\u7BC4\u570D0~2 +sysuser.email.require=\u90F5\u7BB1\u4E0D\u80FD\u70BA\u7A7A +sysuser.email.error=\u90F5\u7BB1\u683C\u5F0F\u4E0D\u6B63\u78BA +sysuser.mobile.require=\u624B\u6A5F\u865F\u4E0D\u80FD\u70BA\u7A7A +sysuser.deptId.require=\u90E8\u9580\u4E0D\u80FD\u70BA\u7A7A +sysuser.superadmin.range=\u8D85\u7D1A\u7BA1\u7406\u54E1\u53D6\u503C\u7BC4\u570D0~1 +sysuser.status.range=\u72C0\u614B\u53D6\u503C\u7BC4\u570D0~1 +sysuser.captcha.require=\u9A57\u8B49\u78BC\u4E0D\u80FD\u70BA\u7A7A +sysuser.uuid.require=\u552F\u4E00\u6A19\u8B58\u4E0D\u80FD\u70BA\u7A7A + +sysmenu.pid.require=\u8ACB\u9078\u64C7\u4E0A\u7D1A\u83DC\u55AE +sysmenu.name.require=\u83DC\u55AE\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A +sysmenu.type.range=\u83DC\u55AE\u985E\u578B\u53D6\u503C\u7BC4\u570D0~1 +sysmenu.openstyle.range=\u83DC\u55AE\u6253\u958B\u65B9\u5F0F\u53D6\u503C\u7BC4\u570D0~1 + +sysdept.pid.require=\u8ACB\u9078\u64C7\u4E0A\u7D1A\u90E8\u9580 +sysdept.name.require=\u90E8\u9580\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A + +sysrole.name.require=\u89D2\u8272\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A + +sysdict.type.require=\u5B57\u5178\u985E\u578B\u4E0D\u80FD\u70BA\u7A7A +sysdict.name.require=\u5B57\u5178\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A +sysdict.label.require=\u5B57\u5178\u6A19\u7C64\u4E0D\u80FD\u70BA\u7A7A + +schedule.status.range=\u72C0\u614B\u53D6\u503C\u7BC4\u570D0~1 +schedule.cron.require=cron\u8868\u9054\u5F0F\u4E0D\u80FD\u70BA\u7A7A +schedule.bean.require=bean\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A + +oss.type.range=\u985E\u578B\u53D6\u503C\u7BC4\u570D1~5 + +aliyun.accesskeyid.require=\u963F\u91CC\u96F2AccessKeyId\u4E0D\u80FD\u70BA\u7A7A +aliyun.accesskeysecret.require=\u963F\u91CC\u96F2AccessKeySecret\u4E0D\u80FD\u70BA\u7A7A +aliyun.signname.require=\u963F\u91CC\u96F2\u77ED\u4FE1\u7C3D\u540D\u4E0D\u80FD\u70BA\u7A7A +aliyun.templatecode.require=\u963F\u91CC\u96F2\u77ED\u4FE1\u6A21\u677F\u4E0D\u80FD\u70BA\u7A7A +aliyun.domain.require=\u963F\u91CC\u96F2\u7D81\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u70BA\u7A7A +aliyun.domain.url=\u963F\u91CC\u96F2\u7D81\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u78BA +aliyun.endPoint.require=\u963F\u91CC\u96F2EndPoint\u4E0D\u80FD\u70BA\u7A7A +aliyun.bucketname.require=\u963F\u91CC\u96F2BucketName\u4E0D\u80FD\u70BA\u7A7A + +qcloud.appid.require=\u9A30\u8A0A\u96F2AppId\u4E0D\u80FD\u70BA\u7A7A +qcloud.appkey.require=\u9A30\u8A0A\u96F2AppKey\u4E0D\u80FD\u70BA\u7A7A +qcloud.secretId.require=\u9A30\u8A0A\u96F2SecretId\u4E0D\u80FD\u70BA\u7A7A +qcloud.secretkey.require=\u9A30\u8A0A\u96F2SecretKey\u4E0D\u80FD\u70BA\u7A7A +qcloud.signname.require=\u9A30\u8A0A\u96F2\u77ED\u4FE1\u7C3D\u540D\u4E0D\u80FD\u70BA\u7A7A +qcloud.templateid.require=\u9A30\u8A0A\u96F2\u77ED\u4FE1\u6A21\u677FID\u4E0D\u80FD\u70BA\u7A7A +qcloud.domain.require=\u9A30\u8A0A\u96F2\u7D81\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u70BA\u7A7A +qcloud.domain.url=\u9A30\u8A0A\u96F2\u7D81\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u78BA +qcloud.bucketname.require=\u9A30\u8A0A\u96F2BucketName\u4E0D\u80FD\u70BA\u7A7A +qcloud.region.require=\u6240\u5C6C\u5730\u5340\u4E0D\u80FD\u70BA\u7A7A + +qiniu.domain.require=\u4E03\u725B\u7D81\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u70BA\u7A7A +qiniu.domain.url=\u4E03\u725B\u7D81\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u78BA +qiniu.accesskey.require=\u4E03\u725BAccessKey\u4E0D\u80FD\u70BA\u7A7A +qiniu.secretkey.require=\u4E03\u725BSecretKey\u4E0D\u80FD\u70BA\u7A7A +qiniu.bucketname.require=\u4E03\u725B\u7A7A\u9593\u540D\u4E0D\u80FD\u70BA\u7A7A +qiniu.templateId.require=\u4E03\u725B\u6A21\u677FID\u4E0D\u80FD\u70BA\u7A7A + +fastdfs.domain.require=FastDFS\u7D81\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u70BA\u7A7A +fastdfs.domain.url=FastDFS\u7D81\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u78BA + +local.domain.require=\u672C\u5730\u4E0A\u50B3\u7D81\u5B9A\u7684\u57DF\u540D\u4E0D\u80FD\u70BA\u7A7A +local.domain.url=\u672C\u5730\u4E0A\u50B3\u7D81\u5B9A\u7684\u57DF\u540D\u683C\u5F0F\u4E0D\u6B63\u78BA +local.path.url=\u5B58\u5132\u76EE\u9304\u4E0D\u80FD\u70BA\u7A7A + +minio.endPoint.require=Minio EndPoint\u4E0D\u80FD\u70BA\u7A7A +minio.accesskey.require=Minio AccessKey\u4E0D\u80FD\u70BA\u7A7A +minio.secretkey.require=Minio SecretKey\u4E0D\u80FD\u70BA\u7A7A +minio.bucketname.require=Minio BucketName\u4E0D\u80FD\u70BA\u7A7A + +sms.platform.range=\u5E73\u53F0\u985E\u578B\u53D6\u503C\u7BC4\u570D1~2 + +email.smtp.require=SMTP\u4E0D\u80FD\u70BA\u7A7A +email.port.require=\u7AEF\u53E3\u865F\u4E0D\u80FD\u70BA\u7A7A +email.username.require=\u90F5\u7BB1\u8CEC\u865F\u4E0D\u80FD\u70BA\u7A7A +email.password.require=\u90F5\u7BB1\u5BC6\u78BC\u4E0D\u80FD\u70BA\u7A7A + +mail.name.require=\u6A21\u677F\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A +mail.subject.require=\u90F5\u4EF6\u4E3B\u984C\u4E0D\u80FD\u70BA\u7A7A +mail.content.require=\u90F5\u4EF6\u6B63\u6587\u4E0D\u80FD\u70BA\u7A7A + +model.name.require=\u6A21\u578B\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A +model.key.require=\u6A21\u578B\u6A19\u8B58\u4E0D\u80FD\u70BA\u7A7A + +news.title.require=\u6A19\u984C\u4E0D\u80FD\u70BA\u7A7A +news.content.require=\u5167\u5BB9\u4E0D\u80FD\u70BA\u7A7A +news.pubdate.require=\u767C\u4F48\u6642\u9593\u4E0D\u80FD\u70BA\u7A7A + +region.id.require=\u5340\u57DF\u6A19\u8B58\u4E0D\u80FD\u70BA\u7A7A +region.pid.require=\u4E0A\u7D1A\u5340\u57DF\u4E0D\u80FD\u70BA\u7A7A +region.name.require=\u5340\u57DF\u540D\u7A31\u4E0D\u80FD\u70BA\u7A7A + +processBizRoute.procDefId.require=\u6D41\u7A0B\u5B9A\u7FA9ID\u4E0D\u80FD\u70BA\u7A7A +processBizRoute.bizRoute.require=\u696D\u52D9\u8DEF\u7531\u4E0D\u80FD\u70BA\u7A7A +processBizRoute.procDefKey.require=\u6D41\u7A0B\u5B9A\u7FA9KEY\u4E0D\u80FD\u70BA\u7A7A +processBizRoute.version.require=\u6D41\u7A0B\u5B9A\u7FA9\u7248\u672C\u865F\u4E0D\u80FD\u70BA\u7A7A + +ProcessStart.processDefinitionKey.require=\u6D41\u7A0B\u5B9A\u7FA9KEY\u4E0D\u80FD\u70BA\u7A7A +ProcessStart.businessKey.require=\u696D\u52D9KEY\u4E0D\u80FD\u70BA\u7A7A \ No newline at end of file diff --git a/main/manager-api/src/main/resources/logback-spring.xml b/main/manager-api/src/main/resources/logback-spring.xml new file mode 100644 index 00000000..68ea4cf6 --- /dev/null +++ b/main/manager-api/src/main/resources/logback-spring.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + /system/logs/admin.%d{yyyy-MM-dd}.%i.log + + 1MB + + 7 + + + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n + + + + + + + + \ No newline at end of file diff --git a/main/manager-api/src/main/resources/mapper/sys/SysDictDataDao.xml b/main/manager-api/src/main/resources/mapper/sys/SysDictDataDao.xml new file mode 100644 index 00000000..7ea5e429 --- /dev/null +++ b/main/manager-api/src/main/resources/mapper/sys/SysDictDataDao.xml @@ -0,0 +1,13 @@ + + + + + + + + + \ No newline at end of file diff --git a/main/manager-api/src/main/resources/mapper/sys/SysDictTypeDao.xml b/main/manager-api/src/main/resources/mapper/sys/SysDictTypeDao.xml new file mode 100644 index 00000000..11887552 --- /dev/null +++ b/main/manager-api/src/main/resources/mapper/sys/SysDictTypeDao.xml @@ -0,0 +1,10 @@ + + + + + + + + \ No newline at end of file diff --git a/main/manager-api/src/main/resources/mapper/sys/SysParamsDao.xml b/main/manager-api/src/main/resources/mapper/sys/SysParamsDao.xml new file mode 100644 index 00000000..3d19352e --- /dev/null +++ b/main/manager-api/src/main/resources/mapper/sys/SysParamsDao.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + update sys_params set param_value = #{paramValue} where param_code = #{paramCode} + + \ No newline at end of file diff --git a/main/manager-api/src/main/resources/mapper/sys/SysUserDao.xml b/main/manager-api/src/main/resources/mapper/sys/SysUserDao.xml new file mode 100644 index 00000000..dcbb3a26 --- /dev/null +++ b/main/manager-api/src/main/resources/mapper/sys/SysUserDao.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + update sys_user set password = #{newPassword} where id = #{id} + + + + + + + \ No newline at end of file diff --git a/main/manager-api/src/main/resources/mapper/sys/SysUserTokenDao.xml b/main/manager-api/src/main/resources/mapper/sys/SysUserTokenDao.xml new file mode 100644 index 00000000..2aca0ab8 --- /dev/null +++ b/main/manager-api/src/main/resources/mapper/sys/SysUserTokenDao.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + update sys_user_token set expire_date = #{expireDate} where user_id = #{userId} + + \ No newline at end of file diff --git a/main/manager-web/README.md b/main/manager-web/README.md new file mode 100644 index 00000000..a81c8ff6 --- /dev/null +++ b/main/manager-web/README.md @@ -0,0 +1,29 @@ +本文档是开发类文档,如需部署小智服务端,[点击这里查看部署教程](../../README.md#%E4%BD%BF%E7%94%A8%E6%96%B9%E5%BC%8F-) + +# xiaozhi + +## Project setup + +开发使用代码编辑器,导入项目时,选择`manager-web`文件夹作为项目目录 + +参照[manager前后端接口协议](https://app.apifox.com/invite/project?token=H_8qhgfjUeaAL0wybghgU)开发 + +``` +npm install +``` + +### Compiles and hot-reloads for development + +``` +npm run serve +``` + +### Compiles and minifies for production + +``` +npm run build +``` + +### Customize configuration + +See [Configuration Reference](https://cli.vuejs.org/config/). diff --git a/main/manager-web/jsconfig.json b/main/manager-web/jsconfig.json new file mode 100644 index 00000000..4aafc5f6 --- /dev/null +++ b/main/manager-web/jsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "es5", + "module": "esnext", + "baseUrl": "./", + "moduleResolution": "node", + "paths": { + "@/*": [ + "src/*" + ] + }, + "lib": [ + "esnext", + "dom", + "dom.iterable", + "scripthost" + ] + } +} diff --git a/main/manager-web/package-lock.json b/main/manager-web/package-lock.json new file mode 100644 index 00000000..f3044557 --- /dev/null +++ b/main/manager-web/package-lock.json @@ -0,0 +1,9465 @@ +{ + "name": "xiaozhi", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "xiaozhi", + "version": "0.1.0", + "dependencies": { + "axios": "^1.8.1", + "element-ui": "^2.15.14", + "flyio": "^0.6.14", + "normalize.css": "^8.0.1", + "vue": "^2.6.14", + "vue-axios": "^3.5.2", + "vue-router": "^3.6.5", + "vuex": "^3.6.2" + }, + "devDependencies": { + "@vue/cli-plugin-router": "~5.0.0", + "@vue/cli-plugin-vuex": "~5.0.0", + "@vue/cli-service": "~5.0.0", + "sass": "^1.32.7", + "sass-loader": "^12.0.0", + "vue-template-compiler": "^2.6.14" + } + }, + "node_modules/@achrinza/node-ipc": { + "version": "9.2.9", + "resolved": "https://registry.npmmirror.com/@achrinza/node-ipc/-/node-ipc-9.2.9.tgz", + "integrity": "sha512-7s0VcTwiK/0tNOVdSX9FWMeFdOEcsAOz9HesBldXxFMaGvIak7KC2z9tV9EgsQXn6KUsWsfIkViMNuIo0GoZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@node-ipc/js-queue": "2.0.3", + "event-pubsub": "4.3.0", + "js-message": "1.0.7" + }, + "engines": { + "node": "8 || 9 || 10 || 11 || 12 || 13 || 14 || 15 || 16 || 17 || 18 || 19 || 20 || 21 || 22" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.26.8", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.26.8.tgz", + "integrity": "sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.26.5", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz", + "integrity": "sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.26.5", + "@babel/helper-validator-option": "^7.25.9", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz", + "integrity": "sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.9" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-9.3.0.tgz", + "integrity": "sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.8", + "resolved": "https://registry.npmmirror.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@node-ipc/js-queue": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/@node-ipc/js-queue/-/js-queue-2.0.3.tgz", + "integrity": "sha512-fL1wpr8hhD5gT2dA1qifeVaoDFlQR5es8tFuKqjHX+kdOtdNHnxkVZbtIrR2rxnMFvehkjaZRNV2H/gPXlb0hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "easy-stack": "1.0.1" + }, + "engines": { + "node": ">=1.0.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.28", + "resolved": "https://registry.npmmirror.com/@polka/url/-/url-1.0.0-next.28.tgz", + "integrity": "sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/@sideway/address/-/address-4.1.5.tgz", + "integrity": "sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/@sideway/formula/-/formula-3.0.1.tgz", + "integrity": "sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@soda/get-current-script": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@soda/get-current-script/-/get-current-script-1.0.2.tgz", + "integrity": "sha512-T7VNNlYVM1SgQ+VsMYhnDkcGmWhQdL0bDyGm5TlQ3GBXnJscEClUUOKduWTmm2zCnvNLC1hc3JpuXjs/nFOc5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@trysound/sax": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/@trysound/sax/-/sax-0.2.0.tgz", + "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmmirror.com/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@types/bonjour/-/bonjour-3.5.13.tgz", + "integrity": "sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmmirror.com/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.4.tgz", + "integrity": "sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmmirror.com/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmmirror.com/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "5.0.6", + "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-5.0.6.tgz", + "integrity": "sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/express/node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmmirror.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-proxy": { + "version": "1.17.16", + "resolved": "https://registry.npmmirror.com/@types/http-proxy/-/http-proxy-1.17.16.tgz", + "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "22.13.9", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-22.13.9.tgz", + "integrity": "sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.20.0" + } + }, + "node_modules/@types/node-forge": { + "version": "1.3.11", + "resolved": "https://registry.npmmirror.com/@types/node-forge/-/node-forge-1.3.11.tgz", + "integrity": "sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.18", + "resolved": "https://registry.npmmirror.com/@types/qs/-/qs-6.9.18.tgz", + "integrity": "sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmmirror.com/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.4", + "resolved": "https://registry.npmmirror.com/@types/serve-index/-/serve-index-1.9.4.tgz", + "integrity": "sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmmirror.com/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.36", + "resolved": "https://registry.npmmirror.com/@types/sockjs/-/sockjs-0.3.36.tgz", + "integrity": "sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmmirror.com/@types/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8svvI3hMyvN0kKCJMvTJP/x6Y/EoQbepff882wL+Sn5QsXb3etnamgrJq4isrBxSJj5L2AuXcI0+bgkoAXGUJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vue/cli-overlay": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-5.0.8.tgz", + "integrity": "sha512-KmtievE/B4kcXp6SuM2gzsnSd8WebkQpg3XaB6GmFh1BJGRqa1UiW9up7L/Q67uOdTigHxr5Ar2lZms4RcDjwQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/cli-plugin-router": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-router/-/cli-plugin-router-5.0.8.tgz", + "integrity": "sha512-Gmv4dsGdAsWPqVijz3Ux2OS2HkMrWi1ENj2cYL75nUeL+Xj5HEstSqdtfZ0b1q9NCce+BFB6QnHfTBXc/fCvMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/cli-shared-utils": "^5.0.8" + }, + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-plugin-vuex": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-5.0.8.tgz", + "integrity": "sha512-HSYWPqrunRE5ZZs8kVwiY6oWcn95qf/OQabwLfprhdpFWAGtLStShjsGED2aDpSSeGAskQETrtR/5h7VqgIlBA==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@vue/cli-service": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + } + }, + "node_modules/@vue/cli-service": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-5.0.8.tgz", + "integrity": "sha512-nV7tYQLe7YsTtzFrfOMIHc5N2hp5lHG2rpYr0aNja9rNljdgcPZLyQRb2YRivTHqTv7lI962UXFURcpStHgyFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-compilation-targets": "^7.12.16", + "@soda/friendly-errors-webpack-plugin": "^1.8.0", + "@soda/get-current-script": "^1.0.2", + "@types/minimist": "^1.2.0", + "@vue/cli-overlay": "^5.0.8", + "@vue/cli-plugin-router": "^5.0.8", + "@vue/cli-plugin-vuex": "^5.0.8", + "@vue/cli-shared-utils": "^5.0.8", + "@vue/component-compiler-utils": "^3.3.0", + "@vue/vue-loader-v15": "npm:vue-loader@^15.9.7", + "@vue/web-component-wrapper": "^1.3.0", + "acorn": "^8.0.5", + "acorn-walk": "^8.0.2", + "address": "^1.1.2", + "autoprefixer": "^10.2.4", + "browserslist": "^4.16.3", + "case-sensitive-paths-webpack-plugin": "^2.3.0", + "cli-highlight": "^2.1.10", + "clipboardy": "^2.3.0", + "cliui": "^7.0.4", + "copy-webpack-plugin": "^9.0.1", + "css-loader": "^6.5.0", + "css-minimizer-webpack-plugin": "^3.0.2", + "cssnano": "^5.0.0", + "debug": "^4.1.1", + "default-gateway": "^6.0.3", + "dotenv": "^10.0.0", + "dotenv-expand": "^5.1.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "hash-sum": "^2.0.0", + "html-webpack-plugin": "^5.1.0", + "is-file-esm": "^1.0.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "mini-css-extract-plugin": "^2.5.3", + "minimist": "^1.2.5", + "module-alias": "^2.2.2", + "portfinder": "^1.0.26", + "postcss": "^8.2.6", + "postcss-loader": "^6.1.1", + "progress-webpack-plugin": "^1.0.12", + "ssri": "^8.0.1", + "terser-webpack-plugin": "^5.1.1", + "thread-loader": "^3.0.0", + "vue-loader": "^17.0.0", + "vue-style-loader": "^4.1.3", + "webpack": "^5.54.0", + "webpack-bundle-analyzer": "^4.4.0", + "webpack-chain": "^6.5.1", + "webpack-dev-server": "^4.7.3", + "webpack-merge": "^5.7.3", + "webpack-virtual-modules": "^0.4.2", + "whatwg-fetch": "^3.6.2" + }, + "bin": { + "vue-cli-service": "bin/vue-cli-service.js" + }, + "engines": { + "node": "^12.0.0 || >= 14.0.0" + }, + "peerDependencies": { + "vue-template-compiler": "^2.0.0", + "webpack-sources": "*" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "less-loader": { + "optional": true + }, + "pug-plain-loader": { + "optional": true + }, + "raw-loader": { + "optional": true + }, + "sass-loader": { + "optional": true + }, + "stylus-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/@vue/cli-shared-utils": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-5.0.8.tgz", + "integrity": "sha512-uK2YB7bBVuQhjOJF+O52P9yFMXeJVj7ozqJkwYE9PlMHL1LMHjtCYm4cSdOebuPzyP+/9p0BimM/OqxsevIopQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@achrinza/node-ipc": "^9.2.5", + "chalk": "^4.1.2", + "execa": "^1.0.0", + "joi": "^17.4.0", + "launch-editor": "^2.2.1", + "lru-cache": "^6.0.0", + "node-fetch": "^2.6.7", + "open": "^8.0.2", + "ora": "^5.3.0", + "read-pkg": "^5.1.1", + "semver": "^7.3.4", + "strip-ansi": "^6.0.0" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vue/compiler-sfc": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-2.7.16.tgz", + "integrity": "sha512-KWhJ9k5nXuNtygPU7+t1rX6baZeqOYLEforUPjgNDBnLicfHCoi48H87Q8XyLZOrNNsmhuwKqtpDQWjEFe6Ekg==", + "dependencies": { + "@babel/parser": "^7.23.5", + "postcss": "^8.4.14", + "source-map": "^0.6.1" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vue/component-compiler-utils/node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vue/vue-loader-v15": { + "name": "vue-loader", + "version": "15.11.1", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.11.1.tgz", + "integrity": "sha512-0iw4VchYLePqJfJu9s62ACWUXeSqM30SQqlIftbYWM3C+jpPcEHKSPUZBLjSF9au4HTHQ/naF6OGnO3Q/qGR3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "prettier": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/@vue/vue-loader-v15/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.4", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.11.0" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/address": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/address/-/address-1.2.2.tgz", + "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "license": "Apache-2.0", + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "dependencies": { + "babel-runtime": "6.x" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.13.2", + "resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.13.2.tgz", + "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.8.2.tgz", + "integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==", + "license": "MIT" + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "license": "MIT", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true, + "license": "MIT" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/bonjour-service": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.24.4", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.24.4.tgz", + "integrity": "sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001702", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001702.tgz", + "integrity": "sha512-LoPe/D7zioC0REI5W73PeR1e1MLCipRGq/VkovJnd6Df+QVqT+vT33OXCp8QUd7kA7RZrHWxb1B36OQKI/0gOA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "license": "ISC", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/colord": { + "version": "2.9.3", + "resolved": "https://registry.npmmirror.com/colord/-/colord-2.9.3.tgz", + "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", + "dev": true, + "license": "MIT" + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmmirror.com/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz", + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/compression/-/compression-1.8.0.tgz", + "integrity": "sha512-k6WLKfunuqCYD3t6AsuPGvQWaKwuLLh2/xHNcX4qE+vIfDNXpSqnrhwA7O53R7WVQUnt8dVAIW+YHr7xTgOgGA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "compressible": "~2.0.18", + "debug": "2.6.9", + "negotiator": "~0.6.4", + "on-headers": "~1.0.2", + "safe-buffer": "5.2.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "deprecated": "Please upgrade to consolidate v1.0.0+ as it has been modernized with several long-awaited fixes implemented. Maintenance is supported by Forward Email at https://forwardemail.net ; follow/watch https://github.com/ladjs/consolidate for updates and release changelog", + "dev": true, + "license": "MIT", + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-webpack-plugin": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-9.1.0.tgz", + "integrity": "sha512-rxnR7PaGigJzhqETHGmAcxKnLZSR5u1Y3/bcIv/1FnqXedcL/E2ewK7ZCNrArJKCiSv8yVXhTqetJh8inDvfsA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.7", + "glob-parent": "^6.0.1", + "globby": "^11.0.3", + "normalize-path": "^3.0.0", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/core-js": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true, + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "license": "MIT" + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/cross-spawn/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/css-declaration-sorter": { + "version": "6.4.1", + "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz", + "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, + "node_modules/css-loader": { + "version": "6.11.0", + "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-6.11.0.tgz", + "integrity": "sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.33", + "postcss-modules-extract-imports": "^3.1.0", + "postcss-modules-local-by-default": "^4.0.5", + "postcss-modules-scope": "^3.2.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/css-loader/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/css-minimizer-webpack-plugin": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/css-minimizer-webpack-plugin/-/css-minimizer-webpack-plugin-3.4.1.tgz", + "integrity": "sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano": "^5.0.6", + "jest-worker": "^27.0.2", + "postcss": "^8.3.5", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "@parcel/css": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + } + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/css-minimizer-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.14", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssnano": { + "version": "5.1.15", + "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-5.1.15.tgz", + "integrity": "sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-preset-default": "^5.2.14", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/cssnano" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-preset-default": { + "version": "5.2.14", + "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-5.2.14.tgz", + "integrity": "sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-declaration-sorter": "^6.3.1", + "cssnano-utils": "^3.1.0", + "postcss-calc": "^8.2.3", + "postcss-colormin": "^5.3.1", + "postcss-convert-values": "^5.1.3", + "postcss-discard-comments": "^5.1.2", + "postcss-discard-duplicates": "^5.1.0", + "postcss-discard-empty": "^5.1.1", + "postcss-discard-overridden": "^5.1.0", + "postcss-merge-longhand": "^5.1.7", + "postcss-merge-rules": "^5.1.4", + "postcss-minify-font-values": "^5.1.0", + "postcss-minify-gradients": "^5.1.1", + "postcss-minify-params": "^5.1.4", + "postcss-minify-selectors": "^5.2.1", + "postcss-normalize-charset": "^5.1.0", + "postcss-normalize-display-values": "^5.1.0", + "postcss-normalize-positions": "^5.1.1", + "postcss-normalize-repeat-style": "^5.1.1", + "postcss-normalize-string": "^5.1.0", + "postcss-normalize-timing-functions": "^5.1.0", + "postcss-normalize-unicode": "^5.1.1", + "postcss-normalize-url": "^5.1.0", + "postcss-normalize-whitespace": "^5.1.1", + "postcss-ordered-values": "^5.1.3", + "postcss-reduce-initial": "^5.1.2", + "postcss-reduce-transforms": "^5.1.0", + "postcss-svgo": "^5.1.0", + "postcss-unique-selectors": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/cssnano-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cssnano-utils/-/cssnano-utils-3.1.0.tgz", + "integrity": "sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/csso": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-tree": "^1.1.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debounce": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/debounce/-/debounce-1.2.1.tgz", + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "license": "MIT", + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.113", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.5.113.tgz", + "integrity": "sha512-wjT2O4hX+wdWPJ76gWSkMhcHAV2PTMX+QetUCPYEdCIe+cxmgzzSSiGRCKW8nuh4mwKZlpv0xvoW7OF2X+wmHg==", + "dev": true, + "license": "ISC" + }, + "node_modules/element-ui": { + "version": "2.15.14", + "resolved": "https://registry.npmmirror.com/element-ui/-/element-ui-2.15.14.tgz", + "integrity": "sha512-2v9fHL0ZGINotOlRIAJD5YuVB8V7WKxrE9Qy7dXhRipa035+kF7WuU/z+tEmLVPBcJ0zt8mOu1DKpWcVzBK8IA==", + "license": "MIT", + "dependencies": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + }, + "peerDependencies": { + "vue": "^2.5.17" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true, + "license": "BSD-2-Clause", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-1.6.0.tgz", + "integrity": "sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true, + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true, + "license": "Unlicense", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.21.2", + "resolved": "https://registry.npmmirror.com/express/-/express-4.21.2.tgz", + "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.12", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/express/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/fast-uri/-/fast-uri-3.0.6.tgz", + "integrity": "sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flyio": { + "version": "0.6.14", + "resolved": "https://registry.npmmirror.com/flyio/-/flyio-0.6.14.tgz", + "integrity": "sha512-RE2OXE1ZZmcXOKb0jCtGyquHDxpAqHg17CZ8lmQKRfl3x1kP+NBpaQDx4WgN7DNpLJjFnspTzTEQpwRGg6/xaA==", + "license": "MIT", + "dependencies": { + "request": "^2.85.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmmirror.com/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/fs-monkey/-/fs-monkey-1.0.6.tgz", + "integrity": "sha512-b1FMfwetIKymC0eioW7mTywihSQE4oLzQn1dB6rZB5fx/3NpNEdAWeCSMB+60/AeT0TCXsxzAlcYVEFCTAksWg==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "duplexer": "^0.1.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true, + "license": "MIT" + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-sum": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-2.0.0.tgz", + "integrity": "sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==", + "dev": true, + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": "*" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true, + "license": "MIT" + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-2.5.2.tgz", + "integrity": "sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ], + "license": "MIT" + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/html-minifier-terser": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", + "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "^5.2.2", + "commander": "^8.3.0", + "he": "^1.2.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.10.0" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/html-webpack-plugin": { + "version": "5.6.3", + "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-5.6.3.tgz", + "integrity": "sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/html-minifier-terser": "^6.0.0", + "html-minifier-terser": "^6.0.2", + "lodash": "^4.17.21", + "pretty-error": "^4.0.0", + "tapable": "^2.0.0" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/html-webpack-plugin" + }, + "peerDependencies": { + "@rspack/core": "0.x || 1.x", + "webpack": "^5.20.0" + }, + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.9", + "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.9.tgz", + "integrity": "sha512-n1XsPy3rXVxlqxVioEWdC+0+M+SQw0DpJynwtOPo1X+ZlvdzTLtDBIJJlDQTnwZIFJrZSzSGmIOUdP8tu+SgLw==", + "dev": true, + "license": "MIT" + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-2.0.7.tgz", + "integrity": "sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immutable": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ipaddr.js": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-2.2.0.tgz", + "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-file-esm": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-file-esm/-/is-file-esm-1.0.0.tgz", + "integrity": "sha512-rZlaNKb4Mr8WlRu2A9XdeoKgnO5aA53XdPHgCKVyCrQ/rWi89RET1+bq37Ru46obaQXeiX4vmFIm1vks41hoSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "read-pkg-up": "^7.0.1" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "license": "MIT" + }, + "node_modules/javascript-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-2.1.0.tgz", + "integrity": "sha512-JVAfqNPTvNq3sB/VHQJAFxN/sPgKnsKrCwyRt15zwNCdrMMJDdcEOdubuy+DuJYYdm0ox1J4uzEuYKkN+9yhVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmmirror.com/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joi": { + "version": "17.13.3", + "resolved": "https://registry.npmmirror.com/joi/-/joi-17.13.3.tgz", + "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "license": "ISC" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.10.0", + "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.10.0.tgz", + "integrity": "sha512-D7dBRJo/qcGX9xlvt/6wUYzQxjh5G1RvZPgPv8vi4KRU99DVQL/oW7tnVOCCTm2HGeo3C5HvGE5Yrh6UBoZ0vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.8.1" + } + }, + "node_modules/launch-editor-middleware": { + "version": "2.10.0", + "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.10.0.tgz", + "integrity": "sha512-RzZu7MeVlE3p1H6Sadc2BhuDGAj7bkeDCBpNq/zSENP4ohJGhso00k5+iYaRwKshIpiOAhMmimce+5D389xmSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "launch-editor": "^2.10.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "license": "Unlicense", + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.9.2", + "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.9.2.tgz", + "integrity": "sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "schema-utils": "^4.0.0", + "tapable": "^2.2.1" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/mini-css-extract-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true, + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/module-alias": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/module-alias/-/module-alias-2.2.3.tgz", + "integrity": "sha512-23g5BFj4zdQL/b6tor7Ji+QY4pEfNH784BMslY9Qb0UnJWRAt+lQGLYmRaM0KDBwIG23ffEBELhZDP2rhi9f/Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mrmime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.9", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.9.tgz", + "integrity": "sha512-SppoicMGpZvbF1l3z4x7No3OlIjP7QJvC9XR7AhZr1kL133KHnKPztkKDc+Ir4aJ/1VhTySrtKhrsycmrMQfvg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.4", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true, + "license": "MIT" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-releases": { + "version": "2.0.19", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha512-1OnlAPZ3zgrk8B91HyRj+eVv+kS5u+Z0SCsak6Xil/kmgEia50ga7zfkumayonZrImffAxPU/5WcyGhzetHNPA==", + "license": "BSD-3-Clause" + }, + "node_modules/normalize.css": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/normalize.css/-/normalize.css-8.0.1.tgz", + "integrity": "sha512-qizSNPO93t1YUuUhP22btGOo3chcvDFqFaj2TRybP0DMxkHOCTYwp3n34fel4a31ORXy4m1Xq0Gyqpb5m33qIg==", + "license": "MIT" + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "license": "(WTFPL OR MIT)", + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true, + "license": "MIT" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.12", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz", + "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/portfinder": { + "version": "1.0.33", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.33.tgz", + "integrity": "sha512-+2jndHT63cL5MdQOwDm9OT2dIe11zVpjV+0GGRXdtO1wpPxv260NfVqoEXtYAi/shanmm3W4+yLduIe55ektTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-calc": { + "version": "8.2.4", + "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-8.2.4.tgz", + "integrity": "sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.9", + "postcss-value-parser": "^4.2.0" + }, + "peerDependencies": { + "postcss": "^8.2.2" + } + }, + "node_modules/postcss-colormin": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-5.3.1.tgz", + "integrity": "sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "colord": "^2.9.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-convert-values": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-5.1.3.tgz", + "integrity": "sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-comments": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-5.1.2.tgz", + "integrity": "sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-5.1.0.tgz", + "integrity": "sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-empty": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-5.1.1.tgz", + "integrity": "sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-5.1.0.tgz", + "integrity": "sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-loader": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-6.2.1.tgz", + "integrity": "sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "cosmiconfig": "^7.0.0", + "klona": "^2.0.5", + "semver": "^7.3.5" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-loader/node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "5.1.7", + "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-5.1.7.tgz", + "integrity": "sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "stylehacks": "^5.1.1" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-merge-rules": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-5.1.4.tgz", + "integrity": "sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0", + "cssnano-utils": "^3.1.0", + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-5.1.0.tgz", + "integrity": "sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-gradients": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-5.1.1.tgz", + "integrity": "sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "colord": "^2.9.1", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-params": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-5.1.4.tgz", + "integrity": "sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-minify-selectors": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-5.2.1.tgz", + "integrity": "sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.1.0.tgz", + "integrity": "sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.2.0.tgz", + "integrity": "sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==", + "dev": true, + "license": "MIT", + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^7.0.0", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-3.2.1.tgz", + "integrity": "sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==", + "dev": true, + "license": "ISC", + "dependencies": { + "postcss-selector-parser": "^7.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { + "version": "7.1.0", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz", + "integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-5.1.0.tgz", + "integrity": "sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-5.1.0.tgz", + "integrity": "sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-positions": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-5.1.1.tgz", + "integrity": "sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-5.1.1.tgz", + "integrity": "sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-string": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-5.1.0.tgz", + "integrity": "sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-5.1.0.tgz", + "integrity": "sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-unicode": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-5.1.1.tgz", + "integrity": "sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-url": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-5.1.0.tgz", + "integrity": "sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==", + "dev": true, + "license": "MIT", + "dependencies": { + "normalize-url": "^6.0.1", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-normalize-whitespace": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-5.1.1.tgz", + "integrity": "sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-ordered-values": { + "version": "5.1.3", + "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-5.1.3.tgz", + "integrity": "sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssnano-utils": "^3.1.0", + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-5.1.2.tgz", + "integrity": "sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "caniuse-api": "^3.0.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-5.1.0.tgz", + "integrity": "sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-5.1.0.tgz", + "integrity": "sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.2.0", + "svgo": "^2.7.0" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-unique-selectors": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-5.1.1.tgz", + "integrity": "sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==", + "dev": true, + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.0.5" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "license": "MIT", + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-error": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-4.0.0.tgz", + "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^3.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true, + "license": "MIT" + }, + "node_modules/progress-webpack-plugin": { + "version": "1.0.16", + "resolved": "https://registry.npmmirror.com/progress-webpack-plugin/-/progress-webpack-plugin-1.0.16.tgz", + "integrity": "sha512-sdiHuuKOzELcBANHfrupYo+r99iPRyOnw15qX+rNlVUqXGfjXdH4IgxriKwG1kNJwVswKQHMdj1hYZMcb9jFaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^2.1.0", + "figures": "^2.0.0", + "log-update": "^2.3.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0" + } + }, + "node_modules/progress-webpack-plugin/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/progress-webpack-plugin/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true, + "license": "MIT" + }, + "node_modules/progress-webpack-plugin/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/progress-webpack-plugin/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/psl": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==", + "license": "MIT" + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/renderkid": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-3.0.0.tgz", + "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "dev": true, + "license": "MIT", + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^6.0.1" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.85.1", + "resolved": "https://registry.npmmirror.com/sass/-/sass-1.85.1.tgz", + "integrity": "sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/sass-loader": { + "version": "12.6.0", + "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-12.6.0.tgz", + "integrity": "sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "klona": "^2.0.4", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/schema-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-3.3.0.tgz", + "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true, + "license": "MIT" + }, + "node_modules/selfsigned": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-2.4.1.tgz", + "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node-forge": "^1.3.0", + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmmirror.com/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true, + "license": "ISC" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.8.2.tgz", + "integrity": "sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.21", + "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz", + "integrity": "sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sshpk": { + "version": "1.18.0", + "resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", + "dev": true, + "license": "MIT" + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "dev": true, + "license": "MIT" + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/stylehacks": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-5.1.1.tgz", + "integrity": "sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.21.4", + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >=14.0" + }, + "peerDependencies": { + "postcss": "^8.2.15" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svgo": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-2.8.0.tgz", + "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@trysound/sax": "0.2.0", + "commander": "^7.2.0", + "css-select": "^4.1.3", + "css-tree": "^1.1.3", + "csso": "^4.2.0", + "picocolors": "^1.0.0", + "stable": "^0.1.8" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/svgo/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/terser": { + "version": "5.39.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-5.39.0.tgz", + "integrity": "sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.14", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-5.3.14.tgz", + "integrity": "sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-loader": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-3.0.4.tgz", + "integrity": "sha512-ByaL2TPb+m6yArpqQUZvP+5S1mZtXsEP7nWKKlAUTm7fCml8kB5s1uI3+eHRP2bk5mVYfRSBI7FFf+tWEyLZwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^4.1.0", + "loader-utils": "^2.0.0", + "neo-async": "^2.6.2", + "schema-utils": "^3.0.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.27.0 || ^5.0.0" + } + }, + "node_modules/thread-loader/node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/thread-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true, + "license": "MIT" + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "license": "Unlicense" + }, + "node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "6.20.0", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.20.0.tgz", + "integrity": "sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==", + "dev": true, + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true, + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vue": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.7.16.tgz", + "integrity": "sha512-4gCtFXaAA3zYZdTp5s4Hl2sozuySsgz4jy1EnpBHNfpMa9dK1ZCG7viqBPCwXtmgc8nHqUsAu3G4gtmXkkY3Sw==", + "deprecated": "Vue 2 has reached EOL and is no longer actively maintained. See https://v2.vuejs.org/eol/ for more details.", + "license": "MIT", + "dependencies": { + "@vue/compiler-sfc": "2.7.16", + "csstype": "^3.1.0" + } + }, + "node_modules/vue-axios": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/vue-axios/-/vue-axios-3.5.2.tgz", + "integrity": "sha512-GP+dct7UlAWkl1qoP3ppw0z6jcSua5/IrMpjB5O8bh089iIiJ+hdxPYH2NPEpajlYgkW5EVMP95ttXWdas1O0g==", + "license": "MIT", + "peerDependencies": { + "axios": "*", + "vue": "^3.0.0 || ^2.0.0" + } + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-loader": { + "version": "17.4.2", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-17.4.2.tgz", + "integrity": "sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "hash-sum": "^2.0.0", + "watchpack": "^2.4.0" + }, + "peerDependencies": { + "webpack": "^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "@vue/compiler-sfc": { + "optional": true + }, + "vue": { + "optional": true + } + } + }, + "node_modules/vue-loader/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/vue-router": { + "version": "3.6.5", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.6.5.tgz", + "integrity": "sha512-VYXZQLtjuvKxxcshuRAwjHnciqZVoXAjTjcqBTz4rKc8qih9g9pI3hbDjmqXaHdgL3v8pV6P8Z335XvHzESxLQ==", + "license": "MIT" + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-style-loader/node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vuex": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/vuex/-/vuex-3.6.2.tgz", + "integrity": "sha512-ETW44IqCgBpVomy520DT5jf8n0zoCac+sxWnn+hMe/CzaSejb/eVw2YToiXYX+Ex/AuHHia28vWTq4goAexFbw==", + "license": "MIT", + "peerDependencies": { + "vue": "^2.0.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/webpack": { + "version": "5.98.0", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-5.98.0.tgz", + "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.17.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.11", + "watchpack": "^2.4.1", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "4.10.2", + "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", + "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@discoveryjs/json-ext": "0.5.7", + "acorn": "^8.0.4", + "acorn-walk": "^8.0.0", + "commander": "^7.2.0", + "debounce": "^1.2.1", + "escape-string-regexp": "^4.0.0", + "gzip-size": "^6.0.0", + "html-escaper": "^2.0.2", + "opener": "^1.5.2", + "picocolors": "^1.0.0", + "sirv": "^2.0.3", + "ws": "^7.3.1" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/webpack-chain": { + "version": "6.5.1", + "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-6.5.1.tgz", + "integrity": "sha512-7doO/SRtLu8q5WM0s7vPKPWX580qhi0/yBHkOxNkv50f6qB76Zy9o2wRTrrPULqYTvQlVHuvbA8v+G5ayuUDsA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "5.3.4", + "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-5.3.4.tgz", + "integrity": "sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-middleware/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-middleware/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-middleware/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.2", + "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-4.15.2.tgz", + "integrity": "sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.5", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.4", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack-dev-server/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-dev-server/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.18.1", + "resolved": "https://registry.npmmirror.com/ws/-/ws-8.18.1.tgz", + "integrity": "sha512-RKW2aJZMXeMxVpnZ6bck+RswznaxmzdULiBr6KY7XkTnW8uvt0iT9H5DkHUChXrc+uurzwa0rVI16n/Xzjdz1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.4.6", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.4.6.tgz", + "integrity": "sha512-5tyDlKLqPfMqjT3Q9TAqf2YqjwmnUleZwzJi1A5qXnlBCdj2AtOJ6wAWdglTIDOPgOiOrXeBeFcsQ8+aGQ6QbA==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-4.3.0.tgz", + "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmmirror.com/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmmirror.com/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + } + } +} diff --git a/main/manager-web/package.json b/main/manager-web/package.json new file mode 100644 index 00000000..05c696ca --- /dev/null +++ b/main/manager-web/package.json @@ -0,0 +1,32 @@ +{ + "name": "xiaozhi", + "version": "0.1.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build" + }, + "dependencies": { + "axios": "^1.8.1", + "element-ui": "^2.15.14", + "flyio": "^0.6.14", + "normalize.css": "^8.0.1", + "vue": "^2.6.14", + "vue-axios": "^3.5.2", + "vue-router": "^3.6.5", + "vuex": "^3.6.2" + }, + "devDependencies": { + "@vue/cli-plugin-router": "~5.0.0", + "@vue/cli-plugin-vuex": "~5.0.0", + "@vue/cli-service": "~5.0.0", + "sass": "^1.32.7", + "sass-loader": "^12.0.0", + "vue-template-compiler": "^2.6.14" + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not dead" + ] +} diff --git a/main/manager-web/public/favicon.ico b/main/manager-web/public/favicon.ico new file mode 100644 index 00000000..df36fcfb Binary files /dev/null and b/main/manager-web/public/favicon.ico differ diff --git a/main/manager-web/public/index.html b/main/manager-web/public/index.html new file mode 100644 index 00000000..3e5a1396 --- /dev/null +++ b/main/manager-web/public/index.html @@ -0,0 +1,17 @@ + + + + + + + + <%= htmlWebpackPlugin.options.title %> + + + +

+ + + diff --git a/main/manager-web/src/App.vue b/main/manager-web/src/App.vue new file mode 100644 index 00000000..c4f1de8c --- /dev/null +++ b/main/manager-web/src/App.vue @@ -0,0 +1,29 @@ + + + diff --git a/main/manager-web/src/apis/api.js b/main/manager-web/src/apis/api.js new file mode 100755 index 00000000..8f971d29 --- /dev/null +++ b/main/manager-web/src/apis/api.js @@ -0,0 +1,24 @@ +// 引入各个模块的请求 +import user from './module/user.js' + +/** + * 接口地址 + * 在开发阶段,如果地址写的是相对路径,请与vue.config.js的devServer配置相结合,方便跨域请求 + * + */ +const DEV_API_SERVICE = 'https://apifoxmock.com/m1/5931378-5618560-default' + +/** + * 根据开发环境返回接口url + * @returns {string} + */ +export function getServiceUrl() { + return DEV_API_SERVICE +} + + +/** request服务封装 */ +export default { + getServiceUrl, + user, +} diff --git a/main/manager-web/src/apis/httpRequest.js b/main/manager-web/src/apis/httpRequest.js new file mode 100755 index 00000000..aeddd188 --- /dev/null +++ b/main/manager-web/src/apis/httpRequest.js @@ -0,0 +1,132 @@ +import {goToPage, showDanger, showWarning} from '../utils/index' +import Constant from '../utils/constant' +import Fly from 'flyio/dist/npm/fly'; + +const fly = new Fly() +// 设置超时 +fly.config.timeout = 30000 + +/** + * Request服务封装 + */ +export default { + sendRequest, + reAjaxFun, + clearRequestTime +} + +function sendRequest() { + return { + _sucCallback: null, + _failCallback: null, + _method: 'GET', + _data: {}, + _header: {'content-type': 'application/json; charset=utf-8'}, + _url: '', + 'send'() { + this._header.token = localStorage.getItem(Constant.STORAGE_KEY.TOKEN) + fly.request(this._url, this._data, { + method: this._method, + headers: this._header + }).then((res) => { + const error = httpHandlerError(res, this._failCallback) + if (error) { + return + } + if (this._sucCallback) { + this._sucCallback(res) + } + }).catch((res) => { + console.log(1111, res) + httpHandlerError(res, this._failCallback) + }) + return this + }, + 'success'(callback) { + this._sucCallback = callback + return this + }, + 'fail'(callback) { + this._failCallback = callback + return this + }, + 'url'(url) { + if (url) { + url = url.replaceAll('$', '/') + } + this._url = url + return this + }, + 'data'(data) { + this._data = data + return this + }, + 'method'(method) { + this._method = method + return this + }, + 'header'(header) { + this._header = header + return this + }, + 'showLoading'(showLoading) { + this._showLoading = showLoading + return this + }, + 'async'(flag) { + this.async = flag + } + } +} + +/** + * Info 请求完成后返回信息 + * callBack 回调函数 + * errTip 自定义错误信息 + */ +function httpHandlerError(info, callBack) { + /** 请求成功,退出该函数 可以根据项目需求来判断是否请求成功。这里判断的是status为200的时候是成功 */ + let networkError = false + if (info.status === 200) { + if (info.data.code === 'success' || info.data.code === 0) { + return networkError + } else if (info.data.code === 401) { + goToPage(Constant.PAGE.LOGIN, true) + return true + } else { + showDanger(info.data.msg) + return true + } + } + if (callBack) { + callBack(info) + } else { + showDanger(`网络请求出现了错误【${info.status}】`) + } + return true +} + +let requestTime = 0 +let reAjaxSec = 2 + +function reAjaxFun(fn) { + let nowTimeSec = new Date().getTime() / 1000 + if (requestTime === 0) { + requestTime = nowTimeSec + } + let ajaxIndex = parseInt((nowTimeSec - requestTime) / reAjaxSec) + if (ajaxIndex > 10) { + showWarning('似乎无法连接服务器') + } else { + showWarning('正在连接服务器(' + ajaxIndex + ')') + } + if (fn) { + setTimeout(() => { + fn() + }, reAjaxSec * 1000) + } +} + +function clearRequestTime() { + requestTime = 0 +} \ No newline at end of file diff --git a/main/manager-web/src/apis/module/user.js b/main/manager-web/src/apis/module/user.js new file mode 100755 index 00000000..b59959cd --- /dev/null +++ b/main/manager-web/src/apis/module/user.js @@ -0,0 +1,46 @@ +import RequestService from '../httpRequest' +import {getServiceUrl} from '../api' + + +export default { + // 登录 + login(loginForm, callback) { + RequestService.sendRequest().url(`${getServiceUrl()}/api/v1/user/login`).method('POST') + .data(loginForm) + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .fail(() => { + RequestService.reAjaxFun(() => { + this.login(loginForm, callback) + }) + }).send() + }, + // 获取用户信息 + getUserInfo(callback) { + RequestService.sendRequest().url(`${getServiceUrl()}/api/v1/user/info`).method('GET') + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .fail(() => { + RequestService.reAjaxFun(() => { + this.getUserInfo() + }) + }).send() + }, + // 获取设备信息 + getHomeList(callback) { + RequestService.sendRequest().url(`${getServiceUrl()}/api/v1/user/device/bind`).method('GET') + .success((res) => { + RequestService.clearRequestTime() + callback(res) + }) + .fail(() => { + RequestService.reAjaxFun(() => { + this.getUserInfo() + }) + }).send() + }, +} diff --git a/main/manager-web/src/assets/home/avatar.png b/main/manager-web/src/assets/home/avatar.png new file mode 100644 index 00000000..53304c7c Binary files /dev/null and b/main/manager-web/src/assets/home/avatar.png differ diff --git a/main/manager-web/src/assets/home/background.png b/main/manager-web/src/assets/home/background.png new file mode 100644 index 00000000..f7c3d357 Binary files /dev/null and b/main/manager-web/src/assets/home/background.png differ diff --git a/main/manager-web/src/assets/home/close.png b/main/manager-web/src/assets/home/close.png new file mode 100644 index 00000000..e0eef990 Binary files /dev/null and b/main/manager-web/src/assets/home/close.png differ diff --git a/main/manager-web/src/assets/home/delete.png b/main/manager-web/src/assets/home/delete.png new file mode 100644 index 00000000..af0e4cd4 Binary files /dev/null and b/main/manager-web/src/assets/home/delete.png differ diff --git a/main/manager-web/src/assets/home/equipment.png b/main/manager-web/src/assets/home/equipment.png new file mode 100644 index 00000000..fd458789 Binary files /dev/null and b/main/manager-web/src/assets/home/equipment.png differ diff --git a/main/manager-web/src/assets/home/info.png b/main/manager-web/src/assets/home/info.png new file mode 100644 index 00000000..108e0eae Binary files /dev/null and b/main/manager-web/src/assets/home/info.png differ diff --git a/main/manager-web/src/assets/home/main-top-bg.png b/main/manager-web/src/assets/home/main-top-bg.png new file mode 100644 index 00000000..e56ba941 Binary files /dev/null and b/main/manager-web/src/assets/home/main-top-bg.png differ diff --git a/main/manager-web/src/assets/home/red-info.png b/main/manager-web/src/assets/home/red-info.png new file mode 100644 index 00000000..e0df0cc6 Binary files /dev/null and b/main/manager-web/src/assets/home/red-info.png differ diff --git a/main/manager-web/src/assets/home/search.png b/main/manager-web/src/assets/home/search.png new file mode 100644 index 00000000..a83bd7c5 Binary files /dev/null and b/main/manager-web/src/assets/home/search.png differ diff --git a/main/manager-web/src/assets/home/setting-user.png b/main/manager-web/src/assets/home/setting-user.png new file mode 100644 index 00000000..3849bdb9 Binary files /dev/null and b/main/manager-web/src/assets/home/setting-user.png differ diff --git a/main/manager-web/src/assets/login/background.png b/main/manager-web/src/assets/login/background.png new file mode 100644 index 00000000..e81d6ecc Binary files /dev/null and b/main/manager-web/src/assets/login/background.png differ diff --git a/main/manager-web/src/assets/login/down-arrow.png b/main/manager-web/src/assets/login/down-arrow.png new file mode 100644 index 00000000..25e3bcc6 Binary files /dev/null and b/main/manager-web/src/assets/login/down-arrow.png differ diff --git a/main/manager-web/src/assets/login/hi.png b/main/manager-web/src/assets/login/hi.png new file mode 100644 index 00000000..c81f066f Binary files /dev/null and b/main/manager-web/src/assets/login/hi.png differ diff --git a/main/manager-web/src/assets/login/password.png b/main/manager-web/src/assets/login/password.png new file mode 100644 index 00000000..603ca232 Binary files /dev/null and b/main/manager-web/src/assets/login/password.png differ diff --git a/main/manager-web/src/assets/login/phone.png b/main/manager-web/src/assets/login/phone.png new file mode 100644 index 00000000..e7410b11 Binary files /dev/null and b/main/manager-web/src/assets/login/phone.png differ diff --git a/main/manager-web/src/assets/login/shield.png b/main/manager-web/src/assets/login/shield.png new file mode 100644 index 00000000..b2c2e08f Binary files /dev/null and b/main/manager-web/src/assets/login/shield.png differ diff --git a/main/manager-web/src/assets/login/username.png b/main/manager-web/src/assets/login/username.png new file mode 100644 index 00000000..3e7de3e4 Binary files /dev/null and b/main/manager-web/src/assets/login/username.png differ diff --git a/main/manager-web/src/assets/logo.png b/main/manager-web/src/assets/logo.png new file mode 100644 index 00000000..f3d2503f Binary files /dev/null and b/main/manager-web/src/assets/logo.png differ diff --git a/main/manager-web/src/assets/welcome/background.png b/main/manager-web/src/assets/welcome/background.png new file mode 100644 index 00000000..b39cbebb Binary files /dev/null and b/main/manager-web/src/assets/welcome/background.png differ diff --git a/main/manager-web/src/assets/welcome/github.png b/main/manager-web/src/assets/welcome/github.png new file mode 100644 index 00000000..0e984ec7 Binary files /dev/null and b/main/manager-web/src/assets/welcome/github.png differ diff --git a/main/manager-web/src/assets/welcome/more.png b/main/manager-web/src/assets/welcome/more.png new file mode 100644 index 00000000..5acbfa6a Binary files /dev/null and b/main/manager-web/src/assets/welcome/more.png differ diff --git a/main/manager-web/src/assets/welcome/questions.png b/main/manager-web/src/assets/welcome/questions.png new file mode 100644 index 00000000..1fe2ab9b Binary files /dev/null and b/main/manager-web/src/assets/welcome/questions.png differ diff --git a/main/manager-web/src/assets/xiaozhi-ai.png b/main/manager-web/src/assets/xiaozhi-ai.png new file mode 100644 index 00000000..008df015 Binary files /dev/null and b/main/manager-web/src/assets/xiaozhi-ai.png differ diff --git a/main/manager-web/src/assets/xiaozhi-logo.png b/main/manager-web/src/assets/xiaozhi-logo.png new file mode 100644 index 00000000..33050397 Binary files /dev/null and b/main/manager-web/src/assets/xiaozhi-logo.png differ diff --git a/main/manager-web/src/components/HelloWorld.vue b/main/manager-web/src/components/HelloWorld.vue new file mode 100644 index 00000000..2589ba46 --- /dev/null +++ b/main/manager-web/src/components/HelloWorld.vue @@ -0,0 +1,58 @@ + + + + + + diff --git a/main/manager-web/src/main.js b/main/manager-web/src/main.js new file mode 100644 index 00000000..2b6531df --- /dev/null +++ b/main/manager-web/src/main.js @@ -0,0 +1,16 @@ +import Vue from 'vue' +import App from './App.vue' +import router from './router' +import store from './store' +import 'normalize.css/normalize.css' // A modern alternative to CSS resets +import ElementUI from 'element-ui'; +import 'element-ui/lib/theme-chalk/index.css'; + +Vue.use(ElementUI); +Vue.config.productionTip = false + +new Vue({ + router, + store, + render: function (h) { return h(App) } +}).$mount('#app') diff --git a/main/manager-web/src/router/index.js b/main/manager-web/src/router/index.js new file mode 100644 index 00000000..ac895971 --- /dev/null +++ b/main/manager-web/src/router/index.js @@ -0,0 +1,37 @@ +import Vue from 'vue' +import VueRouter from 'vue-router' +import Welcome from '../views/welcome.vue' +import Login from '../views/login.vue' + +Vue.use(VueRouter) + +const routes = [ + { + path: '/', + name: 'welcome', + component: Welcome + }, + { + path: '/login', + name: 'login', + // route level code-splitting + // this generates a separate chunk (about.[hash].js) for this route + // which is lazy-loaded when the route is visited. + component: function () { + return import(/* webpackChunkName: "about" */ '../views/login.vue') + } + }, + { + path: '/home', + name: 'home', + component: function () { + return import(/* webpackChunkName: "about" */ '../views/home.vue') + } + } +] + +const router = new VueRouter({ + routes +}) + +export default router diff --git a/main/manager-web/src/store/index.js b/main/manager-web/src/store/index.js new file mode 100644 index 00000000..ceffa8e3 --- /dev/null +++ b/main/manager-web/src/store/index.js @@ -0,0 +1,17 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +Vue.use(Vuex) + +export default new Vuex.Store({ + state: { + }, + getters: { + }, + mutations: { + }, + actions: { + }, + modules: { + } +}) diff --git a/main/manager-web/src/utils/constant.js b/main/manager-web/src/utils/constant.js new file mode 100755 index 00000000..f34abb32 --- /dev/null +++ b/main/manager-web/src/utils/constant.js @@ -0,0 +1,19 @@ +const HAVE_NO_RESULT = '暂无' +export default { + HAVE_NO_RESULT, // 项目的配置信息 + STORAGE_KEY: { + TOKEN: 'TOKEN', + PUBLIC_KEY: 'PUBLIC_KEY', + USER_TYPE: 'USER_TYPE' + }, + Lang: { + 'zh_cn': 'zh_cn', 'zh_tw': 'zh_tw', 'en': 'en' + }, + FONT_SIZE: { + 'big': 'big', + 'normal': 'normal', + }, // 获取map中的某key + get(map, key) { + return map[key] || HAVE_NO_RESULT + } +} diff --git a/main/manager-web/src/utils/date.js b/main/manager-web/src/utils/date.js new file mode 100755 index 00000000..c6210bc0 --- /dev/null +++ b/main/manager-web/src/utils/date.js @@ -0,0 +1,60 @@ +export const toDate = (date) => { + return isDate(date) ? new Date(date) : null +} + +export const isDate = (date) => { + if (date === null || date === undefined) return false + if (isNaN(new Date(date).getTime())) return false + return true +} + +export const isDateObject = (val) => { + return val instanceof Date +} + +export const formatAddDate = (date, format, addDay) => { + date = toDate(date) + if (!date) { + return '' + } + if (!addDay) { + date.setDate(date.getDate() + addDay) + } + return formatDateTool(date, format || 'yyyy-MM-dd HH:mm:ss') +} + +export const formatDate = (date, format) => { + date = toDate(date) + if (!date) return '' + return formatDateTool(date, format || 'yyyy-MM-dd HH:mm:ss') +} + +function formatDateTool(date, fmt) { + if (/(y+)/.test(fmt)) { + fmt = fmt.replace( + RegExp.$1, + (date.getFullYear() + '').substr(4 - RegExp.$1.length) + ) + } + const o = { + 'M+': date.getMonth() + 1, + 'd+': date.getDate(), + 'h+': date.getHours(), + 'm+': date.getMinutes(), + 's+': date.getSeconds() + } + for (const k in o) { + if (new RegExp(`(${k})`).test(fmt)) { + const str = o[k] + '' + fmt = fmt.replace( + RegExp.$1, + RegExp.$1.length === 1 ? str : padLeftZero(str) + ) + } + } + return fmt +} + +function padLeftZero(str) { + return ('00' + str).substr(str.length) +} diff --git a/main/manager-web/src/utils/index.js b/main/manager-web/src/utils/index.js new file mode 100755 index 00000000..b9c22fbc --- /dev/null +++ b/main/manager-web/src/utils/index.js @@ -0,0 +1,135 @@ +import router from '../router' +import Constant from '../utils/constant' +import { Message } from 'element-ui' + +/** + * 判断用户是否登录 + */ +export function checkUserLogin(fn) { + let token = localStorage.getItem(Constant.STORAGE_KEY.TOKEN) + let userType = localStorage.getItem(Constant.STORAGE_KEY.USER_TYPE) + if (isNull(token) || isNull(userType)) { + goToPage('console', true) + return + } + if (fn) { + fn() + } +} + +/** + * 判断是否为空 + * @param data + * @returns {boolean} + */ +export function isNull(data) { + if (data === undefined) { + return true + } else if (data === null) { + return true + } else if (typeof data === 'string' && (data.length === 0 || data === '' || data === 'undefined' || data === 'null')) { + return true + } else if ((data instanceof Array) && data.length === 0) { + return true + } + return false +} + +/** + * 判断不为空 + * @param data + * @returns {boolean} + */ +export function isNotNull(data) { + return !isNull(data) +} + +/** + * 显示顶部红色通知 + * @param msg + */ +export function showDanger(msg) { + if (isNull(msg)) { + return + } + Message({ + message: msg, + type: 'error' + }) +} + +/** + * 显示顶部橙色通知 + * @param msg + */ +export function showWarning(msg) { + if (isNull(msg)) { + return + } + Message({ + message: msg, + type: 'warning' + }); +} + + + +/** + * 显示顶部绿色通知 + * @param msg + */ +export function showSuccess(msg) { + Message({ + message: msg, + type: 'success' + }) +} + + + +/** + * 页面跳转 + * @param path + * @param isRepalce + */ +export function goToPage(path, isRepalce) { + if (isRepalce) { + router.replace(path) + } else { + router.push(path) + } +} + +/** + * 获取当前vue页面名称 + * @param path + * @param isRepalce + */ +export function getCurrentPage() { + let hash = location.hash.replace('#', '') + if (hash.indexOf('?') > 0) { + hash = hash.substring(0, hash.indexOf('?')) + } + return hash +} + +/** + * 生成从[min,max]的随机数 + * @param min + * @param max + * @returns {number} + */ +export function randomNum(min, max) { + return Math.round(Math.random() * (max - min) + min) +} + + +/** + * 获取uuid + */ +export function getUUID() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => { + return (c === 'x' ? (Math.random() * 16 | 0) : ('r&0x3' | '0x8')).toString(16) + }) +} + diff --git a/main/manager-web/src/views/home.vue b/main/manager-web/src/views/home.vue new file mode 100644 index 00000000..12ab7689 --- /dev/null +++ b/main/manager-web/src/views/home.vue @@ -0,0 +1,640 @@ + + + + + + + diff --git a/main/manager-web/src/views/login.vue b/main/manager-web/src/views/login.vue new file mode 100644 index 00000000..6f6759e7 --- /dev/null +++ b/main/manager-web/src/views/login.vue @@ -0,0 +1,227 @@ + + + + diff --git a/main/manager-web/src/views/welcome.vue b/main/manager-web/src/views/welcome.vue new file mode 100644 index 00000000..19137cd2 --- /dev/null +++ b/main/manager-web/src/views/welcome.vue @@ -0,0 +1,131 @@ + + + + diff --git a/main/xiaozhi-server/app.py b/main/xiaozhi-server/app.py new file mode 100644 index 00000000..bd23c7bc --- /dev/null +++ b/main/xiaozhi-server/app.py @@ -0,0 +1,26 @@ +import asyncio +from config.settings import load_config, check_config_file +from core.websocket_server import WebSocketServer +from core.utils.util import check_ffmpeg_installed + +TAG = __name__ + + +async def main(): + check_config_file() + check_ffmpeg_installed() + config = load_config() + + # 启动 WebSocket 服务器 + ws_server = WebSocketServer(config) + ws_task = asyncio.create_task(ws_server.start()) + + try: + # 等待 WebSocket 服务器运行 + await ws_task + finally: + ws_task.cancel() + + +if __name__ == "__main__": + asyncio.run(main()) diff --git a/config.yaml b/main/xiaozhi-server/config.yaml similarity index 74% rename from config.yaml rename to main/xiaozhi-server/config.yaml index 4261b3eb..a9d51d68 100644 --- a/config.yaml +++ b/main/xiaozhi-server/config.yaml @@ -35,15 +35,10 @@ log: log_file: "server.log" # 设置数据文件路径 data_dir: data -manager: - # 是否启用管理后台 - # 目前这个模块还在开发中,建议:不要修改enabled选项 - enabled: false - ip: 0.0.0.0 - port: 8002 iot: Speaker: - volume: 100 + # 设置esp32的音量,范围0-100 + volume: 80 xiaozhi: type: hello version: 1 @@ -64,23 +59,40 @@ delete_audio: true # 没有语音输入多久后断开连接(秒),默认2分钟,即120秒 close_connection_no_voice_time: 120 -# 是否启用私有配置(Enable private configuration),启用后可以每个设备有不同的配置 -# 目前这个模块还在开发中,建议:不要修改use_private_config选项 -use_private_config: false - CMD_exit: - "退出" - "关闭" # 具体处理时选择的模块(The module selected for specific processing) selected_module: - ASR: FunASR + # 语音活动检测模块,默认使用SileroVAD模型 VAD: SileroVAD + # 语音识别模块,默认使用FunASR本地模型 + ASR: FunASR # 将根据配置名称对应的type调用实际的LLM适配器 LLM: ChatGLMLLM # TTS将根据配置名称对应的type调用实际的TTS适配器 TTS: EdgeTTS - Memory: mem0ai + # 记忆模块,默认不开启记忆;如果想使用超长记忆,推荐使用mem0ai;如果注重隐私,请使用本地的mem_local_short + Memory: nomem + # 意图识别模块,默认不开启。开启后,可以播放音乐、控制音量、识别退出指令 + # 意图识别使用intent_llm,优点:通用性强,缺点:增加串行前置意图识别模块,会增加处理时间 + # 意图识别使用function_call,缺点:需要所选择的LLM支持function_call,优点:按需调用工具、速度快 + # 如果意图识别设置成 function_call,建议把LLM设置成:DoubaoLLM,使用的具体model_name是:doubao-pro-32k-functioncall-241028 + Intent: nointent + +# 意图识别,是用于理解用户意图的模块,例如:播放音乐 +Intent: + # 不使用意图识别 + nointent: + # 不需要动 + type: nointent + intent_llm: + # 不需要动 + type: intent_llm + function_call: + # 不需要动 + type: nointent Memory: mem0ai: @@ -88,7 +100,13 @@ Memory: # https://app.mem0.ai/dashboard/api-keys # 每月有1000次免费调用 api_key: 你的mem0ai api key - + nomem: + # 不想使用记忆功能,可以使用nomem + type: nomem + mem_local_short: + # 本地记忆功能,通过selected_module的llm总结,数据保存在本地,不会上传到服务器 + type: mem_local_short + ASR: FunASR: type: fun_local @@ -114,14 +132,24 @@ LLM: # 可在这里找到你的 api_key https://bailian.console.aliyun.com/?apiKey=1#/api-key base_url: https://dashscope.aliyuncs.com/compatible-mode/v1 model_name: qwen-turbo - api_key: 你的deepseek api key + api_key: 你的deepseek web key + DoubaoLLM: + # 定义LLM API类型 + type: openai + # 先开通服务,打开以下网址,开通的服务搜索Doubao-pro-32k,开通它 + # 开通改地址:https://console.volcengine.com/ark/region:ark+cn-beijing/openManagement?LLM=%7B%7D&OpenTokenDrawer=false + # 免费额度500000token + # 开通后,进入这里获取密钥:https://console.volcengine.com/ark/region:ark+cn-beijing/apiKey?apikey=%7B%7D + base_url: https://ark.cn-beijing.volces.com/api/v3 + model_name: doubao-pro-32k-functioncall-241028 + api_key: 你的doubao web key DeepSeekLLM: # 定义LLM API类型 type: openai # 可在这里找到你的api key https://platform.deepseek.com/ model_name: deepseek-chat url: https://api.deepseek.com - api_key: 你的deepseek api key + api_key: 你的deepseek web key ChatGLMLLM: # 定义LLM API类型 type: openai @@ -129,7 +157,7 @@ LLM: # 可在这里找到你的api key https://bigmodel.cn/usercenter/proj-mgmt/apikeys model_name: glm-4-flash url: https://open.bigmodel.cn/api/paas/v4/ - api_key: 你的ChatGLMLLM api key + api_key: 你的chat-glm web key OllamaLLM: # 定义LLM API类型 type: ollama @@ -141,14 +169,14 @@ LLM: # 建议使用本地部署的dify接口,国内部分区域访问dify公有云接口可能会受限 # 如果使用DifyLLM,配置文件里prompt(提示词)是无效的,需要在dify控制台设置提示词 base_url: https://api.dify.cn/v1 - api_key: 你的DifyLLM api key + api_key: 你的DifyLLM web key GeminiLLM: type: gemini # 谷歌Gemini API,需要先在Google Cloud控制台创建API密钥并获取api_key # 若在中国境内使用,请遵守《生成式人工智能服务管理暂行办法》 # token申请地址: https://aistudio.google.com/apikey # 若部署地无法访问接口,需要开启科学上网 - api_key: 你的gemini api key + api_key: 你的gemini web key model_name: "gemini-1.5-pro" # gemini-1.5-pro 是免费的 CozeLLM: # 定义LLM API类型 @@ -168,6 +196,15 @@ LLM: base_url: http://homeassistant.local:8123 agent_id: conversation.chatgpt api_key: 你的home assistant api访问令牌 + FastgptLLM: + # 定义LLM API类型 + type: fastgpt + # 如果使用fastgpt,配置文件里prompt(提示词)是无效的,需要在fastgpt控制台设置提示词 + base_url: https://host/api/v1 + api_key: fastgpt-xxx + variables: + k: "v" + k2: "v2" TTS_SET: TTS_STREAM: false #是否启动流响应 true/false,默认false @@ -209,7 +246,7 @@ TTS: # token申请地址 https://www.coze.cn/open/oauth/pats voice: 7426720361733046281 output_file: tmp/ - access_token: 你的coze api key + access_token: 你的coze web key response_format: wav FishSpeech: # 定义TTS API类型 @@ -272,6 +309,21 @@ TTS: parallel_infer: true repetition_penalty: 1.35 aux_ref_audio_paths: [] + GPT_SOVITS_V3: + type: gpt_sovits_v3 + url: "http://127.0.0.1:9880/tts" + output_file: tmp/ + text_lang: "auto" + ref_audio_path: "caixukun.wav" + prompt_lang: "zh" + prompt_text: "" + top_k: 5 + top_p: 1 + temperature: 1 + sample_steps: 16 + media_type: "wav" + streaming_mode: false + threshold: 30 MinimaxTTS: # Minimax语音合成服务,需要先在minimax平台创建账户充值,并获取登录信息 # 平台地址:https://platform.minimaxi.com/ @@ -319,8 +371,11 @@ TTS: type: aliyun output_file: tmp/ appkey: 你的阿里云智能语音交互服务项目Appkey - token: 你的阿里云智能语音交互服务AccessToken + token: 你的阿里云智能语音交互服务AccessToken,临时的24小时,要长期用下方的access_key_id,access_key_secret voice: xiaoyun + access_key_id: 你的阿里云账号access_key_id + access_key_secret: 你的阿里云账号access_key_secret + # 以下可不用设置,使用默认设置 # format: wav # sample_rate: 16000 @@ -332,13 +387,43 @@ TTS: TTS302AI: # 302AI语音合成服务,需要先在302平台创建账户充值,并获取密钥信息 # 获取api_keyn路径:https://dash.302.ai/apis/list - # 价格,$35/百万字符。火山原版¥450元/万字符 + # 价格,$35/百万字符。火山原版¥450元/百万字符 type: doubao api_url: https://api.302ai.cn/doubao/tts_hd authorization: "Bearer " voice: "zh_female_wanwanxiaohe_moon_bigtts" output_file: tmp/ access_token: "你的302API密钥" + ACGNTTS: + #在线网址:https://acgn.ttson.cn/ + #token购买:www.ttson.cn + #开发相关疑问请提交至3497689533@qq.com + #角色id获取地址:ctrl+f快速检索角色——网站管理者不允许发布,可询问网站管理者:1069379506 + #各参数意义见开发文档:https://www.yuque.com/alexuh/skmti9/wm6taqislegb02gd?singleDoc# + type: ttson + token: your_token + voice_id: 1695 + speed_factor: 1 + pitch_factor: 0 + volume_change_dB: 0 + to_lang: ZH + url: https://u95167-bd74-2aef8085.westx.seetacloud.com:8443/flashsummary/tts?token= + format: mp3 + output_file: tmp/ + emotion: 1 + OpenAITTS: + # openai官方文本转语音服务,可支持全球大多数语种 + type: openai + api_key: 你的openai api key + # 国内需要使用代理 + api_url: https://api.openai.com/v1/audio/speech + # 可选tts-1或tts-1-hd,tts-1速度更快tts-1-hd质量更好 + model: tts-1 + # 演讲者,可选alloy, echo, fable, onyx, nova, shimmer + voice: onyx + # 语速范围0.25-4.0 + speed: 1 + output_file: tmp/ # 模块测试配置 module_test: test_sentences: # 自定义测试语句 @@ -348,21 +433,17 @@ module_test: # 本地音乐播放配置 music: - music_commands: - - "来一首歌" - - "唱一首歌" - - "播放音乐" - - "来点音乐" - - "背景音乐" - - "放首歌" - - "播放歌曲" - - "来点背景音乐" - - "我想听歌" - - "我要听歌" - - "放点音乐" music_dir: "./music" # 音乐文件存放路径,将从该目录及子目录下搜索音乐文件 music_ext: # 音乐文件类型,p3格式效率最高 - ".mp3" - ".wav" - ".p3" refresh_time: 300 # 刷新音乐列表的时间间隔,单位为秒 + +# 以下配置在小于等于0.0.9版本中的docker容器中可用 +# 0.0.9以后的新版本源码部署已经无法奏效 +manager: + enabled: false + ip: 0.0.0.0 + port: 8002 +use_private_config: false \ No newline at end of file diff --git a/main/xiaozhi-server/config/functionCallConfig.py b/main/xiaozhi-server/config/functionCallConfig.py new file mode 100644 index 00000000..dd9b55fc --- /dev/null +++ b/main/xiaozhi-server/config/functionCallConfig.py @@ -0,0 +1,36 @@ +FunctionCallConfig = [ + { + "type": "function", + "function": { + "name": "handle_exit_intent", + "description": "当用户想结束对话或需要退出系统时调用", + "parameters": { + "type": "object", + "properties": { + "say_goodbye": { + "type": "string", + "description": "和用户友好结束对话的告别语" + } + }, + "required": [] + } + } + }, + { + "type": "function", + "function": { + "name": "play_music", + "description": "唱歌、听歌、播放音乐方法。比如用户说播放音乐,参数为:random,比如用户说播放两只老虎,参数为:两只老虎", + "parameters": { + "type": "object", + "properties": { + "song_name": { + "type": "string", + "description": "歌曲名称,如果没有指定具体歌名则为'random'" + } + }, + "required": ["song_name"] + } + } + } + ] \ No newline at end of file diff --git a/config/logger.py b/main/xiaozhi-server/config/logger.py similarity index 100% rename from config/logger.py rename to main/xiaozhi-server/config/logger.py diff --git a/config/private_config.py b/main/xiaozhi-server/config/private_config.py similarity index 71% rename from config/private_config.py rename to main/xiaozhi-server/config/private_config.py index b1596b8f..f708a95b 100644 --- a/config/private_config.py +++ b/main/xiaozhi-server/config/private_config.py @@ -5,8 +5,7 @@ from config.logger import setup_logging from typing import Dict, Any, Optional from copy import deepcopy from core.utils.util import get_project_dir -from core.utils import asr, vad, llm, tts -from manager.api.user_manager import UserManager +from core.utils import llm, tts from core.utils.lock_manager import FileLockManager TAG = __name__ @@ -19,7 +18,6 @@ class PrivateConfig: self.logger = setup_logging() self.private_config = {} self.auth_code_gen = auth_code_gen - self.user_manager = UserManager() self.lock_manager = FileLockManager() async def load_or_create(self): @@ -238,94 +236,6 @@ class PrivateConfig: """ return self.private_config.get('auth_code', '') - async def bind_user(self, username: str) -> bool: - """绑定用户到设备""" - try: - await self.lock_manager.acquire_lock(self.config_path) - try: - # 检查用户是否存在 - if not self.user_manager.get_user(username): - self.logger.bind(tag=TAG).error(f"User {username} not found") - return False - - # 读取所有配置 - with open(self.config_path, 'r', encoding='utf-8') as f: - all_configs = yaml.safe_load(f) or {} - - if self.device_id not in all_configs: - self.logger.bind(tag=TAG).error(f"Device {self.device_id} not found") - return False - - # 删除认证码 - auth_code = all_configs[self.device_id].get('auth_code') - self.logger.bind(tag=TAG).info(f"Binding user {username} to device {self.device_id}") - if auth_code: - del all_configs[self.device_id]['auth_code'] - - if self.auth_code_gen: - self.auth_code_gen.remove_code(auth_code) - - # 更新设备所有者 - all_configs[self.device_id]['owner'] = username - self.private_config = all_configs[self.device_id] - - # 更新用户的设备列表 - user_data = await self.user_manager.get_user(username) - if 'devices' not in user_data: - user_data['devices'] = [] - if self.device_id not in user_data['devices']: - user_data['devices'].append(self.device_id) - await self.user_manager.update_user(username, user_data) - - # 保存配置 - with open(self.config_path, 'w', encoding='utf-8') as f: - yaml.dump(all_configs, f, allow_unicode=True) - - return True - finally: - self.lock_manager.release_lock(self.config_path) - - except Exception as e: - self.logger.bind(tag=TAG).error(f"Error binding user: {e}") - return False - - async def unbind_user(self) -> bool: - """解绑设备当前用户""" - try: - await self.lock_manager.acquire_lock(self.config_path) - try: - if not self.private_config.get('owner'): - return True - - username = self.private_config['owner'] - - # 从用户数据中移除设备 - user_data = self.user_manager.get_user(username) - if user_data and 'devices' in user_data: - if self.device_id in user_data['devices']: - user_data['devices'].remove(self.device_id) - self.user_manager.update_user(username, user_data) - - # 从设备配置中移除所有者 - with open(self.config_path, 'r', encoding='utf-8') as f: - all_configs = yaml.safe_load(f) or {} - - if self.device_id in all_configs: - if 'owner' in all_configs[self.device_id]: - del all_configs[self.device_id]['owner'] - self.private_config = all_configs[self.device_id] - - with open(self.config_path, 'w', encoding='utf-8') as f: - yaml.dump(all_configs, f, allow_unicode=True) - - return True - finally: - self.lock_manager.release_lock(self.config_path) - - except Exception as e: - self.logger.bind(tag=TAG).error(f"Error unbinding user: {e}") - return False - def get_owner(self) -> Optional[str]: """获取设备当前所有者""" return self.private_config.get('owner') \ No newline at end of file diff --git a/config/settings.py b/main/xiaozhi-server/config/settings.py similarity index 100% rename from config/settings.py rename to main/xiaozhi-server/config/settings.py diff --git a/core/auth.py b/main/xiaozhi-server/core/auth.py similarity index 100% rename from core/auth.py rename to main/xiaozhi-server/core/auth.py diff --git a/core/connection.py b/main/xiaozhi-server/core/connection.py similarity index 75% rename from core/connection.py rename to main/xiaozhi-server/core/connection.py index 619ad922..34a22be8 100644 --- a/core/connection.py +++ b/main/xiaozhi-server/core/connection.py @@ -15,6 +15,7 @@ from core.utils.util import get_string_no_punctuation_or_emoji from concurrent.futures import ThreadPoolExecutor, TimeoutError from core.handle.sendAudioHandle import sendAudioMessage, sendAudioMessageStream from core.handle.receiveAudioHandle import handleAudioMessage +from core.handle.intentHandler import Action, get_functions, handle_llm_function_call from config.private_config import PrivateConfig from core.auth import AuthMiddleware, AuthenticationError from core.utils.auth_code_gen import AuthCodeGenerator @@ -27,7 +28,7 @@ class TTSException(RuntimeError): class ConnectionHandler: - def __init__(self, config: Dict[str, Any], _vad, _asr, _llm, _tts, _music, _memory): + def __init__(self, config: Dict[str, Any], _vad, _asr, _llm, _tts, _music, _memory, _intent): self.config = config self.logger = setup_logging() self.auth = AuthMiddleware(config) @@ -59,6 +60,7 @@ class ConnectionHandler: self.llm = _llm self.tts = _tts self.memory = _memory + self.intent = _intent # vad相关变量 self.client_audio_buffer = bytes() @@ -93,6 +95,12 @@ class ConnectionHandler: self.auth_code_gen = AuthCodeGenerator.get_instance() self.is_device_verified = False # 添加设备验证状态标志 self.music_handler = _music + self.close_after_chat = False # 是否在聊天结束后关闭连接 + self.use_function_call_mode = False + if self.config["selected_module"]["Intent"] == 'function_call': + self.use_function_call_mode = True + + self.logger.bind(tag=TAG).info(f"use_function_call_mode:{self.use_function_call_mode}") async def handle_connection(self, ws): try: @@ -106,7 +114,8 @@ class ConnectionHandler: await self.auth.authenticate(self.headers) device_id = self.headers.get("device-id", None) - self.memory.set_role_id(device_id) + self.memory.init_memory(device_id, self.llm) + self.intent.set_llm(self.llm) # Load private configuration if device_id is provided bUsePrivateConfig = self.config.get("use_private_config", False) @@ -209,7 +218,6 @@ class ConnectionHandler: return False return not self.is_device_verified - def chat(self, query): if self.isNeedAuth(): self.llm_finish_task = True @@ -218,6 +226,7 @@ class ConnectionHandler: return True self.dialogue.put(Message(role="user", content=query)) + response_message = [] processed_chars = 0 # 跟踪已处理的字符位置 try: @@ -225,10 +234,10 @@ class ConnectionHandler: # 使用带记忆的对话 future = asyncio.run_coroutine_threadsafe(self.memory.query_memory(query), self.loop) memory_str = future.result() - - self.logger.bind(tag=TAG).info(f"记忆内容: {memory_str}") + + self.logger.bind(tag=TAG).debug(f"记忆内容: {memory_str}") llm_responses = self.llm.response( - self.session_id, + self.session_id, self.dialogue.get_llm_dialogue_with_memory(memory_str) ) except Exception as e: @@ -250,7 +259,7 @@ class ConnectionHandler: current_text = full_text[processed_chars:] # 从未处理的位置开始 # 查找最后一个有效标点 - punctuations = ("。", "?", "!", "?", "!", ";", ";", ":", ":") + punctuations = ("。", "?", "!", ";", ":") last_punct_pos = -1 for punct in punctuations: pos = current_text.rfind(punct) @@ -305,6 +314,119 @@ class ConnectionHandler: self.logger.bind(tag=TAG).debug(json.dumps(self.dialogue.get_llm_dialogue(), indent=4, ensure_ascii=False)) return True + def chat_with_function_calling(self, query): + self.logger.bind(tag=TAG).debug(f"Chat with function calling start: {query}") + """Chat with function calling for intent detection using streaming""" + if self.isNeedAuth(): + self.llm_finish_task = True + future = asyncio.run_coroutine_threadsafe(self._check_and_broadcast_auth_code(), self.loop) + future.result() + return True + + self.dialogue.put(Message(role="user", content=query)) + + # Define intent functions + functions = get_functions() + + response_message = [] + processed_chars = 0 # 跟踪已处理的字符位置 + function_call_data = None # 存储function call数据 + + try: + start_time = time.time() + + # 使用带记忆的对话 + future = asyncio.run_coroutine_threadsafe(self.memory.query_memory(query), self.loop) + memory_str = future.result() + + # self.logger.bind(tag=TAG).info(f"记忆内容: {memory_str}") + + # 使用支持functions的streaming接口 + llm_responses = self.llm.response_with_functions( + self.session_id, + self.dialogue.get_llm_dialogue_with_memory(memory_str), + functions=functions + ) + except Exception as e: + self.logger.bind(tag=TAG).error(f"LLM 处理出错 {query}: {e}") + return None + + self.llm_finish_task = False + text_index = 0 + + # 处理流式响应 + for response in llm_responses: + if response["type"] == "content": + content = response["content"] + response_message.append(content) + + if self.client_abort: + break + + end_time = time.time() + self.logger.bind(tag=TAG).debug(f"大模型返回时间: {end_time - start_time} 秒, 生成token={content}") + + # 处理文本分段和TTS逻辑 + # 合并当前全部文本并处理未分割部分 + full_text = "".join(response_message) + current_text = full_text[processed_chars:] # 从未处理的位置开始 + + # 查找最后一个有效标点 + punctuations = ("。", "?", "!", ";", ":") + last_punct_pos = -1 + for punct in punctuations: + pos = current_text.rfind(punct) + if pos > last_punct_pos: + last_punct_pos = pos + + # 找到分割点则处理 + if last_punct_pos != -1: + segment_text_raw = current_text[:last_punct_pos + 1] + segment_text = get_string_no_punctuation_or_emoji(segment_text_raw) + if segment_text: + text_index += 1 + self.recode_first_last_text(segment_text, text_index) + future = self.executor.submit(self.speak_and_play, segment_text, text_index) + self.tts_queue.put(future) + processed_chars += len(segment_text_raw) # 更新已处理字符位置 + + elif response["type"] == "function_call": + # Extract function call data + function_call_data = { + "name": response["function_call"]["function"]["name"], + "arguments": response["function_call"]["function"]["arguments"] + } + self.logger.bind(tag=TAG).info(f"Function call detected: {function_call_data}") + + # 处理最后剩余的文本 + full_text = "".join(response_message) + remaining_text = full_text[processed_chars:] + if remaining_text: + segment_text = get_string_no_punctuation_or_emoji(remaining_text) + if segment_text: + text_index += 1 + self.recode_first_last_text(segment_text, text_index) + future = self.executor.submit(self.speak_and_play, segment_text, text_index) + self.tts_queue.put(future) + + # 存储对话内容 + self.dialogue.put(Message(role="assistant", content="".join(response_message))) + + # 处理function call + if function_call_data: + result = handle_llm_function_call(self, function_call_data) + if result.action == Action.RESPONSE: + text = result.response + text_index += 1 + self.recode_first_last_text(text, text_index) + future = self.executor.submit(self.speak_and_play, text, text_index) + self.tts_queue.put(future) + + self.llm_finish_task = True + self.logger.bind(tag=TAG).debug(json.dumps(self.dialogue.get_llm_dialogue(), indent=4, ensure_ascii=False)) + + return True + def _tts_priority_thread(self): if self.tts_stream: self._tts_priority_thread_stream() @@ -441,3 +563,14 @@ class ConnectionHandler: self.client_have_voice_last_time = 0 self.client_voice_stop = False self.logger.bind(tag=TAG).debug("VAD states reset.") + + def chat_and_close(self, text): + """Chat with the user and then close the connection""" + try: + # Use the existing chat method + self.chat(text) + + # After chat is complete, close the connection + self.close_after_chat = True + except Exception as e: + self.logger.bind(tag=TAG).error(f"Chat and close error: {str(e)}") diff --git a/core/handle/abortHandle.py b/main/xiaozhi-server/core/handle/abortHandle.py similarity index 100% rename from core/handle/abortHandle.py rename to main/xiaozhi-server/core/handle/abortHandle.py diff --git a/core/handle/helloHandle.py b/main/xiaozhi-server/core/handle/helloHandle.py similarity index 100% rename from core/handle/helloHandle.py rename to main/xiaozhi-server/core/handle/helloHandle.py diff --git a/main/xiaozhi-server/core/handle/intentHandler.py b/main/xiaozhi-server/core/handle/intentHandler.py new file mode 100644 index 00000000..cae22b2c --- /dev/null +++ b/main/xiaozhi-server/core/handle/intentHandler.py @@ -0,0 +1,170 @@ +from config.logger import setup_logging +import json +from core.handle.sendAudioHandle import send_stt_message +from core.utils.dialogue import Message +from config.functionCallConfig import FunctionCallConfig +import asyncio +from enum import Enum + +TAG = __name__ +logger = setup_logging() + + +class Action(Enum): + NOTFOUND = (0, "没有找到函数") + NONE = (1, "啥也不干") + RESPONSE = (2, "直接回复") + REQLLM = (3, "调用函数后再请求llm生成回复") + + def __init__(self, code, message): + self.code = code + self.message = message + + +class ActionResponse: + def __init__(self, action: Action, result, response): + self.action = action # 动作类型 + self.result = result # 动作产生的结果 + self.response = response # 直接回复的内容 + + +def get_functions(): + """获取功能调用配置""" + return FunctionCallConfig + + +def handle_llm_function_call(conn, function_call_data): + try: + function_name = function_call_data["name"] + + if function_name == "handle_exit_intent": + # 处理退出意图 + try: + say_goodbye = json.loads(function_call_data["arguments"]).get("say_goodbye", "再见") + conn.close_after_chat = True + logger.bind(tag=TAG).info(f"退出意图已处理:{say_goodbye}") + return ActionResponse(action=Action.RESPONSE, result="退出意图已处理", response=say_goodbye) + except Exception as e: + logger.bind(tag=TAG).error(f"处理退出意图错误: {e}") + + elif function_name == "play_music": + # 处理音乐播放意图 + try: + song_name = "random" + arguments = function_call_data["arguments"] + if arguments is not None and len(arguments) > 0: + args = json.loads(arguments) + song_name = args.get("song_name", "random") + music_intent = f"播放音乐 {song_name}" if song_name != "random" else "随机播放音乐" + + # 执行音乐播放命令 + future = asyncio.run_coroutine_threadsafe( + conn.music_handler.handle_music_command(conn, music_intent), + conn.loop + ) + future.result() + return ActionResponse(action=Action.RESPONSE, result="退出意图已处理", response="还想听什么歌?") + except Exception as e: + logger.bind(tag=TAG).error(f"处理音乐意图错误: {e}") + else: + return ActionResponse(action=Action.NOTFOUND, result="没有找到对应的函数", response="") + except Exception as e: + logger.bind(tag=TAG).error(f"处理function call错误: {e}") + + return None + + +async def handle_user_intent(conn, text): + """ + Handle user intent before starting chat + + Args: + conn: Connection object + text: User's text input + + Returns: + bool: True if intent was handled, False if should proceed to chat + """ + # 检查是否有明确的退出命令 + if await check_direct_exit(conn, text): + return True + + if conn.use_function_call_mode: + # 使用支持function calling的聊天方法,不再进行意图分析 + return False + + logger.bind(tag=TAG).info(f"分析用户意图: {text}") + + # 使用LLM进行意图分析 + intent = await analyze_intent_with_llm(conn, text) + + if not intent: + return False + + # 处理各种意图 + return await process_intent_result(conn, intent, text) + + +async def check_direct_exit(conn, text): + """检查是否有明确的退出命令""" + cmd_exit = conn.cmd_exit + for cmd in cmd_exit: + if text == cmd: + logger.bind(tag=TAG).info(f"识别到明确的退出命令: {text}") + await conn.close() + return True + return False + + +async def analyze_intent_with_llm(conn, text): + """使用LLM分析用户意图""" + if not hasattr(conn, 'intent') or not conn.intent: + logger.bind(tag=TAG).warning("意图识别服务未初始化") + return None + + # 创建对话历史记录 + dialogue = conn.dialogue + dialogue.put(Message(role="user", content=text)) + + try: + intent_result = await conn.intent.detect_intent(dialogue.dialogue) + logger.bind(tag=TAG).info(f"意图识别结果: {intent_result}") + + # 尝试解析JSON结果 + try: + intent_data = json.loads(intent_result) + if "intent" in intent_data: + return intent_data["intent"] + except json.JSONDecodeError: + # 如果不是JSON格式,尝试直接获取意图文本 + return intent_result.strip() + + except Exception as e: + logger.bind(tag=TAG).error(f"意图识别失败: {str(e)}") + + return None + + +async def process_intent_result(conn, intent, original_text): + """处理意图识别结果""" + # 处理退出意图 + if "结束聊天" in intent: + logger.bind(tag=TAG).info(f"识别到退出意图: {intent}") + + # 如果正在播放音乐,可以关了 TODO + + # 如果是明确的离别意图,发送告别语并关闭连接 + await send_stt_message(conn, original_text) + conn.executor.submit(conn.chat_and_close, original_text) + return True + + # 处理播放音乐意图 + if "播放音乐" in intent: + logger.bind(tag=TAG).info(f"识别到音乐播放意图: {intent}") + await conn.music_handler.handle_music_command(conn, intent) + return True + + # 其他意图处理可以在这里扩展 + + # 默认返回False,表示继续常规聊天流程 + return False diff --git a/core/handle/iotHandle.py b/main/xiaozhi-server/core/handle/iotHandle.py similarity index 75% rename from core/handle/iotHandle.py rename to main/xiaozhi-server/core/handle/iotHandle.py index 7fba6991..05d32d5a 100644 --- a/core/handle/iotHandle.py +++ b/main/xiaozhi-server/core/handle/iotHandle.py @@ -109,7 +109,48 @@ async def handleIotDescriptors(conn, descriptors): default_iot_volume = conn.config["iot"]["Speaker"]["volume"] logger.bind(tag=TAG).info(f"服务端设置音量为{default_iot_volume}") await send_iot_conn(conn, "Speaker", "SetVolume", {"volume": default_iot_volume}) +async def handleIotStatus(conn, states): + """ + 处理物联网状态 + 示例: [{ + "name":"Speaker", + "state":{ + "volume":100 + } + }] + states: 状态列表 + """ + for state in states: + for key, value in conn.iot_descriptors.items(): + if key == state["name"]: + for property_item in value.properties: + # properties为字典列表, 记录各种属性 + for k, v in state["state"].items(): + # state为字典, 记录各种属性的值, 是需要记录的信息 + if property_item["name"] == k: + # 检查一下属性是不是相同的 + if type(v) != type(property_item["value"]): + logger.bind(tag=TAG).error(f"属性{property_item['name']}的值类型不匹配") + break + else: + property_item["value"] = v + logger.bind(tag=TAG).info(f"物联网状态更新: {key} , {property_item['name']} = {v}") + break + break +async def get_iot_status(conn, name, property_name): + """ + 获取物联网状态 + name: 设备名称 "Speaker" + property_name: 属性名称 "volume" + 返回值: 属性值, 实际的属性有int, bool和str三种类型 + """ + for key, value in conn.iot_descriptors.items(): + if key == name: + for property_item in value.properties: + if property_item["name"] == property_name: + return property_item["value"] + return None async def send_iot_conn(conn, name, method_name, parameters): """ diff --git a/core/handle/musicHandler.py b/main/xiaozhi-server/core/handle/musicHandler.py similarity index 79% rename from core/handle/musicHandler.py rename to main/xiaozhi-server/core/handle/musicHandler.py index 53ec49c4..022d6dc4 100644 --- a/core/handle/musicHandler.py +++ b/main/xiaozhi-server/core/handle/musicHandler.py @@ -15,7 +15,7 @@ logger = setup_logging() def _extract_song_name(text): """从用户输入中提取歌名""" - for keyword in ["听", "播放", "放", "唱"]: + for keyword in ["播放音乐"]: if keyword in text: parts = text.split(keyword) if len(parts) > 1: @@ -36,6 +36,7 @@ def _find_best_match(potential_song, music_files): best_match = music_file return best_match + class MusicManager: def __init__(self, music_dir, music_ext): self.music_dir = Path(music_dir) @@ -55,23 +56,20 @@ class MusicManager: music_files.append(str(file.relative_to(self.music_dir))) return music_files + class MusicHandler: def __init__(self, config): self.config = config - self.music_related_keywords = [] if "music" in self.config: self.music_config = self.config["music"] self.music_dir = os.path.abspath( self.music_config.get("music_dir", "./music") # 默认路径修改 ) - self.music_related_keywords = self.music_config.get("music_commands", []) self.music_ext = self.music_config.get("music_ext", (".mp3", ".wav", ".p3")) self.refresh_time = self.music_config.get("refresh_time", 60) else: self.music_dir = os.path.abspath("./music") - self.music_related_keywords = ["来一首歌", "唱一首歌", "播放音乐", "来点音乐", "背景音乐", "放首歌", - "播放歌曲", "来点背景音乐", "我想听歌", "我要听歌", "放点音乐"] self.music_ext = (".mp3", ".wav", ".p3") self.refresh_time = 60 @@ -100,13 +98,9 @@ class MusicHandler: logger.bind(tag=TAG).info(f"找到最匹配的歌曲: {best_match}") await self.play_local_music(conn, specific_file=best_match) return True - # 检查是否是通用播放音乐命令 - if any(cmd in clean_text for cmd in self.music_related_keywords): - await self.play_local_music(conn) - return True - - return False + await self.play_local_music(conn) + return True async def play_local_music(self, conn, specific_file=None): """播放本地音乐文件""" @@ -117,26 +111,18 @@ class MusicHandler: # 确保路径正确性 if specific_file: - music_path = os.path.join(self.music_dir, specific_file) - if not os.path.exists(music_path): - logger.bind(tag=TAG).error(f"指定的音乐文件不存在: {music_path}") - return selected_music = specific_file + music_path = os.path.join(self.music_dir, specific_file) else: - if time.time() - self.scan_time > self.refresh_time: - # 刷新音乐文件列表 - self.music_files = MusicManager(self.music_dir, self.music_ext).get_music_files() - self.scan_time = time.time() - logger.bind(tag=TAG).debug(f"刷新的音乐文件列表: {self.music_files}") - if not self.music_files: logger.bind(tag=TAG).error("未找到MP3音乐文件") return selected_music = random.choice(self.music_files) music_path = os.path.join(self.music_dir, selected_music) - if not os.path.exists(music_path): - logger.bind(tag=TAG).error(f"选定的音乐文件不存在: {music_path}") - return + + if not os.path.exists(music_path): + logger.bind(tag=TAG).error(f"选定的音乐文件不存在: {music_path}") + return text = f"正在播放{selected_music}" await send_stt_message(conn, text) conn.tts_first_text_index = 0 @@ -150,4 +136,4 @@ class MusicHandler: except Exception as e: logger.bind(tag=TAG).error(f"播放音乐失败: {str(e)}") - logger.bind(tag=TAG).error(f"详细错误: {traceback.format_exc()}") + logger.bind(tag=TAG).error(f"详细错误: {traceback.format_exc()}") \ No newline at end of file diff --git a/core/handle/receiveAudioHandle.py b/main/xiaozhi-server/core/handle/receiveAudioHandle.py similarity index 74% rename from core/handle/receiveAudioHandle.py rename to main/xiaozhi-server/core/handle/receiveAudioHandle.py index f0e7b4a0..97624898 100644 --- a/core/handle/receiveAudioHandle.py +++ b/main/xiaozhi-server/core/handle/receiveAudioHandle.py @@ -2,6 +2,7 @@ from config.logger import setup_logging import time from core.utils.util import remove_punctuation_and_length from core.handle.sendAudioHandle import send_stt_message +from core.handle.intentHandler import handle_user_intent TAG = __name__ logger = setup_logging() @@ -33,13 +34,7 @@ async def handleAudioMessage(conn, audio): else: text, file_path = await conn.asr.speech_to_text(conn.asr_audio, conn.session_id) logger.bind(tag=TAG).info(f"识别文本: {text}") - text_len, text_without_punctuation = remove_punctuation_and_length(text) - if await conn.music_handler.handle_music_command(conn, text_without_punctuation): - conn.asr_server_receive = True - conn.asr_audio.clear() - return - if text_len <= conn.max_cmd_length and await handleCMDMessage(conn, text_without_punctuation): - return + text_len, _ = remove_punctuation_and_length(text) if text_len > 0: await startToChat(conn, text) else: @@ -48,20 +43,22 @@ async def handleAudioMessage(conn, audio): conn.reset_vad_states() -async def handleCMDMessage(conn, text): - cmd_exit = conn.cmd_exit - for cmd in cmd_exit: - if text == cmd: - logger.bind(tag=TAG).info("识别到明确的退出命令".format(text)) - await conn.close() - return True - return False - - async def startToChat(conn, text): - # 异步发送 stt 信息 + # 首先进行意图分析 + intent_handled = await handle_user_intent(conn, text) + + if intent_handled: + # 如果意图已被处理,不再进行聊天 + conn.asr_server_receive = True + return + + # 意图未被处理,继续常规聊天流程 await send_stt_message(conn, text) - conn.executor.submit(conn.chat, text) + if conn.use_function_call_mode: + # 使用支持function calling的聊天方法 + conn.executor.submit(conn.chat_with_function_calling, text) + else: + conn.executor.submit(conn.chat, text) async def no_voice_close_connect(conn): diff --git a/core/handle/sendAudioHandle.py b/main/xiaozhi-server/core/handle/sendAudioHandle.py similarity index 94% rename from core/handle/sendAudioHandle.py rename to main/xiaozhi-server/core/handle/sendAudioHandle.py index 230bf269..3157d7a9 100644 --- a/core/handle/sendAudioHandle.py +++ b/main/xiaozhi-server/core/handle/sendAudioHandle.py @@ -9,14 +9,6 @@ from core.utils.util import remove_punctuation_and_length, get_string_no_punctua TAG = __name__ logger = setup_logging() - -async def isLLMWantToFinish(last_text): - _, last_text_without_punctuation = remove_punctuation_and_length(last_text) - if "再见" in last_text_without_punctuation or "拜拜" in last_text_without_punctuation: - return True - return False - - async def sendAudioMessageStream(conn, audios_queue, text, text_index=0): # 发送句子开始消息 if text_index == conn.tts_first_text_index: @@ -76,6 +68,7 @@ async def sendAudioMessageStream(conn, audios_queue, text, text_index=0): await conn.close() + async def sendAudioMessage(conn, audios, text, text_index=0): # 发送句子开始消息 if text_index == conn.tts_first_text_index: @@ -107,10 +100,9 @@ async def sendAudioMessage(conn, audios, text, text_index=0): # 发送结束消息(如果是最后一个文本) if conn.llm_finish_task and text_index == conn.tts_last_text_index: await send_tts_message(conn, 'stop', None) - if await isLLMWantToFinish(text): + if conn.close_after_chat: await conn.close() - async def send_tts_message(conn, state, text=None): """发送 TTS 状态消息""" message = { diff --git a/core/handle/textHandle.py b/main/xiaozhi-server/core/handle/textHandle.py similarity index 90% rename from core/handle/textHandle.py rename to main/xiaozhi-server/core/handle/textHandle.py index 2eb7304d..cc28dbb4 100644 --- a/core/handle/textHandle.py +++ b/main/xiaozhi-server/core/handle/textHandle.py @@ -3,7 +3,7 @@ import json from core.handle.abortHandle import handleAbortMessage from core.handle.helloHandle import handleHelloMessage from core.handle.receiveAudioHandle import startToChat -from core.handle.iotHandle import handleIotDescriptors +from core.handle.iotHandle import handleIotDescriptors, handleIotStatus TAG = __name__ logger = setup_logging() @@ -40,5 +40,7 @@ async def handleTextMessage(conn, message): elif msg_json["type"] == "iot": if "descriptors" in msg_json: await handleIotDescriptors(conn, msg_json["descriptors"]) + if "states" in msg_json: + await handleIotStatus(conn, msg_json["states"]) except json.JSONDecodeError: await conn.websocket.send(message) diff --git a/core/providers/asr/base.py b/main/xiaozhi-server/core/providers/asr/base.py similarity index 100% rename from core/providers/asr/base.py rename to main/xiaozhi-server/core/providers/asr/base.py diff --git a/core/providers/asr/doubao.py b/main/xiaozhi-server/core/providers/asr/doubao.py similarity index 100% rename from core/providers/asr/doubao.py rename to main/xiaozhi-server/core/providers/asr/doubao.py diff --git a/core/providers/asr/fun_local.py b/main/xiaozhi-server/core/providers/asr/fun_local.py similarity index 100% rename from core/providers/asr/fun_local.py rename to main/xiaozhi-server/core/providers/asr/fun_local.py diff --git a/main/xiaozhi-server/core/providers/intent/base.py b/main/xiaozhi-server/core/providers/intent/base.py new file mode 100644 index 00000000..1333f620 --- /dev/null +++ b/main/xiaozhi-server/core/providers/intent/base.py @@ -0,0 +1,33 @@ +from abc import ABC, abstractmethod +from typing import List, Dict +from config.logger import setup_logging + +TAG = __name__ +logger = setup_logging() + +class IntentProviderBase(ABC): + def __init__(self, config): + self.config = config + self.intent_options = config.get("intent_options", { + "continue_chat": "继续聊天", + "end_chat": "结束聊天", + "play_music": "播放音乐" + }) + + def set_llm(self, llm): + self.llm = llm + logger.bind(tag=TAG).debug("Set LLM for intent provider") + + @abstractmethod + async def detect_intent(self, dialogue_history: List[Dict]) -> str: + """ + 检测用户最后一句话的意图 + Args: + dialogue_history: 对话历史记录列表,每条记录包含role和content + Returns: + 返回识别出的意图,格式为: + - "继续聊天" + - "结束聊天" + - "播放音乐 歌名" 或 "随机播放音乐" + """ + pass diff --git a/main/xiaozhi-server/core/providers/intent/intent_llm/intent_llm.py b/main/xiaozhi-server/core/providers/intent/intent_llm/intent_llm.py new file mode 100644 index 00000000..c3930296 --- /dev/null +++ b/main/xiaozhi-server/core/providers/intent/intent_llm/intent_llm.py @@ -0,0 +1,61 @@ +from typing import List, Dict +from ..base import IntentProviderBase +from config.logger import setup_logging + +TAG = __name__ +logger = setup_logging() + + + +class IntentProvider(IntentProviderBase): + def __init__(self, config): + super().__init__(config) + self.llm = None + self.promot = self.get_intent_system_prompt() + + def get_intent_system_prompt(self) -> str: + """ + 根据配置的意图选项动态生成系统提示词 + Returns: + 格式化后的系统提示词 + """ + intent_list = [] + for key, value in self.intent_options.items(): + if key == "play_music": + intent_list.append(f"{value} [歌名]") + else: + intent_list.append(value) + + prompt = ( + "你是一个意图识别助手。你需要根据和用户的对话记录,重点分析用户的最后一句话,判断用户意图属于以下哪一类:\n" + f"{', '.join(intent_list)}\n" + "如果是唱歌、听歌、播放音乐,请指定歌名,格式为'播放音乐 [识别出的歌名]'。\n" + "如果听不出具体歌名,可以返回'随机播放音乐'。\n" + "只需要返回意图结果的json,不要解释。" + "返回格式如下:\n" + "{intent: '用户意图'}" + ) + return prompt + + async def detect_intent(self, dialogue_history: List[Dict]) -> str: + if not self.llm: + raise ValueError("LLM provider not set") + + # 构建用户最后一句话的提示 + msgStr = "" + for msg in dialogue_history: + if msg.role == "user": + msgStr += f"User: {msg.content}\n" + elif msg.role== "assistant": + msgStr += f"Assistant: {msg.content}\n" + + user_prompt = f"请分析用户的意图:\n{msgStr}" + + # 使用LLM进行意图识别 + intent = self.llm.response_no_stream( + system_prompt=self.promot, + user_prompt=user_prompt + ) + + logger.bind(tag=TAG).info(f"Detected intent: {intent}") + return intent.strip() diff --git a/main/xiaozhi-server/core/providers/intent/nointent/nointent.py b/main/xiaozhi-server/core/providers/intent/nointent/nointent.py new file mode 100644 index 00000000..9feadaad --- /dev/null +++ b/main/xiaozhi-server/core/providers/intent/nointent/nointent.py @@ -0,0 +1,18 @@ +from ..base import IntentProviderBase +from typing import List, Dict +from config.logger import setup_logging + +TAG = __name__ +logger = setup_logging() + +class IntentProvider(IntentProviderBase): + async def detect_intent(self, dialogue_history: List[Dict]) -> str: + """ + 默认的意图识别实现,始终返回继续聊天 + Args: + dialogue_history: 对话历史记录列表 + Returns: + 固定返回"继续聊天" + """ + logger.bind(tag=TAG).debug("Using NoIntentProvider, always returning continue chat") + return self.intent_options["continue_chat"] diff --git a/main/xiaozhi-server/core/providers/llm/base.py b/main/xiaozhi-server/core/providers/llm/base.py new file mode 100644 index 00000000..d39a8589 --- /dev/null +++ b/main/xiaozhi-server/core/providers/llm/base.py @@ -0,0 +1,38 @@ +from abc import ABC, abstractmethod +from config.logger import setup_logging + +TAG = __name__ +logger = setup_logging() + +class LLMProviderBase(ABC): + @abstractmethod + def response(self, session_id, dialogue): + """LLM response generator""" + pass + + def response_no_stream(self, system_prompt, user_prompt): + try: + # 构造对话格式 + dialogue = [ + {"role": "system", "content": system_prompt}, + {"role": "user", "content": user_prompt} + ] + result = "" + for part in self.response("", dialogue): + result += part + return result + + except Exception as e: + logger.bind(tag=TAG).error(f"Error in Ollama response generation: {e}") + return "【LLM服务响应异常】" + + def response_with_functions(self, session_id, dialogue, functions=None): + """ + Default implementation for function calling (streaming) + This should be overridden by providers that support function calls + + Returns: generator that yields either text tokens or a special function call token + """ + # For providers that don't support functions, just return regular response + for token in self.response(session_id, dialogue): + yield {"type": "content", "content": token} \ No newline at end of file diff --git a/core/providers/llm/coze/coze.py b/main/xiaozhi-server/core/providers/llm/coze/coze.py similarity index 100% rename from core/providers/llm/coze/coze.py rename to main/xiaozhi-server/core/providers/llm/coze/coze.py diff --git a/core/providers/llm/dify/dify.py b/main/xiaozhi-server/core/providers/llm/dify/dify.py similarity index 100% rename from core/providers/llm/dify/dify.py rename to main/xiaozhi-server/core/providers/llm/dify/dify.py diff --git a/main/xiaozhi-server/core/providers/llm/fastgpt/fastgpt.py b/main/xiaozhi-server/core/providers/llm/fastgpt/fastgpt.py new file mode 100644 index 00000000..38f9a2c9 --- /dev/null +++ b/main/xiaozhi-server/core/providers/llm/fastgpt/fastgpt.py @@ -0,0 +1,65 @@ +import json +from config.logger import setup_logging +import requests +from core.providers.llm.base import LLMProviderBase + +TAG = __name__ +logger = setup_logging() + + +class LLMProvider(LLMProviderBase): + def __init__(self, config): + self.api_key = config["api_key"] + self.base_url = config.get("base_url") + self.detail = config.get("detail", False) + self.variables = config.get("variables", {}) + + def response(self, session_id, dialogue): + try: + # 取最后一条用户消息 + last_msg = next(m for m in reversed(dialogue) if m["role"] == "user") + + # 发起流式请求 + with requests.post( + f"{self.base_url}/chat/completions", + headers={"Authorization": f"Bearer {self.api_key}"}, + json={ + "stream": True, + "chatId": session_id, + "detail": self.detail, + "variables": self.variables, + "messages": [ + { + "role": "user", + "content": last_msg["content"] + } + ] + }, + stream=True + ) as r: + for line in r.iter_lines(): + if line: + try: + if line.startswith(b'data: '): + if line[6:].decode('utf-8') == '[DONE]': + break + + data = json.loads(line[6:]) + if 'choices' in data and len(data['choices']) > 0: + delta = data['choices'][0].get('delta', {}) + if delta and 'content' in delta and delta['content'] is not None: + content = delta['content'] + if '' in content: + continue + if '' in content: + continue + yield content + + except json.JSONDecodeError as e: + continue + except Exception as e: + continue + + except Exception as e: + logger.bind(tag=TAG).error(f"Error in response generation: {e}") + yield "【服务响应异常】" \ No newline at end of file diff --git a/core/providers/llm/gemini/gemini.py b/main/xiaozhi-server/core/providers/llm/gemini/gemini.py similarity index 88% rename from core/providers/llm/gemini/gemini.py rename to main/xiaozhi-server/core/providers/llm/gemini/gemini.py index 7ddf84fa..f753ac3e 100644 --- a/core/providers/llm/gemini/gemini.py +++ b/main/xiaozhi-server/core/providers/llm/gemini/gemini.py @@ -1,25 +1,24 @@ -from config.logger import setup_logging import google.generativeai as genai +from core.utils.util import check_model_key from core.providers.llm.base import LLMProviderBase -TAG = __name__ -logger = setup_logging() class LLMProvider(LLMProviderBase): def __init__(self, config): """初始化Gemini LLM Provider""" - self.model_name = config.get("model_name", "gemini-1.5-pro") + self.model_name = config.get("model_name", "gemini-1.5-pro") self.api_key = config.get("api_key") - - if not self.api_key or "你" in self.api_key: - logger.bind(tag=TAG).error("你还没配置Gemini LLM的密钥,请在配置文件中配置密钥,否则无法正常工作") + + have_key = check_model_key("LLM", self.api_key) + + if not have_key: return - + try: # 初始化Gemini客户端 genai.configure(api_key=self.api_key) self.model = genai.GenerativeModel(self.model_name) - + # 设置生成参数 self.generation_config = { "temperature": 0.7, @@ -55,7 +54,7 @@ class LLMProvider(LLMProviderBase): # 创建新的聊天会话 chat = self.model.start_chat(history=chat_history) - + # 发送消息并获取流式响应 response = chat.send_message( current_msg, @@ -71,7 +70,7 @@ class LLMProvider(LLMProviderBase): except Exception as e: error_msg = str(e) logger.bind(tag=TAG).error(f"Gemini响应生成错误: {error_msg}") - + # 针对不同错误返回友好提示 if "Rate limit" in error_msg: yield "【Gemini服务请求太频繁,请稍后再试】" diff --git a/core/providers/llm/homeassistant/homeassistant.py b/main/xiaozhi-server/core/providers/llm/homeassistant/homeassistant.py similarity index 100% rename from core/providers/llm/homeassistant/homeassistant.py rename to main/xiaozhi-server/core/providers/llm/homeassistant/homeassistant.py diff --git a/main/xiaozhi-server/core/providers/llm/ollama/ollama.py b/main/xiaozhi-server/core/providers/llm/ollama/ollama.py new file mode 100644 index 00000000..86d0f6ee --- /dev/null +++ b/main/xiaozhi-server/core/providers/llm/ollama/ollama.py @@ -0,0 +1,81 @@ +from config.logger import setup_logging +from openai import OpenAI +import json +from core.providers.llm.base import LLMProviderBase + +TAG = __name__ +logger = setup_logging() + + +class LLMProvider(LLMProviderBase): + def __init__(self, config): + self.model_name = config.get("model_name") + self.base_url = config.get("base_url", "http://localhost:11434") + # Initialize OpenAI client with Ollama base URL + #如果没有v1,增加v1 + if not self.base_url.endswith("/v1"): + self.base_url = f"{self.base_url}/v1" + + self.client = OpenAI( + base_url=self.base_url, + api_key="ollama" # Ollama doesn't need an API key but OpenAI client requires one + ) + + def response(self, session_id, dialogue): + try: + responses = self.client.chat.completions.create( + model=self.model_name, + messages=dialogue, + stream=True + ) + + for chunk in responses: + try: + delta = chunk.choices[0].delta if getattr(chunk, 'choices', None) else None + content = delta.content if hasattr(delta, 'content') else '' + if content: + yield content + except Exception as e: + logger.bind(tag=TAG).error(f"Error processing chunk: {e}") + + except Exception as e: + logger.bind(tag=TAG).error(f"Error in Ollama response generation: {e}") + yield "【Ollama服务响应异常】" + + def response_with_functions(self, session_id, dialogue, functions=None): + try: + stream = self.client.chat.completions.create( + model=self.model_name, + messages=dialogue, + stream=True, + tools=functions, + ) + + current_function_call = None + current_content = "" + + for chunk in stream: + delta = chunk.choices[0].delta + + if delta.content: + current_content += delta.content + yield {"type": "content", "content": delta.content} + + if delta.tool_calls: + tool_call = delta.tool_calls[0] + # Handle the function call data using proper attribute access + if not current_function_call: + current_function_call = { + "function": { + "name": tool_call.function.name, + "arguments": tool_call.function.arguments + } + } + + if current_function_call: + logger.bind(tag=TAG).debug(f"ollama Function call detected: {current_function_call}") + yield {"type": "function_call", "function_call": current_function_call} + + except Exception as e: + logger.bind(tag=TAG).error(f"Error in Ollama function call: {e}") + yield {"type": "content", "content": f"【Ollama服务响应异常: {str(e)}】"} \ No newline at end of file diff --git a/main/xiaozhi-server/core/providers/llm/openai/openai.py b/main/xiaozhi-server/core/providers/llm/openai/openai.py new file mode 100644 index 00000000..33ef10eb --- /dev/null +++ b/main/xiaozhi-server/core/providers/llm/openai/openai.py @@ -0,0 +1,83 @@ +import openai +from core.utils.util import check_model_key +from core.providers.llm.base import LLMProviderBase + + +class LLMProvider(LLMProviderBase): + def __init__(self, config): + self.model_name = config.get("model_name") + self.api_key = config.get("api_key") + if 'base_url' in config: + self.base_url = config.get("base_url") + else: + self.base_url = config.get("url") + check_model_key("LLM", self.api_key) + self.client = openai.OpenAI(api_key=self.api_key, base_url=self.base_url) + + def response(self, session_id, dialogue): + try: + responses = self.client.chat.completions.create( + model=self.model_name, + messages=dialogue, + stream=True + ) + + is_active = True + for chunk in responses: + try: + # 检查是否存在有效的choice且content不为空 + delta = chunk.choices[0].delta if getattr(chunk, 'choices', None) else None + content = delta.content if hasattr(delta, 'content') else '' + except IndexError: + content = '' + if content: + # 处理标签跨多个chunk的情况 + if '' in content: + is_active = False + content = content.split('')[0] + if '' in content: + is_active = True + content = content.split('')[-1] + if is_active: + yield content + + except Exception as e: + logger.bind(tag=TAG).error(f"Error in response generation: {e}") + + def response_with_functions(self, session_id, dialogue, functions=None): + try: + stream = self.client.chat.completions.create( + model=self.model_name, + messages=dialogue, + stream=True, + tools=functions, + ) + + current_function_call = None + current_content = "" + + for chunk in stream: + delta = chunk.choices[0].delta + + if delta.content: + current_content += delta.content + yield {"type": "content", "content": delta.content} + + if delta.tool_calls: + tool_call = delta.tool_calls[0] + # Handle the function call data using proper attribute access + if not current_function_call: + current_function_call = { + "function": { + "name": tool_call.function.name, + "arguments": tool_call.function.arguments + } + } + + if current_function_call: + logger.bind(tag=TAG).debug(f"openai Function call detected: {current_function_call}") + yield {"type": "function_call", "function_call": current_function_call} + + except Exception as e: + self.logger.bind(tag=TAG).error(f"Error in function call streaming: {e}") + yield {"type": "content", "content": f"【OpenAI服务响应异常: {e}】"} \ No newline at end of file diff --git a/core/providers/memory/base.py b/main/xiaozhi-server/core/providers/memory/base.py similarity index 82% rename from core/providers/memory/base.py rename to main/xiaozhi-server/core/providers/memory/base.py index 00ab6650..2f88a6a0 100644 --- a/core/providers/memory/base.py +++ b/main/xiaozhi-server/core/providers/memory/base.py @@ -8,6 +8,7 @@ class MemoryProviderBase(ABC): def __init__(self, config): self.config = config self.role_id = None + self.llm = None @abstractmethod async def save_memory(self, msgs): @@ -19,5 +20,6 @@ class MemoryProviderBase(ABC): """Query memories for specific role based on similarity""" return "please implement query method" - def set_role_id(self, role_id: str): - self.role_id = role_id \ No newline at end of file + def init_memory(self, role_id, llm): + self.role_id = role_id + self.llm = llm diff --git a/core/providers/memory/mem0ai/mem0ai.py b/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py similarity index 83% rename from core/providers/memory/mem0ai/mem0ai.py rename to main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py index 482c0bc2..9a82efe5 100644 --- a/core/providers/memory/mem0ai/mem0ai.py +++ b/main/xiaozhi-server/core/providers/memory/mem0ai/mem0ai.py @@ -1,5 +1,8 @@ +import traceback + from ..base import MemoryProviderBase, logger from mem0 import MemoryClient +from core.utils.util import check_model_key TAG = __name__ @@ -8,13 +11,19 @@ class MemoryProvider(MemoryProviderBase): super().__init__(config) self.api_key = config.get("api_key", "") self.api_version = config.get("api_version", "v1.1") - if len(self.api_key) == 0 or "你" in self.api_key: - logger.bind(tag=TAG).error("你还没配置Mem0ai的密钥,请在配置文件中配置密钥,否则无法提供记忆服务") + have_key = check_model_key("Mem0ai", self.api_key) + if not have_key : self.use_mem0 = False return else: self.use_mem0 = True - self.client = MemoryClient(api_key=self.api_key) + try: + self.client = MemoryClient(api_key=self.api_key) + logger.bind(tag=TAG).info("成功连接到 Mem0ai 服务") + except Exception as e: + logger.bind(tag=TAG).error(f"连接到 Mem0ai 服务时发生错误: {str(e)}") + logger.bind(tag=TAG).error(f"详细错误: {traceback.format_exc()}") + self.use_mem0 = False async def save_memory(self, msgs): if not self.use_mem0: diff --git a/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py b/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py new file mode 100644 index 00000000..c6643861 --- /dev/null +++ b/main/xiaozhi-server/core/providers/memory/mem_local_short/mem_local_short.py @@ -0,0 +1,156 @@ +from ..base import MemoryProviderBase, logger +import time +import json +import os +import yaml +from core.utils.util import get_project_dir + +short_term_memory_prompt = """ +# 时空记忆编织者 + +## 核心使命 +构建可生长的动态记忆网络,在有限空间内保留关键信息的同时,智能维护信息演变轨迹 +根据对话记录,总结user的重要信息,以便在未来的对话中提供更个性化的服务 + +## 记忆法则 +### 1. 三维度记忆评估(每次更新必执行) +| 维度 | 评估标准 | 权重分 | +|------------|---------------------------|--------| +| 时效性 | 信息新鲜度(按对话轮次) | 40% | +| 情感强度 | 含💖标记/重复提及次数 | 35% | +| 关联密度 | 与其他信息的连接数量 | 25% | + +### 2. 动态更新机制 +**名字变更处理示例:** +原始记忆:"曾用名": ["张三"], "现用名": "张三丰" +触发条件:当检测到「我叫X」「称呼我Y」等命名信号时 +操作流程: +1. 将旧名移入"曾用名"列表 +2. 记录命名时间轴:"2024-02-15 14:32:启用张三丰" +3. 在记忆立方追加:「从张三到张三丰的身份蜕变」 + +### 3. 空间优化策略 +- **信息压缩术**:用符号体系提升密度 + - ✅"张三丰[北/软工/🐱]" + - ❌"北京软件工程师,养猫" +- **淘汰预警**:当总字数≥900时触发 + 1. 删除权重分<60且3轮未提及的信息 + 2. 合并相似条目(保留时间戳最近的) + +## 记忆结构 +输出格式必须为可解析的json字符串,不需要解释、注释和说明,保存记忆时仅从对话提取信息,不要混入示例内容 +```json +{ + "时空档案": { + "身份图谱": { + "现用名": "", + "特征标记": [] + }, + "记忆立方": [ + { + "事件": "入职新公司", + "时间戳": "2024-03-20", + "情感值": 0.9, + "关联项": ["下午茶"], + "保鲜期": 30 + } + ] + }, + "关系网络": { + "高频话题": {"职场": 12}, + "暗线联系": [""] + }, + "待响应": { + "紧急事项": ["需立即处理的任务"], + "潜在关怀": ["可主动提供的帮助"] + }, + "高光语录": [ + "最打动人心的瞬间,强烈的情感表达,user的原话" + ] +} +``` +""" + +def extract_json_data(json_code): + start = json_code.find("```json") + # 从start开始找到下一个```结束 + end = json_code.find("```", start+1) + #print("start:", start, "end:", end) + if start == -1 or end == -1: + try: + jsonData = json.loads(json_code) + return json_code + except Exception as e: + print("Error:", e) + return "" + jsonData = json_code[start+7:end] + return jsonData + +TAG = __name__ + +class MemoryProvider(MemoryProviderBase): + def __init__(self, config): + super().__init__(config) + self.short_momery = "" + self.memory_path = get_project_dir() + 'data/.memory.yaml' + self.load_memory() + + def init_memory(self, role_id, llm): + super().init_memory(role_id, llm) + self.load_memory() + + def load_memory(self): + all_memory = {} + if os.path.exists(self.memory_path): + with open(self.memory_path, 'r', encoding='utf-8') as f: + all_memory = yaml.safe_load(f) or {} + if self.role_id in all_memory: + self.short_momery = all_memory[self.role_id] + + def save_memory_to_file(self): + all_memory = {} + if os.path.exists(self.memory_path): + with open(self.memory_path, 'r', encoding='utf-8') as f: + all_memory = yaml.safe_load(f) or {} + all_memory[self.role_id] = self.short_momery + with open(self.memory_path, 'w', encoding='utf-8') as f: + yaml.dump(all_memory, f, allow_unicode=True) + + async def save_memory(self, msgs): + if self.llm is None: + logger.bind(tag=TAG).error("LLM is not set for memory provider") + return None + + if len(msgs) < 2: + return None + + msgStr = "" + for msg in msgs: + if msg.role == "user": + msgStr += f"User: {msg.content}\n" + elif msg.role== "assistant": + msgStr += f"Assistant: {msg.content}\n" + if len(self.short_momery) > 0: + msgStr+="历史记忆:\n" + msgStr+=self.short_momery + + #当前时间 + time_str = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()) + msgStr += f"当前时间:{time_str}" + + result = self.llm.response_no_stream(short_term_memory_prompt, msgStr) + + json_str = extract_json_data(result) + try: + json_data = json.loads(json_str) # 检查json格式是否正确 + self.short_momery = json_str + except Exception as e: + print("Error:", e) + + self.save_memory_to_file() + logger.bind(tag=TAG).info(f"Save memory successful - Role: {self.role_id}") + + return self.short_momery + + async def query_memory(self, query: str)-> str: + return self.short_momery \ No newline at end of file diff --git a/main/xiaozhi-server/core/providers/memory/nomem/nomem.py b/main/xiaozhi-server/core/providers/memory/nomem/nomem.py new file mode 100644 index 00000000..c9349626 --- /dev/null +++ b/main/xiaozhi-server/core/providers/memory/nomem/nomem.py @@ -0,0 +1,18 @@ +''' +不使用记忆,可以选择此模块 +''' +from ..base import MemoryProviderBase, logger + +TAG = __name__ + +class MemoryProvider(MemoryProviderBase): + def __init__(self, config): + super().__init__(config) + + async def save_memory(self, msgs): + logger.bind(tag=TAG).debug("nomem mode: No memory saving is performed.") + return None + + async def query_memory(self, query: str)-> str: + logger.bind(tag=TAG).debug("nomem mode: No memory query is performed.") + return "" \ No newline at end of file diff --git a/main/xiaozhi-server/core/providers/tts/aliyun.py b/main/xiaozhi-server/core/providers/tts/aliyun.py new file mode 100644 index 00000000..ea8627be --- /dev/null +++ b/main/xiaozhi-server/core/providers/tts/aliyun.py @@ -0,0 +1,132 @@ +import os +import uuid +import json +import hmac +import hashlib +import base64 +import requests +from datetime import datetime +from core.providers.tts.base import TTSProviderBase + +import http.client +import urllib.parse +import time +import uuid +from urllib import parse +class AccessToken: + @staticmethod + def _encode_text(text): + encoded_text = parse.quote_plus(text) + return encoded_text.replace('+', '%20').replace('*', '%2A').replace('%7E', '~') + + @staticmethod + def _encode_dict(dic): + keys = dic.keys() + dic_sorted = [(key, dic[key]) for key in sorted(keys)] + encoded_text = parse.urlencode(dic_sorted) + return encoded_text.replace('+', '%20').replace('*', '%2A').replace('%7E', '~') + + @staticmethod + def create_token(access_key_id, access_key_secret): + parameters = {'AccessKeyId': access_key_id, + 'Action': 'CreateToken', + 'Format': 'JSON', + 'RegionId': 'cn-shanghai', + 'SignatureMethod': 'HMAC-SHA1', + 'SignatureNonce': str(uuid.uuid1()), + 'SignatureVersion': '1.0', + 'Timestamp': time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime()), + 'Version': '2019-02-28'} + # 构造规范化的请求字符串 + query_string = AccessToken._encode_dict(parameters) + print('规范化的请求字符串: %s' % query_string) + # 构造待签名字符串 + string_to_sign = 'GET' + '&' + AccessToken._encode_text('/') + '&' + AccessToken._encode_text(query_string) + print('待签名的字符串: %s' % string_to_sign) + # 计算签名 + secreted_string = hmac.new(bytes(access_key_secret + '&', encoding='utf-8'), + bytes(string_to_sign, encoding='utf-8'), + hashlib.sha1).digest() + signature = base64.b64encode(secreted_string) + print('签名: %s' % signature) + # 进行URL编码 + signature = AccessToken._encode_text(signature) + print('URL编码后的签名: %s' % signature) + # 调用服务 + full_url = 'http://nls-meta.cn-shanghai.aliyuncs.com/?Signature=%s&%s' % (signature, query_string) + print('url: %s' % full_url) + # 提交HTTP GET请求 + response = requests.get(full_url) + if response.ok: + root_obj = response.json() + key = 'Token' + if key in root_obj: + token = root_obj[key]['Id'] + expire_time = root_obj[key]['ExpireTime'] + return token, expire_time + print(response.text) + return None, None + + +class TTSProvider(TTSProviderBase): + + + def __init__(self, config, delete_audio_file): + super().__init__(config, delete_audio_file) + + # 新增空值判断逻辑 + access_key_id = config.get("access_key_id") + access_key_secret = config.get("access_key_secret") + if access_key_id and access_key_secret: + # 使用密钥对生成临时token + token, expire_time = AccessToken.create_token(access_key_id, access_key_secret) + else: + # 直接使用预生成的长期token + token = config.get("token") + expire_time = None + + print('token: %s, expire time(s): %s' % (token, expire_time)) + + self.appkey = config.get("appkey") + self.token = token + self.format = config.get("format", "wav") + self.sample_rate = config.get("sample_rate", 16000) + self.voice = config.get("voice", "xiaoyun") + self.volume = config.get("volume", 50) + self.speech_rate = config.get("speech_rate", 0) + self.pitch_rate = config.get("pitch_rate", 0) + + self.host = config.get("host", "nls-gateway-cn-shanghai.aliyuncs.com") + self.api_url = f"https://{self.host}/stream/v1/tts" + self.header = { + "Content-Type": "application/json" + } + + def generate_filename(self, extension=".wav"): + return os.path.join(self.output_file, f"tts-{__name__}{datetime.now().date()}@{uuid.uuid4().hex}{extension}") + + async def text_to_speak(self, text, output_file): + request_json = { + "appkey": self.appkey, + "token": self.token, + "text": text, + "format": self.format, + "sample_rate": self.sample_rate, + "voice": self.voice, + "volume": self.volume, + "speech_rate": self.speech_rate, + "pitch_rate": self.pitch_rate + } + + print(self.api_url, json.dumps(request_json, ensure_ascii=False)) + try: + resp = requests.post(self.api_url, json.dumps(request_json), headers=self.header) + # 检查返回请求数据的mime类型是否是audio/***,是则保存到指定路径下;返回的是binary格式的 + if resp.headers['Content-Type'].startswith('audio/'): + with open(output_file, 'wb') as f: + f.write(resp.content) + return output_file + else: + raise Exception(f"{__name__} status_code: {resp.status_code} response: {resp.content}") + except Exception as e: + raise Exception(f"{__name__} error: {e}") diff --git a/core/providers/tts/base.py b/main/xiaozhi-server/core/providers/tts/base.py similarity index 100% rename from core/providers/tts/base.py rename to main/xiaozhi-server/core/providers/tts/base.py diff --git a/core/providers/tts/cozecn.py b/main/xiaozhi-server/core/providers/tts/cozecn.py similarity index 100% rename from core/providers/tts/cozecn.py rename to main/xiaozhi-server/core/providers/tts/cozecn.py diff --git a/core/providers/tts/doubao.py b/main/xiaozhi-server/core/providers/tts/doubao.py similarity index 95% rename from core/providers/tts/doubao.py rename to main/xiaozhi-server/core/providers/tts/doubao.py index 3b812131..55438a0c 100644 --- a/core/providers/tts/doubao.py +++ b/main/xiaozhi-server/core/providers/tts/doubao.py @@ -4,6 +4,7 @@ import json import base64 import requests from datetime import datetime +from core.utils.util import check_model_key from core.providers.tts.base import TTSProviderBase @@ -17,6 +18,7 @@ class TTSProvider(TTSProviderBase): self.api_url = config.get("api_url") self.authorization = config.get("authorization") self.header = {"Authorization": f"{self.authorization}{self.access_token}"} + check_model_key("TTS", self.access_token) def generate_filename(self, extension=".wav"): return os.path.join(self.output_file, f"tts-{datetime.now().date()}@{uuid.uuid4().hex}{extension}") diff --git a/core/providers/tts/edge.py b/main/xiaozhi-server/core/providers/tts/edge.py similarity index 100% rename from core/providers/tts/edge.py rename to main/xiaozhi-server/core/providers/tts/edge.py diff --git a/core/providers/tts/fishspeech.py b/main/xiaozhi-server/core/providers/tts/fishspeech.py similarity index 89% rename from core/providers/tts/fishspeech.py rename to main/xiaozhi-server/core/providers/tts/fishspeech.py index c96db551..d9fd0442 100644 --- a/core/providers/tts/fishspeech.py +++ b/main/xiaozhi-server/core/providers/tts/fishspeech.py @@ -1,4 +1,3 @@ - import base64 import os import traceback @@ -18,6 +17,7 @@ from pydub import AudioSegment from typing_extensions import Annotated from datetime import datetime from typing import Literal +from core.utils.util import check_model_key from core.providers.tts.base import TTSProviderBase from config.logger import setup_logging @@ -33,7 +33,7 @@ class ServeReferenceAudio(BaseModel): def decode_audio(cls, values): audio = values.get("audio") if ( - isinstance(audio, str) and len(audio) > 255 + isinstance(audio, str) and len(audio) > 255 ): # Check if audio is a string (Base64) try: values["audio"] = base64.b64decode(audio) @@ -45,6 +45,7 @@ class ServeReferenceAudio(BaseModel): def __repr__(self) -> str: return f"ServeReferenceAudio(text={self.text!r}, audio_size={len(self.audio)})" + class ServeTTSRequest(BaseModel): text: str chunk_length: Annotated[int, conint(ge=100, le=300, strict=True)] = 200 @@ -79,6 +80,7 @@ def audio_to_bytes(file_path): wav = wav_file.read() return wav + def read_ref_text(ref_text): path = Path(ref_text) if path.exists() and path.is_file(): @@ -86,31 +88,32 @@ def read_ref_text(ref_text): return file.read() return ref_text + class TTSProvider(TTSProviderBase): def __init__(self, config, delete_audio_file): super().__init__(config, delete_audio_file) self.reference_id = config.get("reference_id") - self.reference_audio = config.get("reference_audio",[]) - self.reference_text = config.get("reference_text",[]) - self.format = config.get("format","wav") - self.channels = config.get("channels",1) - self.rate = config.get("rate",44100) - self.api_key = config.get("api_key","YOUR_API_KEY") - if "你" in self.api_key: - logger.bind(tag=TAG).error("你还没配置FishSpeech TTS的密钥,请在配置文件中配置密钥,否则无法正常工作") + self.reference_audio = config.get("reference_audio", []) + self.reference_text = config.get("reference_text", []) + self.format = config.get("format", "wav") + self.channels = config.get("channels", 1) + self.rate = config.get("rate", 44100) + self.api_key = config.get("api_key", "YOUR_API_KEY") + have_key = check_model_key("FishSpeech TTS", self.api_key) + if not have_key: return - self.normalize = config.get("normalize",True) - self.max_new_tokens = config.get("max_new_tokens",1024) - self.chunk_length = config.get("chunk_length",200) - self.top_p = config.get("top_p",0.7) - self.repetition_penalty = config.get("repetition_penalty",1.2) - self.temperature = config.get("temperature",0.7) - self.streaming = config.get("streaming",False) - self.use_memory_cache = config.get("use_memory_cache","on") + self.normalize = config.get("normalize", True) + self.max_new_tokens = config.get("max_new_tokens", 1024) + self.chunk_length = config.get("chunk_length", 200) + self.top_p = config.get("top_p", 0.7) + self.repetition_penalty = config.get("repetition_penalty", 1.2) + self.temperature = config.get("temperature", 0.7) + self.streaming = config.get("streaming", False) + self.use_memory_cache = config.get("use_memory_cache", "on") self.seed = config.get("seed") - self.api_url = config.get("api_url","http://127.0.0.1:8080/v1/tts") + self.api_url = config.get("api_url", "http://127.0.0.1:8080/v1/tts") def generate_filename(self, extension=".wav"): return os.path.join(self.output_file, f"tts-{datetime.now().date()}@{uuid.uuid4().hex}{extension}") @@ -157,7 +160,7 @@ class TTSProvider(TTSProviderBase): with open(output_file, "wb") as audio_file: audio_file.write(audio_content) - + else: diff --git a/core/providers/tts/gpt_sovits_v2.py b/main/xiaozhi-server/core/providers/tts/gpt_sovits_v2.py similarity index 100% rename from core/providers/tts/gpt_sovits_v2.py rename to main/xiaozhi-server/core/providers/tts/gpt_sovits_v2.py diff --git a/main/xiaozhi-server/core/providers/tts/gpt_sovits_v3.py b/main/xiaozhi-server/core/providers/tts/gpt_sovits_v3.py new file mode 100644 index 00000000..9ad19855 --- /dev/null +++ b/main/xiaozhi-server/core/providers/tts/gpt_sovits_v3.py @@ -0,0 +1,52 @@ +import os +import uuid +import requests +from config.logger import setup_logging +from datetime import datetime +from core.providers.tts.base import TTSProviderBase + +TAG = __name__ +logger = setup_logging() + +class TTSProvider(TTSProviderBase): + def __init__(self, config, delete_audio_file): + super().__init__(config, delete_audio_file) + self.url = config.get("url") + self.text_lang = config.get("text_lang", "audo") + self.ref_audio_path = config.get("ref_audio_path") + self.prompt_lang = config.get("prompt_lang") + self.prompt_text = config.get("prompt_text") + self.top_k = config.get("top_k", 5) + self.top_p = config.get("top_p", 1) + self.temperature = config.get("temperature", 1) + self.sample_steps = config.get("sample_steps", 16) + self.media_type = config.get("media_type", "wav") + self.streaming_mode = config.get("streaming_mode", False) + self.threshold = config.get("threshold", 30) + + + def generate_filename(self, extension=".wav"): + return os.path.join(self.output_file, f"tts-{datetime.now().date()}@{uuid.uuid4().hex}{extension}") + + async def text_to_speak(self, text, output_file): + request_params = { + "text": text, + "text_lang": self.text_lang, + "ref_audio_path": self.ref_audio_path, + "prompt_lang": self.prompt_lang, + "prompt_text": self.prompt_text, + "top_k": self.top_k, + "top_p": self.top_p, + "temperature": self.temperature, + "sample_steps": self.sample_steps, + "media_type": self.media_type, + "streaming_mode": self.streaming_mode, + "threshold": self.threshold, + } + + resp = requests.get(self.url, params=request_params) + if resp.status_code == 200: + with open(output_file, "wb") as file: + file.write(resp.content) + else: + logger.bind(tag=TAG).error(f"GPT_SoVITS_V3 TTS请求失败: {resp.status_code} - {resp.text}") diff --git a/core/providers/tts/minimax.py b/main/xiaozhi-server/core/providers/tts/minimax.py similarity index 100% rename from core/providers/tts/minimax.py rename to main/xiaozhi-server/core/providers/tts/minimax.py diff --git a/main/xiaozhi-server/core/providers/tts/openai.py b/main/xiaozhi-server/core/providers/tts/openai.py new file mode 100644 index 00000000..dbdf311f --- /dev/null +++ b/main/xiaozhi-server/core/providers/tts/openai.py @@ -0,0 +1,40 @@ +import os +import uuid +import requests +from datetime import datetime +from core.utils.util import check_model_key +from core.providers.tts.base import TTSProviderBase + +class TTSProvider(TTSProviderBase): + def __init__(self, config, delete_audio_file): + super().__init__(config, delete_audio_file) + self.api_key = config.get("api_key") + self.api_url = config.get("api_url", "https://api.openai.com/v1/audio/speech") + self.model = config.get("model", "tts-1") + self.voice = config.get("voice", "alloy") + self.response_format = "wav" + self.speed = config.get("speed", 1.0) + self.output_file = config.get("output_file", "tmp/") + check_model_key("TTS", self.api_key) + + def generate_filename(self, extension=".wav"): + return os.path.join(self.output_file, f"tts-{datetime.now().date()}@{uuid.uuid4().hex}{extension}") + + async def text_to_speak(self, text, output_file): + headers = { + "Authorization": f"Bearer {self.api_key}", + "Content-Type": "application/json" + } + data = { + "model": self.model, + "input": text, + "voice": self.voice, + "response_format": "wav", + "speed": self.speed + } + response = requests.post(self.api_url, json=data, headers=headers) + if response.status_code == 200: + with open(output_file, "wb") as audio_file: + audio_file.write(response.content) + else: + raise Exception(f"OpenAI TTS请求失败: {response.status_code} - {response.text}") diff --git a/core/providers/tts/siliconflow.py b/main/xiaozhi-server/core/providers/tts/siliconflow.py similarity index 100% rename from core/providers/tts/siliconflow.py rename to main/xiaozhi-server/core/providers/tts/siliconflow.py diff --git a/main/xiaozhi-server/core/providers/tts/ttson.py b/main/xiaozhi-server/core/providers/tts/ttson.py new file mode 100644 index 00000000..e56fd02d --- /dev/null +++ b/main/xiaozhi-server/core/providers/tts/ttson.py @@ -0,0 +1,64 @@ +import os +import uuid +import json +import requests +import shutil +from datetime import datetime +from core.providers.tts.base import TTSProviderBase + + +class TTSProvider(TTSProviderBase): + def __init__(self, config, delete_audio_file): + super().__init__(config, delete_audio_file) + self.url = config.get("url", "https://u95167-bd74-2aef8085.westx.seetacloud.com:8443/flashsummary/tts?token=") + self.voice_id = config.get("voice_id", 1695) + self.token = config.get("token") + self.to_lang = config.get("to_lang") + self.volume_change_dB = config.get("volume_change_dB", 0) + self.speed_factor = config.get("speed_factor", 1) + self.stream = config.get("stream", False) + self.output_file = config.get("output_file") + self.pitch_factor = config.get("pitch_factor", 0) + self.format = config.get("format", "mp3") + self.emotion = config.get("emotion", 1) + self.header = { + "Content-Type": "application/json" + } + + def generate_filename(self, extension=".mp3"): + return os.path.join(self.output_file, f"tts-{datetime.now().date()}@{uuid.uuid4().hex}{extension}") + + async def text_to_speak(self, text, output_file): + url = f'{self.url}{self.token}' + result = "firefly" + payload = json.dumps({ + "to_lang": self.to_lang, + "text": text, + "emotion": self.emotion, + "format": self.format, + "volume_change_dB": self.volume_change_dB, + "voice_id": self.voice_id, + "pitch_factor": self.pitch_factor, + "speed_factor": self.speed_factor, + "token": self.token + }) + + resp = requests.request("POST", url, data=payload) + if resp.status_code != 200: + return None + resp_json = resp.json() + try: + result = resp_json['url'] + ':' + str( + resp_json[ + 'port']) + '/flashsummary/retrieveFileData?stream=True&token=' + self.token + '&voice_audio_path=' + \ + resp_json['voice_path'] + except Exception as e: + print("error:", e) + + audio_content = requests.get(result) + with open(output_file, "wb") as f: + f.write(audio_content.content) + return True + voice_path = resp_json.get("voice_path") + des_path = output_file + shutil.move(voice_path, des_path) diff --git a/core/utils/asr.py b/main/xiaozhi-server/core/utils/asr.py similarity index 100% rename from core/utils/asr.py rename to main/xiaozhi-server/core/utils/asr.py diff --git a/core/utils/auth_code_gen.py b/main/xiaozhi-server/core/utils/auth_code_gen.py similarity index 100% rename from core/utils/auth_code_gen.py rename to main/xiaozhi-server/core/utils/auth_code_gen.py diff --git a/core/utils/dialogue.py b/main/xiaozhi-server/core/utils/dialogue.py similarity index 93% rename from core/utils/dialogue.py rename to main/xiaozhi-server/core/utils/dialogue.py index ed5e27fe..e74aa41a 100644 --- a/core/utils/dialogue.py +++ b/main/xiaozhi-server/core/utils/dialogue.py @@ -26,6 +26,9 @@ class Dialogue: return dialogue def get_llm_dialogue_with_memory(self, memory_str: str = None) -> List[Dict[str, str]]: + if memory_str is None or len(memory_str) == 0: + return self.get_llm_dialogue() + # 构建带记忆的对话 dialogue = [] diff --git a/main/xiaozhi-server/core/utils/intent.py b/main/xiaozhi-server/core/utils/intent.py new file mode 100644 index 00000000..747ecf38 --- /dev/null +++ b/main/xiaozhi-server/core/utils/intent.py @@ -0,0 +1,17 @@ +import os +import sys +from config.logger import setup_logging +import importlib + +logger = setup_logging() + + +def create_instance(class_name, *args, **kwargs): + # 创建intent实例 + if os.path.exists(os.path.join('core', 'providers', 'intent', class_name, f'{class_name}.py')): + lib_name = f'core.providers.intent.{class_name}.{class_name}' + if lib_name not in sys.modules: + sys.modules[lib_name] = importlib.import_module(f'{lib_name}') + return sys.modules[lib_name].IntentProvider(*args, **kwargs) + + raise ValueError(f"不支持的intent类型: {class_name},请检查该配置的type是否设置正确") \ No newline at end of file diff --git a/core/utils/llm.py b/main/xiaozhi-server/core/utils/llm.py similarity index 100% rename from core/utils/llm.py rename to main/xiaozhi-server/core/utils/llm.py diff --git a/core/utils/lock_manager.py b/main/xiaozhi-server/core/utils/lock_manager.py similarity index 100% rename from core/utils/lock_manager.py rename to main/xiaozhi-server/core/utils/lock_manager.py diff --git a/core/utils/memory.py b/main/xiaozhi-server/core/utils/memory.py similarity index 100% rename from core/utils/memory.py rename to main/xiaozhi-server/core/utils/memory.py diff --git a/core/utils/p3.py b/main/xiaozhi-server/core/utils/p3.py similarity index 100% rename from core/utils/p3.py rename to main/xiaozhi-server/core/utils/p3.py diff --git a/core/utils/tts.py b/main/xiaozhi-server/core/utils/tts.py similarity index 100% rename from core/utils/tts.py rename to main/xiaozhi-server/core/utils/tts.py diff --git a/core/utils/util.py b/main/xiaozhi-server/core/utils/util.py similarity index 82% rename from core/utils/util.py rename to main/xiaozhi-server/core/utils/util.py index df792cbe..8a8dac95 100644 --- a/core/utils/util.py +++ b/main/xiaozhi-server/core/utils/util.py @@ -1,9 +1,9 @@ import os -import re import json import yaml import socket import subprocess +import logging def get_project_dir(): @@ -75,7 +75,7 @@ def get_string_no_punctuation_or_emoji(s): def remove_punctuation_and_length(text): # 全角符号和半角符号的Unicode范围 full_width_punctuations = '!"#$%&'()*+,-。/:;<=>?@[\]^_`{|}~' - half_width_punctuations = '!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~' + half_width_punctuations = r'!"#$%&\'()*+,-./:;<=>?@[\]^_`{|}~' space = ' ' # 半角空格 full_width_space = ' ' # 全角空格 @@ -87,35 +87,13 @@ def remove_punctuation_and_length(text): return 0, "" return len(result), result - -def check_password(password): - """ - 检查密码是否满足以下条件: - 1. 密码长度大于八位。 - 2. 密码包含英文和数字。 - 3. 密码不能包含“xiaozhi”字符。 - - :param password: 要检查的密码 - :return: 如果密码满足条件,则返回True;否则返回False。 - """ - # 检查密码长度 - if len(password) < 8: +def check_model_key(modelType, modelKey): + if "你" in modelKey: + logging.error("你还没配置" + modelType + "的密钥,请在配置文件中配置密钥,否则无法正常工作") return False - - # 检查是否包含英文字符和数字 - if not re.search(r'[A-Za-z]', password) or not re.search(r'[0-9]', password): - return False - - # 检查是否包含“xiaozhi”字符 - if "xiaozhi" in password: - return False - - if "1234" in password: - return False - - # 如果满足所有条件,则返回True return True + def check_ffmpeg_installed(): ffmpeg_installed = False try: @@ -140,4 +118,4 @@ def check_ffmpeg_installed(): error_msg += "\n建议您:\n" error_msg += "1、按照项目的安装文档,正确进入conda环境\n" error_msg += "2、查阅安装文档,如何在conda环境中安装ffmpeg\n" - raise ValueError(error_msg) \ No newline at end of file + raise ValueError(error_msg) diff --git a/core/utils/vad.py b/main/xiaozhi-server/core/utils/vad.py similarity index 100% rename from core/utils/vad.py rename to main/xiaozhi-server/core/utils/vad.py diff --git a/core/websocket_server.py b/main/xiaozhi-server/core/websocket_server.py similarity index 84% rename from core/websocket_server.py rename to main/xiaozhi-server/core/websocket_server.py index 41629932..14d16497 100644 --- a/core/websocket_server.py +++ b/main/xiaozhi-server/core/websocket_server.py @@ -4,7 +4,7 @@ from config.logger import setup_logging from core.connection import ConnectionHandler from core.handle.musicHandler import MusicHandler from core.utils.util import get_local_ip -from core.utils import asr, vad, llm, tts, memory +from core.utils import asr, vad, llm, tts, memory, intent TAG = __name__ @@ -13,11 +13,11 @@ class WebSocketServer: def __init__(self, config: dict): self.config = config self.logger = setup_logging() - self._vad, self._asr, self._llm, self._tts, self._music, self._memory = self._create_processing_instances() + self._vad, self._asr, self._llm, self._tts, self._music, self._memory, self.intent = self._create_processing_instances() self.active_connections = set() # 添加全局连接记录 def _create_processing_instances(self): - memory_cls_name = self.config["selected_module"].get("Memory", "mem0ai") # 默认使用mem0ai + memory_cls_name = self.config["selected_module"].get("Memory", "nomem") # 默认使用nomem has_memory_cfg = self.config.get("Memory") and memory_cls_name in self.config["Memory"] memory_cfg = self.config["Memory"][memory_cls_name] if has_memory_cfg else {} @@ -52,6 +52,13 @@ class WebSocketServer: ), MusicHandler(self.config), memory.create_instance(memory_cls_name, memory_cfg), + intent.create_instance( + self.config["selected_module"]["Intent"] + if not 'type' in self.config["Intent"][self.config["selected_module"]["Intent"]] + else + self.config["Intent"][self.config["selected_module"]["Intent"]]["type"], + self.config["Intent"][self.config["selected_module"]["Intent"]] + ), ) async def start(self): @@ -71,7 +78,7 @@ class WebSocketServer: async def _handle_connection(self, websocket): """处理新连接,每次创建独立的ConnectionHandler""" # 创建ConnectionHandler时传入当前server实例 - handler = ConnectionHandler(self.config, self._vad, self._asr, self._llm, self._tts, self._music, self._memory) + handler = ConnectionHandler(self.config, self._vad, self._asr, self._llm, self._tts, self._music, self._memory, self.intent) self.active_connections.add(handler) try: await handler.handle_connection(websocket) diff --git a/main/xiaozhi-server/docker-compose.yml b/main/xiaozhi-server/docker-compose.yml new file mode 100755 index 00000000..d74d77f2 --- /dev/null +++ b/main/xiaozhi-server/docker-compose.yml @@ -0,0 +1,38 @@ +# 如果本机已经安装了MySQL,可以直接在数据库中创建名为`xiaozhi_esp32_server`的数据库。 +# 如果还没有MySQL,你可以通过docker安装mysql,执行以下一句话 +# docker run --name xiaozhi-esp32-server-db -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -e MYSQL_DATABASE=xiaozhi_esp32_server -e MYSQL_INITDB_ARGS="--character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci" -d mysql:latest +# 如果你的mysql账号和密码有修改过,记得修改下方数据库的账号和密码 +# 记得修改下方数据库的IP,ip不能写127.0.0.1或localhost,否则容器无法访问,要写你电脑局域网ip +version: '3' +services: + xiaozhi-esp32-server: + image: ghcr.nju.edu.cn/xinnan-tech/xiaozhi-esp32-server:server_latest + container_name: xiaozhi-esp32-server + restart: always + security_opt: + - seccomp:unconfined + environment: + - TZ=Asia/Shanghai + ports: + # ws服务端 + - "8000:8000" + volumes: + # 配置文件目录 + - ./data:/opt/xiaozhi-esp32-server/data + # 模型文件挂接,很重要 + - ./models/SenseVoiceSmall/model.pt:/opt/xiaozhi-esp32-server/models/SenseVoiceSmall/model.pt +# #智控台还没开发好,还不能完全使用,会报很多错误,如果是非技术人员,请不要启用智控台服务 +# xiaozhi-esp32-server-web: +# image: ghcr.nju.edu.cn/xinnan-tech/xiaozhi-esp32-server:web_latest +# container_name: xiaozhi-esp32-server-web +# restart: always +# ports: +# - "8002:8002" +# environment: +# - TZ=Asia/Shanghai +# ##记得改mysql和redis IP 密码 +# - SPRING_DATASOURCE_DRUID_URL=jdbc:mysql://192.168.1.20:3306/xiaozhi_esp32_server?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai +# - SPRING_DATASOURCE_DRUID_USERNAME=root +# - SPRING_DATASOURCE_DRUID_PASSWORD=123456 +# - SPRING_DATA_REDIS_HOST=192.168.1.20 +# - SPRING_DATA_REDIS_PORT=6379 diff --git a/models/SenseVoiceSmall/chn_jpn_yue_eng_ko_spectok.bpe.model b/main/xiaozhi-server/models/SenseVoiceSmall/chn_jpn_yue_eng_ko_spectok.bpe.model similarity index 100% rename from models/SenseVoiceSmall/chn_jpn_yue_eng_ko_spectok.bpe.model rename to main/xiaozhi-server/models/SenseVoiceSmall/chn_jpn_yue_eng_ko_spectok.bpe.model diff --git a/models/SenseVoiceSmall/config.yaml b/main/xiaozhi-server/models/SenseVoiceSmall/config.yaml similarity index 100% rename from models/SenseVoiceSmall/config.yaml rename to main/xiaozhi-server/models/SenseVoiceSmall/config.yaml diff --git a/models/SenseVoiceSmall/configuration.json b/main/xiaozhi-server/models/SenseVoiceSmall/configuration.json similarity index 100% rename from models/SenseVoiceSmall/configuration.json rename to main/xiaozhi-server/models/SenseVoiceSmall/configuration.json diff --git a/models/SenseVoiceSmall/demo.py b/main/xiaozhi-server/models/SenseVoiceSmall/demo.py similarity index 100% rename from models/SenseVoiceSmall/demo.py rename to main/xiaozhi-server/models/SenseVoiceSmall/demo.py diff --git a/models/SenseVoiceSmall/example/en.mp3 b/main/xiaozhi-server/models/SenseVoiceSmall/example/en.mp3 similarity index 100% rename from models/SenseVoiceSmall/example/en.mp3 rename to main/xiaozhi-server/models/SenseVoiceSmall/example/en.mp3 diff --git a/models/SenseVoiceSmall/example/ja.mp3 b/main/xiaozhi-server/models/SenseVoiceSmall/example/ja.mp3 similarity index 100% rename from models/SenseVoiceSmall/example/ja.mp3 rename to main/xiaozhi-server/models/SenseVoiceSmall/example/ja.mp3 diff --git a/models/SenseVoiceSmall/example/ko.mp3 b/main/xiaozhi-server/models/SenseVoiceSmall/example/ko.mp3 similarity index 100% rename from models/SenseVoiceSmall/example/ko.mp3 rename to main/xiaozhi-server/models/SenseVoiceSmall/example/ko.mp3 diff --git a/models/SenseVoiceSmall/example/yue.mp3 b/main/xiaozhi-server/models/SenseVoiceSmall/example/yue.mp3 similarity index 100% rename from models/SenseVoiceSmall/example/yue.mp3 rename to main/xiaozhi-server/models/SenseVoiceSmall/example/yue.mp3 diff --git a/models/SenseVoiceSmall/example/zh.mp3 b/main/xiaozhi-server/models/SenseVoiceSmall/example/zh.mp3 similarity index 100% rename from models/SenseVoiceSmall/example/zh.mp3 rename to main/xiaozhi-server/models/SenseVoiceSmall/example/zh.mp3 diff --git a/models/snakers4_silero-vad/hubconf.py b/main/xiaozhi-server/models/snakers4_silero-vad/hubconf.py similarity index 100% rename from models/snakers4_silero-vad/hubconf.py rename to main/xiaozhi-server/models/snakers4_silero-vad/hubconf.py diff --git a/models/snakers4_silero-vad/src/silero_vad/__init__.py b/main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/__init__.py similarity index 100% rename from models/snakers4_silero-vad/src/silero_vad/__init__.py rename to main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/__init__.py diff --git a/models/snakers4_silero-vad/src/silero_vad/data/__init__.py b/main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/data/__init__.py similarity index 100% rename from models/snakers4_silero-vad/src/silero_vad/data/__init__.py rename to main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/data/__init__.py diff --git a/models/snakers4_silero-vad/src/silero_vad/data/silero_vad.jit b/main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/data/silero_vad.jit similarity index 100% rename from models/snakers4_silero-vad/src/silero_vad/data/silero_vad.jit rename to main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/data/silero_vad.jit diff --git a/models/snakers4_silero-vad/src/silero_vad/data/silero_vad.onnx b/main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/data/silero_vad.onnx similarity index 100% rename from models/snakers4_silero-vad/src/silero_vad/data/silero_vad.onnx rename to main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/data/silero_vad.onnx diff --git a/models/snakers4_silero-vad/src/silero_vad/data/silero_vad_16k_op15.onnx b/main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/data/silero_vad_16k_op15.onnx similarity index 100% rename from models/snakers4_silero-vad/src/silero_vad/data/silero_vad_16k_op15.onnx rename to main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/data/silero_vad_16k_op15.onnx diff --git a/models/snakers4_silero-vad/src/silero_vad/data/silero_vad_half.onnx b/main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/data/silero_vad_half.onnx similarity index 100% rename from models/snakers4_silero-vad/src/silero_vad/data/silero_vad_half.onnx rename to main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/data/silero_vad_half.onnx diff --git a/models/snakers4_silero-vad/src/silero_vad/model.py b/main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/model.py similarity index 100% rename from models/snakers4_silero-vad/src/silero_vad/model.py rename to main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/model.py diff --git a/models/snakers4_silero-vad/src/silero_vad/utils_vad.py b/main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/utils_vad.py similarity index 100% rename from models/snakers4_silero-vad/src/silero_vad/utils_vad.py rename to main/xiaozhi-server/models/snakers4_silero-vad/src/silero_vad/utils_vad.py diff --git a/music/一念千年_国风版.mp3 b/main/xiaozhi-server/music/一念千年_国风版.mp3 similarity index 100% rename from music/一念千年_国风版.mp3 rename to main/xiaozhi-server/music/一念千年_国风版.mp3 diff --git a/music/中秋月.mp3 b/main/xiaozhi-server/music/中秋月.mp3 similarity index 100% rename from music/中秋月.mp3 rename to main/xiaozhi-server/music/中秋月.mp3 diff --git a/music/廉波老矣,尚能饭否.mp3 b/main/xiaozhi-server/music/廉波老矣,尚能饭否.mp3 similarity index 100% rename from music/廉波老矣,尚能饭否.mp3 rename to main/xiaozhi-server/music/廉波老矣,尚能饭否.mp3 diff --git a/performance_tester.py b/main/xiaozhi-server/performance_tester.py similarity index 100% rename from performance_tester.py rename to main/xiaozhi-server/performance_tester.py diff --git a/requirements.txt b/main/xiaozhi-server/requirements.txt similarity index 91% rename from requirements.txt rename to main/xiaozhi-server/requirements.txt index 9716c825..f123779a 100755 --- a/requirements.txt +++ b/main/xiaozhi-server/requirements.txt @@ -18,5 +18,4 @@ ruamel.yaml==0.18.10 loguru==0.7.3 requests==2.32.3 cozepy==0.12.0 -miniaudio==1.61 -mem0ai==0.1.62 +mem0ai==0.1.62 \ No newline at end of file diff --git a/manager/api/auth.py b/manager/api/auth.py deleted file mode 100644 index 61b06075..00000000 --- a/manager/api/auth.py +++ /dev/null @@ -1,30 +0,0 @@ -import uuid -from manager.api.response import response_success, response_error - - -async def verify_token(config, request): - if 'token' not in config['manager']: - return True - expected_token = config['manager']['token'] - token = request.headers.get('Authorization', '').replace('Bearer ', '') - - if not token or token != expected_token: - return False - return True - - -class AuthApi: - def __init__(self, config): - self.config = config - - async def login(self, request): - try: - data = await request.json() - if 'password' not in data: - return response_error("密码不能为空") - # 通过config参数回传修改能力 - if self.config['manager']['token'] == data['password']: - return response_success(data=str(uuid.uuid4())) - return response_error("密码不正确") - except Exception as e: - return response_error(str(e)) diff --git a/manager/api/config.py b/manager/api/config.py deleted file mode 100644 index 13588c9b..00000000 --- a/manager/api/config.py +++ /dev/null @@ -1,227 +0,0 @@ -import os -import yaml -from config.logger import setup_logging -from aiohttp import web -from core.utils.util import get_project_dir -from config.private_config import PrivateConfig -from manager.api.user_manager import UserManager # 添加导入 -from core.utils.auth_code_gen import AuthCodeGenerator # 添加导入 - -TAG = __name__ -logger = setup_logging() - -class ConfigHandler: - def __init__(self, session_manager): - self.session_manager = session_manager - self.user_manager = UserManager() # 添加 user_manager 实例 - self.private_config_path = get_project_dir() + 'data/.private_config.yaml' - self.config_path = get_project_dir() + 'config.yaml' - # 如果存在.config.yaml文件,则使用该文件 - if os.path.exists(get_project_dir() + "data/.config.yaml"): - self.config_path = get_project_dir() + "data/.config.yaml" - with open(self.config_path, 'r', encoding='utf-8') as f: - self.config = yaml.safe_load(f) - - async def get_module_options(self, request): - """Get all available module options from config.yaml""" - try: - with open(self.config_path, 'r', encoding='utf-8') as f: - config = yaml.safe_load(f) - - # Extract available modules - modules = { - 'LLM': list(config.get('LLM', {}).keys()), - 'TTS': list(config.get('TTS', {}).keys()), - 'VAD': list(config.get('VAD', {}).keys()), - 'ASR': list(config.get('ASR', {}).keys()) - } - - return web.json_response({ - 'success': True, - 'data': modules, - 'message': '获取成功' - }) - - except Exception as e: - logger.bind(tag=TAG).error(f"Error getting module options: {str(e)}", exc_info=True) - return web.json_response({ - 'success': False, - 'message': '获取配置选项失败' - }) - - async def get_private_configs(self, request): - """只返回用户绑定的设备配置""" - try: - username = request['username'] - logger.bind(tag=TAG).info(f"Getting devices for user: {username}") - - # 从用户管理器获取用户的设备列表 - user_devices = await self.user_manager.get_user_devices(username) - logger.bind(tag=TAG).info(f"User {username} has devices: {user_devices}") - - # 读取所有配置 - all_configs = {} - if os.path.exists(self.private_config_path): - with open(self.private_config_path, 'r', encoding='utf-8') as f: - all_configs = yaml.safe_load(f) or {} - - # 只返回用户有权限的设备配置 - user_configs = { - device_id: config - for device_id, config in all_configs.items() - if device_id in user_devices - } - - logger.bind(tag=TAG).info(f"Returning {len(user_configs)} device configs for user {username}") - return web.json_response({ - 'success': True, - 'data': user_configs, - 'message': '获取成功' - }) - - except Exception as e: - logger.bind(tag=TAG).error(f"Error getting devices for user {request.get('username')}: {str(e)}", exc_info=True) - return web.json_response({ - 'success': False, - 'message': f'获取设备列表失败: {str(e)}' - }, status=400) - - async def save_device_config(self, request): - """保存单个设备的配置""" - try: - data = await request.json() - device_id = data.get('id') - config = data.get('config') - username = request['username'] # 从请求中获取用户名 - - # 检查设备所有权 - user_devices = await self.user_manager.get_user_devices(username) - if device_id not in user_devices: - return web.json_response({ - 'success': False, - 'message': '无权操作此设备' - }, status=403) - - logger.bind(tag=TAG).info(f"Device config updated: {device_id} :\n{config}") - if not device_id or not config: - return web.json_response({ - 'success': False, - 'message': '设备ID和配置不能为空' - }) - - # 使用PrivateConfig处理配置保存 - private_config = PrivateConfig(device_id, self.config) - await private_config.load_or_create() - - success = await private_config.update_config( - config.get('selected_module'), - config.get('prompt'), - config.get('nickname', '小智') - ) - - - if not success: - raise Exception("Failed to update device config") - - return web.json_response({ - 'success': True, - 'message': '保存成功' - }) - - except Exception as e: - logger.bind(tag=TAG).error(f"Error saving device config: {str(e)}", exc_info=True) - return web.json_response({ - 'success': False, - 'message': f'保存配置失败: {str(e)}' - }) - - async def delete_device_config(self, request): - """删除设备配置""" - try: - data = await request.json() - device_id = data.get('device_id') - username = request['username'] - - # 检查设备所有权 - user_devices = await self.user_manager.get_user_devices(username) - if device_id not in user_devices: - return web.json_response({ - 'success': False, - 'message': '无权删除此设备' - }, status=403) - - # 使用PrivateConfig处理配置删除 - private_config = PrivateConfig(device_id, self.config) - success = await private_config.delete_config() - await self.user_manager.remove_device(username, device_id) - - if not success: - raise Exception("Failed to delete device config") - - return web.json_response({ - 'success': True, - 'message': '删除成功' - }) - - except Exception as e: - logger.bind(tag=TAG).error(f"Error deleting device config: {str(e)}", exc_info=True) - return web.json_response({ - 'success': False, - 'message': f'删除配置失败: {str(e)}' - }) - - async def bind_device(self, request): - """绑定设备到用户""" - try: - data = await request.json() - auth_code = data.get('auth_code') - username = request['username'] - - if not auth_code or len(auth_code) != 6: - return web.json_response({ - 'success': False, - 'message': '请输入6位认证码' - }, status=400) - - # 读取所有设备配置 - with open(self.private_config_path, 'r', encoding='utf-8') as f: - all_configs = yaml.safe_load(f) or {} - - # 查找匹配认证码的设备 - device_found = None - for device_id, config in all_configs.items(): - if config.get('auth_code') == auth_code and not config.get('owner'): - device_found = device_id - break - - if not device_found: - return web.json_response({ - 'success': False, - 'message': '认证码无效或设备已被绑定' - }, status=400) - - # 使用 PrivateConfig 进行绑定 - private_config = PrivateConfig(device_found, self.config, AuthCodeGenerator()) - await private_config.load_or_create() - - # 绑定设备到用户 - 修改为异步调用 - success = await private_config.bind_user(username) - if success: - # 同时更新用户的设备列表 - 修改为异步调用 - await self.user_manager.add_device(username, device_found) - return web.json_response({ - 'success': True, - 'message': '设备绑定成功' - }) - else: - return web.json_response({ - 'success': False, - 'message': '设备绑定失败' - }, status=500) - - except Exception as e: - logger.bind(tag=TAG).error(f"Error binding device: {str(e)}", exc_info=True) - return web.json_response({ - 'success': False, - 'message': f'绑定设备失败: {str(e)}' - }, status=500) diff --git a/manager/api/login.py b/manager/api/login.py deleted file mode 100644 index 22070357..00000000 --- a/manager/api/login.py +++ /dev/null @@ -1,53 +0,0 @@ -from config.logger import setup_logging -from aiohttp import web -import datetime - -TAG = __name__ -logger = setup_logging() - -class LoginHandler: - def __init__(self, user_manager, session_manager): - self.user_manager = user_manager - self.session_manager = session_manager - - async def handle_login(self, request): - """处理登录请求""" - try: - data = await request.json() - username = data.get('username') - password = data.get('password') - - if not username or not password: - logger.bind(tag=TAG).warning(f"Login attempt with empty credentials from {request.remote}") - return web.json_response({ - 'success': False, - 'message': '用户名和密码不能为空' - }) - - stored_user = await self.user_manager.get_user(username) - if not stored_user or stored_user['password'] != self.user_manager.hash_password(password): - logger.bind(tag=TAG).warning(f"Failed login attempt for user {username} from {request.remote}") - return web.json_response({ - 'success': False, - 'message': '用户名或密码错误' - }) - - # 更新最后登录时间 - await self.user_manager.update_user(username, { - 'last_login': datetime.datetime.now().isoformat() - }) - - # 创建会话并返回session_id - session_id = self.session_manager.create_session(username) - return web.json_response({ - 'success': True, - 'message': '登录成功', - 'session_id': session_id - }) - - except Exception as e: - logger.bind(tag=TAG).error(f"Login error: {str(e)}", exc_info=True) - return web.json_response({ - 'success': False, - 'message': '登录失败,请稍后重试' - }) diff --git a/manager/api/prompt.py b/manager/api/prompt.py deleted file mode 100644 index 2a4232fa..00000000 --- a/manager/api/prompt.py +++ /dev/null @@ -1,42 +0,0 @@ -from config.logger import setup_logging -from aiohttp import web -from config.settings import update_config -from ruamel.yaml.scalarstring import PreservedScalarString -from manager.api.auth import verify_token -from manager.api.response import response_unauthorized, response_success, response_error - -TAG = __name__ -logger = setup_logging() - -class PromptApi: - def __init__(self, config): - self.config = config - - async def get_prompt(self, request): - if not await verify_token(self.config, request): - return response_unauthorized() - - return web.json_response({ - 'prompt': self.config['prompt'], - 'Access-Control-Allow-Origin': '*' - }) - - async def update_prompt(self, request): - if not await verify_token(self.config, request): - return response_unauthorized() - - try: - data = await request.json() - if 'prompt' not in data: - return response_success() - - # 使用PreservedScalarString保留多行文本格式 - self.config['prompt'] = PreservedScalarString(data['prompt']) - - # 保存到配置文件 - update_config(self.config) - - return response_success() - except Exception as e: - logger.bind(tag=TAG).error(f"Failed to update prompt: {e}") - return response_error(str(e)) diff --git a/manager/api/register.py b/manager/api/register.py deleted file mode 100644 index 27879afc..00000000 --- a/manager/api/register.py +++ /dev/null @@ -1,55 +0,0 @@ -from config.logger import setup_logging -from aiohttp import web -import datetime - -TAG = __name__ -logger = setup_logging() - -class RegisterHandler: - def __init__(self, user_manager): - self.user_manager = user_manager - - async def handle_register(self, request): - """处理注册请求""" - try: - data = await request.json() - username = data.get('username') - password = data.get('password') - - if not username or not password: - logger.bind(tag=TAG).warning(f"Registration attempt with empty credentials from {request.remote}") - return web.json_response({ - 'success': False, - 'message': '用户名和密码不能为空' - }) - - # 检查用户是否已存在 - if await self.user_manager.get_user(username): - logger.bind(tag=TAG).warning(f"Registration attempt with existing username {username} from {request.remote}") - return web.json_response({ - 'success': False, - 'message': '用户名已存在' - }) - - # 创建用户 - user_data = { - 'username': username, - 'password': self.user_manager.hash_password(password), - 'devices': [], - 'created_at': datetime.datetime.now().isoformat(), - 'last_login': '' - } - await self.user_manager.add_user(username, user_data) - - logger.bind(tag=TAG).info(f"Successfully registered new user {username} from {request.remote}") - return web.json_response({ - 'success': True, - 'message': '注册成功' - }) - - except Exception as e: - logger.bind(tag=TAG).error(f"Register error: {str(e)}", exc_info=True) - return web.json_response({ - 'success': False, - 'message': '注册失败,请稍后重试' - }) diff --git a/manager/api/response.py b/manager/api/response.py deleted file mode 100644 index 9ac8d3da..00000000 --- a/manager/api/response.py +++ /dev/null @@ -1,16 +0,0 @@ -from aiohttp import web -from typing import Optional, Dict, Any # 导入Optional用于表示可选类型 - - -def response_error(msg): - return web.json_response({"code": -1, 'msg': msg}, status=200) - - -def response_success(msg: str = '', data: Optional[Any] = None): - if data is None: - data = {} - return web.json_response({"code": 0, 'msg': msg, 'data': data}, status=200) - - -def response_unauthorized(): - return web.json_response({"code": 401}, status=200) diff --git a/manager/api/user_manager.py b/manager/api/user_manager.py deleted file mode 100644 index abc7e3e5..00000000 --- a/manager/api/user_manager.py +++ /dev/null @@ -1,175 +0,0 @@ -import os -import yaml -import hashlib -from config.logger import setup_logging -from core.utils.util import get_project_dir -from core.utils.lock_manager import FileLockManager - -TAG = __name__ -logger = setup_logging() - -class UserManager: - def __init__(self): - self.secrets_path = get_project_dir() + 'data/.secrets.yaml' - self.lock_manager = FileLockManager() - self.ensure_secrets_file() - - def ensure_secrets_file(self): - """确保 .secrets.yaml 文件存在""" - if not os.path.exists(self.secrets_path): - default_config = { - 'users': {} - } - try: - with open(self.secrets_path, 'w', encoding='utf-8') as f: - yaml.dump(default_config, f) - os.chmod(self.secrets_path, 0o600) - logger.bind(tag=TAG).info("Created new .secrets.yaml file") - except Exception as e: - logger.bind(tag=TAG).error(f"Failed to create .secrets.yaml: {e}") - raise - - async def _load_user_data_internal(self): - """内部加载用户数据方法 - 不获取锁""" - try: - with open(self.secrets_path, 'r', encoding='utf-8') as f: - data = yaml.safe_load(f) or {'users': {}} - users = data['users'] - logger.bind(tag=TAG).debug("Successfully loaded user data") - except Exception as e: - logger.bind(tag=TAG).error(f"Failed to load user data: {e}") - users = {} - return users - - async def load_user_data(self): - """加载用户数据""" - try: - await self.lock_manager.acquire_lock(self.secrets_path) - try: - users = await self._load_user_data_internal() - finally: - self.lock_manager.release_lock(self.secrets_path) - - except Exception as e: - logger.bind(tag=TAG).error(f"Failed to load user data: {e}") - users = {} - return users - - async def _save_user_data_internal(self, users): - """内部保存用户数据方法 - 不获取锁""" - try: - with open(self.secrets_path, 'w', encoding='utf-8') as f: - yaml.dump({'users': users}, f) - logger.bind(tag=TAG).debug("Successfully saved user data") - except Exception as e: - logger.bind(tag=TAG).error(f"Failed to save user data: {e}") - raise - - async def save_user_data(self, users): - """外部保存用户数据方法 - 获取锁""" - try: - await self.lock_manager.acquire_lock(self.secrets_path) - try: - await self._save_user_data_internal(users) - finally: - self.lock_manager.release_lock(self.secrets_path) - except Exception as e: - logger.bind(tag=TAG).error(f"Failed to save user data: {e}") - raise - - def hash_password(self, password): - """密码哈希""" - return hashlib.sha256(password.encode()).hexdigest() - - async def get_users(self): - """异步获取所有用户""" - users = await self.load_user_data() # 确保获取最新数据 - return users - - async def get_user(self, username): - """异步获取指定用户""" - users = await self.load_user_data() # 确保获取最新数据 - return users.get(username) - - async def add_user(self, username: str, user_data: dict): - """异步添加新用户""" - try: - await self.lock_manager.acquire_lock(self.secrets_path) - try: - users = await self._load_user_data_internal() # 确保获取最新数据 - if username in users: - raise ValueError("User already exists") - users[username] = user_data - await self._save_user_data_internal(users) - finally: - self.lock_manager.release_lock(self.secrets_path) - except Exception as e: - logger.bind(tag=TAG).error(f"Error adding user: {e}") - raise - - async def update_user(self, username, data): - """更新用户数据""" - try: - await self.lock_manager.acquire_lock(self.secrets_path) - try: - users = await self._load_user_data_internal() # 确保获取最新数据 - if username in users: - users[username].update(data) - await self._save_user_data_internal(users) - return True - return False - finally: - self.lock_manager.release_lock(self.secrets_path) - except Exception as e: - logger.bind(tag=TAG).error(f"Error updating user: {e}") - return False - - async def get_user_devices(self, username: str) -> list: - """获取用户的设备列表""" - user = await self.get_user(username) - print(user) - if user and user.get('devices'): - return user['devices'] - return [] - - async def add_device(self, username: str, device_id: str) -> bool: - """添加设备到用户的设备列表""" - try: - await self.lock_manager.acquire_lock(self.secrets_path) - try: - users = await self._load_user_data_internal() # 确保获取最新数据 - user = users.get(username) # 直接从内存获取,因为已经有锁 - if not user: - return False - - if 'devices' not in user: - user['devices'] = [] - - if device_id not in user['devices']: - user['devices'].append(device_id) - await self._save_user_data_internal(users) - return True - finally: - self.lock_manager.release_lock(self.secrets_path) - except Exception as e: - logger.bind(tag=TAG).error(f"Error adding device: {e}") - return False - - async def remove_device(self, username: str, device_id: str) -> bool: - """从用户的设备列表中移除设备""" - try: - await self.lock_manager.acquire_lock(self.secrets_path) - try: - users = await self._load_user_data_internal() # 确保获取最新数据 - user = users.get(username) # 直接从内存获取,因为已经有锁 - if user and 'devices' in user: - if device_id in user['devices']: - user['devices'].remove(device_id) - await self._save_user_data_internal(users) - return True - return False - finally: - self.lock_manager.release_lock(self.secrets_path) - except Exception as e: - logger.bind(tag=TAG).error(f"Error removing device: {e}") - return False diff --git a/manager/http_server.py b/manager/http_server.py deleted file mode 100644 index 565c1cf4..00000000 --- a/manager/http_server.py +++ /dev/null @@ -1,116 +0,0 @@ -# 添加项目根目录到Python路径 -import os -import sys -current_dir = os.path.dirname(os.path.abspath(__file__)) -root_dir = os.path.dirname(current_dir) -sys.path.append(root_dir) - -from config.logger import setup_logging -from aiohttp import web -from aiohttp_cors import setup as cors_setup, ResourceOptions -from manager.api.login import LoginHandler -from manager.api.register import RegisterHandler -from manager.api.user_manager import UserManager -from manager.api.config import ConfigHandler -from manager.session import SessionManager -from functools import wraps - -TAG = __name__ -logger = setup_logging() - -def auth_required(handler): - """鉴权装饰器""" - @wraps(handler) - async def wrapper(self, request): - session_id = request.cookies.get('session_id') - username = self.session_manager.validate_session(session_id) - if not username: - return web.json_response({'error': 'Unauthorized'}, status=401) - # 将用户名添加到请求对象 - request['username'] = username - return await handler(self, request) - return wrapper - -class WebUI: - def __init__(self): - self.app = web.Application() - self.user_manager = UserManager() - self.session_manager = SessionManager() - - # 添加静态文件路径 - self.static_path = os.path.join(root_dir, 'ZhiKongTaiWeb', 'dist') - - self.setup_routes() - self.setup_cors() - - def setup_cors(self): - """设置CORS""" - cors = cors_setup(self.app, defaults={ - "*": ResourceOptions( - allow_credentials=True, - expose_headers="*", - allow_headers="*", - allow_methods="*" - ) - }) - - for route in list(self.app.router.routes()): - cors.add(route) - - def setup_routes(self): - """设置路由""" - login_handler = LoginHandler(self.user_manager, self.session_manager) - register_handler = RegisterHandler(self.user_manager) - config_handler = ConfigHandler(self.session_manager) - - # Public APIs - self.app.router.add_post('/api/login', login_handler.handle_login) - self.app.router.add_post('/api/register', register_handler.handle_register) - - # Protected APIs - self.app.router.add_get('/api/config/devices', self.auth_wrapper(config_handler.get_private_configs)) - - self.app.router.add_get('/api/config/module-options', self.auth_wrapper(config_handler.get_module_options)) - self.app.router.add_post('/api/config/save_device_config', self.auth_wrapper(config_handler.save_device_config)) - self.app.router.add_post('/api/config/delete_device', self.auth_wrapper(config_handler.delete_device_config)) - self.app.router.add_post('/api/config/bind_device', self.auth_wrapper(config_handler.bind_device)) - - # 添加静态文件服务 - self.app.router.add_static('/assets/', path=os.path.join(self.static_path, 'assets')) - # 所有未匹配的路由都返回 index.html - self.app.router.add_get('/{tail:.*}', self.handle_static_files) - - async def handle_static_files(self, request): - """处理静态文件请求,支持SPA前端路由""" - index_file = os.path.join(self.static_path, 'index.html') - if os.path.exists(index_file): - return web.FileResponse(index_file) - return web.Response(status=404, text='Not found') - - def auth_wrapper(self, handler): - """包装处理器添加鉴权""" - @wraps(handler) - async def wrapper(request): - # 从请求头获取session_id - session_id = request.headers.get('Authorization') - if not session_id: - logger.bind(tag=TAG).warning("No session_id in Authorization header") - return web.json_response({'error': 'Unauthorized'}, status=401) - - username = self.session_manager.validate_session(session_id) - if not username: - logger.bind(tag=TAG).warning(f"Invalid session_id: {session_id}") - return web.json_response({'error': 'Unauthorized'}, status=401) - - request['username'] = username - logger.bind(tag=TAG).debug(f"Auth success for user: {username}") - return await handler(request) - return wrapper - - def run(self, host='0.0.0.0', port=8002): - """运行服务器""" - web.run_app(self.app, host=host, port=port) - -if __name__ == '__main__': - webui = WebUI() - webui.run() diff --git a/manager/session.py b/manager/session.py deleted file mode 100644 index 63e1ab1e..00000000 --- a/manager/session.py +++ /dev/null @@ -1,33 +0,0 @@ -import time -from typing import Dict, Optional - -class SessionManager: - def __init__(self): - self.sessions: Dict[str, Dict] = {} - self.session_timeout = 24 * 60 * 60 # 24小时过期 - - def create_session(self, username: str) -> str: - """创建新会话""" - session_id = str(hash(f"{username}:{time.time()}")) - self.sessions[session_id] = { - 'username': username, - 'created_at': time.time() - } - return session_id - - def validate_session(self, session_id: str) -> Optional[str]: - """验证会话是否有效,返回用户名""" - if session_id not in self.sessions: - return None - - session = self.sessions[session_id] - if time.time() - session['created_at'] > self.session_timeout: - del self.sessions[session_id] - return None - - return session['username'] - - def remove_session(self, session_id: str): - """删除会话""" - if session_id in self.sessions: - del self.sessions[session_id] diff --git a/manager/static/css/common.css b/manager/static/css/common.css deleted file mode 100644 index b6f7287e..00000000 --- a/manager/static/css/common.css +++ /dev/null @@ -1,77 +0,0 @@ -/* common.css */ -/* 基础样式 */ -body { - margin: 0; - padding: 0; - background: linear-gradient(135deg, #1a1f25 0%, #0d1117 100%); - min-height: 100vh; - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; -} - -/* 头部组件 */ -.app-header { - background: rgba(13, 17, 23, 0.8); - backdrop-filter: blur(10px); - color: #fff; - padding: 1.5rem 2rem; - font-size: 1.4rem; - border-bottom: 1px solid rgba(255, 255, 255, 0.1); - display: flex; - align-items: center; - gap: 1rem; - position: relative; - z-index: 1; -} - -.header-logo { - width: 32px; - height: 32px; - background: linear-gradient(45deg, #00c6fb 0%, #005bea 100%); - border-radius: 8px; - display: flex; - align-items: center; - justify-content: center; - font-weight: bold; -} - -/* 页脚组件 */ -.app-footer { - text-align: center; - color: rgba(255, 255, 255, 0.6); - font-size: 13px; - padding: 20px; - position: fixed; - bottom: 0; - width: 100%; - z-index: 1; -} - -/* 背景动画 */ -.animated-bg { - position: fixed; - top: 0; - left: 0; - width: 100%; - height: 100%; - z-index: -1; - background: linear-gradient(-45deg, #1a1f25, #0d1117, #162030, #1c1c1c); - background-size: 400% 400%; -} - - -.user-menu { - position: fixed; - top: 23px; - right: 32px; - z-index: 1000; - cursor: pointer; -} - -.user-info { - align-items: center; -} - -.user-name { - font-size: 14px; - color: #606266; -} \ No newline at end of file diff --git a/manager/static/css/element-plus2.9.4.css b/manager/static/css/element-plus2.9.4.css deleted file mode 100644 index 67a223b9..00000000 --- a/manager/static/css/element-plus2.9.4.css +++ /dev/null @@ -1 +0,0 @@ -@charset "UTF-8";:root{--el-color-white:#ffffff;--el-color-black:#000000;--el-color-primary-rgb:64,158,255;--el-color-success-rgb:103,194,58;--el-color-warning-rgb:230,162,60;--el-color-danger-rgb:245,108,108;--el-color-error-rgb:245,108,108;--el-color-info-rgb:144,147,153;--el-font-size-extra-large:20px;--el-font-size-large:18px;--el-font-size-medium:16px;--el-font-size-base:14px;--el-font-size-small:13px;--el-font-size-extra-small:12px;--el-font-family:"Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;--el-font-weight-primary:500;--el-font-line-height-primary:24px;--el-index-normal:1;--el-index-top:1000;--el-index-popper:2000;--el-border-radius-base:4px;--el-border-radius-small:2px;--el-border-radius-round:20px;--el-border-radius-circle:100%;--el-transition-duration:0.3s;--el-transition-duration-fast:0.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(0.645,0.045,0.355,1);--el-transition-function-fast-bezier:cubic-bezier(0.23,1,0.32,1);--el-transition-all:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);--el-transition-fade:opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-md-fade:transform var(--el-transition-duration) var(--el-transition-function-fast-bezier),opacity var(--el-transition-duration) var(--el-transition-function-fast-bezier);--el-transition-fade-linear:opacity var(--el-transition-duration-fast) linear;--el-transition-border:border-color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-box-shadow:box-shadow var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-transition-color:color var(--el-transition-duration-fast) var(--el-transition-function-ease-in-out-bezier);--el-component-size-large:40px;--el-component-size:32px;--el-component-size-small:24px;color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:rgb(121.3,187.1,255);--el-color-primary-light-5:rgb(159.5,206.5,255);--el-color-primary-light-7:rgb(197.7,225.9,255);--el-color-primary-light-8:rgb(216.8,235.6,255);--el-color-primary-light-9:rgb(235.9,245.3,255);--el-color-primary-dark-2:rgb(51.2,126.4,204);--el-color-success:#67c23a;--el-color-success-light-3:rgb(148.6,212.3,117.1);--el-color-success-light-5:rgb(179,224.5,156.5);--el-color-success-light-7:rgb(209.4,236.7,195.9);--el-color-success-light-8:rgb(224.6,242.8,215.6);--el-color-success-light-9:rgb(239.8,248.9,235.3);--el-color-success-dark-2:rgb(82.4,155.2,46.4);--el-color-warning:#e6a23c;--el-color-warning-light-3:rgb(237.5,189.9,118.5);--el-color-warning-light-5:rgb(242.5,208.5,157.5);--el-color-warning-light-7:rgb(247.5,227.1,196.5);--el-color-warning-light-8:rgb(250,236.4,216);--el-color-warning-light-9:rgb(252.5,245.7,235.5);--el-color-warning-dark-2:rgb(184,129.6,48);--el-color-danger:#f56c6c;--el-color-danger-light-3:rgb(248,152.1,152.1);--el-color-danger-light-5:rgb(250,181.5,181.5);--el-color-danger-light-7:rgb(252,210.9,210.9);--el-color-danger-light-8:rgb(253,225.6,225.6);--el-color-danger-light-9:rgb(254,240.3,240.3);--el-color-danger-dark-2:rgb(196,86.4,86.4);--el-color-error:#f56c6c;--el-color-error-light-3:rgb(248,152.1,152.1);--el-color-error-light-5:rgb(250,181.5,181.5);--el-color-error-light-7:rgb(252,210.9,210.9);--el-color-error-light-8:rgb(253,225.6,225.6);--el-color-error-light-9:rgb(254,240.3,240.3);--el-color-error-dark-2:rgb(196,86.4,86.4);--el-color-info:#909399;--el-color-info-light-3:rgb(177.3,179.4,183.6);--el-color-info-light-5:rgb(199.5,201,204);--el-color-info-light-7:rgb(221.7,222.6,224.4);--el-color-info-light-8:rgb(232.8,233.4,234.6);--el-color-info-light-9:rgb(243.9,244.2,244.8);--el-color-info-dark-2:rgb(115.2,117.6,122.4);--el-bg-color:#ffffff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#ffffff;--el-text-color-primary:#303133;--el-text-color-regular:#606266;--el-text-color-secondary:#909399;--el-text-color-placeholder:#a8abb2;--el-text-color-disabled:#c0c4cc;--el-border-color:#dcdfe6;--el-border-color-light:#e4e7ed;--el-border-color-lighter:#ebeef5;--el-border-color-extra-light:#f2f6fc;--el-border-color-dark:#d4d7de;--el-border-color-darker:#cdd0d6;--el-fill-color:#f0f2f5;--el-fill-color-light:#f5f7fa;--el-fill-color-lighter:#fafafa;--el-fill-color-extra-light:#fafcff;--el-fill-color-dark:#ebedf0;--el-fill-color-darker:#e6e8eb;--el-fill-color-blank:#ffffff;--el-box-shadow:0px 12px 32px 4px rgba(0,0,0,0.04),0px 8px 20px rgba(0,0,0,0.08);--el-box-shadow-light:0px 0px 12px rgba(0,0,0,0.12);--el-box-shadow-lighter:0px 0px 6px rgba(0,0,0,0.12);--el-box-shadow-dark:0px 16px 48px 16px rgba(0,0,0,0.08),0px 12px 32px rgba(0,0,0,0.12),0px 8px 16px -8px rgba(0,0,0,0.16);--el-disabled-bg-color:var(--el-fill-color-light);--el-disabled-text-color:var(--el-text-color-placeholder);--el-disabled-border-color:var(--el-border-color-light);--el-overlay-color:rgba(0,0,0,0.8);--el-overlay-color-light:rgba(0,0,0,0.7);--el-overlay-color-lighter:rgba(0,0,0,0.5);--el-mask-color:rgba(255,255,255,0.9);--el-mask-color-extra-light:rgba(255,255,255,0.3);--el-border-width:1px;--el-border-style:solid;--el-border-color-hover:var(--el-text-color-disabled);--el-border:var(--el-border-width) var(--el-border-style) var(--el-border-color);--el-svg-monochrome-grey:var(--el-border-color)}.fade-in-linear-enter-active,.fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.fade-in-linear-enter-from,.fade-in-linear-leave-to{opacity:0}.el-fade-in-linear-enter-active,.el-fade-in-linear-leave-active{transition:var(--el-transition-fade-linear)}.el-fade-in-linear-enter-from,.el-fade-in-linear-leave-to{opacity:0}.el-fade-in-enter-active,.el-fade-in-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-fade-in-enter-from,.el-fade-in-leave-active{opacity:0}.el-zoom-in-center-enter-active,.el-zoom-in-center-leave-active{transition:all var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-zoom-in-center-enter-from,.el-zoom-in-center-leave-active{opacity:0;transform:scaleX(0)}.el-zoom-in-top-enter-active,.el-zoom-in-top-leave-active{opacity:1;transform:scaleY(1);transform-origin:center top;transition:var(--el-transition-md-fade)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin:center bottom}.el-zoom-in-top-enter-from,.el-zoom-in-top-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-bottom-enter-active,.el-zoom-in-bottom-leave-active{opacity:1;transform:scaleY(1);transform-origin:center bottom;transition:var(--el-transition-md-fade)}.el-zoom-in-bottom-enter-from,.el-zoom-in-bottom-leave-active{opacity:0;transform:scaleY(0)}.el-zoom-in-left-enter-active,.el-zoom-in-left-leave-active{opacity:1;transform:scale(1);transform-origin:top left;transition:var(--el-transition-md-fade)}.el-zoom-in-left-enter-from,.el-zoom-in-left-leave-active{opacity:0;transform:scale(.45)}.collapse-transition{transition:var(--el-transition-duration) height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.el-collapse-transition-enter-active,.el-collapse-transition-leave-active{transition:var(--el-transition-duration) max-height ease-in-out,var(--el-transition-duration) padding-top ease-in-out,var(--el-transition-duration) padding-bottom ease-in-out}.horizontal-collapse-transition{transition:var(--el-transition-duration) width ease-in-out,var(--el-transition-duration) padding-left ease-in-out,var(--el-transition-duration) padding-right ease-in-out}.el-list-enter-active,.el-list-leave-active{transition:all 1s}.el-list-enter-from,.el-list-leave-to{opacity:0;transform:translateY(-30px)}.el-list-leave-active{position:absolute!important}.el-opacity-transition{transition:opacity var(--el-transition-duration) cubic-bezier(.55,0,.1,1)}.el-icon-loading{animation:rotating 2s linear infinite}.el-icon--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.el-icon{--color:inherit;align-items:center;display:inline-flex;height:1em;justify-content:center;line-height:1em;position:relative;width:1em;fill:currentColor;color:var(--color);font-size:inherit}.el-icon.is-loading{animation:rotating 2s linear infinite}.el-icon svg{height:1em;width:1em}.el-affix--fixed{position:fixed}.el-alert{--el-alert-padding:8px 16px;--el-alert-border-radius-base:var(--el-border-radius-base);--el-alert-title-font-size:14px;--el-alert-title-with-description-font-size:16px;--el-alert-description-font-size:14px;--el-alert-close-font-size:16px;--el-alert-close-customed-font-size:14px;--el-alert-icon-size:16px;--el-alert-icon-large-size:28px;align-items:center;background-color:var(--el-color-white);border-radius:var(--el-alert-border-radius-base);box-sizing:border-box;display:flex;margin:0;opacity:1;overflow:hidden;padding:var(--el-alert-padding);position:relative;transition:opacity var(--el-transition-duration-fast);width:100%}.el-alert.is-light .el-alert__close-btn{color:var(--el-text-color-placeholder)}.el-alert.is-dark .el-alert__close-btn,.el-alert.is-dark .el-alert__description{color:var(--el-color-white)}.el-alert.is-center{justify-content:center}.el-alert--success{--el-alert-bg-color:var(--el-color-success-light-9)}.el-alert--success.is-light{background-color:var(--el-alert-bg-color)}.el-alert--success.is-light,.el-alert--success.is-light .el-alert__description{color:var(--el-color-success)}.el-alert--success.is-dark{background-color:var(--el-color-success);color:var(--el-color-white)}.el-alert--info{--el-alert-bg-color:var(--el-color-info-light-9)}.el-alert--info.is-light{background-color:var(--el-alert-bg-color)}.el-alert--info.is-light,.el-alert--info.is-light .el-alert__description{color:var(--el-color-info)}.el-alert--info.is-dark{background-color:var(--el-color-info);color:var(--el-color-white)}.el-alert--warning{--el-alert-bg-color:var(--el-color-warning-light-9)}.el-alert--warning.is-light{background-color:var(--el-alert-bg-color)}.el-alert--warning.is-light,.el-alert--warning.is-light .el-alert__description{color:var(--el-color-warning)}.el-alert--warning.is-dark{background-color:var(--el-color-warning);color:var(--el-color-white)}.el-alert--error{--el-alert-bg-color:var(--el-color-error-light-9)}.el-alert--error.is-light{background-color:var(--el-alert-bg-color)}.el-alert--error.is-light,.el-alert--error.is-light .el-alert__description{color:var(--el-color-error)}.el-alert--error.is-dark{background-color:var(--el-color-error);color:var(--el-color-white)}.el-alert__content{display:flex;flex-direction:column;gap:4px}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);margin-right:8px;width:var(--el-alert-icon-size)}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);margin-right:12px;width:var(--el-alert-icon-large-size)}.el-alert__title{font-size:var(--el-alert-title-font-size);line-height:24px}.el-alert__title.with-description{font-size:var(--el-alert-title-with-description-font-size)}.el-alert .el-alert__description{font-size:var(--el-alert-description-font-size);margin:0}.el-alert .el-alert__close-btn{cursor:pointer;font-size:var(--el-alert-close-font-size);opacity:1;position:absolute;right:16px;top:12px}.el-alert .el-alert__close-btn.is-customed{font-size:var(--el-alert-close-customed-font-size);font-style:normal;line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-aside{box-sizing:border-box;flex-shrink:0;overflow:auto;width:var(--el-aside-width,300px)}.el-autocomplete{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;display:inline-block;position:relative;width:var(--el-input-width)}.el-autocomplete__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-autocomplete__popper.el-popper,.el-autocomplete__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-autocomplete__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-autocomplete__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-autocomplete-suggestion{border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-autocomplete-suggestion__wrap{box-sizing:border-box;max-height:280px;padding:10px 0}.el-autocomplete-suggestion__list{margin:0;padding:0}.el-autocomplete-suggestion li{color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);line-height:34px;list-style:none;margin:0;overflow:hidden;padding:0 20px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.el-autocomplete-suggestion li.highlighted,.el-autocomplete-suggestion li:hover{background-color:var(--el-fill-color-light)}.el-autocomplete-suggestion li.divider{border-top:1px solid var(--el-color-black);margin-top:6px}.el-autocomplete-suggestion li.divider:last-child{margin-bottom:-6px}.el-autocomplete-suggestion.is-loading li{color:var(--el-text-color-secondary);font-size:20px;height:100px;line-height:100px;text-align:center}.el-autocomplete-suggestion.is-loading li:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-autocomplete-suggestion.is-loading li:hover{background-color:var(--el-bg-color-overlay)}.el-autocomplete-suggestion.is-loading .el-icon-loading{vertical-align:middle}.el-avatar{--el-avatar-text-color:var(--el-color-white);--el-avatar-bg-color:var(--el-text-color-disabled);--el-avatar-text-size:14px;--el-avatar-icon-size:18px;--el-avatar-border-radius:var(--el-border-radius-base);--el-avatar-size-large:56px;--el-avatar-size-small:24px;--el-avatar-size:40px;align-items:center;background:var(--el-avatar-bg-color);box-sizing:border-box;color:var(--el-avatar-text-color);display:inline-flex;font-size:var(--el-avatar-text-size);height:var(--el-avatar-size);justify-content:center;outline:none;overflow:hidden;text-align:center;width:var(--el-avatar-size)}.el-avatar>img{display:block;height:100%;width:100%}.el-avatar--circle{border-radius:50%}.el-avatar--square{border-radius:var(--el-avatar-border-radius)}.el-avatar--icon{font-size:var(--el-avatar-icon-size)}.el-avatar--small{--el-avatar-size:24px}.el-avatar--large{--el-avatar-size:56px}.el-backtop{--el-backtop-bg-color:var(--el-bg-color-overlay);--el-backtop-text-color:var(--el-color-primary);--el-backtop-hover-bg-color:var(--el-border-color-extra-light);align-items:center;background-color:var(--el-backtop-bg-color);border-radius:50%;box-shadow:var(--el-box-shadow-lighter);color:var(--el-backtop-text-color);cursor:pointer;display:flex;font-size:20px;height:40px;justify-content:center;position:fixed;width:40px;z-index:5}.el-backtop:hover{background-color:var(--el-backtop-hover-bg-color)}.el-backtop__icon{font-size:20px}.el-badge{--el-badge-bg-color:var(--el-color-danger);--el-badge-radius:10px;--el-badge-font-size:12px;--el-badge-padding:6px;--el-badge-size:18px;display:inline-block;position:relative;vertical-align:middle;width:-moz-fit-content;width:fit-content}.el-badge__content{align-items:center;background-color:var(--el-badge-bg-color);border:1px solid var(--el-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);display:inline-flex;font-size:var(--el-badge-font-size);height:var(--el-badge-size);justify-content:center;padding:0 var(--el-badge-padding);white-space:nowrap}.el-badge__content.is-fixed{position:absolute;right:calc(1px + var(--el-badge-size)/2);top:0;transform:translateY(-50%) translateX(100%);z-index:var(--el-index-normal)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;height:8px;padding:0;right:0;width:8px}.el-badge__content.is-hide-zero{display:none}.el-badge__content--primary{background-color:var(--el-color-primary)}.el-badge__content--success{background-color:var(--el-color-success)}.el-badge__content--warning{background-color:var(--el-color-warning)}.el-badge__content--info{background-color:var(--el-color-info)}.el-badge__content--danger{background-color:var(--el-color-danger)}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:after,.el-breadcrumb:before{content:"";display:table}.el-breadcrumb:after{clear:both}.el-breadcrumb__separator{color:var(--el-text-color-placeholder);font-weight:bold;margin:0 9px}.el-breadcrumb__separator.el-icon{font-weight:normal;margin:0 6px}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{align-items:center;display:inline-flex;float:left}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner a,.el-breadcrumb__inner.is-link{color:var(--el-text-color-primary);font-weight:bold;text-decoration:none;transition:var(--el-transition-color)}.el-breadcrumb__inner a:hover,.el-breadcrumb__inner.is-link:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover{color:var(--el-text-color-regular);cursor:text;font-weight:normal}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-button-group{display:inline-block;vertical-align:middle}.el-button-group:after,.el-button-group:before{content:"";display:table}.el-button-group:after{clear:both}.el-button-group>.el-button{float:left;position:relative}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child{border-bottom-right-radius:0;border-top-right-radius:0}.el-button-group>.el-button:last-child{border-bottom-left-radius:0;border-top-left-radius:0}.el-button-group>.el-button:first-child:last-child{border-bottom-left-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base);border-top-left-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-button-group>.el-button:first-child:last-child.is-round{border-radius:var(--el-border-radius-round)}.el-button-group>.el-button:first-child:last-child.is-circle{border-radius:50%}.el-button-group>.el-button:not(:first-child):not(:last-child){border-radius:0}.el-button-group>.el-button:not(:last-child){margin-right:-1px}.el-button-group>.el-button.is-active,.el-button-group>.el-button:active,.el-button-group>.el-button:focus,.el-button-group>.el-button:hover{z-index:1}.el-button-group>.el-dropdown>.el-button{border-bottom-left-radius:0;border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0}.el-button-group .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--primary:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--success:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--warning:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--danger:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group .el-button--info:not(:first-child):not(:last-child){border-left-color:var(--el-button-divide-border-color);border-right-color:var(--el-button-divide-border-color)}.el-button{--el-button-font-weight:var(--el-font-weight-primary);--el-button-border-color:var(--el-border-color);--el-button-bg-color:var(--el-fill-color-blank);--el-button-text-color:var(--el-text-color-regular);--el-button-disabled-text-color:var(--el-disabled-text-color);--el-button-disabled-bg-color:var(--el-fill-color-blank);--el-button-disabled-border-color:var(--el-border-color-light);--el-button-divide-border-color:rgba(255,255,255,0.5);--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-7);--el-button-active-text-color:var(--el-button-hover-text-color);--el-button-active-border-color:var(--el-color-primary);--el-button-active-bg-color:var(--el-button-hover-bg-color);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-hover-link-text-color:var(--el-text-color-secondary);--el-button-active-color:var(--el-text-color-primary);align-items:center;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);box-sizing:border-box;color:var(--el-button-text-color);cursor:pointer;display:inline-flex;font-weight:var(--el-button-font-weight);height:32px;justify-content:center;line-height:1;outline:none;text-align:center;transition:.1s;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-button:hover{background-color:var(--el-button-hover-bg-color);border-color:var(--el-button-hover-border-color);color:var(--el-button-hover-text-color);outline:none}.el-button:active{background-color:var(--el-button-active-bg-color);border-color:var(--el-button-active-border-color);color:var(--el-button-active-text-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button{border-radius:var(--el-border-radius-base);font-size:var(--el-font-size-base)}.el-button,.el-button.is-round{padding:8px 15px}.el-button::-moz-focus-inner{border:0}.el-button [class*=el-icon]+span{margin-left:6px}.el-button [class*=el-icon] svg{vertical-align:bottom}.el-button.is-plain{--el-button-hover-text-color:var(--el-color-primary);--el-button-hover-bg-color:var(--el-fill-color-blank);--el-button-hover-border-color:var(--el-color-primary)}.el-button.is-active{background-color:var(--el-button-active-bg-color);border-color:var(--el-button-active-border-color);color:var(--el-button-active-text-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{background-color:var(--el-button-disabled-bg-color);background-image:none;border-color:var(--el-button-disabled-border-color);color:var(--el-button-disabled-text-color);cursor:not-allowed}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{background-color:var(--el-mask-color-extra-light);border-radius:inherit;bottom:-1px;content:"";left:-1px;pointer-events:none;position:absolute;right:-1px;top:-1px;z-index:1}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-circle{border-radius:50%;padding:8px;width:32px}.el-button.is-text{background-color:transparent;border:0 solid transparent;color:var(--el-button-text-color)}.el-button.is-text.is-disabled{background-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button.is-text:not(.is-disabled):hover{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled):focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset 0s,outline 0s}.el-button.is-text:not(.is-disabled):active{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg{background-color:var(--el-fill-color-light)}.el-button.is-text:not(.is-disabled).is-has-bg:hover{background-color:var(--el-fill-color)}.el-button.is-text:not(.is-disabled).is-has-bg:active{background-color:var(--el-fill-color-dark)}.el-button__text--expand{letter-spacing:.3em;margin-right:-.3em}.el-button.is-link{background:transparent;border-color:transparent;color:var(--el-button-text-color);height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{background-color:transparent!important;border-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button.is-link:not(.is-disabled):active,.el-button.is-link:not(.is-disabled):hover{background-color:transparent;border-color:transparent}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color)}.el-button--text{background:transparent;border-color:transparent;color:var(--el-color-primary);padding-left:0;padding-right:0}.el-button--text.is-disabled{background-color:transparent!important;border-color:transparent!important;color:var(--el-button-disabled-text-color)}.el-button--text:not(.is-disabled):hover{background-color:transparent;border-color:transparent;color:var(--el-color-primary-light-3)}.el-button--text:not(.is-disabled):active{background-color:transparent;border-color:transparent;color:var(--el-color-primary-dark-2)}.el-button__link--expand{letter-spacing:.3em;margin-right:-.3em}.el-button--primary{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-primary);--el-button-border-color:var(--el-color-primary);--el-button-outline-color:var(--el-color-primary-light-5);--el-button-active-color:var(--el-color-primary-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-primary-light-5);--el-button-hover-bg-color:var(--el-color-primary-light-3);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-bg-color:var(--el-color-primary-dark-2);--el-button-active-border-color:var(--el-color-primary-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-primary-light-5);--el-button-disabled-border-color:var(--el-color-primary-light-5)}.el-button--primary.is-link,.el-button--primary.is-plain,.el-button--primary.is-text{--el-button-text-color:var(--el-color-primary);--el-button-bg-color:var(--el-color-primary-light-9);--el-button-border-color:var(--el-color-primary-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-primary);--el-button-hover-border-color:var(--el-color-primary);--el-button-active-text-color:var(--el-color-white)}.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:active,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-plain.is-disabled,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:hover{background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8);color:var(--el-color-primary-light-5)}.el-button--success{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-success);--el-button-border-color:var(--el-color-success);--el-button-outline-color:var(--el-color-success-light-5);--el-button-active-color:var(--el-color-success-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-success-light-5);--el-button-hover-bg-color:var(--el-color-success-light-3);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-bg-color:var(--el-color-success-dark-2);--el-button-active-border-color:var(--el-color-success-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-success-light-5);--el-button-disabled-border-color:var(--el-color-success-light-5)}.el-button--success.is-link,.el-button--success.is-plain,.el-button--success.is-text{--el-button-text-color:var(--el-color-success);--el-button-bg-color:var(--el-color-success-light-9);--el-button-border-color:var(--el-color-success-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-success);--el-button-hover-border-color:var(--el-color-success);--el-button-active-text-color:var(--el-color-white)}.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:active,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-plain.is-disabled,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:active,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:hover{background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8);color:var(--el-color-success-light-5)}.el-button--warning{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-warning);--el-button-border-color:var(--el-color-warning);--el-button-outline-color:var(--el-color-warning-light-5);--el-button-active-color:var(--el-color-warning-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-warning-light-5);--el-button-hover-bg-color:var(--el-color-warning-light-3);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-bg-color:var(--el-color-warning-dark-2);--el-button-active-border-color:var(--el-color-warning-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-warning-light-5);--el-button-disabled-border-color:var(--el-color-warning-light-5)}.el-button--warning.is-link,.el-button--warning.is-plain,.el-button--warning.is-text{--el-button-text-color:var(--el-color-warning);--el-button-bg-color:var(--el-color-warning-light-9);--el-button-border-color:var(--el-color-warning-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-warning);--el-button-hover-border-color:var(--el-color-warning);--el-button-active-text-color:var(--el-color-white)}.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:active,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-plain.is-disabled,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:hover{background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8);color:var(--el-color-warning-light-5)}.el-button--danger{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-danger);--el-button-border-color:var(--el-color-danger);--el-button-outline-color:var(--el-color-danger-light-5);--el-button-active-color:var(--el-color-danger-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-danger-light-5);--el-button-hover-bg-color:var(--el-color-danger-light-3);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-bg-color:var(--el-color-danger-dark-2);--el-button-active-border-color:var(--el-color-danger-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-danger-light-5);--el-button-disabled-border-color:var(--el-color-danger-light-5)}.el-button--danger.is-link,.el-button--danger.is-plain,.el-button--danger.is-text{--el-button-text-color:var(--el-color-danger);--el-button-bg-color:var(--el-color-danger-light-9);--el-button-border-color:var(--el-color-danger-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-danger);--el-button-hover-border-color:var(--el-color-danger);--el-button-active-text-color:var(--el-color-white)}.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:active,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-plain.is-disabled,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:hover{background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8);color:var(--el-color-danger-light-5)}.el-button--info{--el-button-text-color:var(--el-color-white);--el-button-bg-color:var(--el-color-info);--el-button-border-color:var(--el-color-info);--el-button-outline-color:var(--el-color-info-light-5);--el-button-active-color:var(--el-color-info-dark-2);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-link-text-color:var(--el-color-info-light-5);--el-button-hover-bg-color:var(--el-color-info-light-3);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-bg-color:var(--el-color-info-dark-2);--el-button-active-border-color:var(--el-color-info-dark-2);--el-button-disabled-text-color:var(--el-color-white);--el-button-disabled-bg-color:var(--el-color-info-light-5);--el-button-disabled-border-color:var(--el-color-info-light-5)}.el-button--info.is-link,.el-button--info.is-plain,.el-button--info.is-text{--el-button-text-color:var(--el-color-info);--el-button-bg-color:var(--el-color-info-light-9);--el-button-border-color:var(--el-color-info-light-5);--el-button-hover-text-color:var(--el-color-white);--el-button-hover-bg-color:var(--el-color-info);--el-button-hover-border-color:var(--el-color-info);--el-button-active-text-color:var(--el-color-white)}.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:active,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-plain.is-disabled,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:active,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:hover{background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8);color:var(--el-color-info-light-5)}.el-button--large{--el-button-size:40px;height:var(--el-button-size)}.el-button--large [class*=el-icon]+span{margin-left:8px}.el-button--large{border-radius:var(--el-border-radius-base);font-size:var(--el-font-size-base);padding:12px 19px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{padding:12px;width:var(--el-button-size)}.el-button--small{--el-button-size:24px;height:var(--el-button-size)}.el-button--small [class*=el-icon]+span{margin-left:4px}.el-button--small{border-radius:calc(var(--el-border-radius-base) - 1px);font-size:12px;padding:5px 11px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{padding:5px;width:var(--el-button-size)}.el-calendar{--el-calendar-border:var(--el-table-border,1px solid var(--el-border-color-lighter));--el-calendar-header-border-bottom:var(--el-calendar-border);--el-calendar-selected-bg-color:var(--el-color-primary-light-9);--el-calendar-cell-width:85px;background-color:var(--el-fill-color-blank)}.el-calendar__header{border-bottom:var(--el-calendar-header-border-bottom);display:flex;justify-content:space-between;padding:12px 20px}.el-calendar__title{align-self:center;color:var(--el-text-color)}.el-calendar__body{padding:12px 20px 35px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{color:var(--el-text-color-regular);font-weight:normal;padding:12px 0}.el-calendar-table:not(.is-range) td.next,.el-calendar-table:not(.is-range) td.prev{color:var(--el-text-color-placeholder)}.el-calendar-table td{border-bottom:var(--el-calendar-border);border-right:var(--el-calendar-border);transition:background-color var(--el-transition-duration-fast) ease;vertical-align:top}.el-calendar-table td.is-selected{background-color:var(--el-calendar-selected-bg-color)}.el-calendar-table td.is-today{color:var(--el-color-primary)}.el-calendar-table tr:first-child td{border-top:var(--el-calendar-border)}.el-calendar-table tr td:first-child{border-left:var(--el-calendar-border)}.el-calendar-table tr.el-calendar-table__row--hide-border td{border-top:none}.el-calendar-table .el-calendar-day{box-sizing:border-box;height:var(--el-calendar-cell-width);padding:8px}.el-calendar-table .el-calendar-day:hover{background-color:var(--el-calendar-selected-bg-color);cursor:pointer}.el-card{--el-card-border-color:var(--el-border-color-light);--el-card-border-radius:4px;--el-card-padding:20px;--el-card-bg-color:var(--el-fill-color-blank);background-color:var(--el-card-bg-color);border:1px solid var(--el-card-border-color);border-radius:var(--el-card-border-radius);color:var(--el-text-color-primary);overflow:hidden;transition:var(--el-transition-duration)}.el-card.is-always-shadow,.el-card.is-hover-shadow:focus,.el-card.is-hover-shadow:hover{box-shadow:var(--el-box-shadow-light)}.el-card__header{border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-card__body{padding:var(--el-card-padding)}.el-card__footer{border-top:1px solid var(--el-card-border-color);box-sizing:border-box;padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding)}.el-carousel__item{display:inline-block;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%}.el-carousel__item,.el-carousel__item.is-active{z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item--card,.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:var(--el-index-normal)}.el-carousel__item--card.is-in-stage.is-hover .el-carousel__mask,.el-carousel__item--card.is-in-stage:hover .el-carousel__mask{opacity:.12}.el-carousel__item--card.is-active{z-index:calc(var(--el-index-normal) + 1)}.el-carousel__item--card-vertical{height:50%;width:100%}.el-carousel__mask{background-color:var(--el-color-white);height:100%;left:0;opacity:.24;position:absolute;top:0;transition:var(--el-transition-duration-fast);width:100%}.el-carousel{--el-carousel-arrow-font-size:12px;--el-carousel-arrow-size:36px;--el-carousel-arrow-background:rgba(31,45,61,0.11);--el-carousel-arrow-hover-background:rgba(31,45,61,0.23);--el-carousel-indicator-width:30px;--el-carousel-indicator-height:2px;--el-carousel-indicator-padding-horizontal:4px;--el-carousel-indicator-padding-vertical:12px;--el-carousel-indicator-out-color:var(--el-border-color-hover);position:relative}.el-carousel--horizontal,.el-carousel--vertical{overflow:hidden}.el-carousel__container{height:300px;position:relative}.el-carousel__arrow{align-items:center;background-color:var(--el-carousel-arrow-background);border:none;border-radius:50%;color:#ffffff;cursor:pointer;display:inline-flex;font-size:var(--el-carousel-arrow-font-size);height:var(--el-carousel-arrow-size);justify-content:center;margin:0;outline:none;padding:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);transition:var(--el-transition-duration);width:var(--el-carousel-arrow-size);z-index:10}.el-carousel__arrow--left{left:16px}.el-carousel__arrow--right{right:16px}.el-carousel__arrow:hover{background-color:var(--el-carousel-arrow-hover-background)}.el-carousel__arrow i{cursor:pointer}.el-carousel__indicators{list-style:none;margin:0;padding:0;position:absolute;z-index:calc(var(--el-index-normal) + 1)}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translateX(-50%)}.el-carousel__indicators--vertical{right:0;top:50%;transform:translateY(-50%)}.el-carousel__indicators--outside{bottom:calc(var(--el-carousel-indicator-height) + var(--el-carousel-indicator-padding-vertical)*2);position:static;text-align:center;transform:none}.el-carousel__indicators--outside .el-carousel__indicator:hover button{opacity:.64}.el-carousel__indicators--outside button{background-color:var(--el-carousel-indicator-out-color);opacity:.24}.el-carousel__indicators--right{right:0}.el-carousel__indicators--labels{left:0;right:0;text-align:center;transform:none}.el-carousel__indicators--labels .el-carousel__button{color:#000000;font-size:12px;height:auto;padding:2px 18px;width:auto}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{background-color:transparent;cursor:pointer}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{display:inline-block;padding:var(--el-carousel-indicator-padding-vertical) var(--el-carousel-indicator-padding-horizontal)}.el-carousel__indicator--vertical{padding:var(--el-carousel-indicator-padding-horizontal) var(--el-carousel-indicator-padding-vertical)}.el-carousel__indicator--vertical .el-carousel__button{height:calc(var(--el-carousel-indicator-width)/2);width:var(--el-carousel-indicator-height)}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{background-color:#ffffff;border:none;cursor:pointer;display:block;height:var(--el-carousel-indicator-height);margin:0;opacity:.48;outline:none;padding:0;transition:var(--el-transition-duration);width:var(--el-carousel-indicator-width)}.carousel-arrow-left-enter-from,.carousel-arrow-left-leave-active{opacity:0;transform:translateY(-50%) translateX(-10px)}.carousel-arrow-right-enter-from,.carousel-arrow-right-leave-active{opacity:0;transform:translateY(-50%) translateX(10px)}.el-transitioning{filter:url(#elCarouselHorizontal)}.el-transitioning-vertical{filter:url(#elCarouselVertical)}.el-cascader-panel{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);border-radius:var(--el-cascader-menu-radius);display:flex;font-size:var(--el-cascader-menu-font-size)}.el-cascader-panel.is-bordered{border:var(--el-cascader-menu-border);border-radius:var(--el-cascader-menu-radius)}.el-cascader-menu{border-right:var(--el-cascader-menu-border);box-sizing:border-box;color:var(--el-cascader-menu-text-color);min-width:180px}.el-cascader-menu:last-child{border-right:none}.el-cascader-menu:last-child .el-cascader-node{padding-right:20px}.el-cascader-menu__wrap.el-scrollbar__wrap{height:204px}.el-cascader-menu__list{box-sizing:border-box;list-style:none;margin:0;min-height:100%;padding:6px 0;position:relative}.el-cascader-menu__hover-zone{height:100%;left:0;pointer-events:none;position:absolute;top:0;width:100%}.el-cascader-menu__empty-text{align-items:center;color:var(--el-cascader-color-empty);display:flex;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-cascader-menu__empty-text .is-loading{margin-right:2px}.el-cascader-node{align-items:center;display:flex;height:34px;line-height:34px;outline:none;padding:0 30px 0 20px;position:relative}.el-cascader-node.is-selectable.in-active-path{color:var(--el-cascader-menu-text-color)}.el-cascader-node.in-active-path,.el-cascader-node.is-active,.el-cascader-node.is-selectable.in-checked-path{color:var(--el-cascader-menu-selected-text-color);font-weight:bold}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):focus,.el-cascader-node:not(.is-disabled):hover{background:var(--el-cascader-node-background-hover)}.el-cascader-node.is-disabled{color:var(--el-cascader-node-color-disabled);cursor:not-allowed}.el-cascader-node__prefix{left:10px;position:absolute}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{flex:1;overflow:hidden;padding:0 8px;text-align:left;text-overflow:ellipsis;white-space:nowrap}.el-cascader-node>.el-checkbox,.el-cascader-node>.el-radio{margin-right:0}.el-cascader-node>.el-radio .el-radio__label{padding-left:0}.el-cascader{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);display:inline-block;font-size:var(--el-font-size-base);line-height:32px;outline:none;position:relative;vertical-align:middle}.el-cascader:not(.is-disabled):hover .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset;cursor:pointer}.el-cascader .el-input{cursor:pointer;display:flex}.el-cascader .el-input .el-input__inner{cursor:pointer;text-overflow:ellipsis}.el-cascader .el-input .el-input__suffix-inner .el-icon{height:calc(100% - 2px)}.el-cascader .el-input .el-input__suffix-inner .el-icon svg{vertical-align:middle}.el-cascader .el-input .icon-arrow-down{font-size:14px;transition:transform var(--el-transition-duration)}.el-cascader .el-input .icon-arrow-down.is-reverse{transform:rotate(180deg)}.el-cascader .el-input .icon-circle-close:hover{color:var(--el-input-clear-hover-color,var(--el-text-color-secondary))}.el-cascader .el-input.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-cascader--large{font-size:14px;line-height:40px}.el-cascader--large .el-cascader__tags{gap:6px;padding:8px}.el-cascader--large .el-cascader__search-input{height:24px;margin-left:7px}.el-cascader--small{font-size:12px;line-height:24px}.el-cascader--small .el-cascader__tags{gap:4px;padding:2px}.el-cascader--small .el-cascader__search-input{height:20px;margin-left:5px}.el-cascader.is-disabled .el-cascader__label{color:var(--el-disabled-text-color);z-index:calc(var(--el-index-normal) + 1)}.el-cascader__dropdown{--el-cascader-menu-text-color:var(--el-text-color-regular);--el-cascader-menu-selected-text-color:var(--el-color-primary);--el-cascader-menu-fill:var(--el-bg-color-overlay);--el-cascader-menu-font-size:var(--el-font-size-base);--el-cascader-menu-radius:var(--el-border-radius-base);--el-cascader-menu-border:solid 1px var(--el-border-color-light);--el-cascader-menu-shadow:var(--el-box-shadow-light);--el-cascader-node-background-hover:var(--el-fill-color-light);--el-cascader-node-color-disabled:var(--el-text-color-placeholder);--el-cascader-color-empty:var(--el-text-color-placeholder);--el-cascader-tag-background:var(--el-fill-color);border-radius:var(--el-cascader-menu-radius);font-size:var(--el-cascader-menu-font-size)}.el-cascader__dropdown.el-popper{background:var(--el-cascader-menu-fill)}.el-cascader__dropdown.el-popper,.el-cascader__dropdown.el-popper .el-popper__arrow:before{border:var(--el-cascader-menu-border)}.el-cascader__dropdown.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-cascader__dropdown.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-cascader__dropdown.el-popper{box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__tags{box-sizing:border-box;display:flex;flex-wrap:wrap;gap:6px;left:0;line-height:normal;padding:4px;position:absolute;right:30px;text-align:left;top:50%;transform:translateY(-50%)}.el-cascader__tags .el-tag{align-items:center;background:var(--el-cascader-tag-background);display:inline-flex;max-width:100%;text-overflow:ellipsis}.el-cascader__tags .el-tag.el-tag--dark,.el-cascader__tags .el-tag.el-tag--plain{background-color:var(--el-tag-bg-color)}.el-cascader__tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__tags .el-tag:not(.is-hit).el-tag--dark,.el-cascader__tags .el-tag:not(.is-hit).el-tag--plain{border-color:var(--el-tag-border-color)}.el-cascader__tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__tags .el-tag+input{margin-left:0}.el-cascader__tags.is-validate{right:55px}.el-cascader__collapse-tags{white-space:normal;z-index:var(--el-index-normal)}.el-cascader__collapse-tags .el-tag{align-items:center;background:var(--el-fill-color);display:inline-flex;max-width:100%;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag.el-tag--dark,.el-cascader__collapse-tags .el-tag.el-tag--plain{background-color:var(--el-tag-bg-color)}.el-cascader__collapse-tags .el-tag:not(.is-hit){border-color:transparent}.el-cascader__collapse-tags .el-tag:not(.is-hit).el-tag--dark,.el-cascader__collapse-tags .el-tag:not(.is-hit).el-tag--plain{border-color:var(--el-tag-border-color)}.el-cascader__collapse-tags .el-tag>span{flex:1;overflow:hidden;text-overflow:ellipsis}.el-cascader__collapse-tags .el-tag .el-icon-close{background-color:var(--el-text-color-placeholder);color:var(--el-color-white);flex:none}.el-cascader__collapse-tags .el-tag .el-icon-close:hover{background-color:var(--el-text-color-secondary)}.el-cascader__collapse-tags .el-tag+input{margin-left:0}.el-cascader__suggestion-panel{border-radius:var(--el-cascader-menu-radius)}.el-cascader__suggestion-list{color:var(--el-cascader-menu-text-color);font-size:var(--el-font-size-base);margin:0;max-height:204px;padding:6px 0;text-align:center}.el-cascader__suggestion-item{align-items:center;cursor:pointer;display:flex;height:34px;justify-content:space-between;outline:none;padding:0 15px;text-align:left}.el-cascader__suggestion-item:focus,.el-cascader__suggestion-item:hover{background:var(--el-cascader-node-background-hover)}.el-cascader__suggestion-item.is-checked{color:var(--el-cascader-menu-selected-text-color);font-weight:bold}.el-cascader__suggestion-item>span{margin-right:10px}.el-cascader__empty-text{color:var(--el-cascader-color-empty);margin:10px 0}.el-cascader__search-input{background:transparent;border:none;box-sizing:border-box;color:var(--el-cascader-menu-text-color);flex:1;height:24px;margin-left:7px;min-width:60px;outline:none;padding:0}.el-cascader__search-input::-moz-placeholder{color:transparent}.el-cascader__search-input::placeholder{color:transparent}.el-check-tag{background-color:var(--el-color-info-light-9);border-radius:var(--el-border-radius-base);color:var(--el-color-info);cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:bold;line-height:var(--el-font-size-base);padding:7px 15px;transition:var(--el-transition-all)}.el-check-tag:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.el-check-tag--primary.is-checked{background-color:var(--el-color-primary-light-8);color:var(--el-color-primary)}.el-check-tag.el-check-tag--primary.is-checked:hover{background-color:var(--el-color-primary-light-7)}.el-check-tag.el-check-tag--primary.is-checked.is-disabled{background-color:var(--el-color-primary-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--primary.is-checked.is-disabled:hover{background-color:var(--el-color-primary-light-8)}.el-check-tag.el-check-tag--primary.is-disabled{background-color:var(--el-color-info-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--primary.is-disabled:hover{background-color:var(--el-color-info-light-9)}.el-check-tag.el-check-tag--success.is-checked{background-color:var(--el-color-success-light-8);color:var(--el-color-success)}.el-check-tag.el-check-tag--success.is-checked:hover{background-color:var(--el-color-success-light-7)}.el-check-tag.el-check-tag--success.is-checked.is-disabled{background-color:var(--el-color-success-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--success.is-checked.is-disabled:hover{background-color:var(--el-color-success-light-8)}.el-check-tag.el-check-tag--success.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--success.is-disabled,.el-check-tag.el-check-tag--success.is-disabled:hover{background-color:var(--el-color-success-light-9)}.el-check-tag.el-check-tag--warning.is-checked{background-color:var(--el-color-warning-light-8);color:var(--el-color-warning)}.el-check-tag.el-check-tag--warning.is-checked:hover{background-color:var(--el-color-warning-light-7)}.el-check-tag.el-check-tag--warning.is-checked.is-disabled{background-color:var(--el-color-warning-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--warning.is-checked.is-disabled:hover{background-color:var(--el-color-warning-light-8)}.el-check-tag.el-check-tag--warning.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--warning.is-disabled,.el-check-tag.el-check-tag--warning.is-disabled:hover{background-color:var(--el-color-warning-light-9)}.el-check-tag.el-check-tag--danger.is-checked{background-color:var(--el-color-danger-light-8);color:var(--el-color-danger)}.el-check-tag.el-check-tag--danger.is-checked:hover{background-color:var(--el-color-danger-light-7)}.el-check-tag.el-check-tag--danger.is-checked.is-disabled{background-color:var(--el-color-danger-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--danger.is-checked.is-disabled:hover{background-color:var(--el-color-danger-light-8)}.el-check-tag.el-check-tag--danger.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--danger.is-disabled,.el-check-tag.el-check-tag--danger.is-disabled:hover{background-color:var(--el-color-danger-light-9)}.el-check-tag.el-check-tag--error.is-checked{background-color:var(--el-color-error-light-8);color:var(--el-color-error)}.el-check-tag.el-check-tag--error.is-checked:hover{background-color:var(--el-color-error-light-7)}.el-check-tag.el-check-tag--error.is-checked.is-disabled{background-color:var(--el-color-error-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--error.is-checked.is-disabled:hover{background-color:var(--el-color-error-light-8)}.el-check-tag.el-check-tag--error.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--error.is-disabled,.el-check-tag.el-check-tag--error.is-disabled:hover{background-color:var(--el-color-error-light-9)}.el-check-tag.el-check-tag--info.is-checked{background-color:var(--el-color-info-light-8);color:var(--el-color-info)}.el-check-tag.el-check-tag--info.is-checked:hover{background-color:var(--el-color-info-light-7)}.el-check-tag.el-check-tag--info.is-checked.is-disabled{background-color:var(--el-color-info-light-8);color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--info.is-checked.is-disabled:hover{background-color:var(--el-color-info-light-8)}.el-check-tag.el-check-tag--info.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-check-tag.el-check-tag--info.is-disabled,.el-check-tag.el-check-tag--info.is-disabled:hover{background-color:var(--el-color-info-light-9)}.el-checkbox-button{--el-checkbox-button-checked-bg-color:var(--el-color-primary);--el-checkbox-button-checked-text-color:var(--el-color-white);--el-checkbox-button-checked-border-color:var(--el-color-primary);display:inline-block;position:relative}.el-checkbox-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left-color:transparent;border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;display:inline-block;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);line-height:1;margin:0;outline:none;padding:8px 15px;position:relative;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-checkbox-button__inner.is-round{padding:8px 15px}.el-checkbox-button__inner:hover{color:var(--el-color-primary)}.el-checkbox-button__inner [class*=el-icon-]{line-height:.9}.el-checkbox-button__inner [class*=el-icon-]+span{margin-left:5px}.el-checkbox-button__original{margin:0;opacity:0;outline:none;position:absolute;z-index:-1}.el-checkbox-button.is-checked .el-checkbox-button__inner{background-color:var(--el-checkbox-button-checked-bg-color);border-color:var(--el-checkbox-button-checked-border-color);box-shadow:-1px 0 0 0 var(--el-color-primary-light-7);color:var(--el-checkbox-button-checked-text-color)}.el-checkbox-button.is-checked:first-child .el-checkbox-button__inner{border-left-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button.is-disabled .el-checkbox-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox-button.is-disabled:first-child .el-checkbox-button__inner{border-left-color:var(--el-button-disabled-border-color,var(--el-border-color-light))}.el-checkbox-button:first-child .el-checkbox-button__inner{border-bottom-left-radius:var(--el-border-radius-base);border-left:var(--el-border);border-top-left-radius:var(--el-border-radius-base);box-shadow:none!important}.el-checkbox-button.is-focus .el-checkbox-button__inner{border-color:var(--el-checkbox-button-checked-border-color)}.el-checkbox-button:last-child .el-checkbox-button__inner{border-bottom-right-radius:var(--el-border-radius-base);border-top-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-checkbox-button--large .el-checkbox-button__inner.is-round{padding:12px 19px}.el-checkbox-button--small .el-checkbox-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-checkbox-button--small .el-checkbox-button__inner.is-round{padding:5px 11px}.el-checkbox-group{font-size:0;line-height:0}.el-checkbox{--el-checkbox-font-size:14px;--el-checkbox-font-weight:var(--el-font-weight-primary);--el-checkbox-text-color:var(--el-text-color-regular);--el-checkbox-input-height:14px;--el-checkbox-input-width:14px;--el-checkbox-border-radius:var(--el-border-radius-small);--el-checkbox-bg-color:var(--el-fill-color-blank);--el-checkbox-input-border:var(--el-border);--el-checkbox-disabled-border-color:var(--el-border-color);--el-checkbox-disabled-input-fill:var(--el-fill-color-light);--el-checkbox-disabled-icon-color:var(--el-text-color-placeholder);--el-checkbox-disabled-checked-input-fill:var(--el-border-color-extra-light);--el-checkbox-disabled-checked-input-border-color:var(--el-border-color);--el-checkbox-disabled-checked-icon-color:var(--el-text-color-placeholder);--el-checkbox-checked-text-color:var(--el-color-primary);--el-checkbox-checked-input-border-color:var(--el-color-primary);--el-checkbox-checked-bg-color:var(--el-color-primary);--el-checkbox-checked-icon-color:var(--el-color-white);--el-checkbox-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-checkbox-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-checkbox-font-weight);height:var(--el-checkbox-height,32px);margin-right:30px;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-checkbox.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-checkbox.is-bordered.is-disabled{border-color:var(--el-border-color-lighter)}.el-checkbox.is-bordered.el-checkbox--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__label{font-size:var(--el-font-size-base)}.el-checkbox.is-bordered.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.is-bordered.el-checkbox--small{border-radius:calc(var(--el-border-radius-base) - 1px);padding:0 11px 0 7px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox input:focus-visible+.el-checkbox__inner{border-radius:var(--el-checkbox-border-radius);outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px}.el-checkbox__input{cursor:pointer;display:inline-flex;outline:none;position:relative;white-space:nowrap}.el-checkbox__input.is-disabled .el-checkbox__inner{background-color:var(--el-checkbox-disabled-input-fill);border-color:var(--el-checkbox-disabled-border-color);cursor:not-allowed}.el-checkbox__input.is-disabled .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-icon-color);cursor:not-allowed}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-disabled-checked-input-fill);border-color:var(--el-checkbox-disabled-checked-input-border-color)}.el-checkbox__input.is-disabled.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-disabled-checked-icon-color);border-color:var(--el-checkbox-disabled-checked-icon-color)}.el-checkbox__input.is-disabled+span.el-checkbox__label{color:var(--el-disabled-text-color);cursor:not-allowed}.el-checkbox__input.is-checked .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-checked .el-checkbox__inner:after{border-color:var(--el-checkbox-checked-icon-color);transform:rotate(45deg) scaleY(1)}.el-checkbox__input.is-checked+.el-checkbox__label{color:var(--el-checkbox-checked-text-color)}.el-checkbox__input.is-focus:not(.is-checked) .el-checkbox__original:not(:focus-visible){border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__input.is-indeterminate .el-checkbox__inner{background-color:var(--el-checkbox-checked-bg-color);border-color:var(--el-checkbox-checked-input-border-color)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:before{background-color:var(--el-checkbox-checked-icon-color);content:"";display:block;height:2px;left:0;position:absolute;right:0;top:5px;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{background-color:var(--el-checkbox-bg-color);border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;display:inline-block;height:var(--el-checkbox-input-height);position:relative;transition:border-color .25s cubic-bezier(.71,-.46,.29,1.46),background-color .25s cubic-bezier(.71,-.46,.29,1.46),outline .25s cubic-bezier(.71,-.46,.29,1.46);width:var(--el-checkbox-input-width);z-index:var(--el-index-normal)}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{border:1px solid transparent;border-left:0;border-top:0;box-sizing:content-box;content:"";height:7px;left:4px;position:absolute;top:1px;transform:rotate(45deg) scaleY(0);transform-origin:center;transition:transform .15s ease-in .05s;width:3px}.el-checkbox__original{height:0;margin:0;opacity:0;outline:none;position:absolute;width:0;z-index:-1}.el-checkbox__label{display:inline-block;font-size:var(--el-checkbox-font-size);line-height:1;padding-left:8px}.el-checkbox.el-checkbox--large{height:40px}.el-checkbox.el-checkbox--large .el-checkbox__label{font-size:14px}.el-checkbox.el-checkbox--large .el-checkbox__inner{height:14px;width:14px}.el-checkbox.el-checkbox--small{height:24px}.el-checkbox.el-checkbox--small .el-checkbox__label{font-size:12px}.el-checkbox.el-checkbox--small .el-checkbox__inner{height:12px;width:12px}.el-checkbox.el-checkbox--small .el-checkbox__input.is-indeterminate .el-checkbox__inner:before{top:4px}.el-checkbox.el-checkbox--small .el-checkbox__inner:after{height:6px;width:2px}.el-checkbox:last-of-type{margin-right:0}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{display:block;min-height:1px}.el-col-0{flex:0 0 0%;max-width:0}.el-col-0,.el-col-0.is-guttered{display:none}.el-col-offset-0{margin-left:0}.el-col-pull-0{position:relative;right:0}.el-col-push-0{left:0;position:relative}.el-col-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-1,.el-col-1.is-guttered{display:block}.el-col-offset-1{margin-left:4.1666666667%}.el-col-pull-1{position:relative;right:4.1666666667%}.el-col-push-1{left:4.1666666667%;position:relative}.el-col-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-2,.el-col-2.is-guttered{display:block}.el-col-offset-2{margin-left:8.3333333333%}.el-col-pull-2{position:relative;right:8.3333333333%}.el-col-push-2{left:8.3333333333%;position:relative}.el-col-3{flex:0 0 12.5%;max-width:12.5%}.el-col-3,.el-col-3.is-guttered{display:block}.el-col-offset-3{margin-left:12.5%}.el-col-pull-3{position:relative;right:12.5%}.el-col-push-3{left:12.5%;position:relative}.el-col-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-4,.el-col-4.is-guttered{display:block}.el-col-offset-4{margin-left:16.6666666667%}.el-col-pull-4{position:relative;right:16.6666666667%}.el-col-push-4{left:16.6666666667%;position:relative}.el-col-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-5,.el-col-5.is-guttered{display:block}.el-col-offset-5{margin-left:20.8333333333%}.el-col-pull-5{position:relative;right:20.8333333333%}.el-col-push-5{left:20.8333333333%;position:relative}.el-col-6{flex:0 0 25%;max-width:25%}.el-col-6,.el-col-6.is-guttered{display:block}.el-col-offset-6{margin-left:25%}.el-col-pull-6{position:relative;right:25%}.el-col-push-6{left:25%;position:relative}.el-col-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-7,.el-col-7.is-guttered{display:block}.el-col-offset-7{margin-left:29.1666666667%}.el-col-pull-7{position:relative;right:29.1666666667%}.el-col-push-7{left:29.1666666667%;position:relative}.el-col-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-8,.el-col-8.is-guttered{display:block}.el-col-offset-8{margin-left:33.3333333333%}.el-col-pull-8{position:relative;right:33.3333333333%}.el-col-push-8{left:33.3333333333%;position:relative}.el-col-9{flex:0 0 37.5%;max-width:37.5%}.el-col-9,.el-col-9.is-guttered{display:block}.el-col-offset-9{margin-left:37.5%}.el-col-pull-9{position:relative;right:37.5%}.el-col-push-9{left:37.5%;position:relative}.el-col-10{flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-10,.el-col-10.is-guttered{display:block}.el-col-offset-10{margin-left:41.6666666667%}.el-col-pull-10{position:relative;right:41.6666666667%}.el-col-push-10{left:41.6666666667%;position:relative}.el-col-11{flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-11,.el-col-11.is-guttered{display:block}.el-col-offset-11{margin-left:45.8333333333%}.el-col-pull-11{position:relative;right:45.8333333333%}.el-col-push-11{left:45.8333333333%;position:relative}.el-col-12{flex:0 0 50%;max-width:50%}.el-col-12,.el-col-12.is-guttered{display:block}.el-col-offset-12{margin-left:50%}.el-col-pull-12{position:relative;right:50%}.el-col-push-12{left:50%;position:relative}.el-col-13{flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-13,.el-col-13.is-guttered{display:block}.el-col-offset-13{margin-left:54.1666666667%}.el-col-pull-13{position:relative;right:54.1666666667%}.el-col-push-13{left:54.1666666667%;position:relative}.el-col-14{flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-14,.el-col-14.is-guttered{display:block}.el-col-offset-14{margin-left:58.3333333333%}.el-col-pull-14{position:relative;right:58.3333333333%}.el-col-push-14{left:58.3333333333%;position:relative}.el-col-15{flex:0 0 62.5%;max-width:62.5%}.el-col-15,.el-col-15.is-guttered{display:block}.el-col-offset-15{margin-left:62.5%}.el-col-pull-15{position:relative;right:62.5%}.el-col-push-15{left:62.5%;position:relative}.el-col-16{flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-16,.el-col-16.is-guttered{display:block}.el-col-offset-16{margin-left:66.6666666667%}.el-col-pull-16{position:relative;right:66.6666666667%}.el-col-push-16{left:66.6666666667%;position:relative}.el-col-17{flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-17,.el-col-17.is-guttered{display:block}.el-col-offset-17{margin-left:70.8333333333%}.el-col-pull-17{position:relative;right:70.8333333333%}.el-col-push-17{left:70.8333333333%;position:relative}.el-col-18{flex:0 0 75%;max-width:75%}.el-col-18,.el-col-18.is-guttered{display:block}.el-col-offset-18{margin-left:75%}.el-col-pull-18{position:relative;right:75%}.el-col-push-18{left:75%;position:relative}.el-col-19{flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-19,.el-col-19.is-guttered{display:block}.el-col-offset-19{margin-left:79.1666666667%}.el-col-pull-19{position:relative;right:79.1666666667%}.el-col-push-19{left:79.1666666667%;position:relative}.el-col-20{flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-20,.el-col-20.is-guttered{display:block}.el-col-offset-20{margin-left:83.3333333333%}.el-col-pull-20{position:relative;right:83.3333333333%}.el-col-push-20{left:83.3333333333%;position:relative}.el-col-21{flex:0 0 87.5%;max-width:87.5%}.el-col-21,.el-col-21.is-guttered{display:block}.el-col-offset-21{margin-left:87.5%}.el-col-pull-21{position:relative;right:87.5%}.el-col-push-21{left:87.5%;position:relative}.el-col-22{flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-22,.el-col-22.is-guttered{display:block}.el-col-offset-22{margin-left:91.6666666667%}.el-col-pull-22{position:relative;right:91.6666666667%}.el-col-push-22{left:91.6666666667%;position:relative}.el-col-23{flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-23,.el-col-23.is-guttered{display:block}.el-col-offset-23{margin-left:95.8333333333%}.el-col-pull-23{position:relative;right:95.8333333333%}.el-col-push-23{left:95.8333333333%;position:relative}.el-col-24{flex:0 0 100%;max-width:100%}.el-col-24,.el-col-24.is-guttered{display:block}.el-col-offset-24{margin-left:100%}.el-col-pull-24{position:relative;right:100%}.el-col-push-24{left:100%;position:relative}@media only screen and (max-width:767px){.el-col-xs-0{display:none;flex:0 0 0%;max-width:0}.el-col-xs-0.is-guttered{display:none}.el-col-xs-offset-0{margin-left:0}.el-col-xs-pull-0{position:relative;right:0}.el-col-xs-push-0{left:0;position:relative}.el-col-xs-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-xs-1,.el-col-xs-1.is-guttered{display:block}.el-col-xs-offset-1{margin-left:4.1666666667%}.el-col-xs-pull-1{position:relative;right:4.1666666667%}.el-col-xs-push-1{left:4.1666666667%;position:relative}.el-col-xs-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-xs-2,.el-col-xs-2.is-guttered{display:block}.el-col-xs-offset-2{margin-left:8.3333333333%}.el-col-xs-pull-2{position:relative;right:8.3333333333%}.el-col-xs-push-2{left:8.3333333333%;position:relative}.el-col-xs-3{flex:0 0 12.5%;max-width:12.5%}.el-col-xs-3,.el-col-xs-3.is-guttered{display:block}.el-col-xs-offset-3{margin-left:12.5%}.el-col-xs-pull-3{position:relative;right:12.5%}.el-col-xs-push-3{left:12.5%;position:relative}.el-col-xs-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-xs-4,.el-col-xs-4.is-guttered{display:block}.el-col-xs-offset-4{margin-left:16.6666666667%}.el-col-xs-pull-4{position:relative;right:16.6666666667%}.el-col-xs-push-4{left:16.6666666667%;position:relative}.el-col-xs-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-xs-5,.el-col-xs-5.is-guttered{display:block}.el-col-xs-offset-5{margin-left:20.8333333333%}.el-col-xs-pull-5{position:relative;right:20.8333333333%}.el-col-xs-push-5{left:20.8333333333%;position:relative}.el-col-xs-6{flex:0 0 25%;max-width:25%}.el-col-xs-6,.el-col-xs-6.is-guttered{display:block}.el-col-xs-offset-6{margin-left:25%}.el-col-xs-pull-6{position:relative;right:25%}.el-col-xs-push-6{left:25%;position:relative}.el-col-xs-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-xs-7,.el-col-xs-7.is-guttered{display:block}.el-col-xs-offset-7{margin-left:29.1666666667%}.el-col-xs-pull-7{position:relative;right:29.1666666667%}.el-col-xs-push-7{left:29.1666666667%;position:relative}.el-col-xs-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-xs-8,.el-col-xs-8.is-guttered{display:block}.el-col-xs-offset-8{margin-left:33.3333333333%}.el-col-xs-pull-8{position:relative;right:33.3333333333%}.el-col-xs-push-8{left:33.3333333333%;position:relative}.el-col-xs-9{flex:0 0 37.5%;max-width:37.5%}.el-col-xs-9,.el-col-xs-9.is-guttered{display:block}.el-col-xs-offset-9{margin-left:37.5%}.el-col-xs-pull-9{position:relative;right:37.5%}.el-col-xs-push-9{left:37.5%;position:relative}.el-col-xs-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-xs-10.is-guttered{display:block}.el-col-xs-offset-10{margin-left:41.6666666667%}.el-col-xs-pull-10{position:relative;right:41.6666666667%}.el-col-xs-push-10{left:41.6666666667%;position:relative}.el-col-xs-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-xs-11.is-guttered{display:block}.el-col-xs-offset-11{margin-left:45.8333333333%}.el-col-xs-pull-11{position:relative;right:45.8333333333%}.el-col-xs-push-11{left:45.8333333333%;position:relative}.el-col-xs-12{display:block;flex:0 0 50%;max-width:50%}.el-col-xs-12.is-guttered{display:block}.el-col-xs-offset-12{margin-left:50%}.el-col-xs-pull-12{position:relative;right:50%}.el-col-xs-push-12{left:50%;position:relative}.el-col-xs-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-xs-13.is-guttered{display:block}.el-col-xs-offset-13{margin-left:54.1666666667%}.el-col-xs-pull-13{position:relative;right:54.1666666667%}.el-col-xs-push-13{left:54.1666666667%;position:relative}.el-col-xs-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-xs-14.is-guttered{display:block}.el-col-xs-offset-14{margin-left:58.3333333333%}.el-col-xs-pull-14{position:relative;right:58.3333333333%}.el-col-xs-push-14{left:58.3333333333%;position:relative}.el-col-xs-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-xs-15.is-guttered{display:block}.el-col-xs-offset-15{margin-left:62.5%}.el-col-xs-pull-15{position:relative;right:62.5%}.el-col-xs-push-15{left:62.5%;position:relative}.el-col-xs-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-xs-16.is-guttered{display:block}.el-col-xs-offset-16{margin-left:66.6666666667%}.el-col-xs-pull-16{position:relative;right:66.6666666667%}.el-col-xs-push-16{left:66.6666666667%;position:relative}.el-col-xs-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-xs-17.is-guttered{display:block}.el-col-xs-offset-17{margin-left:70.8333333333%}.el-col-xs-pull-17{position:relative;right:70.8333333333%}.el-col-xs-push-17{left:70.8333333333%;position:relative}.el-col-xs-18{display:block;flex:0 0 75%;max-width:75%}.el-col-xs-18.is-guttered{display:block}.el-col-xs-offset-18{margin-left:75%}.el-col-xs-pull-18{position:relative;right:75%}.el-col-xs-push-18{left:75%;position:relative}.el-col-xs-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-xs-19.is-guttered{display:block}.el-col-xs-offset-19{margin-left:79.1666666667%}.el-col-xs-pull-19{position:relative;right:79.1666666667%}.el-col-xs-push-19{left:79.1666666667%;position:relative}.el-col-xs-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-xs-20.is-guttered{display:block}.el-col-xs-offset-20{margin-left:83.3333333333%}.el-col-xs-pull-20{position:relative;right:83.3333333333%}.el-col-xs-push-20{left:83.3333333333%;position:relative}.el-col-xs-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-xs-21.is-guttered{display:block}.el-col-xs-offset-21{margin-left:87.5%}.el-col-xs-pull-21{position:relative;right:87.5%}.el-col-xs-push-21{left:87.5%;position:relative}.el-col-xs-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-xs-22.is-guttered{display:block}.el-col-xs-offset-22{margin-left:91.6666666667%}.el-col-xs-pull-22{position:relative;right:91.6666666667%}.el-col-xs-push-22{left:91.6666666667%;position:relative}.el-col-xs-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-xs-23.is-guttered{display:block}.el-col-xs-offset-23{margin-left:95.8333333333%}.el-col-xs-pull-23{position:relative;right:95.8333333333%}.el-col-xs-push-23{left:95.8333333333%;position:relative}.el-col-xs-24{display:block;flex:0 0 100%;max-width:100%}.el-col-xs-24.is-guttered{display:block}.el-col-xs-offset-24{margin-left:100%}.el-col-xs-pull-24{position:relative;right:100%}.el-col-xs-push-24{left:100%;position:relative}}@media only screen and (min-width:768px){.el-col-sm-0{display:none;flex:0 0 0%;max-width:0}.el-col-sm-0.is-guttered{display:none}.el-col-sm-offset-0{margin-left:0}.el-col-sm-pull-0{position:relative;right:0}.el-col-sm-push-0{left:0;position:relative}.el-col-sm-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-sm-1,.el-col-sm-1.is-guttered{display:block}.el-col-sm-offset-1{margin-left:4.1666666667%}.el-col-sm-pull-1{position:relative;right:4.1666666667%}.el-col-sm-push-1{left:4.1666666667%;position:relative}.el-col-sm-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-sm-2,.el-col-sm-2.is-guttered{display:block}.el-col-sm-offset-2{margin-left:8.3333333333%}.el-col-sm-pull-2{position:relative;right:8.3333333333%}.el-col-sm-push-2{left:8.3333333333%;position:relative}.el-col-sm-3{flex:0 0 12.5%;max-width:12.5%}.el-col-sm-3,.el-col-sm-3.is-guttered{display:block}.el-col-sm-offset-3{margin-left:12.5%}.el-col-sm-pull-3{position:relative;right:12.5%}.el-col-sm-push-3{left:12.5%;position:relative}.el-col-sm-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-sm-4,.el-col-sm-4.is-guttered{display:block}.el-col-sm-offset-4{margin-left:16.6666666667%}.el-col-sm-pull-4{position:relative;right:16.6666666667%}.el-col-sm-push-4{left:16.6666666667%;position:relative}.el-col-sm-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-sm-5,.el-col-sm-5.is-guttered{display:block}.el-col-sm-offset-5{margin-left:20.8333333333%}.el-col-sm-pull-5{position:relative;right:20.8333333333%}.el-col-sm-push-5{left:20.8333333333%;position:relative}.el-col-sm-6{flex:0 0 25%;max-width:25%}.el-col-sm-6,.el-col-sm-6.is-guttered{display:block}.el-col-sm-offset-6{margin-left:25%}.el-col-sm-pull-6{position:relative;right:25%}.el-col-sm-push-6{left:25%;position:relative}.el-col-sm-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-sm-7,.el-col-sm-7.is-guttered{display:block}.el-col-sm-offset-7{margin-left:29.1666666667%}.el-col-sm-pull-7{position:relative;right:29.1666666667%}.el-col-sm-push-7{left:29.1666666667%;position:relative}.el-col-sm-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-sm-8,.el-col-sm-8.is-guttered{display:block}.el-col-sm-offset-8{margin-left:33.3333333333%}.el-col-sm-pull-8{position:relative;right:33.3333333333%}.el-col-sm-push-8{left:33.3333333333%;position:relative}.el-col-sm-9{flex:0 0 37.5%;max-width:37.5%}.el-col-sm-9,.el-col-sm-9.is-guttered{display:block}.el-col-sm-offset-9{margin-left:37.5%}.el-col-sm-pull-9{position:relative;right:37.5%}.el-col-sm-push-9{left:37.5%;position:relative}.el-col-sm-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-sm-10.is-guttered{display:block}.el-col-sm-offset-10{margin-left:41.6666666667%}.el-col-sm-pull-10{position:relative;right:41.6666666667%}.el-col-sm-push-10{left:41.6666666667%;position:relative}.el-col-sm-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-sm-11.is-guttered{display:block}.el-col-sm-offset-11{margin-left:45.8333333333%}.el-col-sm-pull-11{position:relative;right:45.8333333333%}.el-col-sm-push-11{left:45.8333333333%;position:relative}.el-col-sm-12{display:block;flex:0 0 50%;max-width:50%}.el-col-sm-12.is-guttered{display:block}.el-col-sm-offset-12{margin-left:50%}.el-col-sm-pull-12{position:relative;right:50%}.el-col-sm-push-12{left:50%;position:relative}.el-col-sm-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-sm-13.is-guttered{display:block}.el-col-sm-offset-13{margin-left:54.1666666667%}.el-col-sm-pull-13{position:relative;right:54.1666666667%}.el-col-sm-push-13{left:54.1666666667%;position:relative}.el-col-sm-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-sm-14.is-guttered{display:block}.el-col-sm-offset-14{margin-left:58.3333333333%}.el-col-sm-pull-14{position:relative;right:58.3333333333%}.el-col-sm-push-14{left:58.3333333333%;position:relative}.el-col-sm-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-sm-15.is-guttered{display:block}.el-col-sm-offset-15{margin-left:62.5%}.el-col-sm-pull-15{position:relative;right:62.5%}.el-col-sm-push-15{left:62.5%;position:relative}.el-col-sm-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-sm-16.is-guttered{display:block}.el-col-sm-offset-16{margin-left:66.6666666667%}.el-col-sm-pull-16{position:relative;right:66.6666666667%}.el-col-sm-push-16{left:66.6666666667%;position:relative}.el-col-sm-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-sm-17.is-guttered{display:block}.el-col-sm-offset-17{margin-left:70.8333333333%}.el-col-sm-pull-17{position:relative;right:70.8333333333%}.el-col-sm-push-17{left:70.8333333333%;position:relative}.el-col-sm-18{display:block;flex:0 0 75%;max-width:75%}.el-col-sm-18.is-guttered{display:block}.el-col-sm-offset-18{margin-left:75%}.el-col-sm-pull-18{position:relative;right:75%}.el-col-sm-push-18{left:75%;position:relative}.el-col-sm-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-sm-19.is-guttered{display:block}.el-col-sm-offset-19{margin-left:79.1666666667%}.el-col-sm-pull-19{position:relative;right:79.1666666667%}.el-col-sm-push-19{left:79.1666666667%;position:relative}.el-col-sm-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-sm-20.is-guttered{display:block}.el-col-sm-offset-20{margin-left:83.3333333333%}.el-col-sm-pull-20{position:relative;right:83.3333333333%}.el-col-sm-push-20{left:83.3333333333%;position:relative}.el-col-sm-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-sm-21.is-guttered{display:block}.el-col-sm-offset-21{margin-left:87.5%}.el-col-sm-pull-21{position:relative;right:87.5%}.el-col-sm-push-21{left:87.5%;position:relative}.el-col-sm-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-sm-22.is-guttered{display:block}.el-col-sm-offset-22{margin-left:91.6666666667%}.el-col-sm-pull-22{position:relative;right:91.6666666667%}.el-col-sm-push-22{left:91.6666666667%;position:relative}.el-col-sm-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-sm-23.is-guttered{display:block}.el-col-sm-offset-23{margin-left:95.8333333333%}.el-col-sm-pull-23{position:relative;right:95.8333333333%}.el-col-sm-push-23{left:95.8333333333%;position:relative}.el-col-sm-24{display:block;flex:0 0 100%;max-width:100%}.el-col-sm-24.is-guttered{display:block}.el-col-sm-offset-24{margin-left:100%}.el-col-sm-pull-24{position:relative;right:100%}.el-col-sm-push-24{left:100%;position:relative}}@media only screen and (min-width:992px){.el-col-md-0{display:none;flex:0 0 0%;max-width:0}.el-col-md-0.is-guttered{display:none}.el-col-md-offset-0{margin-left:0}.el-col-md-pull-0{position:relative;right:0}.el-col-md-push-0{left:0;position:relative}.el-col-md-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-md-1,.el-col-md-1.is-guttered{display:block}.el-col-md-offset-1{margin-left:4.1666666667%}.el-col-md-pull-1{position:relative;right:4.1666666667%}.el-col-md-push-1{left:4.1666666667%;position:relative}.el-col-md-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-md-2,.el-col-md-2.is-guttered{display:block}.el-col-md-offset-2{margin-left:8.3333333333%}.el-col-md-pull-2{position:relative;right:8.3333333333%}.el-col-md-push-2{left:8.3333333333%;position:relative}.el-col-md-3{flex:0 0 12.5%;max-width:12.5%}.el-col-md-3,.el-col-md-3.is-guttered{display:block}.el-col-md-offset-3{margin-left:12.5%}.el-col-md-pull-3{position:relative;right:12.5%}.el-col-md-push-3{left:12.5%;position:relative}.el-col-md-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-md-4,.el-col-md-4.is-guttered{display:block}.el-col-md-offset-4{margin-left:16.6666666667%}.el-col-md-pull-4{position:relative;right:16.6666666667%}.el-col-md-push-4{left:16.6666666667%;position:relative}.el-col-md-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-md-5,.el-col-md-5.is-guttered{display:block}.el-col-md-offset-5{margin-left:20.8333333333%}.el-col-md-pull-5{position:relative;right:20.8333333333%}.el-col-md-push-5{left:20.8333333333%;position:relative}.el-col-md-6{flex:0 0 25%;max-width:25%}.el-col-md-6,.el-col-md-6.is-guttered{display:block}.el-col-md-offset-6{margin-left:25%}.el-col-md-pull-6{position:relative;right:25%}.el-col-md-push-6{left:25%;position:relative}.el-col-md-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-md-7,.el-col-md-7.is-guttered{display:block}.el-col-md-offset-7{margin-left:29.1666666667%}.el-col-md-pull-7{position:relative;right:29.1666666667%}.el-col-md-push-7{left:29.1666666667%;position:relative}.el-col-md-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-md-8,.el-col-md-8.is-guttered{display:block}.el-col-md-offset-8{margin-left:33.3333333333%}.el-col-md-pull-8{position:relative;right:33.3333333333%}.el-col-md-push-8{left:33.3333333333%;position:relative}.el-col-md-9{flex:0 0 37.5%;max-width:37.5%}.el-col-md-9,.el-col-md-9.is-guttered{display:block}.el-col-md-offset-9{margin-left:37.5%}.el-col-md-pull-9{position:relative;right:37.5%}.el-col-md-push-9{left:37.5%;position:relative}.el-col-md-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-md-10.is-guttered{display:block}.el-col-md-offset-10{margin-left:41.6666666667%}.el-col-md-pull-10{position:relative;right:41.6666666667%}.el-col-md-push-10{left:41.6666666667%;position:relative}.el-col-md-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-md-11.is-guttered{display:block}.el-col-md-offset-11{margin-left:45.8333333333%}.el-col-md-pull-11{position:relative;right:45.8333333333%}.el-col-md-push-11{left:45.8333333333%;position:relative}.el-col-md-12{display:block;flex:0 0 50%;max-width:50%}.el-col-md-12.is-guttered{display:block}.el-col-md-offset-12{margin-left:50%}.el-col-md-pull-12{position:relative;right:50%}.el-col-md-push-12{left:50%;position:relative}.el-col-md-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-md-13.is-guttered{display:block}.el-col-md-offset-13{margin-left:54.1666666667%}.el-col-md-pull-13{position:relative;right:54.1666666667%}.el-col-md-push-13{left:54.1666666667%;position:relative}.el-col-md-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-md-14.is-guttered{display:block}.el-col-md-offset-14{margin-left:58.3333333333%}.el-col-md-pull-14{position:relative;right:58.3333333333%}.el-col-md-push-14{left:58.3333333333%;position:relative}.el-col-md-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-md-15.is-guttered{display:block}.el-col-md-offset-15{margin-left:62.5%}.el-col-md-pull-15{position:relative;right:62.5%}.el-col-md-push-15{left:62.5%;position:relative}.el-col-md-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-md-16.is-guttered{display:block}.el-col-md-offset-16{margin-left:66.6666666667%}.el-col-md-pull-16{position:relative;right:66.6666666667%}.el-col-md-push-16{left:66.6666666667%;position:relative}.el-col-md-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-md-17.is-guttered{display:block}.el-col-md-offset-17{margin-left:70.8333333333%}.el-col-md-pull-17{position:relative;right:70.8333333333%}.el-col-md-push-17{left:70.8333333333%;position:relative}.el-col-md-18{display:block;flex:0 0 75%;max-width:75%}.el-col-md-18.is-guttered{display:block}.el-col-md-offset-18{margin-left:75%}.el-col-md-pull-18{position:relative;right:75%}.el-col-md-push-18{left:75%;position:relative}.el-col-md-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-md-19.is-guttered{display:block}.el-col-md-offset-19{margin-left:79.1666666667%}.el-col-md-pull-19{position:relative;right:79.1666666667%}.el-col-md-push-19{left:79.1666666667%;position:relative}.el-col-md-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-md-20.is-guttered{display:block}.el-col-md-offset-20{margin-left:83.3333333333%}.el-col-md-pull-20{position:relative;right:83.3333333333%}.el-col-md-push-20{left:83.3333333333%;position:relative}.el-col-md-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-md-21.is-guttered{display:block}.el-col-md-offset-21{margin-left:87.5%}.el-col-md-pull-21{position:relative;right:87.5%}.el-col-md-push-21{left:87.5%;position:relative}.el-col-md-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-md-22.is-guttered{display:block}.el-col-md-offset-22{margin-left:91.6666666667%}.el-col-md-pull-22{position:relative;right:91.6666666667%}.el-col-md-push-22{left:91.6666666667%;position:relative}.el-col-md-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-md-23.is-guttered{display:block}.el-col-md-offset-23{margin-left:95.8333333333%}.el-col-md-pull-23{position:relative;right:95.8333333333%}.el-col-md-push-23{left:95.8333333333%;position:relative}.el-col-md-24{display:block;flex:0 0 100%;max-width:100%}.el-col-md-24.is-guttered{display:block}.el-col-md-offset-24{margin-left:100%}.el-col-md-pull-24{position:relative;right:100%}.el-col-md-push-24{left:100%;position:relative}}@media only screen and (min-width:1200px){.el-col-lg-0{display:none;flex:0 0 0%;max-width:0}.el-col-lg-0.is-guttered{display:none}.el-col-lg-offset-0{margin-left:0}.el-col-lg-pull-0{position:relative;right:0}.el-col-lg-push-0{left:0;position:relative}.el-col-lg-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-lg-1,.el-col-lg-1.is-guttered{display:block}.el-col-lg-offset-1{margin-left:4.1666666667%}.el-col-lg-pull-1{position:relative;right:4.1666666667%}.el-col-lg-push-1{left:4.1666666667%;position:relative}.el-col-lg-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-lg-2,.el-col-lg-2.is-guttered{display:block}.el-col-lg-offset-2{margin-left:8.3333333333%}.el-col-lg-pull-2{position:relative;right:8.3333333333%}.el-col-lg-push-2{left:8.3333333333%;position:relative}.el-col-lg-3{flex:0 0 12.5%;max-width:12.5%}.el-col-lg-3,.el-col-lg-3.is-guttered{display:block}.el-col-lg-offset-3{margin-left:12.5%}.el-col-lg-pull-3{position:relative;right:12.5%}.el-col-lg-push-3{left:12.5%;position:relative}.el-col-lg-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-lg-4,.el-col-lg-4.is-guttered{display:block}.el-col-lg-offset-4{margin-left:16.6666666667%}.el-col-lg-pull-4{position:relative;right:16.6666666667%}.el-col-lg-push-4{left:16.6666666667%;position:relative}.el-col-lg-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-lg-5,.el-col-lg-5.is-guttered{display:block}.el-col-lg-offset-5{margin-left:20.8333333333%}.el-col-lg-pull-5{position:relative;right:20.8333333333%}.el-col-lg-push-5{left:20.8333333333%;position:relative}.el-col-lg-6{flex:0 0 25%;max-width:25%}.el-col-lg-6,.el-col-lg-6.is-guttered{display:block}.el-col-lg-offset-6{margin-left:25%}.el-col-lg-pull-6{position:relative;right:25%}.el-col-lg-push-6{left:25%;position:relative}.el-col-lg-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-lg-7,.el-col-lg-7.is-guttered{display:block}.el-col-lg-offset-7{margin-left:29.1666666667%}.el-col-lg-pull-7{position:relative;right:29.1666666667%}.el-col-lg-push-7{left:29.1666666667%;position:relative}.el-col-lg-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-lg-8,.el-col-lg-8.is-guttered{display:block}.el-col-lg-offset-8{margin-left:33.3333333333%}.el-col-lg-pull-8{position:relative;right:33.3333333333%}.el-col-lg-push-8{left:33.3333333333%;position:relative}.el-col-lg-9{flex:0 0 37.5%;max-width:37.5%}.el-col-lg-9,.el-col-lg-9.is-guttered{display:block}.el-col-lg-offset-9{margin-left:37.5%}.el-col-lg-pull-9{position:relative;right:37.5%}.el-col-lg-push-9{left:37.5%;position:relative}.el-col-lg-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-lg-10.is-guttered{display:block}.el-col-lg-offset-10{margin-left:41.6666666667%}.el-col-lg-pull-10{position:relative;right:41.6666666667%}.el-col-lg-push-10{left:41.6666666667%;position:relative}.el-col-lg-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-lg-11.is-guttered{display:block}.el-col-lg-offset-11{margin-left:45.8333333333%}.el-col-lg-pull-11{position:relative;right:45.8333333333%}.el-col-lg-push-11{left:45.8333333333%;position:relative}.el-col-lg-12{display:block;flex:0 0 50%;max-width:50%}.el-col-lg-12.is-guttered{display:block}.el-col-lg-offset-12{margin-left:50%}.el-col-lg-pull-12{position:relative;right:50%}.el-col-lg-push-12{left:50%;position:relative}.el-col-lg-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-lg-13.is-guttered{display:block}.el-col-lg-offset-13{margin-left:54.1666666667%}.el-col-lg-pull-13{position:relative;right:54.1666666667%}.el-col-lg-push-13{left:54.1666666667%;position:relative}.el-col-lg-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-lg-14.is-guttered{display:block}.el-col-lg-offset-14{margin-left:58.3333333333%}.el-col-lg-pull-14{position:relative;right:58.3333333333%}.el-col-lg-push-14{left:58.3333333333%;position:relative}.el-col-lg-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-lg-15.is-guttered{display:block}.el-col-lg-offset-15{margin-left:62.5%}.el-col-lg-pull-15{position:relative;right:62.5%}.el-col-lg-push-15{left:62.5%;position:relative}.el-col-lg-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-lg-16.is-guttered{display:block}.el-col-lg-offset-16{margin-left:66.6666666667%}.el-col-lg-pull-16{position:relative;right:66.6666666667%}.el-col-lg-push-16{left:66.6666666667%;position:relative}.el-col-lg-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-lg-17.is-guttered{display:block}.el-col-lg-offset-17{margin-left:70.8333333333%}.el-col-lg-pull-17{position:relative;right:70.8333333333%}.el-col-lg-push-17{left:70.8333333333%;position:relative}.el-col-lg-18{display:block;flex:0 0 75%;max-width:75%}.el-col-lg-18.is-guttered{display:block}.el-col-lg-offset-18{margin-left:75%}.el-col-lg-pull-18{position:relative;right:75%}.el-col-lg-push-18{left:75%;position:relative}.el-col-lg-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-lg-19.is-guttered{display:block}.el-col-lg-offset-19{margin-left:79.1666666667%}.el-col-lg-pull-19{position:relative;right:79.1666666667%}.el-col-lg-push-19{left:79.1666666667%;position:relative}.el-col-lg-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-lg-20.is-guttered{display:block}.el-col-lg-offset-20{margin-left:83.3333333333%}.el-col-lg-pull-20{position:relative;right:83.3333333333%}.el-col-lg-push-20{left:83.3333333333%;position:relative}.el-col-lg-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-lg-21.is-guttered{display:block}.el-col-lg-offset-21{margin-left:87.5%}.el-col-lg-pull-21{position:relative;right:87.5%}.el-col-lg-push-21{left:87.5%;position:relative}.el-col-lg-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-lg-22.is-guttered{display:block}.el-col-lg-offset-22{margin-left:91.6666666667%}.el-col-lg-pull-22{position:relative;right:91.6666666667%}.el-col-lg-push-22{left:91.6666666667%;position:relative}.el-col-lg-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-lg-23.is-guttered{display:block}.el-col-lg-offset-23{margin-left:95.8333333333%}.el-col-lg-pull-23{position:relative;right:95.8333333333%}.el-col-lg-push-23{left:95.8333333333%;position:relative}.el-col-lg-24{display:block;flex:0 0 100%;max-width:100%}.el-col-lg-24.is-guttered{display:block}.el-col-lg-offset-24{margin-left:100%}.el-col-lg-pull-24{position:relative;right:100%}.el-col-lg-push-24{left:100%;position:relative}}@media only screen and (min-width:1920px){.el-col-xl-0{display:none;flex:0 0 0%;max-width:0}.el-col-xl-0.is-guttered{display:none}.el-col-xl-offset-0{margin-left:0}.el-col-xl-pull-0{position:relative;right:0}.el-col-xl-push-0{left:0;position:relative}.el-col-xl-1{flex:0 0 4.1666666667%;max-width:4.1666666667%}.el-col-xl-1,.el-col-xl-1.is-guttered{display:block}.el-col-xl-offset-1{margin-left:4.1666666667%}.el-col-xl-pull-1{position:relative;right:4.1666666667%}.el-col-xl-push-1{left:4.1666666667%;position:relative}.el-col-xl-2{flex:0 0 8.3333333333%;max-width:8.3333333333%}.el-col-xl-2,.el-col-xl-2.is-guttered{display:block}.el-col-xl-offset-2{margin-left:8.3333333333%}.el-col-xl-pull-2{position:relative;right:8.3333333333%}.el-col-xl-push-2{left:8.3333333333%;position:relative}.el-col-xl-3{flex:0 0 12.5%;max-width:12.5%}.el-col-xl-3,.el-col-xl-3.is-guttered{display:block}.el-col-xl-offset-3{margin-left:12.5%}.el-col-xl-pull-3{position:relative;right:12.5%}.el-col-xl-push-3{left:12.5%;position:relative}.el-col-xl-4{flex:0 0 16.6666666667%;max-width:16.6666666667%}.el-col-xl-4,.el-col-xl-4.is-guttered{display:block}.el-col-xl-offset-4{margin-left:16.6666666667%}.el-col-xl-pull-4{position:relative;right:16.6666666667%}.el-col-xl-push-4{left:16.6666666667%;position:relative}.el-col-xl-5{flex:0 0 20.8333333333%;max-width:20.8333333333%}.el-col-xl-5,.el-col-xl-5.is-guttered{display:block}.el-col-xl-offset-5{margin-left:20.8333333333%}.el-col-xl-pull-5{position:relative;right:20.8333333333%}.el-col-xl-push-5{left:20.8333333333%;position:relative}.el-col-xl-6{flex:0 0 25%;max-width:25%}.el-col-xl-6,.el-col-xl-6.is-guttered{display:block}.el-col-xl-offset-6{margin-left:25%}.el-col-xl-pull-6{position:relative;right:25%}.el-col-xl-push-6{left:25%;position:relative}.el-col-xl-7{flex:0 0 29.1666666667%;max-width:29.1666666667%}.el-col-xl-7,.el-col-xl-7.is-guttered{display:block}.el-col-xl-offset-7{margin-left:29.1666666667%}.el-col-xl-pull-7{position:relative;right:29.1666666667%}.el-col-xl-push-7{left:29.1666666667%;position:relative}.el-col-xl-8{flex:0 0 33.3333333333%;max-width:33.3333333333%}.el-col-xl-8,.el-col-xl-8.is-guttered{display:block}.el-col-xl-offset-8{margin-left:33.3333333333%}.el-col-xl-pull-8{position:relative;right:33.3333333333%}.el-col-xl-push-8{left:33.3333333333%;position:relative}.el-col-xl-9{flex:0 0 37.5%;max-width:37.5%}.el-col-xl-9,.el-col-xl-9.is-guttered{display:block}.el-col-xl-offset-9{margin-left:37.5%}.el-col-xl-pull-9{position:relative;right:37.5%}.el-col-xl-push-9{left:37.5%;position:relative}.el-col-xl-10{display:block;flex:0 0 41.6666666667%;max-width:41.6666666667%}.el-col-xl-10.is-guttered{display:block}.el-col-xl-offset-10{margin-left:41.6666666667%}.el-col-xl-pull-10{position:relative;right:41.6666666667%}.el-col-xl-push-10{left:41.6666666667%;position:relative}.el-col-xl-11{display:block;flex:0 0 45.8333333333%;max-width:45.8333333333%}.el-col-xl-11.is-guttered{display:block}.el-col-xl-offset-11{margin-left:45.8333333333%}.el-col-xl-pull-11{position:relative;right:45.8333333333%}.el-col-xl-push-11{left:45.8333333333%;position:relative}.el-col-xl-12{display:block;flex:0 0 50%;max-width:50%}.el-col-xl-12.is-guttered{display:block}.el-col-xl-offset-12{margin-left:50%}.el-col-xl-pull-12{position:relative;right:50%}.el-col-xl-push-12{left:50%;position:relative}.el-col-xl-13{display:block;flex:0 0 54.1666666667%;max-width:54.1666666667%}.el-col-xl-13.is-guttered{display:block}.el-col-xl-offset-13{margin-left:54.1666666667%}.el-col-xl-pull-13{position:relative;right:54.1666666667%}.el-col-xl-push-13{left:54.1666666667%;position:relative}.el-col-xl-14{display:block;flex:0 0 58.3333333333%;max-width:58.3333333333%}.el-col-xl-14.is-guttered{display:block}.el-col-xl-offset-14{margin-left:58.3333333333%}.el-col-xl-pull-14{position:relative;right:58.3333333333%}.el-col-xl-push-14{left:58.3333333333%;position:relative}.el-col-xl-15{display:block;flex:0 0 62.5%;max-width:62.5%}.el-col-xl-15.is-guttered{display:block}.el-col-xl-offset-15{margin-left:62.5%}.el-col-xl-pull-15{position:relative;right:62.5%}.el-col-xl-push-15{left:62.5%;position:relative}.el-col-xl-16{display:block;flex:0 0 66.6666666667%;max-width:66.6666666667%}.el-col-xl-16.is-guttered{display:block}.el-col-xl-offset-16{margin-left:66.6666666667%}.el-col-xl-pull-16{position:relative;right:66.6666666667%}.el-col-xl-push-16{left:66.6666666667%;position:relative}.el-col-xl-17{display:block;flex:0 0 70.8333333333%;max-width:70.8333333333%}.el-col-xl-17.is-guttered{display:block}.el-col-xl-offset-17{margin-left:70.8333333333%}.el-col-xl-pull-17{position:relative;right:70.8333333333%}.el-col-xl-push-17{left:70.8333333333%;position:relative}.el-col-xl-18{display:block;flex:0 0 75%;max-width:75%}.el-col-xl-18.is-guttered{display:block}.el-col-xl-offset-18{margin-left:75%}.el-col-xl-pull-18{position:relative;right:75%}.el-col-xl-push-18{left:75%;position:relative}.el-col-xl-19{display:block;flex:0 0 79.1666666667%;max-width:79.1666666667%}.el-col-xl-19.is-guttered{display:block}.el-col-xl-offset-19{margin-left:79.1666666667%}.el-col-xl-pull-19{position:relative;right:79.1666666667%}.el-col-xl-push-19{left:79.1666666667%;position:relative}.el-col-xl-20{display:block;flex:0 0 83.3333333333%;max-width:83.3333333333%}.el-col-xl-20.is-guttered{display:block}.el-col-xl-offset-20{margin-left:83.3333333333%}.el-col-xl-pull-20{position:relative;right:83.3333333333%}.el-col-xl-push-20{left:83.3333333333%;position:relative}.el-col-xl-21{display:block;flex:0 0 87.5%;max-width:87.5%}.el-col-xl-21.is-guttered{display:block}.el-col-xl-offset-21{margin-left:87.5%}.el-col-xl-pull-21{position:relative;right:87.5%}.el-col-xl-push-21{left:87.5%;position:relative}.el-col-xl-22{display:block;flex:0 0 91.6666666667%;max-width:91.6666666667%}.el-col-xl-22.is-guttered{display:block}.el-col-xl-offset-22{margin-left:91.6666666667%}.el-col-xl-pull-22{position:relative;right:91.6666666667%}.el-col-xl-push-22{left:91.6666666667%;position:relative}.el-col-xl-23{display:block;flex:0 0 95.8333333333%;max-width:95.8333333333%}.el-col-xl-23.is-guttered{display:block}.el-col-xl-offset-23{margin-left:95.8333333333%}.el-col-xl-pull-23{position:relative;right:95.8333333333%}.el-col-xl-push-23{left:95.8333333333%;position:relative}.el-col-xl-24{display:block;flex:0 0 100%;max-width:100%}.el-col-xl-24.is-guttered{display:block}.el-col-xl-offset-24{margin-left:100%}.el-col-xl-pull-24{position:relative;right:100%}.el-col-xl-push-24{left:100%;position:relative}}.el-collapse{--el-collapse-border-color:var(--el-border-color-lighter);--el-collapse-header-height:48px;--el-collapse-header-bg-color:var(--el-fill-color-blank);--el-collapse-header-text-color:var(--el-text-color-primary);--el-collapse-header-font-size:13px;--el-collapse-content-bg-color:var(--el-fill-color-blank);--el-collapse-content-font-size:13px;--el-collapse-content-text-color:var(--el-text-color-primary);border-bottom:1px solid var(--el-collapse-border-color);border-top:1px solid var(--el-collapse-border-color)}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{align-items:center;background-color:var(--el-collapse-header-bg-color);border:none;border-bottom:1px solid var(--el-collapse-border-color);color:var(--el-collapse-header-text-color);cursor:pointer;display:flex;font-size:var(--el-collapse-header-font-size);font-weight:500;height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);outline:none;padding:0;transition:border-bottom-color var(--el-transition-duration);width:100%}.el-collapse-item__arrow{font-weight:300;margin:0 8px 0 auto;transition:transform var(--el-transition-duration)}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:transparent}.el-collapse-item__wrap{background-color:var(--el-collapse-content-bg-color);border-bottom:1px solid var(--el-collapse-border-color);box-sizing:border-box;overflow:hidden;will-change:height}.el-collapse-item__content{color:var(--el-collapse-content-text-color);font-size:var(--el-collapse-content-font-size);line-height:1.7692307692;padding-bottom:25px}.el-collapse-item:last-child{margin-bottom:-1px}.el-color-predefine{display:flex;font-size:12px;margin-top:8px;width:280px}.el-color-predefine__colors{display:flex;flex:1;flex-wrap:wrap}.el-color-predefine__color-selector{border-radius:4px;cursor:pointer;height:20px;margin:0 0 8px 8px;width:20px}.el-color-predefine__color-selector:nth-child(10n+1){margin-left:0}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px var(--el-color-primary)}.el-color-predefine__color-selector>div{border-radius:3px;display:flex;height:100%}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{background-color:#f00;box-sizing:border-box;float:right;height:12px;padding:0 2px;position:relative;width:280px}.el-color-hue-slider__bar{background:linear-gradient(90deg,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00);height:100%;position:relative}.el-color-hue-slider__thumb{background:#fff;border:1px solid var(--el-border-color-lighter);border-radius:1px;box-shadow:0 0 2px rgba(0,0,0,.6);box-sizing:border-box;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:4px;z-index:1}.el-color-hue-slider__thumb:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-hue-slider.is-vertical{height:180px;padding:2px 0;width:12px}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(180deg,#f00 0,#ff0 17%,#0f0 33%,#0ff 50%,#00f 67%,#f0f 83%,#f00)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{height:4px;left:0;top:0;width:100%}.el-color-svpanel{height:180px;position:relative;width:280px}.el-color-svpanel__black,.el-color-svpanel__white{bottom:0;left:0;position:absolute;right:0;top:0}.el-color-svpanel__white{background:linear-gradient(90deg,#fff,rgba(255,255,255,0))}.el-color-svpanel__black{background:linear-gradient(0deg,#000,rgba(0,0,0,0))}.el-color-svpanel__cursor{position:absolute}.el-color-svpanel__cursor>div{border-radius:50%;box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px rgba(0,0,0,.3),0 0 1px 2px rgba(0,0,0,.4);cursor:head;height:4px;transform:translate(-2px,-2px);width:4px}.el-color-alpha-slider{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px;box-sizing:border-box;height:12px;position:relative;width:280px}.el-color-alpha-slider__bar{background:linear-gradient(to right,rgba(255,255,255,0) 0,var(--el-bg-color) 100%);height:100%;position:relative}.el-color-alpha-slider__thumb{background:#fff;border:1px solid var(--el-border-color-lighter);border-radius:1px;box-shadow:0 0 2px rgba(0,0,0,.6);box-sizing:border-box;cursor:pointer;height:100%;left:0;position:absolute;top:0;width:4px;z-index:1}.el-color-alpha-slider__thumb:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-alpha-slider.is-vertical{height:180px;width:20px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(180deg,rgba(255,255,255,0) 0,rgb(255,255,255))}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{height:4px;left:0;top:0;width:100%}.el-color-dropdown{width:300px}.el-color-dropdown__main-wrapper{margin-bottom:6px}.el-color-dropdown__main-wrapper:after{clear:both;content:"";display:table}.el-color-dropdown__btns{margin-top:12px;text-align:right}.el-color-dropdown__value{color:#000000;float:left;font-size:12px;line-height:26px;width:160px}.el-color-picker{display:inline-block;line-height:normal;outline:none;position:relative}.el-color-picker:hover:not(.is-disabled,.is-focused) .el-color-picker__trigger{border-color:var(--el-border-color-hover)}.el-color-picker:focus-visible:not(.is-disabled) .el-color-picker__trigger{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-picker.is-focused .el-color-picker__trigger{border-color:var(--el-color-primary)}.el-color-picker.is-disabled{pointer-events:none}.el-color-picker.is-disabled .el-color-picker__trigger{cursor:not-allowed}.el-color-picker--large{height:40px}.el-color-picker--large .el-color-picker__trigger{height:40px;width:40px}.el-color-picker--large .el-color-picker__mask{height:38px;width:38px}.el-color-picker--small{height:24px}.el-color-picker--small .el-color-picker__trigger{height:24px;width:24px}.el-color-picker--small .el-color-picker__mask{height:22px;width:22px}.el-color-picker--small .el-color-picker__empty,.el-color-picker--small .el-color-picker__icon{transform:scale(.8)}.el-color-picker__mask{background-color:rgba(255,255,255,.7);border-radius:4px;cursor:not-allowed;height:30px;left:1px;position:absolute;top:1px;width:30px;z-index:1}.el-color-picker__trigger{align-items:center;border:1px solid var(--el-border-color);border-radius:4px;box-sizing:border-box;cursor:pointer;display:inline-flex;font-size:0;height:32px;justify-content:center;padding:4px;position:relative;width:32px}.el-color-picker__color{border:1px solid var(--el-text-color-secondary);border-radius:var(--el-border-radius-small);box-sizing:border-box;display:block;height:100%;position:relative;text-align:center;width:100%}.el-color-picker__color.is-alpha{background-image:linear-gradient(45deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-a) 25%,var(--el-color-picker-alpha-bg-b) 25%),linear-gradient(45deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%),linear-gradient(135deg,var(--el-color-picker-alpha-bg-b) 75%,var(--el-color-picker-alpha-bg-a) 75%);background-position:0 0,6px 0,6px -6px,0 6px;background-size:12px 12px}.el-color-picker__color-inner{align-items:center;display:inline-flex;height:100%;justify-content:center;width:100%}.el-color-picker .el-color-picker__empty{color:var(--el-text-color-secondary);font-size:12px}.el-color-picker .el-color-picker__icon{align-items:center;color:#ffffff;display:inline-flex;font-size:12px;justify-content:center}.el-color-picker__panel{background-color:#ffffff;border-radius:var(--el-border-radius-base);box-shadow:var(--el-box-shadow-light);box-sizing:content-box;padding:6px;position:absolute;z-index:10}.el-color-picker__panel.el-popper{border:1px solid var(--el-border-color-lighter)}.el-color-picker,.el-color-picker__panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker,.dark .el-color-picker__panel{--el-color-picker-alpha-bg-a:#333333}.el-container{box-sizing:border-box;display:flex;flex:1;flex-basis:auto;flex-direction:row;min-width:0}.el-container.is-vertical{flex-direction:column}.el-date-table{font-size:12px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-date-table.is-week-mode .el-date-table__row:hover .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table.is-week-mode .el-date-table__row:hover td.available:hover{color:var(--el-datepicker-text-color)}.el-date-table.is-week-mode .el-date-table__row:hover td:first-child .el-date-table-cell{border-bottom-left-radius:15px;border-top-left-radius:15px;margin-left:5px}.el-date-table.is-week-mode .el-date-table__row:hover td:last-child .el-date-table-cell{border-bottom-right-radius:15px;border-top-right-radius:15px;margin-right:5px}.el-date-table.is-week-mode .el-date-table__row.current .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td{box-sizing:border-box;cursor:pointer;height:30px;padding:4px 0;position:relative;text-align:center;width:32px}.el-date-table td .el-date-table-cell{box-sizing:border-box;height:30px;padding:3px 0}.el-date-table td .el-date-table-cell .el-date-table-cell__text{border-radius:50%;display:block;height:24px;left:50%;line-height:24px;margin:0 auto;position:absolute;transform:translateX(-50%);width:24px}.el-date-table td.next-month,.el-date-table td.prev-month{color:var(--el-datepicker-off-text-color)}.el-date-table td.today{position:relative}.el-date-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:bold}.el-date-table td.today.end-date .el-date-table-cell__text,.el-date-table td.today.start-date .el-date-table-cell__text{color:#ffffff}.el-date-table td.available:hover{color:var(--el-datepicker-hover-text-color)}.el-date-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-date-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-date-table td.current:not(.disabled) .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#ffffff}.el-date-table td.current:not(.disabled):focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-date-table td.end-date .el-date-table-cell,.el-date-table td.start-date .el-date-table-cell{color:#ffffff}.el-date-table td.end-date .el-date-table-cell__text,.el-date-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{border-bottom-left-radius:15px;border-top-left-radius:15px;margin-left:5px}.el-date-table td.end-date .el-date-table-cell{border-bottom-right-radius:15px;border-top-right-radius:15px;margin-right:5px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed;opacity:1}.el-date-table td.selected .el-date-table-cell{border-radius:15px;margin-left:5px;margin-right:5px}.el-date-table td.selected .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);border-radius:15px;color:#ffffff}.el-date-table td.week{color:var(--el-datepicker-header-text-color);font-size:80%}.el-date-table td:focus{outline:none}.el-date-table th{border-bottom:1px solid var(--el-border-color-lighter);color:var(--el-datepicker-header-text-color);font-weight:400;padding:5px}.el-month-table{border-collapse:collapse;font-size:12px;margin:-1px}.el-month-table td{cursor:pointer;padding:8px 0;position:relative;text-align:center;width:68px}.el-month-table td .el-date-table-cell{box-sizing:border-box;height:48px;padding:6px 0}.el-month-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:bold}.el-month-table td.today.end-date .el-date-table-cell__text,.el-month-table td.today.start-date .el-date-table-cell__text{color:#ffffff}.el-month-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed}.el-month-table td.disabled .el-date-table-cell__text:hover{color:var(--el-text-color-placeholder)}.el-month-table td .el-date-table-cell__text{border-radius:18px;color:var(--el-datepicker-text-color);display:block;height:36px;left:50%;line-height:36px;margin:0 auto;position:absolute;transform:translateX(-50%);width:54px}.el-month-table td .el-date-table-cell__text:hover{color:var(--el-datepicker-hover-text-color)}.el-month-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-month-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-month-table td.end-date .el-date-table-cell,.el-month-table td.start-date .el-date-table-cell{color:#ffffff}.el-month-table td.end-date .el-date-table-cell__text,.el-month-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#ffffff}.el-month-table td.start-date .el-date-table-cell{border-bottom-left-radius:24px;border-top-left-radius:24px;margin-left:3px}.el-month-table td.end-date .el-date-table-cell{border-bottom-right-radius:24px;border-top-right-radius:24px;margin-right:3px}.el-month-table td.current:not(.disabled) .el-date-table-cell{border-radius:24px;margin-left:3px;margin-right:3px}.el-month-table td.current:not(.disabled) .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#ffffff}.el-month-table td:focus-visible{outline:none}.el-month-table td:focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-year-table{border-collapse:collapse;font-size:12px;margin:-1px}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{cursor:pointer;padding:8px 0;position:relative;text-align:center;width:68px}.el-year-table td .el-date-table-cell{box-sizing:border-box;height:48px;padding:6px 0}.el-year-table td.today .el-date-table-cell__text{color:var(--el-color-primary);font-weight:bold}.el-year-table td.today.end-date .el-date-table-cell__text,.el-year-table td.today.start-date .el-date-table-cell__text{color:#ffffff}.el-year-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed}.el-year-table td.disabled .el-date-table-cell__text:hover{color:var(--el-text-color-placeholder)}.el-year-table td .el-date-table-cell__text{border-radius:18px;color:var(--el-datepicker-text-color);display:block;height:36px;left:50%;line-height:36px;margin:0 auto;position:absolute;transform:translateX(-50%);width:60px}.el-year-table td .el-date-table-cell__text:hover{color:var(--el-datepicker-hover-text-color)}.el-year-table td.in-range .el-date-table-cell{background-color:var(--el-datepicker-inrange-bg-color)}.el-year-table td.in-range .el-date-table-cell:hover{background-color:var(--el-datepicker-inrange-hover-bg-color)}.el-year-table td.end-date .el-date-table-cell,.el-year-table td.start-date .el-date-table-cell{color:#ffffff}.el-year-table td.end-date .el-date-table-cell__text,.el-year-table td.start-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#ffffff}.el-year-table td.start-date .el-date-table-cell{border-bottom-left-radius:24px;border-top-left-radius:24px}.el-year-table td.end-date .el-date-table-cell{border-bottom-right-radius:24px;border-top-right-radius:24px}.el-year-table td.current:not(.disabled) .el-date-table-cell__text{background-color:var(--el-datepicker-active-color);color:#ffffff}.el-year-table td:focus-visible{outline:none}.el-year-table td:focus-visible .el-date-table-cell__text{outline:2px solid var(--el-datepicker-active-color);outline-offset:1px}.el-time-spinner.has-seconds .el-time-spinner__wrapper{width:33.3%}.el-time-spinner__wrapper{display:inline-block;max-height:192px;overflow:auto;position:relative;vertical-align:top;width:50%}.el-time-spinner__wrapper.el-scrollbar__wrap:not(.el-scrollbar__wrap--hidden-default){padding-bottom:15px}.el-time-spinner__wrapper.is-arrow{box-sizing:border-box;overflow:hidden;text-align:center}.el-time-spinner__wrapper.is-arrow .el-time-spinner__list{transform:translateY(-32px)}.el-time-spinner__wrapper.is-arrow .el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:default}.el-time-spinner__arrow{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;height:30px;left:0;line-height:30px;position:absolute;text-align:center;width:100%;z-index:var(--el-index-normal)}.el-time-spinner__arrow:hover{color:var(--el-color-primary)}.el-time-spinner__arrow.arrow-up{top:10px}.el-time-spinner__arrow.arrow-down{bottom:10px}.el-time-spinner__input.el-input{width:70%}.el-time-spinner__input.el-input .el-input__inner,.el-time-spinner__list{padding:0;text-align:center}.el-time-spinner__list{list-style:none;margin:0}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";display:block;height:80px;width:100%}.el-time-spinner__item{color:var(--el-text-color-regular);font-size:12px;height:32px;line-height:32px}.el-time-spinner__item:hover:not(.is-disabled):not(.is-active){background:var(--el-fill-color-light);cursor:pointer}.el-time-spinner__item.is-active:not(.is-disabled){color:var(--el-text-color-primary);font-weight:bold}.el-time-spinner__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-picker__popper{--el-datepicker-border-color:var(--el-disabled-border-color)}.el-picker__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-picker__popper.el-popper,.el-picker__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-datepicker-border-color)}.el-picker__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-date-editor{--el-date-editor-width:220px;--el-date-editor-monthrange-width:300px;--el-date-editor-daterange-width:350px;--el-date-editor-datetimerange-width:400px;--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;position:relative;text-align:left;vertical-align:middle}.el-date-editor.el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset}.el-date-editor.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{height:var(--el-input-height,var(--el-component-size));width:var(--el-date-editor-width)}.el-date-editor--monthrange{--el-date-editor-width:var(--el-date-editor-monthrange-width)}.el-date-editor--daterange,.el-date-editor--timerange{--el-date-editor-width:var(--el-date-editor-daterange-width)}.el-date-editor--datetimerange{--el-date-editor-width:var(--el-date-editor-datetimerange-width)}.el-date-editor--dates .el-input__wrapper{text-overflow:ellipsis;white-space:nowrap}.el-date-editor .clear-icon,.el-date-editor .close-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__icon{color:var(--el-text-color-placeholder);float:left;font-size:14px;height:inherit}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-text-color-regular);display:inline-block;font-size:var(--el-font-size-base);height:30px;line-height:30px;margin:0;outline:none;padding:0;text-align:center;width:39%}.el-date-editor .el-range-input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{align-items:center;color:var(--el-text-color-primary);display:inline-flex;flex:1;font-size:14px;height:100%;justify-content:center;margin:0;overflow-wrap:break-word;padding:0 5px}.el-date-editor .el-range__close-icon{color:var(--el-text-color-placeholder);cursor:pointer;font-size:14px;height:inherit;width:unset}.el-date-editor .el-range__close-icon:hover{color:var(--el-text-color-secondary)}.el-date-editor .el-range__close-icon svg{vertical-align:middle}.el-date-editor .el-range__close-icon--hidden{opacity:0;visibility:hidden}.el-range-editor.el-input__wrapper{align-items:center;display:inline-flex;padding:0 10px;vertical-align:middle}.el-range-editor.is-active,.el-range-editor.is-active:hover{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-range-editor--large{line-height:var(--el-component-size-large)}.el-range-editor--large.el-input__wrapper{height:var(--el-component-size-large)}.el-range-editor--large .el-range-separator{font-size:14px;line-height:40px}.el-range-editor--large .el-range-input{font-size:14px;height:38px;line-height:38px}.el-range-editor--small{line-height:var(--el-component-size-small)}.el-range-editor--small.el-input__wrapper{height:var(--el-component-size-small)}.el-range-editor--small .el-range-separator{font-size:12px;line-height:24px}.el-range-editor--small .el-range-input{font-size:12px;height:22px;line-height:22px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed;pointer-events:none}.el-range-editor.is-disabled,.el-range-editor.is-disabled:focus,.el-range-editor.is-disabled:hover{border-color:var(--el-disabled-border-color)}.el-range-editor.is-disabled input{background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled input::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled input::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{background:var(--el-bg-color-overlay);border-radius:var(--el-border-radius-base);color:var(--el-text-color-regular);line-height:30px}.el-picker-panel .el-time-panel{background-color:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light);margin:5px 0}.el-picker-panel__body-wrapper:after,.el-picker-panel__body:after{clear:both;content:"";display:table}.el-picker-panel__content{margin:15px;position:relative}.el-picker-panel__footer{background-color:var(--el-bg-color-overlay);border-top:1px solid var(--el-datepicker-inner-border-color);font-size:0;padding:4px 12px;position:relative;text-align:right}.el-picker-panel__shortcut{background-color:transparent;border:0;color:var(--el-datepicker-text-color);cursor:pointer;display:block;font-size:14px;line-height:28px;outline:none;padding-left:12px;text-align:left;width:100%}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{background-color:#e6f1fe;color:var(--el-datepicker-active-color)}.el-picker-panel__btn{background-color:transparent;border:1px solid var(--el-fill-color-darker);border-radius:2px;color:var(--el-text-color-primary);cursor:pointer;font-size:12px;line-height:24px;outline:none;padding:0 20px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{background:transparent;border:0;color:var(--el-datepicker-icon-color);cursor:pointer;font-size:12px;margin-top:8px;outline:none}.el-picker-panel__icon-btn:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn:focus-visible{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__icon-btn.is-disabled{color:var(--el-text-color-disabled)}.el-picker-panel__icon-btn.is-disabled:hover{cursor:not-allowed}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{background-color:var(--el-bg-color-overlay);border-right:1px solid var(--el-datepicker-inner-border-color);bottom:0;box-sizing:border-box;overflow:auto;padding-top:6px;position:absolute;top:0;width:110px}.el-picker-panel [slot=sidebar]+.el-picker-panel__body,.el-picker-panel__sidebar+.el-picker-panel__body{margin-left:110px}.el-date-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);width:322px}.el-date-picker.has-sidebar.has-time{width:434px}.el-date-picker.has-sidebar{width:438px}.el-date-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-picker .el-picker-panel__content{width:292px}.el-date-picker table{table-layout:fixed;width:100%}.el-date-picker__editor-wrap{display:table-cell;padding:0 5px;position:relative}.el-date-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;display:table;font-size:12px;padding:8px 5px 5px;position:relative;width:100%}.el-date-picker__header{padding:12px 12px 0;text-align:center}.el-date-picker__header--bordered{border-bottom:1px solid var(--el-border-color-lighter);margin-bottom:0;padding-bottom:12px}.el-date-picker__header--bordered+.el-picker-panel__content{margin-top:0}.el-date-picker__header-label{color:var(--el-text-color-regular);cursor:pointer;font-size:16px;font-weight:500;line-height:22px;padding:0 5px;text-align:center}.el-date-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-picker__prev-btn{float:left}.el-date-picker__next-btn{float:right}.el-date-picker__time-wrap{padding:10px;text-align:center}.el-date-picker__time-label{cursor:pointer;float:left;line-height:30px;margin-left:10px}.el-date-picker .el-time-panel{position:absolute}.el-date-range-picker{--el-datepicker-text-color:var(--el-text-color-regular);--el-datepicker-off-text-color:var(--el-text-color-placeholder);--el-datepicker-header-text-color:var(--el-text-color-regular);--el-datepicker-icon-color:var(--el-text-color-primary);--el-datepicker-border-color:var(--el-disabled-border-color);--el-datepicker-inner-border-color:var(--el-border-color-light);--el-datepicker-inrange-bg-color:var(--el-border-color-extra-light);--el-datepicker-inrange-hover-bg-color:var(--el-border-color-extra-light);--el-datepicker-active-color:var(--el-color-primary);--el-datepicker-hover-text-color:var(--el-color-primary);width:646px}.el-date-range-picker.has-sidebar{width:756px}.el-date-range-picker.has-time .el-picker-panel__body-wrapper{position:relative}.el-date-range-picker table{table-layout:fixed;width:100%}.el-date-range-picker .el-picker-panel__body{min-width:513px}.el-date-range-picker .el-picker-panel__content{margin:0}.el-date-range-picker__header{height:28px;position:relative;text-align:center}.el-date-range-picker__header [class*=arrow-left]{float:left}.el-date-range-picker__header [class*=arrow-right]{float:right}.el-date-range-picker__header div{font-size:16px;font-weight:500;margin-right:50px}.el-date-range-picker__content{box-sizing:border-box;float:left;margin:0;padding:16px;width:50%}.el-date-range-picker__content.is-left{border-right:1px solid var(--el-datepicker-inner-border-color)}.el-date-range-picker__content .el-date-range-picker__header div{margin-left:50px;margin-right:50px}.el-date-range-picker__editors-wrap{box-sizing:border-box;display:table-cell}.el-date-range-picker__editors-wrap.is-right{text-align:right}.el-date-range-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;display:table;font-size:12px;padding:8px 5px 5px;position:relative;width:100%}.el-date-range-picker__time-header>.el-icon-arrow-right{color:var(--el-datepicker-icon-color);display:table-cell;font-size:20px;vertical-align:middle}.el-date-range-picker__time-picker-wrap{display:table-cell;padding:0 5px;position:relative}.el-date-range-picker__time-picker-wrap .el-picker-panel{background:#ffffff;position:absolute;right:0;top:13px;z-index:1}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-time-range-picker{overflow:visible;width:354px}.el-time-range-picker__content{padding:10px;position:relative;text-align:center;z-index:1}.el-time-range-picker__cell{box-sizing:border-box;display:inline-block;margin:0;padding:4px 7px 7px;width:50%}.el-time-range-picker__header{font-size:14px;margin-bottom:5px;text-align:center}.el-time-range-picker__body{border:1px solid var(--el-datepicker-border-color);border-radius:2px}.el-time-panel{border-radius:2px;box-sizing:content-box;left:0;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:180px;z-index:var(--el-index-top)}.el-time-panel__content{font-size:0;overflow:hidden;position:relative}.el-time-panel__content:after,.el-time-panel__content:before{box-sizing:border-box;content:"";height:32px;left:0;margin-top:-16px;padding-top:6px;position:absolute;right:0;text-align:left;top:50%;z-index:-1}.el-time-panel__content:after{left:50%;margin-left:12%;margin-right:12%}.el-time-panel__content:before{border-bottom:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);margin-left:12%;margin-right:12%;padding-left:50%}.el-time-panel__content.has-seconds:after{left:66.6666666667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333333333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));box-sizing:border-box;height:36px;line-height:25px;padding:4px;text-align:right}.el-time-panel__btn{background-color:transparent;border:none;color:var(--el-text-color-primary);cursor:pointer;font-size:12px;line-height:28px;margin:0 5px;outline:none;padding:0 5px}.el-time-panel__btn.confirm{color:var(--el-timepicker-active-color,var(--el-color-primary));font-weight:800}.el-descriptions{--el-descriptions-table-border:1px solid var(--el-border-color-lighter);--el-descriptions-item-bordered-label-background:var(--el-fill-color-light);box-sizing:border-box;color:var(--el-text-color-primary);font-size:var(--el-font-size-base)}.el-descriptions__header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:bold}.el-descriptions__body{background-color:var(--el-fill-color-blank)}.el-descriptions__body .el-descriptions__table{border-collapse:collapse;width:100%}.el-descriptions__body .el-descriptions__table .el-descriptions__cell{box-sizing:border-box;font-size:14px;font-weight:normal;line-height:23px;text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-left{text-align:left}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-center{text-align:center}.el-descriptions__body .el-descriptions__table .el-descriptions__cell.is-right{text-align:right}.el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{border:var(--el-descriptions-table-border);padding:8px 11px}.el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:12px}.el-descriptions--large{font-size:14px}.el-descriptions--large .el-descriptions__header{margin-bottom:20px}.el-descriptions--large .el-descriptions__header .el-descriptions__title{font-size:16px}.el-descriptions--large .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:14px}.el-descriptions--large .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:12px 15px}.el-descriptions--large .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:16px}.el-descriptions--small{font-size:12px}.el-descriptions--small .el-descriptions__header{margin-bottom:12px}.el-descriptions--small .el-descriptions__header .el-descriptions__title{font-size:14px}.el-descriptions--small .el-descriptions__body .el-descriptions__table .el-descriptions__cell{font-size:12px}.el-descriptions--small .el-descriptions__body .el-descriptions__table.is-bordered .el-descriptions__cell{padding:4px 7px}.el-descriptions--small .el-descriptions__body .el-descriptions__table:not(.is-bordered) .el-descriptions__cell{padding-bottom:8px}.el-descriptions__label.el-descriptions__cell.is-bordered-label{background:var(--el-descriptions-item-bordered-label-background);color:var(--el-text-color-regular);font-weight:bold}.el-descriptions__label:not(.is-bordered-label){color:var(--el-text-color-primary);margin-right:16px}.el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:6px}.el-descriptions__content.el-descriptions__cell.is-bordered-content{color:var(--el-text-color-primary)}.el-descriptions__content:not(.is-bordered-label){color:var(--el-text-color-regular)}.el-descriptions--large .el-descriptions__label:not(.is-bordered-label){margin-right:16px}.el-descriptions--large .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:8px}.el-descriptions--small .el-descriptions__label:not(.is-bordered-label){margin-right:12px}.el-descriptions--small .el-descriptions__label.el-descriptions__cell:not(.is-bordered-label).is-vertical-label{padding-bottom:4px}:root{--el-popup-modal-bg-color:var(--el-color-black);--el-popup-modal-opacity:0.5}.v-modal-enter{animation:v-modal-in var(--el-transition-duration-fast) ease}.v-modal-leave{animation:v-modal-out var(--el-transition-duration-fast) ease forwards}@keyframes v-modal-in{0%{opacity:0}}@keyframes v-modal-out{to{opacity:0}}.v-modal{background:var(--el-popup-modal-bg-color);height:100%;left:0;opacity:var(--el-popup-modal-opacity);position:fixed;top:0;width:100%}.el-popup-parent--hidden{overflow:hidden}.el-dialog{--el-dialog-width:50%;--el-dialog-margin-top:15vh;--el-dialog-bg-color:var(--el-bg-color);--el-dialog-box-shadow:var(--el-box-shadow);--el-dialog-title-font-size:var(--el-font-size-large);--el-dialog-content-font-size:14px;--el-dialog-font-line-height:var(--el-font-line-height-primary);--el-dialog-padding-primary:16px;--el-dialog-border-radius:var(--el-border-radius-base);background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;margin:var(--el-dialog-margin-top,15vh) auto 50px;overflow-wrap:break-word;padding:var(--el-dialog-padding-primary);position:relative;width:var(--el-dialog-width,50%)}.el-dialog:focus{outline:none!important}.el-dialog.is-align-center{margin:auto}.el-dialog.is-fullscreen{--el-dialog-width:100%;--el-dialog-margin-top:0;border-radius:0;height:100%;margin-bottom:0;overflow:auto}.el-dialog__wrapper{bottom:0;left:0;margin:0;overflow:auto;position:fixed;right:0;top:0}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-dialog__header{padding-bottom:var(--el-dialog-padding-primary)}.el-dialog__header.show-close{padding-right:calc(var(--el-dialog-padding-primary) + var(--el-message-close-size, 16px))}.el-dialog__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:48px;outline:none;padding:0;position:absolute;right:0;top:0;width:48px}.el-dialog__headerbtn .el-dialog__close{color:var(--el-color-info);font-size:inherit}.el-dialog__headerbtn:focus .el-dialog__close,.el-dialog__headerbtn:hover .el-dialog__close{color:var(--el-color-primary)}.el-dialog__title{color:var(--el-text-color-primary);font-size:var(--el-dialog-title-font-size);line-height:var(--el-dialog-font-line-height)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{box-sizing:border-box;padding-top:var(--el-dialog-padding-primary);text-align:right}.el-dialog--center{text-align:center}.el-dialog--center .el-dialog__body{text-align:initial}.el-dialog--center .el-dialog__footer{text-align:inherit}.el-overlay-dialog{bottom:0;left:0;overflow:auto;position:fixed;right:0;top:0}.dialog-fade-enter-active{animation:modal-fade-in var(--el-transition-duration)}.dialog-fade-enter-active .el-overlay-dialog{animation:dialog-fade-in var(--el-transition-duration)}.dialog-fade-leave-active{animation:modal-fade-out var(--el-transition-duration)}.dialog-fade-leave-active .el-overlay-dialog{animation:dialog-fade-out var(--el-transition-duration)}@keyframes dialog-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}@keyframes modal-fade-in{0%{opacity:0}to{opacity:1}}@keyframes modal-fade-out{0%{opacity:1}to{opacity:0}}.el-divider{position:relative}.el-divider--horizontal{border-top:1px var(--el-border-color) var(--el-border-style);display:block;height:1px;margin:24px 0;width:100%}.el-divider--vertical{border-left:1px var(--el-border-color) var(--el-border-style);display:inline-block;height:1em;margin:0 8px;position:relative;vertical-align:middle;width:1px}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);font-size:14px;font-weight:500;padding:0 20px;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translateX(-50%) translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-drawer{--el-drawer-bg-color:var(--el-dialog-bg-color,var(--el-bg-color));--el-drawer-padding-primary:var(--el-dialog-padding-primary,20px);background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);box-sizing:border-box;display:flex;flex-direction:column;overflow:hidden;position:absolute;transition:all var(--el-transition-duration)}.el-drawer .btt,.el-drawer .ltr,.el-drawer .rtl,.el-drawer .ttb{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{align-items:center;color:rgb(114,118,123);display:flex;margin-bottom:32px;padding:var(--el-drawer-padding-primary);padding-bottom:0}.el-drawer__header>:first-child{flex:1}.el-drawer__title{flex:1;font-size:16px;line-height:inherit;margin:0}.el-drawer__footer{padding:var(--el-drawer-padding-primary);padding-top:10px;text-align:right}.el-drawer__close-btn{background-color:transparent;border:none;color:inherit;cursor:pointer;display:inline-flex;font-size:var(--el-font-size-extra-large);outline:none}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{flex:1;overflow:auto;padding:var(--el-drawer-padding-primary)}.el-drawer__body>*{box-sizing:border-box}.el-drawer.ltr,.el-drawer.rtl{bottom:0;height:100%;top:0}.el-drawer.btt,.el-drawer.ttb{left:0;right:0;width:100%}.el-drawer.ltr{left:0}.el-drawer.rtl{right:0}.el-drawer.ttb{top:0}.el-drawer.btt{bottom:0}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-active,.el-drawer-fade-enter-from,.el-drawer-fade-enter-to,.el-drawer-fade-leave-active,.el-drawer-fade-leave-from,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{background-color:transparent!important}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translateX(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translateX(-100%)}.el-drawer-fade-enter-from .ttb,.el-drawer-fade-leave-to .ttb{transform:translateY(-100%)}.el-drawer-fade-enter-from .btt,.el-drawer-fade-leave-to .btt{transform:translateY(100%)}.el-dropdown{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);line-height:1;position:relative;vertical-align:top}.el-dropdown.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-dropdown__popper{--el-dropdown-menu-box-shadow:var(--el-box-shadow-light);--el-dropdown-menuItem-hover-fill:var(--el-color-primary-light-9);--el-dropdown-menuItem-hover-color:var(--el-color-primary);--el-dropdown-menu-index:10}.el-dropdown__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-dropdown-menu-box-shadow)}.el-dropdown__popper.el-popper,.el-dropdown__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-dropdown__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-dropdown__popper .el-dropdown-menu{border:none}.el-dropdown__popper .el-dropdown__popper-selfdefine{outline:none}.el-dropdown__popper .el-scrollbar__bar{z-index:calc(var(--el-dropdown-menu-index) + 1)}.el-dropdown__popper .el-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:0}.el-dropdown .el-dropdown__caret-button{align-items:center;border-left:none;display:inline-flex;justify-content:center;padding-left:0;padding-right:0;width:32px}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{background:var(--el-overlay-color-lighter);bottom:-1px;content:"";display:block;left:0;position:absolute;top:-1px;width:1px}.el-dropdown .el-dropdown__caret-button.el-button:before{background:var(--el-border-color);opacity:.5}.el-dropdown .el-dropdown__caret-button .el-dropdown__icon{font-size:inherit;padding-left:0}.el-dropdown .el-dropdown-selfdefine{outline:none}.el-dropdown--large .el-dropdown__caret-button{width:40px}.el-dropdown--small .el-dropdown__caret-button{width:24px}.el-dropdown-menu{background-color:var(--el-bg-color-overlay);border:none;border-radius:var(--el-border-radius-base);box-shadow:none;left:0;list-style:none;margin:0;padding:5px 0;position:relative;top:0;z-index:var(--el-dropdown-menu-index)}.el-dropdown-menu__item{align-items:center;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:var(--el-font-size-base);line-height:22px;list-style:none;margin:0;outline:none;padding:5px 16px;white-space:nowrap}.el-dropdown-menu__item:not(.is-disabled):focus,.el-dropdown-menu__item:not(.is-disabled):hover{background-color:var(--el-dropdown-menuItem-hover-fill);color:var(--el-dropdown-menuItem-hover-color)}.el-dropdown-menu__item i{margin-right:5px}.el-dropdown-menu__item--divided{border-top:1px solid var(--el-border-color-lighter);margin:6px 0}.el-dropdown-menu__item.is-disabled{color:var(--el-text-color-disabled);cursor:not-allowed}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{font-size:14px;line-height:22px;padding:7px 20px}.el-dropdown-menu--large .el-dropdown-menu__item--divided{margin:8px 0}.el-dropdown-menu--small{padding:3px 0}.el-dropdown-menu--small .el-dropdown-menu__item{font-size:12px;line-height:20px;padding:2px 12px}.el-dropdown-menu--small .el-dropdown-menu__item--divided{margin:4px 0}.el-empty{--el-empty-padding:40px 0;--el-empty-image-width:160px;--el-empty-description-margin-top:20px;--el-empty-bottom-margin-top:20px;--el-empty-fill-color-0:var(--el-color-white);--el-empty-fill-color-1:#fcfcfd;--el-empty-fill-color-2:#f8f9fb;--el-empty-fill-color-3:#f7f8fc;--el-empty-fill-color-4:#eeeff3;--el-empty-fill-color-5:#edeef2;--el-empty-fill-color-6:#e9ebef;--el-empty-fill-color-7:#e5e7e9;--el-empty-fill-color-8:#e0e3e9;--el-empty-fill-color-9:#d5d7de;align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:var(--el-empty-padding);text-align:center}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{height:100%;-o-object-fit:contain;object-fit:contain;-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:top;width:100%}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;height:100%;vertical-align:top;width:100%}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);margin:0}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-footer-height);padding:var(--el-footer-padding)}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{display:inline-flex;margin-right:32px;vertical-align:middle}.el-form--inline.el-form--label-top{display:flex;flex-wrap:wrap}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-form-item{display:flex;--font-size:14px;margin-bottom:18px}.el-form-item .el-form-item{margin-bottom:0}.el-form-item .el-input__validateIcon{display:none}.el-form-item--large{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:22px}.el-form-item--large .el-form-item__label{height:40px;line-height:40px}.el-form-item--large .el-form-item__content{line-height:40px}.el-form-item--large .el-form-item__error{padding-top:4px}.el-form-item--default{--font-size:14px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--default .el-form-item__label{height:32px;line-height:32px}.el-form-item--default .el-form-item__content{line-height:32px}.el-form-item--default .el-form-item__error{padding-top:2px}.el-form-item--small{--font-size:12px;--el-form-label-font-size:var(--font-size);margin-bottom:18px}.el-form-item--small .el-form-item__label{height:24px;line-height:24px}.el-form-item--small .el-form-item__content{line-height:24px}.el-form-item--small .el-form-item__error{padding-top:2px}.el-form-item--label-left .el-form-item__label{justify-content:flex-start}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{display:inline-block;height:auto;line-height:22px;margin-bottom:8px;text-align:left;vertical-align:middle}.el-form-item__label-wrap{display:flex}.el-form-item__label{align-items:flex-start;box-sizing:border-box;color:var(--el-text-color-regular);display:inline-flex;flex:0 0 auto;font-size:var(--el-form-label-font-size);height:32px;justify-content:flex-end;line-height:32px;padding:0 12px 0 0}.el-form-item__content{align-items:center;display:flex;flex:1;flex-wrap:wrap;font-size:var(--font-size);line-height:32px;min-width:0;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);font-size:12px;left:0;line-height:1;padding-top:2px;position:absolute;top:100%}.el-form-item__error--inline{display:inline-block;left:auto;margin-left:10px;position:relative;top:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before{color:var(--el-color-danger);content:"*";margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after{color:var(--el-color-danger);content:"*";margin-left:4px}.el-form-item.is-error .el-input-tag__wrapper,.el-form-item.is-error .el-input-tag__wrapper.is-focus,.el-form-item.is-error .el-input-tag__wrapper:focus,.el-form-item.is-error .el-input-tag__wrapper:hover,.el-form-item.is-error .el-input__wrapper,.el-form-item.is-error .el-input__wrapper.is-focus,.el-form-item.is-error .el-input__wrapper:focus,.el-form-item.is-error .el-input__wrapper:hover,.el-form-item.is-error .el-select__wrapper,.el-form-item.is-error .el-select__wrapper.is-focus,.el-form-item.is-error .el-select__wrapper:focus,.el-form-item.is-error .el-select__wrapper:hover,.el-form-item.is-error .el-textarea__inner,.el-form-item.is-error .el-textarea__inner.is-focus,.el-form-item.is-error .el-textarea__inner:focus,.el-form-item.is-error .el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px transparent}.el-form-item.is-error .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-header{--el-header-padding:0 20px;--el-header-height:60px;box-sizing:border-box;flex-shrink:0;height:var(--el-header-height);padding:var(--el-header-padding)}.el-image-viewer__wrapper{bottom:0;left:0;position:fixed;right:0;top:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{align-items:center;border-radius:50%;box-sizing:border-box;cursor:pointer;display:flex;justify-content:center;opacity:.8;position:absolute;-webkit-user-select:none;-moz-user-select:none;user-select:none;z-index:1}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{font-size:40px;height:40px;right:40px;top:40px;width:40px}.el-image-viewer__canvas{align-items:center;display:flex;height:100%;justify-content:center;position:static;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:100%}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;bottom:30px;height:44px;left:50%;padding:0 23px;transform:translateX(-50%)}.el-image-viewer__actions__inner{align-items:center;color:#fff;cursor:default;display:flex;font-size:23px;gap:22px;height:100%;justify-content:space-around;padding:0 6px;width:100%}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{bottom:90px;color:#fff;cursor:default;left:50%;transform:translateX(-50%)}.el-image-viewer__prev{left:40px}.el-image-viewer__next,.el-image-viewer__prev{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;top:50%;transform:translateY(-50%);width:44px}.el-image-viewer__next{right:40px;text-indent:2px}.el-image-viewer__close{background-color:var(--el-text-color-regular);border-color:#fff;color:#fff;font-size:24px;height:44px;width:44px}.el-image-viewer__mask{background:#000;height:100%;left:0;opacity:.5;position:absolute;top:0;width:100%}.viewer-fade-enter-active{animation:viewer-fade-in var(--el-transition-duration)}.viewer-fade-leave-active{animation:viewer-fade-out var(--el-transition-duration)}@keyframes viewer-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translateZ(0)}to{opacity:0;transform:translate3d(0,-20px,0)}}.el-image__error,.el-image__inner,.el-image__placeholder,.el-image__wrapper{height:100%;width:100%}.el-image{display:inline-block;overflow:hidden;position:relative}.el-image__inner{opacity:1;vertical-align:top}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{left:0;position:absolute;top:0}.el-image__error,.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{align-items:center;color:var(--el-text-color-placeholder);display:flex;font-size:14px;justify-content:center;vertical-align:middle}.el-image__preview{cursor:pointer}.el-textarea{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;display:inline-block;font-size:var(--el-font-size-base);position:relative;vertical-align:bottom;width:100%}.el-textarea__inner{-webkit-appearance:none;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;box-sizing:border-box;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;font-family:inherit;font-size:inherit;line-height:1.5;padding:5px 11px;position:relative;resize:vertical;transition:var(--el-transition-box-shadow);width:100%}.el-textarea__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-textarea__inner:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-textarea__inner:focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset;outline:none}.el-textarea .el-input__count{background:var(--el-fill-color-blank);bottom:5px;color:var(--el-color-info);font-size:12px;line-height:14px;position:absolute;right:10px}.el-textarea.is-disabled .el-textarea__inner{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;color:var(--el-disabled-text-color);cursor:not-allowed}.el-textarea.is-disabled .el-textarea__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-disabled .el-textarea__inner::placeholder{color:var(--el-text-color-placeholder)}.el-textarea.is-exceed .el-textarea__inner{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-textarea.is-exceed .el-input__count{color:var(--el-color-danger)}.el-input{--el-input-text-color:var(--el-text-color-regular);--el-input-border:var(--el-border);--el-input-hover-border:var(--el-border-color-hover);--el-input-focus-border:var(--el-color-primary);--el-input-transparent-border:0 0 0 1px transparent inset;--el-input-border-color:var(--el-border-color);--el-input-border-radius:var(--el-border-radius-base);--el-input-bg-color:var(--el-fill-color-blank);--el-input-icon-color:var(--el-text-color-placeholder);--el-input-placeholder-color:var(--el-text-color-placeholder);--el-input-hover-border-color:var(--el-border-color-hover);--el-input-clear-hover-color:var(--el-text-color-secondary);--el-input-focus-border-color:var(--el-color-primary);--el-input-width:100%;--el-input-height:var(--el-component-size);box-sizing:border-box;display:inline-flex;font-size:var(--el-font-size-base);line-height:var(--el-input-height);position:relative;vertical-align:middle;width:var(--el-input-width)}.el-input::-webkit-scrollbar{width:6px;z-index:11}.el-input::-webkit-scrollbar:horizontal{height:6px}.el-input::-webkit-scrollbar-thumb{background:var(--el-text-color-disabled);border-radius:5px;width:6px}.el-input::-webkit-scrollbar-corner,.el-input::-webkit-scrollbar-track{background:var(--el-fill-color-blank)}.el-input::-webkit-scrollbar-track-piece{background:var(--el-fill-color-blank);width:6px}.el-input .el-input__clear,.el-input .el-input__password{color:var(--el-input-icon-color);cursor:pointer;font-size:14px}.el-input .el-input__clear:hover,.el-input .el-input__password:hover{color:var(--el-input-clear-hover-color)}.el-input .el-input__count{align-items:center;color:var(--el-color-info);display:inline-flex;font-size:12px;height:100%}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);display:inline-block;line-height:normal;padding-left:8px}.el-input__wrapper{align-items:center;background-color:var(--el-input-bg-color,var(--el-fill-color-blank));background-image:none;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;cursor:text;display:inline-flex;flex-grow:1;justify-content:center;padding:1px 11px;transform:translateZ(0);transition:var(--el-transition-box-shadow)}.el-input__wrapper:hover{box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-input__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input{--el-input-inner-height:calc(var(--el-input-height, 32px) - 2px)}.el-input__inner{-webkit-appearance:none;background:none;border:none;box-sizing:border-box;color:var(--el-input-text-color,var(--el-text-color-regular));flex-grow:1;font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);outline:none;padding:0;width:100%}.el-input__inner:focus{outline:none}.el-input__inner::-moz-placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner::placeholder{color:var(--el-input-placeholder-color,var(--el-text-color-placeholder))}.el-input__inner[type=password]::-ms-reveal{display:none}.el-input__inner[type=number]{line-height:1}.el-input__prefix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:inline-flex;flex-shrink:0;flex-wrap:nowrap;height:100%;line-height:var(--el-input-inner-height);pointer-events:none;text-align:center;transition:all var(--el-transition-duration);white-space:nowrap}.el-input__prefix-inner{align-items:center;display:inline-flex;justify-content:center;pointer-events:all}.el-input__prefix-inner>:last-child{margin-right:8px}.el-input__prefix-inner>:first-child,.el-input__prefix-inner>:first-child.el-input__icon{margin-left:0}.el-input__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:inline-flex;flex-shrink:0;flex-wrap:nowrap;height:100%;line-height:var(--el-input-inner-height);pointer-events:none;text-align:center;transition:all var(--el-transition-duration);white-space:nowrap}.el-input__suffix-inner{align-items:center;display:inline-flex;justify-content:center;pointer-events:all}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{align-items:center;display:flex;height:inherit;justify-content:center;line-height:inherit;margin-left:8px;transition:all var(--el-transition-duration)}.el-input__validateIcon{pointer-events:none}.el-input.is-active .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-color, ) inset}.el-input.is-disabled{cursor:not-allowed}.el-input.is-disabled .el-input__wrapper{background-color:var(--el-disabled-bg-color);box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;cursor:not-allowed;pointer-events:none}.el-input.is-disabled .el-input__inner{color:var(--el-disabled-text-color);-webkit-text-fill-color:var(--el-disabled-text-color);cursor:not-allowed}.el-input.is-disabled .el-input__inner::-moz-placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__inner::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-exceed .el-input__wrapper{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-input.is-exceed .el-input__suffix .el-input__count{color:var(--el-color-danger)}.el-input--large{--el-input-height:var(--el-component-size-large);font-size:14px}.el-input--large .el-input__wrapper{padding:1px 15px}.el-input--large{--el-input-inner-height:calc(var(--el-input-height, 40px) - 2px)}.el-input--small{--el-input-height:var(--el-component-size-small);font-size:12px}.el-input--small .el-input__wrapper{padding:1px 7px}.el-input--small{--el-input-inner-height:calc(var(--el-input-height, 24px) - 2px)}.el-input-group{align-items:stretch;display:inline-flex;width:100%}.el-input-group__append,.el-input-group__prepend{align-items:center;background-color:var(--el-fill-color-light);border-radius:var(--el-input-border-radius);color:var(--el-color-info);display:inline-flex;justify-content:center;min-height:100%;padding:0 20px;position:relative;white-space:nowrap}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-button,.el-input-group__append .el-select,.el-input-group__prepend .el-button,.el-input-group__prepend .el-select{display:inline-block;margin:0 -20px}.el-input-group__append button.el-button,.el-input-group__append button.el-button:hover,.el-input-group__append div.el-select .el-select__wrapper,.el-input-group__append div.el-select:hover .el-select__wrapper,.el-input-group__prepend button.el-button,.el-input-group__prepend button.el-button:hover,.el-input-group__prepend div.el-select .el-select__wrapper,.el-input-group__prepend div.el-select:hover .el-select__wrapper{background-color:transparent;border-color:transparent;color:inherit}.el-input-group__append .el-button,.el-input-group__append .el-input,.el-input-group__prepend .el-button,.el-input-group__prepend .el-input{font-size:inherit}.el-input-group__prepend{border-bottom-right-radius:0;border-right:0;border-top-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group__append{border-left:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-group--prepend>.el-input__wrapper,.el-input-group__append{border-bottom-left-radius:0;border-top-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{border-bottom-right-radius:0;border-top-right-radius:0;box-shadow:1px 0 0 0 var(--el-input-border-color) inset,0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset}.el-input-group--append>.el-input__wrapper{border-bottom-right-radius:0;border-top-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{border-bottom-left-radius:0;border-top-left-radius:0;box-shadow:0 1px 0 0 var(--el-input-border-color) inset,0 -1px 0 0 var(--el-input-border-color) inset,-1px 0 0 0 var(--el-input-border-color) inset}.el-input-hidden{display:none!important}.el-input-number{display:inline-flex;line-height:30px;position:relative;vertical-align:middle;width:150px}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;line-height:1;text-align:center}.el-input-number .el-input__inner::-webkit-inner-spin-button,.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number__decrease,.el-input-number__increase{align-items:center;background:var(--el-fill-color-light);bottom:1px;color:var(--el-text-color-regular);cursor:pointer;display:flex;font-size:13px;height:auto;justify-content:center;position:absolute;top:1px;-webkit-user-select:none;-moz-user-select:none;user-select:none;width:32px;z-index:1}.el-input-number__decrease:hover,.el-input-number__increase:hover{color:var(--el-color-primary)}.el-input-number__decrease:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color,var(--el-color-primary)) inset}.el-input-number__decrease.is-disabled,.el-input-number__increase.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-left:var(--el-border);border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;right:1px}.el-input-number__decrease{border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);border-right:var(--el-border);left:1px}.el-input-number.is-disabled .el-input-number__decrease,.el-input-number.is-disabled .el-input-number__increase{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__decrease:hover,.el-input-number.is-disabled .el-input-number__increase:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{line-height:38px;width:180px}.el-input-number--large .el-input-number__decrease,.el-input-number--large .el-input-number__increase{font-size:14px;width:40px}.el-input-number--large.is-controls-right .el-input--large .el-input__wrapper{padding-right:47px}.el-input-number--large .el-input--large .el-input__wrapper{padding-left:47px;padding-right:47px}.el-input-number--small{line-height:22px;width:120px}.el-input-number--small .el-input-number__decrease,.el-input-number--small .el-input-number__increase{font-size:12px;width:24px}.el-input-number--small.is-controls-right .el-input--small .el-input__wrapper{padding-right:31px}.el-input-number--small .el-input--small .el-input__wrapper{padding-left:31px;padding-right:31px}.el-input-number--small .el-input-number__decrease [class*=el-icon],.el-input-number--small .el-input-number__increase [class*=el-icon]{transform:scale(.9)}.el-input-number.is-without-controls .el-input__wrapper{padding-left:15px;padding-right:15px}.el-input-number.is-controls-right .el-input__wrapper{padding-left:15px;padding-right:42px}.el-input-number.is-controls-right .el-input-number__decrease,.el-input-number.is-controls-right .el-input-number__increase{--el-input-number-controls-height:15px;height:var(--el-input-number-controls-height);line-height:var(--el-input-number-controls-height)}.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon],.el-input-number.is-controls-right .el-input-number__increase [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-bottom:var(--el-border);border-radius:0 var(--el-border-radius-base) 0 0;bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;border-right:none;left:auto;right:1px;top:auto}.el-input-number.is-controls-right[class*=large] [class*=decrease],.el-input-number.is-controls-right[class*=large] [class*=increase]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=decrease],.el-input-number.is-controls-right[class*=small] [class*=increase]{--el-input-number-controls-height:11px}.el-input-tag{--el-input-tag-border-color-hover:var(--el-border-color-hover);--el-input-tag-placeholder-color:var(--el-text-color-placeholder);--el-input-tag-disabled-color:var(--el-disabled-text-color);--el-input-tag-disabled-border:var(--el-disabled-border-color);--el-input-tag-font-size:var(--el-font-size-base);--el-input-tag-close-hover-color:var(--el-text-color-secondary);--el-input-tag-text-color:var(--el-text-color-regular);--el-input-tag-input-focus-border-color:var(--el-color-primary);--el-input-tag-width:100%;--el-input-tag-mini-height:var(--el-component-size);--el-input-tag-gap:6px;--el-input-tag-padding:4px;--el-input-tag-inner-padding:8px;--el-input-tag-line-height:24px;align-items:center;background-color:var(--el-fill-color-blank);border-radius:var(--el-border-radius-base);box-shadow:0 0 0 1px var(--el-border-color) inset;box-sizing:border-box;cursor:pointer;display:flex;font-size:var(--el-input-tag-font-size);line-height:var(--el-input-tag-line-height);min-height:var(--el-input-tag-mini-height);padding:var(--el-input-tag-padding);transform:translateZ(0);transition:var(--el-transition-duration);width:var(--el-input-tag-width)}.el-input-tag.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-input-tag.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-input-tag.is-disabled{background-color:var(--el-fill-color-light);cursor:not-allowed;pointer-events:none}.el-input-tag.is-disabled,.el-input-tag.is-disabled:hover{box-shadow:0 0 0 1px var(--el-input-tag-disabled-border) inset}.el-input-tag.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-input-tag.is-disabled .el-input-tag__inner .el-input-tag__input,.el-input-tag.is-disabled .el-input-tag__inner .el-tag{cursor:not-allowed}.el-input-tag__prefix,.el-input-tag__suffix{align-items:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:flex;flex-shrink:0;padding:0 var(--el-input-tag-inner-padding)}.el-input-tag__suffix{gap:8px}.el-input-tag__inner{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:var(--el-input-tag-gap);max-width:100%;min-width:0;position:relative}.el-input-tag__inner.is-left-space{margin-left:var(--el-input-tag-inner-padding)}.el-input-tag__inner.is-right-space{margin-right:var(--el-input-tag-inner-padding)}.el-input-tag__inner.is-draggable .el-tag{cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-input-tag__drop-indicator{background-color:var(--el-color-primary);height:var(--el-input-tag-line-height);position:absolute;top:0;width:1px}.el-input-tag__inner .el-tag{border-color:transparent;cursor:pointer;max-width:100%}.el-input-tag__inner .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-input-tag__inner .el-tag .el-tag__content{line-height:normal;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-input-tag__input-wrapper{flex:1}.el-input-tag__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-input-tag-text-color);font-family:inherit;font-size:inherit;line-height:inherit;outline:none;padding:0;width:100%}.el-input-tag__input::-moz-placeholder{color:var(--el-input-tag-placeholder-color)}.el-input-tag__input::placeholder{color:var(--el-input-tag-placeholder-color)}.el-input-tag__input-calculator{left:0;max-width:100%;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:pre}.el-input-tag--large{--el-input-tag-gap:6px;--el-input-tag-padding:8px;--el-input-tag-padding-left:8px;--el-input-tag-font-size:14px}.el-input-tag--small{--el-input-tag-gap:4px;--el-input-tag-padding:2px;--el-input-tag-padding-left:6px;--el-input-tag-font-size:12px;--el-input-tag-line-height:20px;--el-input-tag-mini-height:var(--el-component-size-small)}.el-link{--el-link-font-size:var(--el-font-size-base);--el-link-font-weight:var(--el-font-weight-primary);--el-link-text-color:var(--el-text-color-regular);--el-link-hover-text-color:var(--el-color-primary);--el-link-disabled-text-color:var(--el-text-color-placeholder);align-items:center;color:var(--el-link-text-color);cursor:pointer;display:inline-flex;flex-direction:row;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);justify-content:center;outline:none;padding:0;position:relative;text-decoration:none;vertical-align:middle}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link.is-underline:hover:after{border-bottom:1px solid var(--el-link-hover-text-color);bottom:0;content:"";height:0;left:0;position:absolute;right:0}.el-link.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link.el-link--default:after{border-color:var(--el-link-hover-text-color)}.el-link__inner{align-items:center;display:inline-flex;justify-content:center}.el-link.el-link--primary{--el-link-text-color:var(--el-color-primary);--el-link-hover-text-color:var(--el-color-primary-light-3);--el-link-disabled-text-color:var(--el-color-primary-light-5)}.el-link.el-link--primary.is-underline:hover:after,.el-link.el-link--primary:after{border-color:var(--el-link-text-color)}.el-link.el-link--success{--el-link-text-color:var(--el-color-success);--el-link-hover-text-color:var(--el-color-success-light-3);--el-link-disabled-text-color:var(--el-color-success-light-5)}.el-link.el-link--success.is-underline:hover:after,.el-link.el-link--success:after{border-color:var(--el-link-text-color)}.el-link.el-link--warning{--el-link-text-color:var(--el-color-warning);--el-link-hover-text-color:var(--el-color-warning-light-3);--el-link-disabled-text-color:var(--el-color-warning-light-5)}.el-link.el-link--warning.is-underline:hover:after,.el-link.el-link--warning:after{border-color:var(--el-link-text-color)}.el-link.el-link--danger{--el-link-text-color:var(--el-color-danger);--el-link-hover-text-color:var(--el-color-danger-light-3);--el-link-disabled-text-color:var(--el-color-danger-light-5)}.el-link.el-link--danger.is-underline:hover:after,.el-link.el-link--danger:after{border-color:var(--el-link-text-color)}.el-link.el-link--error{--el-link-text-color:var(--el-color-error);--el-link-hover-text-color:var(--el-color-error-light-3);--el-link-disabled-text-color:var(--el-color-error-light-5)}.el-link.el-link--error.is-underline:hover:after,.el-link.el-link--error:after{border-color:var(--el-link-text-color)}.el-link.el-link--info{--el-link-text-color:var(--el-color-info);--el-link-hover-text-color:var(--el-color-info-light-3);--el-link-disabled-text-color:var(--el-color-info-light-5)}.el-link.el-link--info.is-underline:hover:after,.el-link.el-link--info:after{border-color:var(--el-link-text-color)}:root{--el-loading-spinner-size:42px;--el-loading-fullscreen-spinner-size:50px}.el-loading-parent--relative{position:relative!important}.el-loading-parent--hidden{overflow:hidden!important}.el-loading-mask{background-color:var(--el-mask-color);bottom:0;left:0;margin:0;position:absolute;right:0;top:0;transition:opacity var(--el-transition-duration);z-index:2000}.el-loading-mask.is-fullscreen{position:fixed}.el-loading-mask.is-fullscreen .el-loading-spinner{margin-top:calc((0px - var(--el-loading-fullscreen-spinner-size))/2)}.el-loading-mask.is-fullscreen .el-loading-spinner .circular{height:var(--el-loading-fullscreen-spinner-size);width:var(--el-loading-fullscreen-spinner-size)}.el-loading-spinner{margin-top:calc((0px - var(--el-loading-spinner-size))/2);position:absolute;text-align:center;top:50%;width:100%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);font-size:14px;margin:3px 0}.el-loading-spinner .circular{animation:loading-rotate 2s linear infinite;display:inline;height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size)}.el-loading-spinner .path{animation:loading-dash 1.5s ease-in-out infinite;stroke-dasharray:90,150;stroke-dashoffset:0;stroke-width:2;stroke:var(--el-color-primary);stroke-linecap:round}.el-loading-spinner i{color:var(--el-color-primary)}.el-loading-fade-enter-from,.el-loading-fade-leave-to{opacity:0}@keyframes loading-rotate{to{transform:rotate(1turn)}}@keyframes loading-dash{0%{stroke-dasharray:1,200;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-40px}to{stroke-dasharray:90,150;stroke-dashoffset:-120px}}.el-main{--el-main-padding:20px;box-sizing:border-box;display:block;flex:1;flex-basis:auto;overflow:auto;padding:var(--el-main-padding)}:root{--el-menu-active-color:var(--el-color-primary);--el-menu-text-color:var(--el-text-color-primary);--el-menu-hover-text-color:var(--el-color-primary);--el-menu-bg-color:var(--el-fill-color-blank);--el-menu-hover-bg-color:var(--el-color-primary-light-9);--el-menu-item-height:56px;--el-menu-sub-item-height:calc(var(--el-menu-item-height) - 6px);--el-menu-horizontal-height:60px;--el-menu-horizontal-sub-item-height:36px;--el-menu-item-font-size:var(--el-font-size-base);--el-menu-item-hover-fill:var(--el-color-primary-light-9);--el-menu-border-color:var(--el-border-color);--el-menu-base-level-padding:20px;--el-menu-level-padding:20px;--el-menu-icon-width:24px}.el-menu{background-color:var(--el-menu-bg-color);border-right:1px solid var(--el-menu-border-color);box-sizing:border-box;list-style:none;margin:0;padding-left:0;position:relative}.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-sub-menu__title{padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level)*var(--el-menu-level-padding));white-space:nowrap}.el-menu:not(.el-menu--collapse) .el-sub-menu__title{padding-right:calc(var(--el-menu-base-level-padding) + var(--el-menu-icon-width))}.el-menu--horizontal{border-right:none;display:flex;flex-wrap:nowrap;height:var(--el-menu-horizontal-height)}.el-menu--horizontal.el-menu--popup-container{height:unset}.el-menu--horizontal.el-menu{border-bottom:1px solid var(--el-menu-border-color)}.el-menu--horizontal>.el-menu-item{align-items:center;border-bottom:2px solid transparent;color:var(--el-menu-text-color);display:inline-flex;height:100%;justify-content:center;margin:0}.el-menu--horizontal>.el-menu-item a,.el-menu--horizontal>.el-menu-item a:hover{color:inherit}.el-menu--horizontal>.el-sub-menu:focus,.el-menu--horizontal>.el-sub-menu:hover{outline:none}.el-menu--horizontal>.el-sub-menu:hover .el-sub-menu__title{color:var(--el-menu-hover-text-color)}.el-menu--horizontal>.el-sub-menu.is-active .el-sub-menu__title{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title{border-bottom:2px solid transparent;color:var(--el-menu-text-color);height:100%}.el-menu--horizontal>.el-sub-menu .el-sub-menu__title:hover{background-color:var(--el-menu-bg-color)}.el-menu--horizontal .el-menu .el-menu-item,.el-menu--horizontal .el-menu .el-sub-menu__title{align-items:center;background-color:var(--el-menu-bg-color);color:var(--el-menu-text-color);display:flex;height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);padding:0 10px}.el-menu--horizontal .el-menu .el-sub-menu__title{padding-right:40px}.el-menu--horizontal .el-menu .el-menu-item.is-active,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):focus,.el-menu--horizontal .el-menu-item:not(.is-disabled):hover{background-color:var(--el-menu-hover-bg-color);color:var(--el-menu-hover-text-color);outline:none}.el-menu--horizontal>.el-menu-item.is-active{border-bottom:2px solid var(--el-menu-active-color);color:var(--el-menu-active-color)!important}.el-menu--collapse{width:calc(var(--el-menu-icon-width) + var(--el-menu-base-level-padding)*2)}.el-menu--collapse>.el-menu-item [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{margin:0;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .el-sub-menu__icon-arrow{display:none}.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span{display:inline-block;height:0;overflow:hidden;visibility:hidden;width:0}.el-menu--collapse>.el-menu-item.is-active i{color:inherit}.el-menu--collapse .el-menu .el-sub-menu{min-width:200px}.el-menu--collapse .el-sub-menu.is-active .el-sub-menu__title{color:var(--el-menu-active-color)}.el-menu--popup{border:none;border-radius:var(--el-border-radius-small);box-shadow:var(--el-box-shadow-light);min-width:200px;padding:5px 0;z-index:100}.el-menu .el-icon{flex-shrink:0}.el-menu-item{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:focus,.el-menu-item:hover{outline:none}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-menu-item [class^=el-icon]{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-menu-item.is-active{color:var(--el-menu-active-color)}.el-menu-item.is-active i{color:inherit}.el-menu-item .el-menu-tooltip__trigger{align-items:center;box-sizing:border-box;display:inline-flex;height:100%;left:0;padding:0 var(--el-menu-base-level-padding);position:absolute;top:0;width:100%}.el-sub-menu{list-style:none;margin:0;padding-left:0}.el-sub-menu__title{align-items:center;box-sizing:border-box;color:var(--el-menu-text-color);cursor:pointer;display:flex;font-size:var(--el-menu-item-font-size);height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);list-style:none;padding:0 var(--el-menu-base-level-padding);position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);white-space:nowrap}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:focus,.el-sub-menu__title:hover{outline:none}.el-sub-menu__title.is-disabled{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu__title:hover{background-color:var(--el-menu-hover-bg-color)}.el-sub-menu .el-menu{border:none}.el-sub-menu .el-menu-item{height:var(--el-menu-sub-item-height);line-height:var(--el-menu-sub-item-height)}.el-sub-menu__hide-arrow .el-sub-menu__icon-arrow{display:none!important}.el-sub-menu.is-active .el-sub-menu__title{border-bottom-color:var(--el-menu-active-color)}.el-sub-menu.is-disabled .el-menu-item,.el-sub-menu.is-disabled .el-sub-menu__title{background:none!important;cursor:not-allowed;opacity:.25}.el-sub-menu .el-icon{font-size:18px;margin-right:5px;text-align:center;vertical-align:middle;width:var(--el-menu-icon-width)}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{font-size:12px;margin-right:0;margin-top:-6px;position:absolute;right:var(--el-menu-base-level-padding);top:50%;transition:transform var(--el-transition-duration);width:inherit}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{color:var(--el-text-color-secondary);font-size:12px;line-height:normal;padding:7px 0 7px var(--el-menu-base-level-padding)}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{opacity:0;transition:var(--el-transition-duration-fast)}.el-message-box{--el-messagebox-title-color:var(--el-text-color-primary);--el-messagebox-width:420px;--el-messagebox-border-radius:4px;--el-messagebox-box-shadow:var(--el-box-shadow);--el-messagebox-font-size:var(--el-font-size-large);--el-messagebox-content-font-size:var(--el-font-size-base);--el-messagebox-content-color:var(--el-text-color-regular);--el-messagebox-error-font-size:12px;--el-messagebox-padding-primary:12px;--el-messagebox-font-line-height:var(--el-font-line-height-primary);backface-visibility:hidden;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);box-shadow:var(--el-messagebox-box-shadow);box-sizing:border-box;display:inline-block;font-size:var(--el-messagebox-font-size);max-width:var(--el-messagebox-width);overflow:hidden;overflow-wrap:break-word;padding:var(--el-messagebox-padding-primary);position:relative;text-align:left;vertical-align:middle;width:100%}.el-message-box:focus{outline:none!important}.el-overlay.is-message-box .el-overlay-message-box{bottom:0;left:0;overflow:auto;padding:16px;position:fixed;right:0;text-align:center;top:0}.el-overlay.is-message-box .el-overlay-message-box:after{content:"";display:inline-block;height:100%;vertical-align:middle;width:0}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-message-box__header{padding-bottom:var(--el-messagebox-padding-primary)}.el-message-box__header.show-close{padding-right:calc(var(--el-messagebox-padding-primary) + var(--el-message-close-size, 16px))}.el-message-box__title{color:var(--el-messagebox-title-color);font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__headerbtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:40px;outline:none;padding:0;position:absolute;right:0;top:0;width:40px}.el-message-box__headerbtn .el-message-box__close{color:var(--el-color-info);font-size:inherit}.el-message-box__headerbtn:focus .el-message-box__close,.el-message-box__headerbtn:hover .el-message-box__close{color:var(--el-color-primary)}.el-message-box__content{color:var(--el-messagebox-content-color);font-size:var(--el-messagebox-content-font-size)}.el-message-box__container{align-items:center;display:flex;gap:12px}.el-message-box__input{padding-top:12px}.el-message-box__input div.invalid>input,.el-message-box__input div.invalid>input:focus{border-color:var(--el-color-error)}.el-message-box__status{font-size:24px}.el-message-box__status.el-message-box-icon--success{--el-messagebox-color:var(--el-color-success);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--info{--el-messagebox-color:var(--el-color-info);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--warning{--el-messagebox-color:var(--el-color-warning);color:var(--el-messagebox-color)}.el-message-box__status.el-message-box-icon--error{--el-messagebox-color:var(--el-color-error);color:var(--el-messagebox-color)}.el-message-box__message{margin:0}.el-message-box__message p{line-height:var(--el-messagebox-font-line-height);margin:0}.el-message-box__errormsg{color:var(--el-color-error);font-size:var(--el-messagebox-error-font-size);line-height:var(--el-messagebox-font-line-height)}.el-message-box__btns{align-items:center;display:flex;flex-wrap:wrap;justify-content:flex-end;padding-top:var(--el-messagebox-padding-primary)}.el-message-box--center .el-message-box__title{align-items:center;display:flex;gap:6px;justify-content:center}.el-message-box--center .el-message-box__status{font-size:inherit}.el-message-box--center .el-message-box__btns,.el-message-box--center .el-message-box__container{justify-content:center}.fade-in-linear-enter-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration)}.fade-in-linear-leave-active .el-overlay-message-box{animation:msgbox-fade-in var(--el-transition-duration) reverse}@keyframes msgbox-fade-in{0%{opacity:0;transform:translate3d(0,-20px,0)}to{opacity:1;transform:translateZ(0)}}.el-message{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-border-color-lighter);--el-message-padding:11px 15px;--el-message-close-size:16px;--el-message-close-icon-color:var(--el-text-color-placeholder);--el-message-close-hover-color:var(--el-text-color-secondary);align-items:center;background-color:var(--el-message-bg-color);border-color:var(--el-message-border-color);border-radius:var(--el-border-radius-base);border-style:var(--el-border-style);border-width:var(--el-border-width);box-sizing:border-box;display:flex;gap:8px;left:50%;max-width:calc(100% - 32px);padding:var(--el-message-padding);position:fixed;top:20px;transform:translateX(-50%);transition:opacity var(--el-transition-duration),transform .4s,top .4s;width:-moz-fit-content;width:fit-content}.el-message.is-center{justify-content:center}.el-message.is-plain{background-color:var(--el-bg-color-overlay);border-color:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-message p{margin:0}.el-message--success{--el-message-bg-color:var(--el-color-success-light-9);--el-message-border-color:var(--el-color-success-light-8);--el-message-text-color:var(--el-color-success)}.el-message--success .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--success{color:var(--el-message-text-color)}.el-message--info{--el-message-bg-color:var(--el-color-info-light-9);--el-message-border-color:var(--el-color-info-light-8);--el-message-text-color:var(--el-color-info)}.el-message--info .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--info{color:var(--el-message-text-color)}.el-message--warning{--el-message-bg-color:var(--el-color-warning-light-9);--el-message-border-color:var(--el-color-warning-light-8);--el-message-text-color:var(--el-color-warning)}.el-message--warning .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--warning{color:var(--el-message-text-color)}.el-message--error{--el-message-bg-color:var(--el-color-error-light-9);--el-message-border-color:var(--el-color-error-light-8);--el-message-text-color:var(--el-color-error)}.el-message--error .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--error{color:var(--el-message-text-color)}.el-message .el-message__badge{position:absolute;right:-8px;top:-8px}.el-message__content{font-size:14px;line-height:1;padding:0}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{color:var(--el-message-close-icon-color);cursor:pointer;font-size:var(--el-message-close-size)}.el-message .el-message__closeBtn:focus{outline-width:0}.el-message .el-message__closeBtn:hover{color:var(--el-message-close-hover-color)}.el-message-fade-enter-from,.el-message-fade-leave-to{opacity:0;transform:translate(-50%,-100%)}.el-notification{--el-notification-width:330px;--el-notification-padding:14px 26px 14px 13px;--el-notification-radius:8px;--el-notification-shadow:var(--el-box-shadow-light);--el-notification-border-color:var(--el-border-color-lighter);--el-notification-icon-size:24px;--el-notification-close-font-size:var(--el-message-close-size,16px);--el-notification-group-margin-left:13px;--el-notification-group-margin-right:8px;--el-notification-content-font-size:var(--el-font-size-base);--el-notification-content-color:var(--el-text-color-regular);--el-notification-title-font-size:16px;--el-notification-title-color:var(--el-text-color-primary);--el-notification-close-color:var(--el-text-color-secondary);--el-notification-close-hover-color:var(--el-text-color-regular);background-color:var(--el-bg-color-overlay);border:1px solid var(--el-notification-border-color);border-radius:var(--el-notification-radius);box-shadow:var(--el-notification-shadow);box-sizing:border-box;display:flex;overflow:hidden;overflow-wrap:break-word;padding:var(--el-notification-padding);position:fixed;transition:opacity var(--el-transition-duration),transform var(--el-transition-duration),left var(--el-transition-duration),right var(--el-transition-duration),top .4s,bottom var(--el-transition-duration);width:var(--el-notification-width);z-index:9999}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{flex:1;margin-left:var(--el-notification-group-margin-left);margin-right:var(--el-notification-group-margin-right);min-width:0}.el-notification__title{color:var(--el-notification-title-color);font-size:var(--el-notification-title-font-size);font-weight:bold;line-height:var(--el-notification-icon-size);margin:0}.el-notification__content{color:var(--el-notification-content-color);font-size:var(--el-notification-content-font-size);line-height:24px;margin:6px 0 0}.el-notification__content p{margin:0}.el-notification .el-notification__icon{flex-shrink:0;font-size:var(--el-notification-icon-size);height:var(--el-notification-icon-size);width:var(--el-notification-icon-size)}.el-notification .el-notification__closeBtn{color:var(--el-notification-close-color);cursor:pointer;font-size:var(--el-notification-close-font-size);position:absolute;right:15px;top:18px}.el-notification .el-notification__closeBtn:hover{color:var(--el-notification-close-hover-color)}.el-notification .el-notification--success{--el-notification-icon-color:var(--el-color-success);color:var(--el-notification-icon-color)}.el-notification .el-notification--info{--el-notification-icon-color:var(--el-color-info);color:var(--el-notification-icon-color)}.el-notification .el-notification--warning{--el-notification-icon-color:var(--el-color-warning);color:var(--el-notification-icon-color)}.el-notification .el-notification--error{--el-notification-icon-color:var(--el-color-error);color:var(--el-notification-icon-color)}.el-notification-fade-enter-from.right{right:0;transform:translateX(100%)}.el-notification-fade-enter-from.left{left:0;transform:translateX(-100%)}.el-notification-fade-leave-to{opacity:0}.el-overlay{background-color:var(--el-overlay-color-lighter);bottom:0;height:100%;left:0;overflow:auto;position:fixed;right:0;top:0;z-index:2000}.el-overlay .el-overlay-root{height:0}.el-page-header.is-contentful .el-page-header__main{border-top:1px solid var(--el-border-color-light);margin-top:16px}.el-page-header__header{align-items:center;display:flex;justify-content:space-between;line-height:24px}.el-page-header__left{align-items:center;display:flex;margin-right:40px;position:relative}.el-page-header__back{align-items:center;cursor:pointer;display:flex}.el-page-header__left .el-divider--vertical{margin:0 16px}.el-page-header__icon{align-items:center;display:flex;font-size:16px;margin-right:10px}.el-page-header__icon .el-icon{font-size:inherit}.el-page-header__title{font-size:14px;font-weight:500}.el-page-header__content{color:var(--el-text-color-primary);font-size:18px}.el-page-header__breadcrumb{margin-bottom:16px}.el-pagination{--el-pagination-font-size:14px;--el-pagination-bg-color:var(--el-fill-color-blank);--el-pagination-text-color:var(--el-text-color-primary);--el-pagination-border-radius:2px;--el-pagination-button-color:var(--el-text-color-primary);--el-pagination-button-width:32px;--el-pagination-button-height:32px;--el-pagination-button-disabled-color:var(--el-text-color-placeholder);--el-pagination-button-disabled-bg-color:var(--el-fill-color-blank);--el-pagination-button-bg-color:var(--el-fill-color);--el-pagination-hover-color:var(--el-color-primary);--el-pagination-font-size-small:12px;--el-pagination-button-width-small:24px;--el-pagination-button-height-small:24px;--el-pagination-button-width-large:40px;--el-pagination-button-height-large:40px;--el-pagination-item-gap:16px;align-items:center;color:var(--el-pagination-text-color);display:flex;font-size:var(--el-pagination-font-size);font-weight:normal;white-space:nowrap}.el-pagination .el-input__inner{-moz-appearance:textfield;text-align:center}.el-pagination .el-select{width:128px}.el-pagination button{align-items:center;background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;display:flex;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pagination button *{pointer-events:none}.el-pagination button:focus{outline:none}.el-pagination button.is-active,.el-pagination button:hover{color:var(--el-pagination-hover-color)}.el-pagination button.is-active{cursor:default;font-weight:bold}.el-pagination button.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:bold}.el-pagination button.is-disabled,.el-pagination button:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pagination button:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next .el-icon,.el-pagination .btn-prev .el-icon{display:block;font-size:12px;font-weight:bold;width:inherit}.el-pagination>.is-first{margin-left:0!important}.el-pagination>.is-last{margin-right:0!important}.el-pagination .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination__sizes,.el-pagination__total{color:var(--el-text-color-regular);font-weight:normal;margin-left:var(--el-pagination-item-gap)}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{align-items:center;color:var(--el-text-color-regular);display:flex;font-weight:normal;margin-left:var(--el-pagination-item-gap)}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{box-sizing:border-box;text-align:center}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button,.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{align-items:center;display:flex;flex:1;justify-content:flex-end}.el-pagination.is-background .btn-next,.el-pagination.is-background .btn-prev,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-next.is-active,.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .el-pager li.is-active{background-color:var(--el-color-primary);color:var(--el-color-white)}.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-prev:disabled,.el-pagination.is-background .el-pager li.is-disabled,.el-pagination.is-background .el-pager li:disabled{background-color:var(--el-disabled-bg-color);color:var(--el-text-color-placeholder)}.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active{background-color:var(--el-fill-color-dark);color:var(--el-text-color-secondary)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-next,.el-pagination--small .btn-prev,.el-pagination--small .el-pager li{font-size:var(--el-pagination-font-size-small);height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small button,.el-pagination--small span:not([class*=suffix]){font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-next,.el-pagination--large .btn-prev,.el-pagination--large .el-pager li{height:var(--el-pagination-button-height-large);line-height:var(--el-pagination-button-height-large);min-width:var(--el-pagination-button-width-large)}.el-pagination--large .el-select .el-input{width:160px}.el-pager{font-size:0;list-style:none;margin:0;padding:0;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-pager,.el-pager li{align-items:center;display:flex}.el-pager li{background:var(--el-pagination-bg-color);border:none;border-radius:var(--el-pagination-border-radius);box-sizing:border-box;color:var(--el-pagination-button-color);cursor:pointer;font-size:var(--el-pagination-font-size);height:var(--el-pagination-button-height);justify-content:center;line-height:var(--el-pagination-button-height);min-width:var(--el-pagination-button-width);padding:0 4px;text-align:center}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li.is-active,.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{cursor:default;font-weight:bold}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:bold}.el-pager li.is-disabled,.el-pager li:disabled{background-color:var(--el-pagination-button-disabled-bg-color);color:var(--el-pagination-button-disabled-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-popconfirm__main{align-items:center;display:flex}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{margin-top:8px;text-align:right}.el-popover{--el-popover-bg-color:var(--el-bg-color-overlay);--el-popover-font-size:var(--el-font-size-base);--el-popover-border-color:var(--el-border-color-lighter);--el-popover-padding:12px;--el-popover-padding-large:18px 20px;--el-popover-title-font-size:16px;--el-popover-title-text-color:var(--el-text-color-primary);--el-popover-border-radius:4px}.el-popover.el-popper{background:var(--el-popover-bg-color);border:1px solid var(--el-popover-border-color);border-radius:var(--el-popover-border-radius);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;color:var(--el-text-color-regular);font-size:var(--el-popover-font-size);line-height:1.4;min-width:150px;overflow-wrap:break-word;padding:var(--el-popover-padding);z-index:var(--el-index-popper)}.el-popover.el-popper--plain{padding:var(--el-popover-padding-large)}.el-popover__title{color:var(--el-popover-title-text-color);font-size:var(--el-popover-title-font-size);line-height:1;margin-bottom:12px}.el-popover__reference:focus:hover,.el-popover__reference:focus:not(.focusing){outline-width:0}.el-popover.el-popper.is-dark{--el-popover-bg-color:var(--el-text-color-primary);--el-popover-border-color:var(--el-text-color-primary);--el-popover-title-text-color:var(--el-bg-color);color:var(--el-bg-color)}.el-popover.el-popper:focus,.el-popover.el-popper:focus:active{outline-width:0}.el-progress{align-items:center;display:flex;line-height:1;position:relative}.el-progress__text{color:var(--el-text-color-regular);font-size:14px;line-height:1;margin-left:5px;min-width:50px}.el-progress__text i{display:block;vertical-align:middle}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{left:0;margin:0;position:absolute;text-align:center;top:50%;transform:translateY(-50%);width:100%}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{display:inline-block;vertical-align:middle}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{display:block;margin-right:0;padding-right:0}.el-progress--text-inside .el-progress-bar{margin-right:0;padding-right:0}.el-progress.is-success .el-progress-bar__inner{background-color:var(--el-color-success)}.el-progress.is-success .el-progress__text{color:var(--el-color-success)}.el-progress.is-warning .el-progress-bar__inner{background-color:var(--el-color-warning)}.el-progress.is-warning .el-progress__text{color:var(--el-color-warning)}.el-progress.is-exception .el-progress-bar__inner{background-color:var(--el-color-danger)}.el-progress.is-exception .el-progress__text{color:var(--el-color-danger)}.el-progress-bar{box-sizing:border-box;flex-grow:1}.el-progress-bar__outer{background-color:var(--el-border-color-lighter);border-radius:100px;height:6px;overflow:hidden;position:relative;vertical-align:middle}.el-progress-bar__inner{background-color:var(--el-color-primary);border-radius:100px;height:100%;left:0;line-height:1;position:absolute;text-align:right;top:0;transition:width .6s ease;white-space:nowrap}.el-progress-bar__inner:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-progress-bar__inner--indeterminate{animation:indeterminate 3s infinite;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,rgba(0,0,0,.1) 25%,transparent 0,transparent 50%,rgba(0,0,0,.1) 0,rgba(0,0,0,.1) 75%,transparent 0,transparent);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:striped-flow 3s linear infinite}.el-progress-bar__innerText{color:#ffffff;display:inline-block;font-size:12px;margin:0 5px;vertical-align:middle}@keyframes progress{0%{background-position:0 0}to{background-position:32px 0}}@keyframes indeterminate{0%{left:-100%}to{left:100%}}@keyframes striped-flow{0%{background-position:-100%}to{background-position:100%}}.el-radio-button{--el-radio-button-checked-bg-color:var(--el-color-primary);--el-radio-button-checked-text-color:var(--el-color-white);--el-radio-button-checked-border-color:var(--el-color-primary);--el-radio-button-disabled-checked-fill:var(--el-border-color-extra-light)}.el-radio-button,.el-radio-button__inner{display:inline-block;outline:none;position:relative}.el-radio-button__inner{-webkit-appearance:none;background:var(--el-button-bg-color,var(--el-fill-color-blank));border:var(--el-border);border-left:0;border-radius:0;box-sizing:border-box;color:var(--el-button-text-color,var(--el-text-color-regular));cursor:pointer;font-size:var(--el-font-size-base);font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));line-height:1;margin:0;padding:8px 15px;text-align:center;transition:var(--el-transition-all);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;white-space:nowrap}.el-radio-button__inner.is-round{padding:8px 15px}.el-radio-button__inner:hover{color:var(--el-color-primary)}.el-radio-button__inner [class*=el-icon-]{line-height:.9}.el-radio-button__inner [class*=el-icon-]+span{margin-left:5px}.el-radio-button:first-child .el-radio-button__inner{border-left:var(--el-border);border-radius:var(--el-border-radius-base) 0 0 var(--el-border-radius-base);box-shadow:none!important}.el-radio-button.is-active .el-radio-button__original-radio:not(:disabled)+.el-radio-button__inner{background-color:var(--el-radio-button-checked-bg-color,var(--el-color-primary));border-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));box-shadow:-1px 0 0 0 var(--el-radio-button-checked-border-color,var(--el-color-primary));color:var(--el-radio-button-checked-text-color,var(--el-color-white))}.el-radio-button__original-radio{opacity:0;outline:none;position:absolute;z-index:-1}.el-radio-button__original-radio:focus-visible+.el-radio-button__inner{border-left:var(--el-border);border-left-color:var(--el-radio-button-checked-border-color,var(--el-color-primary));border-radius:var(--el-border-radius-base);box-shadow:none;outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2}.el-radio-button__original-radio:disabled+.el-radio-button__inner{background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));background-image:none;border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none;color:var(--el-disabled-text-color);cursor:not-allowed}.el-radio-button__original-radio:disabled:checked+.el-radio-button__inner{background-color:var(--el-radio-button-disabled-checked-fill)}.el-radio-button:last-child .el-radio-button__inner{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0}.el-radio-button:first-child:last-child .el-radio-button__inner{border-radius:var(--el-border-radius-base)}.el-radio-button--large .el-radio-button__inner{border-radius:0;font-size:var(--el-font-size-base);padding:12px 19px}.el-radio-button--large .el-radio-button__inner.is-round{padding:12px 19px}.el-radio-button--small .el-radio-button__inner{border-radius:0;font-size:12px;padding:5px 11px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-radio-group{align-items:center;display:inline-flex;flex-wrap:wrap;font-size:0}.el-radio{--el-radio-font-size:var(--el-font-size-base);--el-radio-text-color:var(--el-text-color-regular);--el-radio-font-weight:var(--el-font-weight-primary);--el-radio-input-height:14px;--el-radio-input-width:14px;--el-radio-input-border-radius:var(--el-border-radius-circle);--el-radio-input-bg-color:var(--el-fill-color-blank);--el-radio-input-border:var(--el-border);--el-radio-input-border-color:var(--el-border-color);--el-radio-input-border-color-hover:var(--el-color-primary);align-items:center;color:var(--el-radio-text-color);cursor:pointer;display:inline-flex;font-size:var(--el-font-size-base);font-weight:var(--el-radio-font-weight);height:32px;margin-right:30px;outline:none;position:relative;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border:var(--el-border);border-radius:var(--el-border-radius-base);box-sizing:border-box;padding:0 15px 0 9px}.el-radio.is-bordered.is-checked{border-color:var(--el-color-primary)}.el-radio.is-bordered.is-disabled{border-color:var(--el-border-color-lighter);cursor:not-allowed}.el-radio.is-bordered.el-radio--large{border-radius:var(--el-border-radius-base);padding:0 19px 0 11px}.el-radio.is-bordered.el-radio--large .el-radio__label{font-size:var(--el-font-size-base)}.el-radio.is-bordered.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.is-bordered.el-radio--small{border-radius:var(--el-border-radius-base);padding:0 11px 0 7px}.el-radio.is-bordered.el-radio--small .el-radio__label{font-size:12px}.el-radio.is-bordered.el-radio--small .el-radio__inner{height:12px;width:12px}.el-radio:last-child{margin-right:0}.el-radio__input{cursor:pointer;display:inline-flex;outline:none;position:relative;vertical-align:middle;white-space:nowrap}.el-radio__input.is-disabled .el-radio__inner{border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled .el-radio__inner,.el-radio__input.is-disabled .el-radio__inner:after{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner+.el-radio__label{cursor:not-allowed}.el-radio__input.is-disabled.is-checked .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color)}.el-radio__input.is-disabled.is-checked .el-radio__inner:after{background-color:var(--el-text-color-placeholder)}.el-radio__input.is-disabled+span.el-radio__label{color:var(--el-text-color-placeholder);cursor:not-allowed}.el-radio__input.is-checked .el-radio__inner{background:var(--el-color-primary);border-color:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{transform:translate(-50%,-50%) scale(1)}.el-radio__input.is-checked+.el-radio__label{color:var(--el-color-primary)}.el-radio__input.is-focus .el-radio__inner{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner{background-color:var(--el-radio-input-bg-color);border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);box-sizing:border-box;cursor:pointer;display:inline-block;height:var(--el-radio-input-height);position:relative;width:var(--el-radio-input-width)}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{background-color:var(--el-color-white);border-radius:var(--el-radio-input-border-radius);content:"";height:4px;left:50%;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);transition:transform .15s ease-in;width:4px}.el-radio__original{bottom:0;left:0;margin:0;opacity:0;outline:none;position:absolute;right:0;top:0;z-index:-1}.el-radio__original:focus-visible+.el-radio__inner{border-radius:var(--el-radio-input-border-radius);outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px}.el-radio:focus:not(:focus-visible):not(.is-focus):not(:active):not(.is-disabled) .el-radio__inner{box-shadow:0 0 2px 2px var(--el-radio-input-border-color-hover)}.el-radio__label{font-size:var(--el-radio-font-size);padding-left:8px}.el-radio.el-radio--large .el-radio__label{font-size:14px}.el-radio.el-radio--large .el-radio__inner{height:14px;width:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{height:12px;width:12px}.el-rate{--el-rate-height:20px;--el-rate-font-size:var(--el-font-size-base);--el-rate-icon-size:18px;--el-rate-icon-margin:6px;--el-rate-void-color:var(--el-border-color-darker);--el-rate-fill-color:#f7ba2a;--el-rate-disabled-void-color:var(--el-fill-color);--el-rate-text-color:var(--el-text-color-primary);align-items:center;display:inline-flex;height:32px}.el-rate:active,.el-rate:focus{outline:none}.el-rate__item{color:var(--el-rate-void-color);cursor:pointer;display:inline-block;font-size:0;line-height:normal;position:relative;vertical-align:middle}.el-rate .el-rate__icon{display:inline-block;font-size:var(--el-rate-icon-size);margin-right:var(--el-rate-icon-margin);position:relative;transition:var(--el-transition-duration)}.el-rate .el-rate__icon.hover{transform:scale(1.15)}.el-rate .el-rate__icon .path2{left:0;position:absolute;top:0}.el-rate .el-rate__icon.is-active{color:var(--el-rate-fill-color)}.el-rate__decimal{color:var(--el-rate-fill-color);display:inline-block;overflow:hidden}.el-rate__decimal,.el-rate__decimal--box{left:0;position:absolute;top:0}.el-rate__text{color:var(--el-rate-text-color);font-size:var(--el-rate-font-size);vertical-align:middle}.el-rate--large{height:40px}.el-rate--small{height:24px}.el-rate--small .el-rate__icon{font-size:14px}.el-rate.is-disabled .el-rate__item{color:var(--el-rate-disabled-void-color);cursor:auto}.el-result{--el-result-padding:40px 30px;--el-result-icon-font-size:64px;--el-result-title-font-size:20px;--el-result-title-margin-top:20px;--el-result-subtitle-margin-top:10px;--el-result-extra-margin-top:30px;align-items:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:var(--el-result-padding);text-align:center}.el-result__icon svg{height:var(--el-result-icon-font-size);width:var(--el-result-icon-font-size)}.el-result__title{margin-top:var(--el-result-title-margin-top)}.el-result__title p{color:var(--el-text-color-primary);font-size:var(--el-result-title-font-size);line-height:1.3;margin:0}.el-result__subtitle{margin-top:var(--el-result-subtitle-margin-top)}.el-result__subtitle p{color:var(--el-text-color-regular);font-size:var(--el-font-size-base);line-height:1.3;margin:0}.el-result__extra{margin-top:var(--el-result-extra-margin-top)}.el-result .icon-primary{--el-result-color:var(--el-color-primary);color:var(--el-result-color)}.el-result .icon-success{--el-result-color:var(--el-color-success);color:var(--el-result-color)}.el-result .icon-warning{--el-result-color:var(--el-color-warning);color:var(--el-result-color)}.el-result .icon-danger{--el-result-color:var(--el-color-danger);color:var(--el-result-color)}.el-result .icon-error{--el-result-color:var(--el-color-error);color:var(--el-result-color)}.el-result .icon-info{--el-result-color:var(--el-color-info);color:var(--el-result-color)}.el-row{box-sizing:border-box;display:flex;flex-wrap:wrap;position:relative}.el-row.is-justify-center{justify-content:center}.el-row.is-justify-end{justify-content:flex-end}.el-row.is-justify-space-between{justify-content:space-between}.el-row.is-justify-space-around{justify-content:space-around}.el-row.is-justify-space-evenly{justify-content:space-evenly}.el-row.is-align-top{align-items:flex-start}.el-row.is-align-middle{align-items:center}.el-row.is-align-bottom{align-items:flex-end}.el-scrollbar{--el-scrollbar-opacity:0.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:0.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;overflow:hidden;position:relative}.el-scrollbar__wrap{height:100%;overflow:auto}.el-scrollbar__wrap--hidden-default{scrollbar-width:none}.el-scrollbar__wrap--hidden-default::-webkit-scrollbar{display:none}.el-scrollbar__thumb{background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));border-radius:inherit;cursor:pointer;display:block;height:0;opacity:var(--el-scrollbar-opacity,.3);position:relative;transition:var(--el-transition-duration) background-color;width:0}.el-scrollbar__thumb:hover{background-color:var(--el-scrollbar-hover-bg-color,var(--el-text-color-secondary));opacity:var(--el-scrollbar-hover-opacity,.5)}.el-scrollbar__bar{border-radius:4px;bottom:2px;position:absolute;right:2px;z-index:1}.el-scrollbar__bar.is-vertical{top:2px;width:6px}.el-scrollbar__bar.is-vertical>div{width:100%}.el-scrollbar__bar.is-horizontal{height:6px;left:2px}.el-scrollbar__bar.is-horizontal>div{height:100%}.el-scrollbar-fade-enter-active{transition:opacity .34s ease-out}.el-scrollbar-fade-leave-active{transition:opacity .12s ease-out}.el-scrollbar-fade-enter-from,.el-scrollbar-fade-leave-active{opacity:0}.el-select-dropdown{border-radius:var(--el-border-radius-base);box-sizing:border-box;z-index:calc(var(--el-index-top) + 1)}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__empty,.el-select-dropdown__loading{color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0;text-align:center}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:6px 0}.el-select-dropdown__list.el-vl__window{margin:6px 0;padding:0}.el-select-dropdown__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-select-dropdown__item{box-sizing:border-box;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-base);height:34px;line-height:34px;overflow:hidden;padding:0 32px 0 20px;position:relative;text-overflow:ellipsis;white-space:nowrap}.el-select-dropdown__item.is-hovering{background-color:var(--el-fill-color-light)}.el-select-dropdown__item.is-selected{color:var(--el-color-primary);font-weight:bold}.el-select-dropdown__item.is-disabled{background-color:unset;color:var(--el-text-color-placeholder);cursor:not-allowed}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{background-color:var(--el-color-primary);background-position:50%;background-repeat:no-repeat;border-right:none;border-top:none;content:"";height:12px;mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;mask-size:100% 100%;-webkit-mask:url("data:image/svg+xml;utf8,%3Csvg class='icon' width='200' height='200' viewBox='0 0 1024 1024' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath fill='currentColor' d='M406.656 706.944L195.84 496.256a32 32 0 10-45.248 45.248l256 256 512-512a32 32 0 00-45.248-45.248L406.592 706.944z'%3E%3C/path%3E%3C/svg%3E") no-repeat;-webkit-mask-size:100% 100%;position:absolute;right:20px;top:50%;transform:translateY(-50%);width:12px}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-disabled:after{background-color:var(--el-text-color-placeholder)}.el-select-group{margin:0;padding:0}.el-select-group__wrap{list-style:none;margin:0;padding:0;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);font-size:12px;line-height:34px;overflow:hidden;padding:0 20px;text-overflow:ellipsis;white-space:nowrap}.el-select-group .el-select-dropdown__item{padding-left:20px}.el-select{--el-select-border-color-hover:var(--el-border-color-hover);--el-select-disabled-color:var(--el-disabled-text-color);--el-select-disabled-border:var(--el-disabled-border-color);--el-select-font-size:var(--el-font-size-base);--el-select-close-hover-color:var(--el-text-color-secondary);--el-select-input-color:var(--el-text-color-placeholder);--el-select-multiple-input-color:var(--el-text-color-regular);--el-select-input-focus-border-color:var(--el-color-primary);--el-select-input-font-size:14px;--el-select-width:100%;display:inline-block;position:relative;vertical-align:middle;width:var(--el-select-width)}.el-select__wrapper{align-items:center;background-color:var(--el-fill-color-blank);border-radius:var(--el-border-radius-base);box-shadow:0 0 0 1px var(--el-border-color) inset;box-sizing:border-box;cursor:pointer;display:flex;font-size:14px;gap:6px;line-height:24px;min-height:32px;padding:4px 12px;position:relative;text-align:left;transform:translateZ(0);transition:var(--el-transition-duration)}.el-select__wrapper.is-filterable{cursor:text}.el-select__wrapper.is-focused{box-shadow:0 0 0 1px var(--el-color-primary) inset}.el-select__wrapper.is-hovering:not(.is-focused){box-shadow:0 0 0 1px var(--el-border-color-hover) inset}.el-select__wrapper.is-disabled{background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);cursor:not-allowed;pointer-events:none}.el-select__wrapper.is-disabled,.el-select__wrapper.is-disabled:hover{box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.el-select__wrapper.is-disabled.is-focus{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-select__wrapper.is-disabled .el-select__selected-item{color:var(--el-select-disabled-color)}.el-select__wrapper.is-disabled .el-select__caret,.el-select__wrapper.is-disabled .el-tag{cursor:not-allowed}.el-select__prefix,.el-select__suffix{align-items:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));display:flex;flex-shrink:0;gap:6px}.el-select__caret{color:var(--el-select-input-color);cursor:pointer;font-size:var(--el-select-input-font-size);transform:rotate(0deg);transition:var(--el-transition-duration)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__selection{align-items:center;display:flex;flex:1;flex-wrap:wrap;gap:6px;min-width:0;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{border-color:transparent;cursor:pointer}.el-select__selection .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-select__selection .el-tag .el-tag__content{min-width:0}.el-select__selected-item{display:flex;flex-wrap:wrap;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-select__tags-text{line-height:normal}.el-select__placeholder,.el-select__tags-text{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-select__placeholder{color:var(--el-input-text-color,var(--el-text-color-regular));position:absolute;top:50%;transform:translateY(-50%);width:100%;z-index:-1}.el-select__placeholder.is-transparent{color:var(--el-text-color-placeholder);-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-select__popper.el-popper,.el-select__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-select__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;position:absolute;z-index:-1}.el-select__input{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:transparent;border:none;color:var(--el-select-multiple-input-color);font-family:inherit;font-size:inherit;height:24px;outline:none;padding:0;width:100%}.el-select__input.is-disabled{cursor:not-allowed}.el-select__input-calculator{left:0;max-width:100%;overflow:hidden;position:absolute;top:0;visibility:hidden;white-space:pre}.el-select--large .el-select__wrapper{font-size:14px;gap:6px;line-height:24px;min-height:40px;padding:8px 16px}.el-select--large .el-select__selection{gap:6px}.el-select--large .el-select__selection.is-near{margin-left:-8px}.el-select--large .el-select__prefix,.el-select--large .el-select__suffix{gap:6px}.el-select--large .el-select__input{height:24px}.el-select--small .el-select__wrapper{font-size:12px;gap:4px;line-height:20px;min-height:24px;padding:2px 8px}.el-select--small .el-select__selection{gap:4px}.el-select--small .el-select__selection.is-near{margin-left:-6px}.el-select--small .el-select__prefix,.el-select--small .el-select__suffix{gap:4px}.el-select--small .el-select__input{height:20px}.el-skeleton{--el-skeleton-circle-size:var(--el-avatar-size)}.el-skeleton__item{background:var(--el-skeleton-color);border-radius:var(--el-border-radius-base);display:inline-block;height:16px;width:100%}.el-skeleton__circle{border-radius:50%;height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size);width:var(--el-skeleton-circle-size)}.el-skeleton__button{border-radius:4px;height:40px;width:64px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{height:var(--el-font-size-small);width:100%}.el-skeleton__caption{height:var(--el-font-size-extra-small)}.el-skeleton__h1{height:var(--el-font-size-extra-large)}.el-skeleton__h3{height:var(--el-font-size-large)}.el-skeleton__h5{height:var(--el-font-size-medium)}.el-skeleton__image{align-items:center;border-radius:0;display:flex;justify-content:center;width:unset}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;height:22%;width:22%}.el-skeleton{--el-skeleton-color:var(--el-fill-color);--el-skeleton-to-color:var(--el-fill-color-darker)}@keyframes el-skeleton-loading{0%{background-position:100% 50%}to{background-position:0 50%}}.el-skeleton{width:100%}.el-skeleton__first-line,.el-skeleton__paragraph{background:var(--el-skeleton-color);height:16px;margin-top:16px}.el-skeleton.is-animated .el-skeleton__item{animation:el-skeleton-loading 1.4s ease infinite;background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%}.el-slider{--el-slider-main-bg-color:var(--el-color-primary);--el-slider-runway-bg-color:var(--el-border-color-light);--el-slider-stop-bg-color:var(--el-color-white);--el-slider-disabled-color:var(--el-text-color-placeholder);--el-slider-border-radius:3px;--el-slider-height:6px;--el-slider-button-size:20px;--el-slider-button-wrapper-size:36px;--el-slider-button-wrapper-offset:-15px;align-items:center;display:flex;height:32px;width:100%}.el-slider__runway{background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;height:var(--el-slider-height);position:relative}.el-slider__runway.show-input{margin-right:30px;width:auto}.el-slider__runway.is-disabled{cursor:default}.el-slider__runway.is-disabled .el-slider__bar{background-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button{border-color:var(--el-slider-disabled-color)}.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper:hover{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{transform:scale(1)}.el-slider__runway.is-disabled .el-slider__button.dragging,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button:hover{cursor:not-allowed}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{background-color:var(--el-slider-main-bg-color);border-bottom-left-radius:var(--el-slider-border-radius);border-top-left-radius:var(--el-slider-border-radius);height:var(--el-slider-height);position:absolute}.el-slider__button-wrapper{background-color:transparent;height:var(--el-slider-button-wrapper-size);line-height:normal;outline:none;position:absolute;text-align:center;top:var(--el-slider-button-wrapper-offset);transform:translateX(-50%);-webkit-user-select:none;-moz-user-select:none;user-select:none;width:var(--el-slider-button-wrapper-size);z-index:1}.el-slider__button-wrapper:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-slider__button-wrapper.hover,.el-slider__button-wrapper:hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{background-color:var(--el-color-white);border:2px solid var(--el-slider-main-bg-color);border-radius:50%;box-sizing:border-box;display:inline-block;height:var(--el-slider-button-size);transition:var(--el-transition-duration-fast);-webkit-user-select:none;-moz-user-select:none;user-select:none;vertical-align:middle;width:var(--el-slider-button-size)}.el-slider__button.dragging,.el-slider__button.hover,.el-slider__button:hover{transform:scale(1.2)}.el-slider__button.hover,.el-slider__button:hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{background-color:var(--el-slider-stop-bg-color);border-radius:var(--el-border-radius-circle);height:var(--el-slider-height);position:absolute;transform:translateX(-50%);width:var(--el-slider-height)}.el-slider__marks{height:100%;left:12px;top:0;width:18px}.el-slider__marks-text{color:var(--el-color-info);font-size:14px;margin-top:15px;position:absolute;transform:translateX(-50%);white-space:pre}.el-slider.is-vertical{display:inline-flex;flex:0;height:100%;position:relative;width:auto}.el-slider.is-vertical .el-slider__runway{height:100%;margin:0 16px;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__bar{border-radius:0 0 3px 3px;height:auto;width:var(--el-slider-height)}.el-slider.is-vertical .el-slider__button-wrapper{left:var(--el-slider-button-wrapper-offset);top:auto;transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{left:15px;margin-top:0;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-space{display:inline-flex;vertical-align:top}.el-space__item{display:flex;flex-wrap:wrap}.el-space__item>*{flex:1}.el-space--vertical{flex-direction:column}.el-time-spinner{white-space:nowrap;width:100%}.el-spinner{display:inline-block;vertical-align:middle}.el-spinner-inner{animation:rotate 2s linear infinite;height:50px;width:50px}.el-spinner-inner .path{stroke:var(--el-border-color-lighter);stroke-linecap:round;animation:dash 1.5s ease-in-out infinite}@keyframes rotate{to{transform:rotate(1turn)}}@keyframes dash{0%{stroke-dasharray:1,150;stroke-dashoffset:0}50%{stroke-dasharray:90,150;stroke-dashoffset:-35}to{stroke-dasharray:90,150;stroke-dashoffset:-124}}.el-step{flex-shrink:1;position:relative}.el-step:last-of-type .el-step__line{display:none}.el-step:last-of-type.is-flex{flex-basis:auto!important;flex-grow:0;flex-shrink:0}.el-step:last-of-type .el-step__description,.el-step:last-of-type .el-step__main{padding-right:0}.el-step__head{position:relative;width:100%}.el-step__head.is-process{border-color:var(--el-text-color-primary);color:var(--el-text-color-primary)}.el-step__head.is-wait{border-color:var(--el-text-color-placeholder);color:var(--el-text-color-placeholder)}.el-step__head.is-success{border-color:var(--el-color-success);color:var(--el-color-success)}.el-step__head.is-error{border-color:var(--el-color-danger);color:var(--el-color-danger)}.el-step__head.is-finish{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-step__icon{align-items:center;background:var(--el-bg-color);box-sizing:border-box;display:inline-flex;font-size:14px;height:24px;justify-content:center;position:relative;transition:.15s ease-out;width:24px;z-index:1}.el-step__icon.is-text{border:2px solid;border-color:inherit;border-radius:50%}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{color:inherit;display:inline-block;font-weight:bold;line-height:1;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:normal}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{background-color:var(--el-text-color-placeholder);border-color:inherit;position:absolute}.el-step__line-inner{border:1px solid;border-color:inherit;box-sizing:border-box;display:block;height:0;transition:.15s ease-out;width:0}.el-step__main{text-align:left;white-space:normal}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{color:var(--el-text-color-primary);font-weight:bold}.el-step__title.is-wait{color:var(--el-text-color-placeholder)}.el-step__title.is-success{color:var(--el-color-success)}.el-step__title.is-error{color:var(--el-color-danger)}.el-step__title.is-finish{color:var(--el-color-primary)}.el-step__description{font-size:12px;font-weight:normal;line-height:20px;margin-top:-5px;padding-right:10%}.el-step__description.is-process{color:var(--el-text-color-primary)}.el-step__description.is-wait{color:var(--el-text-color-placeholder)}.el-step__description.is-success{color:var(--el-color-success)}.el-step__description.is-error{color:var(--el-color-danger)}.el-step__description.is-finish{color:var(--el-color-primary)}.el-step.is-horizontal{display:inline-block}.el-step.is-horizontal .el-step__line{height:2px;left:0;right:0;top:11px}.el-step.is-vertical{display:flex}.el-step.is-vertical .el-step__head{flex-grow:0;width:24px}.el-step.is-vertical .el-step__main{flex-grow:1;padding-left:10px}.el-step.is-vertical .el-step__title{line-height:24px;padding-bottom:8px}.el-step.is-vertical .el-step__line{bottom:0;left:11px;top:0;width:2px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-center .el-step__head,.el-step.is-center .el-step__main{text-align:center}.el-step.is-center .el-step__description{padding-left:20%;padding-right:20%}.el-step.is-center .el-step__line{left:50%;right:-50%}.el-step.is-simple{align-items:center;display:flex}.el-step.is-simple .el-step__head{font-size:0;padding-right:10px;width:auto}.el-step.is-simple .el-step__icon{background:transparent;font-size:12px;height:16px;width:16px}.el-step.is-simple .el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:18px}.el-step.is-simple .el-step__icon-inner.is-status{transform:scale(.8) translateY(1px)}.el-step.is-simple .el-step__main{align-items:stretch;display:flex;flex-grow:1;position:relative}.el-step.is-simple .el-step__title{font-size:16px;line-height:20px}.el-step.is-simple:not(:last-of-type) .el-step__title{max-width:50%;overflow-wrap:break-word}.el-step.is-simple .el-step__arrow{align-items:center;display:flex;flex-grow:1;justify-content:center}.el-step.is-simple .el-step__arrow:after,.el-step.is-simple .el-step__arrow:before{background:var(--el-text-color-placeholder);content:"";display:inline-block;height:15px;position:absolute;width:1px}.el-step.is-simple .el-step__arrow:before{transform:rotate(-45deg) translateY(-4px);transform-origin:0 0}.el-step.is-simple .el-step__arrow:after{transform:rotate(45deg) translateY(4px);transform-origin:100% 100%}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-steps{display:flex}.el-steps--simple{background:var(--el-fill-color-light);border-radius:4px;padding:13px 8%}.el-steps--horizontal{white-space:nowrap}.el-steps--vertical{flex-flow:column;height:100%}.el-switch{--el-switch-on-color:var(--el-color-primary);--el-switch-off-color:var(--el-border-color);align-items:center;display:inline-flex;font-size:14px;height:32px;line-height:20px;position:relative;vertical-align:middle}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{color:var(--el-text-color-primary);cursor:pointer;display:inline-block;font-size:14px;font-weight:500;height:20px;transition:var(--el-transition-duration-fast);vertical-align:middle}.el-switch__label.is-active{color:var(--el-color-primary)}.el-switch__label--left{margin-right:10px}.el-switch__label--right{margin-left:10px}.el-switch__label *{display:inline-block;font-size:14px;line-height:1}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{height:0;margin:0;opacity:0;position:absolute;width:0}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{align-items:center;background:var(--el-switch-off-color);border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));border-radius:10px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:20px;min-width:40px;outline:none;position:relative;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration)}.el-switch__core .el-switch__inner{align-items:center;display:flex;height:16px;justify-content:center;overflow:hidden;padding:0 4px 0 18px;transition:all var(--el-transition-duration);width:100%}.el-switch__core .el-switch__inner .is-icon,.el-switch__core .el-switch__inner .is-text{color:var(--el-color-white);font-size:12px;overflow:hidden;text-overflow:ellipsis;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.el-switch__core .el-switch__action{align-items:center;background-color:var(--el-color-white);border-radius:var(--el-border-radius-circle);color:var(--el-switch-off-color);display:flex;height:16px;justify-content:center;left:1px;position:absolute;transition:all var(--el-transition-duration);width:16px}.el-switch.is-checked .el-switch__core{background-color:var(--el-switch-on-color);border-color:var(--el-switch-border-color,var(--el-switch-on-color))}.el-switch.is-checked .el-switch__core .el-switch__action{color:var(--el-switch-on-color);left:calc(100% - 17px)}.el-switch.is-checked .el-switch__core .el-switch__inner{padding:0 18px 0 4px}.el-switch.is-disabled{opacity:.6}.el-switch--wide .el-switch__label.el-switch__label--left span{left:10px}.el-switch--wide .el-switch__label.el-switch__label--right span{right:10px}.el-switch .label-fade-enter-from,.el-switch .label-fade-leave-active{opacity:0}.el-switch--large{font-size:14px;height:40px;line-height:24px}.el-switch--large .el-switch__label{font-size:14px;height:24px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;height:24px;min-width:50px}.el-switch--large .el-switch__core .el-switch__inner{height:20px;padding:0 6px 0 22px}.el-switch--large .el-switch__core .el-switch__action{height:20px;width:20px}.el-switch--large.is-checked .el-switch__core .el-switch__action{left:calc(100% - 21px)}.el-switch--large.is-checked .el-switch__core .el-switch__inner{padding:0 22px 0 6px}.el-switch--small{font-size:12px;height:24px;line-height:16px}.el-switch--small .el-switch__label{font-size:12px;height:16px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;height:16px;min-width:30px}.el-switch--small .el-switch__core .el-switch__inner{height:12px;padding:0 2px 0 14px}.el-switch--small .el-switch__core .el-switch__action{height:12px;width:12px}.el-switch--small.is-checked .el-switch__core .el-switch__action{left:calc(100% - 13px)}.el-switch--small.is-checked .el-switch__core .el-switch__inner{padding:0 14px 0 2px}.el-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{background-color:#ffffff;border:1px solid var(--el-border-color-lighter);border-radius:2px;box-shadow:var(--el-box-shadow-light);box-sizing:border-box}.el-table-filter__list{list-style:none;margin:0;min-width:100px;padding:5px 0}.el-table-filter__list-item{cursor:pointer;font-size:var(--el-font-size-base);line-height:36px;padding:0 10px}.el-table-filter__list-item:hover{background-color:var(--el-color-primary-light-9);color:var(--el-color-primary)}.el-table-filter__list-item.is-active{background-color:var(--el-color-primary);color:#ffffff}.el-table-filter__content{min-width:100px}.el-table-filter__bottom{border-top:1px solid var(--el-border-color-lighter);padding:8px}.el-table-filter__bottom button{background:transparent;border:none;color:var(--el-text-color-regular);cursor:pointer;font-size:var(--el-font-size-small);padding:0 3px}.el-table-filter__bottom button:hover{color:var(--el-color-primary)}.el-table-filter__bottom button:focus{outline:none}.el-table-filter__bottom button.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-table-filter__wrap{max-height:280px}.el-table-filter__checkbox-group{padding:10px}.el-table-filter__checkbox-group label.el-checkbox{align-items:center;display:flex;height:unset;margin-bottom:12px;margin-left:5px;margin-right:5px}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0}.el-table{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,0.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,0.15);--el-table-index:var(--el-index-normal);background-color:var(--el-table-bg-color);box-sizing:border-box;color:var(--el-table-text-color);font-size:var(--el-font-size-base);height:-moz-fit-content;height:fit-content;max-width:100%;overflow:hidden;position:relative;width:100%}.el-table__inner-wrapper{display:flex;flex-direction:column;height:100%;position:relative}.el-table__inner-wrapper:before{bottom:0;height:1px;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell,.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell{border-bottom-color:transparent}.el-table__empty-block{align-items:center;display:flex;justify-content:center;left:0;min-height:60px;position:sticky;text-align:center;width:100%}.el-table__empty-text{color:var(--el-text-color-secondary);line-height:60px;width:50%}.el-table__expand-column .cell{padding:0;text-align:center;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-table__expand-icon{color:var(--el-text-color-regular);cursor:pointer;font-size:12px;height:20px;position:relative;transition:transform var(--el-transition-duration-fast) ease-in-out}.el-table__expand-icon--expanded{transform:rotate(90deg)}.el-table__expand-icon>.el-icon{font-size:12px}.el-table__expanded-cell{background-color:var(--el-table-expanded-cell-bg-color)}.el-table__expanded-cell[class*=cell]{padding:20px 50px}.el-table__expanded-cell:hover{background-color:transparent!important}.el-table__placeholder{display:inline-block;width:20px}.el-table__append-wrapper{overflow:hidden}.el-table--fit{border-bottom:0;border-right:0}.el-table--fit .el-table__cell.gutter{border-right-width:1px}.el-table--fit .el-table__inner-wrapper:before{width:100%}.el-table thead{color:var(--el-table-header-text-color)}.el-table thead th{font-weight:600}.el-table thead.is-group th.el-table__cell{background:var(--el-fill-color-light)}.el-table .el-table__cell{box-sizing:border-box;min-width:0;padding:8px 0;position:relative;text-align:left;text-overflow:ellipsis;vertical-align:middle;z-index:var(--el-table-index)}.el-table .el-table__cell.is-center{text-align:center}.el-table .el-table__cell.is-right{text-align:right}.el-table .el-table__cell.gutter{border-bottom-width:0;border-right-width:0;padding:0;width:15px}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;line-height:23px;overflow:hidden;overflow-wrap:break-word;padding:0 12px;text-overflow:ellipsis;white-space:normal}.el-table .cell.el-tooltip{min-width:50px;white-space:nowrap}.el-table--large{font-size:var(--el-font-size-base)}.el-table--large .el-table__cell{padding:12px 0}.el-table--large .cell{padding:0 16px}.el-table--default{font-size:var(--el-font-size-base)}.el-table--default .el-table__cell{padding:8px 0}.el-table--default .cell{padding:0 12px}.el-table--small{font-size:var(--el-font-size-extra-small)}.el-table--small .el-table__cell{padding:4px 0}.el-table--small .cell{padding:0 8px}.el-table tr{background-color:var(--el-table-tr-bg-color)}.el-table tr input[type=checkbox]{margin:0}.el-table td.el-table__cell,.el-table th.el-table__cell.is-leaf{border-bottom:var(--el-table-border)}.el-table th.el-table__cell.is-sortable{cursor:pointer}.el-table th.el-table__cell{background-color:var(--el-table-header-bg-color)}.el-table th.el-table__cell>.cell.highlight{color:var(--el-color-primary)}.el-table th.el-table__cell.required>div:before{background:#ff4d51;border-radius:50%;content:"";display:inline-block;height:8px;margin-right:5px;vertical-align:middle;width:8px}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border .el-table__inner-wrapper:after,.el-table--border:after,.el-table--border:before,.el-table__inner-wrapper:before{background-color:var(--el-table-border-color);content:"";position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table--border .el-table__inner-wrapper:after{height:1px;left:0;top:0;width:100%;z-index:calc(var(--el-table-index) + 2)}.el-table--border:before{height:100%;left:0;top:-1px;width:1px}.el-table--border:after{height:100%;right:0;top:-1px;width:1px}.el-table--border .el-table__inner-wrapper{border-bottom:none;border-right:none}.el-table--border .el-table__footer-wrapper{flex-shrink:0;position:relative}.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table--border th.el-table__cell.gutter:last-of-type{border-bottom:var(--el-table-border);border-bottom-width:1px}.el-table--border th.el-table__cell{border-bottom:var(--el-table-border)}.el-table--hidden{visibility:hidden}.el-table__body-wrapper,.el-table__footer-wrapper,.el-table__header-wrapper{width:100%}.el-table__body-wrapper tr td.el-table-fixed-column--left,.el-table__body-wrapper tr td.el-table-fixed-column--right,.el-table__body-wrapper tr th.el-table-fixed-column--left,.el-table__body-wrapper tr th.el-table-fixed-column--right,.el-table__footer-wrapper tr td.el-table-fixed-column--left,.el-table__footer-wrapper tr td.el-table-fixed-column--right,.el-table__footer-wrapper tr th.el-table-fixed-column--left,.el-table__footer-wrapper tr th.el-table-fixed-column--right,.el-table__header-wrapper tr td.el-table-fixed-column--left,.el-table__header-wrapper tr td.el-table-fixed-column--right,.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background:inherit;position:sticky!important;z-index:calc(var(--el-table-index) + 1)}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{bottom:-1px;box-shadow:none;content:"";overflow-x:hidden;overflow-y:hidden;pointer-events:none;position:absolute;top:0;touch-action:none;width:10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-first-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-first-column:before{left:-10px}.el-table__body-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__body-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--left.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.is-last-column:before{box-shadow:none;right:-10px}.el-table__body-wrapper tr td.el-table__fixed-right-patch,.el-table__body-wrapper tr th.el-table__fixed-right-patch,.el-table__footer-wrapper tr td.el-table__fixed-right-patch,.el-table__footer-wrapper tr th.el-table__fixed-right-patch,.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch{background:#fff;position:sticky!important;right:0;z-index:calc(var(--el-table-index) + 1)}.el-table__header-wrapper{flex-shrink:0}.el-table__header-wrapper tr th.el-table-fixed-column--left,.el-table__header-wrapper tr th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body,.el-table__footer,.el-table__header{border-collapse:separate;table-layout:fixed}.el-table__header-wrapper{overflow:hidden}.el-table__header-wrapper tbody td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__footer-wrapper{flex-shrink:0;overflow:hidden}.el-table__footer-wrapper tfoot td.el-table__cell{background-color:var(--el-table-row-hover-bg-color);color:var(--el-table-text-color)}.el-table__body-wrapper .el-table-column--selection>.cell,.el-table__header-wrapper .el-table-column--selection>.cell{align-items:center;display:inline-flex;height:23px}.el-table__body-wrapper .el-table-column--selection .el-checkbox,.el-table__header-wrapper .el-table-column--selection .el-checkbox{height:unset}.el-table.is-scrolling-left .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-left.el-table--border .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:var(--el-table-border)}.el-table.is-scrolling-left th.el-table-fixed-column--left{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-right .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-right th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column.el-table__cell{border-right:none}.el-table.is-scrolling-middle .el-table-fixed-column--right.is-first-column:before{box-shadow:var(--el-table-fixed-right-column)}.el-table.is-scrolling-middle .el-table-fixed-column--left.is-last-column:before{box-shadow:var(--el-table-fixed-left-column)}.el-table.is-scrolling-none .el-table-fixed-column--left.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--left.is-last-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-first-column:before,.el-table.is-scrolling-none .el-table-fixed-column--right.is-last-column:before{box-shadow:none}.el-table.is-scrolling-none th.el-table-fixed-column--left,.el-table.is-scrolling-none th.el-table-fixed-column--right{background-color:var(--el-table-header-bg-color)}.el-table__body-wrapper{flex:1;overflow:hidden;position:relative}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{align-items:center;cursor:pointer;display:inline-flex;flex-direction:column;height:14px;overflow:initial;position:relative;vertical-align:middle;width:24px}.el-table .sort-caret{border:5px solid transparent;height:0;left:7px;position:absolute;width:0}.el-table .sort-caret.ascending{border-bottom-color:var(--el-text-color-placeholder);top:-5px}.el-table .sort-caret.descending{border-top-color:var(--el-text-color-placeholder);bottom:-3px}.el-table .ascending .sort-caret.ascending{border-bottom-color:var(--el-color-primary)}.el-table .descending .sort-caret.descending{border-top-color:var(--el-color-primary)}.el-table .hidden-columns{position:absolute;visibility:hidden;z-index:-1}.el-table--striped .el-table__body tr.el-table__row--striped td.el-table__cell{background:var(--el-fill-color-lighter)}.el-table--striped .el-table__body tr.el-table__row--striped.current-row td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table__body tr.hover-row.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped.current-row>td.el-table__cell,.el-table__body tr.hover-row.el-table__row--striped>td.el-table__cell,.el-table__body tr.hover-row>td.el-table__cell,.el-table__body tr>td.hover-cell{background-color:var(--el-table-row-hover-bg-color)}.el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-current-row-bg-color)}.el-table.el-table--scrollable-y .el-table__body-header{position:sticky;top:0;z-index:calc(var(--el-table-index) + 2)}.el-table.el-table--scrollable-y .el-table__body-footer{bottom:0;position:sticky;z-index:calc(var(--el-table-index) + 2)}.el-table__column-resize-proxy{border-left:var(--el-table-border);bottom:0;left:200px;position:absolute;top:0;width:0;z-index:calc(var(--el-table-index) + 9)}.el-table__column-filter-trigger{cursor:pointer;display:inline-block}.el-table__column-filter-trigger i{color:var(--el-color-info);font-size:14px;vertical-align:middle}.el-table__border-left-patch{height:100%;top:0;width:1px}.el-table__border-bottom-patch,.el-table__border-left-patch{background-color:var(--el-table-border-color);left:0;position:absolute;z-index:calc(var(--el-table-index) + 2)}.el-table__border-bottom-patch{height:1px}.el-table__border-right-patch{background-color:var(--el-table-border-color);height:100%;position:absolute;top:0;width:1px;z-index:calc(var(--el-table-index) + 2)}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s ease}.el-table--enable-row-hover .el-table__body tr:hover>td.el-table__cell{background-color:var(--el-table-row-hover-bg-color)}.el-table [class*=el-table__row--level] .el-table__expand-icon{display:inline-block;height:12px;line-height:12px;margin-right:8px;text-align:center;width:12px}.el-table .el-table.el-table--border .el-table__cell{border-right:var(--el-table-border)}.el-table:not(.el-table--border) .el-table__cell{border-right:none}.el-table:not(.el-table--border)>.el-table__inner-wrapper:after{content:none}.el-table-v2{--el-table-border-color:var(--el-border-color-lighter);--el-table-border:1px solid var(--el-table-border-color);--el-table-text-color:var(--el-text-color-regular);--el-table-header-text-color:var(--el-text-color-secondary);--el-table-row-hover-bg-color:var(--el-fill-color-light);--el-table-current-row-bg-color:var(--el-color-primary-light-9);--el-table-header-bg-color:var(--el-bg-color);--el-table-fixed-box-shadow:var(--el-box-shadow-light);--el-table-bg-color:var(--el-fill-color-blank);--el-table-tr-bg-color:var(--el-bg-color);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px rgba(0,0,0,0.15);--el-table-fixed-right-column:inset -10px 0 10px -10px rgba(0,0,0,0.15);--el-table-index:var(--el-index-normal);font-size:var(--el-font-size-base)}.el-table-v2 *{box-sizing:border-box}.el-table-v2__root{position:relative}.el-table-v2__root:hover .el-table-v2__main .el-virtual-scrollbar{opacity:1}.el-table-v2__main{background-color:var(--el-bg-color);display:flex;flex-direction:column-reverse;left:0;overflow:hidden;position:absolute;top:0}.el-table-v2__main .el-vl__horizontal,.el-table-v2__main .el-vl__vertical{z-index:2}.el-table-v2__left{background-color:var(--el-bg-color);box-shadow:2px 0 4px 0 rgba(0,0,0,.06);display:flex;flex-direction:column-reverse;left:0;overflow:hidden;position:absolute;top:0}.el-table-v2__left .el-virtual-scrollbar{opacity:0}.el-table-v2__left .el-vl__horizontal,.el-table-v2__left .el-vl__vertical{z-index:-1}.el-table-v2__right{background-color:var(--el-bg-color);box-shadow:-2px 0 4px 0 rgba(0,0,0,.06);display:flex;flex-direction:column-reverse;overflow:hidden;position:absolute;right:0;top:0}.el-table-v2__right .el-virtual-scrollbar{opacity:0}.el-table-v2__right .el-vl__horizontal,.el-table-v2__right .el-vl__vertical{z-index:-1}.el-table-v2__header-row,.el-table-v2__row{padding-inline-end:var(--el-table-scrollbar-size)}.el-table-v2__header-wrapper{overflow:hidden}.el-table-v2__header{overflow:hidden;position:relative}.el-table-v2__header .el-checkbox{z-index:0}.el-table-v2__footer{bottom:0;overflow:hidden;right:0}.el-table-v2__empty,.el-table-v2__footer,.el-table-v2__overlay{left:0;position:absolute}.el-table-v2__overlay{bottom:0;right:0;top:0;z-index:9999}.el-table-v2__header-row{border-bottom:var(--el-table-border);display:flex}.el-table-v2__header-cell{align-items:center;background-color:var(--el-table-header-bg-color);color:var(--el-table-header-text-color);display:flex;font-weight:bold;height:100%;overflow:hidden;padding:0 8px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-table-v2__header-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__header-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__header-cell.is-sortable{cursor:pointer}.el-table-v2__header-cell:hover .el-icon{display:block}.el-table-v2__sort-icon{display:none;opacity:.6;transition:opacity,display var(--el-transition-duration)}.el-table-v2__sort-icon.is-sorting{display:block;opacity:1}.el-table-v2__row{align-items:center;border-bottom:var(--el-table-border);display:flex;transition:background-color var(--el-transition-duration)}.el-table-v2__row.is-hovered,.el-table-v2__row:hover{background-color:var(--el-table-row-hover-bg-color)}.el-table-v2__row-cell{align-items:center;display:flex;height:100%;overflow:hidden;padding:0 8px}.el-table-v2__row-cell.is-align-center{justify-content:center;text-align:center}.el-table-v2__row-cell.is-align-right{justify-content:flex-end;text-align:right}.el-table-v2__expand-icon{cursor:pointer;margin:0 4px;-webkit-user-select:none;-moz-user-select:none;user-select:none}.el-table-v2__expand-icon svg{transition:transform var(--el-transition-duration)}.el-table-v2__expand-icon.is-expanded svg{transform:rotate(90deg)}.el-table-v2:not(.is-dynamic) .el-table-v2__cell-text{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-table-v2.is-dynamic .el-table-v2__row{align-items:stretch;overflow:hidden}.el-table-v2.is-dynamic .el-table-v2__row .el-table-v2__row-cell{overflow-wrap:break-word}.el-tabs{--el-tabs-header-height:40px;display:flex}.el-tabs__header{align-items:center;display:flex;justify-content:space-between;margin:0 0 15px;padding:0;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);bottom:0;height:2px;left:0;list-style:none;position:absolute;transition:width var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),transform var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);z-index:1}.el-tabs__new-tab{align-items:center;border:1px solid var(--el-border-color);border-radius:3px;color:var(--el-text-color-primary);cursor:pointer;display:flex;font-size:12px;height:20px;justify-content:center;line-height:20px;margin:10px 0 10px 10px;text-align:center;transition:all .15s;width:20px}.el-tabs__new-tab .is-icon-plus{height:inherit;transform:scale(.8);width:inherit}.el-tabs__new-tab .is-icon-plus svg{vertical-align:middle}.el-tabs__new-tab:hover{color:var(--el-color-primary)}.el-tabs__new-tab-vertical{margin-left:0}.el-tabs__nav-wrap{flex:1 auto;margin-bottom:-1px;overflow:hidden;position:relative}.el-tabs__nav-wrap:after{background-color:var(--el-border-color-light);bottom:0;content:"";height:2px;left:0;position:absolute;width:100%;z-index:var(--el-index-normal)}.el-tabs__nav-wrap.is-scrollable{box-sizing:border-box;padding:0 20px}.el-tabs__nav-scroll{overflow:hidden}.el-tabs__nav-next,.el-tabs__nav-prev{color:var(--el-text-color-secondary);cursor:pointer;font-size:12px;line-height:44px;position:absolute;text-align:center;width:20px}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{display:flex;float:left;position:relative;transition:transform var(--el-transition-duration);white-space:nowrap;z-index:calc(var(--el-index-normal) + 1)}.el-tabs__nav.is-stretch{display:flex;min-width:100%}.el-tabs__nav.is-stretch>*{flex:1;text-align:center}.el-tabs__item{align-items:center;box-sizing:border-box;color:var(--el-text-color-primary);display:flex;font-size:var(--el-font-size-base);font-weight:500;height:var(--el-tabs-header-height);justify-content:center;list-style:none;padding:0 20px;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{border-radius:3px;box-shadow:0 0 2px 2px var(--el-color-primary) inset}.el-tabs__item .is-icon-close{border-radius:50%;margin-left:5px;text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs__item .is-icon-close:before{display:inline-block;transform:scale(.9)}.el-tabs__item .is-icon-close:hover{background-color:var(--el-text-color-placeholder);color:#ffffff}.el-tabs__item.is-active,.el-tabs__item:hover{color:var(--el-color-primary)}.el-tabs__item:hover{cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;overflow:hidden;position:relative}.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:20px}.el-tabs--bottom.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom.el-tabs--card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--border-card>.el-tabs__header .el-tabs__item:last-child,.el-tabs--top.el-tabs--card>.el-tabs__header .el-tabs__item:last-child{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height)}.el-tabs--card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--card>.el-tabs__header .el-tabs__nav{border:1px solid var(--el-border-color-light);border-bottom:none;border-radius:4px 4px 0 0;box-sizing:border-box}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{font-size:12px;height:14px;overflow:hidden;position:relative;right:-2px;transform-origin:100% 50%;width:0}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid transparent;border-left:1px solid var(--el-border-color-light);transition:color var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier),padding var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--card>.el-tabs__header .el-tabs__item:first-child{border-left:none}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover{padding-left:13px;padding-right:13px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-closable:hover .is-icon-close{width:14px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active{border-bottom-color:var(--el-bg-color)}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable{padding-left:20px;padding-right:20px}.el-tabs--card>.el-tabs__header .el-tabs__item.is-active.is-closable .is-icon-close{width:14px}.el-tabs--border-card{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color)}.el-tabs--border-card>.el-tabs__content{padding:15px}.el-tabs--border-card>.el-tabs__header{background-color:var(--el-fill-color-light);border-bottom:1px solid var(--el-border-color-light);margin:0}.el-tabs--border-card>.el-tabs__header .el-tabs__nav-wrap:after{content:none}.el-tabs--border-card>.el-tabs__header .el-tabs__item{border:1px solid transparent;color:var(--el-text-color-secondary);margin-top:-1px;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier)}.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item,.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{background-color:var(--el-bg-color-overlay);border-left-color:var(--el-border-color);border-right-color:var(--el-border-color);color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item:not(.is-disabled):hover{color:var(--el-color-primary)}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-disabled{color:var(--el-disabled-text-color)}.el-tabs--border-card>.el-tabs__header .is-scrollable .el-tabs__item:first-child{margin-left:0}.el-tabs--bottom{flex-direction:column}.el-tabs--bottom .el-tabs__header.is-bottom{margin-bottom:0;margin-top:10px}.el-tabs--bottom.el-tabs--border-card .el-tabs__header.is-bottom{border-bottom:0;border-top:1px solid var(--el-border-color)}.el-tabs--bottom.el-tabs--border-card .el-tabs__nav-wrap.is-bottom{margin-bottom:0;margin-top:-1px}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid transparent}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom{margin:0 -1px -1px}.el-tabs--left,.el-tabs--right{overflow:hidden}.el-tabs--left .el-tabs__header.is-left,.el-tabs--left .el-tabs__header.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-scroll,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{height:100%}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__active-bar.is-right,.el-tabs--right .el-tabs__active-bar.is-left,.el-tabs--right .el-tabs__active-bar.is-right{bottom:auto;height:auto;top:0;width:2px}.el-tabs--left .el-tabs__nav-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right{margin-bottom:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{cursor:pointer;height:30px;line-height:30px;text-align:center;width:100%}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev{left:auto;top:0}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{bottom:0;right:auto}.el-tabs--left .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--left .el-tabs__nav-wrap.is-right.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-left.is-scrollable,.el-tabs--right .el-tabs__nav-wrap.is-right.is-scrollable{padding:30px 0}.el-tabs--left .el-tabs__nav-wrap.is-left:after,.el-tabs--left .el-tabs__nav-wrap.is-right:after,.el-tabs--right .el-tabs__nav-wrap.is-left:after,.el-tabs--right .el-tabs__nav-wrap.is-right:after{bottom:auto;height:100%;top:0;width:2px}.el-tabs--left .el-tabs__nav.is-left,.el-tabs--left .el-tabs__nav.is-right,.el-tabs--right .el-tabs__nav.is-left,.el-tabs--right .el-tabs__nav.is-right{flex-direction:column}.el-tabs--left .el-tabs__item.is-left,.el-tabs--right .el-tabs__item.is-left{justify-content:flex-end}.el-tabs--left .el-tabs__item.is-right,.el-tabs--right .el-tabs__item.is-right{justify-content:flex-start}.el-tabs--left{flex-direction:row-reverse}.el-tabs--left .el-tabs__header.is-left{margin-bottom:0;margin-right:10px}.el-tabs--left .el-tabs__nav-wrap.is-left{margin-right:-1px}.el-tabs--left .el-tabs__active-bar.is-left,.el-tabs--left .el-tabs__nav-wrap.is-left:after{left:auto;right:0}.el-tabs--left .el-tabs__item.is-left{text-align:right}.el-tabs--left.el-tabs--card .el-tabs__active-bar.is-left{display:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left{border-bottom:none;border-left:none;border-right:1px solid var(--el-border-color-light);border-top:1px solid var(--el-border-color-light);text-align:left}.el-tabs--left.el-tabs--card .el-tabs__item.is-left:first-child{border-right:1px solid var(--el-border-color-light);border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:none;border-right:1px solid #fff}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:first-child{border-top:none}.el-tabs--left.el-tabs--card .el-tabs__item.is-left.is-active:last-child{border-bottom:none}.el-tabs--left.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-radius:4px 0 0 4px;border-right:none}.el-tabs--left.el-tabs--card .el-tabs__new-tab{float:none}.el-tabs--left.el-tabs--border-card .el-tabs__header.is-left{border-right:1px solid var(--el-border-color)}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left{border:1px solid transparent;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:rgb(209,219,229) transparent}.el-tabs--right .el-tabs__header.is-right{margin-bottom:0;margin-left:10px}.el-tabs--right .el-tabs__nav-wrap.is-right{margin-left:-1px}.el-tabs--right .el-tabs__nav-wrap.is-right:after{left:0;right:auto}.el-tabs--right .el-tabs__active-bar.is-right{left:0}.el-tabs--right.el-tabs--card .el-tabs__active-bar.is-right{display:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right{border-bottom:none;border-top:1px solid var(--el-border-color-light)}.el-tabs--right.el-tabs--card .el-tabs__item.is-right:first-child{border-left:1px solid var(--el-border-color-light);border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active{border:1px solid var(--el-border-color-light);border-bottom:none;border-left:1px solid #fff;border-right:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:first-child{border-top:none}.el-tabs--right.el-tabs--card .el-tabs__item.is-right.is-active:last-child{border-bottom:none}.el-tabs--right.el-tabs--card .el-tabs__nav{border-bottom:1px solid var(--el-border-color-light);border-left:none;border-radius:0 4px 4px 0}.el-tabs--right.el-tabs--border-card .el-tabs__header.is-right{border-left:1px solid var(--el-border-color)}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right{border:1px solid transparent;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:rgb(209,219,229) transparent}.el-tabs--top{flex-direction:column-reverse}.slideInLeft-transition,.slideInRight-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);left:0;position:absolute;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);left:0;position:absolute;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform:translateX(100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInRight-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(100%);transform-origin:0 0}}@keyframes slideInLeft-enter{0%{opacity:0;transform:translateX(-100%);transform-origin:0 0}to{opacity:1;transform:translateX(0);transform-origin:0 0}}@keyframes slideInLeft-leave{0%{opacity:1;transform:translateX(0);transform-origin:0 0}to{opacity:0;transform:translateX(-100%);transform-origin:0 0}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;align-items:center;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);border-radius:var(--el-tag-border-radius);border-style:solid;border-width:1px;box-sizing:border-box;color:var(--el-tag-text-color);display:inline-flex;font-size:var(--el-tag-font-size);height:24px;justify-content:center;line-height:1;padding:0 9px;vertical-align:middle;white-space:nowrap;--el-icon-size:14px}.el-tag,.el-tag.el-tag--primary{--el-tag-bg-color:var(--el-color-primary-light-9);--el-tag-border-color:var(--el-color-primary-light-8);--el-tag-hover-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-bg-color:var(--el-color-success-light-9);--el-tag-border-color:var(--el-color-success-light-8);--el-tag-hover-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-bg-color:var(--el-color-warning-light-9);--el-tag-border-color:var(--el-color-warning-light-8);--el-tag-hover-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-bg-color:var(--el-color-danger-light-9);--el-tag-border-color:var(--el-color-danger-light-8);--el-tag-hover-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-bg-color:var(--el-color-error-light-9);--el-tag-border-color:var(--el-color-error-light-8);--el-tag-hover-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-bg-color:var(--el-color-info-light-9);--el-tag-border-color:var(--el-color-info-light-8);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-hit{border-color:var(--el-color-primary)}.el-tag.is-round{border-radius:var(--el-tag-border-radius-rounded)}.el-tag .el-tag__close{color:var(--el-tag-text-color);flex-shrink:0}.el-tag .el-tag__close:hover{background-color:var(--el-tag-hover-color);color:var(--el-color-white)}.el-tag.el-tag--primary{--el-tag-text-color:var(--el-color-primary)}.el-tag.el-tag--success{--el-tag-text-color:var(--el-color-success)}.el-tag.el-tag--warning{--el-tag-text-color:var(--el-color-warning)}.el-tag.el-tag--danger{--el-tag-text-color:var(--el-color-danger)}.el-tag.el-tag--error{--el-tag-text-color:var(--el-color-error)}.el-tag.el-tag--info{--el-tag-text-color:var(--el-color-info)}.el-tag .el-icon{border-radius:50%;cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size)}.el-tag .el-tag__close{margin-left:6px}.el-tag--dark{--el-tag-text-color:var(--el-color-white)}.el-tag--dark,.el-tag--dark.el-tag--primary{--el-tag-bg-color:var(--el-color-primary);--el-tag-border-color:var(--el-color-primary);--el-tag-hover-color:var(--el-color-primary-light-3)}.el-tag--dark.el-tag--success{--el-tag-bg-color:var(--el-color-success);--el-tag-border-color:var(--el-color-success);--el-tag-hover-color:var(--el-color-success-light-3)}.el-tag--dark.el-tag--warning{--el-tag-bg-color:var(--el-color-warning);--el-tag-border-color:var(--el-color-warning);--el-tag-hover-color:var(--el-color-warning-light-3)}.el-tag--dark.el-tag--danger{--el-tag-bg-color:var(--el-color-danger);--el-tag-border-color:var(--el-color-danger);--el-tag-hover-color:var(--el-color-danger-light-3)}.el-tag--dark.el-tag--error{--el-tag-bg-color:var(--el-color-error);--el-tag-border-color:var(--el-color-error);--el-tag-hover-color:var(--el-color-error-light-3)}.el-tag--dark.el-tag--info{--el-tag-bg-color:var(--el-color-info);--el-tag-border-color:var(--el-color-info);--el-tag-hover-color:var(--el-color-info-light-3)}.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info,.el-tag--dark.el-tag--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning{--el-tag-text-color:var(--el-color-white)}.el-tag--plain,.el-tag--plain.el-tag--primary{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-primary-light-5);--el-tag-hover-color:var(--el-color-primary)}.el-tag--plain.el-tag--success{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-success-light-5);--el-tag-hover-color:var(--el-color-success)}.el-tag--plain.el-tag--warning{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-warning-light-5);--el-tag-hover-color:var(--el-color-warning)}.el-tag--plain.el-tag--danger{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-danger-light-5);--el-tag-hover-color:var(--el-color-danger)}.el-tag--plain.el-tag--error{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-error-light-5);--el-tag-hover-color:var(--el-color-error)}.el-tag--plain.el-tag--info{--el-tag-bg-color:var(--el-fill-color-blank);--el-tag-border-color:var(--el-color-info-light-5);--el-tag-hover-color:var(--el-color-info)}.el-tag.is-closable{padding-right:5px}.el-tag--large{height:32px;padding:0 11px;--el-icon-size:16px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{height:20px;padding:0 7px;--el-icon-size:12px}.el-tag--small .el-tag__close{margin-left:4px}.el-tag--small.is-closable{padding-right:3px}.el-tag--small .el-icon-close{transform:scale(.8)}.el-tag.el-tag--primary.is-hit{border-color:var(--el-color-primary)}.el-tag.el-tag--success.is-hit{border-color:var(--el-color-success)}.el-tag.el-tag--warning.is-hit{border-color:var(--el-color-warning)}.el-tag.el-tag--danger.is-hit{border-color:var(--el-color-danger)}.el-tag.el-tag--error.is-hit{border-color:var(--el-color-error)}.el-tag.el-tag--info.is-hit{border-color:var(--el-color-info)}.el-text{--el-text-font-size:var(--el-font-size-base);--el-text-color:var(--el-text-color-regular);align-self:center;color:var(--el-text-color);font-size:var(--el-text-font-size);margin:0;overflow-wrap:break-word;padding:0}.el-text.is-truncated{display:inline-block;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-text.is-line-clamp{display:-webkit-inline-box;-webkit-box-orient:vertical;overflow:hidden}.el-text--large{--el-text-font-size:var(--el-font-size-medium)}.el-text--default{--el-text-font-size:var(--el-font-size-base)}.el-text--small{--el-text-font-size:var(--el-font-size-extra-small)}.el-text.el-text--primary{--el-text-color:var(--el-color-primary)}.el-text.el-text--success{--el-text-color:var(--el-color-success)}.el-text.el-text--warning{--el-text-color:var(--el-color-warning)}.el-text.el-text--danger{--el-text-color:var(--el-color-danger)}.el-text.el-text--error{--el-text-color:var(--el-color-error)}.el-text.el-text--info{--el-text-color:var(--el-color-info)}.el-text>.el-icon{vertical-align:-2px}.time-select{margin:5px 0;min-width:0}.time-select .el-picker-panel__content{margin:0;max-height:200px}.time-select-item{font-size:14px;line-height:20px;padding:8px 10px}.time-select-item.disabled{color:var(--el-datepicker-border-color);cursor:not-allowed}.time-select-item:hover{background-color:var(--el-fill-color-light);cursor:pointer;font-weight:bold}.time-select .time-select-item.selected:not(.disabled){color:var(--el-color-primary);font-weight:bold}.el-timeline-item{padding-bottom:20px;position:relative}.el-timeline-item__wrapper{padding-left:28px;position:relative;top:-3px}.el-timeline-item__tail{border-left:2px solid var(--el-timeline-node-color);height:100%;left:4px;position:absolute}.el-timeline-item .el-timeline-item__icon{color:var(--el-color-white);font-size:var(--el-font-size-small)}.el-timeline-item__node{align-items:center;background-color:var(--el-timeline-node-color);border-color:var(--el-timeline-node-color);border-radius:50%;box-sizing:border-box;display:flex;justify-content:center;position:absolute}.el-timeline-item__node--normal{height:var(--el-timeline-node-size-normal);left:-1px;width:var(--el-timeline-node-size-normal)}.el-timeline-item__node--large{height:var(--el-timeline-node-size-large);left:-2px;width:var(--el-timeline-node-size-large)}.el-timeline-item__node.is-hollow{background:var(--el-color-white);border-style:solid;border-width:2px}.el-timeline-item__node--primary{background-color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-timeline-item__node--success{background-color:var(--el-color-success);border-color:var(--el-color-success)}.el-timeline-item__node--warning{background-color:var(--el-color-warning);border-color:var(--el-color-warning)}.el-timeline-item__node--danger{background-color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-timeline-item__node--info{background-color:var(--el-color-info);border-color:var(--el-color-info)}.el-timeline-item__dot{align-items:center;display:flex;justify-content:center;position:absolute}.el-timeline-item__content{color:var(--el-text-color-primary)}.el-timeline-item__timestamp{color:var(--el-text-color-secondary);font-size:var(--el-font-size-small);line-height:1}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-timeline{--el-timeline-node-size-normal:12px;--el-timeline-node-size-large:14px;--el-timeline-node-color:var(--el-border-color-light);font-size:var(--el-font-size-base);list-style:none;margin:0}.el-timeline .el-timeline-item:last-child .el-timeline-item__tail{display:none}.el-timeline .el-timeline-item__center{align-items:center;display:flex}.el-timeline .el-timeline-item__center .el-timeline-item__wrapper{width:100%}.el-timeline .el-timeline-item__center .el-timeline-item__tail{top:0}.el-timeline .el-timeline-item__center:first-child .el-timeline-item__tail{height:calc(50% + 10px);top:calc(50% - 10px)}.el-timeline .el-timeline-item__center:last-child .el-timeline-item__tail{display:block;height:calc(50% - 10px)}.el-tooltip-v2__content{--el-tooltip-v2-padding:5px 10px;--el-tooltip-v2-border-radius:4px;--el-tooltip-v2-border-color:var(--el-border-color);background-color:var(--el-color-white);border:1px solid var(--el-border-color);border-radius:var(--el-tooltip-v2-border-radius);color:var(--el-color-black);padding:var(--el-tooltip-v2-padding)}.el-tooltip-v2__arrow{color:var(--el-color-white);height:var(--el-tooltip-v2-arrow-height);left:var(--el-tooltip-v2-arrow-x);pointer-events:none;position:absolute;top:var(--el-tooltip-v2-arrow-y);width:var(--el-tooltip-v2-arrow-width)}.el-tooltip-v2__arrow:after,.el-tooltip-v2__arrow:before{border:var(--el-tooltip-v2-arrow-border-width) solid transparent;content:"";height:0;position:absolute;width:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow{bottom:0}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:before{border-bottom:0;border-top-color:var(--el-color-white);border-top-width:var(--el-tooltip-v2-arrow-border-width);top:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=top] .el-tooltip-v2__arrow:after{border-bottom:0;border-top-color:var(--el-border-color);border-top-width:var(--el-tooltip-v2-arrow-border-width);top:100%;z-index:-1}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow{top:0}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:before{border-bottom-color:var(--el-color-white);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=bottom] .el-tooltip-v2__arrow:after{border-bottom-color:var(--el-border-color);border-bottom-width:var(--el-tooltip-v2-arrow-border-width);border-top:0;bottom:100%;z-index:-1}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow{right:0}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:before{border-left-color:var(--el-color-white);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=left] .el-tooltip-v2__arrow:after{border-left-color:var(--el-border-color);border-left-width:var(--el-tooltip-v2-arrow-border-width);border-right:0;left:100%;z-index:-1}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow{left:0}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:before{border-left:0;border-right-color:var(--el-color-white);border-right-width:var(--el-tooltip-v2-arrow-border-width);right:calc(100% - 1px)}.el-tooltip-v2__content[data-side^=right] .el-tooltip-v2__arrow:after{border-left:0;border-right-color:var(--el-border-color);border-right-width:var(--el-tooltip-v2-arrow-border-width);right:100%;z-index:-1}.el-tooltip-v2__content.is-dark{--el-tooltip-v2-border-color:transparent;color:var(--el-color-white)}.el-tooltip-v2__content.is-dark,.el-tooltip-v2__content.is-dark .el-tooltip-v2__arrow{background-color:var(--el-color-black);border-color:transparent}.el-transfer{--el-transfer-border-color:var(--el-border-color-lighter);--el-transfer-border-radius:var(--el-border-radius-base);--el-transfer-panel-width:200px;--el-transfer-panel-header-height:40px;--el-transfer-panel-header-bg-color:var(--el-fill-color-light);--el-transfer-panel-footer-height:40px;--el-transfer-panel-body-height:278px;--el-transfer-item-height:30px;--el-transfer-filter-height:32px;font-size:var(--el-font-size-base)}.el-transfer__buttons{display:inline-block;padding:0 30px;vertical-align:middle}.el-transfer__button{vertical-align:top}.el-transfer__button:nth-child(2){margin:0 0 0 10px}.el-transfer__button i,.el-transfer__button span{font-size:14px}.el-transfer__button .el-icon+span{margin-left:0}.el-transfer-panel{background:var(--el-bg-color-overlay);box-sizing:border-box;display:inline-block;max-height:100%;overflow:hidden;position:relative;text-align:left;vertical-align:middle;width:var(--el-transfer-panel-width)}.el-transfer-panel__body{border-bottom:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);border-left:1px solid var(--el-transfer-border-color);border-right:1px solid var(--el-transfer-border-color);height:var(--el-transfer-panel-body-height);overflow:hidden}.el-transfer-panel__body.is-with-footer{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.el-transfer-panel__list{box-sizing:border-box;height:var(--el-transfer-panel-body-height);list-style:none;margin:0;overflow:auto;padding:6px 0}.el-transfer-panel__list.is-filterable{height:calc(100% - var(--el-transfer-filter-height) - 30px);padding-top:0}.el-transfer-panel__item{display:block!important;height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding-left:15px}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:var(--el-text-color-regular)}.el-transfer-panel__item:hover{color:var(--el-color-primary)}.el-transfer-panel__item.el-checkbox .el-checkbox__label{box-sizing:border-box;display:block;line-height:var(--el-transfer-item-height);overflow:hidden;padding-left:22px;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{box-sizing:border-box;padding:15px;text-align:center}.el-transfer-panel__filter .el-input__inner{box-sizing:border-box;display:inline-block;font-size:12px;height:var(--el-transfer-filter-height);width:100%}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{align-items:center;background:var(--el-transfer-panel-header-bg-color);border:1px solid var(--el-transfer-border-color);border-top-left-radius:var(--el-transfer-border-radius);border-top-right-radius:var(--el-transfer-border-radius);box-sizing:border-box;color:var(--el-color-black);display:flex;height:var(--el-transfer-panel-header-height);margin:0;padding-left:15px}.el-transfer-panel .el-transfer-panel__header .el-checkbox{align-items:center;display:flex;position:relative;width:100%}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{color:var(--el-text-color-primary);font-size:16px;font-weight:normal}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label span{color:var(--el-text-color-secondary);font-size:12px;font-weight:normal;position:absolute;right:15px;top:50%;transform:translate3d(0,-50%,0)}.el-transfer-panel .el-transfer-panel__footer{background:var(--el-bg-color-overlay);border:1px solid var(--el-transfer-border-color);border-bottom-left-radius:var(--el-transfer-border-radius);border-bottom-right-radius:var(--el-transfer-border-radius);height:var(--el-transfer-panel-footer-height);margin:0;padding:0}.el-transfer-panel .el-transfer-panel__footer:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-transfer-panel .el-transfer-panel__footer .el-checkbox{color:var(--el-text-color-regular);padding-left:20px}.el-transfer-panel .el-transfer-panel__empty{color:var(--el-text-color-secondary);height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);margin:0;padding:6px 15px 0;text-align:center}.el-transfer-panel .el-checkbox__label{padding-left:8px}.el-transfer-panel .el-checkbox__inner{border-radius:3px;height:14px;width:14px}.el-transfer-panel .el-checkbox__inner:after{height:6px;left:4px;width:3px}.el-tree{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder);background:var(--el-fill-color-blank);color:var(--el-tree-text-color);cursor:default;font-size:var(--el-font-size-base);position:relative}.el-tree__empty-block{height:100%;min-height:60px;position:relative;text-align:center;width:100%}.el-tree__empty-text{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);left:50%;position:absolute;top:50%;transform:translate(-50%,-50%)}.el-tree__drop-indicator{background-color:var(--el-color-primary);height:1px;left:0;position:absolute;right:0}.el-tree-node{outline:none;white-space:nowrap}.el-tree-node:focus>.el-tree-node__content{background-color:var(--el-tree-node-hover-bg-color)}.el-tree-node.is-drop-inner>.el-tree-node__content .el-tree-node__label{background-color:var(--el-color-primary);color:#fff}.el-tree-node__content{--el-checkbox-height:var(--el-tree-node-content-height);align-items:center;cursor:pointer;display:flex;height:var(--el-tree-node-content-height)}.el-tree-node__content>.el-tree-node__expand-icon{box-sizing:content-box;padding:6px}.el-tree-node__content>label.el-checkbox{margin-right:8px}.el-tree-node__content:hover{background-color:var(--el-tree-node-hover-bg-color)}.el-tree.is-dragging .el-tree-node__content{cursor:move}.el-tree.is-dragging .el-tree-node__content *{pointer-events:none}.el-tree.is-dragging.is-drop-not-allow .el-tree-node__content{cursor:not-allowed}.el-tree-node__expand-icon{color:var(--el-tree-expand-icon-color);cursor:pointer;font-size:12px;transform:rotate(0deg);transition:transform var(--el-transition-duration) ease-in-out}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:transparent;cursor:default;visibility:hidden}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{color:var(--el-tree-expand-icon-color);font-size:var(--el-font-size-base);margin-right:8px}.el-tree-node>.el-tree-node__children{background-color:transparent;overflow:hidden}.el-tree-node.is-expanded>.el-tree-node__children{display:block}.el-tree--highlight-current .el-tree-node.is-current>.el-tree-node__content{background-color:var(--el-color-primary-light-9)}.el-tree-select{--el-tree-node-content-height:26px;--el-tree-node-hover-bg-color:var(--el-fill-color-light);--el-tree-text-color:var(--el-text-color-regular);--el-tree-expand-icon-color:var(--el-text-color-placeholder)}.el-tree-select__popper .el-tree-node__expand-icon{margin-left:8px}.el-tree-select__popper .el-tree-node.is-checked>.el-tree-node__content .el-select-dropdown__item.selected:after{content:none}.el-tree-select__popper .el-select-dropdown__list>.el-select-dropdown__item{padding-left:32px}.el-tree-select__popper .el-select-dropdown__item{background:transparent!important;flex:1;height:20px;line-height:20px;padding-left:0}.el-upload{--el-upload-dragger-padding-horizontal:40px;--el-upload-dragger-padding-vertical:10px;align-items:center;cursor:pointer;display:inline-flex;justify-content:center;outline:none}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{color:inherit}.el-upload.is-disabled:focus,.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{background-color:var(--el-disabled-bg-color);cursor:not-allowed}.el-upload.is-disabled .el-upload-dragger .el-upload__text{color:var(--el-text-color-placeholder)}.el-upload.is-disabled .el-upload-dragger .el-upload__text em{color:var(--el-disabled-text-color)}.el-upload.is-disabled .el-upload-dragger:hover{border-color:var(--el-border-color-darker)}.el-upload__input{display:none}.el-upload__tip{color:var(--el-text-color-regular);font-size:12px;margin-top:7px}.el-upload iframe{filter:alpha(opacity=0);left:0;opacity:0;position:absolute;top:0;z-index:-1}.el-upload--picture-card{--el-upload-picture-card-size:148px;align-items:center;background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);border-radius:6px;box-sizing:border-box;cursor:pointer;display:inline-flex;height:var(--el-upload-picture-card-size);justify-content:center;vertical-align:top;width:var(--el-upload-picture-card-size)}.el-upload--picture-card>i{color:var(--el-text-color-secondary);font-size:28px}.el-upload--picture-card:hover{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload.is-drag{display:block}.el-upload:focus{color:var(--el-color-primary)}.el-upload:focus,.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);border-radius:6px;box-sizing:border-box;cursor:pointer;overflow:hidden;padding:var(--el-upload-dragger-padding-horizontal) var(--el-upload-dragger-padding-vertical);position:relative;text-align:center}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);font-size:67px;line-height:50px;margin-bottom:16px}.el-upload-dragger+.el-upload__tip{text-align:center}.el-upload-dragger~.el-upload__files{border-top:var(--el-border);margin-top:7px;padding-top:5px}.el-upload-dragger .el-upload__text{color:var(--el-text-color-regular);font-size:14px;text-align:center}.el-upload-dragger .el-upload__text em{color:var(--el-color-primary);font-style:normal}.el-upload-dragger:hover{border-color:var(--el-color-primary)}.el-upload-dragger.is-dragover{background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary);padding:calc(var(--el-upload-dragger-padding-horizontal) - 1px) calc(var(--el-upload-dragger-padding-vertical) - 1px)}.el-upload-list{list-style:none;margin:10px 0 0;padding:0;position:relative}.el-upload-list__item{border-radius:4px;box-sizing:border-box;color:var(--el-text-color-regular);font-size:14px;margin-bottom:5px;position:relative;transition:all .5s cubic-bezier(.55,0,.1,1);width:100%}.el-upload-list__item .el-progress{position:absolute;top:20px;width:100%}.el-upload-list__item .el-progress__text{position:absolute;right:0;top:-13px}.el-upload-list__item .el-progress-bar{margin-right:0;padding-right:0}.el-upload-list__item .el-icon--upload-success{color:var(--el-color-success)}.el-upload-list__item .el-icon--close{color:var(--el-text-color-regular);cursor:pointer;display:none;opacity:.75;position:absolute;right:5px;top:50%;transform:translateY(-50%);transition:opacity var(--el-transition-duration)}.el-upload-list__item .el-icon--close:hover{color:var(--el-color-primary);opacity:1}.el-upload-list__item .el-icon--close-tip{color:var(--el-color-primary);cursor:pointer;display:none;font-size:12px;font-style:normal;opacity:1;position:absolute;right:5px;top:1px}.el-upload-list__item:hover{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{display:inline-flex;flex-direction:column;justify-content:center;margin-left:4px;width:calc(100% - 30px)}.el-upload-list__item.is-success .el-upload-list__item-status-label{display:inline-flex}.el-upload-list__item.is-success .el-upload-list__item-name:focus,.el-upload-list__item.is-success .el-upload-list__item-name:hover{color:var(--el-color-primary);cursor:pointer}.el-upload-list__item.is-success:focus:not(:hover) .el-icon--close-tip{display:inline-block}.el-upload-list__item.is-success:active,.el-upload-list__item.is-success:not(.focusing):focus{outline-width:0}.el-upload-list__item.is-success:active .el-icon--close-tip,.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip{display:none}.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:hover .el-upload-list__item-status-label{display:none;opacity:0}.el-upload-list__item-name{align-items:center;color:var(--el-text-color-regular);display:inline-flex;font-size:var(--el-font-size-base);padding:0 4px;text-align:center;transition:color var(--el-transition-duration)}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.el-upload-list__item-status-label{align-items:center;display:none;height:100%;justify-content:center;line-height:inherit;position:absolute;right:5px;top:0;transition:opacity var(--el-transition-duration)}.el-upload-list__item-delete{color:var(--el-text-color-regular);display:none;font-size:12px;position:absolute;right:10px;top:0}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{--el-upload-list-picture-card-size:148px;display:inline-flex;flex-wrap:wrap;margin:0}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:inline-flex;height:var(--el-upload-list-picture-card-size);margin:0 8px 8px 0;overflow:hidden;padding:0;width:var(--el-upload-list-picture-card-size)}.el-upload-list--picture-card .el-upload-list__item .el-icon--check,.el-upload-list--picture-card .el-upload-list__item .el-icon--circle-check{color:#ffffff}.el-upload-list--picture-card .el-upload-list__item .el-icon--close{display:none}.el-upload-list--picture-card .el-upload-list__item:hover .el-upload-list__item-status-label{display:block;opacity:0}.el-upload-list--picture-card .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture-card .el-upload-list__item .el-upload-list__item-name{display:none}.el-upload-list--picture-card .el-upload-list__item-thumbnail{height:100%;-o-object-fit:contain;object-fit:contain;width:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-list--picture-card .el-upload-list__item-status-label i{font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{align-items:center;background-color:var(--el-overlay-color-lighter);color:#fff;cursor:default;display:inline-flex;font-size:20px;height:100%;justify-content:center;left:0;opacity:0;position:absolute;top:0;transition:opacity var(--el-transition-duration);width:100%}.el-upload-list--picture-card .el-upload-list__item-actions span{cursor:pointer;display:none}.el-upload-list--picture-card .el-upload-list__item-actions span+span{margin-left:16px}.el-upload-list--picture-card .el-upload-list__item-actions .el-upload-list__item-delete{color:inherit;font-size:inherit;position:static}.el-upload-list--picture-card .el-upload-list__item-actions:hover{opacity:1}.el-upload-list--picture-card .el-upload-list__item-actions:hover span{display:inline-flex}.el-upload-list--picture-card .el-progress{bottom:auto;left:50%;top:50%;transform:translate(-50%,-50%);width:126px}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{align-items:center;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);border-radius:6px;box-sizing:border-box;display:flex;margin-top:10px;overflow:hidden;padding:10px;z-index:0}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#ffffff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{display:inline-flex;opacity:0}.el-upload-list--picture .el-upload-list__item:hover .el-progress__text{display:block}.el-upload-list--picture .el-upload-list__item.is-success .el-upload-list__item-name i{display:none}.el-upload-list--picture .el-upload-list__item .el-icon--close{top:5px;transform:translateY(0)}.el-upload-list--picture .el-upload-list__item-thumbnail{align-items:center;background-color:var(--el-color-white);display:inline-flex;height:70px;justify-content:center;-o-object-fit:contain;object-fit:contain;position:relative;width:70px;z-index:1}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);height:26px;position:absolute;right:-17px;text-align:center;top:-7px;transform:rotate(45deg);width:46px}.el-upload-list--picture .el-upload-list__item-status-label i{font-size:12px;margin-top:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{cursor:default;height:100%;left:0;overflow:hidden;position:absolute;top:0;width:100%;z-index:10}.el-upload-cover:after{content:"";display:inline-block;height:100%;vertical-align:middle}.el-upload-cover img{display:block;height:100%;width:100%}.el-upload-cover__label{background:var(--el-color-success);height:24px;right:-15px;text-align:center;top:-6px;transform:rotate(45deg);width:40px}.el-upload-cover__label i{color:#fff;font-size:12px;margin-top:11px;transform:rotate(-45deg)}.el-upload-cover__progress{display:inline-block;position:static;vertical-align:middle;width:243px}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{height:100%;left:0;position:absolute;top:0;width:100%}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);bottom:0;height:100%;left:0;position:absolute;text-align:center;width:100%}.el-upload-cover__interact .btn{color:#ffffff;cursor:pointer;display:inline-block;font-size:14px;margin-top:60px;transition:var(--el-transition-md-fade);vertical-align:middle}.el-upload-cover__interact .btn i{margin-top:0}.el-upload-cover__interact .btn span{opacity:0;transition:opacity .15s linear}.el-upload-cover__interact .btn:not(:first-child){margin-left:35px}.el-upload-cover__interact .btn:hover{transform:translateY(-13px)}.el-upload-cover__interact .btn:hover span{opacity:1}.el-upload-cover__interact .btn i{color:#ffffff;display:block;font-size:24px;line-height:inherit;margin:0 auto 5px}.el-upload-cover__title{background-color:#ffffff;bottom:0;color:var(--el-text-color-primary);font-size:14px;font-weight:normal;height:36px;left:0;line-height:36px;margin:0;overflow:hidden;padding:0 10px;position:absolute;text-align:left;text-overflow:ellipsis;white-space:nowrap;width:100%}.el-upload-cover+.el-upload__inner{opacity:0;position:relative;z-index:1}.el-vl__wrapper{position:relative}.el-vl__wrapper.always-on .el-virtual-scrollbar,.el-vl__wrapper:hover .el-virtual-scrollbar{opacity:1}.el-vl__window{scrollbar-width:none}.el-vl__window::-webkit-scrollbar{display:none}.el-virtual-scrollbar{opacity:0;transition:opacity .34s ease-out}.el-virtual-scrollbar.always-on{opacity:1}.el-vg__wrapper{position:relative}.el-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);border-radius:var(--el-popper-border-radius);font-size:12px;line-height:20px;min-width:10px;overflow-wrap:break-word;padding:5px 11px;position:absolute;visibility:visible;z-index:2000}.el-popper.is-dark{color:var(--el-bg-color)}.el-popper.is-dark,.el-popper.is-dark>.el-popper__arrow:before{background:var(--el-text-color-primary);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{right:0}.el-popper.is-light,.el-popper.is-light>.el-popper__arrow:before{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{right:0}.el-popper.is-pure{padding:0}.el-popper__arrow,.el-popper__arrow:before{height:10px;position:absolute;width:10px;z-index:-1}.el-popper__arrow:before{background:var(--el-text-color-primary);box-sizing:border-box;content:" ";transform:rotate(45deg)}.el-popper[data-popper-placement^=top]>.el-popper__arrow{bottom:-5px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-bottom-right-radius:2px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow{top:-5px}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-top-left-radius:2px}.el-popper[data-popper-placement^=left]>.el-popper__arrow{right:-5px}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-top-right-radius:2px}.el-popper[data-popper-placement^=right]>.el-popper__arrow{left:-5px}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-bottom-left-radius:2px}.el-popper[data-popper-placement^=top]>.el-popper__arrow:before{border-left-color:transparent!important;border-top-color:transparent!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-right-color:transparent!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:transparent!important;border-left-color:transparent!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-right-color:transparent!important;border-top-color:transparent!important}.el-statistic{--el-statistic-title-font-weight:400;--el-statistic-title-font-size:var(--el-font-size-extra-small);--el-statistic-title-color:var(--el-text-color-regular);--el-statistic-content-font-weight:400;--el-statistic-content-font-size:var(--el-font-size-extra-large);--el-statistic-content-color:var(--el-text-color-primary)}.el-statistic__head{color:var(--el-statistic-title-color);font-size:var(--el-statistic-title-font-size);font-weight:var(--el-statistic-title-font-weight);line-height:20px;margin-bottom:4px}.el-statistic__content{color:var(--el-statistic-content-color);font-size:var(--el-statistic-content-font-size);font-weight:var(--el-statistic-content-font-weight)}.el-statistic__value{display:inline-block}.el-statistic__prefix{display:inline-block;margin-right:4px}.el-statistic__suffix{display:inline-block;margin-left:4px}.el-tour{--el-tour-width:520px;--el-tour-padding-primary:12px;--el-tour-font-line-height:var(--el-font-line-height-primary);--el-tour-title-font-size:16px;--el-tour-title-text-color:var(--el-text-color-primary);--el-tour-title-font-weight:400;--el-tour-close-color:var(--el-color-info);--el-tour-font-size:14px;--el-tour-color:var(--el-text-color-primary);--el-tour-bg-color:var(--el-bg-color);--el-tour-border-radius:4px}.el-tour__hollow{transition:all var(--el-transition-duration) ease}.el-tour__content{border-radius:var(--el-tour-border-radius);box-shadow:var(--el-box-shadow-light);outline:none;overflow-wrap:break-word;padding:var(--el-tour-padding-primary);width:var(--el-tour-width)}.el-tour__arrow,.el-tour__content{background:var(--el-tour-bg-color);box-sizing:border-box}.el-tour__arrow{height:10px;pointer-events:none;position:absolute;transform:rotate(45deg);width:10px}.el-tour__content[data-side^=top] .el-tour__arrow{border-left-color:transparent;border-top-color:transparent}.el-tour__content[data-side^=bottom] .el-tour__arrow{border-bottom-color:transparent;border-right-color:transparent}.el-tour__content[data-side^=left] .el-tour__arrow{border-bottom-color:transparent;border-left-color:transparent}.el-tour__content[data-side^=right] .el-tour__arrow{border-right-color:transparent;border-top-color:transparent}.el-tour__content[data-side^=top] .el-tour__arrow{bottom:-5px}.el-tour__content[data-side^=bottom] .el-tour__arrow{top:-5px}.el-tour__content[data-side^=left] .el-tour__arrow{right:-5px}.el-tour__content[data-side^=right] .el-tour__arrow{left:-5px}.el-tour__closebtn{background:transparent;border:none;cursor:pointer;font-size:var(--el-message-close-size,16px);height:40px;outline:none;padding:0;position:absolute;right:0;top:0;width:40px}.el-tour__closebtn .el-tour__close{color:var(--el-tour-close-color);font-size:inherit}.el-tour__closebtn:focus .el-tour__close,.el-tour__closebtn:hover .el-tour__close{color:var(--el-color-primary)}.el-tour__header{padding-bottom:var(--el-tour-padding-primary)}.el-tour__header.show-close{padding-right:calc(var(--el-tour-padding-primary) + var(--el-message-close-size, 16px))}.el-tour__title{color:var(--el-tour-title-text-color);font-size:var(--el-tour-title-font-size);font-weight:var(--el-tour-title-font-weight);line-height:var(--el-tour-font-line-height)}.el-tour__body{color:var(--el-tour-text-color);font-size:var(--el-tour-font-size)}.el-tour__body img,.el-tour__body video{max-width:100%}.el-tour__footer{box-sizing:border-box;display:flex;justify-content:space-between;padding-top:var(--el-tour-padding-primary)}.el-tour__content .el-tour-indicators{display:inline-block;flex:1}.el-tour__content .el-tour-indicator{background:var(--el-color-info-light-9);border-radius:50%;display:inline-block;height:6px;margin-right:6px;width:6px}.el-tour__content .el-tour-indicator.is-active{background:var(--el-color-primary)}.el-tour.el-tour--primary{--el-tour-title-text-color:#fff;--el-tour-text-color:#fff;--el-tour-bg-color:var(--el-color-primary);--el-tour-close-color:#fff}.el-tour.el-tour--primary .el-tour__closebtn:focus .el-tour__close,.el-tour.el-tour--primary .el-tour__closebtn:hover .el-tour__close{color:var(--el-tour-title-text-color)}.el-tour.el-tour--primary .el-button--default{background:#fff;border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-tour.el-tour--primary .el-button--primary{border-color:#fff}.el-tour.el-tour--primary .el-tour-indicator{background:rgba(255,255,255,.15)}.el-tour.el-tour--primary .el-tour-indicator.is-active{background:#fff}.el-tour-parent--hidden{overflow:hidden}.el-anchor{--el-anchor-bg-color:var(--el-bg-color);--el-anchor-padding-indent:14px;--el-anchor-line-height:22px;--el-anchor-font-size:12px;--el-anchor-color:var(--el-text-color-secondary);--el-anchor-active-color:var(--el-color-primary);--el-anchor-marker-bg-color:var(--el-color-primary);background-color:var(--el-anchor-bg-color);position:relative}.el-anchor__marker{background-color:var(--el-anchor-marker-bg-color);border-radius:4px;opacity:0;position:absolute;z-index:0}.el-anchor.el-anchor--vertical .el-anchor__marker{height:14px;left:0;top:8px;transition:top .25s ease-in-out,opacity .25s;width:4px}.el-anchor.el-anchor--vertical .el-anchor__list{padding-left:var(--el-anchor-padding-indent)}.el-anchor.el-anchor--vertical.el-anchor--underline:before{background-color:rgba(5,5,5,.06);content:"";height:100%;left:0;position:absolute;width:2px}.el-anchor.el-anchor--vertical.el-anchor--underline .el-anchor__marker{border-radius:unset;width:2px}.el-anchor.el-anchor--horizontal .el-anchor__marker{bottom:0;height:2px;transition:left .25s ease-in-out,opacity .25s,width .25s;width:20px}.el-anchor.el-anchor--horizontal .el-anchor__list{display:flex;padding-bottom:4px}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item{padding-left:16px}.el-anchor.el-anchor--horizontal .el-anchor__list .el-anchor__item:first-child{padding-left:0}.el-anchor.el-anchor--horizontal.el-anchor--underline:before{background-color:rgba(5,5,5,.06);bottom:0;content:"";height:2px;position:absolute;width:100%}.el-anchor.el-anchor--horizontal.el-anchor--underline .el-anchor__marker{border-radius:unset;height:2px}.el-anchor__item{display:flex;flex-direction:column;overflow:hidden}.el-anchor__link{cursor:pointer;font-size:var(--el-anchor-font-size);line-height:var(--el-anchor-line-height);max-width:100%;outline:none;overflow:hidden;padding:4px 0;text-decoration:none;text-overflow:ellipsis;transition:color var(--el-transition-duration);white-space:nowrap}.el-anchor__link,.el-anchor__link:focus,.el-anchor__link:hover{color:var(--el-anchor-color)}.el-anchor__link.is-active{color:var(--el-anchor-active-color)}.el-anchor .el-anchor__list .el-anchor__item a{display:inline-block}.el-segmented--vertical{flex-direction:column}.el-segmented--vertical .el-segmented__item{padding:11px}.el-segmented{--el-segmented-color:var(--el-text-color-regular);--el-segmented-bg-color:var(--el-fill-color-light);--el-segmented-padding:2px;--el-segmented-item-selected-color:var(--el-color-white);--el-segmented-item-selected-bg-color:var(--el-color-primary);--el-segmented-item-selected-disabled-bg-color:var(--el-color-primary-light-5);--el-segmented-item-hover-color:var(--el-text-color-primary);--el-segmented-item-hover-bg-color:var(--el-fill-color-dark);--el-segmented-item-active-bg-color:var(--el-fill-color-darker);--el-segmented-item-disabled-color:var(--el-text-color-placeholder);align-items:stretch;background:var(--el-segmented-bg-color);border-radius:var(--el-border-radius-base);box-sizing:border-box;color:var(--el-segmented-color);display:inline-flex;font-size:14px;min-height:32px;padding:var(--el-segmented-padding)}.el-segmented__group{align-items:stretch;display:flex;position:relative;width:100%}.el-segmented__item-selected{background:var(--el-segmented-item-selected-bg-color);border-radius:calc(var(--el-border-radius-base) - 2px);height:100%;left:0;pointer-events:none;position:absolute;top:0;transition:all .3s;width:10px}.el-segmented__item-selected.is-disabled{background:var(--el-segmented-item-selected-disabled-bg-color)}.el-segmented__item-selected.is-focus-visible:before{border-radius:inherit;content:"";inset:0;outline:2px solid var(--el-segmented-item-selected-bg-color);outline-offset:1px;position:absolute}.el-segmented__item{align-items:center;border-radius:calc(var(--el-border-radius-base) - 2px);cursor:pointer;display:flex;flex:1;padding:0 11px}.el-segmented__item:not(.is-disabled):not(.is-selected):hover{background:var(--el-segmented-item-hover-bg-color);color:var(--el-segmented-item-hover-color)}.el-segmented__item:not(.is-disabled):not(.is-selected):active{background:var(--el-segmented-item-active-bg-color)}.el-segmented__item.is-selected,.el-segmented__item.is-selected.is-disabled{color:var(--el-segmented-item-selected-color)}.el-segmented__item.is-disabled{color:var(--el-segmented-item-disabled-color);cursor:not-allowed}.el-segmented__item-input{height:0;margin:0;opacity:0;pointer-events:none;position:absolute;width:0}.el-segmented__item-label{flex:1;line-height:normal;overflow:hidden;text-align:center;text-overflow:ellipsis;transition:color .3s;white-space:nowrap;z-index:1}.el-segmented.is-block{display:flex}.el-segmented.is-block .el-segmented__item{min-width:0}.el-segmented--large{border-radius:var(--el-border-radius-base);font-size:16px;min-height:40px}.el-segmented--large .el-segmented__item-selected{border-radius:calc(var(--el-border-radius-base) - 2px)}.el-segmented--large .el-segmented--vertical .el-segmented__item{padding:11px}.el-segmented--large .el-segmented__item{border-radius:calc(var(--el-border-radius-base) - 2px);padding:0 11px}.el-segmented--small{border-radius:calc(var(--el-border-radius-base) - 1px);font-size:14px;min-height:24px}.el-segmented--small .el-segmented__item-selected{border-radius:calc(var(--el-border-radius-base) - 3px)}.el-segmented--small .el-segmented--vertical .el-segmented__item{padding:7px}.el-segmented--small .el-segmented__item{border-radius:calc(var(--el-border-radius-base) - 3px);padding:0 7px}.el-mention{position:relative;width:100%}.el-mention__popper.el-popper{background:var(--el-bg-color-overlay);box-shadow:var(--el-box-shadow-light)}.el-mention__popper.el-popper,.el-mention__popper.el-popper .el-popper__arrow:before{border:1px solid var(--el-border-color-light)}.el-mention__popper.el-popper[data-popper-placement^=top] .el-popper__arrow:before{border-left-color:transparent;border-top-color:transparent}.el-mention__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:transparent;border-right-color:transparent}.el-mention__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:transparent;border-left-color:transparent}.el-mention__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-right-color:transparent;border-top-color:transparent}.el-mention.is-disabled{pointer-events:none}.el-mention-dropdown{--el-mention-font-size:var(--el-font-size-base);--el-mention-bg-color:var(--el-bg-color-overlay);--el-mention-shadow:var(--el-box-shadow-light);--el-mention-border:1px solid var(--el-border-color-light);--el-mention-option-color:var(--el-text-color-regular);--el-mention-option-height:34px;--el-mention-option-min-width:100px;--el-mention-option-hover-background:var(--el-fill-color-light);--el-mention-option-selected-color:var(--el-color-primary);--el-mention-option-disabled-color:var(--el-text-color-placeholder);--el-mention-option-loading-color:var(--el-text-color-secondary);--el-mention-option-loading-padding:10px 0;--el-mention-max-height:174px;--el-mention-padding:6px 0;--el-mention-header-padding:10px;--el-mention-footer-padding:10px}.el-mention-dropdown__item{box-sizing:border-box;color:var(--el-mention-option-color);cursor:pointer;font-size:var(--el-mention-font-size);height:var(--el-mention-option-height);line-height:var(--el-mention-option-height);min-width:var(--el-mention-option-min-width);overflow:hidden;padding:0 20px;position:relative;text-overflow:ellipsis;white-space:nowrap}.el-mention-dropdown__item.is-hovering{background-color:var(--el-mention-option-hover-background)}.el-mention-dropdown__item.is-selected{color:var(--el-mention-option-selected-color);font-weight:bold}.el-mention-dropdown__item.is-disabled{background-color:unset;color:var(--el-mention-option-disabled-color);cursor:not-allowed}.el-mention-dropdown{border-radius:var(--el-border-radius-base);box-sizing:border-box;z-index:calc(var(--el-index-top) + 1)}.el-mention-dropdown__loading{color:var(--el-mention-option-loading-color);font-size:12px;margin:0;min-width:var(--el-mention-option-min-width);padding:10px 0;text-align:center}.el-mention-dropdown__wrap{max-height:var(--el-mention-max-height)}.el-mention-dropdown__list{box-sizing:border-box;list-style:none;margin:0;padding:var(--el-mention-padding)}.el-mention-dropdown__header{border-bottom:var(--el-mention-border);padding:var(--el-mention-header-padding)}.el-mention-dropdown__footer{border-top:var(--el-mention-border);padding:var(--el-mention-footer-padding)} \ No newline at end of file diff --git a/manager/static/images/favicon.ico b/manager/static/images/favicon.ico deleted file mode 100644 index 2e4ba64e..00000000 Binary files a/manager/static/images/favicon.ico and /dev/null differ diff --git a/manager/static/index.html b/manager/static/index.html deleted file mode 100644 index 2e087027..00000000 --- a/manager/static/index.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - - - - - - - - - 小智-server - - - -
-
- xiaozhi-esp32-server - -
- - - - -
- -
-
角色介绍
- -
{{ charCount }} / 2000
- -
- 保存配置 - 重置 -
- -
注意:保存配置后,需要重启设备,新的配置才会生效。
-
- - -
- - - - \ No newline at end of file diff --git a/manager/static/js/common.js b/manager/static/js/common.js deleted file mode 100644 index 790e6b43..00000000 --- a/manager/static/js/common.js +++ /dev/null @@ -1,68 +0,0 @@ -function post(api, bodyData, fn) { - let basePath = ''; - let token = localStorage.getItem('token'); - fetch(basePath + api, { - method: "POST", - headers: { - 'Content-Type': 'application/json', - 'Authorization': token, - }, - body: bodyData==null ? null : JSON.stringify(bodyData) - }) - .then(response => response.json()) - .then(data => { - if(data.code === 401){ - window.location = 'login.html'; - return - } - fn(data); - }); -} - -function get(api, fn) { - let basePath = 'http://localhost:8001'; - let token = localStorage.getItem('token'); - fetch(basePath + api, { - method: "GET", - headers: { - 'Content-Type': 'application/json', - 'Authorization': token, - }, - }) - .then(response => response.json()) - .then(data => { - if(data.code === 401){ - window.location = 'login.html'; - return - } - fn(data); - }); -} - -// 注册全局组件 -const AppHeader = { - template: ` -
- - xiaozhi-esp32-server -
- ` -}; - -const AppFooter = { - template: ` -
- © 2025 xiaozhi-esp32-server -
- ` -}; - -// 初始化Vue应用的通用配置 -function createVueApp(options) { - const app = Vue.createApp({ - ...options, - components: { AppHeader, AppFooter } - }); - app.use(ElementPlus); - return app; -} \ No newline at end of file diff --git a/manager/static/js/element-plus2.9.4.js b/manager/static/js/element-plus2.9.4.js deleted file mode 100644 index 82507d08..00000000 --- a/manager/static/js/element-plus2.9.4.js +++ /dev/null @@ -1,61619 +0,0 @@ -/*! Element Plus v2.9.4 */ - -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('vue')) : - typeof define === 'function' && define.amd ? define(['exports', 'vue'], factory) : - (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.ElementPlus = {}, global.Vue)); -})(this, (function (exports, vue) { 'use strict'; - - const FOCUSABLE_ELEMENT_SELECTORS = `a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])`; - const isVisible = (element) => { - const computed = getComputedStyle(element); - return computed.position === "fixed" ? false : element.offsetParent !== null; - }; - const obtainAllFocusableElements$1 = (element) => { - return Array.from(element.querySelectorAll(FOCUSABLE_ELEMENT_SELECTORS)).filter((item) => isFocusable(item) && isVisible(item)); - }; - const isFocusable = (element) => { - if (element.tabIndex > 0 || element.tabIndex === 0 && element.getAttribute("tabIndex") !== null) { - return true; - } - if (element.tabIndex < 0 || element.hasAttribute("disabled") || element.getAttribute("aria-disabled") === "true") { - return false; - } - switch (element.nodeName) { - case "A": { - return !!element.href && element.rel !== "ignore"; - } - case "INPUT": { - return !(element.type === "hidden" || element.type === "file"); - } - case "BUTTON": - case "SELECT": - case "TEXTAREA": { - return true; - } - default: { - return false; - } - } - }; - const triggerEvent = function(elm, name, ...opts) { - let eventName; - if (name.includes("mouse") || name.includes("click")) { - eventName = "MouseEvents"; - } else if (name.includes("key")) { - eventName = "KeyboardEvent"; - } else { - eventName = "HTMLEvents"; - } - const evt = document.createEvent(eventName); - evt.initEvent(name, ...opts); - elm.dispatchEvent(evt); - return elm; - }; - const isLeaf = (el) => !el.getAttribute("aria-owns"); - const getSibling = (el, distance, elClass) => { - const { parentNode } = el; - if (!parentNode) - return null; - const siblings = parentNode.querySelectorAll(elClass); - const index = Array.prototype.indexOf.call(siblings, el); - return siblings[index + distance] || null; - }; - const focusNode = (el) => { - if (!el) - return; - el.focus(); - !isLeaf(el) && el.click(); - }; - - const composeEventHandlers = (theirsHandler, oursHandler, { checkForDefaultPrevented = true } = {}) => { - const handleEvent = (event) => { - const shouldPrevent = theirsHandler == null ? void 0 : theirsHandler(event); - if (checkForDefaultPrevented === false || !shouldPrevent) { - return oursHandler == null ? void 0 : oursHandler(event); - } - }; - return handleEvent; - }; - const whenMouse = (handler) => { - return (e) => e.pointerType === "mouse" ? handler(e) : void 0; - }; - - var __defProp$9 = Object.defineProperty; - var __defProps$6 = Object.defineProperties; - var __getOwnPropDescs$6 = Object.getOwnPropertyDescriptors; - var __getOwnPropSymbols$b = Object.getOwnPropertySymbols; - var __hasOwnProp$b = Object.prototype.hasOwnProperty; - var __propIsEnum$b = Object.prototype.propertyIsEnumerable; - var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; - var __spreadValues$9 = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp$b.call(b, prop)) - __defNormalProp$9(a, prop, b[prop]); - if (__getOwnPropSymbols$b) - for (var prop of __getOwnPropSymbols$b(b)) { - if (__propIsEnum$b.call(b, prop)) - __defNormalProp$9(a, prop, b[prop]); - } - return a; - }; - var __spreadProps$6 = (a, b) => __defProps$6(a, __getOwnPropDescs$6(b)); - function computedEager(fn, options) { - var _a; - const result = vue.shallowRef(); - vue.watchEffect(() => { - result.value = fn(); - }, __spreadProps$6(__spreadValues$9({}, options), { - flush: (_a = options == null ? void 0 : options.flush) != null ? _a : "sync" - })); - return vue.readonly(result); - } - - var _a; - const isClient = typeof window !== "undefined"; - const isDef = (val) => typeof val !== "undefined"; - const isString$2 = (val) => typeof val === "string"; - const noop$1 = () => { - }; - const isIOS = isClient && ((_a = window == null ? void 0 : window.navigator) == null ? void 0 : _a.userAgent) && /iP(ad|hone|od)/.test(window.navigator.userAgent); - - function resolveUnref(r) { - return typeof r === "function" ? r() : vue.unref(r); - } - - function createFilterWrapper(filter, fn) { - function wrapper(...args) { - filter(() => fn.apply(this, args), { fn, thisArg: this, args }); - } - return wrapper; - } - function debounceFilter(ms, options = {}) { - let timer; - let maxTimer; - const filter = (invoke) => { - const duration = resolveUnref(ms); - const maxDuration = resolveUnref(options.maxWait); - if (timer) - clearTimeout(timer); - if (duration <= 0 || maxDuration !== void 0 && maxDuration <= 0) { - if (maxTimer) { - clearTimeout(maxTimer); - maxTimer = null; - } - return invoke(); - } - if (maxDuration && !maxTimer) { - maxTimer = setTimeout(() => { - if (timer) - clearTimeout(timer); - maxTimer = null; - invoke(); - }, maxDuration); - } - timer = setTimeout(() => { - if (maxTimer) - clearTimeout(maxTimer); - maxTimer = null; - invoke(); - }, duration); - }; - return filter; - } - function throttleFilter(ms, trailing = true, leading = true) { - let lastExec = 0; - let timer; - let isLeading = true; - const clear = () => { - if (timer) { - clearTimeout(timer); - timer = void 0; - } - }; - const filter = (invoke) => { - const duration = resolveUnref(ms); - const elapsed = Date.now() - lastExec; - clear(); - if (duration <= 0) { - lastExec = Date.now(); - return invoke(); - } - if (elapsed > duration && (leading || !isLeading)) { - lastExec = Date.now(); - invoke(); - } else if (trailing) { - timer = setTimeout(() => { - lastExec = Date.now(); - isLeading = true; - clear(); - invoke(); - }, duration); - } - if (!leading && !timer) - timer = setTimeout(() => isLeading = true, duration); - isLeading = false; - }; - return filter; - } - function identity$1(arg) { - return arg; - } - - function tryOnScopeDispose(fn) { - if (vue.getCurrentScope()) { - vue.onScopeDispose(fn); - return true; - } - return false; - } - - function useDebounceFn(fn, ms = 200, options = {}) { - return createFilterWrapper(debounceFilter(ms, options), fn); - } - - function refDebounced(value, ms = 200, options = {}) { - if (ms <= 0) - return value; - const debounced = vue.ref(value.value); - const updater = useDebounceFn(() => { - debounced.value = value.value; - }, ms, options); - vue.watch(value, () => updater()); - return debounced; - } - - function useThrottleFn(fn, ms = 200, trailing = false, leading = true) { - return createFilterWrapper(throttleFilter(ms, trailing, leading), fn); - } - - function tryOnMounted(fn, sync = true) { - if (vue.getCurrentInstance()) - vue.onMounted(fn); - else if (sync) - fn(); - else - vue.nextTick(fn); - } - - function useTimeoutFn(cb, interval, options = {}) { - const { - immediate = true - } = options; - const isPending = vue.ref(false); - let timer = null; - function clear() { - if (timer) { - clearTimeout(timer); - timer = null; - } - } - function stop() { - isPending.value = false; - clear(); - } - function start(...args) { - clear(); - isPending.value = true; - timer = setTimeout(() => { - isPending.value = false; - timer = null; - cb(...args); - }, resolveUnref(interval)); - } - if (immediate) { - isPending.value = true; - if (isClient) - start(); - } - tryOnScopeDispose(stop); - return { - isPending, - start, - stop - }; - } - - function unrefElement(elRef) { - var _a; - const plain = resolveUnref(elRef); - return (_a = plain == null ? void 0 : plain.$el) != null ? _a : plain; - } - - const defaultWindow = isClient ? window : void 0; - const defaultDocument = isClient ? window.document : void 0; - - function useEventListener(...args) { - let target; - let event; - let listener; - let options; - if (isString$2(args[0])) { - [event, listener, options] = args; - target = defaultWindow; - } else { - [target, event, listener, options] = args; - } - if (!target) - return noop$1; - let cleanup = noop$1; - const stopWatch = vue.watch(() => unrefElement(target), (el) => { - cleanup(); - if (!el) - return; - el.addEventListener(event, listener, options); - cleanup = () => { - el.removeEventListener(event, listener, options); - cleanup = noop$1; - }; - }, { immediate: true, flush: "post" }); - const stop = () => { - stopWatch(); - cleanup(); - }; - tryOnScopeDispose(stop); - return stop; - } - - function onClickOutside(target, handler, options = {}) { - const { window = defaultWindow, ignore, capture = true, detectIframe = false } = options; - if (!window) - return; - const shouldListen = vue.ref(true); - let fallback; - const listener = (event) => { - window.clearTimeout(fallback); - const el = unrefElement(target); - const composedPath = event.composedPath(); - if (!el || el === event.target || composedPath.includes(el) || !shouldListen.value) - return; - if (ignore && ignore.length > 0) { - if (ignore.some((target2) => { - const el2 = unrefElement(target2); - return el2 && (event.target === el2 || composedPath.includes(el2)); - })) - return; - } - handler(event); - }; - const cleanup = [ - useEventListener(window, "click", listener, { passive: true, capture }), - useEventListener(window, "pointerdown", (e) => { - const el = unrefElement(target); - shouldListen.value = !!el && !e.composedPath().includes(el); - }, { passive: true }), - useEventListener(window, "pointerup", (e) => { - if (e.button === 0) { - const path = e.composedPath(); - e.composedPath = () => path; - fallback = window.setTimeout(() => listener(e), 50); - } - }, { passive: true }), - detectIframe && useEventListener(window, "blur", (event) => { - var _a; - const el = unrefElement(target); - if (((_a = document.activeElement) == null ? void 0 : _a.tagName) === "IFRAME" && !(el == null ? void 0 : el.contains(document.activeElement))) - handler(event); - }) - ].filter(Boolean); - const stop = () => cleanup.forEach((fn) => fn()); - return stop; - } - - function useActiveElement(options = {}) { - const { window = defaultWindow } = options; - const counter = vue.ref(0); - if (window) { - useEventListener(window, "blur", () => counter.value += 1, true); - useEventListener(window, "focus", () => counter.value += 1, true); - } - return vue.computed(() => { - counter.value; - return window == null ? void 0 : window.document.activeElement; - }); - } - - function useSupported(callback, sync = false) { - const isSupported = vue.ref(); - const update = () => isSupported.value = Boolean(callback()); - update(); - tryOnMounted(update, sync); - return isSupported; - } - - const _global = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; - const globalKey = "__vueuse_ssr_handlers__"; - _global[globalKey] = _global[globalKey] || {}; - _global[globalKey]; - - function useCssVar(prop, target, { window = defaultWindow, initialValue = "" } = {}) { - const variable = vue.ref(initialValue); - const elRef = vue.computed(() => { - var _a; - return unrefElement(target) || ((_a = window == null ? void 0 : window.document) == null ? void 0 : _a.documentElement); - }); - vue.watch([elRef, () => resolveUnref(prop)], ([el, prop2]) => { - var _a; - if (el && window) { - const value = (_a = window.getComputedStyle(el).getPropertyValue(prop2)) == null ? void 0 : _a.trim(); - variable.value = value || initialValue; - } - }, { immediate: true }); - vue.watch(variable, (val) => { - var _a; - if ((_a = elRef.value) == null ? void 0 : _a.style) - elRef.value.style.setProperty(resolveUnref(prop), val); - }); - return variable; - } - - function useDocumentVisibility({ document = defaultDocument } = {}) { - if (!document) - return vue.ref("visible"); - const visibility = vue.ref(document.visibilityState); - useEventListener(document, "visibilitychange", () => { - visibility.value = document.visibilityState; - }); - return visibility; - } - - var __getOwnPropSymbols$f = Object.getOwnPropertySymbols; - var __hasOwnProp$f = Object.prototype.hasOwnProperty; - var __propIsEnum$f = Object.prototype.propertyIsEnumerable; - var __objRest$2 = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp$f.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols$f) - for (var prop of __getOwnPropSymbols$f(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum$f.call(source, prop)) - target[prop] = source[prop]; - } - return target; - }; - function useResizeObserver(target, callback, options = {}) { - const _a = options, { window = defaultWindow } = _a, observerOptions = __objRest$2(_a, ["window"]); - let observer; - const isSupported = useSupported(() => window && "ResizeObserver" in window); - const cleanup = () => { - if (observer) { - observer.disconnect(); - observer = void 0; - } - }; - const stopWatch = vue.watch(() => unrefElement(target), (el) => { - cleanup(); - if (isSupported.value && window && el) { - observer = new ResizeObserver(callback); - observer.observe(el, observerOptions); - } - }, { immediate: true, flush: "post" }); - const stop = () => { - cleanup(); - stopWatch(); - }; - tryOnScopeDispose(stop); - return { - isSupported, - stop - }; - } - - function useElementBounding(target, options = {}) { - const { - reset = true, - windowResize = true, - windowScroll = true, - immediate = true - } = options; - const height = vue.ref(0); - const bottom = vue.ref(0); - const left = vue.ref(0); - const right = vue.ref(0); - const top = vue.ref(0); - const width = vue.ref(0); - const x = vue.ref(0); - const y = vue.ref(0); - function update() { - const el = unrefElement(target); - if (!el) { - if (reset) { - height.value = 0; - bottom.value = 0; - left.value = 0; - right.value = 0; - top.value = 0; - width.value = 0; - x.value = 0; - y.value = 0; - } - return; - } - const rect = el.getBoundingClientRect(); - height.value = rect.height; - bottom.value = rect.bottom; - left.value = rect.left; - right.value = rect.right; - top.value = rect.top; - width.value = rect.width; - x.value = rect.x; - y.value = rect.y; - } - useResizeObserver(target, update); - vue.watch(() => unrefElement(target), (ele) => !ele && update()); - if (windowScroll) - useEventListener("scroll", update, { passive: true }); - if (windowResize) - useEventListener("resize", update, { passive: true }); - tryOnMounted(() => { - if (immediate) - update(); - }); - return { - height, - bottom, - left, - right, - top, - width, - x, - y, - update - }; - } - - var __getOwnPropSymbols$7 = Object.getOwnPropertySymbols; - var __hasOwnProp$7 = Object.prototype.hasOwnProperty; - var __propIsEnum$7 = Object.prototype.propertyIsEnumerable; - var __objRest$1 = (source, exclude) => { - var target = {}; - for (var prop in source) - if (__hasOwnProp$7.call(source, prop) && exclude.indexOf(prop) < 0) - target[prop] = source[prop]; - if (source != null && __getOwnPropSymbols$7) - for (var prop of __getOwnPropSymbols$7(source)) { - if (exclude.indexOf(prop) < 0 && __propIsEnum$7.call(source, prop)) - target[prop] = source[prop]; - } - return target; - }; - function useMutationObserver(target, callback, options = {}) { - const _a = options, { window = defaultWindow } = _a, mutationOptions = __objRest$1(_a, ["window"]); - let observer; - const isSupported = useSupported(() => window && "MutationObserver" in window); - const cleanup = () => { - if (observer) { - observer.disconnect(); - observer = void 0; - } - }; - const stopWatch = vue.watch(() => unrefElement(target), (el) => { - cleanup(); - if (isSupported.value && window && el) { - observer = new MutationObserver(callback); - observer.observe(el, mutationOptions); - } - }, { immediate: true }); - const stop = () => { - cleanup(); - stopWatch(); - }; - tryOnScopeDispose(stop); - return { - isSupported, - stop - }; - } - - var SwipeDirection; - (function(SwipeDirection2) { - SwipeDirection2["UP"] = "UP"; - SwipeDirection2["RIGHT"] = "RIGHT"; - SwipeDirection2["DOWN"] = "DOWN"; - SwipeDirection2["LEFT"] = "LEFT"; - SwipeDirection2["NONE"] = "NONE"; - })(SwipeDirection || (SwipeDirection = {})); - - var __defProp = Object.defineProperty; - var __getOwnPropSymbols = Object.getOwnPropertySymbols; - var __hasOwnProp = Object.prototype.hasOwnProperty; - var __propIsEnum = Object.prototype.propertyIsEnumerable; - var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value; - var __spreadValues = (a, b) => { - for (var prop in b || (b = {})) - if (__hasOwnProp.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - if (__getOwnPropSymbols) - for (var prop of __getOwnPropSymbols(b)) { - if (__propIsEnum.call(b, prop)) - __defNormalProp(a, prop, b[prop]); - } - return a; - }; - const _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] - }; - __spreadValues({ - linear: identity$1 - }, _TransitionPresets); - - function useVModel(props, key, emit, options = {}) { - var _a, _b, _c; - const { - passive = false, - eventName, - deep = false, - defaultValue - } = options; - const vm = vue.getCurrentInstance(); - const _emit = emit || (vm == null ? void 0 : vm.emit) || ((_a = vm == null ? void 0 : vm.$emit) == null ? void 0 : _a.bind(vm)) || ((_c = (_b = vm == null ? void 0 : vm.proxy) == null ? void 0 : _b.$emit) == null ? void 0 : _c.bind(vm == null ? void 0 : vm.proxy)); - let event = eventName; - if (!key) { - { - key = "modelValue"; - } - } - event = eventName || event || `update:${key.toString()}`; - const getValue = () => isDef(props[key]) ? props[key] : defaultValue; - if (passive) { - const proxy = vue.ref(getValue()); - vue.watch(() => props[key], (v) => proxy.value = v); - vue.watch(proxy, (v) => { - if (v !== props[key] || deep) - _emit(event, v); - }, { - deep - }); - return proxy; - } else { - return vue.computed({ - get() { - return getValue(); - }, - set(value) { - _emit(event, value); - } - }); - } - } - - function useWindowFocus({ window = defaultWindow } = {}) { - if (!window) - return vue.ref(false); - const focused = vue.ref(window.document.hasFocus()); - useEventListener(window, "blur", () => { - focused.value = false; - }); - useEventListener(window, "focus", () => { - focused.value = true; - }); - return focused; - } - - function useWindowSize(options = {}) { - const { - window = defaultWindow, - initialWidth = Infinity, - initialHeight = Infinity, - listenOrientation = true - } = options; - const width = vue.ref(initialWidth); - const height = vue.ref(initialHeight); - const update = () => { - if (window) { - width.value = window.innerWidth; - height.value = window.innerHeight; - } - }; - update(); - tryOnMounted(update); - useEventListener("resize", update, { passive: true }); - if (listenOrientation) - useEventListener("orientationchange", update, { passive: true }); - return { width, height }; - } - - const isFirefox = () => isClient && /firefox/i.test(window.navigator.userAgent); - - const isInContainer = (el, container) => { - if (!isClient || !el || !container) - return false; - const elRect = el.getBoundingClientRect(); - let containerRect; - if (container instanceof Element) { - containerRect = container.getBoundingClientRect(); - } else { - containerRect = { - top: 0, - right: window.innerWidth, - bottom: window.innerHeight, - left: 0 - }; - } - return elRect.top < containerRect.bottom && elRect.bottom > containerRect.top && elRect.right > containerRect.left && elRect.left < containerRect.right; - }; - const getOffsetTop = (el) => { - let offset = 0; - let parent = el; - while (parent) { - offset += parent.offsetTop; - parent = parent.offsetParent; - } - return offset; - }; - const getOffsetTopDistance = (el, containerEl) => { - return Math.abs(getOffsetTop(el) - getOffsetTop(containerEl)); - }; - const getClientXY = (event) => { - let clientX; - let clientY; - if (event.type === "touchend") { - clientY = event.changedTouches[0].clientY; - clientX = event.changedTouches[0].clientX; - } else if (event.type.startsWith("touch")) { - clientY = event.touches[0].clientY; - clientX = event.touches[0].clientX; - } else { - clientY = event.clientY; - clientX = event.clientX; - } - return { - clientX, - clientY - }; - }; - - function easeInOutCubic(t, b, c, d) { - const cc = c - b; - t /= d / 2; - if (t < 1) { - return cc / 2 * t * t * t + b; - } - return cc / 2 * ((t -= 2) * t * t + 2) + b; - } - - const NOOP = () => { - }; - const hasOwnProperty$p = Object.prototype.hasOwnProperty; - const hasOwn = (val, key) => hasOwnProperty$p.call(val, key); - const isArray$1 = Array.isArray; - const isDate$1 = (val) => toTypeString(val) === "[object Date]"; - const isFunction$1 = (val) => typeof val === "function"; - const isString$1 = (val) => typeof val === "string"; - const isObject$1 = (val) => val !== null && typeof val === "object"; - const isPromise = (val) => { - return isObject$1(val) && isFunction$1(val.then) && isFunction$1(val.catch); - }; - const objectToString$1 = Object.prototype.toString; - const toTypeString = (value) => objectToString$1.call(value); - const isPlainObject$1 = (val) => toTypeString(val) === "[object Object]"; - const cacheStringFunction = (fn) => { - const cache = /* @__PURE__ */ Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; - }; - const camelizeRE = /-(\w)/g; - const camelize = cacheStringFunction((str) => { - return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); - }); - const hyphenateRE = /\B([A-Z])/g; - const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase()); - const capitalize$2 = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1)); - - var freeGlobal = typeof global == "object" && global && global.Object === Object && global; - - var freeSelf = typeof self == "object" && self && self.Object === Object && self; - var root = freeGlobal || freeSelf || Function("return this")(); - - var Symbol$1 = root.Symbol; - - var objectProto$s = Object.prototype; - var hasOwnProperty$o = objectProto$s.hasOwnProperty; - var nativeObjectToString$3 = objectProto$s.toString; - var symToStringTag$1 = Symbol$1 ? Symbol$1.toStringTag : void 0; - function getRawTag(value) { - var isOwn = hasOwnProperty$o.call(value, symToStringTag$1), tag = value[symToStringTag$1]; - try { - value[symToStringTag$1] = void 0; - var unmasked = true; - } catch (e) { - } - var result = nativeObjectToString$3.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag$1] = tag; - } else { - delete value[symToStringTag$1]; - } - } - return result; - } - - var objectProto$r = Object.prototype; - var nativeObjectToString$2 = objectProto$r.toString; - function objectToString(value) { - return nativeObjectToString$2.call(value); - } - - var nullTag = "[object Null]"; - var undefinedTag = "[object Undefined]"; - var symToStringTag = Symbol$1 ? Symbol$1.toStringTag : void 0; - function baseGetTag(value) { - if (value == null) { - return value === void 0 ? undefinedTag : nullTag; - } - return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); - } - - function isObjectLike(value) { - return value != null && typeof value == "object"; - } - - var symbolTag$3 = "[object Symbol]"; - function isSymbol(value) { - return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$3; - } - - var NAN$2 = 0 / 0; - function baseToNumber(value) { - if (typeof value == "number") { - return value; - } - if (isSymbol(value)) { - return NAN$2; - } - return +value; - } - - function arrayMap(array, iteratee) { - var index = -1, length = array == null ? 0 : array.length, result = Array(length); - while (++index < length) { - result[index] = iteratee(array[index], index, array); - } - return result; - } - - var isArray = Array.isArray; - - var INFINITY$5 = 1 / 0; - var symbolProto$2 = Symbol$1 ? Symbol$1.prototype : void 0; - var symbolToString = symbolProto$2 ? symbolProto$2.toString : void 0; - function baseToString(value) { - if (typeof value == "string") { - return value; - } - if (isArray(value)) { - return arrayMap(value, baseToString) + ""; - } - if (isSymbol(value)) { - return symbolToString ? symbolToString.call(value) : ""; - } - var result = value + ""; - return result == "0" && 1 / value == -INFINITY$5 ? "-0" : result; - } - - function createMathOperation(operator, defaultValue) { - return function(value, other) { - var result; - if (value === void 0 && other === void 0) { - return defaultValue; - } - if (value !== void 0) { - result = value; - } - if (other !== void 0) { - if (result === void 0) { - return other; - } - if (typeof value == "string" || typeof other == "string") { - value = baseToString(value); - other = baseToString(other); - } else { - value = baseToNumber(value); - other = baseToNumber(other); - } - result = operator(value, other); - } - return result; - }; - } - - var add = createMathOperation(function(augend, addend) { - return augend + addend; - }, 0); - - var reWhitespace = /\s/; - function trimmedEndIndex(string) { - var index = string.length; - while (index-- && reWhitespace.test(string.charAt(index))) { - } - return index; - } - - var reTrimStart$2 = /^\s+/; - function baseTrim(string) { - return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart$2, "") : string; - } - - function isObject(value) { - var type = typeof value; - return value != null && (type == "object" || type == "function"); - } - - var NAN$1 = 0 / 0; - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - var reIsBinary = /^0b[01]+$/i; - var reIsOctal = /^0o[0-7]+$/i; - var freeParseInt = parseInt; - function toNumber(value) { - if (typeof value == "number") { - return value; - } - if (isSymbol(value)) { - return NAN$1; - } - if (isObject(value)) { - var other = typeof value.valueOf == "function" ? value.valueOf() : value; - value = isObject(other) ? other + "" : other; - } - if (typeof value != "string") { - return value === 0 ? value : +value; - } - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN$1 : +value; - } - - var INFINITY$4 = 1 / 0; - var MAX_INTEGER = 17976931348623157e292; - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY$4 || value === -INFINITY$4) { - var sign = value < 0 ? -1 : 1; - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - function toInteger(value) { - var result = toFinite(value), remainder = result % 1; - return result === result ? remainder ? result - remainder : result : 0; - } - - var FUNC_ERROR_TEXT$b = "Expected a function"; - function after(n, func) { - if (typeof func != "function") { - throw new TypeError(FUNC_ERROR_TEXT$b); - } - n = toInteger(n); - return function() { - if (--n < 1) { - return func.apply(this, arguments); - } - }; - } - - function identity(value) { - return value; - } - - var asyncTag = "[object AsyncFunction]"; - var funcTag$2 = "[object Function]"; - var genTag$1 = "[object GeneratorFunction]"; - var proxyTag = "[object Proxy]"; - function isFunction(value) { - if (!isObject(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag; - } - - var coreJsData = root["__core-js_shared__"]; - - var maskSrcKey = function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); - return uid ? "Symbol(src)_1." + uid : ""; - }(); - function isMasked(func) { - return !!maskSrcKey && maskSrcKey in func; - } - - var funcProto$2 = Function.prototype; - var funcToString$2 = funcProto$2.toString; - function toSource(func) { - if (func != null) { - try { - return funcToString$2.call(func); - } catch (e) { - } - try { - return func + ""; - } catch (e) { - } - } - return ""; - } - - var reRegExpChar$1 = /[\\^$.*+?()[\]{}|]/g; - var reIsHostCtor = /^\[object .+?Constructor\]$/; - var funcProto$1 = Function.prototype; - var objectProto$q = Object.prototype; - var funcToString$1 = funcProto$1.toString; - var hasOwnProperty$n = objectProto$q.hasOwnProperty; - var reIsNative = RegExp("^" + funcToString$1.call(hasOwnProperty$n).replace(reRegExpChar$1, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) { - return false; - } - var pattern = isFunction(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource(value)); - } - - function getValue$1(object, key) { - return object == null ? void 0 : object[key]; - } - - function getNative(object, key) { - var value = getValue$1(object, key); - return baseIsNative(value) ? value : void 0; - } - - var WeakMap = getNative(root, "WeakMap"); - - var metaMap = WeakMap && new WeakMap(); - - var baseSetData = !metaMap ? identity : function(func, data) { - metaMap.set(func, data); - return func; - }; - - var objectCreate = Object.create; - var baseCreate = function() { - function object() { - } - return function(proto) { - if (!isObject(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object(); - object.prototype = void 0; - return result; - }; - }(); - - function createCtor(Ctor) { - return function() { - var args = arguments; - switch (args.length) { - case 0: - return new Ctor(); - case 1: - return new Ctor(args[0]); - case 2: - return new Ctor(args[0], args[1]); - case 3: - return new Ctor(args[0], args[1], args[2]); - case 4: - return new Ctor(args[0], args[1], args[2], args[3]); - case 5: - return new Ctor(args[0], args[1], args[2], args[3], args[4]); - case 6: - return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]); - case 7: - return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]); - } - var thisBinding = baseCreate(Ctor.prototype), result = Ctor.apply(thisBinding, args); - return isObject(result) ? result : thisBinding; - }; - } - - var WRAP_BIND_FLAG$8 = 1; - function createBind(func, bitmask, thisArg) { - var isBind = bitmask & WRAP_BIND_FLAG$8, Ctor = createCtor(func); - function wrapper() { - var fn = this && this !== root && this instanceof wrapper ? Ctor : func; - return fn.apply(isBind ? thisArg : this, arguments); - } - return wrapper; - } - - function apply(func, thisArg, args) { - switch (args.length) { - case 0: - return func.call(thisArg); - case 1: - return func.call(thisArg, args[0]); - case 2: - return func.call(thisArg, args[0], args[1]); - case 3: - return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - - var nativeMax$g = Math.max; - function composeArgs(args, partials, holders, isCurried) { - var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax$g(argsLength - holdersLength, 0), result = Array(leftLength + rangeLength), isUncurried = !isCurried; - while (++leftIndex < leftLength) { - result[leftIndex] = partials[leftIndex]; - } - while (++argsIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[holders[argsIndex]] = args[argsIndex]; - } - } - while (rangeLength--) { - result[leftIndex++] = args[argsIndex++]; - } - return result; - } - - var nativeMax$f = Math.max; - function composeArgsRight(args, partials, holders, isCurried) { - var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax$f(argsLength - holdersLength, 0), result = Array(rangeLength + rightLength), isUncurried = !isCurried; - while (++argsIndex < rangeLength) { - result[argsIndex] = args[argsIndex]; - } - var offset = argsIndex; - while (++rightIndex < rightLength) { - result[offset + rightIndex] = partials[rightIndex]; - } - while (++holdersIndex < holdersLength) { - if (isUncurried || argsIndex < argsLength) { - result[offset + holders[holdersIndex]] = args[argsIndex++]; - } - } - return result; - } - - function countHolders(array, placeholder) { - var length = array.length, result = 0; - while (length--) { - if (array[length] === placeholder) { - ++result; - } - } - return result; - } - - function baseLodash() { - } - - var MAX_ARRAY_LENGTH$6 = 4294967295; - function LazyWrapper(value) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__dir__ = 1; - this.__filtered__ = false; - this.__iteratees__ = []; - this.__takeCount__ = MAX_ARRAY_LENGTH$6; - this.__views__ = []; - } - LazyWrapper.prototype = baseCreate(baseLodash.prototype); - LazyWrapper.prototype.constructor = LazyWrapper; - - function noop() { - } - - var getData = !metaMap ? noop : function(func) { - return metaMap.get(func); - }; - - var realNames = {}; - - var objectProto$p = Object.prototype; - var hasOwnProperty$m = objectProto$p.hasOwnProperty; - function getFuncName(func) { - var result = func.name + "", array = realNames[result], length = hasOwnProperty$m.call(realNames, result) ? array.length : 0; - while (length--) { - var data = array[length], otherFunc = data.func; - if (otherFunc == null || otherFunc == func) { - return data.name; - } - } - return result; - } - - function LodashWrapper(value, chainAll) { - this.__wrapped__ = value; - this.__actions__ = []; - this.__chain__ = !!chainAll; - this.__index__ = 0; - this.__values__ = void 0; - } - LodashWrapper.prototype = baseCreate(baseLodash.prototype); - LodashWrapper.prototype.constructor = LodashWrapper; - - function copyArray(source, array) { - var index = -1, length = source.length; - array || (array = Array(length)); - while (++index < length) { - array[index] = source[index]; - } - return array; - } - - function wrapperClone(wrapper) { - if (wrapper instanceof LazyWrapper) { - return wrapper.clone(); - } - var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__); - result.__actions__ = copyArray(wrapper.__actions__); - result.__index__ = wrapper.__index__; - result.__values__ = wrapper.__values__; - return result; - } - - var objectProto$o = Object.prototype; - var hasOwnProperty$l = objectProto$o.hasOwnProperty; - function lodash(value) { - if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) { - if (value instanceof LodashWrapper) { - return value; - } - if (hasOwnProperty$l.call(value, "__wrapped__")) { - return wrapperClone(value); - } - } - return new LodashWrapper(value); - } - lodash.prototype = baseLodash.prototype; - lodash.prototype.constructor = lodash; - - function isLaziable(func) { - var funcName = getFuncName(func), other = lodash[funcName]; - if (typeof other != "function" || !(funcName in LazyWrapper.prototype)) { - return false; - } - if (func === other) { - return true; - } - var data = getData(other); - return !!data && func === data[0]; - } - - var HOT_COUNT = 800; - var HOT_SPAN = 16; - var nativeNow = Date.now; - function shortOut(func) { - var count = 0, lastCalled = 0; - return function() { - var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(void 0, arguments); - }; - } - - var setData = shortOut(baseSetData); - - var reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/; - var reSplitDetails = /,? & /; - function getWrapDetails(source) { - var match = source.match(reWrapDetails); - return match ? match[1].split(reSplitDetails) : []; - } - - var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/; - function insertWrapDetails(source, details) { - var length = details.length; - if (!length) { - return source; - } - var lastIndex = length - 1; - details[lastIndex] = (length > 1 ? "& " : "") + details[lastIndex]; - details = details.join(length > 2 ? ", " : " "); - return source.replace(reWrapComment, "{\n/* [wrapped with " + details + "] */\n"); - } - - function constant(value) { - return function() { - return value; - }; - } - - var defineProperty = function() { - try { - var func = getNative(Object, "defineProperty"); - func({}, "", {}); - return func; - } catch (e) { - } - }(); - - var baseSetToString = !defineProperty ? identity : function(func, string) { - return defineProperty(func, "toString", { - "configurable": true, - "enumerable": false, - "value": constant(string), - "writable": true - }); - }; - - var setToString = shortOut(baseSetToString); - - function arrayEach(array, iteratee) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; - } - - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, index = fromIndex + (fromRight ? 1 : -1); - while (fromRight ? index-- : ++index < length) { - if (predicate(array[index], index, array)) { - return index; - } - } - return -1; - } - - function baseIsNaN(value) { - return value !== value; - } - - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, length = array.length; - while (++index < length) { - if (array[index] === value) { - return index; - } - } - return -1; - } - - function baseIndexOf(array, value, fromIndex) { - return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); - } - - function arrayIncludes(array, value) { - var length = array == null ? 0 : array.length; - return !!length && baseIndexOf(array, value, 0) > -1; - } - - var WRAP_BIND_FLAG$7 = 1; - var WRAP_BIND_KEY_FLAG$6 = 2; - var WRAP_CURRY_FLAG$6 = 8; - var WRAP_CURRY_RIGHT_FLAG$3 = 16; - var WRAP_PARTIAL_FLAG$6 = 32; - var WRAP_PARTIAL_RIGHT_FLAG$3 = 64; - var WRAP_ARY_FLAG$4 = 128; - var WRAP_REARG_FLAG$3 = 256; - var WRAP_FLIP_FLAG$2 = 512; - var wrapFlags = [ - ["ary", WRAP_ARY_FLAG$4], - ["bind", WRAP_BIND_FLAG$7], - ["bindKey", WRAP_BIND_KEY_FLAG$6], - ["curry", WRAP_CURRY_FLAG$6], - ["curryRight", WRAP_CURRY_RIGHT_FLAG$3], - ["flip", WRAP_FLIP_FLAG$2], - ["partial", WRAP_PARTIAL_FLAG$6], - ["partialRight", WRAP_PARTIAL_RIGHT_FLAG$3], - ["rearg", WRAP_REARG_FLAG$3] - ]; - function updateWrapDetails(details, bitmask) { - arrayEach(wrapFlags, function(pair) { - var value = "_." + pair[0]; - if (bitmask & pair[1] && !arrayIncludes(details, value)) { - details.push(value); - } - }); - return details.sort(); - } - - function setWrapToString(wrapper, reference, bitmask) { - var source = reference + ""; - return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask))); - } - - var WRAP_BIND_FLAG$6 = 1; - var WRAP_BIND_KEY_FLAG$5 = 2; - var WRAP_CURRY_BOUND_FLAG$1 = 4; - var WRAP_CURRY_FLAG$5 = 8; - var WRAP_PARTIAL_FLAG$5 = 32; - var WRAP_PARTIAL_RIGHT_FLAG$2 = 64; - function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) { - var isCurry = bitmask & WRAP_CURRY_FLAG$5, newHolders = isCurry ? holders : void 0, newHoldersRight = isCurry ? void 0 : holders, newPartials = isCurry ? partials : void 0, newPartialsRight = isCurry ? void 0 : partials; - bitmask |= isCurry ? WRAP_PARTIAL_FLAG$5 : WRAP_PARTIAL_RIGHT_FLAG$2; - bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG$2 : WRAP_PARTIAL_FLAG$5); - if (!(bitmask & WRAP_CURRY_BOUND_FLAG$1)) { - bitmask &= ~(WRAP_BIND_FLAG$6 | WRAP_BIND_KEY_FLAG$5); - } - var newData = [ - func, - bitmask, - thisArg, - newPartials, - newHolders, - newPartialsRight, - newHoldersRight, - argPos, - ary, - arity - ]; - var result = wrapFunc.apply(void 0, newData); - if (isLaziable(func)) { - setData(result, newData); - } - result.placeholder = placeholder; - return setWrapToString(result, func, bitmask); - } - - function getHolder(func) { - var object = func; - return object.placeholder; - } - - var MAX_SAFE_INTEGER$5 = 9007199254740991; - var reIsUint = /^(?:0|[1-9]\d*)$/; - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$5 : length; - return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length); - } - - var nativeMin$e = Math.min; - function reorder(array, indexes) { - var arrLength = array.length, length = nativeMin$e(indexes.length, arrLength), oldArray = copyArray(array); - while (length--) { - var index = indexes[length]; - array[length] = isIndex(index, arrLength) ? oldArray[index] : void 0; - } - return array; - } - - var PLACEHOLDER$1 = "__lodash_placeholder__"; - function replaceHolders(array, placeholder) { - var index = -1, length = array.length, resIndex = 0, result = []; - while (++index < length) { - var value = array[index]; - if (value === placeholder || value === PLACEHOLDER$1) { - array[index] = PLACEHOLDER$1; - result[resIndex++] = index; - } - } - return result; - } - - var WRAP_BIND_FLAG$5 = 1; - var WRAP_BIND_KEY_FLAG$4 = 2; - var WRAP_CURRY_FLAG$4 = 8; - var WRAP_CURRY_RIGHT_FLAG$2 = 16; - var WRAP_ARY_FLAG$3 = 128; - var WRAP_FLIP_FLAG$1 = 512; - function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) { - var isAry = bitmask & WRAP_ARY_FLAG$3, isBind = bitmask & WRAP_BIND_FLAG$5, isBindKey = bitmask & WRAP_BIND_KEY_FLAG$4, isCurried = bitmask & (WRAP_CURRY_FLAG$4 | WRAP_CURRY_RIGHT_FLAG$2), isFlip = bitmask & WRAP_FLIP_FLAG$1, Ctor = isBindKey ? void 0 : createCtor(func); - function wrapper() { - var length = arguments.length, args = Array(length), index = length; - while (index--) { - args[index] = arguments[index]; - } - if (isCurried) { - var placeholder = getHolder(wrapper), holdersCount = countHolders(args, placeholder); - } - if (partials) { - args = composeArgs(args, partials, holders, isCurried); - } - if (partialsRight) { - args = composeArgsRight(args, partialsRight, holdersRight, isCurried); - } - length -= holdersCount; - if (isCurried && length < arity) { - var newHolders = replaceHolders(args, placeholder); - return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary, arity - length); - } - var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func; - length = args.length; - if (argPos) { - args = reorder(args, argPos); - } else if (isFlip && length > 1) { - args.reverse(); - } - if (isAry && ary < length) { - args.length = ary; - } - if (this && this !== root && this instanceof wrapper) { - fn = Ctor || createCtor(fn); - } - return fn.apply(thisBinding, args); - } - return wrapper; - } - - function createCurry(func, bitmask, arity) { - var Ctor = createCtor(func); - function wrapper() { - var length = arguments.length, args = Array(length), index = length, placeholder = getHolder(wrapper); - while (index--) { - args[index] = arguments[index]; - } - var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder); - length -= holders.length; - if (length < arity) { - return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, void 0, args, holders, void 0, void 0, arity - length); - } - var fn = this && this !== root && this instanceof wrapper ? Ctor : func; - return apply(fn, this, args); - } - return wrapper; - } - - var WRAP_BIND_FLAG$4 = 1; - function createPartial(func, bitmask, thisArg, partials) { - var isBind = bitmask & WRAP_BIND_FLAG$4, Ctor = createCtor(func); - function wrapper() { - var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array(leftLength + argsLength), fn = this && this !== root && this instanceof wrapper ? Ctor : func; - while (++leftIndex < leftLength) { - args[leftIndex] = partials[leftIndex]; - } - while (argsLength--) { - args[leftIndex++] = arguments[++argsIndex]; - } - return apply(fn, isBind ? thisArg : this, args); - } - return wrapper; - } - - var PLACEHOLDER = "__lodash_placeholder__"; - var WRAP_BIND_FLAG$3 = 1; - var WRAP_BIND_KEY_FLAG$3 = 2; - var WRAP_CURRY_BOUND_FLAG = 4; - var WRAP_CURRY_FLAG$3 = 8; - var WRAP_ARY_FLAG$2 = 128; - var WRAP_REARG_FLAG$2 = 256; - var nativeMin$d = Math.min; - function mergeData(data, source) { - var bitmask = data[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG$3 | WRAP_BIND_KEY_FLAG$3 | WRAP_ARY_FLAG$2); - var isCombo = srcBitmask == WRAP_ARY_FLAG$2 && bitmask == WRAP_CURRY_FLAG$3 || srcBitmask == WRAP_ARY_FLAG$2 && bitmask == WRAP_REARG_FLAG$2 && data[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG$2 | WRAP_REARG_FLAG$2) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG$3; - if (!(isCommon || isCombo)) { - return data; - } - if (srcBitmask & WRAP_BIND_FLAG$3) { - data[2] = source[2]; - newBitmask |= bitmask & WRAP_BIND_FLAG$3 ? 0 : WRAP_CURRY_BOUND_FLAG; - } - var value = source[3]; - if (value) { - var partials = data[3]; - data[3] = partials ? composeArgs(partials, value, source[4]) : value; - data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4]; - } - value = source[5]; - if (value) { - partials = data[5]; - data[5] = partials ? composeArgsRight(partials, value, source[6]) : value; - data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6]; - } - value = source[7]; - if (value) { - data[7] = value; - } - if (srcBitmask & WRAP_ARY_FLAG$2) { - data[8] = data[8] == null ? source[8] : nativeMin$d(data[8], source[8]); - } - if (data[9] == null) { - data[9] = source[9]; - } - data[0] = source[0]; - data[1] = newBitmask; - return data; - } - - var FUNC_ERROR_TEXT$a = "Expected a function"; - var WRAP_BIND_FLAG$2 = 1; - var WRAP_BIND_KEY_FLAG$2 = 2; - var WRAP_CURRY_FLAG$2 = 8; - var WRAP_CURRY_RIGHT_FLAG$1 = 16; - var WRAP_PARTIAL_FLAG$4 = 32; - var WRAP_PARTIAL_RIGHT_FLAG$1 = 64; - var nativeMax$e = Math.max; - function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) { - var isBindKey = bitmask & WRAP_BIND_KEY_FLAG$2; - if (!isBindKey && typeof func != "function") { - throw new TypeError(FUNC_ERROR_TEXT$a); - } - var length = partials ? partials.length : 0; - if (!length) { - bitmask &= ~(WRAP_PARTIAL_FLAG$4 | WRAP_PARTIAL_RIGHT_FLAG$1); - partials = holders = void 0; - } - ary = ary === void 0 ? ary : nativeMax$e(toInteger(ary), 0); - arity = arity === void 0 ? arity : toInteger(arity); - length -= holders ? holders.length : 0; - if (bitmask & WRAP_PARTIAL_RIGHT_FLAG$1) { - var partialsRight = partials, holdersRight = holders; - partials = holders = void 0; - } - var data = isBindKey ? void 0 : getData(func); - var newData = [ - func, - bitmask, - thisArg, - partials, - holders, - partialsRight, - holdersRight, - argPos, - ary, - arity - ]; - if (data) { - mergeData(newData, data); - } - func = newData[0]; - bitmask = newData[1]; - thisArg = newData[2]; - partials = newData[3]; - holders = newData[4]; - arity = newData[9] = newData[9] === void 0 ? isBindKey ? 0 : func.length : nativeMax$e(newData[9] - length, 0); - if (!arity && bitmask & (WRAP_CURRY_FLAG$2 | WRAP_CURRY_RIGHT_FLAG$1)) { - bitmask &= ~(WRAP_CURRY_FLAG$2 | WRAP_CURRY_RIGHT_FLAG$1); - } - if (!bitmask || bitmask == WRAP_BIND_FLAG$2) { - var result = createBind(func, bitmask, thisArg); - } else if (bitmask == WRAP_CURRY_FLAG$2 || bitmask == WRAP_CURRY_RIGHT_FLAG$1) { - result = createCurry(func, bitmask, arity); - } else if ((bitmask == WRAP_PARTIAL_FLAG$4 || bitmask == (WRAP_BIND_FLAG$2 | WRAP_PARTIAL_FLAG$4)) && !holders.length) { - result = createPartial(func, bitmask, thisArg, partials); - } else { - result = createHybrid.apply(void 0, newData); - } - var setter = data ? baseSetData : setData; - return setWrapToString(setter(result, newData), func, bitmask); - } - - var WRAP_ARY_FLAG$1 = 128; - function ary(func, n, guard) { - n = guard ? void 0 : n; - n = func && n == null ? func.length : n; - return createWrap(func, WRAP_ARY_FLAG$1, void 0, void 0, void 0, void 0, n); - } - - function baseAssignValue(object, key, value) { - if (key == "__proto__" && defineProperty) { - defineProperty(object, key, { - "configurable": true, - "enumerable": true, - "value": value, - "writable": true - }); - } else { - object[key] = value; - } - } - - function eq(value, other) { - return value === other || value !== value && other !== other; - } - - var objectProto$n = Object.prototype; - var hasOwnProperty$k = objectProto$n.hasOwnProperty; - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$k.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) { - baseAssignValue(object, key, value); - } - } - - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - var index = -1, length = props.length; - while (++index < length) { - var key = props[index]; - var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0; - if (newValue === void 0) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue(object, key, newValue); - } - } - return object; - } - - var nativeMax$d = Math.max; - function overRest(func, start, transform) { - start = nativeMax$d(start === void 0 ? func.length - 1 : start, 0); - return function() { - var args = arguments, index = -1, length = nativeMax$d(args.length - start, 0), array = Array(length); - while (++index < length) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - - function baseRest(func, start) { - return setToString(overRest(func, start, identity), func + ""); - } - - var MAX_SAFE_INTEGER$4 = 9007199254740991; - function isLength(value) { - return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$4; - } - - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - function isIterateeCall(value, index, object) { - if (!isObject(object)) { - return false; - } - var type = typeof index; - if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) { - return eq(object[index], value); - } - return false; - } - - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0; - customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? void 0 : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) { - assigner(object, source, index, customizer); - } - } - return object; - }); - } - - var objectProto$m = Object.prototype; - function isPrototype(value) { - var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$m; - return value === proto; - } - - function baseTimes(n, iteratee) { - var index = -1, result = Array(n); - while (++index < n) { - result[index] = iteratee(index); - } - return result; - } - - var argsTag$3 = "[object Arguments]"; - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$3; - } - - var objectProto$l = Object.prototype; - var hasOwnProperty$j = objectProto$l.hasOwnProperty; - var propertyIsEnumerable$1 = objectProto$l.propertyIsEnumerable; - var isArguments = baseIsArguments(function() { - return arguments; - }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$j.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee"); - }; - - function stubFalse() { - return false; - } - - var freeExports$2 = typeof exports == "object" && exports && !exports.nodeType && exports; - var freeModule$2 = freeExports$2 && typeof module == "object" && module && !module.nodeType && module; - var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2; - var Buffer$1 = moduleExports$2 ? root.Buffer : void 0; - var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : void 0; - var isBuffer = nativeIsBuffer || stubFalse; - - var argsTag$2 = "[object Arguments]"; - var arrayTag$2 = "[object Array]"; - var boolTag$4 = "[object Boolean]"; - var dateTag$4 = "[object Date]"; - var errorTag$3 = "[object Error]"; - var funcTag$1 = "[object Function]"; - var mapTag$9 = "[object Map]"; - var numberTag$4 = "[object Number]"; - var objectTag$4 = "[object Object]"; - var regexpTag$4 = "[object RegExp]"; - var setTag$9 = "[object Set]"; - var stringTag$4 = "[object String]"; - var weakMapTag$3 = "[object WeakMap]"; - var arrayBufferTag$4 = "[object ArrayBuffer]"; - var dataViewTag$4 = "[object DataView]"; - var float32Tag$2 = "[object Float32Array]"; - var float64Tag$2 = "[object Float64Array]"; - var int8Tag$2 = "[object Int8Array]"; - var int16Tag$2 = "[object Int16Array]"; - var int32Tag$2 = "[object Int32Array]"; - var uint8Tag$2 = "[object Uint8Array]"; - var uint8ClampedTag$2 = "[object Uint8ClampedArray]"; - var uint16Tag$2 = "[object Uint16Array]"; - var uint32Tag$2 = "[object Uint32Array]"; - var typedArrayTags = {}; - typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true; - typedArrayTags[argsTag$2] = typedArrayTags[arrayTag$2] = typedArrayTags[arrayBufferTag$4] = typedArrayTags[boolTag$4] = typedArrayTags[dataViewTag$4] = typedArrayTags[dateTag$4] = typedArrayTags[errorTag$3] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$9] = typedArrayTags[numberTag$4] = typedArrayTags[objectTag$4] = typedArrayTags[regexpTag$4] = typedArrayTags[setTag$9] = typedArrayTags[stringTag$4] = typedArrayTags[weakMapTag$3] = false; - function baseIsTypedArray(value) { - return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } - - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - - var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports; - var freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module; - var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1; - var freeProcess = moduleExports$1 && freeGlobal.process; - var nodeUtil = function() { - try { - var types = freeModule$1 && freeModule$1.require && freeModule$1.require("util").types; - if (types) { - return types; - } - return freeProcess && freeProcess.binding && freeProcess.binding("util"); - } catch (e) { - } - }(); - - var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray; - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - var objectProto$k = Object.prototype; - var hasOwnProperty$i = objectProto$k.hasOwnProperty; - function arrayLikeKeys(value, inherited) { - var isArr = isArray(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; - for (var key in value) { - if ((inherited || hasOwnProperty$i.call(value, key)) && !(skipIndexes && (key == "length" || isBuff && (key == "offset" || key == "parent") || isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || isIndex(key, length)))) { - result.push(key); - } - } - return result; - } - - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - - var nativeKeys = overArg(Object.keys, Object); - - var objectProto$j = Object.prototype; - var hasOwnProperty$h = objectProto$j.hasOwnProperty; - function baseKeys(object) { - if (!isPrototype(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$h.call(object, key) && key != "constructor") { - result.push(key); - } - } - return result; - } - - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - var objectProto$i = Object.prototype; - var hasOwnProperty$g = objectProto$i.hasOwnProperty; - var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty$g.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); - - function nativeKeysIn(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; - } - - var objectProto$h = Object.prototype; - var hasOwnProperty$f = objectProto$h.hasOwnProperty; - function baseKeysIn(object) { - if (!isObject(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype(object), result = []; - for (var key in object) { - if (!(key == "constructor" && (isProto || !hasOwnProperty$f.call(object, key)))) { - result.push(key); - } - } - return result; - } - - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); - }); - - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/; - var reIsPlainProp = /^\w*$/; - function isKey(value, object) { - if (isArray(value)) { - return false; - } - var type = typeof value; - if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); - } - - var nativeCreate = getNative(Object, "create"); - - function hashClear() { - this.__data__ = nativeCreate ? nativeCreate(null) : {}; - this.size = 0; - } - - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; - } - - var HASH_UNDEFINED$2 = "__lodash_hash_undefined__"; - var objectProto$g = Object.prototype; - var hasOwnProperty$e = objectProto$g.hasOwnProperty; - function hashGet(key) { - var data = this.__data__; - if (nativeCreate) { - var result = data[key]; - return result === HASH_UNDEFINED$2 ? void 0 : result; - } - return hasOwnProperty$e.call(data, key) ? data[key] : void 0; - } - - var objectProto$f = Object.prototype; - var hasOwnProperty$d = objectProto$f.hasOwnProperty; - function hashHas(key) { - var data = this.__data__; - return nativeCreate ? data[key] !== void 0 : hasOwnProperty$d.call(data, key); - } - - var HASH_UNDEFINED$1 = "__lodash_hash_undefined__"; - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED$1 : value; - return this; - } - - function Hash(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - Hash.prototype.clear = hashClear; - Hash.prototype["delete"] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - - function assocIndexOf(array, key) { - var length = array.length; - while (length--) { - if (eq(array[length][0], key)) { - return length; - } - } - return -1; - } - - var arrayProto$5 = Array.prototype; - var splice$2 = arrayProto$5.splice; - function listCacheDelete(key) { - var data = this.__data__, index = assocIndexOf(data, key); - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice$2.call(data, index, 1); - } - --this.size; - return true; - } - - function listCacheGet(key) { - var data = this.__data__, index = assocIndexOf(data, key); - return index < 0 ? void 0 : data[index][1]; - } - - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - - function listCacheSet(key, value) { - var data = this.__data__, index = assocIndexOf(data, key); - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; - } - - function ListCache(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - ListCache.prototype.clear = listCacheClear; - ListCache.prototype["delete"] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - - var Map$1 = getNative(root, "Map"); - - function mapCacheClear() { - this.size = 0; - this.__data__ = { - "hash": new Hash(), - "map": new (Map$1 || ListCache)(), - "string": new Hash() - }; - } - - function isKeyable(value) { - var type = typeof value; - return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; - } - - function getMapData(map, key) { - var data = map.__data__; - return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; - } - - function mapCacheDelete(key) { - var result = getMapData(this, key)["delete"](key); - this.size -= result ? 1 : 0; - return result; - } - - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - - function mapCacheSet(key, value) { - var data = getMapData(this, key), size = data.size; - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; - } - - function MapCache(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype["delete"] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - - var FUNC_ERROR_TEXT$9 = "Expected a function"; - function memoize(func, resolver) { - if (typeof func != "function" || resolver != null && typeof resolver != "function") { - throw new TypeError(FUNC_ERROR_TEXT$9); - } - var memoized = function() { - var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache)(); - return memoized; - } - memoize.Cache = MapCache; - - var MAX_MEMOIZE_SIZE = 500; - function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - var cache = result.cache; - return result; - } - - var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - var reEscapeChar = /\\(\\)?/g; - var stringToPath = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46) { - result.push(""); - } - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match); - }); - return result; - }); - - function toString(value) { - return value == null ? "" : baseToString(value); - } - - function castPath(value, object) { - if (isArray(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString(value)); - } - - var INFINITY$3 = 1 / 0; - function toKey(value) { - if (typeof value == "string" || isSymbol(value)) { - return value; - } - var result = value + ""; - return result == "0" && 1 / value == -INFINITY$3 ? "-0" : result; - } - - function baseGet(object, path) { - path = castPath(path, object); - var index = 0, length = path.length; - while (object != null && index < length) { - object = object[toKey(path[index++])]; - } - return index && index == length ? object : void 0; - } - - function get(object, path, defaultValue) { - var result = object == null ? void 0 : baseGet(object, path); - return result === void 0 ? defaultValue : result; - } - - function baseAt(object, paths) { - var index = -1, length = paths.length, result = Array(length), skip = object == null; - while (++index < length) { - result[index] = skip ? void 0 : get(object, paths[index]); - } - return result; - } - - function arrayPush(array, values) { - var index = -1, length = values.length, offset = array.length; - while (++index < length) { - array[offset + index] = values[index]; - } - return array; - } - - var spreadableSymbol = Symbol$1 ? Symbol$1.isConcatSpreadable : void 0; - function isFlattenable(value) { - return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); - } - - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, length = array.length; - predicate || (predicate = isFlattenable); - result || (result = []); - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - baseFlatten(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; - } - - function flatten(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, 1) : []; - } - - function flatRest(func) { - return setToString(overRest(func, void 0, flatten), func + ""); - } - - var at$1 = flatRest(baseAt); - - var getPrototype = overArg(Object.getPrototypeOf, Object); - - var objectTag$3 = "[object Object]"; - var funcProto = Function.prototype; - var objectProto$e = Object.prototype; - var funcToString = funcProto.toString; - var hasOwnProperty$c = objectProto$e.hasOwnProperty; - var objectCtorString = funcToString.call(Object); - function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag$3) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty$c.call(proto, "constructor") && proto.constructor; - return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; - } - - var domExcTag = "[object DOMException]"; - var errorTag$2 = "[object Error]"; - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == errorTag$2 || tag == domExcTag || typeof value.message == "string" && typeof value.name == "string" && !isPlainObject(value); - } - - var attempt = baseRest(function(func, args) { - try { - return apply(func, void 0, args); - } catch (e) { - return isError(e) ? e : new Error(e); - } - }); - - var FUNC_ERROR_TEXT$8 = "Expected a function"; - function before(n, func) { - var result; - if (typeof func != "function") { - throw new TypeError(FUNC_ERROR_TEXT$8); - } - n = toInteger(n); - return function() { - if (--n > 0) { - result = func.apply(this, arguments); - } - if (n <= 1) { - func = void 0; - } - return result; - }; - } - - var WRAP_BIND_FLAG$1 = 1; - var WRAP_PARTIAL_FLAG$3 = 32; - var bind = baseRest(function(func, thisArg, partials) { - var bitmask = WRAP_BIND_FLAG$1; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bind)); - bitmask |= WRAP_PARTIAL_FLAG$3; - } - return createWrap(func, bitmask, thisArg, partials, holders); - }); - bind.placeholder = {}; - - var bindAll = flatRest(function(object, methodNames) { - arrayEach(methodNames, function(key) { - key = toKey(key); - baseAssignValue(object, key, bind(object[key], object)); - }); - return object; - }); - - var WRAP_BIND_FLAG = 1; - var WRAP_BIND_KEY_FLAG$1 = 2; - var WRAP_PARTIAL_FLAG$2 = 32; - var bindKey = baseRest(function(object, key, partials) { - var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG$1; - if (partials.length) { - var holders = replaceHolders(partials, getHolder(bindKey)); - bitmask |= WRAP_PARTIAL_FLAG$2; - } - return createWrap(key, bitmask, object, partials, holders); - }); - bindKey.placeholder = {}; - - function baseSlice(array, start, end) { - var index = -1, length = array.length; - if (start < 0) { - start = -start > length ? 0 : length + start; - } - end = end > length ? length : end; - if (end < 0) { - end += length; - } - length = start > end ? 0 : end - start >>> 0; - start >>>= 0; - var result = Array(length); - while (++index < length) { - result[index] = array[index + start]; - } - return result; - } - - function castSlice(array, start, end) { - var length = array.length; - end = end === void 0 ? length : end; - return !start && end >= length ? array : baseSlice(array, start, end); - } - - var rsAstralRange$3 = "\\ud800-\\udfff"; - var rsComboMarksRange$4 = "\\u0300-\\u036f"; - var reComboHalfMarksRange$4 = "\\ufe20-\\ufe2f"; - var rsComboSymbolsRange$4 = "\\u20d0-\\u20ff"; - var rsComboRange$4 = rsComboMarksRange$4 + reComboHalfMarksRange$4 + rsComboSymbolsRange$4; - var rsVarRange$3 = "\\ufe0e\\ufe0f"; - var rsZWJ$3 = "\\u200d"; - var reHasUnicode = RegExp("[" + rsZWJ$3 + rsAstralRange$3 + rsComboRange$4 + rsVarRange$3 + "]"); - function hasUnicode(string) { - return reHasUnicode.test(string); - } - - function asciiToArray(string) { - return string.split(""); - } - - var rsAstralRange$2 = "\\ud800-\\udfff"; - var rsComboMarksRange$3 = "\\u0300-\\u036f"; - var reComboHalfMarksRange$3 = "\\ufe20-\\ufe2f"; - var rsComboSymbolsRange$3 = "\\u20d0-\\u20ff"; - var rsComboRange$3 = rsComboMarksRange$3 + reComboHalfMarksRange$3 + rsComboSymbolsRange$3; - var rsVarRange$2 = "\\ufe0e\\ufe0f"; - var rsAstral$1 = "[" + rsAstralRange$2 + "]"; - var rsCombo$3 = "[" + rsComboRange$3 + "]"; - var rsFitz$2 = "\\ud83c[\\udffb-\\udfff]"; - var rsModifier$2 = "(?:" + rsCombo$3 + "|" + rsFitz$2 + ")"; - var rsNonAstral$2 = "[^" + rsAstralRange$2 + "]"; - var rsRegional$2 = "(?:\\ud83c[\\udde6-\\uddff]){2}"; - var rsSurrPair$2 = "[\\ud800-\\udbff][\\udc00-\\udfff]"; - var rsZWJ$2 = "\\u200d"; - var reOptMod$2 = rsModifier$2 + "?"; - var rsOptVar$2 = "[" + rsVarRange$2 + "]?"; - var rsOptJoin$2 = "(?:" + rsZWJ$2 + "(?:" + [rsNonAstral$2, rsRegional$2, rsSurrPair$2].join("|") + ")" + rsOptVar$2 + reOptMod$2 + ")*"; - var rsSeq$2 = rsOptVar$2 + reOptMod$2 + rsOptJoin$2; - var rsSymbol$1 = "(?:" + [rsNonAstral$2 + rsCombo$3 + "?", rsCombo$3, rsRegional$2, rsSurrPair$2, rsAstral$1].join("|") + ")"; - var reUnicode$1 = RegExp(rsFitz$2 + "(?=" + rsFitz$2 + ")|" + rsSymbol$1 + rsSeq$2, "g"); - function unicodeToArray(string) { - return string.match(reUnicode$1) || []; - } - - function stringToArray(string) { - return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string); - } - - function createCaseFirst(methodName) { - return function(string) { - string = toString(string); - var strSymbols = hasUnicode(string) ? stringToArray(string) : void 0; - var chr = strSymbols ? strSymbols[0] : string.charAt(0); - var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1); - return chr[methodName]() + trailing; - }; - } - - var upperFirst = createCaseFirst("toUpperCase"); - - function capitalize$1(string) { - return upperFirst(toString(string).toLowerCase()); - } - - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[++index]; - } - while (++index < length) { - accumulator = iteratee(accumulator, array[index], index, array); - } - return accumulator; - } - - function basePropertyOf(object) { - return function(key) { - return object == null ? void 0 : object[key]; - }; - } - - var deburredLetters = { - "\xC0": "A", - "\xC1": "A", - "\xC2": "A", - "\xC3": "A", - "\xC4": "A", - "\xC5": "A", - "\xE0": "a", - "\xE1": "a", - "\xE2": "a", - "\xE3": "a", - "\xE4": "a", - "\xE5": "a", - "\xC7": "C", - "\xE7": "c", - "\xD0": "D", - "\xF0": "d", - "\xC8": "E", - "\xC9": "E", - "\xCA": "E", - "\xCB": "E", - "\xE8": "e", - "\xE9": "e", - "\xEA": "e", - "\xEB": "e", - "\xCC": "I", - "\xCD": "I", - "\xCE": "I", - "\xCF": "I", - "\xEC": "i", - "\xED": "i", - "\xEE": "i", - "\xEF": "i", - "\xD1": "N", - "\xF1": "n", - "\xD2": "O", - "\xD3": "O", - "\xD4": "O", - "\xD5": "O", - "\xD6": "O", - "\xD8": "O", - "\xF2": "o", - "\xF3": "o", - "\xF4": "o", - "\xF5": "o", - "\xF6": "o", - "\xF8": "o", - "\xD9": "U", - "\xDA": "U", - "\xDB": "U", - "\xDC": "U", - "\xF9": "u", - "\xFA": "u", - "\xFB": "u", - "\xFC": "u", - "\xDD": "Y", - "\xFD": "y", - "\xFF": "y", - "\xC6": "Ae", - "\xE6": "ae", - "\xDE": "Th", - "\xFE": "th", - "\xDF": "ss", - "\u0100": "A", - "\u0102": "A", - "\u0104": "A", - "\u0101": "a", - "\u0103": "a", - "\u0105": "a", - "\u0106": "C", - "\u0108": "C", - "\u010A": "C", - "\u010C": "C", - "\u0107": "c", - "\u0109": "c", - "\u010B": "c", - "\u010D": "c", - "\u010E": "D", - "\u0110": "D", - "\u010F": "d", - "\u0111": "d", - "\u0112": "E", - "\u0114": "E", - "\u0116": "E", - "\u0118": "E", - "\u011A": "E", - "\u0113": "e", - "\u0115": "e", - "\u0117": "e", - "\u0119": "e", - "\u011B": "e", - "\u011C": "G", - "\u011E": "G", - "\u0120": "G", - "\u0122": "G", - "\u011D": "g", - "\u011F": "g", - "\u0121": "g", - "\u0123": "g", - "\u0124": "H", - "\u0126": "H", - "\u0125": "h", - "\u0127": "h", - "\u0128": "I", - "\u012A": "I", - "\u012C": "I", - "\u012E": "I", - "\u0130": "I", - "\u0129": "i", - "\u012B": "i", - "\u012D": "i", - "\u012F": "i", - "\u0131": "i", - "\u0134": "J", - "\u0135": "j", - "\u0136": "K", - "\u0137": "k", - "\u0138": "k", - "\u0139": "L", - "\u013B": "L", - "\u013D": "L", - "\u013F": "L", - "\u0141": "L", - "\u013A": "l", - "\u013C": "l", - "\u013E": "l", - "\u0140": "l", - "\u0142": "l", - "\u0143": "N", - "\u0145": "N", - "\u0147": "N", - "\u014A": "N", - "\u0144": "n", - "\u0146": "n", - "\u0148": "n", - "\u014B": "n", - "\u014C": "O", - "\u014E": "O", - "\u0150": "O", - "\u014D": "o", - "\u014F": "o", - "\u0151": "o", - "\u0154": "R", - "\u0156": "R", - "\u0158": "R", - "\u0155": "r", - "\u0157": "r", - "\u0159": "r", - "\u015A": "S", - "\u015C": "S", - "\u015E": "S", - "\u0160": "S", - "\u015B": "s", - "\u015D": "s", - "\u015F": "s", - "\u0161": "s", - "\u0162": "T", - "\u0164": "T", - "\u0166": "T", - "\u0163": "t", - "\u0165": "t", - "\u0167": "t", - "\u0168": "U", - "\u016A": "U", - "\u016C": "U", - "\u016E": "U", - "\u0170": "U", - "\u0172": "U", - "\u0169": "u", - "\u016B": "u", - "\u016D": "u", - "\u016F": "u", - "\u0171": "u", - "\u0173": "u", - "\u0174": "W", - "\u0175": "w", - "\u0176": "Y", - "\u0177": "y", - "\u0178": "Y", - "\u0179": "Z", - "\u017B": "Z", - "\u017D": "Z", - "\u017A": "z", - "\u017C": "z", - "\u017E": "z", - "\u0132": "IJ", - "\u0133": "ij", - "\u0152": "Oe", - "\u0153": "oe", - "\u0149": "'n", - "\u017F": "s" - }; - var deburrLetter = basePropertyOf(deburredLetters); - - var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g; - var rsComboMarksRange$2 = "\\u0300-\\u036f"; - var reComboHalfMarksRange$2 = "\\ufe20-\\ufe2f"; - var rsComboSymbolsRange$2 = "\\u20d0-\\u20ff"; - var rsComboRange$2 = rsComboMarksRange$2 + reComboHalfMarksRange$2 + rsComboSymbolsRange$2; - var rsCombo$2 = "[" + rsComboRange$2 + "]"; - var reComboMark = RegExp(rsCombo$2, "g"); - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ""); - } - - var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g; - function asciiWords(string) { - return string.match(reAsciiWord) || []; - } - - var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/; - function hasUnicodeWord(string) { - return reHasUnicodeWord.test(string); - } - - var rsAstralRange$1 = "\\ud800-\\udfff"; - var rsComboMarksRange$1 = "\\u0300-\\u036f"; - var reComboHalfMarksRange$1 = "\\ufe20-\\ufe2f"; - var rsComboSymbolsRange$1 = "\\u20d0-\\u20ff"; - var rsComboRange$1 = rsComboMarksRange$1 + reComboHalfMarksRange$1 + rsComboSymbolsRange$1; - var rsDingbatRange = "\\u2700-\\u27bf"; - var rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff"; - var rsMathOpRange = "\\xac\\xb1\\xd7\\xf7"; - var rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf"; - var rsPunctuationRange = "\\u2000-\\u206f"; - var rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000"; - var rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde"; - var rsVarRange$1 = "\\ufe0e\\ufe0f"; - var rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange; - var rsApos$1 = "['\u2019]"; - var rsBreak = "[" + rsBreakRange + "]"; - var rsCombo$1 = "[" + rsComboRange$1 + "]"; - var rsDigits = "\\d+"; - var rsDingbat = "[" + rsDingbatRange + "]"; - var rsLower = "[" + rsLowerRange + "]"; - var rsMisc = "[^" + rsAstralRange$1 + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]"; - var rsFitz$1 = "\\ud83c[\\udffb-\\udfff]"; - var rsModifier$1 = "(?:" + rsCombo$1 + "|" + rsFitz$1 + ")"; - var rsNonAstral$1 = "[^" + rsAstralRange$1 + "]"; - var rsRegional$1 = "(?:\\ud83c[\\udde6-\\uddff]){2}"; - var rsSurrPair$1 = "[\\ud800-\\udbff][\\udc00-\\udfff]"; - var rsUpper = "[" + rsUpperRange + "]"; - var rsZWJ$1 = "\\u200d"; - var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")"; - var rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")"; - var rsOptContrLower = "(?:" + rsApos$1 + "(?:d|ll|m|re|s|t|ve))?"; - var rsOptContrUpper = "(?:" + rsApos$1 + "(?:D|LL|M|RE|S|T|VE))?"; - var reOptMod$1 = rsModifier$1 + "?"; - var rsOptVar$1 = "[" + rsVarRange$1 + "]?"; - var rsOptJoin$1 = "(?:" + rsZWJ$1 + "(?:" + [rsNonAstral$1, rsRegional$1, rsSurrPair$1].join("|") + ")" + rsOptVar$1 + reOptMod$1 + ")*"; - var rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])"; - var rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])"; - var rsSeq$1 = rsOptVar$1 + reOptMod$1 + rsOptJoin$1; - var rsEmoji = "(?:" + [rsDingbat, rsRegional$1, rsSurrPair$1].join("|") + ")" + rsSeq$1; - var reUnicodeWord = RegExp([ - rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")", - rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")", - rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower, - rsUpper + "+" + rsOptContrUpper, - rsOrdUpper, - rsOrdLower, - rsDigits, - rsEmoji - ].join("|"), "g"); - function unicodeWords(string) { - return string.match(reUnicodeWord) || []; - } - - function words(string, pattern, guard) { - string = toString(string); - pattern = guard ? void 0 : pattern; - if (pattern === void 0) { - return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string); - } - return string.match(pattern) || []; - } - - var rsApos = "['\u2019]"; - var reApos = RegExp(rsApos, "g"); - function createCompounder(callback) { - return function(string) { - return arrayReduce(words(deburr(string).replace(reApos, "")), callback, ""); - }; - } - - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize$1(word) : word); - }); - - function castArray$1() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - - var nativeIsFinite$1 = root.isFinite; - var nativeMin$c = Math.min; - function createRound(methodName) { - var func = Math[methodName]; - return function(number, precision) { - number = toNumber(number); - precision = precision == null ? 0 : nativeMin$c(toInteger(precision), 292); - if (precision && nativeIsFinite$1(number)) { - var pair = (toString(number) + "e").split("e"), value = func(pair[0] + "e" + (+pair[1] + precision)); - pair = (toString(value) + "e").split("e"); - return +(pair[0] + "e" + (+pair[1] - precision)); - } - return func(number); - }; - } - - var ceil = createRound("ceil"); - - function chain(value) { - var result = lodash(value); - result.__chain__ = true; - return result; - } - - var nativeCeil$3 = Math.ceil; - var nativeMax$c = Math.max; - function chunk(array, size, guard) { - if (guard ? isIterateeCall(array, size, guard) : size === void 0) { - size = 1; - } else { - size = nativeMax$c(toInteger(size), 0); - } - var length = array == null ? 0 : array.length; - if (!length || size < 1) { - return []; - } - var index = 0, resIndex = 0, result = Array(nativeCeil$3(length / size)); - while (index < length) { - result[resIndex++] = baseSlice(array, index, index += size); - } - return result; - } - - function baseClamp(number, lower, upper) { - if (number === number) { - if (upper !== void 0) { - number = number <= upper ? number : upper; - } - if (lower !== void 0) { - number = number >= lower ? number : lower; - } - } - return number; - } - - function clamp(number, lower, upper) { - if (upper === void 0) { - upper = lower; - lower = void 0; - } - if (upper !== void 0) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== void 0) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - - function stackClear() { - this.__data__ = new ListCache(); - this.size = 0; - } - - function stackDelete(key) { - var data = this.__data__, result = data["delete"](key); - this.size = data.size; - return result; - } - - function stackGet(key) { - return this.__data__.get(key); - } - - function stackHas(key) { - return this.__data__.has(key); - } - - var LARGE_ARRAY_SIZE$2 = 200; - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map$1 || pairs.length < LARGE_ARRAY_SIZE$2 - 1) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; - } - Stack.prototype.clear = stackClear; - Stack.prototype["delete"] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); - } - - var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; - var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; - var moduleExports = freeModule && freeModule.exports === freeExports; - var Buffer = moduleExports ? root.Buffer : void 0; - var allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0; - function cloneBuffer(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - buffer.copy(result); - return result; - } - - function arrayFilter(array, predicate) { - var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; - } - - function stubArray() { - return []; - } - - var objectProto$d = Object.prototype; - var propertyIsEnumerable = objectProto$d.propertyIsEnumerable; - var nativeGetSymbols$1 = Object.getOwnPropertySymbols; - var getSymbols = !nativeGetSymbols$1 ? stubArray : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter(nativeGetSymbols$1(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); - }; - - function copySymbols(source, object) { - return copyObject(source, getSymbols(source), object); - } - - var nativeGetSymbols = Object.getOwnPropertySymbols; - var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols(object)); - object = getPrototype(object); - } - return result; - }; - - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn(source), object); - } - - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray(object) ? result : arrayPush(result, symbolsFunc(object)); - } - - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols); - } - - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn); - } - - var DataView = getNative(root, "DataView"); - - var Promise$1 = getNative(root, "Promise"); - - var Set$1 = getNative(root, "Set"); - - var mapTag$8 = "[object Map]"; - var objectTag$2 = "[object Object]"; - var promiseTag = "[object Promise]"; - var setTag$8 = "[object Set]"; - var weakMapTag$2 = "[object WeakMap]"; - var dataViewTag$3 = "[object DataView]"; - var dataViewCtorString = toSource(DataView); - var mapCtorString = toSource(Map$1); - var promiseCtorString = toSource(Promise$1); - var setCtorString = toSource(Set$1); - var weakMapCtorString = toSource(WeakMap); - var getTag = baseGetTag; - if (DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag$3 || Map$1 && getTag(new Map$1()) != mapTag$8 || Promise$1 && getTag(Promise$1.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$8 || WeakMap && getTag(new WeakMap()) != weakMapTag$2) { - getTag = function(value) { - var result = baseGetTag(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: - return dataViewTag$3; - case mapCtorString: - return mapTag$8; - case promiseCtorString: - return promiseTag; - case setCtorString: - return setTag$8; - case weakMapCtorString: - return weakMapTag$2; - } - } - return result; - }; - } - var getTag$1 = getTag; - - var objectProto$c = Object.prototype; - var hasOwnProperty$b = objectProto$c.hasOwnProperty; - function initCloneArray(array) { - var length = array.length, result = new array.constructor(length); - if (length && typeof array[0] == "string" && hasOwnProperty$b.call(array, "index")) { - result.index = array.index; - result.input = array.input; - } - return result; - } - - var Uint8Array = root.Uint8Array; - - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; - } - - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - - var reFlags$1 = /\w*$/; - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags$1.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } - - var symbolProto$1 = Symbol$1 ? Symbol$1.prototype : void 0; - var symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : void 0; - function cloneSymbol(symbol) { - return symbolValueOf$1 ? Object(symbolValueOf$1.call(symbol)) : {}; - } - - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - - var boolTag$3 = "[object Boolean]"; - var dateTag$3 = "[object Date]"; - var mapTag$7 = "[object Map]"; - var numberTag$3 = "[object Number]"; - var regexpTag$3 = "[object RegExp]"; - var setTag$7 = "[object Set]"; - var stringTag$3 = "[object String]"; - var symbolTag$2 = "[object Symbol]"; - var arrayBufferTag$3 = "[object ArrayBuffer]"; - var dataViewTag$2 = "[object DataView]"; - var float32Tag$1 = "[object Float32Array]"; - var float64Tag$1 = "[object Float64Array]"; - var int8Tag$1 = "[object Int8Array]"; - var int16Tag$1 = "[object Int16Array]"; - var int32Tag$1 = "[object Int32Array]"; - var uint8Tag$1 = "[object Uint8Array]"; - var uint8ClampedTag$1 = "[object Uint8ClampedArray]"; - var uint16Tag$1 = "[object Uint16Array]"; - var uint32Tag$1 = "[object Uint32Array]"; - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag$3: - return cloneArrayBuffer(object); - case boolTag$3: - case dateTag$3: - return new Ctor(+object); - case dataViewTag$2: - return cloneDataView(object, isDeep); - case float32Tag$1: - case float64Tag$1: - case int8Tag$1: - case int16Tag$1: - case int32Tag$1: - case uint8Tag$1: - case uint8ClampedTag$1: - case uint16Tag$1: - case uint32Tag$1: - return cloneTypedArray(object, isDeep); - case mapTag$7: - return new Ctor(); - case numberTag$3: - case stringTag$3: - return new Ctor(object); - case regexpTag$3: - return cloneRegExp(object); - case setTag$7: - return new Ctor(); - case symbolTag$2: - return cloneSymbol(object); - } - } - - function initCloneObject(object) { - return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {}; - } - - var mapTag$6 = "[object Map]"; - function baseIsMap(value) { - return isObjectLike(value) && getTag$1(value) == mapTag$6; - } - - var nodeIsMap = nodeUtil && nodeUtil.isMap; - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - - var setTag$6 = "[object Set]"; - function baseIsSet(value) { - return isObjectLike(value) && getTag$1(value) == setTag$6; - } - - var nodeIsSet = nodeUtil && nodeUtil.isSet; - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - - var CLONE_DEEP_FLAG$7 = 1; - var CLONE_FLAT_FLAG$1 = 2; - var CLONE_SYMBOLS_FLAG$5 = 4; - var argsTag$1 = "[object Arguments]"; - var arrayTag$1 = "[object Array]"; - var boolTag$2 = "[object Boolean]"; - var dateTag$2 = "[object Date]"; - var errorTag$1 = "[object Error]"; - var funcTag = "[object Function]"; - var genTag = "[object GeneratorFunction]"; - var mapTag$5 = "[object Map]"; - var numberTag$2 = "[object Number]"; - var objectTag$1 = "[object Object]"; - var regexpTag$2 = "[object RegExp]"; - var setTag$5 = "[object Set]"; - var stringTag$2 = "[object String]"; - var symbolTag$1 = "[object Symbol]"; - var weakMapTag$1 = "[object WeakMap]"; - var arrayBufferTag$2 = "[object ArrayBuffer]"; - var dataViewTag$1 = "[object DataView]"; - var float32Tag = "[object Float32Array]"; - var float64Tag = "[object Float64Array]"; - var int8Tag = "[object Int8Array]"; - var int16Tag = "[object Int16Array]"; - var int32Tag = "[object Int32Array]"; - var uint8Tag = "[object Uint8Array]"; - var uint8ClampedTag = "[object Uint8ClampedArray]"; - var uint16Tag = "[object Uint16Array]"; - var uint32Tag = "[object Uint32Array]"; - var cloneableTags = {}; - cloneableTags[argsTag$1] = cloneableTags[arrayTag$1] = cloneableTags[arrayBufferTag$2] = cloneableTags[dataViewTag$1] = cloneableTags[boolTag$2] = cloneableTags[dateTag$2] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag$5] = cloneableTags[numberTag$2] = cloneableTags[objectTag$1] = cloneableTags[regexpTag$2] = cloneableTags[setTag$5] = cloneableTags[stringTag$2] = cloneableTags[symbolTag$1] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag$1] = cloneableTags[funcTag] = cloneableTags[weakMapTag$1] = false; - function baseClone(value, bitmask, customizer, key, object, stack) { - var result, isDeep = bitmask & CLONE_DEEP_FLAG$7, isFlat = bitmask & CLONE_FLAT_FLAG$1, isFull = bitmask & CLONE_SYMBOLS_FLAG$5; - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== void 0) { - return result; - } - if (!isObject(value)) { - return value; - } - var isArr = isArray(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag$1(value), isFunc = tag == funcTag || tag == genTag; - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag$1 || tag == argsTag$1 || isFunc && !object) { - result = isFlat || isFunc ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, isDeep); - } - } - stack || (stack = new Stack()); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - if (isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (isMap(value)) { - value.forEach(function(subValue, key2) { - result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); - }); - } - var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys; - var props = isArr ? void 0 : keysFunc(value); - arrayEach(props || value, function(subValue, key2) { - if (props) { - key2 = subValue; - subValue = value[key2]; - } - assignValue(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); - }); - return result; - } - - var CLONE_SYMBOLS_FLAG$4 = 4; - function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG$4); - } - - var CLONE_DEEP_FLAG$6 = 1; - var CLONE_SYMBOLS_FLAG$3 = 4; - function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG$6 | CLONE_SYMBOLS_FLAG$3); - } - - var CLONE_DEEP_FLAG$5 = 1; - var CLONE_SYMBOLS_FLAG$2 = 4; - function cloneDeepWith(value, customizer) { - customizer = typeof customizer == "function" ? customizer : void 0; - return baseClone(value, CLONE_DEEP_FLAG$5 | CLONE_SYMBOLS_FLAG$2, customizer); - } - - var CLONE_SYMBOLS_FLAG$1 = 4; - function cloneWith(value, customizer) { - customizer = typeof customizer == "function" ? customizer : void 0; - return baseClone(value, CLONE_SYMBOLS_FLAG$1, customizer); - } - - function wrapperCommit() { - return new LodashWrapper(this.value(), this.__chain__); - } - - function compact(array) { - var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; - while (++index < length) { - var value = array[index]; - if (value) { - result[resIndex++] = value; - } - } - return result; - } - - function concat() { - var length = arguments.length; - if (!length) { - return []; - } - var args = Array(length - 1), array = arguments[0], index = length; - while (index--) { - args[index - 1] = arguments[index]; - } - return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1)); - } - - var HASH_UNDEFINED = "__lodash_hash_undefined__"; - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - - function setCacheHas(value) { - return this.__data__.has(value); - } - - function SetCache(values) { - var index = -1, length = values == null ? 0 : values.length; - this.__data__ = new MapCache(); - while (++index < length) { - this.add(values[index]); - } - } - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - - function arraySome(array, predicate) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - if (predicate(array[index], index, array)) { - return true; - } - } - return false; - } - - function cacheHas(cache, key) { - return cache.has(key); - } - - var COMPARE_PARTIAL_FLAG$5 = 1; - var COMPARE_UNORDERED_FLAG$3 = 2; - function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length; - if (arrLength != othLength && !(isPartial && othLength > arrLength)) { - return false; - } - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) { - return arrStacked == other && othStacked == array; - } - var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0; - stack.set(array, other); - stack.set(other, array); - while (++index < arrLength) { - var arrValue = array[index], othValue = other[index]; - if (customizer) { - var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); - } - if (compared !== void 0) { - if (compared) { - continue; - } - result = false; - break; - } - if (seen) { - if (!arraySome(other, function(othValue2, othIndex) { - if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) { - return seen.push(othIndex); - } - })) { - result = false; - break; - } - } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - result = false; - break; - } - } - stack["delete"](array); - stack["delete"](other); - return result; - } - - function mapToArray(map) { - var index = -1, result = Array(map.size); - map.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - - function setToArray(set) { - var index = -1, result = Array(set.size); - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } - - var COMPARE_PARTIAL_FLAG$4 = 1; - var COMPARE_UNORDERED_FLAG$2 = 2; - var boolTag$1 = "[object Boolean]"; - var dateTag$1 = "[object Date]"; - var errorTag = "[object Error]"; - var mapTag$4 = "[object Map]"; - var numberTag$1 = "[object Number]"; - var regexpTag$1 = "[object RegExp]"; - var setTag$4 = "[object Set]"; - var stringTag$1 = "[object String]"; - var symbolTag = "[object Symbol]"; - var arrayBufferTag$1 = "[object ArrayBuffer]"; - var dataViewTag = "[object DataView]"; - var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0; - var symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; - function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) { - return false; - } - object = object.buffer; - other = other.buffer; - case arrayBufferTag$1: - if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) { - return false; - } - return true; - case boolTag$1: - case dateTag$1: - case numberTag$1: - return eq(+object, +other); - case errorTag: - return object.name == other.name && object.message == other.message; - case regexpTag$1: - case stringTag$1: - return object == other + ""; - case mapTag$4: - var convert = mapToArray; - case setTag$4: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4; - convert || (convert = setToArray); - if (object.size != other.size && !isPartial) { - return false; - } - var stacked = stack.get(object); - if (stacked) { - return stacked == other; - } - bitmask |= COMPARE_UNORDERED_FLAG$2; - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack["delete"](object); - return result; - case symbolTag: - if (symbolValueOf) { - return symbolValueOf.call(object) == symbolValueOf.call(other); - } - } - return false; - } - - var COMPARE_PARTIAL_FLAG$3 = 1; - var objectProto$b = Object.prototype; - var hasOwnProperty$a = objectProto$b.hasOwnProperty; - function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length; - if (objLength != othLength && !isPartial) { - return false; - } - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty$a.call(other, key))) { - return false; - } - } - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) { - return objStacked == other && othStacked == object; - } - var result = true; - stack.set(object, other); - stack.set(other, object); - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], othValue = other[key]; - if (customizer) { - var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); - } - if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { - result = false; - break; - } - skipCtor || (skipCtor = key == "constructor"); - } - if (result && !skipCtor) { - var objCtor = object.constructor, othCtor = other.constructor; - if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) { - result = false; - } - } - stack["delete"](object); - stack["delete"](other); - return result; - } - - var COMPARE_PARTIAL_FLAG$2 = 1; - var argsTag = "[object Arguments]"; - var arrayTag = "[object Array]"; - var objectTag = "[object Object]"; - var objectProto$a = Object.prototype; - var hasOwnProperty$9 = objectProto$a.hasOwnProperty; - function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray(object), othIsArr = isArray(other), objTag = objIsArr ? arrayTag : getTag$1(object), othTag = othIsArr ? arrayTag : getTag$1(other); - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; - if (isSameTag && isBuffer(object)) { - if (!isBuffer(other)) { - return false; - } - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack()); - return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) { - var objIsWrapped = objIsObj && hasOwnProperty$9.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty$9.call(other, "__wrapped__"); - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; - stack || (stack = new Stack()); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) { - return false; - } - stack || (stack = new Stack()); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); - } - - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) { - return true; - } - if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) { - return value !== value && other !== other; - } - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); - } - - var COMPARE_PARTIAL_FLAG$1 = 1; - var COMPARE_UNORDERED_FLAG$1 = 2; - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, length = index, noCustomizer = !customizer; - if (object == null) { - return !length; - } - object = Object(object); - while (index--) { - var data = matchData[index]; - if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) { - return false; - } - } - while (++index < length) { - data = matchData[index]; - var key = data[0], objValue = object[key], srcValue = data[1]; - if (noCustomizer && data[2]) { - if (objValue === void 0 && !(key in object)) { - return false; - } - } else { - var stack = new Stack(); - if (customizer) { - var result = customizer(objValue, srcValue, key, object, source, stack); - } - if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) { - return false; - } - } - } - return true; - } - - function isStrictComparable(value) { - return value === value && !isObject(value); - } - - function getMatchData(object) { - var result = keys(object), length = result.length; - while (length--) { - var key = result[length], value = object[key]; - result[length] = [key, value, isStrictComparable(value)]; - } - return result; - } - - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) { - return false; - } - return object[key] === srcValue && (srcValue !== void 0 || key in Object(object)); - }; - } - - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) { - return matchesStrictComparable(matchData[0][0], matchData[0][1]); - } - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - - function baseHasIn(object, key) { - return object != null && key in Object(object); - } - - function hasPath(object, path, hasFunc) { - path = castPath(path, object); - var index = -1, length = path.length, result = false; - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length) { - return result; - } - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object)); - } - - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - - var COMPARE_PARTIAL_FLAG = 1; - var COMPARE_UNORDERED_FLAG = 2; - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) { - return matchesStrictComparable(toKey(path), srcValue); - } - return function(object) { - var objValue = get(object, path); - return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; - } - - function baseProperty(key) { - return function(object) { - return object == null ? void 0 : object[key]; - }; - } - - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } - - function property(path) { - return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); - } - - function baseIteratee(value) { - if (typeof value == "function") { - return value; - } - if (value == null) { - return identity; - } - if (typeof value == "object") { - return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); - } - return property(value); - } - - var FUNC_ERROR_TEXT$7 = "Expected a function"; - function cond(pairs) { - var length = pairs == null ? 0 : pairs.length, toIteratee = baseIteratee; - pairs = !length ? [] : arrayMap(pairs, function(pair) { - if (typeof pair[1] != "function") { - throw new TypeError(FUNC_ERROR_TEXT$7); - } - return [toIteratee(pair[0]), pair[1]]; - }); - return baseRest(function(args) { - var index = -1; - while (++index < length) { - var pair = pairs[index]; - if (apply(pair[0], this, args)) { - return apply(pair[1], this, args); - } - } - }); - } - - function baseConformsTo(object, source, props) { - var length = props.length; - if (object == null) { - return !length; - } - object = Object(object); - while (length--) { - var key = props[length], predicate = source[key], value = object[key]; - if (value === void 0 && !(key in object) || !predicate(value)) { - return false; - } - } - return true; - } - - function baseConforms(source) { - var props = keys(source); - return function(object) { - return baseConformsTo(object, source, props); - }; - } - - var CLONE_DEEP_FLAG$4 = 1; - function conforms(source) { - return baseConforms(baseClone(source, CLONE_DEEP_FLAG$4)); - } - - function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); - } - - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) { - break; - } - } - return object; - }; - } - - var baseFor = createBaseFor(); - - function baseForOwn(object, iteratee) { - return object && baseFor(object, iteratee, keys); - } - - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) { - return collection; - } - if (!isArrayLike(collection)) { - return eachFunc(collection, iteratee); - } - var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); - while (fromRight ? index-- : ++index < length) { - if (iteratee(iterable[index], index, iterable) === false) { - break; - } - } - return collection; - }; - } - - var baseEach = createBaseEach(baseForOwn); - - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach(collection, function(value, key, collection2) { - setter(accumulator, value, iteratee(value), collection2); - }); - return accumulator; - } - - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {}; - return func(collection, setter, baseIteratee(iteratee), accumulator); - }; - } - - var objectProto$9 = Object.prototype; - var hasOwnProperty$8 = objectProto$9.hasOwnProperty; - var countBy = createAggregator(function(result, value, key) { - if (hasOwnProperty$8.call(result, key)) { - ++result[key]; - } else { - baseAssignValue(result, key, 1); - } - }); - - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null ? result : baseAssign(result, properties); - } - - var WRAP_CURRY_FLAG$1 = 8; - function curry(func, arity, guard) { - arity = guard ? void 0 : arity; - var result = createWrap(func, WRAP_CURRY_FLAG$1, void 0, void 0, void 0, void 0, void 0, arity); - result.placeholder = curry.placeholder; - return result; - } - curry.placeholder = {}; - - var WRAP_CURRY_RIGHT_FLAG = 16; - function curryRight(func, arity, guard) { - arity = guard ? void 0 : arity; - var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, void 0, void 0, void 0, void 0, void 0, arity); - result.placeholder = curryRight.placeholder; - return result; - } - curryRight.placeholder = {}; - - var now = function() { - return root.Date.now(); - }; - - var FUNC_ERROR_TEXT$6 = "Expected a function"; - var nativeMax$b = Math.max; - var nativeMin$b = Math.min; - function debounce(func, wait, options) { - var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true; - if (typeof func != "function") { - throw new TypeError(FUNC_ERROR_TEXT$6); - } - wait = toNumber(wait) || 0; - if (isObject(options)) { - leading = !!options.leading; - maxing = "maxWait" in options; - maxWait = maxing ? nativeMax$b(toNumber(options.maxWait) || 0, wait) : maxWait; - trailing = "trailing" in options ? !!options.trailing : trailing; - } - function invokeFunc(time) { - var args = lastArgs, thisArg = lastThis; - lastArgs = lastThis = void 0; - lastInvokeTime = time; - result = func.apply(thisArg, args); - return result; - } - function leadingEdge(time) { - lastInvokeTime = time; - timerId = setTimeout(timerExpired, wait); - return leading ? invokeFunc(time) : result; - } - function remainingWait(time) { - var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall; - return maxing ? nativeMin$b(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting; - } - function shouldInvoke(time) { - var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime; - return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait; - } - function timerExpired() { - var time = now(); - if (shouldInvoke(time)) { - return trailingEdge(time); - } - timerId = setTimeout(timerExpired, remainingWait(time)); - } - function trailingEdge(time) { - timerId = void 0; - if (trailing && lastArgs) { - return invokeFunc(time); - } - lastArgs = lastThis = void 0; - return result; - } - function cancel() { - if (timerId !== void 0) { - clearTimeout(timerId); - } - lastInvokeTime = 0; - lastArgs = lastCallTime = lastThis = timerId = void 0; - } - function flush() { - return timerId === void 0 ? result : trailingEdge(now()); - } - function debounced() { - var time = now(), isInvoking = shouldInvoke(time); - lastArgs = arguments; - lastThis = this; - lastCallTime = time; - if (isInvoking) { - if (timerId === void 0) { - return leadingEdge(lastCallTime); - } - if (maxing) { - clearTimeout(timerId); - timerId = setTimeout(timerExpired, wait); - return invokeFunc(lastCallTime); - } - } - if (timerId === void 0) { - timerId = setTimeout(timerExpired, wait); - } - return result; - } - debounced.cancel = cancel; - debounced.flush = flush; - return debounced; - } - - function defaultTo(value, defaultValue) { - return value == null || value !== value ? defaultValue : value; - } - - var objectProto$8 = Object.prototype; - var hasOwnProperty$7 = objectProto$8.hasOwnProperty; - var defaults = baseRest(function(object, sources) { - object = Object(object); - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : void 0; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1; - } - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - if (value === void 0 || eq(value, objectProto$8[key]) && !hasOwnProperty$7.call(object, key)) { - object[key] = source[key]; - } - } - } - return object; - }); - - function assignMergeValue(object, key, value) { - if (value !== void 0 && !eq(object[key], value) || value === void 0 && !(key in object)) { - baseAssignValue(object, key, value); - } - } - - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - function safeGet(object, key) { - if (key === "constructor" && typeof object[key] === "function") { - return; - } - if (key == "__proto__") { - return; - } - return object[key]; - } - - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) { - var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue); - if (stacked) { - assignMergeValue(object, key, stacked); - return; - } - var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0; - var isCommon = newValue === void 0; - if (isCommon) { - var isArr = isArray(srcValue), isBuff = !isArr && isBuffer(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue); - newValue = srcValue; - if (isArr || isBuff || isTyped) { - if (isArray(objValue)) { - newValue = objValue; - } else if (isArrayLikeObject(objValue)) { - newValue = copyArray(objValue); - } else if (isBuff) { - isCommon = false; - newValue = cloneBuffer(srcValue, true); - } else if (isTyped) { - isCommon = false; - newValue = cloneTypedArray(srcValue, true); - } else { - newValue = []; - } - } else if (isPlainObject(srcValue) || isArguments(srcValue)) { - newValue = objValue; - if (isArguments(objValue)) { - newValue = toPlainObject(objValue); - } else if (!isObject(objValue) || isFunction(objValue)) { - newValue = initCloneObject(srcValue); - } - } else { - isCommon = false; - } - } - if (isCommon) { - stack.set(srcValue, newValue); - mergeFunc(newValue, srcValue, srcIndex, customizer, stack); - stack["delete"](srcValue); - } - assignMergeValue(object, key, newValue); - } - - function baseMerge(object, source, srcIndex, customizer, stack) { - if (object === source) { - return; - } - baseFor(source, function(srcValue, key) { - stack || (stack = new Stack()); - if (isObject(srcValue)) { - baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack); - } else { - var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0; - if (newValue === void 0) { - newValue = srcValue; - } - assignMergeValue(object, key, newValue); - } - }, keysIn); - } - - function customDefaultsMerge(objValue, srcValue, key, object, source, stack) { - if (isObject(objValue) && isObject(srcValue)) { - stack.set(srcValue, objValue); - baseMerge(objValue, srcValue, void 0, customDefaultsMerge, stack); - stack["delete"](srcValue); - } - return objValue; - } - - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - - var defaultsDeep = baseRest(function(args) { - args.push(void 0, customDefaultsMerge); - return apply(mergeWith, void 0, args); - }); - - var FUNC_ERROR_TEXT$5 = "Expected a function"; - function baseDelay(func, wait, args) { - if (typeof func != "function") { - throw new TypeError(FUNC_ERROR_TEXT$5); - } - return setTimeout(function() { - func.apply(void 0, args); - }, wait); - } - - var defer = baseRest(function(func, args) { - return baseDelay(func, 1, args); - }); - - var delay = baseRest(function(func, wait, args) { - return baseDelay(func, toNumber(wait) || 0, args); - }); - - function arrayIncludesWith(array, value, comparator) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - if (comparator(value, array[index])) { - return true; - } - } - return false; - } - - var LARGE_ARRAY_SIZE$1 = 200; - function baseDifference(array, values, iteratee, comparator) { - var index = -1, includes = arrayIncludes, isCommon = true, length = array.length, result = [], valuesLength = values.length; - if (!length) { - return result; - } - if (iteratee) { - values = arrayMap(values, baseUnary(iteratee)); - } - if (comparator) { - includes = arrayIncludesWith; - isCommon = false; - } else if (values.length >= LARGE_ARRAY_SIZE$1) { - includes = cacheHas; - isCommon = false; - values = new SetCache(values); - } - outer: - while (++index < length) { - var value = array[index], computed = iteratee == null ? value : iteratee(value); - value = comparator || value !== 0 ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) { - if (values[valuesIndex] === computed) { - continue outer; - } - } - result.push(value); - } else if (!includes(values, computed, comparator)) { - result.push(value); - } - } - return result; - } - - var difference = baseRest(function(array, values) { - return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : []; - }); - - function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : void 0; - } - - var differenceBy = baseRest(function(array, values) { - var iteratee = last(values); - if (isArrayLikeObject(iteratee)) { - iteratee = void 0; - } - return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), baseIteratee(iteratee)) : []; - }); - - var differenceWith = baseRest(function(array, values) { - var comparator = last(values); - if (isArrayLikeObject(comparator)) { - comparator = void 0; - } - return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), void 0, comparator) : []; - }); - - var divide = createMathOperation(function(dividend, divisor) { - return dividend / divisor; - }, 1); - - function drop(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = guard || n === void 0 ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - - function dropRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = guard || n === void 0 ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - function baseWhile(array, predicate, isDrop, fromRight) { - var length = array.length, index = fromRight ? length : -1; - while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) { - } - return isDrop ? baseSlice(array, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array, fromRight ? index + 1 : 0, fromRight ? length : index); - } - - function dropRightWhile(array, predicate) { - return array && array.length ? baseWhile(array, baseIteratee(predicate), true, true) : []; - } - - function dropWhile(array, predicate) { - return array && array.length ? baseWhile(array, baseIteratee(predicate), true) : []; - } - - function castFunction(value) { - return typeof value == "function" ? value : identity; - } - - function forEach(collection, iteratee) { - var func = isArray(collection) ? arrayEach : baseEach; - return func(collection, castFunction(iteratee)); - } - - function arrayEachRight(array, iteratee) { - var length = array == null ? 0 : array.length; - while (length--) { - if (iteratee(array[length], length, array) === false) { - break; - } - } - return array; - } - - var baseForRight = createBaseFor(true); - - function baseForOwnRight(object, iteratee) { - return object && baseForRight(object, iteratee, keys); - } - - var baseEachRight = createBaseEach(baseForOwnRight, true); - - function forEachRight(collection, iteratee) { - var func = isArray(collection) ? arrayEachRight : baseEachRight; - return func(collection, castFunction(iteratee)); - } - - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - var length = string.length; - position = position === void 0 ? length : baseClamp(toInteger(position), 0, length); - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; - } - - function baseToPairs(object, props) { - return arrayMap(props, function(key) { - return [key, object[key]]; - }); - } - - function setToPairs(set) { - var index = -1, result = Array(set.size); - set.forEach(function(value) { - result[++index] = [value, value]; - }); - return result; - } - - var mapTag$3 = "[object Map]"; - var setTag$3 = "[object Set]"; - function createToPairs(keysFunc) { - return function(object) { - var tag = getTag$1(object); - if (tag == mapTag$3) { - return mapToArray(object); - } - if (tag == setTag$3) { - return setToPairs(object); - } - return baseToPairs(object, keysFunc(object)); - }; - } - - var toPairs = createToPairs(keys); - - var toPairsIn = createToPairs(keysIn); - - var htmlEscapes = { - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'" - }; - var escapeHtmlChar = basePropertyOf(htmlEscapes); - - var reUnescapedHtml = /[&<>"']/g; - var reHasUnescapedHtml = RegExp(reUnescapedHtml.source); - function escape(string) { - string = toString(string); - return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string; - } - - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - var reHasRegExpChar = RegExp(reRegExpChar.source); - function escapeRegExp(string) { - string = toString(string); - return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, "\\$&") : string; - } - - function arrayEvery(array, predicate) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - if (!predicate(array[index], index, array)) { - return false; - } - } - return true; - } - - function baseEvery(collection, predicate) { - var result = true; - baseEach(collection, function(value, index, collection2) { - result = !!predicate(value, index, collection2); - return result; - }); - return result; - } - - function every(collection, predicate, guard) { - var func = isArray(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = void 0; - } - return func(collection, baseIteratee(predicate)); - } - - var MAX_ARRAY_LENGTH$5 = 4294967295; - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH$5) : 0; - } - - function baseFill(array, value, start, end) { - var length = array.length; - start = toInteger(start); - if (start < 0) { - start = -start > length ? 0 : length + start; - } - end = end === void 0 || end > length ? length : toInteger(end); - if (end < 0) { - end += length; - } - end = start > end ? 0 : toLength(end); - while (start < end) { - array[start++] = value; - } - return array; - } - - function fill(array, value, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (start && typeof start != "number" && isIterateeCall(array, value, start)) { - start = 0; - end = length; - } - return baseFill(array, value, start, end); - } - - function baseFilter(collection, predicate) { - var result = []; - baseEach(collection, function(value, index, collection2) { - if (predicate(value, index, collection2)) { - result.push(value); - } - }); - return result; - } - - function filter(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, baseIteratee(predicate)); - } - - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(predicate); - collection = keys(collection); - predicate = function(key) { - return iteratee(iterable[key], key, iterable); - }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : void 0; - }; - } - - var nativeMax$a = Math.max; - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax$a(length + index, 0); - } - return baseFindIndex(array, baseIteratee(predicate), index); - } - - var find = createFind(findIndex); - - function baseFindKey(collection, predicate, eachFunc) { - var result; - eachFunc(collection, function(value, key, collection2) { - if (predicate(value, key, collection2)) { - result = key; - return false; - } - }); - return result; - } - - function findKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate), baseForOwn); - } - - var nativeMax$9 = Math.max; - var nativeMin$a = Math.min; - function findLastIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length - 1; - if (fromIndex !== void 0) { - index = toInteger(fromIndex); - index = fromIndex < 0 ? nativeMax$9(length + index, 0) : nativeMin$a(index, length - 1); - } - return baseFindIndex(array, baseIteratee(predicate), index, true); - } - - var findLast = createFind(findLastIndex); - - function findLastKey(object, predicate) { - return baseFindKey(object, baseIteratee(predicate), baseForOwnRight); - } - - function head(array) { - return array && array.length ? array[0] : void 0; - } - - function baseMap(collection, iteratee) { - var index = -1, result = isArrayLike(collection) ? Array(collection.length) : []; - baseEach(collection, function(value, key, collection2) { - result[++index] = iteratee(value, key, collection2); - }); - return result; - } - - function map(collection, iteratee) { - var func = isArray(collection) ? arrayMap : baseMap; - return func(collection, baseIteratee(iteratee)); - } - - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } - - var INFINITY$2 = 1 / 0; - function flatMapDeep(collection, iteratee) { - return baseFlatten(map(collection, iteratee), INFINITY$2); - } - - function flatMapDepth(collection, iteratee, depth) { - depth = depth === void 0 ? 1 : toInteger(depth); - return baseFlatten(map(collection, iteratee), depth); - } - - var INFINITY$1 = 1 / 0; - function flattenDeep(array) { - var length = array == null ? 0 : array.length; - return length ? baseFlatten(array, INFINITY$1) : []; - } - - function flattenDepth(array, depth) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - depth = depth === void 0 ? 1 : toInteger(depth); - return baseFlatten(array, depth); - } - - var WRAP_FLIP_FLAG = 512; - function flip$1(func) { - return createWrap(func, WRAP_FLIP_FLAG); - } - - var floor$1 = createRound("floor"); - - var FUNC_ERROR_TEXT$4 = "Expected a function"; - var WRAP_CURRY_FLAG = 8; - var WRAP_PARTIAL_FLAG$1 = 32; - var WRAP_ARY_FLAG = 128; - var WRAP_REARG_FLAG$1 = 256; - function createFlow(fromRight) { - return flatRest(function(funcs) { - var length = funcs.length, index = length, prereq = LodashWrapper.prototype.thru; - if (fromRight) { - funcs.reverse(); - } - while (index--) { - var func = funcs[index]; - if (typeof func != "function") { - throw new TypeError(FUNC_ERROR_TEXT$4); - } - if (prereq && !wrapper && getFuncName(func) == "wrapper") { - var wrapper = new LodashWrapper([], true); - } - } - index = wrapper ? index : length; - while (++index < length) { - func = funcs[index]; - var funcName = getFuncName(func), data = funcName == "wrapper" ? getData(func) : void 0; - if (data && isLaziable(data[0]) && data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG$1 | WRAP_REARG_FLAG$1) && !data[4].length && data[9] == 1) { - wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]); - } else { - wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func); - } - } - return function() { - var args = arguments, value = args[0]; - if (wrapper && args.length == 1 && isArray(value)) { - return wrapper.plant(value).value(); - } - var index2 = 0, result = length ? funcs[index2].apply(this, args) : value; - while (++index2 < length) { - result = funcs[index2].call(this, result); - } - return result; - }; - }); - } - - var flow = createFlow(); - - var flowRight = createFlow(true); - - function forIn(object, iteratee) { - return object == null ? object : baseFor(object, castFunction(iteratee), keysIn); - } - - function forInRight(object, iteratee) { - return object == null ? object : baseForRight(object, castFunction(iteratee), keysIn); - } - - function forOwn(object, iteratee) { - return object && baseForOwn(object, castFunction(iteratee)); - } - - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, castFunction(iteratee)); - } - - function fromPairs(pairs) { - var index = -1, length = pairs == null ? 0 : pairs.length, result = {}; - while (++index < length) { - var pair = pairs[index]; - result[pair[0]] = pair[1]; - } - return result; - } - - function baseFunctions(object, props) { - return arrayFilter(props, function(key) { - return isFunction(object[key]); - }); - } - - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } - - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } - - var objectProto$7 = Object.prototype; - var hasOwnProperty$6 = objectProto$7.hasOwnProperty; - var groupBy = createAggregator(function(result, value, key) { - if (hasOwnProperty$6.call(result, key)) { - result[key].push(value); - } else { - baseAssignValue(result, key, [value]); - } - }); - - function baseGt(value, other) { - return value > other; - } - - function createRelationalOperation(operator) { - return function(value, other) { - if (!(typeof value == "string" && typeof other == "string")) { - value = toNumber(value); - other = toNumber(other); - } - return operator(value, other); - }; - } - - var gt$1 = createRelationalOperation(baseGt); - - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); - - var objectProto$6 = Object.prototype; - var hasOwnProperty$5 = objectProto$6.hasOwnProperty; - function baseHas(object, key) { - return object != null && hasOwnProperty$5.call(object, key); - } - - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - - var nativeMax$8 = Math.max; - var nativeMin$9 = Math.min; - function baseInRange(number, start, end) { - return number >= nativeMin$9(start, end) && number < nativeMax$8(start, end); - } - - function inRange(number, start, end) { - start = toFinite(start); - if (end === void 0) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); - } - - var stringTag = "[object String]"; - function isString(value) { - return typeof value == "string" || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag; - } - - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } - - var nativeMax$7 = Math.max; - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0; - var length = collection.length; - if (fromIndex < 0) { - fromIndex = nativeMax$7(length + fromIndex, 0); - } - return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1; - } - - var nativeMax$6 = Math.max; - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) { - index = nativeMax$6(length + index, 0); - } - return baseIndexOf(array, value, index); - } - - function initial$1(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 0, -1) : []; - } - - var nativeMin$8 = Math.min; - function baseIntersection(arrays, iteratee, comparator) { - var includes = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array(othLength), maxLength = Infinity, result = []; - while (othIndex--) { - var array = arrays[othIndex]; - if (othIndex && iteratee) { - array = arrayMap(array, baseUnary(iteratee)); - } - maxLength = nativeMin$8(array.length, maxLength); - caches[othIndex] = !comparator && (iteratee || length >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : void 0; - } - array = arrays[0]; - var index = -1, seen = caches[0]; - outer: - while (++index < length && result.length < maxLength) { - var value = array[index], computed = iteratee ? iteratee(value) : value; - value = comparator || value !== 0 ? value : 0; - if (!(seen ? cacheHas(seen, computed) : includes(result, computed, comparator))) { - othIndex = othLength; - while (--othIndex) { - var cache = caches[othIndex]; - if (!(cache ? cacheHas(cache, computed) : includes(arrays[othIndex], computed, comparator))) { - continue outer; - } - } - if (seen) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - function castArrayLikeObject(value) { - return isArrayLikeObject(value) ? value : []; - } - - var intersection = baseRest(function(arrays) { - var mapped = arrayMap(arrays, castArrayLikeObject); - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : []; - }); - - var intersectionBy = baseRest(function(arrays) { - var iteratee = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); - if (iteratee === last(mapped)) { - iteratee = void 0; - } else { - mapped.pop(); - } - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, baseIteratee(iteratee)) : []; - }); - - var intersectionWith = baseRest(function(arrays) { - var comparator = last(arrays), mapped = arrayMap(arrays, castArrayLikeObject); - comparator = typeof comparator == "function" ? comparator : void 0; - if (comparator) { - mapped.pop(); - } - return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, void 0, comparator) : []; - }); - - function baseInverter(object, setter, iteratee, accumulator) { - baseForOwn(object, function(value, key, object2) { - setter(accumulator, iteratee(value), key, object2); - }); - return accumulator; - } - - function createInverter(setter, toIteratee) { - return function(object, iteratee) { - return baseInverter(object, setter, toIteratee(iteratee), {}); - }; - } - - var objectProto$5 = Object.prototype; - var nativeObjectToString$1 = objectProto$5.toString; - var invert = createInverter(function(result, value, key) { - if (value != null && typeof value.toString != "function") { - value = nativeObjectToString$1.call(value); - } - result[value] = key; - }, constant(identity)); - - var objectProto$4 = Object.prototype; - var hasOwnProperty$4 = objectProto$4.hasOwnProperty; - var nativeObjectToString = objectProto$4.toString; - var invertBy = createInverter(function(result, value, key) { - if (value != null && typeof value.toString != "function") { - value = nativeObjectToString.call(value); - } - if (hasOwnProperty$4.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, baseIteratee); - - function parent(object, path) { - return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1)); - } - - function baseInvoke(object, path, args) { - path = castPath(path, object); - object = parent(object, path); - var func = object == null ? object : object[toKey(last(path))]; - return func == null ? void 0 : apply(func, object, args); - } - - var invoke = baseRest(baseInvoke); - - var invokeMap = baseRest(function(collection, path, args) { - var index = -1, isFunc = typeof path == "function", result = isArrayLike(collection) ? Array(collection.length) : []; - baseEach(collection, function(value) { - result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args); - }); - return result; - }); - - var arrayBufferTag = "[object ArrayBuffer]"; - function baseIsArrayBuffer(value) { - return isObjectLike(value) && baseGetTag(value) == arrayBufferTag; - } - - var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer; - var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - - var boolTag = "[object Boolean]"; - function isBoolean$1(value) { - return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag; - } - - var dateTag = "[object Date]"; - function baseIsDate(value) { - return isObjectLike(value) && baseGetTag(value) == dateTag; - } - - var nodeIsDate = nodeUtil && nodeUtil.isDate; - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - - function isElement$2(value) { - return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); - } - - var mapTag$2 = "[object Map]"; - var setTag$2 = "[object Set]"; - var objectProto$3 = Object.prototype; - var hasOwnProperty$3 = objectProto$3.hasOwnProperty; - function isEmpty$1(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && (isArray(value) || typeof value == "string" || typeof value.splice == "function" || isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag$1(value); - if (tag == mapTag$2 || tag == setTag$2) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty$3.call(value, key)) { - return false; - } - } - return true; - } - - function isEqual$1(value, other) { - return baseIsEqual(value, other); - } - - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == "function" ? customizer : void 0; - var result = customizer ? customizer(value, other) : void 0; - return result === void 0 ? baseIsEqual(value, other, void 0, customizer) : !!result; - } - - var nativeIsFinite = root.isFinite; - function isFinite(value) { - return typeof value == "number" && nativeIsFinite(value); - } - - function isInteger(value) { - return typeof value == "number" && value == toInteger(value); - } - - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } - - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == "function" ? customizer : void 0; - return baseIsMatch(object, source, getMatchData(source), customizer); - } - - var numberTag = "[object Number]"; - function isNumber$1(value) { - return typeof value == "number" || isObjectLike(value) && baseGetTag(value) == numberTag; - } - - function isNaN$1(value) { - return isNumber$1(value) && value != +value; - } - - var isMaskable = coreJsData ? isFunction : stubFalse; - - var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill."; - function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); - } - - function isNil(value) { - return value == null; - } - - function isNull(value) { - return value === null; - } - - var regexpTag = "[object RegExp]"; - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - - var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp; - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - var MAX_SAFE_INTEGER$3 = 9007199254740991; - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER$3 && value <= MAX_SAFE_INTEGER$3; - } - - function isUndefined$1(value) { - return value === void 0; - } - - var weakMapTag = "[object WeakMap]"; - function isWeakMap(value) { - return isObjectLike(value) && getTag$1(value) == weakMapTag; - } - - var weakSetTag = "[object WeakSet]"; - function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag; - } - - var CLONE_DEEP_FLAG$3 = 1; - function iteratee(func) { - return baseIteratee(typeof func == "function" ? func : baseClone(func, CLONE_DEEP_FLAG$3)); - } - - var arrayProto$4 = Array.prototype; - var nativeJoin = arrayProto$4.join; - function join(array, separator) { - return array == null ? "" : nativeJoin.call(array, separator); - } - - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? "-" : "") + word.toLowerCase(); - }); - - var keyBy = createAggregator(function(result, value, key) { - baseAssignValue(result, key, value); - }); - - function strictLastIndexOf(array, value, fromIndex) { - var index = fromIndex + 1; - while (index--) { - if (array[index] === value) { - return index; - } - } - return index; - } - - var nativeMax$5 = Math.max; - var nativeMin$7 = Math.min; - function lastIndexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) { - return -1; - } - var index = length; - if (fromIndex !== void 0) { - index = toInteger(fromIndex); - index = index < 0 ? nativeMax$5(length + index, 0) : nativeMin$7(index, length - 1); - } - return value === value ? strictLastIndexOf(array, value, index) : baseFindIndex(array, baseIsNaN, index, true); - } - - var lowerCase = createCompounder(function(result, word, index) { - return result + (index ? " " : "") + word.toLowerCase(); - }); - - var lowerFirst = createCaseFirst("toLowerCase"); - - function baseLt(value, other) { - return value < other; - } - - var lt$1 = createRelationalOperation(baseLt); - - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); - - function mapKeys(object, iteratee) { - var result = {}; - iteratee = baseIteratee(iteratee); - baseForOwn(object, function(value, key, object2) { - baseAssignValue(result, iteratee(value, key, object2), value); - }); - return result; - } - - function mapValues(object, iteratee) { - var result = {}; - iteratee = baseIteratee(iteratee); - baseForOwn(object, function(value, key, object2) { - baseAssignValue(result, key, iteratee(value, key, object2)); - }); - return result; - } - - var CLONE_DEEP_FLAG$2 = 1; - function matches(source) { - return baseMatches(baseClone(source, CLONE_DEEP_FLAG$2)); - } - - var CLONE_DEEP_FLAG$1 = 1; - function matchesProperty(path, srcValue) { - return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG$1)); - } - - function baseExtremum(array, iteratee, comparator) { - var index = -1, length = array.length; - while (++index < length) { - var value = array[index], current = iteratee(value); - if (current != null && (computed === void 0 ? current === current && !isSymbol(current) : comparator(current, computed))) { - var computed = current, result = value; - } - } - return result; - } - - function max$3(array) { - return array && array.length ? baseExtremum(array, identity, baseGt) : void 0; - } - - function maxBy(array, iteratee) { - return array && array.length ? baseExtremum(array, baseIteratee(iteratee), baseGt) : void 0; - } - - function baseSum(array, iteratee) { - var result, index = -1, length = array.length; - while (++index < length) { - var current = iteratee(array[index]); - if (current !== void 0) { - result = result === void 0 ? current : result + current; - } - } - return result; - } - - var NAN = 0 / 0; - function baseMean(array, iteratee) { - var length = array == null ? 0 : array.length; - return length ? baseSum(array, iteratee) / length : NAN; - } - - function mean(array) { - return baseMean(array, identity); - } - - function meanBy(array, iteratee) { - return baseMean(array, baseIteratee(iteratee)); - } - - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - var method = baseRest(function(path, args) { - return function(object) { - return baseInvoke(object, path, args); - }; - }); - - var methodOf = baseRest(function(object, args) { - return function(path) { - return baseInvoke(object, path, args); - }; - }); - - function min$3(array) { - return array && array.length ? baseExtremum(array, identity, baseLt) : void 0; - } - - function minBy(array, iteratee) { - return array && array.length ? baseExtremum(array, baseIteratee(iteratee), baseLt) : void 0; - } - - function mixin$1(object, source, options) { - var props = keys(source), methodNames = baseFunctions(source, props); - var chain = !(isObject(options) && "chain" in options) || !!options.chain, isFunc = isFunction(object); - arrayEach(methodNames, function(methodName) { - var func = source[methodName]; - object[methodName] = func; - if (isFunc) { - object.prototype[methodName] = function() { - var chainAll = this.__chain__; - if (chain || chainAll) { - var result = object(this.__wrapped__), actions = result.__actions__ = copyArray(this.__actions__); - actions.push({ "func": func, "args": arguments, "thisArg": object }); - result.__chain__ = chainAll; - return result; - } - return func.apply(object, arrayPush([this.value()], arguments)); - }; - } - }); - return object; - } - - var multiply = createMathOperation(function(multiplier, multiplicand) { - return multiplier * multiplicand; - }, 1); - - var FUNC_ERROR_TEXT$3 = "Expected a function"; - function negate(predicate) { - if (typeof predicate != "function") { - throw new TypeError(FUNC_ERROR_TEXT$3); - } - return function() { - var args = arguments; - switch (args.length) { - case 0: - return !predicate.call(this); - case 1: - return !predicate.call(this, args[0]); - case 2: - return !predicate.call(this, args[0], args[1]); - case 3: - return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - - function iteratorToArray(iterator) { - var data, result = []; - while (!(data = iterator.next()).done) { - result.push(data.value); - } - return result; - } - - var mapTag$1 = "[object Map]"; - var setTag$1 = "[object Set]"; - var symIterator$1 = Symbol$1 ? Symbol$1.iterator : void 0; - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (symIterator$1 && value[symIterator$1]) { - return iteratorToArray(value[symIterator$1]()); - } - var tag = getTag$1(value), func = tag == mapTag$1 ? mapToArray : tag == setTag$1 ? setToArray : values; - return func(value); - } - - function wrapperNext() { - if (this.__values__ === void 0) { - this.__values__ = toArray(this.value()); - } - var done = this.__index__ >= this.__values__.length, value = done ? void 0 : this.__values__[this.__index__++]; - return { "done": done, "value": value }; - } - - function baseNth(array, n) { - var length = array.length; - if (!length) { - return; - } - n += n < 0 ? length : 0; - return isIndex(n, length) ? array[n] : void 0; - } - - function nth(array, n) { - return array && array.length ? baseNth(array, toInteger(n)) : void 0; - } - - function nthArg(n) { - n = toInteger(n); - return baseRest(function(args) { - return baseNth(args, n); - }); - } - - function baseUnset(object, path) { - path = castPath(path, object); - object = parent(object, path); - return object == null || delete object[toKey(last(path))]; - } - - function customOmitClone(value) { - return isPlainObject(value) ? void 0 : value; - } - - var CLONE_DEEP_FLAG = 1; - var CLONE_FLAT_FLAG = 2; - var CLONE_SYMBOLS_FLAG = 4; - var omit = flatRest(function(object, paths) { - var result = {}; - if (object == null) { - return result; - } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath(path, object); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object, getAllKeysIn(object), result); - if (isDeep) { - result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); - } - var length = paths.length; - while (length--) { - baseUnset(result, paths[length]); - } - return result; - }); - - function baseSet(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath(path, object); - var index = -1, length = path.length, lastIndex = length - 1, nested = object; - while (nested != null && ++index < length) { - var key = toKey(path[index]), newValue = value; - if (key === "__proto__" || key === "constructor" || key === "prototype") { - return object; - } - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : void 0; - if (newValue === void 0) { - newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {}; - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; - } - - function basePickBy(object, paths, predicate) { - var index = -1, length = paths.length, result = {}; - while (++index < length) { - var path = paths[index], value = baseGet(object, path); - if (predicate(value, path)) { - baseSet(result, castPath(path, object), value); - } - } - return result; - } - - function pickBy(object, predicate) { - if (object == null) { - return {}; - } - var props = arrayMap(getAllKeysIn(object), function(prop) { - return [prop]; - }); - predicate = baseIteratee(predicate); - return basePickBy(object, props, function(value, path) { - return predicate(value, path[0]); - }); - } - - function omitBy(object, predicate) { - return pickBy(object, negate(baseIteratee(predicate))); - } - - function once(func) { - return before(2, func); - } - - function baseSortBy(array, comparer) { - var length = array.length; - array.sort(comparer); - while (length--) { - array[length] = array[length].value; - } - return array; - } - - function compareAscending(value, other) { - if (value !== other) { - var valIsDefined = value !== void 0, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol(value); - var othIsDefined = other !== void 0, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol(other); - if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) { - return 1; - } - if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) { - return -1; - } - } - return 0; - } - - function compareMultiple(object, other, orders) { - var index = -1, objCriteria = object.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length; - while (++index < length) { - var result = compareAscending(objCriteria[index], othCriteria[index]); - if (result) { - if (index >= ordersLength) { - return result; - } - var order = orders[index]; - return result * (order == "desc" ? -1 : 1); - } - } - return object.index - other.index; - } - - function baseOrderBy(collection, iteratees, orders) { - if (iteratees.length) { - iteratees = arrayMap(iteratees, function(iteratee) { - if (isArray(iteratee)) { - return function(value) { - return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee); - }; - } - return iteratee; - }); - } else { - iteratees = [identity]; - } - var index = -1; - iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); - var result = baseMap(collection, function(value, key, collection2) { - var criteria = arrayMap(iteratees, function(iteratee) { - return iteratee(value); - }); - return { "criteria": criteria, "index": ++index, "value": value }; - }); - return baseSortBy(result, function(object, other) { - return compareMultiple(object, other, orders); - }); - } - - function orderBy$1(collection, iteratees, orders, guard) { - if (collection == null) { - return []; - } - if (!isArray(iteratees)) { - iteratees = iteratees == null ? [] : [iteratees]; - } - orders = guard ? void 0 : orders; - if (!isArray(orders)) { - orders = orders == null ? [] : [orders]; - } - return baseOrderBy(collection, iteratees, orders); - } - - function createOver(arrayFunc) { - return flatRest(function(iteratees) { - iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); - return baseRest(function(args) { - var thisArg = this; - return arrayFunc(iteratees, function(iteratee) { - return apply(iteratee, thisArg, args); - }); - }); - }); - } - - var over = createOver(arrayMap); - - var castRest = baseRest; - - var nativeMin$6 = Math.min; - var overArgs = castRest(function(func, transforms) { - transforms = transforms.length == 1 && isArray(transforms[0]) ? arrayMap(transforms[0], baseUnary(baseIteratee)) : arrayMap(baseFlatten(transforms, 1), baseUnary(baseIteratee)); - var funcsLength = transforms.length; - return baseRest(function(args) { - var index = -1, length = nativeMin$6(args.length, funcsLength); - while (++index < length) { - args[index] = transforms[index].call(this, args[index]); - } - return apply(func, this, args); - }); - }); - - var overEvery = createOver(arrayEvery); - - var overSome = createOver(arraySome); - - var MAX_SAFE_INTEGER$2 = 9007199254740991; - var nativeFloor$3 = Math.floor; - function baseRepeat(string, n) { - var result = ""; - if (!string || n < 1 || n > MAX_SAFE_INTEGER$2) { - return result; - } - do { - if (n % 2) { - result += string; - } - n = nativeFloor$3(n / 2); - if (n) { - string += string; - } - } while (n); - return result; - } - - var asciiSize = baseProperty("length"); - - var rsAstralRange = "\\ud800-\\udfff"; - var rsComboMarksRange = "\\u0300-\\u036f"; - var reComboHalfMarksRange = "\\ufe20-\\ufe2f"; - var rsComboSymbolsRange = "\\u20d0-\\u20ff"; - var rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange; - var rsVarRange = "\\ufe0e\\ufe0f"; - var rsAstral = "[" + rsAstralRange + "]"; - var rsCombo = "[" + rsComboRange + "]"; - var rsFitz = "\\ud83c[\\udffb-\\udfff]"; - var rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")"; - var rsNonAstral = "[^" + rsAstralRange + "]"; - var rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}"; - var rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]"; - var rsZWJ = "\\u200d"; - var reOptMod = rsModifier + "?"; - var rsOptVar = "[" + rsVarRange + "]?"; - var rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*"; - var rsSeq = rsOptVar + reOptMod + rsOptJoin; - var rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")"; - var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g"); - function unicodeSize(string) { - var result = reUnicode.lastIndex = 0; - while (reUnicode.test(string)) { - ++result; - } - return result; - } - - function stringSize(string) { - return hasUnicode(string) ? unicodeSize(string) : asciiSize(string); - } - - var nativeCeil$2 = Math.ceil; - function createPadding(length, chars) { - chars = chars === void 0 ? " " : baseToString(chars); - var charsLength = chars.length; - if (charsLength < 2) { - return charsLength ? baseRepeat(chars, length) : chars; - } - var result = baseRepeat(chars, nativeCeil$2(length / stringSize(chars))); - return hasUnicode(chars) ? castSlice(stringToArray(result), 0, length).join("") : result.slice(0, length); - } - - var nativeCeil$1 = Math.ceil; - var nativeFloor$2 = Math.floor; - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - var strLength = length ? stringSize(string) : 0; - if (!length || strLength >= length) { - return string; - } - var mid = (length - strLength) / 2; - return createPadding(nativeFloor$2(mid), chars) + string + createPadding(nativeCeil$1(mid), chars); - } - - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); - var strLength = length ? stringSize(string) : 0; - return length && strLength < length ? string + createPadding(length - strLength, chars) : string; - } - - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); - var strLength = length ? stringSize(string) : 0; - return length && strLength < length ? createPadding(length - strLength, chars) + string : string; - } - - var reTrimStart$1 = /^\s+/; - var nativeParseInt = root.parseInt; - function parseInt$1(string, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt(toString(string).replace(reTrimStart$1, ""), radix || 0); - } - - var WRAP_PARTIAL_FLAG = 32; - var partial = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partial)); - return createWrap(func, WRAP_PARTIAL_FLAG, void 0, partials, holders); - }); - partial.placeholder = {}; - - var WRAP_PARTIAL_RIGHT_FLAG = 64; - var partialRight = baseRest(function(func, partials) { - var holders = replaceHolders(partials, getHolder(partialRight)); - return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, void 0, partials, holders); - }); - partialRight.placeholder = {}; - - var partition = createAggregator(function(result, value, key) { - result[key ? 0 : 1].push(value); - }, function() { - return [[], []]; - }); - - function basePick(object, paths) { - return basePickBy(object, paths, function(value, path) { - return hasIn(object, path); - }); - } - - var pick = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); - }); - - function wrapperPlant(value) { - var result, parent = this; - while (parent instanceof baseLodash) { - var clone = wrapperClone(parent); - clone.__index__ = 0; - clone.__values__ = void 0; - if (result) { - previous.__wrapped__ = clone; - } else { - result = clone; - } - var previous = clone; - parent = parent.__wrapped__; - } - previous.__wrapped__ = value; - return result; - } - - function propertyOf(object) { - return function(path) { - return object == null ? void 0 : baseGet(object, path); - }; - } - - function baseIndexOfWith(array, value, fromIndex, comparator) { - var index = fromIndex - 1, length = array.length; - while (++index < length) { - if (comparator(array[index], value)) { - return index; - } - } - return -1; - } - - var arrayProto$3 = Array.prototype; - var splice$1 = arrayProto$3.splice; - function basePullAll(array, values, iteratee, comparator) { - var indexOf = comparator ? baseIndexOfWith : baseIndexOf, index = -1, length = values.length, seen = array; - if (array === values) { - values = copyArray(values); - } - if (iteratee) { - seen = arrayMap(array, baseUnary(iteratee)); - } - while (++index < length) { - var fromIndex = 0, value = values[index], computed = iteratee ? iteratee(value) : value; - while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) { - if (seen !== array) { - splice$1.call(seen, fromIndex, 1); - } - splice$1.call(array, fromIndex, 1); - } - } - return array; - } - - function pullAll(array, values) { - return array && array.length && values && values.length ? basePullAll(array, values) : array; - } - - var pull = baseRest(pullAll); - - function pullAllBy(array, values, iteratee) { - return array && array.length && values && values.length ? basePullAll(array, values, baseIteratee(iteratee)) : array; - } - - function pullAllWith(array, values, comparator) { - return array && array.length && values && values.length ? basePullAll(array, values, void 0, comparator) : array; - } - - var arrayProto$2 = Array.prototype; - var splice = arrayProto$2.splice; - function basePullAt(array, indexes) { - var length = array ? indexes.length : 0, lastIndex = length - 1; - while (length--) { - var index = indexes[length]; - if (length == lastIndex || index !== previous) { - var previous = index; - if (isIndex(index)) { - splice.call(array, index, 1); - } else { - baseUnset(array, index); - } - } - } - return array; - } - - var pullAt = flatRest(function(array, indexes) { - var length = array == null ? 0 : array.length, result = baseAt(array, indexes); - basePullAt(array, arrayMap(indexes, function(index) { - return isIndex(index, length) ? +index : index; - }).sort(compareAscending)); - return result; - }); - - var nativeFloor$1 = Math.floor; - var nativeRandom$1 = Math.random; - function baseRandom(lower, upper) { - return lower + nativeFloor$1(nativeRandom$1() * (upper - lower + 1)); - } - - var freeParseFloat = parseFloat; - var nativeMin$5 = Math.min; - var nativeRandom = Math.random; - function random(lower, upper, floating) { - if (floating && typeof floating != "boolean" && isIterateeCall(lower, upper, floating)) { - upper = floating = void 0; - } - if (floating === void 0) { - if (typeof upper == "boolean") { - floating = upper; - upper = void 0; - } else if (typeof lower == "boolean") { - floating = lower; - lower = void 0; - } - } - if (lower === void 0 && upper === void 0) { - lower = 0; - upper = 1; - } else { - lower = toFinite(lower); - if (upper === void 0) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin$5(lower + rand * (upper - lower + freeParseFloat("1e-" + ((rand + "").length - 1))), upper); - } - return baseRandom(lower, upper); - } - - var nativeCeil = Math.ceil; - var nativeMax$4 = Math.max; - function baseRange(start, end, step, fromRight) { - var index = -1, length = nativeMax$4(nativeCeil((end - start) / (step || 1)), 0), result = Array(length); - while (length--) { - result[fromRight ? length : ++index] = start; - start += step; - } - return result; - } - - function createRange(fromRight) { - return function(start, end, step) { - if (step && typeof step != "number" && isIterateeCall(start, end, step)) { - end = step = void 0; - } - start = toFinite(start); - if (end === void 0) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - step = step === void 0 ? start < end ? 1 : -1 : toFinite(step); - return baseRange(start, end, step, fromRight); - }; - } - - var range$1 = createRange(); - - var rangeRight = createRange(true); - - var WRAP_REARG_FLAG = 256; - var rearg = flatRest(function(func, indexes) { - return createWrap(func, WRAP_REARG_FLAG, void 0, void 0, void 0, indexes); - }); - - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection2) { - accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection2); - }); - return accumulator; - } - - function reduce(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3; - return func(collection, baseIteratee(iteratee), accumulator, initAccum, baseEach); - } - - function arrayReduceRight(array, iteratee, accumulator, initAccum) { - var length = array == null ? 0 : array.length; - if (initAccum && length) { - accumulator = array[--length]; - } - while (length--) { - accumulator = iteratee(accumulator, array[length], length, array); - } - return accumulator; - } - - function reduceRight(collection, iteratee, accumulator) { - var func = isArray(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3; - return func(collection, baseIteratee(iteratee), accumulator, initAccum, baseEachRight); - } - - function reject(collection, predicate) { - var func = isArray(collection) ? arrayFilter : baseFilter; - return func(collection, negate(baseIteratee(predicate))); - } - - function remove(array, predicate) { - var result = []; - if (!(array && array.length)) { - return result; - } - var index = -1, indexes = [], length = array.length; - predicate = baseIteratee(predicate); - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) { - result.push(value); - indexes.push(index); - } - } - basePullAt(array, indexes); - return result; - } - - function repeat(string, n, guard) { - if (guard ? isIterateeCall(string, n, guard) : n === void 0) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } - - function replace() { - var args = arguments, string = toString(args[0]); - return args.length < 3 ? string : string.replace(args[1], args[2]); - } - - var FUNC_ERROR_TEXT$2 = "Expected a function"; - function rest(func, start) { - if (typeof func != "function") { - throw new TypeError(FUNC_ERROR_TEXT$2); - } - start = start === void 0 ? start : toInteger(start); - return baseRest(func, start); - } - - function result(object, path, defaultValue) { - path = castPath(path, object); - var index = -1, length = path.length; - if (!length) { - length = 1; - object = void 0; - } - while (++index < length) { - var value = object == null ? void 0 : object[toKey(path[index])]; - if (value === void 0) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } - - var arrayProto$1 = Array.prototype; - var nativeReverse = arrayProto$1.reverse; - function reverse(array) { - return array == null ? array : nativeReverse.call(array); - } - - var round$1 = createRound("round"); - - function arraySample(array) { - var length = array.length; - return length ? array[baseRandom(0, length - 1)] : void 0; - } - - function baseSample(collection) { - return arraySample(values(collection)); - } - - function sample(collection) { - var func = isArray(collection) ? arraySample : baseSample; - return func(collection); - } - - function shuffleSelf(array, size) { - var index = -1, length = array.length, lastIndex = length - 1; - size = size === void 0 ? length : size; - while (++index < size) { - var rand = baseRandom(index, lastIndex), value = array[rand]; - array[rand] = array[index]; - array[index] = value; - } - array.length = size; - return array; - } - - function arraySampleSize(array, n) { - return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length)); - } - - function baseSampleSize(collection, n) { - var array = values(collection); - return shuffleSelf(array, baseClamp(n, 0, array.length)); - } - - function sampleSize(collection, n, guard) { - if (guard ? isIterateeCall(collection, n, guard) : n === void 0) { - n = 1; - } else { - n = toInteger(n); - } - var func = isArray(collection) ? arraySampleSize : baseSampleSize; - return func(collection, n); - } - - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - - function setWith(object, path, value, customizer) { - customizer = typeof customizer == "function" ? customizer : void 0; - return object == null ? object : baseSet(object, path, value, customizer); - } - - function arrayShuffle(array) { - return shuffleSelf(copyArray(array)); - } - - function baseShuffle(collection) { - return shuffleSelf(values(collection)); - } - - function shuffle(collection) { - var func = isArray(collection) ? arrayShuffle : baseShuffle; - return func(collection); - } - - var mapTag = "[object Map]"; - var setTag = "[object Set]"; - function size(collection) { - if (collection == null) { - return 0; - } - if (isArrayLike(collection)) { - return isString(collection) ? stringSize(collection) : collection.length; - } - var tag = getTag$1(collection); - if (tag == mapTag || tag == setTag) { - return collection.size; - } - return baseKeys(collection).length; - } - - function slice(array, start, end) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - if (end && typeof end != "number" && isIterateeCall(array, start, end)) { - start = 0; - end = length; - } else { - start = start == null ? 0 : toInteger(start); - end = end === void 0 ? length : toInteger(end); - } - return baseSlice(array, start, end); - } - - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? "_" : "") + word.toLowerCase(); - }); - - function baseSome(collection, predicate) { - var result; - baseEach(collection, function(value, index, collection2) { - result = predicate(value, index, collection2); - return !result; - }); - return !!result; - } - - function some(collection, predicate, guard) { - var func = isArray(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) { - predicate = void 0; - } - return func(collection, baseIteratee(predicate)); - } - - var sortBy = baseRest(function(collection, iteratees) { - if (collection == null) { - return []; - } - var length = iteratees.length; - if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) { - iteratees = []; - } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) { - iteratees = [iteratees[0]]; - } - return baseOrderBy(collection, baseFlatten(iteratees, 1), []); - }); - - var MAX_ARRAY_LENGTH$4 = 4294967295; - var MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH$4 - 1; - var nativeFloor = Math.floor; - var nativeMin$4 = Math.min; - function baseSortedIndexBy(array, value, iteratee, retHighest) { - var low = 0, high = array == null ? 0 : array.length; - if (high === 0) { - return 0; - } - value = iteratee(value); - var valIsNaN = value !== value, valIsNull = value === null, valIsSymbol = isSymbol(value), valIsUndefined = value === void 0; - while (low < high) { - var mid = nativeFloor((low + high) / 2), computed = iteratee(array[mid]), othIsDefined = computed !== void 0, othIsNull = computed === null, othIsReflexive = computed === computed, othIsSymbol = isSymbol(computed); - if (valIsNaN) { - var setLow = retHighest || othIsReflexive; - } else if (valIsUndefined) { - setLow = othIsReflexive && (retHighest || othIsDefined); - } else if (valIsNull) { - setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull); - } else if (valIsSymbol) { - setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol); - } else if (othIsNull || othIsSymbol) { - setLow = false; - } else { - setLow = retHighest ? computed <= value : computed < value; - } - if (setLow) { - low = mid + 1; - } else { - high = mid; - } - } - return nativeMin$4(high, MAX_ARRAY_INDEX); - } - - var MAX_ARRAY_LENGTH$3 = 4294967295; - var HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH$3 >>> 1; - function baseSortedIndex(array, value, retHighest) { - var low = 0, high = array == null ? low : array.length; - if (typeof value == "number" && value === value && high <= HALF_MAX_ARRAY_LENGTH) { - while (low < high) { - var mid = low + high >>> 1, computed = array[mid]; - if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) { - low = mid + 1; - } else { - high = mid; - } - } - return high; - } - return baseSortedIndexBy(array, value, identity, retHighest); - } - - function sortedIndex(array, value) { - return baseSortedIndex(array, value); - } - - function sortedIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, baseIteratee(iteratee)); - } - - function sortedIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value); - if (index < length && eq(array[index], value)) { - return index; - } - } - return -1; - } - - function sortedLastIndex(array, value) { - return baseSortedIndex(array, value, true); - } - - function sortedLastIndexBy(array, value, iteratee) { - return baseSortedIndexBy(array, value, baseIteratee(iteratee), true); - } - - function sortedLastIndexOf(array, value) { - var length = array == null ? 0 : array.length; - if (length) { - var index = baseSortedIndex(array, value, true) - 1; - if (eq(array[index], value)) { - return index; - } - } - return -1; - } - - function baseSortedUniq(array, iteratee) { - var index = -1, length = array.length, resIndex = 0, result = []; - while (++index < length) { - var value = array[index], computed = iteratee ? iteratee(value) : value; - if (!index || !eq(computed, seen)) { - var seen = computed; - result[resIndex++] = value === 0 ? 0 : value; - } - } - return result; - } - - function sortedUniq(array) { - return array && array.length ? baseSortedUniq(array) : []; - } - - function sortedUniqBy(array, iteratee) { - return array && array.length ? baseSortedUniq(array, baseIteratee(iteratee)) : []; - } - - var MAX_ARRAY_LENGTH$2 = 4294967295; - function split(string, separator, limit) { - if (limit && typeof limit != "number" && isIterateeCall(string, separator, limit)) { - separator = limit = void 0; - } - limit = limit === void 0 ? MAX_ARRAY_LENGTH$2 : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if (string && (typeof separator == "string" || separator != null && !isRegExp(separator))) { - separator = baseToString(separator); - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return string.split(separator, limit); - } - - var FUNC_ERROR_TEXT$1 = "Expected a function"; - var nativeMax$3 = Math.max; - function spread(func, start) { - if (typeof func != "function") { - throw new TypeError(FUNC_ERROR_TEXT$1); - } - start = start == null ? 0 : nativeMax$3(toInteger(start), 0); - return baseRest(function(args) { - var array = args[start], otherArgs = castSlice(args, 0, start); - if (array) { - arrayPush(otherArgs, array); - } - return apply(func, this, otherArgs); - }); - } - - var startCase = createCompounder(function(result, word, index) { - return result + (index ? " " : "") + upperFirst(word); - }); - - function startsWith(string, target, position) { - string = toString(string); - position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length); - target = baseToString(target); - return string.slice(position, position + target.length) == target; - } - - function stubObject() { - return {}; - } - - function stubString() { - return ""; - } - - function stubTrue() { - return true; - } - - var subtract = createMathOperation(function(minuend, subtrahend) { - return minuend - subtrahend; - }, 0); - - function sum$1(array) { - return array && array.length ? baseSum(array, identity) : 0; - } - - function sumBy(array, iteratee) { - return array && array.length ? baseSum(array, baseIteratee(iteratee)) : 0; - } - - function tail(array) { - var length = array == null ? 0 : array.length; - return length ? baseSlice(array, 1, length) : []; - } - - function take(array, n, guard) { - if (!(array && array.length)) { - return []; - } - n = guard || n === void 0 ? 1 : toInteger(n); - return baseSlice(array, 0, n < 0 ? 0 : n); - } - - function takeRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) { - return []; - } - n = guard || n === void 0 ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, n < 0 ? 0 : n, length); - } - - function takeRightWhile(array, predicate) { - return array && array.length ? baseWhile(array, baseIteratee(predicate), false, true) : []; - } - - function takeWhile(array, predicate) { - return array && array.length ? baseWhile(array, baseIteratee(predicate)) : []; - } - - function tap(value, interceptor) { - interceptor(value); - return value; - } - - var objectProto$2 = Object.prototype; - var hasOwnProperty$2 = objectProto$2.hasOwnProperty; - function customDefaultsAssignIn(objValue, srcValue, key, object) { - if (objValue === void 0 || eq(objValue, objectProto$2[key]) && !hasOwnProperty$2.call(object, key)) { - return srcValue; - } - return objValue; - } - - var stringEscapes = { - "\\": "\\", - "'": "'", - "\n": "n", - "\r": "r", - "\u2028": "u2028", - "\u2029": "u2029" - }; - function escapeStringChar(chr) { - return "\\" + stringEscapes[chr]; - } - - var reInterpolate = /<%=([\s\S]+?)%>/g; - - var reEscape = /<%-([\s\S]+?)%>/g; - - var reEvaluate = /<%([\s\S]+?)%>/g; - - var templateSettings = { - "escape": reEscape, - "evaluate": reEvaluate, - "interpolate": reInterpolate, - "variable": "", - "imports": { - "_": { "escape": escape } - } - }; - - var INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`"; - var reEmptyStringLeading = /\b__p \+= '';/g; - var reEmptyStringMiddle = /\b(__p \+=) '' \+/g; - var reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g; - var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/; - var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g; - var reNoMatch = /($^)/; - var reUnescapedString = /['\n\r\u2028\u2029\\]/g; - var objectProto$1 = Object.prototype; - var hasOwnProperty$1 = objectProto$1.hasOwnProperty; - function template(string, options, guard) { - var settings = templateSettings.imports._.templateSettings || templateSettings; - if (guard && isIterateeCall(string, options, guard)) { - options = void 0; - } - string = toString(string); - options = assignInWith({}, options, settings, customDefaultsAssignIn); - var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys); - var isEscaping, isEvaluating, index = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '"; - var reDelimiters = RegExp((options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$", "g"); - var sourceURL = hasOwnProperty$1.call(options, "sourceURL") ? "//# sourceURL=" + (options.sourceURL + "").replace(/\s/g, " ") + "\n" : ""; - string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) { - interpolateValue || (interpolateValue = esTemplateValue); - source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); - if (escapeValue) { - isEscaping = true; - source += "' +\n__e(" + escapeValue + ") +\n'"; - } - if (evaluateValue) { - isEvaluating = true; - source += "';\n" + evaluateValue + ";\n__p += '"; - } - if (interpolateValue) { - source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'"; - } - index = offset + match.length; - return match; - }); - source += "';\n"; - var variable = hasOwnProperty$1.call(options, "variable") && options.variable; - if (!variable) { - source = "with (obj) {\n" + source + "\n}\n"; - } else if (reForbiddenIdentifierChars.test(variable)) { - throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT); - } - source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;"); - source = "function(" + (variable || "obj") + ") {\n" + (variable ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + source + "return __p\n}"; - var result = attempt(function() { - return Function(importsKeys, sourceURL + "return " + source).apply(void 0, importsValues); - }); - result.source = source; - if (isError(result)) { - throw result; - } - return result; - } - - var FUNC_ERROR_TEXT = "Expected a function"; - function throttle(func, wait, options) { - var leading = true, trailing = true; - if (typeof func != "function") { - throw new TypeError(FUNC_ERROR_TEXT); - } - if (isObject(options)) { - leading = "leading" in options ? !!options.leading : leading; - trailing = "trailing" in options ? !!options.trailing : trailing; - } - return debounce(func, wait, { - "leading": leading, - "maxWait": wait, - "trailing": trailing - }); - } - - function thru(value, interceptor) { - return interceptor(value); - } - - var MAX_SAFE_INTEGER$1 = 9007199254740991; - var MAX_ARRAY_LENGTH$1 = 4294967295; - var nativeMin$3 = Math.min; - function times(n, iteratee) { - n = toInteger(n); - if (n < 1 || n > MAX_SAFE_INTEGER$1) { - return []; - } - var index = MAX_ARRAY_LENGTH$1, length = nativeMin$3(n, MAX_ARRAY_LENGTH$1); - iteratee = castFunction(iteratee); - n -= MAX_ARRAY_LENGTH$1; - var result = baseTimes(length, iteratee); - while (++index < n) { - iteratee(index); - } - return result; - } - - function wrapperToIterator() { - return this; - } - - function baseWrapperValue(value, actions) { - var result = value; - if (result instanceof LazyWrapper) { - result = result.value(); - } - return arrayReduce(actions, function(result2, action) { - return action.func.apply(action.thisArg, arrayPush([result2], action.args)); - }, result); - } - - function wrapperValue() { - return baseWrapperValue(this.__wrapped__, this.__actions__); - } - - function toLower(value) { - return toString(value).toLowerCase(); - } - - function toPath(value) { - if (isArray(value)) { - return arrayMap(value, toKey); - } - return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value))); - } - - var MAX_SAFE_INTEGER = 9007199254740991; - function toSafeInteger(value) { - return value ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0; - } - - function toUpper(value) { - return toString(value).toUpperCase(); - } - - function transform(object, iteratee, accumulator) { - var isArr = isArray(object), isArrLike = isArr || isBuffer(object) || isTypedArray(object); - iteratee = baseIteratee(iteratee); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor() : []; - } else if (isObject(object)) { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object2) { - return iteratee(accumulator, value, index, object2); - }); - return accumulator; - } - - function charsEndIndex(strSymbols, chrSymbols) { - var index = strSymbols.length; - while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { - } - return index; - } - - function charsStartIndex(strSymbols, chrSymbols) { - var index = -1, length = strSymbols.length; - while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) { - } - return index; - } - - function trim(string, chars, guard) { - string = toString(string); - if (string && (guard || chars === void 0)) { - return baseTrim(string); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end = charsEndIndex(strSymbols, chrSymbols) + 1; - return castSlice(strSymbols, start, end).join(""); - } - - function trimEnd(string, chars, guard) { - string = toString(string); - if (string && (guard || chars === void 0)) { - return string.slice(0, trimmedEndIndex(string) + 1); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), end = charsEndIndex(strSymbols, stringToArray(chars)) + 1; - return castSlice(strSymbols, 0, end).join(""); - } - - var reTrimStart = /^\s+/; - function trimStart(string, chars, guard) { - string = toString(string); - if (string && (guard || chars === void 0)) { - return string.replace(reTrimStart, ""); - } - if (!string || !(chars = baseToString(chars))) { - return string; - } - var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars)); - return castSlice(strSymbols, start).join(""); - } - - var DEFAULT_TRUNC_LENGTH = 30; - var DEFAULT_TRUNC_OMISSION = "..."; - var reFlags = /\w*$/; - function truncate(string, options) { - var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION; - if (isObject(options)) { - var separator = "separator" in options ? options.separator : separator; - length = "length" in options ? toInteger(options.length) : length; - omission = "omission" in options ? baseToString(options.omission) : omission; - } - string = toString(string); - var strLength = string.length; - if (hasUnicode(string)) { - var strSymbols = stringToArray(string); - strLength = strSymbols.length; - } - if (length >= strLength) { - return string; - } - var end = length - stringSize(omission); - if (end < 1) { - return omission; - } - var result = strSymbols ? castSlice(strSymbols, 0, end).join("") : string.slice(0, end); - if (separator === void 0) { - return result + omission; - } - if (strSymbols) { - end += result.length - end; - } - if (isRegExp(separator)) { - if (string.slice(end).search(separator)) { - var match, substring = result; - if (!separator.global) { - separator = RegExp(separator.source, toString(reFlags.exec(separator)) + "g"); - } - separator.lastIndex = 0; - while (match = separator.exec(substring)) { - var newEnd = match.index; - } - result = result.slice(0, newEnd === void 0 ? end : newEnd); - } - } else if (string.indexOf(baseToString(separator), end) != end) { - var index = result.lastIndexOf(separator); - if (index > -1) { - result = result.slice(0, index); - } - } - return result + omission; - } - - function unary(func) { - return ary(func, 1); - } - - var htmlUnescapes = { - "&": "&", - "<": "<", - ">": ">", - """: '"', - "'": "'" - }; - var unescapeHtmlChar = basePropertyOf(htmlUnescapes); - - var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g; - var reHasEscapedHtml = RegExp(reEscapedHtml.source); - function unescape(string) { - string = toString(string); - return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar) : string; - } - - var INFINITY = 1 / 0; - var createSet = !(Set$1 && 1 / setToArray(new Set$1([, -0]))[1] == INFINITY) ? noop : function(values) { - return new Set$1(values); - }; - - var LARGE_ARRAY_SIZE = 200; - function baseUniq(array, iteratee, comparator) { - var index = -1, includes = arrayIncludes, length = array.length, isCommon = true, result = [], seen = result; - if (comparator) { - isCommon = false; - includes = arrayIncludesWith; - } else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet(array); - if (set) { - return setToArray(set); - } - isCommon = false; - includes = cacheHas; - seen = new SetCache(); - } else { - seen = iteratee ? [] : result; - } - outer: - while (++index < length) { - var value = array[index], computed = iteratee ? iteratee(value) : value; - value = comparator || value !== 0 ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) { - if (seen[seenIndex] === computed) { - continue outer; - } - } - if (iteratee) { - seen.push(computed); - } - result.push(value); - } else if (!includes(seen, computed, comparator)) { - if (seen !== result) { - seen.push(computed); - } - result.push(value); - } - } - return result; - } - - var union = baseRest(function(arrays) { - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true)); - }); - - var unionBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = void 0; - } - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), baseIteratee(iteratee)); - }); - - var unionWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == "function" ? comparator : void 0; - return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), void 0, comparator); - }); - - function uniq(array) { - return array && array.length ? baseUniq(array) : []; - } - - function uniqBy(array, iteratee) { - return array && array.length ? baseUniq(array, baseIteratee(iteratee)) : []; - } - - function uniqWith(array, comparator) { - comparator = typeof comparator == "function" ? comparator : void 0; - return array && array.length ? baseUniq(array, void 0, comparator) : []; - } - - var idCounter = 0; - function uniqueId(prefix) { - var id = ++idCounter; - return toString(prefix) + id; - } - - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - - var nativeMax$2 = Math.max; - function unzip(array) { - if (!(array && array.length)) { - return []; - } - var length = 0; - array = arrayFilter(array, function(group) { - if (isArrayLikeObject(group)) { - length = nativeMax$2(group.length, length); - return true; - } - }); - return baseTimes(length, function(index) { - return arrayMap(array, baseProperty(index)); - }); - } - - function unzipWith(array, iteratee) { - if (!(array && array.length)) { - return []; - } - var result = unzip(array); - if (iteratee == null) { - return result; - } - return arrayMap(result, function(group) { - return apply(iteratee, void 0, group); - }); - } - - function baseUpdate(object, path, updater, customizer) { - return baseSet(object, path, updater(baseGet(object, path)), customizer); - } - - function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, castFunction(updater)); - } - - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == "function" ? customizer : void 0; - return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); - } - - var upperCase = createCompounder(function(result, word, index) { - return result + (index ? " " : "") + word.toUpperCase(); - }); - - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - - var without = baseRest(function(array, values) { - return isArrayLikeObject(array) ? baseDifference(array, values) : []; - }); - - function wrap(value, wrapper) { - return partial(castFunction(wrapper), value); - } - - var wrapperAt = flatRest(function(paths) { - var length = paths.length, start = length ? paths[0] : 0, value = this.__wrapped__, interceptor = function(object) { - return baseAt(object, paths); - }; - if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) { - return this.thru(interceptor); - } - value = value.slice(start, +start + (length ? 1 : 0)); - value.__actions__.push({ - "func": thru, - "args": [interceptor], - "thisArg": void 0 - }); - return new LodashWrapper(value, this.__chain__).thru(function(array) { - if (length && !array.length) { - array.push(void 0); - } - return array; - }); - }); - - function wrapperChain() { - return chain(this); - } - - function wrapperReverse() { - var value = this.__wrapped__; - if (value instanceof LazyWrapper) { - var wrapped = value; - if (this.__actions__.length) { - wrapped = new LazyWrapper(this); - } - wrapped = wrapped.reverse(); - wrapped.__actions__.push({ - "func": thru, - "args": [reverse], - "thisArg": void 0 - }); - return new LodashWrapper(wrapped, this.__chain__); - } - return this.thru(reverse); - } - - function baseXor(arrays, iteratee, comparator) { - var length = arrays.length; - if (length < 2) { - return length ? baseUniq(arrays[0]) : []; - } - var index = -1, result = Array(length); - while (++index < length) { - var array = arrays[index], othIndex = -1; - while (++othIndex < length) { - if (othIndex != index) { - result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator); - } - } - } - return baseUniq(baseFlatten(result, 1), iteratee, comparator); - } - - var xor = baseRest(function(arrays) { - return baseXor(arrayFilter(arrays, isArrayLikeObject)); - }); - - var xorBy = baseRest(function(arrays) { - var iteratee = last(arrays); - if (isArrayLikeObject(iteratee)) { - iteratee = void 0; - } - return baseXor(arrayFilter(arrays, isArrayLikeObject), baseIteratee(iteratee)); - }); - - var xorWith = baseRest(function(arrays) { - var comparator = last(arrays); - comparator = typeof comparator == "function" ? comparator : void 0; - return baseXor(arrayFilter(arrays, isArrayLikeObject), void 0, comparator); - }); - - var zip = baseRest(unzip); - - function baseZipObject(props, values, assignFunc) { - var index = -1, length = props.length, valsLength = values.length, result = {}; - while (++index < length) { - var value = index < valsLength ? values[index] : void 0; - assignFunc(result, props[index], value); - } - return result; - } - - function zipObject(props, values) { - return baseZipObject(props || [], values || [], assignValue); - } - - function zipObjectDeep(props, values) { - return baseZipObject(props || [], values || [], baseSet); - } - - var zipWith = baseRest(function(arrays) { - var length = arrays.length, iteratee = length > 1 ? arrays[length - 1] : void 0; - iteratee = typeof iteratee == "function" ? (arrays.pop(), iteratee) : void 0; - return unzipWith(arrays, iteratee); - }); - - var array = { - chunk, - compact, - concat, - difference, - differenceBy, - differenceWith, - drop, - dropRight, - dropRightWhile, - dropWhile, - fill, - findIndex, - findLastIndex, - first: head, - flatten, - flattenDeep, - flattenDepth, - fromPairs, - head, - indexOf, - initial: initial$1, - intersection, - intersectionBy, - intersectionWith, - join, - last, - lastIndexOf, - nth, - pull, - pullAll, - pullAllBy, - pullAllWith, - pullAt, - remove, - reverse, - slice, - sortedIndex, - sortedIndexBy, - sortedIndexOf, - sortedLastIndex, - sortedLastIndexBy, - sortedLastIndexOf, - sortedUniq, - sortedUniqBy, - tail, - take, - takeRight, - takeRightWhile, - takeWhile, - union, - unionBy, - unionWith, - uniq, - uniqBy, - uniqWith, - unzip, - unzipWith, - without, - xor, - xorBy, - xorWith, - zip, - zipObject, - zipObjectDeep, - zipWith - }; - - var collection = { - countBy, - each: forEach, - eachRight: forEachRight, - every, - filter, - find, - findLast, - flatMap, - flatMapDeep, - flatMapDepth, - forEach, - forEachRight, - groupBy, - includes, - invokeMap, - keyBy, - map, - orderBy: orderBy$1, - partition, - reduce, - reduceRight, - reject, - sample, - sampleSize, - shuffle, - size, - some, - sortBy - }; - - var date = { - now - }; - - var func = { - after, - ary, - before, - bind, - bindKey, - curry, - curryRight, - debounce, - defer, - delay, - flip: flip$1, - memoize, - negate, - once, - overArgs, - partial, - partialRight, - rearg, - rest, - spread, - throttle, - unary, - wrap - }; - - var lang = { - castArray: castArray$1, - clone, - cloneDeep, - cloneDeepWith, - cloneWith, - conformsTo, - eq, - gt: gt$1, - gte, - isArguments, - isArray, - isArrayBuffer, - isArrayLike, - isArrayLikeObject, - isBoolean: isBoolean$1, - isBuffer, - isDate, - isElement: isElement$2, - isEmpty: isEmpty$1, - isEqual: isEqual$1, - isEqualWith, - isError, - isFinite, - isFunction, - isInteger, - isLength, - isMap, - isMatch, - isMatchWith, - isNaN: isNaN$1, - isNative, - isNil, - isNull, - isNumber: isNumber$1, - isObject, - isObjectLike, - isPlainObject, - isRegExp, - isSafeInteger, - isSet, - isString, - isSymbol, - isTypedArray, - isUndefined: isUndefined$1, - isWeakMap, - isWeakSet, - lt: lt$1, - lte, - toArray, - toFinite, - toInteger, - toLength, - toNumber, - toPlainObject, - toSafeInteger, - toString - }; - - var math = { - add, - ceil, - divide, - floor: floor$1, - max: max$3, - maxBy, - mean, - meanBy, - min: min$3, - minBy, - multiply, - round: round$1, - subtract, - sum: sum$1, - sumBy - }; - - var number = { - clamp, - inRange, - random - }; - - var object = { - assign, - assignIn, - assignInWith, - assignWith, - at: at$1, - create, - defaults, - defaultsDeep, - entries: toPairs, - entriesIn: toPairsIn, - extend: assignIn, - extendWith: assignInWith, - findKey, - findLastKey, - forIn, - forInRight, - forOwn, - forOwnRight, - functions, - functionsIn, - get, - has, - hasIn, - invert, - invertBy, - invoke, - keys, - keysIn, - mapKeys, - mapValues, - merge, - mergeWith, - omit, - omitBy, - pick, - pickBy, - result, - set, - setWith, - toPairs, - toPairsIn, - transform, - unset, - update, - updateWith, - values, - valuesIn - }; - - var seq = { - at: wrapperAt, - chain, - commit: wrapperCommit, - lodash, - next: wrapperNext, - plant: wrapperPlant, - reverse: wrapperReverse, - tap, - thru, - toIterator: wrapperToIterator, - toJSON: wrapperValue, - value: wrapperValue, - valueOf: wrapperValue, - wrapperChain - }; - - var string$1 = { - camelCase, - capitalize: capitalize$1, - deburr, - endsWith, - escape, - escapeRegExp, - kebabCase, - lowerCase, - lowerFirst, - pad, - padEnd, - padStart, - parseInt: parseInt$1, - repeat, - replace, - snakeCase, - split, - startCase, - startsWith, - template, - templateSettings, - toLower, - toUpper, - trim, - trimEnd, - trimStart, - truncate, - unescape, - upperCase, - upperFirst, - words - }; - - var util = { - attempt, - bindAll, - cond, - conforms, - constant, - defaultTo, - flow, - flowRight, - identity, - iteratee, - matches, - matchesProperty, - method, - methodOf, - mixin: mixin$1, - noop, - nthArg, - over, - overEvery, - overSome, - property, - propertyOf, - range: range$1, - rangeRight, - stubArray, - stubFalse, - stubObject, - stubString, - stubTrue, - times, - toPath, - uniqueId - }; - - function lazyClone() { - var result = new LazyWrapper(this.__wrapped__); - result.__actions__ = copyArray(this.__actions__); - result.__dir__ = this.__dir__; - result.__filtered__ = this.__filtered__; - result.__iteratees__ = copyArray(this.__iteratees__); - result.__takeCount__ = this.__takeCount__; - result.__views__ = copyArray(this.__views__); - return result; - } - - function lazyReverse() { - if (this.__filtered__) { - var result = new LazyWrapper(this); - result.__dir__ = -1; - result.__filtered__ = true; - } else { - result = this.clone(); - result.__dir__ *= -1; - } - return result; - } - - var nativeMax$1 = Math.max; - var nativeMin$2 = Math.min; - function getView(start, end, transforms) { - var index = -1, length = transforms.length; - while (++index < length) { - var data = transforms[index], size = data.size; - switch (data.type) { - case "drop": - start += size; - break; - case "dropRight": - end -= size; - break; - case "take": - end = nativeMin$2(end, start + size); - break; - case "takeRight": - start = nativeMax$1(start, end - size); - break; - } - } - return { "start": start, "end": end }; - } - - var LAZY_FILTER_FLAG$1 = 1; - var LAZY_MAP_FLAG = 2; - var nativeMin$1 = Math.min; - function lazyValue() { - var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = getView(0, arrLength, this.__views__), start = view.start, end = view.end, length = end - start, index = isRight ? end : start - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin$1(length, this.__takeCount__); - if (!isArr || !isRight && arrLength == length && takeCount == length) { - return baseWrapperValue(array, this.__actions__); - } - var result = []; - outer: - while (length-- && resIndex < takeCount) { - index += dir; - var iterIndex = -1, value = array[index]; - while (++iterIndex < iterLength) { - var data = iteratees[iterIndex], iteratee = data.iteratee, type = data.type, computed = iteratee(value); - if (type == LAZY_MAP_FLAG) { - value = computed; - } else if (!computed) { - if (type == LAZY_FILTER_FLAG$1) { - continue outer; - } else { - break outer; - } - } - } - result[resIndex++] = value; - } - return result; - } - - var VERSION = "4.17.21"; - var WRAP_BIND_KEY_FLAG = 2; - var LAZY_FILTER_FLAG = 1; - var LAZY_WHILE_FLAG = 3; - var MAX_ARRAY_LENGTH = 4294967295; - var arrayProto = Array.prototype; - var objectProto = Object.prototype; - var hasOwnProperty = objectProto.hasOwnProperty; - var symIterator = Symbol$1 ? Symbol$1.iterator : void 0; - var nativeMax = Math.max; - var nativeMin = Math.min; - var mixin = function(func2) { - return function(object2, source, options) { - if (options == null) { - var isObj = isObject(source), props = isObj && keys(source), methodNames = props && props.length && baseFunctions(source, props); - if (!(methodNames ? methodNames.length : isObj)) { - options = source; - source = object2; - object2 = this; - } - } - return func2(object2, source, options); - }; - }(mixin$1); - lodash.after = func.after; - lodash.ary = func.ary; - lodash.assign = object.assign; - lodash.assignIn = object.assignIn; - lodash.assignInWith = object.assignInWith; - lodash.assignWith = object.assignWith; - lodash.at = object.at; - lodash.before = func.before; - lodash.bind = func.bind; - lodash.bindAll = util.bindAll; - lodash.bindKey = func.bindKey; - lodash.castArray = lang.castArray; - lodash.chain = seq.chain; - lodash.chunk = array.chunk; - lodash.compact = array.compact; - lodash.concat = array.concat; - lodash.cond = util.cond; - lodash.conforms = util.conforms; - lodash.constant = util.constant; - lodash.countBy = collection.countBy; - lodash.create = object.create; - lodash.curry = func.curry; - lodash.curryRight = func.curryRight; - lodash.debounce = func.debounce; - lodash.defaults = object.defaults; - lodash.defaultsDeep = object.defaultsDeep; - lodash.defer = func.defer; - lodash.delay = func.delay; - lodash.difference = array.difference; - lodash.differenceBy = array.differenceBy; - lodash.differenceWith = array.differenceWith; - lodash.drop = array.drop; - lodash.dropRight = array.dropRight; - lodash.dropRightWhile = array.dropRightWhile; - lodash.dropWhile = array.dropWhile; - lodash.fill = array.fill; - lodash.filter = collection.filter; - lodash.flatMap = collection.flatMap; - lodash.flatMapDeep = collection.flatMapDeep; - lodash.flatMapDepth = collection.flatMapDepth; - lodash.flatten = array.flatten; - lodash.flattenDeep = array.flattenDeep; - lodash.flattenDepth = array.flattenDepth; - lodash.flip = func.flip; - lodash.flow = util.flow; - lodash.flowRight = util.flowRight; - lodash.fromPairs = array.fromPairs; - lodash.functions = object.functions; - lodash.functionsIn = object.functionsIn; - lodash.groupBy = collection.groupBy; - lodash.initial = array.initial; - lodash.intersection = array.intersection; - lodash.intersectionBy = array.intersectionBy; - lodash.intersectionWith = array.intersectionWith; - lodash.invert = object.invert; - lodash.invertBy = object.invertBy; - lodash.invokeMap = collection.invokeMap; - lodash.iteratee = util.iteratee; - lodash.keyBy = collection.keyBy; - lodash.keys = keys; - lodash.keysIn = object.keysIn; - lodash.map = collection.map; - lodash.mapKeys = object.mapKeys; - lodash.mapValues = object.mapValues; - lodash.matches = util.matches; - lodash.matchesProperty = util.matchesProperty; - lodash.memoize = func.memoize; - lodash.merge = object.merge; - lodash.mergeWith = object.mergeWith; - lodash.method = util.method; - lodash.methodOf = util.methodOf; - lodash.mixin = mixin; - lodash.negate = negate; - lodash.nthArg = util.nthArg; - lodash.omit = object.omit; - lodash.omitBy = object.omitBy; - lodash.once = func.once; - lodash.orderBy = collection.orderBy; - lodash.over = util.over; - lodash.overArgs = func.overArgs; - lodash.overEvery = util.overEvery; - lodash.overSome = util.overSome; - lodash.partial = func.partial; - lodash.partialRight = func.partialRight; - lodash.partition = collection.partition; - lodash.pick = object.pick; - lodash.pickBy = object.pickBy; - lodash.property = util.property; - lodash.propertyOf = util.propertyOf; - lodash.pull = array.pull; - lodash.pullAll = array.pullAll; - lodash.pullAllBy = array.pullAllBy; - lodash.pullAllWith = array.pullAllWith; - lodash.pullAt = array.pullAt; - lodash.range = util.range; - lodash.rangeRight = util.rangeRight; - lodash.rearg = func.rearg; - lodash.reject = collection.reject; - lodash.remove = array.remove; - lodash.rest = func.rest; - lodash.reverse = array.reverse; - lodash.sampleSize = collection.sampleSize; - lodash.set = object.set; - lodash.setWith = object.setWith; - lodash.shuffle = collection.shuffle; - lodash.slice = array.slice; - lodash.sortBy = collection.sortBy; - lodash.sortedUniq = array.sortedUniq; - lodash.sortedUniqBy = array.sortedUniqBy; - lodash.split = string$1.split; - lodash.spread = func.spread; - lodash.tail = array.tail; - lodash.take = array.take; - lodash.takeRight = array.takeRight; - lodash.takeRightWhile = array.takeRightWhile; - lodash.takeWhile = array.takeWhile; - lodash.tap = seq.tap; - lodash.throttle = func.throttle; - lodash.thru = thru; - lodash.toArray = lang.toArray; - lodash.toPairs = object.toPairs; - lodash.toPairsIn = object.toPairsIn; - lodash.toPath = util.toPath; - lodash.toPlainObject = lang.toPlainObject; - lodash.transform = object.transform; - lodash.unary = func.unary; - lodash.union = array.union; - lodash.unionBy = array.unionBy; - lodash.unionWith = array.unionWith; - lodash.uniq = array.uniq; - lodash.uniqBy = array.uniqBy; - lodash.uniqWith = array.uniqWith; - lodash.unset = object.unset; - lodash.unzip = array.unzip; - lodash.unzipWith = array.unzipWith; - lodash.update = object.update; - lodash.updateWith = object.updateWith; - lodash.values = object.values; - lodash.valuesIn = object.valuesIn; - lodash.without = array.without; - lodash.words = string$1.words; - lodash.wrap = func.wrap; - lodash.xor = array.xor; - lodash.xorBy = array.xorBy; - lodash.xorWith = array.xorWith; - lodash.zip = array.zip; - lodash.zipObject = array.zipObject; - lodash.zipObjectDeep = array.zipObjectDeep; - lodash.zipWith = array.zipWith; - lodash.entries = object.toPairs; - lodash.entriesIn = object.toPairsIn; - lodash.extend = object.assignIn; - lodash.extendWith = object.assignInWith; - mixin(lodash, lodash); - lodash.add = math.add; - lodash.attempt = util.attempt; - lodash.camelCase = string$1.camelCase; - lodash.capitalize = string$1.capitalize; - lodash.ceil = math.ceil; - lodash.clamp = number.clamp; - lodash.clone = lang.clone; - lodash.cloneDeep = lang.cloneDeep; - lodash.cloneDeepWith = lang.cloneDeepWith; - lodash.cloneWith = lang.cloneWith; - lodash.conformsTo = lang.conformsTo; - lodash.deburr = string$1.deburr; - lodash.defaultTo = util.defaultTo; - lodash.divide = math.divide; - lodash.endsWith = string$1.endsWith; - lodash.eq = lang.eq; - lodash.escape = string$1.escape; - lodash.escapeRegExp = string$1.escapeRegExp; - lodash.every = collection.every; - lodash.find = collection.find; - lodash.findIndex = array.findIndex; - lodash.findKey = object.findKey; - lodash.findLast = collection.findLast; - lodash.findLastIndex = array.findLastIndex; - lodash.findLastKey = object.findLastKey; - lodash.floor = math.floor; - lodash.forEach = collection.forEach; - lodash.forEachRight = collection.forEachRight; - lodash.forIn = object.forIn; - lodash.forInRight = object.forInRight; - lodash.forOwn = object.forOwn; - lodash.forOwnRight = object.forOwnRight; - lodash.get = object.get; - lodash.gt = lang.gt; - lodash.gte = lang.gte; - lodash.has = object.has; - lodash.hasIn = object.hasIn; - lodash.head = array.head; - lodash.identity = identity; - lodash.includes = collection.includes; - lodash.indexOf = array.indexOf; - lodash.inRange = number.inRange; - lodash.invoke = object.invoke; - lodash.isArguments = lang.isArguments; - lodash.isArray = isArray; - lodash.isArrayBuffer = lang.isArrayBuffer; - lodash.isArrayLike = lang.isArrayLike; - lodash.isArrayLikeObject = lang.isArrayLikeObject; - lodash.isBoolean = lang.isBoolean; - lodash.isBuffer = lang.isBuffer; - lodash.isDate = lang.isDate; - lodash.isElement = lang.isElement; - lodash.isEmpty = lang.isEmpty; - lodash.isEqual = lang.isEqual; - lodash.isEqualWith = lang.isEqualWith; - lodash.isError = lang.isError; - lodash.isFinite = lang.isFinite; - lodash.isFunction = lang.isFunction; - lodash.isInteger = lang.isInteger; - lodash.isLength = lang.isLength; - lodash.isMap = lang.isMap; - lodash.isMatch = lang.isMatch; - lodash.isMatchWith = lang.isMatchWith; - lodash.isNaN = lang.isNaN; - lodash.isNative = lang.isNative; - lodash.isNil = lang.isNil; - lodash.isNull = lang.isNull; - lodash.isNumber = lang.isNumber; - lodash.isObject = isObject; - lodash.isObjectLike = lang.isObjectLike; - lodash.isPlainObject = lang.isPlainObject; - lodash.isRegExp = lang.isRegExp; - lodash.isSafeInteger = lang.isSafeInteger; - lodash.isSet = lang.isSet; - lodash.isString = lang.isString; - lodash.isSymbol = lang.isSymbol; - lodash.isTypedArray = lang.isTypedArray; - lodash.isUndefined = lang.isUndefined; - lodash.isWeakMap = lang.isWeakMap; - lodash.isWeakSet = lang.isWeakSet; - lodash.join = array.join; - lodash.kebabCase = string$1.kebabCase; - lodash.last = last; - lodash.lastIndexOf = array.lastIndexOf; - lodash.lowerCase = string$1.lowerCase; - lodash.lowerFirst = string$1.lowerFirst; - lodash.lt = lang.lt; - lodash.lte = lang.lte; - lodash.max = math.max; - lodash.maxBy = math.maxBy; - lodash.mean = math.mean; - lodash.meanBy = math.meanBy; - lodash.min = math.min; - lodash.minBy = math.minBy; - lodash.stubArray = util.stubArray; - lodash.stubFalse = util.stubFalse; - lodash.stubObject = util.stubObject; - lodash.stubString = util.stubString; - lodash.stubTrue = util.stubTrue; - lodash.multiply = math.multiply; - lodash.nth = array.nth; - lodash.noop = util.noop; - lodash.now = date.now; - lodash.pad = string$1.pad; - lodash.padEnd = string$1.padEnd; - lodash.padStart = string$1.padStart; - lodash.parseInt = string$1.parseInt; - lodash.random = number.random; - lodash.reduce = collection.reduce; - lodash.reduceRight = collection.reduceRight; - lodash.repeat = string$1.repeat; - lodash.replace = string$1.replace; - lodash.result = object.result; - lodash.round = math.round; - lodash.sample = collection.sample; - lodash.size = collection.size; - lodash.snakeCase = string$1.snakeCase; - lodash.some = collection.some; - lodash.sortedIndex = array.sortedIndex; - lodash.sortedIndexBy = array.sortedIndexBy; - lodash.sortedIndexOf = array.sortedIndexOf; - lodash.sortedLastIndex = array.sortedLastIndex; - lodash.sortedLastIndexBy = array.sortedLastIndexBy; - lodash.sortedLastIndexOf = array.sortedLastIndexOf; - lodash.startCase = string$1.startCase; - lodash.startsWith = string$1.startsWith; - lodash.subtract = math.subtract; - lodash.sum = math.sum; - lodash.sumBy = math.sumBy; - lodash.template = string$1.template; - lodash.times = util.times; - lodash.toFinite = lang.toFinite; - lodash.toInteger = toInteger; - lodash.toLength = lang.toLength; - lodash.toLower = string$1.toLower; - lodash.toNumber = lang.toNumber; - lodash.toSafeInteger = lang.toSafeInteger; - lodash.toString = lang.toString; - lodash.toUpper = string$1.toUpper; - lodash.trim = string$1.trim; - lodash.trimEnd = string$1.trimEnd; - lodash.trimStart = string$1.trimStart; - lodash.truncate = string$1.truncate; - lodash.unescape = string$1.unescape; - lodash.uniqueId = util.uniqueId; - lodash.upperCase = string$1.upperCase; - lodash.upperFirst = string$1.upperFirst; - lodash.each = collection.forEach; - lodash.eachRight = collection.forEachRight; - lodash.first = array.head; - mixin(lodash, function() { - var source = {}; - baseForOwn(lodash, function(func2, methodName) { - if (!hasOwnProperty.call(lodash.prototype, methodName)) { - source[methodName] = func2; - } - }); - return source; - }(), { "chain": false }); - lodash.VERSION = VERSION; - (lodash.templateSettings = string$1.templateSettings).imports._ = lodash; - arrayEach(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function(methodName) { - lodash[methodName].placeholder = lodash; - }); - arrayEach(["drop", "take"], function(methodName, index) { - LazyWrapper.prototype[methodName] = function(n) { - n = n === void 0 ? 1 : nativeMax(toInteger(n), 0); - var result = this.__filtered__ && !index ? new LazyWrapper(this) : this.clone(); - if (result.__filtered__) { - result.__takeCount__ = nativeMin(n, result.__takeCount__); - } else { - result.__views__.push({ - "size": nativeMin(n, MAX_ARRAY_LENGTH), - "type": methodName + (result.__dir__ < 0 ? "Right" : "") - }); - } - return result; - }; - LazyWrapper.prototype[methodName + "Right"] = function(n) { - return this.reverse()[methodName](n).reverse(); - }; - }); - arrayEach(["filter", "map", "takeWhile"], function(methodName, index) { - var type = index + 1, isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG; - LazyWrapper.prototype[methodName] = function(iteratee) { - var result = this.clone(); - result.__iteratees__.push({ - "iteratee": baseIteratee(iteratee), - "type": type - }); - result.__filtered__ = result.__filtered__ || isFilter; - return result; - }; - }); - arrayEach(["head", "last"], function(methodName, index) { - var takeName = "take" + (index ? "Right" : ""); - LazyWrapper.prototype[methodName] = function() { - return this[takeName](1).value()[0]; - }; - }); - arrayEach(["initial", "tail"], function(methodName, index) { - var dropName = "drop" + (index ? "" : "Right"); - LazyWrapper.prototype[methodName] = function() { - return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1); - }; - }); - LazyWrapper.prototype.compact = function() { - return this.filter(identity); - }; - LazyWrapper.prototype.find = function(predicate) { - return this.filter(predicate).head(); - }; - LazyWrapper.prototype.findLast = function(predicate) { - return this.reverse().find(predicate); - }; - LazyWrapper.prototype.invokeMap = baseRest(function(path, args) { - if (typeof path == "function") { - return new LazyWrapper(this); - } - return this.map(function(value) { - return baseInvoke(value, path, args); - }); - }); - LazyWrapper.prototype.reject = function(predicate) { - return this.filter(negate(baseIteratee(predicate))); - }; - LazyWrapper.prototype.slice = function(start, end) { - start = toInteger(start); - var result = this; - if (result.__filtered__ && (start > 0 || end < 0)) { - return new LazyWrapper(result); - } - if (start < 0) { - result = result.takeRight(-start); - } else if (start) { - result = result.drop(start); - } - if (end !== void 0) { - end = toInteger(end); - result = end < 0 ? result.dropRight(-end) : result.take(end - start); - } - return result; - }; - LazyWrapper.prototype.takeRightWhile = function(predicate) { - return this.reverse().takeWhile(predicate).reverse(); - }; - LazyWrapper.prototype.toArray = function() { - return this.take(MAX_ARRAY_LENGTH); - }; - baseForOwn(LazyWrapper.prototype, function(func2, methodName) { - var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), isTaker = /^(?:head|last)$/.test(methodName), lodashFunc = lodash[isTaker ? "take" + (methodName == "last" ? "Right" : "") : methodName], retUnwrapped = isTaker || /^find/.test(methodName); - if (!lodashFunc) { - return; - } - lodash.prototype[methodName] = function() { - var value = this.__wrapped__, args = isTaker ? [1] : arguments, isLazy = value instanceof LazyWrapper, iteratee = args[0], useLazy = isLazy || isArray(value); - var interceptor = function(value2) { - var result2 = lodashFunc.apply(lodash, arrayPush([value2], args)); - return isTaker && chainAll ? result2[0] : result2; - }; - if (useLazy && checkIteratee && typeof iteratee == "function" && iteratee.length != 1) { - isLazy = useLazy = false; - } - var chainAll = this.__chain__, isHybrid = !!this.__actions__.length, isUnwrapped = retUnwrapped && !chainAll, onlyLazy = isLazy && !isHybrid; - if (!retUnwrapped && useLazy) { - value = onlyLazy ? value : new LazyWrapper(this); - var result = func2.apply(value, args); - result.__actions__.push({ "func": thru, "args": [interceptor], "thisArg": void 0 }); - return new LodashWrapper(result, chainAll); - } - if (isUnwrapped && onlyLazy) { - return func2.apply(this, args); - } - result = this.thru(interceptor); - return isUnwrapped ? isTaker ? result.value()[0] : result.value() : result; - }; - }); - arrayEach(["pop", "push", "shift", "sort", "splice", "unshift"], function(methodName) { - var func2 = arrayProto[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? "tap" : "thru", retUnwrapped = /^(?:pop|shift)$/.test(methodName); - lodash.prototype[methodName] = function() { - var args = arguments; - if (retUnwrapped && !this.__chain__) { - var value = this.value(); - return func2.apply(isArray(value) ? value : [], args); - } - return this[chainName](function(value2) { - return func2.apply(isArray(value2) ? value2 : [], args); - }); - }; - }); - baseForOwn(LazyWrapper.prototype, function(func2, methodName) { - var lodashFunc = lodash[methodName]; - if (lodashFunc) { - var key = lodashFunc.name + ""; - if (!hasOwnProperty.call(realNames, key)) { - realNames[key] = []; - } - realNames[key].push({ "name": methodName, "func": lodashFunc }); - } - }); - realNames[createHybrid(void 0, WRAP_BIND_KEY_FLAG).name] = [{ - "name": "wrapper", - "func": void 0 - }]; - LazyWrapper.prototype.clone = lazyClone; - LazyWrapper.prototype.reverse = lazyReverse; - LazyWrapper.prototype.value = lazyValue; - lodash.prototype.at = seq.at; - lodash.prototype.chain = seq.wrapperChain; - lodash.prototype.commit = seq.commit; - lodash.prototype.next = seq.next; - lodash.prototype.plant = seq.plant; - lodash.prototype.reverse = seq.reverse; - lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = seq.value; - lodash.prototype.first = lodash.prototype.head; - if (symIterator) { - lodash.prototype[symIterator] = seq.toIterator; - } - /** - * @license - * Lodash (Custom Build) - * Build: `lodash modularize exports="es" -o ./` - * Copyright OpenJS Foundation and other contributors - * Released under MIT license - * Based on Underscore.js 1.8.3 - * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors - */ - - const isUndefined = (val) => val === void 0; - const isBoolean = (val) => typeof val === "boolean"; - const isNumber = (val) => typeof val === "number"; - const isEmpty = (val) => !val && val !== 0 || isArray$1(val) && val.length === 0 || isObject$1(val) && !Object.keys(val).length; - const isElement$1 = (e) => { - if (typeof Element === "undefined") - return false; - return e instanceof Element; - }; - const isPropAbsent = (prop) => isNil(prop); - const isStringNumber = (val) => { - if (!isString$1(val)) { - return false; - } - return !Number.isNaN(Number(val)); - }; - const isWindow$1 = (val) => val === window; - - const rAF = (fn) => isClient ? window.requestAnimationFrame(fn) : setTimeout(fn, 16); - const cAF = (handle) => isClient ? window.cancelAnimationFrame(handle) : clearTimeout(handle); - - const escapeStringRegexp = (string = "") => string.replace(/[|\\{}()[\]^$+*?.]/g, "\\$&").replace(/-/g, "\\x2d"); - const capitalize = (str) => capitalize$2(str); - - const keysOf = (arr) => Object.keys(arr); - const entriesOf = (arr) => Object.entries(arr); - const getProp = (obj, path, defaultValue) => { - return { - get value() { - return get(obj, path, defaultValue); - }, - set value(val) { - set(obj, path, val); - } - }; - }; - - class ElementPlusError extends Error { - constructor(m) { - super(m); - this.name = "ElementPlusError"; - } - } - function throwError(scope, m) { - throw new ElementPlusError(`[${scope}] ${m}`); - } - function debugWarn(scope, message) { - } - - const classNameToArray = (cls = "") => cls.split(" ").filter((item) => !!item.trim()); - const hasClass = (el, cls) => { - if (!el || !cls) - return false; - if (cls.includes(" ")) - throw new Error("className should not contain space."); - return el.classList.contains(cls); - }; - const addClass = (el, cls) => { - if (!el || !cls.trim()) - return; - el.classList.add(...classNameToArray(cls)); - }; - const removeClass = (el, cls) => { - if (!el || !cls.trim()) - return; - el.classList.remove(...classNameToArray(cls)); - }; - const getStyle = (element, styleName) => { - var _a; - if (!isClient || !element || !styleName) - return ""; - let key = camelize(styleName); - if (key === "float") - key = "cssFloat"; - try { - const style = element.style[key]; - if (style) - return style; - const computed = (_a = document.defaultView) == null ? void 0 : _a.getComputedStyle(element, ""); - return computed ? computed[key] : ""; - } catch (e) { - return element.style[key]; - } - }; - const setStyle = (element, styleName, value) => { - if (!element || !styleName) - return; - if (isObject$1(styleName)) { - entriesOf(styleName).forEach(([prop, value2]) => setStyle(element, prop, value2)); - } else { - const key = camelize(styleName); - element.style[key] = value; - } - }; - function addUnit(value, defaultUnit = "px") { - if (!value) - return ""; - if (isNumber(value) || isStringNumber(value)) { - return `${value}${defaultUnit}`; - } else if (isString$1(value)) { - return value; - } - } - - const isScroll = (el, isVertical) => { - if (!isClient) - return false; - const key = { - undefined: "overflow", - true: "overflow-y", - false: "overflow-x" - }[String(isVertical)]; - const overflow = getStyle(el, key); - return ["scroll", "auto", "overlay"].some((s) => overflow.includes(s)); - }; - const getScrollContainer = (el, isVertical) => { - if (!isClient) - return; - let parent = el; - while (parent) { - if ([window, document, document.documentElement].includes(parent)) - return window; - if (isScroll(parent, isVertical)) - return parent; - parent = parent.parentNode; - } - return parent; - }; - let scrollBarWidth; - const getScrollBarWidth = (namespace) => { - var _a; - if (!isClient) - return 0; - if (scrollBarWidth !== void 0) - return scrollBarWidth; - const outer = document.createElement("div"); - outer.className = `${namespace}-scrollbar__wrap`; - outer.style.visibility = "hidden"; - outer.style.width = "100px"; - outer.style.position = "absolute"; - outer.style.top = "-9999px"; - document.body.appendChild(outer); - const widthNoScroll = outer.offsetWidth; - outer.style.overflow = "scroll"; - const inner = document.createElement("div"); - inner.style.width = "100%"; - outer.appendChild(inner); - const widthWithScroll = inner.offsetWidth; - (_a = outer.parentNode) == null ? void 0 : _a.removeChild(outer); - scrollBarWidth = widthNoScroll - widthWithScroll; - return scrollBarWidth; - }; - function scrollIntoView(container, selected) { - if (!isClient) - return; - if (!selected) { - container.scrollTop = 0; - return; - } - const offsetParents = []; - let pointer = selected.offsetParent; - while (pointer !== null && container !== pointer && container.contains(pointer)) { - offsetParents.push(pointer); - pointer = pointer.offsetParent; - } - const top = selected.offsetTop + offsetParents.reduce((prev, curr) => prev + curr.offsetTop, 0); - const bottom = top + selected.offsetHeight; - const viewRectTop = container.scrollTop; - const viewRectBottom = viewRectTop + container.clientHeight; - if (top < viewRectTop) { - container.scrollTop = top; - } else if (bottom > viewRectBottom) { - container.scrollTop = bottom - container.clientHeight; - } - } - function animateScrollTo(container, from, to, duration, callback) { - const startTime = Date.now(); - let handle; - const scroll = () => { - const timestamp = Date.now(); - const time = timestamp - startTime; - const nextScrollTop = easeInOutCubic(time > duration ? duration : time, from, to, duration); - if (isWindow$1(container)) { - container.scrollTo(window.pageXOffset, nextScrollTop); - } else { - container.scrollTop = nextScrollTop; - } - if (time < duration) { - handle = rAF(scroll); - } else if (isFunction$1(callback)) { - callback(); - } - }; - scroll(); - return () => { - handle && cAF(handle); - }; - } - const getScrollElement = (target, container) => { - if (isWindow$1(container)) { - return target.ownerDocument.documentElement; - } - return container; - }; - const getScrollTop = (container) => { - if (isWindow$1(container)) { - return window.scrollY; - } - return container.scrollTop; - }; - - const getElement = (target) => { - if (!isClient || target === "") - return null; - if (isString$1(target)) { - try { - return document.querySelector(target); - } catch (e) { - return null; - } - } - return target; - }; - - let target = !isClient ? void 0 : document.body; - function createGlobalNode(id) { - const el = document.createElement("div"); - if (id !== void 0) { - el.setAttribute("id", id); - } - if (target) { - target.appendChild(el); - } - return el; - } - function removeGlobalNode(el) { - el.remove(); - } - - var arrow_down_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "ArrowDown", - __name: "arrow-down", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z" - }) - ])); - } - }); - var arrow_down_default = arrow_down_vue_vue_type_script_setup_true_lang_default; - var arrow_left_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "ArrowLeft", - __name: "arrow-left", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z" - }) - ])); - } - }); - var arrow_left_default = arrow_left_vue_vue_type_script_setup_true_lang_default; - var arrow_right_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "ArrowRight", - __name: "arrow-right", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z" - }) - ])); - } - }); - var arrow_right_default = arrow_right_vue_vue_type_script_setup_true_lang_default; - var arrow_up_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "ArrowUp", - __name: "arrow-up", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0" - }) - ])); - } - }); - var arrow_up_default = arrow_up_vue_vue_type_script_setup_true_lang_default; - var back_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Back", - __name: "back", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64" - }), - vue.createElementVNode("path", { - fill: "currentColor", - d: "m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z" - }) - ])); - } - }); - var back_default = back_vue_vue_type_script_setup_true_lang_default; - var calendar_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Calendar", - __name: "calendar", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64" - }) - ])); - } - }); - var calendar_default = calendar_vue_vue_type_script_setup_true_lang_default; - var caret_right_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "CaretRight", - __name: "caret-right", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M384 192v640l384-320.064z" - }) - ])); - } - }); - var caret_right_default = caret_right_vue_vue_type_script_setup_true_lang_default; - var caret_top_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "CaretTop", - __name: "caret-top", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 320 192 704h639.936z" - }) - ])); - } - }); - var caret_top_default = caret_top_vue_vue_type_script_setup_true_lang_default; - var check_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Check", - __name: "check", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z" - }) - ])); - } - }); - var check_default = check_vue_vue_type_script_setup_true_lang_default; - var circle_check_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "CircleCheckFilled", - __name: "circle-check-filled", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z" - }) - ])); - } - }); - var circle_check_filled_default = circle_check_filled_vue_vue_type_script_setup_true_lang_default; - var circle_check_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "CircleCheck", - __name: "circle-check", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896" - }), - vue.createElementVNode("path", { - fill: "currentColor", - d: "M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z" - }) - ])); - } - }); - var circle_check_default = circle_check_vue_vue_type_script_setup_true_lang_default; - var circle_close_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "CircleCloseFilled", - __name: "circle-close-filled", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z" - }) - ])); - } - }); - var circle_close_filled_default = circle_close_filled_vue_vue_type_script_setup_true_lang_default; - var circle_close_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "CircleClose", - __name: "circle-close", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z" - }), - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896" - }) - ])); - } - }); - var circle_close_default = circle_close_vue_vue_type_script_setup_true_lang_default; - var clock_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Clock", - __name: "clock", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896" - }), - vue.createElementVNode("path", { - fill: "currentColor", - d: "M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32" - }), - vue.createElementVNode("path", { - fill: "currentColor", - d: "M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32" - }) - ])); - } - }); - var clock_default = clock_vue_vue_type_script_setup_true_lang_default; - var close_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Close", - __name: "close", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z" - }) - ])); - } - }); - var close_default = close_vue_vue_type_script_setup_true_lang_default; - var d_arrow_left_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "DArrowLeft", - __name: "d-arrow-left", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z" - }) - ])); - } - }); - var d_arrow_left_default = d_arrow_left_vue_vue_type_script_setup_true_lang_default; - var d_arrow_right_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "DArrowRight", - __name: "d-arrow-right", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z" - }) - ])); - } - }); - var d_arrow_right_default = d_arrow_right_vue_vue_type_script_setup_true_lang_default; - var delete_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Delete", - __name: "delete", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32" - }) - ])); - } - }); - var delete_default = delete_vue_vue_type_script_setup_true_lang_default; - var document_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Document", - __name: "document", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z" - }) - ])); - } - }); - var document_default = document_vue_vue_type_script_setup_true_lang_default; - var full_screen_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "FullScreen", - __name: "full-screen", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z" - }) - ])); - } - }); - var full_screen_default = full_screen_vue_vue_type_script_setup_true_lang_default; - var hide_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Hide", - __name: "hide", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z" - }), - vue.createElementVNode("path", { - fill: "currentColor", - d: "M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z" - }) - ])); - } - }); - var hide_default = hide_vue_vue_type_script_setup_true_lang_default; - var info_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "InfoFilled", - __name: "info-filled", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z" - }) - ])); - } - }); - var info_filled_default = info_filled_vue_vue_type_script_setup_true_lang_default; - var loading_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Loading", - __name: "loading", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z" - }) - ])); - } - }); - var loading_default = loading_vue_vue_type_script_setup_true_lang_default; - var minus_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Minus", - __name: "minus", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64" - }) - ])); - } - }); - var minus_default = minus_vue_vue_type_script_setup_true_lang_default; - var more_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "MoreFilled", - __name: "more-filled", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224" - }) - ])); - } - }); - var more_filled_default = more_filled_vue_vue_type_script_setup_true_lang_default; - var more_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "More", - __name: "more", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96" - }) - ])); - } - }); - var more_default = more_vue_vue_type_script_setup_true_lang_default; - var picture_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "PictureFilled", - __name: "picture-filled", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384" - }) - ])); - } - }); - var picture_filled_default = picture_filled_vue_vue_type_script_setup_true_lang_default; - var plus_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Plus", - __name: "plus", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z" - }) - ])); - } - }); - var plus_default = plus_vue_vue_type_script_setup_true_lang_default; - var question_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "QuestionFilled", - __name: "question-filled", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z" - }) - ])); - } - }); - var question_filled_default = question_filled_vue_vue_type_script_setup_true_lang_default; - var refresh_left_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "RefreshLeft", - __name: "refresh-left", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z" - }) - ])); - } - }); - var refresh_left_default = refresh_left_vue_vue_type_script_setup_true_lang_default; - var refresh_right_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "RefreshRight", - __name: "refresh-right", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z" - }) - ])); - } - }); - var refresh_right_default = refresh_right_vue_vue_type_script_setup_true_lang_default; - var scale_to_original_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "ScaleToOriginal", - __name: "scale-to-original", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512" - }) - ])); - } - }); - var scale_to_original_default = scale_to_original_vue_vue_type_script_setup_true_lang_default; - var search_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Search", - __name: "search", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704" - }) - ])); - } - }); - var search_default = search_vue_vue_type_script_setup_true_lang_default; - var sort_down_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "SortDown", - __name: "sort-down", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0" - }) - ])); - } - }); - var sort_down_default = sort_down_vue_vue_type_script_setup_true_lang_default; - var sort_up_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "SortUp", - __name: "sort-up", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248" - }) - ])); - } - }); - var sort_up_default = sort_up_vue_vue_type_script_setup_true_lang_default; - var star_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "StarFilled", - __name: "star-filled", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z" - }) - ])); - } - }); - var star_filled_default = star_filled_vue_vue_type_script_setup_true_lang_default; - var star_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "Star", - __name: "star", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z" - }) - ])); - } - }); - var star_default = star_vue_vue_type_script_setup_true_lang_default; - var success_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "SuccessFilled", - __name: "success-filled", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z" - }) - ])); - } - }); - var success_filled_default = success_filled_vue_vue_type_script_setup_true_lang_default; - var view_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "View", - __name: "view", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160" - }) - ])); - } - }); - var view_default = view_vue_vue_type_script_setup_true_lang_default; - var warning_filled_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "WarningFilled", - __name: "warning-filled", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4" - }) - ])); - } - }); - var warning_filled_default = warning_filled_vue_vue_type_script_setup_true_lang_default; - var zoom_in_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "ZoomIn", - __name: "zoom-in", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z" - }) - ])); - } - }); - var zoom_in_default = zoom_in_vue_vue_type_script_setup_true_lang_default; - var zoom_out_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ vue.defineComponent({ - name: "ZoomOut", - __name: "zoom-out", - setup(__props) { - return (_ctx, _cache) => (vue.openBlock(), vue.createElementBlock("svg", { - xmlns: "http://www.w3.org/2000/svg", - viewBox: "0 0 1024 1024" - }, [ - vue.createElementVNode("path", { - fill: "currentColor", - d: "m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64" - }) - ])); - } - }); - var zoom_out_default = zoom_out_vue_vue_type_script_setup_true_lang_default; - /*! Element Plus Icons Vue v2.3.1 */ - - const epPropKey = "__epPropKey"; - const definePropType = (val) => val; - const isEpProp = (val) => isObject$1(val) && !!val[epPropKey]; - const buildProp = (prop, key) => { - if (!isObject$1(prop) || isEpProp(prop)) - return prop; - const { values, required, default: defaultValue, type, validator } = prop; - const _validator = values || validator ? (val) => { - let valid = false; - let allowedValues = []; - if (values) { - allowedValues = Array.from(values); - if (hasOwn(prop, "default")) { - allowedValues.push(defaultValue); - } - valid || (valid = allowedValues.includes(val)); - } - if (validator) - valid || (valid = validator(val)); - if (!valid && allowedValues.length > 0) { - const allowValuesText = [...new Set(allowedValues)].map((value) => JSON.stringify(value)).join(", "); - vue.warn(`Invalid prop: validation failed${key ? ` for prop "${key}"` : ""}. Expected one of [${allowValuesText}], got value ${JSON.stringify(val)}.`); - } - return valid; - } : void 0; - const epProp = { - type, - required: !!required, - validator: _validator, - [epPropKey]: true - }; - if (hasOwn(prop, "default")) - epProp.default = defaultValue; - return epProp; - }; - const buildProps = (props) => fromPairs(Object.entries(props).map(([key, option]) => [ - key, - buildProp(option, key) - ])); - - const iconPropType = definePropType([ - String, - Object, - Function - ]); - const CloseComponents = { - Close: close_default - }; - const TypeComponents = { - Close: close_default, - SuccessFilled: success_filled_default, - InfoFilled: info_filled_default, - WarningFilled: warning_filled_default, - CircleCloseFilled: circle_close_filled_default - }; - const TypeComponentsMap = { - success: success_filled_default, - warning: warning_filled_default, - error: circle_close_filled_default, - info: info_filled_default - }; - const ValidateComponentsMap = { - validating: loading_default, - success: circle_check_default, - error: circle_close_default - }; - - const withInstall = (main, extra) => { - main.install = (app) => { - for (const comp of [main, ...Object.values(extra != null ? extra : {})]) { - app.component(comp.name, comp); - } - }; - if (extra) { - for (const [key, comp] of Object.entries(extra)) { - main[key] = comp; - } - } - return main; - }; - const withInstallFunction = (fn, name) => { - fn.install = (app) => { - fn._context = app._context; - app.config.globalProperties[name] = fn; - }; - return fn; - }; - const withInstallDirective = (directive, name) => { - directive.install = (app) => { - app.directive(name, directive); - }; - return directive; - }; - const withNoopInstall = (component) => { - component.install = NOOP; - return component; - }; - - const composeRefs = (...refs) => { - return (el) => { - refs.forEach((ref) => { - if (isFunction$1(ref)) { - ref(el); - } else { - ref.value = el; - } - }); - }; - }; - - const EVENT_CODE = { - tab: "Tab", - enter: "Enter", - space: "Space", - left: "ArrowLeft", - up: "ArrowUp", - right: "ArrowRight", - down: "ArrowDown", - esc: "Escape", - delete: "Delete", - backspace: "Backspace", - numpadEnter: "NumpadEnter", - pageUp: "PageUp", - pageDown: "PageDown", - home: "Home", - end: "End" - }; - - const datePickTypes = [ - "year", - "years", - "month", - "months", - "date", - "dates", - "week", - "datetime", - "datetimerange", - "daterange", - "monthrange", - "yearrange" - ]; - const WEEK_DAYS = [ - "sun", - "mon", - "tue", - "wed", - "thu", - "fri", - "sat" - ]; - - const UPDATE_MODEL_EVENT = "update:modelValue"; - const CHANGE_EVENT = "change"; - const INPUT_EVENT = "input"; - - const INSTALLED_KEY = Symbol("INSTALLED_KEY"); - - const componentSizes = ["", "default", "small", "large"]; - const componentSizeMap = { - large: 40, - default: 32, - small: 24 - }; - - const isValidComponentSize = (val) => ["", ...componentSizes].includes(val); - - var PatchFlags = /* @__PURE__ */ ((PatchFlags2) => { - PatchFlags2[PatchFlags2["TEXT"] = 1] = "TEXT"; - PatchFlags2[PatchFlags2["CLASS"] = 2] = "CLASS"; - PatchFlags2[PatchFlags2["STYLE"] = 4] = "STYLE"; - PatchFlags2[PatchFlags2["PROPS"] = 8] = "PROPS"; - PatchFlags2[PatchFlags2["FULL_PROPS"] = 16] = "FULL_PROPS"; - PatchFlags2[PatchFlags2["HYDRATE_EVENTS"] = 32] = "HYDRATE_EVENTS"; - PatchFlags2[PatchFlags2["STABLE_FRAGMENT"] = 64] = "STABLE_FRAGMENT"; - PatchFlags2[PatchFlags2["KEYED_FRAGMENT"] = 128] = "KEYED_FRAGMENT"; - PatchFlags2[PatchFlags2["UNKEYED_FRAGMENT"] = 256] = "UNKEYED_FRAGMENT"; - PatchFlags2[PatchFlags2["NEED_PATCH"] = 512] = "NEED_PATCH"; - PatchFlags2[PatchFlags2["DYNAMIC_SLOTS"] = 1024] = "DYNAMIC_SLOTS"; - PatchFlags2[PatchFlags2["HOISTED"] = -1] = "HOISTED"; - PatchFlags2[PatchFlags2["BAIL"] = -2] = "BAIL"; - return PatchFlags2; - })(PatchFlags || {}); - function isFragment(node) { - return vue.isVNode(node) && node.type === vue.Fragment; - } - function isComment(node) { - return vue.isVNode(node) && node.type === vue.Comment; - } - function isValidElementNode(node) { - return vue.isVNode(node) && !isFragment(node) && !isComment(node); - } - const getNormalizedProps = (node) => { - if (!vue.isVNode(node)) { - return {}; - } - const raw = node.props || {}; - const type = (vue.isVNode(node.type) ? node.type.props : void 0) || {}; - const props = {}; - Object.keys(type).forEach((key) => { - if (hasOwn(type[key], "default")) { - props[key] = type[key].default; - } - }); - Object.keys(raw).forEach((key) => { - props[camelize(key)] = raw[key]; - }); - return props; - }; - const ensureOnlyChild = (children) => { - if (!isArray$1(children) || children.length > 1) { - throw new Error("expect to receive a single Vue element child"); - } - return children[0]; - }; - const flattedChildren = (children) => { - const vNodes = isArray$1(children) ? children : [children]; - const result = []; - vNodes.forEach((child) => { - var _a; - if (isArray$1(child)) { - result.push(...flattedChildren(child)); - } else if (vue.isVNode(child) && ((_a = child.component) == null ? void 0 : _a.subTree)) { - result.push(child, ...flattedChildren(child.component.subTree)); - } else if (vue.isVNode(child) && isArray$1(child.children)) { - result.push(...flattedChildren(child.children)); - } else { - result.push(child); - } - }); - return result; - }; - - const unique = (arr) => [...new Set(arr)]; - const castArray = (arr) => { - if (!arr && arr !== 0) - return []; - return isArray$1(arr) ? arr : [arr]; - }; - - const isKorean = (text) => /([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(text); - - const mutable = (val) => val; - - function throttleByRaf(cb) { - let timer = 0; - const throttle = (...args) => { - if (timer) { - cAF(timer); - } - timer = rAF(() => { - cb(...args); - timer = 0; - }); - }; - throttle.cancel = () => { - cAF(timer); - timer = 0; - }; - return throttle; - } - - const DEFAULT_EXCLUDE_KEYS = ["class", "style"]; - const LISTENER_PREFIX = /^on[A-Z]/; - const useAttrs = (params = {}) => { - const { excludeListeners = false, excludeKeys } = params; - const allExcludeKeys = vue.computed(() => { - return ((excludeKeys == null ? void 0 : excludeKeys.value) || []).concat(DEFAULT_EXCLUDE_KEYS); - }); - const instance = vue.getCurrentInstance(); - if (!instance) { - return vue.computed(() => ({})); - } - return vue.computed(() => { - var _a; - return fromPairs(Object.entries((_a = instance.proxy) == null ? void 0 : _a.$attrs).filter(([key]) => !allExcludeKeys.value.includes(key) && !(excludeListeners && LISTENER_PREFIX.test(key)))); - }); - }; - - function useCalcInputWidth() { - const calculatorRef = vue.shallowRef(); - const calculatorWidth = vue.ref(0); - const MINIMUM_INPUT_WIDTH = 11; - const inputStyle = vue.computed(() => ({ - minWidth: `${Math.max(calculatorWidth.value, MINIMUM_INPUT_WIDTH)}px` - })); - const resetCalculatorWidth = () => { - var _a, _b; - calculatorWidth.value = (_b = (_a = calculatorRef.value) == null ? void 0 : _a.getBoundingClientRect().width) != null ? _b : 0; - }; - useResizeObserver(calculatorRef, resetCalculatorWidth); - return { - calculatorRef, - calculatorWidth, - inputStyle - }; - } - - const useDeprecated = ({ from, replacement, scope, version, ref, type = "API" }, condition) => { - vue.watch(() => vue.unref(condition), (val) => { - }, { - immediate: true - }); - }; - - const useDraggable = (targetRef, dragRef, draggable, overflow) => { - let transform = { - offsetX: 0, - offsetY: 0 - }; - const onMousedown = (e) => { - const downX = e.clientX; - const downY = e.clientY; - const { offsetX, offsetY } = transform; - const targetRect = targetRef.value.getBoundingClientRect(); - const targetLeft = targetRect.left; - const targetTop = targetRect.top; - const targetWidth = targetRect.width; - const targetHeight = targetRect.height; - const clientWidth = document.documentElement.clientWidth; - const clientHeight = document.documentElement.clientHeight; - const minLeft = -targetLeft + offsetX; - const minTop = -targetTop + offsetY; - const maxLeft = clientWidth - targetLeft - targetWidth + offsetX; - const maxTop = clientHeight - targetTop - targetHeight + offsetY; - const onMousemove = (e2) => { - let moveX = offsetX + e2.clientX - downX; - let moveY = offsetY + e2.clientY - downY; - if (!(overflow == null ? void 0 : overflow.value)) { - moveX = Math.min(Math.max(moveX, minLeft), maxLeft); - moveY = Math.min(Math.max(moveY, minTop), maxTop); - } - transform = { - offsetX: moveX, - offsetY: moveY - }; - if (targetRef.value) { - targetRef.value.style.transform = `translate(${addUnit(moveX)}, ${addUnit(moveY)})`; - } - }; - const onMouseup = () => { - document.removeEventListener("mousemove", onMousemove); - document.removeEventListener("mouseup", onMouseup); - }; - document.addEventListener("mousemove", onMousemove); - document.addEventListener("mouseup", onMouseup); - }; - const onDraggable = () => { - if (dragRef.value && targetRef.value) { - dragRef.value.addEventListener("mousedown", onMousedown); - } - }; - const offDraggable = () => { - if (dragRef.value && targetRef.value) { - dragRef.value.removeEventListener("mousedown", onMousedown); - } - }; - const resetPosition = () => { - transform = { - offsetX: 0, - offsetY: 0 - }; - if (targetRef.value) { - targetRef.value.style.transform = "none"; - } - }; - vue.onMounted(() => { - vue.watchEffect(() => { - if (draggable.value) { - onDraggable(); - } else { - offDraggable(); - } - }); - }); - vue.onBeforeUnmount(() => { - offDraggable(); - }); - return { - resetPosition - }; - }; - - const useFocus = (el) => { - return { - focus: () => { - var _a, _b; - (_b = (_a = el.value) == null ? void 0 : _a.focus) == null ? void 0 : _b.call(_a); - } - }; - }; - - var English = { - name: "en", - el: { - breadcrumb: { - label: "Breadcrumb" - }, - colorpicker: { - confirm: "OK", - clear: "Clear", - defaultLabel: "color picker", - description: "current color is {color}. press enter to select a new color.", - alphaLabel: "pick alpha value" - }, - datepicker: { - now: "Now", - today: "Today", - cancel: "Cancel", - clear: "Clear", - confirm: "OK", - dateTablePrompt: "Use the arrow keys and enter to select the day of the month", - monthTablePrompt: "Use the arrow keys and enter to select the month", - yearTablePrompt: "Use the arrow keys and enter to select the year", - selectedDate: "Selected date", - selectDate: "Select date", - selectTime: "Select time", - startDate: "Start Date", - startTime: "Start Time", - endDate: "End Date", - endTime: "End Time", - prevYear: "Previous Year", - nextYear: "Next Year", - prevMonth: "Previous Month", - nextMonth: "Next Month", - year: "", - month1: "January", - month2: "February", - month3: "March", - month4: "April", - month5: "May", - month6: "June", - month7: "July", - month8: "August", - month9: "September", - month10: "October", - month11: "November", - month12: "December", - week: "week", - weeks: { - sun: "Sun", - mon: "Mon", - tue: "Tue", - wed: "Wed", - thu: "Thu", - fri: "Fri", - sat: "Sat" - }, - weeksFull: { - sun: "Sunday", - mon: "Monday", - tue: "Tuesday", - wed: "Wednesday", - thu: "Thursday", - fri: "Friday", - sat: "Saturday" - }, - months: { - jan: "Jan", - feb: "Feb", - mar: "Mar", - apr: "Apr", - may: "May", - jun: "Jun", - jul: "Jul", - aug: "Aug", - sep: "Sep", - oct: "Oct", - nov: "Nov", - dec: "Dec" - } - }, - inputNumber: { - decrease: "decrease number", - increase: "increase number" - }, - select: { - loading: "Loading", - noMatch: "No matching data", - noData: "No data", - placeholder: "Select" - }, - mention: { - loading: "Loading" - }, - dropdown: { - toggleDropdown: "Toggle Dropdown" - }, - cascader: { - noMatch: "No matching data", - loading: "Loading", - placeholder: "Select", - noData: "No data" - }, - pagination: { - goto: "Go to", - pagesize: "/page", - total: "Total {total}", - pageClassifier: "", - page: "Page", - prev: "Go to previous page", - next: "Go to next page", - currentPage: "page {pager}", - prevPages: "Previous {pager} pages", - nextPages: "Next {pager} pages", - deprecationWarning: "Deprecated usages detected, please refer to the el-pagination documentation for more details" - }, - dialog: { - close: "Close this dialog" - }, - drawer: { - close: "Close this dialog" - }, - messagebox: { - title: "Message", - confirm: "OK", - cancel: "Cancel", - error: "Illegal input", - close: "Close this dialog" - }, - upload: { - deleteTip: "press delete to remove", - delete: "Delete", - preview: "Preview", - continue: "Continue" - }, - slider: { - defaultLabel: "slider between {min} and {max}", - defaultRangeStartLabel: "pick start value", - defaultRangeEndLabel: "pick end value" - }, - table: { - emptyText: "No Data", - confirmFilter: "Confirm", - resetFilter: "Reset", - clearFilter: "All", - sumText: "Sum" - }, - tour: { - next: "Next", - previous: "Previous", - finish: "Finish" - }, - tree: { - emptyText: "No Data" - }, - transfer: { - noMatch: "No matching data", - noData: "No data", - titles: ["List 1", "List 2"], - filterPlaceholder: "Enter keyword", - noCheckedFormat: "{total} items", - hasCheckedFormat: "{checked}/{total} checked" - }, - image: { - error: "FAILED" - }, - pageHeader: { - title: "Back" - }, - popconfirm: { - confirmButtonText: "Yes", - cancelButtonText: "No" - }, - carousel: { - leftArrow: "Carousel arrow left", - rightArrow: "Carousel arrow right", - indicator: "Carousel switch to index {index}" - } - } - }; - - const buildTranslator = (locale) => (path, option) => translate(path, option, vue.unref(locale)); - const translate = (path, option, locale) => get(locale, path, path).replace(/\{(\w+)\}/g, (_, key) => { - var _a; - return `${(_a = option == null ? void 0 : option[key]) != null ? _a : `{${key}}`}`; - }); - const buildLocaleContext = (locale) => { - const lang = vue.computed(() => vue.unref(locale).name); - const localeRef = vue.isRef(locale) ? locale : vue.ref(locale); - return { - lang, - locale: localeRef, - t: buildTranslator(locale) - }; - }; - const localeContextKey = Symbol("localeContextKey"); - const useLocale = (localeOverrides) => { - const locale = localeOverrides || vue.inject(localeContextKey, vue.ref()); - return buildLocaleContext(vue.computed(() => locale.value || English)); - }; - - const defaultNamespace = "el"; - const statePrefix = "is-"; - const _bem = (namespace, block, blockSuffix, element, modifier) => { - let cls = `${namespace}-${block}`; - if (blockSuffix) { - cls += `-${blockSuffix}`; - } - if (element) { - cls += `__${element}`; - } - if (modifier) { - cls += `--${modifier}`; - } - return cls; - }; - const namespaceContextKey = Symbol("namespaceContextKey"); - const useGetDerivedNamespace = (namespaceOverrides) => { - const derivedNamespace = namespaceOverrides || (vue.getCurrentInstance() ? vue.inject(namespaceContextKey, vue.ref(defaultNamespace)) : vue.ref(defaultNamespace)); - const namespace = vue.computed(() => { - return vue.unref(derivedNamespace) || defaultNamespace; - }); - return namespace; - }; - const useNamespace = (block, namespaceOverrides) => { - const namespace = useGetDerivedNamespace(namespaceOverrides); - const b = (blockSuffix = "") => _bem(namespace.value, block, blockSuffix, "", ""); - const e = (element) => element ? _bem(namespace.value, block, "", element, "") : ""; - const m = (modifier) => modifier ? _bem(namespace.value, block, "", "", modifier) : ""; - const be = (blockSuffix, element) => blockSuffix && element ? _bem(namespace.value, block, blockSuffix, element, "") : ""; - const em = (element, modifier) => element && modifier ? _bem(namespace.value, block, "", element, modifier) : ""; - const bm = (blockSuffix, modifier) => blockSuffix && modifier ? _bem(namespace.value, block, blockSuffix, "", modifier) : ""; - const bem = (blockSuffix, element, modifier) => blockSuffix && element && modifier ? _bem(namespace.value, block, blockSuffix, element, modifier) : ""; - const is = (name, ...args) => { - const state = args.length >= 1 ? args[0] : true; - return name && state ? `${statePrefix}${name}` : ""; - }; - const cssVar = (object) => { - const styles = {}; - for (const key in object) { - if (object[key]) { - styles[`--${namespace.value}-${key}`] = object[key]; - } - } - return styles; - }; - const cssVarBlock = (object) => { - const styles = {}; - for (const key in object) { - if (object[key]) { - styles[`--${namespace.value}-${block}-${key}`] = object[key]; - } - } - return styles; - }; - const cssVarName = (name) => `--${namespace.value}-${name}`; - const cssVarBlockName = (name) => `--${namespace.value}-${block}-${name}`; - return { - namespace, - b, - e, - m, - be, - em, - bm, - bem, - is, - cssVar, - cssVarName, - cssVarBlock, - cssVarBlockName - }; - }; - - const useLockscreen = (trigger, options = {}) => { - if (!vue.isRef(trigger)) { - throwError("[useLockscreen]", "You need to pass a ref param to this function"); - } - const ns = options.ns || useNamespace("popup"); - const hiddenCls = vue.computed(() => ns.bm("parent", "hidden")); - if (!isClient || hasClass(document.body, hiddenCls.value)) { - return; - } - let scrollBarWidth = 0; - let withoutHiddenClass = false; - let bodyWidth = "0"; - const cleanup = () => { - setTimeout(() => { - if (typeof document === "undefined") - return; - if (withoutHiddenClass && document) { - document.body.style.width = bodyWidth; - removeClass(document.body, hiddenCls.value); - } - }, 200); - }; - vue.watch(trigger, (val) => { - if (!val) { - cleanup(); - return; - } - withoutHiddenClass = !hasClass(document.body, hiddenCls.value); - if (withoutHiddenClass) { - bodyWidth = document.body.style.width; - addClass(document.body, hiddenCls.value); - } - scrollBarWidth = getScrollBarWidth(ns.namespace.value); - const bodyHasOverflow = document.documentElement.clientHeight < document.body.scrollHeight; - const bodyOverflowY = getStyle(document.body, "overflowY"); - if (scrollBarWidth > 0 && (bodyHasOverflow || bodyOverflowY === "scroll") && withoutHiddenClass) { - document.body.style.width = `calc(100% - ${scrollBarWidth}px)`; - } - }); - vue.onScopeDispose(() => cleanup()); - }; - - const modalStack = []; - const closeModal = (e) => { - if (modalStack.length === 0) - return; - if (e.code === EVENT_CODE.esc) { - e.stopPropagation(); - const topModal = modalStack[modalStack.length - 1]; - topModal.handleClose(); - } - }; - const useModal = (instance, visibleRef) => { - vue.watch(visibleRef, (val) => { - if (val) { - modalStack.push(instance); - } else { - modalStack.splice(modalStack.indexOf(instance), 1); - } - }); - }; - if (isClient) - useEventListener(document, "keydown", closeModal); - - const _prop = buildProp({ - type: definePropType(Boolean), - default: null - }); - const _event = buildProp({ - type: definePropType(Function) - }); - const createModelToggleComposable = (name) => { - const updateEventKey = `update:${name}`; - const updateEventKeyRaw = `onUpdate:${name}`; - const useModelToggleEmits2 = [updateEventKey]; - const useModelToggleProps2 = { - [name]: _prop, - [updateEventKeyRaw]: _event - }; - const useModelToggle2 = ({ - indicator, - toggleReason, - shouldHideWhenRouteChanges, - shouldProceed, - onShow, - onHide - }) => { - const instance = vue.getCurrentInstance(); - const { emit } = instance; - const props = instance.props; - const hasUpdateHandler = vue.computed(() => isFunction$1(props[updateEventKeyRaw])); - const isModelBindingAbsent = vue.computed(() => props[name] === null); - const doShow = (event) => { - if (indicator.value === true) { - return; - } - indicator.value = true; - if (toggleReason) { - toggleReason.value = event; - } - if (isFunction$1(onShow)) { - onShow(event); - } - }; - const doHide = (event) => { - if (indicator.value === false) { - return; - } - indicator.value = false; - if (toggleReason) { - toggleReason.value = event; - } - if (isFunction$1(onHide)) { - onHide(event); - } - }; - const show = (event) => { - if (props.disabled === true || isFunction$1(shouldProceed) && !shouldProceed()) - return; - const shouldEmit = hasUpdateHandler.value && isClient; - if (shouldEmit) { - emit(updateEventKey, true); - } - if (isModelBindingAbsent.value || !shouldEmit) { - doShow(event); - } - }; - const hide = (event) => { - if (props.disabled === true || !isClient) - return; - const shouldEmit = hasUpdateHandler.value && isClient; - if (shouldEmit) { - emit(updateEventKey, false); - } - if (isModelBindingAbsent.value || !shouldEmit) { - doHide(event); - } - }; - const onChange = (val) => { - if (!isBoolean(val)) - return; - if (props.disabled && val) { - if (hasUpdateHandler.value) { - emit(updateEventKey, false); - } - } else if (indicator.value !== val) { - if (val) { - doShow(); - } else { - doHide(); - } - } - }; - const toggle = () => { - if (indicator.value) { - hide(); - } else { - show(); - } - }; - vue.watch(() => props[name], onChange); - if (shouldHideWhenRouteChanges && instance.appContext.config.globalProperties.$route !== void 0) { - vue.watch(() => ({ - ...instance.proxy.$route - }), () => { - if (shouldHideWhenRouteChanges.value && indicator.value) { - hide(); - } - }); - } - vue.onMounted(() => { - onChange(props[name]); - }); - return { - hide, - show, - toggle, - hasUpdateHandler - }; - }; - return { - useModelToggle: useModelToggle2, - useModelToggleProps: useModelToggleProps2, - useModelToggleEmits: useModelToggleEmits2 - }; - }; - const { useModelToggle, useModelToggleProps, useModelToggleEmits } = createModelToggleComposable("modelValue"); - - const usePreventGlobal = (indicator, evt, cb) => { - const prevent = (e) => { - if (cb(e)) - e.stopImmediatePropagation(); - }; - let stop = void 0; - vue.watch(() => indicator.value, (val) => { - if (val) { - stop = useEventListener(document, evt, prevent, true); - } else { - stop == null ? void 0 : stop(); - } - }, { immediate: true }); - }; - - const useProp = (name) => { - const vm = vue.getCurrentInstance(); - return vue.computed(() => { - var _a, _b; - return (_b = (_a = vm == null ? void 0 : vm.proxy) == null ? void 0 : _a.$props) == null ? void 0 : _b[name]; - }); - }; - - var E$1="top",R="bottom",W="right",P$1="left",me="auto",G=[E$1,R,W,P$1],U$1="start",J="end",Xe="clippingParents",je="viewport",K="popper",Ye="reference",De=G.reduce(function(t,e){return t.concat([e+"-"+U$1,e+"-"+J])},[]),Ee=[].concat(G,[me]).reduce(function(t,e){return t.concat([e,e+"-"+U$1,e+"-"+J])},[]),Ge="beforeRead",Je="read",Ke="afterRead",Qe="beforeMain",Ze="main",et="afterMain",tt="beforeWrite",nt="write",rt="afterWrite",ot=[Ge,Je,Ke,Qe,Ze,et,tt,nt,rt];function C(t){return t?(t.nodeName||"").toLowerCase():null}function H(t){if(t==null)return window;if(t.toString()!=="[object Window]"){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function Q(t){var e=H(t).Element;return t instanceof e||t instanceof Element}function B(t){var e=H(t).HTMLElement;return t instanceof e||t instanceof HTMLElement}function Pe(t){if(typeof ShadowRoot=="undefined")return !1;var e=H(t).ShadowRoot;return t instanceof e||t instanceof ShadowRoot}function Mt(t){var e=t.state;Object.keys(e.elements).forEach(function(n){var r=e.styles[n]||{},o=e.attributes[n]||{},i=e.elements[n];!B(i)||!C(i)||(Object.assign(i.style,r),Object.keys(o).forEach(function(a){var s=o[a];s===!1?i.removeAttribute(a):i.setAttribute(a,s===!0?"":s);}));});}function Rt(t){var e=t.state,n={popper:{position:e.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(e.elements.popper.style,n.popper),e.styles=n,e.elements.arrow&&Object.assign(e.elements.arrow.style,n.arrow),function(){Object.keys(e.elements).forEach(function(r){var o=e.elements[r],i=e.attributes[r]||{},a=Object.keys(e.styles.hasOwnProperty(r)?e.styles[r]:n[r]),s=a.reduce(function(f,c){return f[c]="",f},{});!B(o)||!C(o)||(Object.assign(o.style,s),Object.keys(i).forEach(function(f){o.removeAttribute(f);}));});}}var Ae={name:"applyStyles",enabled:!0,phase:"write",fn:Mt,effect:Rt,requires:["computeStyles"]};function q(t){return t.split("-")[0]}var X$1=Math.max,ve=Math.min,Z=Math.round;function ee(t,e){e===void 0&&(e=!1);var n=t.getBoundingClientRect(),r=1,o=1;if(B(t)&&e){var i=t.offsetHeight,a=t.offsetWidth;a>0&&(r=Z(n.width)/a||1),i>0&&(o=Z(n.height)/i||1);}return {width:n.width/r,height:n.height/o,top:n.top/o,right:n.right/r,bottom:n.bottom/o,left:n.left/r,x:n.left/r,y:n.top/o}}function ke(t){var e=ee(t),n=t.offsetWidth,r=t.offsetHeight;return Math.abs(e.width-n)<=1&&(n=e.width),Math.abs(e.height-r)<=1&&(r=e.height),{x:t.offsetLeft,y:t.offsetTop,width:n,height:r}}function it(t,e){var n=e.getRootNode&&e.getRootNode();if(t.contains(e))return !0;if(n&&Pe(n)){var r=e;do{if(r&&t.isSameNode(r))return !0;r=r.parentNode||r.host;}while(r)}return !1}function N$1(t){return H(t).getComputedStyle(t)}function Wt(t){return ["table","td","th"].indexOf(C(t))>=0}function I$1(t){return ((Q(t)?t.ownerDocument:t.document)||window.document).documentElement}function ge(t){return C(t)==="html"?t:t.assignedSlot||t.parentNode||(Pe(t)?t.host:null)||I$1(t)}function at(t){return !B(t)||N$1(t).position==="fixed"?null:t.offsetParent}function Bt(t){var e=navigator.userAgent.toLowerCase().indexOf("firefox")!==-1,n=navigator.userAgent.indexOf("Trident")!==-1;if(n&&B(t)){var r=N$1(t);if(r.position==="fixed")return null}var o=ge(t);for(Pe(o)&&(o=o.host);B(o)&&["html","body"].indexOf(C(o))<0;){var i=N$1(o);if(i.transform!=="none"||i.perspective!=="none"||i.contain==="paint"||["transform","perspective"].indexOf(i.willChange)!==-1||e&&i.willChange==="filter"||e&&i.filter&&i.filter!=="none")return o;o=o.parentNode;}return null}function se(t){for(var e=H(t),n=at(t);n&&Wt(n)&&N$1(n).position==="static";)n=at(n);return n&&(C(n)==="html"||C(n)==="body"&&N$1(n).position==="static")?e:n||Bt(t)||e}function Le(t){return ["top","bottom"].indexOf(t)>=0?"x":"y"}function fe(t,e,n){return X$1(t,ve(e,n))}function St(t,e,n){var r=fe(t,e,n);return r>n?n:r}function st(){return {top:0,right:0,bottom:0,left:0}}function ft(t){return Object.assign({},st(),t)}function ct(t,e){return e.reduce(function(n,r){return n[r]=t,n},{})}var Tt=function(t,e){return t=typeof t=="function"?t(Object.assign({},e.rects,{placement:e.placement})):t,ft(typeof t!="number"?t:ct(t,G))};function Ht(t){var e,n=t.state,r=t.name,o=t.options,i=n.elements.arrow,a=n.modifiersData.popperOffsets,s=q(n.placement),f=Le(s),c=[P$1,W].indexOf(s)>=0,u=c?"height":"width";if(!(!i||!a)){var m=Tt(o.padding,n),v=ke(i),l=f==="y"?E$1:P$1,h=f==="y"?R:W,p=n.rects.reference[u]+n.rects.reference[f]-a[f]-n.rects.popper[u],g=a[f]-n.rects.reference[f],x=se(i),y=x?f==="y"?x.clientHeight||0:x.clientWidth||0:0,$=p/2-g/2,d=m[l],b=y-v[u]-m[h],w=y/2-v[u]/2+$,O=fe(d,w,b),j=f;n.modifiersData[r]=(e={},e[j]=O,e.centerOffset=O-w,e);}}function Ct(t){var e=t.state,n=t.options,r=n.element,o=r===void 0?"[data-popper-arrow]":r;o!=null&&(typeof o=="string"&&(o=e.elements.popper.querySelector(o),!o)||!it(e.elements.popper,o)||(e.elements.arrow=o));}var pt={name:"arrow",enabled:!0,phase:"main",fn:Ht,effect:Ct,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function te(t){return t.split("-")[1]}var qt={top:"auto",right:"auto",bottom:"auto",left:"auto"};function Vt(t){var e=t.x,n=t.y,r=window,o=r.devicePixelRatio||1;return {x:Z(e*o)/o||0,y:Z(n*o)/o||0}}function ut(t){var e,n=t.popper,r=t.popperRect,o=t.placement,i=t.variation,a=t.offsets,s=t.position,f=t.gpuAcceleration,c=t.adaptive,u=t.roundOffsets,m=t.isFixed,v=a.x,l=v===void 0?0:v,h=a.y,p=h===void 0?0:h,g=typeof u=="function"?u({x:l,y:p}):{x:l,y:p};l=g.x,p=g.y;var x=a.hasOwnProperty("x"),y=a.hasOwnProperty("y"),$=P$1,d=E$1,b=window;if(c){var w=se(n),O="clientHeight",j="clientWidth";if(w===H(n)&&(w=I$1(n),N$1(w).position!=="static"&&s==="absolute"&&(O="scrollHeight",j="scrollWidth")),w=w,o===E$1||(o===P$1||o===W)&&i===J){d=R;var A=m&&w===b&&b.visualViewport?b.visualViewport.height:w[O];p-=A-r.height,p*=f?1:-1;}if(o===P$1||(o===E$1||o===R)&&i===J){$=W;var k=m&&w===b&&b.visualViewport?b.visualViewport.width:w[j];l-=k-r.width,l*=f?1:-1;}}var D=Object.assign({position:s},c&&qt),S=u===!0?Vt({x:l,y:p}):{x:l,y:p};if(l=S.x,p=S.y,f){var L;return Object.assign({},D,(L={},L[d]=y?"0":"",L[$]=x?"0":"",L.transform=(b.devicePixelRatio||1)<=1?"translate("+l+"px, "+p+"px)":"translate3d("+l+"px, "+p+"px, 0)",L))}return Object.assign({},D,(e={},e[d]=y?p+"px":"",e[$]=x?l+"px":"",e.transform="",e))}function Nt(t){var e=t.state,n=t.options,r=n.gpuAcceleration,o=r===void 0?!0:r,i=n.adaptive,a=i===void 0?!0:i,s=n.roundOffsets,f=s===void 0?!0:s,c={placement:q(e.placement),variation:te(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:o,isFixed:e.options.strategy==="fixed"};e.modifiersData.popperOffsets!=null&&(e.styles.popper=Object.assign({},e.styles.popper,ut(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:a,roundOffsets:f})))),e.modifiersData.arrow!=null&&(e.styles.arrow=Object.assign({},e.styles.arrow,ut(Object.assign({},c,{offsets:e.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:f})))),e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-placement":e.placement});}var Me={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:Nt,data:{}},ye={passive:!0};function It(t){var e=t.state,n=t.instance,r=t.options,o=r.scroll,i=o===void 0?!0:o,a=r.resize,s=a===void 0?!0:a,f=H(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return i&&c.forEach(function(u){u.addEventListener("scroll",n.update,ye);}),s&&f.addEventListener("resize",n.update,ye),function(){i&&c.forEach(function(u){u.removeEventListener("scroll",n.update,ye);}),s&&f.removeEventListener("resize",n.update,ye);}}var Re={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:It,data:{}},_t={left:"right",right:"left",bottom:"top",top:"bottom"};function be(t){return t.replace(/left|right|bottom|top/g,function(e){return _t[e]})}var zt={start:"end",end:"start"};function lt(t){return t.replace(/start|end/g,function(e){return zt[e]})}function We(t){var e=H(t),n=e.pageXOffset,r=e.pageYOffset;return {scrollLeft:n,scrollTop:r}}function Be(t){return ee(I$1(t)).left+We(t).scrollLeft}function Ft(t){var e=H(t),n=I$1(t),r=e.visualViewport,o=n.clientWidth,i=n.clientHeight,a=0,s=0;return r&&(o=r.width,i=r.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(a=r.offsetLeft,s=r.offsetTop)),{width:o,height:i,x:a+Be(t),y:s}}function Ut(t){var e,n=I$1(t),r=We(t),o=(e=t.ownerDocument)==null?void 0:e.body,i=X$1(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),a=X$1(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),s=-r.scrollLeft+Be(t),f=-r.scrollTop;return N$1(o||n).direction==="rtl"&&(s+=X$1(n.clientWidth,o?o.clientWidth:0)-i),{width:i,height:a,x:s,y:f}}function Se(t){var e=N$1(t),n=e.overflow,r=e.overflowX,o=e.overflowY;return /auto|scroll|overlay|hidden/.test(n+o+r)}function dt(t){return ["html","body","#document"].indexOf(C(t))>=0?t.ownerDocument.body:B(t)&&Se(t)?t:dt(ge(t))}function ce(t,e){var n;e===void 0&&(e=[]);var r=dt(t),o=r===((n=t.ownerDocument)==null?void 0:n.body),i=H(r),a=o?[i].concat(i.visualViewport||[],Se(r)?r:[]):r,s=e.concat(a);return o?s:s.concat(ce(ge(a)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Xt(t){var e=ee(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}function ht(t,e){return e===je?Te(Ft(t)):Q(e)?Xt(e):Te(Ut(I$1(t)))}function Yt(t){var e=ce(ge(t)),n=["absolute","fixed"].indexOf(N$1(t).position)>=0,r=n&&B(t)?se(t):t;return Q(r)?e.filter(function(o){return Q(o)&&it(o,r)&&C(o)!=="body"}):[]}function Gt(t,e,n){var r=e==="clippingParents"?Yt(t):[].concat(e),o=[].concat(r,[n]),i=o[0],a=o.reduce(function(s,f){var c=ht(t,f);return s.top=X$1(c.top,s.top),s.right=ve(c.right,s.right),s.bottom=ve(c.bottom,s.bottom),s.left=X$1(c.left,s.left),s},ht(t,i));return a.width=a.right-a.left,a.height=a.bottom-a.top,a.x=a.left,a.y=a.top,a}function mt(t){var e=t.reference,n=t.element,r=t.placement,o=r?q(r):null,i=r?te(r):null,a=e.x+e.width/2-n.width/2,s=e.y+e.height/2-n.height/2,f;switch(o){case E$1:f={x:a,y:e.y-n.height};break;case R:f={x:a,y:e.y+e.height};break;case W:f={x:e.x+e.width,y:s};break;case P$1:f={x:e.x-n.width,y:s};break;default:f={x:e.x,y:e.y};}var c=o?Le(o):null;if(c!=null){var u=c==="y"?"height":"width";switch(i){case U$1:f[c]=f[c]-(e[u]/2-n[u]/2);break;case J:f[c]=f[c]+(e[u]/2-n[u]/2);break}}return f}function ne(t,e){e===void 0&&(e={});var n=e,r=n.placement,o=r===void 0?t.placement:r,i=n.boundary,a=i===void 0?Xe:i,s=n.rootBoundary,f=s===void 0?je:s,c=n.elementContext,u=c===void 0?K:c,m=n.altBoundary,v=m===void 0?!1:m,l=n.padding,h=l===void 0?0:l,p=ft(typeof h!="number"?h:ct(h,G)),g=u===K?Ye:K,x=t.rects.popper,y=t.elements[v?g:u],$=Gt(Q(y)?y:y.contextElement||I$1(t.elements.popper),a,f),d=ee(t.elements.reference),b=mt({reference:d,element:x,strategy:"absolute",placement:o}),w=Te(Object.assign({},x,b)),O=u===K?w:d,j={top:$.top-O.top+p.top,bottom:O.bottom-$.bottom+p.bottom,left:$.left-O.left+p.left,right:O.right-$.right+p.right},A=t.modifiersData.offset;if(u===K&&A){var k=A[o];Object.keys(j).forEach(function(D){var S=[W,R].indexOf(D)>=0?1:-1,L=[E$1,R].indexOf(D)>=0?"y":"x";j[D]+=k[L]*S;});}return j}function Jt(t,e){e===void 0&&(e={});var n=e,r=n.placement,o=n.boundary,i=n.rootBoundary,a=n.padding,s=n.flipVariations,f=n.allowedAutoPlacements,c=f===void 0?Ee:f,u=te(r),m=u?s?De:De.filter(function(h){return te(h)===u}):G,v=m.filter(function(h){return c.indexOf(h)>=0});v.length===0&&(v=m);var l=v.reduce(function(h,p){return h[p]=ne(t,{placement:p,boundary:o,rootBoundary:i,padding:a})[q(p)],h},{});return Object.keys(l).sort(function(h,p){return l[h]-l[p]})}function Kt(t){if(q(t)===me)return [];var e=be(t);return [lt(t),e,lt(e)]}function Qt(t){var e=t.state,n=t.options,r=t.name;if(!e.modifiersData[r]._skip){for(var o=n.mainAxis,i=o===void 0?!0:o,a=n.altAxis,s=a===void 0?!0:a,f=n.fallbackPlacements,c=n.padding,u=n.boundary,m=n.rootBoundary,v=n.altBoundary,l=n.flipVariations,h=l===void 0?!0:l,p=n.allowedAutoPlacements,g=e.options.placement,x=q(g),y=x===g,$=f||(y||!h?[be(g)]:Kt(g)),d=[g].concat($).reduce(function(z,V){return z.concat(q(V)===me?Jt(e,{placement:V,boundary:u,rootBoundary:m,padding:c,flipVariations:h,allowedAutoPlacements:p}):V)},[]),b=e.rects.reference,w=e.rects.popper,O=new Map,j=!0,A=d[0],k=0;k=0,oe=re?"width":"height",M=ne(e,{placement:D,boundary:u,rootBoundary:m,altBoundary:v,padding:c}),T=re?L?W:P$1:L?R:E$1;b[oe]>w[oe]&&(T=be(T));var pe=be(T),_=[];if(i&&_.push(M[S]<=0),s&&_.push(M[T]<=0,M[pe]<=0),_.every(function(z){return z})){A=D,j=!1;break}O.set(D,_);}if(j)for(var ue=h?3:1,xe=function(z){var V=d.find(function(de){var ae=O.get(de);if(ae)return ae.slice(0,z).every(function(Y){return Y})});if(V)return A=V,"break"},ie=ue;ie>0;ie--){var le=xe(ie);if(le==="break")break}e.placement!==A&&(e.modifiersData[r]._skip=!0,e.placement=A,e.reset=!0);}}var vt={name:"flip",enabled:!0,phase:"main",fn:Qt,requiresIfExists:["offset"],data:{_skip:!1}};function gt(t,e,n){return n===void 0&&(n={x:0,y:0}),{top:t.top-e.height-n.y,right:t.right-e.width+n.x,bottom:t.bottom-e.height+n.y,left:t.left-e.width-n.x}}function yt(t){return [E$1,W,R,P$1].some(function(e){return t[e]>=0})}function Zt(t){var e=t.state,n=t.name,r=e.rects.reference,o=e.rects.popper,i=e.modifiersData.preventOverflow,a=ne(e,{elementContext:"reference"}),s=ne(e,{altBoundary:!0}),f=gt(a,r),c=gt(s,o,i),u=yt(f),m=yt(c);e.modifiersData[n]={referenceClippingOffsets:f,popperEscapeOffsets:c,isReferenceHidden:u,hasPopperEscaped:m},e.attributes.popper=Object.assign({},e.attributes.popper,{"data-popper-reference-hidden":u,"data-popper-escaped":m});}var bt={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:Zt};function en(t,e,n){var r=q(t),o=[P$1,E$1].indexOf(r)>=0?-1:1,i=typeof n=="function"?n(Object.assign({},e,{placement:t})):n,a=i[0],s=i[1];return a=a||0,s=(s||0)*o,[P$1,W].indexOf(r)>=0?{x:s,y:a}:{x:a,y:s}}function tn(t){var e=t.state,n=t.options,r=t.name,o=n.offset,i=o===void 0?[0,0]:o,a=Ee.reduce(function(u,m){return u[m]=en(m,e.rects,i),u},{}),s=a[e.placement],f=s.x,c=s.y;e.modifiersData.popperOffsets!=null&&(e.modifiersData.popperOffsets.x+=f,e.modifiersData.popperOffsets.y+=c),e.modifiersData[r]=a;}var wt={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:tn};function nn(t){var e=t.state,n=t.name;e.modifiersData[n]=mt({reference:e.rects.reference,element:e.rects.popper,strategy:"absolute",placement:e.placement});}var He={name:"popperOffsets",enabled:!0,phase:"read",fn:nn,data:{}};function rn(t){return t==="x"?"y":"x"}function on(t){var e=t.state,n=t.options,r=t.name,o=n.mainAxis,i=o===void 0?!0:o,a=n.altAxis,s=a===void 0?!1:a,f=n.boundary,c=n.rootBoundary,u=n.altBoundary,m=n.padding,v=n.tether,l=v===void 0?!0:v,h=n.tetherOffset,p=h===void 0?0:h,g=ne(e,{boundary:f,rootBoundary:c,padding:m,altBoundary:u}),x=q(e.placement),y=te(e.placement),$=!y,d=Le(x),b=rn(d),w=e.modifiersData.popperOffsets,O=e.rects.reference,j=e.rects.popper,A=typeof p=="function"?p(Object.assign({},e.rects,{placement:e.placement})):p,k=typeof A=="number"?{mainAxis:A,altAxis:A}:Object.assign({mainAxis:0,altAxis:0},A),D=e.modifiersData.offset?e.modifiersData.offset[e.placement]:null,S={x:0,y:0};if(w){if(i){var L,re=d==="y"?E$1:P$1,oe=d==="y"?R:W,M=d==="y"?"height":"width",T=w[d],pe=T+g[re],_=T-g[oe],ue=l?-j[M]/2:0,xe=y===U$1?O[M]:j[M],ie=y===U$1?-j[M]:-O[M],le=e.elements.arrow,z=l&&le?ke(le):{width:0,height:0},V=e.modifiersData["arrow#persistent"]?e.modifiersData["arrow#persistent"].padding:st(),de=V[re],ae=V[oe],Y=fe(0,O[M],z[M]),jt=$?O[M]/2-ue-Y-de-k.mainAxis:xe-Y-de-k.mainAxis,Dt=$?-O[M]/2+ue+Y+ae+k.mainAxis:ie+Y+ae+k.mainAxis,Oe=e.elements.arrow&&se(e.elements.arrow),Et=Oe?d==="y"?Oe.clientTop||0:Oe.clientLeft||0:0,Ce=(L=D==null?void 0:D[d])!=null?L:0,Pt=T+jt-Ce-Et,At=T+Dt-Ce,qe=fe(l?ve(pe,Pt):pe,T,l?X$1(_,At):_);w[d]=qe,S[d]=qe-T;}if(s){var Ve,kt=d==="x"?E$1:P$1,Lt=d==="x"?R:W,F=w[b],he=b==="y"?"height":"width",Ne=F+g[kt],Ie=F-g[Lt],$e=[E$1,P$1].indexOf(x)!==-1,_e=(Ve=D==null?void 0:D[b])!=null?Ve:0,ze=$e?Ne:F-O[he]-j[he]-_e+k.altAxis,Fe=$e?F+O[he]+j[he]-_e-k.altAxis:Ie,Ue=l&&$e?St(ze,F,Fe):fe(l?ze:Ne,F,l?Fe:Ie);w[b]=Ue,S[b]=Ue-F;}e.modifiersData[r]=S;}}var xt={name:"preventOverflow",enabled:!0,phase:"main",fn:on,requiresIfExists:["offset"]};function an(t){return {scrollLeft:t.scrollLeft,scrollTop:t.scrollTop}}function sn(t){return t===H(t)||!B(t)?We(t):an(t)}function fn(t){var e=t.getBoundingClientRect(),n=Z(e.width)/t.offsetWidth||1,r=Z(e.height)/t.offsetHeight||1;return n!==1||r!==1}function cn(t,e,n){n===void 0&&(n=!1);var r=B(e),o=B(e)&&fn(e),i=I$1(e),a=ee(t,o),s={scrollLeft:0,scrollTop:0},f={x:0,y:0};return (r||!r&&!n)&&((C(e)!=="body"||Se(i))&&(s=sn(e)),B(e)?(f=ee(e,!0),f.x+=e.clientLeft,f.y+=e.clientTop):i&&(f.x=Be(i))),{x:a.left+s.scrollLeft-f.x,y:a.top+s.scrollTop-f.y,width:a.width,height:a.height}}function pn(t){var e=new Map,n=new Set,r=[];t.forEach(function(i){e.set(i.name,i);});function o(i){n.add(i.name);var a=[].concat(i.requires||[],i.requiresIfExists||[]);a.forEach(function(s){if(!n.has(s)){var f=e.get(s);f&&o(f);}}),r.push(i);}return t.forEach(function(i){n.has(i.name)||o(i);}),r}function un(t){var e=pn(t);return ot.reduce(function(n,r){return n.concat(e.filter(function(o){return o.phase===r}))},[])}function ln(t){var e;return function(){return e||(e=new Promise(function(n){Promise.resolve().then(function(){e=void 0,n(t());});})),e}}function dn(t){var e=t.reduce(function(n,r){var o=n[r.name];return n[r.name]=o?Object.assign({},o,r,{options:Object.assign({},o.options,r.options),data:Object.assign({},o.data,r.data)}):r,n},{});return Object.keys(e).map(function(n){return e[n]})}var Ot={placement:"bottom",modifiers:[],strategy:"absolute"};function $t(){for(var t=arguments.length,e=new Array(t),n=0;n { - const stateUpdater = { - name: "updateState", - enabled: true, - phase: "write", - fn: ({ state }) => { - const derivedState = deriveState(state); - Object.assign(states.value, derivedState); - }, - requires: ["computeStyles"] - }; - const options = vue.computed(() => { - const { onFirstUpdate, placement, strategy, modifiers } = vue.unref(opts); - return { - onFirstUpdate, - placement: placement || "bottom", - strategy: strategy || "absolute", - modifiers: [ - ...modifiers || [], - stateUpdater, - { name: "applyStyles", enabled: false } - ] - }; - }); - const instanceRef = vue.shallowRef(); - const states = vue.ref({ - styles: { - popper: { - position: vue.unref(options).strategy, - left: "0", - top: "0" - }, - arrow: { - position: "absolute" - } - }, - attributes: {} - }); - const destroy = () => { - if (!instanceRef.value) - return; - instanceRef.value.destroy(); - instanceRef.value = void 0; - }; - vue.watch(options, (newOptions) => { - const instance = vue.unref(instanceRef); - if (instance) { - instance.setOptions(newOptions); - } - }, { - deep: true - }); - vue.watch([referenceElementRef, popperElementRef], ([referenceElement, popperElement]) => { - destroy(); - if (!referenceElement || !popperElement) - return; - instanceRef.value = yn(referenceElement, popperElement, vue.unref(options)); - }); - vue.onBeforeUnmount(() => { - destroy(); - }); - return { - state: vue.computed(() => { - var _a; - return { ...((_a = vue.unref(instanceRef)) == null ? void 0 : _a.state) || {} }; - }), - styles: vue.computed(() => vue.unref(states).styles), - attributes: vue.computed(() => vue.unref(states).attributes), - update: () => { - var _a; - return (_a = vue.unref(instanceRef)) == null ? void 0 : _a.update(); - }, - forceUpdate: () => { - var _a; - return (_a = vue.unref(instanceRef)) == null ? void 0 : _a.forceUpdate(); - }, - instanceRef: vue.computed(() => vue.unref(instanceRef)) - }; - }; - function deriveState(state) { - const elements = Object.keys(state.elements); - const styles = fromPairs(elements.map((element) => [element, state.styles[element] || {}])); - const attributes = fromPairs(elements.map((element) => [element, state.attributes[element]])); - return { - styles, - attributes - }; - } - - const useSameTarget = (handleClick) => { - if (!handleClick) { - return { onClick: NOOP, onMousedown: NOOP, onMouseup: NOOP }; - } - let mousedownTarget = false; - let mouseupTarget = false; - const onClick = (e) => { - if (mousedownTarget && mouseupTarget) { - handleClick(e); - } - mousedownTarget = mouseupTarget = false; - }; - const onMousedown = (e) => { - mousedownTarget = e.target === e.currentTarget; - }; - const onMouseup = (e) => { - mouseupTarget = e.target === e.currentTarget; - }; - return { onClick, onMousedown, onMouseup }; - }; - - const useTeleport = (contentRenderer, appendToBody) => { - const isTeleportVisible = vue.ref(false); - if (!isClient) { - return { - isTeleportVisible, - showTeleport: NOOP, - hideTeleport: NOOP, - renderTeleport: NOOP - }; - } - let $el = null; - const showTeleport = () => { - isTeleportVisible.value = true; - if ($el !== null) - return; - $el = createGlobalNode(); - }; - const hideTeleport = () => { - isTeleportVisible.value = false; - if ($el !== null) { - removeGlobalNode($el); - $el = null; - } - }; - const renderTeleport = () => { - return appendToBody.value !== true ? contentRenderer() : isTeleportVisible.value ? [vue.h(vue.Teleport, { to: $el }, contentRenderer())] : void 0; - }; - vue.onUnmounted(hideTeleport); - return { - isTeleportVisible, - showTeleport, - hideTeleport, - renderTeleport - }; - }; - - const useThrottleRender = (loading, throttle = 0) => { - if (throttle === 0) - return loading; - const initVal = isObject$1(throttle) && Boolean(throttle.initVal); - const throttled = vue.ref(initVal); - let timeoutHandle = null; - const dispatchThrottling = (timer) => { - if (isUndefined(timer)) { - throttled.value = loading.value; - return; - } - if (timeoutHandle) { - clearTimeout(timeoutHandle); - } - timeoutHandle = setTimeout(() => { - throttled.value = loading.value; - }, timer); - }; - const dispatcher = (type) => { - if (type === "leading") { - if (isNumber(throttle)) { - dispatchThrottling(throttle); - } else { - dispatchThrottling(throttle.leading); - } - } else { - if (isObject$1(throttle)) { - dispatchThrottling(throttle.trailing); - } else { - throttled.value = false; - } - } - }; - vue.onMounted(() => dispatcher("leading")); - vue.watch(() => loading.value, (val) => { - dispatcher(val ? "leading" : "trailing"); - }); - return throttled; - }; - - function useTimeout() { - let timeoutHandle; - const registerTimeout = (fn, delay) => { - cancelTimeout(); - timeoutHandle = window.setTimeout(fn, delay); - }; - const cancelTimeout = () => window.clearTimeout(timeoutHandle); - tryOnScopeDispose(() => cancelTimeout()); - return { - registerTimeout, - cancelTimeout - }; - } - - const AFTER_APPEAR = "after-appear"; - const AFTER_ENTER = "after-enter"; - const AFTER_LEAVE = "after-leave"; - const APPEAR = "appear"; - const APPEAR_CANCELLED = "appear-cancelled"; - const BEFORE_ENTER = "before-enter"; - const BEFORE_LEAVE = "before-leave"; - const ENTER = "enter"; - const ENTER_CANCELLED = "enter-cancelled"; - const LEAVE = "leave"; - const LEAVE_CANCELLED = "leave-cancelled"; - const useTransitionFallthroughEmits = [ - AFTER_APPEAR, - AFTER_ENTER, - AFTER_LEAVE, - APPEAR, - APPEAR_CANCELLED, - BEFORE_ENTER, - BEFORE_LEAVE, - ENTER, - ENTER_CANCELLED, - LEAVE, - LEAVE_CANCELLED - ]; - const useTransitionFallthrough = () => { - const { emit } = vue.getCurrentInstance(); - return { - onAfterAppear: () => { - emit(AFTER_APPEAR); - }, - onAfterEnter: () => { - emit(AFTER_ENTER); - }, - onAfterLeave: () => { - emit(AFTER_LEAVE); - }, - onAppearCancelled: () => { - emit(APPEAR_CANCELLED); - }, - onBeforeEnter: () => { - emit(BEFORE_ENTER); - }, - onBeforeLeave: () => { - emit(BEFORE_LEAVE); - }, - onEnter: () => { - emit(ENTER); - }, - onEnterCancelled: () => { - emit(ENTER_CANCELLED); - }, - onLeave: () => { - emit(LEAVE); - }, - onLeaveCancelled: () => { - emit(LEAVE_CANCELLED); - } - }; - }; - - const defaultIdInjection = { - prefix: Math.floor(Math.random() * 1e4), - current: 0 - }; - const ID_INJECTION_KEY = Symbol("elIdInjection"); - const useIdInjection = () => { - return vue.getCurrentInstance() ? vue.inject(ID_INJECTION_KEY, defaultIdInjection) : defaultIdInjection; - }; - const useId = (deterministicId) => { - const idInjection = useIdInjection(); - const namespace = useGetDerivedNamespace(); - const idRef = computedEager(() => vue.unref(deterministicId) || `${namespace.value}-id-${idInjection.prefix}-${idInjection.current++}`); - return idRef; - }; - - let registeredEscapeHandlers = []; - const cachedHandler = (event) => { - if (event.code === EVENT_CODE.esc) { - registeredEscapeHandlers.forEach((registeredHandler) => registeredHandler(event)); - } - }; - const useEscapeKeydown = (handler) => { - vue.onMounted(() => { - if (registeredEscapeHandlers.length === 0) { - document.addEventListener("keydown", cachedHandler); - } - if (isClient) - registeredEscapeHandlers.push(handler); - }); - vue.onBeforeUnmount(() => { - registeredEscapeHandlers = registeredEscapeHandlers.filter((registeredHandler) => registeredHandler !== handler); - if (registeredEscapeHandlers.length === 0) { - if (isClient) - document.removeEventListener("keydown", cachedHandler); - } - }); - }; - - const usePopperContainerId = () => { - const namespace = useGetDerivedNamespace(); - const idInjection = useIdInjection(); - const id = vue.computed(() => { - return `${namespace.value}-popper-container-${idInjection.prefix}`; - }); - const selector = vue.computed(() => `#${id.value}`); - return { - id, - selector - }; - }; - const createContainer = (id) => { - const container = document.createElement("div"); - container.id = id; - document.body.appendChild(container); - return container; - }; - const usePopperContainer = () => { - const { id, selector } = usePopperContainerId(); - vue.onBeforeMount(() => { - if (!isClient) - return; - if (!document.body.querySelector(selector.value)) { - createContainer(id.value); - } - }); - return { - id, - selector - }; - }; - - const useDelayedRender = ({ - indicator, - intermediateIndicator, - shouldSetIntermediate = () => true, - beforeShow, - afterShow, - afterHide, - beforeHide - }) => { - vue.watch(() => vue.unref(indicator), (val) => { - if (val) { - beforeShow == null ? void 0 : beforeShow(); - vue.nextTick(() => { - if (!vue.unref(indicator)) - return; - if (shouldSetIntermediate("show")) { - intermediateIndicator.value = true; - } - }); - } else { - beforeHide == null ? void 0 : beforeHide(); - vue.nextTick(() => { - if (vue.unref(indicator)) - return; - if (shouldSetIntermediate("hide")) { - intermediateIndicator.value = false; - } - }); - } - }); - vue.watch(() => intermediateIndicator.value, (val) => { - if (val) { - afterShow == null ? void 0 : afterShow(); - } else { - afterHide == null ? void 0 : afterHide(); - } - }); - }; - - const useDelayedToggleProps = buildProps({ - showAfter: { - type: Number, - default: 0 - }, - hideAfter: { - type: Number, - default: 200 - }, - autoClose: { - type: Number, - default: 0 - } - }); - const useDelayedToggle = ({ - showAfter, - hideAfter, - autoClose, - open, - close - }) => { - const { registerTimeout } = useTimeout(); - const { - registerTimeout: registerTimeoutForAutoClose, - cancelTimeout: cancelTimeoutForAutoClose - } = useTimeout(); - const onOpen = (event) => { - registerTimeout(() => { - open(event); - const _autoClose = vue.unref(autoClose); - if (isNumber(_autoClose) && _autoClose > 0) { - registerTimeoutForAutoClose(() => { - close(event); - }, _autoClose); - } - }, vue.unref(showAfter)); - }; - const onClose = (event) => { - cancelTimeoutForAutoClose(); - registerTimeout(() => { - close(event); - }, vue.unref(hideAfter)); - }; - return { - onOpen, - onClose - }; - }; - - const FORWARD_REF_INJECTION_KEY = Symbol("elForwardRef"); - const useForwardRef = (forwardRef) => { - const setForwardRef = (el) => { - forwardRef.value = el; - }; - vue.provide(FORWARD_REF_INJECTION_KEY, { - setForwardRef - }); - }; - const useForwardRefDirective = (setForwardRef) => { - return { - mounted(el) { - setForwardRef(el); - }, - updated(el) { - setForwardRef(el); - }, - unmounted() { - setForwardRef(null); - } - }; - }; - - const initial = { - current: 0 - }; - const zIndex = vue.ref(0); - const defaultInitialZIndex = 2e3; - const ZINDEX_INJECTION_KEY = Symbol("elZIndexContextKey"); - const zIndexContextKey = Symbol("zIndexContextKey"); - const useZIndex = (zIndexOverrides) => { - const increasingInjection = vue.getCurrentInstance() ? vue.inject(ZINDEX_INJECTION_KEY, initial) : initial; - const zIndexInjection = zIndexOverrides || (vue.getCurrentInstance() ? vue.inject(zIndexContextKey, void 0) : void 0); - const initialZIndex = vue.computed(() => { - const zIndexFromInjection = vue.unref(zIndexInjection); - return isNumber(zIndexFromInjection) ? zIndexFromInjection : defaultInitialZIndex; - }); - const currentZIndex = vue.computed(() => initialZIndex.value + zIndex.value); - const nextZIndex = () => { - increasingInjection.current++; - zIndex.value = increasingInjection.current; - return currentZIndex.value; - }; - if (!isClient && !vue.inject(ZINDEX_INJECTION_KEY)) ; - return { - initialZIndex, - currentZIndex, - nextZIndex - }; - }; - - function getSide(placement) { - return placement.split('-')[0]; - } - - function getAlignment(placement) { - return placement.split('-')[1]; - } - - function getMainAxisFromPlacement(placement) { - return ['top', 'bottom'].includes(getSide(placement)) ? 'x' : 'y'; - } - - function getLengthFromAxis(axis) { - return axis === 'y' ? 'height' : 'width'; - } - - function computeCoordsFromPlacement(_ref, placement, rtl) { - let { - reference, - floating - } = _ref; - const commonX = reference.x + reference.width / 2 - floating.width / 2; - const commonY = reference.y + reference.height / 2 - floating.height / 2; - const mainAxis = getMainAxisFromPlacement(placement); - const length = getLengthFromAxis(mainAxis); - const commonAlign = reference[length] / 2 - floating[length] / 2; - const side = getSide(placement); - const isVertical = mainAxis === 'x'; - let coords; - - switch (side) { - case 'top': - coords = { - x: commonX, - y: reference.y - floating.height - }; - break; - - case 'bottom': - coords = { - x: commonX, - y: reference.y + reference.height - }; - break; - - case 'right': - coords = { - x: reference.x + reference.width, - y: commonY - }; - break; - - case 'left': - coords = { - x: reference.x - floating.width, - y: commonY - }; - break; - - default: - coords = { - x: reference.x, - y: reference.y - }; - } - - switch (getAlignment(placement)) { - case 'start': - coords[mainAxis] -= commonAlign * (rtl && isVertical ? -1 : 1); - break; - - case 'end': - coords[mainAxis] += commonAlign * (rtl && isVertical ? -1 : 1); - break; - } - - return coords; - } - - /** - * Computes the `x` and `y` coordinates that will place the floating element - * next to a reference element when it is given a certain positioning strategy. - * - * This export does not have any `platform` interface logic. You will need to - * write one for the platform you are using Floating UI with. - */ - - const computePosition$1 = async (reference, floating, config) => { - const { - placement = 'bottom', - strategy = 'absolute', - middleware = [], - platform - } = config; - const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(floating)); - - let rects = await platform.getElementRects({ - reference, - floating, - strategy - }); - let { - x, - y - } = computeCoordsFromPlacement(rects, placement, rtl); - let statefulPlacement = placement; - let middlewareData = {}; - let resetCount = 0; - - for (let i = 0; i < middleware.length; i++) { - const { - name, - fn - } = middleware[i]; - const { - x: nextX, - y: nextY, - data, - reset - } = await fn({ - x, - y, - initialPlacement: placement, - placement: statefulPlacement, - strategy, - middlewareData, - rects, - platform, - elements: { - reference, - floating - } - }); - x = nextX != null ? nextX : x; - y = nextY != null ? nextY : y; - middlewareData = { ...middlewareData, - [name]: { ...middlewareData[name], - ...data - } - }; - - if (reset && resetCount <= 50) { - resetCount++; - - if (typeof reset === 'object') { - if (reset.placement) { - statefulPlacement = reset.placement; - } - - if (reset.rects) { - rects = reset.rects === true ? await platform.getElementRects({ - reference, - floating, - strategy - }) : reset.rects; - } - - ({ - x, - y - } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); - } - - i = -1; - continue; - } - } - - return { - x, - y, - placement: statefulPlacement, - strategy, - middlewareData - }; - }; - - function expandPaddingObject(padding) { - return { - top: 0, - right: 0, - bottom: 0, - left: 0, - ...padding - }; - } - - function getSideObjectFromPadding(padding) { - return typeof padding !== 'number' ? expandPaddingObject(padding) : { - top: padding, - right: padding, - bottom: padding, - left: padding - }; - } - - function rectToClientRect(rect) { - return { ...rect, - top: rect.y, - left: rect.x, - right: rect.x + rect.width, - bottom: rect.y + rect.height - }; - } - - /** - * Resolves with an object of overflow side offsets that determine how much the - * element is overflowing a given clipping boundary. - * - positive = overflowing the boundary by that number of pixels - * - negative = how many pixels left before it will overflow - * - 0 = lies flush with the boundary - * @see https://floating-ui.com/docs/detectOverflow - */ - async function detectOverflow(middlewareArguments, options) { - var _await$platform$isEle; - - if (options === void 0) { - options = {}; - } - - const { - x, - y, - platform, - rects, - elements, - strategy - } = middlewareArguments; - const { - boundary = 'clippingAncestors', - rootBoundary = 'viewport', - elementContext = 'floating', - altBoundary = false, - padding = 0 - } = options; - const paddingObject = getSideObjectFromPadding(padding); - const altContext = elementContext === 'floating' ? 'reference' : 'floating'; - const element = elements[altBoundary ? altContext : elementContext]; - const clippingClientRect = rectToClientRect(await platform.getClippingRect({ - element: ((_await$platform$isEle = await (platform.isElement == null ? void 0 : platform.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || (await (platform.getDocumentElement == null ? void 0 : platform.getDocumentElement(elements.floating))), - boundary, - rootBoundary, - strategy - })); - const elementClientRect = rectToClientRect(platform.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform.convertOffsetParentRelativeRectToViewportRelativeRect({ - rect: elementContext === 'floating' ? { ...rects.floating, - x, - y - } : rects.reference, - offsetParent: await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(elements.floating)), - strategy - }) : rects[elementContext]); - return { - top: clippingClientRect.top - elementClientRect.top + paddingObject.top, - bottom: elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom, - left: clippingClientRect.left - elementClientRect.left + paddingObject.left, - right: elementClientRect.right - clippingClientRect.right + paddingObject.right - }; - } - - const min$2 = Math.min; - const max$2 = Math.max; - - function within(min$1, value, max$1) { - return max$2(min$1, min$2(value, max$1)); - } - - /** - * Positions an inner element of the floating element such that it is centered - * to the reference element. - * @see https://floating-ui.com/docs/arrow - */ - const arrow = options => ({ - name: 'arrow', - options, - - async fn(middlewareArguments) { - // Since `element` is required, we don't Partial<> the type - const { - element, - padding = 0 - } = options != null ? options : {}; - const { - x, - y, - placement, - rects, - platform - } = middlewareArguments; - - if (element == null) { - - return {}; - } - - const paddingObject = getSideObjectFromPadding(padding); - const coords = { - x, - y - }; - const axis = getMainAxisFromPlacement(placement); - const alignment = getAlignment(placement); - const length = getLengthFromAxis(axis); - const arrowDimensions = await platform.getDimensions(element); - const minProp = axis === 'y' ? 'top' : 'left'; - const maxProp = axis === 'y' ? 'bottom' : 'right'; - const endDiff = rects.reference[length] + rects.reference[axis] - coords[axis] - rects.floating[length]; - const startDiff = coords[axis] - rects.reference[axis]; - const arrowOffsetParent = await (platform.getOffsetParent == null ? void 0 : platform.getOffsetParent(element)); - let clientSize = arrowOffsetParent ? axis === 'y' ? arrowOffsetParent.clientHeight || 0 : arrowOffsetParent.clientWidth || 0 : 0; - - if (clientSize === 0) { - clientSize = rects.floating[length]; - } - - const centerToReference = endDiff / 2 - startDiff / 2; // Make sure the arrow doesn't overflow the floating element if the center - // point is outside the floating element's bounds - - const min = paddingObject[minProp]; - const max = clientSize - arrowDimensions[length] - paddingObject[maxProp]; - const center = clientSize / 2 - arrowDimensions[length] / 2 + centerToReference; - const offset = within(min, center, max); // Make sure that arrow points at the reference - - const alignmentPadding = alignment === 'start' ? paddingObject[minProp] : paddingObject[maxProp]; - const shouldAddOffset = alignmentPadding > 0 && center !== offset && rects.reference[length] <= rects.floating[length]; - const alignmentOffset = shouldAddOffset ? center < min ? min - center : max - center : 0; - return { - [axis]: coords[axis] - alignmentOffset, - data: { - [axis]: offset, - centerOffset: center - offset - } - }; - } - - }); - - const hash$1 = { - left: 'right', - right: 'left', - bottom: 'top', - top: 'bottom' - }; - function getOppositePlacement(placement) { - return placement.replace(/left|right|bottom|top/g, matched => hash$1[matched]); - } - - function getAlignmentSides(placement, rects, rtl) { - if (rtl === void 0) { - rtl = false; - } - - const alignment = getAlignment(placement); - const mainAxis = getMainAxisFromPlacement(placement); - const length = getLengthFromAxis(mainAxis); - let mainAlignmentSide = mainAxis === 'x' ? alignment === (rtl ? 'end' : 'start') ? 'right' : 'left' : alignment === 'start' ? 'bottom' : 'top'; - - if (rects.reference[length] > rects.floating[length]) { - mainAlignmentSide = getOppositePlacement(mainAlignmentSide); - } - - return { - main: mainAlignmentSide, - cross: getOppositePlacement(mainAlignmentSide) - }; - } - - const hash = { - start: 'end', - end: 'start' - }; - function getOppositeAlignmentPlacement(placement) { - return placement.replace(/start|end/g, matched => hash[matched]); - } - - function getExpandedPlacements(placement) { - const oppositePlacement = getOppositePlacement(placement); - return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; - } - - /** - * Changes the placement of the floating element to one that will fit if the - * initially specified `placement` does not. - * @see https://floating-ui.com/docs/flip - */ - const flip = function (options) { - if (options === void 0) { - options = {}; - } - - return { - name: 'flip', - options, - - async fn(middlewareArguments) { - var _middlewareData$flip; - - const { - placement, - middlewareData, - rects, - initialPlacement, - platform, - elements - } = middlewareArguments; - const { - mainAxis: checkMainAxis = true, - crossAxis: checkCrossAxis = true, - fallbackPlacements: specifiedFallbackPlacements, - fallbackStrategy = 'bestFit', - flipAlignment = true, - ...detectOverflowOptions - } = options; - const side = getSide(placement); - const isBasePlacement = side === initialPlacement; - const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement)); - const placements = [initialPlacement, ...fallbackPlacements]; - const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions); - const overflows = []; - let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; - - if (checkMainAxis) { - overflows.push(overflow[side]); - } - - if (checkCrossAxis) { - const { - main, - cross - } = getAlignmentSides(placement, rects, await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating))); - overflows.push(overflow[main], overflow[cross]); - } - - overflowsData = [...overflowsData, { - placement, - overflows - }]; // One or more sides is overflowing - - if (!overflows.every(side => side <= 0)) { - var _middlewareData$flip$, _middlewareData$flip2; - - const nextIndex = ((_middlewareData$flip$ = (_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) != null ? _middlewareData$flip$ : 0) + 1; - const nextPlacement = placements[nextIndex]; - - if (nextPlacement) { - // Try next placement and re-run the lifecycle - return { - data: { - index: nextIndex, - overflows: overflowsData - }, - reset: { - placement: nextPlacement - } - }; - } - - let resetPlacement = 'bottom'; - - switch (fallbackStrategy) { - case 'bestFit': - { - var _overflowsData$map$so; - - const placement = (_overflowsData$map$so = overflowsData.map(d => [d, d.overflows.filter(overflow => overflow > 0).reduce((acc, overflow) => acc + overflow, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$map$so[0].placement; - - if (placement) { - resetPlacement = placement; - } - - break; - } - - case 'initialPlacement': - resetPlacement = initialPlacement; - break; - } - - if (placement !== resetPlacement) { - return { - reset: { - placement: resetPlacement - } - }; - } - } - - return {}; - } - - }; - }; - - async function convertValueToCoords(middlewareArguments, value) { - const { - placement, - platform, - elements - } = middlewareArguments; - const rtl = await (platform.isRTL == null ? void 0 : platform.isRTL(elements.floating)); - const side = getSide(placement); - const alignment = getAlignment(placement); - const isVertical = getMainAxisFromPlacement(placement) === 'x'; - const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1; - const crossAxisMulti = rtl && isVertical ? -1 : 1; - const rawValue = typeof value === 'function' ? value(middlewareArguments) : value; // eslint-disable-next-line prefer-const - - let { - mainAxis, - crossAxis, - alignmentAxis - } = typeof rawValue === 'number' ? { - mainAxis: rawValue, - crossAxis: 0, - alignmentAxis: null - } : { - mainAxis: 0, - crossAxis: 0, - alignmentAxis: null, - ...rawValue - }; - - if (alignment && typeof alignmentAxis === 'number') { - crossAxis = alignment === 'end' ? alignmentAxis * -1 : alignmentAxis; - } - - return isVertical ? { - x: crossAxis * crossAxisMulti, - y: mainAxis * mainAxisMulti - } : { - x: mainAxis * mainAxisMulti, - y: crossAxis * crossAxisMulti - }; - } - /** - * Displaces the floating element from its reference element. - * @see https://floating-ui.com/docs/offset - */ - - const offset = function (value) { - if (value === void 0) { - value = 0; - } - - return { - name: 'offset', - options: value, - - async fn(middlewareArguments) { - const { - x, - y - } = middlewareArguments; - const diffCoords = await convertValueToCoords(middlewareArguments, value); - return { - x: x + diffCoords.x, - y: y + diffCoords.y, - data: diffCoords - }; - } - - }; - }; - - function getCrossAxis(axis) { - return axis === 'x' ? 'y' : 'x'; - } - - /** - * Shifts the floating element in order to keep it in view when it will overflow - * a clipping boundary. - * @see https://floating-ui.com/docs/shift - */ - const shift = function (options) { - if (options === void 0) { - options = {}; - } - - return { - name: 'shift', - options, - - async fn(middlewareArguments) { - const { - x, - y, - placement - } = middlewareArguments; - const { - mainAxis: checkMainAxis = true, - crossAxis: checkCrossAxis = false, - limiter = { - fn: _ref => { - let { - x, - y - } = _ref; - return { - x, - y - }; - } - }, - ...detectOverflowOptions - } = options; - const coords = { - x, - y - }; - const overflow = await detectOverflow(middlewareArguments, detectOverflowOptions); - const mainAxis = getMainAxisFromPlacement(getSide(placement)); - const crossAxis = getCrossAxis(mainAxis); - let mainAxisCoord = coords[mainAxis]; - let crossAxisCoord = coords[crossAxis]; - - if (checkMainAxis) { - const minSide = mainAxis === 'y' ? 'top' : 'left'; - const maxSide = mainAxis === 'y' ? 'bottom' : 'right'; - const min = mainAxisCoord + overflow[minSide]; - const max = mainAxisCoord - overflow[maxSide]; - mainAxisCoord = within(min, mainAxisCoord, max); - } - - if (checkCrossAxis) { - const minSide = crossAxis === 'y' ? 'top' : 'left'; - const maxSide = crossAxis === 'y' ? 'bottom' : 'right'; - const min = crossAxisCoord + overflow[minSide]; - const max = crossAxisCoord - overflow[maxSide]; - crossAxisCoord = within(min, crossAxisCoord, max); - } - - const limitedCoords = limiter.fn({ ...middlewareArguments, - [mainAxis]: mainAxisCoord, - [crossAxis]: crossAxisCoord - }); - return { ...limitedCoords, - data: { - x: limitedCoords.x - x, - y: limitedCoords.y - y - } - }; - } - - }; - }; - - function isWindow(value) { - return value && value.document && value.location && value.alert && value.setInterval; - } - function getWindow(node) { - if (node == null) { - return window; - } - - if (!isWindow(node)) { - const ownerDocument = node.ownerDocument; - return ownerDocument ? ownerDocument.defaultView || window : window; - } - - return node; - } - - function getComputedStyle$1(element) { - return getWindow(element).getComputedStyle(element); - } - - function getNodeName(node) { - return isWindow(node) ? '' : node ? (node.nodeName || '').toLowerCase() : ''; - } - - function getUAString() { - const uaData = navigator.userAgentData; - - if (uaData != null && uaData.brands) { - return uaData.brands.map(item => item.brand + "/" + item.version).join(' '); - } - - return navigator.userAgent; - } - - function isHTMLElement(value) { - return value instanceof getWindow(value).HTMLElement; - } - function isElement(value) { - return value instanceof getWindow(value).Element; - } - function isNode(value) { - return value instanceof getWindow(value).Node; - } - function isShadowRoot(node) { - // Browsers without `ShadowRoot` support - if (typeof ShadowRoot === 'undefined') { - return false; - } - - const OwnElement = getWindow(node).ShadowRoot; - return node instanceof OwnElement || node instanceof ShadowRoot; - } - function isOverflowElement(element) { - // Firefox wants us to check `-x` and `-y` variations as well - const { - overflow, - overflowX, - overflowY - } = getComputedStyle$1(element); - return /auto|scroll|overlay|hidden/.test(overflow + overflowY + overflowX); - } - function isTableElement(element) { - return ['table', 'td', 'th'].includes(getNodeName(element)); - } - function isContainingBlock(element) { - // TODO: Try and use feature detection here instead - const isFirefox = /firefox/i.test(getUAString()); - const css = getComputedStyle$1(element); // This is non-exhaustive but covers the most common CSS properties that - // create a containing block. - // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block - - return css.transform !== 'none' || css.perspective !== 'none' || // @ts-ignore (TS 4.1 compat) - css.contain === 'paint' || ['transform', 'perspective'].includes(css.willChange) || isFirefox && css.willChange === 'filter' || isFirefox && (css.filter ? css.filter !== 'none' : false); - } - function isLayoutViewport() { - // Not Safari - return !/^((?!chrome|android).)*safari/i.test(getUAString()); // Feature detection for this fails in various ways - // • Always-visible scrollbar or not - // • Width of , etc. - // const vV = win.visualViewport; - // return vV ? Math.abs(win.innerWidth / vV.scale - vV.width) < 0.5 : true; - } - - const min$1 = Math.min; - const max$1 = Math.max; - const round = Math.round; - - function getBoundingClientRect(element, includeScale, isFixedStrategy) { - var _win$visualViewport$o, _win$visualViewport, _win$visualViewport$o2, _win$visualViewport2; - - if (includeScale === void 0) { - includeScale = false; - } - - if (isFixedStrategy === void 0) { - isFixedStrategy = false; - } - - const clientRect = element.getBoundingClientRect(); - let scaleX = 1; - let scaleY = 1; - - if (includeScale && isHTMLElement(element)) { - scaleX = element.offsetWidth > 0 ? round(clientRect.width) / element.offsetWidth || 1 : 1; - scaleY = element.offsetHeight > 0 ? round(clientRect.height) / element.offsetHeight || 1 : 1; - } - - const win = isElement(element) ? getWindow(element) : window; - const addVisualOffsets = !isLayoutViewport() && isFixedStrategy; - const x = (clientRect.left + (addVisualOffsets ? (_win$visualViewport$o = (_win$visualViewport = win.visualViewport) == null ? void 0 : _win$visualViewport.offsetLeft) != null ? _win$visualViewport$o : 0 : 0)) / scaleX; - const y = (clientRect.top + (addVisualOffsets ? (_win$visualViewport$o2 = (_win$visualViewport2 = win.visualViewport) == null ? void 0 : _win$visualViewport2.offsetTop) != null ? _win$visualViewport$o2 : 0 : 0)) / scaleY; - const width = clientRect.width / scaleX; - const height = clientRect.height / scaleY; - return { - width, - height, - top: y, - right: x + width, - bottom: y + height, - left: x, - x, - y - }; - } - - function getDocumentElement(node) { - return ((isNode(node) ? node.ownerDocument : node.document) || window.document).documentElement; - } - - function getNodeScroll(element) { - if (isElement(element)) { - return { - scrollLeft: element.scrollLeft, - scrollTop: element.scrollTop - }; - } - - return { - scrollLeft: element.pageXOffset, - scrollTop: element.pageYOffset - }; - } - - function getWindowScrollBarX(element) { - // If has a CSS width greater than the viewport, then this will be - // incorrect for RTL. - return getBoundingClientRect(getDocumentElement(element)).left + getNodeScroll(element).scrollLeft; - } - - function isScaled(element) { - const rect = getBoundingClientRect(element); - return round(rect.width) !== element.offsetWidth || round(rect.height) !== element.offsetHeight; - } - - function getRectRelativeToOffsetParent(element, offsetParent, strategy) { - const isOffsetParentAnElement = isHTMLElement(offsetParent); - const documentElement = getDocumentElement(offsetParent); - const rect = getBoundingClientRect(element, // @ts-ignore - checked above (TS 4.1 compat) - isOffsetParentAnElement && isScaled(offsetParent), strategy === 'fixed'); - let scroll = { - scrollLeft: 0, - scrollTop: 0 - }; - const offsets = { - x: 0, - y: 0 - }; - - if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') { - if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) { - scroll = getNodeScroll(offsetParent); - } - - if (isHTMLElement(offsetParent)) { - const offsetRect = getBoundingClientRect(offsetParent, true); - offsets.x = offsetRect.x + offsetParent.clientLeft; - offsets.y = offsetRect.y + offsetParent.clientTop; - } else if (documentElement) { - offsets.x = getWindowScrollBarX(documentElement); - } - } - - return { - x: rect.left + scroll.scrollLeft - offsets.x, - y: rect.top + scroll.scrollTop - offsets.y, - width: rect.width, - height: rect.height - }; - } - - function getParentNode(node) { - if (getNodeName(node) === 'html') { - return node; - } - - return (// this is a quicker (but less type safe) way to save quite some bytes from the bundle - // @ts-ignore - node.assignedSlot || // step into the shadow DOM of the parent of a slotted node - node.parentNode || ( // DOM Element detected - isShadowRoot(node) ? node.host : null) || // ShadowRoot detected - getDocumentElement(node) // fallback - - ); - } - - function getTrueOffsetParent(element) { - if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') { - return null; - } - - return composedOffsetParent(element); - } - /** - * Polyfills the old offsetParent behavior from before the spec was changed: - * https://github.com/w3c/csswg-drafts/issues/159 - */ - - - function composedOffsetParent(element) { - let { - offsetParent - } = element; - let ancestor = element; - let foundInsideSlot = false; - - while (ancestor && ancestor !== offsetParent) { - const { - assignedSlot - } = ancestor; - - if (assignedSlot) { - let newOffsetParent = assignedSlot.offsetParent; - - if (getComputedStyle$1(assignedSlot).display === 'contents') { - const hadStyleAttribute = assignedSlot.hasAttribute('style'); - const oldDisplay = assignedSlot.style.display; - assignedSlot.style.display = getComputedStyle$1(ancestor).display; - newOffsetParent = assignedSlot.offsetParent; - assignedSlot.style.display = oldDisplay; - - if (!hadStyleAttribute) { - assignedSlot.removeAttribute('style'); - } - } - - ancestor = assignedSlot; - - if (offsetParent !== newOffsetParent) { - offsetParent = newOffsetParent; - foundInsideSlot = true; - } - } else if (isShadowRoot(ancestor) && ancestor.host && foundInsideSlot) { - break; - } - - ancestor = isShadowRoot(ancestor) && ancestor.host || ancestor.parentNode; - } - - return offsetParent; - } - - function getContainingBlock(element) { - let currentNode = getParentNode(element); - - if (isShadowRoot(currentNode)) { - currentNode = currentNode.host; - } - - while (isHTMLElement(currentNode) && !['html', 'body'].includes(getNodeName(currentNode))) { - if (isContainingBlock(currentNode)) { - return currentNode; - } else { - const parent = currentNode.parentNode; - currentNode = isShadowRoot(parent) ? parent.host : parent; - } - } - - return null; - } // Gets the closest ancestor positioned element. Handles some edge cases, - // such as table ancestors and cross browser bugs. - - - function getOffsetParent(element) { - const window = getWindow(element); - let offsetParent = getTrueOffsetParent(element); - - while (offsetParent && isTableElement(offsetParent) && getComputedStyle$1(offsetParent).position === 'static') { - offsetParent = getTrueOffsetParent(offsetParent); - } - - if (offsetParent && (getNodeName(offsetParent) === 'html' || getNodeName(offsetParent) === 'body' && getComputedStyle$1(offsetParent).position === 'static' && !isContainingBlock(offsetParent))) { - return window; - } - - return offsetParent || getContainingBlock(element) || window; - } - - function getDimensions(element) { - if (isHTMLElement(element)) { - return { - width: element.offsetWidth, - height: element.offsetHeight - }; - } - - const rect = getBoundingClientRect(element); - return { - width: rect.width, - height: rect.height - }; - } - - function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { - let { - rect, - offsetParent, - strategy - } = _ref; - const isOffsetParentAnElement = isHTMLElement(offsetParent); - const documentElement = getDocumentElement(offsetParent); - - if (offsetParent === documentElement) { - return rect; - } - - let scroll = { - scrollLeft: 0, - scrollTop: 0 - }; - const offsets = { - x: 0, - y: 0 - }; - - if (isOffsetParentAnElement || !isOffsetParentAnElement && strategy !== 'fixed') { - if (getNodeName(offsetParent) !== 'body' || isOverflowElement(documentElement)) { - scroll = getNodeScroll(offsetParent); - } - - if (isHTMLElement(offsetParent)) { - const offsetRect = getBoundingClientRect(offsetParent, true); - offsets.x = offsetRect.x + offsetParent.clientLeft; - offsets.y = offsetRect.y + offsetParent.clientTop; - } // This doesn't appear to be need to be negated. - // else if (documentElement) { - // offsets.x = getWindowScrollBarX(documentElement); - // } - - } - - return { ...rect, - x: rect.x - scroll.scrollLeft + offsets.x, - y: rect.y - scroll.scrollTop + offsets.y - }; - } - - function getViewportRect(element, strategy) { - const win = getWindow(element); - const html = getDocumentElement(element); - const visualViewport = win.visualViewport; - let width = html.clientWidth; - let height = html.clientHeight; - let x = 0; - let y = 0; - - if (visualViewport) { - width = visualViewport.width; - height = visualViewport.height; - const layoutViewport = isLayoutViewport(); - - if (layoutViewport || !layoutViewport && strategy === 'fixed') { - x = visualViewport.offsetLeft; - y = visualViewport.offsetTop; - } - } - - return { - width, - height, - x, - y - }; - } - - // of the `` and `` rect bounds if horizontally scrollable - - function getDocumentRect(element) { - var _element$ownerDocumen; - - const html = getDocumentElement(element); - const scroll = getNodeScroll(element); - const body = (_element$ownerDocumen = element.ownerDocument) == null ? void 0 : _element$ownerDocumen.body; - const width = max$1(html.scrollWidth, html.clientWidth, body ? body.scrollWidth : 0, body ? body.clientWidth : 0); - const height = max$1(html.scrollHeight, html.clientHeight, body ? body.scrollHeight : 0, body ? body.clientHeight : 0); - let x = -scroll.scrollLeft + getWindowScrollBarX(element); - const y = -scroll.scrollTop; - - if (getComputedStyle$1(body || html).direction === 'rtl') { - x += max$1(html.clientWidth, body ? body.clientWidth : 0) - width; - } - - return { - width, - height, - x, - y - }; - } - - function getNearestOverflowAncestor(node) { - const parentNode = getParentNode(node); - - if (['html', 'body', '#document'].includes(getNodeName(parentNode))) { - // @ts-ignore assume body is always available - return node.ownerDocument.body; - } - - if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { - return parentNode; - } - - return getNearestOverflowAncestor(parentNode); - } - - function getOverflowAncestors(node, list) { - var _node$ownerDocument; - - if (list === void 0) { - list = []; - } - - const scrollableAncestor = getNearestOverflowAncestor(node); - const isBody = scrollableAncestor === ((_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.body); - const win = getWindow(scrollableAncestor); - const target = isBody ? [win].concat(win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : []) : scrollableAncestor; - const updatedList = list.concat(target); - return isBody ? updatedList : // @ts-ignore: isBody tells us target will be an HTMLElement here - updatedList.concat(getOverflowAncestors(target)); - } - - function contains(parent, child) { - const rootNode = child.getRootNode == null ? void 0 : child.getRootNode(); // First, attempt with faster native method - - if (parent.contains(child)) { - return true; - } // then fallback to custom implementation with Shadow DOM support - else if (rootNode && isShadowRoot(rootNode)) { - let next = child; - - do { - // use `===` replace node.isSameNode() - if (next && parent === next) { - return true; - } // @ts-ignore: need a better way to handle this... - - - next = next.parentNode || next.host; - } while (next); - } - - return false; - } - - function getInnerBoundingClientRect(element, strategy) { - const clientRect = getBoundingClientRect(element, false, strategy === 'fixed'); - const top = clientRect.top + element.clientTop; - const left = clientRect.left + element.clientLeft; - return { - top, - left, - x: left, - y: top, - right: left + element.clientWidth, - bottom: top + element.clientHeight, - width: element.clientWidth, - height: element.clientHeight - }; - } - - function getClientRectFromClippingAncestor(element, clippingParent, strategy) { - if (clippingParent === 'viewport') { - return rectToClientRect(getViewportRect(element, strategy)); - } - - if (isElement(clippingParent)) { - return getInnerBoundingClientRect(clippingParent, strategy); - } - - return rectToClientRect(getDocumentRect(getDocumentElement(element))); - } // A "clipping ancestor" is an overflowable container with the characteristic of - // clipping (or hiding) overflowing elements with a position different from - // `initial` - - - function getClippingAncestors(element) { - const clippingAncestors = getOverflowAncestors(element); - const canEscapeClipping = ['absolute', 'fixed'].includes(getComputedStyle$1(element).position); - const clipperElement = canEscapeClipping && isHTMLElement(element) ? getOffsetParent(element) : element; - - if (!isElement(clipperElement)) { - return []; - } // @ts-ignore isElement check ensures we return Array - - - return clippingAncestors.filter(clippingAncestors => isElement(clippingAncestors) && contains(clippingAncestors, clipperElement) && getNodeName(clippingAncestors) !== 'body'); - } // Gets the maximum area that the element is visible in due to any number of - // clipping ancestors - - - function getClippingRect(_ref) { - let { - element, - boundary, - rootBoundary, - strategy - } = _ref; - const mainClippingAncestors = boundary === 'clippingAncestors' ? getClippingAncestors(element) : [].concat(boundary); - const clippingAncestors = [...mainClippingAncestors, rootBoundary]; - const firstClippingAncestor = clippingAncestors[0]; - const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => { - const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy); - accRect.top = max$1(rect.top, accRect.top); - accRect.right = min$1(rect.right, accRect.right); - accRect.bottom = min$1(rect.bottom, accRect.bottom); - accRect.left = max$1(rect.left, accRect.left); - return accRect; - }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy)); - return { - width: clippingRect.right - clippingRect.left, - height: clippingRect.bottom - clippingRect.top, - x: clippingRect.left, - y: clippingRect.top - }; - } - - const platform = { - getClippingRect, - convertOffsetParentRelativeRectToViewportRelativeRect, - isElement, - getDimensions, - getOffsetParent, - getDocumentElement, - getElementRects: _ref => { - let { - reference, - floating, - strategy - } = _ref; - return { - reference: getRectRelativeToOffsetParent(reference, getOffsetParent(floating), strategy), - floating: { ...getDimensions(floating), - x: 0, - y: 0 - } - }; - }, - getClientRects: element => Array.from(element.getClientRects()), - isRTL: element => getComputedStyle$1(element).direction === 'rtl' - }; - - /** - * Automatically updates the position of the floating element when necessary. - * @see https://floating-ui.com/docs/autoUpdate - */ - function autoUpdate(reference, floating, update, options) { - if (options === void 0) { - options = {}; - } - - const { - ancestorScroll: _ancestorScroll = true, - ancestorResize: _ancestorResize = true, - elementResize = true, - animationFrame = false - } = options; - const ancestorScroll = _ancestorScroll && !animationFrame; - const ancestorResize = _ancestorResize && !animationFrame; - const ancestors = ancestorScroll || ancestorResize ? [...(isElement(reference) ? getOverflowAncestors(reference) : []), ...getOverflowAncestors(floating)] : []; - ancestors.forEach(ancestor => { - ancestorScroll && ancestor.addEventListener('scroll', update, { - passive: true - }); - ancestorResize && ancestor.addEventListener('resize', update); - }); - let observer = null; - - if (elementResize) { - let initialUpdate = true; - observer = new ResizeObserver(() => { - if (!initialUpdate) { - update(); - } - - initialUpdate = false; - }); - isElement(reference) && !animationFrame && observer.observe(reference); - observer.observe(floating); - } - - let frameId; - let prevRefRect = animationFrame ? getBoundingClientRect(reference) : null; - - if (animationFrame) { - frameLoop(); - } - - function frameLoop() { - const nextRefRect = getBoundingClientRect(reference); - - if (prevRefRect && (nextRefRect.x !== prevRefRect.x || nextRefRect.y !== prevRefRect.y || nextRefRect.width !== prevRefRect.width || nextRefRect.height !== prevRefRect.height)) { - update(); - } - - prevRefRect = nextRefRect; - frameId = requestAnimationFrame(frameLoop); - } - - update(); - return () => { - var _observer; - - ancestors.forEach(ancestor => { - ancestorScroll && ancestor.removeEventListener('scroll', update); - ancestorResize && ancestor.removeEventListener('resize', update); - }); - (_observer = observer) == null ? void 0 : _observer.disconnect(); - observer = null; - - if (animationFrame) { - cancelAnimationFrame(frameId); - } - }; - } - - /** - * Computes the `x` and `y` coordinates that will place the floating element - * next to a reference element when it is given a certain CSS positioning - * strategy. - */ - - const computePosition = (reference, floating, options) => computePosition$1(reference, floating, { - platform, - ...options - }); - - const useFloatingProps = buildProps({}); - const unrefReference = (elRef) => { - if (!isClient) - return; - if (!elRef) - return elRef; - const unrefEl = unrefElement(elRef); - if (unrefEl) - return unrefEl; - return vue.isRef(elRef) ? unrefEl : elRef; - }; - const getPositionDataWithUnit = (record, key) => { - const value = record == null ? void 0 : record[key]; - return isNil(value) ? "" : `${value}px`; - }; - const useFloating$1 = ({ - middleware, - placement, - strategy - }) => { - const referenceRef = vue.ref(); - const contentRef = vue.ref(); - const x = vue.ref(); - const y = vue.ref(); - const middlewareData = vue.ref({}); - const states = { - x, - y, - placement, - strategy, - middlewareData - }; - const update = async () => { - if (!isClient) - return; - const referenceEl = unrefReference(referenceRef); - const contentEl = unrefElement(contentRef); - if (!referenceEl || !contentEl) - return; - const data = await computePosition(referenceEl, contentEl, { - placement: vue.unref(placement), - strategy: vue.unref(strategy), - middleware: vue.unref(middleware) - }); - keysOf(states).forEach((key) => { - states[key].value = data[key]; - }); - }; - vue.onMounted(() => { - vue.watchEffect(() => { - update(); - }); - }); - return { - ...states, - update, - referenceRef, - contentRef - }; - }; - const arrowMiddleware = ({ - arrowRef, - padding - }) => { - return { - name: "arrow", - options: { - element: arrowRef, - padding - }, - fn(args) { - const arrowEl = vue.unref(arrowRef); - if (!arrowEl) - return {}; - return arrow({ - element: arrowEl, - padding - }).fn(args); - } - }; - }; - - function useCursor(input) { - let selectionInfo; - function recordCursor() { - if (input.value == void 0) - return; - const { selectionStart, selectionEnd, value } = input.value; - if (selectionStart == null || selectionEnd == null) - return; - const beforeTxt = value.slice(0, Math.max(0, selectionStart)); - const afterTxt = value.slice(Math.max(0, selectionEnd)); - selectionInfo = { - selectionStart, - selectionEnd, - value, - beforeTxt, - afterTxt - }; - } - function setCursor() { - if (input.value == void 0 || selectionInfo == void 0) - return; - const { value } = input.value; - const { beforeTxt, afterTxt, selectionStart } = selectionInfo; - if (beforeTxt == void 0 || afterTxt == void 0 || selectionStart == void 0) - return; - let startPos = value.length; - if (value.endsWith(afterTxt)) { - startPos = value.length - afterTxt.length; - } else if (value.startsWith(beforeTxt)) { - startPos = beforeTxt.length; - } else { - const beforeLastChar = beforeTxt[selectionStart - 1]; - const newIndex = value.indexOf(beforeLastChar, selectionStart - 1); - if (newIndex !== -1) { - startPos = newIndex + 1; - } - } - input.value.setSelectionRange(startPos, startPos); - } - return [recordCursor, setCursor]; - } - - const getOrderedChildren = (vm, childComponentName, children) => { - const nodes = flattedChildren(vm.subTree).filter((n) => { - var _a; - return vue.isVNode(n) && ((_a = n.type) == null ? void 0 : _a.name) === childComponentName && !!n.component; - }); - const uids = nodes.map((n) => n.component.uid); - return uids.map((uid) => children[uid]).filter((p) => !!p); - }; - const useOrderedChildren = (vm, childComponentName) => { - const children = {}; - const orderedChildren = vue.shallowRef([]); - const addChild = (child) => { - children[child.uid] = child; - orderedChildren.value = getOrderedChildren(vm, childComponentName, children); - }; - const removeChild = (uid) => { - delete children[uid]; - orderedChildren.value = orderedChildren.value.filter((children2) => children2.uid !== uid); - }; - return { - children: orderedChildren, - addChild, - removeChild - }; - }; - - const useSizeProp = buildProp({ - type: String, - values: componentSizes, - required: false - }); - const useSizeProps = { - size: useSizeProp - }; - const SIZE_INJECTION_KEY = Symbol("size"); - const useGlobalSize = () => { - const injectedSize = vue.inject(SIZE_INJECTION_KEY, {}); - return vue.computed(() => { - return vue.unref(injectedSize.size) || ""; - }); - }; - - function useFocusController(target, { - beforeFocus, - afterFocus, - beforeBlur, - afterBlur - } = {}) { - const instance = vue.getCurrentInstance(); - const { emit } = instance; - const wrapperRef = vue.shallowRef(); - const isFocused = vue.ref(false); - const handleFocus = (event) => { - const cancelFocus = isFunction$1(beforeFocus) ? beforeFocus(event) : false; - if (cancelFocus || isFocused.value) - return; - isFocused.value = true; - emit("focus", event); - afterFocus == null ? void 0 : afterFocus(); - }; - const handleBlur = (event) => { - var _a; - const cancelBlur = isFunction$1(beforeBlur) ? beforeBlur(event) : false; - if (cancelBlur || event.relatedTarget && ((_a = wrapperRef.value) == null ? void 0 : _a.contains(event.relatedTarget))) - return; - isFocused.value = false; - emit("blur", event); - afterBlur == null ? void 0 : afterBlur(); - }; - const handleClick = () => { - var _a, _b; - if (((_a = wrapperRef.value) == null ? void 0 : _a.contains(document.activeElement)) && wrapperRef.value !== document.activeElement) - return; - (_b = target.value) == null ? void 0 : _b.focus(); - }; - vue.watch(wrapperRef, (el) => { - if (el) { - el.setAttribute("tabindex", "-1"); - } - }); - useEventListener(wrapperRef, "focus", handleFocus, true); - useEventListener(wrapperRef, "blur", handleBlur, true); - useEventListener(wrapperRef, "click", handleClick, true); - return { - isFocused, - wrapperRef, - handleFocus, - handleBlur - }; - } - - function useComposition({ - afterComposition, - emit - }) { - const isComposing = vue.ref(false); - const handleCompositionStart = (event) => { - emit == null ? void 0 : emit("compositionstart", event); - isComposing.value = true; - }; - const handleCompositionUpdate = (event) => { - var _a; - emit == null ? void 0 : emit("compositionupdate", event); - const text = (_a = event.target) == null ? void 0 : _a.value; - const lastCharacter = text[text.length - 1] || ""; - isComposing.value = !isKorean(lastCharacter); - }; - const handleCompositionEnd = (event) => { - emit == null ? void 0 : emit("compositionend", event); - if (isComposing.value) { - isComposing.value = false; - vue.nextTick(() => afterComposition(event)); - } - }; - const handleComposition = (event) => { - event.type === "compositionend" ? handleCompositionEnd(event) : handleCompositionUpdate(event); - }; - return { - isComposing, - handleComposition, - handleCompositionStart, - handleCompositionUpdate, - handleCompositionEnd - }; - } - - const emptyValuesContextKey = Symbol("emptyValuesContextKey"); - const SCOPE$3 = "use-empty-values"; - const DEFAULT_EMPTY_VALUES = ["", void 0, null]; - const DEFAULT_VALUE_ON_CLEAR = void 0; - const useEmptyValuesProps = buildProps({ - emptyValues: Array, - valueOnClear: { - type: [String, Number, Boolean, Function], - default: void 0, - validator: (val) => isFunction$1(val) ? !val() : !val - } - }); - const useEmptyValues = (props, defaultValue) => { - const config = vue.getCurrentInstance() ? vue.inject(emptyValuesContextKey, vue.ref({})) : vue.ref({}); - const emptyValues = vue.computed(() => props.emptyValues || config.value.emptyValues || DEFAULT_EMPTY_VALUES); - const valueOnClear = vue.computed(() => { - if (isFunction$1(props.valueOnClear)) { - return props.valueOnClear(); - } else if (props.valueOnClear !== void 0) { - return props.valueOnClear; - } else if (isFunction$1(config.value.valueOnClear)) { - return config.value.valueOnClear(); - } else if (config.value.valueOnClear !== void 0) { - return config.value.valueOnClear; - } - return defaultValue !== void 0 ? defaultValue : DEFAULT_VALUE_ON_CLEAR; - }); - const isEmptyValue = (value) => { - return emptyValues.value.includes(value); - }; - if (!emptyValues.value.includes(valueOnClear.value)) ; - return { - emptyValues, - valueOnClear, - isEmptyValue - }; - }; - - const ariaProps = buildProps({ - ariaLabel: String, - ariaOrientation: { - type: String, - values: ["horizontal", "vertical", "undefined"] - }, - ariaControls: String - }); - const useAriaProps = (arias) => { - return pick(ariaProps, arias); - }; - - const configProviderContextKey = Symbol(); - - const globalConfig = vue.ref(); - function useGlobalConfig(key, defaultValue = void 0) { - const config = vue.getCurrentInstance() ? vue.inject(configProviderContextKey, globalConfig) : globalConfig; - if (key) { - return vue.computed(() => { - var _a, _b; - return (_b = (_a = config.value) == null ? void 0 : _a[key]) != null ? _b : defaultValue; - }); - } else { - return config; - } - } - function useGlobalComponentSettings(block, sizeFallback) { - const config = useGlobalConfig(); - const ns = useNamespace(block, vue.computed(() => { - var _a; - return ((_a = config.value) == null ? void 0 : _a.namespace) || defaultNamespace; - })); - const locale = useLocale(vue.computed(() => { - var _a; - return (_a = config.value) == null ? void 0 : _a.locale; - })); - const zIndex = useZIndex(vue.computed(() => { - var _a; - return ((_a = config.value) == null ? void 0 : _a.zIndex) || defaultInitialZIndex; - })); - const size = vue.computed(() => { - var _a; - return vue.unref(sizeFallback) || ((_a = config.value) == null ? void 0 : _a.size) || ""; - }); - provideGlobalConfig(vue.computed(() => vue.unref(config) || {})); - return { - ns, - locale, - zIndex, - size - }; - } - const provideGlobalConfig = (config, app, global = false) => { - var _a; - const inSetup = !!vue.getCurrentInstance(); - const oldConfig = inSetup ? useGlobalConfig() : void 0; - const provideFn = (_a = app == null ? void 0 : app.provide) != null ? _a : inSetup ? vue.provide : void 0; - if (!provideFn) { - return; - } - const context = vue.computed(() => { - const cfg = vue.unref(config); - if (!(oldConfig == null ? void 0 : oldConfig.value)) - return cfg; - return mergeConfig(oldConfig.value, cfg); - }); - provideFn(configProviderContextKey, context); - provideFn(localeContextKey, vue.computed(() => context.value.locale)); - provideFn(namespaceContextKey, vue.computed(() => context.value.namespace)); - provideFn(zIndexContextKey, vue.computed(() => context.value.zIndex)); - provideFn(SIZE_INJECTION_KEY, { - size: vue.computed(() => context.value.size || "") - }); - provideFn(emptyValuesContextKey, vue.computed(() => ({ - emptyValues: context.value.emptyValues, - valueOnClear: context.value.valueOnClear - }))); - if (global || !globalConfig.value) { - globalConfig.value = context.value; - } - return context; - }; - const mergeConfig = (a, b) => { - const keys = [.../* @__PURE__ */ new Set([...keysOf(a), ...keysOf(b)])]; - const obj = {}; - for (const key of keys) { - obj[key] = b[key] !== void 0 ? b[key] : a[key]; - } - return obj; - }; - - const configProviderProps = buildProps({ - a11y: { - type: Boolean, - default: true - }, - locale: { - type: definePropType(Object) - }, - size: useSizeProp, - button: { - type: definePropType(Object) - }, - experimentalFeatures: { - type: definePropType(Object) - }, - keyboardNavigation: { - type: Boolean, - default: true - }, - message: { - type: definePropType(Object) - }, - zIndex: Number, - namespace: { - type: String, - default: "el" - }, - ...useEmptyValuesProps - }); - - const messageConfig = {}; - const ConfigProvider = vue.defineComponent({ - name: "ElConfigProvider", - props: configProviderProps, - setup(props, { slots }) { - vue.watch(() => props.message, (val) => { - Object.assign(messageConfig, val != null ? val : {}); - }, { immediate: true, deep: true }); - const config = provideGlobalConfig(props); - return () => vue.renderSlot(slots, "default", { config: config == null ? void 0 : config.value }); - } - }); - - const ElConfigProvider = withInstall(ConfigProvider); - - const version$1 = "2.9.4"; - - const makeInstaller = (components = []) => { - const install = (app, options) => { - if (app[INSTALLED_KEY]) - return; - app[INSTALLED_KEY] = true; - components.forEach((c) => app.use(c)); - if (options) - provideGlobalConfig(options, app, true); - }; - return { - version: version$1, - install - }; - }; - - const affixProps = buildProps({ - zIndex: { - type: definePropType([Number, String]), - default: 100 - }, - target: { - type: String, - default: "" - }, - offset: { - type: Number, - default: 0 - }, - position: { - type: String, - values: ["top", "bottom"], - default: "top" - } - }); - const affixEmits = { - scroll: ({ scrollTop, fixed }) => isNumber(scrollTop) && isBoolean(fixed), - [CHANGE_EVENT]: (fixed) => isBoolean(fixed) - }; - - var _export_sfc = (sfc, props) => { - const target = sfc.__vccOpts || sfc; - for (const [key, val] of props) { - target[key] = val; - } - return target; - }; - - const COMPONENT_NAME$n = "ElAffix"; - const __default__$1R = vue.defineComponent({ - name: COMPONENT_NAME$n - }); - const _sfc_main$2x = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1R, - props: affixProps, - emits: affixEmits, - setup(__props, { expose, emit }) { - const props = __props; - const ns = useNamespace("affix"); - const target = vue.shallowRef(); - const root = vue.shallowRef(); - const scrollContainer = vue.shallowRef(); - const { height: windowHeight } = useWindowSize(); - const { - height: rootHeight, - width: rootWidth, - top: rootTop, - bottom: rootBottom, - update: updateRoot - } = useElementBounding(root, { windowScroll: false }); - const targetRect = useElementBounding(target); - const fixed = vue.ref(false); - const scrollTop = vue.ref(0); - const transform = vue.ref(0); - const rootStyle = vue.computed(() => { - return { - height: fixed.value ? `${rootHeight.value}px` : "", - width: fixed.value ? `${rootWidth.value}px` : "" - }; - }); - const affixStyle = vue.computed(() => { - if (!fixed.value) - return {}; - const offset = props.offset ? addUnit(props.offset) : 0; - return { - height: `${rootHeight.value}px`, - width: `${rootWidth.value}px`, - top: props.position === "top" ? offset : "", - bottom: props.position === "bottom" ? offset : "", - transform: transform.value ? `translateY(${transform.value}px)` : "", - zIndex: props.zIndex - }; - }); - const update = () => { - if (!scrollContainer.value) - return; - scrollTop.value = scrollContainer.value instanceof Window ? document.documentElement.scrollTop : scrollContainer.value.scrollTop || 0; - const { position, target: target2, offset } = props; - const rootHeightOffset = offset + rootHeight.value; - if (position === "top") { - if (target2) { - const difference = targetRect.bottom.value - rootHeightOffset; - fixed.value = offset > rootTop.value && targetRect.bottom.value > 0; - transform.value = difference < 0 ? difference : 0; - } else { - fixed.value = offset > rootTop.value; - } - } else if (target2) { - const difference = windowHeight.value - targetRect.top.value - rootHeightOffset; - fixed.value = windowHeight.value - offset < rootBottom.value && windowHeight.value > targetRect.top.value; - transform.value = difference < 0 ? -difference : 0; - } else { - fixed.value = windowHeight.value - offset < rootBottom.value; - } - }; - const handleScroll = () => { - updateRoot(); - emit("scroll", { - scrollTop: scrollTop.value, - fixed: fixed.value - }); - }; - vue.watch(fixed, (val) => emit("change", val)); - vue.onMounted(() => { - var _a; - if (props.target) { - target.value = (_a = document.querySelector(props.target)) != null ? _a : void 0; - if (!target.value) - throwError(COMPONENT_NAME$n, `Target does not exist: ${props.target}`); - } else { - target.value = document.documentElement; - } - scrollContainer.value = getScrollContainer(root.value, true); - updateRoot(); - }); - useEventListener(scrollContainer, "scroll", handleScroll); - vue.watchEffect(update); - expose({ - update, - updateRoot - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "root", - ref: root, - class: vue.normalizeClass(vue.unref(ns).b()), - style: vue.normalizeStyle(vue.unref(rootStyle)) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass({ [vue.unref(ns).m("fixed")]: fixed.value }), - style: vue.normalizeStyle(vue.unref(affixStyle)) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 6) - ], 6); - }; - } - }); - var Affix = /* @__PURE__ */ _export_sfc(_sfc_main$2x, [["__file", "affix.vue"]]); - - const ElAffix = withInstall(Affix); - - const iconProps = buildProps({ - size: { - type: definePropType([Number, String]) - }, - color: { - type: String - } - }); - - const __default__$1Q = vue.defineComponent({ - name: "ElIcon", - inheritAttrs: false - }); - const _sfc_main$2w = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1Q, - props: iconProps, - setup(__props) { - const props = __props; - const ns = useNamespace("icon"); - const style = vue.computed(() => { - const { size, color } = props; - if (!size && !color) - return {}; - return { - fontSize: isUndefined(size) ? void 0 : addUnit(size), - "--color": color - }; - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("i", vue.mergeProps({ - class: vue.unref(ns).b(), - style: vue.unref(style) - }, _ctx.$attrs), [ - vue.renderSlot(_ctx.$slots, "default") - ], 16); - }; - } - }); - var Icon = /* @__PURE__ */ _export_sfc(_sfc_main$2w, [["__file", "icon.vue"]]); - - const ElIcon = withInstall(Icon); - - const alertEffects = ["light", "dark"]; - const alertProps = buildProps({ - title: { - type: String, - default: "" - }, - description: { - type: String, - default: "" - }, - type: { - type: String, - values: keysOf(TypeComponentsMap), - default: "info" - }, - closable: { - type: Boolean, - default: true - }, - closeText: { - type: String, - default: "" - }, - showIcon: Boolean, - center: Boolean, - effect: { - type: String, - values: alertEffects, - default: "light" - } - }); - const alertEmits = { - close: (evt) => evt instanceof MouseEvent - }; - - const __default__$1P = vue.defineComponent({ - name: "ElAlert" - }); - const _sfc_main$2v = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1P, - props: alertProps, - emits: alertEmits, - setup(__props, { emit }) { - const props = __props; - const { Close } = TypeComponents; - const slots = vue.useSlots(); - const ns = useNamespace("alert"); - const visible = vue.ref(true); - const iconComponent = vue.computed(() => TypeComponentsMap[props.type]); - const hasDesc = vue.computed(() => !!(props.description || slots.default)); - const close = (evt) => { - visible.value = false; - emit("close", evt); - }; - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.Transition, { - name: vue.unref(ns).b("fade"), - persisted: "" - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createElementVNode("div", { - class: vue.normalizeClass([vue.unref(ns).b(), vue.unref(ns).m(_ctx.type), vue.unref(ns).is("center", _ctx.center), vue.unref(ns).is(_ctx.effect)]), - role: "alert" - }, [ - _ctx.showIcon && vue.unref(iconComponent) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass([vue.unref(ns).e("icon"), { [vue.unref(ns).is("big")]: vue.unref(hasDesc) }]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(iconComponent)))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("content")) - }, [ - _ctx.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - class: vue.normalizeClass([vue.unref(ns).e("title"), { "with-description": vue.unref(hasDesc) }]) - }, [ - vue.renderSlot(_ctx.$slots, "title", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.title), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.unref(hasDesc) ? (vue.openBlock(), vue.createElementBlock("p", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("description")) - }, [ - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.description), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - _ctx.closable ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [ - _ctx.closeText ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass([vue.unref(ns).e("close-btn"), vue.unref(ns).is("customed")]), - onClick: close - }, vue.toDisplayString(_ctx.closeText), 3)) : (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("close-btn")), - onClick: close - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(Close)) - ]), - _: 1 - }, 8, ["class"])) - ], 64)) : vue.createCommentVNode("v-if", true) - ], 2) - ], 2), [ - [vue.vShow, visible.value] - ]) - ]), - _: 3 - }, 8, ["name"]); - }; - } - }); - var Alert = /* @__PURE__ */ _export_sfc(_sfc_main$2v, [["__file", "alert.vue"]]); - - const ElAlert = withInstall(Alert); - - const formContextKey = Symbol("formContextKey"); - const formItemContextKey = Symbol("formItemContextKey"); - - const useFormSize = (fallback, ignore = {}) => { - const emptyRef = vue.ref(void 0); - const size = ignore.prop ? emptyRef : useProp("size"); - const globalConfig = ignore.global ? emptyRef : useGlobalSize(); - const form = ignore.form ? { size: void 0 } : vue.inject(formContextKey, void 0); - const formItem = ignore.formItem ? { size: void 0 } : vue.inject(formItemContextKey, void 0); - return vue.computed(() => size.value || vue.unref(fallback) || (formItem == null ? void 0 : formItem.size) || (form == null ? void 0 : form.size) || globalConfig.value || ""); - }; - const useFormDisabled = (fallback) => { - const disabled = useProp("disabled"); - const form = vue.inject(formContextKey, void 0); - return vue.computed(() => disabled.value || vue.unref(fallback) || (form == null ? void 0 : form.disabled) || false); - }; - const useSize = useFormSize; - const useDisabled = useFormDisabled; - - const useFormItem = () => { - const form = vue.inject(formContextKey, void 0); - const formItem = vue.inject(formItemContextKey, void 0); - return { - form, - formItem - }; - }; - const useFormItemInputId = (props, { - formItemContext, - disableIdGeneration, - disableIdManagement - }) => { - if (!disableIdGeneration) { - disableIdGeneration = vue.ref(false); - } - if (!disableIdManagement) { - disableIdManagement = vue.ref(false); - } - const inputId = vue.ref(); - let idUnwatch = void 0; - const isLabeledByFormItem = vue.computed(() => { - var _a; - return !!(!(props.label || props.ariaLabel) && formItemContext && formItemContext.inputIds && ((_a = formItemContext.inputIds) == null ? void 0 : _a.length) <= 1); - }); - vue.onMounted(() => { - idUnwatch = vue.watch([vue.toRef(props, "id"), disableIdGeneration], ([id, disableIdGeneration2]) => { - const newId = id != null ? id : !disableIdGeneration2 ? useId().value : void 0; - if (newId !== inputId.value) { - if (formItemContext == null ? void 0 : formItemContext.removeInputId) { - inputId.value && formItemContext.removeInputId(inputId.value); - if (!(disableIdManagement == null ? void 0 : disableIdManagement.value) && !disableIdGeneration2 && newId) { - formItemContext.addInputId(newId); - } - } - inputId.value = newId; - } - }, { immediate: true }); - }); - vue.onUnmounted(() => { - idUnwatch && idUnwatch(); - if (formItemContext == null ? void 0 : formItemContext.removeInputId) { - inputId.value && formItemContext.removeInputId(inputId.value); - } - }); - return { - isLabeledByFormItem, - inputId - }; - }; - - const formMetaProps = buildProps({ - size: { - type: String, - values: componentSizes - }, - disabled: Boolean - }); - const formProps = buildProps({ - ...formMetaProps, - model: Object, - rules: { - type: definePropType(Object) - }, - labelPosition: { - type: String, - values: ["left", "right", "top"], - default: "right" - }, - requireAsteriskPosition: { - type: String, - values: ["left", "right"], - default: "left" - }, - labelWidth: { - type: [String, Number], - default: "" - }, - labelSuffix: { - type: String, - default: "" - }, - inline: Boolean, - inlineMessage: Boolean, - statusIcon: Boolean, - showMessage: { - type: Boolean, - default: true - }, - validateOnRuleChange: { - type: Boolean, - default: true - }, - hideRequiredAsterisk: Boolean, - scrollToError: Boolean, - scrollIntoViewOptions: { - type: [Object, Boolean] - } - }); - const formEmits = { - validate: (prop, isValid, message) => (isArray$1(prop) || isString$1(prop)) && isBoolean(isValid) && isString$1(message) - }; - - function useFormLabelWidth() { - const potentialLabelWidthArr = vue.ref([]); - const autoLabelWidth = vue.computed(() => { - if (!potentialLabelWidthArr.value.length) - return "0"; - const max = Math.max(...potentialLabelWidthArr.value); - return max ? `${max}px` : ""; - }); - function getLabelWidthIndex(width) { - const index = potentialLabelWidthArr.value.indexOf(width); - if (index === -1 && autoLabelWidth.value === "0") ; - return index; - } - function registerLabelWidth(val, oldVal) { - if (val && oldVal) { - const index = getLabelWidthIndex(oldVal); - potentialLabelWidthArr.value.splice(index, 1, val); - } else if (val) { - potentialLabelWidthArr.value.push(val); - } - } - function deregisterLabelWidth(val) { - const index = getLabelWidthIndex(val); - if (index > -1) { - potentialLabelWidthArr.value.splice(index, 1); - } - } - return { - autoLabelWidth, - registerLabelWidth, - deregisterLabelWidth - }; - } - const filterFields = (fields, props) => { - const normalized = castArray$1(props); - return normalized.length > 0 ? fields.filter((field) => field.prop && normalized.includes(field.prop)) : fields; - }; - - const COMPONENT_NAME$m = "ElForm"; - const __default__$1O = vue.defineComponent({ - name: COMPONENT_NAME$m - }); - const _sfc_main$2u = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1O, - props: formProps, - emits: formEmits, - setup(__props, { expose, emit }) { - const props = __props; - const fields = []; - const formSize = useFormSize(); - const ns = useNamespace("form"); - const formClasses = vue.computed(() => { - const { labelPosition, inline } = props; - return [ - ns.b(), - ns.m(formSize.value || "default"), - { - [ns.m(`label-${labelPosition}`)]: labelPosition, - [ns.m("inline")]: inline - } - ]; - }); - const getField = (prop) => { - return fields.find((field) => field.prop === prop); - }; - const addField = (field) => { - fields.push(field); - }; - const removeField = (field) => { - if (field.prop) { - fields.splice(fields.indexOf(field), 1); - } - }; - const resetFields = (properties = []) => { - if (!props.model) { - return; - } - filterFields(fields, properties).forEach((field) => field.resetField()); - }; - const clearValidate = (props2 = []) => { - filterFields(fields, props2).forEach((field) => field.clearValidate()); - }; - const isValidatable = vue.computed(() => { - const hasModel = !!props.model; - return hasModel; - }); - const obtainValidateFields = (props2) => { - if (fields.length === 0) - return []; - const filteredFields = filterFields(fields, props2); - if (!filteredFields.length) { - return []; - } - return filteredFields; - }; - const validate = async (callback) => validateField(void 0, callback); - const doValidateField = async (props2 = []) => { - if (!isValidatable.value) - return false; - const fields2 = obtainValidateFields(props2); - if (fields2.length === 0) - return true; - let validationErrors = {}; - for (const field of fields2) { - try { - await field.validate(""); - if (field.validateState === "error") - field.resetField(); - } catch (fields3) { - validationErrors = { - ...validationErrors, - ...fields3 - }; - } - } - if (Object.keys(validationErrors).length === 0) - return true; - return Promise.reject(validationErrors); - }; - const validateField = async (modelProps = [], callback) => { - const shouldThrow = !isFunction$1(callback); - try { - const result = await doValidateField(modelProps); - if (result === true) { - await (callback == null ? void 0 : callback(result)); - } - return result; - } catch (e) { - if (e instanceof Error) - throw e; - const invalidFields = e; - if (props.scrollToError) { - scrollToField(Object.keys(invalidFields)[0]); - } - await (callback == null ? void 0 : callback(false, invalidFields)); - return shouldThrow && Promise.reject(invalidFields); - } - }; - const scrollToField = (prop) => { - var _a; - const field = filterFields(fields, prop)[0]; - if (field) { - (_a = field.$el) == null ? void 0 : _a.scrollIntoView(props.scrollIntoViewOptions); - } - }; - vue.watch(() => props.rules, () => { - if (props.validateOnRuleChange) { - validate().catch((err) => debugWarn()); - } - }, { deep: true, flush: "post" }); - vue.provide(formContextKey, vue.reactive({ - ...vue.toRefs(props), - emit, - resetFields, - clearValidate, - validateField, - getField, - addField, - removeField, - ...useFormLabelWidth() - })); - expose({ - validate, - validateField, - resetFields, - clearValidate, - scrollToField, - fields - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("form", { - class: vue.normalizeClass(vue.unref(formClasses)) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2); - }; - } - }); - var Form = /* @__PURE__ */ _export_sfc(_sfc_main$2u, [["__file", "form.vue"]]); - - function _extends() { - _extends = Object.assign ? Object.assign.bind() : function(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - return target; - }; - return _extends.apply(this, arguments); - } - function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); - } - function _getPrototypeOf(o) { - _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function _getPrototypeOf2(o2) { - return o2.__proto__ || Object.getPrototypeOf(o2); - }; - return _getPrototypeOf(o); - } - function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) { - o2.__proto__ = p2; - return o2; - }; - return _setPrototypeOf(o, p); - } - function _isNativeReflectConstruct() { - if (typeof Reflect === "undefined" || !Reflect.construct) - return false; - if (Reflect.construct.sham) - return false; - if (typeof Proxy === "function") - return true; - try { - Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function() { - })); - return true; - } catch (e) { - return false; - } - } - function _construct(Parent, args, Class) { - if (_isNativeReflectConstruct()) { - _construct = Reflect.construct.bind(); - } else { - _construct = function _construct2(Parent2, args2, Class2) { - var a = [null]; - a.push.apply(a, args2); - var Constructor = Function.bind.apply(Parent2, a); - var instance = new Constructor(); - if (Class2) - _setPrototypeOf(instance, Class2.prototype); - return instance; - }; - } - return _construct.apply(null, arguments); - } - function _isNativeFunction(fn) { - return Function.toString.call(fn).indexOf("[native code]") !== -1; - } - function _wrapNativeSuper(Class) { - var _cache = typeof Map === "function" ? /* @__PURE__ */ new Map() : void 0; - _wrapNativeSuper = function _wrapNativeSuper2(Class2) { - if (Class2 === null || !_isNativeFunction(Class2)) - return Class2; - if (typeof Class2 !== "function") { - throw new TypeError("Super expression must either be null or a function"); - } - if (typeof _cache !== "undefined") { - if (_cache.has(Class2)) - return _cache.get(Class2); - _cache.set(Class2, Wrapper); - } - function Wrapper() { - return _construct(Class2, arguments, _getPrototypeOf(this).constructor); - } - Wrapper.prototype = Object.create(Class2.prototype, { - constructor: { - value: Wrapper, - enumerable: false, - writable: true, - configurable: true - } - }); - return _setPrototypeOf(Wrapper, Class2); - }; - return _wrapNativeSuper(Class); - } - var formatRegExp = /%[sdj%]/g; - var warning = function warning2() { - }; - if (typeof process !== "undefined" && process.env && false) { - warning = function warning3(type4, errors) { - if (typeof console !== "undefined" && console.warn && typeof ASYNC_VALIDATOR_NO_WARNING === "undefined") { - if (errors.every(function(e) { - return typeof e === "string"; - })) { - console.warn(type4, errors); - } - } - }; - } - function convertFieldsError(errors) { - if (!errors || !errors.length) - return null; - var fields = {}; - errors.forEach(function(error) { - var field = error.field; - fields[field] = fields[field] || []; - fields[field].push(error); - }); - return fields; - } - function format(template) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - var i = 0; - var len = args.length; - if (typeof template === "function") { - return template.apply(null, args); - } - if (typeof template === "string") { - var str = template.replace(formatRegExp, function(x) { - if (x === "%%") { - return "%"; - } - if (i >= len) { - return x; - } - switch (x) { - case "%s": - return String(args[i++]); - case "%d": - return Number(args[i++]); - case "%j": - try { - return JSON.stringify(args[i++]); - } catch (_) { - return "[Circular]"; - } - break; - default: - return x; - } - }); - return str; - } - return template; - } - function isNativeStringType(type4) { - return type4 === "string" || type4 === "url" || type4 === "hex" || type4 === "email" || type4 === "date" || type4 === "pattern"; - } - function isEmptyValue(value, type4) { - if (value === void 0 || value === null) { - return true; - } - if (type4 === "array" && Array.isArray(value) && !value.length) { - return true; - } - if (isNativeStringType(type4) && typeof value === "string" && !value) { - return true; - } - return false; - } - function asyncParallelArray(arr, func, callback) { - var results = []; - var total = 0; - var arrLength = arr.length; - function count(errors) { - results.push.apply(results, errors || []); - total++; - if (total === arrLength) { - callback(results); - } - } - arr.forEach(function(a) { - func(a, count); - }); - } - function asyncSerialArray(arr, func, callback) { - var index = 0; - var arrLength = arr.length; - function next(errors) { - if (errors && errors.length) { - callback(errors); - return; - } - var original = index; - index = index + 1; - if (original < arrLength) { - func(arr[original], next); - } else { - callback([]); - } - } - next([]); - } - function flattenObjArr(objArr) { - var ret = []; - Object.keys(objArr).forEach(function(k) { - ret.push.apply(ret, objArr[k] || []); - }); - return ret; - } - var AsyncValidationError = /* @__PURE__ */ function(_Error) { - _inheritsLoose(AsyncValidationError2, _Error); - function AsyncValidationError2(errors, fields) { - var _this; - _this = _Error.call(this, "Async Validation Error") || this; - _this.errors = errors; - _this.fields = fields; - return _this; - } - return AsyncValidationError2; - }(/* @__PURE__ */ _wrapNativeSuper(Error)); - function asyncMap(objArr, option, func, callback, source) { - if (option.first) { - var _pending = new Promise(function(resolve, reject) { - var next = function next2(errors) { - callback(errors); - return errors.length ? reject(new AsyncValidationError(errors, convertFieldsError(errors))) : resolve(source); - }; - var flattenArr = flattenObjArr(objArr); - asyncSerialArray(flattenArr, func, next); - }); - _pending["catch"](function(e) { - return e; - }); - return _pending; - } - var firstFields = option.firstFields === true ? Object.keys(objArr) : option.firstFields || []; - var objArrKeys = Object.keys(objArr); - var objArrLength = objArrKeys.length; - var total = 0; - var results = []; - var pending = new Promise(function(resolve, reject) { - var next = function next2(errors) { - results.push.apply(results, errors); - total++; - if (total === objArrLength) { - callback(results); - return results.length ? reject(new AsyncValidationError(results, convertFieldsError(results))) : resolve(source); - } - }; - if (!objArrKeys.length) { - callback(results); - resolve(source); - } - objArrKeys.forEach(function(key) { - var arr = objArr[key]; - if (firstFields.indexOf(key) !== -1) { - asyncSerialArray(arr, func, next); - } else { - asyncParallelArray(arr, func, next); - } - }); - }); - pending["catch"](function(e) { - return e; - }); - return pending; - } - function isErrorObj(obj) { - return !!(obj && obj.message !== void 0); - } - function getValue(value, path) { - var v = value; - for (var i = 0; i < path.length; i++) { - if (v == void 0) { - return v; - } - v = v[path[i]]; - } - return v; - } - function complementError(rule, source) { - return function(oe) { - var fieldValue; - if (rule.fullFields) { - fieldValue = getValue(source, rule.fullFields); - } else { - fieldValue = source[oe.field || rule.fullField]; - } - if (isErrorObj(oe)) { - oe.field = oe.field || rule.fullField; - oe.fieldValue = fieldValue; - return oe; - } - return { - message: typeof oe === "function" ? oe() : oe, - fieldValue, - field: oe.field || rule.fullField - }; - }; - } - function deepMerge(target, source) { - if (source) { - for (var s in source) { - if (source.hasOwnProperty(s)) { - var value = source[s]; - if (typeof value === "object" && typeof target[s] === "object") { - target[s] = _extends({}, target[s], value); - } else { - target[s] = value; - } - } - } - } - return target; - } - var required$1 = function required(rule, value, source, errors, options, type4) { - if (rule.required && (!source.hasOwnProperty(rule.field) || isEmptyValue(value, type4 || rule.type))) { - errors.push(format(options.messages.required, rule.fullField)); - } - }; - var whitespace = function whitespace2(rule, value, source, errors, options) { - if (/^\s+$/.test(value) || value === "") { - errors.push(format(options.messages.whitespace, rule.fullField)); - } - }; - var urlReg; - var getUrlRegex = function() { - if (urlReg) { - return urlReg; - } - var word = "[a-fA-F\\d:]"; - var b = function b2(options) { - return options && options.includeBoundaries ? "(?:(?<=\\s|^)(?=" + word + ")|(?<=" + word + ")(?=\\s|$))" : ""; - }; - var v4 = "(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]\\d|\\d)){3}"; - var v6seg = "[a-fA-F\\d]{1,4}"; - var v6 = ("\n(?:\n(?:" + v6seg + ":){7}(?:" + v6seg + "|:)| // 1:2:3:4:5:6:7:: 1:2:3:4:5:6:7:8\n(?:" + v6seg + ":){6}(?:" + v4 + "|:" + v6seg + "|:)| // 1:2:3:4:5:6:: 1:2:3:4:5:6::8 1:2:3:4:5:6::8 1:2:3:4:5:6::1.2.3.4\n(?:" + v6seg + ":){5}(?::" + v4 + "|(?::" + v6seg + "){1,2}|:)| // 1:2:3:4:5:: 1:2:3:4:5::7:8 1:2:3:4:5::8 1:2:3:4:5::7:1.2.3.4\n(?:" + v6seg + ":){4}(?:(?::" + v6seg + "){0,1}:" + v4 + "|(?::" + v6seg + "){1,3}|:)| // 1:2:3:4:: 1:2:3:4::6:7:8 1:2:3:4::8 1:2:3:4::6:7:1.2.3.4\n(?:" + v6seg + ":){3}(?:(?::" + v6seg + "){0,2}:" + v4 + "|(?::" + v6seg + "){1,4}|:)| // 1:2:3:: 1:2:3::5:6:7:8 1:2:3::8 1:2:3::5:6:7:1.2.3.4\n(?:" + v6seg + ":){2}(?:(?::" + v6seg + "){0,3}:" + v4 + "|(?::" + v6seg + "){1,5}|:)| // 1:2:: 1:2::4:5:6:7:8 1:2::8 1:2::4:5:6:7:1.2.3.4\n(?:" + v6seg + ":){1}(?:(?::" + v6seg + "){0,4}:" + v4 + "|(?::" + v6seg + "){1,6}|:)| // 1:: 1::3:4:5:6:7:8 1::8 1::3:4:5:6:7:1.2.3.4\n(?::(?:(?::" + v6seg + "){0,5}:" + v4 + "|(?::" + v6seg + "){1,7}|:)) // ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 ::1.2.3.4\n)(?:%[0-9a-zA-Z]{1,})? // %eth0 %1\n").replace(/\s*\/\/.*$/gm, "").replace(/\n/g, "").trim(); - var v46Exact = new RegExp("(?:^" + v4 + "$)|(?:^" + v6 + "$)"); - var v4exact = new RegExp("^" + v4 + "$"); - var v6exact = new RegExp("^" + v6 + "$"); - var ip = function ip2(options) { - return options && options.exact ? v46Exact : new RegExp("(?:" + b(options) + v4 + b(options) + ")|(?:" + b(options) + v6 + b(options) + ")", "g"); - }; - ip.v4 = function(options) { - return options && options.exact ? v4exact : new RegExp("" + b(options) + v4 + b(options), "g"); - }; - ip.v6 = function(options) { - return options && options.exact ? v6exact : new RegExp("" + b(options) + v6 + b(options), "g"); - }; - var protocol = "(?:(?:[a-z]+:)?//)"; - var auth = "(?:\\S+(?::\\S*)?@)?"; - var ipv4 = ip.v4().source; - var ipv6 = ip.v6().source; - var host = "(?:(?:[a-z\\u00a1-\\uffff0-9][-_]*)*[a-z\\u00a1-\\uffff0-9]+)"; - var domain = "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*"; - var tld = "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,}))"; - var port = "(?::\\d{2,5})?"; - var path = '(?:[/?#][^\\s"]*)?'; - var regex = "(?:" + protocol + "|www\\.)" + auth + "(?:localhost|" + ipv4 + "|" + ipv6 + "|" + host + domain + tld + ")" + port + path; - urlReg = new RegExp("(?:^" + regex + "$)", "i"); - return urlReg; - }; - var pattern$2 = { - email: /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+\.)+[a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]{2,}))$/, - hex: /^#?([a-f0-9]{6}|[a-f0-9]{3})$/i - }; - var types = { - integer: function integer(value) { - return types.number(value) && parseInt(value, 10) === value; - }, - "float": function float(value) { - return types.number(value) && !types.integer(value); - }, - array: function array(value) { - return Array.isArray(value); - }, - regexp: function regexp(value) { - if (value instanceof RegExp) { - return true; - } - try { - return !!new RegExp(value); - } catch (e) { - return false; - } - }, - date: function date(value) { - return typeof value.getTime === "function" && typeof value.getMonth === "function" && typeof value.getYear === "function" && !isNaN(value.getTime()); - }, - number: function number(value) { - if (isNaN(value)) { - return false; - } - return typeof value === "number"; - }, - object: function object(value) { - return typeof value === "object" && !types.array(value); - }, - method: function method(value) { - return typeof value === "function"; - }, - email: function email(value) { - return typeof value === "string" && value.length <= 320 && !!value.match(pattern$2.email); - }, - url: function url(value) { - return typeof value === "string" && value.length <= 2048 && !!value.match(getUrlRegex()); - }, - hex: function hex(value) { - return typeof value === "string" && !!value.match(pattern$2.hex); - } - }; - var type$1 = function type(rule, value, source, errors, options) { - if (rule.required && value === void 0) { - required$1(rule, value, source, errors, options); - return; - } - var custom = ["integer", "float", "array", "regexp", "object", "method", "email", "number", "date", "url", "hex"]; - var ruleType = rule.type; - if (custom.indexOf(ruleType) > -1) { - if (!types[ruleType](value)) { - errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); - } - } else if (ruleType && typeof value !== rule.type) { - errors.push(format(options.messages.types[ruleType], rule.fullField, rule.type)); - } - }; - var range = function range2(rule, value, source, errors, options) { - var len = typeof rule.len === "number"; - var min = typeof rule.min === "number"; - var max = typeof rule.max === "number"; - var val = value; - var key = null; - var num = typeof value === "number"; - var str = typeof value === "string"; - var arr = Array.isArray(value); - if (num) { - key = "number"; - } else if (str) { - key = "string"; - } else if (arr) { - key = "array"; - } - if (!key) { - return false; - } - if (arr) { - val = value.length; - } - if (str) { - val = value.length; - } - if (len) { - if (val !== rule.len) { - errors.push(format(options.messages[key].len, rule.fullField, rule.len)); - } - } else if (min && !max && val < rule.min) { - errors.push(format(options.messages[key].min, rule.fullField, rule.min)); - } else if (max && !min && val > rule.max) { - errors.push(format(options.messages[key].max, rule.fullField, rule.max)); - } else if (min && max && (val < rule.min || val > rule.max)) { - errors.push(format(options.messages[key].range, rule.fullField, rule.min, rule.max)); - } - }; - var ENUM$1 = "enum"; - var enumerable$1 = function enumerable(rule, value, source, errors, options) { - rule[ENUM$1] = Array.isArray(rule[ENUM$1]) ? rule[ENUM$1] : []; - if (rule[ENUM$1].indexOf(value) === -1) { - errors.push(format(options.messages[ENUM$1], rule.fullField, rule[ENUM$1].join(", "))); - } - }; - var pattern$1 = function pattern(rule, value, source, errors, options) { - if (rule.pattern) { - if (rule.pattern instanceof RegExp) { - rule.pattern.lastIndex = 0; - if (!rule.pattern.test(value)) { - errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)); - } - } else if (typeof rule.pattern === "string") { - var _pattern = new RegExp(rule.pattern); - if (!_pattern.test(value)) { - errors.push(format(options.messages.pattern.mismatch, rule.fullField, value, rule.pattern)); - } - } - } - }; - var rules = { - required: required$1, - whitespace, - type: type$1, - range, - "enum": enumerable$1, - pattern: pattern$1 - }; - var string = function string2(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value, "string") && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options, "string"); - if (!isEmptyValue(value, "string")) { - rules.type(rule, value, source, errors, options); - rules.range(rule, value, source, errors, options); - rules.pattern(rule, value, source, errors, options); - if (rule.whitespace === true) { - rules.whitespace(rule, value, source, errors, options); - } - } - } - callback(errors); - }; - var method2 = function method3(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - if (value !== void 0) { - rules.type(rule, value, source, errors, options); - } - } - callback(errors); - }; - var number2 = function number3(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (value === "") { - value = void 0; - } - if (isEmptyValue(value) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - if (value !== void 0) { - rules.type(rule, value, source, errors, options); - rules.range(rule, value, source, errors, options); - } - } - callback(errors); - }; - var _boolean = function _boolean2(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - if (value !== void 0) { - rules.type(rule, value, source, errors, options); - } - } - callback(errors); - }; - var regexp2 = function regexp3(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - if (!isEmptyValue(value)) { - rules.type(rule, value, source, errors, options); - } - } - callback(errors); - }; - var integer2 = function integer3(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - if (value !== void 0) { - rules.type(rule, value, source, errors, options); - rules.range(rule, value, source, errors, options); - } - } - callback(errors); - }; - var floatFn = function floatFn2(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - if (value !== void 0) { - rules.type(rule, value, source, errors, options); - rules.range(rule, value, source, errors, options); - } - } - callback(errors); - }; - var array2 = function array3(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if ((value === void 0 || value === null) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options, "array"); - if (value !== void 0 && value !== null) { - rules.type(rule, value, source, errors, options); - rules.range(rule, value, source, errors, options); - } - } - callback(errors); - }; - var object2 = function object3(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - if (value !== void 0) { - rules.type(rule, value, source, errors, options); - } - } - callback(errors); - }; - var ENUM = "enum"; - var enumerable2 = function enumerable3(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - if (value !== void 0) { - rules[ENUM](rule, value, source, errors, options); - } - } - callback(errors); - }; - var pattern2 = function pattern3(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value, "string") && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - if (!isEmptyValue(value, "string")) { - rules.pattern(rule, value, source, errors, options); - } - } - callback(errors); - }; - var date2 = function date3(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value, "date") && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - if (!isEmptyValue(value, "date")) { - var dateObject; - if (value instanceof Date) { - dateObject = value; - } else { - dateObject = new Date(value); - } - rules.type(rule, dateObject, source, errors, options); - if (dateObject) { - rules.range(rule, dateObject.getTime(), source, errors, options); - } - } - } - callback(errors); - }; - var required2 = function required3(rule, value, callback, source, options) { - var errors = []; - var type4 = Array.isArray(value) ? "array" : typeof value; - rules.required(rule, value, source, errors, options, type4); - callback(errors); - }; - var type2 = function type3(rule, value, callback, source, options) { - var ruleType = rule.type; - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value, ruleType) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options, ruleType); - if (!isEmptyValue(value, ruleType)) { - rules.type(rule, value, source, errors, options); - } - } - callback(errors); - }; - var any = function any2(rule, value, callback, source, options) { - var errors = []; - var validate = rule.required || !rule.required && source.hasOwnProperty(rule.field); - if (validate) { - if (isEmptyValue(value) && !rule.required) { - return callback(); - } - rules.required(rule, value, source, errors, options); - } - callback(errors); - }; - var validators = { - string, - method: method2, - number: number2, - "boolean": _boolean, - regexp: regexp2, - integer: integer2, - "float": floatFn, - array: array2, - object: object2, - "enum": enumerable2, - pattern: pattern2, - date: date2, - url: type2, - hex: type2, - email: type2, - required: required2, - any - }; - function newMessages() { - return { - "default": "Validation error on field %s", - required: "%s is required", - "enum": "%s must be one of %s", - whitespace: "%s cannot be empty", - date: { - format: "%s date %s is invalid for format %s", - parse: "%s date could not be parsed, %s is invalid ", - invalid: "%s date %s is invalid" - }, - types: { - string: "%s is not a %s", - method: "%s is not a %s (function)", - array: "%s is not an %s", - object: "%s is not an %s", - number: "%s is not a %s", - date: "%s is not a %s", - "boolean": "%s is not a %s", - integer: "%s is not an %s", - "float": "%s is not a %s", - regexp: "%s is not a valid %s", - email: "%s is not a valid %s", - url: "%s is not a valid %s", - hex: "%s is not a valid %s" - }, - string: { - len: "%s must be exactly %s characters", - min: "%s must be at least %s characters", - max: "%s cannot be longer than %s characters", - range: "%s must be between %s and %s characters" - }, - number: { - len: "%s must equal %s", - min: "%s cannot be less than %s", - max: "%s cannot be greater than %s", - range: "%s must be between %s and %s" - }, - array: { - len: "%s must be exactly %s in length", - min: "%s cannot be less than %s in length", - max: "%s cannot be greater than %s in length", - range: "%s must be between %s and %s in length" - }, - pattern: { - mismatch: "%s value %s does not match pattern %s" - }, - clone: function clone() { - var cloned = JSON.parse(JSON.stringify(this)); - cloned.clone = this.clone; - return cloned; - } - }; - } - var messages = newMessages(); - var Schema = /* @__PURE__ */ function() { - function Schema2(descriptor) { - this.rules = null; - this._messages = messages; - this.define(descriptor); - } - var _proto = Schema2.prototype; - _proto.define = function define(rules2) { - var _this = this; - if (!rules2) { - throw new Error("Cannot configure a schema with no rules"); - } - if (typeof rules2 !== "object" || Array.isArray(rules2)) { - throw new Error("Rules must be an object"); - } - this.rules = {}; - Object.keys(rules2).forEach(function(name) { - var item = rules2[name]; - _this.rules[name] = Array.isArray(item) ? item : [item]; - }); - }; - _proto.messages = function messages2(_messages) { - if (_messages) { - this._messages = deepMerge(newMessages(), _messages); - } - return this._messages; - }; - _proto.validate = function validate(source_, o, oc) { - var _this2 = this; - if (o === void 0) { - o = {}; - } - if (oc === void 0) { - oc = function oc2() { - }; - } - var source = source_; - var options = o; - var callback = oc; - if (typeof options === "function") { - callback = options; - options = {}; - } - if (!this.rules || Object.keys(this.rules).length === 0) { - if (callback) { - callback(null, source); - } - return Promise.resolve(source); - } - function complete(results) { - var errors = []; - var fields = {}; - function add(e) { - if (Array.isArray(e)) { - var _errors; - errors = (_errors = errors).concat.apply(_errors, e); - } else { - errors.push(e); - } - } - for (var i = 0; i < results.length; i++) { - add(results[i]); - } - if (!errors.length) { - callback(null, source); - } else { - fields = convertFieldsError(errors); - callback(errors, fields); - } - } - if (options.messages) { - var messages$1 = this.messages(); - if (messages$1 === messages) { - messages$1 = newMessages(); - } - deepMerge(messages$1, options.messages); - options.messages = messages$1; - } else { - options.messages = this.messages(); - } - var series = {}; - var keys = options.keys || Object.keys(this.rules); - keys.forEach(function(z) { - var arr = _this2.rules[z]; - var value = source[z]; - arr.forEach(function(r) { - var rule = r; - if (typeof rule.transform === "function") { - if (source === source_) { - source = _extends({}, source); - } - value = source[z] = rule.transform(value); - } - if (typeof rule === "function") { - rule = { - validator: rule - }; - } else { - rule = _extends({}, rule); - } - rule.validator = _this2.getValidationMethod(rule); - if (!rule.validator) { - return; - } - rule.field = z; - rule.fullField = rule.fullField || z; - rule.type = _this2.getType(rule); - series[z] = series[z] || []; - series[z].push({ - rule, - value, - source, - field: z - }); - }); - }); - var errorFields = {}; - return asyncMap(series, options, function(data, doIt) { - var rule = data.rule; - var deep = (rule.type === "object" || rule.type === "array") && (typeof rule.fields === "object" || typeof rule.defaultField === "object"); - deep = deep && (rule.required || !rule.required && data.value); - rule.field = data.field; - function addFullField(key, schema) { - return _extends({}, schema, { - fullField: rule.fullField + "." + key, - fullFields: rule.fullFields ? [].concat(rule.fullFields, [key]) : [key] - }); - } - function cb(e) { - if (e === void 0) { - e = []; - } - var errorList = Array.isArray(e) ? e : [e]; - if (!options.suppressWarning && errorList.length) { - Schema2.warning("async-validator:", errorList); - } - if (errorList.length && rule.message !== void 0) { - errorList = [].concat(rule.message); - } - var filledErrors = errorList.map(complementError(rule, source)); - if (options.first && filledErrors.length) { - errorFields[rule.field] = 1; - return doIt(filledErrors); - } - if (!deep) { - doIt(filledErrors); - } else { - if (rule.required && !data.value) { - if (rule.message !== void 0) { - filledErrors = [].concat(rule.message).map(complementError(rule, source)); - } else if (options.error) { - filledErrors = [options.error(rule, format(options.messages.required, rule.field))]; - } - return doIt(filledErrors); - } - var fieldsSchema = {}; - if (rule.defaultField) { - Object.keys(data.value).map(function(key) { - fieldsSchema[key] = rule.defaultField; - }); - } - fieldsSchema = _extends({}, fieldsSchema, data.rule.fields); - var paredFieldsSchema = {}; - Object.keys(fieldsSchema).forEach(function(field) { - var fieldSchema = fieldsSchema[field]; - var fieldSchemaList = Array.isArray(fieldSchema) ? fieldSchema : [fieldSchema]; - paredFieldsSchema[field] = fieldSchemaList.map(addFullField.bind(null, field)); - }); - var schema = new Schema2(paredFieldsSchema); - schema.messages(options.messages); - if (data.rule.options) { - data.rule.options.messages = options.messages; - data.rule.options.error = options.error; - } - schema.validate(data.value, data.rule.options || options, function(errs) { - var finalErrors = []; - if (filledErrors && filledErrors.length) { - finalErrors.push.apply(finalErrors, filledErrors); - } - if (errs && errs.length) { - finalErrors.push.apply(finalErrors, errs); - } - doIt(finalErrors.length ? finalErrors : null); - }); - } - } - var res; - if (rule.asyncValidator) { - res = rule.asyncValidator(rule, data.value, cb, data.source, options); - } else if (rule.validator) { - try { - res = rule.validator(rule, data.value, cb, data.source, options); - } catch (error) { - console.error == null ? void 0 : console.error(error); - if (!options.suppressValidatorError) { - setTimeout(function() { - throw error; - }, 0); - } - cb(error.message); - } - if (res === true) { - cb(); - } else if (res === false) { - cb(typeof rule.message === "function" ? rule.message(rule.fullField || rule.field) : rule.message || (rule.fullField || rule.field) + " fails"); - } else if (res instanceof Array) { - cb(res); - } else if (res instanceof Error) { - cb(res.message); - } - } - if (res && res.then) { - res.then(function() { - return cb(); - }, function(e) { - return cb(e); - }); - } - }, function(results) { - complete(results); - }, source); - }; - _proto.getType = function getType(rule) { - if (rule.type === void 0 && rule.pattern instanceof RegExp) { - rule.type = "pattern"; - } - if (typeof rule.validator !== "function" && rule.type && !validators.hasOwnProperty(rule.type)) { - throw new Error(format("Unknown rule type %s", rule.type)); - } - return rule.type || "string"; - }; - _proto.getValidationMethod = function getValidationMethod(rule) { - if (typeof rule.validator === "function") { - return rule.validator; - } - var keys = Object.keys(rule); - var messageIndex = keys.indexOf("message"); - if (messageIndex !== -1) { - keys.splice(messageIndex, 1); - } - if (keys.length === 1 && keys[0] === "required") { - return validators.required; - } - return validators[this.getType(rule)] || void 0; - }; - return Schema2; - }(); - Schema.register = function register(type4, validator) { - if (typeof validator !== "function") { - throw new Error("Cannot register a validator by type, validator is not a function"); - } - validators[type4] = validator; - }; - Schema.warning = warning; - Schema.messages = messages; - Schema.validators = validators; - - const formItemValidateStates = [ - "", - "error", - "validating", - "success" - ]; - const formItemProps = buildProps({ - label: String, - labelWidth: { - type: [String, Number], - default: "" - }, - labelPosition: { - type: String, - values: ["left", "right", "top", ""], - default: "" - }, - prop: { - type: definePropType([String, Array]) - }, - required: { - type: Boolean, - default: void 0 - }, - rules: { - type: definePropType([Object, Array]) - }, - error: String, - validateStatus: { - type: String, - values: formItemValidateStates - }, - for: String, - inlineMessage: { - type: [String, Boolean], - default: "" - }, - showMessage: { - type: Boolean, - default: true - }, - size: { - type: String, - values: componentSizes - } - }); - - const COMPONENT_NAME$l = "ElLabelWrap"; - var FormLabelWrap = vue.defineComponent({ - name: COMPONENT_NAME$l, - props: { - isAutoWidth: Boolean, - updateAll: Boolean - }, - setup(props, { - slots - }) { - const formContext = vue.inject(formContextKey, void 0); - const formItemContext = vue.inject(formItemContextKey); - if (!formItemContext) - throwError(COMPONENT_NAME$l, "usage: "); - const ns = useNamespace("form"); - const el = vue.ref(); - const computedWidth = vue.ref(0); - const getLabelWidth = () => { - var _a; - if ((_a = el.value) == null ? void 0 : _a.firstElementChild) { - const width = window.getComputedStyle(el.value.firstElementChild).width; - return Math.ceil(Number.parseFloat(width)); - } else { - return 0; - } - }; - const updateLabelWidth = (action = "update") => { - vue.nextTick(() => { - if (slots.default && props.isAutoWidth) { - if (action === "update") { - computedWidth.value = getLabelWidth(); - } else if (action === "remove") { - formContext == null ? void 0 : formContext.deregisterLabelWidth(computedWidth.value); - } - } - }); - }; - const updateLabelWidthFn = () => updateLabelWidth("update"); - vue.onMounted(() => { - updateLabelWidthFn(); - }); - vue.onBeforeUnmount(() => { - updateLabelWidth("remove"); - }); - vue.onUpdated(() => updateLabelWidthFn()); - vue.watch(computedWidth, (val, oldVal) => { - if (props.updateAll) { - formContext == null ? void 0 : formContext.registerLabelWidth(val, oldVal); - } - }); - useResizeObserver(vue.computed(() => { - var _a, _b; - return (_b = (_a = el.value) == null ? void 0 : _a.firstElementChild) != null ? _b : null; - }), updateLabelWidthFn); - return () => { - var _a, _b; - if (!slots) - return null; - const { - isAutoWidth - } = props; - if (isAutoWidth) { - const autoLabelWidth = formContext == null ? void 0 : formContext.autoLabelWidth; - const hasLabel = formItemContext == null ? void 0 : formItemContext.hasLabel; - const style = {}; - if (hasLabel && autoLabelWidth && autoLabelWidth !== "auto") { - const marginWidth = Math.max(0, Number.parseInt(autoLabelWidth, 10) - computedWidth.value); - const labelPosition = formItemContext.labelPosition || formContext.labelPosition; - const marginPosition = labelPosition === "left" ? "marginRight" : "marginLeft"; - if (marginWidth) { - style[marginPosition] = `${marginWidth}px`; - } - } - return vue.createVNode("div", { - "ref": el, - "class": [ns.be("item", "label-wrap")], - "style": style - }, [(_a = slots.default) == null ? void 0 : _a.call(slots)]); - } else { - return vue.createVNode(vue.Fragment, { - "ref": el - }, [(_b = slots.default) == null ? void 0 : _b.call(slots)]); - } - }; - } - }); - - const __default__$1N = vue.defineComponent({ - name: "ElFormItem" - }); - const _sfc_main$2t = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1N, - props: formItemProps, - setup(__props, { expose }) { - const props = __props; - const slots = vue.useSlots(); - const formContext = vue.inject(formContextKey, void 0); - const parentFormItemContext = vue.inject(formItemContextKey, void 0); - const _size = useFormSize(void 0, { formItem: false }); - const ns = useNamespace("form-item"); - const labelId = useId().value; - const inputIds = vue.ref([]); - const validateState = vue.ref(""); - const validateStateDebounced = refDebounced(validateState, 100); - const validateMessage = vue.ref(""); - const formItemRef = vue.ref(); - let initialValue = void 0; - let isResettingField = false; - const labelPosition = vue.computed(() => props.labelPosition || (formContext == null ? void 0 : formContext.labelPosition)); - const labelStyle = vue.computed(() => { - if (labelPosition.value === "top") { - return {}; - } - const labelWidth = addUnit(props.labelWidth || (formContext == null ? void 0 : formContext.labelWidth) || ""); - if (labelWidth) - return { width: labelWidth }; - return {}; - }); - const contentStyle = vue.computed(() => { - if (labelPosition.value === "top" || (formContext == null ? void 0 : formContext.inline)) { - return {}; - } - if (!props.label && !props.labelWidth && isNested) { - return {}; - } - const labelWidth = addUnit(props.labelWidth || (formContext == null ? void 0 : formContext.labelWidth) || ""); - if (!props.label && !slots.label) { - return { marginLeft: labelWidth }; - } - return {}; - }); - const formItemClasses = vue.computed(() => [ - ns.b(), - ns.m(_size.value), - ns.is("error", validateState.value === "error"), - ns.is("validating", validateState.value === "validating"), - ns.is("success", validateState.value === "success"), - ns.is("required", isRequired.value || props.required), - ns.is("no-asterisk", formContext == null ? void 0 : formContext.hideRequiredAsterisk), - (formContext == null ? void 0 : formContext.requireAsteriskPosition) === "right" ? "asterisk-right" : "asterisk-left", - { - [ns.m("feedback")]: formContext == null ? void 0 : formContext.statusIcon, - [ns.m(`label-${labelPosition.value}`)]: labelPosition.value - } - ]); - const _inlineMessage = vue.computed(() => isBoolean(props.inlineMessage) ? props.inlineMessage : (formContext == null ? void 0 : formContext.inlineMessage) || false); - const validateClasses = vue.computed(() => [ - ns.e("error"), - { [ns.em("error", "inline")]: _inlineMessage.value } - ]); - const propString = vue.computed(() => { - if (!props.prop) - return ""; - return isString$1(props.prop) ? props.prop : props.prop.join("."); - }); - const hasLabel = vue.computed(() => { - return !!(props.label || slots.label); - }); - const labelFor = vue.computed(() => { - return props.for || (inputIds.value.length === 1 ? inputIds.value[0] : void 0); - }); - const isGroup = vue.computed(() => { - return !labelFor.value && hasLabel.value; - }); - const isNested = !!parentFormItemContext; - const fieldValue = vue.computed(() => { - const model = formContext == null ? void 0 : formContext.model; - if (!model || !props.prop) { - return; - } - return getProp(model, props.prop).value; - }); - const normalizedRules = vue.computed(() => { - const { required } = props; - const rules = []; - if (props.rules) { - rules.push(...castArray$1(props.rules)); - } - const formRules = formContext == null ? void 0 : formContext.rules; - if (formRules && props.prop) { - const _rules = getProp(formRules, props.prop).value; - if (_rules) { - rules.push(...castArray$1(_rules)); - } - } - if (required !== void 0) { - const requiredRules = rules.map((rule, i) => [rule, i]).filter(([rule]) => Object.keys(rule).includes("required")); - if (requiredRules.length > 0) { - for (const [rule, i] of requiredRules) { - if (rule.required === required) - continue; - rules[i] = { ...rule, required }; - } - } else { - rules.push({ required }); - } - } - return rules; - }); - const validateEnabled = vue.computed(() => normalizedRules.value.length > 0); - const getFilteredRule = (trigger) => { - const rules = normalizedRules.value; - return rules.filter((rule) => { - if (!rule.trigger || !trigger) - return true; - if (isArray$1(rule.trigger)) { - return rule.trigger.includes(trigger); - } else { - return rule.trigger === trigger; - } - }).map(({ trigger: trigger2, ...rule }) => rule); - }; - const isRequired = vue.computed(() => normalizedRules.value.some((rule) => rule.required)); - const shouldShowError = vue.computed(() => { - var _a; - return validateStateDebounced.value === "error" && props.showMessage && ((_a = formContext == null ? void 0 : formContext.showMessage) != null ? _a : true); - }); - const currentLabel = vue.computed(() => `${props.label || ""}${(formContext == null ? void 0 : formContext.labelSuffix) || ""}`); - const setValidationState = (state) => { - validateState.value = state; - }; - const onValidationFailed = (error) => { - var _a, _b; - const { errors, fields } = error; - if (!errors || !fields) { - console.error(error); - } - setValidationState("error"); - validateMessage.value = errors ? (_b = (_a = errors == null ? void 0 : errors[0]) == null ? void 0 : _a.message) != null ? _b : `${props.prop} is required` : ""; - formContext == null ? void 0 : formContext.emit("validate", props.prop, false, validateMessage.value); - }; - const onValidationSucceeded = () => { - setValidationState("success"); - formContext == null ? void 0 : formContext.emit("validate", props.prop, true, ""); - }; - const doValidate = async (rules) => { - const modelName = propString.value; - const validator = new Schema({ - [modelName]: rules - }); - return validator.validate({ [modelName]: fieldValue.value }, { firstFields: true }).then(() => { - onValidationSucceeded(); - return true; - }).catch((err) => { - onValidationFailed(err); - return Promise.reject(err); - }); - }; - const validate = async (trigger, callback) => { - if (isResettingField || !props.prop) { - return false; - } - const hasCallback = isFunction$1(callback); - if (!validateEnabled.value) { - callback == null ? void 0 : callback(false); - return false; - } - const rules = getFilteredRule(trigger); - if (rules.length === 0) { - callback == null ? void 0 : callback(true); - return true; - } - setValidationState("validating"); - return doValidate(rules).then(() => { - callback == null ? void 0 : callback(true); - return true; - }).catch((err) => { - const { fields } = err; - callback == null ? void 0 : callback(false, fields); - return hasCallback ? false : Promise.reject(fields); - }); - }; - const clearValidate = () => { - setValidationState(""); - validateMessage.value = ""; - isResettingField = false; - }; - const resetField = async () => { - const model = formContext == null ? void 0 : formContext.model; - if (!model || !props.prop) - return; - const computedValue = getProp(model, props.prop); - isResettingField = true; - computedValue.value = clone(initialValue); - await vue.nextTick(); - clearValidate(); - isResettingField = false; - }; - const addInputId = (id) => { - if (!inputIds.value.includes(id)) { - inputIds.value.push(id); - } - }; - const removeInputId = (id) => { - inputIds.value = inputIds.value.filter((listId) => listId !== id); - }; - vue.watch(() => props.error, (val) => { - validateMessage.value = val || ""; - setValidationState(val ? "error" : ""); - }, { immediate: true }); - vue.watch(() => props.validateStatus, (val) => setValidationState(val || "")); - const context = vue.reactive({ - ...vue.toRefs(props), - $el: formItemRef, - size: _size, - validateState, - labelId, - inputIds, - isGroup, - hasLabel, - fieldValue, - addInputId, - removeInputId, - resetField, - clearValidate, - validate - }); - vue.provide(formItemContextKey, context); - vue.onMounted(() => { - if (props.prop) { - formContext == null ? void 0 : formContext.addField(context); - initialValue = clone(fieldValue.value); - } - }); - vue.onBeforeUnmount(() => { - formContext == null ? void 0 : formContext.removeField(context); - }); - expose({ - size: _size, - validateMessage, - validateState, - validate, - clearValidate, - resetField - }); - return (_ctx, _cache) => { - var _a; - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "formItemRef", - ref: formItemRef, - class: vue.normalizeClass(vue.unref(formItemClasses)), - role: vue.unref(isGroup) ? "group" : void 0, - "aria-labelledby": vue.unref(isGroup) ? vue.unref(labelId) : void 0 - }, [ - vue.createVNode(vue.unref(FormLabelWrap), { - "is-auto-width": vue.unref(labelStyle).width === "auto", - "update-all": ((_a = vue.unref(formContext)) == null ? void 0 : _a.labelWidth) === "auto" - }, { - default: vue.withCtx(() => [ - vue.unref(hasLabel) ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(labelFor) ? "label" : "div"), { - key: 0, - id: vue.unref(labelId), - for: vue.unref(labelFor), - class: vue.normalizeClass(vue.unref(ns).e("label")), - style: vue.normalizeStyle(vue.unref(labelStyle)) - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "label", { label: vue.unref(currentLabel) }, () => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(currentLabel)), 1) - ]) - ]), - _: 3 - }, 8, ["id", "for", "class", "style"])) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["is-auto-width", "update-all"]), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("content")), - style: vue.normalizeStyle(vue.unref(contentStyle)) - }, [ - vue.renderSlot(_ctx.$slots, "default"), - vue.createVNode(vue.TransitionGroup, { - name: `${vue.unref(ns).namespace.value}-zoom-in-top` - }, { - default: vue.withCtx(() => [ - vue.unref(shouldShowError) ? vue.renderSlot(_ctx.$slots, "error", { - key: 0, - error: validateMessage.value - }, () => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(validateClasses)) - }, vue.toDisplayString(validateMessage.value), 3) - ]) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["name"]) - ], 6) - ], 10, ["role", "aria-labelledby"]); - }; - } - }); - var FormItem = /* @__PURE__ */ _export_sfc(_sfc_main$2t, [["__file", "form-item.vue"]]); - - const ElForm = withInstall(Form, { - FormItem - }); - const ElFormItem = withNoopInstall(FormItem); - - let hiddenTextarea = void 0; - const HIDDEN_STYLE = { - height: "0", - visibility: "hidden", - overflow: isFirefox() ? "" : "hidden", - position: "absolute", - "z-index": "-1000", - top: "0", - right: "0" - }; - const CONTEXT_STYLE = [ - "letter-spacing", - "line-height", - "padding-top", - "padding-bottom", - "font-family", - "font-weight", - "font-size", - "text-rendering", - "text-transform", - "width", - "text-indent", - "padding-left", - "padding-right", - "border-width", - "box-sizing" - ]; - function calculateNodeStyling(targetElement) { - const style = window.getComputedStyle(targetElement); - const boxSizing = style.getPropertyValue("box-sizing"); - const paddingSize = Number.parseFloat(style.getPropertyValue("padding-bottom")) + Number.parseFloat(style.getPropertyValue("padding-top")); - const borderSize = Number.parseFloat(style.getPropertyValue("border-bottom-width")) + Number.parseFloat(style.getPropertyValue("border-top-width")); - const contextStyle = CONTEXT_STYLE.map((name) => [ - name, - style.getPropertyValue(name) - ]); - return { contextStyle, paddingSize, borderSize, boxSizing }; - } - function calcTextareaHeight(targetElement, minRows = 1, maxRows) { - var _a; - if (!hiddenTextarea) { - hiddenTextarea = document.createElement("textarea"); - document.body.appendChild(hiddenTextarea); - } - const { paddingSize, borderSize, boxSizing, contextStyle } = calculateNodeStyling(targetElement); - contextStyle.forEach(([key, value]) => hiddenTextarea == null ? void 0 : hiddenTextarea.style.setProperty(key, value)); - Object.entries(HIDDEN_STYLE).forEach(([key, value]) => hiddenTextarea == null ? void 0 : hiddenTextarea.style.setProperty(key, value, "important")); - hiddenTextarea.value = targetElement.value || targetElement.placeholder || ""; - let height = hiddenTextarea.scrollHeight; - const result = {}; - if (boxSizing === "border-box") { - height = height + borderSize; - } else if (boxSizing === "content-box") { - height = height - paddingSize; - } - hiddenTextarea.value = ""; - const singleRowHeight = hiddenTextarea.scrollHeight - paddingSize; - if (isNumber(minRows)) { - let minHeight = singleRowHeight * minRows; - if (boxSizing === "border-box") { - minHeight = minHeight + paddingSize + borderSize; - } - height = Math.max(minHeight, height); - result.minHeight = `${minHeight}px`; - } - if (isNumber(maxRows)) { - let maxHeight = singleRowHeight * maxRows; - if (boxSizing === "border-box") { - maxHeight = maxHeight + paddingSize + borderSize; - } - height = Math.min(maxHeight, height); - } - result.height = `${height}px`; - (_a = hiddenTextarea.parentNode) == null ? void 0 : _a.removeChild(hiddenTextarea); - hiddenTextarea = void 0; - return result; - } - - const inputProps = buildProps({ - id: { - type: String, - default: void 0 - }, - size: useSizeProp, - disabled: Boolean, - modelValue: { - type: definePropType([ - String, - Number, - Object - ]), - default: "" - }, - maxlength: { - type: [String, Number] - }, - minlength: { - type: [String, Number] - }, - type: { - type: String, - default: "text" - }, - resize: { - type: String, - values: ["none", "both", "horizontal", "vertical"] - }, - autosize: { - type: definePropType([Boolean, Object]), - default: false - }, - autocomplete: { - type: String, - default: "off" - }, - formatter: { - type: Function - }, - parser: { - type: Function - }, - placeholder: { - type: String - }, - form: { - type: String - }, - readonly: Boolean, - clearable: Boolean, - showPassword: Boolean, - showWordLimit: Boolean, - suffixIcon: { - type: iconPropType - }, - prefixIcon: { - type: iconPropType - }, - containerRole: { - type: String, - default: void 0 - }, - tabindex: { - type: [String, Number], - default: 0 - }, - validateEvent: { - type: Boolean, - default: true - }, - inputStyle: { - type: definePropType([Object, Array, String]), - default: () => mutable({}) - }, - autofocus: Boolean, - rows: { - type: Number, - default: 2 - }, - ...useAriaProps(["ariaLabel"]) - }); - const inputEmits = { - [UPDATE_MODEL_EVENT]: (value) => isString$1(value), - input: (value) => isString$1(value), - change: (value) => isString$1(value), - focus: (evt) => evt instanceof FocusEvent, - blur: (evt) => evt instanceof FocusEvent, - clear: () => true, - mouseleave: (evt) => evt instanceof MouseEvent, - mouseenter: (evt) => evt instanceof MouseEvent, - keydown: (evt) => evt instanceof Event, - compositionstart: (evt) => evt instanceof CompositionEvent, - compositionupdate: (evt) => evt instanceof CompositionEvent, - compositionend: (evt) => evt instanceof CompositionEvent - }; - - const __default__$1M = vue.defineComponent({ - name: "ElInput", - inheritAttrs: false - }); - const _sfc_main$2s = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1M, - props: inputProps, - emits: inputEmits, - setup(__props, { expose, emit }) { - const props = __props; - const rawAttrs = vue.useAttrs(); - const attrs = useAttrs(); - const slots = vue.useSlots(); - const containerKls = vue.computed(() => [ - props.type === "textarea" ? nsTextarea.b() : nsInput.b(), - nsInput.m(inputSize.value), - nsInput.is("disabled", inputDisabled.value), - nsInput.is("exceed", inputExceed.value), - { - [nsInput.b("group")]: slots.prepend || slots.append, - [nsInput.m("prefix")]: slots.prefix || props.prefixIcon, - [nsInput.m("suffix")]: slots.suffix || props.suffixIcon || props.clearable || props.showPassword, - [nsInput.bm("suffix", "password-clear")]: showClear.value && showPwdVisible.value, - [nsInput.b("hidden")]: props.type === "hidden" - }, - rawAttrs.class - ]); - const wrapperKls = vue.computed(() => [ - nsInput.e("wrapper"), - nsInput.is("focus", isFocused.value) - ]); - const { form: elForm, formItem: elFormItem } = useFormItem(); - const { inputId } = useFormItemInputId(props, { - formItemContext: elFormItem - }); - const inputSize = useFormSize(); - const inputDisabled = useFormDisabled(); - const nsInput = useNamespace("input"); - const nsTextarea = useNamespace("textarea"); - const input = vue.shallowRef(); - const textarea = vue.shallowRef(); - const hovering = vue.ref(false); - const passwordVisible = vue.ref(false); - const countStyle = vue.ref(); - const textareaCalcStyle = vue.shallowRef(props.inputStyle); - const _ref = vue.computed(() => input.value || textarea.value); - const { wrapperRef, isFocused, handleFocus, handleBlur } = useFocusController(_ref, { - beforeFocus() { - return inputDisabled.value; - }, - afterBlur() { - var _a; - if (props.validateEvent) { - (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, "blur").catch((err) => debugWarn()); - } - } - }); - const needStatusIcon = vue.computed(() => { - var _a; - return (_a = elForm == null ? void 0 : elForm.statusIcon) != null ? _a : false; - }); - const validateState = vue.computed(() => (elFormItem == null ? void 0 : elFormItem.validateState) || ""); - const validateIcon = vue.computed(() => validateState.value && ValidateComponentsMap[validateState.value]); - const passwordIcon = vue.computed(() => passwordVisible.value ? view_default : hide_default); - const containerStyle = vue.computed(() => [ - rawAttrs.style - ]); - const textareaStyle = vue.computed(() => [ - props.inputStyle, - textareaCalcStyle.value, - { resize: props.resize } - ]); - const nativeInputValue = vue.computed(() => isNil(props.modelValue) ? "" : String(props.modelValue)); - const showClear = vue.computed(() => props.clearable && !inputDisabled.value && !props.readonly && !!nativeInputValue.value && (isFocused.value || hovering.value)); - const showPwdVisible = vue.computed(() => props.showPassword && !inputDisabled.value && !!nativeInputValue.value && (!!nativeInputValue.value || isFocused.value)); - const isWordLimitVisible = vue.computed(() => props.showWordLimit && !!props.maxlength && (props.type === "text" || props.type === "textarea") && !inputDisabled.value && !props.readonly && !props.showPassword); - const textLength = vue.computed(() => nativeInputValue.value.length); - const inputExceed = vue.computed(() => !!isWordLimitVisible.value && textLength.value > Number(props.maxlength)); - const suffixVisible = vue.computed(() => !!slots.suffix || !!props.suffixIcon || showClear.value || props.showPassword || isWordLimitVisible.value || !!validateState.value && needStatusIcon.value); - const [recordCursor, setCursor] = useCursor(input); - useResizeObserver(textarea, (entries) => { - onceInitSizeTextarea(); - if (!isWordLimitVisible.value || props.resize !== "both") - return; - const entry = entries[0]; - const { width } = entry.contentRect; - countStyle.value = { - right: `calc(100% - ${width + 15 + 6}px)` - }; - }); - const resizeTextarea = () => { - const { type, autosize } = props; - if (!isClient || type !== "textarea" || !textarea.value) - return; - if (autosize) { - const minRows = isObject$1(autosize) ? autosize.minRows : void 0; - const maxRows = isObject$1(autosize) ? autosize.maxRows : void 0; - const textareaStyle2 = calcTextareaHeight(textarea.value, minRows, maxRows); - textareaCalcStyle.value = { - overflowY: "hidden", - ...textareaStyle2 - }; - vue.nextTick(() => { - textarea.value.offsetHeight; - textareaCalcStyle.value = textareaStyle2; - }); - } else { - textareaCalcStyle.value = { - minHeight: calcTextareaHeight(textarea.value).minHeight - }; - } - }; - const createOnceInitResize = (resizeTextarea2) => { - let isInit = false; - return () => { - var _a; - if (isInit || !props.autosize) - return; - const isElHidden = ((_a = textarea.value) == null ? void 0 : _a.offsetParent) === null; - if (!isElHidden) { - resizeTextarea2(); - isInit = true; - } - }; - }; - const onceInitSizeTextarea = createOnceInitResize(resizeTextarea); - const setNativeInputValue = () => { - const input2 = _ref.value; - const formatterValue = props.formatter ? props.formatter(nativeInputValue.value) : nativeInputValue.value; - if (!input2 || input2.value === formatterValue) - return; - input2.value = formatterValue; - }; - const handleInput = async (event) => { - recordCursor(); - let { value } = event.target; - if (props.formatter) { - value = props.parser ? props.parser(value) : value; - } - if (isComposing.value) - return; - if (value === nativeInputValue.value) { - setNativeInputValue(); - return; - } - emit(UPDATE_MODEL_EVENT, value); - emit("input", value); - await vue.nextTick(); - setNativeInputValue(); - setCursor(); - }; - const handleChange = (event) => { - emit("change", event.target.value); - }; - const { - isComposing, - handleCompositionStart, - handleCompositionUpdate, - handleCompositionEnd - } = useComposition({ emit, afterComposition: handleInput }); - const handlePasswordVisible = () => { - recordCursor(); - passwordVisible.value = !passwordVisible.value; - setTimeout(setCursor); - }; - const focus = () => { - var _a; - return (_a = _ref.value) == null ? void 0 : _a.focus(); - }; - const blur = () => { - var _a; - return (_a = _ref.value) == null ? void 0 : _a.blur(); - }; - const handleMouseLeave = (evt) => { - hovering.value = false; - emit("mouseleave", evt); - }; - const handleMouseEnter = (evt) => { - hovering.value = true; - emit("mouseenter", evt); - }; - const handleKeydown = (evt) => { - emit("keydown", evt); - }; - const select = () => { - var _a; - (_a = _ref.value) == null ? void 0 : _a.select(); - }; - const clear = () => { - emit(UPDATE_MODEL_EVENT, ""); - emit("change", ""); - emit("clear"); - emit("input", ""); - }; - vue.watch(() => props.modelValue, () => { - var _a; - vue.nextTick(() => resizeTextarea()); - if (props.validateEvent) { - (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, "change").catch((err) => debugWarn()); - } - }); - vue.watch(nativeInputValue, () => setNativeInputValue()); - vue.watch(() => props.type, async () => { - await vue.nextTick(); - setNativeInputValue(); - resizeTextarea(); - }); - vue.onMounted(() => { - if (!props.formatter && props.parser) ; - setNativeInputValue(); - vue.nextTick(resizeTextarea); - }); - expose({ - input, - textarea, - ref: _ref, - textareaStyle, - autosize: vue.toRef(props, "autosize"), - isComposing, - focus, - blur, - select, - clear, - resizeTextarea - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([ - vue.unref(containerKls), - { - [vue.unref(nsInput).bm("group", "append")]: _ctx.$slots.append, - [vue.unref(nsInput).bm("group", "prepend")]: _ctx.$slots.prepend - } - ]), - style: vue.normalizeStyle(vue.unref(containerStyle)), - onMouseenter: handleMouseEnter, - onMouseleave: handleMouseLeave - }, [ - vue.createCommentVNode(" input "), - _ctx.type !== "textarea" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.createCommentVNode(" prepend slot "), - _ctx.$slots.prepend ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(nsInput).be("group", "prepend")) - }, [ - vue.renderSlot(_ctx.$slots, "prepend") - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - ref_key: "wrapperRef", - ref: wrapperRef, - class: vue.normalizeClass(vue.unref(wrapperKls)) - }, [ - vue.createCommentVNode(" prefix slot "), - _ctx.$slots.prefix || _ctx.prefixIcon ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - class: vue.normalizeClass(vue.unref(nsInput).e("prefix")) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(nsInput).e("prefix-inner")) - }, [ - vue.renderSlot(_ctx.$slots, "prefix"), - _ctx.prefixIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(nsInput).e("icon")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.prefixIcon))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ], 2) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("input", vue.mergeProps({ - id: vue.unref(inputId), - ref_key: "input", - ref: input, - class: vue.unref(nsInput).e("inner") - }, vue.unref(attrs), { - minlength: _ctx.minlength, - maxlength: _ctx.maxlength, - type: _ctx.showPassword ? passwordVisible.value ? "text" : "password" : _ctx.type, - disabled: vue.unref(inputDisabled), - readonly: _ctx.readonly, - autocomplete: _ctx.autocomplete, - tabindex: _ctx.tabindex, - "aria-label": _ctx.ariaLabel, - placeholder: _ctx.placeholder, - style: _ctx.inputStyle, - form: _ctx.form, - autofocus: _ctx.autofocus, - role: _ctx.containerRole, - onCompositionstart: vue.unref(handleCompositionStart), - onCompositionupdate: vue.unref(handleCompositionUpdate), - onCompositionend: vue.unref(handleCompositionEnd), - onInput: handleInput, - onChange: handleChange, - onKeydown: handleKeydown - }), null, 16, ["id", "minlength", "maxlength", "type", "disabled", "readonly", "autocomplete", "tabindex", "aria-label", "placeholder", "form", "autofocus", "role", "onCompositionstart", "onCompositionupdate", "onCompositionend"]), - vue.createCommentVNode(" suffix slot "), - vue.unref(suffixVisible) ? (vue.openBlock(), vue.createElementBlock("span", { - key: 1, - class: vue.normalizeClass(vue.unref(nsInput).e("suffix")) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(nsInput).e("suffix-inner")) - }, [ - !vue.unref(showClear) || !vue.unref(showPwdVisible) || !vue.unref(isWordLimitVisible) ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.renderSlot(_ctx.$slots, "suffix"), - _ctx.suffixIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(nsInput).e("icon")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.suffixIcon))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ], 64)) : vue.createCommentVNode("v-if", true), - vue.unref(showClear) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 1, - class: vue.normalizeClass([vue.unref(nsInput).e("icon"), vue.unref(nsInput).e("clear")]), - onMousedown: vue.withModifiers(vue.unref(NOOP), ["prevent"]), - onClick: clear - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(circle_close_default)) - ]), - _: 1 - }, 8, ["class", "onMousedown"])) : vue.createCommentVNode("v-if", true), - vue.unref(showPwdVisible) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 2, - class: vue.normalizeClass([vue.unref(nsInput).e("icon"), vue.unref(nsInput).e("password")]), - onClick: handlePasswordVisible - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(passwordIcon)))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true), - vue.unref(isWordLimitVisible) ? (vue.openBlock(), vue.createElementBlock("span", { - key: 3, - class: vue.normalizeClass(vue.unref(nsInput).e("count")) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(nsInput).e("count-inner")) - }, vue.toDisplayString(vue.unref(textLength)) + " / " + vue.toDisplayString(_ctx.maxlength), 3) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.unref(validateState) && vue.unref(validateIcon) && vue.unref(needStatusIcon) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 4, - class: vue.normalizeClass([ - vue.unref(nsInput).e("icon"), - vue.unref(nsInput).e("validateIcon"), - vue.unref(nsInput).is("loading", vue.unref(validateState) === "validating") - ]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(validateIcon)))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ], 2) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2), - vue.createCommentVNode(" append slot "), - _ctx.$slots.append ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(nsInput).be("group", "append")) - }, [ - vue.renderSlot(_ctx.$slots, "append") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ - vue.createCommentVNode(" textarea "), - vue.createElementVNode("textarea", vue.mergeProps({ - id: vue.unref(inputId), - ref_key: "textarea", - ref: textarea, - class: [vue.unref(nsTextarea).e("inner"), vue.unref(nsInput).is("focus", vue.unref(isFocused))] - }, vue.unref(attrs), { - minlength: _ctx.minlength, - maxlength: _ctx.maxlength, - tabindex: _ctx.tabindex, - disabled: vue.unref(inputDisabled), - readonly: _ctx.readonly, - autocomplete: _ctx.autocomplete, - style: vue.unref(textareaStyle), - "aria-label": _ctx.ariaLabel, - placeholder: _ctx.placeholder, - form: _ctx.form, - autofocus: _ctx.autofocus, - rows: _ctx.rows, - role: _ctx.containerRole, - onCompositionstart: vue.unref(handleCompositionStart), - onCompositionupdate: vue.unref(handleCompositionUpdate), - onCompositionend: vue.unref(handleCompositionEnd), - onInput: handleInput, - onFocus: vue.unref(handleFocus), - onBlur: vue.unref(handleBlur), - onChange: handleChange, - onKeydown: handleKeydown - }), null, 16, ["id", "minlength", "maxlength", "tabindex", "disabled", "readonly", "autocomplete", "aria-label", "placeholder", "form", "autofocus", "rows", "role", "onCompositionstart", "onCompositionupdate", "onCompositionend", "onFocus", "onBlur"]), - vue.unref(isWordLimitVisible) ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - style: vue.normalizeStyle(countStyle.value), - class: vue.normalizeClass(vue.unref(nsInput).e("count")) - }, vue.toDisplayString(vue.unref(textLength)) + " / " + vue.toDisplayString(_ctx.maxlength), 7)) : vue.createCommentVNode("v-if", true) - ], 64)) - ], 38); - }; - } - }); - var Input = /* @__PURE__ */ _export_sfc(_sfc_main$2s, [["__file", "input.vue"]]); - - const ElInput = withInstall(Input); - - const GAP = 4; - const BAR_MAP = { - vertical: { - offset: "offsetHeight", - scroll: "scrollTop", - scrollSize: "scrollHeight", - size: "height", - key: "vertical", - axis: "Y", - client: "clientY", - direction: "top" - }, - horizontal: { - offset: "offsetWidth", - scroll: "scrollLeft", - scrollSize: "scrollWidth", - size: "width", - key: "horizontal", - axis: "X", - client: "clientX", - direction: "left" - } - }; - const renderThumbStyle$1 = ({ - move, - size, - bar - }) => ({ - [bar.size]: size, - transform: `translate${bar.axis}(${move}%)` - }); - - const scrollbarContextKey = Symbol("scrollbarContextKey"); - - const thumbProps = buildProps({ - vertical: Boolean, - size: String, - move: Number, - ratio: { - type: Number, - required: true - }, - always: Boolean - }); - - const COMPONENT_NAME$k = "Thumb"; - const _sfc_main$2r = /* @__PURE__ */ vue.defineComponent({ - __name: "thumb", - props: thumbProps, - setup(__props) { - const props = __props; - const scrollbar = vue.inject(scrollbarContextKey); - const ns = useNamespace("scrollbar"); - if (!scrollbar) - throwError(COMPONENT_NAME$k, "can not inject scrollbar context"); - const instance = vue.ref(); - const thumb = vue.ref(); - const thumbState = vue.ref({}); - const visible = vue.ref(false); - let cursorDown = false; - let cursorLeave = false; - let originalOnSelectStart = isClient ? document.onselectstart : null; - const bar = vue.computed(() => BAR_MAP[props.vertical ? "vertical" : "horizontal"]); - const thumbStyle = vue.computed(() => renderThumbStyle$1({ - size: props.size, - move: props.move, - bar: bar.value - })); - const offsetRatio = vue.computed(() => instance.value[bar.value.offset] ** 2 / scrollbar.wrapElement[bar.value.scrollSize] / props.ratio / thumb.value[bar.value.offset]); - const clickThumbHandler = (e) => { - var _a; - e.stopPropagation(); - if (e.ctrlKey || [1, 2].includes(e.button)) - return; - (_a = window.getSelection()) == null ? void 0 : _a.removeAllRanges(); - startDrag(e); - const el = e.currentTarget; - if (!el) - return; - thumbState.value[bar.value.axis] = el[bar.value.offset] - (e[bar.value.client] - el.getBoundingClientRect()[bar.value.direction]); - }; - const clickTrackHandler = (e) => { - if (!thumb.value || !instance.value || !scrollbar.wrapElement) - return; - const offset = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]); - const thumbHalf = thumb.value[bar.value.offset] / 2; - const thumbPositionPercentage = (offset - thumbHalf) * 100 * offsetRatio.value / instance.value[bar.value.offset]; - scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100; - }; - const startDrag = (e) => { - e.stopImmediatePropagation(); - cursorDown = true; - document.addEventListener("mousemove", mouseMoveDocumentHandler); - document.addEventListener("mouseup", mouseUpDocumentHandler); - originalOnSelectStart = document.onselectstart; - document.onselectstart = () => false; - }; - const mouseMoveDocumentHandler = (e) => { - if (!instance.value || !thumb.value) - return; - if (cursorDown === false) - return; - const prevPage = thumbState.value[bar.value.axis]; - if (!prevPage) - return; - const offset = (instance.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1; - const thumbClickPosition = thumb.value[bar.value.offset] - prevPage; - const thumbPositionPercentage = (offset - thumbClickPosition) * 100 * offsetRatio.value / instance.value[bar.value.offset]; - scrollbar.wrapElement[bar.value.scroll] = thumbPositionPercentage * scrollbar.wrapElement[bar.value.scrollSize] / 100; - }; - const mouseUpDocumentHandler = () => { - cursorDown = false; - thumbState.value[bar.value.axis] = 0; - document.removeEventListener("mousemove", mouseMoveDocumentHandler); - document.removeEventListener("mouseup", mouseUpDocumentHandler); - restoreOnselectstart(); - if (cursorLeave) - visible.value = false; - }; - const mouseMoveScrollbarHandler = () => { - cursorLeave = false; - visible.value = !!props.size; - }; - const mouseLeaveScrollbarHandler = () => { - cursorLeave = true; - visible.value = cursorDown; - }; - vue.onBeforeUnmount(() => { - restoreOnselectstart(); - document.removeEventListener("mouseup", mouseUpDocumentHandler); - }); - const restoreOnselectstart = () => { - if (document.onselectstart !== originalOnSelectStart) - document.onselectstart = originalOnSelectStart; - }; - useEventListener(vue.toRef(scrollbar, "scrollbarElement"), "mousemove", mouseMoveScrollbarHandler); - useEventListener(vue.toRef(scrollbar, "scrollbarElement"), "mouseleave", mouseLeaveScrollbarHandler); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.Transition, { - name: vue.unref(ns).b("fade"), - persisted: "" - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createElementVNode("div", { - ref_key: "instance", - ref: instance, - class: vue.normalizeClass([vue.unref(ns).e("bar"), vue.unref(ns).is(vue.unref(bar).key)]), - onMousedown: clickTrackHandler - }, [ - vue.createElementVNode("div", { - ref_key: "thumb", - ref: thumb, - class: vue.normalizeClass(vue.unref(ns).e("thumb")), - style: vue.normalizeStyle(vue.unref(thumbStyle)), - onMousedown: clickThumbHandler - }, null, 38) - ], 34), [ - [vue.vShow, _ctx.always || visible.value] - ]) - ]), - _: 1 - }, 8, ["name"]); - }; - } - }); - var Thumb = /* @__PURE__ */ _export_sfc(_sfc_main$2r, [["__file", "thumb.vue"]]); - - const barProps = buildProps({ - always: { - type: Boolean, - default: true - }, - minSize: { - type: Number, - required: true - } - }); - - const _sfc_main$2q = /* @__PURE__ */ vue.defineComponent({ - __name: "bar", - props: barProps, - setup(__props, { expose }) { - const props = __props; - const scrollbar = vue.inject(scrollbarContextKey); - const moveX = vue.ref(0); - const moveY = vue.ref(0); - const sizeWidth = vue.ref(""); - const sizeHeight = vue.ref(""); - const ratioY = vue.ref(1); - const ratioX = vue.ref(1); - const handleScroll = (wrap) => { - if (wrap) { - const offsetHeight = wrap.offsetHeight - GAP; - const offsetWidth = wrap.offsetWidth - GAP; - moveY.value = wrap.scrollTop * 100 / offsetHeight * ratioY.value; - moveX.value = wrap.scrollLeft * 100 / offsetWidth * ratioX.value; - } - }; - const update = () => { - const wrap = scrollbar == null ? void 0 : scrollbar.wrapElement; - if (!wrap) - return; - const offsetHeight = wrap.offsetHeight - GAP; - const offsetWidth = wrap.offsetWidth - GAP; - const originalHeight = offsetHeight ** 2 / wrap.scrollHeight; - const originalWidth = offsetWidth ** 2 / wrap.scrollWidth; - const height = Math.max(originalHeight, props.minSize); - const width = Math.max(originalWidth, props.minSize); - ratioY.value = originalHeight / (offsetHeight - originalHeight) / (height / (offsetHeight - height)); - ratioX.value = originalWidth / (offsetWidth - originalWidth) / (width / (offsetWidth - width)); - sizeHeight.value = height + GAP < offsetHeight ? `${height}px` : ""; - sizeWidth.value = width + GAP < offsetWidth ? `${width}px` : ""; - }; - expose({ - handleScroll, - update - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ - vue.createVNode(Thumb, { - move: moveX.value, - ratio: ratioX.value, - size: sizeWidth.value, - always: _ctx.always - }, null, 8, ["move", "ratio", "size", "always"]), - vue.createVNode(Thumb, { - move: moveY.value, - ratio: ratioY.value, - size: sizeHeight.value, - vertical: "", - always: _ctx.always - }, null, 8, ["move", "ratio", "size", "always"]) - ], 64); - }; - } - }); - var Bar = /* @__PURE__ */ _export_sfc(_sfc_main$2q, [["__file", "bar.vue"]]); - - const scrollbarProps = buildProps({ - height: { - type: [String, Number], - default: "" - }, - maxHeight: { - type: [String, Number], - default: "" - }, - native: { - type: Boolean, - default: false - }, - wrapStyle: { - type: definePropType([String, Object, Array]), - default: "" - }, - wrapClass: { - type: [String, Array], - default: "" - }, - viewClass: { - type: [String, Array], - default: "" - }, - viewStyle: { - type: [String, Array, Object], - default: "" - }, - noresize: Boolean, - tag: { - type: String, - default: "div" - }, - always: Boolean, - minSize: { - type: Number, - default: 20 - }, - tabindex: { - type: [String, Number], - default: void 0 - }, - id: String, - role: String, - ...useAriaProps(["ariaLabel", "ariaOrientation"]) - }); - const scrollbarEmits = { - scroll: ({ - scrollTop, - scrollLeft - }) => [scrollTop, scrollLeft].every(isNumber) - }; - - const COMPONENT_NAME$j = "ElScrollbar"; - const __default__$1L = vue.defineComponent({ - name: COMPONENT_NAME$j - }); - const _sfc_main$2p = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1L, - props: scrollbarProps, - emits: scrollbarEmits, - setup(__props, { expose, emit }) { - const props = __props; - const ns = useNamespace("scrollbar"); - let stopResizeObserver = void 0; - let stopResizeListener = void 0; - let wrapScrollTop = 0; - let wrapScrollLeft = 0; - const scrollbarRef = vue.ref(); - const wrapRef = vue.ref(); - const resizeRef = vue.ref(); - const barRef = vue.ref(); - const wrapStyle = vue.computed(() => { - const style = {}; - if (props.height) - style.height = addUnit(props.height); - if (props.maxHeight) - style.maxHeight = addUnit(props.maxHeight); - return [props.wrapStyle, style]; - }); - const wrapKls = vue.computed(() => { - return [ - props.wrapClass, - ns.e("wrap"), - { [ns.em("wrap", "hidden-default")]: !props.native } - ]; - }); - const resizeKls = vue.computed(() => { - return [ns.e("view"), props.viewClass]; - }); - const handleScroll = () => { - var _a; - if (wrapRef.value) { - (_a = barRef.value) == null ? void 0 : _a.handleScroll(wrapRef.value); - wrapScrollTop = wrapRef.value.scrollTop; - wrapScrollLeft = wrapRef.value.scrollLeft; - emit("scroll", { - scrollTop: wrapRef.value.scrollTop, - scrollLeft: wrapRef.value.scrollLeft - }); - } - }; - function scrollTo(arg1, arg2) { - if (isObject$1(arg1)) { - wrapRef.value.scrollTo(arg1); - } else if (isNumber(arg1) && isNumber(arg2)) { - wrapRef.value.scrollTo(arg1, arg2); - } - } - const setScrollTop = (value) => { - if (!isNumber(value)) { - return; - } - wrapRef.value.scrollTop = value; - }; - const setScrollLeft = (value) => { - if (!isNumber(value)) { - return; - } - wrapRef.value.scrollLeft = value; - }; - const update = () => { - var _a; - (_a = barRef.value) == null ? void 0 : _a.update(); - }; - vue.watch(() => props.noresize, (noresize) => { - if (noresize) { - stopResizeObserver == null ? void 0 : stopResizeObserver(); - stopResizeListener == null ? void 0 : stopResizeListener(); - } else { - ({ stop: stopResizeObserver } = useResizeObserver(resizeRef, update)); - stopResizeListener = useEventListener("resize", update); - } - }, { immediate: true }); - vue.watch(() => [props.maxHeight, props.height], () => { - if (!props.native) - vue.nextTick(() => { - var _a; - update(); - if (wrapRef.value) { - (_a = barRef.value) == null ? void 0 : _a.handleScroll(wrapRef.value); - } - }); - }); - vue.provide(scrollbarContextKey, vue.reactive({ - scrollbarElement: scrollbarRef, - wrapElement: wrapRef - })); - vue.onActivated(() => { - if (wrapRef.value) { - wrapRef.value.scrollTop = wrapScrollTop; - wrapRef.value.scrollLeft = wrapScrollLeft; - } - }); - vue.onMounted(() => { - if (!props.native) - vue.nextTick(() => { - update(); - }); - }); - vue.onUpdated(() => update()); - expose({ - wrapRef, - update, - scrollTo, - setScrollTop, - setScrollLeft, - handleScroll - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "scrollbarRef", - ref: scrollbarRef, - class: vue.normalizeClass(vue.unref(ns).b()) - }, [ - vue.createElementVNode("div", { - ref_key: "wrapRef", - ref: wrapRef, - class: vue.normalizeClass(vue.unref(wrapKls)), - style: vue.normalizeStyle(vue.unref(wrapStyle)), - tabindex: _ctx.tabindex, - onScroll: handleScroll - }, [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { - id: _ctx.id, - ref_key: "resizeRef", - ref: resizeRef, - class: vue.normalizeClass(vue.unref(resizeKls)), - style: vue.normalizeStyle(_ctx.viewStyle), - role: _ctx.role, - "aria-label": _ctx.ariaLabel, - "aria-orientation": _ctx.ariaOrientation - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["id", "class", "style", "role", "aria-label", "aria-orientation"])) - ], 46, ["tabindex"]), - !_ctx.native ? (vue.openBlock(), vue.createBlock(Bar, { - key: 0, - ref_key: "barRef", - ref: barRef, - always: _ctx.always, - "min-size": _ctx.minSize - }, null, 8, ["always", "min-size"])) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var Scrollbar$1 = /* @__PURE__ */ _export_sfc(_sfc_main$2p, [["__file", "scrollbar.vue"]]); - - const ElScrollbar = withInstall(Scrollbar$1); - - const POPPER_INJECTION_KEY = Symbol("popper"); - const POPPER_CONTENT_INJECTION_KEY = Symbol("popperContent"); - - const Effect = { - LIGHT: "light", - DARK: "dark" - }; - const roleTypes = [ - "dialog", - "grid", - "group", - "listbox", - "menu", - "navigation", - "tooltip", - "tree" - ]; - const popperProps = buildProps({ - role: { - type: String, - values: roleTypes, - default: "tooltip" - } - }); - const usePopperProps = popperProps; - - const __default__$1K = vue.defineComponent({ - name: "ElPopper", - inheritAttrs: false - }); - const _sfc_main$2o = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1K, - props: popperProps, - setup(__props, { expose }) { - const props = __props; - const triggerRef = vue.ref(); - const popperInstanceRef = vue.ref(); - const contentRef = vue.ref(); - const referenceRef = vue.ref(); - const role = vue.computed(() => props.role); - const popperProvides = { - triggerRef, - popperInstanceRef, - contentRef, - referenceRef, - role - }; - expose(popperProvides); - vue.provide(POPPER_INJECTION_KEY, popperProvides); - return (_ctx, _cache) => { - return vue.renderSlot(_ctx.$slots, "default"); - }; - } - }); - var Popper = /* @__PURE__ */ _export_sfc(_sfc_main$2o, [["__file", "popper.vue"]]); - - const popperArrowProps = buildProps({ - arrowOffset: { - type: Number, - default: 5 - } - }); - const usePopperArrowProps = popperArrowProps; - - const __default__$1J = vue.defineComponent({ - name: "ElPopperArrow", - inheritAttrs: false - }); - const _sfc_main$2n = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1J, - props: popperArrowProps, - setup(__props, { expose }) { - const props = __props; - const ns = useNamespace("popper"); - const { arrowOffset, arrowRef, arrowStyle } = vue.inject(POPPER_CONTENT_INJECTION_KEY, void 0); - vue.watch(() => props.arrowOffset, (val) => { - arrowOffset.value = val; - }); - vue.onBeforeUnmount(() => { - arrowRef.value = void 0; - }); - expose({ - arrowRef - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("span", { - ref_key: "arrowRef", - ref: arrowRef, - class: vue.normalizeClass(vue.unref(ns).e("arrow")), - style: vue.normalizeStyle(vue.unref(arrowStyle)), - "data-popper-arrow": "" - }, null, 6); - }; - } - }); - var ElPopperArrow = /* @__PURE__ */ _export_sfc(_sfc_main$2n, [["__file", "arrow.vue"]]); - - const NAME = "ElOnlyChild"; - const OnlyChild = vue.defineComponent({ - name: NAME, - setup(_, { - slots, - attrs - }) { - var _a; - const forwardRefInjection = vue.inject(FORWARD_REF_INJECTION_KEY); - const forwardRefDirective = useForwardRefDirective((_a = forwardRefInjection == null ? void 0 : forwardRefInjection.setForwardRef) != null ? _a : NOOP); - return () => { - var _a2; - const defaultSlot = (_a2 = slots.default) == null ? void 0 : _a2.call(slots, attrs); - if (!defaultSlot) - return null; - if (defaultSlot.length > 1) { - return null; - } - const firstLegitNode = findFirstLegitChild(defaultSlot); - if (!firstLegitNode) { - return null; - } - return vue.withDirectives(vue.cloneVNode(firstLegitNode, attrs), [[forwardRefDirective]]); - }; - } - }); - function findFirstLegitChild(node) { - if (!node) - return null; - const children = node; - for (const child of children) { - if (isObject$1(child)) { - switch (child.type) { - case vue.Comment: - continue; - case vue.Text: - case "svg": - return wrapTextContent(child); - case vue.Fragment: - return findFirstLegitChild(child.children); - default: - return child; - } - } - return wrapTextContent(child); - } - return null; - } - function wrapTextContent(s) { - const ns = useNamespace("only-child"); - return vue.createVNode("span", { - "class": ns.e("content") - }, [s]); - } - - const popperTriggerProps = buildProps({ - virtualRef: { - type: definePropType(Object) - }, - virtualTriggering: Boolean, - onMouseenter: { - type: definePropType(Function) - }, - onMouseleave: { - type: definePropType(Function) - }, - onClick: { - type: definePropType(Function) - }, - onKeydown: { - type: definePropType(Function) - }, - onFocus: { - type: definePropType(Function) - }, - onBlur: { - type: definePropType(Function) - }, - onContextmenu: { - type: definePropType(Function) - }, - id: String, - open: Boolean - }); - const usePopperTriggerProps = popperTriggerProps; - - const __default__$1I = vue.defineComponent({ - name: "ElPopperTrigger", - inheritAttrs: false - }); - const _sfc_main$2m = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1I, - props: popperTriggerProps, - setup(__props, { expose }) { - const props = __props; - const { role, triggerRef } = vue.inject(POPPER_INJECTION_KEY, void 0); - useForwardRef(triggerRef); - const ariaControls = vue.computed(() => { - return ariaHaspopup.value ? props.id : void 0; - }); - const ariaDescribedby = vue.computed(() => { - if (role && role.value === "tooltip") { - return props.open && props.id ? props.id : void 0; - } - return void 0; - }); - const ariaHaspopup = vue.computed(() => { - if (role && role.value !== "tooltip") { - return role.value; - } - return void 0; - }); - const ariaExpanded = vue.computed(() => { - return ariaHaspopup.value ? `${props.open}` : void 0; - }); - let virtualTriggerAriaStopWatch = void 0; - const TRIGGER_ELE_EVENTS = [ - "onMouseenter", - "onMouseleave", - "onClick", - "onKeydown", - "onFocus", - "onBlur", - "onContextmenu" - ]; - vue.onMounted(() => { - vue.watch(() => props.virtualRef, (virtualEl) => { - if (virtualEl) { - triggerRef.value = unrefElement(virtualEl); - } - }, { - immediate: true - }); - vue.watch(triggerRef, (el, prevEl) => { - virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch(); - virtualTriggerAriaStopWatch = void 0; - if (isElement$1(el)) { - TRIGGER_ELE_EVENTS.forEach((eventName) => { - var _a; - const handler = props[eventName]; - if (handler) { - el.addEventListener(eventName.slice(2).toLowerCase(), handler); - (_a = prevEl == null ? void 0 : prevEl.removeEventListener) == null ? void 0 : _a.call(prevEl, eventName.slice(2).toLowerCase(), handler); - } - }); - if (isFocusable(el)) { - virtualTriggerAriaStopWatch = vue.watch([ariaControls, ariaDescribedby, ariaHaspopup, ariaExpanded], (watches) => { - [ - "aria-controls", - "aria-describedby", - "aria-haspopup", - "aria-expanded" - ].forEach((key, idx) => { - isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]); - }); - }, { immediate: true }); - } - } - if (isElement$1(prevEl) && isFocusable(prevEl)) { - [ - "aria-controls", - "aria-describedby", - "aria-haspopup", - "aria-expanded" - ].forEach((key) => prevEl.removeAttribute(key)); - } - }, { - immediate: true - }); - }); - vue.onBeforeUnmount(() => { - virtualTriggerAriaStopWatch == null ? void 0 : virtualTriggerAriaStopWatch(); - virtualTriggerAriaStopWatch = void 0; - if (triggerRef.value && isElement$1(triggerRef.value)) { - const el = triggerRef.value; - TRIGGER_ELE_EVENTS.forEach((eventName) => { - const handler = props[eventName]; - if (handler) { - el.removeEventListener(eventName.slice(2).toLowerCase(), handler); - } - }); - triggerRef.value = void 0; - } - }); - expose({ - triggerRef - }); - return (_ctx, _cache) => { - return !_ctx.virtualTriggering ? (vue.openBlock(), vue.createBlock(vue.unref(OnlyChild), vue.mergeProps({ key: 0 }, _ctx.$attrs, { - "aria-controls": vue.unref(ariaControls), - "aria-describedby": vue.unref(ariaDescribedby), - "aria-expanded": vue.unref(ariaExpanded), - "aria-haspopup": vue.unref(ariaHaspopup) - }), { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 16, ["aria-controls", "aria-describedby", "aria-expanded", "aria-haspopup"])) : vue.createCommentVNode("v-if", true); - }; - } - }); - var ElPopperTrigger = /* @__PURE__ */ _export_sfc(_sfc_main$2m, [["__file", "trigger.vue"]]); - - const FOCUS_AFTER_TRAPPED = "focus-trap.focus-after-trapped"; - const FOCUS_AFTER_RELEASED = "focus-trap.focus-after-released"; - const FOCUSOUT_PREVENTED = "focus-trap.focusout-prevented"; - const FOCUS_AFTER_TRAPPED_OPTS = { - cancelable: true, - bubbles: false - }; - const FOCUSOUT_PREVENTED_OPTS = { - cancelable: true, - bubbles: false - }; - const ON_TRAP_FOCUS_EVT = "focusAfterTrapped"; - const ON_RELEASE_FOCUS_EVT = "focusAfterReleased"; - const FOCUS_TRAP_INJECTION_KEY = Symbol("elFocusTrap"); - - const focusReason = vue.ref(); - const lastUserFocusTimestamp = vue.ref(0); - const lastAutomatedFocusTimestamp = vue.ref(0); - let focusReasonUserCount = 0; - const obtainAllFocusableElements = (element) => { - const nodes = []; - const walker = document.createTreeWalker(element, NodeFilter.SHOW_ELEMENT, { - acceptNode: (node) => { - const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden"; - if (node.disabled || node.hidden || isHiddenInput) - return NodeFilter.FILTER_SKIP; - return node.tabIndex >= 0 || node === document.activeElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP; - } - }); - while (walker.nextNode()) - nodes.push(walker.currentNode); - return nodes; - }; - const getVisibleElement = (elements, container) => { - for (const element of elements) { - if (!isHidden(element, container)) - return element; - } - }; - const isHidden = (element, container) => { - if (getComputedStyle(element).visibility === "hidden") - return true; - while (element) { - if (container && element === container) - return false; - if (getComputedStyle(element).display === "none") - return true; - element = element.parentElement; - } - return false; - }; - const getEdges = (container) => { - const focusable = obtainAllFocusableElements(container); - const first = getVisibleElement(focusable, container); - const last = getVisibleElement(focusable.reverse(), container); - return [first, last]; - }; - const isSelectable = (element) => { - return element instanceof HTMLInputElement && "select" in element; - }; - const tryFocus = (element, shouldSelect) => { - if (element && element.focus) { - const prevFocusedElement = document.activeElement; - let cleanup = false; - if (isElement$1(element) && !isFocusable(element) && !element.getAttribute("tabindex")) { - element.setAttribute("tabindex", "-1"); - cleanup = true; - } - element.focus({ preventScroll: true }); - lastAutomatedFocusTimestamp.value = window.performance.now(); - if (element !== prevFocusedElement && isSelectable(element) && shouldSelect) { - element.select(); - } - if (isElement$1(element) && cleanup) { - element.removeAttribute("tabindex"); - } - } - }; - function removeFromStack(list, item) { - const copy = [...list]; - const idx = list.indexOf(item); - if (idx !== -1) { - copy.splice(idx, 1); - } - return copy; - } - const createFocusableStack = () => { - let stack = []; - const push = (layer) => { - const currentLayer = stack[0]; - if (currentLayer && layer !== currentLayer) { - currentLayer.pause(); - } - stack = removeFromStack(stack, layer); - stack.unshift(layer); - }; - const remove = (layer) => { - var _a, _b; - stack = removeFromStack(stack, layer); - (_b = (_a = stack[0]) == null ? void 0 : _a.resume) == null ? void 0 : _b.call(_a); - }; - return { - push, - remove - }; - }; - const focusFirstDescendant = (elements, shouldSelect = false) => { - const prevFocusedElement = document.activeElement; - for (const element of elements) { - tryFocus(element, shouldSelect); - if (document.activeElement !== prevFocusedElement) - return; - } - }; - const focusableStack = createFocusableStack(); - const isFocusCausedByUserEvent = () => { - return lastUserFocusTimestamp.value > lastAutomatedFocusTimestamp.value; - }; - const notifyFocusReasonPointer = () => { - focusReason.value = "pointer"; - lastUserFocusTimestamp.value = window.performance.now(); - }; - const notifyFocusReasonKeydown = () => { - focusReason.value = "keyboard"; - lastUserFocusTimestamp.value = window.performance.now(); - }; - const useFocusReason = () => { - vue.onMounted(() => { - if (focusReasonUserCount === 0) { - document.addEventListener("mousedown", notifyFocusReasonPointer); - document.addEventListener("touchstart", notifyFocusReasonPointer); - document.addEventListener("keydown", notifyFocusReasonKeydown); - } - focusReasonUserCount++; - }); - vue.onBeforeUnmount(() => { - focusReasonUserCount--; - if (focusReasonUserCount <= 0) { - document.removeEventListener("mousedown", notifyFocusReasonPointer); - document.removeEventListener("touchstart", notifyFocusReasonPointer); - document.removeEventListener("keydown", notifyFocusReasonKeydown); - } - }); - return { - focusReason, - lastUserFocusTimestamp, - lastAutomatedFocusTimestamp - }; - }; - const createFocusOutPreventedEvent = (detail) => { - return new CustomEvent(FOCUSOUT_PREVENTED, { - ...FOCUSOUT_PREVENTED_OPTS, - detail - }); - }; - - const _sfc_main$2l = vue.defineComponent({ - name: "ElFocusTrap", - inheritAttrs: false, - props: { - loop: Boolean, - trapped: Boolean, - focusTrapEl: Object, - focusStartEl: { - type: [Object, String], - default: "first" - } - }, - emits: [ - ON_TRAP_FOCUS_EVT, - ON_RELEASE_FOCUS_EVT, - "focusin", - "focusout", - "focusout-prevented", - "release-requested" - ], - setup(props, { emit }) { - const forwardRef = vue.ref(); - let lastFocusBeforeTrapped; - let lastFocusAfterTrapped; - const { focusReason } = useFocusReason(); - useEscapeKeydown((event) => { - if (props.trapped && !focusLayer.paused) { - emit("release-requested", event); - } - }); - const focusLayer = { - paused: false, - pause() { - this.paused = true; - }, - resume() { - this.paused = false; - } - }; - const onKeydown = (e) => { - if (!props.loop && !props.trapped) - return; - if (focusLayer.paused) - return; - const { code, altKey, ctrlKey, metaKey, currentTarget, shiftKey } = e; - const { loop } = props; - const isTabbing = code === EVENT_CODE.tab && !altKey && !ctrlKey && !metaKey; - const currentFocusingEl = document.activeElement; - if (isTabbing && currentFocusingEl) { - const container = currentTarget; - const [first, last] = getEdges(container); - const isTabbable = first && last; - if (!isTabbable) { - if (currentFocusingEl === container) { - const focusoutPreventedEvent = createFocusOutPreventedEvent({ - focusReason: focusReason.value - }); - emit("focusout-prevented", focusoutPreventedEvent); - if (!focusoutPreventedEvent.defaultPrevented) { - e.preventDefault(); - } - } - } else { - if (!shiftKey && currentFocusingEl === last) { - const focusoutPreventedEvent = createFocusOutPreventedEvent({ - focusReason: focusReason.value - }); - emit("focusout-prevented", focusoutPreventedEvent); - if (!focusoutPreventedEvent.defaultPrevented) { - e.preventDefault(); - if (loop) - tryFocus(first, true); - } - } else if (shiftKey && [first, container].includes(currentFocusingEl)) { - const focusoutPreventedEvent = createFocusOutPreventedEvent({ - focusReason: focusReason.value - }); - emit("focusout-prevented", focusoutPreventedEvent); - if (!focusoutPreventedEvent.defaultPrevented) { - e.preventDefault(); - if (loop) - tryFocus(last, true); - } - } - } - } - }; - vue.provide(FOCUS_TRAP_INJECTION_KEY, { - focusTrapRef: forwardRef, - onKeydown - }); - vue.watch(() => props.focusTrapEl, (focusTrapEl) => { - if (focusTrapEl) { - forwardRef.value = focusTrapEl; - } - }, { immediate: true }); - vue.watch([forwardRef], ([forwardRef2], [oldForwardRef]) => { - if (forwardRef2) { - forwardRef2.addEventListener("keydown", onKeydown); - forwardRef2.addEventListener("focusin", onFocusIn); - forwardRef2.addEventListener("focusout", onFocusOut); - } - if (oldForwardRef) { - oldForwardRef.removeEventListener("keydown", onKeydown); - oldForwardRef.removeEventListener("focusin", onFocusIn); - oldForwardRef.removeEventListener("focusout", onFocusOut); - } - }); - const trapOnFocus = (e) => { - emit(ON_TRAP_FOCUS_EVT, e); - }; - const releaseOnFocus = (e) => emit(ON_RELEASE_FOCUS_EVT, e); - const onFocusIn = (e) => { - const trapContainer = vue.unref(forwardRef); - if (!trapContainer) - return; - const target = e.target; - const relatedTarget = e.relatedTarget; - const isFocusedInTrap = target && trapContainer.contains(target); - if (!props.trapped) { - const isPrevFocusedInTrap = relatedTarget && trapContainer.contains(relatedTarget); - if (!isPrevFocusedInTrap) { - lastFocusBeforeTrapped = relatedTarget; - } - } - if (isFocusedInTrap) - emit("focusin", e); - if (focusLayer.paused) - return; - if (props.trapped) { - if (isFocusedInTrap) { - lastFocusAfterTrapped = target; - } else { - tryFocus(lastFocusAfterTrapped, true); - } - } - }; - const onFocusOut = (e) => { - const trapContainer = vue.unref(forwardRef); - if (focusLayer.paused || !trapContainer) - return; - if (props.trapped) { - const relatedTarget = e.relatedTarget; - if (!isNil(relatedTarget) && !trapContainer.contains(relatedTarget)) { - setTimeout(() => { - if (!focusLayer.paused && props.trapped) { - const focusoutPreventedEvent = createFocusOutPreventedEvent({ - focusReason: focusReason.value - }); - emit("focusout-prevented", focusoutPreventedEvent); - if (!focusoutPreventedEvent.defaultPrevented) { - tryFocus(lastFocusAfterTrapped, true); - } - } - }, 0); - } - } else { - const target = e.target; - const isFocusedInTrap = target && trapContainer.contains(target); - if (!isFocusedInTrap) - emit("focusout", e); - } - }; - async function startTrap() { - await vue.nextTick(); - const trapContainer = vue.unref(forwardRef); - if (trapContainer) { - focusableStack.push(focusLayer); - const prevFocusedElement = trapContainer.contains(document.activeElement) ? lastFocusBeforeTrapped : document.activeElement; - lastFocusBeforeTrapped = prevFocusedElement; - const isPrevFocusContained = trapContainer.contains(prevFocusedElement); - if (!isPrevFocusContained) { - const focusEvent = new Event(FOCUS_AFTER_TRAPPED, FOCUS_AFTER_TRAPPED_OPTS); - trapContainer.addEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus); - trapContainer.dispatchEvent(focusEvent); - if (!focusEvent.defaultPrevented) { - vue.nextTick(() => { - let focusStartEl = props.focusStartEl; - if (!isString$1(focusStartEl)) { - tryFocus(focusStartEl); - if (document.activeElement !== focusStartEl) { - focusStartEl = "first"; - } - } - if (focusStartEl === "first") { - focusFirstDescendant(obtainAllFocusableElements(trapContainer), true); - } - if (document.activeElement === prevFocusedElement || focusStartEl === "container") { - tryFocus(trapContainer); - } - }); - } - } - } - } - function stopTrap() { - const trapContainer = vue.unref(forwardRef); - if (trapContainer) { - trapContainer.removeEventListener(FOCUS_AFTER_TRAPPED, trapOnFocus); - const releasedEvent = new CustomEvent(FOCUS_AFTER_RELEASED, { - ...FOCUS_AFTER_TRAPPED_OPTS, - detail: { - focusReason: focusReason.value - } - }); - trapContainer.addEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus); - trapContainer.dispatchEvent(releasedEvent); - if (!releasedEvent.defaultPrevented && (focusReason.value == "keyboard" || !isFocusCausedByUserEvent() || trapContainer.contains(document.activeElement))) { - tryFocus(lastFocusBeforeTrapped != null ? lastFocusBeforeTrapped : document.body); - } - trapContainer.removeEventListener(FOCUS_AFTER_RELEASED, releaseOnFocus); - focusableStack.remove(focusLayer); - } - } - vue.onMounted(() => { - if (props.trapped) { - startTrap(); - } - vue.watch(() => props.trapped, (trapped) => { - if (trapped) { - startTrap(); - } else { - stopTrap(); - } - }); - }); - vue.onBeforeUnmount(() => { - if (props.trapped) { - stopTrap(); - } - if (forwardRef.value) { - forwardRef.value.removeEventListener("keydown", onKeydown); - forwardRef.value.removeEventListener("focusin", onFocusIn); - forwardRef.value.removeEventListener("focusout", onFocusOut); - forwardRef.value = void 0; - } - }); - return { - onKeydown - }; - } - }); - function _sfc_render$u(_ctx, _cache, $props, $setup, $data, $options) { - return vue.renderSlot(_ctx.$slots, "default", { handleKeydown: _ctx.onKeydown }); - } - var ElFocusTrap = /* @__PURE__ */ _export_sfc(_sfc_main$2l, [["render", _sfc_render$u], ["__file", "focus-trap.vue"]]); - - const POSITIONING_STRATEGIES = ["fixed", "absolute"]; - const popperCoreConfigProps = buildProps({ - boundariesPadding: { - type: Number, - default: 0 - }, - fallbackPlacements: { - type: definePropType(Array), - default: void 0 - }, - gpuAcceleration: { - type: Boolean, - default: true - }, - offset: { - type: Number, - default: 12 - }, - placement: { - type: String, - values: Ee, - default: "bottom" - }, - popperOptions: { - type: definePropType(Object), - default: () => ({}) - }, - strategy: { - type: String, - values: POSITIONING_STRATEGIES, - default: "absolute" - } - }); - const popperContentProps = buildProps({ - ...popperCoreConfigProps, - id: String, - style: { - type: definePropType([String, Array, Object]) - }, - className: { - type: definePropType([String, Array, Object]) - }, - effect: { - type: definePropType(String), - default: "dark" - }, - visible: Boolean, - enterable: { - type: Boolean, - default: true - }, - pure: Boolean, - focusOnShow: { - type: Boolean, - default: false - }, - trapping: { - type: Boolean, - default: false - }, - popperClass: { - type: definePropType([String, Array, Object]) - }, - popperStyle: { - type: definePropType([String, Array, Object]) - }, - referenceEl: { - type: definePropType(Object) - }, - triggerTargetEl: { - type: definePropType(Object) - }, - stopPopperMouseEvent: { - type: Boolean, - default: true - }, - virtualTriggering: Boolean, - zIndex: Number, - ...useAriaProps(["ariaLabel"]) - }); - const popperContentEmits = { - mouseenter: (evt) => evt instanceof MouseEvent, - mouseleave: (evt) => evt instanceof MouseEvent, - focus: () => true, - blur: () => true, - close: () => true - }; - const usePopperCoreConfigProps = popperCoreConfigProps; - const usePopperContentProps = popperContentProps; - const usePopperContentEmits = popperContentEmits; - - const buildPopperOptions = (props, modifiers = []) => { - const { placement, strategy, popperOptions } = props; - const options = { - placement, - strategy, - ...popperOptions, - modifiers: [...genModifiers(props), ...modifiers] - }; - deriveExtraModifiers(options, popperOptions == null ? void 0 : popperOptions.modifiers); - return options; - }; - const unwrapMeasurableEl = ($el) => { - if (!isClient) - return; - return unrefElement($el); - }; - function genModifiers(options) { - const { offset, gpuAcceleration, fallbackPlacements } = options; - return [ - { - name: "offset", - options: { - offset: [0, offset != null ? offset : 12] - } - }, - { - name: "preventOverflow", - options: { - padding: { - top: 2, - bottom: 2, - left: 5, - right: 5 - } - } - }, - { - name: "flip", - options: { - padding: 5, - fallbackPlacements - } - }, - { - name: "computeStyles", - options: { - gpuAcceleration - } - } - ]; - } - function deriveExtraModifiers(options, modifiers) { - if (modifiers) { - options.modifiers = [...options.modifiers, ...modifiers != null ? modifiers : []]; - } - } - - const DEFAULT_ARROW_OFFSET = 0; - const usePopperContent = (props) => { - const { popperInstanceRef, contentRef, triggerRef, role } = vue.inject(POPPER_INJECTION_KEY, void 0); - const arrowRef = vue.ref(); - const arrowOffset = vue.ref(); - const eventListenerModifier = vue.computed(() => { - return { - name: "eventListeners", - enabled: !!props.visible - }; - }); - const arrowModifier = vue.computed(() => { - var _a; - const arrowEl = vue.unref(arrowRef); - const offset = (_a = vue.unref(arrowOffset)) != null ? _a : DEFAULT_ARROW_OFFSET; - return { - name: "arrow", - enabled: !isUndefined$1(arrowEl), - options: { - element: arrowEl, - padding: offset - } - }; - }); - const options = vue.computed(() => { - return { - onFirstUpdate: () => { - update(); - }, - ...buildPopperOptions(props, [ - vue.unref(arrowModifier), - vue.unref(eventListenerModifier) - ]) - }; - }); - const computedReference = vue.computed(() => unwrapMeasurableEl(props.referenceEl) || vue.unref(triggerRef)); - const { attributes, state, styles, update, forceUpdate, instanceRef } = usePopper(computedReference, contentRef, options); - vue.watch(instanceRef, (instance) => popperInstanceRef.value = instance); - vue.onMounted(() => { - vue.watch(() => { - var _a; - return (_a = vue.unref(computedReference)) == null ? void 0 : _a.getBoundingClientRect(); - }, () => { - update(); - }); - }); - return { - attributes, - arrowRef, - contentRef, - instanceRef, - state, - styles, - role, - forceUpdate, - update - }; - }; - - const usePopperContentDOM = (props, { - attributes, - styles, - role - }) => { - const { nextZIndex } = useZIndex(); - const ns = useNamespace("popper"); - const contentAttrs = vue.computed(() => vue.unref(attributes).popper); - const contentZIndex = vue.ref(isNumber(props.zIndex) ? props.zIndex : nextZIndex()); - const contentClass = vue.computed(() => [ - ns.b(), - ns.is("pure", props.pure), - ns.is(props.effect), - props.popperClass - ]); - const contentStyle = vue.computed(() => { - return [ - { zIndex: vue.unref(contentZIndex) }, - vue.unref(styles).popper, - props.popperStyle || {} - ]; - }); - const ariaModal = vue.computed(() => role.value === "dialog" ? "false" : void 0); - const arrowStyle = vue.computed(() => vue.unref(styles).arrow || {}); - const updateZIndex = () => { - contentZIndex.value = isNumber(props.zIndex) ? props.zIndex : nextZIndex(); - }; - return { - ariaModal, - arrowStyle, - contentAttrs, - contentClass, - contentStyle, - contentZIndex, - updateZIndex - }; - }; - - const usePopperContentFocusTrap = (props, emit) => { - const trapped = vue.ref(false); - const focusStartRef = vue.ref(); - const onFocusAfterTrapped = () => { - emit("focus"); - }; - const onFocusAfterReleased = (event) => { - var _a; - if (((_a = event.detail) == null ? void 0 : _a.focusReason) !== "pointer") { - focusStartRef.value = "first"; - emit("blur"); - } - }; - const onFocusInTrap = (event) => { - if (props.visible && !trapped.value) { - if (event.target) { - focusStartRef.value = event.target; - } - trapped.value = true; - } - }; - const onFocusoutPrevented = (event) => { - if (!props.trapping) { - if (event.detail.focusReason === "pointer") { - event.preventDefault(); - } - trapped.value = false; - } - }; - const onReleaseRequested = () => { - trapped.value = false; - emit("close"); - }; - return { - focusStartRef, - trapped, - onFocusAfterReleased, - onFocusAfterTrapped, - onFocusInTrap, - onFocusoutPrevented, - onReleaseRequested - }; - }; - - const __default__$1H = vue.defineComponent({ - name: "ElPopperContent" - }); - const _sfc_main$2k = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1H, - props: popperContentProps, - emits: popperContentEmits, - setup(__props, { expose, emit }) { - const props = __props; - const { - focusStartRef, - trapped, - onFocusAfterReleased, - onFocusAfterTrapped, - onFocusInTrap, - onFocusoutPrevented, - onReleaseRequested - } = usePopperContentFocusTrap(props, emit); - const { attributes, arrowRef, contentRef, styles, instanceRef, role, update } = usePopperContent(props); - const { - ariaModal, - arrowStyle, - contentAttrs, - contentClass, - contentStyle, - updateZIndex - } = usePopperContentDOM(props, { - styles, - attributes, - role - }); - const formItemContext = vue.inject(formItemContextKey, void 0); - const arrowOffset = vue.ref(); - vue.provide(POPPER_CONTENT_INJECTION_KEY, { - arrowStyle, - arrowRef, - arrowOffset - }); - if (formItemContext) { - vue.provide(formItemContextKey, { - ...formItemContext, - addInputId: NOOP, - removeInputId: NOOP - }); - } - let triggerTargetAriaStopWatch = void 0; - const updatePopper = (shouldUpdateZIndex = true) => { - update(); - shouldUpdateZIndex && updateZIndex(); - }; - const togglePopperAlive = () => { - updatePopper(false); - if (props.visible && props.focusOnShow) { - trapped.value = true; - } else if (props.visible === false) { - trapped.value = false; - } - }; - vue.onMounted(() => { - vue.watch(() => props.triggerTargetEl, (triggerTargetEl, prevTriggerTargetEl) => { - triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch(); - triggerTargetAriaStopWatch = void 0; - const el = vue.unref(triggerTargetEl || contentRef.value); - const prevEl = vue.unref(prevTriggerTargetEl || contentRef.value); - if (isElement$1(el)) { - triggerTargetAriaStopWatch = vue.watch([role, () => props.ariaLabel, ariaModal, () => props.id], (watches) => { - ["role", "aria-label", "aria-modal", "id"].forEach((key, idx) => { - isNil(watches[idx]) ? el.removeAttribute(key) : el.setAttribute(key, watches[idx]); - }); - }, { immediate: true }); - } - if (prevEl !== el && isElement$1(prevEl)) { - ["role", "aria-label", "aria-modal", "id"].forEach((key) => { - prevEl.removeAttribute(key); - }); - } - }, { immediate: true }); - vue.watch(() => props.visible, togglePopperAlive, { immediate: true }); - }); - vue.onBeforeUnmount(() => { - triggerTargetAriaStopWatch == null ? void 0 : triggerTargetAriaStopWatch(); - triggerTargetAriaStopWatch = void 0; - }); - expose({ - popperContentRef: contentRef, - popperInstanceRef: instanceRef, - updatePopper, - contentStyle - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ - ref_key: "contentRef", - ref: contentRef - }, vue.unref(contentAttrs), { - style: vue.unref(contentStyle), - class: vue.unref(contentClass), - tabindex: "-1", - onMouseenter: (e) => _ctx.$emit("mouseenter", e), - onMouseleave: (e) => _ctx.$emit("mouseleave", e) - }), [ - vue.createVNode(vue.unref(ElFocusTrap), { - trapped: vue.unref(trapped), - "trap-on-focus-in": true, - "focus-trap-el": vue.unref(contentRef), - "focus-start-el": vue.unref(focusStartRef), - onFocusAfterTrapped: vue.unref(onFocusAfterTrapped), - onFocusAfterReleased: vue.unref(onFocusAfterReleased), - onFocusin: vue.unref(onFocusInTrap), - onFocusoutPrevented: vue.unref(onFocusoutPrevented), - onReleaseRequested: vue.unref(onReleaseRequested) - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["trapped", "focus-trap-el", "focus-start-el", "onFocusAfterTrapped", "onFocusAfterReleased", "onFocusin", "onFocusoutPrevented", "onReleaseRequested"]) - ], 16, ["onMouseenter", "onMouseleave"]); - }; - } - }); - var ElPopperContent = /* @__PURE__ */ _export_sfc(_sfc_main$2k, [["__file", "content.vue"]]); - - const ElPopper = withInstall(Popper); - - const TOOLTIP_INJECTION_KEY = Symbol("elTooltip"); - - const useTooltipContentProps = buildProps({ - ...useDelayedToggleProps, - ...popperContentProps, - appendTo: { - type: definePropType([String, Object]) - }, - content: { - type: String, - default: "" - }, - rawContent: Boolean, - persistent: Boolean, - visible: { - type: definePropType(Boolean), - default: null - }, - transition: String, - teleported: { - type: Boolean, - default: true - }, - disabled: Boolean, - ...useAriaProps(["ariaLabel"]) - }); - - const useTooltipTriggerProps = buildProps({ - ...popperTriggerProps, - disabled: Boolean, - trigger: { - type: definePropType([String, Array]), - default: "hover" - }, - triggerKeys: { - type: definePropType(Array), - default: () => [EVENT_CODE.enter, EVENT_CODE.numpadEnter, EVENT_CODE.space] - } - }); - - const { - useModelToggleProps: useTooltipModelToggleProps, - useModelToggleEmits: useTooltipModelToggleEmits, - useModelToggle: useTooltipModelToggle - } = createModelToggleComposable("visible"); - const useTooltipProps = buildProps({ - ...popperProps, - ...useTooltipModelToggleProps, - ...useTooltipContentProps, - ...useTooltipTriggerProps, - ...popperArrowProps, - showArrow: { - type: Boolean, - default: true - } - }); - const tooltipEmits = [ - ...useTooltipModelToggleEmits, - "before-show", - "before-hide", - "show", - "hide", - "open", - "close" - ]; - - const isTriggerType = (trigger, type) => { - if (isArray$1(trigger)) { - return trigger.includes(type); - } - return trigger === type; - }; - const whenTrigger = (trigger, type, handler) => { - return (e) => { - isTriggerType(vue.unref(trigger), type) && handler(e); - }; - }; - - const __default__$1G = vue.defineComponent({ - name: "ElTooltipTrigger" - }); - const _sfc_main$2j = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1G, - props: useTooltipTriggerProps, - setup(__props, { expose }) { - const props = __props; - const ns = useNamespace("tooltip"); - const { controlled, id, open, onOpen, onClose, onToggle } = vue.inject(TOOLTIP_INJECTION_KEY, void 0); - const triggerRef = vue.ref(null); - const stopWhenControlledOrDisabled = () => { - if (vue.unref(controlled) || props.disabled) { - return true; - } - }; - const trigger = vue.toRef(props, "trigger"); - const onMouseenter = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onOpen)); - const onMouseleave = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "hover", onClose)); - const onClick = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "click", (e) => { - if (e.button === 0) { - onToggle(e); - } - })); - const onFocus = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onOpen)); - const onBlur = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "focus", onClose)); - const onContextMenu = composeEventHandlers(stopWhenControlledOrDisabled, whenTrigger(trigger, "contextmenu", (e) => { - e.preventDefault(); - onToggle(e); - })); - const onKeydown = composeEventHandlers(stopWhenControlledOrDisabled, (e) => { - const { code } = e; - if (props.triggerKeys.includes(code)) { - e.preventDefault(); - onToggle(e); - } - }); - expose({ - triggerRef - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElPopperTrigger), { - id: vue.unref(id), - "virtual-ref": _ctx.virtualRef, - open: vue.unref(open), - "virtual-triggering": _ctx.virtualTriggering, - class: vue.normalizeClass(vue.unref(ns).e("trigger")), - onBlur: vue.unref(onBlur), - onClick: vue.unref(onClick), - onContextmenu: vue.unref(onContextMenu), - onFocus: vue.unref(onFocus), - onMouseenter: vue.unref(onMouseenter), - onMouseleave: vue.unref(onMouseleave), - onKeydown: vue.unref(onKeydown) - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["id", "virtual-ref", "open", "virtual-triggering", "class", "onBlur", "onClick", "onContextmenu", "onFocus", "onMouseenter", "onMouseleave", "onKeydown"]); - }; - } - }); - var ElTooltipTrigger = /* @__PURE__ */ _export_sfc(_sfc_main$2j, [["__file", "trigger.vue"]]); - - const teleportProps = buildProps({ - to: { - type: definePropType([String, Object]), - required: true - }, - disabled: Boolean - }); - - const _sfc_main$2i = /* @__PURE__ */ vue.defineComponent({ - __name: "teleport", - props: teleportProps, - setup(__props) { - return (_ctx, _cache) => { - return _ctx.disabled ? vue.renderSlot(_ctx.$slots, "default", { key: 0 }) : (vue.openBlock(), vue.createBlock(vue.Teleport, { - key: 1, - to: _ctx.to - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 8, ["to"])); - }; - } - }); - var Teleport = /* @__PURE__ */ _export_sfc(_sfc_main$2i, [["__file", "teleport.vue"]]); - - const ElTeleport = withInstall(Teleport); - var ElTeleport$1 = ElTeleport; - - const __default__$1F = vue.defineComponent({ - name: "ElTooltipContent", - inheritAttrs: false - }); - const _sfc_main$2h = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1F, - props: useTooltipContentProps, - setup(__props, { expose }) { - const props = __props; - const { selector } = usePopperContainerId(); - const ns = useNamespace("tooltip"); - const contentRef = vue.ref(); - let stopHandle; - const { - controlled, - id, - open, - trigger, - onClose, - onOpen, - onShow, - onHide, - onBeforeShow, - onBeforeHide - } = vue.inject(TOOLTIP_INJECTION_KEY, void 0); - const transitionClass = vue.computed(() => { - return props.transition || `${ns.namespace.value}-fade-in-linear`; - }); - const persistentRef = vue.computed(() => { - return props.persistent; - }); - vue.onBeforeUnmount(() => { - stopHandle == null ? void 0 : stopHandle(); - }); - const shouldRender = vue.computed(() => { - return vue.unref(persistentRef) ? true : vue.unref(open); - }); - const shouldShow = vue.computed(() => { - return props.disabled ? false : vue.unref(open); - }); - const appendTo = vue.computed(() => { - return props.appendTo || selector.value; - }); - const contentStyle = vue.computed(() => { - var _a; - return (_a = props.style) != null ? _a : {}; - }); - const ariaHidden = vue.ref(true); - const onTransitionLeave = () => { - onHide(); - isFocusInsideContent() && tryFocus(document.body); - ariaHidden.value = true; - }; - const stopWhenControlled = () => { - if (vue.unref(controlled)) - return true; - }; - const onContentEnter = composeEventHandlers(stopWhenControlled, () => { - if (props.enterable && vue.unref(trigger) === "hover") { - onOpen(); - } - }); - const onContentLeave = composeEventHandlers(stopWhenControlled, () => { - if (vue.unref(trigger) === "hover") { - onClose(); - } - }); - const onBeforeEnter = () => { - var _a, _b; - (_b = (_a = contentRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a); - onBeforeShow == null ? void 0 : onBeforeShow(); - }; - const onBeforeLeave = () => { - onBeforeHide == null ? void 0 : onBeforeHide(); - }; - const onAfterShow = () => { - onShow(); - stopHandle = onClickOutside(vue.computed(() => { - var _a; - return (_a = contentRef.value) == null ? void 0 : _a.popperContentRef; - }), () => { - if (vue.unref(controlled)) - return; - const $trigger = vue.unref(trigger); - if ($trigger !== "hover") { - onClose(); - } - }); - }; - const onBlur = () => { - if (!props.virtualTriggering) { - onClose(); - } - }; - const isFocusInsideContent = (event) => { - var _a; - const popperContent = (_a = contentRef.value) == null ? void 0 : _a.popperContentRef; - const activeElement = (event == null ? void 0 : event.relatedTarget) || document.activeElement; - return popperContent == null ? void 0 : popperContent.contains(activeElement); - }; - vue.watch(() => vue.unref(open), (val) => { - if (!val) { - stopHandle == null ? void 0 : stopHandle(); - } else { - ariaHidden.value = false; - } - }, { - flush: "post" - }); - vue.watch(() => props.content, () => { - var _a, _b; - (_b = (_a = contentRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a); - }); - expose({ - contentRef, - isFocusInsideContent - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTeleport$1), { - disabled: !_ctx.teleported, - to: vue.unref(appendTo) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.Transition, { - name: vue.unref(transitionClass), - onAfterLeave: onTransitionLeave, - onBeforeEnter, - onAfterEnter: onAfterShow, - onBeforeLeave - }, { - default: vue.withCtx(() => [ - vue.unref(shouldRender) ? vue.withDirectives((vue.openBlock(), vue.createBlock(vue.unref(ElPopperContent), vue.mergeProps({ - key: 0, - id: vue.unref(id), - ref_key: "contentRef", - ref: contentRef - }, _ctx.$attrs, { - "aria-label": _ctx.ariaLabel, - "aria-hidden": ariaHidden.value, - "boundaries-padding": _ctx.boundariesPadding, - "fallback-placements": _ctx.fallbackPlacements, - "gpu-acceleration": _ctx.gpuAcceleration, - offset: _ctx.offset, - placement: _ctx.placement, - "popper-options": _ctx.popperOptions, - strategy: _ctx.strategy, - effect: _ctx.effect, - enterable: _ctx.enterable, - pure: _ctx.pure, - "popper-class": _ctx.popperClass, - "popper-style": [_ctx.popperStyle, vue.unref(contentStyle)], - "reference-el": _ctx.referenceEl, - "trigger-target-el": _ctx.triggerTargetEl, - visible: vue.unref(shouldShow), - "z-index": _ctx.zIndex, - onMouseenter: vue.unref(onContentEnter), - onMouseleave: vue.unref(onContentLeave), - onBlur, - onClose: vue.unref(onClose) - }), { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 16, ["id", "aria-label", "aria-hidden", "boundaries-padding", "fallback-placements", "gpu-acceleration", "offset", "placement", "popper-options", "strategy", "effect", "enterable", "pure", "popper-class", "popper-style", "reference-el", "trigger-target-el", "visible", "z-index", "onMouseenter", "onMouseleave", "onClose"])), [ - [vue.vShow, vue.unref(shouldShow)] - ]) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["name"]) - ]), - _: 3 - }, 8, ["disabled", "to"]); - }; - } - }); - var ElTooltipContent = /* @__PURE__ */ _export_sfc(_sfc_main$2h, [["__file", "content.vue"]]); - - const __default__$1E = vue.defineComponent({ - name: "ElTooltip" - }); - const _sfc_main$2g = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1E, - props: useTooltipProps, - emits: tooltipEmits, - setup(__props, { expose, emit }) { - const props = __props; - usePopperContainer(); - const id = useId(); - const popperRef = vue.ref(); - const contentRef = vue.ref(); - const updatePopper = () => { - var _a; - const popperComponent = vue.unref(popperRef); - if (popperComponent) { - (_a = popperComponent.popperInstanceRef) == null ? void 0 : _a.update(); - } - }; - const open = vue.ref(false); - const toggleReason = vue.ref(); - const { show, hide, hasUpdateHandler } = useTooltipModelToggle({ - indicator: open, - toggleReason - }); - const { onOpen, onClose } = useDelayedToggle({ - showAfter: vue.toRef(props, "showAfter"), - hideAfter: vue.toRef(props, "hideAfter"), - autoClose: vue.toRef(props, "autoClose"), - open: show, - close: hide - }); - const controlled = vue.computed(() => isBoolean(props.visible) && !hasUpdateHandler.value); - vue.provide(TOOLTIP_INJECTION_KEY, { - controlled, - id, - open: vue.readonly(open), - trigger: vue.toRef(props, "trigger"), - onOpen: (event) => { - onOpen(event); - }, - onClose: (event) => { - onClose(event); - }, - onToggle: (event) => { - if (vue.unref(open)) { - onClose(event); - } else { - onOpen(event); - } - }, - onShow: () => { - emit("show", toggleReason.value); - }, - onHide: () => { - emit("hide", toggleReason.value); - }, - onBeforeShow: () => { - emit("before-show", toggleReason.value); - }, - onBeforeHide: () => { - emit("before-hide", toggleReason.value); - }, - updatePopper - }); - vue.watch(() => props.disabled, (disabled) => { - if (disabled && open.value) { - open.value = false; - } - }); - const isFocusInsideContent = (event) => { - var _a; - return (_a = contentRef.value) == null ? void 0 : _a.isFocusInsideContent(event); - }; - vue.onDeactivated(() => open.value && hide()); - expose({ - popperRef, - contentRef, - isFocusInsideContent, - updatePopper, - onOpen, - onClose, - hide - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElPopper), { - ref_key: "popperRef", - ref: popperRef, - role: _ctx.role - }, { - default: vue.withCtx(() => [ - vue.createVNode(ElTooltipTrigger, { - disabled: _ctx.disabled, - trigger: _ctx.trigger, - "trigger-keys": _ctx.triggerKeys, - "virtual-ref": _ctx.virtualRef, - "virtual-triggering": _ctx.virtualTriggering - }, { - default: vue.withCtx(() => [ - _ctx.$slots.default ? vue.renderSlot(_ctx.$slots, "default", { key: 0 }) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["disabled", "trigger", "trigger-keys", "virtual-ref", "virtual-triggering"]), - vue.createVNode(ElTooltipContent, { - ref_key: "contentRef", - ref: contentRef, - "aria-label": _ctx.ariaLabel, - "boundaries-padding": _ctx.boundariesPadding, - content: _ctx.content, - disabled: _ctx.disabled, - effect: _ctx.effect, - enterable: _ctx.enterable, - "fallback-placements": _ctx.fallbackPlacements, - "hide-after": _ctx.hideAfter, - "gpu-acceleration": _ctx.gpuAcceleration, - offset: _ctx.offset, - persistent: _ctx.persistent, - "popper-class": _ctx.popperClass, - "popper-style": _ctx.popperStyle, - placement: _ctx.placement, - "popper-options": _ctx.popperOptions, - pure: _ctx.pure, - "raw-content": _ctx.rawContent, - "reference-el": _ctx.referenceEl, - "trigger-target-el": _ctx.triggerTargetEl, - "show-after": _ctx.showAfter, - strategy: _ctx.strategy, - teleported: _ctx.teleported, - transition: _ctx.transition, - "virtual-triggering": _ctx.virtualTriggering, - "z-index": _ctx.zIndex, - "append-to": _ctx.appendTo - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "content", {}, () => [ - _ctx.rawContent ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - innerHTML: _ctx.content - }, null, 8, ["innerHTML"])) : (vue.openBlock(), vue.createElementBlock("span", { key: 1 }, vue.toDisplayString(_ctx.content), 1)) - ]), - _ctx.showArrow ? (vue.openBlock(), vue.createBlock(vue.unref(ElPopperArrow), { - key: 0, - "arrow-offset": _ctx.arrowOffset - }, null, 8, ["arrow-offset"])) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["aria-label", "boundaries-padding", "content", "disabled", "effect", "enterable", "fallback-placements", "hide-after", "gpu-acceleration", "offset", "persistent", "popper-class", "popper-style", "placement", "popper-options", "pure", "raw-content", "reference-el", "trigger-target-el", "show-after", "strategy", "teleported", "transition", "virtual-triggering", "z-index", "append-to"]) - ]), - _: 3 - }, 8, ["role"]); - }; - } - }); - var Tooltip = /* @__PURE__ */ _export_sfc(_sfc_main$2g, [["__file", "tooltip.vue"]]); - - const ElTooltip = withInstall(Tooltip); - - const autocompleteProps = buildProps({ - valueKey: { - type: String, - default: "value" - }, - modelValue: { - type: [String, Number], - default: "" - }, - debounce: { - type: Number, - default: 300 - }, - placement: { - type: definePropType(String), - values: [ - "top", - "top-start", - "top-end", - "bottom", - "bottom-start", - "bottom-end" - ], - default: "bottom-start" - }, - fetchSuggestions: { - type: definePropType([Function, Array]), - default: NOOP - }, - popperClass: { - type: String, - default: "" - }, - triggerOnFocus: { - type: Boolean, - default: true - }, - selectWhenUnmatched: { - type: Boolean, - default: false - }, - hideLoading: { - type: Boolean, - default: false - }, - teleported: useTooltipContentProps.teleported, - highlightFirstItem: { - type: Boolean, - default: false - }, - fitInputWidth: { - type: Boolean, - default: false - }, - clearable: { - type: Boolean, - default: false - }, - disabled: { - type: Boolean, - default: false - }, - name: String, - ...useAriaProps(["ariaLabel"]) - }); - const autocompleteEmits = { - [UPDATE_MODEL_EVENT]: (value) => isString$1(value), - [INPUT_EVENT]: (value) => isString$1(value), - [CHANGE_EVENT]: (value) => isString$1(value), - focus: (evt) => evt instanceof FocusEvent, - blur: (evt) => evt instanceof FocusEvent, - clear: () => true, - select: (item) => isObject$1(item) - }; - - const COMPONENT_NAME$i = "ElAutocomplete"; - const __default__$1D = vue.defineComponent({ - name: COMPONENT_NAME$i, - inheritAttrs: false - }); - const _sfc_main$2f = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1D, - props: autocompleteProps, - emits: autocompleteEmits, - setup(__props, { expose, emit }) { - const props = __props; - const attrs = useAttrs(); - const rawAttrs = vue.useAttrs(); - const disabled = useFormDisabled(); - const ns = useNamespace("autocomplete"); - const inputRef = vue.ref(); - const regionRef = vue.ref(); - const popperRef = vue.ref(); - const listboxRef = vue.ref(); - let readonly = false; - let ignoreFocusEvent = false; - const suggestions = vue.ref([]); - const highlightedIndex = vue.ref(-1); - const dropdownWidth = vue.ref(""); - const activated = vue.ref(false); - const suggestionDisabled = vue.ref(false); - const loading = vue.ref(false); - const listboxId = useId(); - const styles = vue.computed(() => rawAttrs.style); - const suggestionVisible = vue.computed(() => { - const isValidData = suggestions.value.length > 0; - return (isValidData || loading.value) && activated.value; - }); - const suggestionLoading = vue.computed(() => !props.hideLoading && loading.value); - const refInput = vue.computed(() => { - if (inputRef.value) { - return Array.from(inputRef.value.$el.querySelectorAll("input")); - } - return []; - }); - const onSuggestionShow = () => { - if (suggestionVisible.value) { - dropdownWidth.value = `${inputRef.value.$el.offsetWidth}px`; - } - }; - const onHide = () => { - highlightedIndex.value = -1; - }; - const getData = async (queryString) => { - if (suggestionDisabled.value) - return; - const cb = (suggestionList) => { - loading.value = false; - if (suggestionDisabled.value) - return; - if (isArray$1(suggestionList)) { - suggestions.value = suggestionList; - highlightedIndex.value = props.highlightFirstItem ? 0 : -1; - } else { - throwError(COMPONENT_NAME$i, "autocomplete suggestions must be an array"); - } - }; - loading.value = true; - if (isArray$1(props.fetchSuggestions)) { - cb(props.fetchSuggestions); - } else { - const result = await props.fetchSuggestions(queryString, cb); - if (isArray$1(result)) - cb(result); - } - }; - const debouncedGetData = debounce(getData, props.debounce); - const handleInput = (value) => { - const valuePresented = !!value; - emit(INPUT_EVENT, value); - emit(UPDATE_MODEL_EVENT, value); - suggestionDisabled.value = false; - activated.value || (activated.value = valuePresented); - if (!props.triggerOnFocus && !value) { - suggestionDisabled.value = true; - suggestions.value = []; - return; - } - debouncedGetData(value); - }; - const handleMouseDown = (event) => { - var _a; - if (disabled.value) - return; - if (((_a = event.target) == null ? void 0 : _a.tagName) !== "INPUT" || refInput.value.includes(document.activeElement)) { - activated.value = true; - } - }; - const handleChange = (value) => { - emit(CHANGE_EVENT, value); - }; - const handleFocus = (evt) => { - if (!ignoreFocusEvent) { - activated.value = true; - emit("focus", evt); - if (props.triggerOnFocus && !readonly) { - debouncedGetData(String(props.modelValue)); - } - } else { - ignoreFocusEvent = false; - } - }; - const handleBlur = (evt) => { - setTimeout(() => { - var _a; - if ((_a = popperRef.value) == null ? void 0 : _a.isFocusInsideContent()) { - ignoreFocusEvent = true; - return; - } - activated.value && close(); - emit("blur", evt); - }); - }; - const handleClear = () => { - activated.value = false; - emit(UPDATE_MODEL_EVENT, ""); - emit("clear"); - }; - const handleKeyEnter = async () => { - if (suggestionVisible.value && highlightedIndex.value >= 0 && highlightedIndex.value < suggestions.value.length) { - handleSelect(suggestions.value[highlightedIndex.value]); - } else if (props.selectWhenUnmatched) { - emit("select", { value: props.modelValue }); - suggestions.value = []; - highlightedIndex.value = -1; - } - }; - const handleKeyEscape = (evt) => { - if (suggestionVisible.value) { - evt.preventDefault(); - evt.stopPropagation(); - close(); - } - }; - const close = () => { - activated.value = false; - }; - const focus = () => { - var _a; - (_a = inputRef.value) == null ? void 0 : _a.focus(); - }; - const blur = () => { - var _a; - (_a = inputRef.value) == null ? void 0 : _a.blur(); - }; - const handleSelect = async (item) => { - emit(INPUT_EVENT, item[props.valueKey]); - emit(UPDATE_MODEL_EVENT, item[props.valueKey]); - emit("select", item); - suggestions.value = []; - highlightedIndex.value = -1; - }; - const highlight = (index) => { - if (!suggestionVisible.value || loading.value) - return; - if (index < 0) { - highlightedIndex.value = -1; - return; - } - if (index >= suggestions.value.length) { - index = suggestions.value.length - 1; - } - const suggestion = regionRef.value.querySelector(`.${ns.be("suggestion", "wrap")}`); - const suggestionList = suggestion.querySelectorAll(`.${ns.be("suggestion", "list")} li`); - const highlightItem = suggestionList[index]; - const scrollTop = suggestion.scrollTop; - const { offsetTop, scrollHeight } = highlightItem; - if (offsetTop + scrollHeight > scrollTop + suggestion.clientHeight) { - suggestion.scrollTop += scrollHeight; - } - if (offsetTop < scrollTop) { - suggestion.scrollTop -= scrollHeight; - } - highlightedIndex.value = index; - inputRef.value.ref.setAttribute("aria-activedescendant", `${listboxId.value}-item-${highlightedIndex.value}`); - }; - const stopHandle = onClickOutside(listboxRef, () => { - var _a; - if ((_a = popperRef.value) == null ? void 0 : _a.isFocusInsideContent()) - return; - suggestionVisible.value && close(); - }); - vue.onBeforeUnmount(() => { - stopHandle == null ? void 0 : stopHandle(); - }); - vue.onMounted(() => { - inputRef.value.ref.setAttribute("role", "textbox"); - inputRef.value.ref.setAttribute("aria-autocomplete", "list"); - inputRef.value.ref.setAttribute("aria-controls", "id"); - inputRef.value.ref.setAttribute("aria-activedescendant", `${listboxId.value}-item-${highlightedIndex.value}`); - readonly = inputRef.value.ref.hasAttribute("readonly"); - }); - expose({ - highlightedIndex, - activated, - loading, - inputRef, - popperRef, - suggestions, - handleSelect, - handleKeyEnter, - focus, - blur, - close, - highlight, - getData - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTooltip), { - ref_key: "popperRef", - ref: popperRef, - visible: vue.unref(suggestionVisible), - placement: _ctx.placement, - "fallback-placements": ["bottom-start", "top-start"], - "popper-class": [vue.unref(ns).e("popper"), _ctx.popperClass], - teleported: _ctx.teleported, - "gpu-acceleration": false, - pure: "", - "manual-mode": "", - effect: "light", - trigger: "click", - transition: `${vue.unref(ns).namespace.value}-zoom-in-top`, - persistent: "", - role: "listbox", - onBeforeShow: onSuggestionShow, - onHide - }, { - content: vue.withCtx(() => [ - vue.createElementVNode("div", { - ref_key: "regionRef", - ref: regionRef, - class: vue.normalizeClass([vue.unref(ns).b("suggestion"), vue.unref(ns).is("loading", vue.unref(suggestionLoading))]), - style: vue.normalizeStyle({ - [_ctx.fitInputWidth ? "width" : "minWidth"]: dropdownWidth.value, - outline: "none" - }), - role: "region" - }, [ - vue.createVNode(vue.unref(ElScrollbar), { - id: vue.unref(listboxId), - tag: "ul", - "wrap-class": vue.unref(ns).be("suggestion", "wrap"), - "view-class": vue.unref(ns).be("suggestion", "list"), - role: "listbox" - }, { - default: vue.withCtx(() => [ - vue.unref(suggestionLoading) ? (vue.openBlock(), vue.createElementBlock("li", { key: 0 }, [ - vue.renderSlot(_ctx.$slots, "loading", {}, () => [ - vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass(vue.unref(ns).is("loading")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(loading_default)) - ]), - _: 1 - }, 8, ["class"]) - ]) - ])) : (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(suggestions.value, (item, index) => { - return vue.openBlock(), vue.createElementBlock("li", { - id: `${vue.unref(listboxId)}-item-${index}`, - key: index, - class: vue.normalizeClass({ highlighted: highlightedIndex.value === index }), - role: "option", - "aria-selected": highlightedIndex.value === index, - onClick: ($event) => handleSelect(item) - }, [ - vue.renderSlot(_ctx.$slots, "default", { item }, () => [ - vue.createTextVNode(vue.toDisplayString(item[_ctx.valueKey]), 1) - ]) - ], 10, ["id", "aria-selected", "onClick"]); - }), 128)) - ]), - _: 3 - }, 8, ["id", "wrap-class", "view-class"]) - ], 6) - ]), - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - ref_key: "listboxRef", - ref: listboxRef, - class: vue.normalizeClass([vue.unref(ns).b(), _ctx.$attrs.class]), - style: vue.normalizeStyle(vue.unref(styles)), - role: "combobox", - "aria-haspopup": "listbox", - "aria-expanded": vue.unref(suggestionVisible), - "aria-owns": vue.unref(listboxId) - }, [ - vue.createVNode(vue.unref(ElInput), vue.mergeProps({ - ref_key: "inputRef", - ref: inputRef - }, vue.unref(attrs), { - clearable: _ctx.clearable, - disabled: vue.unref(disabled), - name: _ctx.name, - "model-value": _ctx.modelValue, - "aria-label": _ctx.ariaLabel, - onInput: handleInput, - onChange: handleChange, - onFocus: handleFocus, - onBlur: handleBlur, - onClear: handleClear, - onKeydown: [ - vue.withKeys(vue.withModifiers(($event) => highlight(highlightedIndex.value - 1), ["prevent"]), ["up"]), - vue.withKeys(vue.withModifiers(($event) => highlight(highlightedIndex.value + 1), ["prevent"]), ["down"]), - vue.withKeys(handleKeyEnter, ["enter"]), - vue.withKeys(close, ["tab"]), - vue.withKeys(handleKeyEscape, ["esc"]) - ], - onMousedown: handleMouseDown - }), vue.createSlots({ - _: 2 - }, [ - _ctx.$slots.prepend ? { - name: "prepend", - fn: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "prepend") - ]) - } : void 0, - _ctx.$slots.append ? { - name: "append", - fn: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "append") - ]) - } : void 0, - _ctx.$slots.prefix ? { - name: "prefix", - fn: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "prefix") - ]) - } : void 0, - _ctx.$slots.suffix ? { - name: "suffix", - fn: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "suffix") - ]) - } : void 0 - ]), 1040, ["clearable", "disabled", "name", "model-value", "aria-label", "onKeydown"]) - ], 14, ["aria-expanded", "aria-owns"]) - ]), - _: 3 - }, 8, ["visible", "placement", "popper-class", "teleported", "transition"]); - }; - } - }); - var Autocomplete = /* @__PURE__ */ _export_sfc(_sfc_main$2f, [["__file", "autocomplete.vue"]]); - - const ElAutocomplete = withInstall(Autocomplete); - - const avatarProps = buildProps({ - size: { - type: [Number, String], - values: componentSizes, - default: "", - validator: (val) => isNumber(val) - }, - shape: { - type: String, - values: ["circle", "square"], - default: "circle" - }, - icon: { - type: iconPropType - }, - src: { - type: String, - default: "" - }, - alt: String, - srcSet: String, - fit: { - type: definePropType(String), - default: "cover" - } - }); - const avatarEmits = { - error: (evt) => evt instanceof Event - }; - - const __default__$1C = vue.defineComponent({ - name: "ElAvatar" - }); - const _sfc_main$2e = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1C, - props: avatarProps, - emits: avatarEmits, - setup(__props, { emit }) { - const props = __props; - const ns = useNamespace("avatar"); - const hasLoadError = vue.ref(false); - const avatarClass = vue.computed(() => { - const { size, icon, shape } = props; - const classList = [ns.b()]; - if (isString$1(size)) - classList.push(ns.m(size)); - if (icon) - classList.push(ns.m("icon")); - if (shape) - classList.push(ns.m(shape)); - return classList; - }); - const sizeStyle = vue.computed(() => { - const { size } = props; - return isNumber(size) ? ns.cssVarBlock({ - size: addUnit(size) || "" - }) : void 0; - }); - const fitStyle = vue.computed(() => ({ - objectFit: props.fit - })); - vue.watch(() => props.src, () => hasLoadError.value = false); - function handleError(e) { - hasLoadError.value = true; - emit("error", e); - } - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("span", { - class: vue.normalizeClass(vue.unref(avatarClass)), - style: vue.normalizeStyle(vue.unref(sizeStyle)) - }, [ - (_ctx.src || _ctx.srcSet) && !hasLoadError.value ? (vue.openBlock(), vue.createElementBlock("img", { - key: 0, - src: _ctx.src, - alt: _ctx.alt, - srcset: _ctx.srcSet, - style: vue.normalizeStyle(vue.unref(fitStyle)), - onError: handleError - }, null, 44, ["src", "alt", "srcset"])) : _ctx.icon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 1 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon))) - ]), - _: 1 - })) : vue.renderSlot(_ctx.$slots, "default", { key: 2 }) - ], 6); - }; - } - }); - var Avatar = /* @__PURE__ */ _export_sfc(_sfc_main$2e, [["__file", "avatar.vue"]]); - - const ElAvatar = withInstall(Avatar); - - const backtopProps = { - visibilityHeight: { - type: Number, - default: 200 - }, - target: { - type: String, - default: "" - }, - right: { - type: Number, - default: 40 - }, - bottom: { - type: Number, - default: 40 - } - }; - const backtopEmits = { - click: (evt) => evt instanceof MouseEvent - }; - - const useBackTop = (props, emit, componentName) => { - const el = vue.shallowRef(); - const container = vue.shallowRef(); - const visible = vue.ref(false); - const handleScroll = () => { - if (el.value) - visible.value = el.value.scrollTop >= props.visibilityHeight; - }; - const handleClick = (event) => { - var _a; - (_a = el.value) == null ? void 0 : _a.scrollTo({ top: 0, behavior: "smooth" }); - emit("click", event); - }; - const handleScrollThrottled = useThrottleFn(handleScroll, 300, true); - useEventListener(container, "scroll", handleScrollThrottled); - vue.onMounted(() => { - var _a; - container.value = document; - el.value = document.documentElement; - if (props.target) { - el.value = (_a = document.querySelector(props.target)) != null ? _a : void 0; - if (!el.value) { - throwError(componentName, `target does not exist: ${props.target}`); - } - container.value = el.value; - } - handleScroll(); - }); - return { - visible, - handleClick - }; - }; - - const COMPONENT_NAME$h = "ElBacktop"; - const __default__$1B = vue.defineComponent({ - name: COMPONENT_NAME$h - }); - const _sfc_main$2d = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1B, - props: backtopProps, - emits: backtopEmits, - setup(__props, { emit }) { - const props = __props; - const ns = useNamespace("backtop"); - const { handleClick, visible } = useBackTop(props, emit, COMPONENT_NAME$h); - const backTopStyle = vue.computed(() => ({ - right: `${props.right}px`, - bottom: `${props.bottom}px` - })); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.Transition, { - name: `${vue.unref(ns).namespace.value}-fade-in` - }, { - default: vue.withCtx(() => [ - vue.unref(visible) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - style: vue.normalizeStyle(vue.unref(backTopStyle)), - class: vue.normalizeClass(vue.unref(ns).b()), - onClick: vue.withModifiers(vue.unref(handleClick), ["stop"]) - }, [ - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass(vue.unref(ns).e("icon")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(caret_top_default)) - ]), - _: 1 - }, 8, ["class"]) - ]) - ], 14, ["onClick"])) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["name"]); - }; - } - }); - var Backtop = /* @__PURE__ */ _export_sfc(_sfc_main$2d, [["__file", "backtop.vue"]]); - - const ElBacktop = withInstall(Backtop); - - const badgeProps = buildProps({ - value: { - type: [String, Number], - default: "" - }, - max: { - type: Number, - default: 99 - }, - isDot: Boolean, - hidden: Boolean, - type: { - type: String, - values: ["primary", "success", "warning", "info", "danger"], - default: "danger" - }, - showZero: { - type: Boolean, - default: true - }, - color: String, - badgeStyle: { - type: definePropType([String, Object, Array]) - }, - offset: { - type: definePropType(Array), - default: [0, 0] - }, - badgeClass: { - type: String - } - }); - - const __default__$1A = vue.defineComponent({ - name: "ElBadge" - }); - const _sfc_main$2c = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1A, - props: badgeProps, - setup(__props, { expose }) { - const props = __props; - const ns = useNamespace("badge"); - const content = vue.computed(() => { - if (props.isDot) - return ""; - if (isNumber(props.value) && isNumber(props.max)) { - return props.max < props.value ? `${props.max}+` : `${props.value}`; - } - return `${props.value}`; - }); - const style = vue.computed(() => { - var _a, _b, _c, _d, _e; - return [ - { - backgroundColor: props.color, - marginRight: addUnit(-((_b = (_a = props.offset) == null ? void 0 : _a[0]) != null ? _b : 0)), - marginTop: addUnit((_d = (_c = props.offset) == null ? void 0 : _c[1]) != null ? _d : 0) - }, - (_e = props.badgeStyle) != null ? _e : {} - ]; - }); - expose({ - content - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(ns).b()) - }, [ - vue.renderSlot(_ctx.$slots, "default"), - vue.createVNode(vue.Transition, { - name: `${vue.unref(ns).namespace.value}-zoom-in-center`, - persisted: "" - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createElementVNode("sup", { - class: vue.normalizeClass([ - vue.unref(ns).e("content"), - vue.unref(ns).em("content", _ctx.type), - vue.unref(ns).is("fixed", !!_ctx.$slots.default), - vue.unref(ns).is("dot", _ctx.isDot), - vue.unref(ns).is("hide-zero", !_ctx.showZero && props.value === 0), - _ctx.badgeClass - ]), - style: vue.normalizeStyle(vue.unref(style)) - }, [ - vue.renderSlot(_ctx.$slots, "content", { value: vue.unref(content) }, () => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(content)), 1) - ]) - ], 6), [ - [vue.vShow, !_ctx.hidden && (vue.unref(content) || _ctx.isDot || _ctx.$slots.content)] - ]) - ]), - _: 3 - }, 8, ["name"]) - ], 2); - }; - } - }); - var Badge = /* @__PURE__ */ _export_sfc(_sfc_main$2c, [["__file", "badge.vue"]]); - - const ElBadge = withInstall(Badge); - - const breadcrumbKey = Symbol("breadcrumbKey"); - - const breadcrumbProps = buildProps({ - separator: { - type: String, - default: "/" - }, - separatorIcon: { - type: iconPropType - } - }); - - const __default__$1z = vue.defineComponent({ - name: "ElBreadcrumb" - }); - const _sfc_main$2b = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1z, - props: breadcrumbProps, - setup(__props) { - const props = __props; - const { t } = useLocale(); - const ns = useNamespace("breadcrumb"); - const breadcrumb = vue.ref(); - vue.provide(breadcrumbKey, props); - vue.onMounted(() => { - const items = breadcrumb.value.querySelectorAll(`.${ns.e("item")}`); - if (items.length) { - items[items.length - 1].setAttribute("aria-current", "page"); - } - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "breadcrumb", - ref: breadcrumb, - class: vue.normalizeClass(vue.unref(ns).b()), - "aria-label": vue.unref(t)("el.breadcrumb.label"), - role: "navigation" - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 10, ["aria-label"]); - }; - } - }); - var Breadcrumb = /* @__PURE__ */ _export_sfc(_sfc_main$2b, [["__file", "breadcrumb.vue"]]); - - const breadcrumbItemProps = buildProps({ - to: { - type: definePropType([String, Object]), - default: "" - }, - replace: Boolean - }); - - const __default__$1y = vue.defineComponent({ - name: "ElBreadcrumbItem" - }); - const _sfc_main$2a = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1y, - props: breadcrumbItemProps, - setup(__props) { - const props = __props; - const instance = vue.getCurrentInstance(); - const breadcrumbContext = vue.inject(breadcrumbKey, void 0); - const ns = useNamespace("breadcrumb"); - const router = instance.appContext.config.globalProperties.$router; - const link = vue.ref(); - const onClick = () => { - if (!props.to || !router) - return; - props.replace ? router.replace(props.to) : router.push(props.to); - }; - return (_ctx, _cache) => { - var _a, _b; - return vue.openBlock(), vue.createElementBlock("span", { - class: vue.normalizeClass(vue.unref(ns).e("item")) - }, [ - vue.createElementVNode("span", { - ref_key: "link", - ref: link, - class: vue.normalizeClass([vue.unref(ns).e("inner"), vue.unref(ns).is("link", !!_ctx.to)]), - role: "link", - onClick - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2), - ((_a = vue.unref(breadcrumbContext)) == null ? void 0 : _a.separatorIcon) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("separator")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(breadcrumbContext).separatorIcon))) - ]), - _: 1 - }, 8, ["class"])) : (vue.openBlock(), vue.createElementBlock("span", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("separator")), - role: "presentation" - }, vue.toDisplayString((_b = vue.unref(breadcrumbContext)) == null ? void 0 : _b.separator), 3)) - ], 2); - }; - } - }); - var BreadcrumbItem = /* @__PURE__ */ _export_sfc(_sfc_main$2a, [["__file", "breadcrumb-item.vue"]]); - - const ElBreadcrumb = withInstall(Breadcrumb, { - BreadcrumbItem - }); - const ElBreadcrumbItem = withNoopInstall(BreadcrumbItem); - - const buttonGroupContextKey = Symbol("buttonGroupContextKey"); - - const useButton = (props, emit) => { - useDeprecated({ - from: "type.text", - replacement: "link", - version: "3.0.0", - scope: "props", - ref: "https://element-plus.org/en-US/component/button.html#button-attributes" - }, vue.computed(() => props.type === "text")); - const buttonGroupContext = vue.inject(buttonGroupContextKey, void 0); - const globalConfig = useGlobalConfig("button"); - const { form } = useFormItem(); - const _size = useFormSize(vue.computed(() => buttonGroupContext == null ? void 0 : buttonGroupContext.size)); - const _disabled = useFormDisabled(); - const _ref = vue.ref(); - const slots = vue.useSlots(); - const _type = vue.computed(() => props.type || (buttonGroupContext == null ? void 0 : buttonGroupContext.type) || ""); - const autoInsertSpace = vue.computed(() => { - var _a, _b, _c; - return (_c = (_b = props.autoInsertSpace) != null ? _b : (_a = globalConfig.value) == null ? void 0 : _a.autoInsertSpace) != null ? _c : false; - }); - const _props = vue.computed(() => { - if (props.tag === "button") { - return { - ariaDisabled: _disabled.value || props.loading, - disabled: _disabled.value || props.loading, - autofocus: props.autofocus, - type: props.nativeType - }; - } - return {}; - }); - const shouldAddSpace = vue.computed(() => { - var _a; - const defaultSlot = (_a = slots.default) == null ? void 0 : _a.call(slots); - if (autoInsertSpace.value && (defaultSlot == null ? void 0 : defaultSlot.length) === 1) { - const slot = defaultSlot[0]; - if ((slot == null ? void 0 : slot.type) === vue.Text) { - const text = slot.children; - return /^\p{Unified_Ideograph}{2}$/u.test(text.trim()); - } - } - return false; - }); - const handleClick = (evt) => { - if (_disabled.value || props.loading) { - evt.stopPropagation(); - return; - } - if (props.nativeType === "reset") { - form == null ? void 0 : form.resetFields(); - } - emit("click", evt); - }; - return { - _disabled, - _size, - _type, - _ref, - _props, - shouldAddSpace, - handleClick - }; - }; - - const buttonTypes = [ - "default", - "primary", - "success", - "warning", - "info", - "danger", - "text", - "" - ]; - const buttonNativeTypes = ["button", "submit", "reset"]; - const buttonProps = buildProps({ - size: useSizeProp, - disabled: Boolean, - type: { - type: String, - values: buttonTypes, - default: "" - }, - icon: { - type: iconPropType - }, - nativeType: { - type: String, - values: buttonNativeTypes, - default: "button" - }, - loading: Boolean, - loadingIcon: { - type: iconPropType, - default: () => loading_default - }, - plain: Boolean, - text: Boolean, - link: Boolean, - bg: Boolean, - autofocus: Boolean, - round: Boolean, - circle: Boolean, - color: String, - dark: Boolean, - autoInsertSpace: { - type: Boolean, - default: void 0 - }, - tag: { - type: definePropType([String, Object]), - default: "button" - } - }); - const buttonEmits = { - click: (evt) => evt instanceof MouseEvent - }; - - function bound01$1(n, max) { - if (isOnePointZero$1(n)) { - n = "100%"; - } - var isPercent = isPercentage$1(n); - n = max === 360 ? n : Math.min(max, Math.max(0, parseFloat(n))); - if (isPercent) { - n = parseInt(String(n * max), 10) / 100; - } - if (Math.abs(n - max) < 1e-6) { - return 1; - } - if (max === 360) { - n = (n < 0 ? n % max + max : n % max) / parseFloat(String(max)); - } else { - n = n % max / parseFloat(String(max)); - } - return n; - } - function clamp01(val) { - return Math.min(1, Math.max(0, val)); - } - function isOnePointZero$1(n) { - return typeof n === "string" && n.indexOf(".") !== -1 && parseFloat(n) === 1; - } - function isPercentage$1(n) { - return typeof n === "string" && n.indexOf("%") !== -1; - } - function boundAlpha(a) { - a = parseFloat(a); - if (isNaN(a) || a < 0 || a > 1) { - a = 1; - } - return a; - } - function convertToPercentage(n) { - if (n <= 1) { - return "".concat(Number(n) * 100, "%"); - } - return n; - } - function pad2(c) { - return c.length === 1 ? "0" + c : String(c); - } - - function rgbToRgb(r, g, b) { - return { - r: bound01$1(r, 255) * 255, - g: bound01$1(g, 255) * 255, - b: bound01$1(b, 255) * 255 - }; - } - function rgbToHsl(r, g, b) { - r = bound01$1(r, 255); - g = bound01$1(g, 255); - b = bound01$1(b, 255); - var max = Math.max(r, g, b); - var min = Math.min(r, g, b); - var h = 0; - var s = 0; - var l = (max + min) / 2; - if (max === min) { - s = 0; - h = 0; - } else { - var d = max - min; - s = l > 0.5 ? d / (2 - max - min) : d / (max + min); - switch (max) { - case r: - h = (g - b) / d + (g < b ? 6 : 0); - break; - case g: - h = (b - r) / d + 2; - break; - case b: - h = (r - g) / d + 4; - break; - } - h /= 6; - } - return { h, s, l }; - } - function hue2rgb(p, q, t) { - if (t < 0) { - t += 1; - } - if (t > 1) { - t -= 1; - } - if (t < 1 / 6) { - return p + (q - p) * (6 * t); - } - if (t < 1 / 2) { - return q; - } - if (t < 2 / 3) { - return p + (q - p) * (2 / 3 - t) * 6; - } - return p; - } - function hslToRgb(h, s, l) { - var r; - var g; - var b; - h = bound01$1(h, 360); - s = bound01$1(s, 100); - l = bound01$1(l, 100); - if (s === 0) { - g = l; - b = l; - r = l; - } else { - var q = l < 0.5 ? l * (1 + s) : l + s - l * s; - var p = 2 * l - q; - r = hue2rgb(p, q, h + 1 / 3); - g = hue2rgb(p, q, h); - b = hue2rgb(p, q, h - 1 / 3); - } - return { r: r * 255, g: g * 255, b: b * 255 }; - } - function rgbToHsv(r, g, b) { - r = bound01$1(r, 255); - g = bound01$1(g, 255); - b = bound01$1(b, 255); - var max = Math.max(r, g, b); - var min = Math.min(r, g, b); - var h = 0; - var v = max; - var d = max - min; - var s = max === 0 ? 0 : d / max; - if (max === min) { - h = 0; - } else { - switch (max) { - case r: - h = (g - b) / d + (g < b ? 6 : 0); - break; - case g: - h = (b - r) / d + 2; - break; - case b: - h = (r - g) / d + 4; - break; - } - h /= 6; - } - return { h, s, v }; - } - function hsvToRgb(h, s, v) { - h = bound01$1(h, 360) * 6; - s = bound01$1(s, 100); - v = bound01$1(v, 100); - var i = Math.floor(h); - var f = h - i; - var p = v * (1 - s); - var q = v * (1 - f * s); - var t = v * (1 - (1 - f) * s); - var mod = i % 6; - var r = [v, q, p, p, t, v][mod]; - var g = [t, v, v, q, p, p][mod]; - var b = [p, p, t, v, v, q][mod]; - return { r: r * 255, g: g * 255, b: b * 255 }; - } - function rgbToHex(r, g, b, allow3Char) { - var hex = [ - pad2(Math.round(r).toString(16)), - pad2(Math.round(g).toString(16)), - pad2(Math.round(b).toString(16)) - ]; - if (allow3Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1))) { - return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); - } - return hex.join(""); - } - function rgbaToHex(r, g, b, a, allow4Char) { - var hex = [ - pad2(Math.round(r).toString(16)), - pad2(Math.round(g).toString(16)), - pad2(Math.round(b).toString(16)), - pad2(convertDecimalToHex(a)) - ]; - if (allow4Char && hex[0].startsWith(hex[0].charAt(1)) && hex[1].startsWith(hex[1].charAt(1)) && hex[2].startsWith(hex[2].charAt(1)) && hex[3].startsWith(hex[3].charAt(1))) { - return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); - } - return hex.join(""); - } - function convertDecimalToHex(d) { - return Math.round(parseFloat(d) * 255).toString(16); - } - function convertHexToDecimal(h) { - return parseIntFromHex(h) / 255; - } - function parseIntFromHex(val) { - return parseInt(val, 16); - } - function numberInputToObject(color) { - return { - r: color >> 16, - g: (color & 65280) >> 8, - b: color & 255 - }; - } - - var names = { - aliceblue: "#f0f8ff", - antiquewhite: "#faebd7", - aqua: "#00ffff", - aquamarine: "#7fffd4", - azure: "#f0ffff", - beige: "#f5f5dc", - bisque: "#ffe4c4", - black: "#000000", - blanchedalmond: "#ffebcd", - blue: "#0000ff", - blueviolet: "#8a2be2", - brown: "#a52a2a", - burlywood: "#deb887", - cadetblue: "#5f9ea0", - chartreuse: "#7fff00", - chocolate: "#d2691e", - coral: "#ff7f50", - cornflowerblue: "#6495ed", - cornsilk: "#fff8dc", - crimson: "#dc143c", - cyan: "#00ffff", - darkblue: "#00008b", - darkcyan: "#008b8b", - darkgoldenrod: "#b8860b", - darkgray: "#a9a9a9", - darkgreen: "#006400", - darkgrey: "#a9a9a9", - darkkhaki: "#bdb76b", - darkmagenta: "#8b008b", - darkolivegreen: "#556b2f", - darkorange: "#ff8c00", - darkorchid: "#9932cc", - darkred: "#8b0000", - darksalmon: "#e9967a", - darkseagreen: "#8fbc8f", - darkslateblue: "#483d8b", - darkslategray: "#2f4f4f", - darkslategrey: "#2f4f4f", - darkturquoise: "#00ced1", - darkviolet: "#9400d3", - deeppink: "#ff1493", - deepskyblue: "#00bfff", - dimgray: "#696969", - dimgrey: "#696969", - dodgerblue: "#1e90ff", - firebrick: "#b22222", - floralwhite: "#fffaf0", - forestgreen: "#228b22", - fuchsia: "#ff00ff", - gainsboro: "#dcdcdc", - ghostwhite: "#f8f8ff", - goldenrod: "#daa520", - gold: "#ffd700", - gray: "#808080", - green: "#008000", - greenyellow: "#adff2f", - grey: "#808080", - honeydew: "#f0fff0", - hotpink: "#ff69b4", - indianred: "#cd5c5c", - indigo: "#4b0082", - ivory: "#fffff0", - khaki: "#f0e68c", - lavenderblush: "#fff0f5", - lavender: "#e6e6fa", - lawngreen: "#7cfc00", - lemonchiffon: "#fffacd", - lightblue: "#add8e6", - lightcoral: "#f08080", - lightcyan: "#e0ffff", - lightgoldenrodyellow: "#fafad2", - lightgray: "#d3d3d3", - lightgreen: "#90ee90", - lightgrey: "#d3d3d3", - lightpink: "#ffb6c1", - lightsalmon: "#ffa07a", - lightseagreen: "#20b2aa", - lightskyblue: "#87cefa", - lightslategray: "#778899", - lightslategrey: "#778899", - lightsteelblue: "#b0c4de", - lightyellow: "#ffffe0", - lime: "#00ff00", - limegreen: "#32cd32", - linen: "#faf0e6", - magenta: "#ff00ff", - maroon: "#800000", - mediumaquamarine: "#66cdaa", - mediumblue: "#0000cd", - mediumorchid: "#ba55d3", - mediumpurple: "#9370db", - mediumseagreen: "#3cb371", - mediumslateblue: "#7b68ee", - mediumspringgreen: "#00fa9a", - mediumturquoise: "#48d1cc", - mediumvioletred: "#c71585", - midnightblue: "#191970", - mintcream: "#f5fffa", - mistyrose: "#ffe4e1", - moccasin: "#ffe4b5", - navajowhite: "#ffdead", - navy: "#000080", - oldlace: "#fdf5e6", - olive: "#808000", - olivedrab: "#6b8e23", - orange: "#ffa500", - orangered: "#ff4500", - orchid: "#da70d6", - palegoldenrod: "#eee8aa", - palegreen: "#98fb98", - paleturquoise: "#afeeee", - palevioletred: "#db7093", - papayawhip: "#ffefd5", - peachpuff: "#ffdab9", - peru: "#cd853f", - pink: "#ffc0cb", - plum: "#dda0dd", - powderblue: "#b0e0e6", - purple: "#800080", - rebeccapurple: "#663399", - red: "#ff0000", - rosybrown: "#bc8f8f", - royalblue: "#4169e1", - saddlebrown: "#8b4513", - salmon: "#fa8072", - sandybrown: "#f4a460", - seagreen: "#2e8b57", - seashell: "#fff5ee", - sienna: "#a0522d", - silver: "#c0c0c0", - skyblue: "#87ceeb", - slateblue: "#6a5acd", - slategray: "#708090", - slategrey: "#708090", - snow: "#fffafa", - springgreen: "#00ff7f", - steelblue: "#4682b4", - tan: "#d2b48c", - teal: "#008080", - thistle: "#d8bfd8", - tomato: "#ff6347", - turquoise: "#40e0d0", - violet: "#ee82ee", - wheat: "#f5deb3", - white: "#ffffff", - whitesmoke: "#f5f5f5", - yellow: "#ffff00", - yellowgreen: "#9acd32" - }; - - function inputToRGB(color) { - var rgb = { r: 0, g: 0, b: 0 }; - var a = 1; - var s = null; - var v = null; - var l = null; - var ok = false; - var format = false; - if (typeof color === "string") { - color = stringInputToObject(color); - } - if (typeof color === "object") { - if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { - rgb = rgbToRgb(color.r, color.g, color.b); - ok = true; - format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; - } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { - s = convertToPercentage(color.s); - v = convertToPercentage(color.v); - rgb = hsvToRgb(color.h, s, v); - ok = true; - format = "hsv"; - } else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { - s = convertToPercentage(color.s); - l = convertToPercentage(color.l); - rgb = hslToRgb(color.h, s, l); - ok = true; - format = "hsl"; - } - if (Object.prototype.hasOwnProperty.call(color, "a")) { - a = color.a; - } - } - a = boundAlpha(a); - return { - ok, - format: color.format || format, - r: Math.min(255, Math.max(rgb.r, 0)), - g: Math.min(255, Math.max(rgb.g, 0)), - b: Math.min(255, Math.max(rgb.b, 0)), - a - }; - } - var CSS_INTEGER = "[-\\+]?\\d+%?"; - var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; - var CSS_UNIT = "(?:".concat(CSS_NUMBER, ")|(?:").concat(CSS_INTEGER, ")"); - var PERMISSIVE_MATCH3 = "[\\s|\\(]+(".concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")\\s*\\)?"); - var PERMISSIVE_MATCH4 = "[\\s|\\(]+(".concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")[,|\\s]+(").concat(CSS_UNIT, ")\\s*\\)?"); - var matchers = { - CSS_UNIT: new RegExp(CSS_UNIT), - rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), - rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), - hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), - hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), - hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), - hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), - hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, - hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, - hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, - hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ - }; - function stringInputToObject(color) { - color = color.trim().toLowerCase(); - if (color.length === 0) { - return false; - } - var named = false; - if (names[color]) { - color = names[color]; - named = true; - } else if (color === "transparent") { - return { r: 0, g: 0, b: 0, a: 0, format: "name" }; - } - var match = matchers.rgb.exec(color); - if (match) { - return { r: match[1], g: match[2], b: match[3] }; - } - match = matchers.rgba.exec(color); - if (match) { - return { r: match[1], g: match[2], b: match[3], a: match[4] }; - } - match = matchers.hsl.exec(color); - if (match) { - return { h: match[1], s: match[2], l: match[3] }; - } - match = matchers.hsla.exec(color); - if (match) { - return { h: match[1], s: match[2], l: match[3], a: match[4] }; - } - match = matchers.hsv.exec(color); - if (match) { - return { h: match[1], s: match[2], v: match[3] }; - } - match = matchers.hsva.exec(color); - if (match) { - return { h: match[1], s: match[2], v: match[3], a: match[4] }; - } - match = matchers.hex8.exec(color); - if (match) { - return { - r: parseIntFromHex(match[1]), - g: parseIntFromHex(match[2]), - b: parseIntFromHex(match[3]), - a: convertHexToDecimal(match[4]), - format: named ? "name" : "hex8" - }; - } - match = matchers.hex6.exec(color); - if (match) { - return { - r: parseIntFromHex(match[1]), - g: parseIntFromHex(match[2]), - b: parseIntFromHex(match[3]), - format: named ? "name" : "hex" - }; - } - match = matchers.hex4.exec(color); - if (match) { - return { - r: parseIntFromHex(match[1] + match[1]), - g: parseIntFromHex(match[2] + match[2]), - b: parseIntFromHex(match[3] + match[3]), - a: convertHexToDecimal(match[4] + match[4]), - format: named ? "name" : "hex8" - }; - } - match = matchers.hex3.exec(color); - if (match) { - return { - r: parseIntFromHex(match[1] + match[1]), - g: parseIntFromHex(match[2] + match[2]), - b: parseIntFromHex(match[3] + match[3]), - format: named ? "name" : "hex" - }; - } - return false; - } - function isValidCSSUnit(color) { - return Boolean(matchers.CSS_UNIT.exec(String(color))); - } - - var TinyColor = function() { - function TinyColor2(color, opts) { - if (color === void 0) { - color = ""; - } - if (opts === void 0) { - opts = {}; - } - var _a; - if (color instanceof TinyColor2) { - return color; - } - if (typeof color === "number") { - color = numberInputToObject(color); - } - this.originalInput = color; - var rgb = inputToRGB(color); - this.originalInput = color; - this.r = rgb.r; - this.g = rgb.g; - this.b = rgb.b; - this.a = rgb.a; - this.roundA = Math.round(100 * this.a) / 100; - this.format = (_a = opts.format) !== null && _a !== void 0 ? _a : rgb.format; - this.gradientType = opts.gradientType; - if (this.r < 1) { - this.r = Math.round(this.r); - } - if (this.g < 1) { - this.g = Math.round(this.g); - } - if (this.b < 1) { - this.b = Math.round(this.b); - } - this.isValid = rgb.ok; - } - TinyColor2.prototype.isDark = function() { - return this.getBrightness() < 128; - }; - TinyColor2.prototype.isLight = function() { - return !this.isDark(); - }; - TinyColor2.prototype.getBrightness = function() { - var rgb = this.toRgb(); - return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1e3; - }; - TinyColor2.prototype.getLuminance = function() { - var rgb = this.toRgb(); - var R; - var G; - var B; - var RsRGB = rgb.r / 255; - var GsRGB = rgb.g / 255; - var BsRGB = rgb.b / 255; - if (RsRGB <= 0.03928) { - R = RsRGB / 12.92; - } else { - R = Math.pow((RsRGB + 0.055) / 1.055, 2.4); - } - if (GsRGB <= 0.03928) { - G = GsRGB / 12.92; - } else { - G = Math.pow((GsRGB + 0.055) / 1.055, 2.4); - } - if (BsRGB <= 0.03928) { - B = BsRGB / 12.92; - } else { - B = Math.pow((BsRGB + 0.055) / 1.055, 2.4); - } - return 0.2126 * R + 0.7152 * G + 0.0722 * B; - }; - TinyColor2.prototype.getAlpha = function() { - return this.a; - }; - TinyColor2.prototype.setAlpha = function(alpha) { - this.a = boundAlpha(alpha); - this.roundA = Math.round(100 * this.a) / 100; - return this; - }; - TinyColor2.prototype.toHsv = function() { - var hsv = rgbToHsv(this.r, this.g, this.b); - return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this.a }; - }; - TinyColor2.prototype.toHsvString = function() { - var hsv = rgbToHsv(this.r, this.g, this.b); - var h = Math.round(hsv.h * 360); - var s = Math.round(hsv.s * 100); - var v = Math.round(hsv.v * 100); - return this.a === 1 ? "hsv(".concat(h, ", ").concat(s, "%, ").concat(v, "%)") : "hsva(".concat(h, ", ").concat(s, "%, ").concat(v, "%, ").concat(this.roundA, ")"); - }; - TinyColor2.prototype.toHsl = function() { - var hsl = rgbToHsl(this.r, this.g, this.b); - return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this.a }; - }; - TinyColor2.prototype.toHslString = function() { - var hsl = rgbToHsl(this.r, this.g, this.b); - var h = Math.round(hsl.h * 360); - var s = Math.round(hsl.s * 100); - var l = Math.round(hsl.l * 100); - return this.a === 1 ? "hsl(".concat(h, ", ").concat(s, "%, ").concat(l, "%)") : "hsla(".concat(h, ", ").concat(s, "%, ").concat(l, "%, ").concat(this.roundA, ")"); - }; - TinyColor2.prototype.toHex = function(allow3Char) { - if (allow3Char === void 0) { - allow3Char = false; - } - return rgbToHex(this.r, this.g, this.b, allow3Char); - }; - TinyColor2.prototype.toHexString = function(allow3Char) { - if (allow3Char === void 0) { - allow3Char = false; - } - return "#" + this.toHex(allow3Char); - }; - TinyColor2.prototype.toHex8 = function(allow4Char) { - if (allow4Char === void 0) { - allow4Char = false; - } - return rgbaToHex(this.r, this.g, this.b, this.a, allow4Char); - }; - TinyColor2.prototype.toHex8String = function(allow4Char) { - if (allow4Char === void 0) { - allow4Char = false; - } - return "#" + this.toHex8(allow4Char); - }; - TinyColor2.prototype.toRgb = function() { - return { - r: Math.round(this.r), - g: Math.round(this.g), - b: Math.round(this.b), - a: this.a - }; - }; - TinyColor2.prototype.toRgbString = function() { - var r = Math.round(this.r); - var g = Math.round(this.g); - var b = Math.round(this.b); - return this.a === 1 ? "rgb(".concat(r, ", ").concat(g, ", ").concat(b, ")") : "rgba(".concat(r, ", ").concat(g, ", ").concat(b, ", ").concat(this.roundA, ")"); - }; - TinyColor2.prototype.toPercentageRgb = function() { - var fmt = function(x) { - return "".concat(Math.round(bound01$1(x, 255) * 100), "%"); - }; - return { - r: fmt(this.r), - g: fmt(this.g), - b: fmt(this.b), - a: this.a - }; - }; - TinyColor2.prototype.toPercentageRgbString = function() { - var rnd = function(x) { - return Math.round(bound01$1(x, 255) * 100); - }; - return this.a === 1 ? "rgb(".concat(rnd(this.r), "%, ").concat(rnd(this.g), "%, ").concat(rnd(this.b), "%)") : "rgba(".concat(rnd(this.r), "%, ").concat(rnd(this.g), "%, ").concat(rnd(this.b), "%, ").concat(this.roundA, ")"); - }; - TinyColor2.prototype.toName = function() { - if (this.a === 0) { - return "transparent"; - } - if (this.a < 1) { - return false; - } - var hex = "#" + rgbToHex(this.r, this.g, this.b, false); - for (var _i = 0, _a = Object.entries(names); _i < _a.length; _i++) { - var _b = _a[_i], key = _b[0], value = _b[1]; - if (hex === value) { - return key; - } - } - return false; - }; - TinyColor2.prototype.toString = function(format) { - var formatSet = Boolean(format); - format = format !== null && format !== void 0 ? format : this.format; - var formattedString = false; - var hasAlpha = this.a < 1 && this.a >= 0; - var needsAlphaFormat = !formatSet && hasAlpha && (format.startsWith("hex") || format === "name"); - if (needsAlphaFormat) { - if (format === "name" && this.a === 0) { - return this.toName(); - } - return this.toRgbString(); - } - if (format === "rgb") { - formattedString = this.toRgbString(); - } - if (format === "prgb") { - formattedString = this.toPercentageRgbString(); - } - if (format === "hex" || format === "hex6") { - formattedString = this.toHexString(); - } - if (format === "hex3") { - formattedString = this.toHexString(true); - } - if (format === "hex4") { - formattedString = this.toHex8String(true); - } - if (format === "hex8") { - formattedString = this.toHex8String(); - } - if (format === "name") { - formattedString = this.toName(); - } - if (format === "hsl") { - formattedString = this.toHslString(); - } - if (format === "hsv") { - formattedString = this.toHsvString(); - } - return formattedString || this.toHexString(); - }; - TinyColor2.prototype.toNumber = function() { - return (Math.round(this.r) << 16) + (Math.round(this.g) << 8) + Math.round(this.b); - }; - TinyColor2.prototype.clone = function() { - return new TinyColor2(this.toString()); - }; - TinyColor2.prototype.lighten = function(amount) { - if (amount === void 0) { - amount = 10; - } - var hsl = this.toHsl(); - hsl.l += amount / 100; - hsl.l = clamp01(hsl.l); - return new TinyColor2(hsl); - }; - TinyColor2.prototype.brighten = function(amount) { - if (amount === void 0) { - amount = 10; - } - var rgb = this.toRgb(); - rgb.r = Math.max(0, Math.min(255, rgb.r - Math.round(255 * -(amount / 100)))); - rgb.g = Math.max(0, Math.min(255, rgb.g - Math.round(255 * -(amount / 100)))); - rgb.b = Math.max(0, Math.min(255, rgb.b - Math.round(255 * -(amount / 100)))); - return new TinyColor2(rgb); - }; - TinyColor2.prototype.darken = function(amount) { - if (amount === void 0) { - amount = 10; - } - var hsl = this.toHsl(); - hsl.l -= amount / 100; - hsl.l = clamp01(hsl.l); - return new TinyColor2(hsl); - }; - TinyColor2.prototype.tint = function(amount) { - if (amount === void 0) { - amount = 10; - } - return this.mix("white", amount); - }; - TinyColor2.prototype.shade = function(amount) { - if (amount === void 0) { - amount = 10; - } - return this.mix("black", amount); - }; - TinyColor2.prototype.desaturate = function(amount) { - if (amount === void 0) { - amount = 10; - } - var hsl = this.toHsl(); - hsl.s -= amount / 100; - hsl.s = clamp01(hsl.s); - return new TinyColor2(hsl); - }; - TinyColor2.prototype.saturate = function(amount) { - if (amount === void 0) { - amount = 10; - } - var hsl = this.toHsl(); - hsl.s += amount / 100; - hsl.s = clamp01(hsl.s); - return new TinyColor2(hsl); - }; - TinyColor2.prototype.greyscale = function() { - return this.desaturate(100); - }; - TinyColor2.prototype.spin = function(amount) { - var hsl = this.toHsl(); - var hue = (hsl.h + amount) % 360; - hsl.h = hue < 0 ? 360 + hue : hue; - return new TinyColor2(hsl); - }; - TinyColor2.prototype.mix = function(color, amount) { - if (amount === void 0) { - amount = 50; - } - var rgb1 = this.toRgb(); - var rgb2 = new TinyColor2(color).toRgb(); - var p = amount / 100; - var rgba = { - r: (rgb2.r - rgb1.r) * p + rgb1.r, - g: (rgb2.g - rgb1.g) * p + rgb1.g, - b: (rgb2.b - rgb1.b) * p + rgb1.b, - a: (rgb2.a - rgb1.a) * p + rgb1.a - }; - return new TinyColor2(rgba); - }; - TinyColor2.prototype.analogous = function(results, slices) { - if (results === void 0) { - results = 6; - } - if (slices === void 0) { - slices = 30; - } - var hsl = this.toHsl(); - var part = 360 / slices; - var ret = [this]; - for (hsl.h = (hsl.h - (part * results >> 1) + 720) % 360; --results; ) { - hsl.h = (hsl.h + part) % 360; - ret.push(new TinyColor2(hsl)); - } - return ret; - }; - TinyColor2.prototype.complement = function() { - var hsl = this.toHsl(); - hsl.h = (hsl.h + 180) % 360; - return new TinyColor2(hsl); - }; - TinyColor2.prototype.monochromatic = function(results) { - if (results === void 0) { - results = 6; - } - var hsv = this.toHsv(); - var h = hsv.h; - var s = hsv.s; - var v = hsv.v; - var res = []; - var modification = 1 / results; - while (results--) { - res.push(new TinyColor2({ h, s, v })); - v = (v + modification) % 1; - } - return res; - }; - TinyColor2.prototype.splitcomplement = function() { - var hsl = this.toHsl(); - var h = hsl.h; - return [ - this, - new TinyColor2({ h: (h + 72) % 360, s: hsl.s, l: hsl.l }), - new TinyColor2({ h: (h + 216) % 360, s: hsl.s, l: hsl.l }) - ]; - }; - TinyColor2.prototype.onBackground = function(background) { - var fg = this.toRgb(); - var bg = new TinyColor2(background).toRgb(); - return new TinyColor2({ - r: bg.r + (fg.r - bg.r) * fg.a, - g: bg.g + (fg.g - bg.g) * fg.a, - b: bg.b + (fg.b - bg.b) * fg.a - }); - }; - TinyColor2.prototype.triad = function() { - return this.polyad(3); - }; - TinyColor2.prototype.tetrad = function() { - return this.polyad(4); - }; - TinyColor2.prototype.polyad = function(n) { - var hsl = this.toHsl(); - var h = hsl.h; - var result = [this]; - var increment = 360 / n; - for (var i = 1; i < n; i++) { - result.push(new TinyColor2({ h: (h + i * increment) % 360, s: hsl.s, l: hsl.l })); - } - return result; - }; - TinyColor2.prototype.equals = function(color) { - return this.toRgbString() === new TinyColor2(color).toRgbString(); - }; - return TinyColor2; - }(); - - function darken(color, amount = 20) { - return color.mix("#141414", amount).toString(); - } - function useButtonCustomStyle(props) { - const _disabled = useFormDisabled(); - const ns = useNamespace("button"); - return vue.computed(() => { - let styles = {}; - let buttonColor = props.color; - if (buttonColor) { - const match = buttonColor.match(/var\((.*?)\)/); - if (match) { - buttonColor = window.getComputedStyle(window.document.documentElement).getPropertyValue(match[1]); - } - const color = new TinyColor(buttonColor); - const activeBgColor = props.dark ? color.tint(20).toString() : darken(color, 20); - if (props.plain) { - styles = ns.cssVarBlock({ - "bg-color": props.dark ? darken(color, 90) : color.tint(90).toString(), - "text-color": buttonColor, - "border-color": props.dark ? darken(color, 50) : color.tint(50).toString(), - "hover-text-color": `var(${ns.cssVarName("color-white")})`, - "hover-bg-color": buttonColor, - "hover-border-color": buttonColor, - "active-bg-color": activeBgColor, - "active-text-color": `var(${ns.cssVarName("color-white")})`, - "active-border-color": activeBgColor - }); - if (_disabled.value) { - styles[ns.cssVarBlockName("disabled-bg-color")] = props.dark ? darken(color, 90) : color.tint(90).toString(); - styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? darken(color, 50) : color.tint(50).toString(); - styles[ns.cssVarBlockName("disabled-border-color")] = props.dark ? darken(color, 80) : color.tint(80).toString(); - } - } else { - const hoverBgColor = props.dark ? darken(color, 30) : color.tint(30).toString(); - const textColor = color.isDark() ? `var(${ns.cssVarName("color-white")})` : `var(${ns.cssVarName("color-black")})`; - styles = ns.cssVarBlock({ - "bg-color": buttonColor, - "text-color": textColor, - "border-color": buttonColor, - "hover-bg-color": hoverBgColor, - "hover-text-color": textColor, - "hover-border-color": hoverBgColor, - "active-bg-color": activeBgColor, - "active-border-color": activeBgColor - }); - if (_disabled.value) { - const disabledButtonColor = props.dark ? darken(color, 50) : color.tint(50).toString(); - styles[ns.cssVarBlockName("disabled-bg-color")] = disabledButtonColor; - styles[ns.cssVarBlockName("disabled-text-color")] = props.dark ? "rgba(255, 255, 255, 0.5)" : `var(${ns.cssVarName("color-white")})`; - styles[ns.cssVarBlockName("disabled-border-color")] = disabledButtonColor; - } - } - } - return styles; - }); - } - - const __default__$1x = vue.defineComponent({ - name: "ElButton" - }); - const _sfc_main$29 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1x, - props: buttonProps, - emits: buttonEmits, - setup(__props, { expose, emit }) { - const props = __props; - const buttonStyle = useButtonCustomStyle(props); - const ns = useNamespace("button"); - const { _ref, _size, _type, _disabled, _props, shouldAddSpace, handleClick } = useButton(props, emit); - const buttonKls = vue.computed(() => [ - ns.b(), - ns.m(_type.value), - ns.m(_size.value), - ns.is("disabled", _disabled.value), - ns.is("loading", props.loading), - ns.is("plain", props.plain), - ns.is("round", props.round), - ns.is("circle", props.circle), - ns.is("text", props.text), - ns.is("link", props.link), - ns.is("has-bg", props.bg) - ]); - expose({ - ref: _ref, - size: _size, - type: _type, - disabled: _disabled, - shouldAddSpace - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), vue.mergeProps({ - ref_key: "_ref", - ref: _ref - }, vue.unref(_props), { - class: vue.unref(buttonKls), - style: vue.unref(buttonStyle), - onClick: vue.unref(handleClick) - }), { - default: vue.withCtx(() => [ - _ctx.loading ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - _ctx.$slots.loading ? vue.renderSlot(_ctx.$slots, "loading", { key: 0 }) : (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 1, - class: vue.normalizeClass(vue.unref(ns).is("loading")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.loadingIcon))) - ]), - _: 1 - }, 8, ["class"])) - ], 64)) : _ctx.icon || _ctx.$slots.icon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 1 }, { - default: vue.withCtx(() => [ - _ctx.icon ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon), { key: 0 })) : vue.renderSlot(_ctx.$slots, "icon", { key: 1 }) - ]), - _: 3 - })) : vue.createCommentVNode("v-if", true), - _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("span", { - key: 2, - class: vue.normalizeClass({ [vue.unref(ns).em("text", "expand")]: vue.unref(shouldAddSpace) }) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2)) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 16, ["class", "style", "onClick"]); - }; - } - }); - var Button = /* @__PURE__ */ _export_sfc(_sfc_main$29, [["__file", "button.vue"]]); - - const buttonGroupProps = { - size: buttonProps.size, - type: buttonProps.type - }; - - const __default__$1w = vue.defineComponent({ - name: "ElButtonGroup" - }); - const _sfc_main$28 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1w, - props: buttonGroupProps, - setup(__props) { - const props = __props; - vue.provide(buttonGroupContextKey, vue.reactive({ - size: vue.toRef(props, "size"), - type: vue.toRef(props, "type") - })); - const ns = useNamespace("button"); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(ns).b("group")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2); - }; - } - }); - var ButtonGroup = /* @__PURE__ */ _export_sfc(_sfc_main$28, [["__file", "button-group.vue"]]); - - const ElButton = withInstall(Button, { - ButtonGroup - }); - const ElButtonGroup$1 = withNoopInstall(ButtonGroup); - - var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - var dayjs_min = {exports: {}}; - - (function(module, exports) { - !function(t, e) { - module.exports = e() ; - }(commonjsGlobal, function() { - var t = 1e3, e = 6e4, n = 36e5, r = "millisecond", i = "second", s = "minute", u = "hour", a = "day", o = "week", c = "month", f = "quarter", h = "year", d = "date", l = "Invalid Date", $ = /^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/, y = /\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g, M = { name: "en", weekdays: "Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"), months: "January_February_March_April_May_June_July_August_September_October_November_December".split("_"), ordinal: function(t2) { - var e2 = ["th", "st", "nd", "rd"], n2 = t2 % 100; - return "[" + t2 + (e2[(n2 - 20) % 10] || e2[n2] || e2[0]) + "]"; - } }, m = function(t2, e2, n2) { - var r2 = String(t2); - return !r2 || r2.length >= e2 ? t2 : "" + Array(e2 + 1 - r2.length).join(n2) + t2; - }, v = { s: m, z: function(t2) { - var e2 = -t2.utcOffset(), n2 = Math.abs(e2), r2 = Math.floor(n2 / 60), i2 = n2 % 60; - return (e2 <= 0 ? "+" : "-") + m(r2, 2, "0") + ":" + m(i2, 2, "0"); - }, m: function t2(e2, n2) { - if (e2.date() < n2.date()) - return -t2(n2, e2); - var r2 = 12 * (n2.year() - e2.year()) + (n2.month() - e2.month()), i2 = e2.clone().add(r2, c), s2 = n2 - i2 < 0, u2 = e2.clone().add(r2 + (s2 ? -1 : 1), c); - return +(-(r2 + (n2 - i2) / (s2 ? i2 - u2 : u2 - i2)) || 0); - }, a: function(t2) { - return t2 < 0 ? Math.ceil(t2) || 0 : Math.floor(t2); - }, p: function(t2) { - return { M: c, y: h, w: o, d: a, D: d, h: u, m: s, s: i, ms: r, Q: f }[t2] || String(t2 || "").toLowerCase().replace(/s$/, ""); - }, u: function(t2) { - return t2 === void 0; - } }, g = "en", D = {}; - D[g] = M; - var p = "$isDayjsObject", S = function(t2) { - return t2 instanceof _ || !(!t2 || !t2[p]); - }, w = function t2(e2, n2, r2) { - var i2; - if (!e2) - return g; - if (typeof e2 == "string") { - var s2 = e2.toLowerCase(); - D[s2] && (i2 = s2), n2 && (D[s2] = n2, i2 = s2); - var u2 = e2.split("-"); - if (!i2 && u2.length > 1) - return t2(u2[0]); - } else { - var a2 = e2.name; - D[a2] = e2, i2 = a2; - } - return !r2 && i2 && (g = i2), i2 || !r2 && g; - }, O = function(t2, e2) { - if (S(t2)) - return t2.clone(); - var n2 = typeof e2 == "object" ? e2 : {}; - return n2.date = t2, n2.args = arguments, new _(n2); - }, b = v; - b.l = w, b.i = S, b.w = function(t2, e2) { - return O(t2, { locale: e2.$L, utc: e2.$u, x: e2.$x, $offset: e2.$offset }); - }; - var _ = function() { - function M2(t2) { - this.$L = w(t2.locale, null, true), this.parse(t2), this.$x = this.$x || t2.x || {}, this[p] = true; - } - var m2 = M2.prototype; - return m2.parse = function(t2) { - this.$d = function(t3) { - var e2 = t3.date, n2 = t3.utc; - if (e2 === null) - return new Date(NaN); - if (b.u(e2)) - return new Date(); - if (e2 instanceof Date) - return new Date(e2); - if (typeof e2 == "string" && !/Z$/i.test(e2)) { - var r2 = e2.match($); - if (r2) { - var i2 = r2[2] - 1 || 0, s2 = (r2[7] || "0").substring(0, 3); - return n2 ? new Date(Date.UTC(r2[1], i2, r2[3] || 1, r2[4] || 0, r2[5] || 0, r2[6] || 0, s2)) : new Date(r2[1], i2, r2[3] || 1, r2[4] || 0, r2[5] || 0, r2[6] || 0, s2); - } - } - return new Date(e2); - }(t2), this.init(); - }, m2.init = function() { - var t2 = this.$d; - this.$y = t2.getFullYear(), this.$M = t2.getMonth(), this.$D = t2.getDate(), this.$W = t2.getDay(), this.$H = t2.getHours(), this.$m = t2.getMinutes(), this.$s = t2.getSeconds(), this.$ms = t2.getMilliseconds(); - }, m2.$utils = function() { - return b; - }, m2.isValid = function() { - return !(this.$d.toString() === l); - }, m2.isSame = function(t2, e2) { - var n2 = O(t2); - return this.startOf(e2) <= n2 && n2 <= this.endOf(e2); - }, m2.isAfter = function(t2, e2) { - return O(t2) < this.startOf(e2); - }, m2.isBefore = function(t2, e2) { - return this.endOf(e2) < O(t2); - }, m2.$g = function(t2, e2, n2) { - return b.u(t2) ? this[e2] : this.set(n2, t2); - }, m2.unix = function() { - return Math.floor(this.valueOf() / 1e3); - }, m2.valueOf = function() { - return this.$d.getTime(); - }, m2.startOf = function(t2, e2) { - var n2 = this, r2 = !!b.u(e2) || e2, f2 = b.p(t2), l2 = function(t3, e3) { - var i2 = b.w(n2.$u ? Date.UTC(n2.$y, e3, t3) : new Date(n2.$y, e3, t3), n2); - return r2 ? i2 : i2.endOf(a); - }, $2 = function(t3, e3) { - return b.w(n2.toDate()[t3].apply(n2.toDate("s"), (r2 ? [0, 0, 0, 0] : [23, 59, 59, 999]).slice(e3)), n2); - }, y2 = this.$W, M3 = this.$M, m3 = this.$D, v2 = "set" + (this.$u ? "UTC" : ""); - switch (f2) { - case h: - return r2 ? l2(1, 0) : l2(31, 11); - case c: - return r2 ? l2(1, M3) : l2(0, M3 + 1); - case o: - var g2 = this.$locale().weekStart || 0, D2 = (y2 < g2 ? y2 + 7 : y2) - g2; - return l2(r2 ? m3 - D2 : m3 + (6 - D2), M3); - case a: - case d: - return $2(v2 + "Hours", 0); - case u: - return $2(v2 + "Minutes", 1); - case s: - return $2(v2 + "Seconds", 2); - case i: - return $2(v2 + "Milliseconds", 3); - default: - return this.clone(); - } - }, m2.endOf = function(t2) { - return this.startOf(t2, false); - }, m2.$set = function(t2, e2) { - var n2, o2 = b.p(t2), f2 = "set" + (this.$u ? "UTC" : ""), l2 = (n2 = {}, n2[a] = f2 + "Date", n2[d] = f2 + "Date", n2[c] = f2 + "Month", n2[h] = f2 + "FullYear", n2[u] = f2 + "Hours", n2[s] = f2 + "Minutes", n2[i] = f2 + "Seconds", n2[r] = f2 + "Milliseconds", n2)[o2], $2 = o2 === a ? this.$D + (e2 - this.$W) : e2; - if (o2 === c || o2 === h) { - var y2 = this.clone().set(d, 1); - y2.$d[l2]($2), y2.init(), this.$d = y2.set(d, Math.min(this.$D, y2.daysInMonth())).$d; - } else - l2 && this.$d[l2]($2); - return this.init(), this; - }, m2.set = function(t2, e2) { - return this.clone().$set(t2, e2); - }, m2.get = function(t2) { - return this[b.p(t2)](); - }, m2.add = function(r2, f2) { - var d2, l2 = this; - r2 = Number(r2); - var $2 = b.p(f2), y2 = function(t2) { - var e2 = O(l2); - return b.w(e2.date(e2.date() + Math.round(t2 * r2)), l2); - }; - if ($2 === c) - return this.set(c, this.$M + r2); - if ($2 === h) - return this.set(h, this.$y + r2); - if ($2 === a) - return y2(1); - if ($2 === o) - return y2(7); - var M3 = (d2 = {}, d2[s] = e, d2[u] = n, d2[i] = t, d2)[$2] || 1, m3 = this.$d.getTime() + r2 * M3; - return b.w(m3, this); - }, m2.subtract = function(t2, e2) { - return this.add(-1 * t2, e2); - }, m2.format = function(t2) { - var e2 = this, n2 = this.$locale(); - if (!this.isValid()) - return n2.invalidDate || l; - var r2 = t2 || "YYYY-MM-DDTHH:mm:ssZ", i2 = b.z(this), s2 = this.$H, u2 = this.$m, a2 = this.$M, o2 = n2.weekdays, c2 = n2.months, f2 = n2.meridiem, h2 = function(t3, n3, i3, s3) { - return t3 && (t3[n3] || t3(e2, r2)) || i3[n3].slice(0, s3); - }, d2 = function(t3) { - return b.s(s2 % 12 || 12, t3, "0"); - }, $2 = f2 || function(t3, e3, n3) { - var r3 = t3 < 12 ? "AM" : "PM"; - return n3 ? r3.toLowerCase() : r3; - }; - return r2.replace(y, function(t3, r3) { - return r3 || function(t4) { - switch (t4) { - case "YY": - return String(e2.$y).slice(-2); - case "YYYY": - return b.s(e2.$y, 4, "0"); - case "M": - return a2 + 1; - case "MM": - return b.s(a2 + 1, 2, "0"); - case "MMM": - return h2(n2.monthsShort, a2, c2, 3); - case "MMMM": - return h2(c2, a2); - case "D": - return e2.$D; - case "DD": - return b.s(e2.$D, 2, "0"); - case "d": - return String(e2.$W); - case "dd": - return h2(n2.weekdaysMin, e2.$W, o2, 2); - case "ddd": - return h2(n2.weekdaysShort, e2.$W, o2, 3); - case "dddd": - return o2[e2.$W]; - case "H": - return String(s2); - case "HH": - return b.s(s2, 2, "0"); - case "h": - return d2(1); - case "hh": - return d2(2); - case "a": - return $2(s2, u2, true); - case "A": - return $2(s2, u2, false); - case "m": - return String(u2); - case "mm": - return b.s(u2, 2, "0"); - case "s": - return String(e2.$s); - case "ss": - return b.s(e2.$s, 2, "0"); - case "SSS": - return b.s(e2.$ms, 3, "0"); - case "Z": - return i2; - } - return null; - }(t3) || i2.replace(":", ""); - }); - }, m2.utcOffset = function() { - return 15 * -Math.round(this.$d.getTimezoneOffset() / 15); - }, m2.diff = function(r2, d2, l2) { - var $2, y2 = this, M3 = b.p(d2), m3 = O(r2), v2 = (m3.utcOffset() - this.utcOffset()) * e, g2 = this - m3, D2 = function() { - return b.m(y2, m3); - }; - switch (M3) { - case h: - $2 = D2() / 12; - break; - case c: - $2 = D2(); - break; - case f: - $2 = D2() / 3; - break; - case o: - $2 = (g2 - v2) / 6048e5; - break; - case a: - $2 = (g2 - v2) / 864e5; - break; - case u: - $2 = g2 / n; - break; - case s: - $2 = g2 / e; - break; - case i: - $2 = g2 / t; - break; - default: - $2 = g2; - } - return l2 ? $2 : b.a($2); - }, m2.daysInMonth = function() { - return this.endOf(c).$D; - }, m2.$locale = function() { - return D[this.$L]; - }, m2.locale = function(t2, e2) { - if (!t2) - return this.$L; - var n2 = this.clone(), r2 = w(t2, e2, true); - return r2 && (n2.$L = r2), n2; - }, m2.clone = function() { - return b.w(this.$d, this); - }, m2.toDate = function() { - return new Date(this.valueOf()); - }, m2.toJSON = function() { - return this.isValid() ? this.toISOString() : null; - }, m2.toISOString = function() { - return this.$d.toISOString(); - }, m2.toString = function() { - return this.$d.toUTCString(); - }, M2; - }(), k = _.prototype; - return O.prototype = k, [["$ms", r], ["$s", i], ["$m", s], ["$H", u], ["$W", a], ["$M", c], ["$y", h], ["$D", d]].forEach(function(t2) { - k[t2[1]] = function(e2) { - return this.$g(e2, t2[0], t2[1]); - }; - }), O.extend = function(t2, e2) { - return t2.$i || (t2(e2, _, O), t2.$i = true), O; - }, O.locale = w, O.isDayjs = S, O.unix = function(t2) { - return O(1e3 * t2); - }, O.en = D[g], O.Ls = D, O.p = {}, O; - }); - })(dayjs_min); - var dayjs = dayjs_min.exports; - - var customParseFormat$1 = {exports: {}}; - - (function(module, exports) { - !function(e, t) { - module.exports = t() ; - }(commonjsGlobal, function() { - var e = { LTS: "h:mm:ss A", LT: "h:mm A", L: "MM/DD/YYYY", LL: "MMMM D, YYYY", LLL: "MMMM D, YYYY h:mm A", LLLL: "dddd, MMMM D, YYYY h:mm A" }, t = /(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g, n = /\d/, r = /\d\d/, i = /\d\d?/, o = /\d*[^-_:/,()\s\d]+/, s = {}, a = function(e2) { - return (e2 = +e2) + (e2 > 68 ? 1900 : 2e3); - }; - var f = function(e2) { - return function(t2) { - this[e2] = +t2; - }; - }, h = [/[+-]\d\d:?(\d\d)?|Z/, function(e2) { - (this.zone || (this.zone = {})).offset = function(e3) { - if (!e3) - return 0; - if (e3 === "Z") - return 0; - var t2 = e3.match(/([+-]|\d\d)/g), n2 = 60 * t2[1] + (+t2[2] || 0); - return n2 === 0 ? 0 : t2[0] === "+" ? -n2 : n2; - }(e2); - }], u = function(e2) { - var t2 = s[e2]; - return t2 && (t2.indexOf ? t2 : t2.s.concat(t2.f)); - }, d = function(e2, t2) { - var n2, r2 = s.meridiem; - if (r2) { - for (var i2 = 1; i2 <= 24; i2 += 1) - if (e2.indexOf(r2(i2, 0, t2)) > -1) { - n2 = i2 > 12; - break; - } - } else - n2 = e2 === (t2 ? "pm" : "PM"); - return n2; - }, c = { A: [o, function(e2) { - this.afternoon = d(e2, false); - }], a: [o, function(e2) { - this.afternoon = d(e2, true); - }], Q: [n, function(e2) { - this.month = 3 * (e2 - 1) + 1; - }], S: [n, function(e2) { - this.milliseconds = 100 * +e2; - }], SS: [r, function(e2) { - this.milliseconds = 10 * +e2; - }], SSS: [/\d{3}/, function(e2) { - this.milliseconds = +e2; - }], s: [i, f("seconds")], ss: [i, f("seconds")], m: [i, f("minutes")], mm: [i, f("minutes")], H: [i, f("hours")], h: [i, f("hours")], HH: [i, f("hours")], hh: [i, f("hours")], D: [i, f("day")], DD: [r, f("day")], Do: [o, function(e2) { - var t2 = s.ordinal, n2 = e2.match(/\d+/); - if (this.day = n2[0], t2) - for (var r2 = 1; r2 <= 31; r2 += 1) - t2(r2).replace(/\[|\]/g, "") === e2 && (this.day = r2); - }], w: [i, f("week")], ww: [r, f("week")], M: [i, f("month")], MM: [r, f("month")], MMM: [o, function(e2) { - var t2 = u("months"), n2 = (u("monthsShort") || t2.map(function(e3) { - return e3.slice(0, 3); - })).indexOf(e2) + 1; - if (n2 < 1) - throw new Error(); - this.month = n2 % 12 || n2; - }], MMMM: [o, function(e2) { - var t2 = u("months").indexOf(e2) + 1; - if (t2 < 1) - throw new Error(); - this.month = t2 % 12 || t2; - }], Y: [/[+-]?\d+/, f("year")], YY: [r, function(e2) { - this.year = a(e2); - }], YYYY: [/\d{4}/, f("year")], Z: h, ZZ: h }; - function l(n2) { - var r2, i2; - r2 = n2, i2 = s && s.formats; - for (var o2 = (n2 = r2.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g, function(t2, n3, r3) { - var o3 = r3 && r3.toUpperCase(); - return n3 || i2[r3] || e[r3] || i2[o3].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, function(e2, t3, n4) { - return t3 || n4.slice(1); - }); - })).match(t), a2 = o2.length, f2 = 0; f2 < a2; f2 += 1) { - var h2 = o2[f2], u2 = c[h2], d2 = u2 && u2[0], l2 = u2 && u2[1]; - o2[f2] = l2 ? { regex: d2, parser: l2 } : h2.replace(/^\[|\]$/g, ""); - } - return function(e2) { - for (var t2 = {}, n3 = 0, r3 = 0; n3 < a2; n3 += 1) { - var i3 = o2[n3]; - if (typeof i3 == "string") - r3 += i3.length; - else { - var s2 = i3.regex, f3 = i3.parser, h3 = e2.slice(r3), u3 = s2.exec(h3)[0]; - f3.call(t2, u3), e2 = e2.replace(u3, ""); - } - } - return function(e3) { - var t3 = e3.afternoon; - if (t3 !== void 0) { - var n4 = e3.hours; - t3 ? n4 < 12 && (e3.hours += 12) : n4 === 12 && (e3.hours = 0), delete e3.afternoon; - } - }(t2), t2; - }; - } - return function(e2, t2, n2) { - n2.p.customParseFormat = true, e2 && e2.parseTwoDigitYear && (a = e2.parseTwoDigitYear); - var r2 = t2.prototype, i2 = r2.parse; - r2.parse = function(e3) { - var t3 = e3.date, r3 = e3.utc, o2 = e3.args; - this.$u = r3; - var a2 = o2[1]; - if (typeof a2 == "string") { - var f2 = o2[2] === true, h2 = o2[3] === true, u2 = f2 || h2, d2 = o2[2]; - h2 && (d2 = o2[2]), s = this.$locale(), !f2 && d2 && (s = n2.Ls[d2]), this.$d = function(e4, t4, n3, r4) { - try { - if (["x", "X"].indexOf(t4) > -1) - return new Date((t4 === "X" ? 1e3 : 1) * e4); - var i3 = l(t4)(e4), o3 = i3.year, s2 = i3.month, a3 = i3.day, f3 = i3.hours, h3 = i3.minutes, u3 = i3.seconds, d3 = i3.milliseconds, c3 = i3.zone, m2 = i3.week, M2 = new Date(), Y = a3 || (o3 || s2 ? 1 : M2.getDate()), p = o3 || M2.getFullYear(), v = 0; - o3 && !s2 || (v = s2 > 0 ? s2 - 1 : M2.getMonth()); - var D, w = f3 || 0, g = h3 || 0, y = u3 || 0, L = d3 || 0; - return c3 ? new Date(Date.UTC(p, v, Y, w, g, y, L + 60 * c3.offset * 1e3)) : n3 ? new Date(Date.UTC(p, v, Y, w, g, y, L)) : (D = new Date(p, v, Y, w, g, y, L), m2 && (D = r4(D).week(m2).toDate()), D); - } catch (e5) { - return new Date(""); - } - }(t3, a2, r3, n2), this.init(), d2 && d2 !== true && (this.$L = this.locale(d2).$L), u2 && t3 != this.format(a2) && (this.$d = new Date("")), s = {}; - } else if (a2 instanceof Array) - for (var c2 = a2.length, m = 1; m <= c2; m += 1) { - o2[1] = a2[m - 1]; - var M = n2.apply(this, o2); - if (M.isValid()) { - this.$d = M.$d, this.$L = M.$L, this.init(); - break; - } - m === c2 && (this.$d = new Date("")); - } - else - i2.call(this, e3); - }; - }; - }); - })(customParseFormat$1); - var customParseFormat = customParseFormat$1.exports; - - const timeUnits$1 = ["hours", "minutes", "seconds"]; - const DEFAULT_FORMATS_TIME = "HH:mm:ss"; - const DEFAULT_FORMATS_DATE = "YYYY-MM-DD"; - const DEFAULT_FORMATS_DATEPICKER = { - date: DEFAULT_FORMATS_DATE, - dates: DEFAULT_FORMATS_DATE, - week: "gggg[w]ww", - year: "YYYY", - years: "YYYY", - month: "YYYY-MM", - months: "YYYY-MM", - datetime: `${DEFAULT_FORMATS_DATE} ${DEFAULT_FORMATS_TIME}`, - monthrange: "YYYY-MM", - yearrange: "YYYY", - daterange: DEFAULT_FORMATS_DATE, - datetimerange: `${DEFAULT_FORMATS_DATE} ${DEFAULT_FORMATS_TIME}` - }; - - const buildTimeList = (value, bound) => { - return [ - value > 0 ? value - 1 : void 0, - value, - value < bound ? value + 1 : void 0 - ]; - }; - const rangeArr = (n) => Array.from(Array.from({ length: n }).keys()); - const extractDateFormat = (format) => { - return format.replace(/\W?m{1,2}|\W?ZZ/g, "").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi, "").trim(); - }; - const extractTimeFormat = (format) => { - return format.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g, "").trim(); - }; - const dateEquals = function(a, b) { - const aIsDate = isDate$1(a); - const bIsDate = isDate$1(b); - if (aIsDate && bIsDate) { - return a.getTime() === b.getTime(); - } - if (!aIsDate && !bIsDate) { - return a === b; - } - return false; - }; - const valueEquals = function(a, b) { - const aIsArray = isArray$1(a); - const bIsArray = isArray$1(b); - if (aIsArray && bIsArray) { - if (a.length !== b.length) { - return false; - } - return a.every((item, index) => dateEquals(item, b[index])); - } - if (!aIsArray && !bIsArray) { - return dateEquals(a, b); - } - return false; - }; - const parseDate = function(date, format, lang) { - const day = isEmpty(format) || format === "x" ? dayjs(date).locale(lang) : dayjs(date, format).locale(lang); - return day.isValid() ? day : void 0; - }; - const formatter = function(date, format, lang) { - if (isEmpty(format)) - return date; - if (format === "x") - return +date; - return dayjs(date).locale(lang).format(format); - }; - const makeList = (total, method) => { - var _a; - const arr = []; - const disabledArr = method == null ? void 0 : method(); - for (let i = 0; i < total; i++) { - arr.push((_a = disabledArr == null ? void 0 : disabledArr.includes(i)) != null ? _a : false); - } - return arr; - }; - const dayOrDaysToDate = (dayOrDays) => { - return isArray$1(dayOrDays) ? dayOrDays.map((d) => d.toDate()) : dayOrDays.toDate(); - }; - - const disabledTimeListsProps = buildProps({ - disabledHours: { - type: definePropType(Function) - }, - disabledMinutes: { - type: definePropType(Function) - }, - disabledSeconds: { - type: definePropType(Function) - } - }); - const timePanelSharedProps = buildProps({ - visible: Boolean, - actualVisible: { - type: Boolean, - default: void 0 - }, - format: { - type: String, - default: "" - } - }); - - const timePickerDefaultProps = buildProps({ - id: { - type: definePropType([Array, String]) - }, - name: { - type: definePropType([Array, String]) - }, - popperClass: { - type: String, - default: "" - }, - format: String, - valueFormat: String, - dateFormat: String, - timeFormat: String, - type: { - type: String, - default: "" - }, - clearable: { - type: Boolean, - default: true - }, - clearIcon: { - type: definePropType([String, Object]), - default: circle_close_default - }, - editable: { - type: Boolean, - default: true - }, - prefixIcon: { - type: definePropType([String, Object]), - default: "" - }, - size: useSizeProp, - readonly: Boolean, - disabled: Boolean, - placeholder: { - type: String, - default: "" - }, - popperOptions: { - type: definePropType(Object), - default: () => ({}) - }, - modelValue: { - type: definePropType([Date, Array, String, Number]), - default: "" - }, - rangeSeparator: { - type: String, - default: "-" - }, - startPlaceholder: String, - endPlaceholder: String, - defaultValue: { - type: definePropType([Date, Array]) - }, - defaultTime: { - type: definePropType([Date, Array]) - }, - isRange: Boolean, - ...disabledTimeListsProps, - disabledDate: { - type: Function - }, - cellClassName: { - type: Function - }, - shortcuts: { - type: Array, - default: () => [] - }, - arrowControl: Boolean, - tabindex: { - type: definePropType([String, Number]), - default: 0 - }, - validateEvent: { - type: Boolean, - default: true - }, - unlinkPanels: Boolean, - placement: { - type: definePropType(String), - values: Ee, - default: "bottom" - }, - fallbackPlacements: { - type: definePropType(Array), - default: ["bottom", "top", "right", "left"] - }, - ...useEmptyValuesProps, - ...useAriaProps(["ariaLabel"]), - showNow: { - type: Boolean, - default: true - } - }); - const timePickerRangeTriggerProps = buildProps({ - id: { - type: definePropType(Array) - }, - name: { - type: definePropType(Array) - }, - modelValue: { - type: definePropType([Array, String]) - }, - startPlaceholder: String, - endPlaceholder: String - }); - const timePickerRngeTriggerProps = timePickerRangeTriggerProps; - - const __default__$1v = vue.defineComponent({ - name: "PickerRangeTrigger", - inheritAttrs: false - }); - const _sfc_main$27 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1v, - props: timePickerRangeTriggerProps, - emits: [ - "mouseenter", - "mouseleave", - "click", - "touchstart", - "focus", - "blur", - "startInput", - "endInput", - "startChange", - "endChange" - ], - setup(__props, { expose, emit }) { - const attrs = useAttrs(); - const nsDate = useNamespace("date"); - const nsRange = useNamespace("range"); - const inputRef = vue.ref(); - const endInputRef = vue.ref(); - const { wrapperRef, isFocused } = useFocusController(inputRef); - const handleClick = (evt) => { - emit("click", evt); - }; - const handleMouseEnter = (evt) => { - emit("mouseenter", evt); - }; - const handleMouseLeave = (evt) => { - emit("mouseleave", evt); - }; - const handleTouchStart = (evt) => { - emit("mouseenter", evt); - }; - const handleStartInput = (evt) => { - emit("startInput", evt); - }; - const handleEndInput = (evt) => { - emit("endInput", evt); - }; - const handleStartChange = (evt) => { - emit("startChange", evt); - }; - const handleEndChange = (evt) => { - emit("endChange", evt); - }; - const focus = () => { - var _a; - (_a = inputRef.value) == null ? void 0 : _a.focus(); - }; - const blur = () => { - var _a, _b; - (_a = inputRef.value) == null ? void 0 : _a.blur(); - (_b = endInputRef.value) == null ? void 0 : _b.blur(); - }; - expose({ - focus, - blur - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "wrapperRef", - ref: wrapperRef, - class: vue.normalizeClass([vue.unref(nsDate).is("active", vue.unref(isFocused)), _ctx.$attrs.class]), - style: vue.normalizeStyle(_ctx.$attrs.style), - onClick: handleClick, - onMouseenter: handleMouseEnter, - onMouseleave: handleMouseLeave, - onTouchstartPassive: handleTouchStart - }, [ - vue.renderSlot(_ctx.$slots, "prefix"), - vue.createElementVNode("input", vue.mergeProps(vue.unref(attrs), { - id: _ctx.id && _ctx.id[0], - ref_key: "inputRef", - ref: inputRef, - name: _ctx.name && _ctx.name[0], - placeholder: _ctx.startPlaceholder, - value: _ctx.modelValue && _ctx.modelValue[0], - class: vue.unref(nsRange).b("input"), - onInput: handleStartInput, - onChange: handleStartChange - }), null, 16, ["id", "name", "placeholder", "value"]), - vue.renderSlot(_ctx.$slots, "range-separator"), - vue.createElementVNode("input", vue.mergeProps(vue.unref(attrs), { - id: _ctx.id && _ctx.id[1], - ref_key: "endInputRef", - ref: endInputRef, - name: _ctx.name && _ctx.name[1], - placeholder: _ctx.endPlaceholder, - value: _ctx.modelValue && _ctx.modelValue[1], - class: vue.unref(nsRange).b("input"), - onInput: handleEndInput, - onChange: handleEndChange - }), null, 16, ["id", "name", "placeholder", "value"]), - vue.renderSlot(_ctx.$slots, "suffix") - ], 38); - }; - } - }); - var PickerRangeTrigger = /* @__PURE__ */ _export_sfc(_sfc_main$27, [["__file", "picker-range-trigger.vue"]]); - - const __default__$1u = vue.defineComponent({ - name: "Picker" - }); - const _sfc_main$26 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1u, - props: timePickerDefaultProps, - emits: [ - "update:modelValue", - "change", - "focus", - "blur", - "clear", - "calendar-change", - "panel-change", - "visible-change", - "keydown" - ], - setup(__props, { expose, emit }) { - const props = __props; - const attrs = vue.useAttrs(); - const { lang } = useLocale(); - const nsDate = useNamespace("date"); - const nsInput = useNamespace("input"); - const nsRange = useNamespace("range"); - const { form, formItem } = useFormItem(); - const elPopperOptions = vue.inject("ElPopperOptions", {}); - const { valueOnClear } = useEmptyValues(props, null); - const refPopper = vue.ref(); - const inputRef = vue.ref(); - const pickerVisible = vue.ref(false); - const pickerActualVisible = vue.ref(false); - const valueOnOpen = vue.ref(null); - let hasJustTabExitedInput = false; - const { isFocused, handleFocus, handleBlur } = useFocusController(inputRef, { - beforeFocus() { - return props.readonly || pickerDisabled.value; - }, - afterFocus() { - pickerVisible.value = true; - }, - beforeBlur(event) { - var _a; - return !hasJustTabExitedInput && ((_a = refPopper.value) == null ? void 0 : _a.isFocusInsideContent(event)); - }, - afterBlur() { - handleChange(); - pickerVisible.value = false; - hasJustTabExitedInput = false; - props.validateEvent && (formItem == null ? void 0 : formItem.validate("blur").catch((err) => debugWarn())); - } - }); - const rangeInputKls = vue.computed(() => [ - nsDate.b("editor"), - nsDate.bm("editor", props.type), - nsInput.e("wrapper"), - nsDate.is("disabled", pickerDisabled.value), - nsDate.is("active", pickerVisible.value), - nsRange.b("editor"), - pickerSize ? nsRange.bm("editor", pickerSize.value) : "", - attrs.class - ]); - const clearIconKls = vue.computed(() => [ - nsInput.e("icon"), - nsRange.e("close-icon"), - !showClose.value ? nsRange.e("close-icon--hidden") : "" - ]); - vue.watch(pickerVisible, (val) => { - if (!val) { - userInput.value = null; - vue.nextTick(() => { - emitChange(props.modelValue); - }); - } else { - vue.nextTick(() => { - if (val) { - valueOnOpen.value = props.modelValue; - } - }); - } - }); - const emitChange = (val, isClear) => { - if (isClear || !valueEquals(val, valueOnOpen.value)) { - emit("change", val); - props.validateEvent && (formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn())); - } - }; - const emitInput = (input) => { - if (!valueEquals(props.modelValue, input)) { - let formatted; - if (isArray$1(input)) { - formatted = input.map((item) => formatter(item, props.valueFormat, lang.value)); - } else if (input) { - formatted = formatter(input, props.valueFormat, lang.value); - } - emit("update:modelValue", input ? formatted : input, lang.value); - } - }; - const emitKeydown = (e) => { - emit("keydown", e); - }; - const refInput = vue.computed(() => { - if (inputRef.value) { - return Array.from(inputRef.value.$el.querySelectorAll("input")); - } - return []; - }); - const setSelectionRange = (start, end, pos) => { - const _inputs = refInput.value; - if (!_inputs.length) - return; - if (!pos || pos === "min") { - _inputs[0].setSelectionRange(start, end); - _inputs[0].focus(); - } else if (pos === "max") { - _inputs[1].setSelectionRange(start, end); - _inputs[1].focus(); - } - }; - const onPick = (date = "", visible = false) => { - pickerVisible.value = visible; - let result; - if (isArray$1(date)) { - result = date.map((_) => _.toDate()); - } else { - result = date ? date.toDate() : date; - } - userInput.value = null; - emitInput(result); - }; - const onBeforeShow = () => { - pickerActualVisible.value = true; - }; - const onShow = () => { - emit("visible-change", true); - }; - const onHide = () => { - pickerActualVisible.value = false; - pickerVisible.value = false; - emit("visible-change", false); - }; - const handleOpen = () => { - pickerVisible.value = true; - }; - const handleClose = () => { - pickerVisible.value = false; - }; - const pickerDisabled = vue.computed(() => { - return props.disabled || (form == null ? void 0 : form.disabled); - }); - const parsedValue = vue.computed(() => { - let dayOrDays; - if (valueIsEmpty.value) { - if (pickerOptions.value.getDefaultValue) { - dayOrDays = pickerOptions.value.getDefaultValue(); - } - } else { - if (isArray$1(props.modelValue)) { - dayOrDays = props.modelValue.map((d) => parseDate(d, props.valueFormat, lang.value)); - } else { - dayOrDays = parseDate(props.modelValue, props.valueFormat, lang.value); - } - } - if (pickerOptions.value.getRangeAvailableTime) { - const availableResult = pickerOptions.value.getRangeAvailableTime(dayOrDays); - if (!isEqual$1(availableResult, dayOrDays)) { - dayOrDays = availableResult; - if (!valueIsEmpty.value) { - emitInput(dayOrDaysToDate(dayOrDays)); - } - } - } - if (isArray$1(dayOrDays) && dayOrDays.some((day) => !day)) { - dayOrDays = []; - } - return dayOrDays; - }); - const displayValue = vue.computed(() => { - if (!pickerOptions.value.panelReady) - return ""; - const formattedValue = formatDayjsToString(parsedValue.value); - if (isArray$1(userInput.value)) { - return [ - userInput.value[0] || formattedValue && formattedValue[0] || "", - userInput.value[1] || formattedValue && formattedValue[1] || "" - ]; - } else if (userInput.value !== null) { - return userInput.value; - } - if (!isTimePicker.value && valueIsEmpty.value) - return ""; - if (!pickerVisible.value && valueIsEmpty.value) - return ""; - if (formattedValue) { - return isDatesPicker.value || isMonthsPicker.value || isYearsPicker.value ? formattedValue.join(", ") : formattedValue; - } - return ""; - }); - const isTimeLikePicker = vue.computed(() => props.type.includes("time")); - const isTimePicker = vue.computed(() => props.type.startsWith("time")); - const isDatesPicker = vue.computed(() => props.type === "dates"); - const isMonthsPicker = vue.computed(() => props.type === "months"); - const isYearsPicker = vue.computed(() => props.type === "years"); - const triggerIcon = vue.computed(() => props.prefixIcon || (isTimeLikePicker.value ? clock_default : calendar_default)); - const showClose = vue.ref(false); - const onClearIconClick = (event) => { - if (props.readonly || pickerDisabled.value) - return; - if (showClose.value) { - event.stopPropagation(); - if (pickerOptions.value.handleClear) { - pickerOptions.value.handleClear(); - } else { - emitInput(valueOnClear.value); - } - emitChange(valueOnClear.value, true); - showClose.value = false; - onHide(); - } - emit("clear"); - }; - const valueIsEmpty = vue.computed(() => { - const { modelValue } = props; - return !modelValue || isArray$1(modelValue) && !modelValue.filter(Boolean).length; - }); - const onMouseDownInput = async (event) => { - var _a; - if (props.readonly || pickerDisabled.value) - return; - if (((_a = event.target) == null ? void 0 : _a.tagName) !== "INPUT" || isFocused.value) { - pickerVisible.value = true; - } - }; - const onMouseEnter = () => { - if (props.readonly || pickerDisabled.value) - return; - if (!valueIsEmpty.value && props.clearable) { - showClose.value = true; - } - }; - const onMouseLeave = () => { - showClose.value = false; - }; - const onTouchStartInput = (event) => { - var _a; - if (props.readonly || pickerDisabled.value) - return; - if (((_a = event.touches[0].target) == null ? void 0 : _a.tagName) !== "INPUT" || isFocused.value) { - pickerVisible.value = true; - } - }; - const isRangeInput = vue.computed(() => { - return props.type.includes("range"); - }); - const pickerSize = useFormSize(); - const popperEl = vue.computed(() => { - var _a, _b; - return (_b = (_a = vue.unref(refPopper)) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef; - }); - const stophandle = onClickOutside(inputRef, (e) => { - const unrefedPopperEl = vue.unref(popperEl); - const inputEl = unrefElement(inputRef); - if (unrefedPopperEl && (e.target === unrefedPopperEl || e.composedPath().includes(unrefedPopperEl)) || e.target === inputEl || inputEl && e.composedPath().includes(inputEl)) - return; - pickerVisible.value = false; - }); - vue.onBeforeUnmount(() => { - stophandle == null ? void 0 : stophandle(); - }); - const userInput = vue.ref(null); - const handleChange = () => { - if (userInput.value) { - const value = parseUserInputToDayjs(displayValue.value); - if (value) { - if (isValidValue(value)) { - emitInput(dayOrDaysToDate(value)); - userInput.value = null; - } - } - } - if (userInput.value === "") { - emitInput(valueOnClear.value); - emitChange(valueOnClear.value); - userInput.value = null; - } - }; - const parseUserInputToDayjs = (value) => { - if (!value) - return null; - return pickerOptions.value.parseUserInput(value); - }; - const formatDayjsToString = (value) => { - if (!value) - return null; - return pickerOptions.value.formatToString(value); - }; - const isValidValue = (value) => { - return pickerOptions.value.isValidValue(value); - }; - const handleKeydownInput = async (event) => { - if (props.readonly || pickerDisabled.value) - return; - const { code } = event; - emitKeydown(event); - if (code === EVENT_CODE.esc) { - if (pickerVisible.value === true) { - pickerVisible.value = false; - event.preventDefault(); - event.stopPropagation(); - } - return; - } - if (code === EVENT_CODE.down) { - if (pickerOptions.value.handleFocusPicker) { - event.preventDefault(); - event.stopPropagation(); - } - if (pickerVisible.value === false) { - pickerVisible.value = true; - await vue.nextTick(); - } - if (pickerOptions.value.handleFocusPicker) { - pickerOptions.value.handleFocusPicker(); - return; - } - } - if (code === EVENT_CODE.tab) { - hasJustTabExitedInput = true; - return; - } - if (code === EVENT_CODE.enter || code === EVENT_CODE.numpadEnter) { - if (userInput.value === null || userInput.value === "" || isValidValue(parseUserInputToDayjs(displayValue.value))) { - handleChange(); - pickerVisible.value = false; - } - event.stopPropagation(); - return; - } - if (userInput.value) { - event.stopPropagation(); - return; - } - if (pickerOptions.value.handleKeydownInput) { - pickerOptions.value.handleKeydownInput(event); - } - }; - const onUserInput = (e) => { - userInput.value = e; - if (!pickerVisible.value) { - pickerVisible.value = true; - } - }; - const handleStartInput = (event) => { - const target = event.target; - if (userInput.value) { - userInput.value = [target.value, userInput.value[1]]; - } else { - userInput.value = [target.value, null]; - } - }; - const handleEndInput = (event) => { - const target = event.target; - if (userInput.value) { - userInput.value = [userInput.value[0], target.value]; - } else { - userInput.value = [null, target.value]; - } - }; - const handleStartChange = () => { - var _a; - const values = userInput.value; - const value = parseUserInputToDayjs(values && values[0]); - const parsedVal = vue.unref(parsedValue); - if (value && value.isValid()) { - userInput.value = [ - formatDayjsToString(value), - ((_a = displayValue.value) == null ? void 0 : _a[1]) || null - ]; - const newValue = [value, parsedVal && (parsedVal[1] || null)]; - if (isValidValue(newValue)) { - emitInput(dayOrDaysToDate(newValue)); - userInput.value = null; - } - } - }; - const handleEndChange = () => { - var _a; - const values = vue.unref(userInput); - const value = parseUserInputToDayjs(values && values[1]); - const parsedVal = vue.unref(parsedValue); - if (value && value.isValid()) { - userInput.value = [ - ((_a = vue.unref(displayValue)) == null ? void 0 : _a[0]) || null, - formatDayjsToString(value) - ]; - const newValue = [parsedVal && parsedVal[0], value]; - if (isValidValue(newValue)) { - emitInput(dayOrDaysToDate(newValue)); - userInput.value = null; - } - } - }; - const pickerOptions = vue.ref({}); - const onSetPickerOption = (e) => { - pickerOptions.value[e[0]] = e[1]; - pickerOptions.value.panelReady = true; - }; - const onCalendarChange = (e) => { - emit("calendar-change", e); - }; - const onPanelChange = (value, mode, view) => { - emit("panel-change", value, mode, view); - }; - const focus = () => { - var _a; - (_a = inputRef.value) == null ? void 0 : _a.focus(); - }; - const blur = () => { - var _a; - (_a = inputRef.value) == null ? void 0 : _a.blur(); - }; - vue.provide("EP_PICKER_BASE", { - props - }); - expose({ - focus, - blur, - handleOpen, - handleClose, - onPick - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTooltip), vue.mergeProps({ - ref_key: "refPopper", - ref: refPopper, - visible: pickerVisible.value, - effect: "light", - pure: "", - trigger: "click" - }, _ctx.$attrs, { - role: "dialog", - teleported: "", - transition: `${vue.unref(nsDate).namespace.value}-zoom-in-top`, - "popper-class": [`${vue.unref(nsDate).namespace.value}-picker__popper`, _ctx.popperClass], - "popper-options": vue.unref(elPopperOptions), - "fallback-placements": _ctx.fallbackPlacements, - "gpu-acceleration": false, - placement: _ctx.placement, - "stop-popper-mouse-event": false, - "hide-after": 0, - persistent: "", - onBeforeShow, - onShow, - onHide - }), { - default: vue.withCtx(() => [ - !vue.unref(isRangeInput) ? (vue.openBlock(), vue.createBlock(vue.unref(ElInput), { - key: 0, - id: _ctx.id, - ref_key: "inputRef", - ref: inputRef, - "container-role": "combobox", - "model-value": vue.unref(displayValue), - name: _ctx.name, - size: vue.unref(pickerSize), - disabled: vue.unref(pickerDisabled), - placeholder: _ctx.placeholder, - class: vue.normalizeClass([vue.unref(nsDate).b("editor"), vue.unref(nsDate).bm("editor", _ctx.type), _ctx.$attrs.class]), - style: vue.normalizeStyle(_ctx.$attrs.style), - readonly: !_ctx.editable || _ctx.readonly || vue.unref(isDatesPicker) || vue.unref(isMonthsPicker) || vue.unref(isYearsPicker) || _ctx.type === "week", - "aria-label": _ctx.ariaLabel, - tabindex: _ctx.tabindex, - "validate-event": false, - onInput: onUserInput, - onFocus: vue.unref(handleFocus), - onBlur: vue.unref(handleBlur), - onKeydown: handleKeydownInput, - onChange: handleChange, - onMousedown: onMouseDownInput, - onMouseenter: onMouseEnter, - onMouseleave: onMouseLeave, - onTouchstartPassive: onTouchStartInput, - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, { - prefix: vue.withCtx(() => [ - vue.unref(triggerIcon) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(nsInput).e("icon")), - onMousedown: vue.withModifiers(onMouseDownInput, ["prevent"]), - onTouchstartPassive: onTouchStartInput - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(triggerIcon)))) - ]), - _: 1 - }, 8, ["class", "onMousedown"])) : vue.createCommentVNode("v-if", true) - ]), - suffix: vue.withCtx(() => [ - showClose.value && _ctx.clearIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(`${vue.unref(nsInput).e("icon")} clear-icon`), - onMousedown: vue.withModifiers(vue.unref(NOOP), ["prevent"]), - onClick: onClearIconClick - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.clearIcon))) - ]), - _: 1 - }, 8, ["class", "onMousedown"])) : vue.createCommentVNode("v-if", true) - ]), - _: 1 - }, 8, ["id", "model-value", "name", "size", "disabled", "placeholder", "class", "style", "readonly", "aria-label", "tabindex", "onFocus", "onBlur", "onClick"])) : (vue.openBlock(), vue.createBlock(PickerRangeTrigger, { - key: 1, - id: _ctx.id, - ref_key: "inputRef", - ref: inputRef, - "model-value": vue.unref(displayValue), - name: _ctx.name, - disabled: vue.unref(pickerDisabled), - readonly: !_ctx.editable || _ctx.readonly, - "start-placeholder": _ctx.startPlaceholder, - "end-placeholder": _ctx.endPlaceholder, - class: vue.normalizeClass(vue.unref(rangeInputKls)), - style: vue.normalizeStyle(_ctx.$attrs.style), - "aria-label": _ctx.ariaLabel, - tabindex: _ctx.tabindex, - autocomplete: "off", - role: "combobox", - onClick: onMouseDownInput, - onFocus: vue.unref(handleFocus), - onBlur: vue.unref(handleBlur), - onStartInput: handleStartInput, - onStartChange: handleStartChange, - onEndInput: handleEndInput, - onEndChange: handleEndChange, - onMousedown: onMouseDownInput, - onMouseenter: onMouseEnter, - onMouseleave: onMouseLeave, - onTouchstartPassive: onTouchStartInput, - onKeydown: handleKeydownInput - }, { - prefix: vue.withCtx(() => [ - vue.unref(triggerIcon) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass([vue.unref(nsInput).e("icon"), vue.unref(nsRange).e("icon")]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(triggerIcon)))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ]), - "range-separator": vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "range-separator", {}, () => [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(nsRange).b("separator")) - }, vue.toDisplayString(_ctx.rangeSeparator), 3) - ]) - ]), - suffix: vue.withCtx(() => [ - _ctx.clearIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(clearIconKls)), - onMousedown: vue.withModifiers(vue.unref(NOOP), ["prevent"]), - onClick: onClearIconClick - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.clearIcon))) - ]), - _: 1 - }, 8, ["class", "onMousedown"])) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["id", "model-value", "name", "disabled", "readonly", "start-placeholder", "end-placeholder", "class", "style", "aria-label", "tabindex", "onFocus", "onBlur"])) - ]), - content: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default", { - visible: pickerVisible.value, - actualVisible: pickerActualVisible.value, - parsedValue: vue.unref(parsedValue), - format: _ctx.format, - dateFormat: _ctx.dateFormat, - timeFormat: _ctx.timeFormat, - unlinkPanels: _ctx.unlinkPanels, - type: _ctx.type, - defaultValue: _ctx.defaultValue, - showNow: _ctx.showNow, - onPick, - onSelectRange: setSelectionRange, - onSetPickerOption, - onCalendarChange, - onPanelChange, - onMousedown: vue.withModifiers(() => { - }, ["stop"]) - }) - ]), - _: 3 - }, 16, ["visible", "transition", "popper-class", "popper-options", "fallback-placements", "placement"]); - }; - } - }); - var CommonPicker = /* @__PURE__ */ _export_sfc(_sfc_main$26, [["__file", "picker.vue"]]); - - const panelTimePickerProps = buildProps({ - ...timePanelSharedProps, - datetimeRole: String, - parsedValue: { - type: definePropType(Object) - } - }); - - const useTimePanel = ({ - getAvailableHours, - getAvailableMinutes, - getAvailableSeconds - }) => { - const getAvailableTime = (date, role, first, compareDate) => { - const availableTimeGetters = { - hour: getAvailableHours, - minute: getAvailableMinutes, - second: getAvailableSeconds - }; - let result = date; - ["hour", "minute", "second"].forEach((type) => { - if (availableTimeGetters[type]) { - let availableTimeSlots; - const method = availableTimeGetters[type]; - switch (type) { - case "minute": { - availableTimeSlots = method(result.hour(), role, compareDate); - break; - } - case "second": { - availableTimeSlots = method(result.hour(), result.minute(), role, compareDate); - break; - } - default: { - availableTimeSlots = method(role, compareDate); - break; - } - } - if ((availableTimeSlots == null ? void 0 : availableTimeSlots.length) && !availableTimeSlots.includes(result[type]())) { - const pos = first ? 0 : availableTimeSlots.length - 1; - result = result[type](availableTimeSlots[pos]); - } - } - }); - return result; - }; - const timePickerOptions = {}; - const onSetOption = ([key, val]) => { - timePickerOptions[key] = val; - }; - return { - timePickerOptions, - getAvailableTime, - onSetOption - }; - }; - - const makeAvailableArr = (disabledList) => { - const trueOrNumber = (isDisabled, index) => isDisabled || index; - const getNumber = (predicate) => predicate !== true; - return disabledList.map(trueOrNumber).filter(getNumber); - }; - const getTimeLists = (disabledHours, disabledMinutes, disabledSeconds) => { - const getHoursList = (role, compare) => { - return makeList(24, disabledHours && (() => disabledHours == null ? void 0 : disabledHours(role, compare))); - }; - const getMinutesList = (hour, role, compare) => { - return makeList(60, disabledMinutes && (() => disabledMinutes == null ? void 0 : disabledMinutes(hour, role, compare))); - }; - const getSecondsList = (hour, minute, role, compare) => { - return makeList(60, disabledSeconds && (() => disabledSeconds == null ? void 0 : disabledSeconds(hour, minute, role, compare))); - }; - return { - getHoursList, - getMinutesList, - getSecondsList - }; - }; - const buildAvailableTimeSlotGetter = (disabledHours, disabledMinutes, disabledSeconds) => { - const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(disabledHours, disabledMinutes, disabledSeconds); - const getAvailableHours = (role, compare) => { - return makeAvailableArr(getHoursList(role, compare)); - }; - const getAvailableMinutes = (hour, role, compare) => { - return makeAvailableArr(getMinutesList(hour, role, compare)); - }; - const getAvailableSeconds = (hour, minute, role, compare) => { - return makeAvailableArr(getSecondsList(hour, minute, role, compare)); - }; - return { - getAvailableHours, - getAvailableMinutes, - getAvailableSeconds - }; - }; - const useOldValue = (props) => { - const oldValue = vue.ref(props.parsedValue); - vue.watch(() => props.visible, (val) => { - if (!val) { - oldValue.value = props.parsedValue; - } - }); - return oldValue; - }; - - const nodeList = /* @__PURE__ */ new Map(); - if (isClient) { - let startClick; - document.addEventListener("mousedown", (e) => startClick = e); - document.addEventListener("mouseup", (e) => { - if (startClick) { - for (const handlers of nodeList.values()) { - for (const { documentHandler } of handlers) { - documentHandler(e, startClick); - } - } - startClick = void 0; - } - }); - } - function createDocumentHandler(el, binding) { - let excludes = []; - if (isArray$1(binding.arg)) { - excludes = binding.arg; - } else if (isElement$1(binding.arg)) { - excludes.push(binding.arg); - } - return function(mouseup, mousedown) { - const popperRef = binding.instance.popperRef; - const mouseUpTarget = mouseup.target; - const mouseDownTarget = mousedown == null ? void 0 : mousedown.target; - const isBound = !binding || !binding.instance; - const isTargetExists = !mouseUpTarget || !mouseDownTarget; - const isContainedByEl = el.contains(mouseUpTarget) || el.contains(mouseDownTarget); - const isSelf = el === mouseUpTarget; - const isTargetExcluded = excludes.length && excludes.some((item) => item == null ? void 0 : item.contains(mouseUpTarget)) || excludes.length && excludes.includes(mouseDownTarget); - const isContainedByPopper = popperRef && (popperRef.contains(mouseUpTarget) || popperRef.contains(mouseDownTarget)); - if (isBound || isTargetExists || isContainedByEl || isSelf || isTargetExcluded || isContainedByPopper) { - return; - } - binding.value(mouseup, mousedown); - }; - } - const ClickOutside = { - beforeMount(el, binding) { - if (!nodeList.has(el)) { - nodeList.set(el, []); - } - nodeList.get(el).push({ - documentHandler: createDocumentHandler(el, binding), - bindingFn: binding.value - }); - }, - updated(el, binding) { - if (!nodeList.has(el)) { - nodeList.set(el, []); - } - const handlers = nodeList.get(el); - const oldHandlerIndex = handlers.findIndex((item) => item.bindingFn === binding.oldValue); - const newHandler = { - documentHandler: createDocumentHandler(el, binding), - bindingFn: binding.value - }; - if (oldHandlerIndex >= 0) { - handlers.splice(oldHandlerIndex, 1, newHandler); - } else { - handlers.push(newHandler); - } - }, - unmounted(el) { - nodeList.delete(el); - } - }; - - const REPEAT_INTERVAL = 100; - const REPEAT_DELAY = 600; - const vRepeatClick = { - beforeMount(el, binding) { - const value = binding.value; - const { interval = REPEAT_INTERVAL, delay = REPEAT_DELAY } = isFunction$1(value) ? {} : value; - let intervalId; - let delayId; - const handler = () => isFunction$1(value) ? value() : value.handler(); - const clear = () => { - if (delayId) { - clearTimeout(delayId); - delayId = void 0; - } - if (intervalId) { - clearInterval(intervalId); - intervalId = void 0; - } - }; - el.addEventListener("mousedown", (evt) => { - if (evt.button !== 0) - return; - clear(); - handler(); - document.addEventListener("mouseup", () => clear(), { - once: true - }); - delayId = setTimeout(() => { - intervalId = setInterval(() => { - handler(); - }, interval); - }, delay); - }); - } - }; - - const FOCUSABLE_CHILDREN = "_trap-focus-children"; - const FOCUS_STACK = []; - const FOCUS_HANDLER = (e) => { - if (FOCUS_STACK.length === 0) - return; - const focusableElement = FOCUS_STACK[FOCUS_STACK.length - 1][FOCUSABLE_CHILDREN]; - if (focusableElement.length > 0 && e.code === EVENT_CODE.tab) { - if (focusableElement.length === 1) { - e.preventDefault(); - if (document.activeElement !== focusableElement[0]) { - focusableElement[0].focus(); - } - return; - } - const goingBackward = e.shiftKey; - const isFirst = e.target === focusableElement[0]; - const isLast = e.target === focusableElement[focusableElement.length - 1]; - if (isFirst && goingBackward) { - e.preventDefault(); - focusableElement[focusableElement.length - 1].focus(); - } - if (isLast && !goingBackward) { - e.preventDefault(); - focusableElement[0].focus(); - } - } - }; - const TrapFocus = { - beforeMount(el) { - el[FOCUSABLE_CHILDREN] = obtainAllFocusableElements$1(el); - FOCUS_STACK.push(el); - if (FOCUS_STACK.length <= 1) { - document.addEventListener("keydown", FOCUS_HANDLER); - } - }, - updated(el) { - vue.nextTick(() => { - el[FOCUSABLE_CHILDREN] = obtainAllFocusableElements$1(el); - }); - }, - unmounted() { - FOCUS_STACK.shift(); - if (FOCUS_STACK.length === 0) { - document.removeEventListener("keydown", FOCUS_HANDLER); - } - } - }; - - var v=!1,o,f,s,u,d,N,l,p,m,w,D,x,E,M,F;function a(){if(!v){v=!0;var e=navigator.userAgent,n=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),i=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(x=/\b(iPhone|iP[ao]d)/.exec(e),E=/\b(iP[ao]d)/.exec(e),w=/Android/i.exec(e),M=/FBAN\/\w+;/i.exec(e),F=/Mobile/i.exec(e),D=!!/Win64/.exec(e),n){o=n[1]?parseFloat(n[1]):n[5]?parseFloat(n[5]):NaN,o&&document&&document.documentMode&&(o=document.documentMode);var r=/(?:Trident\/(\d+.\d+))/.exec(e);N=r?parseFloat(r[1])+4:o,f=n[2]?parseFloat(n[2]):NaN,s=n[3]?parseFloat(n[3]):NaN,u=n[4]?parseFloat(n[4]):NaN,u?(n=/(?:Chrome\/(\d+\.\d+))/.exec(e),d=n&&n[1]?parseFloat(n[1]):NaN):d=NaN;}else o=f=s=d=u=NaN;if(i){if(i[1]){var t=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);l=t?parseFloat(t[1].replace("_",".")):!0;}else l=!1;p=!!i[2],m=!!i[3];}else l=p=m=!1;}}var _={ie:function(){return a()||o},ieCompatibilityMode:function(){return a()||N>o},ie64:function(){return _.ie()&&D},firefox:function(){return a()||f},opera:function(){return a()||s},webkit:function(){return a()||u},safari:function(){return _.webkit()},chrome:function(){return a()||d},windows:function(){return a()||p},osx:function(){return a()||l},linux:function(){return a()||m},iphone:function(){return a()||x},mobile:function(){return a()||x||E||w||F},nativeApp:function(){return a()||M},android:function(){return a()||w},ipad:function(){return a()||E}},A=_;var c=!!(typeof window<"u"&&window.document&&window.document.createElement),U={canUseDOM:c,canUseWorkers:typeof Worker<"u",canUseEventListeners:c&&!!(window.addEventListener||window.attachEvent),canUseViewport:c&&!!window.screen,isInWorker:!c},h=U;var X;h.canUseDOM&&(X=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);function S(e,n){if(!h.canUseDOM||n&&!("addEventListener"in document))return !1;var i="on"+e,r=i in document;if(!r){var t=document.createElement("div");t.setAttribute(i,"return;"),r=typeof t[i]=="function";}return !r&&X&&e==="wheel"&&(r=document.implementation.hasFeature("Events.wheel","3.0")),r}var b=S;var O=10,I=40,P=800;function T(e){var n=0,i=0,r=0,t=0;return "detail"in e&&(i=e.detail),"wheelDelta"in e&&(i=-e.wheelDelta/120),"wheelDeltaY"in e&&(i=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(n=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(n=i,i=0),r=n*O,t=i*O,"deltaY"in e&&(t=e.deltaY),"deltaX"in e&&(r=e.deltaX),(r||t)&&e.deltaMode&&(e.deltaMode==1?(r*=I,t*=I):(r*=P,t*=P)),r&&!n&&(n=r<1?-1:1),t&&!i&&(i=t<1?-1:1),{spinX:n,spinY:i,pixelX:r,pixelY:t}}T.getEventType=function(){return A.firefox()?"DOMMouseScroll":b("wheel")?"wheel":"mousewheel"};var Y=T;/** - * Checks if an event is supported in the current execution environment. - * - * NOTE: This will not work correctly for non-generic events such as `change`, - * `reset`, `load`, `error`, and `select`. - * - * Borrows from Modernizr. - * - * @param {string} eventNameSuffix Event name, e.g. "click". - * @param {?boolean} capture Check if the capture phase is supported. - * @return {boolean} True if the event is supported. - * @internal - * @license Modernizr 3.0.0pre (Custom Build) | MIT - */ - - const mousewheel = function(element, callback) { - if (element && element.addEventListener) { - const fn = function(event) { - const normalized = Y(event); - callback && Reflect.apply(callback, this, [event, normalized]); - }; - element.addEventListener("wheel", fn, { passive: true }); - } - }; - const Mousewheel = { - beforeMount(el, binding) { - mousewheel(el, binding.value); - } - }; - - const basicTimeSpinnerProps = buildProps({ - role: { - type: String, - required: true - }, - spinnerDate: { - type: definePropType(Object), - required: true - }, - showSeconds: { - type: Boolean, - default: true - }, - arrowControl: Boolean, - amPmMode: { - type: definePropType(String), - default: "" - }, - ...disabledTimeListsProps - }); - - const _sfc_main$25 = /* @__PURE__ */ vue.defineComponent({ - __name: "basic-time-spinner", - props: basicTimeSpinnerProps, - emits: ["change", "select-range", "set-option"], - setup(__props, { emit }) { - const props = __props; - const pickerBase = vue.inject("EP_PICKER_BASE"); - const { isRange } = pickerBase.props; - const ns = useNamespace("time"); - const { getHoursList, getMinutesList, getSecondsList } = getTimeLists(props.disabledHours, props.disabledMinutes, props.disabledSeconds); - let isScrolling = false; - const currentScrollbar = vue.ref(); - const listHoursRef = vue.ref(); - const listMinutesRef = vue.ref(); - const listSecondsRef = vue.ref(); - const listRefsMap = { - hours: listHoursRef, - minutes: listMinutesRef, - seconds: listSecondsRef - }; - const spinnerItems = vue.computed(() => { - return props.showSeconds ? timeUnits$1 : timeUnits$1.slice(0, 2); - }); - const timePartials = vue.computed(() => { - const { spinnerDate } = props; - const hours = spinnerDate.hour(); - const minutes = spinnerDate.minute(); - const seconds = spinnerDate.second(); - return { hours, minutes, seconds }; - }); - const timeList = vue.computed(() => { - const { hours, minutes } = vue.unref(timePartials); - const { role, spinnerDate } = props; - const compare = !isRange ? spinnerDate : void 0; - return { - hours: getHoursList(role, compare), - minutes: getMinutesList(hours, role, compare), - seconds: getSecondsList(hours, minutes, role, compare) - }; - }); - const arrowControlTimeList = vue.computed(() => { - const { hours, minutes, seconds } = vue.unref(timePartials); - return { - hours: buildTimeList(hours, 23), - minutes: buildTimeList(minutes, 59), - seconds: buildTimeList(seconds, 59) - }; - }); - const debouncedResetScroll = debounce((type) => { - isScrolling = false; - adjustCurrentSpinner(type); - }, 200); - const getAmPmFlag = (hour) => { - const shouldShowAmPm = !!props.amPmMode; - if (!shouldShowAmPm) - return ""; - const isCapital = props.amPmMode === "A"; - let content = hour < 12 ? " am" : " pm"; - if (isCapital) - content = content.toUpperCase(); - return content; - }; - const emitSelectRange = (type) => { - let range; - switch (type) { - case "hours": - range = [0, 2]; - break; - case "minutes": - range = [3, 5]; - break; - case "seconds": - range = [6, 8]; - break; - } - const [left, right] = range; - emit("select-range", left, right); - currentScrollbar.value = type; - }; - const adjustCurrentSpinner = (type) => { - adjustSpinner(type, vue.unref(timePartials)[type]); - }; - const adjustSpinners = () => { - adjustCurrentSpinner("hours"); - adjustCurrentSpinner("minutes"); - adjustCurrentSpinner("seconds"); - }; - const getScrollbarElement = (el) => el.querySelector(`.${ns.namespace.value}-scrollbar__wrap`); - const adjustSpinner = (type, value) => { - if (props.arrowControl) - return; - const scrollbar = vue.unref(listRefsMap[type]); - if (scrollbar && scrollbar.$el) { - getScrollbarElement(scrollbar.$el).scrollTop = Math.max(0, value * typeItemHeight(type)); - } - }; - const typeItemHeight = (type) => { - const scrollbar = vue.unref(listRefsMap[type]); - const listItem = scrollbar == null ? void 0 : scrollbar.$el.querySelector("li"); - if (listItem) { - return Number.parseFloat(getStyle(listItem, "height")) || 0; - } - return 0; - }; - const onIncrement = () => { - scrollDown(1); - }; - const onDecrement = () => { - scrollDown(-1); - }; - const scrollDown = (step) => { - if (!currentScrollbar.value) { - emitSelectRange("hours"); - } - const label = currentScrollbar.value; - const now = vue.unref(timePartials)[label]; - const total = currentScrollbar.value === "hours" ? 24 : 60; - const next = findNextUnDisabled(label, now, step, total); - modifyDateField(label, next); - adjustSpinner(label, next); - vue.nextTick(() => emitSelectRange(label)); - }; - const findNextUnDisabled = (type, now, step, total) => { - let next = (now + step + total) % total; - const list = vue.unref(timeList)[type]; - while (list[next] && next !== now) { - next = (next + step + total) % total; - } - return next; - }; - const modifyDateField = (type, value) => { - const list = vue.unref(timeList)[type]; - const isDisabled = list[value]; - if (isDisabled) - return; - const { hours, minutes, seconds } = vue.unref(timePartials); - let changeTo; - switch (type) { - case "hours": - changeTo = props.spinnerDate.hour(value).minute(minutes).second(seconds); - break; - case "minutes": - changeTo = props.spinnerDate.hour(hours).minute(value).second(seconds); - break; - case "seconds": - changeTo = props.spinnerDate.hour(hours).minute(minutes).second(value); - break; - } - emit("change", changeTo); - }; - const handleClick = (type, { value, disabled }) => { - if (!disabled) { - modifyDateField(type, value); - emitSelectRange(type); - adjustSpinner(type, value); - } - }; - const handleScroll = (type) => { - const scrollbar = vue.unref(listRefsMap[type]); - if (!scrollbar) - return; - isScrolling = true; - debouncedResetScroll(type); - const value = Math.min(Math.round((getScrollbarElement(scrollbar.$el).scrollTop - (scrollBarHeight(type) * 0.5 - 10) / typeItemHeight(type) + 3) / typeItemHeight(type)), type === "hours" ? 23 : 59); - modifyDateField(type, value); - }; - const scrollBarHeight = (type) => { - return vue.unref(listRefsMap[type]).$el.offsetHeight; - }; - const bindScrollEvent = () => { - const bindFunction = (type) => { - const scrollbar = vue.unref(listRefsMap[type]); - if (scrollbar && scrollbar.$el) { - getScrollbarElement(scrollbar.$el).onscroll = () => { - handleScroll(type); - }; - } - }; - bindFunction("hours"); - bindFunction("minutes"); - bindFunction("seconds"); - }; - vue.onMounted(() => { - vue.nextTick(() => { - !props.arrowControl && bindScrollEvent(); - adjustSpinners(); - if (props.role === "start") - emitSelectRange("hours"); - }); - }); - const setRef = (scrollbar, type) => { - listRefsMap[type].value = scrollbar != null ? scrollbar : void 0; - }; - emit("set-option", [`${props.role}_scrollDown`, scrollDown]); - emit("set-option", [`${props.role}_emitSelectRange`, emitSelectRange]); - vue.watch(() => props.spinnerDate, () => { - if (isScrolling) - return; - adjustSpinners(); - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([vue.unref(ns).b("spinner"), { "has-seconds": _ctx.showSeconds }]) - }, [ - !_ctx.arrowControl ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(vue.unref(spinnerItems), (item) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElScrollbar), { - key: item, - ref_for: true, - ref: (scrollbar) => setRef(scrollbar, item), - class: vue.normalizeClass(vue.unref(ns).be("spinner", "wrapper")), - "wrap-style": "max-height: inherit;", - "view-class": vue.unref(ns).be("spinner", "list"), - noresize: "", - tag: "ul", - onMouseenter: ($event) => emitSelectRange(item), - onMousemove: ($event) => adjustCurrentSpinner(item) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(timeList)[item], (disabled, key) => { - return vue.openBlock(), vue.createElementBlock("li", { - key, - class: vue.normalizeClass([ - vue.unref(ns).be("spinner", "item"), - vue.unref(ns).is("active", key === vue.unref(timePartials)[item]), - vue.unref(ns).is("disabled", disabled) - ]), - onClick: ($event) => handleClick(item, { value: key, disabled }) - }, [ - item === "hours" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.createTextVNode(vue.toDisplayString(("0" + (_ctx.amPmMode ? key % 12 || 12 : key)).slice(-2)) + vue.toDisplayString(getAmPmFlag(key)), 1) - ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ - vue.createTextVNode(vue.toDisplayString(("0" + key).slice(-2)), 1) - ], 64)) - ], 10, ["onClick"]); - }), 128)) - ]), - _: 2 - }, 1032, ["class", "view-class", "onMouseenter", "onMousemove"]); - }), 128)) : vue.createCommentVNode("v-if", true), - _ctx.arrowControl ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(vue.unref(spinnerItems), (item) => { - return vue.openBlock(), vue.createElementBlock("div", { - key: item, - class: vue.normalizeClass([vue.unref(ns).be("spinner", "wrapper"), vue.unref(ns).is("arrow")]), - onMouseenter: ($event) => emitSelectRange(item) - }, [ - vue.withDirectives((vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - class: vue.normalizeClass(["arrow-up", vue.unref(ns).be("spinner", "arrow")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_up_default)) - ]), - _: 1 - }, 8, ["class"])), [ - [vue.unref(vRepeatClick), onDecrement] - ]), - vue.withDirectives((vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - class: vue.normalizeClass(["arrow-down", vue.unref(ns).be("spinner", "arrow")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_down_default)) - ]), - _: 1 - }, 8, ["class"])), [ - [vue.unref(vRepeatClick), onIncrement] - ]), - vue.createElementVNode("ul", { - class: vue.normalizeClass(vue.unref(ns).be("spinner", "list")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(arrowControlTimeList)[item], (time, key) => { - return vue.openBlock(), vue.createElementBlock("li", { - key, - class: vue.normalizeClass([ - vue.unref(ns).be("spinner", "item"), - vue.unref(ns).is("active", time === vue.unref(timePartials)[item]), - vue.unref(ns).is("disabled", vue.unref(timeList)[item][time]) - ]) - }, [ - vue.unref(isNumber)(time) ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - item === "hours" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.createTextVNode(vue.toDisplayString(("0" + (_ctx.amPmMode ? time % 12 || 12 : time)).slice(-2)) + vue.toDisplayString(getAmPmFlag(time)), 1) - ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ - vue.createTextVNode(vue.toDisplayString(("0" + time).slice(-2)), 1) - ], 64)) - ], 64)) : vue.createCommentVNode("v-if", true) - ], 2); - }), 128)) - ], 2) - ], 42, ["onMouseenter"]); - }), 128)) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var TimeSpinner = /* @__PURE__ */ _export_sfc(_sfc_main$25, [["__file", "basic-time-spinner.vue"]]); - - const _sfc_main$24 = /* @__PURE__ */ vue.defineComponent({ - __name: "panel-time-pick", - props: panelTimePickerProps, - emits: ["pick", "select-range", "set-picker-option"], - setup(__props, { emit }) { - const props = __props; - const pickerBase = vue.inject("EP_PICKER_BASE"); - const { - arrowControl, - disabledHours, - disabledMinutes, - disabledSeconds, - defaultValue - } = pickerBase.props; - const { getAvailableHours, getAvailableMinutes, getAvailableSeconds } = buildAvailableTimeSlotGetter(disabledHours, disabledMinutes, disabledSeconds); - const ns = useNamespace("time"); - const { t, lang } = useLocale(); - const selectionRange = vue.ref([0, 2]); - const oldValue = useOldValue(props); - const transitionName = vue.computed(() => { - return isUndefined(props.actualVisible) ? `${ns.namespace.value}-zoom-in-top` : ""; - }); - const showSeconds = vue.computed(() => { - return props.format.includes("ss"); - }); - const amPmMode = vue.computed(() => { - if (props.format.includes("A")) - return "A"; - if (props.format.includes("a")) - return "a"; - return ""; - }); - const isValidValue = (_date) => { - const parsedDate = dayjs(_date).locale(lang.value); - const result = getRangeAvailableTime(parsedDate); - return parsedDate.isSame(result); - }; - const handleCancel = () => { - emit("pick", oldValue.value, false); - }; - const handleConfirm = (visible = false, first = false) => { - if (first) - return; - emit("pick", props.parsedValue, visible); - }; - const handleChange = (_date) => { - if (!props.visible) { - return; - } - const result = getRangeAvailableTime(_date).millisecond(0); - emit("pick", result, true); - }; - const setSelectionRange = (start, end) => { - emit("select-range", start, end); - selectionRange.value = [start, end]; - }; - const changeSelectionRange = (step) => { - const list = [0, 3].concat(showSeconds.value ? [6] : []); - const mapping = ["hours", "minutes"].concat(showSeconds.value ? ["seconds"] : []); - const index = list.indexOf(selectionRange.value[0]); - const next = (index + step + list.length) % list.length; - timePickerOptions["start_emitSelectRange"](mapping[next]); - }; - const handleKeydown = (event) => { - const code = event.code; - const { left, right, up, down } = EVENT_CODE; - if ([left, right].includes(code)) { - const step = code === left ? -1 : 1; - changeSelectionRange(step); - event.preventDefault(); - return; - } - if ([up, down].includes(code)) { - const step = code === up ? -1 : 1; - timePickerOptions["start_scrollDown"](step); - event.preventDefault(); - return; - } - }; - const { timePickerOptions, onSetOption, getAvailableTime } = useTimePanel({ - getAvailableHours, - getAvailableMinutes, - getAvailableSeconds - }); - const getRangeAvailableTime = (date) => { - return getAvailableTime(date, props.datetimeRole || "", true); - }; - const parseUserInput = (value) => { - if (!value) - return null; - return dayjs(value, props.format).locale(lang.value); - }; - const formatToString = (value) => { - if (!value) - return null; - return value.format(props.format); - }; - const getDefaultValue = () => { - return dayjs(defaultValue).locale(lang.value); - }; - emit("set-picker-option", ["isValidValue", isValidValue]); - emit("set-picker-option", ["formatToString", formatToString]); - emit("set-picker-option", ["parseUserInput", parseUserInput]); - emit("set-picker-option", ["handleKeydownInput", handleKeydown]); - emit("set-picker-option", ["getRangeAvailableTime", getRangeAvailableTime]); - emit("set-picker-option", ["getDefaultValue", getDefaultValue]); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.Transition, { name: vue.unref(transitionName) }, { - default: vue.withCtx(() => [ - _ctx.actualVisible || _ctx.visible ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).b("panel")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass([vue.unref(ns).be("panel", "content"), { "has-seconds": vue.unref(showSeconds) }]) - }, [ - vue.createVNode(TimeSpinner, { - ref: "spinner", - role: _ctx.datetimeRole || "start", - "arrow-control": vue.unref(arrowControl), - "show-seconds": vue.unref(showSeconds), - "am-pm-mode": vue.unref(amPmMode), - "spinner-date": _ctx.parsedValue, - "disabled-hours": vue.unref(disabledHours), - "disabled-minutes": vue.unref(disabledMinutes), - "disabled-seconds": vue.unref(disabledSeconds), - onChange: handleChange, - onSetOption: vue.unref(onSetOption), - onSelectRange: setSelectionRange - }, null, 8, ["role", "arrow-control", "show-seconds", "am-pm-mode", "spinner-date", "disabled-hours", "disabled-minutes", "disabled-seconds", "onSetOption"]) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).be("panel", "footer")) - }, [ - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(ns).be("panel", "btn"), "cancel"]), - onClick: handleCancel - }, vue.toDisplayString(vue.unref(t)("el.datepicker.cancel")), 3), - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(ns).be("panel", "btn"), "confirm"]), - onClick: ($event) => handleConfirm() - }, vue.toDisplayString(vue.unref(t)("el.datepicker.confirm")), 11, ["onClick"]) - ], 2) - ], 2)) : vue.createCommentVNode("v-if", true) - ]), - _: 1 - }, 8, ["name"]); - }; - } - }); - var TimePickPanel = /* @__PURE__ */ _export_sfc(_sfc_main$24, [["__file", "panel-time-pick.vue"]]); - - const panelTimeRangeProps = buildProps({ - ...timePanelSharedProps, - parsedValue: { - type: definePropType(Array) - } - }); - - const _sfc_main$23 = /* @__PURE__ */ vue.defineComponent({ - __name: "panel-time-range", - props: panelTimeRangeProps, - emits: ["pick", "select-range", "set-picker-option"], - setup(__props, { emit }) { - const props = __props; - const makeSelectRange = (start, end) => { - const result = []; - for (let i = start; i <= end; i++) { - result.push(i); - } - return result; - }; - const { t, lang } = useLocale(); - const nsTime = useNamespace("time"); - const nsPicker = useNamespace("picker"); - const pickerBase = vue.inject("EP_PICKER_BASE"); - const { - arrowControl, - disabledHours, - disabledMinutes, - disabledSeconds, - defaultValue - } = pickerBase.props; - const startContainerKls = vue.computed(() => [ - nsTime.be("range-picker", "body"), - nsTime.be("panel", "content"), - nsTime.is("arrow", arrowControl), - showSeconds.value ? "has-seconds" : "" - ]); - const endContainerKls = vue.computed(() => [ - nsTime.be("range-picker", "body"), - nsTime.be("panel", "content"), - nsTime.is("arrow", arrowControl), - showSeconds.value ? "has-seconds" : "" - ]); - const startTime = vue.computed(() => props.parsedValue[0]); - const endTime = vue.computed(() => props.parsedValue[1]); - const oldValue = useOldValue(props); - const handleCancel = () => { - emit("pick", oldValue.value, false); - }; - const showSeconds = vue.computed(() => { - return props.format.includes("ss"); - }); - const amPmMode = vue.computed(() => { - if (props.format.includes("A")) - return "A"; - if (props.format.includes("a")) - return "a"; - return ""; - }); - const handleConfirm = (visible = false) => { - emit("pick", [startTime.value, endTime.value], visible); - }; - const handleMinChange = (date) => { - handleChange(date.millisecond(0), endTime.value); - }; - const handleMaxChange = (date) => { - handleChange(startTime.value, date.millisecond(0)); - }; - const isValidValue = (_date) => { - const parsedDate = _date.map((_) => dayjs(_).locale(lang.value)); - const result = getRangeAvailableTime(parsedDate); - return parsedDate[0].isSame(result[0]) && parsedDate[1].isSame(result[1]); - }; - const handleChange = (start, end) => { - if (!props.visible) { - return; - } - emit("pick", [start, end], true); - }; - const btnConfirmDisabled = vue.computed(() => { - return startTime.value > endTime.value; - }); - const selectionRange = vue.ref([0, 2]); - const setMinSelectionRange = (start, end) => { - emit("select-range", start, end, "min"); - selectionRange.value = [start, end]; - }; - const offset = vue.computed(() => showSeconds.value ? 11 : 8); - const setMaxSelectionRange = (start, end) => { - emit("select-range", start, end, "max"); - const _offset = vue.unref(offset); - selectionRange.value = [start + _offset, end + _offset]; - }; - const changeSelectionRange = (step) => { - const list = showSeconds.value ? [0, 3, 6, 11, 14, 17] : [0, 3, 8, 11]; - const mapping = ["hours", "minutes"].concat(showSeconds.value ? ["seconds"] : []); - const index = list.indexOf(selectionRange.value[0]); - const next = (index + step + list.length) % list.length; - const half = list.length / 2; - if (next < half) { - timePickerOptions["start_emitSelectRange"](mapping[next]); - } else { - timePickerOptions["end_emitSelectRange"](mapping[next - half]); - } - }; - const handleKeydown = (event) => { - const code = event.code; - const { left, right, up, down } = EVENT_CODE; - if ([left, right].includes(code)) { - const step = code === left ? -1 : 1; - changeSelectionRange(step); - event.preventDefault(); - return; - } - if ([up, down].includes(code)) { - const step = code === up ? -1 : 1; - const role = selectionRange.value[0] < offset.value ? "start" : "end"; - timePickerOptions[`${role}_scrollDown`](step); - event.preventDefault(); - return; - } - }; - const disabledHours_ = (role, compare) => { - const defaultDisable = disabledHours ? disabledHours(role) : []; - const isStart = role === "start"; - const compareDate = compare || (isStart ? endTime.value : startTime.value); - const compareHour = compareDate.hour(); - const nextDisable = isStart ? makeSelectRange(compareHour + 1, 23) : makeSelectRange(0, compareHour - 1); - return union(defaultDisable, nextDisable); - }; - const disabledMinutes_ = (hour, role, compare) => { - const defaultDisable = disabledMinutes ? disabledMinutes(hour, role) : []; - const isStart = role === "start"; - const compareDate = compare || (isStart ? endTime.value : startTime.value); - const compareHour = compareDate.hour(); - if (hour !== compareHour) { - return defaultDisable; - } - const compareMinute = compareDate.minute(); - const nextDisable = isStart ? makeSelectRange(compareMinute + 1, 59) : makeSelectRange(0, compareMinute - 1); - return union(defaultDisable, nextDisable); - }; - const disabledSeconds_ = (hour, minute, role, compare) => { - const defaultDisable = disabledSeconds ? disabledSeconds(hour, minute, role) : []; - const isStart = role === "start"; - const compareDate = compare || (isStart ? endTime.value : startTime.value); - const compareHour = compareDate.hour(); - const compareMinute = compareDate.minute(); - if (hour !== compareHour || minute !== compareMinute) { - return defaultDisable; - } - const compareSecond = compareDate.second(); - const nextDisable = isStart ? makeSelectRange(compareSecond + 1, 59) : makeSelectRange(0, compareSecond - 1); - return union(defaultDisable, nextDisable); - }; - const getRangeAvailableTime = ([start, end]) => { - return [ - getAvailableTime(start, "start", true, end), - getAvailableTime(end, "end", false, start) - ]; - }; - const { getAvailableHours, getAvailableMinutes, getAvailableSeconds } = buildAvailableTimeSlotGetter(disabledHours_, disabledMinutes_, disabledSeconds_); - const { - timePickerOptions, - getAvailableTime, - onSetOption - } = useTimePanel({ - getAvailableHours, - getAvailableMinutes, - getAvailableSeconds - }); - const parseUserInput = (days) => { - if (!days) - return null; - if (isArray$1(days)) { - return days.map((d) => dayjs(d, props.format).locale(lang.value)); - } - return dayjs(days, props.format).locale(lang.value); - }; - const formatToString = (days) => { - if (!days) - return null; - if (isArray$1(days)) { - return days.map((d) => d.format(props.format)); - } - return days.format(props.format); - }; - const getDefaultValue = () => { - if (isArray$1(defaultValue)) { - return defaultValue.map((d) => dayjs(d).locale(lang.value)); - } - const defaultDay = dayjs(defaultValue).locale(lang.value); - return [defaultDay, defaultDay.add(60, "m")]; - }; - emit("set-picker-option", ["formatToString", formatToString]); - emit("set-picker-option", ["parseUserInput", parseUserInput]); - emit("set-picker-option", ["isValidValue", isValidValue]); - emit("set-picker-option", ["handleKeydownInput", handleKeydown]); - emit("set-picker-option", ["getDefaultValue", getDefaultValue]); - emit("set-picker-option", ["getRangeAvailableTime", getRangeAvailableTime]); - return (_ctx, _cache) => { - return _ctx.actualVisible ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass([vue.unref(nsTime).b("range-picker"), vue.unref(nsPicker).b("panel")]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(nsTime).be("range-picker", "content")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(nsTime).be("range-picker", "cell")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(nsTime).be("range-picker", "header")) - }, vue.toDisplayString(vue.unref(t)("el.datepicker.startTime")), 3), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(startContainerKls)) - }, [ - vue.createVNode(TimeSpinner, { - ref: "minSpinner", - role: "start", - "show-seconds": vue.unref(showSeconds), - "am-pm-mode": vue.unref(amPmMode), - "arrow-control": vue.unref(arrowControl), - "spinner-date": vue.unref(startTime), - "disabled-hours": disabledHours_, - "disabled-minutes": disabledMinutes_, - "disabled-seconds": disabledSeconds_, - onChange: handleMinChange, - onSetOption: vue.unref(onSetOption), - onSelectRange: setMinSelectionRange - }, null, 8, ["show-seconds", "am-pm-mode", "arrow-control", "spinner-date", "onSetOption"]) - ], 2) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(nsTime).be("range-picker", "cell")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(nsTime).be("range-picker", "header")) - }, vue.toDisplayString(vue.unref(t)("el.datepicker.endTime")), 3), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(endContainerKls)) - }, [ - vue.createVNode(TimeSpinner, { - ref: "maxSpinner", - role: "end", - "show-seconds": vue.unref(showSeconds), - "am-pm-mode": vue.unref(amPmMode), - "arrow-control": vue.unref(arrowControl), - "spinner-date": vue.unref(endTime), - "disabled-hours": disabledHours_, - "disabled-minutes": disabledMinutes_, - "disabled-seconds": disabledSeconds_, - onChange: handleMaxChange, - onSetOption: vue.unref(onSetOption), - onSelectRange: setMaxSelectionRange - }, null, 8, ["show-seconds", "am-pm-mode", "arrow-control", "spinner-date", "onSetOption"]) - ], 2) - ], 2) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(nsTime).be("panel", "footer")) - }, [ - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(nsTime).be("panel", "btn"), "cancel"]), - onClick: ($event) => handleCancel() - }, vue.toDisplayString(vue.unref(t)("el.datepicker.cancel")), 11, ["onClick"]), - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(nsTime).be("panel", "btn"), "confirm"]), - disabled: vue.unref(btnConfirmDisabled), - onClick: ($event) => handleConfirm() - }, vue.toDisplayString(vue.unref(t)("el.datepicker.confirm")), 11, ["disabled", "onClick"]) - ], 2) - ], 2)) : vue.createCommentVNode("v-if", true); - }; - } - }); - var TimeRangePanel = /* @__PURE__ */ _export_sfc(_sfc_main$23, [["__file", "panel-time-range.vue"]]); - - dayjs.extend(customParseFormat); - var TimePicker = vue.defineComponent({ - name: "ElTimePicker", - install: null, - props: { - ...timePickerDefaultProps, - isRange: { - type: Boolean, - default: false - } - }, - emits: ["update:modelValue"], - setup(props, ctx) { - const commonPicker = vue.ref(); - const [type, Panel] = props.isRange ? ["timerange", TimeRangePanel] : ["time", TimePickPanel]; - const modelUpdater = (value) => ctx.emit("update:modelValue", value); - vue.provide("ElPopperOptions", props.popperOptions); - ctx.expose({ - focus: () => { - var _a; - (_a = commonPicker.value) == null ? void 0 : _a.focus(); - }, - blur: () => { - var _a; - (_a = commonPicker.value) == null ? void 0 : _a.blur(); - }, - handleOpen: () => { - var _a; - (_a = commonPicker.value) == null ? void 0 : _a.handleOpen(); - }, - handleClose: () => { - var _a; - (_a = commonPicker.value) == null ? void 0 : _a.handleClose(); - } - }); - return () => { - var _a; - const format = (_a = props.format) != null ? _a : DEFAULT_FORMATS_TIME; - return vue.createVNode(CommonPicker, vue.mergeProps(props, { - "ref": commonPicker, - "type": type, - "format": format, - "onUpdate:modelValue": modelUpdater - }), { - default: (props2) => vue.createVNode(Panel, props2, null) - }); - }; - } - }); - - const ElTimePicker = withInstall(TimePicker); - - const getPrevMonthLastDays = (date, count) => { - const lastDay = date.subtract(1, "month").endOf("month").date(); - return rangeArr(count).map((_, index) => lastDay - (count - index - 1)); - }; - const getMonthDays = (date) => { - const days = date.daysInMonth(); - return rangeArr(days).map((_, index) => index + 1); - }; - const toNestedArr = (days) => rangeArr(days.length / 7).map((index) => { - const start = index * 7; - return days.slice(start, start + 7); - }); - const dateTableProps = buildProps({ - selectedDay: { - type: definePropType(Object) - }, - range: { - type: definePropType(Array) - }, - date: { - type: definePropType(Object), - required: true - }, - hideHeader: { - type: Boolean - } - }); - const dateTableEmits = { - pick: (value) => isObject$1(value) - }; - - var localeData$1 = {exports: {}}; - - (function(module, exports) { - !function(n, e) { - module.exports = e() ; - }(commonjsGlobal, function() { - return function(n, e, t) { - var r = e.prototype, o = function(n2) { - return n2 && (n2.indexOf ? n2 : n2.s); - }, u = function(n2, e2, t2, r2, u2) { - var i2 = n2.name ? n2 : n2.$locale(), a2 = o(i2[e2]), s2 = o(i2[t2]), f = a2 || s2.map(function(n3) { - return n3.slice(0, r2); - }); - if (!u2) - return f; - var d = i2.weekStart; - return f.map(function(n3, e3) { - return f[(e3 + (d || 0)) % 7]; - }); - }, i = function() { - return t.Ls[t.locale()]; - }, a = function(n2, e2) { - return n2.formats[e2] || function(n3) { - return n3.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g, function(n4, e3, t2) { - return e3 || t2.slice(1); - }); - }(n2.formats[e2.toUpperCase()]); - }, s = function() { - var n2 = this; - return { months: function(e2) { - return e2 ? e2.format("MMMM") : u(n2, "months"); - }, monthsShort: function(e2) { - return e2 ? e2.format("MMM") : u(n2, "monthsShort", "months", 3); - }, firstDayOfWeek: function() { - return n2.$locale().weekStart || 0; - }, weekdays: function(e2) { - return e2 ? e2.format("dddd") : u(n2, "weekdays"); - }, weekdaysMin: function(e2) { - return e2 ? e2.format("dd") : u(n2, "weekdaysMin", "weekdays", 2); - }, weekdaysShort: function(e2) { - return e2 ? e2.format("ddd") : u(n2, "weekdaysShort", "weekdays", 3); - }, longDateFormat: function(e2) { - return a(n2.$locale(), e2); - }, meridiem: this.$locale().meridiem, ordinal: this.$locale().ordinal }; - }; - r.localeData = function() { - return s.bind(this)(); - }, t.localeData = function() { - var n2 = i(); - return { firstDayOfWeek: function() { - return n2.weekStart || 0; - }, weekdays: function() { - return t.weekdays(); - }, weekdaysShort: function() { - return t.weekdaysShort(); - }, weekdaysMin: function() { - return t.weekdaysMin(); - }, months: function() { - return t.months(); - }, monthsShort: function() { - return t.monthsShort(); - }, longDateFormat: function(e2) { - return a(n2, e2); - }, meridiem: n2.meridiem, ordinal: n2.ordinal }; - }, t.months = function() { - return u(i(), "months"); - }, t.monthsShort = function() { - return u(i(), "monthsShort", "months", 3); - }, t.weekdays = function(n2) { - return u(i(), "weekdays", null, null, n2); - }, t.weekdaysShort = function(n2) { - return u(i(), "weekdaysShort", "weekdays", 3, n2); - }, t.weekdaysMin = function(n2) { - return u(i(), "weekdaysMin", "weekdays", 2, n2); - }; - }; - }); - })(localeData$1); - var localeData = localeData$1.exports; - - const useDateTable = (props, emit) => { - dayjs.extend(localeData); - const firstDayOfWeek = dayjs.localeData().firstDayOfWeek(); - const { t, lang } = useLocale(); - const now = dayjs().locale(lang.value); - const isInRange = vue.computed(() => !!props.range && !!props.range.length); - const rows = vue.computed(() => { - let days = []; - if (isInRange.value) { - const [start, end] = props.range; - const currentMonthRange = rangeArr(end.date() - start.date() + 1).map((index) => ({ - text: start.date() + index, - type: "current" - })); - let remaining = currentMonthRange.length % 7; - remaining = remaining === 0 ? 0 : 7 - remaining; - const nextMonthRange = rangeArr(remaining).map((_, index) => ({ - text: index + 1, - type: "next" - })); - days = currentMonthRange.concat(nextMonthRange); - } else { - const firstDay = props.date.startOf("month").day(); - const prevMonthDays = getPrevMonthLastDays(props.date, (firstDay - firstDayOfWeek + 7) % 7).map((day) => ({ - text: day, - type: "prev" - })); - const currentMonthDays = getMonthDays(props.date).map((day) => ({ - text: day, - type: "current" - })); - days = [...prevMonthDays, ...currentMonthDays]; - const remaining = 7 - (days.length % 7 || 7); - const nextMonthDays = rangeArr(remaining).map((_, index) => ({ - text: index + 1, - type: "next" - })); - days = days.concat(nextMonthDays); - } - return toNestedArr(days); - }); - const weekDays = vue.computed(() => { - const start = firstDayOfWeek; - if (start === 0) { - return WEEK_DAYS.map((_) => t(`el.datepicker.weeks.${_}`)); - } else { - return WEEK_DAYS.slice(start).concat(WEEK_DAYS.slice(0, start)).map((_) => t(`el.datepicker.weeks.${_}`)); - } - }); - const getFormattedDate = (day, type) => { - switch (type) { - case "prev": - return props.date.startOf("month").subtract(1, "month").date(day); - case "next": - return props.date.startOf("month").add(1, "month").date(day); - case "current": - return props.date.date(day); - } - }; - const handlePickDay = ({ text, type }) => { - const date = getFormattedDate(text, type); - emit("pick", date); - }; - const getSlotData = ({ text, type }) => { - const day = getFormattedDate(text, type); - return { - isSelected: day.isSame(props.selectedDay), - type: `${type}-month`, - day: day.format("YYYY-MM-DD"), - date: day.toDate() - }; - }; - return { - now, - isInRange, - rows, - weekDays, - getFormattedDate, - handlePickDay, - getSlotData - }; - }; - - const __default__$1t = vue.defineComponent({ - name: "DateTable" - }); - const _sfc_main$22 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1t, - props: dateTableProps, - emits: dateTableEmits, - setup(__props, { expose, emit }) { - const props = __props; - const { - isInRange, - now, - rows, - weekDays, - getFormattedDate, - handlePickDay, - getSlotData - } = useDateTable(props, emit); - const nsTable = useNamespace("calendar-table"); - const nsDay = useNamespace("calendar-day"); - const getCellClass = ({ text, type }) => { - const classes = [type]; - if (type === "current") { - const date = getFormattedDate(text, type); - if (date.isSame(props.selectedDay, "day")) { - classes.push(nsDay.is("selected")); - } - if (date.isSame(now, "day")) { - classes.push(nsDay.is("today")); - } - } - return classes; - }; - expose({ - getFormattedDate - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("table", { - class: vue.normalizeClass([vue.unref(nsTable).b(), vue.unref(nsTable).is("range", vue.unref(isInRange))]), - cellspacing: "0", - cellpadding: "0" - }, [ - !_ctx.hideHeader ? (vue.openBlock(), vue.createElementBlock("thead", { key: 0 }, [ - vue.createElementVNode("tr", null, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(weekDays), (day) => { - return vue.openBlock(), vue.createElementBlock("th", { - key: day, - scope: "col" - }, vue.toDisplayString(day), 1); - }), 128)) - ]) - ])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("tbody", null, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(rows), (row, index) => { - return vue.openBlock(), vue.createElementBlock("tr", { - key: index, - class: vue.normalizeClass({ - [vue.unref(nsTable).e("row")]: true, - [vue.unref(nsTable).em("row", "hide-border")]: index === 0 && _ctx.hideHeader - }) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(row, (cell, key) => { - return vue.openBlock(), vue.createElementBlock("td", { - key, - class: vue.normalizeClass(getCellClass(cell)), - onClick: ($event) => vue.unref(handlePickDay)(cell) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(nsDay).b()) - }, [ - vue.renderSlot(_ctx.$slots, "date-cell", { - data: vue.unref(getSlotData)(cell) - }, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(cell.text), 1) - ]) - ], 2) - ], 10, ["onClick"]); - }), 128)) - ], 2); - }), 128)) - ]) - ], 2); - }; - } - }); - var DateTable$1 = /* @__PURE__ */ _export_sfc(_sfc_main$22, [["__file", "date-table.vue"]]); - - const adjacentMonth = (start, end) => { - const firstMonthLastDay = start.endOf("month"); - const lastMonthFirstDay = end.startOf("month"); - const isSameWeek = firstMonthLastDay.isSame(lastMonthFirstDay, "week"); - const lastMonthStartDay = isSameWeek ? lastMonthFirstDay.add(1, "week") : lastMonthFirstDay; - return [ - [start, firstMonthLastDay], - [lastMonthStartDay.startOf("week"), end] - ]; - }; - const threeConsecutiveMonth = (start, end) => { - const firstMonthLastDay = start.endOf("month"); - const secondMonthFirstDay = start.add(1, "month").startOf("month"); - const secondMonthStartDay = firstMonthLastDay.isSame(secondMonthFirstDay, "week") ? secondMonthFirstDay.add(1, "week") : secondMonthFirstDay; - const secondMonthLastDay = secondMonthStartDay.endOf("month"); - const lastMonthFirstDay = end.startOf("month"); - const lastMonthStartDay = secondMonthLastDay.isSame(lastMonthFirstDay, "week") ? lastMonthFirstDay.add(1, "week") : lastMonthFirstDay; - return [ - [start, firstMonthLastDay], - [secondMonthStartDay.startOf("week"), secondMonthLastDay], - [lastMonthStartDay.startOf("week"), end] - ]; - }; - const useCalendar = (props, emit, componentName) => { - const { lang } = useLocale(); - const selectedDay = vue.ref(); - const now = dayjs().locale(lang.value); - const realSelectedDay = vue.computed({ - get() { - if (!props.modelValue) - return selectedDay.value; - return date.value; - }, - set(val) { - if (!val) - return; - selectedDay.value = val; - const result = val.toDate(); - emit(INPUT_EVENT, result); - emit(UPDATE_MODEL_EVENT, result); - } - }); - const validatedRange = vue.computed(() => { - if (!props.range || !isArray$1(props.range) || props.range.length !== 2 || props.range.some((item) => !isDate$1(item))) - return []; - const rangeArrDayjs = props.range.map((_) => dayjs(_).locale(lang.value)); - const [startDayjs, endDayjs] = rangeArrDayjs; - if (startDayjs.isAfter(endDayjs)) { - return []; - } - if (startDayjs.isSame(endDayjs, "month")) { - return calculateValidatedDateRange(startDayjs, endDayjs); - } else { - if (startDayjs.add(1, "month").month() !== endDayjs.month()) { - return []; - } - return calculateValidatedDateRange(startDayjs, endDayjs); - } - }); - const date = vue.computed(() => { - if (!props.modelValue) { - return realSelectedDay.value || (validatedRange.value.length ? validatedRange.value[0][0] : now); - } else { - return dayjs(props.modelValue).locale(lang.value); - } - }); - const prevMonthDayjs = vue.computed(() => date.value.subtract(1, "month").date(1)); - const nextMonthDayjs = vue.computed(() => date.value.add(1, "month").date(1)); - const prevYearDayjs = vue.computed(() => date.value.subtract(1, "year").date(1)); - const nextYearDayjs = vue.computed(() => date.value.add(1, "year").date(1)); - const calculateValidatedDateRange = (startDayjs, endDayjs) => { - const firstDay = startDayjs.startOf("week"); - const lastDay = endDayjs.endOf("week"); - const firstMonth = firstDay.get("month"); - const lastMonth = lastDay.get("month"); - if (firstMonth === lastMonth) { - return [[firstDay, lastDay]]; - } else if ((firstMonth + 1) % 12 === lastMonth) { - return adjacentMonth(firstDay, lastDay); - } else if (firstMonth + 2 === lastMonth || (firstMonth + 1) % 11 === lastMonth) { - return threeConsecutiveMonth(firstDay, lastDay); - } else { - return []; - } - }; - const pickDay = (day) => { - realSelectedDay.value = day; - }; - const selectDate = (type) => { - const dateMap = { - "prev-month": prevMonthDayjs.value, - "next-month": nextMonthDayjs.value, - "prev-year": prevYearDayjs.value, - "next-year": nextYearDayjs.value, - today: now - }; - const day = dateMap[type]; - if (!day.isSame(date.value, "day")) { - pickDay(day); - } - }; - return { - calculateValidatedDateRange, - date, - realSelectedDay, - pickDay, - selectDate, - validatedRange - }; - }; - - const isValidRange$1 = (range) => isArray$1(range) && range.length === 2 && range.every((item) => isDate$1(item)); - const calendarProps = buildProps({ - modelValue: { - type: Date - }, - range: { - type: definePropType(Array), - validator: isValidRange$1 - } - }); - const calendarEmits = { - [UPDATE_MODEL_EVENT]: (value) => isDate$1(value), - [INPUT_EVENT]: (value) => isDate$1(value) - }; - - const COMPONENT_NAME$g = "ElCalendar"; - const __default__$1s = vue.defineComponent({ - name: COMPONENT_NAME$g - }); - const _sfc_main$21 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1s, - props: calendarProps, - emits: calendarEmits, - setup(__props, { expose, emit }) { - const props = __props; - const ns = useNamespace("calendar"); - const { - calculateValidatedDateRange, - date, - pickDay, - realSelectedDay, - selectDate, - validatedRange - } = useCalendar(props, emit); - const { t } = useLocale(); - const i18nDate = vue.computed(() => { - const pickedMonth = `el.datepicker.month${date.value.format("M")}`; - return `${date.value.year()} ${t("el.datepicker.year")} ${t(pickedMonth)}`; - }); - expose({ - selectedDay: realSelectedDay, - pickDay, - selectDate, - calculateValidatedDateRange - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(ns).b()) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("header")) - }, [ - vue.renderSlot(_ctx.$slots, "header", { date: vue.unref(i18nDate) }, () => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("title")) - }, vue.toDisplayString(vue.unref(i18nDate)), 3), - vue.unref(validatedRange).length === 0 ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("button-group")) - }, [ - vue.createVNode(vue.unref(ElButtonGroup$1), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(ElButton), { - size: "small", - onClick: ($event) => vue.unref(selectDate)("prev-month") - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(t)("el.datepicker.prevMonth")), 1) - ]), - _: 1 - }, 8, ["onClick"]), - vue.createVNode(vue.unref(ElButton), { - size: "small", - onClick: ($event) => vue.unref(selectDate)("today") - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(t)("el.datepicker.today")), 1) - ]), - _: 1 - }, 8, ["onClick"]), - vue.createVNode(vue.unref(ElButton), { - size: "small", - onClick: ($event) => vue.unref(selectDate)("next-month") - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(t)("el.datepicker.nextMonth")), 1) - ]), - _: 1 - }, 8, ["onClick"]) - ]), - _: 1 - }) - ], 2)) : vue.createCommentVNode("v-if", true) - ]) - ], 2), - vue.unref(validatedRange).length === 0 ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("body")) - }, [ - vue.createVNode(DateTable$1, { - date: vue.unref(date), - "selected-day": vue.unref(realSelectedDay), - onPick: vue.unref(pickDay) - }, vue.createSlots({ - _: 2 - }, [ - _ctx.$slots["date-cell"] ? { - name: "date-cell", - fn: vue.withCtx((data) => [ - vue.renderSlot(_ctx.$slots, "date-cell", vue.normalizeProps(vue.guardReactiveProps(data))) - ]) - } : void 0 - ]), 1032, ["date", "selected-day", "onPick"]) - ], 2)) : (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("body")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(validatedRange), (range_, index) => { - return vue.openBlock(), vue.createBlock(DateTable$1, { - key: index, - date: range_[0], - "selected-day": vue.unref(realSelectedDay), - range: range_, - "hide-header": index !== 0, - onPick: vue.unref(pickDay) - }, vue.createSlots({ - _: 2 - }, [ - _ctx.$slots["date-cell"] ? { - name: "date-cell", - fn: vue.withCtx((data) => [ - vue.renderSlot(_ctx.$slots, "date-cell", vue.normalizeProps(vue.guardReactiveProps(data))) - ]) - } : void 0 - ]), 1032, ["date", "selected-day", "range", "hide-header", "onPick"]); - }), 128)) - ], 2)) - ], 2); - }; - } - }); - var Calendar = /* @__PURE__ */ _export_sfc(_sfc_main$21, [["__file", "calendar.vue"]]); - - const ElCalendar = withInstall(Calendar); - - const cardProps = buildProps({ - header: { - type: String, - default: "" - }, - footer: { - type: String, - default: "" - }, - bodyStyle: { - type: definePropType([String, Object, Array]), - default: "" - }, - bodyClass: String, - shadow: { - type: String, - values: ["always", "hover", "never"], - default: "always" - } - }); - - const __default__$1r = vue.defineComponent({ - name: "ElCard" - }); - const _sfc_main$20 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1r, - props: cardProps, - setup(__props) { - const ns = useNamespace("card"); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([vue.unref(ns).b(), vue.unref(ns).is(`${_ctx.shadow}-shadow`)]) - }, [ - _ctx.$slots.header || _ctx.header ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("header")) - }, [ - vue.renderSlot(_ctx.$slots, "header", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.header), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass([vue.unref(ns).e("body"), _ctx.bodyClass]), - style: vue.normalizeStyle(_ctx.bodyStyle) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 6), - _ctx.$slots.footer || _ctx.footer ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("footer")) - }, [ - vue.renderSlot(_ctx.$slots, "footer", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.footer), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var Card = /* @__PURE__ */ _export_sfc(_sfc_main$20, [["__file", "card.vue"]]); - - const ElCard = withInstall(Card); - - const carouselProps = buildProps({ - initialIndex: { - type: Number, - default: 0 - }, - height: { - type: String, - default: "" - }, - trigger: { - type: String, - values: ["hover", "click"], - default: "hover" - }, - autoplay: { - type: Boolean, - default: true - }, - interval: { - type: Number, - default: 3e3 - }, - indicatorPosition: { - type: String, - values: ["", "none", "outside"], - default: "" - }, - arrow: { - type: String, - values: ["always", "hover", "never"], - default: "hover" - }, - type: { - type: String, - values: ["", "card"], - default: "" - }, - cardScale: { - type: Number, - default: 0.83 - }, - loop: { - type: Boolean, - default: true - }, - direction: { - type: String, - values: ["horizontal", "vertical"], - default: "horizontal" - }, - pauseOnHover: { - type: Boolean, - default: true - }, - motionBlur: Boolean - }); - const carouselEmits = { - change: (current, prev) => [current, prev].every(isNumber) - }; - - const carouselContextKey = Symbol("carouselContextKey"); - const CAROUSEL_ITEM_NAME = "ElCarouselItem"; - - const THROTTLE_TIME = 300; - const useCarousel = (props, emit, componentName) => { - const { - children: items, - addChild: addItem, - removeChild: removeItem - } = useOrderedChildren(vue.getCurrentInstance(), CAROUSEL_ITEM_NAME); - const slots = vue.useSlots(); - const activeIndex = vue.ref(-1); - const timer = vue.ref(null); - const hover = vue.ref(false); - const root = vue.ref(); - const containerHeight = vue.ref(0); - const isItemsTwoLength = vue.ref(true); - const isFirstCall = vue.ref(true); - const isTransitioning = vue.ref(false); - const arrowDisplay = vue.computed(() => props.arrow !== "never" && !vue.unref(isVertical)); - const hasLabel = vue.computed(() => { - return items.value.some((item) => item.props.label.toString().length > 0); - }); - const isCardType = vue.computed(() => props.type === "card"); - const isVertical = vue.computed(() => props.direction === "vertical"); - const containerStyle = vue.computed(() => { - if (props.height !== "auto") { - return { - height: props.height - }; - } - return { - height: `${containerHeight.value}px`, - overflow: "hidden" - }; - }); - const throttledArrowClick = throttle((index) => { - setActiveItem(index); - }, THROTTLE_TIME, { trailing: true }); - const throttledIndicatorHover = throttle((index) => { - handleIndicatorHover(index); - }, THROTTLE_TIME); - const isTwoLengthShow = (index) => { - if (!isItemsTwoLength.value) - return true; - return activeIndex.value <= 1 ? index <= 1 : index > 1; - }; - function pauseTimer() { - if (timer.value) { - clearInterval(timer.value); - timer.value = null; - } - } - function startTimer() { - if (props.interval <= 0 || !props.autoplay || timer.value) - return; - timer.value = setInterval(() => playSlides(), props.interval); - } - const playSlides = () => { - if (!isFirstCall.value) { - isTransitioning.value = true; - } - isFirstCall.value = false; - if (activeIndex.value < items.value.length - 1) { - activeIndex.value = activeIndex.value + 1; - } else if (props.loop) { - activeIndex.value = 0; - } else { - isTransitioning.value = false; - } - }; - function setActiveItem(index) { - if (!isFirstCall.value) { - isTransitioning.value = true; - } - isFirstCall.value = false; - if (isString$1(index)) { - const filteredItems = items.value.filter((item) => item.props.name === index); - if (filteredItems.length > 0) { - index = items.value.indexOf(filteredItems[0]); - } - } - index = Number(index); - if (Number.isNaN(index) || index !== Math.floor(index)) { - return; - } - const itemCount = items.value.length; - const oldIndex = activeIndex.value; - if (index < 0) { - activeIndex.value = props.loop ? itemCount - 1 : 0; - } else if (index >= itemCount) { - activeIndex.value = props.loop ? 0 : itemCount - 1; - } else { - activeIndex.value = index; - } - if (oldIndex === activeIndex.value) { - resetItemPosition(oldIndex); - } - resetTimer(); - } - function resetItemPosition(oldIndex) { - items.value.forEach((item, index) => { - item.translateItem(index, activeIndex.value, oldIndex); - }); - } - function itemInStage(item, index) { - var _a, _b, _c, _d; - const _items = vue.unref(items); - const itemCount = _items.length; - if (itemCount === 0 || !item.states.inStage) - return false; - const nextItemIndex = index + 1; - const prevItemIndex = index - 1; - const lastItemIndex = itemCount - 1; - const isLastItemActive = _items[lastItemIndex].states.active; - const isFirstItemActive = _items[0].states.active; - const isNextItemActive = (_b = (_a = _items[nextItemIndex]) == null ? void 0 : _a.states) == null ? void 0 : _b.active; - const isPrevItemActive = (_d = (_c = _items[prevItemIndex]) == null ? void 0 : _c.states) == null ? void 0 : _d.active; - if (index === lastItemIndex && isFirstItemActive || isNextItemActive) { - return "left"; - } else if (index === 0 && isLastItemActive || isPrevItemActive) { - return "right"; - } - return false; - } - function handleMouseEnter() { - hover.value = true; - if (props.pauseOnHover) { - pauseTimer(); - } - } - function handleMouseLeave() { - hover.value = false; - startTimer(); - } - function handleTransitionEnd() { - isTransitioning.value = false; - } - function handleButtonEnter(arrow) { - if (vue.unref(isVertical)) - return; - items.value.forEach((item, index) => { - if (arrow === itemInStage(item, index)) { - item.states.hover = true; - } - }); - } - function handleButtonLeave() { - if (vue.unref(isVertical)) - return; - items.value.forEach((item) => { - item.states.hover = false; - }); - } - function handleIndicatorClick(index) { - if (index !== activeIndex.value) { - if (!isFirstCall.value) { - isTransitioning.value = true; - } - } - activeIndex.value = index; - } - function handleIndicatorHover(index) { - if (props.trigger === "hover" && index !== activeIndex.value) { - activeIndex.value = index; - if (!isFirstCall.value) { - isTransitioning.value = true; - } - } - } - function prev() { - setActiveItem(activeIndex.value - 1); - } - function next() { - setActiveItem(activeIndex.value + 1); - } - function resetTimer() { - pauseTimer(); - if (!props.pauseOnHover) - startTimer(); - } - function setContainerHeight(height) { - if (props.height !== "auto") - return; - containerHeight.value = height; - } - function PlaceholderItem() { - var _a; - const defaultSlots = (_a = slots.default) == null ? void 0 : _a.call(slots); - if (!defaultSlots) - return null; - const flatSlots = flattedChildren(defaultSlots); - const normalizeSlots = flatSlots.filter((slot) => { - return vue.isVNode(slot) && slot.type.name === CAROUSEL_ITEM_NAME; - }); - if ((normalizeSlots == null ? void 0 : normalizeSlots.length) === 2 && props.loop && !isCardType.value) { - isItemsTwoLength.value = true; - return normalizeSlots; - } - isItemsTwoLength.value = false; - return null; - } - vue.watch(() => activeIndex.value, (current, prev2) => { - resetItemPosition(prev2); - if (isItemsTwoLength.value) { - current = current % 2; - prev2 = prev2 % 2; - } - if (prev2 > -1) { - emit("change", current, prev2); - } - }); - vue.watch(() => props.autoplay, (autoplay) => { - autoplay ? startTimer() : pauseTimer(); - }); - vue.watch(() => props.loop, () => { - setActiveItem(activeIndex.value); - }); - vue.watch(() => props.interval, () => { - resetTimer(); - }); - const resizeObserver = vue.shallowRef(); - vue.onMounted(() => { - vue.watch(() => items.value, () => { - if (items.value.length > 0) - setActiveItem(props.initialIndex); - }, { - immediate: true - }); - resizeObserver.value = useResizeObserver(root.value, () => { - resetItemPosition(); - }); - startTimer(); - }); - vue.onBeforeUnmount(() => { - pauseTimer(); - if (root.value && resizeObserver.value) - resizeObserver.value.stop(); - }); - vue.provide(carouselContextKey, { - root, - isCardType, - isVertical, - items, - loop: props.loop, - cardScale: props.cardScale, - addItem, - removeItem, - setActiveItem, - setContainerHeight - }); - return { - root, - activeIndex, - arrowDisplay, - hasLabel, - hover, - isCardType, - isTransitioning, - items, - isVertical, - containerStyle, - isItemsTwoLength, - handleButtonEnter, - handleTransitionEnd, - handleButtonLeave, - handleIndicatorClick, - handleMouseEnter, - handleMouseLeave, - setActiveItem, - prev, - next, - PlaceholderItem, - isTwoLengthShow, - throttledArrowClick, - throttledIndicatorHover - }; - }; - - const COMPONENT_NAME$f = "ElCarousel"; - const __default__$1q = vue.defineComponent({ - name: COMPONENT_NAME$f - }); - const _sfc_main$1$ = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1q, - props: carouselProps, - emits: carouselEmits, - setup(__props, { expose, emit }) { - const props = __props; - const { - root, - activeIndex, - arrowDisplay, - hasLabel, - hover, - isCardType, - items, - isVertical, - containerStyle, - handleButtonEnter, - handleButtonLeave, - isTransitioning, - handleIndicatorClick, - handleMouseEnter, - handleMouseLeave, - handleTransitionEnd, - setActiveItem, - prev, - next, - PlaceholderItem, - isTwoLengthShow, - throttledArrowClick, - throttledIndicatorHover - } = useCarousel(props, emit); - const ns = useNamespace("carousel"); - const { t } = useLocale(); - const carouselClasses = vue.computed(() => { - const classes = [ns.b(), ns.m(props.direction)]; - if (vue.unref(isCardType)) { - classes.push(ns.m("card")); - } - return classes; - }); - const carouselContainer = vue.computed(() => { - const classes = [ns.e("container")]; - if (props.motionBlur && vue.unref(isTransitioning) && items.value.length > 1) { - classes.push(vue.unref(isVertical) ? `${ns.namespace.value}-transitioning-vertical` : `${ns.namespace.value}-transitioning`); - } - return classes; - }); - const indicatorsClasses = vue.computed(() => { - const classes = [ns.e("indicators"), ns.em("indicators", props.direction)]; - if (vue.unref(hasLabel)) { - classes.push(ns.em("indicators", "labels")); - } - if (props.indicatorPosition === "outside") { - classes.push(ns.em("indicators", "outside")); - } - if (vue.unref(isVertical)) { - classes.push(ns.em("indicators", "right")); - } - return classes; - }); - expose({ - activeIndex, - setActiveItem, - prev, - next - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "root", - ref: root, - class: vue.normalizeClass(vue.unref(carouselClasses)), - onMouseenter: vue.withModifiers(vue.unref(handleMouseEnter), ["stop"]), - onMouseleave: vue.withModifiers(vue.unref(handleMouseLeave), ["stop"]) - }, [ - vue.unref(arrowDisplay) ? (vue.openBlock(), vue.createBlock(vue.Transition, { - key: 0, - name: "carousel-arrow-left", - persisted: "" - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(ns).e("arrow"), vue.unref(ns).em("arrow", "left")]), - "aria-label": vue.unref(t)("el.carousel.leftArrow"), - onMouseenter: ($event) => vue.unref(handleButtonEnter)("left"), - onMouseleave: vue.unref(handleButtonLeave), - onClick: vue.withModifiers(($event) => vue.unref(throttledArrowClick)(vue.unref(activeIndex) - 1), ["stop"]) - }, [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_left_default)) - ]), - _: 1 - }) - ], 42, ["aria-label", "onMouseenter", "onMouseleave", "onClick"]), [ - [ - vue.vShow, - (_ctx.arrow === "always" || vue.unref(hover)) && (props.loop || vue.unref(activeIndex) > 0) - ] - ]) - ]), - _: 1 - })) : vue.createCommentVNode("v-if", true), - vue.unref(arrowDisplay) ? (vue.openBlock(), vue.createBlock(vue.Transition, { - key: 1, - name: "carousel-arrow-right", - persisted: "" - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(ns).e("arrow"), vue.unref(ns).em("arrow", "right")]), - "aria-label": vue.unref(t)("el.carousel.rightArrow"), - onMouseenter: ($event) => vue.unref(handleButtonEnter)("right"), - onMouseleave: vue.unref(handleButtonLeave), - onClick: vue.withModifiers(($event) => vue.unref(throttledArrowClick)(vue.unref(activeIndex) + 1), ["stop"]) - }, [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_right_default)) - ]), - _: 1 - }) - ], 42, ["aria-label", "onMouseenter", "onMouseleave", "onClick"]), [ - [ - vue.vShow, - (_ctx.arrow === "always" || vue.unref(hover)) && (props.loop || vue.unref(activeIndex) < vue.unref(items).length - 1) - ] - ]) - ]), - _: 1 - })) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(carouselContainer)), - style: vue.normalizeStyle(vue.unref(containerStyle)), - onTransitionend: vue.unref(handleTransitionEnd) - }, [ - vue.createVNode(vue.unref(PlaceholderItem)), - vue.renderSlot(_ctx.$slots, "default") - ], 46, ["onTransitionend"]), - _ctx.indicatorPosition !== "none" ? (vue.openBlock(), vue.createElementBlock("ul", { - key: 2, - class: vue.normalizeClass(vue.unref(indicatorsClasses)) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(items), (item, index) => { - return vue.withDirectives((vue.openBlock(), vue.createElementBlock("li", { - key: index, - class: vue.normalizeClass([ - vue.unref(ns).e("indicator"), - vue.unref(ns).em("indicator", _ctx.direction), - vue.unref(ns).is("active", index === vue.unref(activeIndex)) - ]), - onMouseenter: ($event) => vue.unref(throttledIndicatorHover)(index), - onClick: vue.withModifiers(($event) => vue.unref(handleIndicatorClick)(index), ["stop"]) - }, [ - vue.createElementVNode("button", { - class: vue.normalizeClass(vue.unref(ns).e("button")), - "aria-label": vue.unref(t)("el.carousel.indicator", { index: index + 1 }) - }, [ - vue.unref(hasLabel) ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, vue.toDisplayString(item.props.label), 1)) : vue.createCommentVNode("v-if", true) - ], 10, ["aria-label"]) - ], 42, ["onMouseenter", "onClick"])), [ - [vue.vShow, vue.unref(isTwoLengthShow)(index)] - ]); - }), 128)) - ], 2)) : vue.createCommentVNode("v-if", true), - props.motionBlur ? (vue.openBlock(), vue.createElementBlock("svg", { - key: 3, - xmlns: "http://www.w3.org/2000/svg", - version: "1.1", - style: { "display": "none" } - }, [ - vue.createElementVNode("defs", null, [ - vue.createElementVNode("filter", { id: "elCarouselHorizontal" }, [ - vue.createElementVNode("feGaussianBlur", { - in: "SourceGraphic", - stdDeviation: "12,0" - }) - ]), - vue.createElementVNode("filter", { id: "elCarouselVertical" }, [ - vue.createElementVNode("feGaussianBlur", { - in: "SourceGraphic", - stdDeviation: "0,10" - }) - ]) - ]) - ])) : vue.createCommentVNode("v-if", true) - ], 42, ["onMouseenter", "onMouseleave"]); - }; - } - }); - var Carousel = /* @__PURE__ */ _export_sfc(_sfc_main$1$, [["__file", "carousel.vue"]]); - - const carouselItemProps = buildProps({ - name: { type: String, default: "" }, - label: { - type: [String, Number], - default: "" - } - }); - - const useCarouselItem = (props) => { - const carouselContext = vue.inject(carouselContextKey); - const instance = vue.getCurrentInstance(); - const carouselItemRef = vue.ref(); - const hover = vue.ref(false); - const translate = vue.ref(0); - const scale = vue.ref(1); - const active = vue.ref(false); - const ready = vue.ref(false); - const inStage = vue.ref(false); - const animating = vue.ref(false); - const { isCardType, isVertical, cardScale } = carouselContext; - function processIndex(index, activeIndex, length) { - const lastItemIndex = length - 1; - const prevItemIndex = activeIndex - 1; - const nextItemIndex = activeIndex + 1; - const halfItemIndex = length / 2; - if (activeIndex === 0 && index === lastItemIndex) { - return -1; - } else if (activeIndex === lastItemIndex && index === 0) { - return length; - } else if (index < prevItemIndex && activeIndex - index >= halfItemIndex) { - return length + 1; - } else if (index > nextItemIndex && index - activeIndex >= halfItemIndex) { - return -2; - } - return index; - } - function calcCardTranslate(index, activeIndex) { - var _a, _b; - const parentWidth = vue.unref(isVertical) ? ((_a = carouselContext.root.value) == null ? void 0 : _a.offsetHeight) || 0 : ((_b = carouselContext.root.value) == null ? void 0 : _b.offsetWidth) || 0; - if (inStage.value) { - return parentWidth * ((2 - cardScale) * (index - activeIndex) + 1) / 4; - } else if (index < activeIndex) { - return -(1 + cardScale) * parentWidth / 4; - } else { - return (3 + cardScale) * parentWidth / 4; - } - } - function calcTranslate(index, activeIndex, isVertical2) { - const rootEl = carouselContext.root.value; - if (!rootEl) - return 0; - const distance = (isVertical2 ? rootEl.offsetHeight : rootEl.offsetWidth) || 0; - return distance * (index - activeIndex); - } - const translateItem = (index, activeIndex, oldIndex) => { - var _a; - const _isCardType = vue.unref(isCardType); - const carouselItemLength = (_a = carouselContext.items.value.length) != null ? _a : Number.NaN; - const isActive = index === activeIndex; - if (!_isCardType && !isUndefined(oldIndex)) { - animating.value = isActive || index === oldIndex; - } - if (!isActive && carouselItemLength > 2 && carouselContext.loop) { - index = processIndex(index, activeIndex, carouselItemLength); - } - const _isVertical = vue.unref(isVertical); - active.value = isActive; - if (_isCardType) { - inStage.value = Math.round(Math.abs(index - activeIndex)) <= 1; - translate.value = calcCardTranslate(index, activeIndex); - scale.value = vue.unref(active) ? 1 : cardScale; - } else { - translate.value = calcTranslate(index, activeIndex, _isVertical); - } - ready.value = true; - if (isActive && carouselItemRef.value) { - carouselContext.setContainerHeight(carouselItemRef.value.offsetHeight); - } - }; - function handleItemClick() { - if (carouselContext && vue.unref(isCardType)) { - const index = carouselContext.items.value.findIndex(({ uid }) => uid === instance.uid); - carouselContext.setActiveItem(index); - } - } - vue.onMounted(() => { - carouselContext.addItem({ - props, - states: vue.reactive({ - hover, - translate, - scale, - active, - ready, - inStage, - animating - }), - uid: instance.uid, - translateItem - }); - }); - vue.onUnmounted(() => { - carouselContext.removeItem(instance.uid); - }); - return { - carouselItemRef, - active, - animating, - hover, - inStage, - isVertical, - translate, - isCardType, - scale, - ready, - handleItemClick - }; - }; - - const __default__$1p = vue.defineComponent({ - name: CAROUSEL_ITEM_NAME - }); - const _sfc_main$1_ = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1p, - props: carouselItemProps, - setup(__props) { - const props = __props; - const ns = useNamespace("carousel"); - const { - carouselItemRef, - active, - animating, - hover, - inStage, - isVertical, - translate, - isCardType, - scale, - ready, - handleItemClick - } = useCarouselItem(props); - const itemKls = vue.computed(() => [ - ns.e("item"), - ns.is("active", active.value), - ns.is("in-stage", inStage.value), - ns.is("hover", hover.value), - ns.is("animating", animating.value), - { - [ns.em("item", "card")]: isCardType.value, - [ns.em("item", "card-vertical")]: isCardType.value && isVertical.value - } - ]); - const itemStyle = vue.computed(() => { - const translateType = `translate${vue.unref(isVertical) ? "Y" : "X"}`; - const _translate = `${translateType}(${vue.unref(translate)}px)`; - const _scale = `scale(${vue.unref(scale)})`; - const transform = [_translate, _scale].join(" "); - return { - transform - }; - }); - return (_ctx, _cache) => { - return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - ref_key: "carouselItemRef", - ref: carouselItemRef, - class: vue.normalizeClass(vue.unref(itemKls)), - style: vue.normalizeStyle(vue.unref(itemStyle)), - onClick: vue.unref(handleItemClick) - }, [ - vue.unref(isCardType) ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("mask")) - }, null, 2)), [ - [vue.vShow, !vue.unref(active)] - ]) : vue.createCommentVNode("v-if", true), - vue.renderSlot(_ctx.$slots, "default") - ], 14, ["onClick"])), [ - [vue.vShow, vue.unref(ready)] - ]); - }; - } - }); - var CarouselItem = /* @__PURE__ */ _export_sfc(_sfc_main$1_, [["__file", "carousel-item.vue"]]); - - const ElCarousel = withInstall(Carousel, { - CarouselItem - }); - const ElCarouselItem = withNoopInstall(CarouselItem); - - const checkboxProps = { - modelValue: { - type: [Number, String, Boolean], - default: void 0 - }, - label: { - type: [String, Boolean, Number, Object], - default: void 0 - }, - value: { - type: [String, Boolean, Number, Object], - default: void 0 - }, - indeterminate: Boolean, - disabled: Boolean, - checked: Boolean, - name: { - type: String, - default: void 0 - }, - trueValue: { - type: [String, Number], - default: void 0 - }, - falseValue: { - type: [String, Number], - default: void 0 - }, - trueLabel: { - type: [String, Number], - default: void 0 - }, - falseLabel: { - type: [String, Number], - default: void 0 - }, - id: { - type: String, - default: void 0 - }, - border: Boolean, - size: useSizeProp, - tabindex: [String, Number], - validateEvent: { - type: Boolean, - default: true - }, - ...useAriaProps(["ariaControls"]) - }; - const checkboxEmits = { - [UPDATE_MODEL_EVENT]: (val) => isString$1(val) || isNumber(val) || isBoolean(val), - change: (val) => isString$1(val) || isNumber(val) || isBoolean(val) - }; - - const checkboxGroupContextKey = Symbol("checkboxGroupContextKey"); - - const useCheckboxDisabled = ({ - model, - isChecked - }) => { - const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); - const isLimitDisabled = vue.computed(() => { - var _a, _b; - const max = (_a = checkboxGroup == null ? void 0 : checkboxGroup.max) == null ? void 0 : _a.value; - const min = (_b = checkboxGroup == null ? void 0 : checkboxGroup.min) == null ? void 0 : _b.value; - return !isUndefined(max) && model.value.length >= max && !isChecked.value || !isUndefined(min) && model.value.length <= min && isChecked.value; - }); - const isDisabled = useFormDisabled(vue.computed(() => (checkboxGroup == null ? void 0 : checkboxGroup.disabled.value) || isLimitDisabled.value)); - return { - isDisabled, - isLimitDisabled - }; - }; - - const useCheckboxEvent = (props, { - model, - isLimitExceeded, - hasOwnLabel, - isDisabled, - isLabeledByFormItem - }) => { - const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); - const { formItem } = useFormItem(); - const { emit } = vue.getCurrentInstance(); - function getLabeledValue(value) { - var _a, _b, _c, _d; - return [true, props.trueValue, props.trueLabel].includes(value) ? (_b = (_a = props.trueValue) != null ? _a : props.trueLabel) != null ? _b : true : (_d = (_c = props.falseValue) != null ? _c : props.falseLabel) != null ? _d : false; - } - function emitChangeEvent(checked, e) { - emit("change", getLabeledValue(checked), e); - } - function handleChange(e) { - if (isLimitExceeded.value) - return; - const target = e.target; - emit("change", getLabeledValue(target.checked), e); - } - async function onClickRoot(e) { - if (isLimitExceeded.value) - return; - if (!hasOwnLabel.value && !isDisabled.value && isLabeledByFormItem.value) { - const eventTargets = e.composedPath(); - const hasLabel = eventTargets.some((item) => item.tagName === "LABEL"); - if (!hasLabel) { - model.value = getLabeledValue([false, props.falseValue, props.falseLabel].includes(model.value)); - await vue.nextTick(); - emitChangeEvent(model.value, e); - } - } - } - const validateEvent = vue.computed(() => (checkboxGroup == null ? void 0 : checkboxGroup.validateEvent) || props.validateEvent); - vue.watch(() => props.modelValue, () => { - if (validateEvent.value) { - formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); - } - }); - return { - handleChange, - onClickRoot - }; - }; - - const useCheckboxModel = (props) => { - const selfModel = vue.ref(false); - const { emit } = vue.getCurrentInstance(); - const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); - const isGroup = vue.computed(() => isUndefined(checkboxGroup) === false); - const isLimitExceeded = vue.ref(false); - const model = vue.computed({ - get() { - var _a, _b; - return isGroup.value ? (_a = checkboxGroup == null ? void 0 : checkboxGroup.modelValue) == null ? void 0 : _a.value : (_b = props.modelValue) != null ? _b : selfModel.value; - }, - set(val) { - var _a, _b; - if (isGroup.value && isArray$1(val)) { - isLimitExceeded.value = ((_a = checkboxGroup == null ? void 0 : checkboxGroup.max) == null ? void 0 : _a.value) !== void 0 && val.length > (checkboxGroup == null ? void 0 : checkboxGroup.max.value) && val.length > model.value.length; - isLimitExceeded.value === false && ((_b = checkboxGroup == null ? void 0 : checkboxGroup.changeEvent) == null ? void 0 : _b.call(checkboxGroup, val)); - } else { - emit(UPDATE_MODEL_EVENT, val); - selfModel.value = val; - } - } - }); - return { - model, - isGroup, - isLimitExceeded - }; - }; - - const useCheckboxStatus = (props, slots, { model }) => { - const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); - const isFocused = vue.ref(false); - const actualValue = vue.computed(() => { - if (!isPropAbsent(props.value)) { - return props.value; - } - return props.label; - }); - const isChecked = vue.computed(() => { - const value = model.value; - if (isBoolean(value)) { - return value; - } else if (isArray$1(value)) { - if (isObject$1(actualValue.value)) { - return value.map(vue.toRaw).some((o) => isEqual$1(o, actualValue.value)); - } else { - return value.map(vue.toRaw).includes(actualValue.value); - } - } else if (value !== null && value !== void 0) { - return value === props.trueValue || value === props.trueLabel; - } else { - return !!value; - } - }); - const checkboxButtonSize = useFormSize(vue.computed(() => { - var _a; - return (_a = checkboxGroup == null ? void 0 : checkboxGroup.size) == null ? void 0 : _a.value; - }), { - prop: true - }); - const checkboxSize = useFormSize(vue.computed(() => { - var _a; - return (_a = checkboxGroup == null ? void 0 : checkboxGroup.size) == null ? void 0 : _a.value; - })); - const hasOwnLabel = vue.computed(() => { - return !!slots.default || !isPropAbsent(actualValue.value); - }); - return { - checkboxButtonSize, - isChecked, - isFocused, - checkboxSize, - hasOwnLabel, - actualValue - }; - }; - - const useCheckbox = (props, slots) => { - const { formItem: elFormItem } = useFormItem(); - const { model, isGroup, isLimitExceeded } = useCheckboxModel(props); - const { - isFocused, - isChecked, - checkboxButtonSize, - checkboxSize, - hasOwnLabel, - actualValue - } = useCheckboxStatus(props, slots, { model }); - const { isDisabled } = useCheckboxDisabled({ model, isChecked }); - const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { - formItemContext: elFormItem, - disableIdGeneration: hasOwnLabel, - disableIdManagement: isGroup - }); - const { handleChange, onClickRoot } = useCheckboxEvent(props, { - model, - isLimitExceeded, - hasOwnLabel, - isDisabled, - isLabeledByFormItem - }); - const setStoreValue = () => { - function addToStore() { - var _a, _b; - if (isArray$1(model.value) && !model.value.includes(actualValue.value)) { - model.value.push(actualValue.value); - } else { - model.value = (_b = (_a = props.trueValue) != null ? _a : props.trueLabel) != null ? _b : true; - } - } - props.checked && addToStore(); - }; - setStoreValue(); - useDeprecated({ - from: "label act as value", - replacement: "value", - version: "3.0.0", - scope: "el-checkbox", - ref: "https://element-plus.org/en-US/component/checkbox.html" - }, vue.computed(() => isGroup.value && isPropAbsent(props.value))); - useDeprecated({ - from: "true-label", - replacement: "true-value", - version: "3.0.0", - scope: "el-checkbox", - ref: "https://element-plus.org/en-US/component/checkbox.html" - }, vue.computed(() => !!props.trueLabel)); - useDeprecated({ - from: "false-label", - replacement: "false-value", - version: "3.0.0", - scope: "el-checkbox", - ref: "https://element-plus.org/en-US/component/checkbox.html" - }, vue.computed(() => !!props.falseLabel)); - return { - inputId, - isLabeledByFormItem, - isChecked, - isDisabled, - isFocused, - checkboxButtonSize, - checkboxSize, - hasOwnLabel, - model, - actualValue, - handleChange, - onClickRoot - }; - }; - - const __default__$1o = vue.defineComponent({ - name: "ElCheckbox" - }); - const _sfc_main$1Z = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1o, - props: checkboxProps, - emits: checkboxEmits, - setup(__props) { - const props = __props; - const slots = vue.useSlots(); - const { - inputId, - isLabeledByFormItem, - isChecked, - isDisabled, - isFocused, - checkboxSize, - hasOwnLabel, - model, - actualValue, - handleChange, - onClickRoot - } = useCheckbox(props, slots); - const ns = useNamespace("checkbox"); - const compKls = vue.computed(() => { - return [ - ns.b(), - ns.m(checkboxSize.value), - ns.is("disabled", isDisabled.value), - ns.is("bordered", props.border), - ns.is("checked", isChecked.value) - ]; - }); - const spanKls = vue.computed(() => { - return [ - ns.e("input"), - ns.is("disabled", isDisabled.value), - ns.is("checked", isChecked.value), - ns.is("indeterminate", props.indeterminate), - ns.is("focus", isFocused.value) - ]; - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(!vue.unref(hasOwnLabel) && vue.unref(isLabeledByFormItem) ? "span" : "label"), { - class: vue.normalizeClass(vue.unref(compKls)), - "aria-controls": _ctx.indeterminate ? _ctx.ariaControls : null, - onClick: vue.unref(onClickRoot) - }, { - default: vue.withCtx(() => { - var _a, _b, _c, _d; - return [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(spanKls)) - }, [ - _ctx.trueValue || _ctx.falseValue || _ctx.trueLabel || _ctx.falseLabel ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { - key: 0, - id: vue.unref(inputId), - "onUpdate:modelValue": ($event) => vue.isRef(model) ? model.value = $event : null, - class: vue.normalizeClass(vue.unref(ns).e("original")), - type: "checkbox", - indeterminate: _ctx.indeterminate, - name: _ctx.name, - tabindex: _ctx.tabindex, - disabled: vue.unref(isDisabled), - "true-value": (_b = (_a = _ctx.trueValue) != null ? _a : _ctx.trueLabel) != null ? _b : true, - "false-value": (_d = (_c = _ctx.falseValue) != null ? _c : _ctx.falseLabel) != null ? _d : false, - onChange: vue.unref(handleChange), - onFocus: ($event) => isFocused.value = true, - onBlur: ($event) => isFocused.value = false, - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, null, 42, ["id", "onUpdate:modelValue", "indeterminate", "name", "tabindex", "disabled", "true-value", "false-value", "onChange", "onFocus", "onBlur", "onClick"])), [ - [vue.vModelCheckbox, vue.unref(model)] - ]) : vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { - key: 1, - id: vue.unref(inputId), - "onUpdate:modelValue": ($event) => vue.isRef(model) ? model.value = $event : null, - class: vue.normalizeClass(vue.unref(ns).e("original")), - type: "checkbox", - indeterminate: _ctx.indeterminate, - disabled: vue.unref(isDisabled), - value: vue.unref(actualValue), - name: _ctx.name, - tabindex: _ctx.tabindex, - onChange: vue.unref(handleChange), - onFocus: ($event) => isFocused.value = true, - onBlur: ($event) => isFocused.value = false, - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, null, 42, ["id", "onUpdate:modelValue", "indeterminate", "disabled", "value", "name", "tabindex", "onChange", "onFocus", "onBlur", "onClick"])), [ - [vue.vModelCheckbox, vue.unref(model)] - ]), - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(ns).e("inner")) - }, null, 2) - ], 2), - vue.unref(hasOwnLabel) ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("label")) - }, [ - vue.renderSlot(_ctx.$slots, "default"), - !_ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.createTextVNode(vue.toDisplayString(_ctx.label), 1) - ], 64)) : vue.createCommentVNode("v-if", true) - ], 2)) : vue.createCommentVNode("v-if", true) - ]; - }), - _: 3 - }, 8, ["class", "aria-controls", "onClick"]); - }; - } - }); - var Checkbox = /* @__PURE__ */ _export_sfc(_sfc_main$1Z, [["__file", "checkbox.vue"]]); - - const __default__$1n = vue.defineComponent({ - name: "ElCheckboxButton" - }); - const _sfc_main$1Y = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1n, - props: checkboxProps, - emits: checkboxEmits, - setup(__props) { - const props = __props; - const slots = vue.useSlots(); - const { - isFocused, - isChecked, - isDisabled, - checkboxButtonSize, - model, - actualValue, - handleChange - } = useCheckbox(props, slots); - const checkboxGroup = vue.inject(checkboxGroupContextKey, void 0); - const ns = useNamespace("checkbox"); - const activeStyle = vue.computed(() => { - var _a, _b, _c, _d; - const fillValue = (_b = (_a = checkboxGroup == null ? void 0 : checkboxGroup.fill) == null ? void 0 : _a.value) != null ? _b : ""; - return { - backgroundColor: fillValue, - borderColor: fillValue, - color: (_d = (_c = checkboxGroup == null ? void 0 : checkboxGroup.textColor) == null ? void 0 : _c.value) != null ? _d : "", - boxShadow: fillValue ? `-1px 0 0 0 ${fillValue}` : void 0 - }; - }); - const labelKls = vue.computed(() => { - return [ - ns.b("button"), - ns.bm("button", checkboxButtonSize.value), - ns.is("disabled", isDisabled.value), - ns.is("checked", isChecked.value), - ns.is("focus", isFocused.value) - ]; - }); - return (_ctx, _cache) => { - var _a, _b, _c, _d; - return vue.openBlock(), vue.createElementBlock("label", { - class: vue.normalizeClass(vue.unref(labelKls)) - }, [ - _ctx.trueValue || _ctx.falseValue || _ctx.trueLabel || _ctx.falseLabel ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { - key: 0, - "onUpdate:modelValue": ($event) => vue.isRef(model) ? model.value = $event : null, - class: vue.normalizeClass(vue.unref(ns).be("button", "original")), - type: "checkbox", - name: _ctx.name, - tabindex: _ctx.tabindex, - disabled: vue.unref(isDisabled), - "true-value": (_b = (_a = _ctx.trueValue) != null ? _a : _ctx.trueLabel) != null ? _b : true, - "false-value": (_d = (_c = _ctx.falseValue) != null ? _c : _ctx.falseLabel) != null ? _d : false, - onChange: vue.unref(handleChange), - onFocus: ($event) => isFocused.value = true, - onBlur: ($event) => isFocused.value = false, - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, null, 42, ["onUpdate:modelValue", "name", "tabindex", "disabled", "true-value", "false-value", "onChange", "onFocus", "onBlur", "onClick"])), [ - [vue.vModelCheckbox, vue.unref(model)] - ]) : vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { - key: 1, - "onUpdate:modelValue": ($event) => vue.isRef(model) ? model.value = $event : null, - class: vue.normalizeClass(vue.unref(ns).be("button", "original")), - type: "checkbox", - name: _ctx.name, - tabindex: _ctx.tabindex, - disabled: vue.unref(isDisabled), - value: vue.unref(actualValue), - onChange: vue.unref(handleChange), - onFocus: ($event) => isFocused.value = true, - onBlur: ($event) => isFocused.value = false, - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, null, 42, ["onUpdate:modelValue", "name", "tabindex", "disabled", "value", "onChange", "onFocus", "onBlur", "onClick"])), [ - [vue.vModelCheckbox, vue.unref(model)] - ]), - _ctx.$slots.default || _ctx.label ? (vue.openBlock(), vue.createElementBlock("span", { - key: 2, - class: vue.normalizeClass(vue.unref(ns).be("button", "inner")), - style: vue.normalizeStyle(vue.unref(isChecked) ? vue.unref(activeStyle) : void 0) - }, [ - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.label), 1) - ]) - ], 6)) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var CheckboxButton = /* @__PURE__ */ _export_sfc(_sfc_main$1Y, [["__file", "checkbox-button.vue"]]); - - const checkboxGroupProps = buildProps({ - modelValue: { - type: definePropType(Array), - default: () => [] - }, - disabled: Boolean, - min: Number, - max: Number, - size: useSizeProp, - fill: String, - textColor: String, - tag: { - type: String, - default: "div" - }, - validateEvent: { - type: Boolean, - default: true - }, - ...useAriaProps(["ariaLabel"]) - }); - const checkboxGroupEmits = { - [UPDATE_MODEL_EVENT]: (val) => isArray$1(val), - change: (val) => isArray$1(val) - }; - - const __default__$1m = vue.defineComponent({ - name: "ElCheckboxGroup" - }); - const _sfc_main$1X = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1m, - props: checkboxGroupProps, - emits: checkboxGroupEmits, - setup(__props, { emit }) { - const props = __props; - const ns = useNamespace("checkbox"); - const { formItem } = useFormItem(); - const { inputId: groupId, isLabeledByFormItem } = useFormItemInputId(props, { - formItemContext: formItem - }); - const changeEvent = async (value) => { - emit(UPDATE_MODEL_EVENT, value); - await vue.nextTick(); - emit("change", value); - }; - const modelValue = vue.computed({ - get() { - return props.modelValue; - }, - set(val) { - changeEvent(val); - } - }); - vue.provide(checkboxGroupContextKey, { - ...pick(vue.toRefs(props), [ - "size", - "min", - "max", - "disabled", - "validateEvent", - "fill", - "textColor" - ]), - modelValue, - changeEvent - }); - vue.watch(() => props.modelValue, () => { - if (props.validateEvent) { - formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); - } - }); - return (_ctx, _cache) => { - var _a; - return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { - id: vue.unref(groupId), - class: vue.normalizeClass(vue.unref(ns).b("group")), - role: "group", - "aria-label": !vue.unref(isLabeledByFormItem) ? _ctx.ariaLabel || "checkbox-group" : void 0, - "aria-labelledby": vue.unref(isLabeledByFormItem) ? (_a = vue.unref(formItem)) == null ? void 0 : _a.labelId : void 0 - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["id", "class", "aria-label", "aria-labelledby"]); - }; - } - }); - var CheckboxGroup = /* @__PURE__ */ _export_sfc(_sfc_main$1X, [["__file", "checkbox-group.vue"]]); - - const ElCheckbox = withInstall(Checkbox, { - CheckboxButton, - CheckboxGroup - }); - const ElCheckboxButton = withNoopInstall(CheckboxButton); - const ElCheckboxGroup$1 = withNoopInstall(CheckboxGroup); - - const radioPropsBase = buildProps({ - modelValue: { - type: [String, Number, Boolean], - default: void 0 - }, - size: useSizeProp, - disabled: Boolean, - label: { - type: [String, Number, Boolean], - default: void 0 - }, - value: { - type: [String, Number, Boolean], - default: void 0 - }, - name: { - type: String, - default: void 0 - } - }); - const radioProps = buildProps({ - ...radioPropsBase, - border: Boolean - }); - const radioEmits = { - [UPDATE_MODEL_EVENT]: (val) => isString$1(val) || isNumber(val) || isBoolean(val), - [CHANGE_EVENT]: (val) => isString$1(val) || isNumber(val) || isBoolean(val) - }; - - const radioGroupKey = Symbol("radioGroupKey"); - - const useRadio = (props, emit) => { - const radioRef = vue.ref(); - const radioGroup = vue.inject(radioGroupKey, void 0); - const isGroup = vue.computed(() => !!radioGroup); - const actualValue = vue.computed(() => { - if (!isPropAbsent(props.value)) { - return props.value; - } - return props.label; - }); - const modelValue = vue.computed({ - get() { - return isGroup.value ? radioGroup.modelValue : props.modelValue; - }, - set(val) { - if (isGroup.value) { - radioGroup.changeEvent(val); - } else { - emit && emit(UPDATE_MODEL_EVENT, val); - } - radioRef.value.checked = props.modelValue === actualValue.value; - } - }); - const size = useFormSize(vue.computed(() => radioGroup == null ? void 0 : radioGroup.size)); - const disabled = useFormDisabled(vue.computed(() => radioGroup == null ? void 0 : radioGroup.disabled)); - const focus = vue.ref(false); - const tabIndex = vue.computed(() => { - return disabled.value || isGroup.value && modelValue.value !== actualValue.value ? -1 : 0; - }); - useDeprecated({ - from: "label act as value", - replacement: "value", - version: "3.0.0", - scope: "el-radio", - ref: "https://element-plus.org/en-US/component/radio.html" - }, vue.computed(() => isGroup.value && isPropAbsent(props.value))); - return { - radioRef, - isGroup, - radioGroup, - focus, - size, - disabled, - tabIndex, - modelValue, - actualValue - }; - }; - - const __default__$1l = vue.defineComponent({ - name: "ElRadio" - }); - const _sfc_main$1W = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1l, - props: radioProps, - emits: radioEmits, - setup(__props, { emit }) { - const props = __props; - const ns = useNamespace("radio"); - const { radioRef, radioGroup, focus, size, disabled, modelValue, actualValue } = useRadio(props, emit); - function handleChange() { - vue.nextTick(() => emit("change", modelValue.value)); - } - return (_ctx, _cache) => { - var _a; - return vue.openBlock(), vue.createElementBlock("label", { - class: vue.normalizeClass([ - vue.unref(ns).b(), - vue.unref(ns).is("disabled", vue.unref(disabled)), - vue.unref(ns).is("focus", vue.unref(focus)), - vue.unref(ns).is("bordered", _ctx.border), - vue.unref(ns).is("checked", vue.unref(modelValue) === vue.unref(actualValue)), - vue.unref(ns).m(vue.unref(size)) - ]) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass([ - vue.unref(ns).e("input"), - vue.unref(ns).is("disabled", vue.unref(disabled)), - vue.unref(ns).is("checked", vue.unref(modelValue) === vue.unref(actualValue)) - ]) - }, [ - vue.withDirectives(vue.createElementVNode("input", { - ref_key: "radioRef", - ref: radioRef, - "onUpdate:modelValue": ($event) => vue.isRef(modelValue) ? modelValue.value = $event : null, - class: vue.normalizeClass(vue.unref(ns).e("original")), - value: vue.unref(actualValue), - name: _ctx.name || ((_a = vue.unref(radioGroup)) == null ? void 0 : _a.name), - disabled: vue.unref(disabled), - checked: vue.unref(modelValue) === vue.unref(actualValue), - type: "radio", - onFocus: ($event) => focus.value = true, - onBlur: ($event) => focus.value = false, - onChange: handleChange, - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, null, 42, ["onUpdate:modelValue", "value", "name", "disabled", "checked", "onFocus", "onBlur", "onClick"]), [ - [vue.vModelRadio, vue.unref(modelValue)] - ]), - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(ns).e("inner")) - }, null, 2) - ], 2), - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(ns).e("label")), - onKeydown: vue.withModifiers(() => { - }, ["stop"]) - }, [ - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.label), 1) - ]) - ], 42, ["onKeydown"]) - ], 2); - }; - } - }); - var Radio = /* @__PURE__ */ _export_sfc(_sfc_main$1W, [["__file", "radio.vue"]]); - - const radioButtonProps = buildProps({ - ...radioPropsBase - }); - - const __default__$1k = vue.defineComponent({ - name: "ElRadioButton" - }); - const _sfc_main$1V = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1k, - props: radioButtonProps, - setup(__props) { - const props = __props; - const ns = useNamespace("radio"); - const { radioRef, focus, size, disabled, modelValue, radioGroup, actualValue } = useRadio(props); - const activeStyle = vue.computed(() => { - return { - backgroundColor: (radioGroup == null ? void 0 : radioGroup.fill) || "", - borderColor: (radioGroup == null ? void 0 : radioGroup.fill) || "", - boxShadow: (radioGroup == null ? void 0 : radioGroup.fill) ? `-1px 0 0 0 ${radioGroup.fill}` : "", - color: (radioGroup == null ? void 0 : radioGroup.textColor) || "" - }; - }); - return (_ctx, _cache) => { - var _a; - return vue.openBlock(), vue.createElementBlock("label", { - class: vue.normalizeClass([ - vue.unref(ns).b("button"), - vue.unref(ns).is("active", vue.unref(modelValue) === vue.unref(actualValue)), - vue.unref(ns).is("disabled", vue.unref(disabled)), - vue.unref(ns).is("focus", vue.unref(focus)), - vue.unref(ns).bm("button", vue.unref(size)) - ]) - }, [ - vue.withDirectives(vue.createElementVNode("input", { - ref_key: "radioRef", - ref: radioRef, - "onUpdate:modelValue": ($event) => vue.isRef(modelValue) ? modelValue.value = $event : null, - class: vue.normalizeClass(vue.unref(ns).be("button", "original-radio")), - value: vue.unref(actualValue), - type: "radio", - name: _ctx.name || ((_a = vue.unref(radioGroup)) == null ? void 0 : _a.name), - disabled: vue.unref(disabled), - onFocus: ($event) => focus.value = true, - onBlur: ($event) => focus.value = false, - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, null, 42, ["onUpdate:modelValue", "value", "name", "disabled", "onFocus", "onBlur", "onClick"]), [ - [vue.vModelRadio, vue.unref(modelValue)] - ]), - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(ns).be("button", "inner")), - style: vue.normalizeStyle(vue.unref(modelValue) === vue.unref(actualValue) ? vue.unref(activeStyle) : {}), - onKeydown: vue.withModifiers(() => { - }, ["stop"]) - }, [ - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.label), 1) - ]) - ], 46, ["onKeydown"]) - ], 2); - }; - } - }); - var RadioButton = /* @__PURE__ */ _export_sfc(_sfc_main$1V, [["__file", "radio-button.vue"]]); - - const radioGroupProps = buildProps({ - id: { - type: String, - default: void 0 - }, - size: useSizeProp, - disabled: Boolean, - modelValue: { - type: [String, Number, Boolean], - default: void 0 - }, - fill: { - type: String, - default: "" - }, - textColor: { - type: String, - default: "" - }, - name: { - type: String, - default: void 0 - }, - validateEvent: { - type: Boolean, - default: true - }, - ...useAriaProps(["ariaLabel"]) - }); - const radioGroupEmits = radioEmits; - - const __default__$1j = vue.defineComponent({ - name: "ElRadioGroup" - }); - const _sfc_main$1U = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1j, - props: radioGroupProps, - emits: radioGroupEmits, - setup(__props, { emit }) { - const props = __props; - const ns = useNamespace("radio"); - const radioId = useId(); - const radioGroupRef = vue.ref(); - const { formItem } = useFormItem(); - const { inputId: groupId, isLabeledByFormItem } = useFormItemInputId(props, { - formItemContext: formItem - }); - const changeEvent = (value) => { - emit(UPDATE_MODEL_EVENT, value); - vue.nextTick(() => emit("change", value)); - }; - vue.onMounted(() => { - const radios = radioGroupRef.value.querySelectorAll("[type=radio]"); - const firstLabel = radios[0]; - if (!Array.from(radios).some((radio) => radio.checked) && firstLabel) { - firstLabel.tabIndex = 0; - } - }); - const name = vue.computed(() => { - return props.name || radioId.value; - }); - vue.provide(radioGroupKey, vue.reactive({ - ...vue.toRefs(props), - changeEvent, - name - })); - vue.watch(() => props.modelValue, () => { - if (props.validateEvent) { - formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); - } - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - id: vue.unref(groupId), - ref_key: "radioGroupRef", - ref: radioGroupRef, - class: vue.normalizeClass(vue.unref(ns).b("group")), - role: "radiogroup", - "aria-label": !vue.unref(isLabeledByFormItem) ? _ctx.ariaLabel || "radio-group" : void 0, - "aria-labelledby": vue.unref(isLabeledByFormItem) ? vue.unref(formItem).labelId : void 0 - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 10, ["id", "aria-label", "aria-labelledby"]); - }; - } - }); - var RadioGroup = /* @__PURE__ */ _export_sfc(_sfc_main$1U, [["__file", "radio-group.vue"]]); - - const ElRadio = withInstall(Radio, { - RadioButton, - RadioGroup - }); - const ElRadioGroup = withNoopInstall(RadioGroup); - const ElRadioButton = withNoopInstall(RadioButton); - - var NodeContent$1 = vue.defineComponent({ - name: "NodeContent", - setup() { - const ns = useNamespace("cascader-node"); - return { - ns - }; - }, - render() { - const { ns } = this; - const { node, panel } = this.$parent; - const { data, label } = node; - const { renderLabelFn } = panel; - return vue.h("span", { class: ns.e("label") }, renderLabelFn ? renderLabelFn({ node, data }) : label); - } - }); - - const CASCADER_PANEL_INJECTION_KEY = Symbol(); - - const _sfc_main$1T = vue.defineComponent({ - name: "ElCascaderNode", - components: { - ElCheckbox, - ElRadio, - NodeContent: NodeContent$1, - ElIcon, - Check: check_default, - Loading: loading_default, - ArrowRight: arrow_right_default - }, - props: { - node: { - type: Object, - required: true - }, - menuId: String - }, - emits: ["expand"], - setup(props, { emit }) { - const panel = vue.inject(CASCADER_PANEL_INJECTION_KEY); - const ns = useNamespace("cascader-node"); - const isHoverMenu = vue.computed(() => panel.isHoverMenu); - const multiple = vue.computed(() => panel.config.multiple); - const checkStrictly = vue.computed(() => panel.config.checkStrictly); - const checkedNodeId = vue.computed(() => { - var _a; - return (_a = panel.checkedNodes[0]) == null ? void 0 : _a.uid; - }); - const isDisabled = vue.computed(() => props.node.isDisabled); - const isLeaf = vue.computed(() => props.node.isLeaf); - const expandable = vue.computed(() => checkStrictly.value && !isLeaf.value || !isDisabled.value); - const inExpandingPath = vue.computed(() => isInPath(panel.expandingNode)); - const inCheckedPath = vue.computed(() => checkStrictly.value && panel.checkedNodes.some(isInPath)); - const isInPath = (node) => { - var _a; - const { level, uid } = props.node; - return ((_a = node == null ? void 0 : node.pathNodes[level - 1]) == null ? void 0 : _a.uid) === uid; - }; - const doExpand = () => { - if (inExpandingPath.value) - return; - panel.expandNode(props.node); - }; - const doCheck = (checked) => { - const { node } = props; - if (checked === node.checked) - return; - panel.handleCheckChange(node, checked); - }; - const doLoad = () => { - panel.lazyLoad(props.node, () => { - if (!isLeaf.value) - doExpand(); - }); - }; - const handleHoverExpand = (e) => { - if (!isHoverMenu.value) - return; - handleExpand(); - !isLeaf.value && emit("expand", e); - }; - const handleExpand = () => { - const { node } = props; - if (!expandable.value || node.loading) - return; - node.loaded ? doExpand() : doLoad(); - }; - const handleClick = () => { - if (isHoverMenu.value && !isLeaf.value) - return; - if (isLeaf.value && !isDisabled.value && !checkStrictly.value && !multiple.value) { - handleCheck(true); - } else { - handleExpand(); - } - }; - const handleSelectCheck = (checked) => { - if (checkStrictly.value) { - doCheck(checked); - if (props.node.loaded) { - doExpand(); - } - } else { - handleCheck(checked); - } - }; - const handleCheck = (checked) => { - if (!props.node.loaded) { - doLoad(); - } else { - doCheck(checked); - !checkStrictly.value && doExpand(); - } - }; - return { - panel, - isHoverMenu, - multiple, - checkStrictly, - checkedNodeId, - isDisabled, - isLeaf, - expandable, - inExpandingPath, - inCheckedPath, - ns, - handleHoverExpand, - handleExpand, - handleClick, - handleCheck, - handleSelectCheck - }; - } - }); - function _sfc_render$t(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_checkbox = vue.resolveComponent("el-checkbox"); - const _component_el_radio = vue.resolveComponent("el-radio"); - const _component_check = vue.resolveComponent("check"); - const _component_el_icon = vue.resolveComponent("el-icon"); - const _component_node_content = vue.resolveComponent("node-content"); - const _component_loading = vue.resolveComponent("loading"); - const _component_arrow_right = vue.resolveComponent("arrow-right"); - return vue.openBlock(), vue.createElementBlock("li", { - id: `${_ctx.menuId}-${_ctx.node.uid}`, - role: "menuitem", - "aria-haspopup": !_ctx.isLeaf, - "aria-owns": _ctx.isLeaf ? void 0 : _ctx.menuId, - "aria-expanded": _ctx.inExpandingPath, - tabindex: _ctx.expandable ? -1 : void 0, - class: vue.normalizeClass([ - _ctx.ns.b(), - _ctx.ns.is("selectable", _ctx.checkStrictly), - _ctx.ns.is("active", _ctx.node.checked), - _ctx.ns.is("disabled", !_ctx.expandable), - _ctx.inExpandingPath && "in-active-path", - _ctx.inCheckedPath && "in-checked-path" - ]), - onMouseenter: _ctx.handleHoverExpand, - onFocus: _ctx.handleHoverExpand, - onClick: _ctx.handleClick - }, [ - vue.createCommentVNode(" prefix "), - _ctx.multiple ? (vue.openBlock(), vue.createBlock(_component_el_checkbox, { - key: 0, - "model-value": _ctx.node.checked, - indeterminate: _ctx.node.indeterminate, - disabled: _ctx.isDisabled, - onClick: vue.withModifiers(() => { - }, ["stop"]), - "onUpdate:modelValue": _ctx.handleSelectCheck - }, null, 8, ["model-value", "indeterminate", "disabled", "onClick", "onUpdate:modelValue"])) : _ctx.checkStrictly ? (vue.openBlock(), vue.createBlock(_component_el_radio, { - key: 1, - "model-value": _ctx.checkedNodeId, - label: _ctx.node.uid, - disabled: _ctx.isDisabled, - "onUpdate:modelValue": _ctx.handleSelectCheck, - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, { - default: vue.withCtx(() => [ - vue.createCommentVNode("\n Add an empty element to avoid render label,\n do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485\n "), - vue.createElementVNode("span") - ]), - _: 1 - }, 8, ["model-value", "label", "disabled", "onUpdate:modelValue", "onClick"])) : _ctx.isLeaf && _ctx.node.checked ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 2, - class: vue.normalizeClass(_ctx.ns.e("prefix")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_check) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true), - vue.createCommentVNode(" content "), - vue.createVNode(_component_node_content), - vue.createCommentVNode(" postfix "), - !_ctx.isLeaf ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 3 }, [ - _ctx.node.loading ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 0, - class: vue.normalizeClass([_ctx.ns.is("loading"), _ctx.ns.e("postfix")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_loading) - ]), - _: 1 - }, 8, ["class"])) : (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 1, - class: vue.normalizeClass(["arrow-right", _ctx.ns.e("postfix")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_arrow_right) - ]), - _: 1 - }, 8, ["class"])) - ], 64)) : vue.createCommentVNode("v-if", true) - ], 42, ["id", "aria-haspopup", "aria-owns", "aria-expanded", "tabindex", "onMouseenter", "onFocus", "onClick"]); - } - var ElCascaderNode = /* @__PURE__ */ _export_sfc(_sfc_main$1T, [["render", _sfc_render$t], ["__file", "node.vue"]]); - - const _sfc_main$1S = vue.defineComponent({ - name: "ElCascaderMenu", - components: { - Loading: loading_default, - ElIcon, - ElScrollbar, - ElCascaderNode - }, - props: { - nodes: { - type: Array, - required: true - }, - index: { - type: Number, - required: true - } - }, - setup(props) { - const instance = vue.getCurrentInstance(); - const ns = useNamespace("cascader-menu"); - const { t } = useLocale(); - const id = useId(); - let activeNode = null; - let hoverTimer = null; - const panel = vue.inject(CASCADER_PANEL_INJECTION_KEY); - const hoverZone = vue.ref(null); - const isEmpty = vue.computed(() => !props.nodes.length); - const isLoading = vue.computed(() => !panel.initialLoaded); - const menuId = vue.computed(() => `${id.value}-${props.index}`); - const handleExpand = (e) => { - activeNode = e.target; - }; - const handleMouseMove = (e) => { - if (!panel.isHoverMenu || !activeNode || !hoverZone.value) - return; - if (activeNode.contains(e.target)) { - clearHoverTimer(); - const el = instance.vnode.el; - const { left } = el.getBoundingClientRect(); - const { offsetWidth, offsetHeight } = el; - const startX = e.clientX - left; - const top = activeNode.offsetTop; - const bottom = top + activeNode.offsetHeight; - hoverZone.value.innerHTML = ` - - - `; - } else if (!hoverTimer) { - hoverTimer = window.setTimeout(clearHoverZone, panel.config.hoverThreshold); - } - }; - const clearHoverTimer = () => { - if (!hoverTimer) - return; - clearTimeout(hoverTimer); - hoverTimer = null; - }; - const clearHoverZone = () => { - if (!hoverZone.value) - return; - hoverZone.value.innerHTML = ""; - clearHoverTimer(); - }; - return { - ns, - panel, - hoverZone, - isEmpty, - isLoading, - menuId, - t, - handleExpand, - handleMouseMove, - clearHoverZone - }; - } - }); - function _sfc_render$s(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_cascader_node = vue.resolveComponent("el-cascader-node"); - const _component_loading = vue.resolveComponent("loading"); - const _component_el_icon = vue.resolveComponent("el-icon"); - const _component_el_scrollbar = vue.resolveComponent("el-scrollbar"); - return vue.openBlock(), vue.createBlock(_component_el_scrollbar, { - key: _ctx.menuId, - tag: "ul", - role: "menu", - class: vue.normalizeClass(_ctx.ns.b()), - "wrap-class": _ctx.ns.e("wrap"), - "view-class": [_ctx.ns.e("list"), _ctx.ns.is("empty", _ctx.isEmpty)], - onMousemove: _ctx.handleMouseMove, - onMouseleave: _ctx.clearHoverZone - }, { - default: vue.withCtx(() => { - var _a; - return [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.nodes, (node) => { - return vue.openBlock(), vue.createBlock(_component_el_cascader_node, { - key: node.uid, - node, - "menu-id": _ctx.menuId, - onExpand: _ctx.handleExpand - }, null, 8, ["node", "menu-id", "onExpand"]); - }), 128)), - _ctx.isLoading ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(_ctx.ns.e("empty-text")) - }, [ - vue.createVNode(_component_el_icon, { - size: "14", - class: vue.normalizeClass(_ctx.ns.is("loading")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_loading) - ]), - _: 1 - }, 8, ["class"]), - vue.createTextVNode(" " + vue.toDisplayString(_ctx.t("el.cascader.loading")), 1) - ], 2)) : _ctx.isEmpty ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(_ctx.ns.e("empty-text")) - }, [ - vue.renderSlot(_ctx.$slots, "empty", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.t("el.cascader.noData")), 1) - ]) - ], 2)) : ((_a = _ctx.panel) == null ? void 0 : _a.isHoverMenu) ? (vue.openBlock(), vue.createElementBlock("svg", { - key: 2, - ref: "hoverZone", - class: vue.normalizeClass(_ctx.ns.e("hover-zone")) - }, null, 2)) : vue.createCommentVNode("v-if", true) - ]; - }), - _: 3 - }, 8, ["class", "wrap-class", "view-class", "onMousemove", "onMouseleave"]); - } - var ElCascaderMenu = /* @__PURE__ */ _export_sfc(_sfc_main$1S, [["render", _sfc_render$s], ["__file", "menu.vue"]]); - - let uid = 0; - const calculatePathNodes = (node) => { - const nodes = [node]; - let { parent } = node; - while (parent) { - nodes.unshift(parent); - parent = parent.parent; - } - return nodes; - }; - class Node$2 { - constructor(data, config, parent, root = false) { - this.data = data; - this.config = config; - this.parent = parent; - this.root = root; - this.uid = uid++; - this.checked = false; - this.indeterminate = false; - this.loading = false; - const { value: valueKey, label: labelKey, children: childrenKey } = config; - const childrenData = data[childrenKey]; - const pathNodes = calculatePathNodes(this); - this.level = root ? 0 : parent ? parent.level + 1 : 1; - this.value = data[valueKey]; - this.label = data[labelKey]; - this.pathNodes = pathNodes; - this.pathValues = pathNodes.map((node) => node.value); - this.pathLabels = pathNodes.map((node) => node.label); - this.childrenData = childrenData; - this.children = (childrenData || []).map((child) => new Node$2(child, config, this)); - this.loaded = !config.lazy || this.isLeaf || !isEmpty(childrenData); - } - get isDisabled() { - const { data, parent, config } = this; - const { disabled, checkStrictly } = config; - const isDisabled = isFunction$1(disabled) ? disabled(data, this) : !!data[disabled]; - return isDisabled || !checkStrictly && (parent == null ? void 0 : parent.isDisabled); - } - get isLeaf() { - const { data, config, childrenData, loaded } = this; - const { lazy, leaf } = config; - const isLeaf = isFunction$1(leaf) ? leaf(data, this) : data[leaf]; - return isUndefined(isLeaf) ? lazy && !loaded ? false : !(isArray$1(childrenData) && childrenData.length) : !!isLeaf; - } - get valueByOption() { - return this.config.emitPath ? this.pathValues : this.value; - } - appendChild(childData) { - const { childrenData, children } = this; - const node = new Node$2(childData, this.config, this); - if (isArray$1(childrenData)) { - childrenData.push(childData); - } else { - this.childrenData = [childData]; - } - children.push(node); - return node; - } - calcText(allLevels, separator) { - const text = allLevels ? this.pathLabels.join(separator) : this.label; - this.text = text; - return text; - } - broadcast(event, ...args) { - const handlerName = `onParent${capitalize(event)}`; - this.children.forEach((child) => { - if (child) { - child.broadcast(event, ...args); - child[handlerName] && child[handlerName](...args); - } - }); - } - emit(event, ...args) { - const { parent } = this; - const handlerName = `onChild${capitalize(event)}`; - if (parent) { - parent[handlerName] && parent[handlerName](...args); - parent.emit(event, ...args); - } - } - onParentCheck(checked) { - if (!this.isDisabled) { - this.setCheckState(checked); - } - } - onChildCheck() { - const { children } = this; - const validChildren = children.filter((child) => !child.isDisabled); - const checked = validChildren.length ? validChildren.every((child) => child.checked) : false; - this.setCheckState(checked); - } - setCheckState(checked) { - const totalNum = this.children.length; - const checkedNum = this.children.reduce((c, p) => { - const num = p.checked ? 1 : p.indeterminate ? 0.5 : 0; - return c + num; - }, 0); - this.checked = this.loaded && this.children.filter((child) => !child.isDisabled).every((child) => child.loaded && child.checked) && checked; - this.indeterminate = this.loaded && checkedNum !== totalNum && checkedNum > 0; - } - doCheck(checked) { - if (this.checked === checked) - return; - const { checkStrictly, multiple } = this.config; - if (checkStrictly || !multiple) { - this.checked = checked; - } else { - this.broadcast("check", checked); - this.setCheckState(checked); - this.emit("check"); - } - } - } - var Node$3 = Node$2; - - const flatNodes = (nodes, leafOnly) => { - return nodes.reduce((res, node) => { - if (node.isLeaf) { - res.push(node); - } else { - !leafOnly && res.push(node); - res = res.concat(flatNodes(node.children, leafOnly)); - } - return res; - }, []); - }; - class Store { - constructor(data, config) { - this.config = config; - const nodes = (data || []).map((nodeData) => new Node$3(nodeData, this.config)); - this.nodes = nodes; - this.allNodes = flatNodes(nodes, false); - this.leafNodes = flatNodes(nodes, true); - } - getNodes() { - return this.nodes; - } - getFlattedNodes(leafOnly) { - return leafOnly ? this.leafNodes : this.allNodes; - } - appendNode(nodeData, parentNode) { - const node = parentNode ? parentNode.appendChild(nodeData) : new Node$3(nodeData, this.config); - if (!parentNode) - this.nodes.push(node); - this.appendAllNodesAndLeafNodes(node); - } - appendNodes(nodeDataList, parentNode) { - nodeDataList.forEach((nodeData) => this.appendNode(nodeData, parentNode)); - } - appendAllNodesAndLeafNodes(node) { - this.allNodes.push(node); - node.isLeaf && this.leafNodes.push(node); - if (node.children) { - node.children.forEach((subNode) => { - this.appendAllNodesAndLeafNodes(subNode); - }); - } - } - getNodeByValue(value, leafOnly = false) { - if (!value && value !== 0) - return null; - const node = this.getFlattedNodes(leafOnly).find((node2) => isEqual$1(node2.value, value) || isEqual$1(node2.pathValues, value)); - return node || null; - } - getSameNode(node) { - if (!node) - return null; - const node_ = this.getFlattedNodes(false).find(({ value, level }) => isEqual$1(node.value, value) && node.level === level); - return node_ || null; - } - } - - const CommonProps = buildProps({ - modelValue: { - type: definePropType([Number, String, Array]) - }, - options: { - type: definePropType(Array), - default: () => [] - }, - props: { - type: definePropType(Object), - default: () => ({}) - } - }); - const DefaultProps = { - expandTrigger: "click", - multiple: false, - checkStrictly: false, - emitPath: true, - lazy: false, - lazyLoad: NOOP, - value: "value", - label: "label", - children: "children", - leaf: "leaf", - disabled: "disabled", - hoverThreshold: 500 - }; - const useCascaderConfig = (props) => { - return vue.computed(() => ({ - ...DefaultProps, - ...props.props - })); - }; - - const getMenuIndex = (el) => { - if (!el) - return 0; - const pieces = el.id.split("-"); - return Number(pieces[pieces.length - 2]); - }; - const checkNode = (el) => { - if (!el) - return; - const input = el.querySelector("input"); - if (input) { - input.click(); - } else if (isLeaf(el)) { - el.click(); - } - }; - const sortByOriginalOrder = (oldNodes, newNodes) => { - const newNodesCopy = newNodes.slice(0); - const newIds = newNodesCopy.map((node) => node.uid); - const res = oldNodes.reduce((acc, item) => { - const index = newIds.indexOf(item.uid); - if (index > -1) { - acc.push(item); - newNodesCopy.splice(index, 1); - newIds.splice(index, 1); - } - return acc; - }, []); - res.push(...newNodesCopy); - return res; - }; - - const _sfc_main$1R = vue.defineComponent({ - name: "ElCascaderPanel", - components: { - ElCascaderMenu - }, - props: { - ...CommonProps, - border: { - type: Boolean, - default: true - }, - renderLabel: Function - }, - emits: [UPDATE_MODEL_EVENT, CHANGE_EVENT, "close", "expand-change"], - setup(props, { emit, slots }) { - let manualChecked = false; - const ns = useNamespace("cascader"); - const config = useCascaderConfig(props); - let store = null; - const initialLoaded = vue.ref(true); - const menuList = vue.ref([]); - const checkedValue = vue.ref(null); - const menus = vue.ref([]); - const expandingNode = vue.ref(null); - const checkedNodes = vue.ref([]); - const isHoverMenu = vue.computed(() => config.value.expandTrigger === "hover"); - const renderLabelFn = vue.computed(() => props.renderLabel || slots.default); - const initStore = () => { - const { options } = props; - const cfg = config.value; - manualChecked = false; - store = new Store(options, cfg); - menus.value = [store.getNodes()]; - if (cfg.lazy && isEmpty(props.options)) { - initialLoaded.value = false; - lazyLoad(void 0, (list) => { - if (list) { - store = new Store(list, cfg); - menus.value = [store.getNodes()]; - } - initialLoaded.value = true; - syncCheckedValue(false, true); - }); - } else { - syncCheckedValue(false, true); - } - }; - const lazyLoad = (node, cb) => { - const cfg = config.value; - node = node || new Node$3({}, cfg, void 0, true); - node.loading = true; - const resolve = (dataList) => { - const _node = node; - const parent = _node.root ? null : _node; - dataList && (store == null ? void 0 : store.appendNodes(dataList, parent)); - _node.loading = false; - _node.loaded = true; - _node.childrenData = _node.childrenData || []; - cb && cb(dataList); - }; - cfg.lazyLoad(node, resolve); - }; - const expandNode = (node, silent) => { - var _a; - const { level } = node; - const newMenus = menus.value.slice(0, level); - let newExpandingNode; - if (node.isLeaf) { - newExpandingNode = node.pathNodes[level - 2]; - } else { - newExpandingNode = node; - newMenus.push(node.children); - } - if (((_a = expandingNode.value) == null ? void 0 : _a.uid) !== (newExpandingNode == null ? void 0 : newExpandingNode.uid)) { - expandingNode.value = node; - menus.value = newMenus; - !silent && emit("expand-change", (node == null ? void 0 : node.pathValues) || []); - } - }; - const handleCheckChange = (node, checked, emitClose = true) => { - const { checkStrictly, multiple } = config.value; - const oldNode = checkedNodes.value[0]; - manualChecked = true; - !multiple && (oldNode == null ? void 0 : oldNode.doCheck(false)); - node.doCheck(checked); - calculateCheckedValue(); - emitClose && !multiple && !checkStrictly && emit("close"); - !emitClose && !multiple && !checkStrictly && expandParentNode(node); - }; - const expandParentNode = (node) => { - if (!node) - return; - node = node.parent; - expandParentNode(node); - node && expandNode(node); - }; - const getFlattedNodes = (leafOnly) => { - return store == null ? void 0 : store.getFlattedNodes(leafOnly); - }; - const getCheckedNodes = (leafOnly) => { - var _a; - return (_a = getFlattedNodes(leafOnly)) == null ? void 0 : _a.filter((node) => node.checked !== false); - }; - const clearCheckedNodes = () => { - checkedNodes.value.forEach((node) => node.doCheck(false)); - calculateCheckedValue(); - menus.value = menus.value.slice(0, 1); - expandingNode.value = null; - emit("expand-change", []); - }; - const calculateCheckedValue = () => { - var _a; - const { checkStrictly, multiple } = config.value; - const oldNodes = checkedNodes.value; - const newNodes = getCheckedNodes(!checkStrictly); - const nodes = sortByOriginalOrder(oldNodes, newNodes); - const values = nodes.map((node) => node.valueByOption); - checkedNodes.value = nodes; - checkedValue.value = multiple ? values : (_a = values[0]) != null ? _a : null; - }; - const syncCheckedValue = (loaded = false, forced = false) => { - const { modelValue } = props; - const { lazy, multiple, checkStrictly } = config.value; - const leafOnly = !checkStrictly; - if (!initialLoaded.value || manualChecked || !forced && isEqual$1(modelValue, checkedValue.value)) - return; - if (lazy && !loaded) { - const values = unique(flattenDeep(castArray(modelValue))); - const nodes = values.map((val) => store == null ? void 0 : store.getNodeByValue(val)).filter((node) => !!node && !node.loaded && !node.loading); - if (nodes.length) { - nodes.forEach((node) => { - lazyLoad(node, () => syncCheckedValue(false, forced)); - }); - } else { - syncCheckedValue(true, forced); - } - } else { - const values = multiple ? castArray(modelValue) : [modelValue]; - const nodes = unique(values.map((val) => store == null ? void 0 : store.getNodeByValue(val, leafOnly))); - syncMenuState(nodes, forced); - checkedValue.value = cloneDeep(modelValue); - } - }; - const syncMenuState = (newCheckedNodes, reserveExpandingState = true) => { - const { checkStrictly } = config.value; - const oldNodes = checkedNodes.value; - const newNodes = newCheckedNodes.filter((node) => !!node && (checkStrictly || node.isLeaf)); - const oldExpandingNode = store == null ? void 0 : store.getSameNode(expandingNode.value); - const newExpandingNode = reserveExpandingState && oldExpandingNode || newNodes[0]; - if (newExpandingNode) { - newExpandingNode.pathNodes.forEach((node) => expandNode(node, true)); - } else { - expandingNode.value = null; - } - oldNodes.forEach((node) => node.doCheck(false)); - vue.reactive(newNodes).forEach((node) => node.doCheck(true)); - checkedNodes.value = newNodes; - vue.nextTick(scrollToExpandingNode); - }; - const scrollToExpandingNode = () => { - if (!isClient) - return; - menuList.value.forEach((menu) => { - const menuElement = menu == null ? void 0 : menu.$el; - if (menuElement) { - const container = menuElement.querySelector(`.${ns.namespace.value}-scrollbar__wrap`); - const activeNode = menuElement.querySelector(`.${ns.b("node")}.${ns.is("active")}`) || menuElement.querySelector(`.${ns.b("node")}.in-active-path`); - scrollIntoView(container, activeNode); - } - }); - }; - const handleKeyDown = (e) => { - const target = e.target; - const { code } = e; - switch (code) { - case EVENT_CODE.up: - case EVENT_CODE.down: { - e.preventDefault(); - const distance = code === EVENT_CODE.up ? -1 : 1; - focusNode(getSibling(target, distance, `.${ns.b("node")}[tabindex="-1"]`)); - break; - } - case EVENT_CODE.left: { - e.preventDefault(); - const preMenu = menuList.value[getMenuIndex(target) - 1]; - const expandedNode = preMenu == null ? void 0 : preMenu.$el.querySelector(`.${ns.b("node")}[aria-expanded="true"]`); - focusNode(expandedNode); - break; - } - case EVENT_CODE.right: { - e.preventDefault(); - const nextMenu = menuList.value[getMenuIndex(target) + 1]; - const firstNode = nextMenu == null ? void 0 : nextMenu.$el.querySelector(`.${ns.b("node")}[tabindex="-1"]`); - focusNode(firstNode); - break; - } - case EVENT_CODE.enter: - case EVENT_CODE.numpadEnter: - checkNode(target); - break; - } - }; - vue.provide(CASCADER_PANEL_INJECTION_KEY, vue.reactive({ - config, - expandingNode, - checkedNodes, - isHoverMenu, - initialLoaded, - renderLabelFn, - lazyLoad, - expandNode, - handleCheckChange - })); - vue.watch([config, () => props.options], initStore, { - deep: true, - immediate: true - }); - vue.watch(() => props.modelValue, () => { - manualChecked = false; - syncCheckedValue(); - }, { - deep: true - }); - vue.watch(() => checkedValue.value, (val) => { - if (!isEqual$1(val, props.modelValue)) { - emit(UPDATE_MODEL_EVENT, val); - emit(CHANGE_EVENT, val); - } - }); - vue.onBeforeUpdate(() => menuList.value = []); - vue.onMounted(() => !isEmpty(props.modelValue) && syncCheckedValue()); - return { - ns, - menuList, - menus, - checkedNodes, - handleKeyDown, - handleCheckChange, - getFlattedNodes, - getCheckedNodes, - clearCheckedNodes, - calculateCheckedValue, - scrollToExpandingNode - }; - } - }); - function _sfc_render$r(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_cascader_menu = vue.resolveComponent("el-cascader-menu"); - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([_ctx.ns.b("panel"), _ctx.ns.is("bordered", _ctx.border)]), - onKeydown: _ctx.handleKeyDown - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.menus, (menu, index) => { - return vue.openBlock(), vue.createBlock(_component_el_cascader_menu, { - key: index, - ref_for: true, - ref: (item) => _ctx.menuList[index] = item, - index, - nodes: [...menu] - }, { - empty: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "empty") - ]), - _: 2 - }, 1032, ["index", "nodes"]); - }), 128)) - ], 42, ["onKeydown"]); - } - var CascaderPanel = /* @__PURE__ */ _export_sfc(_sfc_main$1R, [["render", _sfc_render$r], ["__file", "index.vue"]]); - - const ElCascaderPanel = withInstall(CascaderPanel); - - const tagProps = buildProps({ - type: { - type: String, - values: ["primary", "success", "info", "warning", "danger"], - default: "primary" - }, - closable: Boolean, - disableTransitions: Boolean, - hit: Boolean, - color: String, - size: { - type: String, - values: componentSizes - }, - effect: { - type: String, - values: ["dark", "light", "plain"], - default: "light" - }, - round: Boolean - }); - const tagEmits = { - close: (evt) => evt instanceof MouseEvent, - click: (evt) => evt instanceof MouseEvent - }; - - const __default__$1i = vue.defineComponent({ - name: "ElTag" - }); - const _sfc_main$1Q = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1i, - props: tagProps, - emits: tagEmits, - setup(__props, { emit }) { - const props = __props; - const tagSize = useFormSize(); - const ns = useNamespace("tag"); - const containerKls = vue.computed(() => { - const { type, hit, effect, closable, round } = props; - return [ - ns.b(), - ns.is("closable", closable), - ns.m(type || "primary"), - ns.m(tagSize.value), - ns.m(effect), - ns.is("hit", hit), - ns.is("round", round) - ]; - }); - const handleClose = (event) => { - emit("close", event); - }; - const handleClick = (event) => { - emit("click", event); - }; - const handleVNodeMounted = (vnode) => { - var _a, _b, _c; - if ((_c = (_b = (_a = vnode == null ? void 0 : vnode.component) == null ? void 0 : _a.subTree) == null ? void 0 : _b.component) == null ? void 0 : _c.bum) { - vnode.component.subTree.component.bum = null; - } - }; - return (_ctx, _cache) => { - return _ctx.disableTransitions ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - class: vue.normalizeClass(vue.unref(containerKls)), - style: vue.normalizeStyle({ backgroundColor: _ctx.color }), - onClick: handleClick - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(ns).e("content")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2), - _ctx.closable ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("close")), - onClick: vue.withModifiers(handleClose, ["stop"]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(close_default)) - ]), - _: 1 - }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true) - ], 6)) : (vue.openBlock(), vue.createBlock(vue.Transition, { - key: 1, - name: `${vue.unref(ns).namespace.value}-zoom-in-center`, - appear: "", - onVnodeMounted: handleVNodeMounted - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(containerKls)), - style: vue.normalizeStyle({ backgroundColor: _ctx.color }), - onClick: handleClick - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(ns).e("content")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2), - _ctx.closable ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("close")), - onClick: vue.withModifiers(handleClose, ["stop"]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(close_default)) - ]), - _: 1 - }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true) - ], 6) - ]), - _: 3 - }, 8, ["name"])); - }; - } - }); - var Tag = /* @__PURE__ */ _export_sfc(_sfc_main$1Q, [["__file", "tag.vue"]]); - - const ElTag = withInstall(Tag); - - const cascaderProps = buildProps({ - ...CommonProps, - size: useSizeProp, - placeholder: String, - disabled: Boolean, - clearable: Boolean, - filterable: Boolean, - filterMethod: { - type: definePropType(Function), - default: (node, keyword) => node.text.includes(keyword) - }, - separator: { - type: String, - default: " / " - }, - showAllLevels: { - type: Boolean, - default: true - }, - collapseTags: Boolean, - maxCollapseTags: { - type: Number, - default: 1 - }, - collapseTagsTooltip: { - type: Boolean, - default: false - }, - debounce: { - type: Number, - default: 300 - }, - beforeFilter: { - type: definePropType(Function), - default: () => true - }, - placement: { - type: definePropType(String), - values: Ee, - default: "bottom-start" - }, - fallbackPlacements: { - type: definePropType(Array), - default: ["bottom-start", "bottom", "top-start", "top", "right", "left"] - }, - popperClass: { - type: String, - default: "" - }, - teleported: useTooltipContentProps.teleported, - tagType: { ...tagProps.type, default: "info" }, - tagEffect: { ...tagProps.effect, default: "light" }, - validateEvent: { - type: Boolean, - default: true - }, - persistent: { - type: Boolean, - default: true - }, - ...useEmptyValuesProps - }); - const cascaderEmits = { - [UPDATE_MODEL_EVENT]: (_) => true, - [CHANGE_EVENT]: (_) => true, - focus: (evt) => evt instanceof FocusEvent, - blur: (evt) => evt instanceof FocusEvent, - clear: () => true, - visibleChange: (val) => isBoolean(val), - expandChange: (val) => !!val, - removeTag: (val) => !!val - }; - - const COMPONENT_NAME$e = "ElCascader"; - const __default__$1h = vue.defineComponent({ - name: COMPONENT_NAME$e - }); - const _sfc_main$1P = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1h, - props: cascaderProps, - emits: cascaderEmits, - setup(__props, { expose, emit }) { - const props = __props; - const popperOptions = { - modifiers: [ - { - name: "arrowPosition", - enabled: true, - phase: "main", - fn: ({ state }) => { - const { modifiersData, placement } = state; - if (["right", "left", "bottom", "top"].includes(placement)) - return; - modifiersData.arrow.x = 35; - }, - requires: ["arrow"] - } - ] - }; - const attrs = vue.useAttrs(); - let inputInitialHeight = 0; - let pressDeleteCount = 0; - const nsCascader = useNamespace("cascader"); - const nsInput = useNamespace("input"); - const { t } = useLocale(); - const { form, formItem } = useFormItem(); - const { valueOnClear } = useEmptyValues(props); - const { isComposing, handleComposition } = useComposition({ - afterComposition(event) { - var _a; - const text = (_a = event.target) == null ? void 0 : _a.value; - handleInput(text); - } - }); - const tooltipRef = vue.ref(null); - const input = vue.ref(null); - const tagWrapper = vue.ref(null); - const cascaderPanelRef = vue.ref(null); - const suggestionPanel = vue.ref(null); - const popperVisible = vue.ref(false); - const inputHover = vue.ref(false); - const filtering = vue.ref(false); - const filterFocus = vue.ref(false); - const inputValue = vue.ref(""); - const searchInputValue = vue.ref(""); - const presentTags = vue.ref([]); - const allPresentTags = vue.ref([]); - const suggestions = vue.ref([]); - const cascaderStyle = vue.computed(() => { - return attrs.style; - }); - const isDisabled = vue.computed(() => props.disabled || (form == null ? void 0 : form.disabled)); - const inputPlaceholder = vue.computed(() => props.placeholder || t("el.cascader.placeholder")); - const currentPlaceholder = vue.computed(() => searchInputValue.value || presentTags.value.length > 0 || isComposing.value ? "" : inputPlaceholder.value); - const realSize = useFormSize(); - const tagSize = vue.computed(() => realSize.value === "small" ? "small" : "default"); - const multiple = vue.computed(() => !!props.props.multiple); - const readonly = vue.computed(() => !props.filterable || multiple.value); - const searchKeyword = vue.computed(() => multiple.value ? searchInputValue.value : inputValue.value); - const checkedNodes = vue.computed(() => { - var _a; - return ((_a = cascaderPanelRef.value) == null ? void 0 : _a.checkedNodes) || []; - }); - const clearBtnVisible = vue.computed(() => { - if (!props.clearable || isDisabled.value || filtering.value || !inputHover.value) - return false; - return !!checkedNodes.value.length; - }); - const presentText = vue.computed(() => { - const { showAllLevels, separator } = props; - const nodes = checkedNodes.value; - return nodes.length ? multiple.value ? "" : nodes[0].calcText(showAllLevels, separator) : ""; - }); - const validateState = vue.computed(() => (formItem == null ? void 0 : formItem.validateState) || ""); - const checkedValue = vue.computed({ - get() { - return cloneDeep(props.modelValue); - }, - set(val) { - const value = val != null ? val : valueOnClear.value; - emit(UPDATE_MODEL_EVENT, value); - emit(CHANGE_EVENT, value); - if (props.validateEvent) { - formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); - } - } - }); - const cascaderKls = vue.computed(() => { - return [ - nsCascader.b(), - nsCascader.m(realSize.value), - nsCascader.is("disabled", isDisabled.value), - attrs.class - ]; - }); - const cascaderIconKls = vue.computed(() => { - return [ - nsInput.e("icon"), - "icon-arrow-down", - nsCascader.is("reverse", popperVisible.value) - ]; - }); - const inputClass = vue.computed(() => { - return nsCascader.is("focus", popperVisible.value || filterFocus.value); - }); - const contentRef = vue.computed(() => { - var _a, _b; - return (_b = (_a = tooltipRef.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef; - }); - const togglePopperVisible = (visible) => { - var _a, _b, _c; - if (isDisabled.value) - return; - visible = visible != null ? visible : !popperVisible.value; - if (visible !== popperVisible.value) { - popperVisible.value = visible; - (_b = (_a = input.value) == null ? void 0 : _a.input) == null ? void 0 : _b.setAttribute("aria-expanded", `${visible}`); - if (visible) { - updatePopperPosition(); - vue.nextTick((_c = cascaderPanelRef.value) == null ? void 0 : _c.scrollToExpandingNode); - } else if (props.filterable) { - syncPresentTextValue(); - } - emit("visibleChange", visible); - } - }; - const updatePopperPosition = () => { - vue.nextTick(() => { - var _a; - (_a = tooltipRef.value) == null ? void 0 : _a.updatePopper(); - }); - }; - const hideSuggestionPanel = () => { - filtering.value = false; - }; - const genTag = (node) => { - const { showAllLevels, separator } = props; - return { - node, - key: node.uid, - text: node.calcText(showAllLevels, separator), - hitState: false, - closable: !isDisabled.value && !node.isDisabled, - isCollapseTag: false - }; - }; - const deleteTag = (tag) => { - var _a; - const node = tag.node; - node.doCheck(false); - (_a = cascaderPanelRef.value) == null ? void 0 : _a.calculateCheckedValue(); - emit("removeTag", node.valueByOption); - }; - const calculatePresentTags = () => { - if (!multiple.value) - return; - const nodes = checkedNodes.value; - const tags = []; - const allTags = []; - nodes.forEach((node) => allTags.push(genTag(node))); - allPresentTags.value = allTags; - if (nodes.length) { - nodes.slice(0, props.maxCollapseTags).forEach((node) => tags.push(genTag(node))); - const rest = nodes.slice(props.maxCollapseTags); - const restCount = rest.length; - if (restCount) { - if (props.collapseTags) { - tags.push({ - key: -1, - text: `+ ${restCount}`, - closable: false, - isCollapseTag: true - }); - } else { - rest.forEach((node) => tags.push(genTag(node))); - } - } - } - presentTags.value = tags; - }; - const calculateSuggestions = () => { - var _a, _b; - const { filterMethod, showAllLevels, separator } = props; - const res = (_b = (_a = cascaderPanelRef.value) == null ? void 0 : _a.getFlattedNodes(!props.props.checkStrictly)) == null ? void 0 : _b.filter((node) => { - if (node.isDisabled) - return false; - node.calcText(showAllLevels, separator); - return filterMethod(node, searchKeyword.value); - }); - if (multiple.value) { - presentTags.value.forEach((tag) => { - tag.hitState = false; - }); - allPresentTags.value.forEach((tag) => { - tag.hitState = false; - }); - } - filtering.value = true; - suggestions.value = res; - updatePopperPosition(); - }; - const focusFirstNode = () => { - var _a; - let firstNode; - if (filtering.value && suggestionPanel.value) { - firstNode = suggestionPanel.value.$el.querySelector(`.${nsCascader.e("suggestion-item")}`); - } else { - firstNode = (_a = cascaderPanelRef.value) == null ? void 0 : _a.$el.querySelector(`.${nsCascader.b("node")}[tabindex="-1"]`); - } - if (firstNode) { - firstNode.focus(); - !filtering.value && firstNode.click(); - } - }; - const updateStyle = () => { - var _a, _b; - const inputInner = (_a = input.value) == null ? void 0 : _a.input; - const tagWrapperEl = tagWrapper.value; - const suggestionPanelEl = (_b = suggestionPanel.value) == null ? void 0 : _b.$el; - if (!isClient || !inputInner) - return; - if (suggestionPanelEl) { - const suggestionList = suggestionPanelEl.querySelector(`.${nsCascader.e("suggestion-list")}`); - suggestionList.style.minWidth = `${inputInner.offsetWidth}px`; - } - if (tagWrapperEl) { - const { offsetHeight } = tagWrapperEl; - const height = presentTags.value.length > 0 ? `${Math.max(offsetHeight, inputInitialHeight) - 2}px` : `${inputInitialHeight}px`; - inputInner.style.height = height; - updatePopperPosition(); - } - }; - const getCheckedNodes = (leafOnly) => { - var _a; - return (_a = cascaderPanelRef.value) == null ? void 0 : _a.getCheckedNodes(leafOnly); - }; - const handleExpandChange = (value) => { - updatePopperPosition(); - emit("expandChange", value); - }; - const handleKeyDown = (e) => { - if (isComposing.value) - return; - switch (e.code) { - case EVENT_CODE.enter: - case EVENT_CODE.numpadEnter: - togglePopperVisible(); - break; - case EVENT_CODE.down: - togglePopperVisible(true); - vue.nextTick(focusFirstNode); - e.preventDefault(); - break; - case EVENT_CODE.esc: - if (popperVisible.value === true) { - e.preventDefault(); - e.stopPropagation(); - togglePopperVisible(false); - } - break; - case EVENT_CODE.tab: - togglePopperVisible(false); - break; - } - }; - const handleClear = () => { - var _a; - (_a = cascaderPanelRef.value) == null ? void 0 : _a.clearCheckedNodes(); - if (!popperVisible.value && props.filterable) { - syncPresentTextValue(); - } - togglePopperVisible(false); - emit("clear"); - }; - const syncPresentTextValue = () => { - const { value } = presentText; - inputValue.value = value; - searchInputValue.value = value; - }; - const handleSuggestionClick = (node) => { - var _a, _b; - const { checked } = node; - if (multiple.value) { - (_a = cascaderPanelRef.value) == null ? void 0 : _a.handleCheckChange(node, !checked, false); - } else { - !checked && ((_b = cascaderPanelRef.value) == null ? void 0 : _b.handleCheckChange(node, true, false)); - togglePopperVisible(false); - } - }; - const handleSuggestionKeyDown = (e) => { - const target = e.target; - const { code } = e; - switch (code) { - case EVENT_CODE.up: - case EVENT_CODE.down: { - const distance = code === EVENT_CODE.up ? -1 : 1; - focusNode(getSibling(target, distance, `.${nsCascader.e("suggestion-item")}[tabindex="-1"]`)); - break; - } - case EVENT_CODE.enter: - case EVENT_CODE.numpadEnter: - target.click(); - break; - } - }; - const handleDelete = () => { - const tags = presentTags.value; - const lastTag = tags[tags.length - 1]; - pressDeleteCount = searchInputValue.value ? 0 : pressDeleteCount + 1; - if (!lastTag || !pressDeleteCount || props.collapseTags && tags.length > 1) - return; - if (lastTag.hitState) { - deleteTag(lastTag); - } else { - lastTag.hitState = true; - } - }; - const handleFocus = (e) => { - const el = e.target; - const name = nsCascader.e("search-input"); - if (el.className === name) { - filterFocus.value = true; - } - emit("focus", e); - }; - const handleBlur = (e) => { - filterFocus.value = false; - emit("blur", e); - }; - const handleFilter = debounce(() => { - const { value } = searchKeyword; - if (!value) - return; - const passed = props.beforeFilter(value); - if (isPromise(passed)) { - passed.then(calculateSuggestions).catch(() => { - }); - } else if (passed !== false) { - calculateSuggestions(); - } else { - hideSuggestionPanel(); - } - }, props.debounce); - const handleInput = (val, e) => { - !popperVisible.value && togglePopperVisible(true); - if (e == null ? void 0 : e.isComposing) - return; - val ? handleFilter() : hideSuggestionPanel(); - }; - const getInputInnerHeight = (inputInner) => Number.parseFloat(useCssVar(nsInput.cssVarName("input-height"), inputInner).value) - 2; - vue.watch(filtering, updatePopperPosition); - vue.watch([checkedNodes, isDisabled, () => props.collapseTags], calculatePresentTags); - vue.watch(presentTags, () => { - vue.nextTick(() => updateStyle()); - }); - vue.watch(realSize, async () => { - await vue.nextTick(); - const inputInner = input.value.input; - inputInitialHeight = getInputInnerHeight(inputInner) || inputInitialHeight; - updateStyle(); - }); - vue.watch(presentText, syncPresentTextValue, { immediate: true }); - vue.onMounted(() => { - const inputInner = input.value.input; - const inputInnerHeight = getInputInnerHeight(inputInner); - inputInitialHeight = inputInner.offsetHeight || inputInnerHeight; - useResizeObserver(inputInner, updateStyle); - }); - expose({ - getCheckedNodes, - cascaderPanelRef, - togglePopperVisible, - contentRef, - presentText - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTooltip), { - ref_key: "tooltipRef", - ref: tooltipRef, - visible: popperVisible.value, - teleported: _ctx.teleported, - "popper-class": [vue.unref(nsCascader).e("dropdown"), _ctx.popperClass], - "popper-options": popperOptions, - "fallback-placements": _ctx.fallbackPlacements, - "stop-popper-mouse-event": false, - "gpu-acceleration": false, - placement: _ctx.placement, - transition: `${vue.unref(nsCascader).namespace.value}-zoom-in-top`, - effect: "light", - pure: "", - persistent: _ctx.persistent, - onHide: hideSuggestionPanel - }, { - default: vue.withCtx(() => [ - vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(cascaderKls)), - style: vue.normalizeStyle(vue.unref(cascaderStyle)), - onClick: () => togglePopperVisible(vue.unref(readonly) ? void 0 : true), - onKeydown: handleKeyDown, - onMouseenter: ($event) => inputHover.value = true, - onMouseleave: ($event) => inputHover.value = false - }, [ - vue.createVNode(vue.unref(ElInput), { - ref_key: "input", - ref: input, - modelValue: inputValue.value, - "onUpdate:modelValue": ($event) => inputValue.value = $event, - placeholder: vue.unref(currentPlaceholder), - readonly: vue.unref(readonly), - disabled: vue.unref(isDisabled), - "validate-event": false, - size: vue.unref(realSize), - class: vue.normalizeClass(vue.unref(inputClass)), - tabindex: vue.unref(multiple) && _ctx.filterable && !vue.unref(isDisabled) ? -1 : void 0, - onCompositionstart: vue.unref(handleComposition), - onCompositionupdate: vue.unref(handleComposition), - onCompositionend: vue.unref(handleComposition), - onFocus: handleFocus, - onBlur: handleBlur, - onInput: handleInput - }, vue.createSlots({ - suffix: vue.withCtx(() => [ - vue.unref(clearBtnVisible) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: "clear", - class: vue.normalizeClass([vue.unref(nsInput).e("icon"), "icon-circle-close"]), - onClick: vue.withModifiers(handleClear, ["stop"]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(circle_close_default)) - ]), - _: 1 - }, 8, ["class", "onClick"])) : (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: "arrow-down", - class: vue.normalizeClass(vue.unref(cascaderIconKls)), - onClick: vue.withModifiers(($event) => togglePopperVisible(), ["stop"]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_down_default)) - ]), - _: 1 - }, 8, ["class", "onClick"])) - ]), - _: 2 - }, [ - _ctx.$slots.prefix ? { - name: "prefix", - fn: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "prefix") - ]) - } : void 0 - ]), 1032, ["modelValue", "onUpdate:modelValue", "placeholder", "readonly", "disabled", "size", "class", "tabindex", "onCompositionstart", "onCompositionupdate", "onCompositionend"]), - vue.unref(multiple) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - ref_key: "tagWrapper", - ref: tagWrapper, - class: vue.normalizeClass([ - vue.unref(nsCascader).e("tags"), - vue.unref(nsCascader).is("validate", Boolean(vue.unref(validateState))) - ]) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(presentTags.value, (tag) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTag), { - key: tag.key, - type: _ctx.tagType, - size: vue.unref(tagSize), - effect: _ctx.tagEffect, - hit: tag.hitState, - closable: tag.closable, - "disable-transitions": "", - onClose: ($event) => deleteTag(tag) - }, { - default: vue.withCtx(() => [ - tag.isCollapseTag === false ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, vue.toDisplayString(tag.text), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(ElTooltip), { - key: 1, - disabled: popperVisible.value || !_ctx.collapseTagsTooltip, - "fallback-placements": ["bottom", "top", "right", "left"], - placement: "bottom", - effect: "light" - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("span", null, vue.toDisplayString(tag.text), 1) - ]), - content: vue.withCtx(() => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(nsCascader).e("collapse-tags")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(allPresentTags.value.slice(_ctx.maxCollapseTags), (tag2, idx) => { - return vue.openBlock(), vue.createElementBlock("div", { - key: idx, - class: vue.normalizeClass(vue.unref(nsCascader).e("collapse-tag")) - }, [ - (vue.openBlock(), vue.createBlock(vue.unref(ElTag), { - key: tag2.key, - class: "in-tooltip", - type: _ctx.tagType, - size: vue.unref(tagSize), - effect: _ctx.tagEffect, - hit: tag2.hitState, - closable: tag2.closable, - "disable-transitions": "", - onClose: ($event) => deleteTag(tag2) - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("span", null, vue.toDisplayString(tag2.text), 1) - ]), - _: 2 - }, 1032, ["type", "size", "effect", "hit", "closable", "onClose"])) - ], 2); - }), 128)) - ], 2) - ]), - _: 2 - }, 1032, ["disabled"])) - ]), - _: 2 - }, 1032, ["type", "size", "effect", "hit", "closable", "onClose"]); - }), 128)), - _ctx.filterable && !vue.unref(isDisabled) ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("input", { - key: 0, - "onUpdate:modelValue": ($event) => searchInputValue.value = $event, - type: "text", - class: vue.normalizeClass(vue.unref(nsCascader).e("search-input")), - placeholder: vue.unref(presentText) ? "" : vue.unref(inputPlaceholder), - onInput: (e) => handleInput(searchInputValue.value, e), - onClick: vue.withModifiers(($event) => togglePopperVisible(true), ["stop"]), - onKeydown: vue.withKeys(handleDelete, ["delete"]), - onCompositionstart: vue.unref(handleComposition), - onCompositionupdate: vue.unref(handleComposition), - onCompositionend: vue.unref(handleComposition), - onFocus: handleFocus, - onBlur: handleBlur - }, null, 42, ["onUpdate:modelValue", "placeholder", "onInput", "onClick", "onKeydown", "onCompositionstart", "onCompositionupdate", "onCompositionend"])), [ - [vue.vModelText, searchInputValue.value] - ]) : vue.createCommentVNode("v-if", true) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 46, ["onClick", "onMouseenter", "onMouseleave"])), [ - [vue.unref(ClickOutside), () => togglePopperVisible(false), vue.unref(contentRef)] - ]) - ]), - content: vue.withCtx(() => [ - vue.withDirectives(vue.createVNode(vue.unref(ElCascaderPanel), { - ref_key: "cascaderPanelRef", - ref: cascaderPanelRef, - modelValue: vue.unref(checkedValue), - "onUpdate:modelValue": ($event) => vue.isRef(checkedValue) ? checkedValue.value = $event : null, - options: _ctx.options, - props: props.props, - border: false, - "render-label": _ctx.$slots.default, - onExpandChange: handleExpandChange, - onClose: ($event) => _ctx.$nextTick(() => togglePopperVisible(false)) - }, { - empty: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "empty") - ]), - _: 3 - }, 8, ["modelValue", "onUpdate:modelValue", "options", "props", "render-label", "onClose"]), [ - [vue.vShow, !filtering.value] - ]), - _ctx.filterable ? vue.withDirectives((vue.openBlock(), vue.createBlock(vue.unref(ElScrollbar), { - key: 0, - ref_key: "suggestionPanel", - ref: suggestionPanel, - tag: "ul", - class: vue.normalizeClass(vue.unref(nsCascader).e("suggestion-panel")), - "view-class": vue.unref(nsCascader).e("suggestion-list"), - onKeydown: handleSuggestionKeyDown - }, { - default: vue.withCtx(() => [ - suggestions.value.length ? (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 0 }, vue.renderList(suggestions.value, (item) => { - return vue.openBlock(), vue.createElementBlock("li", { - key: item.uid, - class: vue.normalizeClass([ - vue.unref(nsCascader).e("suggestion-item"), - vue.unref(nsCascader).is("checked", item.checked) - ]), - tabindex: -1, - onClick: ($event) => handleSuggestionClick(item) - }, [ - vue.createElementVNode("span", null, vue.toDisplayString(item.text), 1), - item.checked ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(check_default)) - ]), - _: 1 - })) : vue.createCommentVNode("v-if", true) - ], 10, ["onClick"]); - }), 128)) : vue.renderSlot(_ctx.$slots, "empty", { key: 1 }, () => [ - vue.createElementVNode("li", { - class: vue.normalizeClass(vue.unref(nsCascader).e("empty-text")) - }, vue.toDisplayString(vue.unref(t)("el.cascader.noMatch")), 3) - ]) - ]), - _: 3 - }, 8, ["class", "view-class"])), [ - [vue.vShow, filtering.value] - ]) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["visible", "teleported", "popper-class", "fallback-placements", "placement", "transition", "persistent"]); - }; - } - }); - var Cascader = /* @__PURE__ */ _export_sfc(_sfc_main$1P, [["__file", "cascader.vue"]]); - - const ElCascader = withInstall(Cascader); - - const checkTagProps = buildProps({ - checked: Boolean, - disabled: Boolean, - type: { - type: String, - values: ["primary", "success", "info", "warning", "danger"], - default: "primary" - } - }); - const checkTagEmits = { - "update:checked": (value) => isBoolean(value), - [CHANGE_EVENT]: (value) => isBoolean(value) - }; - - const __default__$1g = vue.defineComponent({ - name: "ElCheckTag" - }); - const _sfc_main$1O = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1g, - props: checkTagProps, - emits: checkTagEmits, - setup(__props, { emit }) { - const props = __props; - const ns = useNamespace("check-tag"); - const isDisabled = vue.computed(() => props.disabled); - const containerKls = vue.computed(() => [ - ns.b(), - ns.is("checked", props.checked), - ns.is("disabled", isDisabled.value), - ns.m(props.type || "primary") - ]); - const handleChange = () => { - if (isDisabled.value) - return; - const checked = !props.checked; - emit(CHANGE_EVENT, checked); - emit("update:checked", checked); - }; - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("span", { - class: vue.normalizeClass(vue.unref(containerKls)), - onClick: handleChange - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2); - }; - } - }); - var CheckTag = /* @__PURE__ */ _export_sfc(_sfc_main$1O, [["__file", "check-tag.vue"]]); - - const ElCheckTag = withInstall(CheckTag); - - const rowContextKey = Symbol("rowContextKey"); - - const RowJustify = [ - "start", - "center", - "end", - "space-around", - "space-between", - "space-evenly" - ]; - const RowAlign = ["top", "middle", "bottom"]; - const rowProps = buildProps({ - tag: { - type: String, - default: "div" - }, - gutter: { - type: Number, - default: 0 - }, - justify: { - type: String, - values: RowJustify, - default: "start" - }, - align: { - type: String, - values: RowAlign - } - }); - - const __default__$1f = vue.defineComponent({ - name: "ElRow" - }); - const _sfc_main$1N = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1f, - props: rowProps, - setup(__props) { - const props = __props; - const ns = useNamespace("row"); - const gutter = vue.computed(() => props.gutter); - vue.provide(rowContextKey, { - gutter - }); - const style = vue.computed(() => { - const styles = {}; - if (!props.gutter) { - return styles; - } - styles.marginRight = styles.marginLeft = `-${props.gutter / 2}px`; - return styles; - }); - const rowKls = vue.computed(() => [ - ns.b(), - ns.is(`justify-${props.justify}`, props.justify !== "start"), - ns.is(`align-${props.align}`, !!props.align) - ]); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { - class: vue.normalizeClass(vue.unref(rowKls)), - style: vue.normalizeStyle(vue.unref(style)) - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["class", "style"]); - }; - } - }); - var Row$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1N, [["__file", "row.vue"]]); - - const ElRow = withInstall(Row$1); - - const colProps = buildProps({ - tag: { - type: String, - default: "div" - }, - span: { - type: Number, - default: 24 - }, - offset: { - type: Number, - default: 0 - }, - pull: { - type: Number, - default: 0 - }, - push: { - type: Number, - default: 0 - }, - xs: { - type: definePropType([Number, Object]), - default: () => mutable({}) - }, - sm: { - type: definePropType([Number, Object]), - default: () => mutable({}) - }, - md: { - type: definePropType([Number, Object]), - default: () => mutable({}) - }, - lg: { - type: definePropType([Number, Object]), - default: () => mutable({}) - }, - xl: { - type: definePropType([Number, Object]), - default: () => mutable({}) - } - }); - - const __default__$1e = vue.defineComponent({ - name: "ElCol" - }); - const _sfc_main$1M = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1e, - props: colProps, - setup(__props) { - const props = __props; - const { gutter } = vue.inject(rowContextKey, { gutter: vue.computed(() => 0) }); - const ns = useNamespace("col"); - const style = vue.computed(() => { - const styles = {}; - if (gutter.value) { - styles.paddingLeft = styles.paddingRight = `${gutter.value / 2}px`; - } - return styles; - }); - const colKls = vue.computed(() => { - const classes = []; - const pos = ["span", "offset", "pull", "push"]; - pos.forEach((prop) => { - const size = props[prop]; - if (isNumber(size)) { - if (prop === "span") - classes.push(ns.b(`${props[prop]}`)); - else if (size > 0) - classes.push(ns.b(`${prop}-${props[prop]}`)); - } - }); - const sizes = ["xs", "sm", "md", "lg", "xl"]; - sizes.forEach((size) => { - if (isNumber(props[size])) { - classes.push(ns.b(`${size}-${props[size]}`)); - } else if (isObject$1(props[size])) { - Object.entries(props[size]).forEach(([prop, sizeProp]) => { - classes.push(prop !== "span" ? ns.b(`${size}-${prop}-${sizeProp}`) : ns.b(`${size}-${sizeProp}`)); - }); - } - }); - if (gutter.value) { - classes.push(ns.is("guttered")); - } - return [ns.b(), classes]; - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { - class: vue.normalizeClass(vue.unref(colKls)), - style: vue.normalizeStyle(vue.unref(style)) - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["class", "style"]); - }; - } - }); - var Col = /* @__PURE__ */ _export_sfc(_sfc_main$1M, [["__file", "col.vue"]]); - - const ElCol = withInstall(Col); - - const emitChangeFn = (value) => isNumber(value) || isString$1(value) || isArray$1(value); - const collapseProps = buildProps({ - accordion: Boolean, - modelValue: { - type: definePropType([Array, String, Number]), - default: () => mutable([]) - } - }); - const collapseEmits = { - [UPDATE_MODEL_EVENT]: emitChangeFn, - [CHANGE_EVENT]: emitChangeFn - }; - - const collapseContextKey = Symbol("collapseContextKey"); - - const useCollapse = (props, emit) => { - const activeNames = vue.ref(castArray$1(props.modelValue)); - const setActiveNames = (_activeNames) => { - activeNames.value = _activeNames; - const value = props.accordion ? activeNames.value[0] : activeNames.value; - emit(UPDATE_MODEL_EVENT, value); - emit(CHANGE_EVENT, value); - }; - const handleItemClick = (name) => { - if (props.accordion) { - setActiveNames([activeNames.value[0] === name ? "" : name]); - } else { - const _activeNames = [...activeNames.value]; - const index = _activeNames.indexOf(name); - if (index > -1) { - _activeNames.splice(index, 1); - } else { - _activeNames.push(name); - } - setActiveNames(_activeNames); - } - }; - vue.watch(() => props.modelValue, () => activeNames.value = castArray$1(props.modelValue), { deep: true }); - vue.provide(collapseContextKey, { - activeNames, - handleItemClick - }); - return { - activeNames, - setActiveNames - }; - }; - const useCollapseDOM = () => { - const ns = useNamespace("collapse"); - const rootKls = vue.computed(() => ns.b()); - return { - rootKls - }; - }; - - const __default__$1d = vue.defineComponent({ - name: "ElCollapse" - }); - const _sfc_main$1L = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1d, - props: collapseProps, - emits: collapseEmits, - setup(__props, { expose, emit }) { - const props = __props; - const { activeNames, setActiveNames } = useCollapse(props, emit); - const { rootKls } = useCollapseDOM(); - expose({ - activeNames, - setActiveNames - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(rootKls)) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2); - }; - } - }); - var Collapse = /* @__PURE__ */ _export_sfc(_sfc_main$1L, [["__file", "collapse.vue"]]); - - const __default__$1c = vue.defineComponent({ - name: "ElCollapseTransition" - }); - const _sfc_main$1K = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1c, - setup(__props) { - const ns = useNamespace("collapse-transition"); - const reset = (el) => { - el.style.maxHeight = ""; - el.style.overflow = el.dataset.oldOverflow; - el.style.paddingTop = el.dataset.oldPaddingTop; - el.style.paddingBottom = el.dataset.oldPaddingBottom; - }; - const on = { - beforeEnter(el) { - if (!el.dataset) - el.dataset = {}; - el.dataset.oldPaddingTop = el.style.paddingTop; - el.dataset.oldPaddingBottom = el.style.paddingBottom; - if (el.style.height) - el.dataset.elExistsHeight = el.style.height; - el.style.maxHeight = 0; - el.style.paddingTop = 0; - el.style.paddingBottom = 0; - }, - enter(el) { - requestAnimationFrame(() => { - el.dataset.oldOverflow = el.style.overflow; - if (el.dataset.elExistsHeight) { - el.style.maxHeight = el.dataset.elExistsHeight; - } else if (el.scrollHeight !== 0) { - el.style.maxHeight = `${el.scrollHeight}px`; - } else { - el.style.maxHeight = 0; - } - el.style.paddingTop = el.dataset.oldPaddingTop; - el.style.paddingBottom = el.dataset.oldPaddingBottom; - el.style.overflow = "hidden"; - }); - }, - afterEnter(el) { - el.style.maxHeight = ""; - el.style.overflow = el.dataset.oldOverflow; - }, - enterCancelled(el) { - reset(el); - }, - beforeLeave(el) { - if (!el.dataset) - el.dataset = {}; - el.dataset.oldPaddingTop = el.style.paddingTop; - el.dataset.oldPaddingBottom = el.style.paddingBottom; - el.dataset.oldOverflow = el.style.overflow; - el.style.maxHeight = `${el.scrollHeight}px`; - el.style.overflow = "hidden"; - }, - leave(el) { - if (el.scrollHeight !== 0) { - el.style.maxHeight = 0; - el.style.paddingTop = 0; - el.style.paddingBottom = 0; - } - }, - afterLeave(el) { - reset(el); - }, - leaveCancelled(el) { - reset(el); - } - }; - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.Transition, vue.mergeProps({ - name: vue.unref(ns).b() - }, vue.toHandlers(on)), { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 16, ["name"]); - }; - } - }); - var CollapseTransition = /* @__PURE__ */ _export_sfc(_sfc_main$1K, [["__file", "collapse-transition.vue"]]); - - const ElCollapseTransition = withInstall(CollapseTransition); - - const collapseItemProps = buildProps({ - title: { - type: String, - default: "" - }, - name: { - type: definePropType([String, Number]), - default: void 0 - }, - icon: { - type: iconPropType, - default: arrow_right_default - }, - disabled: Boolean - }); - - const useCollapseItem = (props) => { - const collapse = vue.inject(collapseContextKey); - const { namespace } = useNamespace("collapse"); - const focusing = vue.ref(false); - const isClick = vue.ref(false); - const idInjection = useIdInjection(); - const id = vue.computed(() => idInjection.current++); - const name = vue.computed(() => { - var _a; - return (_a = props.name) != null ? _a : `${namespace.value}-id-${idInjection.prefix}-${vue.unref(id)}`; - }); - const isActive = vue.computed(() => collapse == null ? void 0 : collapse.activeNames.value.includes(vue.unref(name))); - const handleFocus = () => { - setTimeout(() => { - if (!isClick.value) { - focusing.value = true; - } else { - isClick.value = false; - } - }, 50); - }; - const handleHeaderClick = () => { - if (props.disabled) - return; - collapse == null ? void 0 : collapse.handleItemClick(vue.unref(name)); - focusing.value = false; - isClick.value = true; - }; - const handleEnterClick = () => { - collapse == null ? void 0 : collapse.handleItemClick(vue.unref(name)); - }; - return { - focusing, - id, - isActive, - handleFocus, - handleHeaderClick, - handleEnterClick - }; - }; - const useCollapseItemDOM = (props, { focusing, isActive, id }) => { - const ns = useNamespace("collapse"); - const rootKls = vue.computed(() => [ - ns.b("item"), - ns.is("active", vue.unref(isActive)), - ns.is("disabled", props.disabled) - ]); - const headKls = vue.computed(() => [ - ns.be("item", "header"), - ns.is("active", vue.unref(isActive)), - { focusing: vue.unref(focusing) && !props.disabled } - ]); - const arrowKls = vue.computed(() => [ - ns.be("item", "arrow"), - ns.is("active", vue.unref(isActive)) - ]); - const itemWrapperKls = vue.computed(() => ns.be("item", "wrap")); - const itemContentKls = vue.computed(() => ns.be("item", "content")); - const scopedContentId = vue.computed(() => ns.b(`content-${vue.unref(id)}`)); - const scopedHeadId = vue.computed(() => ns.b(`head-${vue.unref(id)}`)); - return { - arrowKls, - headKls, - rootKls, - itemWrapperKls, - itemContentKls, - scopedContentId, - scopedHeadId - }; - }; - - const __default__$1b = vue.defineComponent({ - name: "ElCollapseItem" - }); - const _sfc_main$1J = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1b, - props: collapseItemProps, - setup(__props, { expose }) { - const props = __props; - const { - focusing, - id, - isActive, - handleFocus, - handleHeaderClick, - handleEnterClick - } = useCollapseItem(props); - const { - arrowKls, - headKls, - rootKls, - itemWrapperKls, - itemContentKls, - scopedContentId, - scopedHeadId - } = useCollapseItemDOM(props, { focusing, isActive, id }); - expose({ - isActive - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(rootKls)) - }, [ - vue.createElementVNode("button", { - id: vue.unref(scopedHeadId), - class: vue.normalizeClass(vue.unref(headKls)), - "aria-expanded": vue.unref(isActive), - "aria-controls": vue.unref(scopedContentId), - "aria-describedby": vue.unref(scopedContentId), - tabindex: _ctx.disabled ? -1 : 0, - type: "button", - onClick: vue.unref(handleHeaderClick), - onKeydown: vue.withKeys(vue.withModifiers(vue.unref(handleEnterClick), ["stop", "prevent"]), ["space", "enter"]), - onFocus: vue.unref(handleFocus), - onBlur: ($event) => focusing.value = false - }, [ - vue.renderSlot(_ctx.$slots, "title", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.title), 1) - ]), - vue.renderSlot(_ctx.$slots, "icon", { isActive: vue.unref(isActive) }, () => [ - vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass(vue.unref(arrowKls)) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon))) - ]), - _: 1 - }, 8, ["class"]) - ]) - ], 42, ["id", "aria-expanded", "aria-controls", "aria-describedby", "tabindex", "onClick", "onKeydown", "onFocus", "onBlur"]), - vue.createVNode(vue.unref(ElCollapseTransition), null, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createElementVNode("div", { - id: vue.unref(scopedContentId), - role: "region", - class: vue.normalizeClass(vue.unref(itemWrapperKls)), - "aria-hidden": !vue.unref(isActive), - "aria-labelledby": vue.unref(scopedHeadId) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(itemContentKls)) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2) - ], 10, ["id", "aria-hidden", "aria-labelledby"]), [ - [vue.vShow, vue.unref(isActive)] - ]) - ]), - _: 3 - }) - ], 2); - }; - } - }); - var CollapseItem = /* @__PURE__ */ _export_sfc(_sfc_main$1J, [["__file", "collapse-item.vue"]]); - - const ElCollapse = withInstall(Collapse, { - CollapseItem - }); - const ElCollapseItem = withNoopInstall(CollapseItem); - - const alphaSliderProps = buildProps({ - color: { - type: definePropType(Object), - required: true - }, - vertical: { - type: Boolean, - default: false - } - }); - - let isDragging = false; - function draggable(element, options) { - if (!isClient) - return; - const moveFn = function(event) { - var _a; - (_a = options.drag) == null ? void 0 : _a.call(options, event); - }; - const upFn = function(event) { - var _a; - document.removeEventListener("mousemove", moveFn); - document.removeEventListener("mouseup", upFn); - document.removeEventListener("touchmove", moveFn); - document.removeEventListener("touchend", upFn); - document.onselectstart = null; - document.ondragstart = null; - isDragging = false; - (_a = options.end) == null ? void 0 : _a.call(options, event); - }; - const downFn = function(event) { - var _a; - if (isDragging) - return; - event.preventDefault(); - document.onselectstart = () => false; - document.ondragstart = () => false; - document.addEventListener("mousemove", moveFn); - document.addEventListener("mouseup", upFn); - document.addEventListener("touchmove", moveFn); - document.addEventListener("touchend", upFn); - isDragging = true; - (_a = options.start) == null ? void 0 : _a.call(options, event); - }; - element.addEventListener("mousedown", downFn); - element.addEventListener("touchstart", downFn, { passive: false }); - } - - const useAlphaSlider = (props) => { - const instance = vue.getCurrentInstance(); - const { t } = useLocale(); - const thumb = vue.shallowRef(); - const bar = vue.shallowRef(); - const alpha = vue.computed(() => props.color.get("alpha")); - const alphaLabel = vue.computed(() => t("el.colorpicker.alphaLabel")); - function handleClick(event) { - var _a; - const target = event.target; - if (target !== thumb.value) { - handleDrag(event); - } - (_a = thumb.value) == null ? void 0 : _a.focus(); - } - function handleDrag(event) { - if (!bar.value || !thumb.value) - return; - const el = instance.vnode.el; - const rect = el.getBoundingClientRect(); - const { clientX, clientY } = getClientXY(event); - if (!props.vertical) { - let left = clientX - rect.left; - left = Math.max(thumb.value.offsetWidth / 2, left); - left = Math.min(left, rect.width - thumb.value.offsetWidth / 2); - props.color.set("alpha", Math.round((left - thumb.value.offsetWidth / 2) / (rect.width - thumb.value.offsetWidth) * 100)); - } else { - let top = clientY - rect.top; - top = Math.max(thumb.value.offsetHeight / 2, top); - top = Math.min(top, rect.height - thumb.value.offsetHeight / 2); - props.color.set("alpha", Math.round((top - thumb.value.offsetHeight / 2) / (rect.height - thumb.value.offsetHeight) * 100)); - } - } - function handleKeydown(event) { - const { code, shiftKey } = event; - const step = shiftKey ? 10 : 1; - switch (code) { - case EVENT_CODE.left: - case EVENT_CODE.down: - event.preventDefault(); - event.stopPropagation(); - incrementPosition(-step); - break; - case EVENT_CODE.right: - case EVENT_CODE.up: - event.preventDefault(); - event.stopPropagation(); - incrementPosition(step); - break; - } - } - function incrementPosition(step) { - let next = alpha.value + step; - next = next < 0 ? 0 : next > 100 ? 100 : next; - props.color.set("alpha", next); - } - return { - thumb, - bar, - alpha, - alphaLabel, - handleDrag, - handleClick, - handleKeydown - }; - }; - const useAlphaSliderDOM = (props, { - bar, - thumb, - handleDrag - }) => { - const instance = vue.getCurrentInstance(); - const ns = useNamespace("color-alpha-slider"); - const thumbLeft = vue.ref(0); - const thumbTop = vue.ref(0); - const background = vue.ref(); - function getThumbLeft() { - if (!thumb.value) - return 0; - if (props.vertical) - return 0; - const el = instance.vnode.el; - const alpha = props.color.get("alpha"); - if (!el) - return 0; - return Math.round(alpha * (el.offsetWidth - thumb.value.offsetWidth / 2) / 100); - } - function getThumbTop() { - if (!thumb.value) - return 0; - const el = instance.vnode.el; - if (!props.vertical) - return 0; - const alpha = props.color.get("alpha"); - if (!el) - return 0; - return Math.round(alpha * (el.offsetHeight - thumb.value.offsetHeight / 2) / 100); - } - function getBackground() { - if (props.color && props.color.value) { - const { r, g, b } = props.color.toRgb(); - return `linear-gradient(to right, rgba(${r}, ${g}, ${b}, 0) 0%, rgba(${r}, ${g}, ${b}, 1) 100%)`; - } - return ""; - } - function update() { - thumbLeft.value = getThumbLeft(); - thumbTop.value = getThumbTop(); - background.value = getBackground(); - } - vue.onMounted(() => { - if (!bar.value || !thumb.value) - return; - const dragConfig = { - drag: (event) => { - handleDrag(event); - }, - end: (event) => { - handleDrag(event); - } - }; - draggable(bar.value, dragConfig); - draggable(thumb.value, dragConfig); - update(); - }); - vue.watch(() => props.color.get("alpha"), () => update()); - vue.watch(() => props.color.value, () => update()); - const rootKls = vue.computed(() => [ns.b(), ns.is("vertical", props.vertical)]); - const barKls = vue.computed(() => ns.e("bar")); - const thumbKls = vue.computed(() => ns.e("thumb")); - const barStyle = vue.computed(() => ({ background: background.value })); - const thumbStyle = vue.computed(() => ({ - left: addUnit(thumbLeft.value), - top: addUnit(thumbTop.value) - })); - return { rootKls, barKls, barStyle, thumbKls, thumbStyle, update }; - }; - - const COMPONENT_NAME$d = "ElColorAlphaSlider"; - const __default__$1a = vue.defineComponent({ - name: COMPONENT_NAME$d - }); - const _sfc_main$1I = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1a, - props: alphaSliderProps, - setup(__props, { expose }) { - const props = __props; - const { - alpha, - alphaLabel, - bar, - thumb, - handleDrag, - handleClick, - handleKeydown - } = useAlphaSlider(props); - const { rootKls, barKls, barStyle, thumbKls, thumbStyle, update } = useAlphaSliderDOM(props, { - bar, - thumb, - handleDrag - }); - expose({ - update, - bar, - thumb - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(rootKls)) - }, [ - vue.createElementVNode("div", { - ref_key: "bar", - ref: bar, - class: vue.normalizeClass(vue.unref(barKls)), - style: vue.normalizeStyle(vue.unref(barStyle)), - onClick: vue.unref(handleClick) - }, null, 14, ["onClick"]), - vue.createElementVNode("div", { - ref_key: "thumb", - ref: thumb, - class: vue.normalizeClass(vue.unref(thumbKls)), - style: vue.normalizeStyle(vue.unref(thumbStyle)), - "aria-label": vue.unref(alphaLabel), - "aria-valuenow": vue.unref(alpha), - "aria-orientation": _ctx.vertical ? "vertical" : "horizontal", - "aria-valuemin": "0", - "aria-valuemax": "100", - role: "slider", - tabindex: "0", - onKeydown: vue.unref(handleKeydown) - }, null, 46, ["aria-label", "aria-valuenow", "aria-orientation", "onKeydown"]) - ], 2); - }; - } - }); - var AlphaSlider = /* @__PURE__ */ _export_sfc(_sfc_main$1I, [["__file", "alpha-slider.vue"]]); - - const _sfc_main$1H = vue.defineComponent({ - name: "ElColorHueSlider", - props: { - color: { - type: Object, - required: true - }, - vertical: Boolean - }, - setup(props) { - const ns = useNamespace("color-hue-slider"); - const instance = vue.getCurrentInstance(); - const thumb = vue.ref(); - const bar = vue.ref(); - const thumbLeft = vue.ref(0); - const thumbTop = vue.ref(0); - const hueValue = vue.computed(() => { - return props.color.get("hue"); - }); - vue.watch(() => hueValue.value, () => { - update(); - }); - function handleClick(event) { - const target = event.target; - if (target !== thumb.value) { - handleDrag(event); - } - } - function handleDrag(event) { - if (!bar.value || !thumb.value) - return; - const el = instance.vnode.el; - const rect = el.getBoundingClientRect(); - const { clientX, clientY } = getClientXY(event); - let hue; - if (!props.vertical) { - let left = clientX - rect.left; - left = Math.min(left, rect.width - thumb.value.offsetWidth / 2); - left = Math.max(thumb.value.offsetWidth / 2, left); - hue = Math.round((left - thumb.value.offsetWidth / 2) / (rect.width - thumb.value.offsetWidth) * 360); - } else { - let top = clientY - rect.top; - top = Math.min(top, rect.height - thumb.value.offsetHeight / 2); - top = Math.max(thumb.value.offsetHeight / 2, top); - hue = Math.round((top - thumb.value.offsetHeight / 2) / (rect.height - thumb.value.offsetHeight) * 360); - } - props.color.set("hue", hue); - } - function getThumbLeft() { - if (!thumb.value) - return 0; - const el = instance.vnode.el; - if (props.vertical) - return 0; - const hue = props.color.get("hue"); - if (!el) - return 0; - return Math.round(hue * (el.offsetWidth - thumb.value.offsetWidth / 2) / 360); - } - function getThumbTop() { - if (!thumb.value) - return 0; - const el = instance.vnode.el; - if (!props.vertical) - return 0; - const hue = props.color.get("hue"); - if (!el) - return 0; - return Math.round(hue * (el.offsetHeight - thumb.value.offsetHeight / 2) / 360); - } - function update() { - thumbLeft.value = getThumbLeft(); - thumbTop.value = getThumbTop(); - } - vue.onMounted(() => { - if (!bar.value || !thumb.value) - return; - const dragConfig = { - drag: (event) => { - handleDrag(event); - }, - end: (event) => { - handleDrag(event); - } - }; - draggable(bar.value, dragConfig); - draggable(thumb.value, dragConfig); - update(); - }); - return { - bar, - thumb, - thumbLeft, - thumbTop, - hueValue, - handleClick, - update, - ns - }; - } - }); - function _sfc_render$q(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([_ctx.ns.b(), _ctx.ns.is("vertical", _ctx.vertical)]) - }, [ - vue.createElementVNode("div", { - ref: "bar", - class: vue.normalizeClass(_ctx.ns.e("bar")), - onClick: _ctx.handleClick - }, null, 10, ["onClick"]), - vue.createElementVNode("div", { - ref: "thumb", - class: vue.normalizeClass(_ctx.ns.e("thumb")), - style: vue.normalizeStyle({ - left: _ctx.thumbLeft + "px", - top: _ctx.thumbTop + "px" - }) - }, null, 6) - ], 2); - } - var HueSlider = /* @__PURE__ */ _export_sfc(_sfc_main$1H, [["render", _sfc_render$q], ["__file", "hue-slider.vue"]]); - - const colorPickerProps = buildProps({ - modelValue: String, - id: String, - showAlpha: Boolean, - colorFormat: String, - disabled: Boolean, - size: useSizeProp, - popperClass: { - type: String, - default: "" - }, - tabindex: { - type: [String, Number], - default: 0 - }, - teleported: useTooltipContentProps.teleported, - predefine: { - type: definePropType(Array) - }, - validateEvent: { - type: Boolean, - default: true - }, - ...useAriaProps(["ariaLabel"]) - }); - const colorPickerEmits = { - [UPDATE_MODEL_EVENT]: (val) => isString$1(val) || isNil(val), - [CHANGE_EVENT]: (val) => isString$1(val) || isNil(val), - activeChange: (val) => isString$1(val) || isNil(val), - focus: (evt) => evt instanceof FocusEvent, - blur: (evt) => evt instanceof FocusEvent - }; - const colorPickerContextKey = Symbol("colorPickerContextKey"); - - const hsv2hsl = function(hue, sat, val) { - return [ - hue, - sat * val / ((hue = (2 - sat) * val) < 1 ? hue : 2 - hue) || 0, - hue / 2 - ]; - }; - const isOnePointZero = function(n) { - return isString$1(n) && n.includes(".") && Number.parseFloat(n) === 1; - }; - const isPercentage = function(n) { - return isString$1(n) && n.includes("%"); - }; - const bound01 = function(value, max) { - if (isOnePointZero(value)) - value = "100%"; - const processPercent = isPercentage(value); - value = Math.min(max, Math.max(0, Number.parseFloat(`${value}`))); - if (processPercent) { - value = Number.parseInt(`${value * max}`, 10) / 100; - } - if (Math.abs(value - max) < 1e-6) { - return 1; - } - return value % max / Number.parseFloat(max); - }; - const INT_HEX_MAP = { - 10: "A", - 11: "B", - 12: "C", - 13: "D", - 14: "E", - 15: "F" - }; - const hexOne = (value) => { - value = Math.min(Math.round(value), 255); - const high = Math.floor(value / 16); - const low = value % 16; - return `${INT_HEX_MAP[high] || high}${INT_HEX_MAP[low] || low}`; - }; - const toHex = function({ r, g, b }) { - if (Number.isNaN(+r) || Number.isNaN(+g) || Number.isNaN(+b)) - return ""; - return `#${hexOne(r)}${hexOne(g)}${hexOne(b)}`; - }; - const HEX_INT_MAP = { - A: 10, - B: 11, - C: 12, - D: 13, - E: 14, - F: 15 - }; - const parseHexChannel = function(hex) { - if (hex.length === 2) { - return (HEX_INT_MAP[hex[0].toUpperCase()] || +hex[0]) * 16 + (HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]); - } - return HEX_INT_MAP[hex[1].toUpperCase()] || +hex[1]; - }; - const hsl2hsv = function(hue, sat, light) { - sat = sat / 100; - light = light / 100; - let smin = sat; - const lmin = Math.max(light, 0.01); - light *= 2; - sat *= light <= 1 ? light : 2 - light; - smin *= lmin <= 1 ? lmin : 2 - lmin; - const v = (light + sat) / 2; - const sv = light === 0 ? 2 * smin / (lmin + smin) : 2 * sat / (light + sat); - return { - h: hue, - s: sv * 100, - v: v * 100 - }; - }; - const rgb2hsv = (r, g, b) => { - r = bound01(r, 255); - g = bound01(g, 255); - b = bound01(b, 255); - const max = Math.max(r, g, b); - const min = Math.min(r, g, b); - let h; - const v = max; - const d = max - min; - const s = max === 0 ? 0 : d / max; - if (max === min) { - h = 0; - } else { - switch (max) { - case r: { - h = (g - b) / d + (g < b ? 6 : 0); - break; - } - case g: { - h = (b - r) / d + 2; - break; - } - case b: { - h = (r - g) / d + 4; - break; - } - } - h /= 6; - } - return { h: h * 360, s: s * 100, v: v * 100 }; - }; - const hsv2rgb = function(h, s, v) { - h = bound01(h, 360) * 6; - s = bound01(s, 100); - v = bound01(v, 100); - const i = Math.floor(h); - const f = h - i; - const p = v * (1 - s); - const q = v * (1 - f * s); - const t = v * (1 - (1 - f) * s); - const mod = i % 6; - const r = [v, q, p, p, t, v][mod]; - const g = [t, v, v, q, p, p][mod]; - const b = [p, p, t, v, v, q][mod]; - return { - r: Math.round(r * 255), - g: Math.round(g * 255), - b: Math.round(b * 255) - }; - }; - class Color { - constructor(options = {}) { - this._hue = 0; - this._saturation = 100; - this._value = 100; - this._alpha = 100; - this.enableAlpha = false; - this.format = "hex"; - this.value = ""; - for (const option in options) { - if (hasOwn(options, option)) { - this[option] = options[option]; - } - } - if (options.value) { - this.fromString(options.value); - } else { - this.doOnChange(); - } - } - set(prop, value) { - if (arguments.length === 1 && typeof prop === "object") { - for (const p in prop) { - if (hasOwn(prop, p)) { - this.set(p, prop[p]); - } - } - return; - } - this[`_${prop}`] = value; - this.doOnChange(); - } - get(prop) { - if (prop === "alpha") { - return Math.floor(this[`_${prop}`]); - } - return this[`_${prop}`]; - } - toRgb() { - return hsv2rgb(this._hue, this._saturation, this._value); - } - fromString(value) { - if (!value) { - this._hue = 0; - this._saturation = 100; - this._value = 100; - this.doOnChange(); - return; - } - const fromHSV = (h, s, v) => { - this._hue = Math.max(0, Math.min(360, h)); - this._saturation = Math.max(0, Math.min(100, s)); - this._value = Math.max(0, Math.min(100, v)); - this.doOnChange(); - }; - if (value.includes("hsl")) { - const parts = value.replace(/hsla|hsl|\(|\)/gm, "").split(/\s|,/g).filter((val) => val !== "").map((val, index) => index > 2 ? Number.parseFloat(val) : Number.parseInt(val, 10)); - if (parts.length === 4) { - this._alpha = Number.parseFloat(parts[3]) * 100; - } else if (parts.length === 3) { - this._alpha = 100; - } - if (parts.length >= 3) { - const { h, s, v } = hsl2hsv(parts[0], parts[1], parts[2]); - fromHSV(h, s, v); - } - } else if (value.includes("hsv")) { - const parts = value.replace(/hsva|hsv|\(|\)/gm, "").split(/\s|,/g).filter((val) => val !== "").map((val, index) => index > 2 ? Number.parseFloat(val) : Number.parseInt(val, 10)); - if (parts.length === 4) { - this._alpha = Number.parseFloat(parts[3]) * 100; - } else if (parts.length === 3) { - this._alpha = 100; - } - if (parts.length >= 3) { - fromHSV(parts[0], parts[1], parts[2]); - } - } else if (value.includes("rgb")) { - const parts = value.replace(/rgba|rgb|\(|\)/gm, "").split(/\s|,/g).filter((val) => val !== "").map((val, index) => index > 2 ? Number.parseFloat(val) : Number.parseInt(val, 10)); - if (parts.length === 4) { - this._alpha = Number.parseFloat(parts[3]) * 100; - } else if (parts.length === 3) { - this._alpha = 100; - } - if (parts.length >= 3) { - const { h, s, v } = rgb2hsv(parts[0], parts[1], parts[2]); - fromHSV(h, s, v); - } - } else if (value.includes("#")) { - const hex = value.replace("#", "").trim(); - if (!/^[0-9a-fA-F]{3}$|^[0-9a-fA-F]{6}$|^[0-9a-fA-F]{8}$/.test(hex)) - return; - let r, g, b; - if (hex.length === 3) { - r = parseHexChannel(hex[0] + hex[0]); - g = parseHexChannel(hex[1] + hex[1]); - b = parseHexChannel(hex[2] + hex[2]); - } else if (hex.length === 6 || hex.length === 8) { - r = parseHexChannel(hex.slice(0, 2)); - g = parseHexChannel(hex.slice(2, 4)); - b = parseHexChannel(hex.slice(4, 6)); - } - if (hex.length === 8) { - this._alpha = parseHexChannel(hex.slice(6)) / 255 * 100; - } else if (hex.length === 3 || hex.length === 6) { - this._alpha = 100; - } - const { h, s, v } = rgb2hsv(r, g, b); - fromHSV(h, s, v); - } - } - compare(color) { - return Math.abs(color._hue - this._hue) < 2 && Math.abs(color._saturation - this._saturation) < 1 && Math.abs(color._value - this._value) < 1 && Math.abs(color._alpha - this._alpha) < 1; - } - doOnChange() { - const { _hue, _saturation, _value, _alpha, format } = this; - if (this.enableAlpha) { - switch (format) { - case "hsl": { - const hsl = hsv2hsl(_hue, _saturation / 100, _value / 100); - this.value = `hsla(${_hue}, ${Math.round(hsl[1] * 100)}%, ${Math.round(hsl[2] * 100)}%, ${this.get("alpha") / 100})`; - break; - } - case "hsv": { - this.value = `hsva(${_hue}, ${Math.round(_saturation)}%, ${Math.round(_value)}%, ${this.get("alpha") / 100})`; - break; - } - case "hex": { - this.value = `${toHex(hsv2rgb(_hue, _saturation, _value))}${hexOne(_alpha * 255 / 100)}`; - break; - } - default: { - const { r, g, b } = hsv2rgb(_hue, _saturation, _value); - this.value = `rgba(${r}, ${g}, ${b}, ${this.get("alpha") / 100})`; - } - } - } else { - switch (format) { - case "hsl": { - const hsl = hsv2hsl(_hue, _saturation / 100, _value / 100); - this.value = `hsl(${_hue}, ${Math.round(hsl[1] * 100)}%, ${Math.round(hsl[2] * 100)}%)`; - break; - } - case "hsv": { - this.value = `hsv(${_hue}, ${Math.round(_saturation)}%, ${Math.round(_value)}%)`; - break; - } - case "rgb": { - const { r, g, b } = hsv2rgb(_hue, _saturation, _value); - this.value = `rgb(${r}, ${g}, ${b})`; - break; - } - default: { - this.value = toHex(hsv2rgb(_hue, _saturation, _value)); - } - } - } - } - } - - const _sfc_main$1G = vue.defineComponent({ - props: { - colors: { - type: Array, - required: true - }, - color: { - type: Object, - required: true - }, - enableAlpha: { - type: Boolean, - required: true - } - }, - setup(props) { - const ns = useNamespace("color-predefine"); - const { currentColor } = vue.inject(colorPickerContextKey); - const rgbaColors = vue.ref(parseColors(props.colors, props.color)); - vue.watch(() => currentColor.value, (val) => { - const color = new Color(); - color.fromString(val); - rgbaColors.value.forEach((item) => { - item.selected = color.compare(item); - }); - }); - vue.watchEffect(() => { - rgbaColors.value = parseColors(props.colors, props.color); - }); - function handleSelect(index) { - props.color.fromString(props.colors[index]); - } - function parseColors(colors, color) { - return colors.map((value) => { - const c = new Color(); - c.enableAlpha = props.enableAlpha; - c.format = "rgba"; - c.fromString(value); - c.selected = c.value === color.value; - return c; - }); - } - return { - rgbaColors, - handleSelect, - ns - }; - } - }); - function _sfc_render$p(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(_ctx.ns.b()) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("colors")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.rgbaColors, (item, index) => { - return vue.openBlock(), vue.createElementBlock("div", { - key: _ctx.colors[index], - class: vue.normalizeClass([ - _ctx.ns.e("color-selector"), - _ctx.ns.is("alpha", item._alpha < 100), - { selected: item.selected } - ]), - onClick: ($event) => _ctx.handleSelect(index) - }, [ - vue.createElementVNode("div", { - style: vue.normalizeStyle({ backgroundColor: item.value }) - }, null, 4) - ], 10, ["onClick"]); - }), 128)) - ], 2) - ], 2); - } - var Predefine = /* @__PURE__ */ _export_sfc(_sfc_main$1G, [["render", _sfc_render$p], ["__file", "predefine.vue"]]); - - const _sfc_main$1F = vue.defineComponent({ - name: "ElSlPanel", - props: { - color: { - type: Object, - required: true - } - }, - setup(props) { - const ns = useNamespace("color-svpanel"); - const instance = vue.getCurrentInstance(); - const cursorTop = vue.ref(0); - const cursorLeft = vue.ref(0); - const background = vue.ref("hsl(0, 100%, 50%)"); - const colorValue = vue.computed(() => { - const hue = props.color.get("hue"); - const value = props.color.get("value"); - return { hue, value }; - }); - function update() { - const saturation = props.color.get("saturation"); - const value = props.color.get("value"); - const el = instance.vnode.el; - const { clientWidth: width, clientHeight: height } = el; - cursorLeft.value = saturation * width / 100; - cursorTop.value = (100 - value) * height / 100; - background.value = `hsl(${props.color.get("hue")}, 100%, 50%)`; - } - function handleDrag(event) { - const el = instance.vnode.el; - const rect = el.getBoundingClientRect(); - const { clientX, clientY } = getClientXY(event); - let left = clientX - rect.left; - let top = clientY - rect.top; - left = Math.max(0, left); - left = Math.min(left, rect.width); - top = Math.max(0, top); - top = Math.min(top, rect.height); - cursorLeft.value = left; - cursorTop.value = top; - props.color.set({ - saturation: left / rect.width * 100, - value: 100 - top / rect.height * 100 - }); - } - vue.watch(() => colorValue.value, () => { - update(); - }); - vue.onMounted(() => { - draggable(instance.vnode.el, { - drag: (event) => { - handleDrag(event); - }, - end: (event) => { - handleDrag(event); - } - }); - update(); - }); - return { - cursorTop, - cursorLeft, - background, - colorValue, - handleDrag, - update, - ns - }; - } - }); - function _sfc_render$o(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(_ctx.ns.b()), - style: vue.normalizeStyle({ - backgroundColor: _ctx.background - }) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("white")) - }, null, 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("black")) - }, null, 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("cursor")), - style: vue.normalizeStyle({ - top: _ctx.cursorTop + "px", - left: _ctx.cursorLeft + "px" - }) - }, [ - vue.createElementVNode("div") - ], 6) - ], 6); - } - var SvPanel = /* @__PURE__ */ _export_sfc(_sfc_main$1F, [["render", _sfc_render$o], ["__file", "sv-panel.vue"]]); - - const __default__$19 = vue.defineComponent({ - name: "ElColorPicker" - }); - const _sfc_main$1E = /* @__PURE__ */ vue.defineComponent({ - ...__default__$19, - props: colorPickerProps, - emits: colorPickerEmits, - setup(__props, { expose, emit }) { - const props = __props; - const { t } = useLocale(); - const ns = useNamespace("color"); - const { formItem } = useFormItem(); - const colorSize = useFormSize(); - const colorDisabled = useFormDisabled(); - const { inputId: buttonId, isLabeledByFormItem } = useFormItemInputId(props, { - formItemContext: formItem - }); - const hue = vue.ref(); - const sv = vue.ref(); - const alpha = vue.ref(); - const popper = vue.ref(); - const triggerRef = vue.ref(); - const inputRef = vue.ref(); - const { isFocused, handleFocus, handleBlur } = useFocusController(triggerRef, { - beforeFocus() { - return colorDisabled.value; - }, - beforeBlur(event) { - var _a; - return (_a = popper.value) == null ? void 0 : _a.isFocusInsideContent(event); - }, - afterBlur() { - setShowPicker(false); - resetColor(); - } - }); - let shouldActiveChange = true; - const color = vue.reactive(new Color({ - enableAlpha: props.showAlpha, - format: props.colorFormat || "", - value: props.modelValue - })); - const showPicker = vue.ref(false); - const showPanelColor = vue.ref(false); - const customInput = vue.ref(""); - const displayedColor = vue.computed(() => { - if (!props.modelValue && !showPanelColor.value) { - return "transparent"; - } - return displayedRgb(color, props.showAlpha); - }); - const currentColor = vue.computed(() => { - return !props.modelValue && !showPanelColor.value ? "" : color.value; - }); - const buttonAriaLabel = vue.computed(() => { - return !isLabeledByFormItem.value ? props.ariaLabel || t("el.colorpicker.defaultLabel") : void 0; - }); - const buttonAriaLabelledby = vue.computed(() => { - return isLabeledByFormItem.value ? formItem == null ? void 0 : formItem.labelId : void 0; - }); - const btnKls = vue.computed(() => { - return [ - ns.b("picker"), - ns.is("disabled", colorDisabled.value), - ns.bm("picker", colorSize.value), - ns.is("focused", isFocused.value) - ]; - }); - function displayedRgb(color2, showAlpha) { - if (!(color2 instanceof Color)) { - throw new TypeError("color should be instance of _color Class"); - } - const { r, g, b } = color2.toRgb(); - return showAlpha ? `rgba(${r}, ${g}, ${b}, ${color2.get("alpha") / 100})` : `rgb(${r}, ${g}, ${b})`; - } - function setShowPicker(value) { - showPicker.value = value; - } - const debounceSetShowPicker = debounce(setShowPicker, 100, { leading: true }); - function show() { - if (colorDisabled.value) - return; - setShowPicker(true); - } - function hide() { - debounceSetShowPicker(false); - resetColor(); - } - function resetColor() { - vue.nextTick(() => { - if (props.modelValue) { - color.fromString(props.modelValue); - } else { - color.value = ""; - vue.nextTick(() => { - showPanelColor.value = false; - }); - } - }); - } - function handleTrigger() { - if (colorDisabled.value) - return; - if (showPicker.value) { - resetColor(); - } - debounceSetShowPicker(!showPicker.value); - } - function handleConfirm() { - color.fromString(customInput.value); - } - function confirmValue() { - const value = color.value; - emit(UPDATE_MODEL_EVENT, value); - emit("change", value); - if (props.validateEvent) { - formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); - } - debounceSetShowPicker(false); - vue.nextTick(() => { - const newColor = new Color({ - enableAlpha: props.showAlpha, - format: props.colorFormat || "", - value: props.modelValue - }); - if (!color.compare(newColor)) { - resetColor(); - } - }); - } - function clear() { - debounceSetShowPicker(false); - emit(UPDATE_MODEL_EVENT, null); - emit("change", null); - if (props.modelValue !== null && props.validateEvent) { - formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); - } - resetColor(); - } - function handleClickOutside() { - if (!showPicker.value) - return; - hide(); - isFocused.value && focus(); - } - function handleEsc(event) { - event.preventDefault(); - event.stopPropagation(); - setShowPicker(false); - resetColor(); - } - function handleKeyDown(event) { - switch (event.code) { - case EVENT_CODE.enter: - case EVENT_CODE.numpadEnter: - case EVENT_CODE.space: - event.preventDefault(); - event.stopPropagation(); - show(); - inputRef.value.focus(); - break; - case EVENT_CODE.esc: - handleEsc(event); - break; - } - } - function focus() { - triggerRef.value.focus(); - } - function blur() { - triggerRef.value.blur(); - } - vue.onMounted(() => { - if (props.modelValue) { - customInput.value = currentColor.value; - } - }); - vue.watch(() => props.modelValue, (newVal) => { - if (!newVal) { - showPanelColor.value = false; - } else if (newVal && newVal !== color.value) { - shouldActiveChange = false; - color.fromString(newVal); - } - }); - vue.watch(() => [props.colorFormat, props.showAlpha], () => { - color.enableAlpha = props.showAlpha; - color.format = props.colorFormat || color.format; - color.doOnChange(); - emit(UPDATE_MODEL_EVENT, color.value); - }); - vue.watch(() => currentColor.value, (val) => { - customInput.value = val; - shouldActiveChange && emit("activeChange", val); - shouldActiveChange = true; - }); - vue.watch(() => color.value, () => { - if (!props.modelValue && !showPanelColor.value) { - showPanelColor.value = true; - } - }); - vue.watch(() => showPicker.value, () => { - vue.nextTick(() => { - var _a, _b, _c; - (_a = hue.value) == null ? void 0 : _a.update(); - (_b = sv.value) == null ? void 0 : _b.update(); - (_c = alpha.value) == null ? void 0 : _c.update(); - }); - }); - vue.provide(colorPickerContextKey, { - currentColor - }); - expose({ - color, - show, - hide, - focus, - blur - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTooltip), { - ref_key: "popper", - ref: popper, - visible: showPicker.value, - "show-arrow": false, - "fallback-placements": ["bottom", "top", "right", "left"], - offset: 0, - "gpu-acceleration": false, - "popper-class": [vue.unref(ns).be("picker", "panel"), vue.unref(ns).b("dropdown"), _ctx.popperClass], - "stop-popper-mouse-event": false, - effect: "light", - trigger: "click", - teleported: _ctx.teleported, - transition: `${vue.unref(ns).namespace.value}-zoom-in-top`, - persistent: "", - onHide: ($event) => setShowPicker(false) - }, { - content: vue.withCtx(() => [ - vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - onKeydown: vue.withKeys(handleEsc, ["esc"]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).be("dropdown", "main-wrapper")) - }, [ - vue.createVNode(HueSlider, { - ref_key: "hue", - ref: hue, - class: "hue-slider", - color: vue.unref(color), - vertical: "" - }, null, 8, ["color"]), - vue.createVNode(SvPanel, { - ref_key: "sv", - ref: sv, - color: vue.unref(color) - }, null, 8, ["color"]) - ], 2), - _ctx.showAlpha ? (vue.openBlock(), vue.createBlock(AlphaSlider, { - key: 0, - ref_key: "alpha", - ref: alpha, - color: vue.unref(color) - }, null, 8, ["color"])) : vue.createCommentVNode("v-if", true), - _ctx.predefine ? (vue.openBlock(), vue.createBlock(Predefine, { - key: 1, - ref: "predefine", - "enable-alpha": _ctx.showAlpha, - color: vue.unref(color), - colors: _ctx.predefine - }, null, 8, ["enable-alpha", "color", "colors"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).be("dropdown", "btns")) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(ns).be("dropdown", "value")) - }, [ - vue.createVNode(vue.unref(ElInput), { - ref_key: "inputRef", - ref: inputRef, - modelValue: customInput.value, - "onUpdate:modelValue": ($event) => customInput.value = $event, - "validate-event": false, - size: "small", - onKeyup: vue.withKeys(handleConfirm, ["enter"]), - onBlur: handleConfirm - }, null, 8, ["modelValue", "onUpdate:modelValue", "onKeyup"]) - ], 2), - vue.createVNode(vue.unref(ElButton), { - class: vue.normalizeClass(vue.unref(ns).be("dropdown", "link-btn")), - text: "", - size: "small", - onClick: clear - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(t)("el.colorpicker.clear")), 1) - ]), - _: 1 - }, 8, ["class"]), - vue.createVNode(vue.unref(ElButton), { - plain: "", - size: "small", - class: vue.normalizeClass(vue.unref(ns).be("dropdown", "btn")), - onClick: confirmValue - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(t)("el.colorpicker.confirm")), 1) - ]), - _: 1 - }, 8, ["class"]) - ], 2) - ], 40, ["onKeydown"])), [ - [vue.unref(ClickOutside), handleClickOutside, triggerRef.value] - ]) - ]), - default: vue.withCtx(() => [ - vue.createElementVNode("div", vue.mergeProps({ - id: vue.unref(buttonId), - ref_key: "triggerRef", - ref: triggerRef - }, _ctx.$attrs, { - class: vue.unref(btnKls), - role: "button", - "aria-label": vue.unref(buttonAriaLabel), - "aria-labelledby": vue.unref(buttonAriaLabelledby), - "aria-description": vue.unref(t)("el.colorpicker.description", { color: _ctx.modelValue || "" }), - "aria-disabled": vue.unref(colorDisabled), - tabindex: vue.unref(colorDisabled) ? -1 : _ctx.tabindex, - onKeydown: handleKeyDown, - onFocus: vue.unref(handleFocus), - onBlur: vue.unref(handleBlur) - }), [ - vue.unref(colorDisabled) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).be("picker", "mask")) - }, null, 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).be("picker", "trigger")), - onClick: handleTrigger - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass([vue.unref(ns).be("picker", "color"), vue.unref(ns).is("alpha", _ctx.showAlpha)]) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(ns).be("picker", "color-inner")), - style: vue.normalizeStyle({ - backgroundColor: vue.unref(displayedColor) - }) - }, [ - vue.withDirectives(vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass([vue.unref(ns).be("picker", "icon"), vue.unref(ns).is("icon-arrow-down")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_down_default)) - ]), - _: 1 - }, 8, ["class"]), [ - [vue.vShow, _ctx.modelValue || showPanelColor.value] - ]), - vue.withDirectives(vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass([vue.unref(ns).be("picker", "empty"), vue.unref(ns).is("icon-close")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(close_default)) - ]), - _: 1 - }, 8, ["class"]), [ - [vue.vShow, !_ctx.modelValue && !showPanelColor.value] - ]) - ], 6) - ], 2) - ], 2) - ], 16, ["id", "aria-label", "aria-labelledby", "aria-description", "aria-disabled", "tabindex", "onFocus", "onBlur"]) - ]), - _: 1 - }, 8, ["visible", "popper-class", "teleported", "transition", "onHide"]); - }; - } - }); - var ColorPicker = /* @__PURE__ */ _export_sfc(_sfc_main$1E, [["__file", "color-picker.vue"]]); - - const ElColorPicker = withInstall(ColorPicker); - - const __default__$18 = vue.defineComponent({ - name: "ElContainer" - }); - const _sfc_main$1D = /* @__PURE__ */ vue.defineComponent({ - ...__default__$18, - props: { - direction: { - type: String - } - }, - setup(__props) { - const props = __props; - const slots = vue.useSlots(); - const ns = useNamespace("container"); - const isVertical = vue.computed(() => { - if (props.direction === "vertical") { - return true; - } else if (props.direction === "horizontal") { - return false; - } - if (slots && slots.default) { - const vNodes = slots.default(); - return vNodes.some((vNode) => { - const tag = vNode.type.name; - return tag === "ElHeader" || tag === "ElFooter"; - }); - } else { - return false; - } - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("section", { - class: vue.normalizeClass([vue.unref(ns).b(), vue.unref(ns).is("vertical", vue.unref(isVertical))]) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2); - }; - } - }); - var Container = /* @__PURE__ */ _export_sfc(_sfc_main$1D, [["__file", "container.vue"]]); - - const __default__$17 = vue.defineComponent({ - name: "ElAside" - }); - const _sfc_main$1C = /* @__PURE__ */ vue.defineComponent({ - ...__default__$17, - props: { - width: { - type: String, - default: null - } - }, - setup(__props) { - const props = __props; - const ns = useNamespace("aside"); - const style = vue.computed(() => props.width ? ns.cssVarBlock({ width: props.width }) : {}); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("aside", { - class: vue.normalizeClass(vue.unref(ns).b()), - style: vue.normalizeStyle(vue.unref(style)) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 6); - }; - } - }); - var Aside = /* @__PURE__ */ _export_sfc(_sfc_main$1C, [["__file", "aside.vue"]]); - - const __default__$16 = vue.defineComponent({ - name: "ElFooter" - }); - const _sfc_main$1B = /* @__PURE__ */ vue.defineComponent({ - ...__default__$16, - props: { - height: { - type: String, - default: null - } - }, - setup(__props) { - const props = __props; - const ns = useNamespace("footer"); - const style = vue.computed(() => props.height ? ns.cssVarBlock({ height: props.height }) : {}); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("footer", { - class: vue.normalizeClass(vue.unref(ns).b()), - style: vue.normalizeStyle(vue.unref(style)) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 6); - }; - } - }); - var Footer$2 = /* @__PURE__ */ _export_sfc(_sfc_main$1B, [["__file", "footer.vue"]]); - - const __default__$15 = vue.defineComponent({ - name: "ElHeader" - }); - const _sfc_main$1A = /* @__PURE__ */ vue.defineComponent({ - ...__default__$15, - props: { - height: { - type: String, - default: null - } - }, - setup(__props) { - const props = __props; - const ns = useNamespace("header"); - const style = vue.computed(() => { - return props.height ? ns.cssVarBlock({ - height: props.height - }) : {}; - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("header", { - class: vue.normalizeClass(vue.unref(ns).b()), - style: vue.normalizeStyle(vue.unref(style)) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 6); - }; - } - }); - var Header$1 = /* @__PURE__ */ _export_sfc(_sfc_main$1A, [["__file", "header.vue"]]); - - const __default__$14 = vue.defineComponent({ - name: "ElMain" - }); - const _sfc_main$1z = /* @__PURE__ */ vue.defineComponent({ - ...__default__$14, - setup(__props) { - const ns = useNamespace("main"); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("main", { - class: vue.normalizeClass(vue.unref(ns).b()) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2); - }; - } - }); - var Main = /* @__PURE__ */ _export_sfc(_sfc_main$1z, [["__file", "main.vue"]]); - - const ElContainer = withInstall(Container, { - Aside, - Footer: Footer$2, - Header: Header$1, - Main - }); - const ElAside = withNoopInstall(Aside); - const ElFooter = withNoopInstall(Footer$2); - const ElHeader = withNoopInstall(Header$1); - const ElMain = withNoopInstall(Main); - - var advancedFormat$1 = {exports: {}}; - - (function(module, exports) { - !function(e, t) { - module.exports = t() ; - }(commonjsGlobal, function() { - return function(e, t) { - var r = t.prototype, n = r.format; - r.format = function(e2) { - var t2 = this, r2 = this.$locale(); - if (!this.isValid()) - return n.bind(this)(e2); - var s = this.$utils(), a = (e2 || "YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g, function(e3) { - switch (e3) { - case "Q": - return Math.ceil((t2.$M + 1) / 3); - case "Do": - return r2.ordinal(t2.$D); - case "gggg": - return t2.weekYear(); - case "GGGG": - return t2.isoWeekYear(); - case "wo": - return r2.ordinal(t2.week(), "W"); - case "w": - case "ww": - return s.s(t2.week(), e3 === "w" ? 1 : 2, "0"); - case "W": - case "WW": - return s.s(t2.isoWeek(), e3 === "W" ? 1 : 2, "0"); - case "k": - case "kk": - return s.s(String(t2.$H === 0 ? 24 : t2.$H), e3 === "k" ? 1 : 2, "0"); - case "X": - return Math.floor(t2.$d.getTime() / 1e3); - case "x": - return t2.$d.getTime(); - case "z": - return "[" + t2.offsetName() + "]"; - case "zzz": - return "[" + t2.offsetName("long") + "]"; - default: - return e3; - } - }); - return n.bind(this)(a); - }; - }; - }); - })(advancedFormat$1); - var advancedFormat = advancedFormat$1.exports; - - var weekOfYear$1 = {exports: {}}; - - (function(module, exports) { - !function(e, t) { - module.exports = t() ; - }(commonjsGlobal, function() { - var e = "week", t = "year"; - return function(i, n, r) { - var f = n.prototype; - f.week = function(i2) { - if (i2 === void 0 && (i2 = null), i2 !== null) - return this.add(7 * (i2 - this.week()), "day"); - var n2 = this.$locale().yearStart || 1; - if (this.month() === 11 && this.date() > 25) { - var f2 = r(this).startOf(t).add(1, t).date(n2), s = r(this).endOf(e); - if (f2.isBefore(s)) - return 1; - } - var a = r(this).startOf(t).date(n2).startOf(e).subtract(1, "millisecond"), o = this.diff(a, e, true); - return o < 0 ? r(this).startOf("week").week() : Math.ceil(o); - }, f.weeks = function(e2) { - return e2 === void 0 && (e2 = null), this.week(e2); - }; - }; - }); - })(weekOfYear$1); - var weekOfYear = weekOfYear$1.exports; - - var weekYear$1 = {exports: {}}; - - (function(module, exports) { - !function(e, t) { - module.exports = t() ; - }(commonjsGlobal, function() { - return function(e, t) { - t.prototype.weekYear = function() { - var e2 = this.month(), t2 = this.week(), n = this.year(); - return t2 === 1 && e2 === 11 ? n + 1 : e2 === 0 && t2 >= 52 ? n - 1 : n; - }; - }; - }); - })(weekYear$1); - var weekYear = weekYear$1.exports; - - var dayOfYear$1 = {exports: {}}; - - (function(module, exports) { - !function(e, t) { - module.exports = t() ; - }(commonjsGlobal, function() { - return function(e, t, n) { - t.prototype.dayOfYear = function(e2) { - var t2 = Math.round((n(this).startOf("day") - n(this).startOf("year")) / 864e5) + 1; - return e2 == null ? t2 : this.add(e2 - t2, "day"); - }; - }; - }); - })(dayOfYear$1); - var dayOfYear = dayOfYear$1.exports; - - var isSameOrAfter$1 = {exports: {}}; - - (function(module, exports) { - !function(e, t) { - module.exports = t() ; - }(commonjsGlobal, function() { - return function(e, t) { - t.prototype.isSameOrAfter = function(e2, t2) { - return this.isSame(e2, t2) || this.isAfter(e2, t2); - }; - }; - }); - })(isSameOrAfter$1); - var isSameOrAfter = isSameOrAfter$1.exports; - - var isSameOrBefore$1 = {exports: {}}; - - (function(module, exports) { - !function(e, i) { - module.exports = i() ; - }(commonjsGlobal, function() { - return function(e, i) { - i.prototype.isSameOrBefore = function(e2, i2) { - return this.isSame(e2, i2) || this.isBefore(e2, i2); - }; - }; - }); - })(isSameOrBefore$1); - var isSameOrBefore = isSameOrBefore$1.exports; - - const ROOT_PICKER_INJECTION_KEY = Symbol(); - - const datePickerProps = buildProps({ - ...timePickerDefaultProps, - type: { - type: definePropType(String), - default: "date" - } - }); - - const selectionModes = [ - "date", - "dates", - "year", - "years", - "month", - "months", - "week", - "range" - ]; - const datePickerSharedProps = buildProps({ - disabledDate: { - type: definePropType(Function) - }, - date: { - type: definePropType(Object), - required: true - }, - minDate: { - type: definePropType(Object) - }, - maxDate: { - type: definePropType(Object) - }, - parsedValue: { - type: definePropType([Object, Array]) - }, - rangeState: { - type: definePropType(Object), - default: () => ({ - endDate: null, - selecting: false - }) - } - }); - const panelSharedProps = buildProps({ - type: { - type: definePropType(String), - required: true, - values: datePickTypes - }, - dateFormat: String, - timeFormat: String, - showNow: { - type: Boolean, - default: true - } - }); - const panelRangeSharedProps = buildProps({ - unlinkPanels: Boolean, - parsedValue: { - type: definePropType(Array) - } - }); - const selectionModeWithDefault = (mode) => { - return { - type: String, - values: selectionModes, - default: mode - }; - }; - - const panelDatePickProps = buildProps({ - ...panelSharedProps, - parsedValue: { - type: definePropType([Object, Array]) - }, - visible: { - type: Boolean - }, - format: { - type: String, - default: "" - } - }); - - const isValidRange = (range) => { - if (!isArray$1(range)) - return false; - const [left, right] = range; - return dayjs.isDayjs(left) && dayjs.isDayjs(right) && left.isSameOrBefore(right); - }; - const getDefaultValue = (defaultValue, { lang, unit, unlinkPanels }) => { - let start; - if (isArray$1(defaultValue)) { - let [left, right] = defaultValue.map((d) => dayjs(d).locale(lang)); - if (!unlinkPanels) { - right = left.add(1, unit); - } - return [left, right]; - } else if (defaultValue) { - start = dayjs(defaultValue); - } else { - start = dayjs(); - } - start = start.locale(lang); - return [start, start.add(1, unit)]; - }; - const buildPickerTable = (dimension, rows, { - columnIndexOffset, - startDate, - nextEndDate, - now, - unit, - relativeDateGetter, - setCellMetadata, - setRowMetadata - }) => { - for (let rowIndex = 0; rowIndex < dimension.row; rowIndex++) { - const row = rows[rowIndex]; - for (let columnIndex = 0; columnIndex < dimension.column; columnIndex++) { - let cell = row[columnIndex + columnIndexOffset]; - if (!cell) { - cell = { - row: rowIndex, - column: columnIndex, - type: "normal", - inRange: false, - start: false, - end: false - }; - } - const index = rowIndex * dimension.column + columnIndex; - const nextStartDate = relativeDateGetter(index); - cell.dayjs = nextStartDate; - cell.date = nextStartDate.toDate(); - cell.timestamp = nextStartDate.valueOf(); - cell.type = "normal"; - cell.inRange = !!(startDate && nextStartDate.isSameOrAfter(startDate, unit) && nextEndDate && nextStartDate.isSameOrBefore(nextEndDate, unit)) || !!(startDate && nextStartDate.isSameOrBefore(startDate, unit) && nextEndDate && nextStartDate.isSameOrAfter(nextEndDate, unit)); - if (startDate == null ? void 0 : startDate.isSameOrAfter(nextEndDate)) { - cell.start = !!nextEndDate && nextStartDate.isSame(nextEndDate, unit); - cell.end = startDate && nextStartDate.isSame(startDate, unit); - } else { - cell.start = !!startDate && nextStartDate.isSame(startDate, unit); - cell.end = !!nextEndDate && nextStartDate.isSame(nextEndDate, unit); - } - const isToday = nextStartDate.isSame(now, unit); - if (isToday) { - cell.type = "today"; - } - setCellMetadata == null ? void 0 : setCellMetadata(cell, { rowIndex, columnIndex }); - row[columnIndex + columnIndexOffset] = cell; - } - setRowMetadata == null ? void 0 : setRowMetadata(row); - } - }; - const datesInMonth = (year, month, lang) => { - const firstDay = dayjs().locale(lang).startOf("month").month(month).year(year); - const numOfDays = firstDay.daysInMonth(); - return rangeArr(numOfDays).map((n) => firstDay.add(n, "day").toDate()); - }; - const getValidDateOfMonth = (year, month, lang, disabledDate) => { - const _value = dayjs().year(year).month(month).startOf("month"); - const _date = datesInMonth(year, month, lang).find((date) => { - return !(disabledDate == null ? void 0 : disabledDate(date)); - }); - if (_date) { - return dayjs(_date).locale(lang); - } - return _value.locale(lang); - }; - const getValidDateOfYear = (value, lang, disabledDate) => { - const year = value.year(); - if (!(disabledDate == null ? void 0 : disabledDate(value.toDate()))) { - return value.locale(lang); - } - const month = value.month(); - if (!datesInMonth(year, month, lang).every(disabledDate)) { - return getValidDateOfMonth(year, month, lang, disabledDate); - } - for (let i = 0; i < 12; i++) { - if (!datesInMonth(year, i, lang).every(disabledDate)) { - return getValidDateOfMonth(year, i, lang, disabledDate); - } - } - return value; - }; - - const basicDateTableProps = buildProps({ - ...datePickerSharedProps, - cellClassName: { - type: definePropType(Function) - }, - showWeekNumber: Boolean, - selectionMode: selectionModeWithDefault("date") - }); - const basicDateTableEmits = ["changerange", "pick", "select"]; - - const isNormalDay = (type = "") => { - return ["normal", "today"].includes(type); - }; - const useBasicDateTable = (props, emit) => { - const { lang } = useLocale(); - const tbodyRef = vue.ref(); - const currentCellRef = vue.ref(); - const lastRow = vue.ref(); - const lastColumn = vue.ref(); - const tableRows = vue.ref([[], [], [], [], [], []]); - let focusWithClick = false; - const firstDayOfWeek = props.date.$locale().weekStart || 7; - const WEEKS_CONSTANT = props.date.locale("en").localeData().weekdaysShort().map((_) => _.toLowerCase()); - const offsetDay = vue.computed(() => { - return firstDayOfWeek > 3 ? 7 - firstDayOfWeek : -firstDayOfWeek; - }); - const startDate = vue.computed(() => { - const startDayOfMonth = props.date.startOf("month"); - return startDayOfMonth.subtract(startDayOfMonth.day() || 7, "day"); - }); - const WEEKS = vue.computed(() => { - return WEEKS_CONSTANT.concat(WEEKS_CONSTANT).slice(firstDayOfWeek, firstDayOfWeek + 7); - }); - const hasCurrent = vue.computed(() => { - return flatten(vue.unref(rows)).some((row) => { - return row.isCurrent; - }); - }); - const days = vue.computed(() => { - const startOfMonth = props.date.startOf("month"); - const startOfMonthDay = startOfMonth.day() || 7; - const dateCountOfMonth = startOfMonth.daysInMonth(); - const dateCountOfLastMonth = startOfMonth.subtract(1, "month").daysInMonth(); - return { - startOfMonthDay, - dateCountOfMonth, - dateCountOfLastMonth - }; - }); - const selectedDate = vue.computed(() => { - return props.selectionMode === "dates" ? castArray(props.parsedValue) : []; - }); - const setDateText = (cell, { count, rowIndex, columnIndex }) => { - const { startOfMonthDay, dateCountOfMonth, dateCountOfLastMonth } = vue.unref(days); - const offset = vue.unref(offsetDay); - if (rowIndex >= 0 && rowIndex <= 1) { - const numberOfDaysFromPreviousMonth = startOfMonthDay + offset < 0 ? 7 + startOfMonthDay + offset : startOfMonthDay + offset; - if (columnIndex + rowIndex * 7 >= numberOfDaysFromPreviousMonth) { - cell.text = count; - return true; - } else { - cell.text = dateCountOfLastMonth - (numberOfDaysFromPreviousMonth - columnIndex % 7) + 1 + rowIndex * 7; - cell.type = "prev-month"; - } - } else { - if (count <= dateCountOfMonth) { - cell.text = count; - } else { - cell.text = count - dateCountOfMonth; - cell.type = "next-month"; - } - return true; - } - return false; - }; - const setCellMetadata = (cell, { columnIndex, rowIndex }, count) => { - const { disabledDate, cellClassName } = props; - const _selectedDate = vue.unref(selectedDate); - const shouldIncrement = setDateText(cell, { count, rowIndex, columnIndex }); - const cellDate = cell.dayjs.toDate(); - cell.selected = _selectedDate.find((d) => d.isSame(cell.dayjs, "day")); - cell.isSelected = !!cell.selected; - cell.isCurrent = isCurrent(cell); - cell.disabled = disabledDate == null ? void 0 : disabledDate(cellDate); - cell.customClass = cellClassName == null ? void 0 : cellClassName(cellDate); - return shouldIncrement; - }; - const setRowMetadata = (row) => { - if (props.selectionMode === "week") { - const [start, end] = props.showWeekNumber ? [1, 7] : [0, 6]; - const isActive = isWeekActive(row[start + 1]); - row[start].inRange = isActive; - row[start].start = isActive; - row[end].inRange = isActive; - row[end].end = isActive; - } - }; - const rows = vue.computed(() => { - const { minDate, maxDate, rangeState, showWeekNumber } = props; - const offset = vue.unref(offsetDay); - const rows_ = vue.unref(tableRows); - const dateUnit = "day"; - let count = 1; - if (showWeekNumber) { - for (let rowIndex = 0; rowIndex < 6; rowIndex++) { - if (!rows_[rowIndex][0]) { - rows_[rowIndex][0] = { - type: "week", - text: vue.unref(startDate).add(rowIndex * 7 + 1, dateUnit).week() - }; - } - } - } - buildPickerTable({ row: 6, column: 7 }, rows_, { - startDate: minDate, - columnIndexOffset: showWeekNumber ? 1 : 0, - nextEndDate: rangeState.endDate || maxDate || rangeState.selecting && minDate || null, - now: dayjs().locale(vue.unref(lang)).startOf(dateUnit), - unit: dateUnit, - relativeDateGetter: (idx) => vue.unref(startDate).add(idx - offset, dateUnit), - setCellMetadata: (...args) => { - if (setCellMetadata(...args, count)) { - count += 1; - } - }, - setRowMetadata - }); - return rows_; - }); - vue.watch(() => props.date, async () => { - var _a; - if ((_a = vue.unref(tbodyRef)) == null ? void 0 : _a.contains(document.activeElement)) { - await vue.nextTick(); - await focus(); - } - }); - const focus = async () => { - var _a; - return (_a = vue.unref(currentCellRef)) == null ? void 0 : _a.focus(); - }; - const isCurrent = (cell) => { - return props.selectionMode === "date" && isNormalDay(cell.type) && cellMatchesDate(cell, props.parsedValue); - }; - const cellMatchesDate = (cell, date) => { - if (!date) - return false; - return dayjs(date).locale(vue.unref(lang)).isSame(props.date.date(Number(cell.text)), "day"); - }; - const getDateOfCell = (row, column) => { - const offsetFromStart = row * 7 + (column - (props.showWeekNumber ? 1 : 0)) - vue.unref(offsetDay); - return vue.unref(startDate).add(offsetFromStart, "day"); - }; - const handleMouseMove = (event) => { - var _a; - if (!props.rangeState.selecting) - return; - let target = event.target; - if (target.tagName === "SPAN") { - target = (_a = target.parentNode) == null ? void 0 : _a.parentNode; - } - if (target.tagName === "DIV") { - target = target.parentNode; - } - if (target.tagName !== "TD") - return; - const row = target.parentNode.rowIndex - 1; - const column = target.cellIndex; - if (vue.unref(rows)[row][column].disabled) - return; - if (row !== vue.unref(lastRow) || column !== vue.unref(lastColumn)) { - lastRow.value = row; - lastColumn.value = column; - emit("changerange", { - selecting: true, - endDate: getDateOfCell(row, column) - }); - } - }; - const isSelectedCell = (cell) => { - return !vue.unref(hasCurrent) && (cell == null ? void 0 : cell.text) === 1 && cell.type === "normal" || cell.isCurrent; - }; - const handleFocus = (event) => { - if (focusWithClick || vue.unref(hasCurrent) || props.selectionMode !== "date") - return; - handlePickDate(event, true); - }; - const handleMouseDown = (event) => { - const target = event.target.closest("td"); - if (!target) - return; - focusWithClick = true; - }; - const handleMouseUp = (event) => { - const target = event.target.closest("td"); - if (!target) - return; - focusWithClick = false; - }; - const handleRangePick = (newDate) => { - if (!props.rangeState.selecting || !props.minDate) { - emit("pick", { minDate: newDate, maxDate: null }); - emit("select", true); - } else { - if (newDate >= props.minDate) { - emit("pick", { minDate: props.minDate, maxDate: newDate }); - } else { - emit("pick", { minDate: newDate, maxDate: props.minDate }); - } - emit("select", false); - } - }; - const handleWeekPick = (newDate) => { - const weekNumber = newDate.week(); - const value = `${newDate.year()}w${weekNumber}`; - emit("pick", { - year: newDate.year(), - week: weekNumber, - value, - date: newDate.startOf("week") - }); - }; - const handleDatesPick = (newDate, selected) => { - const newValue = selected ? castArray(props.parsedValue).filter((d) => (d == null ? void 0 : d.valueOf()) !== newDate.valueOf()) : castArray(props.parsedValue).concat([newDate]); - emit("pick", newValue); - }; - const handlePickDate = (event, isKeyboardMovement = false) => { - const target = event.target.closest("td"); - if (!target) - return; - const row = target.parentNode.rowIndex - 1; - const column = target.cellIndex; - const cell = vue.unref(rows)[row][column]; - if (cell.disabled || cell.type === "week") - return; - const newDate = getDateOfCell(row, column); - switch (props.selectionMode) { - case "range": { - handleRangePick(newDate); - break; - } - case "date": { - emit("pick", newDate, isKeyboardMovement); - break; - } - case "week": { - handleWeekPick(newDate); - break; - } - case "dates": { - handleDatesPick(newDate, !!cell.selected); - break; - } - } - }; - const isWeekActive = (cell) => { - if (props.selectionMode !== "week") - return false; - let newDate = props.date.startOf("day"); - if (cell.type === "prev-month") { - newDate = newDate.subtract(1, "month"); - } - if (cell.type === "next-month") { - newDate = newDate.add(1, "month"); - } - newDate = newDate.date(Number.parseInt(cell.text, 10)); - if (props.parsedValue && !isArray$1(props.parsedValue)) { - const dayOffset = (props.parsedValue.day() - firstDayOfWeek + 7) % 7 - 1; - const weekDate = props.parsedValue.subtract(dayOffset, "day"); - return weekDate.isSame(newDate, "day"); - } - return false; - }; - return { - WEEKS, - rows, - tbodyRef, - currentCellRef, - focus, - isCurrent, - isWeekActive, - isSelectedCell, - handlePickDate, - handleMouseUp, - handleMouseDown, - handleMouseMove, - handleFocus - }; - }; - const useBasicDateTableDOM = (props, { - isCurrent, - isWeekActive - }) => { - const ns = useNamespace("date-table"); - const { t } = useLocale(); - const tableKls = vue.computed(() => [ - ns.b(), - { "is-week-mode": props.selectionMode === "week" } - ]); - const tableLabel = vue.computed(() => t("el.datepicker.dateTablePrompt")); - const weekLabel = vue.computed(() => t("el.datepicker.week")); - const getCellClasses = (cell) => { - const classes = []; - if (isNormalDay(cell.type) && !cell.disabled) { - classes.push("available"); - if (cell.type === "today") { - classes.push("today"); - } - } else { - classes.push(cell.type); - } - if (isCurrent(cell)) { - classes.push("current"); - } - if (cell.inRange && (isNormalDay(cell.type) || props.selectionMode === "week")) { - classes.push("in-range"); - if (cell.start) { - classes.push("start-date"); - } - if (cell.end) { - classes.push("end-date"); - } - } - if (cell.disabled) { - classes.push("disabled"); - } - if (cell.selected) { - classes.push("selected"); - } - if (cell.customClass) { - classes.push(cell.customClass); - } - return classes.join(" "); - }; - const getRowKls = (cell) => [ - ns.e("row"), - { current: isWeekActive(cell) } - ]; - return { - tableKls, - tableLabel, - weekLabel, - getCellClasses, - getRowKls, - t - }; - }; - - const basicCellProps = buildProps({ - cell: { - type: definePropType(Object) - } - }); - - var ElDatePickerCell = vue.defineComponent({ - name: "ElDatePickerCell", - props: basicCellProps, - setup(props) { - const ns = useNamespace("date-table-cell"); - const { - slots - } = vue.inject(ROOT_PICKER_INJECTION_KEY); - return () => { - const { - cell - } = props; - return vue.renderSlot(slots, "default", { - ...cell - }, () => { - var _a; - return [vue.createVNode("div", { - "class": ns.b() - }, [vue.createVNode("span", { - "class": ns.e("text") - }, [(_a = cell == null ? void 0 : cell.renderText) != null ? _a : cell == null ? void 0 : cell.text])])]; - }); - }; - } - }); - - const _sfc_main$1y = /* @__PURE__ */ vue.defineComponent({ - __name: "basic-date-table", - props: basicDateTableProps, - emits: basicDateTableEmits, - setup(__props, { expose, emit }) { - const props = __props; - const { - WEEKS, - rows, - tbodyRef, - currentCellRef, - focus, - isCurrent, - isWeekActive, - isSelectedCell, - handlePickDate, - handleMouseUp, - handleMouseDown, - handleMouseMove, - handleFocus - } = useBasicDateTable(props, emit); - const { tableLabel, tableKls, weekLabel, getCellClasses, getRowKls, t } = useBasicDateTableDOM(props, { - isCurrent, - isWeekActive - }); - expose({ - focus - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("table", { - "aria-label": vue.unref(tableLabel), - class: vue.normalizeClass(vue.unref(tableKls)), - cellspacing: "0", - cellpadding: "0", - role: "grid", - onClick: vue.unref(handlePickDate), - onMousemove: vue.unref(handleMouseMove), - onMousedown: vue.withModifiers(vue.unref(handleMouseDown), ["prevent"]), - onMouseup: vue.unref(handleMouseUp) - }, [ - vue.createElementVNode("tbody", { - ref_key: "tbodyRef", - ref: tbodyRef - }, [ - vue.createElementVNode("tr", null, [ - _ctx.showWeekNumber ? (vue.openBlock(), vue.createElementBlock("th", { - key: 0, - scope: "col" - }, vue.toDisplayString(vue.unref(weekLabel)), 1)) : vue.createCommentVNode("v-if", true), - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(WEEKS), (week, key) => { - return vue.openBlock(), vue.createElementBlock("th", { - key, - "aria-label": vue.unref(t)("el.datepicker.weeksFull." + week), - scope: "col" - }, vue.toDisplayString(vue.unref(t)("el.datepicker.weeks." + week)), 9, ["aria-label"]); - }), 128)) - ]), - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(rows), (row, rowKey) => { - return vue.openBlock(), vue.createElementBlock("tr", { - key: rowKey, - class: vue.normalizeClass(vue.unref(getRowKls)(row[1])) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(row, (cell, columnKey) => { - return vue.openBlock(), vue.createElementBlock("td", { - key: `${rowKey}.${columnKey}`, - ref_for: true, - ref: (el) => vue.unref(isSelectedCell)(cell) && (currentCellRef.value = el), - class: vue.normalizeClass(vue.unref(getCellClasses)(cell)), - "aria-current": cell.isCurrent ? "date" : void 0, - "aria-selected": cell.isCurrent, - tabindex: vue.unref(isSelectedCell)(cell) ? 0 : -1, - onFocus: vue.unref(handleFocus) - }, [ - vue.createVNode(vue.unref(ElDatePickerCell), { cell }, null, 8, ["cell"]) - ], 42, ["aria-current", "aria-selected", "tabindex", "onFocus"]); - }), 128)) - ], 2); - }), 128)) - ], 512) - ], 42, ["aria-label", "onClick", "onMousemove", "onMousedown", "onMouseup"]); - }; - } - }); - var DateTable = /* @__PURE__ */ _export_sfc(_sfc_main$1y, [["__file", "basic-date-table.vue"]]); - - const basicMonthTableProps = buildProps({ - ...datePickerSharedProps, - selectionMode: selectionModeWithDefault("month") - }); - - const _sfc_main$1x = /* @__PURE__ */ vue.defineComponent({ - __name: "basic-month-table", - props: basicMonthTableProps, - emits: ["changerange", "pick", "select"], - setup(__props, { expose, emit }) { - const props = __props; - const ns = useNamespace("month-table"); - const { t, lang } = useLocale(); - const tbodyRef = vue.ref(); - const currentCellRef = vue.ref(); - const months = vue.ref(props.date.locale("en").localeData().monthsShort().map((_) => _.toLowerCase())); - const tableRows = vue.ref([ - [], - [], - [] - ]); - const lastRow = vue.ref(); - const lastColumn = vue.ref(); - const rows = vue.computed(() => { - var _a, _b; - const rows2 = tableRows.value; - const now = dayjs().locale(lang.value).startOf("month"); - for (let i = 0; i < 3; i++) { - const row = rows2[i]; - for (let j = 0; j < 4; j++) { - const cell = row[j] || (row[j] = { - row: i, - column: j, - type: "normal", - inRange: false, - start: false, - end: false, - text: -1, - disabled: false - }); - cell.type = "normal"; - const index = i * 4 + j; - const calTime = props.date.startOf("year").month(index); - const calEndDate = props.rangeState.endDate || props.maxDate || props.rangeState.selecting && props.minDate || null; - cell.inRange = !!(props.minDate && calTime.isSameOrAfter(props.minDate, "month") && calEndDate && calTime.isSameOrBefore(calEndDate, "month")) || !!(props.minDate && calTime.isSameOrBefore(props.minDate, "month") && calEndDate && calTime.isSameOrAfter(calEndDate, "month")); - if ((_a = props.minDate) == null ? void 0 : _a.isSameOrAfter(calEndDate)) { - cell.start = !!(calEndDate && calTime.isSame(calEndDate, "month")); - cell.end = props.minDate && calTime.isSame(props.minDate, "month"); - } else { - cell.start = !!(props.minDate && calTime.isSame(props.minDate, "month")); - cell.end = !!(calEndDate && calTime.isSame(calEndDate, "month")); - } - const isToday = now.isSame(calTime); - if (isToday) { - cell.type = "today"; - } - cell.text = index; - cell.disabled = ((_b = props.disabledDate) == null ? void 0 : _b.call(props, calTime.toDate())) || false; - } - } - return rows2; - }); - const focus = () => { - var _a; - (_a = currentCellRef.value) == null ? void 0 : _a.focus(); - }; - const getCellStyle = (cell) => { - const style = {}; - const year = props.date.year(); - const today = /* @__PURE__ */ new Date(); - const month = cell.text; - style.disabled = props.disabledDate ? datesInMonth(year, month, lang.value).every(props.disabledDate) : false; - style.current = castArray(props.parsedValue).findIndex((date) => dayjs.isDayjs(date) && date.year() === year && date.month() === month) >= 0; - style.today = today.getFullYear() === year && today.getMonth() === month; - if (cell.inRange) { - style["in-range"] = true; - if (cell.start) { - style["start-date"] = true; - } - if (cell.end) { - style["end-date"] = true; - } - } - return style; - }; - const isSelectedCell = (cell) => { - const year = props.date.year(); - const month = cell.text; - return castArray(props.date).findIndex((date) => date.year() === year && date.month() === month) >= 0; - }; - const handleMouseMove = (event) => { - var _a; - if (!props.rangeState.selecting) - return; - let target = event.target; - if (target.tagName === "SPAN") { - target = (_a = target.parentNode) == null ? void 0 : _a.parentNode; - } - if (target.tagName === "DIV") { - target = target.parentNode; - } - if (target.tagName !== "TD") - return; - const row = target.parentNode.rowIndex; - const column = target.cellIndex; - if (rows.value[row][column].disabled) - return; - if (row !== lastRow.value || column !== lastColumn.value) { - lastRow.value = row; - lastColumn.value = column; - emit("changerange", { - selecting: true, - endDate: props.date.startOf("year").month(row * 4 + column) - }); - } - }; - const handleMonthTableClick = (event) => { - var _a; - const target = (_a = event.target) == null ? void 0 : _a.closest("td"); - if ((target == null ? void 0 : target.tagName) !== "TD") - return; - if (hasClass(target, "disabled")) - return; - const column = target.cellIndex; - const row = target.parentNode.rowIndex; - const month = row * 4 + column; - const newDate = props.date.startOf("year").month(month); - if (props.selectionMode === "months") { - if (event.type === "keydown") { - emit("pick", castArray(props.parsedValue), false); - return; - } - const newMonth = getValidDateOfMonth(props.date.year(), month, lang.value, props.disabledDate); - const newValue = hasClass(target, "current") ? castArray(props.parsedValue).filter((d) => (d == null ? void 0 : d.month()) !== newMonth.month()) : castArray(props.parsedValue).concat([dayjs(newMonth)]); - emit("pick", newValue); - } else if (props.selectionMode === "range") { - if (!props.rangeState.selecting) { - emit("pick", { minDate: newDate, maxDate: null }); - emit("select", true); - } else { - if (props.minDate && newDate >= props.minDate) { - emit("pick", { minDate: props.minDate, maxDate: newDate }); - } else { - emit("pick", { minDate: newDate, maxDate: props.minDate }); - } - emit("select", false); - } - } else { - emit("pick", month); - } - }; - vue.watch(() => props.date, async () => { - var _a, _b; - if ((_a = tbodyRef.value) == null ? void 0 : _a.contains(document.activeElement)) { - await vue.nextTick(); - (_b = currentCellRef.value) == null ? void 0 : _b.focus(); - } - }); - expose({ - focus - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("table", { - role: "grid", - "aria-label": vue.unref(t)("el.datepicker.monthTablePrompt"), - class: vue.normalizeClass(vue.unref(ns).b()), - onClick: handleMonthTableClick, - onMousemove: handleMouseMove - }, [ - vue.createElementVNode("tbody", { - ref_key: "tbodyRef", - ref: tbodyRef - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(rows), (row, key) => { - return vue.openBlock(), vue.createElementBlock("tr", { key }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(row, (cell, key_) => { - return vue.openBlock(), vue.createElementBlock("td", { - key: key_, - ref_for: true, - ref: (el) => isSelectedCell(cell) && (currentCellRef.value = el), - class: vue.normalizeClass(getCellStyle(cell)), - "aria-selected": `${isSelectedCell(cell)}`, - "aria-label": vue.unref(t)(`el.datepicker.month${+cell.text + 1}`), - tabindex: isSelectedCell(cell) ? 0 : -1, - onKeydown: [ - vue.withKeys(vue.withModifiers(handleMonthTableClick, ["prevent", "stop"]), ["space"]), - vue.withKeys(vue.withModifiers(handleMonthTableClick, ["prevent", "stop"]), ["enter"]) - ] - }, [ - vue.createVNode(vue.unref(ElDatePickerCell), { - cell: { - ...cell, - renderText: vue.unref(t)("el.datepicker.months." + months.value[cell.text]) - } - }, null, 8, ["cell"]) - ], 42, ["aria-selected", "aria-label", "tabindex", "onKeydown"]); - }), 128)) - ]); - }), 128)) - ], 512) - ], 42, ["aria-label"]); - }; - } - }); - var MonthTable = /* @__PURE__ */ _export_sfc(_sfc_main$1x, [["__file", "basic-month-table.vue"]]); - - const basicYearTableProps = buildProps({ - ...datePickerSharedProps, - selectionMode: selectionModeWithDefault("year") - }); - - const _sfc_main$1w = /* @__PURE__ */ vue.defineComponent({ - __name: "basic-year-table", - props: basicYearTableProps, - emits: ["changerange", "pick", "select"], - setup(__props, { expose, emit }) { - const props = __props; - const datesInYear = (year, lang2) => { - const firstDay = dayjs(String(year)).locale(lang2).startOf("year"); - const lastDay = firstDay.endOf("year"); - const numOfDays = lastDay.dayOfYear(); - return rangeArr(numOfDays).map((n) => firstDay.add(n, "day").toDate()); - }; - const ns = useNamespace("year-table"); - const { t, lang } = useLocale(); - const tbodyRef = vue.ref(); - const currentCellRef = vue.ref(); - const startYear = vue.computed(() => { - return Math.floor(props.date.year() / 10) * 10; - }); - const tableRows = vue.ref([[], [], []]); - const lastRow = vue.ref(); - const lastColumn = vue.ref(); - const rows = vue.computed(() => { - var _a; - const rows2 = tableRows.value; - const now = dayjs().locale(lang.value).startOf("year"); - for (let i = 0; i < 3; i++) { - const row = rows2[i]; - for (let j = 0; j < 4; j++) { - if (i * 4 + j >= 10) { - break; - } - let cell = row[j]; - if (!cell) { - cell = { - row: i, - column: j, - type: "normal", - inRange: false, - start: false, - end: false, - text: -1, - disabled: false - }; - } - cell.type = "normal"; - const index = i * 4 + j + startYear.value; - const calTime = dayjs().year(index); - const calEndDate = props.rangeState.endDate || props.maxDate || props.rangeState.selecting && props.minDate || null; - cell.inRange = !!(props.minDate && calTime.isSameOrAfter(props.minDate, "year") && calEndDate && calTime.isSameOrBefore(calEndDate, "year")) || !!(props.minDate && calTime.isSameOrBefore(props.minDate, "year") && calEndDate && calTime.isSameOrAfter(calEndDate, "year")); - if ((_a = props.minDate) == null ? void 0 : _a.isSameOrAfter(calEndDate)) { - cell.start = !!(calEndDate && calTime.isSame(calEndDate, "year")); - cell.end = !!(props.minDate && calTime.isSame(props.minDate, "year")); - } else { - cell.start = !!(props.minDate && calTime.isSame(props.minDate, "year")); - cell.end = !!(calEndDate && calTime.isSame(calEndDate, "year")); - } - const isToday = now.isSame(calTime); - if (isToday) { - cell.type = "today"; - } - cell.text = index; - const cellDate = calTime.toDate(); - cell.disabled = props.disabledDate && props.disabledDate(cellDate) || false; - row[j] = cell; - } - } - return rows2; - }); - const focus = () => { - var _a; - (_a = currentCellRef.value) == null ? void 0 : _a.focus(); - }; - const getCellKls = (cell) => { - const kls = {}; - const today = dayjs().locale(lang.value); - const year = cell.text; - kls.disabled = props.disabledDate ? datesInYear(year, lang.value).every(props.disabledDate) : false; - kls.today = today.year() === year; - kls.current = castArray(props.parsedValue).findIndex((d) => d.year() === year) >= 0; - if (cell.inRange) { - kls["in-range"] = true; - if (cell.start) { - kls["start-date"] = true; - } - if (cell.end) { - kls["end-date"] = true; - } - } - return kls; - }; - const isSelectedCell = (cell) => { - const year = cell.text; - return castArray(props.date).findIndex((date) => date.year() === year) >= 0; - }; - const handleYearTableClick = (event) => { - var _a; - const target = (_a = event.target) == null ? void 0 : _a.closest("td"); - if (!target || !target.textContent || hasClass(target, "disabled")) - return; - const column = target.cellIndex; - const row = target.parentNode.rowIndex; - const selectedYear = row * 4 + column + startYear.value; - const newDate = dayjs().year(selectedYear); - if (props.selectionMode === "range") { - if (!props.rangeState.selecting) { - emit("pick", { minDate: newDate, maxDate: null }); - emit("select", true); - } else { - if (props.minDate && newDate >= props.minDate) { - emit("pick", { minDate: props.minDate, maxDate: newDate }); - } else { - emit("pick", { minDate: newDate, maxDate: props.minDate }); - } - emit("select", false); - } - } else if (props.selectionMode === "years") { - if (event.type === "keydown") { - emit("pick", castArray(props.parsedValue), false); - return; - } - const vaildYear = getValidDateOfYear(newDate.startOf("year"), lang.value, props.disabledDate); - const newValue = hasClass(target, "current") ? castArray(props.parsedValue).filter((d) => (d == null ? void 0 : d.year()) !== selectedYear) : castArray(props.parsedValue).concat([vaildYear]); - emit("pick", newValue); - } else { - emit("pick", selectedYear); - } - }; - const handleMouseMove = (event) => { - var _a; - if (!props.rangeState.selecting) - return; - const target = (_a = event.target) == null ? void 0 : _a.closest("td"); - if (!target) - return; - const row = target.parentNode.rowIndex; - const column = target.cellIndex; - if (rows.value[row][column].disabled) - return; - if (row !== lastRow.value || column !== lastColumn.value) { - lastRow.value = row; - lastColumn.value = column; - emit("changerange", { - selecting: true, - endDate: dayjs().year(startYear.value).add(row * 4 + column, "year") - }); - } - }; - vue.watch(() => props.date, async () => { - var _a, _b; - if ((_a = tbodyRef.value) == null ? void 0 : _a.contains(document.activeElement)) { - await vue.nextTick(); - (_b = currentCellRef.value) == null ? void 0 : _b.focus(); - } - }); - expose({ - focus - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("table", { - role: "grid", - "aria-label": vue.unref(t)("el.datepicker.yearTablePrompt"), - class: vue.normalizeClass(vue.unref(ns).b()), - onClick: handleYearTableClick, - onMousemove: handleMouseMove - }, [ - vue.createElementVNode("tbody", { - ref_key: "tbodyRef", - ref: tbodyRef - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(rows), (row, rowKey) => { - return vue.openBlock(), vue.createElementBlock("tr", { key: rowKey }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(row, (cell, cellKey) => { - return vue.openBlock(), vue.createElementBlock("td", { - key: `${rowKey}_${cellKey}`, - ref_for: true, - ref: (el) => isSelectedCell(cell) && (currentCellRef.value = el), - class: vue.normalizeClass(["available", getCellKls(cell)]), - "aria-selected": isSelectedCell(cell), - "aria-label": String(cell.text), - tabindex: isSelectedCell(cell) ? 0 : -1, - onKeydown: [ - vue.withKeys(vue.withModifiers(handleYearTableClick, ["prevent", "stop"]), ["space"]), - vue.withKeys(vue.withModifiers(handleYearTableClick, ["prevent", "stop"]), ["enter"]) - ] - }, [ - vue.createVNode(vue.unref(ElDatePickerCell), { cell }, null, 8, ["cell"]) - ], 42, ["aria-selected", "aria-label", "tabindex", "onKeydown"]); - }), 128)) - ]); - }), 128)) - ], 512) - ], 42, ["aria-label"]); - }; - } - }); - var YearTable = /* @__PURE__ */ _export_sfc(_sfc_main$1w, [["__file", "basic-year-table.vue"]]); - - const _sfc_main$1v = /* @__PURE__ */ vue.defineComponent({ - __name: "panel-date-pick", - props: panelDatePickProps, - emits: ["pick", "set-picker-option", "panel-change"], - setup(__props, { emit: contextEmit }) { - const props = __props; - const timeWithinRange = (_, __, ___) => true; - const ppNs = useNamespace("picker-panel"); - const dpNs = useNamespace("date-picker"); - const attrs = vue.useAttrs(); - const slots = vue.useSlots(); - const { t, lang } = useLocale(); - const pickerBase = vue.inject("EP_PICKER_BASE"); - const popper = vue.inject(TOOLTIP_INJECTION_KEY); - const { shortcuts, disabledDate, cellClassName, defaultTime } = pickerBase.props; - const defaultValue = vue.toRef(pickerBase.props, "defaultValue"); - const currentViewRef = vue.ref(); - const innerDate = vue.ref(dayjs().locale(lang.value)); - const isChangeToNow = vue.ref(false); - let isShortcut = false; - const defaultTimeD = vue.computed(() => { - return dayjs(defaultTime).locale(lang.value); - }); - const month = vue.computed(() => { - return innerDate.value.month(); - }); - const year = vue.computed(() => { - return innerDate.value.year(); - }); - const selectableRange = vue.ref([]); - const userInputDate = vue.ref(null); - const userInputTime = vue.ref(null); - const checkDateWithinRange = (date) => { - return selectableRange.value.length > 0 ? timeWithinRange(date, selectableRange.value, props.format || "HH:mm:ss") : true; - }; - const formatEmit = (emitDayjs) => { - if (defaultTime && !visibleTime.value && !isChangeToNow.value && !isShortcut) { - return defaultTimeD.value.year(emitDayjs.year()).month(emitDayjs.month()).date(emitDayjs.date()); - } - if (showTime.value) - return emitDayjs.millisecond(0); - return emitDayjs.startOf("day"); - }; - const emit = (value, ...args) => { - if (!value) { - contextEmit("pick", value, ...args); - } else if (isArray$1(value)) { - const dates = value.map(formatEmit); - contextEmit("pick", dates, ...args); - } else { - contextEmit("pick", formatEmit(value), ...args); - } - userInputDate.value = null; - userInputTime.value = null; - isChangeToNow.value = false; - isShortcut = false; - }; - const handleDatePick = async (value, keepOpen) => { - if (selectionMode.value === "date") { - value = value; - let newDate = props.parsedValue ? props.parsedValue.year(value.year()).month(value.month()).date(value.date()) : value; - if (!checkDateWithinRange(newDate)) { - newDate = selectableRange.value[0][0].year(value.year()).month(value.month()).date(value.date()); - } - innerDate.value = newDate; - emit(newDate, showTime.value || keepOpen); - if (props.type === "datetime") { - await vue.nextTick(); - handleFocusPicker(); - } - } else if (selectionMode.value === "week") { - emit(value.date); - } else if (selectionMode.value === "dates") { - emit(value, true); - } - }; - const moveByMonth = (forward) => { - const action = forward ? "add" : "subtract"; - innerDate.value = innerDate.value[action](1, "month"); - handlePanelChange("month"); - }; - const moveByYear = (forward) => { - const currentDate = innerDate.value; - const action = forward ? "add" : "subtract"; - innerDate.value = currentView.value === "year" ? currentDate[action](10, "year") : currentDate[action](1, "year"); - handlePanelChange("year"); - }; - const currentView = vue.ref("date"); - const yearLabel = vue.computed(() => { - const yearTranslation = t("el.datepicker.year"); - if (currentView.value === "year") { - const startYear = Math.floor(year.value / 10) * 10; - if (yearTranslation) { - return `${startYear} ${yearTranslation} - ${startYear + 9} ${yearTranslation}`; - } - return `${startYear} - ${startYear + 9}`; - } - return `${year.value} ${yearTranslation}`; - }); - const handleShortcutClick = (shortcut) => { - const shortcutValue = isFunction$1(shortcut.value) ? shortcut.value() : shortcut.value; - if (shortcutValue) { - isShortcut = true; - emit(dayjs(shortcutValue).locale(lang.value)); - return; - } - if (shortcut.onClick) { - shortcut.onClick({ - attrs, - slots, - emit: contextEmit - }); - } - }; - const selectionMode = vue.computed(() => { - const { type } = props; - if (["week", "month", "months", "year", "years", "dates"].includes(type)) - return type; - return "date"; - }); - const isMultipleType = vue.computed(() => { - return selectionMode.value === "dates" || selectionMode.value === "months" || selectionMode.value === "years"; - }); - const keyboardMode = vue.computed(() => { - return selectionMode.value === "date" ? currentView.value : selectionMode.value; - }); - const hasShortcuts = vue.computed(() => !!shortcuts.length); - const handleMonthPick = async (month2, keepOpen) => { - if (selectionMode.value === "month") { - innerDate.value = getValidDateOfMonth(innerDate.value.year(), month2, lang.value, disabledDate); - emit(innerDate.value, false); - } else if (selectionMode.value === "months") { - emit(month2, keepOpen != null ? keepOpen : true); - } else { - innerDate.value = getValidDateOfMonth(innerDate.value.year(), month2, lang.value, disabledDate); - currentView.value = "date"; - if (["month", "year", "date", "week"].includes(selectionMode.value)) { - emit(innerDate.value, true); - await vue.nextTick(); - handleFocusPicker(); - } - } - handlePanelChange("month"); - }; - const handleYearPick = async (year2, keepOpen) => { - if (selectionMode.value === "year") { - const data = innerDate.value.startOf("year").year(year2); - innerDate.value = getValidDateOfYear(data, lang.value, disabledDate); - emit(innerDate.value, false); - } else if (selectionMode.value === "years") { - emit(year2, keepOpen != null ? keepOpen : true); - } else { - const data = innerDate.value.year(year2); - innerDate.value = getValidDateOfYear(data, lang.value, disabledDate); - currentView.value = "month"; - if (["month", "year", "date", "week"].includes(selectionMode.value)) { - emit(innerDate.value, true); - await vue.nextTick(); - handleFocusPicker(); - } - } - handlePanelChange("year"); - }; - const showPicker = async (view) => { - currentView.value = view; - await vue.nextTick(); - handleFocusPicker(); - }; - const showTime = vue.computed(() => props.type === "datetime" || props.type === "datetimerange"); - const footerVisible = vue.computed(() => { - const showDateFooter = showTime.value || selectionMode.value === "dates"; - const showYearFooter = selectionMode.value === "years"; - const showMonthFooter = selectionMode.value === "months"; - const isDateView = currentView.value === "date"; - const isYearView = currentView.value === "year"; - const isMonthView = currentView.value === "month"; - return showDateFooter && isDateView || showYearFooter && isYearView || showMonthFooter && isMonthView; - }); - const disabledConfirm = vue.computed(() => { - if (!disabledDate) - return false; - if (!props.parsedValue) - return true; - if (isArray$1(props.parsedValue)) { - return disabledDate(props.parsedValue[0].toDate()); - } - return disabledDate(props.parsedValue.toDate()); - }); - const onConfirm = () => { - if (isMultipleType.value) { - emit(props.parsedValue); - } else { - let result = props.parsedValue; - if (!result) { - const defaultTimeD2 = dayjs(defaultTime).locale(lang.value); - const defaultValueD = getDefaultValue(); - result = defaultTimeD2.year(defaultValueD.year()).month(defaultValueD.month()).date(defaultValueD.date()); - } - innerDate.value = result; - emit(result); - } - }; - const disabledNow = vue.computed(() => { - if (!disabledDate) - return false; - return disabledDate(dayjs().locale(lang.value).toDate()); - }); - const changeToNow = () => { - const now = dayjs().locale(lang.value); - const nowDate = now.toDate(); - isChangeToNow.value = true; - if ((!disabledDate || !disabledDate(nowDate)) && checkDateWithinRange(nowDate)) { - innerDate.value = dayjs().locale(lang.value); - emit(innerDate.value); - } - }; - const timeFormat = vue.computed(() => { - return props.timeFormat || extractTimeFormat(props.format); - }); - const dateFormat = vue.computed(() => { - return props.dateFormat || extractDateFormat(props.format); - }); - const visibleTime = vue.computed(() => { - if (userInputTime.value) - return userInputTime.value; - if (!props.parsedValue && !defaultValue.value) - return; - return (props.parsedValue || innerDate.value).format(timeFormat.value); - }); - const visibleDate = vue.computed(() => { - if (userInputDate.value) - return userInputDate.value; - if (!props.parsedValue && !defaultValue.value) - return; - return (props.parsedValue || innerDate.value).format(dateFormat.value); - }); - const timePickerVisible = vue.ref(false); - const onTimePickerInputFocus = () => { - timePickerVisible.value = true; - }; - const handleTimePickClose = () => { - timePickerVisible.value = false; - }; - const getUnits = (date) => { - return { - hour: date.hour(), - minute: date.minute(), - second: date.second(), - year: date.year(), - month: date.month(), - date: date.date() - }; - }; - const handleTimePick = (value, visible, first) => { - const { hour, minute, second } = getUnits(value); - const newDate = props.parsedValue ? props.parsedValue.hour(hour).minute(minute).second(second) : value; - innerDate.value = newDate; - emit(innerDate.value, true); - if (!first) { - timePickerVisible.value = visible; - } - }; - const handleVisibleTimeChange = (value) => { - const newDate = dayjs(value, timeFormat.value).locale(lang.value); - if (newDate.isValid() && checkDateWithinRange(newDate)) { - const { year: year2, month: month2, date } = getUnits(innerDate.value); - innerDate.value = newDate.year(year2).month(month2).date(date); - userInputTime.value = null; - timePickerVisible.value = false; - emit(innerDate.value, true); - } - }; - const handleVisibleDateChange = (value) => { - const newDate = dayjs(value, dateFormat.value).locale(lang.value); - if (newDate.isValid()) { - if (disabledDate && disabledDate(newDate.toDate())) { - return; - } - const { hour, minute, second } = getUnits(innerDate.value); - innerDate.value = newDate.hour(hour).minute(minute).second(second); - userInputDate.value = null; - emit(innerDate.value, true); - } - }; - const isValidValue = (date) => { - return dayjs.isDayjs(date) && date.isValid() && (disabledDate ? !disabledDate(date.toDate()) : true); - }; - const formatToString = (value) => { - return isArray$1(value) ? value.map((_) => _.format(props.format)) : value.format(props.format); - }; - const parseUserInput = (value) => { - return dayjs(value, props.format).locale(lang.value); - }; - const getDefaultValue = () => { - const parseDate = dayjs(defaultValue.value).locale(lang.value); - if (!defaultValue.value) { - const defaultTimeDValue = defaultTimeD.value; - return dayjs().hour(defaultTimeDValue.hour()).minute(defaultTimeDValue.minute()).second(defaultTimeDValue.second()).locale(lang.value); - } - return parseDate; - }; - const handleFocusPicker = () => { - var _a; - if (["week", "month", "year", "date"].includes(selectionMode.value)) { - (_a = currentViewRef.value) == null ? void 0 : _a.focus(); - } - }; - const _handleFocusPicker = () => { - handleFocusPicker(); - if (selectionMode.value === "week") { - handleKeyControl(EVENT_CODE.down); - } - }; - const handleKeydownTable = (event) => { - const { code } = event; - const validCode = [ - EVENT_CODE.up, - EVENT_CODE.down, - EVENT_CODE.left, - EVENT_CODE.right, - EVENT_CODE.home, - EVENT_CODE.end, - EVENT_CODE.pageUp, - EVENT_CODE.pageDown - ]; - if (validCode.includes(code)) { - handleKeyControl(code); - event.stopPropagation(); - event.preventDefault(); - } - if ([EVENT_CODE.enter, EVENT_CODE.space, EVENT_CODE.numpadEnter].includes(code) && userInputDate.value === null && userInputTime.value === null) { - event.preventDefault(); - emit(innerDate.value, false); - } - }; - const handleKeyControl = (code) => { - var _a; - const { up, down, left, right, home, end, pageUp, pageDown } = EVENT_CODE; - const mapping = { - year: { - [up]: -4, - [down]: 4, - [left]: -1, - [right]: 1, - offset: (date, step) => date.setFullYear(date.getFullYear() + step) - }, - month: { - [up]: -4, - [down]: 4, - [left]: -1, - [right]: 1, - offset: (date, step) => date.setMonth(date.getMonth() + step) - }, - week: { - [up]: -1, - [down]: 1, - [left]: -1, - [right]: 1, - offset: (date, step) => date.setDate(date.getDate() + step * 7) - }, - date: { - [up]: -7, - [down]: 7, - [left]: -1, - [right]: 1, - [home]: (date) => -date.getDay(), - [end]: (date) => -date.getDay() + 6, - [pageUp]: (date) => -new Date(date.getFullYear(), date.getMonth(), 0).getDate(), - [pageDown]: (date) => new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate(), - offset: (date, step) => date.setDate(date.getDate() + step) - } - }; - const newDate = innerDate.value.toDate(); - while (Math.abs(innerDate.value.diff(newDate, "year", true)) < 1) { - const map = mapping[keyboardMode.value]; - if (!map) - return; - map.offset(newDate, isFunction$1(map[code]) ? map[code](newDate) : (_a = map[code]) != null ? _a : 0); - if (disabledDate && disabledDate(newDate)) { - break; - } - const result = dayjs(newDate).locale(lang.value); - innerDate.value = result; - contextEmit("pick", result, true); - break; - } - }; - const handlePanelChange = (mode) => { - contextEmit("panel-change", innerDate.value.toDate(), mode, currentView.value); - }; - vue.watch(() => selectionMode.value, (val) => { - if (["month", "year"].includes(val)) { - currentView.value = val; - return; - } else if (val === "years") { - currentView.value = "year"; - return; - } else if (val === "months") { - currentView.value = "month"; - return; - } - currentView.value = "date"; - }, { immediate: true }); - vue.watch(() => currentView.value, () => { - popper == null ? void 0 : popper.updatePopper(); - }); - vue.watch(() => defaultValue.value, (val) => { - if (val) { - innerDate.value = getDefaultValue(); - } - }, { immediate: true }); - vue.watch(() => props.parsedValue, (val) => { - if (val) { - if (isMultipleType.value) - return; - if (isArray$1(val)) - return; - innerDate.value = val; - } else { - innerDate.value = getDefaultValue(); - } - }, { immediate: true }); - contextEmit("set-picker-option", ["isValidValue", isValidValue]); - contextEmit("set-picker-option", ["formatToString", formatToString]); - contextEmit("set-picker-option", ["parseUserInput", parseUserInput]); - contextEmit("set-picker-option", ["handleFocusPicker", _handleFocusPicker]); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([ - vue.unref(ppNs).b(), - vue.unref(dpNs).b(), - { - "has-sidebar": _ctx.$slots.sidebar || vue.unref(hasShortcuts), - "has-time": vue.unref(showTime) - } - ]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ppNs).e("body-wrapper")) - }, [ - vue.renderSlot(_ctx.$slots, "sidebar", { - class: vue.normalizeClass(vue.unref(ppNs).e("sidebar")) - }), - vue.unref(hasShortcuts) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ppNs).e("sidebar")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(shortcuts), (shortcut, key) => { - return vue.openBlock(), vue.createElementBlock("button", { - key, - type: "button", - class: vue.normalizeClass(vue.unref(ppNs).e("shortcut")), - onClick: ($event) => handleShortcutClick(shortcut) - }, vue.toDisplayString(shortcut.text), 11, ["onClick"]); - }), 128)) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ppNs).e("body")) - }, [ - vue.unref(showTime) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(dpNs).e("time-header")) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(dpNs).e("editor-wrap")) - }, [ - vue.createVNode(vue.unref(ElInput), { - placeholder: vue.unref(t)("el.datepicker.selectDate"), - "model-value": vue.unref(visibleDate), - size: "small", - "validate-event": false, - onInput: (val) => userInputDate.value = val, - onChange: handleVisibleDateChange - }, null, 8, ["placeholder", "model-value", "onInput"]) - ], 2), - vue.withDirectives((vue.openBlock(), vue.createElementBlock("span", { - class: vue.normalizeClass(vue.unref(dpNs).e("editor-wrap")) - }, [ - vue.createVNode(vue.unref(ElInput), { - placeholder: vue.unref(t)("el.datepicker.selectTime"), - "model-value": vue.unref(visibleTime), - size: "small", - "validate-event": false, - onFocus: onTimePickerInputFocus, - onInput: (val) => userInputTime.value = val, - onChange: handleVisibleTimeChange - }, null, 8, ["placeholder", "model-value", "onInput"]), - vue.createVNode(vue.unref(TimePickPanel), { - visible: timePickerVisible.value, - format: vue.unref(timeFormat), - "parsed-value": innerDate.value, - onPick: handleTimePick - }, null, 8, ["visible", "format", "parsed-value"]) - ], 2)), [ - [vue.unref(ClickOutside), handleTimePickClose] - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.withDirectives(vue.createElementVNode("div", { - class: vue.normalizeClass([ - vue.unref(dpNs).e("header"), - (currentView.value === "year" || currentView.value === "month") && vue.unref(dpNs).e("header--bordered") - ]) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(dpNs).e("prev-btn")) - }, [ - vue.createElementVNode("button", { - type: "button", - "aria-label": vue.unref(t)(`el.datepicker.prevYear`), - class: vue.normalizeClass(["d-arrow-left", vue.unref(ppNs).e("icon-btn")]), - onClick: ($event) => moveByYear(false) - }, [ - vue.renderSlot(_ctx.$slots, "prev-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_left_default)) - ]), - _: 1 - }) - ]) - ], 10, ["aria-label", "onClick"]), - vue.withDirectives(vue.createElementVNode("button", { - type: "button", - "aria-label": vue.unref(t)(`el.datepicker.prevMonth`), - class: vue.normalizeClass([vue.unref(ppNs).e("icon-btn"), "arrow-left"]), - onClick: ($event) => moveByMonth(false) - }, [ - vue.renderSlot(_ctx.$slots, "prev-month", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_left_default)) - ]), - _: 1 - }) - ]) - ], 10, ["aria-label", "onClick"]), [ - [vue.vShow, currentView.value === "date"] - ]) - ], 2), - vue.createElementVNode("span", { - role: "button", - class: vue.normalizeClass(vue.unref(dpNs).e("header-label")), - "aria-live": "polite", - tabindex: "0", - onKeydown: vue.withKeys(($event) => showPicker("year"), ["enter"]), - onClick: ($event) => showPicker("year") - }, vue.toDisplayString(vue.unref(yearLabel)), 43, ["onKeydown", "onClick"]), - vue.withDirectives(vue.createElementVNode("span", { - role: "button", - "aria-live": "polite", - tabindex: "0", - class: vue.normalizeClass([ - vue.unref(dpNs).e("header-label"), - { active: currentView.value === "month" } - ]), - onKeydown: vue.withKeys(($event) => showPicker("month"), ["enter"]), - onClick: ($event) => showPicker("month") - }, vue.toDisplayString(vue.unref(t)(`el.datepicker.month${vue.unref(month) + 1}`)), 43, ["onKeydown", "onClick"]), [ - [vue.vShow, currentView.value === "date"] - ]), - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(dpNs).e("next-btn")) - }, [ - vue.withDirectives(vue.createElementVNode("button", { - type: "button", - "aria-label": vue.unref(t)(`el.datepicker.nextMonth`), - class: vue.normalizeClass([vue.unref(ppNs).e("icon-btn"), "arrow-right"]), - onClick: ($event) => moveByMonth(true) - }, [ - vue.renderSlot(_ctx.$slots, "next-month", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_right_default)) - ]), - _: 1 - }) - ]) - ], 10, ["aria-label", "onClick"]), [ - [vue.vShow, currentView.value === "date"] - ]), - vue.createElementVNode("button", { - type: "button", - "aria-label": vue.unref(t)(`el.datepicker.nextYear`), - class: vue.normalizeClass([vue.unref(ppNs).e("icon-btn"), "d-arrow-right"]), - onClick: ($event) => moveByYear(true) - }, [ - vue.renderSlot(_ctx.$slots, "next-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_right_default)) - ]), - _: 1 - }) - ]) - ], 10, ["aria-label", "onClick"]) - ], 2) - ], 2), [ - [vue.vShow, currentView.value !== "time"] - ]), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ppNs).e("content")), - onKeydown: handleKeydownTable - }, [ - currentView.value === "date" ? (vue.openBlock(), vue.createBlock(DateTable, { - key: 0, - ref_key: "currentViewRef", - ref: currentViewRef, - "selection-mode": vue.unref(selectionMode), - date: innerDate.value, - "parsed-value": _ctx.parsedValue, - "disabled-date": vue.unref(disabledDate), - "cell-class-name": vue.unref(cellClassName), - onPick: handleDatePick - }, null, 8, ["selection-mode", "date", "parsed-value", "disabled-date", "cell-class-name"])) : vue.createCommentVNode("v-if", true), - currentView.value === "year" ? (vue.openBlock(), vue.createBlock(YearTable, { - key: 1, - ref_key: "currentViewRef", - ref: currentViewRef, - "selection-mode": vue.unref(selectionMode), - date: innerDate.value, - "disabled-date": vue.unref(disabledDate), - "parsed-value": _ctx.parsedValue, - onPick: handleYearPick - }, null, 8, ["selection-mode", "date", "disabled-date", "parsed-value"])) : vue.createCommentVNode("v-if", true), - currentView.value === "month" ? (vue.openBlock(), vue.createBlock(MonthTable, { - key: 2, - ref_key: "currentViewRef", - ref: currentViewRef, - "selection-mode": vue.unref(selectionMode), - date: innerDate.value, - "parsed-value": _ctx.parsedValue, - "disabled-date": vue.unref(disabledDate), - onPick: handleMonthPick - }, null, 8, ["selection-mode", "date", "parsed-value", "disabled-date"])) : vue.createCommentVNode("v-if", true) - ], 34) - ], 2) - ], 2), - vue.withDirectives(vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ppNs).e("footer")) - }, [ - vue.withDirectives(vue.createVNode(vue.unref(ElButton), { - text: "", - size: "small", - class: vue.normalizeClass(vue.unref(ppNs).e("link-btn")), - disabled: vue.unref(disabledNow), - onClick: changeToNow - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(t)("el.datepicker.now")), 1) - ]), - _: 1 - }, 8, ["class", "disabled"]), [ - [vue.vShow, !vue.unref(isMultipleType) && _ctx.showNow] - ]), - vue.createVNode(vue.unref(ElButton), { - plain: "", - size: "small", - class: vue.normalizeClass(vue.unref(ppNs).e("link-btn")), - disabled: vue.unref(disabledConfirm), - onClick: onConfirm - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(t)("el.datepicker.confirm")), 1) - ]), - _: 1 - }, 8, ["class", "disabled"]) - ], 2), [ - [vue.vShow, vue.unref(footerVisible)] - ]) - ], 2); - }; - } - }); - var DatePickPanel = /* @__PURE__ */ _export_sfc(_sfc_main$1v, [["__file", "panel-date-pick.vue"]]); - - const panelDateRangeProps = buildProps({ - ...panelSharedProps, - ...panelRangeSharedProps, - visible: Boolean - }); - - const useShortcut = (lang) => { - const { emit } = vue.getCurrentInstance(); - const attrs = vue.useAttrs(); - const slots = vue.useSlots(); - const handleShortcutClick = (shortcut) => { - const shortcutValues = isFunction$1(shortcut.value) ? shortcut.value() : shortcut.value; - if (shortcutValues) { - emit("pick", [ - dayjs(shortcutValues[0]).locale(lang.value), - dayjs(shortcutValues[1]).locale(lang.value) - ]); - return; - } - if (shortcut.onClick) { - shortcut.onClick({ - attrs, - slots, - emit - }); - } - }; - return handleShortcutClick; - }; - - const useRangePicker = (props, { - defaultValue, - leftDate, - rightDate, - unit, - onParsedValueChanged - }) => { - const { emit } = vue.getCurrentInstance(); - const { pickerNs } = vue.inject(ROOT_PICKER_INJECTION_KEY); - const drpNs = useNamespace("date-range-picker"); - const { t, lang } = useLocale(); - const handleShortcutClick = useShortcut(lang); - const minDate = vue.ref(); - const maxDate = vue.ref(); - const rangeState = vue.ref({ - endDate: null, - selecting: false - }); - const handleChangeRange = (val) => { - rangeState.value = val; - }; - const handleRangeConfirm = (visible = false) => { - const _minDate = vue.unref(minDate); - const _maxDate = vue.unref(maxDate); - if (isValidRange([_minDate, _maxDate])) { - emit("pick", [_minDate, _maxDate], visible); - } - }; - const onSelect = (selecting) => { - rangeState.value.selecting = selecting; - if (!selecting) { - rangeState.value.endDate = null; - } - }; - const onReset = (parsedValue) => { - if (isArray$1(parsedValue) && parsedValue.length === 2) { - const [start, end] = parsedValue; - minDate.value = start; - leftDate.value = start; - maxDate.value = end; - onParsedValueChanged(vue.unref(minDate), vue.unref(maxDate)); - } else { - restoreDefault(); - } - }; - const restoreDefault = () => { - const [start, end] = getDefaultValue(vue.unref(defaultValue), { - lang: vue.unref(lang), - unit, - unlinkPanels: props.unlinkPanels - }); - minDate.value = void 0; - maxDate.value = void 0; - leftDate.value = start; - rightDate.value = end; - }; - vue.watch(defaultValue, (val) => { - if (val) { - restoreDefault(); - } - }, { immediate: true }); - vue.watch(() => props.parsedValue, onReset, { immediate: true }); - return { - minDate, - maxDate, - rangeState, - lang, - ppNs: pickerNs, - drpNs, - handleChangeRange, - handleRangeConfirm, - handleShortcutClick, - onSelect, - onReset, - t - }; - }; - - const unit$2 = "month"; - const _sfc_main$1u = /* @__PURE__ */ vue.defineComponent({ - __name: "panel-date-range", - props: panelDateRangeProps, - emits: [ - "pick", - "set-picker-option", - "calendar-change", - "panel-change" - ], - setup(__props, { emit }) { - const props = __props; - const pickerBase = vue.inject("EP_PICKER_BASE"); - const { disabledDate, cellClassName, defaultTime, clearable } = pickerBase.props; - const format = vue.toRef(pickerBase.props, "format"); - const shortcuts = vue.toRef(pickerBase.props, "shortcuts"); - const defaultValue = vue.toRef(pickerBase.props, "defaultValue"); - const { lang } = useLocale(); - const leftDate = vue.ref(dayjs().locale(lang.value)); - const rightDate = vue.ref(dayjs().locale(lang.value).add(1, unit$2)); - const { - minDate, - maxDate, - rangeState, - ppNs, - drpNs, - handleChangeRange, - handleRangeConfirm, - handleShortcutClick, - onSelect, - onReset, - t - } = useRangePicker(props, { - defaultValue, - leftDate, - rightDate, - unit: unit$2, - onParsedValueChanged - }); - vue.watch(() => props.visible, (visible) => { - if (!visible && rangeState.value.selecting) { - onReset(props.parsedValue); - onSelect(false); - } - }); - const dateUserInput = vue.ref({ - min: null, - max: null - }); - const timeUserInput = vue.ref({ - min: null, - max: null - }); - const leftLabel = vue.computed(() => { - return `${leftDate.value.year()} ${t("el.datepicker.year")} ${t(`el.datepicker.month${leftDate.value.month() + 1}`)}`; - }); - const rightLabel = vue.computed(() => { - return `${rightDate.value.year()} ${t("el.datepicker.year")} ${t(`el.datepicker.month${rightDate.value.month() + 1}`)}`; - }); - const leftYear = vue.computed(() => { - return leftDate.value.year(); - }); - const leftMonth = vue.computed(() => { - return leftDate.value.month(); - }); - const rightYear = vue.computed(() => { - return rightDate.value.year(); - }); - const rightMonth = vue.computed(() => { - return rightDate.value.month(); - }); - const hasShortcuts = vue.computed(() => !!shortcuts.value.length); - const minVisibleDate = vue.computed(() => { - if (dateUserInput.value.min !== null) - return dateUserInput.value.min; - if (minDate.value) - return minDate.value.format(dateFormat.value); - return ""; - }); - const maxVisibleDate = vue.computed(() => { - if (dateUserInput.value.max !== null) - return dateUserInput.value.max; - if (maxDate.value || minDate.value) - return (maxDate.value || minDate.value).format(dateFormat.value); - return ""; - }); - const minVisibleTime = vue.computed(() => { - if (timeUserInput.value.min !== null) - return timeUserInput.value.min; - if (minDate.value) - return minDate.value.format(timeFormat.value); - return ""; - }); - const maxVisibleTime = vue.computed(() => { - if (timeUserInput.value.max !== null) - return timeUserInput.value.max; - if (maxDate.value || minDate.value) - return (maxDate.value || minDate.value).format(timeFormat.value); - return ""; - }); - const timeFormat = vue.computed(() => { - return props.timeFormat || extractTimeFormat(format.value); - }); - const dateFormat = vue.computed(() => { - return props.dateFormat || extractDateFormat(format.value); - }); - const isValidValue = (date) => { - return isValidRange(date) && (disabledDate ? !disabledDate(date[0].toDate()) && !disabledDate(date[1].toDate()) : true); - }; - const leftPrevYear = () => { - leftDate.value = leftDate.value.subtract(1, "year"); - if (!props.unlinkPanels) { - rightDate.value = leftDate.value.add(1, "month"); - } - handlePanelChange("year"); - }; - const leftPrevMonth = () => { - leftDate.value = leftDate.value.subtract(1, "month"); - if (!props.unlinkPanels) { - rightDate.value = leftDate.value.add(1, "month"); - } - handlePanelChange("month"); - }; - const rightNextYear = () => { - if (!props.unlinkPanels) { - leftDate.value = leftDate.value.add(1, "year"); - rightDate.value = leftDate.value.add(1, "month"); - } else { - rightDate.value = rightDate.value.add(1, "year"); - } - handlePanelChange("year"); - }; - const rightNextMonth = () => { - if (!props.unlinkPanels) { - leftDate.value = leftDate.value.add(1, "month"); - rightDate.value = leftDate.value.add(1, "month"); - } else { - rightDate.value = rightDate.value.add(1, "month"); - } - handlePanelChange("month"); - }; - const leftNextYear = () => { - leftDate.value = leftDate.value.add(1, "year"); - handlePanelChange("year"); - }; - const leftNextMonth = () => { - leftDate.value = leftDate.value.add(1, "month"); - handlePanelChange("month"); - }; - const rightPrevYear = () => { - rightDate.value = rightDate.value.subtract(1, "year"); - handlePanelChange("year"); - }; - const rightPrevMonth = () => { - rightDate.value = rightDate.value.subtract(1, "month"); - handlePanelChange("month"); - }; - const handlePanelChange = (mode) => { - emit("panel-change", [leftDate.value.toDate(), rightDate.value.toDate()], mode); - }; - const enableMonthArrow = vue.computed(() => { - const nextMonth = (leftMonth.value + 1) % 12; - const yearOffset = leftMonth.value + 1 >= 12 ? 1 : 0; - return props.unlinkPanels && new Date(leftYear.value + yearOffset, nextMonth) < new Date(rightYear.value, rightMonth.value); - }); - const enableYearArrow = vue.computed(() => { - return props.unlinkPanels && rightYear.value * 12 + rightMonth.value - (leftYear.value * 12 + leftMonth.value + 1) >= 12; - }); - const btnDisabled = vue.computed(() => { - return !(minDate.value && maxDate.value && !rangeState.value.selecting && isValidRange([minDate.value, maxDate.value])); - }); - const showTime = vue.computed(() => props.type === "datetime" || props.type === "datetimerange"); - const formatEmit = (emitDayjs, index) => { - if (!emitDayjs) - return; - if (defaultTime) { - const defaultTimeD = dayjs(defaultTime[index] || defaultTime).locale(lang.value); - return defaultTimeD.year(emitDayjs.year()).month(emitDayjs.month()).date(emitDayjs.date()); - } - return emitDayjs; - }; - const handleRangePick = (val, close = true) => { - const min_ = val.minDate; - const max_ = val.maxDate; - const minDate_ = formatEmit(min_, 0); - const maxDate_ = formatEmit(max_, 1); - if (maxDate.value === maxDate_ && minDate.value === minDate_) { - return; - } - emit("calendar-change", [min_.toDate(), max_ && max_.toDate()]); - maxDate.value = maxDate_; - minDate.value = minDate_; - if (!close || showTime.value) - return; - handleRangeConfirm(); - }; - const minTimePickerVisible = vue.ref(false); - const maxTimePickerVisible = vue.ref(false); - const handleMinTimeClose = () => { - minTimePickerVisible.value = false; - }; - const handleMaxTimeClose = () => { - maxTimePickerVisible.value = false; - }; - const handleDateInput = (value, type) => { - dateUserInput.value[type] = value; - const parsedValueD = dayjs(value, dateFormat.value).locale(lang.value); - if (parsedValueD.isValid()) { - if (disabledDate && disabledDate(parsedValueD.toDate())) { - return; - } - if (type === "min") { - leftDate.value = parsedValueD; - minDate.value = (minDate.value || leftDate.value).year(parsedValueD.year()).month(parsedValueD.month()).date(parsedValueD.date()); - if (!props.unlinkPanels && (!maxDate.value || maxDate.value.isBefore(minDate.value))) { - rightDate.value = parsedValueD.add(1, "month"); - maxDate.value = minDate.value.add(1, "month"); - } - } else { - rightDate.value = parsedValueD; - maxDate.value = (maxDate.value || rightDate.value).year(parsedValueD.year()).month(parsedValueD.month()).date(parsedValueD.date()); - if (!props.unlinkPanels && (!minDate.value || minDate.value.isAfter(maxDate.value))) { - leftDate.value = parsedValueD.subtract(1, "month"); - minDate.value = maxDate.value.subtract(1, "month"); - } - } - } - }; - const handleDateChange = (_, type) => { - dateUserInput.value[type] = null; - }; - const handleTimeInput = (value, type) => { - timeUserInput.value[type] = value; - const parsedValueD = dayjs(value, timeFormat.value).locale(lang.value); - if (parsedValueD.isValid()) { - if (type === "min") { - minTimePickerVisible.value = true; - minDate.value = (minDate.value || leftDate.value).hour(parsedValueD.hour()).minute(parsedValueD.minute()).second(parsedValueD.second()); - } else { - maxTimePickerVisible.value = true; - maxDate.value = (maxDate.value || rightDate.value).hour(parsedValueD.hour()).minute(parsedValueD.minute()).second(parsedValueD.second()); - rightDate.value = maxDate.value; - } - } - }; - const handleTimeChange = (value, type) => { - timeUserInput.value[type] = null; - if (type === "min") { - leftDate.value = minDate.value; - minTimePickerVisible.value = false; - if (!maxDate.value || maxDate.value.isBefore(minDate.value)) { - maxDate.value = minDate.value; - } - } else { - rightDate.value = maxDate.value; - maxTimePickerVisible.value = false; - if (maxDate.value && maxDate.value.isBefore(minDate.value)) { - minDate.value = maxDate.value; - } - } - }; - const handleMinTimePick = (value, visible, first) => { - if (timeUserInput.value.min) - return; - if (value) { - leftDate.value = value; - minDate.value = (minDate.value || leftDate.value).hour(value.hour()).minute(value.minute()).second(value.second()); - } - if (!first) { - minTimePickerVisible.value = visible; - } - if (!maxDate.value || maxDate.value.isBefore(minDate.value)) { - maxDate.value = minDate.value; - rightDate.value = value; - } - }; - const handleMaxTimePick = (value, visible, first) => { - if (timeUserInput.value.max) - return; - if (value) { - rightDate.value = value; - maxDate.value = (maxDate.value || rightDate.value).hour(value.hour()).minute(value.minute()).second(value.second()); - } - if (!first) { - maxTimePickerVisible.value = visible; - } - if (maxDate.value && maxDate.value.isBefore(minDate.value)) { - minDate.value = maxDate.value; - } - }; - const handleClear = () => { - leftDate.value = getDefaultValue(vue.unref(defaultValue), { - lang: vue.unref(lang), - unit: "month", - unlinkPanels: props.unlinkPanels - })[0]; - rightDate.value = leftDate.value.add(1, "month"); - maxDate.value = void 0; - minDate.value = void 0; - emit("pick", null); - }; - const formatToString = (value) => { - return isArray$1(value) ? value.map((_) => _.format(format.value)) : value.format(format.value); - }; - const parseUserInput = (value) => { - return isArray$1(value) ? value.map((_) => dayjs(_, format.value).locale(lang.value)) : dayjs(value, format.value).locale(lang.value); - }; - function onParsedValueChanged(minDate2, maxDate2) { - if (props.unlinkPanels && maxDate2) { - const minDateYear = (minDate2 == null ? void 0 : minDate2.year()) || 0; - const minDateMonth = (minDate2 == null ? void 0 : minDate2.month()) || 0; - const maxDateYear = maxDate2.year(); - const maxDateMonth = maxDate2.month(); - rightDate.value = minDateYear === maxDateYear && minDateMonth === maxDateMonth ? maxDate2.add(1, unit$2) : maxDate2; - } else { - rightDate.value = leftDate.value.add(1, unit$2); - if (maxDate2) { - rightDate.value = rightDate.value.hour(maxDate2.hour()).minute(maxDate2.minute()).second(maxDate2.second()); - } - } - } - emit("set-picker-option", ["isValidValue", isValidValue]); - emit("set-picker-option", ["parseUserInput", parseUserInput]); - emit("set-picker-option", ["formatToString", formatToString]); - emit("set-picker-option", ["handleClear", handleClear]); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([ - vue.unref(ppNs).b(), - vue.unref(drpNs).b(), - { - "has-sidebar": _ctx.$slots.sidebar || vue.unref(hasShortcuts), - "has-time": vue.unref(showTime) - } - ]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ppNs).e("body-wrapper")) - }, [ - vue.renderSlot(_ctx.$slots, "sidebar", { - class: vue.normalizeClass(vue.unref(ppNs).e("sidebar")) - }), - vue.unref(hasShortcuts) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ppNs).e("sidebar")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(shortcuts), (shortcut, key) => { - return vue.openBlock(), vue.createElementBlock("button", { - key, - type: "button", - class: vue.normalizeClass(vue.unref(ppNs).e("shortcut")), - onClick: ($event) => vue.unref(handleShortcutClick)(shortcut) - }, vue.toDisplayString(shortcut.text), 11, ["onClick"]); - }), 128)) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ppNs).e("body")) - }, [ - vue.unref(showTime) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(drpNs).e("time-header")) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(drpNs).e("editors-wrap")) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(drpNs).e("time-picker-wrap")) - }, [ - vue.createVNode(vue.unref(ElInput), { - size: "small", - disabled: vue.unref(rangeState).selecting, - placeholder: vue.unref(t)("el.datepicker.startDate"), - class: vue.normalizeClass(vue.unref(drpNs).e("editor")), - "model-value": vue.unref(minVisibleDate), - "validate-event": false, - onInput: (val) => handleDateInput(val, "min"), - onChange: (val) => handleDateChange(val, "min") - }, null, 8, ["disabled", "placeholder", "class", "model-value", "onInput", "onChange"]) - ], 2), - vue.withDirectives((vue.openBlock(), vue.createElementBlock("span", { - class: vue.normalizeClass(vue.unref(drpNs).e("time-picker-wrap")) - }, [ - vue.createVNode(vue.unref(ElInput), { - size: "small", - class: vue.normalizeClass(vue.unref(drpNs).e("editor")), - disabled: vue.unref(rangeState).selecting, - placeholder: vue.unref(t)("el.datepicker.startTime"), - "model-value": vue.unref(minVisibleTime), - "validate-event": false, - onFocus: ($event) => minTimePickerVisible.value = true, - onInput: (val) => handleTimeInput(val, "min"), - onChange: (val) => handleTimeChange(val, "min") - }, null, 8, ["class", "disabled", "placeholder", "model-value", "onFocus", "onInput", "onChange"]), - vue.createVNode(vue.unref(TimePickPanel), { - visible: minTimePickerVisible.value, - format: vue.unref(timeFormat), - "datetime-role": "start", - "parsed-value": leftDate.value, - onPick: handleMinTimePick - }, null, 8, ["visible", "format", "parsed-value"]) - ], 2)), [ - [vue.unref(ClickOutside), handleMinTimeClose] - ]) - ], 2), - vue.createElementVNode("span", null, [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_right_default)) - ]), - _: 1 - }) - ]), - vue.createElementVNode("span", { - class: vue.normalizeClass([vue.unref(drpNs).e("editors-wrap"), "is-right"]) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(drpNs).e("time-picker-wrap")) - }, [ - vue.createVNode(vue.unref(ElInput), { - size: "small", - class: vue.normalizeClass(vue.unref(drpNs).e("editor")), - disabled: vue.unref(rangeState).selecting, - placeholder: vue.unref(t)("el.datepicker.endDate"), - "model-value": vue.unref(maxVisibleDate), - readonly: !vue.unref(minDate), - "validate-event": false, - onInput: (val) => handleDateInput(val, "max"), - onChange: (val) => handleDateChange(val, "max") - }, null, 8, ["class", "disabled", "placeholder", "model-value", "readonly", "onInput", "onChange"]) - ], 2), - vue.withDirectives((vue.openBlock(), vue.createElementBlock("span", { - class: vue.normalizeClass(vue.unref(drpNs).e("time-picker-wrap")) - }, [ - vue.createVNode(vue.unref(ElInput), { - size: "small", - class: vue.normalizeClass(vue.unref(drpNs).e("editor")), - disabled: vue.unref(rangeState).selecting, - placeholder: vue.unref(t)("el.datepicker.endTime"), - "model-value": vue.unref(maxVisibleTime), - readonly: !vue.unref(minDate), - "validate-event": false, - onFocus: ($event) => vue.unref(minDate) && (maxTimePickerVisible.value = true), - onInput: (val) => handleTimeInput(val, "max"), - onChange: (val) => handleTimeChange(val, "max") - }, null, 8, ["class", "disabled", "placeholder", "model-value", "readonly", "onFocus", "onInput", "onChange"]), - vue.createVNode(vue.unref(TimePickPanel), { - "datetime-role": "end", - visible: maxTimePickerVisible.value, - format: vue.unref(timeFormat), - "parsed-value": rightDate.value, - onPick: handleMaxTimePick - }, null, 8, ["visible", "format", "parsed-value"]) - ], 2)), [ - [vue.unref(ClickOutside), handleMaxTimeClose] - ]) - ], 2) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass([[vue.unref(ppNs).e("content"), vue.unref(drpNs).e("content")], "is-left"]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(drpNs).e("header")) - }, [ - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(ppNs).e("icon-btn"), "d-arrow-left"]), - "aria-label": vue.unref(t)(`el.datepicker.prevYear`), - onClick: leftPrevYear - }, [ - vue.renderSlot(_ctx.$slots, "prev-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_left_default)) - ]), - _: 1 - }) - ]) - ], 10, ["aria-label"]), - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(ppNs).e("icon-btn"), "arrow-left"]), - "aria-label": vue.unref(t)(`el.datepicker.prevMonth`), - onClick: leftPrevMonth - }, [ - vue.renderSlot(_ctx.$slots, "prev-month", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_left_default)) - ]), - _: 1 - }) - ]) - ], 10, ["aria-label"]), - _ctx.unlinkPanels ? (vue.openBlock(), vue.createElementBlock("button", { - key: 0, - type: "button", - disabled: !vue.unref(enableYearArrow), - class: vue.normalizeClass([[vue.unref(ppNs).e("icon-btn"), { "is-disabled": !vue.unref(enableYearArrow) }], "d-arrow-right"]), - "aria-label": vue.unref(t)(`el.datepicker.nextYear`), - onClick: leftNextYear - }, [ - vue.renderSlot(_ctx.$slots, "next-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_right_default)) - ]), - _: 1 - }) - ]) - ], 10, ["disabled", "aria-label"])) : vue.createCommentVNode("v-if", true), - _ctx.unlinkPanels ? (vue.openBlock(), vue.createElementBlock("button", { - key: 1, - type: "button", - disabled: !vue.unref(enableMonthArrow), - class: vue.normalizeClass([[ - vue.unref(ppNs).e("icon-btn"), - { "is-disabled": !vue.unref(enableMonthArrow) } - ], "arrow-right"]), - "aria-label": vue.unref(t)(`el.datepicker.nextMonth`), - onClick: leftNextMonth - }, [ - vue.renderSlot(_ctx.$slots, "next-month", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_right_default)) - ]), - _: 1 - }) - ]) - ], 10, ["disabled", "aria-label"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", null, vue.toDisplayString(vue.unref(leftLabel)), 1) - ], 2), - vue.createVNode(DateTable, { - "selection-mode": "range", - date: leftDate.value, - "min-date": vue.unref(minDate), - "max-date": vue.unref(maxDate), - "range-state": vue.unref(rangeState), - "disabled-date": vue.unref(disabledDate), - "cell-class-name": vue.unref(cellClassName), - onChangerange: vue.unref(handleChangeRange), - onPick: handleRangePick, - onSelect: vue.unref(onSelect) - }, null, 8, ["date", "min-date", "max-date", "range-state", "disabled-date", "cell-class-name", "onChangerange", "onSelect"]) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass([[vue.unref(ppNs).e("content"), vue.unref(drpNs).e("content")], "is-right"]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(drpNs).e("header")) - }, [ - _ctx.unlinkPanels ? (vue.openBlock(), vue.createElementBlock("button", { - key: 0, - type: "button", - disabled: !vue.unref(enableYearArrow), - class: vue.normalizeClass([[vue.unref(ppNs).e("icon-btn"), { "is-disabled": !vue.unref(enableYearArrow) }], "d-arrow-left"]), - "aria-label": vue.unref(t)(`el.datepicker.prevYear`), - onClick: rightPrevYear - }, [ - vue.renderSlot(_ctx.$slots, "prev-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_left_default)) - ]), - _: 1 - }) - ]) - ], 10, ["disabled", "aria-label"])) : vue.createCommentVNode("v-if", true), - _ctx.unlinkPanels ? (vue.openBlock(), vue.createElementBlock("button", { - key: 1, - type: "button", - disabled: !vue.unref(enableMonthArrow), - class: vue.normalizeClass([[ - vue.unref(ppNs).e("icon-btn"), - { "is-disabled": !vue.unref(enableMonthArrow) } - ], "arrow-left"]), - "aria-label": vue.unref(t)(`el.datepicker.prevMonth`), - onClick: rightPrevMonth - }, [ - vue.renderSlot(_ctx.$slots, "prev-month", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_left_default)) - ]), - _: 1 - }) - ]) - ], 10, ["disabled", "aria-label"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("button", { - type: "button", - "aria-label": vue.unref(t)(`el.datepicker.nextYear`), - class: vue.normalizeClass([vue.unref(ppNs).e("icon-btn"), "d-arrow-right"]), - onClick: rightNextYear - }, [ - vue.renderSlot(_ctx.$slots, "next-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_right_default)) - ]), - _: 1 - }) - ]) - ], 10, ["aria-label"]), - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(ppNs).e("icon-btn"), "arrow-right"]), - "aria-label": vue.unref(t)(`el.datepicker.nextMonth`), - onClick: rightNextMonth - }, [ - vue.renderSlot(_ctx.$slots, "next-month", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_right_default)) - ]), - _: 1 - }) - ]) - ], 10, ["aria-label"]), - vue.createElementVNode("div", null, vue.toDisplayString(vue.unref(rightLabel)), 1) - ], 2), - vue.createVNode(DateTable, { - "selection-mode": "range", - date: rightDate.value, - "min-date": vue.unref(minDate), - "max-date": vue.unref(maxDate), - "range-state": vue.unref(rangeState), - "disabled-date": vue.unref(disabledDate), - "cell-class-name": vue.unref(cellClassName), - onChangerange: vue.unref(handleChangeRange), - onPick: handleRangePick, - onSelect: vue.unref(onSelect) - }, null, 8, ["date", "min-date", "max-date", "range-state", "disabled-date", "cell-class-name", "onChangerange", "onSelect"]) - ], 2) - ], 2) - ], 2), - vue.unref(showTime) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ppNs).e("footer")) - }, [ - vue.unref(clearable) ? (vue.openBlock(), vue.createBlock(vue.unref(ElButton), { - key: 0, - text: "", - size: "small", - class: vue.normalizeClass(vue.unref(ppNs).e("link-btn")), - onClick: handleClear - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(t)("el.datepicker.clear")), 1) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true), - vue.createVNode(vue.unref(ElButton), { - plain: "", - size: "small", - class: vue.normalizeClass(vue.unref(ppNs).e("link-btn")), - disabled: vue.unref(btnDisabled), - onClick: ($event) => vue.unref(handleRangeConfirm)(false) - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(t)("el.datepicker.confirm")), 1) - ]), - _: 1 - }, 8, ["class", "disabled", "onClick"]) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var DateRangePickPanel = /* @__PURE__ */ _export_sfc(_sfc_main$1u, [["__file", "panel-date-range.vue"]]); - - const panelMonthRangeProps = buildProps({ - ...panelRangeSharedProps - }); - const panelMonthRangeEmits = [ - "pick", - "set-picker-option", - "calendar-change" - ]; - - const useMonthRangeHeader = ({ - unlinkPanels, - leftDate, - rightDate - }) => { - const { t } = useLocale(); - const leftPrevYear = () => { - leftDate.value = leftDate.value.subtract(1, "year"); - if (!unlinkPanels.value) { - rightDate.value = rightDate.value.subtract(1, "year"); - } - }; - const rightNextYear = () => { - if (!unlinkPanels.value) { - leftDate.value = leftDate.value.add(1, "year"); - } - rightDate.value = rightDate.value.add(1, "year"); - }; - const leftNextYear = () => { - leftDate.value = leftDate.value.add(1, "year"); - }; - const rightPrevYear = () => { - rightDate.value = rightDate.value.subtract(1, "year"); - }; - const leftLabel = vue.computed(() => { - return `${leftDate.value.year()} ${t("el.datepicker.year")}`; - }); - const rightLabel = vue.computed(() => { - return `${rightDate.value.year()} ${t("el.datepicker.year")}`; - }); - const leftYear = vue.computed(() => { - return leftDate.value.year(); - }); - const rightYear = vue.computed(() => { - return rightDate.value.year() === leftDate.value.year() ? leftDate.value.year() + 1 : rightDate.value.year(); - }); - return { - leftPrevYear, - rightNextYear, - leftNextYear, - rightPrevYear, - leftLabel, - rightLabel, - leftYear, - rightYear - }; - }; - - const unit$1 = "year"; - const __default__$13 = vue.defineComponent({ - name: "DatePickerMonthRange" - }); - const _sfc_main$1t = /* @__PURE__ */ vue.defineComponent({ - ...__default__$13, - props: panelMonthRangeProps, - emits: panelMonthRangeEmits, - setup(__props, { emit }) { - const props = __props; - const { lang } = useLocale(); - const pickerBase = vue.inject("EP_PICKER_BASE"); - const { shortcuts, disabledDate } = pickerBase.props; - const format = vue.toRef(pickerBase.props, "format"); - const defaultValue = vue.toRef(pickerBase.props, "defaultValue"); - const leftDate = vue.ref(dayjs().locale(lang.value)); - const rightDate = vue.ref(dayjs().locale(lang.value).add(1, unit$1)); - const { - minDate, - maxDate, - rangeState, - ppNs, - drpNs, - handleChangeRange, - handleRangeConfirm, - handleShortcutClick, - onSelect - } = useRangePicker(props, { - defaultValue, - leftDate, - rightDate, - unit: unit$1, - onParsedValueChanged - }); - const hasShortcuts = vue.computed(() => !!shortcuts.length); - const { - leftPrevYear, - rightNextYear, - leftNextYear, - rightPrevYear, - leftLabel, - rightLabel, - leftYear, - rightYear - } = useMonthRangeHeader({ - unlinkPanels: vue.toRef(props, "unlinkPanels"), - leftDate, - rightDate - }); - const enableYearArrow = vue.computed(() => { - return props.unlinkPanels && rightYear.value > leftYear.value + 1; - }); - const handleRangePick = (val, close = true) => { - const minDate_ = val.minDate; - const maxDate_ = val.maxDate; - if (maxDate.value === maxDate_ && minDate.value === minDate_) { - return; - } - emit("calendar-change", [minDate_.toDate(), maxDate_ && maxDate_.toDate()]); - maxDate.value = maxDate_; - minDate.value = minDate_; - if (!close) - return; - handleRangeConfirm(); - }; - const handleClear = () => { - leftDate.value = getDefaultValue(vue.unref(defaultValue), { - lang: vue.unref(lang), - unit: "year", - unlinkPanels: props.unlinkPanels - })[0]; - rightDate.value = leftDate.value.add(1, "year"); - emit("pick", null); - }; - const formatToString = (value) => { - return isArray$1(value) ? value.map((_) => _.format(format.value)) : value.format(format.value); - }; - const parseUserInput = (value) => { - return isArray$1(value) ? value.map((_) => dayjs(_, format.value).locale(lang.value)) : dayjs(value, format.value).locale(lang.value); - }; - function onParsedValueChanged(minDate2, maxDate2) { - if (props.unlinkPanels && maxDate2) { - const minDateYear = (minDate2 == null ? void 0 : minDate2.year()) || 0; - const maxDateYear = maxDate2.year(); - rightDate.value = minDateYear === maxDateYear ? maxDate2.add(1, unit$1) : maxDate2; - } else { - rightDate.value = leftDate.value.add(1, unit$1); - } - } - emit("set-picker-option", ["isValidValue", isValidRange]); - emit("set-picker-option", ["formatToString", formatToString]); - emit("set-picker-option", ["parseUserInput", parseUserInput]); - emit("set-picker-option", ["handleClear", handleClear]); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([ - vue.unref(ppNs).b(), - vue.unref(drpNs).b(), - { - "has-sidebar": Boolean(_ctx.$slots.sidebar) || vue.unref(hasShortcuts) - } - ]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ppNs).e("body-wrapper")) - }, [ - vue.renderSlot(_ctx.$slots, "sidebar", { - class: vue.normalizeClass(vue.unref(ppNs).e("sidebar")) - }), - vue.unref(hasShortcuts) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ppNs).e("sidebar")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(shortcuts), (shortcut, key) => { - return vue.openBlock(), vue.createElementBlock("button", { - key, - type: "button", - class: vue.normalizeClass(vue.unref(ppNs).e("shortcut")), - onClick: ($event) => vue.unref(handleShortcutClick)(shortcut) - }, vue.toDisplayString(shortcut.text), 11, ["onClick"]); - }), 128)) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ppNs).e("body")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass([[vue.unref(ppNs).e("content"), vue.unref(drpNs).e("content")], "is-left"]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(drpNs).e("header")) - }, [ - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(ppNs).e("icon-btn"), "d-arrow-left"]), - onClick: vue.unref(leftPrevYear) - }, [ - vue.renderSlot(_ctx.$slots, "prev-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_left_default)) - ]), - _: 1 - }) - ]) - ], 10, ["onClick"]), - _ctx.unlinkPanels ? (vue.openBlock(), vue.createElementBlock("button", { - key: 0, - type: "button", - disabled: !vue.unref(enableYearArrow), - class: vue.normalizeClass([[ - vue.unref(ppNs).e("icon-btn"), - { [vue.unref(ppNs).is("disabled")]: !vue.unref(enableYearArrow) } - ], "d-arrow-right"]), - onClick: vue.unref(leftNextYear) - }, [ - vue.renderSlot(_ctx.$slots, "next-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_right_default)) - ]), - _: 1 - }) - ]) - ], 10, ["disabled", "onClick"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", null, vue.toDisplayString(vue.unref(leftLabel)), 1) - ], 2), - vue.createVNode(MonthTable, { - "selection-mode": "range", - date: leftDate.value, - "min-date": vue.unref(minDate), - "max-date": vue.unref(maxDate), - "range-state": vue.unref(rangeState), - "disabled-date": vue.unref(disabledDate), - onChangerange: vue.unref(handleChangeRange), - onPick: handleRangePick, - onSelect: vue.unref(onSelect) - }, null, 8, ["date", "min-date", "max-date", "range-state", "disabled-date", "onChangerange", "onSelect"]) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass([[vue.unref(ppNs).e("content"), vue.unref(drpNs).e("content")], "is-right"]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(drpNs).e("header")) - }, [ - _ctx.unlinkPanels ? (vue.openBlock(), vue.createElementBlock("button", { - key: 0, - type: "button", - disabled: !vue.unref(enableYearArrow), - class: vue.normalizeClass([[vue.unref(ppNs).e("icon-btn"), { "is-disabled": !vue.unref(enableYearArrow) }], "d-arrow-left"]), - onClick: vue.unref(rightPrevYear) - }, [ - vue.renderSlot(_ctx.$slots, "prev-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_left_default)) - ]), - _: 1 - }) - ]) - ], 10, ["disabled", "onClick"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass([vue.unref(ppNs).e("icon-btn"), "d-arrow-right"]), - onClick: vue.unref(rightNextYear) - }, [ - vue.renderSlot(_ctx.$slots, "next-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_right_default)) - ]), - _: 1 - }) - ]) - ], 10, ["onClick"]), - vue.createElementVNode("div", null, vue.toDisplayString(vue.unref(rightLabel)), 1) - ], 2), - vue.createVNode(MonthTable, { - "selection-mode": "range", - date: rightDate.value, - "min-date": vue.unref(minDate), - "max-date": vue.unref(maxDate), - "range-state": vue.unref(rangeState), - "disabled-date": vue.unref(disabledDate), - onChangerange: vue.unref(handleChangeRange), - onPick: handleRangePick, - onSelect: vue.unref(onSelect) - }, null, 8, ["date", "min-date", "max-date", "range-state", "disabled-date", "onChangerange", "onSelect"]) - ], 2) - ], 2) - ], 2) - ], 2); - }; - } - }); - var MonthRangePickPanel = /* @__PURE__ */ _export_sfc(_sfc_main$1t, [["__file", "panel-month-range.vue"]]); - - const panelYearRangeProps = buildProps({ - ...panelRangeSharedProps - }); - const panelYearRangeEmits = [ - "pick", - "set-picker-option", - "calendar-change" - ]; - - const useYearRangeHeader = ({ - unlinkPanels, - leftDate, - rightDate - }) => { - const leftPrevYear = () => { - leftDate.value = leftDate.value.subtract(10, "year"); - if (!unlinkPanels.value) { - rightDate.value = rightDate.value.subtract(10, "year"); - } - }; - const rightNextYear = () => { - if (!unlinkPanels.value) { - leftDate.value = leftDate.value.add(10, "year"); - } - rightDate.value = rightDate.value.add(10, "year"); - }; - const leftNextYear = () => { - leftDate.value = leftDate.value.add(10, "year"); - }; - const rightPrevYear = () => { - rightDate.value = rightDate.value.subtract(10, "year"); - }; - const leftLabel = vue.computed(() => { - const leftStartDate = Math.floor(leftDate.value.year() / 10) * 10; - return `${leftStartDate}-${leftStartDate + 9}`; - }); - const rightLabel = vue.computed(() => { - const rightStartDate = Math.floor(rightDate.value.year() / 10) * 10; - return `${rightStartDate}-${rightStartDate + 9}`; - }); - const leftYear = vue.computed(() => { - const leftEndDate = Math.floor(leftDate.value.year() / 10) * 10 + 9; - return leftEndDate; - }); - const rightYear = vue.computed(() => { - const rightStartDate = Math.floor(rightDate.value.year() / 10) * 10; - return rightStartDate; - }); - return { - leftPrevYear, - rightNextYear, - leftNextYear, - rightPrevYear, - leftLabel, - rightLabel, - leftYear, - rightYear - }; - }; - - const unit = "year"; - const __default__$12 = vue.defineComponent({ - name: "DatePickerYearRange" - }); - const _sfc_main$1s = /* @__PURE__ */ vue.defineComponent({ - ...__default__$12, - props: panelYearRangeProps, - emits: panelYearRangeEmits, - setup(__props, { emit }) { - const props = __props; - const { lang } = useLocale(); - const leftDate = vue.ref(dayjs().locale(lang.value)); - const rightDate = vue.ref(leftDate.value.add(10, "year")); - const { pickerNs: ppNs } = vue.inject(ROOT_PICKER_INJECTION_KEY); - const drpNs = useNamespace("date-range-picker"); - const hasShortcuts = vue.computed(() => !!shortcuts.length); - const panelKls = vue.computed(() => [ - ppNs.b(), - drpNs.b(), - { - "has-sidebar": Boolean(vue.useSlots().sidebar) || hasShortcuts.value - } - ]); - const leftPanelKls = vue.computed(() => { - return { - content: [ppNs.e("content"), drpNs.e("content"), "is-left"], - arrowLeftBtn: [ppNs.e("icon-btn"), "d-arrow-left"], - arrowRightBtn: [ - ppNs.e("icon-btn"), - { [ppNs.is("disabled")]: !enableYearArrow.value }, - "d-arrow-right" - ] - }; - }); - const rightPanelKls = vue.computed(() => { - return { - content: [ppNs.e("content"), drpNs.e("content"), "is-right"], - arrowLeftBtn: [ - ppNs.e("icon-btn"), - { "is-disabled": !enableYearArrow.value }, - "d-arrow-left" - ], - arrowRightBtn: [ppNs.e("icon-btn"), "d-arrow-right"] - }; - }); - const handleShortcutClick = useShortcut(lang); - const { - leftPrevYear, - rightNextYear, - leftNextYear, - rightPrevYear, - leftLabel, - rightLabel, - leftYear, - rightYear - } = useYearRangeHeader({ - unlinkPanels: vue.toRef(props, "unlinkPanels"), - leftDate, - rightDate - }); - const enableYearArrow = vue.computed(() => { - return props.unlinkPanels && rightYear.value > leftYear.value + 1; - }); - const minDate = vue.ref(); - const maxDate = vue.ref(); - const rangeState = vue.ref({ - endDate: null, - selecting: false - }); - const handleChangeRange = (val) => { - rangeState.value = val; - }; - const handleRangePick = (val, close = true) => { - const minDate_ = val.minDate; - const maxDate_ = val.maxDate; - if (maxDate.value === maxDate_ && minDate.value === minDate_) { - return; - } - emit("calendar-change", [minDate_.toDate(), maxDate_ && maxDate_.toDate()]); - maxDate.value = maxDate_; - minDate.value = minDate_; - if (!close) - return; - handleConfirm(); - }; - const handleConfirm = (visible = false) => { - if (isValidRange([minDate.value, maxDate.value])) { - emit("pick", [minDate.value, maxDate.value], visible); - } - }; - const onSelect = (selecting) => { - rangeState.value.selecting = selecting; - if (!selecting) { - rangeState.value.endDate = null; - } - }; - const pickerBase = vue.inject("EP_PICKER_BASE"); - const { shortcuts, disabledDate } = pickerBase.props; - const format = vue.toRef(pickerBase.props, "format"); - const defaultValue = vue.toRef(pickerBase.props, "defaultValue"); - const getDefaultValue = () => { - let start; - if (isArray$1(defaultValue.value)) { - const left = dayjs(defaultValue.value[0]); - let right = dayjs(defaultValue.value[1]); - if (!props.unlinkPanels) { - right = left.add(10, unit); - } - return [left, right]; - } else if (defaultValue.value) { - start = dayjs(defaultValue.value); - } else { - start = dayjs(); - } - start = start.locale(lang.value); - return [start, start.add(10, unit)]; - }; - vue.watch(() => defaultValue.value, (val) => { - if (val) { - const defaultArr = getDefaultValue(); - leftDate.value = defaultArr[0]; - rightDate.value = defaultArr[1]; - } - }, { immediate: true }); - vue.watch(() => props.parsedValue, (newVal) => { - if (newVal && newVal.length === 2) { - minDate.value = newVal[0]; - maxDate.value = newVal[1]; - leftDate.value = minDate.value; - if (props.unlinkPanels && maxDate.value) { - const minDateYear = minDate.value.year(); - const maxDateYear = maxDate.value.year(); - rightDate.value = minDateYear === maxDateYear ? maxDate.value.add(10, "year") : maxDate.value; - } else { - rightDate.value = leftDate.value.add(10, "year"); - } - } else { - const defaultArr = getDefaultValue(); - minDate.value = void 0; - maxDate.value = void 0; - leftDate.value = defaultArr[0]; - rightDate.value = defaultArr[1]; - } - }, { immediate: true }); - const parseUserInput = (value) => { - return isArray$1(value) ? value.map((_) => dayjs(_, format.value).locale(lang.value)) : dayjs(value, format.value).locale(lang.value); - }; - const formatToString = (value) => { - return isArray$1(value) ? value.map((day) => day.format(format.value)) : value.format(format.value); - }; - const isValidValue = (date) => { - return isValidRange(date) && (disabledDate ? !disabledDate(date[0].toDate()) && !disabledDate(date[1].toDate()) : true); - }; - const handleClear = () => { - const defaultArr = getDefaultValue(); - leftDate.value = defaultArr[0]; - rightDate.value = defaultArr[1]; - maxDate.value = void 0; - minDate.value = void 0; - emit("pick", null); - }; - emit("set-picker-option", ["isValidValue", isValidValue]); - emit("set-picker-option", ["parseUserInput", parseUserInput]); - emit("set-picker-option", ["formatToString", formatToString]); - emit("set-picker-option", ["handleClear", handleClear]); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(panelKls)) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ppNs).e("body-wrapper")) - }, [ - vue.renderSlot(_ctx.$slots, "sidebar", { - class: vue.normalizeClass(vue.unref(ppNs).e("sidebar")) - }), - vue.unref(hasShortcuts) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ppNs).e("sidebar")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(shortcuts), (shortcut, key) => { - return vue.openBlock(), vue.createElementBlock("button", { - key, - type: "button", - class: vue.normalizeClass(vue.unref(ppNs).e("shortcut")), - onClick: ($event) => vue.unref(handleShortcutClick)(shortcut) - }, vue.toDisplayString(shortcut.text), 11, ["onClick"]); - }), 128)) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ppNs).e("body")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(leftPanelKls).content) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(drpNs).e("header")) - }, [ - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass(vue.unref(leftPanelKls).arrowLeftBtn), - onClick: vue.unref(leftPrevYear) - }, [ - vue.renderSlot(_ctx.$slots, "prev-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_left_default)) - ]), - _: 1 - }) - ]) - ], 10, ["onClick"]), - _ctx.unlinkPanels ? (vue.openBlock(), vue.createElementBlock("button", { - key: 0, - type: "button", - disabled: !vue.unref(enableYearArrow), - class: vue.normalizeClass(vue.unref(leftPanelKls).arrowRightBtn), - onClick: vue.unref(leftNextYear) - }, [ - vue.renderSlot(_ctx.$slots, "next-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_right_default)) - ]), - _: 1 - }) - ]) - ], 10, ["disabled", "onClick"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", null, vue.toDisplayString(vue.unref(leftLabel)), 1) - ], 2), - vue.createVNode(YearTable, { - "selection-mode": "range", - date: leftDate.value, - "min-date": minDate.value, - "max-date": maxDate.value, - "range-state": rangeState.value, - "disabled-date": vue.unref(disabledDate), - onChangerange: handleChangeRange, - onPick: handleRangePick, - onSelect - }, null, 8, ["date", "min-date", "max-date", "range-state", "disabled-date"]) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(rightPanelKls).content) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(drpNs).e("header")) - }, [ - _ctx.unlinkPanels ? (vue.openBlock(), vue.createElementBlock("button", { - key: 0, - type: "button", - disabled: !vue.unref(enableYearArrow), - class: vue.normalizeClass(vue.unref(rightPanelKls).arrowLeftBtn), - onClick: vue.unref(rightPrevYear) - }, [ - vue.renderSlot(_ctx.$slots, "prev-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_left_default)) - ]), - _: 1 - }) - ]) - ], 10, ["disabled", "onClick"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("button", { - type: "button", - class: vue.normalizeClass(vue.unref(rightPanelKls).arrowRightBtn), - onClick: vue.unref(rightNextYear) - }, [ - vue.renderSlot(_ctx.$slots, "next-year", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(d_arrow_right_default)) - ]), - _: 1 - }) - ]) - ], 10, ["onClick"]), - vue.createElementVNode("div", null, vue.toDisplayString(vue.unref(rightLabel)), 1) - ], 2), - vue.createVNode(YearTable, { - "selection-mode": "range", - date: rightDate.value, - "min-date": minDate.value, - "max-date": maxDate.value, - "range-state": rangeState.value, - "disabled-date": vue.unref(disabledDate), - onChangerange: handleChangeRange, - onPick: handleRangePick, - onSelect - }, null, 8, ["date", "min-date", "max-date", "range-state", "disabled-date"]) - ], 2) - ], 2) - ], 2) - ], 2); - }; - } - }); - var YearRangePickPanel = /* @__PURE__ */ _export_sfc(_sfc_main$1s, [["__file", "panel-year-range.vue"]]); - - const getPanel = function(type) { - switch (type) { - case "daterange": - case "datetimerange": { - return DateRangePickPanel; - } - case "monthrange": { - return MonthRangePickPanel; - } - case "yearrange": { - return YearRangePickPanel; - } - default: { - return DatePickPanel; - } - } - }; - - dayjs.extend(localeData); - dayjs.extend(advancedFormat); - dayjs.extend(customParseFormat); - dayjs.extend(weekOfYear); - dayjs.extend(weekYear); - dayjs.extend(dayOfYear); - dayjs.extend(isSameOrAfter); - dayjs.extend(isSameOrBefore); - var DatePicker = vue.defineComponent({ - name: "ElDatePicker", - install: null, - props: datePickerProps, - emits: ["update:modelValue"], - setup(props, { - expose, - emit, - slots - }) { - const ns = useNamespace("picker-panel"); - vue.provide("ElPopperOptions", vue.reactive(vue.toRef(props, "popperOptions"))); - vue.provide(ROOT_PICKER_INJECTION_KEY, { - slots, - pickerNs: ns - }); - const commonPicker = vue.ref(); - const refProps = { - focus: () => { - var _a; - (_a = commonPicker.value) == null ? void 0 : _a.focus(); - }, - blur: () => { - var _a; - (_a = commonPicker.value) == null ? void 0 : _a.blur(); - }, - handleOpen: () => { - var _a; - (_a = commonPicker.value) == null ? void 0 : _a.handleOpen(); - }, - handleClose: () => { - var _a; - (_a = commonPicker.value) == null ? void 0 : _a.handleClose(); - } - }; - expose(refProps); - const onModelValueUpdated = (val) => { - emit("update:modelValue", val); - }; - return () => { - var _a; - const format = (_a = props.format) != null ? _a : DEFAULT_FORMATS_DATEPICKER[props.type] || DEFAULT_FORMATS_DATE; - const Component = getPanel(props.type); - return vue.createVNode(CommonPicker, vue.mergeProps(props, { - "format": format, - "type": props.type, - "ref": commonPicker, - "onUpdate:modelValue": onModelValueUpdated - }), { - default: (scopedProps) => vue.createVNode(Component, scopedProps, { - "prev-month": slots["prev-month"], - "next-month": slots["next-month"], - "prev-year": slots["prev-year"], - "next-year": slots["next-year"] - }), - "range-separator": slots["range-separator"] - }); - }; - } - }); - - const ElDatePicker = withInstall(DatePicker); - - const descriptionsKey = Symbol("elDescriptions"); - - var ElDescriptionsCell = vue.defineComponent({ - name: "ElDescriptionsCell", - props: { - cell: { - type: Object - }, - tag: { - type: String, - default: "td" - }, - type: { - type: String - } - }, - setup() { - const descriptions = vue.inject(descriptionsKey, {}); - return { - descriptions - }; - }, - render() { - var _a; - const item = getNormalizedProps(this.cell); - const directives = (((_a = this.cell) == null ? void 0 : _a.dirs) || []).map((dire) => { - const { dir, arg, modifiers, value } = dire; - return [dir, value, arg, modifiers]; - }); - const { border, direction } = this.descriptions; - const isVertical = direction === "vertical"; - const renderLabel = () => { - var _a2, _b, _c; - return ((_c = (_b = (_a2 = this.cell) == null ? void 0 : _a2.children) == null ? void 0 : _b.label) == null ? void 0 : _c.call(_b)) || item.label; - }; - const renderContent = () => { - var _a2, _b, _c; - return (_c = (_b = (_a2 = this.cell) == null ? void 0 : _a2.children) == null ? void 0 : _b.default) == null ? void 0 : _c.call(_b); - }; - const span = item.span; - const rowspan = item.rowspan; - const align = item.align ? `is-${item.align}` : ""; - const labelAlign = item.labelAlign ? `is-${item.labelAlign}` : align; - const className = item.className; - const labelClassName = item.labelClassName; - const width = this.type === "label" ? item.labelWidth || this.descriptions.labelWidth || item.width : item.width; - const style = { - width: addUnit(width), - minWidth: addUnit(item.minWidth) - }; - const ns = useNamespace("descriptions"); - switch (this.type) { - case "label": - return vue.withDirectives(vue.h(this.tag, { - style, - class: [ - ns.e("cell"), - ns.e("label"), - ns.is("bordered-label", border), - ns.is("vertical-label", isVertical), - labelAlign, - labelClassName - ], - colSpan: isVertical ? span : 1, - rowspan: isVertical ? 1 : rowspan - }, renderLabel()), directives); - case "content": - return vue.withDirectives(vue.h(this.tag, { - style, - class: [ - ns.e("cell"), - ns.e("content"), - ns.is("bordered-content", border), - ns.is("vertical-content", isVertical), - align, - className - ], - colSpan: isVertical ? span : span * 2 - 1, - rowspan: isVertical ? rowspan * 2 - 1 : rowspan - }, renderContent()), directives); - default: { - const label = renderLabel(); - const labelStyle = {}; - const width2 = addUnit(item.labelWidth || this.descriptions.labelWidth); - if (width2) { - labelStyle.width = width2; - labelStyle.display = "inline-block"; - } - return vue.withDirectives(vue.h("td", { - style, - class: [ns.e("cell"), align], - colSpan: span, - rowspan - }, [ - !isNil(label) ? vue.h("span", { - style: labelStyle, - class: [ns.e("label"), labelClassName] - }, label) : void 0, - vue.h("span", { - class: [ns.e("content"), className] - }, renderContent()) - ]), directives); - } - } - } - }); - - const descriptionsRowProps = buildProps({ - row: { - type: definePropType(Array), - default: () => [] - } - }); - - const __default__$11 = vue.defineComponent({ - name: "ElDescriptionsRow" - }); - const _sfc_main$1r = /* @__PURE__ */ vue.defineComponent({ - ...__default__$11, - props: descriptionsRowProps, - setup(__props) { - const descriptions = vue.inject(descriptionsKey, {}); - return (_ctx, _cache) => { - return vue.unref(descriptions).direction === "vertical" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.createElementVNode("tr", null, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.row, (cell, _index) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElDescriptionsCell), { - key: `tr1-${_index}`, - cell, - tag: "th", - type: "label" - }, null, 8, ["cell"]); - }), 128)) - ]), - vue.createElementVNode("tr", null, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.row, (cell, _index) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElDescriptionsCell), { - key: `tr2-${_index}`, - cell, - tag: "td", - type: "content" - }, null, 8, ["cell"]); - }), 128)) - ]) - ], 64)) : (vue.openBlock(), vue.createElementBlock("tr", { key: 1 }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.row, (cell, _index) => { - return vue.openBlock(), vue.createElementBlock(vue.Fragment, { - key: `tr3-${_index}` - }, [ - vue.unref(descriptions).border ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.createVNode(vue.unref(ElDescriptionsCell), { - cell, - tag: "td", - type: "label" - }, null, 8, ["cell"]), - vue.createVNode(vue.unref(ElDescriptionsCell), { - cell, - tag: "td", - type: "content" - }, null, 8, ["cell"]) - ], 64)) : (vue.openBlock(), vue.createBlock(vue.unref(ElDescriptionsCell), { - key: 1, - cell, - tag: "td", - type: "both" - }, null, 8, ["cell"])) - ], 64); - }), 128)) - ])); - }; - } - }); - var ElDescriptionsRow = /* @__PURE__ */ _export_sfc(_sfc_main$1r, [["__file", "descriptions-row.vue"]]); - - const descriptionProps = buildProps({ - border: Boolean, - column: { - type: Number, - default: 3 - }, - direction: { - type: String, - values: ["horizontal", "vertical"], - default: "horizontal" - }, - size: useSizeProp, - title: { - type: String, - default: "" - }, - extra: { - type: String, - default: "" - }, - labelWidth: { - type: [String, Number], - default: "" - } - }); - - const __default__$10 = vue.defineComponent({ - name: "ElDescriptions" - }); - const _sfc_main$1q = /* @__PURE__ */ vue.defineComponent({ - ...__default__$10, - props: descriptionProps, - setup(__props) { - const props = __props; - const ns = useNamespace("descriptions"); - const descriptionsSize = useFormSize(); - const slots = vue.useSlots(); - vue.provide(descriptionsKey, props); - const descriptionKls = vue.computed(() => [ns.b(), ns.m(descriptionsSize.value)]); - const filledNode = (node, span, count, isLast = false) => { - if (!node.props) { - node.props = {}; - } - if (span > count) { - node.props.span = count; - } - if (isLast) { - node.props.span = span; - } - return node; - }; - const getRows = () => { - if (!slots.default) - return []; - const children = flattedChildren(slots.default()).filter((node) => { - var _a; - return ((_a = node == null ? void 0 : node.type) == null ? void 0 : _a.name) === "ElDescriptionsItem"; - }); - const rows = []; - let temp = []; - let count = props.column; - let totalSpan = 0; - const rowspanTemp = []; - children.forEach((node, index) => { - var _a, _b, _c; - const span = ((_a = node.props) == null ? void 0 : _a.span) || 1; - const rowspan = ((_b = node.props) == null ? void 0 : _b.rowspan) || 1; - const rowNo = rows.length; - rowspanTemp[rowNo] || (rowspanTemp[rowNo] = 0); - if (rowspan > 1) { - for (let i = 1; i < rowspan; i++) { - rowspanTemp[_c = rowNo + i] || (rowspanTemp[_c] = 0); - rowspanTemp[rowNo + i]++; - totalSpan++; - } - } - if (rowspanTemp[rowNo] > 0) { - count -= rowspanTemp[rowNo]; - rowspanTemp[rowNo] = 0; - } - if (index < children.length - 1) { - totalSpan += span > count ? count : span; - } - if (index === children.length - 1) { - const lastSpan = props.column - totalSpan % props.column; - temp.push(filledNode(node, lastSpan, count, true)); - rows.push(temp); - return; - } - if (span < count) { - count -= span; - temp.push(node); - } else { - temp.push(filledNode(node, span, count)); - rows.push(temp); - count = props.column; - temp = []; - } - }); - return rows; - }; - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(descriptionKls)) - }, [ - _ctx.title || _ctx.extra || _ctx.$slots.title || _ctx.$slots.extra ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("header")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("title")) - }, [ - vue.renderSlot(_ctx.$slots, "title", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.title), 1) - ]) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("extra")) - }, [ - vue.renderSlot(_ctx.$slots, "extra", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.extra), 1) - ]) - ], 2) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("body")) - }, [ - vue.createElementVNode("table", { - class: vue.normalizeClass([vue.unref(ns).e("table"), vue.unref(ns).is("bordered", _ctx.border)]) - }, [ - vue.createElementVNode("tbody", null, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(getRows(), (row, _index) => { - return vue.openBlock(), vue.createBlock(ElDescriptionsRow, { - key: _index, - row - }, null, 8, ["row"]); - }), 128)) - ]) - ], 2) - ], 2) - ], 2); - }; - } - }); - var Descriptions = /* @__PURE__ */ _export_sfc(_sfc_main$1q, [["__file", "description.vue"]]); - - const descriptionItemProps = buildProps({ - label: { - type: String, - default: "" - }, - span: { - type: Number, - default: 1 - }, - rowspan: { - type: Number, - default: 1 - }, - width: { - type: [String, Number], - default: "" - }, - minWidth: { - type: [String, Number], - default: "" - }, - labelWidth: { - type: [String, Number], - default: "" - }, - align: { - type: String, - default: "left" - }, - labelAlign: { - type: String, - default: "" - }, - className: { - type: String, - default: "" - }, - labelClassName: { - type: String, - default: "" - } - }); - const DescriptionItem = vue.defineComponent({ - name: "ElDescriptionsItem", - props: descriptionItemProps - }); - - const ElDescriptions = withInstall(Descriptions, { - DescriptionsItem: DescriptionItem - }); - const ElDescriptionsItem = withNoopInstall(DescriptionItem); - - const overlayProps = buildProps({ - mask: { - type: Boolean, - default: true - }, - customMaskEvent: Boolean, - overlayClass: { - type: definePropType([ - String, - Array, - Object - ]) - }, - zIndex: { - type: definePropType([String, Number]) - } - }); - const overlayEmits = { - click: (evt) => evt instanceof MouseEvent - }; - const BLOCK = "overlay"; - var Overlay$1 = vue.defineComponent({ - name: "ElOverlay", - props: overlayProps, - emits: overlayEmits, - setup(props, { slots, emit }) { - const ns = useNamespace(BLOCK); - const onMaskClick = (e) => { - emit("click", e); - }; - const { onClick, onMousedown, onMouseup } = useSameTarget(props.customMaskEvent ? void 0 : onMaskClick); - return () => { - return props.mask ? vue.createVNode("div", { - class: [ns.b(), props.overlayClass], - style: { - zIndex: props.zIndex - }, - onClick, - onMousedown, - onMouseup - }, [vue.renderSlot(slots, "default")], PatchFlags.STYLE | PatchFlags.CLASS | PatchFlags.PROPS, ["onClick", "onMouseup", "onMousedown"]) : vue.h("div", { - class: props.overlayClass, - style: { - zIndex: props.zIndex, - position: "fixed", - top: "0px", - right: "0px", - bottom: "0px", - left: "0px" - } - }, [vue.renderSlot(slots, "default")]); - }; - } - }); - - const ElOverlay = Overlay$1; - - const dialogInjectionKey = Symbol("dialogInjectionKey"); - - const dialogContentProps = buildProps({ - center: Boolean, - alignCenter: Boolean, - closeIcon: { - type: iconPropType - }, - draggable: Boolean, - overflow: Boolean, - fullscreen: Boolean, - headerClass: String, - bodyClass: String, - footerClass: String, - showClose: { - type: Boolean, - default: true - }, - title: { - type: String, - default: "" - }, - ariaLevel: { - type: String, - default: "2" - } - }); - const dialogContentEmits = { - close: () => true - }; - - const __default__$$ = vue.defineComponent({ name: "ElDialogContent" }); - const _sfc_main$1p = /* @__PURE__ */ vue.defineComponent({ - ...__default__$$, - props: dialogContentProps, - emits: dialogContentEmits, - setup(__props, { expose }) { - const props = __props; - const { t } = useLocale(); - const { Close } = CloseComponents; - const { dialogRef, headerRef, bodyId, ns, style } = vue.inject(dialogInjectionKey); - const { focusTrapRef } = vue.inject(FOCUS_TRAP_INJECTION_KEY); - const dialogKls = vue.computed(() => [ - ns.b(), - ns.is("fullscreen", props.fullscreen), - ns.is("draggable", props.draggable), - ns.is("align-center", props.alignCenter), - { [ns.m("center")]: props.center } - ]); - const composedDialogRef = composeRefs(focusTrapRef, dialogRef); - const draggable = vue.computed(() => props.draggable); - const overflow = vue.computed(() => props.overflow); - const { resetPosition } = useDraggable(dialogRef, headerRef, draggable, overflow); - expose({ - resetPosition - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref: vue.unref(composedDialogRef), - class: vue.normalizeClass(vue.unref(dialogKls)), - style: vue.normalizeStyle(vue.unref(style)), - tabindex: "-1" - }, [ - vue.createElementVNode("header", { - ref_key: "headerRef", - ref: headerRef, - class: vue.normalizeClass([vue.unref(ns).e("header"), _ctx.headerClass, { "show-close": _ctx.showClose }]) - }, [ - vue.renderSlot(_ctx.$slots, "header", {}, () => [ - vue.createElementVNode("span", { - role: "heading", - "aria-level": _ctx.ariaLevel, - class: vue.normalizeClass(vue.unref(ns).e("title")) - }, vue.toDisplayString(_ctx.title), 11, ["aria-level"]) - ]), - _ctx.showClose ? (vue.openBlock(), vue.createElementBlock("button", { - key: 0, - "aria-label": vue.unref(t)("el.dialog.close"), - class: vue.normalizeClass(vue.unref(ns).e("headerbtn")), - type: "button", - onClick: ($event) => _ctx.$emit("close") - }, [ - vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass(vue.unref(ns).e("close")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.closeIcon || vue.unref(Close)))) - ]), - _: 1 - }, 8, ["class"]) - ], 10, ["aria-label", "onClick"])) : vue.createCommentVNode("v-if", true) - ], 2), - vue.createElementVNode("div", { - id: vue.unref(bodyId), - class: vue.normalizeClass([vue.unref(ns).e("body"), _ctx.bodyClass]) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 10, ["id"]), - _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("footer", { - key: 0, - class: vue.normalizeClass([vue.unref(ns).e("footer"), _ctx.footerClass]) - }, [ - vue.renderSlot(_ctx.$slots, "footer") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 6); - }; - } - }); - var ElDialogContent = /* @__PURE__ */ _export_sfc(_sfc_main$1p, [["__file", "dialog-content.vue"]]); - - const dialogProps = buildProps({ - ...dialogContentProps, - appendToBody: Boolean, - appendTo: { - type: definePropType([String, Object]), - default: "body" - }, - beforeClose: { - type: definePropType(Function) - }, - destroyOnClose: Boolean, - closeOnClickModal: { - type: Boolean, - default: true - }, - closeOnPressEscape: { - type: Boolean, - default: true - }, - lockScroll: { - type: Boolean, - default: true - }, - modal: { - type: Boolean, - default: true - }, - openDelay: { - type: Number, - default: 0 - }, - closeDelay: { - type: Number, - default: 0 - }, - top: { - type: String - }, - modelValue: Boolean, - modalClass: String, - headerClass: String, - bodyClass: String, - footerClass: String, - width: { - type: [String, Number] - }, - zIndex: { - type: Number - }, - trapFocus: Boolean, - headerAriaLevel: { - type: String, - default: "2" - } - }); - const dialogEmits = { - open: () => true, - opened: () => true, - close: () => true, - closed: () => true, - [UPDATE_MODEL_EVENT]: (value) => isBoolean(value), - openAutoFocus: () => true, - closeAutoFocus: () => true - }; - - const useDialog = (props, targetRef) => { - var _a; - const instance = vue.getCurrentInstance(); - const emit = instance.emit; - const { nextZIndex } = useZIndex(); - let lastPosition = ""; - const titleId = useId(); - const bodyId = useId(); - const visible = vue.ref(false); - const closed = vue.ref(false); - const rendered = vue.ref(false); - const zIndex = vue.ref((_a = props.zIndex) != null ? _a : nextZIndex()); - let openTimer = void 0; - let closeTimer = void 0; - const namespace = useGlobalConfig("namespace", defaultNamespace); - const style = vue.computed(() => { - const style2 = {}; - const varPrefix = `--${namespace.value}-dialog`; - if (!props.fullscreen) { - if (props.top) { - style2[`${varPrefix}-margin-top`] = props.top; - } - if (props.width) { - style2[`${varPrefix}-width`] = addUnit(props.width); - } - } - return style2; - }); - const overlayDialogStyle = vue.computed(() => { - if (props.alignCenter) { - return { display: "flex" }; - } - return {}; - }); - function afterEnter() { - emit("opened"); - } - function afterLeave() { - emit("closed"); - emit(UPDATE_MODEL_EVENT, false); - if (props.destroyOnClose) { - rendered.value = false; - } - } - function beforeLeave() { - emit("close"); - } - function open() { - closeTimer == null ? void 0 : closeTimer(); - openTimer == null ? void 0 : openTimer(); - if (props.openDelay && props.openDelay > 0) { - ({ stop: openTimer } = useTimeoutFn(() => doOpen(), props.openDelay)); - } else { - doOpen(); - } - } - function close() { - openTimer == null ? void 0 : openTimer(); - closeTimer == null ? void 0 : closeTimer(); - if (props.closeDelay && props.closeDelay > 0) { - ({ stop: closeTimer } = useTimeoutFn(() => doClose(), props.closeDelay)); - } else { - doClose(); - } - } - function handleClose() { - function hide(shouldCancel) { - if (shouldCancel) - return; - closed.value = true; - visible.value = false; - } - if (props.beforeClose) { - props.beforeClose(hide); - } else { - close(); - } - } - function onModalClick() { - if (props.closeOnClickModal) { - handleClose(); - } - } - function doOpen() { - if (!isClient) - return; - visible.value = true; - } - function doClose() { - visible.value = false; - } - function onOpenAutoFocus() { - emit("openAutoFocus"); - } - function onCloseAutoFocus() { - emit("closeAutoFocus"); - } - function onFocusoutPrevented(event) { - var _a2; - if (((_a2 = event.detail) == null ? void 0 : _a2.focusReason) === "pointer") { - event.preventDefault(); - } - } - if (props.lockScroll) { - useLockscreen(visible); - } - function onCloseRequested() { - if (props.closeOnPressEscape) { - handleClose(); - } - } - vue.watch(() => props.modelValue, (val) => { - if (val) { - closed.value = false; - open(); - rendered.value = true; - zIndex.value = isUndefined$1(props.zIndex) ? nextZIndex() : zIndex.value++; - vue.nextTick(() => { - emit("open"); - if (targetRef.value) { - targetRef.value.parentElement.scrollTop = 0; - targetRef.value.parentElement.scrollLeft = 0; - targetRef.value.scrollTop = 0; - } - }); - } else { - if (visible.value) { - close(); - } - } - }); - vue.watch(() => props.fullscreen, (val) => { - if (!targetRef.value) - return; - if (val) { - lastPosition = targetRef.value.style.transform; - targetRef.value.style.transform = ""; - } else { - targetRef.value.style.transform = lastPosition; - } - }); - vue.onMounted(() => { - if (props.modelValue) { - visible.value = true; - rendered.value = true; - open(); - } - }); - return { - afterEnter, - afterLeave, - beforeLeave, - handleClose, - onModalClick, - close, - doClose, - onOpenAutoFocus, - onCloseAutoFocus, - onCloseRequested, - onFocusoutPrevented, - titleId, - bodyId, - closed, - style, - overlayDialogStyle, - rendered, - visible, - zIndex - }; - }; - - const __default__$_ = vue.defineComponent({ - name: "ElDialog", - inheritAttrs: false - }); - const _sfc_main$1o = /* @__PURE__ */ vue.defineComponent({ - ...__default__$_, - props: dialogProps, - emits: dialogEmits, - setup(__props, { expose }) { - const props = __props; - const slots = vue.useSlots(); - useDeprecated({ - scope: "el-dialog", - from: "the title slot", - replacement: "the header slot", - version: "3.0.0", - ref: "https://element-plus.org/en-US/component/dialog.html#slots" - }, vue.computed(() => !!slots.title)); - const ns = useNamespace("dialog"); - const dialogRef = vue.ref(); - const headerRef = vue.ref(); - const dialogContentRef = vue.ref(); - const { - visible, - titleId, - bodyId, - style, - overlayDialogStyle, - rendered, - zIndex, - afterEnter, - afterLeave, - beforeLeave, - handleClose, - onModalClick, - onOpenAutoFocus, - onCloseAutoFocus, - onCloseRequested, - onFocusoutPrevented - } = useDialog(props, dialogRef); - vue.provide(dialogInjectionKey, { - dialogRef, - headerRef, - bodyId, - ns, - rendered, - style - }); - const overlayEvent = useSameTarget(onModalClick); - const draggable = vue.computed(() => props.draggable && !props.fullscreen); - const resetPosition = () => { - var _a; - (_a = dialogContentRef.value) == null ? void 0 : _a.resetPosition(); - }; - expose({ - visible, - dialogContentRef, - resetPosition - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTeleport$1), { - to: _ctx.appendTo, - disabled: _ctx.appendTo !== "body" ? false : !_ctx.appendToBody - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.Transition, { - name: "dialog-fade", - onAfterEnter: vue.unref(afterEnter), - onAfterLeave: vue.unref(afterLeave), - onBeforeLeave: vue.unref(beforeLeave), - persisted: "" - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createVNode(vue.unref(ElOverlay), { - "custom-mask-event": "", - mask: _ctx.modal, - "overlay-class": _ctx.modalClass, - "z-index": vue.unref(zIndex) - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - role: "dialog", - "aria-modal": "true", - "aria-label": _ctx.title || void 0, - "aria-labelledby": !_ctx.title ? vue.unref(titleId) : void 0, - "aria-describedby": vue.unref(bodyId), - class: vue.normalizeClass(`${vue.unref(ns).namespace.value}-overlay-dialog`), - style: vue.normalizeStyle(vue.unref(overlayDialogStyle)), - onClick: vue.unref(overlayEvent).onClick, - onMousedown: vue.unref(overlayEvent).onMousedown, - onMouseup: vue.unref(overlayEvent).onMouseup - }, [ - vue.createVNode(vue.unref(ElFocusTrap), { - loop: "", - trapped: vue.unref(visible), - "focus-start-el": "container", - onFocusAfterTrapped: vue.unref(onOpenAutoFocus), - onFocusAfterReleased: vue.unref(onCloseAutoFocus), - onFocusoutPrevented: vue.unref(onFocusoutPrevented), - onReleaseRequested: vue.unref(onCloseRequested) - }, { - default: vue.withCtx(() => [ - vue.unref(rendered) ? (vue.openBlock(), vue.createBlock(ElDialogContent, vue.mergeProps({ - key: 0, - ref_key: "dialogContentRef", - ref: dialogContentRef - }, _ctx.$attrs, { - center: _ctx.center, - "align-center": _ctx.alignCenter, - "close-icon": _ctx.closeIcon, - draggable: vue.unref(draggable), - overflow: _ctx.overflow, - fullscreen: _ctx.fullscreen, - "header-class": _ctx.headerClass, - "body-class": _ctx.bodyClass, - "footer-class": _ctx.footerClass, - "show-close": _ctx.showClose, - title: _ctx.title, - "aria-level": _ctx.headerAriaLevel, - onClose: vue.unref(handleClose) - }), vue.createSlots({ - header: vue.withCtx(() => [ - !_ctx.$slots.title ? vue.renderSlot(_ctx.$slots, "header", { - key: 0, - close: vue.unref(handleClose), - titleId: vue.unref(titleId), - titleClass: vue.unref(ns).e("title") - }) : vue.renderSlot(_ctx.$slots, "title", { key: 1 }) - ]), - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 2 - }, [ - _ctx.$slots.footer ? { - name: "footer", - fn: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "footer") - ]) - } : void 0 - ]), 1040, ["center", "align-center", "close-icon", "draggable", "overflow", "fullscreen", "header-class", "body-class", "footer-class", "show-close", "title", "aria-level", "onClose"])) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["trapped", "onFocusAfterTrapped", "onFocusAfterReleased", "onFocusoutPrevented", "onReleaseRequested"]) - ], 46, ["aria-label", "aria-labelledby", "aria-describedby", "onClick", "onMousedown", "onMouseup"]) - ]), - _: 3 - }, 8, ["mask", "overlay-class", "z-index"]), [ - [vue.vShow, vue.unref(visible)] - ]) - ]), - _: 3 - }, 8, ["onAfterEnter", "onAfterLeave", "onBeforeLeave"]) - ]), - _: 3 - }, 8, ["to", "disabled"]); - }; - } - }); - var Dialog = /* @__PURE__ */ _export_sfc(_sfc_main$1o, [["__file", "dialog.vue"]]); - - const ElDialog = withInstall(Dialog); - - const dividerProps = buildProps({ - direction: { - type: String, - values: ["horizontal", "vertical"], - default: "horizontal" - }, - contentPosition: { - type: String, - values: ["left", "center", "right"], - default: "center" - }, - borderStyle: { - type: definePropType(String), - default: "solid" - } - }); - - const __default__$Z = vue.defineComponent({ - name: "ElDivider" - }); - const _sfc_main$1n = /* @__PURE__ */ vue.defineComponent({ - ...__default__$Z, - props: dividerProps, - setup(__props) { - const props = __props; - const ns = useNamespace("divider"); - const dividerStyle = vue.computed(() => { - return ns.cssVar({ - "border-style": props.borderStyle - }); - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([vue.unref(ns).b(), vue.unref(ns).m(_ctx.direction)]), - style: vue.normalizeStyle(vue.unref(dividerStyle)), - role: "separator" - }, [ - _ctx.$slots.default && _ctx.direction !== "vertical" ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass([vue.unref(ns).e("text"), vue.unref(ns).is(_ctx.contentPosition)]) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 6); - }; - } - }); - var Divider = /* @__PURE__ */ _export_sfc(_sfc_main$1n, [["__file", "divider.vue"]]); - - const ElDivider = withInstall(Divider); - - const drawerProps = buildProps({ - ...dialogProps, - direction: { - type: String, - default: "rtl", - values: ["ltr", "rtl", "ttb", "btt"] - }, - size: { - type: [String, Number], - default: "30%" - }, - withHeader: { - type: Boolean, - default: true - }, - modalFade: { - type: Boolean, - default: true - }, - headerAriaLevel: { - type: String, - default: "2" - } - }); - const drawerEmits = dialogEmits; - - const __default__$Y = vue.defineComponent({ - name: "ElDrawer", - inheritAttrs: false - }); - const _sfc_main$1m = /* @__PURE__ */ vue.defineComponent({ - ...__default__$Y, - props: drawerProps, - emits: drawerEmits, - setup(__props, { expose }) { - const props = __props; - const slots = vue.useSlots(); - useDeprecated({ - scope: "el-drawer", - from: "the title slot", - replacement: "the header slot", - version: "3.0.0", - ref: "https://element-plus.org/en-US/component/drawer.html#slots" - }, vue.computed(() => !!slots.title)); - const drawerRef = vue.ref(); - const focusStartRef = vue.ref(); - const ns = useNamespace("drawer"); - const { t } = useLocale(); - const { - afterEnter, - afterLeave, - beforeLeave, - visible, - rendered, - titleId, - bodyId, - zIndex, - onModalClick, - onOpenAutoFocus, - onCloseAutoFocus, - onFocusoutPrevented, - onCloseRequested, - handleClose - } = useDialog(props, drawerRef); - const isHorizontal = vue.computed(() => props.direction === "rtl" || props.direction === "ltr"); - const drawerSize = vue.computed(() => addUnit(props.size)); - expose({ - handleClose, - afterEnter, - afterLeave - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTeleport$1), { - to: _ctx.appendTo, - disabled: _ctx.appendTo !== "body" ? false : !_ctx.appendToBody - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.Transition, { - name: vue.unref(ns).b("fade"), - onAfterEnter: vue.unref(afterEnter), - onAfterLeave: vue.unref(afterLeave), - onBeforeLeave: vue.unref(beforeLeave), - persisted: "" - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createVNode(vue.unref(ElOverlay), { - mask: _ctx.modal, - "overlay-class": _ctx.modalClass, - "z-index": vue.unref(zIndex), - onClick: vue.unref(onModalClick) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(ElFocusTrap), { - loop: "", - trapped: vue.unref(visible), - "focus-trap-el": drawerRef.value, - "focus-start-el": focusStartRef.value, - onFocusAfterTrapped: vue.unref(onOpenAutoFocus), - onFocusAfterReleased: vue.unref(onCloseAutoFocus), - onFocusoutPrevented: vue.unref(onFocusoutPrevented), - onReleaseRequested: vue.unref(onCloseRequested) - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("div", vue.mergeProps({ - ref_key: "drawerRef", - ref: drawerRef, - "aria-modal": "true", - "aria-label": _ctx.title || void 0, - "aria-labelledby": !_ctx.title ? vue.unref(titleId) : void 0, - "aria-describedby": vue.unref(bodyId) - }, _ctx.$attrs, { - class: [vue.unref(ns).b(), _ctx.direction, vue.unref(visible) && "open"], - style: vue.unref(isHorizontal) ? "width: " + vue.unref(drawerSize) : "height: " + vue.unref(drawerSize), - role: "dialog", - onClick: vue.withModifiers(() => { - }, ["stop"]) - }), [ - vue.createElementVNode("span", { - ref_key: "focusStartRef", - ref: focusStartRef, - class: vue.normalizeClass(vue.unref(ns).e("sr-focus")), - tabindex: "-1" - }, null, 2), - _ctx.withHeader ? (vue.openBlock(), vue.createElementBlock("header", { - key: 0, - class: vue.normalizeClass([vue.unref(ns).e("header"), _ctx.headerClass]) - }, [ - !_ctx.$slots.title ? vue.renderSlot(_ctx.$slots, "header", { - key: 0, - close: vue.unref(handleClose), - titleId: vue.unref(titleId), - titleClass: vue.unref(ns).e("title") - }, () => [ - !_ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - id: vue.unref(titleId), - role: "heading", - "aria-level": _ctx.headerAriaLevel, - class: vue.normalizeClass(vue.unref(ns).e("title")) - }, vue.toDisplayString(_ctx.title), 11, ["id", "aria-level"])) : vue.createCommentVNode("v-if", true) - ]) : vue.renderSlot(_ctx.$slots, "title", { key: 1 }, () => [ - vue.createCommentVNode(" DEPRECATED SLOT ") - ]), - _ctx.showClose ? (vue.openBlock(), vue.createElementBlock("button", { - key: 2, - "aria-label": vue.unref(t)("el.drawer.close"), - class: vue.normalizeClass(vue.unref(ns).e("close-btn")), - type: "button", - onClick: vue.unref(handleClose) - }, [ - vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass(vue.unref(ns).e("close")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(close_default)) - ]), - _: 1 - }, 8, ["class"]) - ], 10, ["aria-label", "onClick"])) : vue.createCommentVNode("v-if", true) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.unref(rendered) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - id: vue.unref(bodyId), - class: vue.normalizeClass([vue.unref(ns).e("body"), _ctx.bodyClass]) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 10, ["id"])) : vue.createCommentVNode("v-if", true), - _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", { - key: 2, - class: vue.normalizeClass([vue.unref(ns).e("footer"), _ctx.footerClass]) - }, [ - vue.renderSlot(_ctx.$slots, "footer") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 16, ["aria-label", "aria-labelledby", "aria-describedby", "onClick"]) - ]), - _: 3 - }, 8, ["trapped", "focus-trap-el", "focus-start-el", "onFocusAfterTrapped", "onFocusAfterReleased", "onFocusoutPrevented", "onReleaseRequested"]) - ]), - _: 3 - }, 8, ["mask", "overlay-class", "z-index", "onClick"]), [ - [vue.vShow, vue.unref(visible)] - ]) - ]), - _: 3 - }, 8, ["name", "onAfterEnter", "onAfterLeave", "onBeforeLeave"]) - ]), - _: 3 - }, 8, ["to", "disabled"]); - }; - } - }); - var Drawer = /* @__PURE__ */ _export_sfc(_sfc_main$1m, [["__file", "drawer.vue"]]); - - const ElDrawer = withInstall(Drawer); - - const _sfc_main$1l = /* @__PURE__ */ vue.defineComponent({ - inheritAttrs: false - }); - function _sfc_render$n(_ctx, _cache, $props, $setup, $data, $options) { - return vue.renderSlot(_ctx.$slots, "default"); - } - var Collection = /* @__PURE__ */ _export_sfc(_sfc_main$1l, [["render", _sfc_render$n], ["__file", "collection.vue"]]); - - const _sfc_main$1k = /* @__PURE__ */ vue.defineComponent({ - name: "ElCollectionItem", - inheritAttrs: false - }); - function _sfc_render$m(_ctx, _cache, $props, $setup, $data, $options) { - return vue.renderSlot(_ctx.$slots, "default"); - } - var CollectionItem = /* @__PURE__ */ _export_sfc(_sfc_main$1k, [["render", _sfc_render$m], ["__file", "collection-item.vue"]]); - - const COLLECTION_ITEM_SIGN = `data-el-collection-item`; - const createCollectionWithScope = (name) => { - const COLLECTION_NAME = `El${name}Collection`; - const COLLECTION_ITEM_NAME = `${COLLECTION_NAME}Item`; - const COLLECTION_INJECTION_KEY = Symbol(COLLECTION_NAME); - const COLLECTION_ITEM_INJECTION_KEY = Symbol(COLLECTION_ITEM_NAME); - const ElCollection = { - ...Collection, - name: COLLECTION_NAME, - setup() { - const collectionRef = vue.ref(null); - const itemMap = /* @__PURE__ */ new Map(); - const getItems = () => { - const collectionEl = vue.unref(collectionRef); - if (!collectionEl) - return []; - const orderedNodes = Array.from(collectionEl.querySelectorAll(`[${COLLECTION_ITEM_SIGN}]`)); - const items = [...itemMap.values()]; - return items.sort((a, b) => orderedNodes.indexOf(a.ref) - orderedNodes.indexOf(b.ref)); - }; - vue.provide(COLLECTION_INJECTION_KEY, { - itemMap, - getItems, - collectionRef - }); - } - }; - const ElCollectionItem = { - ...CollectionItem, - name: COLLECTION_ITEM_NAME, - setup(_, { attrs }) { - const collectionItemRef = vue.ref(null); - const collectionInjection = vue.inject(COLLECTION_INJECTION_KEY, void 0); - vue.provide(COLLECTION_ITEM_INJECTION_KEY, { - collectionItemRef - }); - vue.onMounted(() => { - const collectionItemEl = vue.unref(collectionItemRef); - if (collectionItemEl) { - collectionInjection.itemMap.set(collectionItemEl, { - ref: collectionItemEl, - ...attrs - }); - } - }); - vue.onBeforeUnmount(() => { - const collectionItemEl = vue.unref(collectionItemRef); - collectionInjection.itemMap.delete(collectionItemEl); - }); - } - }; - return { - COLLECTION_INJECTION_KEY, - COLLECTION_ITEM_INJECTION_KEY, - ElCollection, - ElCollectionItem - }; - }; - - const rovingFocusGroupProps = buildProps({ - style: { type: definePropType([String, Array, Object]) }, - currentTabId: { - type: definePropType(String) - }, - defaultCurrentTabId: String, - loop: Boolean, - dir: { - type: String, - values: ["ltr", "rtl"], - default: "ltr" - }, - orientation: { - type: definePropType(String) - }, - onBlur: Function, - onFocus: Function, - onMousedown: Function - }); - const { - ElCollection: ElCollection$1, - ElCollectionItem: ElCollectionItem$1, - COLLECTION_INJECTION_KEY: COLLECTION_INJECTION_KEY$1, - COLLECTION_ITEM_INJECTION_KEY: COLLECTION_ITEM_INJECTION_KEY$1 - } = createCollectionWithScope("RovingFocusGroup"); - - const ROVING_FOCUS_GROUP_INJECTION_KEY = Symbol("elRovingFocusGroup"); - const ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY = Symbol("elRovingFocusGroupItem"); - - const MAP_KEY_TO_FOCUS_INTENT = { - ArrowLeft: "prev", - ArrowUp: "prev", - ArrowRight: "next", - ArrowDown: "next", - PageUp: "first", - Home: "first", - PageDown: "last", - End: "last" - }; - const getDirectionAwareKey = (key, dir) => { - if (dir !== "rtl") - return key; - switch (key) { - case EVENT_CODE.right: - return EVENT_CODE.left; - case EVENT_CODE.left: - return EVENT_CODE.right; - default: - return key; - } - }; - const getFocusIntent = (event, orientation, dir) => { - const key = getDirectionAwareKey(event.code, dir); - if (orientation === "vertical" && [EVENT_CODE.left, EVENT_CODE.right].includes(key)) - return void 0; - if (orientation === "horizontal" && [EVENT_CODE.up, EVENT_CODE.down].includes(key)) - return void 0; - return MAP_KEY_TO_FOCUS_INTENT[key]; - }; - const reorderArray = (array, atIdx) => { - return array.map((_, idx) => array[(idx + atIdx) % array.length]); - }; - const focusFirst = (elements) => { - const { activeElement: prevActive } = document; - for (const element of elements) { - if (element === prevActive) - return; - element.focus(); - if (prevActive !== document.activeElement) - return; - } - }; - - const CURRENT_TAB_ID_CHANGE_EVT = "currentTabIdChange"; - const ENTRY_FOCUS_EVT = "rovingFocusGroup.entryFocus"; - const EVT_OPTS = { bubbles: false, cancelable: true }; - const _sfc_main$1j = vue.defineComponent({ - name: "ElRovingFocusGroupImpl", - inheritAttrs: false, - props: rovingFocusGroupProps, - emits: [CURRENT_TAB_ID_CHANGE_EVT, "entryFocus"], - setup(props, { emit }) { - var _a; - const currentTabbedId = vue.ref((_a = props.currentTabId || props.defaultCurrentTabId) != null ? _a : null); - const isBackingOut = vue.ref(false); - const isClickFocus = vue.ref(false); - const rovingFocusGroupRef = vue.ref(null); - const { getItems } = vue.inject(COLLECTION_INJECTION_KEY$1, void 0); - const rovingFocusGroupRootStyle = vue.computed(() => { - return [ - { - outline: "none" - }, - props.style - ]; - }); - const onItemFocus = (tabbedId) => { - emit(CURRENT_TAB_ID_CHANGE_EVT, tabbedId); - }; - const onItemShiftTab = () => { - isBackingOut.value = true; - }; - const onMousedown = composeEventHandlers((e) => { - var _a2; - (_a2 = props.onMousedown) == null ? void 0 : _a2.call(props, e); - }, () => { - isClickFocus.value = true; - }); - const onFocus = composeEventHandlers((e) => { - var _a2; - (_a2 = props.onFocus) == null ? void 0 : _a2.call(props, e); - }, (e) => { - const isKeyboardFocus = !vue.unref(isClickFocus); - const { target, currentTarget } = e; - if (target === currentTarget && isKeyboardFocus && !vue.unref(isBackingOut)) { - const entryFocusEvt = new Event(ENTRY_FOCUS_EVT, EVT_OPTS); - currentTarget == null ? void 0 : currentTarget.dispatchEvent(entryFocusEvt); - if (!entryFocusEvt.defaultPrevented) { - const items = getItems().filter((item) => item.focusable); - const activeItem = items.find((item) => item.active); - const currentItem = items.find((item) => item.id === vue.unref(currentTabbedId)); - const candidates = [activeItem, currentItem, ...items].filter(Boolean); - const candidateNodes = candidates.map((item) => item.ref); - focusFirst(candidateNodes); - } - } - isClickFocus.value = false; - }); - const onBlur = composeEventHandlers((e) => { - var _a2; - (_a2 = props.onBlur) == null ? void 0 : _a2.call(props, e); - }, () => { - isBackingOut.value = false; - }); - const handleEntryFocus = (...args) => { - emit("entryFocus", ...args); - }; - vue.provide(ROVING_FOCUS_GROUP_INJECTION_KEY, { - currentTabbedId: vue.readonly(currentTabbedId), - loop: vue.toRef(props, "loop"), - tabIndex: vue.computed(() => { - return vue.unref(isBackingOut) ? -1 : 0; - }), - rovingFocusGroupRef, - rovingFocusGroupRootStyle, - orientation: vue.toRef(props, "orientation"), - dir: vue.toRef(props, "dir"), - onItemFocus, - onItemShiftTab, - onBlur, - onFocus, - onMousedown - }); - vue.watch(() => props.currentTabId, (val) => { - currentTabbedId.value = val != null ? val : null; - }); - useEventListener(rovingFocusGroupRef, ENTRY_FOCUS_EVT, handleEntryFocus); - } - }); - function _sfc_render$l(_ctx, _cache, $props, $setup, $data, $options) { - return vue.renderSlot(_ctx.$slots, "default"); - } - var ElRovingFocusGroupImpl = /* @__PURE__ */ _export_sfc(_sfc_main$1j, [["render", _sfc_render$l], ["__file", "roving-focus-group-impl.vue"]]); - - const _sfc_main$1i = vue.defineComponent({ - name: "ElRovingFocusGroup", - components: { - ElFocusGroupCollection: ElCollection$1, - ElRovingFocusGroupImpl - } - }); - function _sfc_render$k(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_roving_focus_group_impl = vue.resolveComponent("el-roving-focus-group-impl"); - const _component_el_focus_group_collection = vue.resolveComponent("el-focus-group-collection"); - return vue.openBlock(), vue.createBlock(_component_el_focus_group_collection, null, { - default: vue.withCtx(() => [ - vue.createVNode(_component_el_roving_focus_group_impl, vue.normalizeProps(vue.guardReactiveProps(_ctx.$attrs)), { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 16) - ]), - _: 3 - }); - } - var ElRovingFocusGroup = /* @__PURE__ */ _export_sfc(_sfc_main$1i, [["render", _sfc_render$k], ["__file", "roving-focus-group.vue"]]); - - const _sfc_main$1h = vue.defineComponent({ - components: { - ElRovingFocusCollectionItem: ElCollectionItem$1 - }, - props: { - focusable: { - type: Boolean, - default: true - }, - active: { - type: Boolean, - default: false - } - }, - emits: ["mousedown", "focus", "keydown"], - setup(props, { emit }) { - const { currentTabbedId, loop, onItemFocus, onItemShiftTab } = vue.inject(ROVING_FOCUS_GROUP_INJECTION_KEY, void 0); - const { getItems } = vue.inject(COLLECTION_INJECTION_KEY$1, void 0); - const id = useId(); - const rovingFocusGroupItemRef = vue.ref(null); - const handleMousedown = composeEventHandlers((e) => { - emit("mousedown", e); - }, (e) => { - if (!props.focusable) { - e.preventDefault(); - } else { - onItemFocus(vue.unref(id)); - } - }); - const handleFocus = composeEventHandlers((e) => { - emit("focus", e); - }, () => { - onItemFocus(vue.unref(id)); - }); - const handleKeydown = composeEventHandlers((e) => { - emit("keydown", e); - }, (e) => { - const { code, shiftKey, target, currentTarget } = e; - if (code === EVENT_CODE.tab && shiftKey) { - onItemShiftTab(); - return; - } - if (target !== currentTarget) - return; - const focusIntent = getFocusIntent(e); - if (focusIntent) { - e.preventDefault(); - const items = getItems().filter((item) => item.focusable); - let elements = items.map((item) => item.ref); - switch (focusIntent) { - case "last": { - elements.reverse(); - break; - } - case "prev": - case "next": { - if (focusIntent === "prev") { - elements.reverse(); - } - const currentIdx = elements.indexOf(currentTarget); - elements = loop.value ? reorderArray(elements, currentIdx + 1) : elements.slice(currentIdx + 1); - break; - } - } - vue.nextTick(() => { - focusFirst(elements); - }); - } - }); - const isCurrentTab = vue.computed(() => currentTabbedId.value === vue.unref(id)); - vue.provide(ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY, { - rovingFocusGroupItemRef, - tabIndex: vue.computed(() => vue.unref(isCurrentTab) ? 0 : -1), - handleMousedown, - handleFocus, - handleKeydown - }); - return { - id, - handleKeydown, - handleFocus, - handleMousedown - }; - } - }); - function _sfc_render$j(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_roving_focus_collection_item = vue.resolveComponent("el-roving-focus-collection-item"); - return vue.openBlock(), vue.createBlock(_component_el_roving_focus_collection_item, { - id: _ctx.id, - focusable: _ctx.focusable, - active: _ctx.active - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["id", "focusable", "active"]); - } - var ElRovingFocusItem = /* @__PURE__ */ _export_sfc(_sfc_main$1h, [["render", _sfc_render$j], ["__file", "roving-focus-item.vue"]]); - - const dropdownProps = buildProps({ - trigger: useTooltipTriggerProps.trigger, - triggerKeys: { - type: definePropType(Array), - default: () => [ - EVENT_CODE.enter, - EVENT_CODE.numpadEnter, - EVENT_CODE.space, - EVENT_CODE.down - ] - }, - effect: { - ...useTooltipContentProps.effect, - default: "light" - }, - type: { - type: definePropType(String) - }, - placement: { - type: definePropType(String), - default: "bottom" - }, - popperOptions: { - type: definePropType(Object), - default: () => ({}) - }, - id: String, - size: { - type: String, - default: "" - }, - splitButton: Boolean, - hideOnClick: { - type: Boolean, - default: true - }, - loop: { - type: Boolean, - default: true - }, - showTimeout: { - type: Number, - default: 150 - }, - hideTimeout: { - type: Number, - default: 150 - }, - tabindex: { - type: definePropType([Number, String]), - default: 0 - }, - maxHeight: { - type: definePropType([Number, String]), - default: "" - }, - popperClass: { - type: String, - default: "" - }, - disabled: Boolean, - role: { - type: String, - default: "menu" - }, - buttonProps: { - type: definePropType(Object) - }, - teleported: useTooltipContentProps.teleported - }); - const dropdownItemProps = buildProps({ - command: { - type: [Object, String, Number], - default: () => ({}) - }, - disabled: Boolean, - divided: Boolean, - textValue: String, - icon: { - type: iconPropType - } - }); - const dropdownMenuProps = buildProps({ - onKeydown: { type: definePropType(Function) } - }); - const FIRST_KEYS = [ - EVENT_CODE.down, - EVENT_CODE.pageDown, - EVENT_CODE.home - ]; - const LAST_KEYS = [EVENT_CODE.up, EVENT_CODE.pageUp, EVENT_CODE.end]; - const FIRST_LAST_KEYS = [...FIRST_KEYS, ...LAST_KEYS]; - const { - ElCollection, - ElCollectionItem, - COLLECTION_INJECTION_KEY, - COLLECTION_ITEM_INJECTION_KEY - } = createCollectionWithScope("Dropdown"); - - const DROPDOWN_INJECTION_KEY = Symbol("elDropdown"); - - const { ButtonGroup: ElButtonGroup } = ElButton; - const _sfc_main$1g = vue.defineComponent({ - name: "ElDropdown", - components: { - ElButton, - ElButtonGroup, - ElScrollbar, - ElDropdownCollection: ElCollection, - ElTooltip, - ElRovingFocusGroup, - ElOnlyChild: OnlyChild, - ElIcon, - ArrowDown: arrow_down_default - }, - props: dropdownProps, - emits: ["visible-change", "click", "command"], - setup(props, { emit }) { - const _instance = vue.getCurrentInstance(); - const ns = useNamespace("dropdown"); - const { t } = useLocale(); - const triggeringElementRef = vue.ref(); - const referenceElementRef = vue.ref(); - const popperRef = vue.ref(null); - const contentRef = vue.ref(null); - const scrollbar = vue.ref(null); - const currentTabId = vue.ref(null); - const isUsingKeyboard = vue.ref(false); - const wrapStyle = vue.computed(() => ({ - maxHeight: addUnit(props.maxHeight) - })); - const dropdownTriggerKls = vue.computed(() => [ns.m(dropdownSize.value)]); - const trigger = vue.computed(() => castArray$1(props.trigger)); - const defaultTriggerId = useId().value; - const triggerId = vue.computed(() => props.id || defaultTriggerId); - vue.watch([triggeringElementRef, trigger], ([triggeringElement, trigger2], [prevTriggeringElement]) => { - var _a, _b, _c; - if ((_a = prevTriggeringElement == null ? void 0 : prevTriggeringElement.$el) == null ? void 0 : _a.removeEventListener) { - prevTriggeringElement.$el.removeEventListener("pointerenter", onAutofocusTriggerEnter); - } - if ((_b = triggeringElement == null ? void 0 : triggeringElement.$el) == null ? void 0 : _b.removeEventListener) { - triggeringElement.$el.removeEventListener("pointerenter", onAutofocusTriggerEnter); - } - if (((_c = triggeringElement == null ? void 0 : triggeringElement.$el) == null ? void 0 : _c.addEventListener) && trigger2.includes("hover")) { - triggeringElement.$el.addEventListener("pointerenter", onAutofocusTriggerEnter); - } - }, { immediate: true }); - vue.onBeforeUnmount(() => { - var _a, _b; - if ((_b = (_a = triggeringElementRef.value) == null ? void 0 : _a.$el) == null ? void 0 : _b.removeEventListener) { - triggeringElementRef.value.$el.removeEventListener("pointerenter", onAutofocusTriggerEnter); - } - }); - function handleClick() { - handleClose(); - } - function handleClose() { - var _a; - (_a = popperRef.value) == null ? void 0 : _a.onClose(); - } - function handleOpen() { - var _a; - (_a = popperRef.value) == null ? void 0 : _a.onOpen(); - } - const dropdownSize = useFormSize(); - function commandHandler(...args) { - emit("command", ...args); - } - function onAutofocusTriggerEnter() { - var _a, _b; - (_b = (_a = triggeringElementRef.value) == null ? void 0 : _a.$el) == null ? void 0 : _b.focus(); - } - function onItemEnter() { - } - function onItemLeave() { - const contentEl = vue.unref(contentRef); - trigger.value.includes("hover") && (contentEl == null ? void 0 : contentEl.focus()); - currentTabId.value = null; - } - function handleCurrentTabIdChange(id) { - currentTabId.value = id; - } - function handleEntryFocus(e) { - if (!isUsingKeyboard.value) { - e.preventDefault(); - e.stopImmediatePropagation(); - } - } - function handleBeforeShowTooltip() { - emit("visible-change", true); - } - function handleShowTooltip(event) { - if ((event == null ? void 0 : event.type) === "keydown") { - contentRef.value.focus(); - } - } - function handleBeforeHideTooltip() { - emit("visible-change", false); - } - vue.provide(DROPDOWN_INJECTION_KEY, { - contentRef, - role: vue.computed(() => props.role), - triggerId, - isUsingKeyboard, - onItemEnter, - onItemLeave - }); - vue.provide("elDropdown", { - instance: _instance, - dropdownSize, - handleClick, - commandHandler, - trigger: vue.toRef(props, "trigger"), - hideOnClick: vue.toRef(props, "hideOnClick") - }); - const onFocusAfterTrapped = (e) => { - var _a, _b; - e.preventDefault(); - (_b = (_a = contentRef.value) == null ? void 0 : _a.focus) == null ? void 0 : _b.call(_a, { - preventScroll: true - }); - }; - const handlerMainButtonClick = (event) => { - emit("click", event); - }; - return { - t, - ns, - scrollbar, - wrapStyle, - dropdownTriggerKls, - dropdownSize, - triggerId, - currentTabId, - handleCurrentTabIdChange, - handlerMainButtonClick, - handleEntryFocus, - handleClose, - handleOpen, - handleBeforeShowTooltip, - handleShowTooltip, - handleBeforeHideTooltip, - onFocusAfterTrapped, - popperRef, - contentRef, - triggeringElementRef, - referenceElementRef - }; - } - }); - function _sfc_render$i(_ctx, _cache, $props, $setup, $data, $options) { - var _a; - const _component_el_dropdown_collection = vue.resolveComponent("el-dropdown-collection"); - const _component_el_roving_focus_group = vue.resolveComponent("el-roving-focus-group"); - const _component_el_scrollbar = vue.resolveComponent("el-scrollbar"); - const _component_el_only_child = vue.resolveComponent("el-only-child"); - const _component_el_tooltip = vue.resolveComponent("el-tooltip"); - const _component_el_button = vue.resolveComponent("el-button"); - const _component_arrow_down = vue.resolveComponent("arrow-down"); - const _component_el_icon = vue.resolveComponent("el-icon"); - const _component_el_button_group = vue.resolveComponent("el-button-group"); - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([_ctx.ns.b(), _ctx.ns.is("disabled", _ctx.disabled)]) - }, [ - vue.createVNode(_component_el_tooltip, { - ref: "popperRef", - role: _ctx.role, - effect: _ctx.effect, - "fallback-placements": ["bottom", "top"], - "popper-options": _ctx.popperOptions, - "gpu-acceleration": false, - "hide-after": _ctx.trigger === "hover" ? _ctx.hideTimeout : 0, - "manual-mode": true, - placement: _ctx.placement, - "popper-class": [_ctx.ns.e("popper"), _ctx.popperClass], - "reference-element": (_a = _ctx.referenceElementRef) == null ? void 0 : _a.$el, - trigger: _ctx.trigger, - "trigger-keys": _ctx.triggerKeys, - "trigger-target-el": _ctx.contentRef, - "show-after": _ctx.trigger === "hover" ? _ctx.showTimeout : 0, - "stop-popper-mouse-event": false, - "virtual-ref": _ctx.triggeringElementRef, - "virtual-triggering": _ctx.splitButton, - disabled: _ctx.disabled, - transition: `${_ctx.ns.namespace.value}-zoom-in-top`, - teleported: _ctx.teleported, - pure: "", - persistent: "", - onBeforeShow: _ctx.handleBeforeShowTooltip, - onShow: _ctx.handleShowTooltip, - onBeforeHide: _ctx.handleBeforeHideTooltip - }, vue.createSlots({ - content: vue.withCtx(() => [ - vue.createVNode(_component_el_scrollbar, { - ref: "scrollbar", - "wrap-style": _ctx.wrapStyle, - tag: "div", - "view-class": _ctx.ns.e("list") - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_el_roving_focus_group, { - loop: _ctx.loop, - "current-tab-id": _ctx.currentTabId, - orientation: "horizontal", - onCurrentTabIdChange: _ctx.handleCurrentTabIdChange, - onEntryFocus: _ctx.handleEntryFocus - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_el_dropdown_collection, null, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "dropdown") - ]), - _: 3 - }) - ]), - _: 3 - }, 8, ["loop", "current-tab-id", "onCurrentTabIdChange", "onEntryFocus"]) - ]), - _: 3 - }, 8, ["wrap-style", "view-class"]) - ]), - _: 2 - }, [ - !_ctx.splitButton ? { - name: "default", - fn: vue.withCtx(() => [ - vue.createVNode(_component_el_only_child, { - id: _ctx.triggerId, - ref: "triggeringElementRef", - role: "button", - tabindex: _ctx.tabindex - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["id", "tabindex"]) - ]) - } : void 0 - ]), 1032, ["role", "effect", "popper-options", "hide-after", "placement", "popper-class", "reference-element", "trigger", "trigger-keys", "trigger-target-el", "show-after", "virtual-ref", "virtual-triggering", "disabled", "transition", "teleported", "onBeforeShow", "onShow", "onBeforeHide"]), - _ctx.splitButton ? (vue.openBlock(), vue.createBlock(_component_el_button_group, { key: 0 }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_el_button, vue.mergeProps({ ref: "referenceElementRef" }, _ctx.buttonProps, { - size: _ctx.dropdownSize, - type: _ctx.type, - disabled: _ctx.disabled, - tabindex: _ctx.tabindex, - onClick: _ctx.handlerMainButtonClick - }), { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 16, ["size", "type", "disabled", "tabindex", "onClick"]), - vue.createVNode(_component_el_button, vue.mergeProps({ - id: _ctx.triggerId, - ref: "triggeringElementRef" - }, _ctx.buttonProps, { - role: "button", - size: _ctx.dropdownSize, - type: _ctx.type, - class: _ctx.ns.e("caret-button"), - disabled: _ctx.disabled, - tabindex: _ctx.tabindex, - "aria-label": _ctx.t("el.dropdown.toggleDropdown") - }), { - default: vue.withCtx(() => [ - vue.createVNode(_component_el_icon, { - class: vue.normalizeClass(_ctx.ns.e("icon")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_arrow_down) - ]), - _: 1 - }, 8, ["class"]) - ]), - _: 1 - }, 16, ["id", "size", "type", "class", "disabled", "tabindex", "aria-label"]) - ]), - _: 3 - })) : vue.createCommentVNode("v-if", true) - ], 2); - } - var Dropdown = /* @__PURE__ */ _export_sfc(_sfc_main$1g, [["render", _sfc_render$i], ["__file", "dropdown.vue"]]); - - const _sfc_main$1f = vue.defineComponent({ - name: "DropdownItemImpl", - components: { - ElIcon - }, - props: dropdownItemProps, - emits: ["pointermove", "pointerleave", "click", "clickimpl"], - setup(_, { emit }) { - const ns = useNamespace("dropdown"); - const { role: menuRole } = vue.inject(DROPDOWN_INJECTION_KEY, void 0); - const { collectionItemRef: dropdownCollectionItemRef } = vue.inject(COLLECTION_ITEM_INJECTION_KEY, void 0); - const { collectionItemRef: rovingFocusCollectionItemRef } = vue.inject(COLLECTION_ITEM_INJECTION_KEY$1, void 0); - const { - rovingFocusGroupItemRef, - tabIndex, - handleFocus, - handleKeydown: handleItemKeydown, - handleMousedown - } = vue.inject(ROVING_FOCUS_GROUP_ITEM_INJECTION_KEY, void 0); - const itemRef = composeRefs(dropdownCollectionItemRef, rovingFocusCollectionItemRef, rovingFocusGroupItemRef); - const role = vue.computed(() => { - if (menuRole.value === "menu") { - return "menuitem"; - } else if (menuRole.value === "navigation") { - return "link"; - } - return "button"; - }); - const handleKeydown = composeEventHandlers((e) => { - if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter, EVENT_CODE.space].includes(e.code)) { - e.preventDefault(); - e.stopImmediatePropagation(); - emit("clickimpl", e); - return true; - } - }, handleItemKeydown); - return { - ns, - itemRef, - dataset: { - [COLLECTION_ITEM_SIGN]: "" - }, - role, - tabIndex, - handleFocus, - handleKeydown, - handleMousedown - }; - } - }); - function _sfc_render$h(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_icon = vue.resolveComponent("el-icon"); - return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ - _ctx.divided ? (vue.openBlock(), vue.createElementBlock("li", { - key: 0, - role: "separator", - class: vue.normalizeClass(_ctx.ns.bem("menu", "item", "divided")) - }, null, 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("li", vue.mergeProps({ ref: _ctx.itemRef }, { ..._ctx.dataset, ..._ctx.$attrs }, { - "aria-disabled": _ctx.disabled, - class: [_ctx.ns.be("menu", "item"), _ctx.ns.is("disabled", _ctx.disabled)], - tabindex: _ctx.tabIndex, - role: _ctx.role, - onClick: (e) => _ctx.$emit("clickimpl", e), - onFocus: _ctx.handleFocus, - onKeydown: vue.withModifiers(_ctx.handleKeydown, ["self"]), - onMousedown: _ctx.handleMousedown, - onPointermove: (e) => _ctx.$emit("pointermove", e), - onPointerleave: (e) => _ctx.$emit("pointerleave", e) - }), [ - _ctx.icon ? (vue.openBlock(), vue.createBlock(_component_el_icon, { key: 0 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon))) - ]), - _: 1 - })) : vue.createCommentVNode("v-if", true), - vue.renderSlot(_ctx.$slots, "default") - ], 16, ["aria-disabled", "tabindex", "role", "onClick", "onFocus", "onKeydown", "onMousedown", "onPointermove", "onPointerleave"]) - ], 64); - } - var ElDropdownItemImpl = /* @__PURE__ */ _export_sfc(_sfc_main$1f, [["render", _sfc_render$h], ["__file", "dropdown-item-impl.vue"]]); - - const useDropdown = () => { - const elDropdown = vue.inject("elDropdown", {}); - const _elDropdownSize = vue.computed(() => elDropdown == null ? void 0 : elDropdown.dropdownSize); - return { - elDropdown, - _elDropdownSize - }; - }; - - const _sfc_main$1e = vue.defineComponent({ - name: "ElDropdownItem", - components: { - ElDropdownCollectionItem: ElCollectionItem, - ElRovingFocusItem, - ElDropdownItemImpl - }, - inheritAttrs: false, - props: dropdownItemProps, - emits: ["pointermove", "pointerleave", "click"], - setup(props, { emit, attrs }) { - const { elDropdown } = useDropdown(); - const _instance = vue.getCurrentInstance(); - const itemRef = vue.ref(null); - const textContent = vue.computed(() => { - var _a, _b; - return (_b = (_a = vue.unref(itemRef)) == null ? void 0 : _a.textContent) != null ? _b : ""; - }); - const { onItemEnter, onItemLeave } = vue.inject(DROPDOWN_INJECTION_KEY, void 0); - const handlePointerMove = composeEventHandlers((e) => { - emit("pointermove", e); - return e.defaultPrevented; - }, whenMouse((e) => { - if (props.disabled) { - onItemLeave(e); - return; - } - const target = e.currentTarget; - if (target === document.activeElement || target.contains(document.activeElement)) { - return; - } - onItemEnter(e); - if (!e.defaultPrevented) { - target == null ? void 0 : target.focus(); - } - })); - const handlePointerLeave = composeEventHandlers((e) => { - emit("pointerleave", e); - return e.defaultPrevented; - }, whenMouse(onItemLeave)); - const handleClick = composeEventHandlers((e) => { - if (props.disabled) { - return; - } - emit("click", e); - return e.type !== "keydown" && e.defaultPrevented; - }, (e) => { - var _a, _b, _c; - if (props.disabled) { - e.stopImmediatePropagation(); - return; - } - if ((_a = elDropdown == null ? void 0 : elDropdown.hideOnClick) == null ? void 0 : _a.value) { - (_b = elDropdown.handleClick) == null ? void 0 : _b.call(elDropdown); - } - (_c = elDropdown.commandHandler) == null ? void 0 : _c.call(elDropdown, props.command, _instance, e); - }); - const propsAndAttrs = vue.computed(() => ({ ...props, ...attrs })); - return { - handleClick, - handlePointerMove, - handlePointerLeave, - textContent, - propsAndAttrs - }; - } - }); - function _sfc_render$g(_ctx, _cache, $props, $setup, $data, $options) { - var _a; - const _component_el_dropdown_item_impl = vue.resolveComponent("el-dropdown-item-impl"); - const _component_el_roving_focus_item = vue.resolveComponent("el-roving-focus-item"); - const _component_el_dropdown_collection_item = vue.resolveComponent("el-dropdown-collection-item"); - return vue.openBlock(), vue.createBlock(_component_el_dropdown_collection_item, { - disabled: _ctx.disabled, - "text-value": (_a = _ctx.textValue) != null ? _a : _ctx.textContent - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_el_roving_focus_item, { - focusable: !_ctx.disabled - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_el_dropdown_item_impl, vue.mergeProps(_ctx.propsAndAttrs, { - onPointerleave: _ctx.handlePointerLeave, - onPointermove: _ctx.handlePointerMove, - onClickimpl: _ctx.handleClick - }), { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 16, ["onPointerleave", "onPointermove", "onClickimpl"]) - ]), - _: 3 - }, 8, ["focusable"]) - ]), - _: 3 - }, 8, ["disabled", "text-value"]); - } - var DropdownItem = /* @__PURE__ */ _export_sfc(_sfc_main$1e, [["render", _sfc_render$g], ["__file", "dropdown-item.vue"]]); - - const _sfc_main$1d = vue.defineComponent({ - name: "ElDropdownMenu", - props: dropdownMenuProps, - setup(props) { - const ns = useNamespace("dropdown"); - const { _elDropdownSize } = useDropdown(); - const size = _elDropdownSize.value; - const { focusTrapRef, onKeydown } = vue.inject(FOCUS_TRAP_INJECTION_KEY, void 0); - const { contentRef, role, triggerId } = vue.inject(DROPDOWN_INJECTION_KEY, void 0); - const { collectionRef: dropdownCollectionRef, getItems } = vue.inject(COLLECTION_INJECTION_KEY, void 0); - const { - rovingFocusGroupRef, - rovingFocusGroupRootStyle, - tabIndex, - onBlur, - onFocus, - onMousedown - } = vue.inject(ROVING_FOCUS_GROUP_INJECTION_KEY, void 0); - const { collectionRef: rovingFocusGroupCollectionRef } = vue.inject(COLLECTION_INJECTION_KEY$1, void 0); - const dropdownKls = vue.computed(() => { - return [ns.b("menu"), ns.bm("menu", size == null ? void 0 : size.value)]; - }); - const dropdownListWrapperRef = composeRefs(contentRef, dropdownCollectionRef, focusTrapRef, rovingFocusGroupRef, rovingFocusGroupCollectionRef); - const composedKeydown = composeEventHandlers((e) => { - var _a; - (_a = props.onKeydown) == null ? void 0 : _a.call(props, e); - }, (e) => { - const { currentTarget, code, target } = e; - currentTarget.contains(target); - if (EVENT_CODE.tab === code) { - e.stopImmediatePropagation(); - } - e.preventDefault(); - if (target !== vue.unref(contentRef) || !FIRST_LAST_KEYS.includes(code)) - return; - const items = getItems().filter((item) => !item.disabled); - const targets = items.map((item) => item.ref); - if (LAST_KEYS.includes(code)) { - targets.reverse(); - } - focusFirst(targets); - }); - const handleKeydown = (e) => { - composedKeydown(e); - onKeydown(e); - }; - return { - size, - rovingFocusGroupRootStyle, - tabIndex, - dropdownKls, - role, - triggerId, - dropdownListWrapperRef, - handleKeydown, - onBlur, - onFocus, - onMousedown - }; - } - }); - function _sfc_render$f(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("ul", { - ref: _ctx.dropdownListWrapperRef, - class: vue.normalizeClass(_ctx.dropdownKls), - style: vue.normalizeStyle(_ctx.rovingFocusGroupRootStyle), - tabindex: -1, - role: _ctx.role, - "aria-labelledby": _ctx.triggerId, - onBlur: _ctx.onBlur, - onFocus: _ctx.onFocus, - onKeydown: vue.withModifiers(_ctx.handleKeydown, ["self"]), - onMousedown: vue.withModifiers(_ctx.onMousedown, ["self"]) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 46, ["role", "aria-labelledby", "onBlur", "onFocus", "onKeydown", "onMousedown"]); - } - var DropdownMenu = /* @__PURE__ */ _export_sfc(_sfc_main$1d, [["render", _sfc_render$f], ["__file", "dropdown-menu.vue"]]); - - const ElDropdown = withInstall(Dropdown, { - DropdownItem, - DropdownMenu - }); - const ElDropdownItem = withNoopInstall(DropdownItem); - const ElDropdownMenu = withNoopInstall(DropdownMenu); - - const __default__$X = vue.defineComponent({ - name: "ImgEmpty" - }); - const _sfc_main$1c = /* @__PURE__ */ vue.defineComponent({ - ...__default__$X, - setup(__props) { - const ns = useNamespace("empty"); - const id = useId(); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("svg", { - viewBox: "0 0 79 86", - version: "1.1", - xmlns: "http://www.w3.org/2000/svg", - "xmlns:xlink": "http://www.w3.org/1999/xlink" - }, [ - vue.createElementVNode("defs", null, [ - vue.createElementVNode("linearGradient", { - id: `linearGradient-1-${vue.unref(id)}`, - x1: "38.8503086%", - y1: "0%", - x2: "61.1496914%", - y2: "100%" - }, [ - vue.createElementVNode("stop", { - "stop-color": `var(${vue.unref(ns).cssVarBlockName("fill-color-1")})`, - offset: "0%" - }, null, 8, ["stop-color"]), - vue.createElementVNode("stop", { - "stop-color": `var(${vue.unref(ns).cssVarBlockName("fill-color-4")})`, - offset: "100%" - }, null, 8, ["stop-color"]) - ], 8, ["id"]), - vue.createElementVNode("linearGradient", { - id: `linearGradient-2-${vue.unref(id)}`, - x1: "0%", - y1: "9.5%", - x2: "100%", - y2: "90.5%" - }, [ - vue.createElementVNode("stop", { - "stop-color": `var(${vue.unref(ns).cssVarBlockName("fill-color-1")})`, - offset: "0%" - }, null, 8, ["stop-color"]), - vue.createElementVNode("stop", { - "stop-color": `var(${vue.unref(ns).cssVarBlockName("fill-color-6")})`, - offset: "100%" - }, null, 8, ["stop-color"]) - ], 8, ["id"]), - vue.createElementVNode("rect", { - id: `path-3-${vue.unref(id)}`, - x: "0", - y: "0", - width: "17", - height: "36" - }, null, 8, ["id"]) - ]), - vue.createElementVNode("g", { - id: "Illustrations", - stroke: "none", - "stroke-width": "1", - fill: "none", - "fill-rule": "evenodd" - }, [ - vue.createElementVNode("g", { - id: "B-type", - transform: "translate(-1268.000000, -535.000000)" - }, [ - vue.createElementVNode("g", { - id: "Group-2", - transform: "translate(1268.000000, 535.000000)" - }, [ - vue.createElementVNode("path", { - id: "Oval-Copy-2", - d: "M39.5,86 C61.3152476,86 79,83.9106622 79,81.3333333 C79,78.7560045 57.3152476,78 35.5,78 C13.6847524,78 0,78.7560045 0,81.3333333 C0,83.9106622 17.6847524,86 39.5,86 Z", - fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-3")})` - }, null, 8, ["fill"]), - vue.createElementVNode("polygon", { - id: "Rectangle-Copy-14", - fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-7")})`, - transform: "translate(27.500000, 51.500000) scale(1, -1) translate(-27.500000, -51.500000) ", - points: "13 58 53 58 42 45 2 45" - }, null, 8, ["fill"]), - vue.createElementVNode("g", { - id: "Group-Copy", - transform: "translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)" - }, [ - vue.createElementVNode("polygon", { - id: "Rectangle-Copy-10", - fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-7")})`, - transform: "translate(11.500000, 5.000000) scale(1, -1) translate(-11.500000, -5.000000) ", - points: "2.84078316e-14 3 18 3 23 7 5 7" - }, null, 8, ["fill"]), - vue.createElementVNode("polygon", { - id: "Rectangle-Copy-11", - fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-5")})`, - points: "-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43" - }, null, 8, ["fill"]), - vue.createElementVNode("rect", { - id: "Rectangle-Copy-12", - fill: `url(#linearGradient-1-${vue.unref(id)})`, - transform: "translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ", - x: "38", - y: "7", - width: "17", - height: "36" - }, null, 8, ["fill"]), - vue.createElementVNode("polygon", { - id: "Rectangle-Copy-13", - fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-2")})`, - transform: "translate(39.500000, 3.500000) scale(-1, 1) translate(-39.500000, -3.500000) ", - points: "24 7 41 7 55 -3.63806207e-12 38 -3.63806207e-12" - }, null, 8, ["fill"]) - ]), - vue.createElementVNode("rect", { - id: "Rectangle-Copy-15", - fill: `url(#linearGradient-2-${vue.unref(id)})`, - x: "13", - y: "45", - width: "40", - height: "36" - }, null, 8, ["fill"]), - vue.createElementVNode("g", { - id: "Rectangle-Copy-17", - transform: "translate(53.000000, 45.000000)" - }, [ - vue.createElementVNode("use", { - id: "Mask", - fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-8")})`, - transform: "translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ", - "xlink:href": `#path-3-${vue.unref(id)}` - }, null, 8, ["fill", "xlink:href"]), - vue.createElementVNode("polygon", { - id: "Rectangle-Copy", - fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-9")})`, - mask: `url(#mask-4-${vue.unref(id)})`, - transform: "translate(12.000000, 9.000000) scale(-1, 1) translate(-12.000000, -9.000000) ", - points: "7 0 24 0 20 18 7 16.5" - }, null, 8, ["fill", "mask"]) - ]), - vue.createElementVNode("polygon", { - id: "Rectangle-Copy-18", - fill: `var(${vue.unref(ns).cssVarBlockName("fill-color-2")})`, - transform: "translate(66.000000, 51.500000) scale(-1, 1) translate(-66.000000, -51.500000) ", - points: "62 45 79 45 70 58 53 58" - }, null, 8, ["fill"]) - ]) - ]) - ]) - ]); - }; - } - }); - var ImgEmpty = /* @__PURE__ */ _export_sfc(_sfc_main$1c, [["__file", "img-empty.vue"]]); - - const emptyProps = buildProps({ - image: { - type: String, - default: "" - }, - imageSize: Number, - description: { - type: String, - default: "" - } - }); - - const __default__$W = vue.defineComponent({ - name: "ElEmpty" - }); - const _sfc_main$1b = /* @__PURE__ */ vue.defineComponent({ - ...__default__$W, - props: emptyProps, - setup(__props) { - const props = __props; - const { t } = useLocale(); - const ns = useNamespace("empty"); - const emptyDescription = vue.computed(() => props.description || t("el.table.emptyText")); - const imageStyle = vue.computed(() => ({ - width: addUnit(props.imageSize) - })); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(ns).b()) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("image")), - style: vue.normalizeStyle(vue.unref(imageStyle)) - }, [ - _ctx.image ? (vue.openBlock(), vue.createElementBlock("img", { - key: 0, - src: _ctx.image, - ondragstart: "return false" - }, null, 8, ["src"])) : vue.renderSlot(_ctx.$slots, "image", { key: 1 }, () => [ - vue.createVNode(ImgEmpty) - ]) - ], 6), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("description")) - }, [ - _ctx.$slots.description ? vue.renderSlot(_ctx.$slots, "description", { key: 0 }) : (vue.openBlock(), vue.createElementBlock("p", { key: 1 }, vue.toDisplayString(vue.unref(emptyDescription)), 1)) - ], 2), - _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("bottom")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var Empty = /* @__PURE__ */ _export_sfc(_sfc_main$1b, [["__file", "empty.vue"]]); - - const ElEmpty = withInstall(Empty); - - const imageViewerProps = buildProps({ - urlList: { - type: definePropType(Array), - default: () => mutable([]) - }, - zIndex: { - type: Number - }, - initialIndex: { - type: Number, - default: 0 - }, - infinite: { - type: Boolean, - default: true - }, - hideOnClickModal: Boolean, - teleported: Boolean, - closeOnPressEscape: { - type: Boolean, - default: true - }, - zoomRate: { - type: Number, - default: 1.2 - }, - minScale: { - type: Number, - default: 0.2 - }, - maxScale: { - type: Number, - default: 7 - }, - showProgress: { - type: Boolean, - default: false - }, - crossorigin: { - type: definePropType(String) - } - }); - const imageViewerEmits = { - close: () => true, - switch: (index) => isNumber(index), - rotate: (deg) => isNumber(deg) - }; - - const __default__$V = vue.defineComponent({ - name: "ElImageViewer" - }); - const _sfc_main$1a = /* @__PURE__ */ vue.defineComponent({ - ...__default__$V, - props: imageViewerProps, - emits: imageViewerEmits, - setup(__props, { expose, emit }) { - var _a; - const props = __props; - const modes = { - CONTAIN: { - name: "contain", - icon: vue.markRaw(full_screen_default) - }, - ORIGINAL: { - name: "original", - icon: vue.markRaw(scale_to_original_default) - } - }; - const { t } = useLocale(); - const ns = useNamespace("image-viewer"); - const { nextZIndex } = useZIndex(); - const wrapper = vue.ref(); - const imgRefs = vue.ref([]); - const scopeEventListener = vue.effectScope(); - const loading = vue.ref(true); - const activeIndex = vue.ref(props.initialIndex); - const mode = vue.shallowRef(modes.CONTAIN); - const transform = vue.ref({ - scale: 1, - deg: 0, - offsetX: 0, - offsetY: 0, - enableTransition: false - }); - const zIndex = vue.ref((_a = props.zIndex) != null ? _a : nextZIndex()); - const isSingle = vue.computed(() => { - const { urlList } = props; - return urlList.length <= 1; - }); - const isFirst = vue.computed(() => activeIndex.value === 0); - const isLast = vue.computed(() => activeIndex.value === props.urlList.length - 1); - const currentImg = vue.computed(() => props.urlList[activeIndex.value]); - const arrowPrevKls = vue.computed(() => [ - ns.e("btn"), - ns.e("prev"), - ns.is("disabled", !props.infinite && isFirst.value) - ]); - const arrowNextKls = vue.computed(() => [ - ns.e("btn"), - ns.e("next"), - ns.is("disabled", !props.infinite && isLast.value) - ]); - const imgStyle = vue.computed(() => { - const { scale, deg, offsetX, offsetY, enableTransition } = transform.value; - let translateX = offsetX / scale; - let translateY = offsetY / scale; - const radian = deg * Math.PI / 180; - const cosRadian = Math.cos(radian); - const sinRadian = Math.sin(radian); - translateX = translateX * cosRadian + translateY * sinRadian; - translateY = translateY * cosRadian - offsetX / scale * sinRadian; - const style = { - transform: `scale(${scale}) rotate(${deg}deg) translate(${translateX}px, ${translateY}px)`, - transition: enableTransition ? "transform .3s" : "" - }; - if (mode.value.name === modes.CONTAIN.name) { - style.maxWidth = style.maxHeight = "100%"; - } - return style; - }); - const progress = vue.computed(() => `${activeIndex.value + 1} / ${props.urlList.length}`); - function hide() { - unregisterEventListener(); - emit("close"); - } - function registerEventListener() { - const keydownHandler = throttle((e) => { - switch (e.code) { - case EVENT_CODE.esc: - props.closeOnPressEscape && hide(); - break; - case EVENT_CODE.space: - toggleMode(); - break; - case EVENT_CODE.left: - prev(); - break; - case EVENT_CODE.up: - handleActions("zoomIn"); - break; - case EVENT_CODE.right: - next(); - break; - case EVENT_CODE.down: - handleActions("zoomOut"); - break; - } - }); - const mousewheelHandler = throttle((e) => { - const delta = e.deltaY || e.deltaX; - handleActions(delta < 0 ? "zoomIn" : "zoomOut", { - zoomRate: props.zoomRate, - enableTransition: false - }); - }); - scopeEventListener.run(() => { - useEventListener(document, "keydown", keydownHandler); - useEventListener(document, "wheel", mousewheelHandler); - }); - } - function unregisterEventListener() { - scopeEventListener.stop(); - } - function handleImgLoad() { - loading.value = false; - } - function handleImgError(e) { - loading.value = false; - e.target.alt = t("el.image.error"); - } - function handleMouseDown(e) { - if (loading.value || e.button !== 0 || !wrapper.value) - return; - transform.value.enableTransition = false; - const { offsetX, offsetY } = transform.value; - const startX = e.pageX; - const startY = e.pageY; - const dragHandler = throttle((ev) => { - transform.value = { - ...transform.value, - offsetX: offsetX + ev.pageX - startX, - offsetY: offsetY + ev.pageY - startY - }; - }); - const removeMousemove = useEventListener(document, "mousemove", dragHandler); - useEventListener(document, "mouseup", () => { - removeMousemove(); - }); - e.preventDefault(); - } - function reset() { - transform.value = { - scale: 1, - deg: 0, - offsetX: 0, - offsetY: 0, - enableTransition: false - }; - } - function toggleMode() { - if (loading.value) - return; - const modeNames = keysOf(modes); - const modeValues = Object.values(modes); - const currentMode = mode.value.name; - const index = modeValues.findIndex((i) => i.name === currentMode); - const nextIndex = (index + 1) % modeNames.length; - mode.value = modes[modeNames[nextIndex]]; - reset(); - } - function setActiveItem(index) { - const len = props.urlList.length; - activeIndex.value = (index + len) % len; - } - function prev() { - if (isFirst.value && !props.infinite) - return; - setActiveItem(activeIndex.value - 1); - } - function next() { - if (isLast.value && !props.infinite) - return; - setActiveItem(activeIndex.value + 1); - } - function handleActions(action, options = {}) { - if (loading.value) - return; - const { minScale, maxScale } = props; - const { zoomRate, rotateDeg, enableTransition } = { - zoomRate: props.zoomRate, - rotateDeg: 90, - enableTransition: true, - ...options - }; - switch (action) { - case "zoomOut": - if (transform.value.scale > minScale) { - transform.value.scale = Number.parseFloat((transform.value.scale / zoomRate).toFixed(3)); - } - break; - case "zoomIn": - if (transform.value.scale < maxScale) { - transform.value.scale = Number.parseFloat((transform.value.scale * zoomRate).toFixed(3)); - } - break; - case "clockwise": - transform.value.deg += rotateDeg; - emit("rotate", transform.value.deg); - break; - case "anticlockwise": - transform.value.deg -= rotateDeg; - emit("rotate", transform.value.deg); - break; - } - transform.value.enableTransition = enableTransition; - } - function onFocusoutPrevented(event) { - var _a2; - if (((_a2 = event.detail) == null ? void 0 : _a2.focusReason) === "pointer") { - event.preventDefault(); - } - } - function onCloseRequested() { - if (props.closeOnPressEscape) { - hide(); - } - } - vue.watch(currentImg, () => { - vue.nextTick(() => { - const $img = imgRefs.value[0]; - if (!($img == null ? void 0 : $img.complete)) { - loading.value = true; - } - }); - }); - vue.watch(activeIndex, (val) => { - reset(); - emit("switch", val); - }); - vue.onMounted(() => { - registerEventListener(); - }); - expose({ - setActiveItem - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTeleport$1), { - to: "body", - disabled: !_ctx.teleported - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.Transition, { - name: "viewer-fade", - appear: "" - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - ref_key: "wrapper", - ref: wrapper, - tabindex: -1, - class: vue.normalizeClass(vue.unref(ns).e("wrapper")), - style: vue.normalizeStyle({ zIndex: zIndex.value }) - }, [ - vue.createVNode(vue.unref(ElFocusTrap), { - loop: "", - trapped: "", - "focus-trap-el": wrapper.value, - "focus-start-el": "container", - onFocusoutPrevented, - onReleaseRequested: onCloseRequested - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("mask")), - onClick: vue.withModifiers(($event) => _ctx.hideOnClickModal && hide(), ["self"]) - }, null, 10, ["onClick"]), - vue.createCommentVNode(" CLOSE "), - vue.createElementVNode("span", { - class: vue.normalizeClass([vue.unref(ns).e("btn"), vue.unref(ns).e("close")]), - onClick: hide - }, [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(close_default)) - ]), - _: 1 - }) - ], 2), - vue.createCommentVNode(" ARROW "), - !vue.unref(isSingle) ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(arrowPrevKls)), - onClick: prev - }, [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_left_default)) - ]), - _: 1 - }) - ], 2), - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(arrowNextKls)), - onClick: next - }, [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_right_default)) - ]), - _: 1 - }) - ], 2) - ], 64)) : vue.createCommentVNode("v-if", true), - _ctx.showProgress ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass([vue.unref(ns).e("btn"), vue.unref(ns).e("progress")]) - }, [ - vue.renderSlot(_ctx.$slots, "progress", { - activeIndex: activeIndex.value, - total: _ctx.urlList.length - }, () => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(progress)), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createCommentVNode(" ACTIONS "), - vue.createElementVNode("div", { - class: vue.normalizeClass([vue.unref(ns).e("btn"), vue.unref(ns).e("actions")]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("actions__inner")) - }, [ - vue.renderSlot(_ctx.$slots, "toolbar", { - actions: handleActions, - prev, - next, - reset: toggleMode, - activeIndex: activeIndex.value - }, () => [ - vue.createVNode(vue.unref(ElIcon), { - onClick: ($event) => handleActions("zoomOut") - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(zoom_out_default)) - ]), - _: 1 - }, 8, ["onClick"]), - vue.createVNode(vue.unref(ElIcon), { - onClick: ($event) => handleActions("zoomIn") - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(zoom_in_default)) - ]), - _: 1 - }, 8, ["onClick"]), - vue.createElementVNode("i", { - class: vue.normalizeClass(vue.unref(ns).e("actions__divider")) - }, null, 2), - vue.createVNode(vue.unref(ElIcon), { onClick: toggleMode }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(mode).icon))) - ]), - _: 1 - }), - vue.createElementVNode("i", { - class: vue.normalizeClass(vue.unref(ns).e("actions__divider")) - }, null, 2), - vue.createVNode(vue.unref(ElIcon), { - onClick: ($event) => handleActions("anticlockwise") - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(refresh_left_default)) - ]), - _: 1 - }, 8, ["onClick"]), - vue.createVNode(vue.unref(ElIcon), { - onClick: ($event) => handleActions("clockwise") - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(refresh_right_default)) - ]), - _: 1 - }, 8, ["onClick"]) - ]) - ], 2) - ], 2), - vue.createCommentVNode(" CANVAS "), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("canvas")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.urlList, (url, i) => { - return vue.withDirectives((vue.openBlock(), vue.createElementBlock("img", { - ref_for: true, - ref: (el) => imgRefs.value[i] = el, - key: url, - src: url, - style: vue.normalizeStyle(vue.unref(imgStyle)), - class: vue.normalizeClass(vue.unref(ns).e("img")), - crossorigin: _ctx.crossorigin, - onLoad: handleImgLoad, - onError: handleImgError, - onMousedown: handleMouseDown - }, null, 46, ["src", "crossorigin"])), [ - [vue.vShow, i === activeIndex.value] - ]); - }), 128)) - ], 2), - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["focus-trap-el"]) - ], 6) - ]), - _: 3 - }) - ]), - _: 3 - }, 8, ["disabled"]); - }; - } - }); - var ImageViewer = /* @__PURE__ */ _export_sfc(_sfc_main$1a, [["__file", "image-viewer.vue"]]); - - const ElImageViewer = withInstall(ImageViewer); - - const imageProps = buildProps({ - hideOnClickModal: Boolean, - src: { - type: String, - default: "" - }, - fit: { - type: String, - values: ["", "contain", "cover", "fill", "none", "scale-down"], - default: "" - }, - loading: { - type: String, - values: ["eager", "lazy"] - }, - lazy: Boolean, - scrollContainer: { - type: definePropType([String, Object]) - }, - previewSrcList: { - type: definePropType(Array), - default: () => mutable([]) - }, - previewTeleported: Boolean, - zIndex: { - type: Number - }, - initialIndex: { - type: Number, - default: 0 - }, - infinite: { - type: Boolean, - default: true - }, - closeOnPressEscape: { - type: Boolean, - default: true - }, - zoomRate: { - type: Number, - default: 1.2 - }, - minScale: { - type: Number, - default: 0.2 - }, - maxScale: { - type: Number, - default: 7 - }, - showProgress: { - type: Boolean, - default: false - }, - crossorigin: { - type: definePropType(String) - } - }); - const imageEmits = { - load: (evt) => evt instanceof Event, - error: (evt) => evt instanceof Event, - switch: (val) => isNumber(val), - close: () => true, - show: () => true - }; - - const __default__$U = vue.defineComponent({ - name: "ElImage", - inheritAttrs: false - }); - const _sfc_main$19 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$U, - props: imageProps, - emits: imageEmits, - setup(__props, { expose, emit }) { - const props = __props; - let prevOverflow = ""; - const { t } = useLocale(); - const ns = useNamespace("image"); - const rawAttrs = vue.useAttrs(); - const containerAttrs = vue.computed(() => { - return fromPairs(Object.entries(rawAttrs).filter(([key]) => /^(data-|on[A-Z])/i.test(key) || ["id", "style"].includes(key))); - }); - const imgAttrs = useAttrs({ - excludeListeners: true, - excludeKeys: vue.computed(() => { - return Object.keys(containerAttrs.value); - }) - }); - const imageSrc = vue.ref(); - const hasLoadError = vue.ref(false); - const isLoading = vue.ref(true); - const showViewer = vue.ref(false); - const container = vue.ref(); - const _scrollContainer = vue.ref(); - const supportLoading = isClient && "loading" in HTMLImageElement.prototype; - let stopScrollListener; - let stopWheelListener; - const imageKls = vue.computed(() => [ - ns.e("inner"), - preview.value && ns.e("preview"), - isLoading.value && ns.is("loading") - ]); - const imageStyle = vue.computed(() => { - const { fit } = props; - if (isClient && fit) { - return { objectFit: fit }; - } - return {}; - }); - const preview = vue.computed(() => { - const { previewSrcList } = props; - return isArray$1(previewSrcList) && previewSrcList.length > 0; - }); - const imageIndex = vue.computed(() => { - const { previewSrcList, initialIndex } = props; - let previewIndex = initialIndex; - if (initialIndex > previewSrcList.length - 1) { - previewIndex = 0; - } - return previewIndex; - }); - const isManual = vue.computed(() => { - if (props.loading === "eager") - return false; - return !supportLoading && props.loading === "lazy" || props.lazy; - }); - const loadImage = () => { - if (!isClient) - return; - isLoading.value = true; - hasLoadError.value = false; - imageSrc.value = props.src; - }; - function handleLoad(event) { - isLoading.value = false; - hasLoadError.value = false; - emit("load", event); - } - function handleError(event) { - isLoading.value = false; - hasLoadError.value = true; - emit("error", event); - } - function handleLazyLoad() { - if (isInContainer(container.value, _scrollContainer.value)) { - loadImage(); - removeLazyLoadListener(); - } - } - const lazyLoadHandler = useThrottleFn(handleLazyLoad, 200, true); - async function addLazyLoadListener() { - var _a; - if (!isClient) - return; - await vue.nextTick(); - const { scrollContainer } = props; - if (isElement$1(scrollContainer)) { - _scrollContainer.value = scrollContainer; - } else if (isString$1(scrollContainer) && scrollContainer !== "") { - _scrollContainer.value = (_a = document.querySelector(scrollContainer)) != null ? _a : void 0; - } else if (container.value) { - _scrollContainer.value = getScrollContainer(container.value); - } - if (_scrollContainer.value) { - stopScrollListener = useEventListener(_scrollContainer, "scroll", lazyLoadHandler); - setTimeout(() => handleLazyLoad(), 100); - } - } - function removeLazyLoadListener() { - if (!isClient || !_scrollContainer.value || !lazyLoadHandler) - return; - stopScrollListener == null ? void 0 : stopScrollListener(); - _scrollContainer.value = void 0; - } - function wheelHandler(e) { - if (!e.ctrlKey) - return; - if (e.deltaY < 0) { - e.preventDefault(); - return false; - } else if (e.deltaY > 0) { - e.preventDefault(); - return false; - } - } - function clickHandler() { - if (!preview.value) - return; - stopWheelListener = useEventListener("wheel", wheelHandler, { - passive: false - }); - prevOverflow = document.body.style.overflow; - document.body.style.overflow = "hidden"; - showViewer.value = true; - emit("show"); - } - function closeViewer() { - stopWheelListener == null ? void 0 : stopWheelListener(); - document.body.style.overflow = prevOverflow; - showViewer.value = false; - emit("close"); - } - function switchViewer(val) { - emit("switch", val); - } - vue.watch(() => props.src, () => { - if (isManual.value) { - isLoading.value = true; - hasLoadError.value = false; - removeLazyLoadListener(); - addLazyLoadListener(); - } else { - loadImage(); - } - }); - vue.onMounted(() => { - if (isManual.value) { - addLazyLoadListener(); - } else { - loadImage(); - } - }); - expose({ - showPreview: clickHandler - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ - ref_key: "container", - ref: container - }, vue.unref(containerAttrs), { - class: [vue.unref(ns).b(), _ctx.$attrs.class] - }), [ - hasLoadError.value ? vue.renderSlot(_ctx.$slots, "error", { key: 0 }, () => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("error")) - }, vue.toDisplayString(vue.unref(t)("el.image.error")), 3) - ]) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ - imageSrc.value !== void 0 ? (vue.openBlock(), vue.createElementBlock("img", vue.mergeProps({ key: 0 }, vue.unref(imgAttrs), { - src: imageSrc.value, - loading: _ctx.loading, - style: vue.unref(imageStyle), - class: vue.unref(imageKls), - crossorigin: _ctx.crossorigin, - onClick: clickHandler, - onLoad: handleLoad, - onError: handleError - }), null, 16, ["src", "loading", "crossorigin"])) : vue.createCommentVNode("v-if", true), - isLoading.value ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("wrapper")) - }, [ - vue.renderSlot(_ctx.$slots, "placeholder", {}, () => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("placeholder")) - }, null, 2) - ]) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 64)), - vue.unref(preview) ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [ - showViewer.value ? (vue.openBlock(), vue.createBlock(vue.unref(ElImageViewer), { - key: 0, - "z-index": _ctx.zIndex, - "initial-index": vue.unref(imageIndex), - infinite: _ctx.infinite, - "zoom-rate": _ctx.zoomRate, - "min-scale": _ctx.minScale, - "max-scale": _ctx.maxScale, - "show-progress": _ctx.showProgress, - "url-list": _ctx.previewSrcList, - crossorigin: _ctx.crossorigin, - "hide-on-click-modal": _ctx.hideOnClickModal, - teleported: _ctx.previewTeleported, - "close-on-press-escape": _ctx.closeOnPressEscape, - onClose: closeViewer, - onSwitch: switchViewer - }, { - progress: vue.withCtx((progress) => [ - vue.renderSlot(_ctx.$slots, "progress", vue.normalizeProps(vue.guardReactiveProps(progress))) - ]), - toolbar: vue.withCtx((toolbar) => [ - vue.renderSlot(_ctx.$slots, "toolbar", vue.normalizeProps(vue.guardReactiveProps(toolbar))) - ]), - default: vue.withCtx(() => [ - _ctx.$slots.viewer ? (vue.openBlock(), vue.createElementBlock("div", { key: 0 }, [ - vue.renderSlot(_ctx.$slots, "viewer") - ])) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["z-index", "initial-index", "infinite", "zoom-rate", "min-scale", "max-scale", "show-progress", "url-list", "crossorigin", "hide-on-click-modal", "teleported", "close-on-press-escape"])) : vue.createCommentVNode("v-if", true) - ], 64)) : vue.createCommentVNode("v-if", true) - ], 16); - }; - } - }); - var Image$1 = /* @__PURE__ */ _export_sfc(_sfc_main$19, [["__file", "image.vue"]]); - - const ElImage = withInstall(Image$1); - - const inputNumberProps = buildProps({ - id: { - type: String, - default: void 0 - }, - step: { - type: Number, - default: 1 - }, - stepStrictly: Boolean, - max: { - type: Number, - default: Number.POSITIVE_INFINITY - }, - min: { - type: Number, - default: Number.NEGATIVE_INFINITY - }, - modelValue: Number, - readonly: Boolean, - disabled: Boolean, - size: useSizeProp, - controls: { - type: Boolean, - default: true - }, - controlsPosition: { - type: String, - default: "", - values: ["", "right"] - }, - valueOnClear: { - type: [String, Number, null], - validator: (val) => val === null || isNumber(val) || ["min", "max"].includes(val), - default: null - }, - name: String, - placeholder: String, - precision: { - type: Number, - validator: (val) => val >= 0 && val === Number.parseInt(`${val}`, 10) - }, - validateEvent: { - type: Boolean, - default: true - }, - ...useAriaProps(["ariaLabel"]) - }); - const inputNumberEmits = { - [CHANGE_EVENT]: (cur, prev) => prev !== cur, - blur: (e) => e instanceof FocusEvent, - focus: (e) => e instanceof FocusEvent, - [INPUT_EVENT]: (val) => isNumber(val) || isNil(val), - [UPDATE_MODEL_EVENT]: (val) => isNumber(val) || isNil(val) - }; - - const __default__$T = vue.defineComponent({ - name: "ElInputNumber" - }); - const _sfc_main$18 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$T, - props: inputNumberProps, - emits: inputNumberEmits, - setup(__props, { expose, emit }) { - const props = __props; - const { t } = useLocale(); - const ns = useNamespace("input-number"); - const input = vue.ref(); - const data = vue.reactive({ - currentValue: props.modelValue, - userInput: null - }); - const { formItem } = useFormItem(); - const minDisabled = vue.computed(() => isNumber(props.modelValue) && props.modelValue <= props.min); - const maxDisabled = vue.computed(() => isNumber(props.modelValue) && props.modelValue >= props.max); - const numPrecision = vue.computed(() => { - const stepPrecision = getPrecision(props.step); - if (!isUndefined(props.precision)) { - if (stepPrecision > props.precision) ; - return props.precision; - } else { - return Math.max(getPrecision(props.modelValue), stepPrecision); - } - }); - const controlsAtRight = vue.computed(() => { - return props.controls && props.controlsPosition === "right"; - }); - const inputNumberSize = useFormSize(); - const inputNumberDisabled = useFormDisabled(); - const displayValue = vue.computed(() => { - if (data.userInput !== null) { - return data.userInput; - } - let currentValue = data.currentValue; - if (isNil(currentValue)) - return ""; - if (isNumber(currentValue)) { - if (Number.isNaN(currentValue)) - return ""; - if (!isUndefined(props.precision)) { - currentValue = currentValue.toFixed(props.precision); - } - } - return currentValue; - }); - const toPrecision = (num, pre) => { - if (isUndefined(pre)) - pre = numPrecision.value; - if (pre === 0) - return Math.round(num); - let snum = String(num); - const pointPos = snum.indexOf("."); - if (pointPos === -1) - return num; - const nums = snum.replace(".", "").split(""); - const datum = nums[pointPos + pre]; - if (!datum) - return num; - const length = snum.length; - if (snum.charAt(length - 1) === "5") { - snum = `${snum.slice(0, Math.max(0, length - 1))}6`; - } - return Number.parseFloat(Number(snum).toFixed(pre)); - }; - const getPrecision = (value) => { - if (isNil(value)) - return 0; - const valueString = value.toString(); - const dotPosition = valueString.indexOf("."); - let precision = 0; - if (dotPosition !== -1) { - precision = valueString.length - dotPosition - 1; - } - return precision; - }; - const ensurePrecision = (val, coefficient = 1) => { - if (!isNumber(val)) - return data.currentValue; - return toPrecision(val + props.step * coefficient); - }; - const increase = () => { - if (props.readonly || inputNumberDisabled.value || maxDisabled.value) - return; - const value = Number(displayValue.value) || 0; - const newVal = ensurePrecision(value); - setCurrentValue(newVal); - emit(INPUT_EVENT, data.currentValue); - setCurrentValueToModelValue(); - }; - const decrease = () => { - if (props.readonly || inputNumberDisabled.value || minDisabled.value) - return; - const value = Number(displayValue.value) || 0; - const newVal = ensurePrecision(value, -1); - setCurrentValue(newVal); - emit(INPUT_EVENT, data.currentValue); - setCurrentValueToModelValue(); - }; - const verifyValue = (value, update) => { - const { max, min, step, precision, stepStrictly, valueOnClear } = props; - if (max < min) { - throwError("InputNumber", "min should not be greater than max."); - } - let newVal = Number(value); - if (isNil(value) || Number.isNaN(newVal)) { - return null; - } - if (value === "") { - if (valueOnClear === null) { - return null; - } - newVal = isString$1(valueOnClear) ? { min, max }[valueOnClear] : valueOnClear; - } - if (stepStrictly) { - newVal = toPrecision(Math.round(newVal / step) * step, precision); - if (newVal !== value) { - update && emit(UPDATE_MODEL_EVENT, newVal); - } - } - if (!isUndefined(precision)) { - newVal = toPrecision(newVal, precision); - } - if (newVal > max || newVal < min) { - newVal = newVal > max ? max : min; - update && emit(UPDATE_MODEL_EVENT, newVal); - } - return newVal; - }; - const setCurrentValue = (value, emitChange = true) => { - var _a; - const oldVal = data.currentValue; - const newVal = verifyValue(value); - if (!emitChange) { - emit(UPDATE_MODEL_EVENT, newVal); - return; - } - if (oldVal === newVal && value) - return; - data.userInput = null; - emit(UPDATE_MODEL_EVENT, newVal); - if (oldVal !== newVal) { - emit(CHANGE_EVENT, newVal, oldVal); - } - if (props.validateEvent) { - (_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, "change").catch((err) => debugWarn()); - } - data.currentValue = newVal; - }; - const handleInput = (value) => { - data.userInput = value; - const newVal = value === "" ? null : Number(value); - emit(INPUT_EVENT, newVal); - setCurrentValue(newVal, false); - }; - const handleInputChange = (value) => { - const newVal = value !== "" ? Number(value) : ""; - if (isNumber(newVal) && !Number.isNaN(newVal) || value === "") { - setCurrentValue(newVal); - } - setCurrentValueToModelValue(); - data.userInput = null; - }; - const focus = () => { - var _a, _b; - (_b = (_a = input.value) == null ? void 0 : _a.focus) == null ? void 0 : _b.call(_a); - }; - const blur = () => { - var _a, _b; - (_b = (_a = input.value) == null ? void 0 : _a.blur) == null ? void 0 : _b.call(_a); - }; - const handleFocus = (event) => { - emit("focus", event); - }; - const handleBlur = (event) => { - var _a, _b; - data.userInput = null; - if (isFirefox() && data.currentValue === null && ((_a = input.value) == null ? void 0 : _a.input)) { - input.value.input.value = ""; - } - emit("blur", event); - if (props.validateEvent) { - (_b = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _b.call(formItem, "blur").catch((err) => debugWarn()); - } - }; - const setCurrentValueToModelValue = () => { - if (data.currentValue !== props.modelValue) { - data.currentValue = props.modelValue; - } - }; - const handleWheel = (e) => { - if (document.activeElement === e.target) - e.preventDefault(); - }; - vue.watch(() => props.modelValue, (value, oldValue) => { - const newValue = verifyValue(value, true); - if (data.userInput === null && newValue !== oldValue) { - data.currentValue = newValue; - } - }, { immediate: true }); - vue.onMounted(() => { - var _a; - const { min, max, modelValue } = props; - const innerInput = (_a = input.value) == null ? void 0 : _a.input; - innerInput.setAttribute("role", "spinbutton"); - if (Number.isFinite(max)) { - innerInput.setAttribute("aria-valuemax", String(max)); - } else { - innerInput.removeAttribute("aria-valuemax"); - } - if (Number.isFinite(min)) { - innerInput.setAttribute("aria-valuemin", String(min)); - } else { - innerInput.removeAttribute("aria-valuemin"); - } - innerInput.setAttribute("aria-valuenow", data.currentValue || data.currentValue === 0 ? String(data.currentValue) : ""); - innerInput.setAttribute("aria-disabled", String(inputNumberDisabled.value)); - if (!isNumber(modelValue) && modelValue != null) { - let val = Number(modelValue); - if (Number.isNaN(val)) { - val = null; - } - emit(UPDATE_MODEL_EVENT, val); - } - innerInput.addEventListener("wheel", handleWheel, { passive: false }); - }); - vue.onUpdated(() => { - var _a, _b; - const innerInput = (_a = input.value) == null ? void 0 : _a.input; - innerInput == null ? void 0 : innerInput.setAttribute("aria-valuenow", `${(_b = data.currentValue) != null ? _b : ""}`); - }); - expose({ - focus, - blur - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([ - vue.unref(ns).b(), - vue.unref(ns).m(vue.unref(inputNumberSize)), - vue.unref(ns).is("disabled", vue.unref(inputNumberDisabled)), - vue.unref(ns).is("without-controls", !_ctx.controls), - vue.unref(ns).is("controls-right", vue.unref(controlsAtRight)) - ]), - onDragstart: vue.withModifiers(() => { - }, ["prevent"]) - }, [ - _ctx.controls ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("span", { - key: 0, - role: "button", - "aria-label": vue.unref(t)("el.inputNumber.decrease"), - class: vue.normalizeClass([vue.unref(ns).e("decrease"), vue.unref(ns).is("disabled", vue.unref(minDisabled))]), - onKeydown: vue.withKeys(decrease, ["enter"]) - }, [ - vue.renderSlot(_ctx.$slots, "decrease-icon", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.unref(controlsAtRight) ? (vue.openBlock(), vue.createBlock(vue.unref(arrow_down_default), { key: 0 })) : (vue.openBlock(), vue.createBlock(vue.unref(minus_default), { key: 1 })) - ]), - _: 1 - }) - ]) - ], 42, ["aria-label", "onKeydown"])), [ - [vue.unref(vRepeatClick), decrease] - ]) : vue.createCommentVNode("v-if", true), - _ctx.controls ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("span", { - key: 1, - role: "button", - "aria-label": vue.unref(t)("el.inputNumber.increase"), - class: vue.normalizeClass([vue.unref(ns).e("increase"), vue.unref(ns).is("disabled", vue.unref(maxDisabled))]), - onKeydown: vue.withKeys(increase, ["enter"]) - }, [ - vue.renderSlot(_ctx.$slots, "increase-icon", {}, () => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.unref(controlsAtRight) ? (vue.openBlock(), vue.createBlock(vue.unref(arrow_up_default), { key: 0 })) : (vue.openBlock(), vue.createBlock(vue.unref(plus_default), { key: 1 })) - ]), - _: 1 - }) - ]) - ], 42, ["aria-label", "onKeydown"])), [ - [vue.unref(vRepeatClick), increase] - ]) : vue.createCommentVNode("v-if", true), - vue.createVNode(vue.unref(ElInput), { - id: _ctx.id, - ref_key: "input", - ref: input, - type: "number", - step: _ctx.step, - "model-value": vue.unref(displayValue), - placeholder: _ctx.placeholder, - readonly: _ctx.readonly, - disabled: vue.unref(inputNumberDisabled), - size: vue.unref(inputNumberSize), - max: _ctx.max, - min: _ctx.min, - name: _ctx.name, - "aria-label": _ctx.ariaLabel, - "validate-event": false, - onKeydown: [ - vue.withKeys(vue.withModifiers(increase, ["prevent"]), ["up"]), - vue.withKeys(vue.withModifiers(decrease, ["prevent"]), ["down"]) - ], - onBlur: handleBlur, - onFocus: handleFocus, - onInput: handleInput, - onChange: handleInputChange - }, vue.createSlots({ - _: 2 - }, [ - _ctx.$slots.prefix ? { - name: "prefix", - fn: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "prefix") - ]) - } : void 0, - _ctx.$slots.suffix ? { - name: "suffix", - fn: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "suffix") - ]) - } : void 0 - ]), 1032, ["id", "step", "model-value", "placeholder", "readonly", "disabled", "size", "max", "min", "name", "aria-label", "onKeydown"]) - ], 42, ["onDragstart"]); - }; - } - }); - var InputNumber = /* @__PURE__ */ _export_sfc(_sfc_main$18, [["__file", "input-number.vue"]]); - - const ElInputNumber = withInstall(InputNumber); - - const inputTagProps = buildProps({ - modelValue: { - type: definePropType(Array) - }, - max: Number, - tagType: { ...tagProps.type, default: "info" }, - tagEffect: tagProps.effect, - trigger: { - type: definePropType(String), - default: EVENT_CODE.enter - }, - draggable: { - type: Boolean, - default: false - }, - size: useSizeProp, - clearable: Boolean, - disabled: { - type: Boolean, - default: void 0 - }, - validateEvent: { - type: Boolean, - default: true - }, - readonly: Boolean, - autofocus: Boolean, - id: { - type: String, - default: void 0 - }, - tabindex: { - type: [String, Number], - default: 0 - }, - maxlength: { - type: [String, Number] - }, - minlength: { - type: [String, Number] - }, - placeholder: String, - autocomplete: { - type: String, - default: "off" - }, - ariaLabel: String - }); - const inputTagEmits = { - [UPDATE_MODEL_EVENT]: (value) => isArray$1(value) || isUndefined(value), - [CHANGE_EVENT]: (value) => isArray$1(value) || isUndefined(value), - [INPUT_EVENT]: (value) => isString$1(value), - "add-tag": (value) => isString$1(value), - "remove-tag": (value) => isString$1(value), - focus: (evt) => evt instanceof FocusEvent, - blur: (evt) => evt instanceof FocusEvent, - clear: () => true - }; - - function useDragTag({ - wrapperRef, - handleDragged, - afterDragged - }) { - const ns = useNamespace("input-tag"); - const dropIndicatorRef = vue.shallowRef(); - const showDropIndicator = vue.ref(false); - let draggingIndex; - let draggingTag; - let dropIndex; - let dropType; - function getTagClassName(index) { - return `.${ns.e("inner")} .${ns.namespace.value}-tag:nth-child(${index + 1})`; - } - function handleDragStart(event, index) { - draggingIndex = index; - draggingTag = wrapperRef.value.querySelector(getTagClassName(index)); - if (draggingTag) { - draggingTag.style.opacity = "0.5"; - } - event.dataTransfer.effectAllowed = "move"; - } - function handleDragOver(event, index) { - dropIndex = index; - event.preventDefault(); - event.dataTransfer.dropEffect = "move"; - if (isUndefined(draggingIndex) || draggingIndex === index) { - showDropIndicator.value = false; - return; - } - const dropPosition = wrapperRef.value.querySelector(getTagClassName(index)).getBoundingClientRect(); - const dropPrev = !(draggingIndex + 1 === index); - const dropNext = !(draggingIndex - 1 === index); - const distance = event.clientX - dropPosition.left; - const prevPercent = dropPrev ? dropNext ? 0.5 : 1 : -1; - const nextPercent = dropNext ? dropPrev ? 0.5 : 0 : 1; - if (distance <= dropPosition.width * prevPercent) { - dropType = "before"; - } else if (distance > dropPosition.width * nextPercent) { - dropType = "after"; - } else { - dropType = void 0; - } - const innerEl = wrapperRef.value.querySelector(`.${ns.e("inner")}`); - const innerPosition = innerEl.getBoundingClientRect(); - const gap = Number.parseFloat(getStyle(innerEl, "gap")) / 2; - const indicatorTop = dropPosition.top - innerPosition.top; - let indicatorLeft = -9999; - if (dropType === "before") { - indicatorLeft = Math.max(dropPosition.left - innerPosition.left - gap, Math.floor(-gap / 2)); - } else if (dropType === "after") { - const left = dropPosition.right - innerPosition.left; - indicatorLeft = left + (innerPosition.width === left ? Math.floor(gap / 2) : gap); - } - setStyle(dropIndicatorRef.value, { - top: `${indicatorTop}px`, - left: `${indicatorLeft}px` - }); - showDropIndicator.value = !!dropType; - } - function handleDragEnd(event) { - event.preventDefault(); - if (draggingTag) { - draggingTag.style.opacity = ""; - } - if (dropType && !isUndefined(draggingIndex) && !isUndefined(dropIndex) && draggingIndex !== dropIndex) { - handleDragged(draggingIndex, dropIndex, dropType); - } - showDropIndicator.value = false; - draggingIndex = void 0; - draggingTag = null; - dropIndex = void 0; - dropType = void 0; - afterDragged == null ? void 0 : afterDragged(); - } - return { - dropIndicatorRef, - showDropIndicator, - handleDragStart, - handleDragOver, - handleDragEnd - }; - } - - function useHovering() { - const hovering = vue.ref(false); - const handleMouseEnter = () => { - hovering.value = true; - }; - const handleMouseLeave = () => { - hovering.value = false; - }; - return { - hovering, - handleMouseEnter, - handleMouseLeave - }; - } - - function useInputTag({ props, emit, formItem }) { - const disabled = useFormDisabled(); - const size = useFormSize(); - const inputRef = vue.shallowRef(); - const inputValue = vue.ref(); - const tagSize = vue.computed(() => { - return ["small"].includes(size.value) ? "small" : "default"; - }); - const placeholder = vue.computed(() => { - var _a; - return ((_a = props.modelValue) == null ? void 0 : _a.length) ? void 0 : props.placeholder; - }); - const closable = vue.computed(() => !(props.readonly || disabled.value)); - const inputLimit = vue.computed(() => { - var _a, _b; - return isUndefined(props.max) ? false : ((_b = (_a = props.modelValue) == null ? void 0 : _a.length) != null ? _b : 0) >= props.max; - }); - const handleInput = (event) => { - if (inputLimit.value) { - inputValue.value = void 0; - return; - } - if (isComposing.value) - return; - emit(INPUT_EVENT, event.target.value); - }; - const handleKeydown = (event) => { - var _a; - if (isComposing.value) - return; - switch (event.code) { - case props.trigger: - event.preventDefault(); - event.stopPropagation(); - handleAddTag(); - break; - case EVENT_CODE.numpadEnter: - if (props.trigger === EVENT_CODE.enter) { - event.preventDefault(); - event.stopPropagation(); - handleAddTag(); - } - break; - case EVENT_CODE.backspace: - if (!inputValue.value && ((_a = props.modelValue) == null ? void 0 : _a.length)) { - event.preventDefault(); - event.stopPropagation(); - handleRemoveTag(props.modelValue.length - 1); - } - break; - } - }; - const handleAddTag = () => { - var _a, _b; - const value = (_a = inputValue.value) == null ? void 0 : _a.trim(); - if (!value || inputLimit.value) - return; - const list = [...(_b = props.modelValue) != null ? _b : [], value]; - emit(UPDATE_MODEL_EVENT, list); - emit(CHANGE_EVENT, list); - emit("add-tag", value); - inputValue.value = void 0; - }; - const handleRemoveTag = (index) => { - var _a; - const value = ((_a = props.modelValue) != null ? _a : []).slice(); - const [item] = value.splice(index, 1); - emit(UPDATE_MODEL_EVENT, value); - emit(CHANGE_EVENT, value); - emit("remove-tag", item); - }; - const handleClear = () => { - inputValue.value = void 0; - emit(UPDATE_MODEL_EVENT, void 0); - emit(CHANGE_EVENT, void 0); - emit("clear"); - }; - const handleDragged = (draggingIndex, dropIndex, type) => { - var _a; - const value = ((_a = props.modelValue) != null ? _a : []).slice(); - const [draggedItem] = value.splice(draggingIndex, 1); - const step = dropIndex > draggingIndex && type === "before" ? -1 : dropIndex < draggingIndex && type === "after" ? 1 : 0; - value.splice(dropIndex + step, 0, draggedItem); - emit(UPDATE_MODEL_EVENT, value); - emit(CHANGE_EVENT, value); - }; - const focus = () => { - var _a; - (_a = inputRef.value) == null ? void 0 : _a.focus(); - }; - const blur = () => { - var _a; - (_a = inputRef.value) == null ? void 0 : _a.blur(); - }; - const { wrapperRef, isFocused } = useFocusController(inputRef, { - beforeFocus() { - return disabled.value; - }, - afterBlur() { - var _a; - handleAddTag(); - if (props.validateEvent) { - (_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, "blur").catch((err) => debugWarn()); - } - } - }); - const { - isComposing, - handleCompositionStart, - handleCompositionUpdate, - handleCompositionEnd - } = useComposition({ afterComposition: handleInput }); - vue.watch(() => props.modelValue, () => { - var _a; - if (props.validateEvent) { - (_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, CHANGE_EVENT).catch((err) => debugWarn()); - } - }); - return { - inputRef, - wrapperRef, - isFocused, - isComposing, - inputValue, - size, - tagSize, - placeholder, - closable, - disabled, - inputLimit, - handleDragged, - handleInput, - handleKeydown, - handleAddTag, - handleRemoveTag, - handleClear, - handleCompositionStart, - handleCompositionUpdate, - handleCompositionEnd, - focus, - blur - }; - } - - function useInputTagDom({ - props, - isFocused, - hovering, - disabled, - inputValue, - size, - validateState, - validateIcon, - needStatusIcon - }) { - const attrs = vue.useAttrs(); - const slots = vue.useSlots(); - const ns = useNamespace("input-tag"); - const nsInput = useNamespace("input"); - const containerKls = vue.computed(() => [ - ns.b(), - ns.is("focused", isFocused.value), - ns.is("hovering", hovering.value), - ns.is("disabled", disabled.value), - ns.m(size.value), - ns.e("wrapper"), - attrs.class - ]); - const containerStyle = vue.computed(() => [attrs.style]); - const innerKls = vue.computed(() => { - var _a, _b; - return [ - ns.e("inner"), - ns.is("draggable", props.draggable), - ns.is("left-space", !((_a = props.modelValue) == null ? void 0 : _a.length) && !slots.prefix), - ns.is("right-space", !((_b = props.modelValue) == null ? void 0 : _b.length) && !showSuffix.value) - ]; - }); - const showClear = vue.computed(() => { - var _a; - return props.clearable && !disabled.value && !props.readonly && (((_a = props.modelValue) == null ? void 0 : _a.length) || inputValue.value) && (isFocused.value || hovering.value); - }); - const showSuffix = vue.computed(() => { - return slots.suffix || showClear.value || validateState.value && validateIcon.value && needStatusIcon.value; - }); - return { - ns, - nsInput, - containerKls, - containerStyle, - innerKls, - showClear, - showSuffix - }; - } - - const __default__$S = vue.defineComponent({ - name: "ElInputTag", - inheritAttrs: false - }); - const _sfc_main$17 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$S, - props: inputTagProps, - emits: inputTagEmits, - setup(__props, { expose, emit }) { - const props = __props; - const attrs = useAttrs(); - const slots = vue.useSlots(); - const { form, formItem } = useFormItem(); - const { inputId } = useFormItemInputId(props, { formItemContext: formItem }); - const needStatusIcon = vue.computed(() => { - var _a; - return (_a = form == null ? void 0 : form.statusIcon) != null ? _a : false; - }); - const validateState = vue.computed(() => (formItem == null ? void 0 : formItem.validateState) || ""); - const validateIcon = vue.computed(() => { - return validateState.value && ValidateComponentsMap[validateState.value]; - }); - const { - inputRef, - wrapperRef, - isFocused, - inputValue, - size, - tagSize, - placeholder, - closable, - disabled, - handleDragged, - handleInput, - handleKeydown, - handleRemoveTag, - handleClear, - handleCompositionStart, - handleCompositionUpdate, - handleCompositionEnd, - focus, - blur - } = useInputTag({ props, emit, formItem }); - const { hovering, handleMouseEnter, handleMouseLeave } = useHovering(); - const { calculatorRef, inputStyle } = useCalcInputWidth(); - const { - dropIndicatorRef, - showDropIndicator, - handleDragStart, - handleDragOver, - handleDragEnd - } = useDragTag({ wrapperRef, handleDragged, afterDragged: focus }); - const { - ns, - nsInput, - containerKls, - containerStyle, - innerKls, - showClear, - showSuffix - } = useInputTagDom({ - props, - hovering, - isFocused, - inputValue, - disabled, - size, - validateState, - validateIcon, - needStatusIcon - }); - expose({ - focus, - blur - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "wrapperRef", - ref: wrapperRef, - class: vue.normalizeClass(vue.unref(containerKls)), - style: vue.normalizeStyle(vue.unref(containerStyle)), - onMouseenter: vue.unref(handleMouseEnter), - onMouseleave: vue.unref(handleMouseLeave) - }, [ - vue.unref(slots).prefix ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("prefix")) - }, [ - vue.renderSlot(_ctx.$slots, "prefix") - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(innerKls)) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.modelValue, (item, index) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTag), { - key: index, - size: vue.unref(tagSize), - closable: vue.unref(closable), - type: _ctx.tagType, - effect: _ctx.tagEffect, - draggable: vue.unref(closable) && _ctx.draggable, - "disable-transitions": "", - onClose: ($event) => vue.unref(handleRemoveTag)(index), - onDragstart: (event) => vue.unref(handleDragStart)(event, index), - onDragover: (event) => vue.unref(handleDragOver)(event, index), - onDragend: vue.unref(handleDragEnd), - onDrop: vue.withModifiers(() => { - }, ["stop"]) - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "tag", { - value: item, - index - }, () => [ - vue.createTextVNode(vue.toDisplayString(item), 1) - ]) - ]), - _: 2 - }, 1032, ["size", "closable", "type", "effect", "draggable", "onClose", "onDragstart", "onDragover", "onDragend", "onDrop"]); - }), 128)), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("input-wrapper")) - }, [ - vue.withDirectives(vue.createElementVNode("input", vue.mergeProps({ - id: vue.unref(inputId), - ref_key: "inputRef", - ref: inputRef, - "onUpdate:modelValue": ($event) => vue.isRef(inputValue) ? inputValue.value = $event : null - }, vue.unref(attrs), { - type: "text", - minlength: _ctx.minlength, - maxlength: _ctx.maxlength, - disabled: vue.unref(disabled), - readonly: _ctx.readonly, - autocomplete: _ctx.autocomplete, - tabindex: _ctx.tabindex, - placeholder: vue.unref(placeholder), - autofocus: _ctx.autofocus, - ariaLabel: _ctx.ariaLabel, - class: vue.unref(ns).e("input"), - style: vue.unref(inputStyle), - onCompositionstart: vue.unref(handleCompositionStart), - onCompositionupdate: vue.unref(handleCompositionUpdate), - onCompositionend: vue.unref(handleCompositionEnd), - onInput: vue.unref(handleInput), - onKeydown: vue.unref(handleKeydown) - }), null, 16, ["id", "onUpdate:modelValue", "minlength", "maxlength", "disabled", "readonly", "autocomplete", "tabindex", "placeholder", "autofocus", "ariaLabel", "onCompositionstart", "onCompositionupdate", "onCompositionend", "onInput", "onKeydown"]), [ - [vue.vModelText, vue.unref(inputValue)] - ]), - vue.createElementVNode("span", { - ref_key: "calculatorRef", - ref: calculatorRef, - "aria-hidden": "true", - class: vue.normalizeClass(vue.unref(ns).e("input-calculator")), - textContent: vue.toDisplayString(vue.unref(inputValue)) - }, null, 10, ["textContent"]) - ], 2), - vue.withDirectives(vue.createElementVNode("div", { - ref_key: "dropIndicatorRef", - ref: dropIndicatorRef, - class: vue.normalizeClass(vue.unref(ns).e("drop-indicator")) - }, null, 2), [ - [vue.vShow, vue.unref(showDropIndicator)] - ]) - ], 2), - vue.unref(showSuffix) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("suffix")) - }, [ - vue.renderSlot(_ctx.$slots, "suffix"), - vue.unref(showClear) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass([vue.unref(ns).e("icon"), vue.unref(ns).e("clear")]), - onMousedown: vue.withModifiers(vue.unref(NOOP), ["prevent"]), - onClick: vue.unref(handleClear) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(circle_close_default)) - ]), - _: 1 - }, 8, ["class", "onMousedown", "onClick"])) : vue.createCommentVNode("v-if", true), - vue.unref(validateState) && vue.unref(validateIcon) && vue.unref(needStatusIcon) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 1, - class: vue.normalizeClass([ - vue.unref(nsInput).e("icon"), - vue.unref(nsInput).e("validateIcon"), - vue.unref(nsInput).is("loading", vue.unref(validateState) === "validating") - ]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(validateIcon)))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 46, ["onMouseenter", "onMouseleave"]); - }; - } - }); - var InputTag = /* @__PURE__ */ _export_sfc(_sfc_main$17, [["__file", "input-tag.vue"]]); - - const ElInputTag = withInstall(InputTag); - - const linkProps = buildProps({ - type: { - type: String, - values: ["primary", "success", "warning", "info", "danger", "default"], - default: "default" - }, - underline: { - type: Boolean, - default: true - }, - disabled: Boolean, - href: { type: String, default: "" }, - target: { - type: String, - default: "_self" - }, - icon: { - type: iconPropType - } - }); - const linkEmits = { - click: (evt) => evt instanceof MouseEvent - }; - - const __default__$R = vue.defineComponent({ - name: "ElLink" - }); - const _sfc_main$16 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$R, - props: linkProps, - emits: linkEmits, - setup(__props, { emit }) { - const props = __props; - const ns = useNamespace("link"); - const linkKls = vue.computed(() => [ - ns.b(), - ns.m(props.type), - ns.is("disabled", props.disabled), - ns.is("underline", props.underline && !props.disabled) - ]); - function handleClick(event) { - if (!props.disabled) - emit("click", event); - } - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("a", { - class: vue.normalizeClass(vue.unref(linkKls)), - href: _ctx.disabled || !_ctx.href ? void 0 : _ctx.href, - target: _ctx.disabled || !_ctx.href ? void 0 : _ctx.target, - onClick: handleClick - }, [ - _ctx.icon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon))) - ]), - _: 1 - })) : vue.createCommentVNode("v-if", true), - _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("span", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("inner")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2)) : vue.createCommentVNode("v-if", true), - _ctx.$slots.icon ? vue.renderSlot(_ctx.$slots, "icon", { key: 2 }) : vue.createCommentVNode("v-if", true) - ], 10, ["href", "target"]); - }; - } - }); - var Link = /* @__PURE__ */ _export_sfc(_sfc_main$16, [["__file", "link.vue"]]); - - const ElLink = withInstall(Link); - - class SubMenu$1 { - constructor(parent, domNode) { - this.parent = parent; - this.domNode = domNode; - this.subIndex = 0; - this.subIndex = 0; - this.init(); - } - init() { - this.subMenuItems = this.domNode.querySelectorAll("li"); - this.addListeners(); - } - gotoSubIndex(idx) { - if (idx === this.subMenuItems.length) { - idx = 0; - } else if (idx < 0) { - idx = this.subMenuItems.length - 1; - } - this.subMenuItems[idx].focus(); - this.subIndex = idx; - } - addListeners() { - const parentNode = this.parent.domNode; - Array.prototype.forEach.call(this.subMenuItems, (el) => { - el.addEventListener("keydown", (event) => { - let prevDef = false; - switch (event.code) { - case EVENT_CODE.down: { - this.gotoSubIndex(this.subIndex + 1); - prevDef = true; - break; - } - case EVENT_CODE.up: { - this.gotoSubIndex(this.subIndex - 1); - prevDef = true; - break; - } - case EVENT_CODE.tab: { - triggerEvent(parentNode, "mouseleave"); - break; - } - case EVENT_CODE.enter: - case EVENT_CODE.numpadEnter: - case EVENT_CODE.space: { - prevDef = true; - event.currentTarget.click(); - break; - } - } - if (prevDef) { - event.preventDefault(); - event.stopPropagation(); - } - return false; - }); - }); - } - } - var SubMenu$2 = SubMenu$1; - - class MenuItem$1 { - constructor(domNode, namespace) { - this.domNode = domNode; - this.submenu = null; - this.submenu = null; - this.init(namespace); - } - init(namespace) { - this.domNode.setAttribute("tabindex", "0"); - const menuChild = this.domNode.querySelector(`.${namespace}-menu`); - if (menuChild) { - this.submenu = new SubMenu$2(this, menuChild); - } - this.addListeners(); - } - addListeners() { - this.domNode.addEventListener("keydown", (event) => { - let prevDef = false; - switch (event.code) { - case EVENT_CODE.down: { - triggerEvent(event.currentTarget, "mouseenter"); - this.submenu && this.submenu.gotoSubIndex(0); - prevDef = true; - break; - } - case EVENT_CODE.up: { - triggerEvent(event.currentTarget, "mouseenter"); - this.submenu && this.submenu.gotoSubIndex(this.submenu.subMenuItems.length - 1); - prevDef = true; - break; - } - case EVENT_CODE.tab: { - triggerEvent(event.currentTarget, "mouseleave"); - break; - } - case EVENT_CODE.enter: - case EVENT_CODE.numpadEnter: - case EVENT_CODE.space: { - prevDef = true; - event.currentTarget.click(); - break; - } - } - if (prevDef) { - event.preventDefault(); - } - }); - } - } - var MenuItem$2 = MenuItem$1; - - class Menu$1 { - constructor(domNode, namespace) { - this.domNode = domNode; - this.init(namespace); - } - init(namespace) { - const menuChildren = this.domNode.childNodes; - Array.from(menuChildren).forEach((child) => { - if (child.nodeType === 1) { - new MenuItem$2(child, namespace); - } - }); - } - } - var Menubar = Menu$1; - - const _sfc_main$15 = vue.defineComponent({ - name: "ElMenuCollapseTransition", - setup() { - const ns = useNamespace("menu"); - const listeners = { - onBeforeEnter: (el) => el.style.opacity = "0.2", - onEnter(el, done) { - addClass(el, `${ns.namespace.value}-opacity-transition`); - el.style.opacity = "1"; - done(); - }, - onAfterEnter(el) { - removeClass(el, `${ns.namespace.value}-opacity-transition`); - el.style.opacity = ""; - }, - onBeforeLeave(el) { - if (!el.dataset) { - el.dataset = {}; - } - if (hasClass(el, ns.m("collapse"))) { - removeClass(el, ns.m("collapse")); - el.dataset.oldOverflow = el.style.overflow; - el.dataset.scrollWidth = el.clientWidth.toString(); - addClass(el, ns.m("collapse")); - } else { - addClass(el, ns.m("collapse")); - el.dataset.oldOverflow = el.style.overflow; - el.dataset.scrollWidth = el.clientWidth.toString(); - removeClass(el, ns.m("collapse")); - } - el.style.width = `${el.scrollWidth}px`; - el.style.overflow = "hidden"; - }, - onLeave(el) { - addClass(el, "horizontal-collapse-transition"); - el.style.width = `${el.dataset.scrollWidth}px`; - } - }; - return { - listeners - }; - } - }); - function _sfc_render$e(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createBlock(vue.Transition, vue.mergeProps({ mode: "out-in" }, _ctx.listeners), { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 16); - } - var ElMenuCollapseTransition = /* @__PURE__ */ _export_sfc(_sfc_main$15, [["render", _sfc_render$e], ["__file", "menu-collapse-transition.vue"]]); - - function useMenu(instance, currentIndex) { - const indexPath = vue.computed(() => { - let parent = instance.parent; - const path = [currentIndex.value]; - while (parent.type.name !== "ElMenu") { - if (parent.props.index) { - path.unshift(parent.props.index); - } - parent = parent.parent; - } - return path; - }); - const parentMenu = vue.computed(() => { - let parent = instance.parent; - while (parent && !["ElMenu", "ElSubMenu"].includes(parent.type.name)) { - parent = parent.parent; - } - return parent; - }); - return { - parentMenu, - indexPath - }; - } - - function useMenuColor(props) { - const menuBarColor = vue.computed(() => { - const color = props.backgroundColor; - if (!color) { - return ""; - } else { - return new TinyColor(color).shade(20).toString(); - } - }); - return menuBarColor; - } - - const useMenuCssVar = (props, level) => { - const ns = useNamespace("menu"); - return vue.computed(() => { - return ns.cssVarBlock({ - "text-color": props.textColor || "", - "hover-text-color": props.textColor || "", - "bg-color": props.backgroundColor || "", - "hover-bg-color": useMenuColor(props).value || "", - "active-color": props.activeTextColor || "", - level: `${level}` - }); - }); - }; - - const subMenuProps = buildProps({ - index: { - type: String, - required: true - }, - showTimeout: Number, - hideTimeout: Number, - popperClass: String, - disabled: Boolean, - teleported: { - type: Boolean, - default: void 0 - }, - popperOffset: Number, - expandCloseIcon: { - type: iconPropType - }, - expandOpenIcon: { - type: iconPropType - }, - collapseCloseIcon: { - type: iconPropType - }, - collapseOpenIcon: { - type: iconPropType - } - }); - const COMPONENT_NAME$c = "ElSubMenu"; - var SubMenu = vue.defineComponent({ - name: COMPONENT_NAME$c, - props: subMenuProps, - setup(props, { slots, expose }) { - const instance = vue.getCurrentInstance(); - const { indexPath, parentMenu } = useMenu(instance, vue.computed(() => props.index)); - const nsMenu = useNamespace("menu"); - const nsSubMenu = useNamespace("sub-menu"); - const rootMenu = vue.inject("rootMenu"); - if (!rootMenu) - throwError(COMPONENT_NAME$c, "can not inject root menu"); - const subMenu = vue.inject(`subMenu:${parentMenu.value.uid}`); - if (!subMenu) - throwError(COMPONENT_NAME$c, "can not inject sub menu"); - const items = vue.ref({}); - const subMenus = vue.ref({}); - let timeout; - const mouseInChild = vue.ref(false); - const verticalTitleRef = vue.ref(); - const vPopper = vue.ref(null); - const currentPlacement = vue.computed(() => mode.value === "horizontal" && isFirstLevel.value ? "bottom-start" : "right-start"); - const subMenuTitleIcon = vue.computed(() => { - return mode.value === "horizontal" && isFirstLevel.value || mode.value === "vertical" && !rootMenu.props.collapse ? props.expandCloseIcon && props.expandOpenIcon ? opened.value ? props.expandOpenIcon : props.expandCloseIcon : arrow_down_default : props.collapseCloseIcon && props.collapseOpenIcon ? opened.value ? props.collapseOpenIcon : props.collapseCloseIcon : arrow_right_default; - }); - const isFirstLevel = vue.computed(() => { - return subMenu.level === 0; - }); - const appendToBody = vue.computed(() => { - const value = props.teleported; - return value === void 0 ? isFirstLevel.value : value; - }); - const menuTransitionName = vue.computed(() => rootMenu.props.collapse ? `${nsMenu.namespace.value}-zoom-in-left` : `${nsMenu.namespace.value}-zoom-in-top`); - const fallbackPlacements = vue.computed(() => mode.value === "horizontal" && isFirstLevel.value ? [ - "bottom-start", - "bottom-end", - "top-start", - "top-end", - "right-start", - "left-start" - ] : [ - "right-start", - "right", - "right-end", - "left-start", - "bottom-start", - "bottom-end", - "top-start", - "top-end" - ]); - const opened = vue.computed(() => rootMenu.openedMenus.includes(props.index)); - const active = vue.computed(() => { - let isActive = false; - Object.values(items.value).forEach((item2) => { - if (item2.active) { - isActive = true; - } - }); - Object.values(subMenus.value).forEach((subItem) => { - if (subItem.active) { - isActive = true; - } - }); - return isActive; - }); - const mode = vue.computed(() => rootMenu.props.mode); - const item = vue.reactive({ - index: props.index, - indexPath, - active - }); - const ulStyle = useMenuCssVar(rootMenu.props, subMenu.level + 1); - const subMenuPopperOffset = vue.computed(() => { - var _a; - return (_a = props.popperOffset) != null ? _a : rootMenu.props.popperOffset; - }); - const subMenuPopperClass = vue.computed(() => { - var _a; - return (_a = props.popperClass) != null ? _a : rootMenu.props.popperClass; - }); - const subMenuShowTimeout = vue.computed(() => { - var _a; - return (_a = props.showTimeout) != null ? _a : rootMenu.props.showTimeout; - }); - const subMenuHideTimeout = vue.computed(() => { - var _a; - return (_a = props.hideTimeout) != null ? _a : rootMenu.props.hideTimeout; - }); - const doDestroy = () => { - var _a, _b, _c; - return (_c = (_b = (_a = vPopper.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.popperInstanceRef) == null ? void 0 : _c.destroy(); - }; - const handleCollapseToggle = (value) => { - if (!value) { - doDestroy(); - } - }; - const handleClick = () => { - if (rootMenu.props.menuTrigger === "hover" && rootMenu.props.mode === "horizontal" || rootMenu.props.collapse && rootMenu.props.mode === "vertical" || props.disabled) - return; - rootMenu.handleSubMenuClick({ - index: props.index, - indexPath: indexPath.value, - active: active.value - }); - }; - const handleMouseenter = (event, showTimeout = subMenuShowTimeout.value) => { - var _a; - if (event.type === "focus") { - return; - } - if (rootMenu.props.menuTrigger === "click" && rootMenu.props.mode === "horizontal" || !rootMenu.props.collapse && rootMenu.props.mode === "vertical" || props.disabled) { - subMenu.mouseInChild.value = true; - return; - } - subMenu.mouseInChild.value = true; - timeout == null ? void 0 : timeout(); - ({ stop: timeout } = useTimeoutFn(() => { - rootMenu.openMenu(props.index, indexPath.value); - }, showTimeout)); - if (appendToBody.value) { - (_a = parentMenu.value.vnode.el) == null ? void 0 : _a.dispatchEvent(new MouseEvent("mouseenter")); - } - }; - const handleMouseleave = (deepDispatch = false) => { - var _a; - if (rootMenu.props.menuTrigger === "click" && rootMenu.props.mode === "horizontal" || !rootMenu.props.collapse && rootMenu.props.mode === "vertical") { - subMenu.mouseInChild.value = false; - return; - } - timeout == null ? void 0 : timeout(); - subMenu.mouseInChild.value = false; - ({ stop: timeout } = useTimeoutFn(() => !mouseInChild.value && rootMenu.closeMenu(props.index, indexPath.value), subMenuHideTimeout.value)); - if (appendToBody.value && deepDispatch) { - (_a = subMenu.handleMouseleave) == null ? void 0 : _a.call(subMenu, true); - } - }; - vue.watch(() => rootMenu.props.collapse, (value) => handleCollapseToggle(Boolean(value))); - { - const addSubMenu = (item2) => { - subMenus.value[item2.index] = item2; - }; - const removeSubMenu = (item2) => { - delete subMenus.value[item2.index]; - }; - vue.provide(`subMenu:${instance.uid}`, { - addSubMenu, - removeSubMenu, - handleMouseleave, - mouseInChild, - level: subMenu.level + 1 - }); - } - expose({ - opened - }); - vue.onMounted(() => { - rootMenu.addSubMenu(item); - subMenu.addSubMenu(item); - }); - vue.onBeforeUnmount(() => { - subMenu.removeSubMenu(item); - rootMenu.removeSubMenu(item); - }); - return () => { - var _a; - const titleTag = [ - (_a = slots.title) == null ? void 0 : _a.call(slots), - vue.h(ElIcon, { - class: nsSubMenu.e("icon-arrow"), - style: { - transform: opened.value ? props.expandCloseIcon && props.expandOpenIcon || props.collapseCloseIcon && props.collapseOpenIcon && rootMenu.props.collapse ? "none" : "rotateZ(180deg)" : "none" - } - }, { - default: () => isString$1(subMenuTitleIcon.value) ? vue.h(instance.appContext.components[subMenuTitleIcon.value]) : vue.h(subMenuTitleIcon.value) - }) - ]; - const child = rootMenu.isMenuPopup ? vue.h(ElTooltip, { - ref: vPopper, - visible: opened.value, - effect: "light", - pure: true, - offset: subMenuPopperOffset.value, - showArrow: false, - persistent: true, - popperClass: subMenuPopperClass.value, - placement: currentPlacement.value, - teleported: appendToBody.value, - fallbackPlacements: fallbackPlacements.value, - transition: menuTransitionName.value, - gpuAcceleration: false - }, { - content: () => { - var _a2; - return vue.h("div", { - class: [ - nsMenu.m(mode.value), - nsMenu.m("popup-container"), - subMenuPopperClass.value - ], - onMouseenter: (evt) => handleMouseenter(evt, 100), - onMouseleave: () => handleMouseleave(true), - onFocus: (evt) => handleMouseenter(evt, 100) - }, [ - vue.h("ul", { - class: [ - nsMenu.b(), - nsMenu.m("popup"), - nsMenu.m(`popup-${currentPlacement.value}`) - ], - style: ulStyle.value - }, [(_a2 = slots.default) == null ? void 0 : _a2.call(slots)]) - ]); - }, - default: () => vue.h("div", { - class: nsSubMenu.e("title"), - onClick: handleClick - }, titleTag) - }) : vue.h(vue.Fragment, {}, [ - vue.h("div", { - class: nsSubMenu.e("title"), - ref: verticalTitleRef, - onClick: handleClick - }, titleTag), - vue.h(ElCollapseTransition, {}, { - default: () => { - var _a2; - return vue.withDirectives(vue.h("ul", { - role: "menu", - class: [nsMenu.b(), nsMenu.m("inline")], - style: ulStyle.value - }, [(_a2 = slots.default) == null ? void 0 : _a2.call(slots)]), [[vue.vShow, opened.value]]); - } - }) - ]); - return vue.h("li", { - class: [ - nsSubMenu.b(), - nsSubMenu.is("active", active.value), - nsSubMenu.is("opened", opened.value), - nsSubMenu.is("disabled", props.disabled) - ], - role: "menuitem", - ariaHaspopup: true, - ariaExpanded: opened.value, - onMouseenter: handleMouseenter, - onMouseleave: () => handleMouseleave(), - onFocus: handleMouseenter - }, [child]); - }; - } - }); - - const menuProps = buildProps({ - mode: { - type: String, - values: ["horizontal", "vertical"], - default: "vertical" - }, - defaultActive: { - type: String, - default: "" - }, - defaultOpeneds: { - type: definePropType(Array), - default: () => mutable([]) - }, - uniqueOpened: Boolean, - router: Boolean, - menuTrigger: { - type: String, - values: ["hover", "click"], - default: "hover" - }, - collapse: Boolean, - backgroundColor: String, - textColor: String, - activeTextColor: String, - closeOnClickOutside: Boolean, - collapseTransition: { - type: Boolean, - default: true - }, - ellipsis: { - type: Boolean, - default: true - }, - popperOffset: { - type: Number, - default: 6 - }, - ellipsisIcon: { - type: iconPropType, - default: () => more_default - }, - popperEffect: { - type: definePropType(String), - default: "dark" - }, - popperClass: String, - showTimeout: { - type: Number, - default: 300 - }, - hideTimeout: { - type: Number, - default: 300 - } - }); - const checkIndexPath = (indexPath) => isArray$1(indexPath) && indexPath.every((path) => isString$1(path)); - const menuEmits = { - close: (index, indexPath) => isString$1(index) && checkIndexPath(indexPath), - open: (index, indexPath) => isString$1(index) && checkIndexPath(indexPath), - select: (index, indexPath, item, routerResult) => isString$1(index) && checkIndexPath(indexPath) && isObject$1(item) && (routerResult === void 0 || routerResult instanceof Promise) - }; - var Menu = vue.defineComponent({ - name: "ElMenu", - props: menuProps, - emits: menuEmits, - setup(props, { emit, slots, expose }) { - const instance = vue.getCurrentInstance(); - const router = instance.appContext.config.globalProperties.$router; - const menu = vue.ref(); - const nsMenu = useNamespace("menu"); - const nsSubMenu = useNamespace("sub-menu"); - const sliceIndex = vue.ref(-1); - const openedMenus = vue.ref(props.defaultOpeneds && !props.collapse ? props.defaultOpeneds.slice(0) : []); - const activeIndex = vue.ref(props.defaultActive); - const items = vue.ref({}); - const subMenus = vue.ref({}); - const isMenuPopup = vue.computed(() => { - return props.mode === "horizontal" || props.mode === "vertical" && props.collapse; - }); - const initMenu = () => { - const activeItem = activeIndex.value && items.value[activeIndex.value]; - if (!activeItem || props.mode === "horizontal" || props.collapse) - return; - const indexPath = activeItem.indexPath; - indexPath.forEach((index) => { - const subMenu = subMenus.value[index]; - subMenu && openMenu(index, subMenu.indexPath); - }); - }; - const openMenu = (index, indexPath) => { - if (openedMenus.value.includes(index)) - return; - if (props.uniqueOpened) { - openedMenus.value = openedMenus.value.filter((index2) => indexPath.includes(index2)); - } - openedMenus.value.push(index); - emit("open", index, indexPath); - }; - const close = (index) => { - const i = openedMenus.value.indexOf(index); - if (i !== -1) { - openedMenus.value.splice(i, 1); - } - }; - const closeMenu = (index, indexPath) => { - close(index); - emit("close", index, indexPath); - }; - const handleSubMenuClick = ({ - index, - indexPath - }) => { - const isOpened = openedMenus.value.includes(index); - if (isOpened) { - closeMenu(index, indexPath); - } else { - openMenu(index, indexPath); - } - }; - const handleMenuItemClick = (menuItem) => { - if (props.mode === "horizontal" || props.collapse) { - openedMenus.value = []; - } - const { index, indexPath } = menuItem; - if (isNil(index) || isNil(indexPath)) - return; - if (props.router && router) { - const route = menuItem.route || index; - const routerResult = router.push(route).then((res) => { - if (!res) - activeIndex.value = index; - return res; - }); - emit("select", index, indexPath, { index, indexPath, route }, routerResult); - } else { - activeIndex.value = index; - emit("select", index, indexPath, { index, indexPath }); - } - }; - const updateActiveIndex = (val) => { - const itemsInData = items.value; - const item = itemsInData[val] || activeIndex.value && itemsInData[activeIndex.value] || itemsInData[props.defaultActive]; - if (item) { - activeIndex.value = item.index; - } else { - activeIndex.value = val; - } - }; - const calcMenuItemWidth = (menuItem) => { - const computedStyle = getComputedStyle(menuItem); - const marginLeft = Number.parseInt(computedStyle.marginLeft, 10); - const marginRight = Number.parseInt(computedStyle.marginRight, 10); - return menuItem.offsetWidth + marginLeft + marginRight || 0; - }; - const calcSliceIndex = () => { - var _a, _b; - if (!menu.value) - return -1; - const items2 = Array.from((_b = (_a = menu.value) == null ? void 0 : _a.childNodes) != null ? _b : []).filter((item) => item.nodeName !== "#text" || item.nodeValue); - const moreItemWidth = 64; - const computedMenuStyle = getComputedStyle(menu.value); - const paddingLeft = Number.parseInt(computedMenuStyle.paddingLeft, 10); - const paddingRight = Number.parseInt(computedMenuStyle.paddingRight, 10); - const menuWidth = menu.value.clientWidth - paddingLeft - paddingRight; - let calcWidth = 0; - let sliceIndex2 = 0; - items2.forEach((item, index) => { - if (item.nodeName === "#comment") - return; - calcWidth += calcMenuItemWidth(item); - if (calcWidth <= menuWidth - moreItemWidth) { - sliceIndex2 = index + 1; - } - }); - return sliceIndex2 === items2.length ? -1 : sliceIndex2; - }; - const getIndexPath = (index) => subMenus.value[index].indexPath; - const debounce = (fn, wait = 33.34) => { - let timmer; - return () => { - timmer && clearTimeout(timmer); - timmer = setTimeout(() => { - fn(); - }, wait); - }; - }; - let isFirstTimeRender = true; - const handleResize = () => { - if (sliceIndex.value === calcSliceIndex()) - return; - const callback = () => { - sliceIndex.value = -1; - vue.nextTick(() => { - sliceIndex.value = calcSliceIndex(); - }); - }; - isFirstTimeRender ? callback() : debounce(callback)(); - isFirstTimeRender = false; - }; - vue.watch(() => props.defaultActive, (currentActive) => { - if (!items.value[currentActive]) { - activeIndex.value = ""; - } - updateActiveIndex(currentActive); - }); - vue.watch(() => props.collapse, (value) => { - if (value) - openedMenus.value = []; - }); - vue.watch(items.value, initMenu); - let resizeStopper; - vue.watchEffect(() => { - if (props.mode === "horizontal" && props.ellipsis) - resizeStopper = useResizeObserver(menu, handleResize).stop; - else - resizeStopper == null ? void 0 : resizeStopper(); - }); - const mouseInChild = vue.ref(false); - { - const addSubMenu = (item) => { - subMenus.value[item.index] = item; - }; - const removeSubMenu = (item) => { - delete subMenus.value[item.index]; - }; - const addMenuItem = (item) => { - items.value[item.index] = item; - }; - const removeMenuItem = (item) => { - delete items.value[item.index]; - }; - vue.provide("rootMenu", vue.reactive({ - props, - openedMenus, - items, - subMenus, - activeIndex, - isMenuPopup, - addMenuItem, - removeMenuItem, - addSubMenu, - removeSubMenu, - openMenu, - closeMenu, - handleMenuItemClick, - handleSubMenuClick - })); - vue.provide(`subMenu:${instance.uid}`, { - addSubMenu, - removeSubMenu, - mouseInChild, - level: 0 - }); - } - vue.onMounted(() => { - if (props.mode === "horizontal") { - new Menubar(instance.vnode.el, nsMenu.namespace.value); - } - }); - { - const open = (index) => { - const { indexPath } = subMenus.value[index]; - indexPath.forEach((i) => openMenu(i, indexPath)); - }; - expose({ - open, - close, - handleResize - }); - } - const ulStyle = useMenuCssVar(props, 0); - return () => { - var _a, _b; - let slot = (_b = (_a = slots.default) == null ? void 0 : _a.call(slots)) != null ? _b : []; - const vShowMore = []; - if (props.mode === "horizontal" && menu.value) { - const originalSlot = flattedChildren(slot); - const slotDefault = sliceIndex.value === -1 ? originalSlot : originalSlot.slice(0, sliceIndex.value); - const slotMore = sliceIndex.value === -1 ? [] : originalSlot.slice(sliceIndex.value); - if ((slotMore == null ? void 0 : slotMore.length) && props.ellipsis) { - slot = slotDefault; - vShowMore.push(vue.h(SubMenu, { - index: "sub-menu-more", - class: nsSubMenu.e("hide-arrow"), - popperOffset: props.popperOffset - }, { - title: () => vue.h(ElIcon, { - class: nsSubMenu.e("icon-more") - }, { - default: () => vue.h(props.ellipsisIcon) - }), - default: () => slotMore - })); - } - } - const directives = props.closeOnClickOutside ? [ - [ - ClickOutside, - () => { - if (!openedMenus.value.length) - return; - if (!mouseInChild.value) { - openedMenus.value.forEach((openedMenu) => emit("close", openedMenu, getIndexPath(openedMenu))); - openedMenus.value = []; - } - } - ] - ] : []; - const vMenu = vue.withDirectives(vue.h("ul", { - key: String(props.collapse), - role: "menubar", - ref: menu, - style: ulStyle.value, - class: { - [nsMenu.b()]: true, - [nsMenu.m(props.mode)]: true, - [nsMenu.m("collapse")]: props.collapse - } - }, [...slot, ...vShowMore]), directives); - if (props.collapseTransition && props.mode === "vertical") { - return vue.h(ElMenuCollapseTransition, () => vMenu); - } - return vMenu; - }; - } - }); - - const menuItemProps = buildProps({ - index: { - type: definePropType([String, null]), - default: null - }, - route: { - type: definePropType([String, Object]) - }, - disabled: Boolean - }); - const menuItemEmits = { - click: (item) => isString$1(item.index) && isArray$1(item.indexPath) - }; - - const COMPONENT_NAME$b = "ElMenuItem"; - const _sfc_main$14 = vue.defineComponent({ - name: COMPONENT_NAME$b, - components: { - ElTooltip - }, - props: menuItemProps, - emits: menuItemEmits, - setup(props, { emit }) { - const instance = vue.getCurrentInstance(); - const rootMenu = vue.inject("rootMenu"); - const nsMenu = useNamespace("menu"); - const nsMenuItem = useNamespace("menu-item"); - if (!rootMenu) - throwError(COMPONENT_NAME$b, "can not inject root menu"); - const { parentMenu, indexPath } = useMenu(instance, vue.toRef(props, "index")); - const subMenu = vue.inject(`subMenu:${parentMenu.value.uid}`); - if (!subMenu) - throwError(COMPONENT_NAME$b, "can not inject sub menu"); - const active = vue.computed(() => props.index === rootMenu.activeIndex); - const item = vue.reactive({ - index: props.index, - indexPath, - active - }); - const handleClick = () => { - if (!props.disabled) { - rootMenu.handleMenuItemClick({ - index: props.index, - indexPath: indexPath.value, - route: props.route - }); - emit("click", item); - } - }; - vue.onMounted(() => { - subMenu.addSubMenu(item); - rootMenu.addMenuItem(item); - }); - vue.onBeforeUnmount(() => { - subMenu.removeSubMenu(item); - rootMenu.removeMenuItem(item); - }); - return { - parentMenu, - rootMenu, - active, - nsMenu, - nsMenuItem, - handleClick - }; - } - }); - function _sfc_render$d(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_tooltip = vue.resolveComponent("el-tooltip"); - return vue.openBlock(), vue.createElementBlock("li", { - class: vue.normalizeClass([ - _ctx.nsMenuItem.b(), - _ctx.nsMenuItem.is("active", _ctx.active), - _ctx.nsMenuItem.is("disabled", _ctx.disabled) - ]), - role: "menuitem", - tabindex: "-1", - onClick: _ctx.handleClick - }, [ - _ctx.parentMenu.type.name === "ElMenu" && _ctx.rootMenu.props.collapse && _ctx.$slots.title ? (vue.openBlock(), vue.createBlock(_component_el_tooltip, { - key: 0, - effect: _ctx.rootMenu.props.popperEffect, - placement: "right", - "fallback-placements": ["left"], - persistent: "" - }, { - content: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "title") - ]), - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.nsMenu.be("tooltip", "trigger")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2) - ]), - _: 3 - }, 8, ["effect"])) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ - vue.renderSlot(_ctx.$slots, "default"), - vue.renderSlot(_ctx.$slots, "title") - ], 64)) - ], 10, ["onClick"]); - } - var MenuItem = /* @__PURE__ */ _export_sfc(_sfc_main$14, [["render", _sfc_render$d], ["__file", "menu-item.vue"]]); - - const menuItemGroupProps = { - title: String - }; - - const COMPONENT_NAME$a = "ElMenuItemGroup"; - const _sfc_main$13 = vue.defineComponent({ - name: COMPONENT_NAME$a, - props: menuItemGroupProps, - setup() { - const ns = useNamespace("menu-item-group"); - return { - ns - }; - } - }); - function _sfc_render$c(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("li", { - class: vue.normalizeClass(_ctx.ns.b()) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("title")) - }, [ - !_ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.createTextVNode(vue.toDisplayString(_ctx.title), 1) - ], 64)) : vue.renderSlot(_ctx.$slots, "title", { key: 1 }) - ], 2), - vue.createElementVNode("ul", null, [ - vue.renderSlot(_ctx.$slots, "default") - ]) - ], 2); - } - var MenuItemGroup = /* @__PURE__ */ _export_sfc(_sfc_main$13, [["render", _sfc_render$c], ["__file", "menu-item-group.vue"]]); - - const ElMenu = withInstall(Menu, { - MenuItem, - MenuItemGroup, - SubMenu - }); - const ElMenuItem = withNoopInstall(MenuItem); - const ElMenuItemGroup = withNoopInstall(MenuItemGroup); - const ElSubMenu = withNoopInstall(SubMenu); - - const pageHeaderProps = buildProps({ - icon: { - type: iconPropType, - default: () => back_default - }, - title: String, - content: { - type: String, - default: "" - } - }); - const pageHeaderEmits = { - back: () => true - }; - - const __default__$Q = vue.defineComponent({ - name: "ElPageHeader" - }); - const _sfc_main$12 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$Q, - props: pageHeaderProps, - emits: pageHeaderEmits, - setup(__props, { emit }) { - const { t } = useLocale(); - const ns = useNamespace("page-header"); - function handleClick() { - emit("back"); - } - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([ - vue.unref(ns).b(), - { - [vue.unref(ns).m("has-breadcrumb")]: !!_ctx.$slots.breadcrumb, - [vue.unref(ns).m("has-extra")]: !!_ctx.$slots.extra, - [vue.unref(ns).is("contentful")]: !!_ctx.$slots.default - } - ]) - }, [ - _ctx.$slots.breadcrumb ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("breadcrumb")) - }, [ - vue.renderSlot(_ctx.$slots, "breadcrumb") - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("header")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("left")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("back")), - role: "button", - tabindex: "0", - onClick: handleClick - }, [ - _ctx.icon || _ctx.$slots.icon ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - "aria-label": _ctx.title || vue.unref(t)("el.pageHeader.title"), - class: vue.normalizeClass(vue.unref(ns).e("icon")) - }, [ - vue.renderSlot(_ctx.$slots, "icon", {}, () => [ - _ctx.icon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon))) - ]), - _: 1 - })) : vue.createCommentVNode("v-if", true) - ]) - ], 10, ["aria-label"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("title")) - }, [ - vue.renderSlot(_ctx.$slots, "title", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.title || vue.unref(t)("el.pageHeader.title")), 1) - ]) - ], 2) - ], 2), - vue.createVNode(vue.unref(ElDivider), { direction: "vertical" }), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("content")) - }, [ - vue.renderSlot(_ctx.$slots, "content", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.content), 1) - ]) - ], 2) - ], 2), - _ctx.$slots.extra ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("extra")) - }, [ - vue.renderSlot(_ctx.$slots, "extra") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2), - _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("main")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var PageHeader = /* @__PURE__ */ _export_sfc(_sfc_main$12, [["__file", "page-header.vue"]]); - - const ElPageHeader = withInstall(PageHeader); - - const elPaginationKey = Symbol("elPaginationKey"); - - const paginationPrevProps = buildProps({ - disabled: Boolean, - currentPage: { - type: Number, - default: 1 - }, - prevText: { - type: String - }, - prevIcon: { - type: iconPropType - } - }); - const paginationPrevEmits = { - click: (evt) => evt instanceof MouseEvent - }; - - const __default__$P = vue.defineComponent({ - name: "ElPaginationPrev" - }); - const _sfc_main$11 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$P, - props: paginationPrevProps, - emits: paginationPrevEmits, - setup(__props) { - const props = __props; - const { t } = useLocale(); - const internalDisabled = vue.computed(() => props.disabled || props.currentPage <= 1); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("button", { - type: "button", - class: "btn-prev", - disabled: vue.unref(internalDisabled), - "aria-label": _ctx.prevText || vue.unref(t)("el.pagination.prev"), - "aria-disabled": vue.unref(internalDisabled), - onClick: ($event) => _ctx.$emit("click", $event) - }, [ - _ctx.prevText ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, vue.toDisplayString(_ctx.prevText), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 1 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.prevIcon))) - ]), - _: 1 - })) - ], 8, ["disabled", "aria-label", "aria-disabled", "onClick"]); - }; - } - }); - var Prev = /* @__PURE__ */ _export_sfc(_sfc_main$11, [["__file", "prev.vue"]]); - - const paginationNextProps = buildProps({ - disabled: Boolean, - currentPage: { - type: Number, - default: 1 - }, - pageCount: { - type: Number, - default: 50 - }, - nextText: { - type: String - }, - nextIcon: { - type: iconPropType - } - }); - - const __default__$O = vue.defineComponent({ - name: "ElPaginationNext" - }); - const _sfc_main$10 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$O, - props: paginationNextProps, - emits: ["click"], - setup(__props) { - const props = __props; - const { t } = useLocale(); - const internalDisabled = vue.computed(() => props.disabled || props.currentPage === props.pageCount || props.pageCount === 0); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("button", { - type: "button", - class: "btn-next", - disabled: vue.unref(internalDisabled), - "aria-label": _ctx.nextText || vue.unref(t)("el.pagination.next"), - "aria-disabled": vue.unref(internalDisabled), - onClick: ($event) => _ctx.$emit("click", $event) - }, [ - _ctx.nextText ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, vue.toDisplayString(_ctx.nextText), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 1 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.nextIcon))) - ]), - _: 1 - })) - ], 8, ["disabled", "aria-label", "aria-disabled", "onClick"]); - }; - } - }); - var Next = /* @__PURE__ */ _export_sfc(_sfc_main$10, [["__file", "next.vue"]]); - - const selectGroupKey = Symbol("ElSelectGroup"); - const selectKey = Symbol("ElSelect"); - - function useOption$1(props, states) { - const select = vue.inject(selectKey); - const selectGroup = vue.inject(selectGroupKey, { disabled: false }); - const itemSelected = vue.computed(() => { - return contains(castArray$1(select.props.modelValue), props.value); - }); - const limitReached = vue.computed(() => { - var _a; - if (select.props.multiple) { - const modelValue = castArray$1((_a = select.props.modelValue) != null ? _a : []); - return !itemSelected.value && modelValue.length >= select.props.multipleLimit && select.props.multipleLimit > 0; - } else { - return false; - } - }); - const currentLabel = vue.computed(() => { - return props.label || (isObject$1(props.value) ? "" : props.value); - }); - const currentValue = vue.computed(() => { - return props.value || props.label || ""; - }); - const isDisabled = vue.computed(() => { - return props.disabled || states.groupDisabled || limitReached.value; - }); - const instance = vue.getCurrentInstance(); - const contains = (arr = [], target) => { - if (!isObject$1(props.value)) { - return arr && arr.includes(target); - } else { - const valueKey = select.props.valueKey; - return arr && arr.some((item) => { - return vue.toRaw(get(item, valueKey)) === get(target, valueKey); - }); - } - }; - const hoverItem = () => { - if (!props.disabled && !selectGroup.disabled) { - select.states.hoveringIndex = select.optionsArray.indexOf(instance.proxy); - } - }; - const updateOption = (query) => { - const regexp = new RegExp(escapeStringRegexp(query), "i"); - states.visible = regexp.test(currentLabel.value) || props.created; - }; - vue.watch(() => currentLabel.value, () => { - if (!props.created && !select.props.remote) - select.setSelected(); - }); - vue.watch(() => props.value, (val, oldVal) => { - const { remote, valueKey } = select.props; - if (val !== oldVal) { - select.onOptionDestroy(oldVal, instance.proxy); - select.onOptionCreate(instance.proxy); - } - if (!props.created && !remote) { - if (valueKey && isObject$1(val) && isObject$1(oldVal) && val[valueKey] === oldVal[valueKey]) { - return; - } - select.setSelected(); - } - }); - vue.watch(() => selectGroup.disabled, () => { - states.groupDisabled = selectGroup.disabled; - }, { immediate: true }); - return { - select, - currentLabel, - currentValue, - itemSelected, - isDisabled, - hoverItem, - updateOption - }; - } - - const _sfc_main$$ = vue.defineComponent({ - name: "ElOption", - componentName: "ElOption", - props: { - value: { - required: true, - type: [String, Number, Boolean, Object] - }, - label: [String, Number], - created: Boolean, - disabled: Boolean - }, - setup(props) { - const ns = useNamespace("select"); - const id = useId(); - const containerKls = vue.computed(() => [ - ns.be("dropdown", "item"), - ns.is("disabled", vue.unref(isDisabled)), - ns.is("selected", vue.unref(itemSelected)), - ns.is("hovering", vue.unref(hover)) - ]); - const states = vue.reactive({ - index: -1, - groupDisabled: false, - visible: true, - hover: false - }); - const { - currentLabel, - itemSelected, - isDisabled, - select, - hoverItem, - updateOption - } = useOption$1(props, states); - const { visible, hover } = vue.toRefs(states); - const vm = vue.getCurrentInstance().proxy; - select.onOptionCreate(vm); - vue.onBeforeUnmount(() => { - const key = vm.value; - const { selected: selectedOptions } = select.states; - const doesSelected = selectedOptions.some((item) => { - return item.value === vm.value; - }); - vue.nextTick(() => { - if (select.states.cachedOptions.get(key) === vm && !doesSelected) { - select.states.cachedOptions.delete(key); - } - }); - select.onOptionDestroy(key, vm); - }); - function selectOptionClick() { - if (!isDisabled.value) { - select.handleOptionSelect(vm); - } - } - return { - ns, - id, - containerKls, - currentLabel, - itemSelected, - isDisabled, - select, - hoverItem, - updateOption, - visible, - hover, - selectOptionClick, - states - }; - } - }); - function _sfc_render$b(_ctx, _cache, $props, $setup, $data, $options) { - return vue.withDirectives((vue.openBlock(), vue.createElementBlock("li", { - id: _ctx.id, - class: vue.normalizeClass(_ctx.containerKls), - role: "option", - "aria-disabled": _ctx.isDisabled || void 0, - "aria-selected": _ctx.itemSelected, - onMousemove: _ctx.hoverItem, - onClick: vue.withModifiers(_ctx.selectOptionClick, ["stop"]) - }, [ - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(_ctx.currentLabel), 1) - ]) - ], 42, ["id", "aria-disabled", "aria-selected", "onMousemove", "onClick"])), [ - [vue.vShow, _ctx.visible] - ]); - } - var Option = /* @__PURE__ */ _export_sfc(_sfc_main$$, [["render", _sfc_render$b], ["__file", "option.vue"]]); - - const _sfc_main$_ = vue.defineComponent({ - name: "ElSelectDropdown", - componentName: "ElSelectDropdown", - setup() { - const select = vue.inject(selectKey); - const ns = useNamespace("select"); - const popperClass = vue.computed(() => select.props.popperClass); - const isMultiple = vue.computed(() => select.props.multiple); - const isFitInputWidth = vue.computed(() => select.props.fitInputWidth); - const minWidth = vue.ref(""); - function updateMinWidth() { - var _a; - minWidth.value = `${(_a = select.selectRef) == null ? void 0 : _a.offsetWidth}px`; - } - vue.onMounted(() => { - updateMinWidth(); - useResizeObserver(select.selectRef, updateMinWidth); - }); - return { - ns, - minWidth, - popperClass, - isMultiple, - isFitInputWidth - }; - } - }); - function _sfc_render$a(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([_ctx.ns.b("dropdown"), _ctx.ns.is("multiple", _ctx.isMultiple), _ctx.popperClass]), - style: vue.normalizeStyle({ [_ctx.isFitInputWidth ? "width" : "minWidth"]: _ctx.minWidth }) - }, [ - _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(_ctx.ns.be("dropdown", "header")) - }, [ - vue.renderSlot(_ctx.$slots, "header") - ], 2)) : vue.createCommentVNode("v-if", true), - vue.renderSlot(_ctx.$slots, "default"), - _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(_ctx.ns.be("dropdown", "footer")) - }, [ - vue.renderSlot(_ctx.$slots, "footer") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 6); - } - var ElSelectMenu$1 = /* @__PURE__ */ _export_sfc(_sfc_main$_, [["render", _sfc_render$a], ["__file", "select-dropdown.vue"]]); - - const useSelect$3 = (props, emit) => { - const { t } = useLocale(); - const contentId = useId(); - const nsSelect = useNamespace("select"); - const nsInput = useNamespace("input"); - const states = vue.reactive({ - inputValue: "", - options: /* @__PURE__ */ new Map(), - cachedOptions: /* @__PURE__ */ new Map(), - optionValues: [], - selected: [], - selectionWidth: 0, - collapseItemWidth: 0, - selectedLabel: "", - hoveringIndex: -1, - previousQuery: null, - inputHovering: false, - menuVisibleOnFocus: false, - isBeforeHide: false - }); - const selectRef = vue.ref(null); - const selectionRef = vue.ref(null); - const tooltipRef = vue.ref(null); - const tagTooltipRef = vue.ref(null); - const inputRef = vue.ref(null); - const prefixRef = vue.ref(null); - const suffixRef = vue.ref(null); - const menuRef = vue.ref(null); - const tagMenuRef = vue.ref(null); - const collapseItemRef = vue.ref(null); - const scrollbarRef = vue.ref(null); - const { - isComposing, - handleCompositionStart, - handleCompositionUpdate, - handleCompositionEnd - } = useComposition({ - afterComposition: (e) => onInput(e) - }); - const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, { - beforeFocus() { - return selectDisabled.value; - }, - afterFocus() { - if (props.automaticDropdown && !expanded.value) { - expanded.value = true; - states.menuVisibleOnFocus = true; - } - }, - beforeBlur(event) { - var _a, _b; - return ((_a = tooltipRef.value) == null ? void 0 : _a.isFocusInsideContent(event)) || ((_b = tagTooltipRef.value) == null ? void 0 : _b.isFocusInsideContent(event)); - }, - afterBlur() { - expanded.value = false; - states.menuVisibleOnFocus = false; - } - }); - const expanded = vue.ref(false); - const hoverOption = vue.ref(); - const { form, formItem } = useFormItem(); - const { inputId } = useFormItemInputId(props, { - formItemContext: formItem - }); - const { valueOnClear, isEmptyValue } = useEmptyValues(props); - const selectDisabled = vue.computed(() => props.disabled || (form == null ? void 0 : form.disabled)); - const hasModelValue = vue.computed(() => { - return isArray$1(props.modelValue) ? props.modelValue.length > 0 : !isEmptyValue(props.modelValue); - }); - const needStatusIcon = vue.computed(() => { - var _a; - return (_a = form == null ? void 0 : form.statusIcon) != null ? _a : false; - }); - const showClose = vue.computed(() => { - return props.clearable && !selectDisabled.value && states.inputHovering && hasModelValue.value; - }); - const iconComponent = vue.computed(() => props.remote && props.filterable && !props.remoteShowSuffix ? "" : props.suffixIcon); - const iconReverse = vue.computed(() => nsSelect.is("reverse", iconComponent.value && expanded.value)); - const validateState = vue.computed(() => (formItem == null ? void 0 : formItem.validateState) || ""); - const validateIcon = vue.computed(() => ValidateComponentsMap[validateState.value]); - const debounce$1 = vue.computed(() => props.remote ? 300 : 0); - const isRemoteSearchEmpty = vue.computed(() => props.remote && !states.inputValue && states.options.size === 0); - const emptyText = vue.computed(() => { - if (props.loading) { - return props.loadingText || t("el.select.loading"); - } else { - if (props.filterable && states.inputValue && states.options.size > 0 && filteredOptionsCount.value === 0) { - return props.noMatchText || t("el.select.noMatch"); - } - if (states.options.size === 0) { - return props.noDataText || t("el.select.noData"); - } - } - return null; - }); - const filteredOptionsCount = vue.computed(() => optionsArray.value.filter((option) => option.visible).length); - const optionsArray = vue.computed(() => { - const list = Array.from(states.options.values()); - const newList = []; - states.optionValues.forEach((item) => { - const index = list.findIndex((i) => i.value === item); - if (index > -1) { - newList.push(list[index]); - } - }); - return newList.length >= list.length ? newList : list; - }); - const cachedOptionsArray = vue.computed(() => Array.from(states.cachedOptions.values())); - const showNewOption = vue.computed(() => { - const hasExistingOption = optionsArray.value.filter((option) => { - return !option.created; - }).some((option) => { - return option.currentLabel === states.inputValue; - }); - return props.filterable && props.allowCreate && states.inputValue !== "" && !hasExistingOption; - }); - const updateOptions = () => { - if (props.filterable && isFunction$1(props.filterMethod)) - return; - if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) - return; - optionsArray.value.forEach((option) => { - var _a; - (_a = option.updateOption) == null ? void 0 : _a.call(option, states.inputValue); - }); - }; - const selectSize = useFormSize(); - const collapseTagSize = vue.computed(() => ["small"].includes(selectSize.value) ? "small" : "default"); - const dropdownMenuVisible = vue.computed({ - get() { - return expanded.value && !isRemoteSearchEmpty.value; - }, - set(val) { - expanded.value = val; - } - }); - const shouldShowPlaceholder = vue.computed(() => { - if (props.multiple && !isUndefined(props.modelValue)) { - return castArray$1(props.modelValue).length === 0 && !states.inputValue; - } - const value = isArray$1(props.modelValue) ? props.modelValue[0] : props.modelValue; - return props.filterable || isUndefined(value) ? !states.inputValue : true; - }); - const currentPlaceholder = vue.computed(() => { - var _a; - const _placeholder = (_a = props.placeholder) != null ? _a : t("el.select.placeholder"); - return props.multiple || !hasModelValue.value ? _placeholder : states.selectedLabel; - }); - const mouseEnterEventName = vue.computed(() => isIOS ? null : "mouseenter"); - vue.watch(() => props.modelValue, (val, oldVal) => { - if (props.multiple) { - if (props.filterable && !props.reserveKeyword) { - states.inputValue = ""; - handleQueryChange(""); - } - } - setSelected(); - if (!isEqual$1(val, oldVal) && props.validateEvent) { - formItem == null ? void 0 : formItem.validate("change").catch((err) => debugWarn()); - } - }, { - flush: "post", - deep: true - }); - vue.watch(() => expanded.value, (val) => { - if (val) { - handleQueryChange(states.inputValue); - } else { - states.inputValue = ""; - states.previousQuery = null; - states.isBeforeHide = true; - } - emit("visible-change", val); - }); - vue.watch(() => states.options.entries(), () => { - if (!isClient) - return; - setSelected(); - if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptionsCount.value) { - checkDefaultFirstOption(); - } - }, { - flush: "post" - }); - vue.watch(() => states.hoveringIndex, (val) => { - if (isNumber(val) && val > -1) { - hoverOption.value = optionsArray.value[val] || {}; - } else { - hoverOption.value = {}; - } - optionsArray.value.forEach((option) => { - option.hover = hoverOption.value === option; - }); - }); - vue.watchEffect(() => { - if (states.isBeforeHide) - return; - updateOptions(); - }); - const handleQueryChange = (val) => { - if (states.previousQuery === val || isComposing.value) { - return; - } - states.previousQuery = val; - if (props.filterable && isFunction$1(props.filterMethod)) { - props.filterMethod(val); - } else if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) { - props.remoteMethod(val); - } - if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptionsCount.value) { - vue.nextTick(checkDefaultFirstOption); - } else { - vue.nextTick(updateHoveringIndex); - } - }; - const checkDefaultFirstOption = () => { - const optionsInDropdown = optionsArray.value.filter((n) => n.visible && !n.disabled && !n.states.groupDisabled); - const userCreatedOption = optionsInDropdown.find((n) => n.created); - const firstOriginOption = optionsInDropdown[0]; - const valueList = optionsArray.value.map((item) => item.value); - states.hoveringIndex = getValueIndex(valueList, userCreatedOption || firstOriginOption); - }; - const setSelected = () => { - if (!props.multiple) { - const value = isArray$1(props.modelValue) ? props.modelValue[0] : props.modelValue; - const option = getOption(value); - states.selectedLabel = option.currentLabel; - states.selected = [option]; - return; - } else { - states.selectedLabel = ""; - } - const result = []; - if (!isUndefined(props.modelValue)) { - castArray$1(props.modelValue).forEach((value) => { - result.push(getOption(value)); - }); - } - states.selected = result; - }; - const getOption = (value) => { - let option; - const isObjectValue = isPlainObject$1(value); - for (let i = states.cachedOptions.size - 1; i >= 0; i--) { - const cachedOption = cachedOptionsArray.value[i]; - const isEqualValue = isObjectValue ? get(cachedOption.value, props.valueKey) === get(value, props.valueKey) : cachedOption.value === value; - if (isEqualValue) { - option = { - value, - currentLabel: cachedOption.currentLabel, - get isDisabled() { - return cachedOption.isDisabled; - } - }; - break; - } - } - if (option) - return option; - const label = isObjectValue ? value.label : value != null ? value : ""; - const newOption = { - value, - currentLabel: label - }; - return newOption; - }; - const updateHoveringIndex = () => { - states.hoveringIndex = optionsArray.value.findIndex((item) => states.selected.some((selected) => getValueKey(selected) === getValueKey(item))); - }; - const resetSelectionWidth = () => { - states.selectionWidth = selectionRef.value.getBoundingClientRect().width; - }; - const resetCollapseItemWidth = () => { - states.collapseItemWidth = collapseItemRef.value.getBoundingClientRect().width; - }; - const updateTooltip = () => { - var _a, _b; - (_b = (_a = tooltipRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a); - }; - const updateTagTooltip = () => { - var _a, _b; - (_b = (_a = tagTooltipRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a); - }; - const onInputChange = () => { - if (states.inputValue.length > 0 && !expanded.value) { - expanded.value = true; - } - handleQueryChange(states.inputValue); - }; - const onInput = (event) => { - states.inputValue = event.target.value; - if (props.remote) { - debouncedOnInputChange(); - } else { - return onInputChange(); - } - }; - const debouncedOnInputChange = debounce(() => { - onInputChange(); - }, debounce$1.value); - const emitChange = (val) => { - if (!isEqual$1(props.modelValue, val)) { - emit(CHANGE_EVENT, val); - } - }; - const getLastNotDisabledIndex = (value) => findLastIndex(value, (it) => { - const option = states.cachedOptions.get(it); - return option && !option.disabled && !option.states.groupDisabled; - }); - const deletePrevTag = (e) => { - if (!props.multiple) - return; - if (e.code === EVENT_CODE.delete) - return; - if (e.target.value.length <= 0) { - const value = castArray$1(props.modelValue).slice(); - const lastNotDisabledIndex = getLastNotDisabledIndex(value); - if (lastNotDisabledIndex < 0) - return; - const removeTagValue = value[lastNotDisabledIndex]; - value.splice(lastNotDisabledIndex, 1); - emit(UPDATE_MODEL_EVENT, value); - emitChange(value); - emit("remove-tag", removeTagValue); - } - }; - const deleteTag = (event, tag) => { - const index = states.selected.indexOf(tag); - if (index > -1 && !selectDisabled.value) { - const value = castArray$1(props.modelValue).slice(); - value.splice(index, 1); - emit(UPDATE_MODEL_EVENT, value); - emitChange(value); - emit("remove-tag", tag.value); - } - event.stopPropagation(); - focus(); - }; - const deleteSelected = (event) => { - event.stopPropagation(); - const value = props.multiple ? [] : valueOnClear.value; - if (props.multiple) { - for (const item of states.selected) { - if (item.isDisabled) - value.push(item.value); - } - } - emit(UPDATE_MODEL_EVENT, value); - emitChange(value); - states.hoveringIndex = -1; - expanded.value = false; - emit("clear"); - focus(); - }; - const handleOptionSelect = (option) => { - var _a; - if (props.multiple) { - const value = castArray$1((_a = props.modelValue) != null ? _a : []).slice(); - const optionIndex = getValueIndex(value, option); - if (optionIndex > -1) { - value.splice(optionIndex, 1); - } else if (props.multipleLimit <= 0 || value.length < props.multipleLimit) { - value.push(option.value); - } - emit(UPDATE_MODEL_EVENT, value); - emitChange(value); - if (option.created) { - handleQueryChange(""); - } - if (props.filterable && !props.reserveKeyword) { - states.inputValue = ""; - } - } else { - emit(UPDATE_MODEL_EVENT, option.value); - emitChange(option.value); - expanded.value = false; - } - focus(); - if (expanded.value) - return; - vue.nextTick(() => { - scrollToOption(option); - }); - }; - const getValueIndex = (arr = [], option) => { - if (isUndefined(option)) - return -1; - if (!isObject$1(option.value)) - return arr.indexOf(option.value); - return arr.findIndex((item) => { - return isEqual$1(get(item, props.valueKey), getValueKey(option)); - }); - }; - const scrollToOption = (option) => { - var _a, _b, _c, _d, _e; - const targetOption = isArray$1(option) ? option[0] : option; - let target = null; - if (targetOption == null ? void 0 : targetOption.value) { - const options = optionsArray.value.filter((item) => item.value === targetOption.value); - if (options.length > 0) { - target = options[0].$el; - } - } - if (tooltipRef.value && target) { - const menu = (_d = (_c = (_b = (_a = tooltipRef.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef) == null ? void 0 : _c.querySelector) == null ? void 0 : _d.call(_c, `.${nsSelect.be("dropdown", "wrap")}`); - if (menu) { - scrollIntoView(menu, target); - } - } - (_e = scrollbarRef.value) == null ? void 0 : _e.handleScroll(); - }; - const onOptionCreate = (vm) => { - states.options.set(vm.value, vm); - states.cachedOptions.set(vm.value, vm); - }; - const onOptionDestroy = (key, vm) => { - if (states.options.get(key) === vm) { - states.options.delete(key); - } - }; - const popperRef = vue.computed(() => { - var _a, _b; - return (_b = (_a = tooltipRef.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef; - }); - const handleMenuEnter = () => { - states.isBeforeHide = false; - vue.nextTick(() => scrollToOption(states.selected)); - }; - const focus = () => { - var _a; - (_a = inputRef.value) == null ? void 0 : _a.focus(); - }; - const blur = () => { - var _a; - if (expanded.value) { - expanded.value = false; - vue.nextTick(() => { - var _a2; - return (_a2 = inputRef.value) == null ? void 0 : _a2.blur(); - }); - return; - } - (_a = inputRef.value) == null ? void 0 : _a.blur(); - }; - const handleClearClick = (event) => { - deleteSelected(event); - }; - const handleClickOutside = (event) => { - expanded.value = false; - if (isFocused.value) { - const _event = new FocusEvent("focus", event); - vue.nextTick(() => handleBlur(_event)); - } - }; - const handleEsc = () => { - if (states.inputValue.length > 0) { - states.inputValue = ""; - } else { - expanded.value = false; - } - }; - const toggleMenu = () => { - if (selectDisabled.value) - return; - if (isIOS) - states.inputHovering = true; - if (states.menuVisibleOnFocus) { - states.menuVisibleOnFocus = false; - } else { - expanded.value = !expanded.value; - } - }; - const selectOption = () => { - if (!expanded.value) { - toggleMenu(); - } else { - const option = optionsArray.value[states.hoveringIndex]; - if (option && !option.isDisabled) { - handleOptionSelect(option); - } - } - }; - const getValueKey = (item) => { - return isObject$1(item.value) ? get(item.value, props.valueKey) : item.value; - }; - const optionsAllDisabled = vue.computed(() => optionsArray.value.filter((option) => option.visible).every((option) => option.isDisabled)); - const showTagList = vue.computed(() => { - if (!props.multiple) { - return []; - } - return props.collapseTags ? states.selected.slice(0, props.maxCollapseTags) : states.selected; - }); - const collapseTagList = vue.computed(() => { - if (!props.multiple) { - return []; - } - return props.collapseTags ? states.selected.slice(props.maxCollapseTags) : []; - }); - const navigateOptions = (direction) => { - if (!expanded.value) { - expanded.value = true; - return; - } - if (states.options.size === 0 || filteredOptionsCount.value === 0 || isComposing.value) - return; - if (!optionsAllDisabled.value) { - if (direction === "next") { - states.hoveringIndex++; - if (states.hoveringIndex === states.options.size) { - states.hoveringIndex = 0; - } - } else if (direction === "prev") { - states.hoveringIndex--; - if (states.hoveringIndex < 0) { - states.hoveringIndex = states.options.size - 1; - } - } - const option = optionsArray.value[states.hoveringIndex]; - if (option.isDisabled || !option.visible) { - navigateOptions(direction); - } - vue.nextTick(() => scrollToOption(hoverOption.value)); - } - }; - const getGapWidth = () => { - if (!selectionRef.value) - return 0; - const style = window.getComputedStyle(selectionRef.value); - return Number.parseFloat(style.gap || "6px"); - }; - const tagStyle = vue.computed(() => { - const gapWidth = getGapWidth(); - const maxWidth = collapseItemRef.value && props.maxCollapseTags === 1 ? states.selectionWidth - states.collapseItemWidth - gapWidth : states.selectionWidth; - return { maxWidth: `${maxWidth}px` }; - }); - const collapseTagStyle = vue.computed(() => { - return { maxWidth: `${states.selectionWidth}px` }; - }); - const popupScroll = (data) => { - emit("popup-scroll", data); - }; - useResizeObserver(selectionRef, resetSelectionWidth); - useResizeObserver(menuRef, updateTooltip); - useResizeObserver(wrapperRef, updateTooltip); - useResizeObserver(tagMenuRef, updateTagTooltip); - useResizeObserver(collapseItemRef, resetCollapseItemWidth); - vue.onMounted(() => { - setSelected(); - }); - return { - inputId, - contentId, - nsSelect, - nsInput, - states, - isFocused, - expanded, - optionsArray, - hoverOption, - selectSize, - filteredOptionsCount, - updateTooltip, - updateTagTooltip, - debouncedOnInputChange, - onInput, - deletePrevTag, - deleteTag, - deleteSelected, - handleOptionSelect, - scrollToOption, - hasModelValue, - shouldShowPlaceholder, - currentPlaceholder, - mouseEnterEventName, - needStatusIcon, - showClose, - iconComponent, - iconReverse, - validateState, - validateIcon, - showNewOption, - updateOptions, - collapseTagSize, - setSelected, - selectDisabled, - emptyText, - handleCompositionStart, - handleCompositionUpdate, - handleCompositionEnd, - onOptionCreate, - onOptionDestroy, - handleMenuEnter, - focus, - blur, - handleClearClick, - handleClickOutside, - handleEsc, - toggleMenu, - selectOption, - getValueKey, - navigateOptions, - dropdownMenuVisible, - showTagList, - collapseTagList, - popupScroll, - tagStyle, - collapseTagStyle, - popperRef, - inputRef, - tooltipRef, - tagTooltipRef, - prefixRef, - suffixRef, - selectRef, - wrapperRef, - selectionRef, - scrollbarRef, - menuRef, - tagMenuRef, - collapseItemRef - }; - }; - - var ElOptions = vue.defineComponent({ - name: "ElOptions", - setup(_, { slots }) { - const select = vue.inject(selectKey); - let cachedValueList = []; - return () => { - var _a, _b; - const children = (_a = slots.default) == null ? void 0 : _a.call(slots); - const valueList = []; - function filterOptions(children2) { - if (!isArray$1(children2)) - return; - children2.forEach((item) => { - var _a2, _b2, _c, _d; - const name = (_a2 = (item == null ? void 0 : item.type) || {}) == null ? void 0 : _a2.name; - if (name === "ElOptionGroup") { - filterOptions(!isString$1(item.children) && !isArray$1(item.children) && isFunction$1((_b2 = item.children) == null ? void 0 : _b2.default) ? (_c = item.children) == null ? void 0 : _c.default() : item.children); - } else if (name === "ElOption") { - valueList.push((_d = item.props) == null ? void 0 : _d.value); - } else if (isArray$1(item.children)) { - filterOptions(item.children); - } - }); - } - if (children.length) { - filterOptions((_b = children[0]) == null ? void 0 : _b.children); - } - if (!isEqual$1(valueList, cachedValueList)) { - cachedValueList = valueList; - if (select) { - select.states.optionValues = valueList; - } - } - return children; - }; - } - }); - - const SelectProps$1 = buildProps({ - name: String, - id: String, - modelValue: { - type: [Array, String, Number, Boolean, Object], - default: void 0 - }, - autocomplete: { - type: String, - default: "off" - }, - automaticDropdown: Boolean, - size: useSizeProp, - effect: { - type: definePropType(String), - default: "light" - }, - disabled: Boolean, - clearable: Boolean, - filterable: Boolean, - allowCreate: Boolean, - loading: Boolean, - popperClass: { - type: String, - default: "" - }, - popperOptions: { - type: definePropType(Object), - default: () => ({}) - }, - remote: Boolean, - loadingText: String, - noMatchText: String, - noDataText: String, - remoteMethod: Function, - filterMethod: Function, - multiple: Boolean, - multipleLimit: { - type: Number, - default: 0 - }, - placeholder: { - type: String - }, - defaultFirstOption: Boolean, - reserveKeyword: { - type: Boolean, - default: true - }, - valueKey: { - type: String, - default: "value" - }, - collapseTags: Boolean, - collapseTagsTooltip: Boolean, - maxCollapseTags: { - type: Number, - default: 1 - }, - teleported: useTooltipContentProps.teleported, - persistent: { - type: Boolean, - default: true - }, - clearIcon: { - type: iconPropType, - default: circle_close_default - }, - fitInputWidth: Boolean, - suffixIcon: { - type: iconPropType, - default: arrow_down_default - }, - tagType: { ...tagProps.type, default: "info" }, - tagEffect: { ...tagProps.effect, default: "light" }, - validateEvent: { - type: Boolean, - default: true - }, - remoteShowSuffix: Boolean, - showArrow: { - type: Boolean, - default: true - }, - offset: { - type: Number, - default: 12 - }, - placement: { - type: definePropType(String), - values: Ee, - default: "bottom-start" - }, - fallbackPlacements: { - type: definePropType(Array), - default: ["bottom-start", "top-start", "right", "left"] - }, - tabindex: { - type: [String, Number], - default: 0 - }, - appendTo: String, - ...useEmptyValuesProps, - ...useAriaProps(["ariaLabel"]) - }); - - const COMPONENT_NAME$9 = "ElSelect"; - const _sfc_main$Z = vue.defineComponent({ - name: COMPONENT_NAME$9, - componentName: COMPONENT_NAME$9, - components: { - ElSelectMenu: ElSelectMenu$1, - ElOption: Option, - ElOptions, - ElTag, - ElScrollbar, - ElTooltip, - ElIcon - }, - directives: { ClickOutside }, - props: SelectProps$1, - emits: [ - UPDATE_MODEL_EVENT, - CHANGE_EVENT, - "remove-tag", - "clear", - "visible-change", - "focus", - "blur", - "popup-scroll" - ], - setup(props, { emit }) { - const modelValue = vue.computed(() => { - const { modelValue: rawModelValue, multiple } = props; - const fallback = multiple ? [] : void 0; - if (isArray$1(rawModelValue)) { - return multiple ? rawModelValue : fallback; - } - return multiple ? fallback : rawModelValue; - }); - const _props = vue.reactive({ - ...vue.toRefs(props), - modelValue - }); - const API = useSelect$3(_props, emit); - const { calculatorRef, inputStyle } = useCalcInputWidth(); - vue.provide(selectKey, vue.reactive({ - props: _props, - states: API.states, - optionsArray: API.optionsArray, - handleOptionSelect: API.handleOptionSelect, - onOptionCreate: API.onOptionCreate, - onOptionDestroy: API.onOptionDestroy, - selectRef: API.selectRef, - setSelected: API.setSelected - })); - const selectedLabel = vue.computed(() => { - if (!props.multiple) { - return API.states.selectedLabel; - } - return API.states.selected.map((i) => i.currentLabel); - }); - return { - ...API, - modelValue, - selectedLabel, - calculatorRef, - inputStyle - }; - } - }); - function _sfc_render$9(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_tag = vue.resolveComponent("el-tag"); - const _component_el_tooltip = vue.resolveComponent("el-tooltip"); - const _component_el_icon = vue.resolveComponent("el-icon"); - const _component_el_option = vue.resolveComponent("el-option"); - const _component_el_options = vue.resolveComponent("el-options"); - const _component_el_scrollbar = vue.resolveComponent("el-scrollbar"); - const _component_el_select_menu = vue.resolveComponent("el-select-menu"); - const _directive_click_outside = vue.resolveDirective("click-outside"); - return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - ref: "selectRef", - class: vue.normalizeClass([_ctx.nsSelect.b(), _ctx.nsSelect.m(_ctx.selectSize)]), - [vue.toHandlerKey(_ctx.mouseEnterEventName)]: ($event) => _ctx.states.inputHovering = true, - onMouseleave: ($event) => _ctx.states.inputHovering = false - }, [ - vue.createVNode(_component_el_tooltip, { - ref: "tooltipRef", - visible: _ctx.dropdownMenuVisible, - placement: _ctx.placement, - teleported: _ctx.teleported, - "popper-class": [_ctx.nsSelect.e("popper"), _ctx.popperClass], - "popper-options": _ctx.popperOptions, - "fallback-placements": _ctx.fallbackPlacements, - effect: _ctx.effect, - pure: "", - trigger: "click", - transition: `${_ctx.nsSelect.namespace.value}-zoom-in-top`, - "stop-popper-mouse-event": false, - "gpu-acceleration": false, - persistent: _ctx.persistent, - "append-to": _ctx.appendTo, - "show-arrow": _ctx.showArrow, - offset: _ctx.offset, - onBeforeShow: _ctx.handleMenuEnter, - onHide: ($event) => _ctx.states.isBeforeHide = false - }, { - default: vue.withCtx(() => { - var _a; - return [ - vue.createElementVNode("div", { - ref: "wrapperRef", - class: vue.normalizeClass([ - _ctx.nsSelect.e("wrapper"), - _ctx.nsSelect.is("focused", _ctx.isFocused), - _ctx.nsSelect.is("hovering", _ctx.states.inputHovering), - _ctx.nsSelect.is("filterable", _ctx.filterable), - _ctx.nsSelect.is("disabled", _ctx.selectDisabled) - ]), - onClick: vue.withModifiers(_ctx.toggleMenu, ["prevent"]) - }, [ - _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - ref: "prefixRef", - class: vue.normalizeClass(_ctx.nsSelect.e("prefix")) - }, [ - vue.renderSlot(_ctx.$slots, "prefix") - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - ref: "selectionRef", - class: vue.normalizeClass([ - _ctx.nsSelect.e("selection"), - _ctx.nsSelect.is("near", _ctx.multiple && !_ctx.$slots.prefix && !!_ctx.states.selected.length) - ]) - }, [ - _ctx.multiple ? vue.renderSlot(_ctx.$slots, "tag", { key: 0 }, () => [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.showTagList, (item) => { - return vue.openBlock(), vue.createElementBlock("div", { - key: _ctx.getValueKey(item), - class: vue.normalizeClass(_ctx.nsSelect.e("selected-item")) - }, [ - vue.createVNode(_component_el_tag, { - closable: !_ctx.selectDisabled && !item.isDisabled, - size: _ctx.collapseTagSize, - type: _ctx.tagType, - effect: _ctx.tagEffect, - "disable-transitions": "", - style: vue.normalizeStyle(_ctx.tagStyle), - onClose: ($event) => _ctx.deleteTag($event, item) - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("span", { - class: vue.normalizeClass(_ctx.nsSelect.e("tags-text")) - }, [ - vue.renderSlot(_ctx.$slots, "label", { - label: item.currentLabel, - value: item.value - }, () => [ - vue.createTextVNode(vue.toDisplayString(item.currentLabel), 1) - ]) - ], 2) - ]), - _: 2 - }, 1032, ["closable", "size", "type", "effect", "style", "onClose"]) - ], 2); - }), 128)), - _ctx.collapseTags && _ctx.states.selected.length > _ctx.maxCollapseTags ? (vue.openBlock(), vue.createBlock(_component_el_tooltip, { - key: 0, - ref: "tagTooltipRef", - disabled: _ctx.dropdownMenuVisible || !_ctx.collapseTagsTooltip, - "fallback-placements": ["bottom", "top", "right", "left"], - effect: _ctx.effect, - placement: "bottom", - teleported: _ctx.teleported - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - ref: "collapseItemRef", - class: vue.normalizeClass(_ctx.nsSelect.e("selected-item")) - }, [ - vue.createVNode(_component_el_tag, { - closable: false, - size: _ctx.collapseTagSize, - type: _ctx.tagType, - effect: _ctx.tagEffect, - "disable-transitions": "", - style: vue.normalizeStyle(_ctx.collapseTagStyle) - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("span", { - class: vue.normalizeClass(_ctx.nsSelect.e("tags-text")) - }, " + " + vue.toDisplayString(_ctx.states.selected.length - _ctx.maxCollapseTags), 3) - ]), - _: 1 - }, 8, ["size", "type", "effect", "style"]) - ], 2) - ]), - content: vue.withCtx(() => [ - vue.createElementVNode("div", { - ref: "tagMenuRef", - class: vue.normalizeClass(_ctx.nsSelect.e("selection")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.collapseTagList, (item) => { - return vue.openBlock(), vue.createElementBlock("div", { - key: _ctx.getValueKey(item), - class: vue.normalizeClass(_ctx.nsSelect.e("selected-item")) - }, [ - vue.createVNode(_component_el_tag, { - class: "in-tooltip", - closable: !_ctx.selectDisabled && !item.isDisabled, - size: _ctx.collapseTagSize, - type: _ctx.tagType, - effect: _ctx.tagEffect, - "disable-transitions": "", - onClose: ($event) => _ctx.deleteTag($event, item) - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("span", { - class: vue.normalizeClass(_ctx.nsSelect.e("tags-text")) - }, [ - vue.renderSlot(_ctx.$slots, "label", { - label: item.currentLabel, - value: item.value - }, () => [ - vue.createTextVNode(vue.toDisplayString(item.currentLabel), 1) - ]) - ], 2) - ]), - _: 2 - }, 1032, ["closable", "size", "type", "effect", "onClose"]) - ], 2); - }), 128)) - ], 2) - ]), - _: 3 - }, 8, ["disabled", "effect", "teleported"])) : vue.createCommentVNode("v-if", true) - ]) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass([ - _ctx.nsSelect.e("selected-item"), - _ctx.nsSelect.e("input-wrapper"), - _ctx.nsSelect.is("hidden", !_ctx.filterable) - ]) - }, [ - vue.withDirectives(vue.createElementVNode("input", { - id: _ctx.inputId, - ref: "inputRef", - "onUpdate:modelValue": ($event) => _ctx.states.inputValue = $event, - type: "text", - name: _ctx.name, - class: vue.normalizeClass([_ctx.nsSelect.e("input"), _ctx.nsSelect.is(_ctx.selectSize)]), - disabled: _ctx.selectDisabled, - autocomplete: _ctx.autocomplete, - style: vue.normalizeStyle(_ctx.inputStyle), - tabindex: _ctx.tabindex, - role: "combobox", - readonly: !_ctx.filterable, - spellcheck: "false", - "aria-activedescendant": ((_a = _ctx.hoverOption) == null ? void 0 : _a.id) || "", - "aria-controls": _ctx.contentId, - "aria-expanded": _ctx.dropdownMenuVisible, - "aria-label": _ctx.ariaLabel, - "aria-autocomplete": "none", - "aria-haspopup": "listbox", - onKeydown: [ - vue.withKeys(vue.withModifiers(($event) => _ctx.navigateOptions("next"), ["stop", "prevent"]), ["down"]), - vue.withKeys(vue.withModifiers(($event) => _ctx.navigateOptions("prev"), ["stop", "prevent"]), ["up"]), - vue.withKeys(vue.withModifiers(_ctx.handleEsc, ["stop", "prevent"]), ["esc"]), - vue.withKeys(vue.withModifiers(_ctx.selectOption, ["stop", "prevent"]), ["enter"]), - vue.withKeys(vue.withModifiers(_ctx.deletePrevTag, ["stop"]), ["delete"]) - ], - onCompositionstart: _ctx.handleCompositionStart, - onCompositionupdate: _ctx.handleCompositionUpdate, - onCompositionend: _ctx.handleCompositionEnd, - onInput: _ctx.onInput, - onClick: vue.withModifiers(_ctx.toggleMenu, ["stop"]) - }, null, 46, ["id", "onUpdate:modelValue", "name", "disabled", "autocomplete", "tabindex", "readonly", "aria-activedescendant", "aria-controls", "aria-expanded", "aria-label", "onKeydown", "onCompositionstart", "onCompositionupdate", "onCompositionend", "onInput", "onClick"]), [ - [vue.vModelText, _ctx.states.inputValue] - ]), - _ctx.filterable ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - ref: "calculatorRef", - "aria-hidden": "true", - class: vue.normalizeClass(_ctx.nsSelect.e("input-calculator")), - textContent: vue.toDisplayString(_ctx.states.inputValue) - }, null, 10, ["textContent"])) : vue.createCommentVNode("v-if", true) - ], 2), - _ctx.shouldShowPlaceholder ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass([ - _ctx.nsSelect.e("selected-item"), - _ctx.nsSelect.e("placeholder"), - _ctx.nsSelect.is("transparent", !_ctx.hasModelValue || _ctx.expanded && !_ctx.states.inputValue) - ]) - }, [ - _ctx.hasModelValue ? vue.renderSlot(_ctx.$slots, "label", { - key: 0, - label: _ctx.currentPlaceholder, - value: _ctx.modelValue - }, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(_ctx.currentPlaceholder), 1) - ]) : (vue.openBlock(), vue.createElementBlock("span", { key: 1 }, vue.toDisplayString(_ctx.currentPlaceholder), 1)) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2), - vue.createElementVNode("div", { - ref: "suffixRef", - class: vue.normalizeClass(_ctx.nsSelect.e("suffix")) - }, [ - _ctx.iconComponent && !_ctx.showClose ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 0, - class: vue.normalizeClass([_ctx.nsSelect.e("caret"), _ctx.nsSelect.e("icon"), _ctx.iconReverse]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.iconComponent))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true), - _ctx.showClose && _ctx.clearIcon ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 1, - class: vue.normalizeClass([ - _ctx.nsSelect.e("caret"), - _ctx.nsSelect.e("icon"), - _ctx.nsSelect.e("clear") - ]), - onClick: _ctx.handleClearClick - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.clearIcon))) - ]), - _: 1 - }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true), - _ctx.validateState && _ctx.validateIcon && _ctx.needStatusIcon ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 2, - class: vue.normalizeClass([ - _ctx.nsInput.e("icon"), - _ctx.nsInput.e("validateIcon"), - _ctx.nsInput.is("loading", _ctx.validateState === "validating") - ]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.validateIcon))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ], 2) - ], 10, ["onClick"]) - ]; - }), - content: vue.withCtx(() => [ - vue.createVNode(_component_el_select_menu, { ref: "menuRef" }, { - default: vue.withCtx(() => [ - _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "header")), - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, [ - vue.renderSlot(_ctx.$slots, "header") - ], 10, ["onClick"])) : vue.createCommentVNode("v-if", true), - vue.withDirectives(vue.createVNode(_component_el_scrollbar, { - id: _ctx.contentId, - ref: "scrollbarRef", - tag: "ul", - "wrap-class": _ctx.nsSelect.be("dropdown", "wrap"), - "view-class": _ctx.nsSelect.be("dropdown", "list"), - class: vue.normalizeClass([_ctx.nsSelect.is("empty", _ctx.filteredOptionsCount === 0)]), - role: "listbox", - "aria-label": _ctx.ariaLabel, - "aria-orientation": "vertical", - onScroll: _ctx.popupScroll - }, { - default: vue.withCtx(() => [ - _ctx.showNewOption ? (vue.openBlock(), vue.createBlock(_component_el_option, { - key: 0, - value: _ctx.states.inputValue, - created: true - }, null, 8, ["value"])) : vue.createCommentVNode("v-if", true), - vue.createVNode(_component_el_options, null, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }) - ]), - _: 3 - }, 8, ["id", "wrap-class", "view-class", "class", "aria-label", "onScroll"]), [ - [vue.vShow, _ctx.states.options.size > 0 && !_ctx.loading] - ]), - _ctx.$slots.loading && _ctx.loading ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "loading")) - }, [ - vue.renderSlot(_ctx.$slots, "loading") - ], 2)) : _ctx.loading || _ctx.filteredOptionsCount === 0 ? (vue.openBlock(), vue.createElementBlock("div", { - key: 2, - class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "empty")) - }, [ - vue.renderSlot(_ctx.$slots, "empty", {}, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(_ctx.emptyText), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", { - key: 3, - class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "footer")), - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, [ - vue.renderSlot(_ctx.$slots, "footer") - ], 10, ["onClick"])) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 512) - ]), - _: 3 - }, 8, ["visible", "placement", "teleported", "popper-class", "popper-options", "fallback-placements", "effect", "transition", "persistent", "append-to", "show-arrow", "offset", "onBeforeShow", "onHide"]) - ], 16, ["onMouseleave"])), [ - [_directive_click_outside, _ctx.handleClickOutside, _ctx.popperRef] - ]); - } - var Select$1 = /* @__PURE__ */ _export_sfc(_sfc_main$Z, [["render", _sfc_render$9], ["__file", "select.vue"]]); - - const _sfc_main$Y = vue.defineComponent({ - name: "ElOptionGroup", - componentName: "ElOptionGroup", - props: { - label: String, - disabled: Boolean - }, - setup(props) { - const ns = useNamespace("select"); - const groupRef = vue.ref(null); - const instance = vue.getCurrentInstance(); - const children = vue.ref([]); - vue.provide(selectGroupKey, vue.reactive({ - ...vue.toRefs(props) - })); - const visible = vue.computed(() => children.value.some((option) => option.visible === true)); - const isOption = (node) => { - var _a, _b; - return ((_a = node.type) == null ? void 0 : _a.name) === "ElOption" && !!((_b = node.component) == null ? void 0 : _b.proxy); - }; - const flattedChildren = (node) => { - const Nodes = castArray$1(node); - const children2 = []; - Nodes.forEach((child) => { - var _a, _b; - if (isOption(child)) { - children2.push(child.component.proxy); - } else if ((_a = child.children) == null ? void 0 : _a.length) { - children2.push(...flattedChildren(child.children)); - } else if ((_b = child.component) == null ? void 0 : _b.subTree) { - children2.push(...flattedChildren(child.component.subTree)); - } - }); - return children2; - }; - const updateChildren = () => { - children.value = flattedChildren(instance.subTree); - }; - vue.onMounted(() => { - updateChildren(); - }); - useMutationObserver(groupRef, updateChildren, { - attributes: true, - subtree: true, - childList: true - }); - return { - groupRef, - visible, - ns - }; - } - }); - function _sfc_render$8(_ctx, _cache, $props, $setup, $data, $options) { - return vue.withDirectives((vue.openBlock(), vue.createElementBlock("ul", { - ref: "groupRef", - class: vue.normalizeClass(_ctx.ns.be("group", "wrap")) - }, [ - vue.createElementVNode("li", { - class: vue.normalizeClass(_ctx.ns.be("group", "title")) - }, vue.toDisplayString(_ctx.label), 3), - vue.createElementVNode("li", null, [ - vue.createElementVNode("ul", { - class: vue.normalizeClass(_ctx.ns.b("group")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2) - ]) - ], 2)), [ - [vue.vShow, _ctx.visible] - ]); - } - var OptionGroup = /* @__PURE__ */ _export_sfc(_sfc_main$Y, [["render", _sfc_render$8], ["__file", "option-group.vue"]]); - - const ElSelect = withInstall(Select$1, { - Option, - OptionGroup - }); - const ElOption = withNoopInstall(Option); - const ElOptionGroup = withNoopInstall(OptionGroup); - - const usePagination = () => vue.inject(elPaginationKey, {}); - - const paginationSizesProps = buildProps({ - pageSize: { - type: Number, - required: true - }, - pageSizes: { - type: definePropType(Array), - default: () => mutable([10, 20, 30, 40, 50, 100]) - }, - popperClass: { - type: String - }, - disabled: Boolean, - teleported: Boolean, - size: { - type: String, - values: componentSizes - }, - appendSizeTo: String - }); - - const __default__$N = vue.defineComponent({ - name: "ElPaginationSizes" - }); - const _sfc_main$X = /* @__PURE__ */ vue.defineComponent({ - ...__default__$N, - props: paginationSizesProps, - emits: ["page-size-change"], - setup(__props, { emit }) { - const props = __props; - const { t } = useLocale(); - const ns = useNamespace("pagination"); - const pagination = usePagination(); - const innerPageSize = vue.ref(props.pageSize); - vue.watch(() => props.pageSizes, (newVal, oldVal) => { - if (isEqual$1(newVal, oldVal)) - return; - if (isArray$1(newVal)) { - const pageSize = newVal.includes(props.pageSize) ? props.pageSize : props.pageSizes[0]; - emit("page-size-change", pageSize); - } - }); - vue.watch(() => props.pageSize, (newVal) => { - innerPageSize.value = newVal; - }); - const innerPageSizes = vue.computed(() => props.pageSizes); - function handleChange(val) { - var _a; - if (val !== innerPageSize.value) { - innerPageSize.value = val; - (_a = pagination.handleSizeChange) == null ? void 0 : _a.call(pagination, Number(val)); - } - } - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("span", { - class: vue.normalizeClass(vue.unref(ns).e("sizes")) - }, [ - vue.createVNode(vue.unref(ElSelect), { - "model-value": innerPageSize.value, - disabled: _ctx.disabled, - "popper-class": _ctx.popperClass, - size: _ctx.size, - teleported: _ctx.teleported, - "validate-event": false, - "append-to": _ctx.appendSizeTo, - onChange: handleChange - }, { - default: vue.withCtx(() => [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(innerPageSizes), (item) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElOption), { - key: item, - value: item, - label: item + vue.unref(t)("el.pagination.pagesize") - }, null, 8, ["value", "label"]); - }), 128)) - ]), - _: 1 - }, 8, ["model-value", "disabled", "popper-class", "size", "teleported", "append-to"]) - ], 2); - }; - } - }); - var Sizes = /* @__PURE__ */ _export_sfc(_sfc_main$X, [["__file", "sizes.vue"]]); - - const paginationJumperProps = buildProps({ - size: { - type: String, - values: componentSizes - } - }); - - const __default__$M = vue.defineComponent({ - name: "ElPaginationJumper" - }); - const _sfc_main$W = /* @__PURE__ */ vue.defineComponent({ - ...__default__$M, - props: paginationJumperProps, - setup(__props) { - const { t } = useLocale(); - const ns = useNamespace("pagination"); - const { pageCount, disabled, currentPage, changeEvent } = usePagination(); - const userInput = vue.ref(); - const innerValue = vue.computed(() => { - var _a; - return (_a = userInput.value) != null ? _a : currentPage == null ? void 0 : currentPage.value; - }); - function handleInput(val) { - userInput.value = val ? +val : ""; - } - function handleChange(val) { - val = Math.trunc(+val); - changeEvent == null ? void 0 : changeEvent(val); - userInput.value = void 0; - } - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("span", { - class: vue.normalizeClass(vue.unref(ns).e("jump")), - disabled: vue.unref(disabled) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass([vue.unref(ns).e("goto")]) - }, vue.toDisplayString(vue.unref(t)("el.pagination.goto")), 3), - vue.createVNode(vue.unref(ElInput), { - size: _ctx.size, - class: vue.normalizeClass([vue.unref(ns).e("editor"), vue.unref(ns).is("in-pagination")]), - min: 1, - max: vue.unref(pageCount), - disabled: vue.unref(disabled), - "model-value": vue.unref(innerValue), - "validate-event": false, - "aria-label": vue.unref(t)("el.pagination.page"), - type: "number", - "onUpdate:modelValue": handleInput, - onChange: handleChange - }, null, 8, ["size", "class", "max", "disabled", "model-value", "aria-label"]), - vue.createElementVNode("span", { - class: vue.normalizeClass([vue.unref(ns).e("classifier")]) - }, vue.toDisplayString(vue.unref(t)("el.pagination.pageClassifier")), 3) - ], 10, ["disabled"]); - }; - } - }); - var Jumper = /* @__PURE__ */ _export_sfc(_sfc_main$W, [["__file", "jumper.vue"]]); - - const paginationTotalProps = buildProps({ - total: { - type: Number, - default: 1e3 - } - }); - - const __default__$L = vue.defineComponent({ - name: "ElPaginationTotal" - }); - const _sfc_main$V = /* @__PURE__ */ vue.defineComponent({ - ...__default__$L, - props: paginationTotalProps, - setup(__props) { - const { t } = useLocale(); - const ns = useNamespace("pagination"); - const { disabled } = usePagination(); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("span", { - class: vue.normalizeClass(vue.unref(ns).e("total")), - disabled: vue.unref(disabled) - }, vue.toDisplayString(vue.unref(t)("el.pagination.total", { - total: _ctx.total - })), 11, ["disabled"]); - }; - } - }); - var Total = /* @__PURE__ */ _export_sfc(_sfc_main$V, [["__file", "total.vue"]]); - - const paginationPagerProps = buildProps({ - currentPage: { - type: Number, - default: 1 - }, - pageCount: { - type: Number, - required: true - }, - pagerCount: { - type: Number, - default: 7 - }, - disabled: Boolean - }); - - const __default__$K = vue.defineComponent({ - name: "ElPaginationPager" - }); - const _sfc_main$U = /* @__PURE__ */ vue.defineComponent({ - ...__default__$K, - props: paginationPagerProps, - emits: ["change"], - setup(__props, { emit }) { - const props = __props; - const nsPager = useNamespace("pager"); - const nsIcon = useNamespace("icon"); - const { t } = useLocale(); - const showPrevMore = vue.ref(false); - const showNextMore = vue.ref(false); - const quickPrevHover = vue.ref(false); - const quickNextHover = vue.ref(false); - const quickPrevFocus = vue.ref(false); - const quickNextFocus = vue.ref(false); - const pagers = vue.computed(() => { - const pagerCount = props.pagerCount; - const halfPagerCount = (pagerCount - 1) / 2; - const currentPage = Number(props.currentPage); - const pageCount = Number(props.pageCount); - let showPrevMore2 = false; - let showNextMore2 = false; - if (pageCount > pagerCount) { - if (currentPage > pagerCount - halfPagerCount) { - showPrevMore2 = true; - } - if (currentPage < pageCount - halfPagerCount) { - showNextMore2 = true; - } - } - const array = []; - if (showPrevMore2 && !showNextMore2) { - const startPage = pageCount - (pagerCount - 2); - for (let i = startPage; i < pageCount; i++) { - array.push(i); - } - } else if (!showPrevMore2 && showNextMore2) { - for (let i = 2; i < pagerCount; i++) { - array.push(i); - } - } else if (showPrevMore2 && showNextMore2) { - const offset = Math.floor(pagerCount / 2) - 1; - for (let i = currentPage - offset; i <= currentPage + offset; i++) { - array.push(i); - } - } else { - for (let i = 2; i < pageCount; i++) { - array.push(i); - } - } - return array; - }); - const prevMoreKls = vue.computed(() => [ - "more", - "btn-quickprev", - nsIcon.b(), - nsPager.is("disabled", props.disabled) - ]); - const nextMoreKls = vue.computed(() => [ - "more", - "btn-quicknext", - nsIcon.b(), - nsPager.is("disabled", props.disabled) - ]); - const tabindex = vue.computed(() => props.disabled ? -1 : 0); - vue.watchEffect(() => { - const halfPagerCount = (props.pagerCount - 1) / 2; - showPrevMore.value = false; - showNextMore.value = false; - if (props.pageCount > props.pagerCount) { - if (props.currentPage > props.pagerCount - halfPagerCount) { - showPrevMore.value = true; - } - if (props.currentPage < props.pageCount - halfPagerCount) { - showNextMore.value = true; - } - } - }); - function onMouseEnter(forward = false) { - if (props.disabled) - return; - if (forward) { - quickPrevHover.value = true; - } else { - quickNextHover.value = true; - } - } - function onFocus(forward = false) { - if (forward) { - quickPrevFocus.value = true; - } else { - quickNextFocus.value = true; - } - } - function onEnter(e) { - const target = e.target; - if (target.tagName.toLowerCase() === "li" && Array.from(target.classList).includes("number")) { - const newPage = Number(target.textContent); - if (newPage !== props.currentPage) { - emit("change", newPage); - } - } else if (target.tagName.toLowerCase() === "li" && Array.from(target.classList).includes("more")) { - onPagerClick(e); - } - } - function onPagerClick(event) { - const target = event.target; - if (target.tagName.toLowerCase() === "ul" || props.disabled) { - return; - } - let newPage = Number(target.textContent); - const pageCount = props.pageCount; - const currentPage = props.currentPage; - const pagerCountOffset = props.pagerCount - 2; - if (target.className.includes("more")) { - if (target.className.includes("quickprev")) { - newPage = currentPage - pagerCountOffset; - } else if (target.className.includes("quicknext")) { - newPage = currentPage + pagerCountOffset; - } - } - if (!Number.isNaN(+newPage)) { - if (newPage < 1) { - newPage = 1; - } - if (newPage > pageCount) { - newPage = pageCount; - } - } - if (newPage !== currentPage) { - emit("change", newPage); - } - } - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("ul", { - class: vue.normalizeClass(vue.unref(nsPager).b()), - onClick: onPagerClick, - onKeyup: vue.withKeys(onEnter, ["enter"]) - }, [ - _ctx.pageCount > 0 ? (vue.openBlock(), vue.createElementBlock("li", { - key: 0, - class: vue.normalizeClass([[ - vue.unref(nsPager).is("active", _ctx.currentPage === 1), - vue.unref(nsPager).is("disabled", _ctx.disabled) - ], "number"]), - "aria-current": _ctx.currentPage === 1, - "aria-label": vue.unref(t)("el.pagination.currentPage", { pager: 1 }), - tabindex: vue.unref(tabindex) - }, " 1 ", 10, ["aria-current", "aria-label", "tabindex"])) : vue.createCommentVNode("v-if", true), - showPrevMore.value ? (vue.openBlock(), vue.createElementBlock("li", { - key: 1, - class: vue.normalizeClass(vue.unref(prevMoreKls)), - tabindex: vue.unref(tabindex), - "aria-label": vue.unref(t)("el.pagination.prevPages", { pager: _ctx.pagerCount - 2 }), - onMouseenter: ($event) => onMouseEnter(true), - onMouseleave: ($event) => quickPrevHover.value = false, - onFocus: ($event) => onFocus(true), - onBlur: ($event) => quickPrevFocus.value = false - }, [ - (quickPrevHover.value || quickPrevFocus.value) && !_ctx.disabled ? (vue.openBlock(), vue.createBlock(vue.unref(d_arrow_left_default), { key: 0 })) : (vue.openBlock(), vue.createBlock(vue.unref(more_filled_default), { key: 1 })) - ], 42, ["tabindex", "aria-label", "onMouseenter", "onMouseleave", "onFocus", "onBlur"])) : vue.createCommentVNode("v-if", true), - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(pagers), (pager) => { - return vue.openBlock(), vue.createElementBlock("li", { - key: pager, - class: vue.normalizeClass([[ - vue.unref(nsPager).is("active", _ctx.currentPage === pager), - vue.unref(nsPager).is("disabled", _ctx.disabled) - ], "number"]), - "aria-current": _ctx.currentPage === pager, - "aria-label": vue.unref(t)("el.pagination.currentPage", { pager }), - tabindex: vue.unref(tabindex) - }, vue.toDisplayString(pager), 11, ["aria-current", "aria-label", "tabindex"]); - }), 128)), - showNextMore.value ? (vue.openBlock(), vue.createElementBlock("li", { - key: 2, - class: vue.normalizeClass(vue.unref(nextMoreKls)), - tabindex: vue.unref(tabindex), - "aria-label": vue.unref(t)("el.pagination.nextPages", { pager: _ctx.pagerCount - 2 }), - onMouseenter: ($event) => onMouseEnter(), - onMouseleave: ($event) => quickNextHover.value = false, - onFocus: ($event) => onFocus(), - onBlur: ($event) => quickNextFocus.value = false - }, [ - (quickNextHover.value || quickNextFocus.value) && !_ctx.disabled ? (vue.openBlock(), vue.createBlock(vue.unref(d_arrow_right_default), { key: 0 })) : (vue.openBlock(), vue.createBlock(vue.unref(more_filled_default), { key: 1 })) - ], 42, ["tabindex", "aria-label", "onMouseenter", "onMouseleave", "onFocus", "onBlur"])) : vue.createCommentVNode("v-if", true), - _ctx.pageCount > 1 ? (vue.openBlock(), vue.createElementBlock("li", { - key: 3, - class: vue.normalizeClass([[ - vue.unref(nsPager).is("active", _ctx.currentPage === _ctx.pageCount), - vue.unref(nsPager).is("disabled", _ctx.disabled) - ], "number"]), - "aria-current": _ctx.currentPage === _ctx.pageCount, - "aria-label": vue.unref(t)("el.pagination.currentPage", { pager: _ctx.pageCount }), - tabindex: vue.unref(tabindex) - }, vue.toDisplayString(_ctx.pageCount), 11, ["aria-current", "aria-label", "tabindex"])) : vue.createCommentVNode("v-if", true) - ], 42, ["onKeyup"]); - }; - } - }); - var Pager = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["__file", "pager.vue"]]); - - const isAbsent = (v) => typeof v !== "number"; - const paginationProps = buildProps({ - pageSize: Number, - defaultPageSize: Number, - total: Number, - pageCount: Number, - pagerCount: { - type: Number, - validator: (value) => { - return isNumber(value) && Math.trunc(value) === value && value > 4 && value < 22 && value % 2 === 1; - }, - default: 7 - }, - currentPage: Number, - defaultCurrentPage: Number, - layout: { - type: String, - default: ["prev", "pager", "next", "jumper", "->", "total"].join(", ") - }, - pageSizes: { - type: definePropType(Array), - default: () => mutable([10, 20, 30, 40, 50, 100]) - }, - popperClass: { - type: String, - default: "" - }, - prevText: { - type: String, - default: "" - }, - prevIcon: { - type: iconPropType, - default: () => arrow_left_default - }, - nextText: { - type: String, - default: "" - }, - nextIcon: { - type: iconPropType, - default: () => arrow_right_default - }, - teleported: { - type: Boolean, - default: true - }, - small: Boolean, - size: useSizeProp, - background: Boolean, - disabled: Boolean, - hideOnSinglePage: Boolean, - appendSizeTo: String - }); - const paginationEmits = { - "update:current-page": (val) => isNumber(val), - "update:page-size": (val) => isNumber(val), - "size-change": (val) => isNumber(val), - change: (currentPage, pageSize) => isNumber(currentPage) && isNumber(pageSize), - "current-change": (val) => isNumber(val), - "prev-click": (val) => isNumber(val), - "next-click": (val) => isNumber(val) - }; - const componentName = "ElPagination"; - var Pagination = vue.defineComponent({ - name: componentName, - props: paginationProps, - emits: paginationEmits, - setup(props, { emit, slots }) { - const { t } = useLocale(); - const ns = useNamespace("pagination"); - const vnodeProps = vue.getCurrentInstance().vnode.props || {}; - const _globalSize = useGlobalSize(); - const _size = vue.computed(() => { - var _a; - return props.small ? "small" : (_a = props.size) != null ? _a : _globalSize.value; - }); - useDeprecated({ - from: "small", - replacement: "size", - version: "3.0.0", - scope: "el-pagination", - ref: "https://element-plus.org/zh-CN/component/pagination.html" - }, vue.computed(() => !!props.small)); - const hasCurrentPageListener = "onUpdate:currentPage" in vnodeProps || "onUpdate:current-page" in vnodeProps || "onCurrentChange" in vnodeProps; - const hasPageSizeListener = "onUpdate:pageSize" in vnodeProps || "onUpdate:page-size" in vnodeProps || "onSizeChange" in vnodeProps; - const assertValidUsage = vue.computed(() => { - if (isAbsent(props.total) && isAbsent(props.pageCount)) - return false; - if (!isAbsent(props.currentPage) && !hasCurrentPageListener) - return false; - if (props.layout.includes("sizes")) { - if (!isAbsent(props.pageCount)) { - if (!hasPageSizeListener) - return false; - } else if (!isAbsent(props.total)) { - if (!isAbsent(props.pageSize)) { - if (!hasPageSizeListener) { - return false; - } - } - } - } - return true; - }); - const innerPageSize = vue.ref(isAbsent(props.defaultPageSize) ? 10 : props.defaultPageSize); - const innerCurrentPage = vue.ref(isAbsent(props.defaultCurrentPage) ? 1 : props.defaultCurrentPage); - const pageSizeBridge = vue.computed({ - get() { - return isAbsent(props.pageSize) ? innerPageSize.value : props.pageSize; - }, - set(v) { - if (isAbsent(props.pageSize)) { - innerPageSize.value = v; - } - if (hasPageSizeListener) { - emit("update:page-size", v); - emit("size-change", v); - } - } - }); - const pageCountBridge = vue.computed(() => { - let pageCount = 0; - if (!isAbsent(props.pageCount)) { - pageCount = props.pageCount; - } else if (!isAbsent(props.total)) { - pageCount = Math.max(1, Math.ceil(props.total / pageSizeBridge.value)); - } - return pageCount; - }); - const currentPageBridge = vue.computed({ - get() { - return isAbsent(props.currentPage) ? innerCurrentPage.value : props.currentPage; - }, - set(v) { - let newCurrentPage = v; - if (v < 1) { - newCurrentPage = 1; - } else if (v > pageCountBridge.value) { - newCurrentPage = pageCountBridge.value; - } - if (isAbsent(props.currentPage)) { - innerCurrentPage.value = newCurrentPage; - } - if (hasCurrentPageListener) { - emit("update:current-page", newCurrentPage); - emit("current-change", newCurrentPage); - } - } - }); - vue.watch(pageCountBridge, (val) => { - if (currentPageBridge.value > val) - currentPageBridge.value = val; - }); - vue.watch([currentPageBridge, pageSizeBridge], (value) => { - emit("change", ...value); - }, { flush: "post" }); - function handleCurrentChange(val) { - currentPageBridge.value = val; - } - function handleSizeChange(val) { - pageSizeBridge.value = val; - const newPageCount = pageCountBridge.value; - if (currentPageBridge.value > newPageCount) { - currentPageBridge.value = newPageCount; - } - } - function prev() { - if (props.disabled) - return; - currentPageBridge.value -= 1; - emit("prev-click", currentPageBridge.value); - } - function next() { - if (props.disabled) - return; - currentPageBridge.value += 1; - emit("next-click", currentPageBridge.value); - } - function addClass(element, cls) { - if (element) { - if (!element.props) { - element.props = {}; - } - element.props.class = [element.props.class, cls].join(" "); - } - } - vue.provide(elPaginationKey, { - pageCount: pageCountBridge, - disabled: vue.computed(() => props.disabled), - currentPage: currentPageBridge, - changeEvent: handleCurrentChange, - handleSizeChange - }); - return () => { - var _a, _b; - if (!assertValidUsage.value) { - debugWarn(componentName, t("el.pagination.deprecationWarning")); - return null; - } - if (!props.layout) - return null; - if (props.hideOnSinglePage && pageCountBridge.value <= 1) - return null; - const rootChildren = []; - const rightWrapperChildren = []; - const rightWrapperRoot = vue.h("div", { class: ns.e("rightwrapper") }, rightWrapperChildren); - const TEMPLATE_MAP = { - prev: vue.h(Prev, { - disabled: props.disabled, - currentPage: currentPageBridge.value, - prevText: props.prevText, - prevIcon: props.prevIcon, - onClick: prev - }), - jumper: vue.h(Jumper, { - size: _size.value - }), - pager: vue.h(Pager, { - currentPage: currentPageBridge.value, - pageCount: pageCountBridge.value, - pagerCount: props.pagerCount, - onChange: handleCurrentChange, - disabled: props.disabled - }), - next: vue.h(Next, { - disabled: props.disabled, - currentPage: currentPageBridge.value, - pageCount: pageCountBridge.value, - nextText: props.nextText, - nextIcon: props.nextIcon, - onClick: next - }), - sizes: vue.h(Sizes, { - pageSize: pageSizeBridge.value, - pageSizes: props.pageSizes, - popperClass: props.popperClass, - disabled: props.disabled, - teleported: props.teleported, - size: _size.value, - appendSizeTo: props.appendSizeTo - }), - slot: (_b = (_a = slots == null ? void 0 : slots.default) == null ? void 0 : _a.call(slots)) != null ? _b : null, - total: vue.h(Total, { total: isAbsent(props.total) ? 0 : props.total }) - }; - const components = props.layout.split(",").map((item) => item.trim()); - let haveRightWrapper = false; - components.forEach((c) => { - if (c === "->") { - haveRightWrapper = true; - return; - } - if (!haveRightWrapper) { - rootChildren.push(TEMPLATE_MAP[c]); - } else { - rightWrapperChildren.push(TEMPLATE_MAP[c]); - } - }); - addClass(rootChildren[0], ns.is("first")); - addClass(rootChildren[rootChildren.length - 1], ns.is("last")); - if (haveRightWrapper && rightWrapperChildren.length > 0) { - addClass(rightWrapperChildren[0], ns.is("first")); - addClass(rightWrapperChildren[rightWrapperChildren.length - 1], ns.is("last")); - rootChildren.push(rightWrapperRoot); - } - return vue.h("div", { - class: [ - ns.b(), - ns.is("background", props.background), - ns.m(_size.value) - ] - }, rootChildren); - }; - } - }); - - const ElPagination = withInstall(Pagination); - - const popconfirmProps = buildProps({ - title: String, - confirmButtonText: String, - cancelButtonText: String, - confirmButtonType: { - type: String, - values: buttonTypes, - default: "primary" - }, - cancelButtonType: { - type: String, - values: buttonTypes, - default: "text" - }, - icon: { - type: iconPropType, - default: () => question_filled_default - }, - iconColor: { - type: String, - default: "#f90" - }, - hideIcon: { - type: Boolean, - default: false - }, - hideAfter: { - type: Number, - default: 200 - }, - teleported: useTooltipContentProps.teleported, - persistent: useTooltipContentProps.persistent, - width: { - type: [String, Number], - default: 150 - } - }); - const popconfirmEmits = { - confirm: (e) => e instanceof MouseEvent, - cancel: (e) => e instanceof MouseEvent - }; - - const __default__$J = vue.defineComponent({ - name: "ElPopconfirm" - }); - const _sfc_main$T = /* @__PURE__ */ vue.defineComponent({ - ...__default__$J, - props: popconfirmProps, - emits: popconfirmEmits, - setup(__props, { emit }) { - const props = __props; - const { t } = useLocale(); - const ns = useNamespace("popconfirm"); - const tooltipRef = vue.ref(); - const hidePopper = () => { - var _a, _b; - (_b = (_a = tooltipRef.value) == null ? void 0 : _a.onClose) == null ? void 0 : _b.call(_a); - }; - const style = vue.computed(() => { - return { - width: addUnit(props.width) - }; - }); - const confirm = (e) => { - emit("confirm", e); - hidePopper(); - }; - const cancel = (e) => { - emit("cancel", e); - hidePopper(); - }; - const finalConfirmButtonText = vue.computed(() => props.confirmButtonText || t("el.popconfirm.confirmButtonText")); - const finalCancelButtonText = vue.computed(() => props.cancelButtonText || t("el.popconfirm.cancelButtonText")); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTooltip), vue.mergeProps({ - ref_key: "tooltipRef", - ref: tooltipRef, - trigger: "click", - effect: "light" - }, _ctx.$attrs, { - "popper-class": `${vue.unref(ns).namespace.value}-popover`, - "popper-style": vue.unref(style), - teleported: _ctx.teleported, - "fallback-placements": ["bottom", "top", "right", "left"], - "hide-after": _ctx.hideAfter, - persistent: _ctx.persistent - }), { - content: vue.withCtx(() => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).b()) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("main")) - }, [ - !_ctx.hideIcon && _ctx.icon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("icon")), - style: vue.normalizeStyle({ color: _ctx.iconColor }) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon))) - ]), - _: 1 - }, 8, ["class", "style"])) : vue.createCommentVNode("v-if", true), - vue.createTextVNode(" " + vue.toDisplayString(_ctx.title), 1) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("action")) - }, [ - vue.renderSlot(_ctx.$slots, "actions", { - confirm, - cancel - }, () => [ - vue.createVNode(vue.unref(ElButton), { - size: "small", - type: _ctx.cancelButtonType === "text" ? "" : _ctx.cancelButtonType, - text: _ctx.cancelButtonType === "text", - onClick: cancel - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(finalCancelButtonText)), 1) - ]), - _: 1 - }, 8, ["type", "text"]), - vue.createVNode(vue.unref(ElButton), { - size: "small", - type: _ctx.confirmButtonType === "text" ? "" : _ctx.confirmButtonType, - text: _ctx.confirmButtonType === "text", - onClick: confirm - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(finalConfirmButtonText)), 1) - ]), - _: 1 - }, 8, ["type", "text"]) - ]) - ], 2) - ], 2) - ]), - default: vue.withCtx(() => [ - _ctx.$slots.reference ? vue.renderSlot(_ctx.$slots, "reference", { key: 0 }) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 16, ["popper-class", "popper-style", "teleported", "hide-after", "persistent"]); - }; - } - }); - var Popconfirm = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["__file", "popconfirm.vue"]]); - - const ElPopconfirm = withInstall(Popconfirm); - - const popoverProps = buildProps({ - trigger: useTooltipTriggerProps.trigger, - placement: dropdownProps.placement, - disabled: useTooltipTriggerProps.disabled, - visible: useTooltipContentProps.visible, - transition: useTooltipContentProps.transition, - popperOptions: dropdownProps.popperOptions, - tabindex: dropdownProps.tabindex, - content: useTooltipContentProps.content, - popperStyle: useTooltipContentProps.popperStyle, - popperClass: useTooltipContentProps.popperClass, - enterable: { - ...useTooltipContentProps.enterable, - default: true - }, - effect: { - ...useTooltipContentProps.effect, - default: "light" - }, - teleported: useTooltipContentProps.teleported, - title: String, - width: { - type: [String, Number], - default: 150 - }, - offset: { - type: Number, - default: void 0 - }, - showAfter: { - type: Number, - default: 0 - }, - hideAfter: { - type: Number, - default: 200 - }, - autoClose: { - type: Number, - default: 0 - }, - showArrow: { - type: Boolean, - default: true - }, - persistent: { - type: Boolean, - default: true - }, - "onUpdate:visible": { - type: Function - } - }); - const popoverEmits = { - "update:visible": (value) => isBoolean(value), - "before-enter": () => true, - "before-leave": () => true, - "after-enter": () => true, - "after-leave": () => true - }; - - const updateEventKeyRaw = `onUpdate:visible`; - const __default__$I = vue.defineComponent({ - name: "ElPopover" - }); - const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({ - ...__default__$I, - props: popoverProps, - emits: popoverEmits, - setup(__props, { expose, emit }) { - const props = __props; - const onUpdateVisible = vue.computed(() => { - return props[updateEventKeyRaw]; - }); - const ns = useNamespace("popover"); - const tooltipRef = vue.ref(); - const popperRef = vue.computed(() => { - var _a; - return (_a = vue.unref(tooltipRef)) == null ? void 0 : _a.popperRef; - }); - const style = vue.computed(() => { - return [ - { - width: addUnit(props.width) - }, - props.popperStyle - ]; - }); - const kls = vue.computed(() => { - return [ns.b(), props.popperClass, { [ns.m("plain")]: !!props.content }]; - }); - const gpuAcceleration = vue.computed(() => { - return props.transition === `${ns.namespace.value}-fade-in-linear`; - }); - const hide = () => { - var _a; - (_a = tooltipRef.value) == null ? void 0 : _a.hide(); - }; - const beforeEnter = () => { - emit("before-enter"); - }; - const beforeLeave = () => { - emit("before-leave"); - }; - const afterEnter = () => { - emit("after-enter"); - }; - const afterLeave = () => { - emit("update:visible", false); - emit("after-leave"); - }; - expose({ - popperRef, - hide - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElTooltip), vue.mergeProps({ - ref_key: "tooltipRef", - ref: tooltipRef - }, _ctx.$attrs, { - trigger: _ctx.trigger, - placement: _ctx.placement, - disabled: _ctx.disabled, - visible: _ctx.visible, - transition: _ctx.transition, - "popper-options": _ctx.popperOptions, - tabindex: _ctx.tabindex, - content: _ctx.content, - offset: _ctx.offset, - "show-after": _ctx.showAfter, - "hide-after": _ctx.hideAfter, - "auto-close": _ctx.autoClose, - "show-arrow": _ctx.showArrow, - "aria-label": _ctx.title, - effect: _ctx.effect, - enterable: _ctx.enterable, - "popper-class": vue.unref(kls), - "popper-style": vue.unref(style), - teleported: _ctx.teleported, - persistent: _ctx.persistent, - "gpu-acceleration": vue.unref(gpuAcceleration), - "onUpdate:visible": vue.unref(onUpdateVisible), - onBeforeShow: beforeEnter, - onBeforeHide: beforeLeave, - onShow: afterEnter, - onHide: afterLeave - }), { - content: vue.withCtx(() => [ - _ctx.title ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("title")), - role: "title" - }, vue.toDisplayString(_ctx.title), 3)) : vue.createCommentVNode("v-if", true), - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.content), 1) - ]) - ]), - default: vue.withCtx(() => [ - _ctx.$slots.reference ? vue.renderSlot(_ctx.$slots, "reference", { key: 0 }) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 16, ["trigger", "placement", "disabled", "visible", "transition", "popper-options", "tabindex", "content", "offset", "show-after", "hide-after", "auto-close", "show-arrow", "aria-label", "effect", "enterable", "popper-class", "popper-style", "teleported", "persistent", "gpu-acceleration", "onUpdate:visible"]); - }; - } - }); - var Popover = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["__file", "popover.vue"]]); - - const attachEvents = (el, binding) => { - const popperComponent = binding.arg || binding.value; - const popover = popperComponent == null ? void 0 : popperComponent.popperRef; - if (popover) { - popover.triggerRef = el; - } - }; - var PopoverDirective = { - mounted(el, binding) { - attachEvents(el, binding); - }, - updated(el, binding) { - attachEvents(el, binding); - } - }; - const VPopover = "popover"; - - const ElPopoverDirective = withInstallDirective(PopoverDirective, VPopover); - const ElPopover = withInstall(Popover, { - directive: ElPopoverDirective - }); - - const progressProps = buildProps({ - type: { - type: String, - default: "line", - values: ["line", "circle", "dashboard"] - }, - percentage: { - type: Number, - default: 0, - validator: (val) => val >= 0 && val <= 100 - }, - status: { - type: String, - default: "", - values: ["", "success", "exception", "warning"] - }, - indeterminate: Boolean, - duration: { - type: Number, - default: 3 - }, - strokeWidth: { - type: Number, - default: 6 - }, - strokeLinecap: { - type: definePropType(String), - default: "round" - }, - textInside: Boolean, - width: { - type: Number, - default: 126 - }, - showText: { - type: Boolean, - default: true - }, - color: { - type: definePropType([ - String, - Array, - Function - ]), - default: "" - }, - striped: Boolean, - stripedFlow: Boolean, - format: { - type: definePropType(Function), - default: (percentage) => `${percentage}%` - } - }); - - const __default__$H = vue.defineComponent({ - name: "ElProgress" - }); - const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({ - ...__default__$H, - props: progressProps, - setup(__props) { - const props = __props; - const STATUS_COLOR_MAP = { - success: "#13ce66", - exception: "#ff4949", - warning: "#e6a23c", - default: "#20a0ff" - }; - const ns = useNamespace("progress"); - const barStyle = vue.computed(() => { - const barStyle2 = { - width: `${props.percentage}%`, - animationDuration: `${props.duration}s` - }; - const color = getCurrentColor(props.percentage); - if (color.includes("gradient")) { - barStyle2.background = color; - } else { - barStyle2.backgroundColor = color; - } - return barStyle2; - }); - const relativeStrokeWidth = vue.computed(() => (props.strokeWidth / props.width * 100).toFixed(1)); - const radius = vue.computed(() => { - if (["circle", "dashboard"].includes(props.type)) { - return Number.parseInt(`${50 - Number.parseFloat(relativeStrokeWidth.value) / 2}`, 10); - } - return 0; - }); - const trackPath = vue.computed(() => { - const r = radius.value; - const isDashboard = props.type === "dashboard"; - return ` - M 50 50 - m 0 ${isDashboard ? "" : "-"}${r} - a ${r} ${r} 0 1 1 0 ${isDashboard ? "-" : ""}${r * 2} - a ${r} ${r} 0 1 1 0 ${isDashboard ? "" : "-"}${r * 2} - `; - }); - const perimeter = vue.computed(() => 2 * Math.PI * radius.value); - const rate = vue.computed(() => props.type === "dashboard" ? 0.75 : 1); - const strokeDashoffset = vue.computed(() => { - const offset = -1 * perimeter.value * (1 - rate.value) / 2; - return `${offset}px`; - }); - const trailPathStyle = vue.computed(() => ({ - strokeDasharray: `${perimeter.value * rate.value}px, ${perimeter.value}px`, - strokeDashoffset: strokeDashoffset.value - })); - const circlePathStyle = vue.computed(() => ({ - strokeDasharray: `${perimeter.value * rate.value * (props.percentage / 100)}px, ${perimeter.value}px`, - strokeDashoffset: strokeDashoffset.value, - transition: "stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s" - })); - const stroke = vue.computed(() => { - let ret; - if (props.color) { - ret = getCurrentColor(props.percentage); - } else { - ret = STATUS_COLOR_MAP[props.status] || STATUS_COLOR_MAP.default; - } - return ret; - }); - const statusIcon = vue.computed(() => { - if (props.status === "warning") { - return warning_filled_default; - } - if (props.type === "line") { - return props.status === "success" ? circle_check_default : circle_close_default; - } else { - return props.status === "success" ? check_default : close_default; - } - }); - const progressTextSize = vue.computed(() => { - return props.type === "line" ? 12 + props.strokeWidth * 0.4 : props.width * 0.111111 + 2; - }); - const content = vue.computed(() => props.format(props.percentage)); - function getColors(color) { - const span = 100 / color.length; - const seriesColors = color.map((seriesColor, index) => { - if (isString$1(seriesColor)) { - return { - color: seriesColor, - percentage: (index + 1) * span - }; - } - return seriesColor; - }); - return seriesColors.sort((a, b) => a.percentage - b.percentage); - } - const getCurrentColor = (percentage) => { - var _a; - const { color } = props; - if (isFunction$1(color)) { - return color(percentage); - } else if (isString$1(color)) { - return color; - } else { - const colors = getColors(color); - for (const color2 of colors) { - if (color2.percentage > percentage) - return color2.color; - } - return (_a = colors[colors.length - 1]) == null ? void 0 : _a.color; - } - }; - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([ - vue.unref(ns).b(), - vue.unref(ns).m(_ctx.type), - vue.unref(ns).is(_ctx.status), - { - [vue.unref(ns).m("without-text")]: !_ctx.showText, - [vue.unref(ns).m("text-inside")]: _ctx.textInside - } - ]), - role: "progressbar", - "aria-valuenow": _ctx.percentage, - "aria-valuemin": "0", - "aria-valuemax": "100" - }, [ - _ctx.type === "line" ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).b("bar")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).be("bar", "outer")), - style: vue.normalizeStyle({ height: `${_ctx.strokeWidth}px` }) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass([ - vue.unref(ns).be("bar", "inner"), - { [vue.unref(ns).bem("bar", "inner", "indeterminate")]: _ctx.indeterminate }, - { [vue.unref(ns).bem("bar", "inner", "striped")]: _ctx.striped }, - { [vue.unref(ns).bem("bar", "inner", "striped-flow")]: _ctx.stripedFlow } - ]), - style: vue.normalizeStyle(vue.unref(barStyle)) - }, [ - (_ctx.showText || _ctx.$slots.default) && _ctx.textInside ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).be("bar", "innerText")) - }, [ - vue.renderSlot(_ctx.$slots, "default", { percentage: _ctx.percentage }, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(vue.unref(content)), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 6) - ], 6) - ], 2)) : (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).b("circle")), - style: vue.normalizeStyle({ height: `${_ctx.width}px`, width: `${_ctx.width}px` }) - }, [ - (vue.openBlock(), vue.createElementBlock("svg", { viewBox: "0 0 100 100" }, [ - vue.createElementVNode("path", { - class: vue.normalizeClass(vue.unref(ns).be("circle", "track")), - d: vue.unref(trackPath), - stroke: `var(${vue.unref(ns).cssVarName("fill-color-light")}, #e5e9f2)`, - "stroke-linecap": _ctx.strokeLinecap, - "stroke-width": vue.unref(relativeStrokeWidth), - fill: "none", - style: vue.normalizeStyle(vue.unref(trailPathStyle)) - }, null, 14, ["d", "stroke", "stroke-linecap", "stroke-width"]), - vue.createElementVNode("path", { - class: vue.normalizeClass(vue.unref(ns).be("circle", "path")), - d: vue.unref(trackPath), - stroke: vue.unref(stroke), - fill: "none", - opacity: _ctx.percentage ? 1 : 0, - "stroke-linecap": _ctx.strokeLinecap, - "stroke-width": vue.unref(relativeStrokeWidth), - style: vue.normalizeStyle(vue.unref(circlePathStyle)) - }, null, 14, ["d", "stroke", "opacity", "stroke-linecap", "stroke-width"]) - ])) - ], 6)), - (_ctx.showText || _ctx.$slots.default) && !_ctx.textInside ? (vue.openBlock(), vue.createElementBlock("div", { - key: 2, - class: vue.normalizeClass(vue.unref(ns).e("text")), - style: vue.normalizeStyle({ fontSize: `${vue.unref(progressTextSize)}px` }) - }, [ - vue.renderSlot(_ctx.$slots, "default", { percentage: _ctx.percentage }, () => [ - !_ctx.status ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, vue.toDisplayString(vue.unref(content)), 1)) : (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 1 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(statusIcon)))) - ]), - _: 1 - })) - ]) - ], 6)) : vue.createCommentVNode("v-if", true) - ], 10, ["aria-valuenow"]); - }; - } - }); - var Progress = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["__file", "progress.vue"]]); - - const ElProgress = withInstall(Progress); - - const rateProps = buildProps({ - modelValue: { - type: Number, - default: 0 - }, - id: { - type: String, - default: void 0 - }, - lowThreshold: { - type: Number, - default: 2 - }, - highThreshold: { - type: Number, - default: 4 - }, - max: { - type: Number, - default: 5 - }, - colors: { - type: definePropType([Array, Object]), - default: () => mutable(["", "", ""]) - }, - voidColor: { - type: String, - default: "" - }, - disabledVoidColor: { - type: String, - default: "" - }, - icons: { - type: definePropType([Array, Object]), - default: () => [star_filled_default, star_filled_default, star_filled_default] - }, - voidIcon: { - type: iconPropType, - default: () => star_default - }, - disabledVoidIcon: { - type: iconPropType, - default: () => star_filled_default - }, - disabled: Boolean, - allowHalf: Boolean, - showText: Boolean, - showScore: Boolean, - textColor: { - type: String, - default: "" - }, - texts: { - type: definePropType(Array), - default: () => mutable([ - "Extremely bad", - "Disappointed", - "Fair", - "Satisfied", - "Surprise" - ]) - }, - scoreTemplate: { - type: String, - default: "{value}" - }, - size: useSizeProp, - clearable: Boolean, - ...useAriaProps(["ariaLabel"]) - }); - const rateEmits = { - [CHANGE_EVENT]: (value) => isNumber(value), - [UPDATE_MODEL_EVENT]: (value) => isNumber(value) - }; - - const __default__$G = vue.defineComponent({ - name: "ElRate" - }); - const _sfc_main$Q = /* @__PURE__ */ vue.defineComponent({ - ...__default__$G, - props: rateProps, - emits: rateEmits, - setup(__props, { expose, emit }) { - const props = __props; - function getValueFromMap(value, map) { - const isExcludedObject = (val) => isObject$1(val); - const matchedKeys = Object.keys(map).map((key) => +key).filter((key) => { - const val = map[key]; - const excluded = isExcludedObject(val) ? val.excluded : false; - return excluded ? value < key : value <= key; - }).sort((a, b) => a - b); - const matchedValue = map[matchedKeys[0]]; - return isExcludedObject(matchedValue) && matchedValue.value || matchedValue; - } - const formContext = vue.inject(formContextKey, void 0); - const formItemContext = vue.inject(formItemContextKey, void 0); - const rateSize = useFormSize(); - const ns = useNamespace("rate"); - const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { - formItemContext - }); - const currentValue = vue.ref(props.modelValue); - const hoverIndex = vue.ref(-1); - const pointerAtLeftHalf = vue.ref(true); - const rateClasses = vue.computed(() => [ns.b(), ns.m(rateSize.value)]); - const rateDisabled = vue.computed(() => props.disabled || (formContext == null ? void 0 : formContext.disabled)); - const rateStyles = vue.computed(() => { - return ns.cssVarBlock({ - "void-color": props.voidColor, - "disabled-void-color": props.disabledVoidColor, - "fill-color": activeColor.value - }); - }); - const text = vue.computed(() => { - let result = ""; - if (props.showScore) { - result = props.scoreTemplate.replace(/\{\s*value\s*\}/, rateDisabled.value ? `${props.modelValue}` : `${currentValue.value}`); - } else if (props.showText) { - result = props.texts[Math.ceil(currentValue.value) - 1]; - } - return result; - }); - const valueDecimal = vue.computed(() => props.modelValue * 100 - Math.floor(props.modelValue) * 100); - const colorMap = vue.computed(() => isArray$1(props.colors) ? { - [props.lowThreshold]: props.colors[0], - [props.highThreshold]: { value: props.colors[1], excluded: true }, - [props.max]: props.colors[2] - } : props.colors); - const activeColor = vue.computed(() => { - const color = getValueFromMap(currentValue.value, colorMap.value); - return isObject$1(color) ? "" : color; - }); - const decimalStyle = vue.computed(() => { - let width = ""; - if (rateDisabled.value) { - width = `${valueDecimal.value}%`; - } else if (props.allowHalf) { - width = "50%"; - } - return { - color: activeColor.value, - width - }; - }); - const componentMap = vue.computed(() => { - let icons = isArray$1(props.icons) ? [...props.icons] : { ...props.icons }; - icons = vue.markRaw(icons); - return isArray$1(icons) ? { - [props.lowThreshold]: icons[0], - [props.highThreshold]: { - value: icons[1], - excluded: true - }, - [props.max]: icons[2] - } : icons; - }); - const decimalIconComponent = vue.computed(() => getValueFromMap(props.modelValue, componentMap.value)); - const voidComponent = vue.computed(() => rateDisabled.value ? isString$1(props.disabledVoidIcon) ? props.disabledVoidIcon : vue.markRaw(props.disabledVoidIcon) : isString$1(props.voidIcon) ? props.voidIcon : vue.markRaw(props.voidIcon)); - const activeComponent = vue.computed(() => getValueFromMap(currentValue.value, componentMap.value)); - function showDecimalIcon(item) { - const showWhenDisabled = rateDisabled.value && valueDecimal.value > 0 && item - 1 < props.modelValue && item > props.modelValue; - const showWhenAllowHalf = props.allowHalf && pointerAtLeftHalf.value && item - 0.5 <= currentValue.value && item > currentValue.value; - return showWhenDisabled || showWhenAllowHalf; - } - function emitValue(value) { - if (props.clearable && value === props.modelValue) { - value = 0; - } - emit(UPDATE_MODEL_EVENT, value); - if (props.modelValue !== value) { - emit("change", value); - } - } - function selectValue(value) { - if (rateDisabled.value) { - return; - } - if (props.allowHalf && pointerAtLeftHalf.value) { - emitValue(currentValue.value); - } else { - emitValue(value); - } - } - function handleKey(e) { - if (rateDisabled.value) { - return; - } - let _currentValue = currentValue.value; - const code = e.code; - if (code === EVENT_CODE.up || code === EVENT_CODE.right) { - if (props.allowHalf) { - _currentValue += 0.5; - } else { - _currentValue += 1; - } - e.stopPropagation(); - e.preventDefault(); - } else if (code === EVENT_CODE.left || code === EVENT_CODE.down) { - if (props.allowHalf) { - _currentValue -= 0.5; - } else { - _currentValue -= 1; - } - e.stopPropagation(); - e.preventDefault(); - } - _currentValue = _currentValue < 0 ? 0 : _currentValue; - _currentValue = _currentValue > props.max ? props.max : _currentValue; - emit(UPDATE_MODEL_EVENT, _currentValue); - emit("change", _currentValue); - return _currentValue; - } - function setCurrentValue(value, event) { - if (rateDisabled.value) { - return; - } - if (props.allowHalf && event) { - let target = event.target; - if (hasClass(target, ns.e("item"))) { - target = target.querySelector(`.${ns.e("icon")}`); - } - if (target.clientWidth === 0 || hasClass(target, ns.e("decimal"))) { - target = target.parentNode; - } - pointerAtLeftHalf.value = event.offsetX * 2 <= target.clientWidth; - currentValue.value = pointerAtLeftHalf.value ? value - 0.5 : value; - } else { - currentValue.value = value; - } - hoverIndex.value = value; - } - function resetCurrentValue() { - if (rateDisabled.value) { - return; - } - if (props.allowHalf) { - pointerAtLeftHalf.value = props.modelValue !== Math.floor(props.modelValue); - } - currentValue.value = props.modelValue; - hoverIndex.value = -1; - } - vue.watch(() => props.modelValue, (val) => { - currentValue.value = val; - pointerAtLeftHalf.value = props.modelValue !== Math.floor(props.modelValue); - }); - if (!props.modelValue) { - emit(UPDATE_MODEL_EVENT, 0); - } - expose({ - setCurrentValue, - resetCurrentValue - }); - return (_ctx, _cache) => { - var _a; - return vue.openBlock(), vue.createElementBlock("div", { - id: vue.unref(inputId), - class: vue.normalizeClass([vue.unref(rateClasses), vue.unref(ns).is("disabled", vue.unref(rateDisabled))]), - role: "slider", - "aria-label": !vue.unref(isLabeledByFormItem) ? _ctx.ariaLabel || "rating" : void 0, - "aria-labelledby": vue.unref(isLabeledByFormItem) ? (_a = vue.unref(formItemContext)) == null ? void 0 : _a.labelId : void 0, - "aria-valuenow": currentValue.value, - "aria-valuetext": vue.unref(text) || void 0, - "aria-valuemin": "0", - "aria-valuemax": _ctx.max, - tabindex: "0", - style: vue.normalizeStyle(vue.unref(rateStyles)), - onKeydown: handleKey - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.max, (item, key) => { - return vue.openBlock(), vue.createElementBlock("span", { - key, - class: vue.normalizeClass(vue.unref(ns).e("item")), - onMousemove: ($event) => setCurrentValue(item, $event), - onMouseleave: resetCurrentValue, - onClick: ($event) => selectValue(item) - }, [ - vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass([ - vue.unref(ns).e("icon"), - { hover: hoverIndex.value === item }, - vue.unref(ns).is("active", item <= currentValue.value) - ]) - }, { - default: vue.withCtx(() => [ - !showDecimalIcon(item) ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.withDirectives((vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(activeComponent)), null, null, 512)), [ - [vue.vShow, item <= currentValue.value] - ]), - vue.withDirectives((vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(voidComponent)), null, null, 512)), [ - [vue.vShow, !(item <= currentValue.value)] - ]) - ], 64)) : vue.createCommentVNode("v-if", true), - showDecimalIcon(item) ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(voidComponent)), { - class: vue.normalizeClass([vue.unref(ns).em("decimal", "box")]) - }, null, 8, ["class"])), - vue.createVNode(vue.unref(ElIcon), { - style: vue.normalizeStyle(vue.unref(decimalStyle)), - class: vue.normalizeClass([vue.unref(ns).e("icon"), vue.unref(ns).e("decimal")]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(decimalIconComponent)))) - ]), - _: 1 - }, 8, ["style", "class"]) - ], 64)) : vue.createCommentVNode("v-if", true) - ]), - _: 2 - }, 1032, ["class"]) - ], 42, ["onMousemove", "onClick"]); - }), 128)), - _ctx.showText || _ctx.showScore ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("text")), - style: vue.normalizeStyle({ color: _ctx.textColor }) - }, vue.toDisplayString(vue.unref(text)), 7)) : vue.createCommentVNode("v-if", true) - ], 46, ["id", "aria-label", "aria-labelledby", "aria-valuenow", "aria-valuetext", "aria-valuemax"]); - }; - } - }); - var Rate = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["__file", "rate.vue"]]); - - const ElRate = withInstall(Rate); - - const IconMap = { - success: "icon-success", - warning: "icon-warning", - error: "icon-error", - info: "icon-info" - }; - const IconComponentMap = { - [IconMap.success]: circle_check_filled_default, - [IconMap.warning]: warning_filled_default, - [IconMap.error]: circle_close_filled_default, - [IconMap.info]: info_filled_default - }; - const resultProps = buildProps({ - title: { - type: String, - default: "" - }, - subTitle: { - type: String, - default: "" - }, - icon: { - type: String, - values: ["success", "warning", "info", "error"], - default: "info" - } - }); - - const __default__$F = vue.defineComponent({ - name: "ElResult" - }); - const _sfc_main$P = /* @__PURE__ */ vue.defineComponent({ - ...__default__$F, - props: resultProps, - setup(__props) { - const props = __props; - const ns = useNamespace("result"); - const resultIcon = vue.computed(() => { - const icon = props.icon; - const iconClass = icon && IconMap[icon] ? IconMap[icon] : "icon-info"; - const iconComponent = IconComponentMap[iconClass] || IconComponentMap["icon-info"]; - return { - class: iconClass, - component: iconComponent - }; - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(ns).b()) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("icon")) - }, [ - vue.renderSlot(_ctx.$slots, "icon", {}, () => [ - vue.unref(resultIcon).component ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(resultIcon).component), { - key: 0, - class: vue.normalizeClass(vue.unref(resultIcon).class) - }, null, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ]) - ], 2), - _ctx.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("title")) - }, [ - vue.renderSlot(_ctx.$slots, "title", {}, () => [ - vue.createElementVNode("p", null, vue.toDisplayString(_ctx.title), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - _ctx.subTitle || _ctx.$slots["sub-title"] ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("subtitle")) - }, [ - vue.renderSlot(_ctx.$slots, "sub-title", {}, () => [ - vue.createElementVNode("p", null, vue.toDisplayString(_ctx.subTitle), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - _ctx.$slots.extra ? (vue.openBlock(), vue.createElementBlock("div", { - key: 2, - class: vue.normalizeClass(vue.unref(ns).e("extra")) - }, [ - vue.renderSlot(_ctx.$slots, "extra") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var Result = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["__file", "result.vue"]]); - - const ElResult = withInstall(Result); - - var safeIsNaN = Number.isNaN || function ponyfill(value) { - return typeof value === "number" && value !== value; - }; - function isEqual(first, second) { - if (first === second) { - return true; - } - if (safeIsNaN(first) && safeIsNaN(second)) { - return true; - } - return false; - } - function areInputsEqual(newInputs, lastInputs) { - if (newInputs.length !== lastInputs.length) { - return false; - } - for (var i = 0; i < newInputs.length; i++) { - if (!isEqual(newInputs[i], lastInputs[i])) { - return false; - } - } - return true; - } - function memoizeOne(resultFn, isEqual2) { - if (isEqual2 === void 0) { - isEqual2 = areInputsEqual; - } - var cache = null; - function memoized() { - var newArgs = []; - for (var _i = 0; _i < arguments.length; _i++) { - newArgs[_i] = arguments[_i]; - } - if (cache && cache.lastThis === this && isEqual2(newArgs, cache.lastArgs)) { - return cache.lastResult; - } - var lastResult = resultFn.apply(this, newArgs); - cache = { - lastResult, - lastArgs: newArgs, - lastThis: this - }; - return lastResult; - } - memoized.clear = function clear() { - cache = null; - }; - return memoized; - } - - const useCache = () => { - const vm = vue.getCurrentInstance(); - const props = vm.proxy.$props; - return vue.computed(() => { - const _getItemStyleCache = (_, __, ___) => ({}); - return props.perfMode ? memoize(_getItemStyleCache) : memoizeOne(_getItemStyleCache); - }); - }; - - const DEFAULT_DYNAMIC_LIST_ITEM_SIZE = 50; - const ITEM_RENDER_EVT = "itemRendered"; - const SCROLL_EVT = "scroll"; - const FORWARD = "forward"; - const BACKWARD = "backward"; - const AUTO_ALIGNMENT = "auto"; - const SMART_ALIGNMENT = "smart"; - const START_ALIGNMENT = "start"; - const CENTERED_ALIGNMENT = "center"; - const END_ALIGNMENT = "end"; - const HORIZONTAL = "horizontal"; - const VERTICAL = "vertical"; - const LTR = "ltr"; - const RTL = "rtl"; - const RTL_OFFSET_NAG = "negative"; - const RTL_OFFSET_POS_ASC = "positive-ascending"; - const RTL_OFFSET_POS_DESC = "positive-descending"; - const ScrollbarDirKey = { - [HORIZONTAL]: "left", - [VERTICAL]: "top" - }; - const SCROLLBAR_MIN_SIZE = 20; - - const LayoutKeys = { - [HORIZONTAL]: "deltaX", - [VERTICAL]: "deltaY" - }; - const useWheel = ({ atEndEdge, atStartEdge, layout }, onWheelDelta) => { - let frameHandle; - let offset = 0; - const hasReachedEdge = (offset2) => { - const edgeReached = offset2 < 0 && atStartEdge.value || offset2 > 0 && atEndEdge.value; - return edgeReached; - }; - const onWheel = (e) => { - cAF(frameHandle); - const newOffset = e[LayoutKeys[layout.value]]; - if (hasReachedEdge(offset) && hasReachedEdge(offset + newOffset)) - return; - offset += newOffset; - if (!isFirefox()) { - e.preventDefault(); - } - frameHandle = rAF(() => { - onWheelDelta(offset); - offset = 0; - }); - }; - return { - hasReachedEdge, - onWheel - }; - }; - var useWheel$1 = useWheel; - - const itemSize$1 = buildProp({ - type: definePropType([Number, Function]), - required: true - }); - const estimatedItemSize = buildProp({ - type: Number - }); - const cache = buildProp({ - type: Number, - default: 2 - }); - const direction = buildProp({ - type: String, - values: ["ltr", "rtl"], - default: "ltr" - }); - const initScrollOffset = buildProp({ - type: Number, - default: 0 - }); - const total = buildProp({ - type: Number, - required: true - }); - const layout = buildProp({ - type: String, - values: ["horizontal", "vertical"], - default: VERTICAL - }); - const virtualizedProps = buildProps({ - className: { - type: String, - default: "" - }, - containerElement: { - type: definePropType([String, Object]), - default: "div" - }, - data: { - type: definePropType(Array), - default: () => mutable([]) - }, - direction, - height: { - type: [String, Number], - required: true - }, - innerElement: { - type: [String, Object], - default: "div" - }, - style: { - type: definePropType([Object, String, Array]) - }, - useIsScrolling: { - type: Boolean, - default: false - }, - width: { - type: [Number, String], - required: false - }, - perfMode: { - type: Boolean, - default: true - }, - scrollbarAlwaysOn: { - type: Boolean, - default: false - } - }); - const virtualizedListProps = buildProps({ - cache, - estimatedItemSize, - layout, - initScrollOffset, - total, - itemSize: itemSize$1, - ...virtualizedProps - }); - const scrollbarSize = { - type: Number, - default: 6 - }; - const startGap = { type: Number, default: 0 }; - const endGap = { type: Number, default: 2 }; - const virtualizedGridProps = buildProps({ - columnCache: cache, - columnWidth: itemSize$1, - estimatedColumnWidth: estimatedItemSize, - estimatedRowHeight: estimatedItemSize, - initScrollLeft: initScrollOffset, - initScrollTop: initScrollOffset, - itemKey: { - type: definePropType(Function), - default: ({ - columnIndex, - rowIndex - }) => `${rowIndex}:${columnIndex}` - }, - rowCache: cache, - rowHeight: itemSize$1, - totalColumn: total, - totalRow: total, - hScrollbarSize: scrollbarSize, - vScrollbarSize: scrollbarSize, - scrollbarStartGap: startGap, - scrollbarEndGap: endGap, - role: String, - ...virtualizedProps - }); - const virtualizedScrollbarProps = buildProps({ - alwaysOn: Boolean, - class: String, - layout, - total, - ratio: { - type: Number, - required: true - }, - clientSize: { - type: Number, - required: true - }, - scrollFrom: { - type: Number, - required: true - }, - scrollbarSize, - startGap, - endGap, - visible: Boolean - }); - - const getScrollDir = (prev, cur) => prev < cur ? FORWARD : BACKWARD; - const isHorizontal = (dir) => dir === LTR || dir === RTL || dir === HORIZONTAL; - const isRTL = (dir) => dir === RTL; - let cachedRTLResult = null; - function getRTLOffsetType(recalculate = false) { - if (cachedRTLResult === null || recalculate) { - const outerDiv = document.createElement("div"); - const outerStyle = outerDiv.style; - outerStyle.width = "50px"; - outerStyle.height = "50px"; - outerStyle.overflow = "scroll"; - outerStyle.direction = "rtl"; - const innerDiv = document.createElement("div"); - const innerStyle = innerDiv.style; - innerStyle.width = "100px"; - innerStyle.height = "100px"; - outerDiv.appendChild(innerDiv); - document.body.appendChild(outerDiv); - if (outerDiv.scrollLeft > 0) { - cachedRTLResult = RTL_OFFSET_POS_DESC; - } else { - outerDiv.scrollLeft = 1; - if (outerDiv.scrollLeft === 0) { - cachedRTLResult = RTL_OFFSET_NAG; - } else { - cachedRTLResult = RTL_OFFSET_POS_ASC; - } - } - document.body.removeChild(outerDiv); - return cachedRTLResult; - } - return cachedRTLResult; - } - function renderThumbStyle({ move, size, bar }, layout) { - const style = {}; - const translate = `translate${bar.axis}(${move}px)`; - style[bar.size] = size; - style.transform = translate; - style.msTransform = translate; - style.webkitTransform = translate; - if (layout === "horizontal") { - style.height = "100%"; - } else { - style.width = "100%"; - } - return style; - } - - const ScrollBar = vue.defineComponent({ - name: "ElVirtualScrollBar", - props: virtualizedScrollbarProps, - emits: ["scroll", "start-move", "stop-move"], - setup(props, { emit }) { - const GAP = vue.computed(() => props.startGap + props.endGap); - const nsVirtualScrollbar = useNamespace("virtual-scrollbar"); - const nsScrollbar = useNamespace("scrollbar"); - const trackRef = vue.ref(); - const thumbRef = vue.ref(); - let frameHandle = null; - let onselectstartStore = null; - const state = vue.reactive({ - isDragging: false, - traveled: 0 - }); - const bar = vue.computed(() => BAR_MAP[props.layout]); - const trackSize = vue.computed(() => props.clientSize - vue.unref(GAP)); - const trackStyle = vue.computed(() => ({ - position: "absolute", - width: `${HORIZONTAL === props.layout ? trackSize.value : props.scrollbarSize}px`, - height: `${HORIZONTAL === props.layout ? props.scrollbarSize : trackSize.value}px`, - [ScrollbarDirKey[props.layout]]: "2px", - right: "2px", - bottom: "2px", - borderRadius: "4px" - })); - const thumbSize = vue.computed(() => { - const ratio = props.ratio; - const clientSize = props.clientSize; - if (ratio >= 100) { - return Number.POSITIVE_INFINITY; - } - if (ratio >= 50) { - return ratio * clientSize / 100; - } - const SCROLLBAR_MAX_SIZE = clientSize / 3; - return Math.floor(Math.min(Math.max(ratio * clientSize, SCROLLBAR_MIN_SIZE), SCROLLBAR_MAX_SIZE)); - }); - const thumbStyle = vue.computed(() => { - if (!Number.isFinite(thumbSize.value)) { - return { - display: "none" - }; - } - const thumb = `${thumbSize.value}px`; - const style = renderThumbStyle({ - bar: bar.value, - size: thumb, - move: state.traveled - }, props.layout); - return style; - }); - const totalSteps = vue.computed(() => Math.floor(props.clientSize - thumbSize.value - vue.unref(GAP))); - const attachEvents = () => { - window.addEventListener("mousemove", onMouseMove); - window.addEventListener("mouseup", onMouseUp); - const thumbEl = vue.unref(thumbRef); - if (!thumbEl) - return; - onselectstartStore = document.onselectstart; - document.onselectstart = () => false; - thumbEl.addEventListener("touchmove", onMouseMove, { passive: true }); - thumbEl.addEventListener("touchend", onMouseUp); - }; - const detachEvents = () => { - window.removeEventListener("mousemove", onMouseMove); - window.removeEventListener("mouseup", onMouseUp); - document.onselectstart = onselectstartStore; - onselectstartStore = null; - const thumbEl = vue.unref(thumbRef); - if (!thumbEl) - return; - thumbEl.removeEventListener("touchmove", onMouseMove); - thumbEl.removeEventListener("touchend", onMouseUp); - }; - const onThumbMouseDown = (e) => { - e.stopImmediatePropagation(); - if (e.ctrlKey || [1, 2].includes(e.button)) { - return; - } - state.isDragging = true; - state[bar.value.axis] = e.currentTarget[bar.value.offset] - (e[bar.value.client] - e.currentTarget.getBoundingClientRect()[bar.value.direction]); - emit("start-move"); - attachEvents(); - }; - const onMouseUp = () => { - state.isDragging = false; - state[bar.value.axis] = 0; - emit("stop-move"); - detachEvents(); - }; - const onMouseMove = (e) => { - const { isDragging } = state; - if (!isDragging) - return; - if (!thumbRef.value || !trackRef.value) - return; - const prevPage = state[bar.value.axis]; - if (!prevPage) - return; - cAF(frameHandle); - const offset = (trackRef.value.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]) * -1; - const thumbClickPosition = thumbRef.value[bar.value.offset] - prevPage; - const distance = offset - thumbClickPosition; - frameHandle = rAF(() => { - state.traveled = Math.max(props.startGap, Math.min(distance, totalSteps.value)); - emit("scroll", distance, totalSteps.value); - }); - }; - const clickTrackHandler = (e) => { - const offset = Math.abs(e.target.getBoundingClientRect()[bar.value.direction] - e[bar.value.client]); - const thumbHalf = thumbRef.value[bar.value.offset] / 2; - const distance = offset - thumbHalf; - state.traveled = Math.max(0, Math.min(distance, totalSteps.value)); - emit("scroll", distance, totalSteps.value); - }; - vue.watch(() => props.scrollFrom, (v) => { - if (state.isDragging) - return; - state.traveled = Math.ceil(v * totalSteps.value); - }); - vue.onBeforeUnmount(() => { - detachEvents(); - }); - return () => { - return vue.h("div", { - role: "presentation", - ref: trackRef, - class: [ - nsVirtualScrollbar.b(), - props.class, - (props.alwaysOn || state.isDragging) && "always-on" - ], - style: trackStyle.value, - onMousedown: vue.withModifiers(clickTrackHandler, ["stop", "prevent"]), - onTouchstartPrevent: onThumbMouseDown - }, vue.h("div", { - ref: thumbRef, - class: nsScrollbar.e("thumb"), - style: thumbStyle.value, - onMousedown: onThumbMouseDown - }, [])); - }; - } - }); - var Scrollbar = ScrollBar; - - const createList = ({ - name, - getOffset, - getItemSize, - getItemOffset, - getEstimatedTotalSize, - getStartIndexForOffset, - getStopIndexForStartIndex, - initCache, - clearCache, - validateProps - }) => { - return vue.defineComponent({ - name: name != null ? name : "ElVirtualList", - props: virtualizedListProps, - emits: [ITEM_RENDER_EVT, SCROLL_EVT], - setup(props, { emit, expose }) { - validateProps(props); - const instance = vue.getCurrentInstance(); - const ns = useNamespace("vl"); - const dynamicSizeCache = vue.ref(initCache(props, instance)); - const getItemStyleCache = useCache(); - const windowRef = vue.ref(); - const innerRef = vue.ref(); - const scrollbarRef = vue.ref(); - const states = vue.ref({ - isScrolling: false, - scrollDir: "forward", - scrollOffset: isNumber(props.initScrollOffset) ? props.initScrollOffset : 0, - updateRequested: false, - isScrollbarDragging: false, - scrollbarAlwaysOn: props.scrollbarAlwaysOn - }); - const itemsToRender = vue.computed(() => { - const { total, cache } = props; - const { isScrolling, scrollDir, scrollOffset } = vue.unref(states); - if (total === 0) { - return [0, 0, 0, 0]; - } - const startIndex = getStartIndexForOffset(props, scrollOffset, vue.unref(dynamicSizeCache)); - const stopIndex = getStopIndexForStartIndex(props, startIndex, scrollOffset, vue.unref(dynamicSizeCache)); - const cacheBackward = !isScrolling || scrollDir === BACKWARD ? Math.max(1, cache) : 1; - const cacheForward = !isScrolling || scrollDir === FORWARD ? Math.max(1, cache) : 1; - return [ - Math.max(0, startIndex - cacheBackward), - Math.max(0, Math.min(total - 1, stopIndex + cacheForward)), - startIndex, - stopIndex - ]; - }); - const estimatedTotalSize = vue.computed(() => getEstimatedTotalSize(props, vue.unref(dynamicSizeCache))); - const _isHorizontal = vue.computed(() => isHorizontal(props.layout)); - const windowStyle = vue.computed(() => [ - { - position: "relative", - [`overflow-${_isHorizontal.value ? "x" : "y"}`]: "scroll", - WebkitOverflowScrolling: "touch", - willChange: "transform" - }, - { - direction: props.direction, - height: isNumber(props.height) ? `${props.height}px` : props.height, - width: isNumber(props.width) ? `${props.width}px` : props.width - }, - props.style - ]); - const innerStyle = vue.computed(() => { - const size = vue.unref(estimatedTotalSize); - const horizontal = vue.unref(_isHorizontal); - return { - height: horizontal ? "100%" : `${size}px`, - pointerEvents: vue.unref(states).isScrolling ? "none" : void 0, - width: horizontal ? `${size}px` : "100%" - }; - }); - const clientSize = vue.computed(() => _isHorizontal.value ? props.width : props.height); - const { onWheel } = useWheel$1({ - atStartEdge: vue.computed(() => states.value.scrollOffset <= 0), - atEndEdge: vue.computed(() => states.value.scrollOffset >= estimatedTotalSize.value), - layout: vue.computed(() => props.layout) - }, (offset) => { - var _a, _b; - (_b = (_a = scrollbarRef.value).onMouseUp) == null ? void 0 : _b.call(_a); - scrollTo(Math.min(states.value.scrollOffset + offset, estimatedTotalSize.value - clientSize.value)); - }); - useEventListener(windowRef, "wheel", onWheel, { - passive: false - }); - const emitEvents = () => { - const { total } = props; - if (total > 0) { - const [cacheStart, cacheEnd, visibleStart, visibleEnd] = vue.unref(itemsToRender); - emit(ITEM_RENDER_EVT, cacheStart, cacheEnd, visibleStart, visibleEnd); - } - const { scrollDir, scrollOffset, updateRequested } = vue.unref(states); - emit(SCROLL_EVT, scrollDir, scrollOffset, updateRequested); - }; - const scrollVertically = (e) => { - const { clientHeight, scrollHeight, scrollTop } = e.currentTarget; - const _states = vue.unref(states); - if (_states.scrollOffset === scrollTop) { - return; - } - const scrollOffset = Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight)); - states.value = { - ..._states, - isScrolling: true, - scrollDir: getScrollDir(_states.scrollOffset, scrollOffset), - scrollOffset, - updateRequested: false - }; - vue.nextTick(resetIsScrolling); - }; - const scrollHorizontally = (e) => { - const { clientWidth, scrollLeft, scrollWidth } = e.currentTarget; - const _states = vue.unref(states); - if (_states.scrollOffset === scrollLeft) { - return; - } - const { direction } = props; - let scrollOffset = scrollLeft; - if (direction === RTL) { - switch (getRTLOffsetType()) { - case RTL_OFFSET_NAG: { - scrollOffset = -scrollLeft; - break; - } - case RTL_OFFSET_POS_DESC: { - scrollOffset = scrollWidth - clientWidth - scrollLeft; - break; - } - } - } - scrollOffset = Math.max(0, Math.min(scrollOffset, scrollWidth - clientWidth)); - states.value = { - ..._states, - isScrolling: true, - scrollDir: getScrollDir(_states.scrollOffset, scrollOffset), - scrollOffset, - updateRequested: false - }; - vue.nextTick(resetIsScrolling); - }; - const onScroll = (e) => { - vue.unref(_isHorizontal) ? scrollHorizontally(e) : scrollVertically(e); - emitEvents(); - }; - const onScrollbarScroll = (distanceToGo, totalSteps) => { - const offset = (estimatedTotalSize.value - clientSize.value) / totalSteps * distanceToGo; - scrollTo(Math.min(estimatedTotalSize.value - clientSize.value, offset)); - }; - const scrollTo = (offset) => { - offset = Math.max(offset, 0); - if (offset === vue.unref(states).scrollOffset) { - return; - } - states.value = { - ...vue.unref(states), - scrollOffset: offset, - scrollDir: getScrollDir(vue.unref(states).scrollOffset, offset), - updateRequested: true - }; - vue.nextTick(resetIsScrolling); - }; - const scrollToItem = (idx, alignment = AUTO_ALIGNMENT) => { - const { scrollOffset } = vue.unref(states); - idx = Math.max(0, Math.min(idx, props.total - 1)); - scrollTo(getOffset(props, idx, alignment, scrollOffset, vue.unref(dynamicSizeCache))); - }; - const getItemStyle = (idx) => { - const { direction, itemSize, layout } = props; - const itemStyleCache = getItemStyleCache.value(clearCache && itemSize, clearCache && layout, clearCache && direction); - let style; - if (hasOwn(itemStyleCache, String(idx))) { - style = itemStyleCache[idx]; - } else { - const offset = getItemOffset(props, idx, vue.unref(dynamicSizeCache)); - const size = getItemSize(props, idx, vue.unref(dynamicSizeCache)); - const horizontal = vue.unref(_isHorizontal); - const isRtl = direction === RTL; - const offsetHorizontal = horizontal ? offset : 0; - itemStyleCache[idx] = style = { - position: "absolute", - left: isRtl ? void 0 : `${offsetHorizontal}px`, - right: isRtl ? `${offsetHorizontal}px` : void 0, - top: !horizontal ? `${offset}px` : 0, - height: !horizontal ? `${size}px` : "100%", - width: horizontal ? `${size}px` : "100%" - }; - } - return style; - }; - const resetIsScrolling = () => { - states.value.isScrolling = false; - vue.nextTick(() => { - getItemStyleCache.value(-1, null, null); - }); - }; - const resetScrollTop = () => { - const window = windowRef.value; - if (window) { - window.scrollTop = 0; - } - }; - vue.onMounted(() => { - if (!isClient) - return; - const { initScrollOffset } = props; - const windowElement = vue.unref(windowRef); - if (isNumber(initScrollOffset) && windowElement) { - if (vue.unref(_isHorizontal)) { - windowElement.scrollLeft = initScrollOffset; - } else { - windowElement.scrollTop = initScrollOffset; - } - } - emitEvents(); - }); - vue.onUpdated(() => { - const { direction, layout } = props; - const { scrollOffset, updateRequested } = vue.unref(states); - const windowElement = vue.unref(windowRef); - if (updateRequested && windowElement) { - if (layout === HORIZONTAL) { - if (direction === RTL) { - switch (getRTLOffsetType()) { - case RTL_OFFSET_NAG: { - windowElement.scrollLeft = -scrollOffset; - break; - } - case RTL_OFFSET_POS_ASC: { - windowElement.scrollLeft = scrollOffset; - break; - } - default: { - const { clientWidth, scrollWidth } = windowElement; - windowElement.scrollLeft = scrollWidth - clientWidth - scrollOffset; - break; - } - } - } else { - windowElement.scrollLeft = scrollOffset; - } - } else { - windowElement.scrollTop = scrollOffset; - } - } - }); - vue.onActivated(() => { - vue.unref(windowRef).scrollTop = vue.unref(states).scrollOffset; - }); - const api = { - ns, - clientSize, - estimatedTotalSize, - windowStyle, - windowRef, - innerRef, - innerStyle, - itemsToRender, - scrollbarRef, - states, - getItemStyle, - onScroll, - onScrollbarScroll, - onWheel, - scrollTo, - scrollToItem, - resetScrollTop - }; - expose({ - windowRef, - innerRef, - getItemStyleCache, - scrollTo, - scrollToItem, - resetScrollTop, - states - }); - return api; - }, - render(ctx) { - var _a; - const { - $slots, - className, - clientSize, - containerElement, - data, - getItemStyle, - innerElement, - itemsToRender, - innerStyle, - layout, - total, - onScroll, - onScrollbarScroll, - states, - useIsScrolling, - windowStyle, - ns - } = ctx; - const [start, end] = itemsToRender; - const Container = vue.resolveDynamicComponent(containerElement); - const Inner = vue.resolveDynamicComponent(innerElement); - const children = []; - if (total > 0) { - for (let i = start; i <= end; i++) { - children.push(vue.h(vue.Fragment, { key: i }, (_a = $slots.default) == null ? void 0 : _a.call($slots, { - data, - index: i, - isScrolling: useIsScrolling ? states.isScrolling : void 0, - style: getItemStyle(i) - }))); - } - } - const InnerNode = [ - vue.h(Inner, { - style: innerStyle, - ref: "innerRef" - }, !isString$1(Inner) ? { - default: () => children - } : children) - ]; - const scrollbar = vue.h(Scrollbar, { - ref: "scrollbarRef", - clientSize, - layout, - onScroll: onScrollbarScroll, - ratio: clientSize * 100 / this.estimatedTotalSize, - scrollFrom: states.scrollOffset / (this.estimatedTotalSize - clientSize), - total - }); - const listContainer = vue.h(Container, { - class: [ns.e("window"), className], - style: windowStyle, - onScroll, - ref: "windowRef", - key: 0 - }, !isString$1(Container) ? { default: () => [InnerNode] } : [InnerNode]); - return vue.h("div", { - key: 0, - class: [ns.e("wrapper"), states.scrollbarAlwaysOn ? "always-on" : ""] - }, [listContainer, scrollbar]); - } - }); - }; - var createList$1 = createList; - - const FixedSizeList = createList$1({ - name: "ElFixedSizeList", - getItemOffset: ({ itemSize }, index) => index * itemSize, - getItemSize: ({ itemSize }) => itemSize, - getEstimatedTotalSize: ({ total, itemSize }) => itemSize * total, - getOffset: ({ height, total, itemSize, layout, width }, index, alignment, scrollOffset) => { - const size = isHorizontal(layout) ? width : height; - const lastItemOffset = Math.max(0, total * itemSize - size); - const maxOffset = Math.min(lastItemOffset, index * itemSize); - const minOffset = Math.max(0, (index + 1) * itemSize - size); - if (alignment === SMART_ALIGNMENT) { - if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) { - alignment = AUTO_ALIGNMENT; - } else { - alignment = CENTERED_ALIGNMENT; - } - } - switch (alignment) { - case START_ALIGNMENT: { - return maxOffset; - } - case END_ALIGNMENT: { - return minOffset; - } - case CENTERED_ALIGNMENT: { - const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2); - if (middleOffset < Math.ceil(size / 2)) { - return 0; - } else if (middleOffset > lastItemOffset + Math.floor(size / 2)) { - return lastItemOffset; - } else { - return middleOffset; - } - } - case AUTO_ALIGNMENT: - default: { - if (scrollOffset >= minOffset && scrollOffset <= maxOffset) { - return scrollOffset; - } else if (scrollOffset < minOffset) { - return minOffset; - } else { - return maxOffset; - } - } - } - }, - getStartIndexForOffset: ({ total, itemSize }, offset) => Math.max(0, Math.min(total - 1, Math.floor(offset / itemSize))), - getStopIndexForStartIndex: ({ height, total, itemSize, layout, width }, startIndex, scrollOffset) => { - const offset = startIndex * itemSize; - const size = isHorizontal(layout) ? width : height; - const numVisibleItems = Math.ceil((size + scrollOffset - offset) / itemSize); - return Math.max(0, Math.min(total - 1, startIndex + numVisibleItems - 1)); - }, - initCache() { - return void 0; - }, - clearCache: true, - validateProps() { - } - }); - var FixedSizeList$1 = FixedSizeList; - - const getItemFromCache$1 = (props, index, listCache) => { - const { itemSize } = props; - const { items, lastVisitedIndex } = listCache; - if (index > lastVisitedIndex) { - let offset = 0; - if (lastVisitedIndex >= 0) { - const item = items[lastVisitedIndex]; - offset = item.offset + item.size; - } - for (let i = lastVisitedIndex + 1; i <= index; i++) { - const size = itemSize(i); - items[i] = { - offset, - size - }; - offset += size; - } - listCache.lastVisitedIndex = index; - } - return items[index]; - }; - const findItem$1 = (props, listCache, offset) => { - const { items, lastVisitedIndex } = listCache; - const lastVisitedOffset = lastVisitedIndex > 0 ? items[lastVisitedIndex].offset : 0; - if (lastVisitedOffset >= offset) { - return bs$1(props, listCache, 0, lastVisitedIndex, offset); - } - return es$1(props, listCache, Math.max(0, lastVisitedIndex), offset); - }; - const bs$1 = (props, listCache, low, high, offset) => { - while (low <= high) { - const mid = low + Math.floor((high - low) / 2); - const currentOffset = getItemFromCache$1(props, mid, listCache).offset; - if (currentOffset === offset) { - return mid; - } else if (currentOffset < offset) { - low = mid + 1; - } else if (currentOffset > offset) { - high = mid - 1; - } - } - return Math.max(0, low - 1); - }; - const es$1 = (props, listCache, index, offset) => { - const { total } = props; - let exponent = 1; - while (index < total && getItemFromCache$1(props, index, listCache).offset < offset) { - index += exponent; - exponent *= 2; - } - return bs$1(props, listCache, Math.floor(index / 2), Math.min(index, total - 1), offset); - }; - const getEstimatedTotalSize = ({ total }, { items, estimatedItemSize, lastVisitedIndex }) => { - let totalSizeOfMeasuredItems = 0; - if (lastVisitedIndex >= total) { - lastVisitedIndex = total - 1; - } - if (lastVisitedIndex >= 0) { - const item = items[lastVisitedIndex]; - totalSizeOfMeasuredItems = item.offset + item.size; - } - const numUnmeasuredItems = total - lastVisitedIndex - 1; - const totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize; - return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems; - }; - const DynamicSizeList = createList$1({ - name: "ElDynamicSizeList", - getItemOffset: (props, index, listCache) => getItemFromCache$1(props, index, listCache).offset, - getItemSize: (_, index, { items }) => items[index].size, - getEstimatedTotalSize, - getOffset: (props, index, alignment, scrollOffset, listCache) => { - const { height, layout, width } = props; - const size = isHorizontal(layout) ? width : height; - const item = getItemFromCache$1(props, index, listCache); - const estimatedTotalSize = getEstimatedTotalSize(props, listCache); - const maxOffset = Math.max(0, Math.min(estimatedTotalSize - size, item.offset)); - const minOffset = Math.max(0, item.offset - size + item.size); - if (alignment === SMART_ALIGNMENT) { - if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) { - alignment = AUTO_ALIGNMENT; - } else { - alignment = CENTERED_ALIGNMENT; - } - } - switch (alignment) { - case START_ALIGNMENT: { - return maxOffset; - } - case END_ALIGNMENT: { - return minOffset; - } - case CENTERED_ALIGNMENT: { - return Math.round(minOffset + (maxOffset - minOffset) / 2); - } - case AUTO_ALIGNMENT: - default: { - if (scrollOffset >= minOffset && scrollOffset <= maxOffset) { - return scrollOffset; - } else if (scrollOffset < minOffset) { - return minOffset; - } else { - return maxOffset; - } - } - } - }, - getStartIndexForOffset: (props, offset, listCache) => findItem$1(props, listCache, offset), - getStopIndexForStartIndex: (props, startIndex, scrollOffset, listCache) => { - const { height, total, layout, width } = props; - const size = isHorizontal(layout) ? width : height; - const item = getItemFromCache$1(props, startIndex, listCache); - const maxOffset = scrollOffset + size; - let offset = item.offset + item.size; - let stopIndex = startIndex; - while (stopIndex < total - 1 && offset < maxOffset) { - stopIndex++; - offset += getItemFromCache$1(props, stopIndex, listCache).size; - } - return stopIndex; - }, - initCache({ estimatedItemSize = DEFAULT_DYNAMIC_LIST_ITEM_SIZE }, instance) { - const cache = { - items: {}, - estimatedItemSize, - lastVisitedIndex: -1 - }; - cache.clearCacheAfterIndex = (index, forceUpdate = true) => { - var _a, _b; - cache.lastVisitedIndex = Math.min(cache.lastVisitedIndex, index - 1); - (_a = instance.exposed) == null ? void 0 : _a.getItemStyleCache(-1); - if (forceUpdate) { - (_b = instance.proxy) == null ? void 0 : _b.$forceUpdate(); - } - }; - return cache; - }, - clearCache: false, - validateProps: ({ itemSize }) => { - } - }); - var DynamicSizeList$1 = DynamicSizeList; - - const useGridWheel = ({ atXEndEdge, atXStartEdge, atYEndEdge, atYStartEdge }, onWheelDelta) => { - let frameHandle = null; - let xOffset = 0; - let yOffset = 0; - const hasReachedEdge = (x, y) => { - const xEdgeReached = x <= 0 && atXStartEdge.value || x >= 0 && atXEndEdge.value; - const yEdgeReached = y <= 0 && atYStartEdge.value || y >= 0 && atYEndEdge.value; - return xEdgeReached && yEdgeReached; - }; - const onWheel = (e) => { - cAF(frameHandle); - let x = e.deltaX; - let y = e.deltaY; - if (Math.abs(x) > Math.abs(y)) { - y = 0; - } else { - x = 0; - } - if (e.shiftKey && y !== 0) { - x = y; - y = 0; - } - if (hasReachedEdge(xOffset, yOffset) && hasReachedEdge(xOffset + x, yOffset + y)) - return; - xOffset += x; - yOffset += y; - e.preventDefault(); - frameHandle = rAF(() => { - onWheelDelta(xOffset, yOffset); - xOffset = 0; - yOffset = 0; - }); - }; - return { - hasReachedEdge, - onWheel - }; - }; - - const createGrid = ({ - name, - clearCache, - getColumnPosition, - getColumnStartIndexForOffset, - getColumnStopIndexForStartIndex, - getEstimatedTotalHeight, - getEstimatedTotalWidth, - getColumnOffset, - getRowOffset, - getRowPosition, - getRowStartIndexForOffset, - getRowStopIndexForStartIndex, - initCache, - injectToInstance, - validateProps - }) => { - return vue.defineComponent({ - name: name != null ? name : "ElVirtualList", - props: virtualizedGridProps, - emits: [ITEM_RENDER_EVT, SCROLL_EVT], - setup(props, { emit, expose, slots }) { - const ns = useNamespace("vl"); - validateProps(props); - const instance = vue.getCurrentInstance(); - const cache = vue.ref(initCache(props, instance)); - injectToInstance == null ? void 0 : injectToInstance(instance, cache); - const windowRef = vue.ref(); - const hScrollbar = vue.ref(); - const vScrollbar = vue.ref(); - const innerRef = vue.ref(null); - const states = vue.ref({ - isScrolling: false, - scrollLeft: isNumber(props.initScrollLeft) ? props.initScrollLeft : 0, - scrollTop: isNumber(props.initScrollTop) ? props.initScrollTop : 0, - updateRequested: false, - xAxisScrollDir: FORWARD, - yAxisScrollDir: FORWARD - }); - const getItemStyleCache = useCache(); - const parsedHeight = vue.computed(() => Number.parseInt(`${props.height}`, 10)); - const parsedWidth = vue.computed(() => Number.parseInt(`${props.width}`, 10)); - const columnsToRender = vue.computed(() => { - const { totalColumn, totalRow, columnCache } = props; - const { isScrolling, xAxisScrollDir, scrollLeft } = vue.unref(states); - if (totalColumn === 0 || totalRow === 0) { - return [0, 0, 0, 0]; - } - const startIndex = getColumnStartIndexForOffset(props, scrollLeft, vue.unref(cache)); - const stopIndex = getColumnStopIndexForStartIndex(props, startIndex, scrollLeft, vue.unref(cache)); - const cacheBackward = !isScrolling || xAxisScrollDir === BACKWARD ? Math.max(1, columnCache) : 1; - const cacheForward = !isScrolling || xAxisScrollDir === FORWARD ? Math.max(1, columnCache) : 1; - return [ - Math.max(0, startIndex - cacheBackward), - Math.max(0, Math.min(totalColumn - 1, stopIndex + cacheForward)), - startIndex, - stopIndex - ]; - }); - const rowsToRender = vue.computed(() => { - const { totalColumn, totalRow, rowCache } = props; - const { isScrolling, yAxisScrollDir, scrollTop } = vue.unref(states); - if (totalColumn === 0 || totalRow === 0) { - return [0, 0, 0, 0]; - } - const startIndex = getRowStartIndexForOffset(props, scrollTop, vue.unref(cache)); - const stopIndex = getRowStopIndexForStartIndex(props, startIndex, scrollTop, vue.unref(cache)); - const cacheBackward = !isScrolling || yAxisScrollDir === BACKWARD ? Math.max(1, rowCache) : 1; - const cacheForward = !isScrolling || yAxisScrollDir === FORWARD ? Math.max(1, rowCache) : 1; - return [ - Math.max(0, startIndex - cacheBackward), - Math.max(0, Math.min(totalRow - 1, stopIndex + cacheForward)), - startIndex, - stopIndex - ]; - }); - const estimatedTotalHeight = vue.computed(() => getEstimatedTotalHeight(props, vue.unref(cache))); - const estimatedTotalWidth = vue.computed(() => getEstimatedTotalWidth(props, vue.unref(cache))); - const windowStyle = vue.computed(() => { - var _a; - return [ - { - position: "relative", - overflow: "hidden", - WebkitOverflowScrolling: "touch", - willChange: "transform" - }, - { - direction: props.direction, - height: isNumber(props.height) ? `${props.height}px` : props.height, - width: isNumber(props.width) ? `${props.width}px` : props.width - }, - (_a = props.style) != null ? _a : {} - ]; - }); - const innerStyle = vue.computed(() => { - const width = `${vue.unref(estimatedTotalWidth)}px`; - const height = `${vue.unref(estimatedTotalHeight)}px`; - return { - height, - pointerEvents: vue.unref(states).isScrolling ? "none" : void 0, - width - }; - }); - const emitEvents = () => { - const { totalColumn, totalRow } = props; - if (totalColumn > 0 && totalRow > 0) { - const [ - columnCacheStart, - columnCacheEnd, - columnVisibleStart, - columnVisibleEnd - ] = vue.unref(columnsToRender); - const [rowCacheStart, rowCacheEnd, rowVisibleStart, rowVisibleEnd] = vue.unref(rowsToRender); - emit(ITEM_RENDER_EVT, { - columnCacheStart, - columnCacheEnd, - rowCacheStart, - rowCacheEnd, - columnVisibleStart, - columnVisibleEnd, - rowVisibleStart, - rowVisibleEnd - }); - } - const { - scrollLeft, - scrollTop, - updateRequested, - xAxisScrollDir, - yAxisScrollDir - } = vue.unref(states); - emit(SCROLL_EVT, { - xAxisScrollDir, - scrollLeft, - yAxisScrollDir, - scrollTop, - updateRequested - }); - }; - const onScroll = (e) => { - const { - clientHeight, - clientWidth, - scrollHeight, - scrollLeft, - scrollTop, - scrollWidth - } = e.currentTarget; - const _states = vue.unref(states); - if (_states.scrollTop === scrollTop && _states.scrollLeft === scrollLeft) { - return; - } - let _scrollLeft = scrollLeft; - if (isRTL(props.direction)) { - switch (getRTLOffsetType()) { - case RTL_OFFSET_NAG: - _scrollLeft = -scrollLeft; - break; - case RTL_OFFSET_POS_DESC: - _scrollLeft = scrollWidth - clientWidth - scrollLeft; - break; - } - } - states.value = { - ..._states, - isScrolling: true, - scrollLeft: _scrollLeft, - scrollTop: Math.max(0, Math.min(scrollTop, scrollHeight - clientHeight)), - updateRequested: true, - xAxisScrollDir: getScrollDir(_states.scrollLeft, _scrollLeft), - yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop) - }; - vue.nextTick(() => resetIsScrolling()); - onUpdated(); - emitEvents(); - }; - const onVerticalScroll = (distance, totalSteps) => { - const height = vue.unref(parsedHeight); - const offset = (estimatedTotalHeight.value - height) / totalSteps * distance; - scrollTo({ - scrollTop: Math.min(estimatedTotalHeight.value - height, offset) - }); - }; - const onHorizontalScroll = (distance, totalSteps) => { - const width = vue.unref(parsedWidth); - const offset = (estimatedTotalWidth.value - width) / totalSteps * distance; - scrollTo({ - scrollLeft: Math.min(estimatedTotalWidth.value - width, offset) - }); - }; - const { onWheel } = useGridWheel({ - atXStartEdge: vue.computed(() => states.value.scrollLeft <= 0), - atXEndEdge: vue.computed(() => states.value.scrollLeft >= estimatedTotalWidth.value - vue.unref(parsedWidth)), - atYStartEdge: vue.computed(() => states.value.scrollTop <= 0), - atYEndEdge: vue.computed(() => states.value.scrollTop >= estimatedTotalHeight.value - vue.unref(parsedHeight)) - }, (x, y) => { - var _a, _b, _c, _d; - (_b = (_a = hScrollbar.value) == null ? void 0 : _a.onMouseUp) == null ? void 0 : _b.call(_a); - (_d = (_c = vScrollbar.value) == null ? void 0 : _c.onMouseUp) == null ? void 0 : _d.call(_c); - const width = vue.unref(parsedWidth); - const height = vue.unref(parsedHeight); - scrollTo({ - scrollLeft: Math.min(states.value.scrollLeft + x, estimatedTotalWidth.value - width), - scrollTop: Math.min(states.value.scrollTop + y, estimatedTotalHeight.value - height) - }); - }); - useEventListener(windowRef, "wheel", onWheel, { - passive: false - }); - const scrollTo = ({ - scrollLeft = states.value.scrollLeft, - scrollTop = states.value.scrollTop - }) => { - scrollLeft = Math.max(scrollLeft, 0); - scrollTop = Math.max(scrollTop, 0); - const _states = vue.unref(states); - if (scrollTop === _states.scrollTop && scrollLeft === _states.scrollLeft) { - return; - } - states.value = { - ..._states, - xAxisScrollDir: getScrollDir(_states.scrollLeft, scrollLeft), - yAxisScrollDir: getScrollDir(_states.scrollTop, scrollTop), - scrollLeft, - scrollTop, - updateRequested: true - }; - vue.nextTick(() => resetIsScrolling()); - onUpdated(); - emitEvents(); - }; - const scrollToItem = (rowIndex = 0, columnIdx = 0, alignment = AUTO_ALIGNMENT) => { - const _states = vue.unref(states); - columnIdx = Math.max(0, Math.min(columnIdx, props.totalColumn - 1)); - rowIndex = Math.max(0, Math.min(rowIndex, props.totalRow - 1)); - const scrollBarWidth = getScrollBarWidth(ns.namespace.value); - const _cache = vue.unref(cache); - const estimatedHeight = getEstimatedTotalHeight(props, _cache); - const estimatedWidth = getEstimatedTotalWidth(props, _cache); - scrollTo({ - scrollLeft: getColumnOffset(props, columnIdx, alignment, _states.scrollLeft, _cache, estimatedWidth > props.width ? scrollBarWidth : 0), - scrollTop: getRowOffset(props, rowIndex, alignment, _states.scrollTop, _cache, estimatedHeight > props.height ? scrollBarWidth : 0) - }); - }; - const getItemStyle = (rowIndex, columnIndex) => { - const { columnWidth, direction, rowHeight } = props; - const itemStyleCache = getItemStyleCache.value(clearCache && columnWidth, clearCache && rowHeight, clearCache && direction); - const key = `${rowIndex},${columnIndex}`; - if (hasOwn(itemStyleCache, key)) { - return itemStyleCache[key]; - } else { - const [, left] = getColumnPosition(props, columnIndex, vue.unref(cache)); - const _cache = vue.unref(cache); - const rtl = isRTL(direction); - const [height, top] = getRowPosition(props, rowIndex, _cache); - const [width] = getColumnPosition(props, columnIndex, _cache); - itemStyleCache[key] = { - position: "absolute", - left: rtl ? void 0 : `${left}px`, - right: rtl ? `${left}px` : void 0, - top: `${top}px`, - height: `${height}px`, - width: `${width}px` - }; - return itemStyleCache[key]; - } - }; - const resetIsScrolling = () => { - states.value.isScrolling = false; - vue.nextTick(() => { - getItemStyleCache.value(-1, null, null); - }); - }; - vue.onMounted(() => { - if (!isClient) - return; - const { initScrollLeft, initScrollTop } = props; - const windowElement = vue.unref(windowRef); - if (windowElement) { - if (isNumber(initScrollLeft)) { - windowElement.scrollLeft = initScrollLeft; - } - if (isNumber(initScrollTop)) { - windowElement.scrollTop = initScrollTop; - } - } - emitEvents(); - }); - const onUpdated = () => { - const { direction } = props; - const { scrollLeft, scrollTop, updateRequested } = vue.unref(states); - const windowElement = vue.unref(windowRef); - if (updateRequested && windowElement) { - if (direction === RTL) { - switch (getRTLOffsetType()) { - case RTL_OFFSET_NAG: { - windowElement.scrollLeft = -scrollLeft; - break; - } - case RTL_OFFSET_POS_ASC: { - windowElement.scrollLeft = scrollLeft; - break; - } - default: { - const { clientWidth, scrollWidth } = windowElement; - windowElement.scrollLeft = scrollWidth - clientWidth - scrollLeft; - break; - } - } - } else { - windowElement.scrollLeft = Math.max(0, scrollLeft); - } - windowElement.scrollTop = Math.max(0, scrollTop); - } - }; - const { resetAfterColumnIndex, resetAfterRowIndex, resetAfter } = instance.proxy; - expose({ - windowRef, - innerRef, - getItemStyleCache, - scrollTo, - scrollToItem, - states, - resetAfterColumnIndex, - resetAfterRowIndex, - resetAfter - }); - const renderScrollbars = () => { - const { - scrollbarAlwaysOn, - scrollbarStartGap, - scrollbarEndGap, - totalColumn, - totalRow - } = props; - const width = vue.unref(parsedWidth); - const height = vue.unref(parsedHeight); - const estimatedWidth = vue.unref(estimatedTotalWidth); - const estimatedHeight = vue.unref(estimatedTotalHeight); - const { scrollLeft, scrollTop } = vue.unref(states); - const horizontalScrollbar = vue.h(Scrollbar, { - ref: hScrollbar, - alwaysOn: scrollbarAlwaysOn, - startGap: scrollbarStartGap, - endGap: scrollbarEndGap, - class: ns.e("horizontal"), - clientSize: width, - layout: "horizontal", - onScroll: onHorizontalScroll, - ratio: width * 100 / estimatedWidth, - scrollFrom: scrollLeft / (estimatedWidth - width), - total: totalRow, - visible: true - }); - const verticalScrollbar = vue.h(Scrollbar, { - ref: vScrollbar, - alwaysOn: scrollbarAlwaysOn, - startGap: scrollbarStartGap, - endGap: scrollbarEndGap, - class: ns.e("vertical"), - clientSize: height, - layout: "vertical", - onScroll: onVerticalScroll, - ratio: height * 100 / estimatedHeight, - scrollFrom: scrollTop / (estimatedHeight - height), - total: totalColumn, - visible: true - }); - return { - horizontalScrollbar, - verticalScrollbar - }; - }; - const renderItems = () => { - var _a; - const [columnStart, columnEnd] = vue.unref(columnsToRender); - const [rowStart, rowEnd] = vue.unref(rowsToRender); - const { data, totalColumn, totalRow, useIsScrolling, itemKey } = props; - const children = []; - if (totalRow > 0 && totalColumn > 0) { - for (let row = rowStart; row <= rowEnd; row++) { - for (let column = columnStart; column <= columnEnd; column++) { - const key = itemKey({ columnIndex: column, data, rowIndex: row }); - children.push(vue.h(vue.Fragment, { key }, (_a = slots.default) == null ? void 0 : _a.call(slots, { - columnIndex: column, - data, - isScrolling: useIsScrolling ? vue.unref(states).isScrolling : void 0, - style: getItemStyle(row, column), - rowIndex: row - }))); - } - } - } - return children; - }; - const renderInner = () => { - const Inner = vue.resolveDynamicComponent(props.innerElement); - const children = renderItems(); - return [ - vue.h(Inner, { - style: vue.unref(innerStyle), - ref: innerRef - }, !isString$1(Inner) ? { - default: () => children - } : children) - ]; - }; - const renderWindow = () => { - const Container = vue.resolveDynamicComponent(props.containerElement); - const { horizontalScrollbar, verticalScrollbar } = renderScrollbars(); - const Inner = renderInner(); - return vue.h("div", { - key: 0, - class: ns.e("wrapper"), - role: props.role - }, [ - vue.h(Container, { - class: props.className, - style: vue.unref(windowStyle), - onScroll, - ref: windowRef - }, !isString$1(Container) ? { default: () => Inner } : Inner), - horizontalScrollbar, - verticalScrollbar - ]); - }; - return renderWindow; - } - }); - }; - var createGrid$1 = createGrid; - - const FixedSizeGrid = createGrid$1({ - name: "ElFixedSizeGrid", - getColumnPosition: ({ columnWidth }, index) => [ - columnWidth, - index * columnWidth - ], - getRowPosition: ({ rowHeight }, index) => [ - rowHeight, - index * rowHeight - ], - getEstimatedTotalHeight: ({ totalRow, rowHeight }) => rowHeight * totalRow, - getEstimatedTotalWidth: ({ totalColumn, columnWidth }) => columnWidth * totalColumn, - getColumnOffset: ({ totalColumn, columnWidth, width }, columnIndex, alignment, scrollLeft, _, scrollBarWidth) => { - width = Number(width); - const lastColumnOffset = Math.max(0, totalColumn * columnWidth - width); - const maxOffset = Math.min(lastColumnOffset, columnIndex * columnWidth); - const minOffset = Math.max(0, columnIndex * columnWidth - width + scrollBarWidth + columnWidth); - if (alignment === "smart") { - if (scrollLeft >= minOffset - width && scrollLeft <= maxOffset + width) { - alignment = AUTO_ALIGNMENT; - } else { - alignment = CENTERED_ALIGNMENT; - } - } - switch (alignment) { - case START_ALIGNMENT: - return maxOffset; - case END_ALIGNMENT: - return minOffset; - case CENTERED_ALIGNMENT: { - const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2); - if (middleOffset < Math.ceil(width / 2)) { - return 0; - } else if (middleOffset > lastColumnOffset + Math.floor(width / 2)) { - return lastColumnOffset; - } else { - return middleOffset; - } - } - case AUTO_ALIGNMENT: - default: - if (scrollLeft >= minOffset && scrollLeft <= maxOffset) { - return scrollLeft; - } else if (minOffset > maxOffset) { - return minOffset; - } else if (scrollLeft < minOffset) { - return minOffset; - } else { - return maxOffset; - } - } - }, - getRowOffset: ({ rowHeight, height, totalRow }, rowIndex, align, scrollTop, _, scrollBarWidth) => { - height = Number(height); - const lastRowOffset = Math.max(0, totalRow * rowHeight - height); - const maxOffset = Math.min(lastRowOffset, rowIndex * rowHeight); - const minOffset = Math.max(0, rowIndex * rowHeight - height + scrollBarWidth + rowHeight); - if (align === SMART_ALIGNMENT) { - if (scrollTop >= minOffset - height && scrollTop <= maxOffset + height) { - align = AUTO_ALIGNMENT; - } else { - align = CENTERED_ALIGNMENT; - } - } - switch (align) { - case START_ALIGNMENT: - return maxOffset; - case END_ALIGNMENT: - return minOffset; - case CENTERED_ALIGNMENT: { - const middleOffset = Math.round(minOffset + (maxOffset - minOffset) / 2); - if (middleOffset < Math.ceil(height / 2)) { - return 0; - } else if (middleOffset > lastRowOffset + Math.floor(height / 2)) { - return lastRowOffset; - } else { - return middleOffset; - } - } - case AUTO_ALIGNMENT: - default: - if (scrollTop >= minOffset && scrollTop <= maxOffset) { - return scrollTop; - } else if (minOffset > maxOffset) { - return minOffset; - } else if (scrollTop < minOffset) { - return minOffset; - } else { - return maxOffset; - } - } - }, - getColumnStartIndexForOffset: ({ columnWidth, totalColumn }, scrollLeft) => Math.max(0, Math.min(totalColumn - 1, Math.floor(scrollLeft / columnWidth))), - getColumnStopIndexForStartIndex: ({ columnWidth, totalColumn, width }, startIndex, scrollLeft) => { - const left = startIndex * columnWidth; - const visibleColumnsCount = Math.ceil((width + scrollLeft - left) / columnWidth); - return Math.max(0, Math.min(totalColumn - 1, startIndex + visibleColumnsCount - 1)); - }, - getRowStartIndexForOffset: ({ rowHeight, totalRow }, scrollTop) => Math.max(0, Math.min(totalRow - 1, Math.floor(scrollTop / rowHeight))), - getRowStopIndexForStartIndex: ({ rowHeight, totalRow, height }, startIndex, scrollTop) => { - const top = startIndex * rowHeight; - const numVisibleRows = Math.ceil((height + scrollTop - top) / rowHeight); - return Math.max(0, Math.min(totalRow - 1, startIndex + numVisibleRows - 1)); - }, - initCache: () => void 0, - clearCache: true, - validateProps: ({ columnWidth, rowHeight }) => { - } - }); - var FixedSizeGrid$1 = FixedSizeGrid; - - const { max, min, floor } = Math; - const ACCESS_SIZER_KEY_MAP = { - column: "columnWidth", - row: "rowHeight" - }; - const ACCESS_LAST_VISITED_KEY_MAP = { - column: "lastVisitedColumnIndex", - row: "lastVisitedRowIndex" - }; - const getItemFromCache = (props, index, gridCache, type) => { - const [cachedItems, sizer, lastVisited] = [ - gridCache[type], - props[ACCESS_SIZER_KEY_MAP[type]], - gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]] - ]; - if (index > lastVisited) { - let offset = 0; - if (lastVisited >= 0) { - const item = cachedItems[lastVisited]; - offset = item.offset + item.size; - } - for (let i = lastVisited + 1; i <= index; i++) { - const size = sizer(i); - cachedItems[i] = { - offset, - size - }; - offset += size; - } - gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]] = index; - } - return cachedItems[index]; - }; - const bs = (props, gridCache, low, high, offset, type) => { - while (low <= high) { - const mid = low + floor((high - low) / 2); - const currentOffset = getItemFromCache(props, mid, gridCache, type).offset; - if (currentOffset === offset) { - return mid; - } else if (currentOffset < offset) { - low = mid + 1; - } else { - high = mid - 1; - } - } - return max(0, low - 1); - }; - const es = (props, gridCache, idx, offset, type) => { - const total = type === "column" ? props.totalColumn : props.totalRow; - let exponent = 1; - while (idx < total && getItemFromCache(props, idx, gridCache, type).offset < offset) { - idx += exponent; - exponent *= 2; - } - return bs(props, gridCache, floor(idx / 2), min(idx, total - 1), offset, type); - }; - const findItem = (props, gridCache, offset, type) => { - const [cache, lastVisitedIndex] = [ - gridCache[type], - gridCache[ACCESS_LAST_VISITED_KEY_MAP[type]] - ]; - const lastVisitedItemOffset = lastVisitedIndex > 0 ? cache[lastVisitedIndex].offset : 0; - if (lastVisitedItemOffset >= offset) { - return bs(props, gridCache, 0, lastVisitedIndex, offset, type); - } - return es(props, gridCache, max(0, lastVisitedIndex), offset, type); - }; - const getEstimatedTotalHeight = ({ totalRow }, { estimatedRowHeight, lastVisitedRowIndex, row }) => { - let sizeOfVisitedRows = 0; - if (lastVisitedRowIndex >= totalRow) { - lastVisitedRowIndex = totalRow - 1; - } - if (lastVisitedRowIndex >= 0) { - const item = row[lastVisitedRowIndex]; - sizeOfVisitedRows = item.offset + item.size; - } - const unvisitedItems = totalRow - lastVisitedRowIndex - 1; - const sizeOfUnvisitedItems = unvisitedItems * estimatedRowHeight; - return sizeOfVisitedRows + sizeOfUnvisitedItems; - }; - const getEstimatedTotalWidth = ({ totalColumn }, { column, estimatedColumnWidth, lastVisitedColumnIndex }) => { - let sizeOfVisitedColumns = 0; - if (lastVisitedColumnIndex > totalColumn) { - lastVisitedColumnIndex = totalColumn - 1; - } - if (lastVisitedColumnIndex >= 0) { - const item = column[lastVisitedColumnIndex]; - sizeOfVisitedColumns = item.offset + item.size; - } - const unvisitedItems = totalColumn - lastVisitedColumnIndex - 1; - const sizeOfUnvisitedItems = unvisitedItems * estimatedColumnWidth; - return sizeOfVisitedColumns + sizeOfUnvisitedItems; - }; - const ACCESS_ESTIMATED_SIZE_KEY_MAP = { - column: getEstimatedTotalWidth, - row: getEstimatedTotalHeight - }; - const getOffset$1 = (props, index, alignment, scrollOffset, cache, type, scrollBarWidth) => { - const [size, estimatedSizeAssociates] = [ - type === "row" ? props.height : props.width, - ACCESS_ESTIMATED_SIZE_KEY_MAP[type] - ]; - const item = getItemFromCache(props, index, cache, type); - const estimatedSize = estimatedSizeAssociates(props, cache); - const maxOffset = max(0, min(estimatedSize - size, item.offset)); - const minOffset = max(0, item.offset - size + scrollBarWidth + item.size); - if (alignment === SMART_ALIGNMENT) { - if (scrollOffset >= minOffset - size && scrollOffset <= maxOffset + size) { - alignment = AUTO_ALIGNMENT; - } else { - alignment = CENTERED_ALIGNMENT; - } - } - switch (alignment) { - case START_ALIGNMENT: { - return maxOffset; - } - case END_ALIGNMENT: { - return minOffset; - } - case CENTERED_ALIGNMENT: { - return Math.round(minOffset + (maxOffset - minOffset) / 2); - } - case AUTO_ALIGNMENT: - default: { - if (scrollOffset >= minOffset && scrollOffset <= maxOffset) { - return scrollOffset; - } else if (minOffset > maxOffset) { - return minOffset; - } else if (scrollOffset < minOffset) { - return minOffset; - } else { - return maxOffset; - } - } - } - }; - const DynamicSizeGrid = createGrid$1({ - name: "ElDynamicSizeGrid", - getColumnPosition: (props, idx, cache) => { - const item = getItemFromCache(props, idx, cache, "column"); - return [item.size, item.offset]; - }, - getRowPosition: (props, idx, cache) => { - const item = getItemFromCache(props, idx, cache, "row"); - return [item.size, item.offset]; - }, - getColumnOffset: (props, columnIndex, alignment, scrollLeft, cache, scrollBarWidth) => getOffset$1(props, columnIndex, alignment, scrollLeft, cache, "column", scrollBarWidth), - getRowOffset: (props, rowIndex, alignment, scrollTop, cache, scrollBarWidth) => getOffset$1(props, rowIndex, alignment, scrollTop, cache, "row", scrollBarWidth), - getColumnStartIndexForOffset: (props, scrollLeft, cache) => findItem(props, cache, scrollLeft, "column"), - getColumnStopIndexForStartIndex: (props, startIndex, scrollLeft, cache) => { - const item = getItemFromCache(props, startIndex, cache, "column"); - const maxOffset = scrollLeft + props.width; - let offset = item.offset + item.size; - let stopIndex = startIndex; - while (stopIndex < props.totalColumn - 1 && offset < maxOffset) { - stopIndex++; - offset += getItemFromCache(props, startIndex, cache, "column").size; - } - return stopIndex; - }, - getEstimatedTotalHeight, - getEstimatedTotalWidth, - getRowStartIndexForOffset: (props, scrollTop, cache) => findItem(props, cache, scrollTop, "row"), - getRowStopIndexForStartIndex: (props, startIndex, scrollTop, cache) => { - const { totalRow, height } = props; - const item = getItemFromCache(props, startIndex, cache, "row"); - const maxOffset = scrollTop + height; - let offset = item.size + item.offset; - let stopIndex = startIndex; - while (stopIndex < totalRow - 1 && offset < maxOffset) { - stopIndex++; - offset += getItemFromCache(props, stopIndex, cache, "row").size; - } - return stopIndex; - }, - injectToInstance: (instance, cache) => { - const resetAfter = ({ columnIndex, rowIndex }, forceUpdate) => { - var _a, _b; - forceUpdate = isUndefined(forceUpdate) ? true : forceUpdate; - if (isNumber(columnIndex)) { - cache.value.lastVisitedColumnIndex = Math.min(cache.value.lastVisitedColumnIndex, columnIndex - 1); - } - if (isNumber(rowIndex)) { - cache.value.lastVisitedRowIndex = Math.min(cache.value.lastVisitedRowIndex, rowIndex - 1); - } - (_a = instance.exposed) == null ? void 0 : _a.getItemStyleCache.value(-1, null, null); - if (forceUpdate) - (_b = instance.proxy) == null ? void 0 : _b.$forceUpdate(); - }; - const resetAfterColumnIndex = (columnIndex, forceUpdate) => { - resetAfter({ - columnIndex - }, forceUpdate); - }; - const resetAfterRowIndex = (rowIndex, forceUpdate) => { - resetAfter({ - rowIndex - }, forceUpdate); - }; - Object.assign(instance.proxy, { - resetAfterColumnIndex, - resetAfterRowIndex, - resetAfter - }); - }, - initCache: ({ - estimatedColumnWidth = DEFAULT_DYNAMIC_LIST_ITEM_SIZE, - estimatedRowHeight = DEFAULT_DYNAMIC_LIST_ITEM_SIZE - }) => { - const cache = { - column: {}, - estimatedColumnWidth, - estimatedRowHeight, - lastVisitedColumnIndex: -1, - lastVisitedRowIndex: -1, - row: {} - }; - return cache; - }, - clearCache: false, - validateProps: ({ columnWidth, rowHeight }) => { - } - }); - var DynamicSizeGrid$1 = DynamicSizeGrid; - - const _sfc_main$O = vue.defineComponent({ - props: { - item: { - type: Object, - required: true - }, - style: { - type: Object - }, - height: Number - }, - setup() { - const ns = useNamespace("select"); - return { - ns - }; - } - }); - function _sfc_render$7(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(_ctx.ns.be("group", "title")), - style: vue.normalizeStyle({ ..._ctx.style, lineHeight: `${_ctx.height}px` }) - }, vue.toDisplayString(_ctx.item.label), 7); - } - var GroupItem = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["render", _sfc_render$7], ["__file", "group-item.vue"]]); - - function useOption(props, { emit }) { - return { - hoverItem: () => { - if (!props.disabled) { - emit("hover", props.index); - } - }, - selectOptionClick: () => { - if (!props.disabled) { - emit("select", props.item, props.index); - } - } - }; - } - - const defaultProps$4 = { - label: "label", - value: "value", - disabled: "disabled", - options: "options" - }; - function useProps(props) { - const aliasProps = vue.computed(() => ({ ...defaultProps$4, ...props.props })); - const getLabel = (option) => get(option, aliasProps.value.label); - const getValue = (option) => get(option, aliasProps.value.value); - const getDisabled = (option) => get(option, aliasProps.value.disabled); - const getOptions = (option) => get(option, aliasProps.value.options); - return { - aliasProps, - getLabel, - getValue, - getDisabled, - getOptions - }; - } - - const SelectProps = buildProps({ - allowCreate: Boolean, - autocomplete: { - type: definePropType(String), - default: "none" - }, - automaticDropdown: Boolean, - clearable: Boolean, - clearIcon: { - type: iconPropType, - default: circle_close_default - }, - effect: { - type: definePropType(String), - default: "light" - }, - collapseTags: Boolean, - collapseTagsTooltip: Boolean, - maxCollapseTags: { - type: Number, - default: 1 - }, - defaultFirstOption: Boolean, - disabled: Boolean, - estimatedOptionHeight: { - type: Number, - default: void 0 - }, - filterable: Boolean, - filterMethod: Function, - height: { - type: Number, - default: 274 - }, - itemHeight: { - type: Number, - default: 34 - }, - id: String, - loading: Boolean, - loadingText: String, - modelValue: { - type: definePropType([Array, String, Number, Boolean, Object]) - }, - multiple: Boolean, - multipleLimit: { - type: Number, - default: 0 - }, - name: String, - noDataText: String, - noMatchText: String, - remoteMethod: Function, - reserveKeyword: { - type: Boolean, - default: true - }, - options: { - type: definePropType(Array), - required: true - }, - placeholder: { - type: String - }, - teleported: useTooltipContentProps.teleported, - persistent: { - type: Boolean, - default: true - }, - popperClass: { - type: String, - default: "" - }, - popperOptions: { - type: definePropType(Object), - default: () => ({}) - }, - remote: Boolean, - size: useSizeProp, - props: { - type: definePropType(Object), - default: () => defaultProps$4 - }, - valueKey: { - type: String, - default: "value" - }, - scrollbarAlwaysOn: Boolean, - validateEvent: { - type: Boolean, - default: true - }, - offset: { - type: Number, - default: 12 - }, - showArrow: { - type: Boolean, - default: true - }, - placement: { - type: definePropType(String), - values: Ee, - default: "bottom-start" - }, - fallbackPlacements: { - type: definePropType(Array), - default: ["bottom-start", "top-start", "right", "left"] - }, - tagType: { ...tagProps.type, default: "info" }, - tagEffect: { ...tagProps.effect, default: "light" }, - tabindex: { - type: [String, Number], - default: 0 - }, - appendTo: String, - fitInputWidth: { - type: [Boolean, Number], - default: true, - validator(val) { - return isBoolean(val) || isNumber(val); - } - }, - ...useEmptyValuesProps, - ...useAriaProps(["ariaLabel"]) - }); - const OptionProps = buildProps({ - data: Array, - disabled: Boolean, - hovering: Boolean, - item: { - type: definePropType(Object), - required: true - }, - index: Number, - style: Object, - selected: Boolean, - created: Boolean - }); - const selectEmits = { - [UPDATE_MODEL_EVENT]: (val) => true, - [CHANGE_EVENT]: (val) => true, - "remove-tag": (val) => true, - "visible-change": (visible) => true, - focus: (evt) => evt instanceof FocusEvent, - blur: (evt) => evt instanceof FocusEvent, - clear: () => true - }; - const optionEmits = { - hover: (index) => isNumber(index), - select: (val, index) => true - }; - - const selectV2InjectionKey = Symbol("ElSelectV2Injection"); - - const _sfc_main$N = vue.defineComponent({ - props: OptionProps, - emits: optionEmits, - setup(props, { emit }) { - const select = vue.inject(selectV2InjectionKey); - const ns = useNamespace("select"); - const { hoverItem, selectOptionClick } = useOption(props, { emit }); - const { getLabel } = useProps(select.props); - return { - ns, - hoverItem, - selectOptionClick, - getLabel - }; - } - }); - function _sfc_render$6(_ctx, _cache, $props, $setup, $data, $options) { - return vue.openBlock(), vue.createElementBlock("li", { - "aria-selected": _ctx.selected, - style: vue.normalizeStyle(_ctx.style), - class: vue.normalizeClass([ - _ctx.ns.be("dropdown", "item"), - _ctx.ns.is("selected", _ctx.selected), - _ctx.ns.is("disabled", _ctx.disabled), - _ctx.ns.is("created", _ctx.created), - _ctx.ns.is("hovering", _ctx.hovering) - ]), - onMousemove: _ctx.hoverItem, - onClick: vue.withModifiers(_ctx.selectOptionClick, ["stop"]) - }, [ - vue.renderSlot(_ctx.$slots, "default", { - item: _ctx.item, - index: _ctx.index, - disabled: _ctx.disabled - }, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(_ctx.getLabel(_ctx.item)), 1) - ]) - ], 46, ["aria-selected", "onMousemove", "onClick"]); - } - var OptionItem = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["render", _sfc_render$6], ["__file", "option-item.vue"]]); - - const props = { - loading: Boolean, - data: { - type: Array, - required: true - }, - hoveringIndex: Number, - width: Number - }; - var ElSelectMenu = vue.defineComponent({ - name: "ElSelectDropdown", - props, - setup(props2, { - slots, - expose - }) { - const select = vue.inject(selectV2InjectionKey); - const ns = useNamespace("select"); - const { - getLabel, - getValue, - getDisabled - } = useProps(select.props); - const cachedHeights = vue.ref([]); - const listRef = vue.ref(); - const size = vue.computed(() => props2.data.length); - vue.watch(() => size.value, () => { - var _a, _b; - (_b = (_a = select.tooltipRef.value).updatePopper) == null ? void 0 : _b.call(_a); - }); - const isSized = vue.computed(() => isUndefined(select.props.estimatedOptionHeight)); - const listProps = vue.computed(() => { - if (isSized.value) { - return { - itemSize: select.props.itemHeight - }; - } - return { - estimatedSize: select.props.estimatedOptionHeight, - itemSize: (idx) => cachedHeights.value[idx] - }; - }); - const contains = (arr = [], target) => { - const { - props: { - valueKey - } - } = select; - if (!isObject$1(target)) { - return arr.includes(target); - } - return arr && arr.some((item) => { - return vue.toRaw(get(item, valueKey)) === get(target, valueKey); - }); - }; - const isEqual = (selected, target) => { - if (!isObject$1(target)) { - return selected === target; - } else { - const { - valueKey - } = select.props; - return get(selected, valueKey) === get(target, valueKey); - } - }; - const isItemSelected = (modelValue, target) => { - if (select.props.multiple) { - return contains(modelValue, getValue(target)); - } - return isEqual(modelValue, getValue(target)); - }; - const isItemDisabled = (modelValue, selected) => { - const { - disabled, - multiple, - multipleLimit - } = select.props; - return disabled || !selected && (multiple ? multipleLimit > 0 && modelValue.length >= multipleLimit : false); - }; - const isItemHovering = (target) => props2.hoveringIndex === target; - const scrollToItem = (index) => { - const list = listRef.value; - if (list) { - list.scrollToItem(index); - } - }; - const resetScrollTop = () => { - const list = listRef.value; - if (list) { - list.resetScrollTop(); - } - }; - const exposed = { - listRef, - isSized, - isItemDisabled, - isItemHovering, - isItemSelected, - scrollToItem, - resetScrollTop - }; - expose(exposed); - const Item = (itemProps) => { - const { - index, - data, - style - } = itemProps; - const sized = vue.unref(isSized); - const { - itemSize, - estimatedSize - } = vue.unref(listProps); - const { - modelValue - } = select.props; - const { - onSelect, - onHover - } = select; - const item = data[index]; - if (item.type === "Group") { - return vue.createVNode(GroupItem, { - "item": item, - "style": style, - "height": sized ? itemSize : estimatedSize - }, null); - } - const isSelected = isItemSelected(modelValue, item); - const isDisabled = isItemDisabled(modelValue, isSelected); - const isHovering = isItemHovering(index); - return vue.createVNode(OptionItem, vue.mergeProps(itemProps, { - "selected": isSelected, - "disabled": getDisabled(item) || isDisabled, - "created": !!item.created, - "hovering": isHovering, - "item": item, - "onSelect": onSelect, - "onHover": onHover - }), { - default: (props3) => { - var _a; - return ((_a = slots.default) == null ? void 0 : _a.call(slots, props3)) || vue.createVNode("span", null, [getLabel(item)]); - } - }); - }; - const { - onKeyboardNavigate, - onKeyboardSelect - } = select; - const onForward = () => { - onKeyboardNavigate("forward"); - }; - const onBackward = () => { - onKeyboardNavigate("backward"); - }; - const onKeydown = (e) => { - const { - code - } = e; - const { - tab, - esc, - down, - up, - enter, - numpadEnter - } = EVENT_CODE; - if (code !== tab) { - e.preventDefault(); - e.stopPropagation(); - } - switch (code) { - case tab: - case esc: - break; - case down: - onForward(); - break; - case up: - onBackward(); - break; - case enter: - case numpadEnter: - onKeyboardSelect(); - break; - } - }; - return () => { - var _a, _b, _c, _d; - const { - data, - width - } = props2; - const { - height, - multiple, - scrollbarAlwaysOn - } = select.props; - const List = vue.unref(isSized) ? FixedSizeList$1 : DynamicSizeList$1; - return vue.createVNode("div", { - "class": [ns.b("dropdown"), ns.is("multiple", multiple)], - "style": { - width: `${width}px` - } - }, [(_a = slots.header) == null ? void 0 : _a.call(slots), ((_b = slots.loading) == null ? void 0 : _b.call(slots)) || ((_c = slots.empty) == null ? void 0 : _c.call(slots)) || vue.createVNode(List, vue.mergeProps({ - "ref": listRef - }, vue.unref(listProps), { - "className": ns.be("dropdown", "list"), - "scrollbarAlwaysOn": scrollbarAlwaysOn, - "data": data, - "height": height, - "width": width, - "total": data.length, - "onKeydown": onKeydown - }), { - default: (props3) => vue.createVNode(Item, props3, null) - }), (_d = slots.footer) == null ? void 0 : _d.call(slots)]); - }; - } - }); - - function useAllowCreate(props, states) { - const { aliasProps, getLabel, getValue } = useProps(props); - const createOptionCount = vue.ref(0); - const cachedSelectedOption = vue.ref(); - const enableAllowCreateMode = vue.computed(() => { - return props.allowCreate && props.filterable; - }); - function hasExistingOption(query) { - const hasOption = (option) => getLabel(option) === query; - return props.options && props.options.some(hasOption) || states.createdOptions.some(hasOption); - } - function selectNewOption(option) { - if (!enableAllowCreateMode.value) { - return; - } - if (props.multiple && option.created) { - createOptionCount.value++; - } else { - cachedSelectedOption.value = option; - } - } - function createNewOption(query) { - if (enableAllowCreateMode.value) { - if (query && query.length > 0) { - if (hasExistingOption(query)) { - return; - } - const newOption = { - [aliasProps.value.value]: query, - [aliasProps.value.label]: query, - created: true, - [aliasProps.value.disabled]: false - }; - if (states.createdOptions.length >= createOptionCount.value) { - states.createdOptions[createOptionCount.value] = newOption; - } else { - states.createdOptions.push(newOption); - } - } else { - if (props.multiple) { - states.createdOptions.length = createOptionCount.value; - } else { - const selectedOption = cachedSelectedOption.value; - states.createdOptions.length = 0; - if (selectedOption && selectedOption.created) { - states.createdOptions.push(selectedOption); - } - } - } - } - } - function removeNewOption(option) { - if (!enableAllowCreateMode.value || !option || !option.created || option.created && props.reserveKeyword && states.inputValue === getLabel(option)) { - return; - } - const idx = states.createdOptions.findIndex((it) => getValue(it) === getValue(option)); - if (~idx) { - states.createdOptions.splice(idx, 1); - createOptionCount.value--; - } - } - function clearAllNewOption() { - if (enableAllowCreateMode.value) { - states.createdOptions.length = 0; - createOptionCount.value = 0; - } - } - return { - createNewOption, - removeNewOption, - selectNewOption, - clearAllNewOption - }; - } - - const useSelect$1 = (props, emit) => { - const { t } = useLocale(); - const nsSelect = useNamespace("select"); - const nsInput = useNamespace("input"); - const { form: elForm, formItem: elFormItem } = useFormItem(); - const { inputId } = useFormItemInputId(props, { - formItemContext: elFormItem - }); - const { aliasProps, getLabel, getValue, getDisabled, getOptions } = useProps(props); - const { valueOnClear, isEmptyValue } = useEmptyValues(props); - const states = vue.reactive({ - inputValue: "", - cachedOptions: [], - createdOptions: [], - hoveringIndex: -1, - inputHovering: false, - selectionWidth: 0, - collapseItemWidth: 0, - previousQuery: null, - previousValue: void 0, - selectedLabel: "", - menuVisibleOnFocus: false, - isBeforeHide: false - }); - const popperSize = vue.ref(-1); - const selectRef = vue.ref(); - const selectionRef = vue.ref(); - const tooltipRef = vue.ref(); - const tagTooltipRef = vue.ref(); - const inputRef = vue.ref(); - const prefixRef = vue.ref(); - const suffixRef = vue.ref(); - const menuRef = vue.ref(); - const tagMenuRef = vue.ref(); - const collapseItemRef = vue.ref(); - const { - isComposing, - handleCompositionStart, - handleCompositionEnd, - handleCompositionUpdate - } = useComposition({ - afterComposition: (e) => onInput(e) - }); - const { wrapperRef, isFocused, handleBlur } = useFocusController(inputRef, { - beforeFocus() { - return selectDisabled.value; - }, - afterFocus() { - if (props.automaticDropdown && !expanded.value) { - expanded.value = true; - states.menuVisibleOnFocus = true; - } - }, - beforeBlur(event) { - var _a, _b; - return ((_a = tooltipRef.value) == null ? void 0 : _a.isFocusInsideContent(event)) || ((_b = tagTooltipRef.value) == null ? void 0 : _b.isFocusInsideContent(event)); - }, - afterBlur() { - expanded.value = false; - states.menuVisibleOnFocus = false; - } - }); - const allOptions = vue.ref([]); - const filteredOptions = vue.ref([]); - const expanded = vue.ref(false); - const selectDisabled = vue.computed(() => props.disabled || (elForm == null ? void 0 : elForm.disabled)); - const needStatusIcon = vue.computed(() => { - var _a; - return (_a = elForm == null ? void 0 : elForm.statusIcon) != null ? _a : false; - }); - const popupHeight = vue.computed(() => { - const totalHeight = filteredOptions.value.length * props.itemHeight; - return totalHeight > props.height ? props.height : totalHeight; - }); - const hasModelValue = vue.computed(() => { - return props.multiple ? isArray$1(props.modelValue) && props.modelValue.length > 0 : !isEmptyValue(props.modelValue); - }); - const showClearBtn = vue.computed(() => { - return props.clearable && !selectDisabled.value && states.inputHovering && hasModelValue.value; - }); - const iconComponent = vue.computed(() => props.remote && props.filterable ? "" : arrow_down_default); - const iconReverse = vue.computed(() => iconComponent.value && nsSelect.is("reverse", expanded.value)); - const validateState = vue.computed(() => (elFormItem == null ? void 0 : elFormItem.validateState) || ""); - const validateIcon = vue.computed(() => { - if (!validateState.value) - return; - return ValidateComponentsMap[validateState.value]; - }); - const debounce$1 = vue.computed(() => props.remote ? 300 : 0); - const emptyText = vue.computed(() => { - if (props.loading) { - return props.loadingText || t("el.select.loading"); - } else { - if (props.remote && !states.inputValue && allOptions.value.length === 0) - return false; - if (props.filterable && states.inputValue && allOptions.value.length > 0 && filteredOptions.value.length === 0) { - return props.noMatchText || t("el.select.noMatch"); - } - if (allOptions.value.length === 0) { - return props.noDataText || t("el.select.noData"); - } - } - return null; - }); - const filterOptions = (query) => { - const isValidOption = (o) => { - if (props.filterable && isFunction$1(props.filterMethod)) - return true; - if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) - return true; - const regexp = new RegExp(escapeStringRegexp(query), "i"); - return query ? regexp.test(getLabel(o) || "") : true; - }; - if (props.loading) { - return []; - } - return [...states.createdOptions, ...props.options].reduce((all, item) => { - const options = getOptions(item); - if (isArray$1(options)) { - const filtered = options.filter(isValidOption); - if (filtered.length > 0) { - all.push({ - label: getLabel(item), - type: "Group" - }, ...filtered); - } - } else if (props.remote || isValidOption(item)) { - all.push(item); - } - return all; - }, []); - }; - const updateOptions = () => { - allOptions.value = filterOptions(""); - filteredOptions.value = filterOptions(states.inputValue); - }; - const allOptionsValueMap = vue.computed(() => { - const valueMap = /* @__PURE__ */ new Map(); - allOptions.value.forEach((option, index) => { - valueMap.set(getValueKey(getValue(option)), { option, index }); - }); - return valueMap; - }); - const filteredOptionsValueMap = vue.computed(() => { - const valueMap = /* @__PURE__ */ new Map(); - filteredOptions.value.forEach((option, index) => { - valueMap.set(getValueKey(getValue(option)), { option, index }); - }); - return valueMap; - }); - const optionsAllDisabled = vue.computed(() => filteredOptions.value.every((option) => getDisabled(option))); - const selectSize = useFormSize(); - const collapseTagSize = vue.computed(() => selectSize.value === "small" ? "small" : "default"); - const calculatePopperSize = () => { - var _a; - if (isNumber(props.fitInputWidth)) { - popperSize.value = props.fitInputWidth; - return; - } - const width = ((_a = selectRef.value) == null ? void 0 : _a.offsetWidth) || 200; - if (!props.fitInputWidth && allOptions.value.length > 0) { - vue.nextTick(() => { - popperSize.value = Math.max(width, calculateLabelMaxWidth()); - }); - } else { - popperSize.value = width; - } - }; - const calculateLabelMaxWidth = () => { - var _a, _b; - const canvas = document.createElement("canvas"); - const ctx = canvas.getContext("2d"); - const selector = nsSelect.be("dropdown", "item"); - const dom = ((_b = (_a = menuRef.value) == null ? void 0 : _a.listRef) == null ? void 0 : _b.innerRef) || document; - const dropdownItemEl = dom.querySelector(`.${selector}`); - if (dropdownItemEl === null || ctx === null) - return 0; - const style = getComputedStyle(dropdownItemEl); - const padding = Number.parseFloat(style.paddingLeft) + Number.parseFloat(style.paddingRight); - ctx.font = style.font; - const maxWidth = filteredOptions.value.reduce((max, option) => { - const metrics = ctx.measureText(getLabel(option)); - return Math.max(metrics.width, max); - }, 0); - return maxWidth + padding; - }; - const getGapWidth = () => { - if (!selectionRef.value) - return 0; - const style = window.getComputedStyle(selectionRef.value); - return Number.parseFloat(style.gap || "6px"); - }; - const tagStyle = vue.computed(() => { - const gapWidth = getGapWidth(); - const maxWidth = collapseItemRef.value && props.maxCollapseTags === 1 ? states.selectionWidth - states.collapseItemWidth - gapWidth : states.selectionWidth; - return { maxWidth: `${maxWidth}px` }; - }); - const collapseTagStyle = vue.computed(() => { - return { maxWidth: `${states.selectionWidth}px` }; - }); - const shouldShowPlaceholder = vue.computed(() => { - if (isArray$1(props.modelValue)) { - return props.modelValue.length === 0 && !states.inputValue; - } - return props.filterable ? !states.inputValue : true; - }); - const currentPlaceholder = vue.computed(() => { - var _a; - const _placeholder = (_a = props.placeholder) != null ? _a : t("el.select.placeholder"); - return props.multiple || !hasModelValue.value ? _placeholder : states.selectedLabel; - }); - const popperRef = vue.computed(() => { - var _a, _b; - return (_b = (_a = tooltipRef.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef; - }); - const indexRef = vue.computed(() => { - if (props.multiple) { - const len = props.modelValue.length; - if (props.modelValue.length > 0 && filteredOptionsValueMap.value.has(props.modelValue[len - 1])) { - const { index } = filteredOptionsValueMap.value.get(props.modelValue[len - 1]); - return index; - } - } else { - if (!isEmptyValue(props.modelValue) && filteredOptionsValueMap.value.has(props.modelValue)) { - const { index } = filteredOptionsValueMap.value.get(props.modelValue); - return index; - } - } - return -1; - }); - const dropdownMenuVisible = vue.computed({ - get() { - return expanded.value && emptyText.value !== false; - }, - set(val) { - expanded.value = val; - } - }); - const showTagList = vue.computed(() => { - if (!props.multiple) { - return []; - } - return props.collapseTags ? states.cachedOptions.slice(0, props.maxCollapseTags) : states.cachedOptions; - }); - const collapseTagList = vue.computed(() => { - if (!props.multiple) { - return []; - } - return props.collapseTags ? states.cachedOptions.slice(props.maxCollapseTags) : []; - }); - const { - createNewOption, - removeNewOption, - selectNewOption, - clearAllNewOption - } = useAllowCreate(props, states); - const toggleMenu = () => { - if (selectDisabled.value) - return; - if (states.menuVisibleOnFocus) { - states.menuVisibleOnFocus = false; - } else { - expanded.value = !expanded.value; - } - }; - const onInputChange = () => { - if (states.inputValue.length > 0 && !expanded.value) { - expanded.value = true; - } - createNewOption(states.inputValue); - handleQueryChange(states.inputValue); - }; - const debouncedOnInputChange = debounce(onInputChange, debounce$1.value); - const handleQueryChange = (val) => { - if (states.previousQuery === val || isComposing.value) { - return; - } - states.previousQuery = val; - if (props.filterable && isFunction$1(props.filterMethod)) { - props.filterMethod(val); - } else if (props.filterable && props.remote && isFunction$1(props.remoteMethod)) { - props.remoteMethod(val); - } - if (props.defaultFirstOption && (props.filterable || props.remote) && filteredOptions.value.length) { - vue.nextTick(checkDefaultFirstOption); - } else { - vue.nextTick(updateHoveringIndex); - } - }; - const checkDefaultFirstOption = () => { - const optionsInDropdown = filteredOptions.value.filter((n) => !n.disabled && n.type !== "Group"); - const userCreatedOption = optionsInDropdown.find((n) => n.created); - const firstOriginOption = optionsInDropdown[0]; - states.hoveringIndex = getValueIndex(filteredOptions.value, userCreatedOption || firstOriginOption); - }; - const emitChange = (val) => { - if (!isEqual$1(props.modelValue, val)) { - emit(CHANGE_EVENT, val); - } - }; - const update = (val) => { - emit(UPDATE_MODEL_EVENT, val); - emitChange(val); - states.previousValue = props.multiple ? String(val) : val; - }; - const getValueIndex = (arr = [], value) => { - if (!isObject$1(value)) { - return arr.indexOf(value); - } - const valueKey = props.valueKey; - let index = -1; - arr.some((item, i) => { - if (get(item, valueKey) === get(value, valueKey)) { - index = i; - return true; - } - return false; - }); - return index; - }; - const getValueKey = (item) => { - return isObject$1(item) ? get(item, props.valueKey) : item; - }; - const handleResize = () => { - calculatePopperSize(); - }; - const resetSelectionWidth = () => { - states.selectionWidth = selectionRef.value.getBoundingClientRect().width; - }; - const resetCollapseItemWidth = () => { - states.collapseItemWidth = collapseItemRef.value.getBoundingClientRect().width; - }; - const updateTooltip = () => { - var _a, _b; - (_b = (_a = tooltipRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a); - }; - const updateTagTooltip = () => { - var _a, _b; - (_b = (_a = tagTooltipRef.value) == null ? void 0 : _a.updatePopper) == null ? void 0 : _b.call(_a); - }; - const onSelect = (option) => { - if (props.multiple) { - let selectedOptions = props.modelValue.slice(); - const index = getValueIndex(selectedOptions, getValue(option)); - if (index > -1) { - selectedOptions = [ - ...selectedOptions.slice(0, index), - ...selectedOptions.slice(index + 1) - ]; - states.cachedOptions.splice(index, 1); - removeNewOption(option); - } else if (props.multipleLimit <= 0 || selectedOptions.length < props.multipleLimit) { - selectedOptions = [...selectedOptions, getValue(option)]; - states.cachedOptions.push(option); - selectNewOption(option); - } - update(selectedOptions); - if (option.created) { - handleQueryChange(""); - } - if (props.filterable && !props.reserveKeyword) { - states.inputValue = ""; - } - } else { - states.selectedLabel = getLabel(option); - update(getValue(option)); - expanded.value = false; - selectNewOption(option); - if (!option.created) { - clearAllNewOption(); - } - } - focus(); - }; - const deleteTag = (event, option) => { - let selectedOptions = props.modelValue.slice(); - const index = getValueIndex(selectedOptions, getValue(option)); - if (index > -1 && !selectDisabled.value) { - selectedOptions = [ - ...props.modelValue.slice(0, index), - ...props.modelValue.slice(index + 1) - ]; - states.cachedOptions.splice(index, 1); - update(selectedOptions); - emit("remove-tag", getValue(option)); - removeNewOption(option); - } - event.stopPropagation(); - focus(); - }; - const focus = () => { - var _a; - (_a = inputRef.value) == null ? void 0 : _a.focus(); - }; - const blur = () => { - var _a; - if (expanded.value) { - expanded.value = false; - vue.nextTick(() => { - var _a2; - return (_a2 = inputRef.value) == null ? void 0 : _a2.blur(); - }); - return; - } - (_a = inputRef.value) == null ? void 0 : _a.blur(); - }; - const handleEsc = () => { - if (states.inputValue.length > 0) { - states.inputValue = ""; - } else { - expanded.value = false; - } - }; - const getLastNotDisabledIndex = (value) => findLastIndex(value, (it) => !states.cachedOptions.some((option) => getValue(option) === it && getDisabled(option))); - const handleDel = (e) => { - if (!props.multiple) - return; - if (e.code === EVENT_CODE.delete) - return; - if (states.inputValue.length === 0) { - e.preventDefault(); - const selected = props.modelValue.slice(); - const lastNotDisabledIndex = getLastNotDisabledIndex(selected); - if (lastNotDisabledIndex < 0) - return; - const removeTagValue = selected[lastNotDisabledIndex]; - selected.splice(lastNotDisabledIndex, 1); - const option = states.cachedOptions[lastNotDisabledIndex]; - states.cachedOptions.splice(lastNotDisabledIndex, 1); - removeNewOption(option); - update(selected); - emit("remove-tag", removeTagValue); - } - }; - const handleClear = () => { - let emptyValue; - if (isArray$1(props.modelValue)) { - emptyValue = []; - } else { - emptyValue = valueOnClear.value; - } - if (props.multiple) { - states.cachedOptions = []; - } else { - states.selectedLabel = ""; - } - expanded.value = false; - update(emptyValue); - emit("clear"); - clearAllNewOption(); - focus(); - }; - const onKeyboardNavigate = (direction, hoveringIndex = void 0) => { - const options = filteredOptions.value; - if (!["forward", "backward"].includes(direction) || selectDisabled.value || options.length <= 0 || optionsAllDisabled.value || isComposing.value) { - return; - } - if (!expanded.value) { - return toggleMenu(); - } - if (hoveringIndex === void 0) { - hoveringIndex = states.hoveringIndex; - } - let newIndex = -1; - if (direction === "forward") { - newIndex = hoveringIndex + 1; - if (newIndex >= options.length) { - newIndex = 0; - } - } else if (direction === "backward") { - newIndex = hoveringIndex - 1; - if (newIndex < 0 || newIndex >= options.length) { - newIndex = options.length - 1; - } - } - const option = options[newIndex]; - if (getDisabled(option) || option.type === "Group") { - return onKeyboardNavigate(direction, newIndex); - } else { - states.hoveringIndex = newIndex; - scrollToItem(newIndex); - } - }; - const onKeyboardSelect = () => { - if (!expanded.value) { - return toggleMenu(); - } else if (~states.hoveringIndex && filteredOptions.value[states.hoveringIndex]) { - onSelect(filteredOptions.value[states.hoveringIndex]); - } - }; - const onHoverOption = (idx) => { - states.hoveringIndex = idx != null ? idx : -1; - }; - const updateHoveringIndex = () => { - if (!props.multiple) { - states.hoveringIndex = filteredOptions.value.findIndex((item) => { - return getValueKey(item) === getValueKey(props.modelValue); - }); - } else { - states.hoveringIndex = filteredOptions.value.findIndex((item) => props.modelValue.some((modelValue) => getValueKey(modelValue) === getValueKey(item))); - } - }; - const onInput = (event) => { - states.inputValue = event.target.value; - if (props.remote) { - debouncedOnInputChange(); - } else { - return onInputChange(); - } - }; - const handleClickOutside = (event) => { - expanded.value = false; - if (isFocused.value) { - const _event = new FocusEvent("focus", event); - handleBlur(_event); - } - }; - const handleMenuEnter = () => { - states.isBeforeHide = false; - return vue.nextTick(() => { - if (~indexRef.value) { - scrollToItem(states.hoveringIndex); - } - }); - }; - const scrollToItem = (index) => { - menuRef.value.scrollToItem(index); - }; - const getOption = (value, cachedOptions) => { - const selectValue = getValueKey(value); - if (allOptionsValueMap.value.has(selectValue)) { - const { option } = allOptionsValueMap.value.get(selectValue); - return option; - } - if (cachedOptions && cachedOptions.length) { - const option = cachedOptions.find((option2) => getValueKey(getValue(option2)) === selectValue); - if (option) { - return option; - } - } - return { - [aliasProps.value.value]: value, - [aliasProps.value.label]: value - }; - }; - const initStates = (needUpdateSelectedLabel = false) => { - if (props.multiple) { - if (props.modelValue.length > 0) { - const cachedOptions = states.cachedOptions.slice(); - states.cachedOptions.length = 0; - states.previousValue = props.modelValue.toString(); - for (const value of props.modelValue) { - const option = getOption(value, cachedOptions); - states.cachedOptions.push(option); - } - } else { - states.cachedOptions = []; - states.previousValue = void 0; - } - } else { - if (hasModelValue.value) { - states.previousValue = props.modelValue; - const options = filteredOptions.value; - const selectedItemIndex = options.findIndex((option) => getValueKey(getValue(option)) === getValueKey(props.modelValue)); - if (~selectedItemIndex) { - states.selectedLabel = getLabel(options[selectedItemIndex]); - } else { - if (!states.selectedLabel || needUpdateSelectedLabel) { - states.selectedLabel = getValueKey(props.modelValue); - } - } - } else { - states.selectedLabel = ""; - states.previousValue = void 0; - } - } - clearAllNewOption(); - calculatePopperSize(); - }; - vue.watch(() => props.fitInputWidth, () => { - calculatePopperSize(); - }); - vue.watch(expanded, (val) => { - if (val) { - if (!props.persistent) { - calculatePopperSize(); - } - handleQueryChange(""); - } else { - states.inputValue = ""; - states.previousQuery = null; - states.isBeforeHide = true; - createNewOption(""); - } - emit("visible-change", val); - }); - vue.watch(() => props.modelValue, (val, oldVal) => { - var _a; - const isValEmpty = !val || isArray$1(val) && val.length === 0; - if (isValEmpty || props.multiple && !isEqual$1(val.toString(), states.previousValue) || !props.multiple && getValueKey(val) !== getValueKey(states.previousValue)) { - initStates(true); - } - if (!isEqual$1(val, oldVal) && props.validateEvent) { - (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, "change").catch((err) => debugWarn()); - } - }, { - deep: true - }); - vue.watch(() => props.options, () => { - const input = inputRef.value; - if (!input || input && document.activeElement !== input) { - initStates(); - } - }, { - deep: true, - flush: "post" - }); - vue.watch(() => filteredOptions.value, () => { - calculatePopperSize(); - return menuRef.value && vue.nextTick(menuRef.value.resetScrollTop); - }); - vue.watchEffect(() => { - if (states.isBeforeHide) - return; - updateOptions(); - }); - vue.watchEffect(() => { - const { valueKey, options } = props; - const duplicateValue = /* @__PURE__ */ new Map(); - for (const item of options) { - const optionValue = getValue(item); - let v = optionValue; - if (isObject$1(v)) { - v = get(optionValue, valueKey); - } - if (duplicateValue.get(v)) { - break; - } else { - duplicateValue.set(v, true); - } - } - }); - vue.onMounted(() => { - initStates(); - }); - useResizeObserver(selectRef, handleResize); - useResizeObserver(selectionRef, resetSelectionWidth); - useResizeObserver(menuRef, updateTooltip); - useResizeObserver(wrapperRef, updateTooltip); - useResizeObserver(tagMenuRef, updateTagTooltip); - useResizeObserver(collapseItemRef, resetCollapseItemWidth); - return { - inputId, - collapseTagSize, - currentPlaceholder, - expanded, - emptyText, - popupHeight, - debounce: debounce$1, - allOptions, - filteredOptions, - iconComponent, - iconReverse, - tagStyle, - collapseTagStyle, - popperSize, - dropdownMenuVisible, - hasModelValue, - shouldShowPlaceholder, - selectDisabled, - selectSize, - needStatusIcon, - showClearBtn, - states, - isFocused, - nsSelect, - nsInput, - inputRef, - menuRef, - tagMenuRef, - tooltipRef, - tagTooltipRef, - selectRef, - wrapperRef, - selectionRef, - prefixRef, - suffixRef, - collapseItemRef, - popperRef, - validateState, - validateIcon, - showTagList, - collapseTagList, - debouncedOnInputChange, - deleteTag, - getLabel, - getValue, - getDisabled, - getValueKey, - handleClear, - handleClickOutside, - handleDel, - handleEsc, - focus, - blur, - handleMenuEnter, - handleResize, - resetSelectionWidth, - updateTooltip, - updateTagTooltip, - updateOptions, - toggleMenu, - scrollTo: scrollToItem, - onInput, - onKeyboardNavigate, - onKeyboardSelect, - onSelect, - onHover: onHoverOption, - handleCompositionStart, - handleCompositionEnd, - handleCompositionUpdate - }; - }; - var useSelect$2 = useSelect$1; - - const _sfc_main$M = vue.defineComponent({ - name: "ElSelectV2", - components: { - ElSelectMenu, - ElTag, - ElTooltip, - ElIcon - }, - directives: { ClickOutside }, - props: SelectProps, - emits: selectEmits, - setup(props, { emit }) { - const modelValue = vue.computed(() => { - const { modelValue: rawModelValue, multiple } = props; - const fallback = multiple ? [] : void 0; - if (isArray$1(rawModelValue)) { - return multiple ? rawModelValue : fallback; - } - return multiple ? fallback : rawModelValue; - }); - const API = useSelect$2(vue.reactive({ - ...vue.toRefs(props), - modelValue - }), emit); - const { calculatorRef, inputStyle } = useCalcInputWidth(); - vue.provide(selectV2InjectionKey, { - props: vue.reactive({ - ...vue.toRefs(props), - height: API.popupHeight, - modelValue - }), - expanded: API.expanded, - tooltipRef: API.tooltipRef, - onSelect: API.onSelect, - onHover: API.onHover, - onKeyboardNavigate: API.onKeyboardNavigate, - onKeyboardSelect: API.onKeyboardSelect - }); - const selectedLabel = vue.computed(() => { - if (!props.multiple) { - return API.states.selectedLabel; - } - return API.states.cachedOptions.map((i) => i.label); - }); - return { - ...API, - modelValue, - selectedLabel, - calculatorRef, - inputStyle - }; - } - }); - function _sfc_render$5(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_tag = vue.resolveComponent("el-tag"); - const _component_el_tooltip = vue.resolveComponent("el-tooltip"); - const _component_el_icon = vue.resolveComponent("el-icon"); - const _component_el_select_menu = vue.resolveComponent("el-select-menu"); - const _directive_click_outside = vue.resolveDirective("click-outside"); - return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - ref: "selectRef", - class: vue.normalizeClass([_ctx.nsSelect.b(), _ctx.nsSelect.m(_ctx.selectSize)]), - onMouseenter: ($event) => _ctx.states.inputHovering = true, - onMouseleave: ($event) => _ctx.states.inputHovering = false - }, [ - vue.createVNode(_component_el_tooltip, { - ref: "tooltipRef", - visible: _ctx.dropdownMenuVisible, - teleported: _ctx.teleported, - "popper-class": [_ctx.nsSelect.e("popper"), _ctx.popperClass], - "gpu-acceleration": false, - "stop-popper-mouse-event": false, - "popper-options": _ctx.popperOptions, - "fallback-placements": _ctx.fallbackPlacements, - effect: _ctx.effect, - placement: _ctx.placement, - pure: "", - transition: `${_ctx.nsSelect.namespace.value}-zoom-in-top`, - trigger: "click", - persistent: _ctx.persistent, - "append-to": _ctx.appendTo, - "show-arrow": _ctx.showArrow, - offset: _ctx.offset, - onBeforeShow: _ctx.handleMenuEnter, - onHide: ($event) => _ctx.states.isBeforeHide = false - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - ref: "wrapperRef", - class: vue.normalizeClass([ - _ctx.nsSelect.e("wrapper"), - _ctx.nsSelect.is("focused", _ctx.isFocused), - _ctx.nsSelect.is("hovering", _ctx.states.inputHovering), - _ctx.nsSelect.is("filterable", _ctx.filterable), - _ctx.nsSelect.is("disabled", _ctx.selectDisabled) - ]), - onClick: vue.withModifiers(_ctx.toggleMenu, ["prevent"]) - }, [ - _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - ref: "prefixRef", - class: vue.normalizeClass(_ctx.nsSelect.e("prefix")) - }, [ - vue.renderSlot(_ctx.$slots, "prefix") - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - ref: "selectionRef", - class: vue.normalizeClass([ - _ctx.nsSelect.e("selection"), - _ctx.nsSelect.is("near", _ctx.multiple && !_ctx.$slots.prefix && !!_ctx.modelValue.length) - ]) - }, [ - _ctx.multiple ? vue.renderSlot(_ctx.$slots, "tag", { key: 0 }, () => [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.showTagList, (item) => { - return vue.openBlock(), vue.createElementBlock("div", { - key: _ctx.getValueKey(_ctx.getValue(item)), - class: vue.normalizeClass(_ctx.nsSelect.e("selected-item")) - }, [ - vue.createVNode(_component_el_tag, { - closable: !_ctx.selectDisabled && !_ctx.getDisabled(item), - size: _ctx.collapseTagSize, - type: _ctx.tagType, - effect: _ctx.tagEffect, - "disable-transitions": "", - style: vue.normalizeStyle(_ctx.tagStyle), - onClose: ($event) => _ctx.deleteTag($event, item) - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("span", { - class: vue.normalizeClass(_ctx.nsSelect.e("tags-text")) - }, [ - vue.renderSlot(_ctx.$slots, "label", { - label: _ctx.getLabel(item), - value: _ctx.getValue(item) - }, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.getLabel(item)), 1) - ]) - ], 2) - ]), - _: 2 - }, 1032, ["closable", "size", "type", "effect", "style", "onClose"]) - ], 2); - }), 128)), - _ctx.collapseTags && _ctx.modelValue.length > _ctx.maxCollapseTags ? (vue.openBlock(), vue.createBlock(_component_el_tooltip, { - key: 0, - ref: "tagTooltipRef", - disabled: _ctx.dropdownMenuVisible || !_ctx.collapseTagsTooltip, - "fallback-placements": ["bottom", "top", "right", "left"], - effect: _ctx.effect, - placement: "bottom", - teleported: _ctx.teleported - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - ref: "collapseItemRef", - class: vue.normalizeClass(_ctx.nsSelect.e("selected-item")) - }, [ - vue.createVNode(_component_el_tag, { - closable: false, - size: _ctx.collapseTagSize, - type: _ctx.tagType, - effect: _ctx.tagEffect, - style: vue.normalizeStyle(_ctx.collapseTagStyle), - "disable-transitions": "" - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("span", { - class: vue.normalizeClass(_ctx.nsSelect.e("tags-text")) - }, " + " + vue.toDisplayString(_ctx.modelValue.length - _ctx.maxCollapseTags), 3) - ]), - _: 1 - }, 8, ["size", "type", "effect", "style"]) - ], 2) - ]), - content: vue.withCtx(() => [ - vue.createElementVNode("div", { - ref: "tagMenuRef", - class: vue.normalizeClass(_ctx.nsSelect.e("selection")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.collapseTagList, (selected) => { - return vue.openBlock(), vue.createElementBlock("div", { - key: _ctx.getValueKey(_ctx.getValue(selected)), - class: vue.normalizeClass(_ctx.nsSelect.e("selected-item")) - }, [ - vue.createVNode(_component_el_tag, { - class: "in-tooltip", - closable: !_ctx.selectDisabled && !_ctx.getDisabled(selected), - size: _ctx.collapseTagSize, - type: _ctx.tagType, - effect: _ctx.tagEffect, - "disable-transitions": "", - onClose: ($event) => _ctx.deleteTag($event, selected) - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("span", { - class: vue.normalizeClass(_ctx.nsSelect.e("tags-text")) - }, [ - vue.renderSlot(_ctx.$slots, "label", { - label: _ctx.getLabel(selected), - value: _ctx.getValue(selected) - }, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.getLabel(selected)), 1) - ]) - ], 2) - ]), - _: 2 - }, 1032, ["closable", "size", "type", "effect", "onClose"]) - ], 2); - }), 128)) - ], 2) - ]), - _: 3 - }, 8, ["disabled", "effect", "teleported"])) : vue.createCommentVNode("v-if", true) - ]) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass([ - _ctx.nsSelect.e("selected-item"), - _ctx.nsSelect.e("input-wrapper"), - _ctx.nsSelect.is("hidden", !_ctx.filterable) - ]) - }, [ - vue.withDirectives(vue.createElementVNode("input", { - id: _ctx.inputId, - ref: "inputRef", - "onUpdate:modelValue": ($event) => _ctx.states.inputValue = $event, - style: vue.normalizeStyle(_ctx.inputStyle), - autocomplete: _ctx.autocomplete, - tabindex: _ctx.tabindex, - "aria-autocomplete": "list", - "aria-haspopup": "listbox", - autocapitalize: "off", - "aria-expanded": _ctx.expanded, - "aria-label": _ctx.ariaLabel, - class: vue.normalizeClass([_ctx.nsSelect.e("input"), _ctx.nsSelect.is(_ctx.selectSize)]), - disabled: _ctx.selectDisabled, - role: "combobox", - readonly: !_ctx.filterable, - spellcheck: "false", - type: "text", - name: _ctx.name, - onInput: _ctx.onInput, - onCompositionstart: _ctx.handleCompositionStart, - onCompositionupdate: _ctx.handleCompositionUpdate, - onCompositionend: _ctx.handleCompositionEnd, - onKeydown: [ - vue.withKeys(vue.withModifiers(($event) => _ctx.onKeyboardNavigate("backward"), ["stop", "prevent"]), ["up"]), - vue.withKeys(vue.withModifiers(($event) => _ctx.onKeyboardNavigate("forward"), ["stop", "prevent"]), ["down"]), - vue.withKeys(vue.withModifiers(_ctx.onKeyboardSelect, ["stop", "prevent"]), ["enter"]), - vue.withKeys(vue.withModifiers(_ctx.handleEsc, ["stop", "prevent"]), ["esc"]), - vue.withKeys(vue.withModifiers(_ctx.handleDel, ["stop"]), ["delete"]) - ], - onClick: vue.withModifiers(_ctx.toggleMenu, ["stop"]) - }, null, 46, ["id", "onUpdate:modelValue", "autocomplete", "tabindex", "aria-expanded", "aria-label", "disabled", "readonly", "name", "onInput", "onCompositionstart", "onCompositionupdate", "onCompositionend", "onKeydown", "onClick"]), [ - [vue.vModelText, _ctx.states.inputValue] - ]), - _ctx.filterable ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - ref: "calculatorRef", - "aria-hidden": "true", - class: vue.normalizeClass(_ctx.nsSelect.e("input-calculator")), - textContent: vue.toDisplayString(_ctx.states.inputValue) - }, null, 10, ["textContent"])) : vue.createCommentVNode("v-if", true) - ], 2), - _ctx.shouldShowPlaceholder ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass([ - _ctx.nsSelect.e("selected-item"), - _ctx.nsSelect.e("placeholder"), - _ctx.nsSelect.is("transparent", !_ctx.hasModelValue || _ctx.expanded && !_ctx.states.inputValue) - ]) - }, [ - _ctx.hasModelValue ? vue.renderSlot(_ctx.$slots, "label", { - key: 0, - label: _ctx.currentPlaceholder, - value: _ctx.modelValue - }, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(_ctx.currentPlaceholder), 1) - ]) : (vue.openBlock(), vue.createElementBlock("span", { key: 1 }, vue.toDisplayString(_ctx.currentPlaceholder), 1)) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2), - vue.createElementVNode("div", { - ref: "suffixRef", - class: vue.normalizeClass(_ctx.nsSelect.e("suffix")) - }, [ - _ctx.iconComponent ? vue.withDirectives((vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 0, - class: vue.normalizeClass([_ctx.nsSelect.e("caret"), _ctx.nsInput.e("icon"), _ctx.iconReverse]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.iconComponent))) - ]), - _: 1 - }, 8, ["class"])), [ - [vue.vShow, !_ctx.showClearBtn] - ]) : vue.createCommentVNode("v-if", true), - _ctx.showClearBtn && _ctx.clearIcon ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 1, - class: vue.normalizeClass([ - _ctx.nsSelect.e("caret"), - _ctx.nsInput.e("icon"), - _ctx.nsSelect.e("clear") - ]), - onClick: vue.withModifiers(_ctx.handleClear, ["prevent", "stop"]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.clearIcon))) - ]), - _: 1 - }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true), - _ctx.validateState && _ctx.validateIcon && _ctx.needStatusIcon ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 2, - class: vue.normalizeClass([ - _ctx.nsInput.e("icon"), - _ctx.nsInput.e("validateIcon"), - _ctx.nsInput.is("loading", _ctx.validateState === "validating") - ]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.validateIcon))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ], 2) - ], 10, ["onClick"]) - ]), - content: vue.withCtx(() => [ - vue.createVNode(_component_el_select_menu, { - ref: "menuRef", - data: _ctx.filteredOptions, - width: _ctx.popperSize, - "hovering-index": _ctx.states.hoveringIndex, - "scrollbar-always-on": _ctx.scrollbarAlwaysOn - }, vue.createSlots({ - default: vue.withCtx((scope) => [ - vue.renderSlot(_ctx.$slots, "default", vue.normalizeProps(vue.guardReactiveProps(scope))) - ]), - _: 2 - }, [ - _ctx.$slots.header ? { - name: "header", - fn: vue.withCtx(() => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "header")) - }, [ - vue.renderSlot(_ctx.$slots, "header") - ], 2) - ]) - } : void 0, - _ctx.$slots.loading && _ctx.loading ? { - name: "loading", - fn: vue.withCtx(() => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "loading")) - }, [ - vue.renderSlot(_ctx.$slots, "loading") - ], 2) - ]) - } : _ctx.loading || _ctx.filteredOptions.length === 0 ? { - name: "empty", - fn: vue.withCtx(() => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "empty")) - }, [ - vue.renderSlot(_ctx.$slots, "empty", {}, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(_ctx.emptyText), 1) - ]) - ], 2) - ]) - } : void 0, - _ctx.$slots.footer ? { - name: "footer", - fn: vue.withCtx(() => [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.nsSelect.be("dropdown", "footer")) - }, [ - vue.renderSlot(_ctx.$slots, "footer") - ], 2) - ]) - } : void 0 - ]), 1032, ["data", "width", "hovering-index", "scrollbar-always-on"]) - ]), - _: 3 - }, 8, ["visible", "teleported", "popper-class", "popper-options", "fallback-placements", "effect", "placement", "transition", "persistent", "append-to", "show-arrow", "offset", "onBeforeShow", "onHide"]) - ], 42, ["onMouseenter", "onMouseleave"])), [ - [_directive_click_outside, _ctx.handleClickOutside, _ctx.popperRef] - ]); - } - var Select = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["render", _sfc_render$5], ["__file", "select.vue"]]); - - const ElSelectV2 = withInstall(Select); - - const skeletonProps = buildProps({ - animated: { - type: Boolean, - default: false - }, - count: { - type: Number, - default: 1 - }, - rows: { - type: Number, - default: 3 - }, - loading: { - type: Boolean, - default: true - }, - throttle: { - type: definePropType([Number, Object]) - } - }); - - const skeletonItemProps = buildProps({ - variant: { - type: String, - values: [ - "circle", - "rect", - "h1", - "h3", - "text", - "caption", - "p", - "image", - "button" - ], - default: "text" - } - }); - - const __default__$E = vue.defineComponent({ - name: "ElSkeletonItem" - }); - const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({ - ...__default__$E, - props: skeletonItemProps, - setup(__props) { - const ns = useNamespace("skeleton"); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([vue.unref(ns).e("item"), vue.unref(ns).e(_ctx.variant)]) - }, [ - _ctx.variant === "image" ? (vue.openBlock(), vue.createBlock(vue.unref(picture_filled_default), { key: 0 })) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var SkeletonItem = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["__file", "skeleton-item.vue"]]); - - const __default__$D = vue.defineComponent({ - name: "ElSkeleton" - }); - const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({ - ...__default__$D, - props: skeletonProps, - setup(__props, { expose }) { - const props = __props; - const ns = useNamespace("skeleton"); - const uiLoading = useThrottleRender(vue.toRef(props, "loading"), props.throttle); - expose({ - uiLoading - }); - return (_ctx, _cache) => { - return vue.unref(uiLoading) ? (vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ - key: 0, - class: [vue.unref(ns).b(), vue.unref(ns).is("animated", _ctx.animated)] - }, _ctx.$attrs), [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.count, (i) => { - return vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: i }, [ - vue.unref(uiLoading) ? vue.renderSlot(_ctx.$slots, "template", { key: i }, () => [ - vue.createVNode(SkeletonItem, { - class: vue.normalizeClass(vue.unref(ns).is("first")), - variant: "p" - }, null, 8, ["class"]), - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.rows, (item) => { - return vue.openBlock(), vue.createBlock(SkeletonItem, { - key: item, - class: vue.normalizeClass([ - vue.unref(ns).e("paragraph"), - vue.unref(ns).is("last", item === _ctx.rows && _ctx.rows > 1) - ]), - variant: "p" - }, null, 8, ["class"]); - }), 128)) - ]) : vue.createCommentVNode("v-if", true) - ], 64); - }), 128)) - ], 16)) : vue.renderSlot(_ctx.$slots, "default", vue.normalizeProps(vue.mergeProps({ key: 1 }, _ctx.$attrs))); - }; - } - }); - var Skeleton = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["__file", "skeleton.vue"]]); - - const ElSkeleton = withInstall(Skeleton, { - SkeletonItem - }); - const ElSkeletonItem = withNoopInstall(SkeletonItem); - - const sliderContextKey = Symbol("sliderContextKey"); - - const sliderProps = buildProps({ - modelValue: { - type: definePropType([Number, Array]), - default: 0 - }, - id: { - type: String, - default: void 0 - }, - min: { - type: Number, - default: 0 - }, - max: { - type: Number, - default: 100 - }, - step: { - type: Number, - default: 1 - }, - showInput: Boolean, - showInputControls: { - type: Boolean, - default: true - }, - size: useSizeProp, - inputSize: useSizeProp, - showStops: Boolean, - showTooltip: { - type: Boolean, - default: true - }, - formatTooltip: { - type: definePropType(Function), - default: void 0 - }, - disabled: Boolean, - range: Boolean, - vertical: Boolean, - height: String, - debounce: { - type: Number, - default: 300 - }, - rangeStartLabel: { - type: String, - default: void 0 - }, - rangeEndLabel: { - type: String, - default: void 0 - }, - formatValueText: { - type: definePropType(Function), - default: void 0 - }, - tooltipClass: { - type: String, - default: void 0 - }, - placement: { - type: String, - values: Ee, - default: "top" - }, - marks: { - type: definePropType(Object) - }, - validateEvent: { - type: Boolean, - default: true - }, - ...useAriaProps(["ariaLabel"]) - }); - const isValidValue$1 = (value) => isNumber(value) || isArray$1(value) && value.every(isNumber); - const sliderEmits = { - [UPDATE_MODEL_EVENT]: isValidValue$1, - [INPUT_EVENT]: isValidValue$1, - [CHANGE_EVENT]: isValidValue$1 - }; - - const useLifecycle = (props, initData, resetSize) => { - const sliderWrapper = vue.ref(); - vue.onMounted(async () => { - if (props.range) { - if (isArray$1(props.modelValue)) { - initData.firstValue = Math.max(props.min, props.modelValue[0]); - initData.secondValue = Math.min(props.max, props.modelValue[1]); - } else { - initData.firstValue = props.min; - initData.secondValue = props.max; - } - initData.oldValue = [initData.firstValue, initData.secondValue]; - } else { - if (!isNumber(props.modelValue) || Number.isNaN(props.modelValue)) { - initData.firstValue = props.min; - } else { - initData.firstValue = Math.min(props.max, Math.max(props.min, props.modelValue)); - } - initData.oldValue = initData.firstValue; - } - useEventListener(window, "resize", resetSize); - await vue.nextTick(); - resetSize(); - }); - return { - sliderWrapper - }; - }; - - const useMarks = (props) => { - return vue.computed(() => { - if (!props.marks) { - return []; - } - const marksKeys = Object.keys(props.marks); - return marksKeys.map(Number.parseFloat).sort((a, b) => a - b).filter((point) => point <= props.max && point >= props.min).map((point) => ({ - point, - position: (point - props.min) * 100 / (props.max - props.min), - mark: props.marks[point] - })); - }); - }; - - const useSlide = (props, initData, emit) => { - const { form: elForm, formItem: elFormItem } = useFormItem(); - const slider = vue.shallowRef(); - const firstButton = vue.ref(); - const secondButton = vue.ref(); - const buttonRefs = { - firstButton, - secondButton - }; - const sliderDisabled = vue.computed(() => { - return props.disabled || (elForm == null ? void 0 : elForm.disabled) || false; - }); - const minValue = vue.computed(() => { - return Math.min(initData.firstValue, initData.secondValue); - }); - const maxValue = vue.computed(() => { - return Math.max(initData.firstValue, initData.secondValue); - }); - const barSize = vue.computed(() => { - return props.range ? `${100 * (maxValue.value - minValue.value) / (props.max - props.min)}%` : `${100 * (initData.firstValue - props.min) / (props.max - props.min)}%`; - }); - const barStart = vue.computed(() => { - return props.range ? `${100 * (minValue.value - props.min) / (props.max - props.min)}%` : "0%"; - }); - const runwayStyle = vue.computed(() => { - return props.vertical ? { height: props.height } : {}; - }); - const barStyle = vue.computed(() => { - return props.vertical ? { - height: barSize.value, - bottom: barStart.value - } : { - width: barSize.value, - left: barStart.value - }; - }); - const resetSize = () => { - if (slider.value) { - initData.sliderSize = slider.value[`client${props.vertical ? "Height" : "Width"}`]; - } - }; - const getButtonRefByPercent = (percent) => { - const targetValue = props.min + percent * (props.max - props.min) / 100; - if (!props.range) { - return firstButton; - } - let buttonRefName; - if (Math.abs(minValue.value - targetValue) < Math.abs(maxValue.value - targetValue)) { - buttonRefName = initData.firstValue < initData.secondValue ? "firstButton" : "secondButton"; - } else { - buttonRefName = initData.firstValue > initData.secondValue ? "firstButton" : "secondButton"; - } - return buttonRefs[buttonRefName]; - }; - const setPosition = (percent) => { - const buttonRef = getButtonRefByPercent(percent); - buttonRef.value.setPosition(percent); - return buttonRef; - }; - const setFirstValue = (firstValue) => { - initData.firstValue = firstValue != null ? firstValue : props.min; - _emit(props.range ? [minValue.value, maxValue.value] : firstValue != null ? firstValue : props.min); - }; - const setSecondValue = (secondValue) => { - initData.secondValue = secondValue; - if (props.range) { - _emit([minValue.value, maxValue.value]); - } - }; - const _emit = (val) => { - emit(UPDATE_MODEL_EVENT, val); - emit(INPUT_EVENT, val); - }; - const emitChange = async () => { - await vue.nextTick(); - emit(CHANGE_EVENT, props.range ? [minValue.value, maxValue.value] : props.modelValue); - }; - const handleSliderPointerEvent = (event) => { - var _a, _b, _c, _d, _e, _f; - if (sliderDisabled.value || initData.dragging) - return; - resetSize(); - let newPercent = 0; - if (props.vertical) { - const clientY = (_c = (_b = (_a = event.touches) == null ? void 0 : _a.item(0)) == null ? void 0 : _b.clientY) != null ? _c : event.clientY; - const sliderOffsetBottom = slider.value.getBoundingClientRect().bottom; - newPercent = (sliderOffsetBottom - clientY) / initData.sliderSize * 100; - } else { - const clientX = (_f = (_e = (_d = event.touches) == null ? void 0 : _d.item(0)) == null ? void 0 : _e.clientX) != null ? _f : event.clientX; - const sliderOffsetLeft = slider.value.getBoundingClientRect().left; - newPercent = (clientX - sliderOffsetLeft) / initData.sliderSize * 100; - } - if (newPercent < 0 || newPercent > 100) - return; - return setPosition(newPercent); - }; - const onSliderWrapperPrevent = (event) => { - var _a, _b; - if (((_a = buttonRefs["firstButton"].value) == null ? void 0 : _a.dragging) || ((_b = buttonRefs["secondButton"].value) == null ? void 0 : _b.dragging)) { - event.preventDefault(); - } - }; - const onSliderDown = async (event) => { - const buttonRef = handleSliderPointerEvent(event); - if (buttonRef) { - await vue.nextTick(); - buttonRef.value.onButtonDown(event); - } - }; - const onSliderClick = (event) => { - const buttonRef = handleSliderPointerEvent(event); - if (buttonRef) { - emitChange(); - } - }; - const onSliderMarkerDown = (position) => { - if (sliderDisabled.value || initData.dragging) - return; - setPosition(position); - }; - return { - elFormItem, - slider, - firstButton, - secondButton, - sliderDisabled, - minValue, - maxValue, - runwayStyle, - barStyle, - resetSize, - setPosition, - emitChange, - onSliderWrapperPrevent, - onSliderClick, - onSliderDown, - onSliderMarkerDown, - setFirstValue, - setSecondValue - }; - }; - - const useTooltip = (props, formatTooltip, showTooltip) => { - const tooltip = vue.ref(); - const tooltipVisible = vue.ref(false); - const enableFormat = vue.computed(() => { - return formatTooltip.value instanceof Function; - }); - const formatValue = vue.computed(() => { - return enableFormat.value && formatTooltip.value(props.modelValue) || props.modelValue; - }); - const displayTooltip = debounce(() => { - showTooltip.value && (tooltipVisible.value = true); - }, 50); - const hideTooltip = debounce(() => { - showTooltip.value && (tooltipVisible.value = false); - }, 50); - return { - tooltip, - tooltipVisible, - formatValue, - displayTooltip, - hideTooltip - }; - }; - const useSliderButton = (props, initData, emit) => { - const { - disabled, - min, - max, - step, - showTooltip, - precision, - sliderSize, - formatTooltip, - emitChange, - resetSize, - updateDragging - } = vue.inject(sliderContextKey); - const { tooltip, tooltipVisible, formatValue, displayTooltip, hideTooltip } = useTooltip(props, formatTooltip, showTooltip); - const button = vue.ref(); - const currentPosition = vue.computed(() => { - return `${(props.modelValue - min.value) / (max.value - min.value) * 100}%`; - }); - const wrapperStyle = vue.computed(() => { - return props.vertical ? { bottom: currentPosition.value } : { left: currentPosition.value }; - }); - const handleMouseEnter = () => { - initData.hovering = true; - displayTooltip(); - }; - const handleMouseLeave = () => { - initData.hovering = false; - if (!initData.dragging) { - hideTooltip(); - } - }; - const onButtonDown = (event) => { - if (disabled.value) - return; - event.preventDefault(); - onDragStart(event); - window.addEventListener("mousemove", onDragging); - window.addEventListener("touchmove", onDragging); - window.addEventListener("mouseup", onDragEnd); - window.addEventListener("touchend", onDragEnd); - window.addEventListener("contextmenu", onDragEnd); - button.value.focus(); - }; - const incrementPosition = (amount) => { - if (disabled.value) - return; - initData.newPosition = Number.parseFloat(currentPosition.value) + amount / (max.value - min.value) * 100; - setPosition(initData.newPosition); - emitChange(); - }; - const onLeftKeyDown = () => { - incrementPosition(-step.value); - }; - const onRightKeyDown = () => { - incrementPosition(step.value); - }; - const onPageDownKeyDown = () => { - incrementPosition(-step.value * 4); - }; - const onPageUpKeyDown = () => { - incrementPosition(step.value * 4); - }; - const onHomeKeyDown = () => { - if (disabled.value) - return; - setPosition(0); - emitChange(); - }; - const onEndKeyDown = () => { - if (disabled.value) - return; - setPosition(100); - emitChange(); - }; - const onKeyDown = (event) => { - let isPreventDefault = true; - switch (event.code) { - case EVENT_CODE.left: - case EVENT_CODE.down: - onLeftKeyDown(); - break; - case EVENT_CODE.right: - case EVENT_CODE.up: - onRightKeyDown(); - break; - case EVENT_CODE.home: - onHomeKeyDown(); - break; - case EVENT_CODE.end: - onEndKeyDown(); - break; - case EVENT_CODE.pageDown: - onPageDownKeyDown(); - break; - case EVENT_CODE.pageUp: - onPageUpKeyDown(); - break; - default: - isPreventDefault = false; - break; - } - isPreventDefault && event.preventDefault(); - }; - const getClientXY = (event) => { - let clientX; - let clientY; - if (event.type.startsWith("touch")) { - clientY = event.touches[0].clientY; - clientX = event.touches[0].clientX; - } else { - clientY = event.clientY; - clientX = event.clientX; - } - return { - clientX, - clientY - }; - }; - const onDragStart = (event) => { - initData.dragging = true; - initData.isClick = true; - const { clientX, clientY } = getClientXY(event); - if (props.vertical) { - initData.startY = clientY; - } else { - initData.startX = clientX; - } - initData.startPosition = Number.parseFloat(currentPosition.value); - initData.newPosition = initData.startPosition; - }; - const onDragging = (event) => { - if (initData.dragging) { - initData.isClick = false; - displayTooltip(); - resetSize(); - let diff; - const { clientX, clientY } = getClientXY(event); - if (props.vertical) { - initData.currentY = clientY; - diff = (initData.startY - initData.currentY) / sliderSize.value * 100; - } else { - initData.currentX = clientX; - diff = (initData.currentX - initData.startX) / sliderSize.value * 100; - } - initData.newPosition = initData.startPosition + diff; - setPosition(initData.newPosition); - } - }; - const onDragEnd = () => { - if (initData.dragging) { - setTimeout(() => { - initData.dragging = false; - if (!initData.hovering) { - hideTooltip(); - } - if (!initData.isClick) { - setPosition(initData.newPosition); - } - emitChange(); - }, 0); - window.removeEventListener("mousemove", onDragging); - window.removeEventListener("touchmove", onDragging); - window.removeEventListener("mouseup", onDragEnd); - window.removeEventListener("touchend", onDragEnd); - window.removeEventListener("contextmenu", onDragEnd); - } - }; - const setPosition = async (newPosition) => { - if (newPosition === null || Number.isNaN(+newPosition)) - return; - if (newPosition < 0) { - newPosition = 0; - } else if (newPosition > 100) { - newPosition = 100; - } - const lengthPerStep = 100 / ((max.value - min.value) / step.value); - const steps = Math.round(newPosition / lengthPerStep); - let value = steps * lengthPerStep * (max.value - min.value) * 0.01 + min.value; - value = Number.parseFloat(value.toFixed(precision.value)); - if (value !== props.modelValue) { - emit(UPDATE_MODEL_EVENT, value); - } - if (!initData.dragging && props.modelValue !== initData.oldValue) { - initData.oldValue = props.modelValue; - } - await vue.nextTick(); - initData.dragging && displayTooltip(); - tooltip.value.updatePopper(); - }; - vue.watch(() => initData.dragging, (val) => { - updateDragging(val); - }); - useEventListener(button, "touchstart", onButtonDown, { passive: false }); - return { - disabled, - button, - tooltip, - tooltipVisible, - showTooltip, - wrapperStyle, - formatValue, - handleMouseEnter, - handleMouseLeave, - onButtonDown, - onKeyDown, - setPosition - }; - }; - - const useStops = (props, initData, minValue, maxValue) => { - const stops = vue.computed(() => { - if (!props.showStops || props.min > props.max) - return []; - if (props.step === 0) { - return []; - } - const stopCount = (props.max - props.min) / props.step; - const stepWidth = 100 * props.step / (props.max - props.min); - const result = Array.from({ length: stopCount - 1 }).map((_, index) => (index + 1) * stepWidth); - if (props.range) { - return result.filter((step) => { - return step < 100 * (minValue.value - props.min) / (props.max - props.min) || step > 100 * (maxValue.value - props.min) / (props.max - props.min); - }); - } else { - return result.filter((step) => step > 100 * (initData.firstValue - props.min) / (props.max - props.min)); - } - }); - const getStopStyle = (position) => { - return props.vertical ? { bottom: `${position}%` } : { left: `${position}%` }; - }; - return { - stops, - getStopStyle - }; - }; - - const useWatch = (props, initData, minValue, maxValue, emit, elFormItem) => { - const _emit = (val) => { - emit(UPDATE_MODEL_EVENT, val); - emit(INPUT_EVENT, val); - }; - const valueChanged = () => { - if (props.range) { - return ![minValue.value, maxValue.value].every((item, index) => item === initData.oldValue[index]); - } else { - return props.modelValue !== initData.oldValue; - } - }; - const setValues = () => { - var _a, _b; - if (props.min > props.max) { - throwError("Slider", "min should not be greater than max."); - } - const val = props.modelValue; - if (props.range && isArray$1(val)) { - if (val[1] < props.min) { - _emit([props.min, props.min]); - } else if (val[0] > props.max) { - _emit([props.max, props.max]); - } else if (val[0] < props.min) { - _emit([props.min, val[1]]); - } else if (val[1] > props.max) { - _emit([val[0], props.max]); - } else { - initData.firstValue = val[0]; - initData.secondValue = val[1]; - if (valueChanged()) { - if (props.validateEvent) { - (_a = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _a.call(elFormItem, "change").catch((err) => debugWarn()); - } - initData.oldValue = val.slice(); - } - } - } else if (!props.range && isNumber(val) && !Number.isNaN(val)) { - if (val < props.min) { - _emit(props.min); - } else if (val > props.max) { - _emit(props.max); - } else { - initData.firstValue = val; - if (valueChanged()) { - if (props.validateEvent) { - (_b = elFormItem == null ? void 0 : elFormItem.validate) == null ? void 0 : _b.call(elFormItem, "change").catch((err) => debugWarn()); - } - initData.oldValue = val; - } - } - } - }; - setValues(); - vue.watch(() => initData.dragging, (val) => { - if (!val) { - setValues(); - } - }); - vue.watch(() => props.modelValue, (val, oldVal) => { - if (initData.dragging || isArray$1(val) && isArray$1(oldVal) && val.every((item, index) => item === oldVal[index]) && initData.firstValue === val[0] && initData.secondValue === val[1]) { - return; - } - setValues(); - }, { - deep: true - }); - vue.watch(() => [props.min, props.max], () => { - setValues(); - }); - }; - - const sliderButtonProps = buildProps({ - modelValue: { - type: Number, - default: 0 - }, - vertical: Boolean, - tooltipClass: String, - placement: { - type: String, - values: Ee, - default: "top" - } - }); - const sliderButtonEmits = { - [UPDATE_MODEL_EVENT]: (value) => isNumber(value) - }; - - const __default__$C = vue.defineComponent({ - name: "ElSliderButton" - }); - const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({ - ...__default__$C, - props: sliderButtonProps, - emits: sliderButtonEmits, - setup(__props, { expose, emit }) { - const props = __props; - const ns = useNamespace("slider"); - const initData = vue.reactive({ - hovering: false, - dragging: false, - isClick: false, - startX: 0, - currentX: 0, - startY: 0, - currentY: 0, - startPosition: 0, - newPosition: 0, - oldValue: props.modelValue - }); - const { - disabled, - button, - tooltip, - showTooltip, - tooltipVisible, - wrapperStyle, - formatValue, - handleMouseEnter, - handleMouseLeave, - onButtonDown, - onKeyDown, - setPosition - } = useSliderButton(props, initData, emit); - const { hovering, dragging } = vue.toRefs(initData); - expose({ - onButtonDown, - onKeyDown, - setPosition, - hovering, - dragging - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "button", - ref: button, - class: vue.normalizeClass([vue.unref(ns).e("button-wrapper"), { hover: vue.unref(hovering), dragging: vue.unref(dragging) }]), - style: vue.normalizeStyle(vue.unref(wrapperStyle)), - tabindex: vue.unref(disabled) ? -1 : 0, - onMouseenter: vue.unref(handleMouseEnter), - onMouseleave: vue.unref(handleMouseLeave), - onMousedown: vue.unref(onButtonDown), - onFocus: vue.unref(handleMouseEnter), - onBlur: vue.unref(handleMouseLeave), - onKeydown: vue.unref(onKeyDown) - }, [ - vue.createVNode(vue.unref(ElTooltip), { - ref_key: "tooltip", - ref: tooltip, - visible: vue.unref(tooltipVisible), - placement: _ctx.placement, - "fallback-placements": ["top", "bottom", "right", "left"], - "stop-popper-mouse-event": false, - "popper-class": _ctx.tooltipClass, - disabled: !vue.unref(showTooltip), - persistent: vue.unref(showTooltip) - }, { - content: vue.withCtx(() => [ - vue.createElementVNode("span", null, vue.toDisplayString(vue.unref(formatValue)), 1) - ]), - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - class: vue.normalizeClass([vue.unref(ns).e("button"), { hover: vue.unref(hovering), dragging: vue.unref(dragging) }]) - }, null, 2) - ]), - _: 1 - }, 8, ["visible", "placement", "popper-class", "disabled", "persistent"]) - ], 46, ["tabindex", "onMouseenter", "onMouseleave", "onMousedown", "onFocus", "onBlur", "onKeydown"]); - }; - } - }); - var SliderButton = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["__file", "button.vue"]]); - - const sliderMarkerProps = buildProps({ - mark: { - type: definePropType([String, Object]), - default: void 0 - } - }); - var SliderMarker = vue.defineComponent({ - name: "ElSliderMarker", - props: sliderMarkerProps, - setup(props) { - const ns = useNamespace("slider"); - const label = vue.computed(() => { - return isString$1(props.mark) ? props.mark : props.mark.label; - }); - const style = vue.computed(() => isString$1(props.mark) ? void 0 : props.mark.style); - return () => vue.h("div", { - class: ns.e("marks-text"), - style: style.value - }, label.value); - } - }); - - const __default__$B = vue.defineComponent({ - name: "ElSlider" - }); - const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({ - ...__default__$B, - props: sliderProps, - emits: sliderEmits, - setup(__props, { expose, emit }) { - const props = __props; - const ns = useNamespace("slider"); - const { t } = useLocale(); - const initData = vue.reactive({ - firstValue: 0, - secondValue: 0, - oldValue: 0, - dragging: false, - sliderSize: 1 - }); - const { - elFormItem, - slider, - firstButton, - secondButton, - sliderDisabled, - minValue, - maxValue, - runwayStyle, - barStyle, - resetSize, - emitChange, - onSliderWrapperPrevent, - onSliderClick, - onSliderDown, - onSliderMarkerDown, - setFirstValue, - setSecondValue - } = useSlide(props, initData, emit); - const { stops, getStopStyle } = useStops(props, initData, minValue, maxValue); - const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { - formItemContext: elFormItem - }); - const sliderWrapperSize = useFormSize(); - const sliderInputSize = vue.computed(() => props.inputSize || sliderWrapperSize.value); - const groupLabel = vue.computed(() => { - return props.ariaLabel || t("el.slider.defaultLabel", { - min: props.min, - max: props.max - }); - }); - const firstButtonLabel = vue.computed(() => { - if (props.range) { - return props.rangeStartLabel || t("el.slider.defaultRangeStartLabel"); - } else { - return groupLabel.value; - } - }); - const firstValueText = vue.computed(() => { - return props.formatValueText ? props.formatValueText(firstValue.value) : `${firstValue.value}`; - }); - const secondButtonLabel = vue.computed(() => { - return props.rangeEndLabel || t("el.slider.defaultRangeEndLabel"); - }); - const secondValueText = vue.computed(() => { - return props.formatValueText ? props.formatValueText(secondValue.value) : `${secondValue.value}`; - }); - const sliderKls = vue.computed(() => [ - ns.b(), - ns.m(sliderWrapperSize.value), - ns.is("vertical", props.vertical), - { [ns.m("with-input")]: props.showInput } - ]); - const markList = useMarks(props); - useWatch(props, initData, minValue, maxValue, emit, elFormItem); - const precision = vue.computed(() => { - const precisions = [props.min, props.max, props.step].map((item) => { - const decimal = `${item}`.split(".")[1]; - return decimal ? decimal.length : 0; - }); - return Math.max.apply(null, precisions); - }); - const { sliderWrapper } = useLifecycle(props, initData, resetSize); - const { firstValue, secondValue, sliderSize } = vue.toRefs(initData); - const updateDragging = (val) => { - initData.dragging = val; - }; - useEventListener(sliderWrapper, "touchstart", onSliderWrapperPrevent, { - passive: false - }); - useEventListener(sliderWrapper, "touchmove", onSliderWrapperPrevent, { - passive: false - }); - vue.provide(sliderContextKey, { - ...vue.toRefs(props), - sliderSize, - disabled: sliderDisabled, - precision, - emitChange, - resetSize, - updateDragging - }); - expose({ - onSliderClick - }); - return (_ctx, _cache) => { - var _a, _b; - return vue.openBlock(), vue.createElementBlock("div", { - id: _ctx.range ? vue.unref(inputId) : void 0, - ref_key: "sliderWrapper", - ref: sliderWrapper, - class: vue.normalizeClass(vue.unref(sliderKls)), - role: _ctx.range ? "group" : void 0, - "aria-label": _ctx.range && !vue.unref(isLabeledByFormItem) ? vue.unref(groupLabel) : void 0, - "aria-labelledby": _ctx.range && vue.unref(isLabeledByFormItem) ? (_a = vue.unref(elFormItem)) == null ? void 0 : _a.labelId : void 0 - }, [ - vue.createElementVNode("div", { - ref_key: "slider", - ref: slider, - class: vue.normalizeClass([ - vue.unref(ns).e("runway"), - { "show-input": _ctx.showInput && !_ctx.range }, - vue.unref(ns).is("disabled", vue.unref(sliderDisabled)) - ]), - style: vue.normalizeStyle(vue.unref(runwayStyle)), - onMousedown: vue.unref(onSliderDown), - onTouchstartPassive: vue.unref(onSliderDown) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("bar")), - style: vue.normalizeStyle(vue.unref(barStyle)) - }, null, 6), - vue.createVNode(SliderButton, { - id: !_ctx.range ? vue.unref(inputId) : void 0, - ref_key: "firstButton", - ref: firstButton, - "model-value": vue.unref(firstValue), - vertical: _ctx.vertical, - "tooltip-class": _ctx.tooltipClass, - placement: _ctx.placement, - role: "slider", - "aria-label": _ctx.range || !vue.unref(isLabeledByFormItem) ? vue.unref(firstButtonLabel) : void 0, - "aria-labelledby": !_ctx.range && vue.unref(isLabeledByFormItem) ? (_b = vue.unref(elFormItem)) == null ? void 0 : _b.labelId : void 0, - "aria-valuemin": _ctx.min, - "aria-valuemax": _ctx.range ? vue.unref(secondValue) : _ctx.max, - "aria-valuenow": vue.unref(firstValue), - "aria-valuetext": vue.unref(firstValueText), - "aria-orientation": _ctx.vertical ? "vertical" : "horizontal", - "aria-disabled": vue.unref(sliderDisabled), - "onUpdate:modelValue": vue.unref(setFirstValue) - }, null, 8, ["id", "model-value", "vertical", "tooltip-class", "placement", "aria-label", "aria-labelledby", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-valuetext", "aria-orientation", "aria-disabled", "onUpdate:modelValue"]), - _ctx.range ? (vue.openBlock(), vue.createBlock(SliderButton, { - key: 0, - ref_key: "secondButton", - ref: secondButton, - "model-value": vue.unref(secondValue), - vertical: _ctx.vertical, - "tooltip-class": _ctx.tooltipClass, - placement: _ctx.placement, - role: "slider", - "aria-label": vue.unref(secondButtonLabel), - "aria-valuemin": vue.unref(firstValue), - "aria-valuemax": _ctx.max, - "aria-valuenow": vue.unref(secondValue), - "aria-valuetext": vue.unref(secondValueText), - "aria-orientation": _ctx.vertical ? "vertical" : "horizontal", - "aria-disabled": vue.unref(sliderDisabled), - "onUpdate:modelValue": vue.unref(setSecondValue) - }, null, 8, ["model-value", "vertical", "tooltip-class", "placement", "aria-label", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-valuetext", "aria-orientation", "aria-disabled", "onUpdate:modelValue"])) : vue.createCommentVNode("v-if", true), - _ctx.showStops ? (vue.openBlock(), vue.createElementBlock("div", { key: 1 }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(stops), (item, key) => { - return vue.openBlock(), vue.createElementBlock("div", { - key, - class: vue.normalizeClass(vue.unref(ns).e("stop")), - style: vue.normalizeStyle(vue.unref(getStopStyle)(item)) - }, null, 6); - }), 128)) - ])) : vue.createCommentVNode("v-if", true), - vue.unref(markList).length > 0 ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 2 }, [ - vue.createElementVNode("div", null, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(markList), (item, key) => { - return vue.openBlock(), vue.createElementBlock("div", { - key, - style: vue.normalizeStyle(vue.unref(getStopStyle)(item.position)), - class: vue.normalizeClass([vue.unref(ns).e("stop"), vue.unref(ns).e("marks-stop")]) - }, null, 6); - }), 128)) - ]), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("marks")) - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(markList), (item, key) => { - return vue.openBlock(), vue.createBlock(vue.unref(SliderMarker), { - key, - mark: item.mark, - style: vue.normalizeStyle(vue.unref(getStopStyle)(item.position)), - onMousedown: vue.withModifiers(($event) => vue.unref(onSliderMarkerDown)(item.position), ["stop"]) - }, null, 8, ["mark", "style", "onMousedown"]); - }), 128)) - ], 2) - ], 64)) : vue.createCommentVNode("v-if", true) - ], 46, ["onMousedown", "onTouchstartPassive"]), - _ctx.showInput && !_ctx.range ? (vue.openBlock(), vue.createBlock(vue.unref(ElInputNumber), { - key: 0, - ref: "input", - "model-value": vue.unref(firstValue), - class: vue.normalizeClass(vue.unref(ns).e("input")), - step: _ctx.step, - disabled: vue.unref(sliderDisabled), - controls: _ctx.showInputControls, - min: _ctx.min, - max: _ctx.max, - precision: vue.unref(precision), - debounce: _ctx.debounce, - size: vue.unref(sliderInputSize), - "onUpdate:modelValue": vue.unref(setFirstValue), - onChange: vue.unref(emitChange) - }, null, 8, ["model-value", "class", "step", "disabled", "controls", "min", "max", "precision", "debounce", "size", "onUpdate:modelValue", "onChange"])) : vue.createCommentVNode("v-if", true) - ], 10, ["id", "role", "aria-label", "aria-labelledby"]); - }; - } - }); - var Slider = /* @__PURE__ */ _export_sfc(_sfc_main$I, [["__file", "slider.vue"]]); - - const ElSlider = withInstall(Slider); - - const spaceItemProps = buildProps({ - prefixCls: { - type: String - } - }); - const SpaceItem = vue.defineComponent({ - name: "ElSpaceItem", - props: spaceItemProps, - setup(props, { slots }) { - const ns = useNamespace("space"); - const classes = vue.computed(() => `${props.prefixCls || ns.b()}__item`); - return () => vue.h("div", { class: classes.value }, vue.renderSlot(slots, "default")); - } - }); - - const SIZE_MAP = { - small: 8, - default: 12, - large: 16 - }; - function useSpace(props) { - const ns = useNamespace("space"); - const classes = vue.computed(() => [ns.b(), ns.m(props.direction), props.class]); - const horizontalSize = vue.ref(0); - const verticalSize = vue.ref(0); - const containerStyle = vue.computed(() => { - const wrapKls = props.wrap || props.fill ? { flexWrap: "wrap" } : {}; - const alignment = { - alignItems: props.alignment - }; - const gap = { - rowGap: `${verticalSize.value}px`, - columnGap: `${horizontalSize.value}px` - }; - return [wrapKls, alignment, gap, props.style]; - }); - const itemStyle = vue.computed(() => { - return props.fill ? { flexGrow: 1, minWidth: `${props.fillRatio}%` } : {}; - }); - vue.watchEffect(() => { - const { size = "small", wrap, direction: dir, fill } = props; - if (isArray$1(size)) { - const [h = 0, v = 0] = size; - horizontalSize.value = h; - verticalSize.value = v; - } else { - let val; - if (isNumber(size)) { - val = size; - } else { - val = SIZE_MAP[size || "small"] || SIZE_MAP.small; - } - if ((wrap || fill) && dir === "horizontal") { - horizontalSize.value = verticalSize.value = val; - } else { - if (dir === "horizontal") { - horizontalSize.value = val; - verticalSize.value = 0; - } else { - verticalSize.value = val; - horizontalSize.value = 0; - } - } - } - }); - return { - classes, - containerStyle, - itemStyle - }; - } - - const spaceProps = buildProps({ - direction: { - type: String, - values: ["horizontal", "vertical"], - default: "horizontal" - }, - class: { - type: definePropType([ - String, - Object, - Array - ]), - default: "" - }, - style: { - type: definePropType([String, Array, Object]), - default: "" - }, - alignment: { - type: definePropType(String), - default: "center" - }, - prefixCls: { - type: String - }, - spacer: { - type: definePropType([Object, String, Number, Array]), - default: null, - validator: (val) => vue.isVNode(val) || isNumber(val) || isString$1(val) - }, - wrap: Boolean, - fill: Boolean, - fillRatio: { - type: Number, - default: 100 - }, - size: { - type: [String, Array, Number], - values: componentSizes, - validator: (val) => { - return isNumber(val) || isArray$1(val) && val.length === 2 && val.every(isNumber); - } - } - }); - const Space = vue.defineComponent({ - name: "ElSpace", - props: spaceProps, - setup(props, { slots }) { - const { classes, containerStyle, itemStyle } = useSpace(props); - function extractChildren(children, parentKey = "", extractedChildren = []) { - const { prefixCls } = props; - children.forEach((child, loopKey) => { - if (isFragment(child)) { - if (isArray$1(child.children)) { - child.children.forEach((nested, key) => { - if (isFragment(nested) && isArray$1(nested.children)) { - extractChildren(nested.children, `${parentKey + key}-`, extractedChildren); - } else { - extractedChildren.push(vue.createVNode(SpaceItem, { - style: itemStyle.value, - prefixCls, - key: `nested-${parentKey + key}` - }, { - default: () => [nested] - }, PatchFlags.PROPS | PatchFlags.STYLE, ["style", "prefixCls"])); - } - }); - } - } else if (isValidElementNode(child)) { - extractedChildren.push(vue.createVNode(SpaceItem, { - style: itemStyle.value, - prefixCls, - key: `LoopKey${parentKey + loopKey}` - }, { - default: () => [child] - }, PatchFlags.PROPS | PatchFlags.STYLE, ["style", "prefixCls"])); - } - }); - return extractedChildren; - } - return () => { - var _a; - const { spacer, direction } = props; - const children = vue.renderSlot(slots, "default", { key: 0 }, () => []); - if (((_a = children.children) != null ? _a : []).length === 0) - return null; - if (isArray$1(children.children)) { - let extractedChildren = extractChildren(children.children); - if (spacer) { - const len = extractedChildren.length - 1; - extractedChildren = extractedChildren.reduce((acc, child, idx) => { - const children2 = [...acc, child]; - if (idx !== len) { - children2.push(vue.createVNode("span", { - style: [ - itemStyle.value, - direction === "vertical" ? "width: 100%" : null - ], - key: idx - }, [ - vue.isVNode(spacer) ? spacer : vue.createTextVNode(spacer, PatchFlags.TEXT) - ], PatchFlags.STYLE)); - } - return children2; - }, []); - } - return vue.createVNode("div", { - class: classes.value, - style: containerStyle.value - }, extractedChildren, PatchFlags.STYLE | PatchFlags.CLASS); - } - return children.children; - }; - } - }); - - const ElSpace = withInstall(Space); - - const statisticProps = buildProps({ - decimalSeparator: { - type: String, - default: "." - }, - groupSeparator: { - type: String, - default: "," - }, - precision: { - type: Number, - default: 0 - }, - formatter: Function, - value: { - type: definePropType([Number, Object]), - default: 0 - }, - prefix: String, - suffix: String, - title: String, - valueStyle: { - type: definePropType([String, Object, Array]) - } - }); - - const __default__$A = vue.defineComponent({ - name: "ElStatistic" - }); - const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({ - ...__default__$A, - props: statisticProps, - setup(__props, { expose }) { - const props = __props; - const ns = useNamespace("statistic"); - const displayValue = vue.computed(() => { - const { value, formatter, precision, decimalSeparator, groupSeparator } = props; - if (isFunction$1(formatter)) - return formatter(value); - if (!isNumber(value) || Number.isNaN(value)) - return value; - let [integer, decimal = ""] = String(value).split("."); - decimal = decimal.padEnd(precision, "0").slice(0, precision > 0 ? precision : 0); - integer = integer.replace(/\B(?=(\d{3})+(?!\d))/g, groupSeparator); - return [integer, decimal].join(decimal ? decimalSeparator : ""); - }); - expose({ - displayValue - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(ns).b()) - }, [ - _ctx.$slots.title || _ctx.title ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("head")) - }, [ - vue.renderSlot(_ctx.$slots, "title", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.title), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("content")) - }, [ - _ctx.$slots.prefix || _ctx.prefix ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("prefix")) - }, [ - vue.renderSlot(_ctx.$slots, "prefix", {}, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(_ctx.prefix), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(ns).e("number")), - style: vue.normalizeStyle(_ctx.valueStyle) - }, vue.toDisplayString(vue.unref(displayValue)), 7), - _ctx.$slots.suffix || _ctx.suffix ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("suffix")) - }, [ - vue.renderSlot(_ctx.$slots, "suffix", {}, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(_ctx.suffix), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2) - ], 2); - }; - } - }); - var Statistic = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["__file", "statistic.vue"]]); - - const ElStatistic = withInstall(Statistic); - - const countdownProps = buildProps({ - format: { - type: String, - default: "HH:mm:ss" - }, - prefix: String, - suffix: String, - title: String, - value: { - type: definePropType([Number, Object]), - default: 0 - }, - valueStyle: { - type: definePropType([String, Object, Array]) - } - }); - const countdownEmits = { - finish: () => true, - [CHANGE_EVENT]: (value) => isNumber(value) - }; - - const timeUnits = [ - ["Y", 1e3 * 60 * 60 * 24 * 365], - ["M", 1e3 * 60 * 60 * 24 * 30], - ["D", 1e3 * 60 * 60 * 24], - ["H", 1e3 * 60 * 60], - ["m", 1e3 * 60], - ["s", 1e3], - ["S", 1] - ]; - const getTime = (value) => { - return isNumber(value) ? new Date(value).getTime() : value.valueOf(); - }; - const formatTime$1 = (timestamp, format) => { - let timeLeft = timestamp; - const escapeRegex = /\[([^\]]*)]/g; - const replacedText = timeUnits.reduce((current, [name, unit]) => { - const replaceRegex = new RegExp(`${name}+(?![^\\[\\]]*\\])`, "g"); - if (replaceRegex.test(current)) { - const value = Math.floor(timeLeft / unit); - timeLeft -= value * unit; - return current.replace(replaceRegex, (match) => String(value).padStart(match.length, "0")); - } - return current; - }, format); - return replacedText.replace(escapeRegex, "$1"); - }; - - const __default__$z = vue.defineComponent({ - name: "ElCountdown" - }); - const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({ - ...__default__$z, - props: countdownProps, - emits: countdownEmits, - setup(__props, { expose, emit }) { - const props = __props; - let timer; - const rawValue = vue.ref(0); - const displayValue = vue.computed(() => formatTime$1(rawValue.value, props.format)); - const formatter = (val) => formatTime$1(val, props.format); - const stopTimer = () => { - if (timer) { - cAF(timer); - timer = void 0; - } - }; - const startTimer = () => { - const timestamp = getTime(props.value); - const frameFunc = () => { - let diff = timestamp - Date.now(); - emit("change", diff); - if (diff <= 0) { - diff = 0; - stopTimer(); - emit("finish"); - } else { - timer = rAF(frameFunc); - } - rawValue.value = diff; - }; - timer = rAF(frameFunc); - }; - vue.onMounted(() => { - rawValue.value = getTime(props.value) - Date.now(); - vue.watch(() => [props.value, props.format], () => { - stopTimer(); - startTimer(); - }, { - immediate: true - }); - }); - vue.onBeforeUnmount(() => { - stopTimer(); - }); - expose({ - displayValue - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElStatistic), { - value: rawValue.value, - title: _ctx.title, - prefix: _ctx.prefix, - suffix: _ctx.suffix, - "value-style": _ctx.valueStyle, - formatter - }, vue.createSlots({ - _: 2 - }, [ - vue.renderList(_ctx.$slots, (_, name) => { - return { - name, - fn: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, name) - ]) - }; - }) - ]), 1032, ["value", "title", "prefix", "suffix", "value-style"]); - }; - } - }); - var Countdown = /* @__PURE__ */ _export_sfc(_sfc_main$G, [["__file", "countdown.vue"]]); - - const ElCountdown = withInstall(Countdown); - - const stepsProps = buildProps({ - space: { - type: [Number, String], - default: "" - }, - active: { - type: Number, - default: 0 - }, - direction: { - type: String, - default: "horizontal", - values: ["horizontal", "vertical"] - }, - alignCenter: { - type: Boolean - }, - simple: { - type: Boolean - }, - finishStatus: { - type: String, - values: ["wait", "process", "finish", "error", "success"], - default: "finish" - }, - processStatus: { - type: String, - values: ["wait", "process", "finish", "error", "success"], - default: "process" - } - }); - const stepsEmits = { - [CHANGE_EVENT]: (newVal, oldVal) => [newVal, oldVal].every(isNumber) - }; - - const __default__$y = vue.defineComponent({ - name: "ElSteps" - }); - const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({ - ...__default__$y, - props: stepsProps, - emits: stepsEmits, - setup(__props, { emit }) { - const props = __props; - const ns = useNamespace("steps"); - const { - children: steps, - addChild: addStep, - removeChild: removeStep - } = useOrderedChildren(vue.getCurrentInstance(), "ElStep"); - vue.watch(steps, () => { - steps.value.forEach((instance, index) => { - instance.setIndex(index); - }); - }); - vue.provide("ElSteps", { props, steps, addStep, removeStep }); - vue.watch(() => props.active, (newVal, oldVal) => { - emit(CHANGE_EVENT, newVal, oldVal); - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([vue.unref(ns).b(), vue.unref(ns).m(_ctx.simple ? "simple" : _ctx.direction)]) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2); - }; - } - }); - var Steps = /* @__PURE__ */ _export_sfc(_sfc_main$F, [["__file", "steps.vue"]]); - - const stepProps = buildProps({ - title: { - type: String, - default: "" - }, - icon: { - type: iconPropType - }, - description: { - type: String, - default: "" - }, - status: { - type: String, - values: ["", "wait", "process", "finish", "error", "success"], - default: "" - } - }); - - const __default__$x = vue.defineComponent({ - name: "ElStep" - }); - const _sfc_main$E = vue.defineComponent({ - ...__default__$x, - props: stepProps, - setup(__props) { - const props = __props; - const ns = useNamespace("step"); - const index = vue.ref(-1); - const lineStyle = vue.ref({}); - const internalStatus = vue.ref(""); - const parent = vue.inject("ElSteps"); - const currentInstance = vue.getCurrentInstance(); - vue.onMounted(() => { - vue.watch([ - () => parent.props.active, - () => parent.props.processStatus, - () => parent.props.finishStatus - ], ([active]) => { - updateStatus(active); - }, { immediate: true }); - }); - vue.onBeforeUnmount(() => { - parent.removeStep(stepItemState.uid); - }); - const currentStatus = vue.computed(() => { - return props.status || internalStatus.value; - }); - const prevStatus = vue.computed(() => { - const prevStep = parent.steps.value[index.value - 1]; - return prevStep ? prevStep.currentStatus : "wait"; - }); - const isCenter = vue.computed(() => { - return parent.props.alignCenter; - }); - const isVertical = vue.computed(() => { - return parent.props.direction === "vertical"; - }); - const isSimple = vue.computed(() => { - return parent.props.simple; - }); - const stepsCount = vue.computed(() => { - return parent.steps.value.length; - }); - const isLast = vue.computed(() => { - var _a; - return ((_a = parent.steps.value[stepsCount.value - 1]) == null ? void 0 : _a.uid) === (currentInstance == null ? void 0 : currentInstance.uid); - }); - const space = vue.computed(() => { - return isSimple.value ? "" : parent.props.space; - }); - const containerKls = vue.computed(() => { - return [ - ns.b(), - ns.is(isSimple.value ? "simple" : parent.props.direction), - ns.is("flex", isLast.value && !space.value && !isCenter.value), - ns.is("center", isCenter.value && !isVertical.value && !isSimple.value) - ]; - }); - const style = vue.computed(() => { - const style2 = { - flexBasis: isNumber(space.value) ? `${space.value}px` : space.value ? space.value : `${100 / (stepsCount.value - (isCenter.value ? 0 : 1))}%` - }; - if (isVertical.value) - return style2; - if (isLast.value) { - style2.maxWidth = `${100 / stepsCount.value}%`; - } - return style2; - }); - const setIndex = (val) => { - index.value = val; - }; - const calcProgress = (status) => { - const isWait = status === "wait"; - const style2 = { - transitionDelay: `${isWait ? "-" : ""}${150 * index.value}ms` - }; - const step = status === parent.props.processStatus || isWait ? 0 : 100; - style2.borderWidth = step && !isSimple.value ? "1px" : 0; - style2[parent.props.direction === "vertical" ? "height" : "width"] = `${step}%`; - lineStyle.value = style2; - }; - const updateStatus = (activeIndex) => { - if (activeIndex > index.value) { - internalStatus.value = parent.props.finishStatus; - } else if (activeIndex === index.value && prevStatus.value !== "error") { - internalStatus.value = parent.props.processStatus; - } else { - internalStatus.value = "wait"; - } - const prevChild = parent.steps.value[index.value - 1]; - if (prevChild) - prevChild.calcProgress(internalStatus.value); - }; - const stepItemState = vue.reactive({ - uid: currentInstance.uid, - currentStatus, - setIndex, - calcProgress - }); - parent.addStep(stepItemState); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - style: vue.normalizeStyle(vue.unref(style)), - class: vue.normalizeClass(vue.unref(containerKls)) - }, [ - vue.createCommentVNode(" icon & line "), - vue.createElementVNode("div", { - class: vue.normalizeClass([vue.unref(ns).e("head"), vue.unref(ns).is(vue.unref(currentStatus))]) - }, [ - !vue.unref(isSimple) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("line")) - }, [ - vue.createElementVNode("i", { - class: vue.normalizeClass(vue.unref(ns).e("line-inner")), - style: vue.normalizeStyle(lineStyle.value) - }, null, 6) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass([vue.unref(ns).e("icon"), vue.unref(ns).is(_ctx.icon || _ctx.$slots.icon ? "icon" : "text")]) - }, [ - vue.renderSlot(_ctx.$slots, "icon", {}, () => [ - _ctx.icon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("icon-inner")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon))) - ]), - _: 1 - }, 8, ["class"])) : vue.unref(currentStatus) === "success" ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 1, - class: vue.normalizeClass([vue.unref(ns).e("icon-inner"), vue.unref(ns).is("status")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(check_default)) - ]), - _: 1 - }, 8, ["class"])) : vue.unref(currentStatus) === "error" ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 2, - class: vue.normalizeClass([vue.unref(ns).e("icon-inner"), vue.unref(ns).is("status")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(close_default)) - ]), - _: 1 - }, 8, ["class"])) : !vue.unref(isSimple) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 3, - class: vue.normalizeClass(vue.unref(ns).e("icon-inner")) - }, vue.toDisplayString(index.value + 1), 3)) : vue.createCommentVNode("v-if", true) - ]) - ], 2) - ], 2), - vue.createCommentVNode(" title & description "), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("main")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass([vue.unref(ns).e("title"), vue.unref(ns).is(vue.unref(currentStatus))]) - }, [ - vue.renderSlot(_ctx.$slots, "title", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.title), 1) - ]) - ], 2), - vue.unref(isSimple) ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("arrow")) - }, null, 2)) : (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass([vue.unref(ns).e("description"), vue.unref(ns).is(vue.unref(currentStatus))]) - }, [ - vue.renderSlot(_ctx.$slots, "description", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.description), 1) - ]) - ], 2)) - ], 2) - ], 6); - }; - } - }); - var Step = /* @__PURE__ */ _export_sfc(_sfc_main$E, [["__file", "item.vue"]]); - - const ElSteps = withInstall(Steps, { - Step - }); - const ElStep = withNoopInstall(Step); - - const switchProps = buildProps({ - modelValue: { - type: [Boolean, String, Number], - default: false - }, - disabled: Boolean, - loading: Boolean, - size: { - type: String, - validator: isValidComponentSize - }, - width: { - type: [String, Number], - default: "" - }, - inlinePrompt: Boolean, - inactiveActionIcon: { - type: iconPropType - }, - activeActionIcon: { - type: iconPropType - }, - activeIcon: { - type: iconPropType - }, - inactiveIcon: { - type: iconPropType - }, - activeText: { - type: String, - default: "" - }, - inactiveText: { - type: String, - default: "" - }, - activeValue: { - type: [Boolean, String, Number], - default: true - }, - inactiveValue: { - type: [Boolean, String, Number], - default: false - }, - name: { - type: String, - default: "" - }, - validateEvent: { - type: Boolean, - default: true - }, - beforeChange: { - type: definePropType(Function) - }, - id: String, - tabindex: { - type: [String, Number] - }, - ...useAriaProps(["ariaLabel"]) - }); - const switchEmits = { - [UPDATE_MODEL_EVENT]: (val) => isBoolean(val) || isString$1(val) || isNumber(val), - [CHANGE_EVENT]: (val) => isBoolean(val) || isString$1(val) || isNumber(val), - [INPUT_EVENT]: (val) => isBoolean(val) || isString$1(val) || isNumber(val) - }; - - const COMPONENT_NAME$8 = "ElSwitch"; - const __default__$w = vue.defineComponent({ - name: COMPONENT_NAME$8 - }); - const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({ - ...__default__$w, - props: switchProps, - emits: switchEmits, - setup(__props, { expose, emit }) { - const props = __props; - const { formItem } = useFormItem(); - const switchSize = useFormSize(); - const ns = useNamespace("switch"); - const { inputId } = useFormItemInputId(props, { - formItemContext: formItem - }); - const switchDisabled = useFormDisabled(vue.computed(() => props.loading)); - const isControlled = vue.ref(props.modelValue !== false); - const input = vue.ref(); - const core = vue.ref(); - const switchKls = vue.computed(() => [ - ns.b(), - ns.m(switchSize.value), - ns.is("disabled", switchDisabled.value), - ns.is("checked", checked.value) - ]); - const labelLeftKls = vue.computed(() => [ - ns.e("label"), - ns.em("label", "left"), - ns.is("active", !checked.value) - ]); - const labelRightKls = vue.computed(() => [ - ns.e("label"), - ns.em("label", "right"), - ns.is("active", checked.value) - ]); - const coreStyle = vue.computed(() => ({ - width: addUnit(props.width) - })); - vue.watch(() => props.modelValue, () => { - isControlled.value = true; - }); - const actualValue = vue.computed(() => { - return isControlled.value ? props.modelValue : false; - }); - const checked = vue.computed(() => actualValue.value === props.activeValue); - if (![props.activeValue, props.inactiveValue].includes(actualValue.value)) { - emit(UPDATE_MODEL_EVENT, props.inactiveValue); - emit(CHANGE_EVENT, props.inactiveValue); - emit(INPUT_EVENT, props.inactiveValue); - } - vue.watch(checked, (val) => { - var _a; - input.value.checked = val; - if (props.validateEvent) { - (_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, "change").catch((err) => debugWarn()); - } - }); - const handleChange = () => { - const val = checked.value ? props.inactiveValue : props.activeValue; - emit(UPDATE_MODEL_EVENT, val); - emit(CHANGE_EVENT, val); - emit(INPUT_EVENT, val); - vue.nextTick(() => { - input.value.checked = checked.value; - }); - }; - const switchValue = () => { - if (switchDisabled.value) - return; - const { beforeChange } = props; - if (!beforeChange) { - handleChange(); - return; - } - const shouldChange = beforeChange(); - const isPromiseOrBool = [ - isPromise(shouldChange), - isBoolean(shouldChange) - ].includes(true); - if (!isPromiseOrBool) { - throwError(COMPONENT_NAME$8, "beforeChange must return type `Promise` or `boolean`"); - } - if (isPromise(shouldChange)) { - shouldChange.then((result) => { - if (result) { - handleChange(); - } - }).catch((e) => { - }); - } else if (shouldChange) { - handleChange(); - } - }; - const focus = () => { - var _a, _b; - (_b = (_a = input.value) == null ? void 0 : _a.focus) == null ? void 0 : _b.call(_a); - }; - vue.onMounted(() => { - input.value.checked = checked.value; - }); - expose({ - focus, - checked - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(switchKls)), - onClick: vue.withModifiers(switchValue, ["prevent"]) - }, [ - vue.createElementVNode("input", { - id: vue.unref(inputId), - ref_key: "input", - ref: input, - class: vue.normalizeClass(vue.unref(ns).e("input")), - type: "checkbox", - role: "switch", - "aria-checked": vue.unref(checked), - "aria-disabled": vue.unref(switchDisabled), - "aria-label": _ctx.ariaLabel, - name: _ctx.name, - "true-value": _ctx.activeValue, - "false-value": _ctx.inactiveValue, - disabled: vue.unref(switchDisabled), - tabindex: _ctx.tabindex, - onChange: handleChange, - onKeydown: vue.withKeys(switchValue, ["enter"]) - }, null, 42, ["id", "aria-checked", "aria-disabled", "aria-label", "name", "true-value", "false-value", "disabled", "tabindex", "onKeydown"]), - !_ctx.inlinePrompt && (_ctx.inactiveIcon || _ctx.inactiveText) ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - class: vue.normalizeClass(vue.unref(labelLeftKls)) - }, [ - _ctx.inactiveIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.inactiveIcon))) - ]), - _: 1 - })) : vue.createCommentVNode("v-if", true), - !_ctx.inactiveIcon && _ctx.inactiveText ? (vue.openBlock(), vue.createElementBlock("span", { - key: 1, - "aria-hidden": vue.unref(checked) - }, vue.toDisplayString(_ctx.inactiveText), 9, ["aria-hidden"])) : vue.createCommentVNode("v-if", true) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("span", { - ref_key: "core", - ref: core, - class: vue.normalizeClass(vue.unref(ns).e("core")), - style: vue.normalizeStyle(vue.unref(coreStyle)) - }, [ - _ctx.inlinePrompt ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("inner")) - }, [ - _ctx.activeIcon || _ctx.inactiveIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(ns).is("icon")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(checked) ? _ctx.activeIcon : _ctx.inactiveIcon))) - ]), - _: 1 - }, 8, ["class"])) : _ctx.activeText || _ctx.inactiveText ? (vue.openBlock(), vue.createElementBlock("span", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).is("text")), - "aria-hidden": !vue.unref(checked) - }, vue.toDisplayString(vue.unref(checked) ? _ctx.activeText : _ctx.inactiveText), 11, ["aria-hidden"])) : vue.createCommentVNode("v-if", true) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("action")) - }, [ - _ctx.loading ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(ns).is("loading")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(loading_default)) - ]), - _: 1 - }, 8, ["class"])) : vue.unref(checked) ? vue.renderSlot(_ctx.$slots, "active-action", { key: 1 }, () => [ - _ctx.activeActionIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.activeActionIcon))) - ]), - _: 1 - })) : vue.createCommentVNode("v-if", true) - ]) : !vue.unref(checked) ? vue.renderSlot(_ctx.$slots, "inactive-action", { key: 2 }, () => [ - _ctx.inactiveActionIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.inactiveActionIcon))) - ]), - _: 1 - })) : vue.createCommentVNode("v-if", true) - ]) : vue.createCommentVNode("v-if", true) - ], 2) - ], 6), - !_ctx.inlinePrompt && (_ctx.activeIcon || _ctx.activeText) ? (vue.openBlock(), vue.createElementBlock("span", { - key: 1, - class: vue.normalizeClass(vue.unref(labelRightKls)) - }, [ - _ctx.activeIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { key: 0 }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.activeIcon))) - ]), - _: 1 - })) : vue.createCommentVNode("v-if", true), - !_ctx.activeIcon && _ctx.activeText ? (vue.openBlock(), vue.createElementBlock("span", { - key: 1, - "aria-hidden": !vue.unref(checked) - }, vue.toDisplayString(_ctx.activeText), 9, ["aria-hidden"])) : vue.createCommentVNode("v-if", true) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 10, ["onClick"]); - }; - } - }); - var Switch = /* @__PURE__ */ _export_sfc(_sfc_main$D, [["__file", "switch.vue"]]); - - const ElSwitch = withInstall(Switch); - - const getCell = function(event) { - var _a; - return (_a = event.target) == null ? void 0 : _a.closest("td"); - }; - const orderBy = function(array, sortKey, reverse, sortMethod, sortBy) { - if (!sortKey && !sortMethod && (!sortBy || isArray$1(sortBy) && !sortBy.length)) { - return array; - } - if (isString$1(reverse)) { - reverse = reverse === "descending" ? -1 : 1; - } else { - reverse = reverse && reverse < 0 ? -1 : 1; - } - const getKey = sortMethod ? null : function(value, index) { - if (sortBy) { - if (!isArray$1(sortBy)) { - sortBy = [sortBy]; - } - return sortBy.map((by) => { - if (isString$1(by)) { - return get(value, by); - } else { - return by(value, index, array); - } - }); - } - if (sortKey !== "$key") { - if (isObject$1(value) && "$value" in value) - value = value.$value; - } - return [isObject$1(value) ? get(value, sortKey) : value]; - }; - const compare = function(a, b) { - if (sortMethod) { - return sortMethod(a.value, b.value); - } - for (let i = 0, len = a.key.length; i < len; i++) { - if (a.key[i] < b.key[i]) { - return -1; - } - if (a.key[i] > b.key[i]) { - return 1; - } - } - return 0; - }; - return array.map((value, index) => { - return { - value, - index, - key: getKey ? getKey(value, index) : null - }; - }).sort((a, b) => { - let order = compare(a, b); - if (!order) { - order = a.index - b.index; - } - return order * +reverse; - }).map((item) => item.value); - }; - const getColumnById = function(table, columnId) { - let column = null; - table.columns.forEach((item) => { - if (item.id === columnId) { - column = item; - } - }); - return column; - }; - const getColumnByKey = function(table, columnKey) { - let column = null; - for (let i = 0; i < table.columns.length; i++) { - const item = table.columns[i]; - if (item.columnKey === columnKey) { - column = item; - break; - } - } - if (!column) - throwError("ElTable", `No column matching with column-key: ${columnKey}`); - return column; - }; - const getColumnByCell = function(table, cell, namespace) { - const matches = (cell.className || "").match(new RegExp(`${namespace}-table_[^\\s]+`, "gm")); - if (matches) { - return getColumnById(table, matches[0]); - } - return null; - }; - const getRowIdentity = (row, rowKey) => { - if (!row) - throw new Error("Row is required when get row identity"); - if (isString$1(rowKey)) { - if (!rowKey.includes(".")) { - return `${row[rowKey]}`; - } - const key = rowKey.split("."); - let current = row; - for (const element of key) { - current = current[element]; - } - return `${current}`; - } else if (isFunction$1(rowKey)) { - return rowKey.call(null, row); - } - }; - const getKeysMap = function(array, rowKey) { - const arrayMap = {}; - (array || []).forEach((row, index) => { - arrayMap[getRowIdentity(row, rowKey)] = { row, index }; - }); - return arrayMap; - }; - function mergeOptions(defaults, config) { - const options = {}; - let key; - for (key in defaults) { - options[key] = defaults[key]; - } - for (key in config) { - if (hasOwn(config, key)) { - const value = config[key]; - if (!isUndefined(value)) { - options[key] = value; - } - } - } - return options; - } - function parseWidth(width) { - if (width === "") - return width; - if (!isUndefined(width)) { - width = Number.parseInt(width, 10); - if (Number.isNaN(width)) { - width = ""; - } - } - return width; - } - function parseMinWidth(minWidth) { - if (minWidth === "") - return minWidth; - if (!isUndefined(minWidth)) { - minWidth = parseWidth(minWidth); - if (Number.isNaN(minWidth)) { - minWidth = 80; - } - } - return minWidth; - } - function parseHeight(height) { - if (isNumber(height)) { - return height; - } - if (isString$1(height)) { - if (/^\d+(?:px)?$/.test(height)) { - return Number.parseInt(height, 10); - } else { - return height; - } - } - return null; - } - function compose(...funcs) { - if (funcs.length === 0) { - return (arg) => arg; - } - if (funcs.length === 1) { - return funcs[0]; - } - return funcs.reduce((a, b) => (...args) => a(b(...args))); - } - function toggleRowStatus(statusArr, row, newVal, tableTreeProps, selectable, rowIndex) { - let _rowIndex = rowIndex != null ? rowIndex : 0; - let changed = false; - const index = statusArr.indexOf(row); - const included = index !== -1; - const isRowSelectable = selectable == null ? void 0 : selectable.call(null, row, _rowIndex); - const toggleStatus = (type) => { - if (type === "add") { - statusArr.push(row); - } else { - statusArr.splice(index, 1); - } - changed = true; - }; - const getChildrenCount = (row2) => { - let count = 0; - const children = (tableTreeProps == null ? void 0 : tableTreeProps.children) && row2[tableTreeProps.children]; - if (children && isArray$1(children)) { - count += children.length; - children.forEach((item) => { - count += getChildrenCount(item); - }); - } - return count; - }; - if (!selectable || isRowSelectable) { - if (isBoolean(newVal)) { - if (newVal && !included) { - toggleStatus("add"); - } else if (!newVal && included) { - toggleStatus("remove"); - } - } else { - included ? toggleStatus("remove") : toggleStatus("add"); - } - } - if (!(tableTreeProps == null ? void 0 : tableTreeProps.checkStrictly) && (tableTreeProps == null ? void 0 : tableTreeProps.children) && isArray$1(row[tableTreeProps.children])) { - row[tableTreeProps.children].forEach((item) => { - const childChanged = toggleRowStatus(statusArr, item, newVal != null ? newVal : !included, tableTreeProps, selectable, _rowIndex + 1); - _rowIndex += getChildrenCount(item) + 1; - if (childChanged) { - changed = childChanged; - } - }); - } - return changed; - } - function walkTreeNode(root, cb, childrenKey = "children", lazyKey = "hasChildren") { - const isNil = (array) => !(isArray$1(array) && array.length); - function _walker(parent, children, level) { - cb(parent, children, level); - children.forEach((item) => { - if (item[lazyKey]) { - cb(item, null, level + 1); - return; - } - const children2 = item[childrenKey]; - if (!isNil(children2)) { - _walker(item, children2, level + 1); - } - }); - } - root.forEach((item) => { - if (item[lazyKey]) { - cb(item, null, 0); - return; - } - const children = item[childrenKey]; - if (!isNil(children)) { - _walker(item, children, 0); - } - }); - } - const getTableOverflowTooltipProps = (props, innerText, row, column) => { - const popperOptions = { - strategy: "fixed", - ...props.popperOptions - }; - const tooltipFormatterContent = isFunction$1(column.tooltipFormatter) ? column.tooltipFormatter({ - row, - column, - cellValue: getProp(row, column.property).value - }) : void 0; - if (vue.isVNode(tooltipFormatterContent)) { - return { - slotContent: tooltipFormatterContent, - content: null, - ...props, - popperOptions - }; - } - return { - slotContent: null, - content: tooltipFormatterContent != null ? tooltipFormatterContent : innerText, - ...props, - popperOptions - }; - }; - let removePopper = null; - function createTablePopper(props, popperContent, row, column, trigger, table) { - const tableOverflowTooltipProps = getTableOverflowTooltipProps(props, popperContent, row, column); - const mergedProps = { - ...tableOverflowTooltipProps, - slotContent: void 0 - }; - if ((removePopper == null ? void 0 : removePopper.trigger) === trigger) { - const comp = removePopper.vm.component; - merge(comp.props, mergedProps); - if (tableOverflowTooltipProps.slotContent) { - comp.slots.content = () => [tableOverflowTooltipProps.slotContent]; - } - return; - } - removePopper == null ? void 0 : removePopper(); - const parentNode = table == null ? void 0 : table.refs.tableWrapper; - const ns = parentNode == null ? void 0 : parentNode.dataset.prefix; - const vm = vue.createVNode(ElTooltip, { - virtualTriggering: true, - virtualRef: trigger, - appendTo: parentNode, - placement: "top", - transition: "none", - offset: 0, - hideAfter: 0, - ...mergedProps - }, tableOverflowTooltipProps.slotContent ? { - content: () => tableOverflowTooltipProps.slotContent - } : void 0); - vm.appContext = { ...table.appContext, ...table }; - const container = document.createElement("div"); - vue.render(vm, container); - vm.component.exposed.onOpen(); - const scrollContainer = parentNode == null ? void 0 : parentNode.querySelector(`.${ns}-scrollbar__wrap`); - removePopper = () => { - vue.render(null, container); - scrollContainer == null ? void 0 : scrollContainer.removeEventListener("scroll", removePopper); - removePopper = null; - }; - removePopper.trigger = trigger; - removePopper.vm = vm; - scrollContainer == null ? void 0 : scrollContainer.addEventListener("scroll", removePopper); - } - function getCurrentColumns(column) { - if (column.children) { - return flatMap(column.children, getCurrentColumns); - } else { - return [column]; - } - } - function getColSpan(colSpan, column) { - return colSpan + column.colSpan; - } - const isFixedColumn = (index, fixed, store, realColumns) => { - let start = 0; - let after = index; - const columns = store.states.columns.value; - if (realColumns) { - const curColumns = getCurrentColumns(realColumns[index]); - const preColumns = columns.slice(0, columns.indexOf(curColumns[0])); - start = preColumns.reduce(getColSpan, 0); - after = start + curColumns.reduce(getColSpan, 0) - 1; - } else { - start = index; - } - let fixedLayout; - switch (fixed) { - case "left": - if (after < store.states.fixedLeafColumnsLength.value) { - fixedLayout = "left"; - } - break; - case "right": - if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) { - fixedLayout = "right"; - } - break; - default: - if (after < store.states.fixedLeafColumnsLength.value) { - fixedLayout = "left"; - } else if (start >= columns.length - store.states.rightFixedLeafColumnsLength.value) { - fixedLayout = "right"; - } - } - return fixedLayout ? { - direction: fixedLayout, - start, - after - } : {}; - }; - const getFixedColumnsClass = (namespace, index, fixed, store, realColumns, offset = 0) => { - const classes = []; - const { direction, start, after } = isFixedColumn(index, fixed, store, realColumns); - if (direction) { - const isLeft = direction === "left"; - classes.push(`${namespace}-fixed-column--${direction}`); - if (isLeft && after + offset === store.states.fixedLeafColumnsLength.value - 1) { - classes.push("is-last-column"); - } else if (!isLeft && start - offset === store.states.columns.value.length - store.states.rightFixedLeafColumnsLength.value) { - classes.push("is-first-column"); - } - } - return classes; - }; - function getOffset(offset, column) { - return offset + (isNull(column.realWidth) || Number.isNaN(column.realWidth) ? Number(column.width) : column.realWidth); - } - const getFixedColumnOffset = (index, fixed, store, realColumns) => { - const { - direction, - start = 0, - after = 0 - } = isFixedColumn(index, fixed, store, realColumns); - if (!direction) { - return; - } - const styles = {}; - const isLeft = direction === "left"; - const columns = store.states.columns.value; - if (isLeft) { - styles.left = columns.slice(0, start).reduce(getOffset, 0); - } else { - styles.right = columns.slice(after + 1).reverse().reduce(getOffset, 0); - } - return styles; - }; - const ensurePosition = (style, key) => { - if (!style) - return; - if (!Number.isNaN(style[key])) { - style[key] = `${style[key]}px`; - } - }; - - function useExpand(watcherData) { - const instance = vue.getCurrentInstance(); - const defaultExpandAll = vue.ref(false); - const expandRows = vue.ref([]); - const updateExpandRows = () => { - const data = watcherData.data.value || []; - const rowKey = watcherData.rowKey.value; - if (defaultExpandAll.value) { - expandRows.value = data.slice(); - } else if (rowKey) { - const expandRowsMap = getKeysMap(expandRows.value, rowKey); - expandRows.value = data.reduce((prev, row) => { - const rowId = getRowIdentity(row, rowKey); - const rowInfo = expandRowsMap[rowId]; - if (rowInfo) { - prev.push(row); - } - return prev; - }, []); - } else { - expandRows.value = []; - } - }; - const toggleRowExpansion = (row, expanded) => { - const changed = toggleRowStatus(expandRows.value, row, expanded); - if (changed) { - instance.emit("expand-change", row, expandRows.value.slice()); - } - }; - const setExpandRowKeys = (rowKeys) => { - instance.store.assertRowKey(); - const data = watcherData.data.value || []; - const rowKey = watcherData.rowKey.value; - const keysMap = getKeysMap(data, rowKey); - expandRows.value = rowKeys.reduce((prev, cur) => { - const info = keysMap[cur]; - if (info) { - prev.push(info.row); - } - return prev; - }, []); - }; - const isRowExpanded = (row) => { - const rowKey = watcherData.rowKey.value; - if (rowKey) { - const expandMap = getKeysMap(expandRows.value, rowKey); - return !!expandMap[getRowIdentity(row, rowKey)]; - } - return expandRows.value.includes(row); - }; - return { - updateExpandRows, - toggleRowExpansion, - setExpandRowKeys, - isRowExpanded, - states: { - expandRows, - defaultExpandAll - } - }; - } - - function useCurrent(watcherData) { - const instance = vue.getCurrentInstance(); - const _currentRowKey = vue.ref(null); - const currentRow = vue.ref(null); - const setCurrentRowKey = (key) => { - instance.store.assertRowKey(); - _currentRowKey.value = key; - setCurrentRowByKey(key); - }; - const restoreCurrentRowKey = () => { - _currentRowKey.value = null; - }; - const setCurrentRowByKey = (key) => { - const { data, rowKey } = watcherData; - let _currentRow = null; - if (rowKey.value) { - _currentRow = (vue.unref(data) || []).find((item) => getRowIdentity(item, rowKey.value) === key); - } - currentRow.value = _currentRow; - instance.emit("current-change", currentRow.value, null); - }; - const updateCurrentRow = (_currentRow) => { - const oldCurrentRow = currentRow.value; - if (_currentRow && _currentRow !== oldCurrentRow) { - currentRow.value = _currentRow; - instance.emit("current-change", currentRow.value, oldCurrentRow); - return; - } - if (!_currentRow && oldCurrentRow) { - currentRow.value = null; - instance.emit("current-change", null, oldCurrentRow); - } - }; - const updateCurrentRowData = () => { - const rowKey = watcherData.rowKey.value; - const data = watcherData.data.value || []; - const oldCurrentRow = currentRow.value; - if (!data.includes(oldCurrentRow) && oldCurrentRow) { - if (rowKey) { - const currentRowKey = getRowIdentity(oldCurrentRow, rowKey); - setCurrentRowByKey(currentRowKey); - } else { - currentRow.value = null; - } - if (isNull(currentRow.value)) { - instance.emit("current-change", null, oldCurrentRow); - } - } else if (_currentRowKey.value) { - setCurrentRowByKey(_currentRowKey.value); - restoreCurrentRowKey(); - } - }; - return { - setCurrentRowKey, - restoreCurrentRowKey, - setCurrentRowByKey, - updateCurrentRow, - updateCurrentRowData, - states: { - _currentRowKey, - currentRow - } - }; - } - - function useTree$2(watcherData) { - const expandRowKeys = vue.ref([]); - const treeData = vue.ref({}); - const indent = vue.ref(16); - const lazy = vue.ref(false); - const lazyTreeNodeMap = vue.ref({}); - const lazyColumnIdentifier = vue.ref("hasChildren"); - const childrenColumnName = vue.ref("children"); - const checkStrictly = vue.ref(false); - const instance = vue.getCurrentInstance(); - const normalizedData = vue.computed(() => { - if (!watcherData.rowKey.value) - return {}; - const data = watcherData.data.value || []; - return normalize(data); - }); - const normalizedLazyNode = vue.computed(() => { - const rowKey = watcherData.rowKey.value; - const keys = Object.keys(lazyTreeNodeMap.value); - const res = {}; - if (!keys.length) - return res; - keys.forEach((key) => { - if (lazyTreeNodeMap.value[key].length) { - const item = { children: [] }; - lazyTreeNodeMap.value[key].forEach((row) => { - const currentRowKey = getRowIdentity(row, rowKey); - item.children.push(currentRowKey); - if (row[lazyColumnIdentifier.value] && !res[currentRowKey]) { - res[currentRowKey] = { children: [] }; - } - }); - res[key] = item; - } - }); - return res; - }); - const normalize = (data) => { - const rowKey = watcherData.rowKey.value; - const res = {}; - walkTreeNode(data, (parent, children, level) => { - const parentId = getRowIdentity(parent, rowKey); - if (isArray$1(children)) { - res[parentId] = { - children: children.map((row) => getRowIdentity(row, rowKey)), - level - }; - } else if (lazy.value) { - res[parentId] = { - children: [], - lazy: true, - level - }; - } - }, childrenColumnName.value, lazyColumnIdentifier.value); - return res; - }; - const updateTreeData = (ifChangeExpandRowKeys = false, ifExpandAll = ((_a) => (_a = instance.store) == null ? void 0 : _a.states.defaultExpandAll.value)()) => { - var _a2; - const nested = normalizedData.value; - const normalizedLazyNode_ = normalizedLazyNode.value; - const keys = Object.keys(nested); - const newTreeData = {}; - if (keys.length) { - const oldTreeData = vue.unref(treeData); - const rootLazyRowKeys = []; - const getExpanded = (oldValue, key) => { - if (ifChangeExpandRowKeys) { - if (expandRowKeys.value) { - return ifExpandAll || expandRowKeys.value.includes(key); - } else { - return !!(ifExpandAll || (oldValue == null ? void 0 : oldValue.expanded)); - } - } else { - const included = ifExpandAll || expandRowKeys.value && expandRowKeys.value.includes(key); - return !!((oldValue == null ? void 0 : oldValue.expanded) || included); - } - }; - keys.forEach((key) => { - const oldValue = oldTreeData[key]; - const newValue = { ...nested[key] }; - newValue.expanded = getExpanded(oldValue, key); - if (newValue.lazy) { - const { loaded = false, loading = false } = oldValue || {}; - newValue.loaded = !!loaded; - newValue.loading = !!loading; - rootLazyRowKeys.push(key); - } - newTreeData[key] = newValue; - }); - const lazyKeys = Object.keys(normalizedLazyNode_); - if (lazy.value && lazyKeys.length && rootLazyRowKeys.length) { - lazyKeys.forEach((key) => { - const oldValue = oldTreeData[key]; - const lazyNodeChildren = normalizedLazyNode_[key].children; - if (rootLazyRowKeys.includes(key)) { - if (newTreeData[key].children.length !== 0) { - throw new Error("[ElTable]children must be an empty array."); - } - newTreeData[key].children = lazyNodeChildren; - } else { - const { loaded = false, loading = false } = oldValue || {}; - newTreeData[key] = { - lazy: true, - loaded: !!loaded, - loading: !!loading, - expanded: getExpanded(oldValue, key), - children: lazyNodeChildren, - level: "" - }; - } - }); - } - } - treeData.value = newTreeData; - (_a2 = instance.store) == null ? void 0 : _a2.updateTableScrollY(); - }; - vue.watch(() => expandRowKeys.value, () => { - updateTreeData(true); - }); - vue.watch(() => normalizedData.value, () => { - updateTreeData(); - }); - vue.watch(() => normalizedLazyNode.value, () => { - updateTreeData(); - }); - const updateTreeExpandKeys = (value) => { - expandRowKeys.value = value; - updateTreeData(); - }; - const isUseLazy = (data) => { - return lazy.value && data && "loaded" in data && !data.loaded; - }; - const toggleTreeExpansion = (row, expanded) => { - instance.store.assertRowKey(); - const rowKey = watcherData.rowKey.value; - const id = getRowIdentity(row, rowKey); - const data = id && treeData.value[id]; - if (id && data && "expanded" in data) { - const oldExpanded = data.expanded; - expanded = isUndefined(expanded) ? !data.expanded : expanded; - treeData.value[id].expanded = expanded; - if (oldExpanded !== expanded) { - instance.emit("expand-change", row, expanded); - } - isUseLazy(data) && loadData(row, id, data); - instance.store.updateTableScrollY(); - } - }; - const loadOrToggle = (row) => { - instance.store.assertRowKey(); - const rowKey = watcherData.rowKey.value; - const id = getRowIdentity(row, rowKey); - const data = treeData.value[id]; - if (isUseLazy(data)) { - loadData(row, id, data); - } else { - toggleTreeExpansion(row, void 0); - } - }; - const loadData = (row, key, treeNode) => { - const { load } = instance.props; - if (load && !treeData.value[key].loaded) { - treeData.value[key].loading = true; - load(row, treeNode, (data) => { - if (!isArray$1(data)) { - throw new TypeError("[ElTable] data must be an array"); - } - treeData.value[key].loading = false; - treeData.value[key].loaded = true; - treeData.value[key].expanded = true; - if (data.length) { - lazyTreeNodeMap.value[key] = data; - } - instance.emit("expand-change", row, true); - }); - } - }; - const updateKeyChildren = (key, data) => { - const { lazy: lazy2, rowKey } = instance.props; - if (!lazy2) - return; - if (!rowKey) - throw new Error("[Table] rowKey is required in updateKeyChild"); - if (lazyTreeNodeMap.value[key]) { - lazyTreeNodeMap.value[key] = data; - } - }; - return { - loadData, - loadOrToggle, - toggleTreeExpansion, - updateTreeExpandKeys, - updateTreeData, - updateKeyChildren, - normalize, - states: { - expandRowKeys, - treeData, - indent, - lazy, - lazyTreeNodeMap, - lazyColumnIdentifier, - childrenColumnName, - checkStrictly - } - }; - } - - const sortData = (data, states) => { - const sortingColumn = states.sortingColumn; - if (!sortingColumn || isString$1(sortingColumn.sortable)) { - return data; - } - return orderBy(data, states.sortProp, states.sortOrder, sortingColumn.sortMethod, sortingColumn.sortBy); - }; - const doFlattenColumns = (columns) => { - const result = []; - columns.forEach((column) => { - if (column.children && column.children.length > 0) { - result.push.apply(result, doFlattenColumns(column.children)); - } else { - result.push(column); - } - }); - return result; - }; - function useWatcher$1() { - var _a; - const instance = vue.getCurrentInstance(); - const { size: tableSize } = vue.toRefs((_a = instance.proxy) == null ? void 0 : _a.$props); - const rowKey = vue.ref(null); - const data = vue.ref([]); - const _data = vue.ref([]); - const isComplex = vue.ref(false); - const _columns = vue.ref([]); - const originColumns = vue.ref([]); - const columns = vue.ref([]); - const fixedColumns = vue.ref([]); - const rightFixedColumns = vue.ref([]); - const leafColumns = vue.ref([]); - const fixedLeafColumns = vue.ref([]); - const rightFixedLeafColumns = vue.ref([]); - const updateOrderFns = []; - const leafColumnsLength = vue.ref(0); - const fixedLeafColumnsLength = vue.ref(0); - const rightFixedLeafColumnsLength = vue.ref(0); - const isAllSelected = vue.ref(false); - const selection = vue.ref([]); - const reserveSelection = vue.ref(false); - const selectOnIndeterminate = vue.ref(false); - const selectable = vue.ref(null); - const filters = vue.ref({}); - const filteredData = vue.ref(null); - const sortingColumn = vue.ref(null); - const sortProp = vue.ref(null); - const sortOrder = vue.ref(null); - const hoverRow = vue.ref(null); - const selectedMap = vue.computed(() => { - return rowKey.value ? getKeysMap(selection.value, rowKey.value) : void 0; - }); - vue.watch(data, () => { - var _a2; - if (instance.state) { - scheduleLayout(false); - const needUpdateFixed = instance.props.tableLayout === "auto"; - if (needUpdateFixed) { - (_a2 = instance.refs.tableHeaderRef) == null ? void 0 : _a2.updateFixedColumnStyle(); - } - } - }, { - deep: true - }); - const assertRowKey = () => { - if (!rowKey.value) - throw new Error("[ElTable] prop row-key is required"); - }; - const updateChildFixed = (column) => { - var _a2; - (_a2 = column.children) == null ? void 0 : _a2.forEach((childColumn) => { - childColumn.fixed = column.fixed; - updateChildFixed(childColumn); - }); - }; - const updateColumns = () => { - var _a2, _b; - _columns.value.forEach((column) => { - updateChildFixed(column); - }); - fixedColumns.value = _columns.value.filter((column) => column.type !== "selection" && [true, "left"].includes(column.fixed)); - let selectColFixLeft; - if (((_b = (_a2 = _columns.value) == null ? void 0 : _a2[0]) == null ? void 0 : _b.type) === "selection") { - const selectColumn = _columns.value[0]; - selectColFixLeft = [true, "left"].includes(selectColumn.fixed) || fixedColumns.value.length && selectColumn.fixed !== "right"; - if (selectColFixLeft) { - fixedColumns.value.unshift(selectColumn); - } - } - rightFixedColumns.value = _columns.value.filter((column) => column.fixed === "right"); - const notFixedColumns = _columns.value.filter((column) => (selectColFixLeft ? column.type !== "selection" : true) && !column.fixed); - originColumns.value = [].concat(fixedColumns.value).concat(notFixedColumns).concat(rightFixedColumns.value); - const leafColumns2 = doFlattenColumns(notFixedColumns); - const fixedLeafColumns2 = doFlattenColumns(fixedColumns.value); - const rightFixedLeafColumns2 = doFlattenColumns(rightFixedColumns.value); - leafColumnsLength.value = leafColumns2.length; - fixedLeafColumnsLength.value = fixedLeafColumns2.length; - rightFixedLeafColumnsLength.value = rightFixedLeafColumns2.length; - columns.value = [].concat(fixedLeafColumns2).concat(leafColumns2).concat(rightFixedLeafColumns2); - isComplex.value = fixedColumns.value.length > 0 || rightFixedColumns.value.length > 0; - }; - const scheduleLayout = (needUpdateColumns, immediate = false) => { - if (needUpdateColumns) { - updateColumns(); - } - if (immediate) { - instance.state.doLayout(); - } else { - instance.state.debouncedUpdateLayout(); - } - }; - const isSelected = (row) => { - if (selectedMap.value) { - return !!selectedMap.value[getRowIdentity(row, rowKey.value)]; - } else { - return selection.value.includes(row); - } - }; - const clearSelection = () => { - isAllSelected.value = false; - const oldSelection = selection.value; - selection.value = []; - if (oldSelection.length) { - instance.emit("selection-change", []); - } - }; - const cleanSelection = () => { - let deleted; - if (rowKey.value) { - deleted = []; - const dataMap = getKeysMap(data.value, rowKey.value); - for (const key in selectedMap.value) { - if (hasOwn(selectedMap.value, key) && !dataMap[key]) { - deleted.push(selectedMap.value[key].row); - } - } - } else { - deleted = selection.value.filter((item) => !data.value.includes(item)); - } - if (deleted.length) { - const newSelection = selection.value.filter((item) => !deleted.includes(item)); - selection.value = newSelection; - instance.emit("selection-change", newSelection.slice()); - } - }; - const getSelectionRows = () => { - return (selection.value || []).slice(); - }; - const toggleRowSelection = (row, selected, emitChange = true, ignoreSelectable = false) => { - var _a2, _b, _c, _d; - const treeProps = { - children: (_b = (_a2 = instance == null ? void 0 : instance.store) == null ? void 0 : _a2.states) == null ? void 0 : _b.childrenColumnName.value, - checkStrictly: (_d = (_c = instance == null ? void 0 : instance.store) == null ? void 0 : _c.states) == null ? void 0 : _d.checkStrictly.value - }; - const changed = toggleRowStatus(selection.value, row, selected, treeProps, ignoreSelectable ? void 0 : selectable.value, data.value.indexOf(row)); - if (changed) { - const newSelection = (selection.value || []).slice(); - if (emitChange) { - instance.emit("select", newSelection, row); - } - instance.emit("selection-change", newSelection); - } - }; - const _toggleAllSelection = () => { - var _a2, _b; - const value = selectOnIndeterminate.value ? !isAllSelected.value : !(isAllSelected.value || selection.value.length); - isAllSelected.value = value; - let selectionChanged = false; - let childrenCount = 0; - const rowKey2 = (_b = (_a2 = instance == null ? void 0 : instance.store) == null ? void 0 : _a2.states) == null ? void 0 : _b.rowKey.value; - const { childrenColumnName } = instance.store.states; - const treeProps = { - children: childrenColumnName.value, - checkStrictly: false - }; - data.value.forEach((row, index) => { - const rowIndex = index + childrenCount; - if (toggleRowStatus(selection.value, row, value, treeProps, selectable.value, rowIndex)) { - selectionChanged = true; - } - childrenCount += getChildrenCount(getRowIdentity(row, rowKey2)); - }); - if (selectionChanged) { - instance.emit("selection-change", selection.value ? selection.value.slice() : []); - } - instance.emit("select-all", (selection.value || []).slice()); - }; - const updateSelectionByRowKey = () => { - data.value.forEach((row) => { - const rowId = getRowIdentity(row, rowKey.value); - const rowInfo = selectedMap.value[rowId]; - if (rowInfo) { - selection.value[rowInfo.index] = row; - } - }); - }; - const updateAllSelected = () => { - var _a2; - if (((_a2 = data.value) == null ? void 0 : _a2.length) === 0) { - isAllSelected.value = false; - return; - } - const { childrenColumnName } = instance.store.states; - let rowIndex = 0; - let selectedCount = 0; - const checkSelectedStatus = (data2) => { - var _a3; - for (const row of data2) { - const isRowSelectable = selectable.value && selectable.value.call(null, row, rowIndex); - if (!isSelected(row)) { - if (!selectable.value || isRowSelectable) { - return false; - } - } else { - selectedCount++; - } - rowIndex++; - if (((_a3 = row[childrenColumnName.value]) == null ? void 0 : _a3.length) && !checkSelectedStatus(row[childrenColumnName.value])) { - return false; - } - } - return true; - }; - const isAllSelected_ = checkSelectedStatus(data.value || []); - isAllSelected.value = selectedCount === 0 ? false : isAllSelected_; - }; - const getChildrenCount = (rowKey2) => { - var _a2; - if (!instance || !instance.store) - return 0; - const { treeData } = instance.store.states; - let count = 0; - const children = (_a2 = treeData.value[rowKey2]) == null ? void 0 : _a2.children; - if (children) { - count += children.length; - children.forEach((childKey) => { - count += getChildrenCount(childKey); - }); - } - return count; - }; - const updateFilters = (columns2, values) => { - if (!isArray$1(columns2)) { - columns2 = [columns2]; - } - const filters_ = {}; - columns2.forEach((col) => { - filters.value[col.id] = values; - filters_[col.columnKey || col.id] = values; - }); - return filters_; - }; - const updateSort = (column, prop, order) => { - if (sortingColumn.value && sortingColumn.value !== column) { - sortingColumn.value.order = null; - } - sortingColumn.value = column; - sortProp.value = prop; - sortOrder.value = order; - }; - const execFilter = () => { - let sourceData = vue.unref(_data); - Object.keys(filters.value).forEach((columnId) => { - const values = filters.value[columnId]; - if (!values || values.length === 0) - return; - const column = getColumnById({ - columns: columns.value - }, columnId); - if (column && column.filterMethod) { - sourceData = sourceData.filter((row) => { - return values.some((value) => column.filterMethod.call(null, value, row, column)); - }); - } - }); - filteredData.value = sourceData; - }; - const execSort = () => { - data.value = sortData(filteredData.value, { - sortingColumn: sortingColumn.value, - sortProp: sortProp.value, - sortOrder: sortOrder.value - }); - }; - const execQuery = (ignore = void 0) => { - if (!(ignore && ignore.filter)) { - execFilter(); - } - execSort(); - }; - const clearFilter = (columnKeys) => { - const { tableHeaderRef } = instance.refs; - if (!tableHeaderRef) - return; - const panels = Object.assign({}, tableHeaderRef.filterPanels); - const keys = Object.keys(panels); - if (!keys.length) - return; - if (isString$1(columnKeys)) { - columnKeys = [columnKeys]; - } - if (isArray$1(columnKeys)) { - const columns_ = columnKeys.map((key) => getColumnByKey({ - columns: columns.value - }, key)); - keys.forEach((key) => { - const column = columns_.find((col) => col.id === key); - if (column) { - column.filteredValue = []; - } - }); - instance.store.commit("filterChange", { - column: columns_, - values: [], - silent: true, - multi: true - }); - } else { - keys.forEach((key) => { - const column = columns.value.find((col) => col.id === key); - if (column) { - column.filteredValue = []; - } - }); - filters.value = {}; - instance.store.commit("filterChange", { - column: {}, - values: [], - silent: true - }); - } - }; - const clearSort = () => { - if (!sortingColumn.value) - return; - updateSort(null, null, null); - instance.store.commit("changeSortCondition", { - silent: true - }); - }; - const { - setExpandRowKeys, - toggleRowExpansion, - updateExpandRows, - states: expandStates, - isRowExpanded - } = useExpand({ - data, - rowKey - }); - const { - updateTreeExpandKeys, - toggleTreeExpansion, - updateTreeData, - updateKeyChildren, - loadOrToggle, - states: treeStates - } = useTree$2({ - data, - rowKey - }); - const { - updateCurrentRowData, - updateCurrentRow, - setCurrentRowKey, - states: currentData - } = useCurrent({ - data, - rowKey - }); - const setExpandRowKeysAdapter = (val) => { - setExpandRowKeys(val); - updateTreeExpandKeys(val); - }; - const toggleRowExpansionAdapter = (row, expanded) => { - const hasExpandColumn = columns.value.some(({ type }) => type === "expand"); - if (hasExpandColumn) { - toggleRowExpansion(row, expanded); - } else { - toggleTreeExpansion(row, expanded); - } - }; - return { - assertRowKey, - updateColumns, - scheduleLayout, - isSelected, - clearSelection, - cleanSelection, - getSelectionRows, - toggleRowSelection, - _toggleAllSelection, - toggleAllSelection: null, - updateSelectionByRowKey, - updateAllSelected, - updateFilters, - updateCurrentRow, - updateSort, - execFilter, - execSort, - execQuery, - clearFilter, - clearSort, - toggleRowExpansion, - setExpandRowKeysAdapter, - setCurrentRowKey, - toggleRowExpansionAdapter, - isRowExpanded, - updateExpandRows, - updateCurrentRowData, - loadOrToggle, - updateTreeData, - updateKeyChildren, - states: { - tableSize, - rowKey, - data, - _data, - isComplex, - _columns, - originColumns, - columns, - fixedColumns, - rightFixedColumns, - leafColumns, - fixedLeafColumns, - rightFixedLeafColumns, - updateOrderFns, - leafColumnsLength, - fixedLeafColumnsLength, - rightFixedLeafColumnsLength, - isAllSelected, - selection, - reserveSelection, - selectOnIndeterminate, - selectable, - filters, - filteredData, - sortingColumn, - sortProp, - sortOrder, - hoverRow, - ...expandStates, - ...treeStates, - ...currentData - } - }; - } - - function replaceColumn(array, column) { - return array.map((item) => { - var _a; - if (item.id === column.id) { - return column; - } else if ((_a = item.children) == null ? void 0 : _a.length) { - item.children = replaceColumn(item.children, column); - } - return item; - }); - } - function sortColumn(array) { - array.forEach((item) => { - var _a, _b; - item.no = (_a = item.getColumnIndex) == null ? void 0 : _a.call(item); - if ((_b = item.children) == null ? void 0 : _b.length) { - sortColumn(item.children); - } - }); - array.sort((cur, pre) => cur.no - pre.no); - } - function useStore() { - const instance = vue.getCurrentInstance(); - const watcher = useWatcher$1(); - const ns = useNamespace("table"); - const mutations = { - setData(states, data) { - const dataInstanceChanged = vue.unref(states._data) !== data; - states.data.value = data; - states._data.value = data; - instance.store.execQuery(); - instance.store.updateCurrentRowData(); - instance.store.updateExpandRows(); - instance.store.updateTreeData(instance.store.states.defaultExpandAll.value); - if (vue.unref(states.reserveSelection)) { - instance.store.assertRowKey(); - instance.store.updateSelectionByRowKey(); - } else { - if (dataInstanceChanged) { - instance.store.clearSelection(); - } else { - instance.store.cleanSelection(); - } - } - instance.store.updateAllSelected(); - if (instance.$ready) { - instance.store.scheduleLayout(); - } - }, - insertColumn(states, column, parent, updateColumnOrder) { - const array = vue.unref(states._columns); - let newColumns = []; - if (!parent) { - array.push(column); - newColumns = array; - } else { - if (parent && !parent.children) { - parent.children = []; - } - parent.children.push(column); - newColumns = replaceColumn(array, parent); - } - sortColumn(newColumns); - states._columns.value = newColumns; - states.updateOrderFns.push(updateColumnOrder); - if (column.type === "selection") { - states.selectable.value = column.selectable; - states.reserveSelection.value = column.reserveSelection; - } - if (instance.$ready) { - instance.store.updateColumns(); - instance.store.scheduleLayout(); - } - }, - updateColumnOrder(states, column) { - var _a; - const newColumnIndex = (_a = column.getColumnIndex) == null ? void 0 : _a.call(column); - if (newColumnIndex === column.no) - return; - sortColumn(states._columns.value); - if (instance.$ready) { - instance.store.updateColumns(); - } - }, - removeColumn(states, column, parent, updateColumnOrder) { - const array = vue.unref(states._columns) || []; - if (parent) { - parent.children.splice(parent.children.findIndex((item) => item.id === column.id), 1); - vue.nextTick(() => { - var _a; - if (((_a = parent.children) == null ? void 0 : _a.length) === 0) { - delete parent.children; - } - }); - states._columns.value = replaceColumn(array, parent); - } else { - const index = array.indexOf(column); - if (index > -1) { - array.splice(index, 1); - states._columns.value = array; - } - } - const updateFnIndex = states.updateOrderFns.indexOf(updateColumnOrder); - updateFnIndex > -1 && states.updateOrderFns.splice(updateFnIndex, 1); - if (instance.$ready) { - instance.store.updateColumns(); - instance.store.scheduleLayout(); - } - }, - sort(states, options) { - const { prop, order, init } = options; - if (prop) { - const column = vue.unref(states.columns).find((column2) => column2.property === prop); - if (column) { - column.order = order; - instance.store.updateSort(column, prop, order); - instance.store.commit("changeSortCondition", { init }); - } - } - }, - changeSortCondition(states, options) { - const { sortingColumn, sortProp, sortOrder } = states; - const columnValue = vue.unref(sortingColumn), propValue = vue.unref(sortProp), orderValue = vue.unref(sortOrder); - if (isNull(orderValue)) { - states.sortingColumn.value = null; - states.sortProp.value = null; - } - const ignore = { filter: true }; - instance.store.execQuery(ignore); - if (!options || !(options.silent || options.init)) { - instance.emit("sort-change", { - column: columnValue, - prop: propValue, - order: orderValue - }); - } - instance.store.updateTableScrollY(); - }, - filterChange(_states, options) { - const { column, values, silent } = options; - const newFilters = instance.store.updateFilters(column, values); - instance.store.execQuery(); - if (!silent) { - instance.emit("filter-change", newFilters); - } - instance.store.updateTableScrollY(); - }, - toggleAllSelection() { - instance.store.toggleAllSelection(); - }, - rowSelectedChanged(_states, row) { - instance.store.toggleRowSelection(row); - instance.store.updateAllSelected(); - }, - setHoverRow(states, row) { - states.hoverRow.value = row; - }, - setCurrentRow(_states, row) { - instance.store.updateCurrentRow(row); - } - }; - const commit = function(name, ...args) { - const mutations2 = instance.store.mutations; - if (mutations2[name]) { - mutations2[name].apply(instance, [instance.store.states].concat(args)); - } else { - throw new Error(`Action not found: ${name}`); - } - }; - const updateTableScrollY = function() { - vue.nextTick(() => instance.layout.updateScrollY.apply(instance.layout)); - }; - return { - ns, - ...watcher, - mutations, - commit, - updateTableScrollY - }; - } - - const InitialStateMap = { - rowKey: "rowKey", - defaultExpandAll: "defaultExpandAll", - selectOnIndeterminate: "selectOnIndeterminate", - indent: "indent", - lazy: "lazy", - data: "data", - ["treeProps.hasChildren"]: { - key: "lazyColumnIdentifier", - default: "hasChildren" - }, - ["treeProps.children"]: { - key: "childrenColumnName", - default: "children" - }, - ["treeProps.checkStrictly"]: { - key: "checkStrictly", - default: false - } - }; - function createStore(table, props) { - if (!table) { - throw new Error("Table is required."); - } - const store = useStore(); - store.toggleAllSelection = debounce(store._toggleAllSelection, 10); - Object.keys(InitialStateMap).forEach((key) => { - handleValue(getArrKeysValue(props, key), key, store); - }); - proxyTableProps(store, props); - return store; - } - function proxyTableProps(store, props) { - Object.keys(InitialStateMap).forEach((key) => { - vue.watch(() => getArrKeysValue(props, key), (value) => { - handleValue(value, key, store); - }); - }); - } - function handleValue(value, propsKey, store) { - let newVal = value; - let storeKey = InitialStateMap[propsKey]; - if (isObject$1(InitialStateMap[propsKey])) { - storeKey = storeKey.key; - newVal = newVal || InitialStateMap[propsKey].default; - } - store.states[storeKey].value = newVal; - } - function getArrKeysValue(props, keys) { - if (keys.includes(".")) { - const keyList = keys.split("."); - let value = props; - keyList.forEach((key) => { - value = value[key]; - }); - return value; - } else { - return props[keys]; - } - } - - class TableLayout { - constructor(options) { - this.observers = []; - this.table = null; - this.store = null; - this.columns = []; - this.fit = true; - this.showHeader = true; - this.height = vue.ref(null); - this.scrollX = vue.ref(false); - this.scrollY = vue.ref(false); - this.bodyWidth = vue.ref(null); - this.fixedWidth = vue.ref(null); - this.rightFixedWidth = vue.ref(null); - this.gutterWidth = 0; - for (const name in options) { - if (hasOwn(options, name)) { - if (vue.isRef(this[name])) { - this[name].value = options[name]; - } else { - this[name] = options[name]; - } - } - } - if (!this.table) { - throw new Error("Table is required for Table Layout"); - } - if (!this.store) { - throw new Error("Store is required for Table Layout"); - } - } - updateScrollY() { - const height = this.height.value; - if (isNull(height)) - return false; - const scrollBarRef = this.table.refs.scrollBarRef; - if (this.table.vnode.el && (scrollBarRef == null ? void 0 : scrollBarRef.wrapRef)) { - let scrollY = true; - const prevScrollY = this.scrollY.value; - scrollY = scrollBarRef.wrapRef.scrollHeight > scrollBarRef.wrapRef.clientHeight; - this.scrollY.value = scrollY; - return prevScrollY !== scrollY; - } - return false; - } - setHeight(value, prop = "height") { - if (!isClient) - return; - const el = this.table.vnode.el; - value = parseHeight(value); - this.height.value = Number(value); - if (!el && (value || value === 0)) - return vue.nextTick(() => this.setHeight(value, prop)); - if (isNumber(value)) { - el.style[prop] = `${value}px`; - this.updateElsHeight(); - } else if (isString$1(value)) { - el.style[prop] = value; - this.updateElsHeight(); - } - } - setMaxHeight(value) { - this.setHeight(value, "max-height"); - } - getFlattenColumns() { - const flattenColumns = []; - const columns = this.table.store.states.columns.value; - columns.forEach((column) => { - if (column.isColumnGroup) { - flattenColumns.push.apply(flattenColumns, column.columns); - } else { - flattenColumns.push(column); - } - }); - return flattenColumns; - } - updateElsHeight() { - this.updateScrollY(); - this.notifyObservers("scrollable"); - } - headerDisplayNone(elm) { - if (!elm) - return true; - let headerChild = elm; - while (headerChild.tagName !== "DIV") { - if (getComputedStyle(headerChild).display === "none") { - return true; - } - headerChild = headerChild.parentElement; - } - return false; - } - updateColumnsWidth() { - if (!isClient) - return; - const fit = this.fit; - const bodyWidth = this.table.vnode.el.clientWidth; - let bodyMinWidth = 0; - const flattenColumns = this.getFlattenColumns(); - const flexColumns = flattenColumns.filter((column) => !isNumber(column.width)); - flattenColumns.forEach((column) => { - if (isNumber(column.width) && column.realWidth) - column.realWidth = null; - }); - if (flexColumns.length > 0 && fit) { - flattenColumns.forEach((column) => { - bodyMinWidth += Number(column.width || column.minWidth || 80); - }); - if (bodyMinWidth <= bodyWidth) { - this.scrollX.value = false; - const totalFlexWidth = bodyWidth - bodyMinWidth; - if (flexColumns.length === 1) { - flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth; - } else { - const allColumnsWidth = flexColumns.reduce((prev, column) => prev + Number(column.minWidth || 80), 0); - const flexWidthPerPixel = totalFlexWidth / allColumnsWidth; - let noneFirstWidth = 0; - flexColumns.forEach((column, index) => { - if (index === 0) - return; - const flexWidth = Math.floor(Number(column.minWidth || 80) * flexWidthPerPixel); - noneFirstWidth += flexWidth; - column.realWidth = Number(column.minWidth || 80) + flexWidth; - }); - flexColumns[0].realWidth = Number(flexColumns[0].minWidth || 80) + totalFlexWidth - noneFirstWidth; - } - } else { - this.scrollX.value = true; - flexColumns.forEach((column) => { - column.realWidth = Number(column.minWidth); - }); - } - this.bodyWidth.value = Math.max(bodyMinWidth, bodyWidth); - this.table.state.resizeState.value.width = this.bodyWidth.value; - } else { - flattenColumns.forEach((column) => { - if (!column.width && !column.minWidth) { - column.realWidth = 80; - } else { - column.realWidth = Number(column.width || column.minWidth); - } - bodyMinWidth += column.realWidth; - }); - this.scrollX.value = bodyMinWidth > bodyWidth; - this.bodyWidth.value = bodyMinWidth; - } - const fixedColumns = this.store.states.fixedColumns.value; - if (fixedColumns.length > 0) { - let fixedWidth = 0; - fixedColumns.forEach((column) => { - fixedWidth += Number(column.realWidth || column.width); - }); - this.fixedWidth.value = fixedWidth; - } - const rightFixedColumns = this.store.states.rightFixedColumns.value; - if (rightFixedColumns.length > 0) { - let rightFixedWidth = 0; - rightFixedColumns.forEach((column) => { - rightFixedWidth += Number(column.realWidth || column.width); - }); - this.rightFixedWidth.value = rightFixedWidth; - } - this.notifyObservers("columns"); - } - addObserver(observer) { - this.observers.push(observer); - } - removeObserver(observer) { - const index = this.observers.indexOf(observer); - if (index !== -1) { - this.observers.splice(index, 1); - } - } - notifyObservers(event) { - const observers = this.observers; - observers.forEach((observer) => { - var _a, _b; - switch (event) { - case "columns": - (_a = observer.state) == null ? void 0 : _a.onColumnsChange(this); - break; - case "scrollable": - (_b = observer.state) == null ? void 0 : _b.onScrollableChange(this); - break; - default: - throw new Error(`Table Layout don't have event ${event}.`); - } - }); - } - } - var TableLayout$1 = TableLayout; - - const { CheckboxGroup: ElCheckboxGroup } = ElCheckbox; - const _sfc_main$C = vue.defineComponent({ - name: "ElTableFilterPanel", - components: { - ElCheckbox, - ElCheckboxGroup, - ElScrollbar, - ElTooltip, - ElIcon, - ArrowDown: arrow_down_default, - ArrowUp: arrow_up_default - }, - directives: { ClickOutside }, - props: { - placement: { - type: String, - default: "bottom-start" - }, - store: { - type: Object - }, - column: { - type: Object - }, - upDataColumn: { - type: Function - }, - appendTo: { - type: String - } - }, - setup(props) { - const instance = vue.getCurrentInstance(); - const { t } = useLocale(); - const ns = useNamespace("table-filter"); - const parent = instance == null ? void 0 : instance.parent; - if (!parent.filterPanels.value[props.column.id]) { - parent.filterPanels.value[props.column.id] = instance; - } - const tooltipVisible = vue.ref(false); - const tooltip = vue.ref(null); - const filters = vue.computed(() => { - return props.column && props.column.filters; - }); - const filterClassName = vue.computed(() => { - if (props.column.filterClassName) { - return `${ns.b()} ${props.column.filterClassName}`; - } - return ns.b(); - }); - const filterValue = vue.computed({ - get: () => { - var _a; - return (((_a = props.column) == null ? void 0 : _a.filteredValue) || [])[0]; - }, - set: (value) => { - if (filteredValue.value) { - if (!isPropAbsent(value)) { - filteredValue.value.splice(0, 1, value); - } else { - filteredValue.value.splice(0, 1); - } - } - } - }); - const filteredValue = vue.computed({ - get() { - if (props.column) { - return props.column.filteredValue || []; - } - return []; - }, - set(value) { - if (props.column) { - props.upDataColumn("filteredValue", value); - } - } - }); - const multiple = vue.computed(() => { - if (props.column) { - return props.column.filterMultiple; - } - return true; - }); - const isActive = (filter) => { - return filter.value === filterValue.value; - }; - const hidden = () => { - tooltipVisible.value = false; - }; - const showFilterPanel = (e) => { - e.stopPropagation(); - tooltipVisible.value = !tooltipVisible.value; - }; - const hideFilterPanel = () => { - tooltipVisible.value = false; - }; - const handleConfirm = () => { - confirmFilter(filteredValue.value); - hidden(); - }; - const handleReset = () => { - filteredValue.value = []; - confirmFilter(filteredValue.value); - hidden(); - }; - const handleSelect = (_filterValue) => { - filterValue.value = _filterValue; - if (!isPropAbsent(_filterValue)) { - confirmFilter(filteredValue.value); - } else { - confirmFilter([]); - } - hidden(); - }; - const confirmFilter = (filteredValue2) => { - props.store.commit("filterChange", { - column: props.column, - values: filteredValue2 - }); - props.store.updateAllSelected(); - }; - vue.watch(tooltipVisible, (value) => { - if (props.column) { - props.upDataColumn("filterOpened", value); - } - }, { - immediate: true - }); - const popperPaneRef = vue.computed(() => { - var _a, _b; - return (_b = (_a = tooltip.value) == null ? void 0 : _a.popperRef) == null ? void 0 : _b.contentRef; - }); - return { - tooltipVisible, - multiple, - filterClassName, - filteredValue, - filterValue, - filters, - handleConfirm, - handleReset, - handleSelect, - isPropAbsent, - isActive, - t, - ns, - showFilterPanel, - hideFilterPanel, - popperPaneRef, - tooltip - }; - } - }); - function _sfc_render$4(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_checkbox = vue.resolveComponent("el-checkbox"); - const _component_el_checkbox_group = vue.resolveComponent("el-checkbox-group"); - const _component_el_scrollbar = vue.resolveComponent("el-scrollbar"); - const _component_arrow_up = vue.resolveComponent("arrow-up"); - const _component_arrow_down = vue.resolveComponent("arrow-down"); - const _component_el_icon = vue.resolveComponent("el-icon"); - const _component_el_tooltip = vue.resolveComponent("el-tooltip"); - const _directive_click_outside = vue.resolveDirective("click-outside"); - return vue.openBlock(), vue.createBlock(_component_el_tooltip, { - ref: "tooltip", - visible: _ctx.tooltipVisible, - offset: 0, - placement: _ctx.placement, - "show-arrow": false, - "stop-popper-mouse-event": false, - teleported: "", - effect: "light", - pure: "", - "popper-class": _ctx.filterClassName, - persistent: "", - "append-to": _ctx.appendTo - }, { - content: vue.withCtx(() => [ - _ctx.multiple ? (vue.openBlock(), vue.createElementBlock("div", { key: 0 }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("content")) - }, [ - vue.createVNode(_component_el_scrollbar, { - "wrap-class": _ctx.ns.e("wrap") - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_el_checkbox_group, { - modelValue: _ctx.filteredValue, - "onUpdate:modelValue": ($event) => _ctx.filteredValue = $event, - class: vue.normalizeClass(_ctx.ns.e("checkbox-group")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.filters, (filter) => { - return vue.openBlock(), vue.createBlock(_component_el_checkbox, { - key: filter.value, - value: filter.value - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(filter.text), 1) - ]), - _: 2 - }, 1032, ["value"]); - }), 128)) - ]), - _: 1 - }, 8, ["modelValue", "onUpdate:modelValue", "class"]) - ]), - _: 1 - }, 8, ["wrap-class"]) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("bottom")) - }, [ - vue.createElementVNode("button", { - class: vue.normalizeClass({ [_ctx.ns.is("disabled")]: _ctx.filteredValue.length === 0 }), - disabled: _ctx.filteredValue.length === 0, - type: "button", - onClick: _ctx.handleConfirm - }, vue.toDisplayString(_ctx.t("el.table.confirmFilter")), 11, ["disabled", "onClick"]), - vue.createElementVNode("button", { - type: "button", - onClick: _ctx.handleReset - }, vue.toDisplayString(_ctx.t("el.table.resetFilter")), 9, ["onClick"]) - ], 2) - ])) : (vue.openBlock(), vue.createElementBlock("ul", { - key: 1, - class: vue.normalizeClass(_ctx.ns.e("list")) - }, [ - vue.createElementVNode("li", { - class: vue.normalizeClass([ - _ctx.ns.e("list-item"), - { - [_ctx.ns.is("active")]: _ctx.isPropAbsent(_ctx.filterValue) - } - ]), - onClick: ($event) => _ctx.handleSelect(null) - }, vue.toDisplayString(_ctx.t("el.table.clearFilter")), 11, ["onClick"]), - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.filters, (filter) => { - return vue.openBlock(), vue.createElementBlock("li", { - key: filter.value, - class: vue.normalizeClass([_ctx.ns.e("list-item"), _ctx.ns.is("active", _ctx.isActive(filter))]), - label: filter.value, - onClick: ($event) => _ctx.handleSelect(filter.value) - }, vue.toDisplayString(filter.text), 11, ["label", "onClick"]); - }), 128)) - ], 2)) - ]), - default: vue.withCtx(() => [ - vue.withDirectives((vue.openBlock(), vue.createElementBlock("span", { - class: vue.normalizeClass([ - `${_ctx.ns.namespace.value}-table__column-filter-trigger`, - `${_ctx.ns.namespace.value}-none-outline` - ]), - onClick: _ctx.showFilterPanel - }, [ - vue.createVNode(_component_el_icon, null, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "filter-icon", {}, () => [ - _ctx.column.filterOpened ? (vue.openBlock(), vue.createBlock(_component_arrow_up, { key: 0 })) : (vue.openBlock(), vue.createBlock(_component_arrow_down, { key: 1 })) - ]) - ]), - _: 3 - }) - ], 10, ["onClick"])), [ - [_directive_click_outside, _ctx.hideFilterPanel, _ctx.popperPaneRef] - ]) - ]), - _: 3 - }, 8, ["visible", "placement", "popper-class", "append-to"]); - } - var FilterPanel = /* @__PURE__ */ _export_sfc(_sfc_main$C, [["render", _sfc_render$4], ["__file", "filter-panel.vue"]]); - - function useLayoutObserver(root) { - const instance = vue.getCurrentInstance(); - vue.onBeforeMount(() => { - tableLayout.value.addObserver(instance); - }); - vue.onMounted(() => { - onColumnsChange(tableLayout.value); - onScrollableChange(tableLayout.value); - }); - vue.onUpdated(() => { - onColumnsChange(tableLayout.value); - onScrollableChange(tableLayout.value); - }); - vue.onUnmounted(() => { - tableLayout.value.removeObserver(instance); - }); - const tableLayout = vue.computed(() => { - const layout = root.layout; - if (!layout) { - throw new Error("Can not find table layout."); - } - return layout; - }); - const onColumnsChange = (layout) => { - var _a; - const cols = ((_a = root.vnode.el) == null ? void 0 : _a.querySelectorAll("colgroup > col")) || []; - if (!cols.length) - return; - const flattenColumns = layout.getFlattenColumns(); - const columnsMap = {}; - flattenColumns.forEach((column) => { - columnsMap[column.id] = column; - }); - for (let i = 0, j = cols.length; i < j; i++) { - const col = cols[i]; - const name = col.getAttribute("name"); - const column = columnsMap[name]; - if (column) { - col.setAttribute("width", column.realWidth || column.width); - } - } - }; - const onScrollableChange = (layout) => { - var _a, _b; - const cols = ((_a = root.vnode.el) == null ? void 0 : _a.querySelectorAll("colgroup > col[name=gutter]")) || []; - for (let i = 0, j = cols.length; i < j; i++) { - const col = cols[i]; - col.setAttribute("width", layout.scrollY.value ? layout.gutterWidth : "0"); - } - const ths = ((_b = root.vnode.el) == null ? void 0 : _b.querySelectorAll("th.gutter")) || []; - for (let i = 0, j = ths.length; i < j; i++) { - const th = ths[i]; - th.style.width = layout.scrollY.value ? `${layout.gutterWidth}px` : "0"; - th.style.display = layout.scrollY.value ? "" : "none"; - } - }; - return { - tableLayout: tableLayout.value, - onColumnsChange, - onScrollableChange - }; - } - - const TABLE_INJECTION_KEY = Symbol("ElTable"); - - function useEvent(props, emit) { - const instance = vue.getCurrentInstance(); - const parent = vue.inject(TABLE_INJECTION_KEY); - const handleFilterClick = (event) => { - event.stopPropagation(); - return; - }; - const handleHeaderClick = (event, column) => { - if (!column.filters && column.sortable) { - handleSortClick(event, column, false); - } else if (column.filterable && !column.sortable) { - handleFilterClick(event); - } - parent == null ? void 0 : parent.emit("header-click", column, event); - }; - const handleHeaderContextMenu = (event, column) => { - parent == null ? void 0 : parent.emit("header-contextmenu", column, event); - }; - const draggingColumn = vue.ref(null); - const dragging = vue.ref(false); - const dragState = vue.ref({}); - const handleMouseDown = (event, column) => { - if (!isClient) - return; - if (column.children && column.children.length > 0) - return; - if (draggingColumn.value && props.border) { - dragging.value = true; - const table = parent; - emit("set-drag-visible", true); - const tableEl = table == null ? void 0 : table.vnode.el; - const tableLeft = tableEl.getBoundingClientRect().left; - const columnEl = instance.vnode.el.querySelector(`th.${column.id}`); - const columnRect = columnEl.getBoundingClientRect(); - const minLeft = columnRect.left - tableLeft + 30; - addClass(columnEl, "noclick"); - dragState.value = { - startMouseLeft: event.clientX, - startLeft: columnRect.right - tableLeft, - startColumnLeft: columnRect.left - tableLeft, - tableLeft - }; - const resizeProxy = table == null ? void 0 : table.refs.resizeProxy; - resizeProxy.style.left = `${dragState.value.startLeft}px`; - document.onselectstart = function() { - return false; - }; - document.ondragstart = function() { - return false; - }; - const handleMouseMove2 = (event2) => { - const deltaLeft = event2.clientX - dragState.value.startMouseLeft; - const proxyLeft = dragState.value.startLeft + deltaLeft; - resizeProxy.style.left = `${Math.max(minLeft, proxyLeft)}px`; - }; - const handleMouseUp = () => { - if (dragging.value) { - const { startColumnLeft, startLeft } = dragState.value; - const finalLeft = Number.parseInt(resizeProxy.style.left, 10); - const columnWidth = finalLeft - startColumnLeft; - column.width = column.realWidth = columnWidth; - table == null ? void 0 : table.emit("header-dragend", column.width, startLeft - startColumnLeft, column, event); - requestAnimationFrame(() => { - props.store.scheduleLayout(false, true); - }); - document.body.style.cursor = ""; - dragging.value = false; - draggingColumn.value = null; - dragState.value = {}; - emit("set-drag-visible", false); - } - document.removeEventListener("mousemove", handleMouseMove2); - document.removeEventListener("mouseup", handleMouseUp); - document.onselectstart = null; - document.ondragstart = null; - setTimeout(() => { - removeClass(columnEl, "noclick"); - }, 0); - }; - document.addEventListener("mousemove", handleMouseMove2); - document.addEventListener("mouseup", handleMouseUp); - } - }; - const handleMouseMove = (event, column) => { - var _a; - if (column.children && column.children.length > 0) - return; - const el = event.target; - if (!isElement$1(el)) { - return; - } - const target = el == null ? void 0 : el.closest("th"); - if (!column || !column.resizable || !target) - return; - if (!dragging.value && props.border) { - const rect = target.getBoundingClientRect(); - const bodyStyle = document.body.style; - const isLastTh = ((_a = target.parentNode) == null ? void 0 : _a.lastElementChild) === target; - const allowDarg = props.allowDragLastColumn || !isLastTh; - if (rect.width > 12 && rect.right - event.pageX < 8 && allowDarg) { - bodyStyle.cursor = "col-resize"; - if (hasClass(target, "is-sortable")) { - target.style.cursor = "col-resize"; - } - draggingColumn.value = column; - } else if (!dragging.value) { - bodyStyle.cursor = ""; - if (hasClass(target, "is-sortable")) { - target.style.cursor = "pointer"; - } - draggingColumn.value = null; - } - } - }; - const handleMouseOut = () => { - if (!isClient) - return; - document.body.style.cursor = ""; - }; - const toggleOrder = ({ order, sortOrders }) => { - if (order === "") - return sortOrders[0]; - const index = sortOrders.indexOf(order || null); - return sortOrders[index > sortOrders.length - 2 ? 0 : index + 1]; - }; - const handleSortClick = (event, column, givenOrder) => { - var _a; - event.stopPropagation(); - const order = column.order === givenOrder ? null : givenOrder || toggleOrder(column); - const target = (_a = event.target) == null ? void 0 : _a.closest("th"); - if (target) { - if (hasClass(target, "noclick")) { - removeClass(target, "noclick"); - return; - } - } - if (!column.sortable) - return; - const clickTarget = event.currentTarget; - if (["ascending", "descending"].some((str) => hasClass(clickTarget, str) && !column.sortOrders.includes(str))) { - return; - } - const states = props.store.states; - let sortProp = states.sortProp.value; - let sortOrder; - const sortingColumn = states.sortingColumn.value; - if (sortingColumn !== column || sortingColumn === column && isNull(sortingColumn.order)) { - if (sortingColumn) { - sortingColumn.order = null; - } - states.sortingColumn.value = column; - sortProp = column.property; - } - if (!order) { - sortOrder = column.order = null; - } else { - sortOrder = column.order = order; - } - states.sortProp.value = sortProp; - states.sortOrder.value = sortOrder; - parent == null ? void 0 : parent.store.commit("changeSortCondition"); - }; - return { - handleHeaderClick, - handleHeaderContextMenu, - handleMouseDown, - handleMouseMove, - handleMouseOut, - handleSortClick, - handleFilterClick - }; - } - - function useStyle$2(props) { - const parent = vue.inject(TABLE_INJECTION_KEY); - const ns = useNamespace("table"); - const getHeaderRowStyle = (rowIndex) => { - const headerRowStyle = parent == null ? void 0 : parent.props.headerRowStyle; - if (isFunction$1(headerRowStyle)) { - return headerRowStyle.call(null, { rowIndex }); - } - return headerRowStyle; - }; - const getHeaderRowClass = (rowIndex) => { - const classes = []; - const headerRowClassName = parent == null ? void 0 : parent.props.headerRowClassName; - if (isString$1(headerRowClassName)) { - classes.push(headerRowClassName); - } else if (isFunction$1(headerRowClassName)) { - classes.push(headerRowClassName.call(null, { rowIndex })); - } - return classes.join(" "); - }; - const getHeaderCellStyle = (rowIndex, columnIndex, row, column) => { - var _a; - let headerCellStyles = (_a = parent == null ? void 0 : parent.props.headerCellStyle) != null ? _a : {}; - if (isFunction$1(headerCellStyles)) { - headerCellStyles = headerCellStyles.call(null, { - rowIndex, - columnIndex, - row, - column - }); - } - const fixedStyle = getFixedColumnOffset(columnIndex, column.fixed, props.store, row); - ensurePosition(fixedStyle, "left"); - ensurePosition(fixedStyle, "right"); - return Object.assign({}, headerCellStyles, fixedStyle); - }; - const getHeaderCellClass = (rowIndex, columnIndex, row, column) => { - const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, column.fixed, props.store, row); - const classes = [ - column.id, - column.order, - column.headerAlign, - column.className, - column.labelClassName, - ...fixedClasses - ]; - if (!column.children) { - classes.push("is-leaf"); - } - if (column.sortable) { - classes.push("is-sortable"); - } - const headerCellClassName = parent == null ? void 0 : parent.props.headerCellClassName; - if (isString$1(headerCellClassName)) { - classes.push(headerCellClassName); - } else if (isFunction$1(headerCellClassName)) { - classes.push(headerCellClassName.call(null, { - rowIndex, - columnIndex, - row, - column - })); - } - classes.push(ns.e("cell")); - return classes.filter((className) => Boolean(className)).join(" "); - }; - return { - getHeaderRowStyle, - getHeaderRowClass, - getHeaderCellStyle, - getHeaderCellClass - }; - } - - const getAllColumns = (columns) => { - const result = []; - columns.forEach((column) => { - if (column.children) { - result.push(column); - result.push.apply(result, getAllColumns(column.children)); - } else { - result.push(column); - } - }); - return result; - }; - const convertToRows = (originColumns) => { - let maxLevel = 1; - const traverse = (column, parent) => { - if (parent) { - column.level = parent.level + 1; - if (maxLevel < column.level) { - maxLevel = column.level; - } - } - if (column.children) { - let colSpan = 0; - column.children.forEach((subColumn) => { - traverse(subColumn, column); - colSpan += subColumn.colSpan; - }); - column.colSpan = colSpan; - } else { - column.colSpan = 1; - } - }; - originColumns.forEach((column) => { - column.level = 1; - traverse(column, void 0); - }); - const rows = []; - for (let i = 0; i < maxLevel; i++) { - rows.push([]); - } - const allColumns = getAllColumns(originColumns); - allColumns.forEach((column) => { - if (!column.children) { - column.rowSpan = maxLevel - column.level + 1; - } else { - column.rowSpan = 1; - column.children.forEach((col) => col.isSubColumn = true); - } - rows[column.level - 1].push(column); - }); - return rows; - }; - function useUtils$1(props) { - const parent = vue.inject(TABLE_INJECTION_KEY); - const columnRows = vue.computed(() => { - return convertToRows(props.store.states.originColumns.value); - }); - const isGroup = vue.computed(() => { - const result = columnRows.value.length > 1; - if (result && parent) { - parent.state.isGroup.value = true; - } - return result; - }); - const toggleAllSelection = (event) => { - event.stopPropagation(); - parent == null ? void 0 : parent.store.commit("toggleAllSelection"); - }; - return { - isGroup, - toggleAllSelection, - columnRows - }; - } - - var TableHeader = vue.defineComponent({ - name: "ElTableHeader", - components: { - ElCheckbox - }, - props: { - fixed: { - type: String, - default: "" - }, - store: { - required: true, - type: Object - }, - border: Boolean, - defaultSort: { - type: Object, - default: () => { - return { - prop: "", - order: "" - }; - } - }, - appendFilterPanelTo: { - type: String - }, - allowDragLastColumn: { - type: Boolean - } - }, - setup(props, { emit }) { - const instance = vue.getCurrentInstance(); - const parent = vue.inject(TABLE_INJECTION_KEY); - const ns = useNamespace("table"); - const filterPanels = vue.ref({}); - const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent); - const isTableLayoutAuto = (parent == null ? void 0 : parent.props.tableLayout) === "auto"; - const saveIndexSelection = vue.reactive(/* @__PURE__ */ new Map()); - const theadRef = vue.ref(); - const updateFixedColumnStyle = () => { - setTimeout(() => { - if (saveIndexSelection.size > 0) { - saveIndexSelection.forEach((column, key) => { - const el = theadRef.value.querySelector(`.${key.replace(/\s/g, ".")}`); - if (el) { - const width = el.getBoundingClientRect().width; - column.width = width; - } - }); - saveIndexSelection.clear(); - } - }); - }; - vue.watch(saveIndexSelection, updateFixedColumnStyle); - vue.onMounted(async () => { - await vue.nextTick(); - await vue.nextTick(); - const { prop, order } = props.defaultSort; - parent == null ? void 0 : parent.store.commit("sort", { prop, order, init: true }); - updateFixedColumnStyle(); - }); - const { - handleHeaderClick, - handleHeaderContextMenu, - handleMouseDown, - handleMouseMove, - handleMouseOut, - handleSortClick, - handleFilterClick - } = useEvent(props, emit); - const { - getHeaderRowStyle, - getHeaderRowClass, - getHeaderCellStyle, - getHeaderCellClass - } = useStyle$2(props); - const { isGroup, toggleAllSelection, columnRows } = useUtils$1(props); - instance.state = { - onColumnsChange, - onScrollableChange - }; - instance.filterPanels = filterPanels; - return { - ns, - filterPanels, - onColumnsChange, - onScrollableChange, - columnRows, - getHeaderRowClass, - getHeaderRowStyle, - getHeaderCellClass, - getHeaderCellStyle, - handleHeaderClick, - handleHeaderContextMenu, - handleMouseDown, - handleMouseMove, - handleMouseOut, - handleSortClick, - handleFilterClick, - isGroup, - toggleAllSelection, - saveIndexSelection, - isTableLayoutAuto, - theadRef, - updateFixedColumnStyle - }; - }, - render() { - const { - ns, - isGroup, - columnRows, - getHeaderCellStyle, - getHeaderCellClass, - getHeaderRowClass, - getHeaderRowStyle, - handleHeaderClick, - handleHeaderContextMenu, - handleMouseDown, - handleMouseMove, - handleSortClick, - handleMouseOut, - store, - $parent, - saveIndexSelection, - isTableLayoutAuto - } = this; - let rowSpan = 1; - return vue.h("thead", { - ref: "theadRef", - class: { [ns.is("group")]: isGroup } - }, columnRows.map((subColumns, rowIndex) => vue.h("tr", { - class: getHeaderRowClass(rowIndex), - key: rowIndex, - style: getHeaderRowStyle(rowIndex) - }, subColumns.map((column, cellIndex) => { - if (column.rowSpan > rowSpan) { - rowSpan = column.rowSpan; - } - const _class = getHeaderCellClass(rowIndex, cellIndex, subColumns, column); - if (isTableLayoutAuto && column.fixed) { - saveIndexSelection.set(_class, column); - } - return vue.h("th", { - class: _class, - colspan: column.colSpan, - key: `${column.id}-thead`, - rowspan: column.rowSpan, - style: getHeaderCellStyle(rowIndex, cellIndex, subColumns, column), - onClick: ($event) => { - if ($event.currentTarget.classList.contains("noclick")) { - return; - } - handleHeaderClick($event, column); - }, - onContextmenu: ($event) => handleHeaderContextMenu($event, column), - onMousedown: ($event) => handleMouseDown($event, column), - onMousemove: ($event) => handleMouseMove($event, column), - onMouseout: handleMouseOut - }, [ - vue.h("div", { - class: [ - "cell", - column.filteredValue && column.filteredValue.length > 0 ? "highlight" : "" - ] - }, [ - column.renderHeader ? column.renderHeader({ - column, - $index: cellIndex, - store, - _self: $parent - }) : column.label, - column.sortable && vue.h("span", { - onClick: ($event) => handleSortClick($event, column), - class: "caret-wrapper" - }, [ - vue.h("i", { - onClick: ($event) => handleSortClick($event, column, "ascending"), - class: "sort-caret ascending" - }), - vue.h("i", { - onClick: ($event) => handleSortClick($event, column, "descending"), - class: "sort-caret descending" - }) - ]), - column.filterable && vue.h(FilterPanel, { - store, - placement: column.filterPlacement || "bottom-start", - appendTo: $parent.appendFilterPanelTo, - column, - upDataColumn: (key, value) => { - column[key] = value; - } - }, { - "filter-icon": () => column.renderFilterIcon ? column.renderFilterIcon({ - filterOpened: column.filterOpened - }) : null - }) - ]) - ]); - })))); - } - }); - - function isGreaterThan(a, b, epsilon = 0.03) { - return a - b > epsilon; - } - function useEvents(props) { - const parent = vue.inject(TABLE_INJECTION_KEY); - const tooltipContent = vue.ref(""); - const tooltipTrigger = vue.ref(vue.h("div")); - const handleEvent = (event, row, name) => { - var _a; - const table = parent; - const cell = getCell(event); - let column; - const namespace = (_a = table == null ? void 0 : table.vnode.el) == null ? void 0 : _a.dataset.prefix; - if (cell) { - column = getColumnByCell({ - columns: props.store.states.columns.value - }, cell, namespace); - if (column) { - table == null ? void 0 : table.emit(`cell-${name}`, row, column, cell, event); - } - } - table == null ? void 0 : table.emit(`row-${name}`, row, column, event); - }; - const handleDoubleClick = (event, row) => { - handleEvent(event, row, "dblclick"); - }; - const handleClick = (event, row) => { - props.store.commit("setCurrentRow", row); - handleEvent(event, row, "click"); - }; - const handleContextMenu = (event, row) => { - handleEvent(event, row, "contextmenu"); - }; - const handleMouseEnter = debounce((index) => { - props.store.commit("setHoverRow", index); - }, 30); - const handleMouseLeave = debounce(() => { - props.store.commit("setHoverRow", null); - }, 30); - const getPadding = (el) => { - const style = window.getComputedStyle(el, null); - const paddingLeft = Number.parseInt(style.paddingLeft, 10) || 0; - const paddingRight = Number.parseInt(style.paddingRight, 10) || 0; - const paddingTop = Number.parseInt(style.paddingTop, 10) || 0; - const paddingBottom = Number.parseInt(style.paddingBottom, 10) || 0; - return { - left: paddingLeft, - right: paddingRight, - top: paddingTop, - bottom: paddingBottom - }; - }; - const toggleRowClassByCell = (rowSpan, event, toggle) => { - let node = event.target.parentNode; - while (rowSpan > 1) { - node = node == null ? void 0 : node.nextSibling; - if (!node || node.nodeName !== "TR") - break; - toggle(node, "hover-row hover-fixed-row"); - rowSpan--; - } - }; - const handleCellMouseEnter = (event, row, tooltipOptions) => { - var _a, _b, _c; - const table = parent; - const cell = getCell(event); - const namespace = (_a = table == null ? void 0 : table.vnode.el) == null ? void 0 : _a.dataset.prefix; - let column; - if (cell) { - column = getColumnByCell({ - columns: props.store.states.columns.value - }, cell, namespace); - if (cell.rowSpan > 1) { - toggleRowClassByCell(cell.rowSpan, event, addClass); - } - const hoverState = table.hoverState = { cell, column, row }; - table == null ? void 0 : table.emit("cell-mouse-enter", hoverState.row, hoverState.column, hoverState.cell, event); - } - if (!tooltipOptions) { - return; - } - const cellChild = event.target.querySelector(".cell"); - if (!(hasClass(cellChild, `${namespace}-tooltip`) && cellChild.childNodes.length)) { - return; - } - const range = document.createRange(); - range.setStart(cellChild, 0); - range.setEnd(cellChild, cellChild.childNodes.length); - const { width: rangeWidth, height: rangeHeight } = range.getBoundingClientRect(); - const { width: cellChildWidth, height: cellChildHeight } = cellChild.getBoundingClientRect(); - const { top, left, right, bottom } = getPadding(cellChild); - const horizontalPadding = left + right; - const verticalPadding = top + bottom; - if (isGreaterThan(rangeWidth + horizontalPadding, cellChildWidth) || isGreaterThan(rangeHeight + verticalPadding, cellChildHeight) || isGreaterThan(cellChild.scrollWidth, cellChildWidth)) { - createTablePopper(tooltipOptions, cell.innerText || cell.textContent, row, column, cell, table); - } else if (((_b = removePopper) == null ? void 0 : _b.trigger) === cell) { - (_c = removePopper) == null ? void 0 : _c(); - } - }; - const handleCellMouseLeave = (event) => { - const cell = getCell(event); - if (!cell) - return; - if (cell.rowSpan > 1) { - toggleRowClassByCell(cell.rowSpan, event, removeClass); - } - const oldHoverState = parent == null ? void 0 : parent.hoverState; - parent == null ? void 0 : parent.emit("cell-mouse-leave", oldHoverState == null ? void 0 : oldHoverState.row, oldHoverState == null ? void 0 : oldHoverState.column, oldHoverState == null ? void 0 : oldHoverState.cell, event); - }; - return { - handleDoubleClick, - handleClick, - handleContextMenu, - handleMouseEnter, - handleMouseLeave, - handleCellMouseEnter, - handleCellMouseLeave, - tooltipContent, - tooltipTrigger - }; - } - - function useStyles$1(props) { - const parent = vue.inject(TABLE_INJECTION_KEY); - const ns = useNamespace("table"); - const getRowStyle = (row, rowIndex) => { - const rowStyle = parent == null ? void 0 : parent.props.rowStyle; - if (isFunction$1(rowStyle)) { - return rowStyle.call(null, { - row, - rowIndex - }); - } - return rowStyle || null; - }; - const getRowClass = (row, rowIndex) => { - const classes = [ns.e("row")]; - if ((parent == null ? void 0 : parent.props.highlightCurrentRow) && row === props.store.states.currentRow.value) { - classes.push("current-row"); - } - if (props.stripe && rowIndex % 2 === 1) { - classes.push(ns.em("row", "striped")); - } - const rowClassName = parent == null ? void 0 : parent.props.rowClassName; - if (isString$1(rowClassName)) { - classes.push(rowClassName); - } else if (isFunction$1(rowClassName)) { - classes.push(rowClassName.call(null, { - row, - rowIndex - })); - } - return classes; - }; - const getCellStyle = (rowIndex, columnIndex, row, column) => { - const cellStyle = parent == null ? void 0 : parent.props.cellStyle; - let cellStyles = cellStyle != null ? cellStyle : {}; - if (isFunction$1(cellStyle)) { - cellStyles = cellStyle.call(null, { - rowIndex, - columnIndex, - row, - column - }); - } - const fixedStyle = getFixedColumnOffset(columnIndex, props == null ? void 0 : props.fixed, props.store); - ensurePosition(fixedStyle, "left"); - ensurePosition(fixedStyle, "right"); - return Object.assign({}, cellStyles, fixedStyle); - }; - const getCellClass = (rowIndex, columnIndex, row, column, offset) => { - const fixedClasses = getFixedColumnsClass(ns.b(), columnIndex, props == null ? void 0 : props.fixed, props.store, void 0, offset); - const classes = [column.id, column.align, column.className, ...fixedClasses]; - const cellClassName = parent == null ? void 0 : parent.props.cellClassName; - if (isString$1(cellClassName)) { - classes.push(cellClassName); - } else if (isFunction$1(cellClassName)) { - classes.push(cellClassName.call(null, { - rowIndex, - columnIndex, - row, - column - })); - } - classes.push(ns.e("cell")); - return classes.filter((className) => Boolean(className)).join(" "); - }; - const getSpan = (row, column, rowIndex, columnIndex) => { - let rowspan = 1; - let colspan = 1; - const fn = parent == null ? void 0 : parent.props.spanMethod; - if (isFunction$1(fn)) { - const result = fn({ - row, - column, - rowIndex, - columnIndex - }); - if (isArray$1(result)) { - rowspan = result[0]; - colspan = result[1]; - } else if (isObject$1(result)) { - rowspan = result.rowspan; - colspan = result.colspan; - } - } - return { rowspan, colspan }; - }; - const getColspanRealWidth = (columns, colspan, index) => { - if (colspan < 1) { - return columns[index].realWidth; - } - const widthArr = columns.map(({ realWidth, width }) => realWidth || width).slice(index, index + colspan); - return Number(widthArr.reduce((acc, width) => Number(acc) + Number(width), -1)); - }; - return { - getRowStyle, - getRowClass, - getCellStyle, - getCellClass, - getSpan, - getColspanRealWidth - }; - } - - const __default__$v = vue.defineComponent({ - name: "TableTdWrapper" - }); - const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({ - ...__default__$v, - props: { - colspan: { - type: Number, - default: 1 - }, - rowspan: { - type: Number, - default: 1 - } - }, - setup(__props) { - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("td", { - colspan: __props.colspan, - rowspan: __props.rowspan - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 8, ["colspan", "rowspan"]); - }; - } - }); - var TdWrapper = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["__file", "td-wrapper.vue"]]); - - function useRender$1(props) { - const parent = vue.inject(TABLE_INJECTION_KEY); - const ns = useNamespace("table"); - const { - handleDoubleClick, - handleClick, - handleContextMenu, - handleMouseEnter, - handleMouseLeave, - handleCellMouseEnter, - handleCellMouseLeave, - tooltipContent, - tooltipTrigger - } = useEvents(props); - const { - getRowStyle, - getRowClass, - getCellStyle, - getCellClass, - getSpan, - getColspanRealWidth - } = useStyles$1(props); - const firstDefaultColumnIndex = vue.computed(() => { - return props.store.states.columns.value.findIndex(({ type }) => type === "default"); - }); - const getKeyOfRow = (row, index) => { - const rowKey = parent.props.rowKey; - if (rowKey) { - return getRowIdentity(row, rowKey); - } - return index; - }; - const rowRender = (row, $index, treeRowData, expanded = false) => { - const { tooltipEffect, tooltipOptions, store } = props; - const { indent, columns } = store.states; - const rowClasses = getRowClass(row, $index); - let display = true; - if (treeRowData) { - rowClasses.push(ns.em("row", `level-${treeRowData.level}`)); - display = treeRowData.display; - } - const displayStyle = display ? null : { - display: "none" - }; - return vue.h("tr", { - style: [displayStyle, getRowStyle(row, $index)], - class: rowClasses, - key: getKeyOfRow(row, $index), - onDblclick: ($event) => handleDoubleClick($event, row), - onClick: ($event) => handleClick($event, row), - onContextmenu: ($event) => handleContextMenu($event, row), - onMouseenter: () => handleMouseEnter($index), - onMouseleave: handleMouseLeave - }, columns.value.map((column, cellIndex) => { - const { rowspan, colspan } = getSpan(row, column, $index, cellIndex); - if (!rowspan || !colspan) { - return null; - } - const columnData = Object.assign({}, column); - columnData.realWidth = getColspanRealWidth(columns.value, colspan, cellIndex); - const data = { - store: props.store, - _self: props.context || parent, - column: columnData, - row, - $index, - cellIndex, - expanded - }; - if (cellIndex === firstDefaultColumnIndex.value && treeRowData) { - data.treeNode = { - indent: treeRowData.level * indent.value, - level: treeRowData.level - }; - if (isBoolean(treeRowData.expanded)) { - data.treeNode.expanded = treeRowData.expanded; - if ("loading" in treeRowData) { - data.treeNode.loading = treeRowData.loading; - } - if ("noLazyChildren" in treeRowData) { - data.treeNode.noLazyChildren = treeRowData.noLazyChildren; - } - } - } - const baseKey = `${getKeyOfRow(row, $index)},${cellIndex}`; - const patchKey = columnData.columnKey || columnData.rawColumnKey || ""; - const mergedTooltipOptions = column.showOverflowTooltip && merge({ - effect: tooltipEffect - }, tooltipOptions, column.showOverflowTooltip); - return vue.h(TdWrapper, { - style: getCellStyle($index, cellIndex, row, column), - class: getCellClass($index, cellIndex, row, column, colspan - 1), - key: `${patchKey}${baseKey}`, - rowspan, - colspan, - onMouseenter: ($event) => handleCellMouseEnter($event, row, mergedTooltipOptions), - onMouseleave: handleCellMouseLeave - }, { - default: () => cellChildren(cellIndex, column, data) - }); - })); - }; - const cellChildren = (cellIndex, column, data) => { - return column.renderCell(data); - }; - const wrappedRowRender = (row, $index) => { - const store = props.store; - const { isRowExpanded, assertRowKey } = store; - const { treeData, lazyTreeNodeMap, childrenColumnName, rowKey } = store.states; - const columns = store.states.columns.value; - const hasExpandColumn = columns.some(({ type }) => type === "expand"); - if (hasExpandColumn) { - const expanded = isRowExpanded(row); - const tr = rowRender(row, $index, void 0, expanded); - const renderExpanded = parent.renderExpanded; - if (expanded) { - if (!renderExpanded) { - console.error("[Element Error]renderExpanded is required."); - return tr; - } - return [ - [ - tr, - vue.h("tr", { - key: `expanded-row__${tr.key}` - }, [ - vue.h("td", { - colspan: columns.length, - class: `${ns.e("cell")} ${ns.e("expanded-cell")}` - }, [renderExpanded({ row, $index, store, expanded })]) - ]) - ] - ]; - } else { - return [[tr]]; - } - } else if (Object.keys(treeData.value).length) { - assertRowKey(); - const key = getRowIdentity(row, rowKey.value); - let cur = treeData.value[key]; - let treeRowData = null; - if (cur) { - treeRowData = { - expanded: cur.expanded, - level: cur.level, - display: true - }; - if (isBoolean(cur.lazy)) { - if (isBoolean(cur.loaded) && cur.loaded) { - treeRowData.noLazyChildren = !(cur.children && cur.children.length); - } - treeRowData.loading = cur.loading; - } - } - const tmp = [rowRender(row, $index, treeRowData)]; - if (cur) { - let i = 0; - const traverse = (children, parent2) => { - if (!(children && children.length && parent2)) - return; - children.forEach((node) => { - const innerTreeRowData = { - display: parent2.display && parent2.expanded, - level: parent2.level + 1, - expanded: false, - noLazyChildren: false, - loading: false - }; - const childKey = getRowIdentity(node, rowKey.value); - if (isPropAbsent(childKey)) { - throw new Error("For nested data item, row-key is required."); - } - cur = { ...treeData.value[childKey] }; - if (cur) { - innerTreeRowData.expanded = cur.expanded; - cur.level = cur.level || innerTreeRowData.level; - cur.display = !!(cur.expanded && innerTreeRowData.display); - if (isBoolean(cur.lazy)) { - if (isBoolean(cur.loaded) && cur.loaded) { - innerTreeRowData.noLazyChildren = !(cur.children && cur.children.length); - } - innerTreeRowData.loading = cur.loading; - } - } - i++; - tmp.push(rowRender(node, $index + i, innerTreeRowData)); - if (cur) { - const nodes2 = lazyTreeNodeMap.value[childKey] || node[childrenColumnName.value]; - traverse(nodes2, cur); - } - }); - }; - cur.display = true; - const nodes = lazyTreeNodeMap.value[key] || row[childrenColumnName.value]; - traverse(nodes, cur); - } - return tmp; - } else { - return rowRender(row, $index, void 0); - } - }; - return { - wrappedRowRender, - tooltipContent, - tooltipTrigger - }; - } - - const defaultProps$2 = { - store: { - required: true, - type: Object - }, - stripe: Boolean, - tooltipEffect: String, - tooltipOptions: { - type: Object - }, - context: { - default: () => ({}), - type: Object - }, - rowClassName: [String, Function], - rowStyle: [Object, Function], - fixed: { - type: String, - default: "" - }, - highlight: Boolean - }; - var defaultProps$3 = defaultProps$2; - - var TableBody = vue.defineComponent({ - name: "ElTableBody", - props: defaultProps$3, - setup(props) { - const instance = vue.getCurrentInstance(); - const parent = vue.inject(TABLE_INJECTION_KEY); - const ns = useNamespace("table"); - const { wrappedRowRender, tooltipContent, tooltipTrigger } = useRender$1(props); - const { onColumnsChange, onScrollableChange } = useLayoutObserver(parent); - const hoveredCellList = []; - vue.watch(props.store.states.hoverRow, (newVal, oldVal) => { - var _a; - const el = instance == null ? void 0 : instance.vnode.el; - const rows = Array.from((el == null ? void 0 : el.children) || []).filter((e) => e == null ? void 0 : e.classList.contains(`${ns.e("row")}`)); - let rowNum = newVal; - const childNodes = (_a = rows[rowNum]) == null ? void 0 : _a.childNodes; - if (childNodes == null ? void 0 : childNodes.length) { - let control = 0; - const indexes = Array.from(childNodes).reduce((acc, item, index) => { - var _a2, _b; - if (((_a2 = childNodes[index]) == null ? void 0 : _a2.colSpan) > 1) { - control = (_b = childNodes[index]) == null ? void 0 : _b.colSpan; - } - if (item.nodeName !== "TD" && control === 0) { - acc.push(index); - } - control > 0 && control--; - return acc; - }, []); - indexes.forEach((rowIndex) => { - var _a2; - rowNum = newVal; - while (rowNum > 0) { - const preChildNodes = (_a2 = rows[rowNum - 1]) == null ? void 0 : _a2.childNodes; - if (preChildNodes[rowIndex] && preChildNodes[rowIndex].nodeName === "TD" && preChildNodes[rowIndex].rowSpan > 1) { - addClass(preChildNodes[rowIndex], "hover-cell"); - hoveredCellList.push(preChildNodes[rowIndex]); - break; - } - rowNum--; - } - }); - } else { - hoveredCellList.forEach((item) => removeClass(item, "hover-cell")); - hoveredCellList.length = 0; - } - if (!props.store.states.isComplex.value || !isClient) - return; - rAF(() => { - const oldRow = rows[oldVal]; - const newRow = rows[newVal]; - if (oldRow && !oldRow.classList.contains("hover-fixed-row")) { - removeClass(oldRow, "hover-row"); - } - if (newRow) { - addClass(newRow, "hover-row"); - } - }); - }); - vue.onUnmounted(() => { - var _a; - (_a = removePopper) == null ? void 0 : _a(); - }); - return { - ns, - onColumnsChange, - onScrollableChange, - wrappedRowRender, - tooltipContent, - tooltipTrigger - }; - }, - render() { - const { wrappedRowRender, store } = this; - const data = store.states.data.value || []; - return vue.h("tbody", { tabIndex: -1 }, [ - data.reduce((acc, row) => { - return acc.concat(wrappedRowRender(row, acc.length)); - }, []) - ]); - } - }); - - function useMapState() { - const table = vue.inject(TABLE_INJECTION_KEY); - const store = table == null ? void 0 : table.store; - const leftFixedLeafCount = vue.computed(() => { - return store.states.fixedLeafColumnsLength.value; - }); - const rightFixedLeafCount = vue.computed(() => { - return store.states.rightFixedColumns.value.length; - }); - const columnsCount = vue.computed(() => { - return store.states.columns.value.length; - }); - const leftFixedCount = vue.computed(() => { - return store.states.fixedColumns.value.length; - }); - const rightFixedCount = vue.computed(() => { - return store.states.rightFixedColumns.value.length; - }); - return { - leftFixedLeafCount, - rightFixedLeafCount, - columnsCount, - leftFixedCount, - rightFixedCount, - columns: store.states.columns - }; - } - - function useStyle$1(props) { - const { columns } = useMapState(); - const ns = useNamespace("table"); - const getCellClasses = (columns2, cellIndex) => { - const column = columns2[cellIndex]; - const classes = [ - ns.e("cell"), - column.id, - column.align, - column.labelClassName, - ...getFixedColumnsClass(ns.b(), cellIndex, column.fixed, props.store) - ]; - if (column.className) { - classes.push(column.className); - } - if (!column.children) { - classes.push(ns.is("leaf")); - } - return classes; - }; - const getCellStyles = (column, cellIndex) => { - const fixedStyle = getFixedColumnOffset(cellIndex, column.fixed, props.store); - ensurePosition(fixedStyle, "left"); - ensurePosition(fixedStyle, "right"); - return fixedStyle; - }; - return { - getCellClasses, - getCellStyles, - columns - }; - } - - var TableFooter = vue.defineComponent({ - name: "ElTableFooter", - props: { - fixed: { - type: String, - default: "" - }, - store: { - required: true, - type: Object - }, - summaryMethod: Function, - sumText: String, - border: Boolean, - defaultSort: { - type: Object, - default: () => { - return { - prop: "", - order: "" - }; - } - } - }, - setup(props) { - const parent = vue.inject(TABLE_INJECTION_KEY); - const ns = useNamespace("table"); - const { getCellClasses, getCellStyles, columns } = useStyle$1(props); - const { onScrollableChange, onColumnsChange } = useLayoutObserver(parent); - return { - ns, - onScrollableChange, - onColumnsChange, - getCellClasses, - getCellStyles, - columns - }; - }, - render() { - const { columns, getCellStyles, getCellClasses, summaryMethod, sumText } = this; - const data = this.store.states.data.value; - let sums = []; - if (summaryMethod) { - sums = summaryMethod({ - columns, - data - }); - } else { - columns.forEach((column, index) => { - if (index === 0) { - sums[index] = sumText; - return; - } - const values = data.map((item) => Number(item[column.property])); - const precisions = []; - let notNumber = true; - values.forEach((value) => { - if (!Number.isNaN(+value)) { - notNumber = false; - const decimal = `${value}`.split(".")[1]; - precisions.push(decimal ? decimal.length : 0); - } - }); - const precision = Math.max.apply(null, precisions); - if (!notNumber) { - sums[index] = values.reduce((prev, curr) => { - const value = Number(curr); - if (!Number.isNaN(+value)) { - return Number.parseFloat((prev + curr).toFixed(Math.min(precision, 20))); - } else { - return prev; - } - }, 0); - } else { - sums[index] = ""; - } - }); - } - return vue.h(vue.h("tfoot", [ - vue.h("tr", {}, [ - ...columns.map((column, cellIndex) => vue.h("td", { - key: cellIndex, - colspan: column.colSpan, - rowspan: column.rowSpan, - class: getCellClasses(columns, cellIndex), - style: getCellStyles(column, cellIndex) - }, [ - vue.h("div", { - class: ["cell", column.labelClassName] - }, [sums[cellIndex]]) - ])) - ]) - ])); - } - }); - - function useUtils(store) { - const setCurrentRow = (row) => { - store.commit("setCurrentRow", row); - }; - const getSelectionRows = () => { - return store.getSelectionRows(); - }; - const toggleRowSelection = (row, selected, ignoreSelectable = true) => { - store.toggleRowSelection(row, selected, false, ignoreSelectable); - store.updateAllSelected(); - }; - const clearSelection = () => { - store.clearSelection(); - }; - const clearFilter = (columnKeys) => { - store.clearFilter(columnKeys); - }; - const toggleAllSelection = () => { - store.commit("toggleAllSelection"); - }; - const toggleRowExpansion = (row, expanded) => { - store.toggleRowExpansionAdapter(row, expanded); - }; - const clearSort = () => { - store.clearSort(); - }; - const sort = (prop, order) => { - store.commit("sort", { prop, order }); - }; - const updateKeyChildren = (key, data) => { - store.updateKeyChildren(key, data); - }; - return { - setCurrentRow, - getSelectionRows, - toggleRowSelection, - clearSelection, - clearFilter, - toggleAllSelection, - toggleRowExpansion, - clearSort, - sort, - updateKeyChildren - }; - } - - function useStyle(props, layout, store, table) { - const isHidden = vue.ref(false); - const renderExpanded = vue.ref(null); - const resizeProxyVisible = vue.ref(false); - const setDragVisible = (visible) => { - resizeProxyVisible.value = visible; - }; - const resizeState = vue.ref({ - width: null, - height: null, - headerHeight: null - }); - const isGroup = vue.ref(false); - const scrollbarViewStyle = { - display: "inline-block", - verticalAlign: "middle" - }; - const tableWidth = vue.ref(); - const tableScrollHeight = vue.ref(0); - const bodyScrollHeight = vue.ref(0); - const headerScrollHeight = vue.ref(0); - const footerScrollHeight = vue.ref(0); - const appendScrollHeight = vue.ref(0); - vue.watchEffect(() => { - layout.setHeight(props.height); - }); - vue.watchEffect(() => { - layout.setMaxHeight(props.maxHeight); - }); - vue.watch(() => [props.currentRowKey, store.states.rowKey], ([currentRowKey, rowKey]) => { - if (!vue.unref(rowKey) || !vue.unref(currentRowKey)) - return; - store.setCurrentRowKey(`${currentRowKey}`); - }, { - immediate: true - }); - vue.watch(() => props.data, (data) => { - table.store.commit("setData", data); - }, { - immediate: true, - deep: true - }); - vue.watchEffect(() => { - if (props.expandRowKeys) { - store.setExpandRowKeysAdapter(props.expandRowKeys); - } - }); - const handleMouseLeave = () => { - table.store.commit("setHoverRow", null); - if (table.hoverState) - table.hoverState = null; - }; - const handleHeaderFooterMousewheel = (event, data) => { - const { pixelX, pixelY } = data; - if (Math.abs(pixelX) >= Math.abs(pixelY)) { - table.refs.bodyWrapper.scrollLeft += data.pixelX / 5; - } - }; - const shouldUpdateHeight = vue.computed(() => { - return props.height || props.maxHeight || store.states.fixedColumns.value.length > 0 || store.states.rightFixedColumns.value.length > 0; - }); - const tableBodyStyles = vue.computed(() => { - return { - width: layout.bodyWidth.value ? `${layout.bodyWidth.value}px` : "" - }; - }); - const doLayout = () => { - if (shouldUpdateHeight.value) { - layout.updateElsHeight(); - } - layout.updateColumnsWidth(); - requestAnimationFrame(syncPosition); - }; - vue.onMounted(async () => { - await vue.nextTick(); - store.updateColumns(); - bindEvents(); - requestAnimationFrame(doLayout); - const el = table.vnode.el; - const tableHeader = table.refs.headerWrapper; - if (props.flexible && el && el.parentElement) { - el.parentElement.style.minWidth = "0"; - } - resizeState.value = { - width: tableWidth.value = el.offsetWidth, - height: el.offsetHeight, - headerHeight: props.showHeader && tableHeader ? tableHeader.offsetHeight : null - }; - store.states.columns.value.forEach((column) => { - if (column.filteredValue && column.filteredValue.length) { - table.store.commit("filterChange", { - column, - values: column.filteredValue, - silent: true - }); - } - }); - table.$ready = true; - }); - const setScrollClassByEl = (el, className) => { - if (!el) - return; - const classList = Array.from(el.classList).filter((item) => !item.startsWith("is-scrolling-")); - classList.push(layout.scrollX.value ? className : "is-scrolling-none"); - el.className = classList.join(" "); - }; - const setScrollClass = (className) => { - const { tableWrapper } = table.refs; - setScrollClassByEl(tableWrapper, className); - }; - const hasScrollClass = (className) => { - const { tableWrapper } = table.refs; - return !!(tableWrapper && tableWrapper.classList.contains(className)); - }; - const syncPosition = function() { - if (!table.refs.scrollBarRef) - return; - if (!layout.scrollX.value) { - const scrollingNoneClass = "is-scrolling-none"; - if (!hasScrollClass(scrollingNoneClass)) { - setScrollClass(scrollingNoneClass); - } - return; - } - const scrollContainer = table.refs.scrollBarRef.wrapRef; - if (!scrollContainer) - return; - const { scrollLeft, offsetWidth, scrollWidth } = scrollContainer; - const { headerWrapper, footerWrapper } = table.refs; - if (headerWrapper) - headerWrapper.scrollLeft = scrollLeft; - if (footerWrapper) - footerWrapper.scrollLeft = scrollLeft; - const maxScrollLeftPosition = scrollWidth - offsetWidth - 1; - if (scrollLeft >= maxScrollLeftPosition) { - setScrollClass("is-scrolling-right"); - } else if (scrollLeft === 0) { - setScrollClass("is-scrolling-left"); - } else { - setScrollClass("is-scrolling-middle"); - } - }; - const bindEvents = () => { - if (!table.refs.scrollBarRef) - return; - if (table.refs.scrollBarRef.wrapRef) { - useEventListener(table.refs.scrollBarRef.wrapRef, "scroll", syncPosition, { - passive: true - }); - } - if (props.fit) { - useResizeObserver(table.vnode.el, resizeListener); - } else { - useEventListener(window, "resize", resizeListener); - } - useResizeObserver(table.refs.bodyWrapper, () => { - var _a, _b; - resizeListener(); - (_b = (_a = table.refs) == null ? void 0 : _a.scrollBarRef) == null ? void 0 : _b.update(); - }); - }; - const resizeListener = () => { - var _a, _b, _c, _d; - const el = table.vnode.el; - if (!table.$ready || !el) - return; - let shouldUpdateLayout = false; - const { - width: oldWidth, - height: oldHeight, - headerHeight: oldHeaderHeight - } = resizeState.value; - const width = tableWidth.value = el.offsetWidth; - if (oldWidth !== width) { - shouldUpdateLayout = true; - } - const height = el.offsetHeight; - if ((props.height || shouldUpdateHeight.value) && oldHeight !== height) { - shouldUpdateLayout = true; - } - const tableHeader = props.tableLayout === "fixed" ? table.refs.headerWrapper : (_a = table.refs.tableHeaderRef) == null ? void 0 : _a.$el; - if (props.showHeader && (tableHeader == null ? void 0 : tableHeader.offsetHeight) !== oldHeaderHeight) { - shouldUpdateLayout = true; - } - tableScrollHeight.value = ((_b = table.refs.tableWrapper) == null ? void 0 : _b.scrollHeight) || 0; - headerScrollHeight.value = (tableHeader == null ? void 0 : tableHeader.scrollHeight) || 0; - footerScrollHeight.value = ((_c = table.refs.footerWrapper) == null ? void 0 : _c.offsetHeight) || 0; - appendScrollHeight.value = ((_d = table.refs.appendWrapper) == null ? void 0 : _d.offsetHeight) || 0; - bodyScrollHeight.value = tableScrollHeight.value - headerScrollHeight.value - footerScrollHeight.value - appendScrollHeight.value; - if (shouldUpdateLayout) { - resizeState.value = { - width, - height, - headerHeight: props.showHeader && (tableHeader == null ? void 0 : tableHeader.offsetHeight) || 0 - }; - doLayout(); - } - }; - const tableSize = useFormSize(); - const bodyWidth = vue.computed(() => { - const { bodyWidth: bodyWidth_, scrollY, gutterWidth } = layout; - return bodyWidth_.value ? `${bodyWidth_.value - (scrollY.value ? gutterWidth : 0)}px` : ""; - }); - const tableLayout = vue.computed(() => { - if (props.maxHeight) - return "fixed"; - return props.tableLayout; - }); - const emptyBlockStyle = vue.computed(() => { - if (props.data && props.data.length) - return null; - let height = "100%"; - if (props.height && bodyScrollHeight.value) { - height = `${bodyScrollHeight.value}px`; - } - const width = tableWidth.value; - return { - width: width ? `${width}px` : "", - height - }; - }); - const scrollbarStyle = vue.computed(() => { - if (props.height) { - return { - height: "100%" - }; - } - if (props.maxHeight) { - if (!Number.isNaN(Number(props.maxHeight))) { - return { - maxHeight: `${props.maxHeight - headerScrollHeight.value - footerScrollHeight.value}px` - }; - } else { - return { - maxHeight: `calc(${props.maxHeight} - ${headerScrollHeight.value + footerScrollHeight.value}px)` - }; - } - } - return {}; - }); - const handleFixedMousewheel = (event, data) => { - const bodyWrapper = table.refs.bodyWrapper; - if (Math.abs(data.spinY) > 0) { - const currentScrollTop = bodyWrapper.scrollTop; - if (data.pixelY < 0 && currentScrollTop !== 0) { - event.preventDefault(); - } - if (data.pixelY > 0 && bodyWrapper.scrollHeight - bodyWrapper.clientHeight > currentScrollTop) { - event.preventDefault(); - } - bodyWrapper.scrollTop += Math.ceil(data.pixelY / 5); - } else { - bodyWrapper.scrollLeft += Math.ceil(data.pixelX / 5); - } - }; - return { - isHidden, - renderExpanded, - setDragVisible, - isGroup, - handleMouseLeave, - handleHeaderFooterMousewheel, - tableSize, - emptyBlockStyle, - handleFixedMousewheel, - resizeProxyVisible, - bodyWidth, - resizeState, - doLayout, - tableBodyStyles, - tableLayout, - scrollbarViewStyle, - scrollbarStyle - }; - } - - function useKeyRender(table) { - const observer = vue.ref(); - const initWatchDom = () => { - const el = table.vnode.el; - const columnsWrapper = el.querySelector(".hidden-columns"); - const config = { childList: true, subtree: true }; - const updateOrderFns = table.store.states.updateOrderFns; - observer.value = new MutationObserver(() => { - updateOrderFns.forEach((fn) => fn()); - }); - observer.value.observe(columnsWrapper, config); - }; - vue.onMounted(() => { - initWatchDom(); - }); - vue.onUnmounted(() => { - var _a; - (_a = observer.value) == null ? void 0 : _a.disconnect(); - }); - } - - var defaultProps$1 = { - data: { - type: Array, - default: () => [] - }, - size: useSizeProp, - width: [String, Number], - height: [String, Number], - maxHeight: [String, Number], - fit: { - type: Boolean, - default: true - }, - stripe: Boolean, - border: Boolean, - rowKey: [String, Function], - showHeader: { - type: Boolean, - default: true - }, - showSummary: Boolean, - sumText: String, - summaryMethod: Function, - rowClassName: [String, Function], - rowStyle: [Object, Function], - cellClassName: [String, Function], - cellStyle: [Object, Function], - headerRowClassName: [String, Function], - headerRowStyle: [Object, Function], - headerCellClassName: [String, Function], - headerCellStyle: [Object, Function], - highlightCurrentRow: Boolean, - currentRowKey: [String, Number], - emptyText: String, - expandRowKeys: Array, - defaultExpandAll: Boolean, - defaultSort: Object, - tooltipEffect: String, - tooltipOptions: Object, - spanMethod: Function, - selectOnIndeterminate: { - type: Boolean, - default: true - }, - indent: { - type: Number, - default: 16 - }, - treeProps: { - type: Object, - default: () => { - return { - hasChildren: "hasChildren", - children: "children", - checkStrictly: false - }; - } - }, - lazy: Boolean, - load: Function, - style: { - type: Object, - default: () => ({}) - }, - className: { - type: String, - default: "" - }, - tableLayout: { - type: String, - default: "fixed" - }, - scrollbarAlwaysOn: Boolean, - flexible: Boolean, - showOverflowTooltip: [Boolean, Object], - tooltipFormatter: Function, - appendFilterPanelTo: String, - scrollbarTabindex: { - type: [Number, String], - default: void 0 - }, - allowDragLastColumn: { - type: Boolean, - default: true - } - }; - - function hColgroup(props) { - const isAuto = props.tableLayout === "auto"; - let columns = props.columns || []; - if (isAuto) { - if (columns.every(({ width }) => isUndefined(width))) { - columns = []; - } - } - const getPropsData = (column) => { - const propsData = { - key: `${props.tableLayout}_${column.id}`, - style: {}, - name: void 0 - }; - if (isAuto) { - propsData.style = { - width: `${column.width}px` - }; - } else { - propsData.name = column.id; - } - return propsData; - }; - return vue.h("colgroup", {}, columns.map((column) => vue.h("col", getPropsData(column)))); - } - hColgroup.props = ["columns", "tableLayout"]; - - const useScrollbar$1 = () => { - const scrollBarRef = vue.ref(); - const scrollTo = (options, yCoord) => { - const scrollbar = scrollBarRef.value; - if (scrollbar) { - scrollbar.scrollTo(options, yCoord); - } - }; - const setScrollPosition = (position, offset) => { - const scrollbar = scrollBarRef.value; - if (scrollbar && isNumber(offset) && ["Top", "Left"].includes(position)) { - scrollbar[`setScroll${position}`](offset); - } - }; - const setScrollTop = (top) => setScrollPosition("Top", top); - const setScrollLeft = (left) => setScrollPosition("Left", left); - return { - scrollBarRef, - scrollTo, - setScrollTop, - setScrollLeft - }; - }; - - let tableIdSeed = 1; - const _sfc_main$A = vue.defineComponent({ - name: "ElTable", - directives: { - Mousewheel - }, - components: { - TableHeader, - TableBody, - TableFooter, - ElScrollbar, - hColgroup - }, - props: defaultProps$1, - emits: [ - "select", - "select-all", - "selection-change", - "cell-mouse-enter", - "cell-mouse-leave", - "cell-contextmenu", - "cell-click", - "cell-dblclick", - "row-click", - "row-contextmenu", - "row-dblclick", - "header-click", - "header-contextmenu", - "sort-change", - "filter-change", - "current-change", - "header-dragend", - "expand-change", - "scroll" - ], - setup(props) { - const { t } = useLocale(); - const ns = useNamespace("table"); - const table = vue.getCurrentInstance(); - vue.provide(TABLE_INJECTION_KEY, table); - const store = createStore(table, props); - table.store = store; - const layout = new TableLayout$1({ - store: table.store, - table, - fit: props.fit, - showHeader: props.showHeader - }); - table.layout = layout; - const isEmpty = vue.computed(() => (store.states.data.value || []).length === 0); - const { - setCurrentRow, - getSelectionRows, - toggleRowSelection, - clearSelection, - clearFilter, - toggleAllSelection, - toggleRowExpansion, - clearSort, - sort, - updateKeyChildren - } = useUtils(store); - const { - isHidden, - renderExpanded, - setDragVisible, - isGroup, - handleMouseLeave, - handleHeaderFooterMousewheel, - tableSize, - emptyBlockStyle, - handleFixedMousewheel, - resizeProxyVisible, - bodyWidth, - resizeState, - doLayout, - tableBodyStyles, - tableLayout, - scrollbarViewStyle, - scrollbarStyle - } = useStyle(props, layout, store, table); - const { scrollBarRef, scrollTo, setScrollLeft, setScrollTop } = useScrollbar$1(); - const debouncedUpdateLayout = debounce(doLayout, 50); - const tableId = `${ns.namespace.value}-table_${tableIdSeed++}`; - table.tableId = tableId; - table.state = { - isGroup, - resizeState, - doLayout, - debouncedUpdateLayout - }; - const computedSumText = vue.computed(() => { - var _a; - return (_a = props.sumText) != null ? _a : t("el.table.sumText"); - }); - const computedEmptyText = vue.computed(() => { - var _a; - return (_a = props.emptyText) != null ? _a : t("el.table.emptyText"); - }); - const columns = vue.computed(() => { - return convertToRows(store.states.originColumns.value)[0]; - }); - useKeyRender(table); - vue.onBeforeUnmount(() => { - debouncedUpdateLayout.cancel(); - }); - return { - ns, - layout, - store, - columns, - handleHeaderFooterMousewheel, - handleMouseLeave, - tableId, - tableSize, - isHidden, - isEmpty, - renderExpanded, - resizeProxyVisible, - resizeState, - isGroup, - bodyWidth, - tableBodyStyles, - emptyBlockStyle, - debouncedUpdateLayout, - handleFixedMousewheel, - setCurrentRow, - getSelectionRows, - toggleRowSelection, - clearSelection, - clearFilter, - toggleAllSelection, - toggleRowExpansion, - clearSort, - doLayout, - sort, - updateKeyChildren, - t, - setDragVisible, - context: table, - computedSumText, - computedEmptyText, - tableLayout, - scrollbarViewStyle, - scrollbarStyle, - scrollBarRef, - scrollTo, - setScrollLeft, - setScrollTop, - allowDragLastColumn: props.allowDragLastColumn - }; - } - }); - function _sfc_render$3(_ctx, _cache, $props, $setup, $data, $options) { - const _component_hColgroup = vue.resolveComponent("hColgroup"); - const _component_table_header = vue.resolveComponent("table-header"); - const _component_table_body = vue.resolveComponent("table-body"); - const _component_table_footer = vue.resolveComponent("table-footer"); - const _component_el_scrollbar = vue.resolveComponent("el-scrollbar"); - const _directive_mousewheel = vue.resolveDirective("mousewheel"); - return vue.openBlock(), vue.createElementBlock("div", { - ref: "tableWrapper", - class: vue.normalizeClass([ - { - [_ctx.ns.m("fit")]: _ctx.fit, - [_ctx.ns.m("striped")]: _ctx.stripe, - [_ctx.ns.m("border")]: _ctx.border || _ctx.isGroup, - [_ctx.ns.m("hidden")]: _ctx.isHidden, - [_ctx.ns.m("group")]: _ctx.isGroup, - [_ctx.ns.m("fluid-height")]: _ctx.maxHeight, - [_ctx.ns.m("scrollable-x")]: _ctx.layout.scrollX.value, - [_ctx.ns.m("scrollable-y")]: _ctx.layout.scrollY.value, - [_ctx.ns.m("enable-row-hover")]: !_ctx.store.states.isComplex.value, - [_ctx.ns.m("enable-row-transition")]: (_ctx.store.states.data.value || []).length !== 0 && (_ctx.store.states.data.value || []).length < 100, - "has-footer": _ctx.showSummary - }, - _ctx.ns.m(_ctx.tableSize), - _ctx.className, - _ctx.ns.b(), - _ctx.ns.m(`layout-${_ctx.tableLayout}`) - ]), - style: vue.normalizeStyle(_ctx.style), - "data-prefix": _ctx.ns.namespace.value, - onMouseleave: _ctx.handleMouseLeave - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("inner-wrapper")) - }, [ - vue.createElementVNode("div", { - ref: "hiddenColumns", - class: "hidden-columns" - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 512), - _ctx.showHeader && _ctx.tableLayout === "fixed" ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - key: 0, - ref: "headerWrapper", - class: vue.normalizeClass(_ctx.ns.e("header-wrapper")) - }, [ - vue.createElementVNode("table", { - ref: "tableHeader", - class: vue.normalizeClass(_ctx.ns.e("header")), - style: vue.normalizeStyle(_ctx.tableBodyStyles), - border: "0", - cellpadding: "0", - cellspacing: "0" - }, [ - vue.createVNode(_component_hColgroup, { - columns: _ctx.store.states.columns.value, - "table-layout": _ctx.tableLayout - }, null, 8, ["columns", "table-layout"]), - vue.createVNode(_component_table_header, { - ref: "tableHeaderRef", - border: _ctx.border, - "default-sort": _ctx.defaultSort, - store: _ctx.store, - "append-filter-panel-to": _ctx.appendFilterPanelTo, - "allow-drag-last-column": _ctx.allowDragLastColumn, - onSetDragVisible: _ctx.setDragVisible - }, null, 8, ["border", "default-sort", "store", "append-filter-panel-to", "allow-drag-last-column", "onSetDragVisible"]) - ], 6) - ], 2)), [ - [_directive_mousewheel, _ctx.handleHeaderFooterMousewheel] - ]) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - ref: "bodyWrapper", - class: vue.normalizeClass(_ctx.ns.e("body-wrapper")) - }, [ - vue.createVNode(_component_el_scrollbar, { - ref: "scrollBarRef", - "view-style": _ctx.scrollbarViewStyle, - "wrap-style": _ctx.scrollbarStyle, - always: _ctx.scrollbarAlwaysOn, - tabindex: _ctx.scrollbarTabindex, - onScroll: ($event) => _ctx.$emit("scroll", $event) - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("table", { - ref: "tableBody", - class: vue.normalizeClass(_ctx.ns.e("body")), - cellspacing: "0", - cellpadding: "0", - border: "0", - style: vue.normalizeStyle({ - width: _ctx.bodyWidth, - tableLayout: _ctx.tableLayout - }) - }, [ - vue.createVNode(_component_hColgroup, { - columns: _ctx.store.states.columns.value, - "table-layout": _ctx.tableLayout - }, null, 8, ["columns", "table-layout"]), - _ctx.showHeader && _ctx.tableLayout === "auto" ? (vue.openBlock(), vue.createBlock(_component_table_header, { - key: 0, - ref: "tableHeaderRef", - class: vue.normalizeClass(_ctx.ns.e("body-header")), - border: _ctx.border, - "default-sort": _ctx.defaultSort, - store: _ctx.store, - "append-filter-panel-to": _ctx.appendFilterPanelTo, - onSetDragVisible: _ctx.setDragVisible - }, null, 8, ["class", "border", "default-sort", "store", "append-filter-panel-to", "onSetDragVisible"])) : vue.createCommentVNode("v-if", true), - vue.createVNode(_component_table_body, { - context: _ctx.context, - highlight: _ctx.highlightCurrentRow, - "row-class-name": _ctx.rowClassName, - "tooltip-effect": _ctx.tooltipEffect, - "tooltip-options": _ctx.tooltipOptions, - "row-style": _ctx.rowStyle, - store: _ctx.store, - stripe: _ctx.stripe - }, null, 8, ["context", "highlight", "row-class-name", "tooltip-effect", "tooltip-options", "row-style", "store", "stripe"]), - _ctx.showSummary && _ctx.tableLayout === "auto" ? (vue.openBlock(), vue.createBlock(_component_table_footer, { - key: 1, - class: vue.normalizeClass(_ctx.ns.e("body-footer")), - border: _ctx.border, - "default-sort": _ctx.defaultSort, - store: _ctx.store, - "sum-text": _ctx.computedSumText, - "summary-method": _ctx.summaryMethod - }, null, 8, ["class", "border", "default-sort", "store", "sum-text", "summary-method"])) : vue.createCommentVNode("v-if", true) - ], 6), - _ctx.isEmpty ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - ref: "emptyBlock", - style: vue.normalizeStyle(_ctx.emptyBlockStyle), - class: vue.normalizeClass(_ctx.ns.e("empty-block")) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(_ctx.ns.e("empty-text")) - }, [ - vue.renderSlot(_ctx.$slots, "empty", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.computedEmptyText), 1) - ]) - ], 2) - ], 6)) : vue.createCommentVNode("v-if", true), - _ctx.$slots.append ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - ref: "appendWrapper", - class: vue.normalizeClass(_ctx.ns.e("append-wrapper")) - }, [ - vue.renderSlot(_ctx.$slots, "append") - ], 2)) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 8, ["view-style", "wrap-style", "always", "tabindex", "onScroll"]) - ], 2), - _ctx.showSummary && _ctx.tableLayout === "fixed" ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - key: 1, - ref: "footerWrapper", - class: vue.normalizeClass(_ctx.ns.e("footer-wrapper")) - }, [ - vue.createElementVNode("table", { - class: vue.normalizeClass(_ctx.ns.e("footer")), - cellspacing: "0", - cellpadding: "0", - border: "0", - style: vue.normalizeStyle(_ctx.tableBodyStyles) - }, [ - vue.createVNode(_component_hColgroup, { - columns: _ctx.store.states.columns.value, - "table-layout": _ctx.tableLayout - }, null, 8, ["columns", "table-layout"]), - vue.createVNode(_component_table_footer, { - border: _ctx.border, - "default-sort": _ctx.defaultSort, - store: _ctx.store, - "sum-text": _ctx.computedSumText, - "summary-method": _ctx.summaryMethod - }, null, 8, ["border", "default-sort", "store", "sum-text", "summary-method"]) - ], 6) - ], 2)), [ - [vue.vShow, !_ctx.isEmpty], - [_directive_mousewheel, _ctx.handleHeaderFooterMousewheel] - ]) : vue.createCommentVNode("v-if", true), - _ctx.border || _ctx.isGroup ? (vue.openBlock(), vue.createElementBlock("div", { - key: 2, - class: vue.normalizeClass(_ctx.ns.e("border-left-patch")) - }, null, 2)) : vue.createCommentVNode("v-if", true) - ], 2), - vue.withDirectives(vue.createElementVNode("div", { - ref: "resizeProxy", - class: vue.normalizeClass(_ctx.ns.e("column-resize-proxy")) - }, null, 2), [ - [vue.vShow, _ctx.resizeProxyVisible] - ]) - ], 46, ["data-prefix", "onMouseleave"]); - } - var Table = /* @__PURE__ */ _export_sfc(_sfc_main$A, [["render", _sfc_render$3], ["__file", "table.vue"]]); - - const defaultClassNames = { - selection: "table-column--selection", - expand: "table__expand-column" - }; - const cellStarts = { - default: { - order: "" - }, - selection: { - width: 48, - minWidth: 48, - realWidth: 48, - order: "" - }, - expand: { - width: 48, - minWidth: 48, - realWidth: 48, - order: "" - }, - index: { - width: 48, - minWidth: 48, - realWidth: 48, - order: "" - } - }; - const getDefaultClassName = (type) => { - return defaultClassNames[type] || ""; - }; - const cellForced = { - selection: { - renderHeader({ store, column }) { - function isDisabled() { - return store.states.data.value && store.states.data.value.length === 0; - } - return vue.h(ElCheckbox, { - disabled: isDisabled(), - size: store.states.tableSize.value, - indeterminate: store.states.selection.value.length > 0 && !store.states.isAllSelected.value, - "onUpdate:modelValue": store.toggleAllSelection, - modelValue: store.states.isAllSelected.value, - ariaLabel: column.label - }); - }, - renderCell({ - row, - column, - store, - $index - }) { - return vue.h(ElCheckbox, { - disabled: column.selectable ? !column.selectable.call(null, row, $index) : false, - size: store.states.tableSize.value, - onChange: () => { - store.commit("rowSelectedChanged", row); - }, - onClick: (event) => event.stopPropagation(), - modelValue: store.isSelected(row), - ariaLabel: column.label - }); - }, - sortable: false, - resizable: false - }, - index: { - renderHeader({ column }) { - return column.label || "#"; - }, - renderCell({ - column, - $index - }) { - let i = $index + 1; - const index = column.index; - if (isNumber(index)) { - i = $index + index; - } else if (isFunction$1(index)) { - i = index($index); - } - return vue.h("div", {}, [i]); - }, - sortable: false - }, - expand: { - renderHeader({ column }) { - return column.label || ""; - }, - renderCell({ - row, - store, - expanded - }) { - const { ns } = store; - const classes = [ns.e("expand-icon")]; - if (expanded) { - classes.push(ns.em("expand-icon", "expanded")); - } - const callback = function(e) { - e.stopPropagation(); - store.toggleRowExpansion(row); - }; - return vue.h("div", { - class: classes, - onClick: callback - }, { - default: () => { - return [ - vue.h(ElIcon, null, { - default: () => { - return [vue.h(arrow_right_default)]; - } - }) - ]; - } - }); - }, - sortable: false, - resizable: false - } - }; - function defaultRenderCell({ - row, - column, - $index - }) { - var _a; - const property = column.property; - const value = property && getProp(row, property).value; - if (column && column.formatter) { - return column.formatter(row, column, value, $index); - } - return ((_a = value == null ? void 0 : value.toString) == null ? void 0 : _a.call(value)) || ""; - } - function treeCellPrefix({ - row, - treeNode, - store - }, createPlaceholder = false) { - const { ns } = store; - if (!treeNode) { - if (createPlaceholder) { - return [ - vue.h("span", { - class: ns.e("placeholder") - }) - ]; - } - return null; - } - const ele = []; - const callback = function(e) { - e.stopPropagation(); - if (treeNode.loading) { - return; - } - store.loadOrToggle(row); - }; - if (treeNode.indent) { - ele.push(vue.h("span", { - class: ns.e("indent"), - style: { "padding-left": `${treeNode.indent}px` } - })); - } - if (isBoolean(treeNode.expanded) && !treeNode.noLazyChildren) { - const expandClasses = [ - ns.e("expand-icon"), - treeNode.expanded ? ns.em("expand-icon", "expanded") : "" - ]; - let icon = arrow_right_default; - if (treeNode.loading) { - icon = loading_default; - } - ele.push(vue.h("div", { - class: expandClasses, - onClick: callback - }, { - default: () => { - return [ - vue.h(ElIcon, { class: { [ns.is("loading")]: treeNode.loading } }, { - default: () => [vue.h(icon)] - }) - ]; - } - })); - } else { - ele.push(vue.h("span", { - class: ns.e("placeholder") - })); - } - return ele; - } - - function getAllAliases(props, aliases) { - return props.reduce((prev, cur) => { - prev[cur] = cur; - return prev; - }, aliases); - } - function useWatcher(owner, props_) { - const instance = vue.getCurrentInstance(); - const registerComplexWatchers = () => { - const props = ["fixed"]; - const aliases = { - realWidth: "width", - realMinWidth: "minWidth" - }; - const allAliases = getAllAliases(props, aliases); - Object.keys(allAliases).forEach((key) => { - const columnKey = aliases[key]; - if (hasOwn(props_, columnKey)) { - vue.watch(() => props_[columnKey], (newVal) => { - let value = newVal; - if (columnKey === "width" && key === "realWidth") { - value = parseWidth(newVal); - } - if (columnKey === "minWidth" && key === "realMinWidth") { - value = parseMinWidth(newVal); - } - instance.columnConfig.value[columnKey] = value; - instance.columnConfig.value[key] = value; - const updateColumns = columnKey === "fixed"; - owner.value.store.scheduleLayout(updateColumns); - }); - } - }); - }; - const registerNormalWatchers = () => { - const props = [ - "label", - "filters", - "filterMultiple", - "filteredValue", - "sortable", - "index", - "formatter", - "className", - "labelClassName", - "filterClassName", - "showOverflowTooltip", - "tooltipFormatter" - ]; - const aliases = { - property: "prop", - align: "realAlign", - headerAlign: "realHeaderAlign" - }; - const allAliases = getAllAliases(props, aliases); - Object.keys(allAliases).forEach((key) => { - const columnKey = aliases[key]; - if (hasOwn(props_, columnKey)) { - vue.watch(() => props_[columnKey], (newVal) => { - instance.columnConfig.value[key] = newVal; - }); - } - }); - }; - return { - registerComplexWatchers, - registerNormalWatchers - }; - } - - function useRender(props, slots, owner) { - const instance = vue.getCurrentInstance(); - const columnId = vue.ref(""); - const isSubColumn = vue.ref(false); - const realAlign = vue.ref(); - const realHeaderAlign = vue.ref(); - const ns = useNamespace("table"); - vue.watchEffect(() => { - realAlign.value = props.align ? `is-${props.align}` : null; - realAlign.value; - }); - vue.watchEffect(() => { - realHeaderAlign.value = props.headerAlign ? `is-${props.headerAlign}` : realAlign.value; - realHeaderAlign.value; - }); - const columnOrTableParent = vue.computed(() => { - let parent = instance.vnode.vParent || instance.parent; - while (parent && !parent.tableId && !parent.columnId) { - parent = parent.vnode.vParent || parent.parent; - } - return parent; - }); - const hasTreeColumn = vue.computed(() => { - const { store } = instance.parent; - if (!store) - return false; - const { treeData } = store.states; - const treeDataValue = treeData.value; - return treeDataValue && Object.keys(treeDataValue).length > 0; - }); - const realWidth = vue.ref(parseWidth(props.width)); - const realMinWidth = vue.ref(parseMinWidth(props.minWidth)); - const setColumnWidth = (column) => { - if (realWidth.value) - column.width = realWidth.value; - if (realMinWidth.value) { - column.minWidth = realMinWidth.value; - } - if (!realWidth.value && realMinWidth.value) { - column.width = void 0; - } - if (!column.minWidth) { - column.minWidth = 80; - } - column.realWidth = Number(isUndefined(column.width) ? column.minWidth : column.width); - return column; - }; - const setColumnForcedProps = (column) => { - const type = column.type; - const source = cellForced[type] || {}; - Object.keys(source).forEach((prop) => { - const value = source[prop]; - if (prop !== "className" && !isUndefined(value)) { - column[prop] = value; - } - }); - const className = getDefaultClassName(type); - if (className) { - const forceClass = `${vue.unref(ns.namespace)}-${className}`; - column.className = column.className ? `${column.className} ${forceClass}` : forceClass; - } - return column; - }; - const checkSubColumn = (children) => { - if (isArray$1(children)) { - children.forEach((child) => check(child)); - } else { - check(children); - } - function check(item) { - var _a; - if (((_a = item == null ? void 0 : item.type) == null ? void 0 : _a.name) === "ElTableColumn") { - item.vParent = instance; - } - } - }; - const setColumnRenders = (column) => { - if (props.renderHeader) ; else if (column.type !== "selection") { - column.renderHeader = (scope) => { - instance.columnConfig.value["label"]; - return vue.renderSlot(slots, "header", scope, () => [column.label]); - }; - } - if (slots["filter-icon"]) { - column.renderFilterIcon = (scope) => { - return vue.renderSlot(slots, "filter-icon", scope); - }; - } - let originRenderCell = column.renderCell; - if (column.type === "expand") { - column.renderCell = (data) => vue.h("div", { - class: "cell" - }, [originRenderCell(data)]); - owner.value.renderExpanded = (data) => { - return slots.default ? slots.default(data) : slots.default; - }; - } else { - originRenderCell = originRenderCell || defaultRenderCell; - column.renderCell = (data) => { - let children = null; - if (slots.default) { - const vnodes = slots.default(data); - children = vnodes.some((v) => v.type !== vue.Comment) ? vnodes : originRenderCell(data); - } else { - children = originRenderCell(data); - } - const { columns } = owner.value.store.states; - const firstUserColumnIndex = columns.value.findIndex((item) => item.type === "default"); - const shouldCreatePlaceholder = hasTreeColumn.value && data.cellIndex === firstUserColumnIndex; - const prefix = treeCellPrefix(data, shouldCreatePlaceholder); - const props2 = { - class: "cell", - style: {} - }; - if (column.showOverflowTooltip) { - props2.class = `${props2.class} ${vue.unref(ns.namespace)}-tooltip`; - props2.style = { - width: `${(data.column.realWidth || Number(data.column.width)) - 1}px` - }; - } - checkSubColumn(children); - return vue.h("div", props2, [prefix, children]); - }; - } - return column; - }; - const getPropsData = (...propsKey) => { - return propsKey.reduce((prev, cur) => { - if (isArray$1(cur)) { - cur.forEach((key) => { - prev[key] = props[key]; - }); - } - return prev; - }, {}); - }; - const getColumnElIndex = (children, child) => { - return Array.prototype.indexOf.call(children, child); - }; - const updateColumnOrder = () => { - owner.value.store.commit("updateColumnOrder", instance.columnConfig.value); - }; - return { - columnId, - realAlign, - isSubColumn, - realHeaderAlign, - columnOrTableParent, - setColumnWidth, - setColumnForcedProps, - setColumnRenders, - getPropsData, - getColumnElIndex, - updateColumnOrder - }; - } - - var defaultProps = { - type: { - type: String, - default: "default" - }, - label: String, - className: String, - labelClassName: String, - property: String, - prop: String, - width: { - type: [String, Number], - default: "" - }, - minWidth: { - type: [String, Number], - default: "" - }, - renderHeader: Function, - sortable: { - type: [Boolean, String], - default: false - }, - sortMethod: Function, - sortBy: [String, Function, Array], - resizable: { - type: Boolean, - default: true - }, - columnKey: String, - align: String, - headerAlign: String, - showOverflowTooltip: { - type: [Boolean, Object], - default: void 0 - }, - tooltipFormatter: Function, - fixed: [Boolean, String], - formatter: Function, - selectable: Function, - reserveSelection: Boolean, - filterMethod: Function, - filteredValue: Array, - filters: Array, - filterPlacement: String, - filterMultiple: { - type: Boolean, - default: true - }, - filterClassName: String, - index: [Number, Function], - sortOrders: { - type: Array, - default: () => { - return ["ascending", "descending", null]; - }, - validator: (val) => { - return val.every((order) => ["ascending", "descending", null].includes(order)); - } - } - }; - - let columnIdSeed = 1; - var ElTableColumn$1 = vue.defineComponent({ - name: "ElTableColumn", - components: { - ElCheckbox - }, - props: defaultProps, - setup(props, { slots }) { - const instance = vue.getCurrentInstance(); - const columnConfig = vue.ref({}); - const owner = vue.computed(() => { - let parent2 = instance.parent; - while (parent2 && !parent2.tableId) { - parent2 = parent2.parent; - } - return parent2; - }); - const { registerNormalWatchers, registerComplexWatchers } = useWatcher(owner, props); - const { - columnId, - isSubColumn, - realHeaderAlign, - columnOrTableParent, - setColumnWidth, - setColumnForcedProps, - setColumnRenders, - getPropsData, - getColumnElIndex, - realAlign, - updateColumnOrder - } = useRender(props, slots, owner); - const parent = columnOrTableParent.value; - columnId.value = `${parent.tableId || parent.columnId}_column_${columnIdSeed++}`; - vue.onBeforeMount(() => { - isSubColumn.value = owner.value !== parent; - const type = props.type || "default"; - const sortable = props.sortable === "" ? true : props.sortable; - const showOverflowTooltip = isUndefined(props.showOverflowTooltip) ? parent.props.showOverflowTooltip : props.showOverflowTooltip; - const tooltipFormatter = isUndefined(props.tooltipFormatter) ? parent.props.tooltipFormatter : props.tooltipFormatter; - const defaults = { - ...cellStarts[type], - id: columnId.value, - type, - property: props.prop || props.property, - align: realAlign, - headerAlign: realHeaderAlign, - showOverflowTooltip, - tooltipFormatter, - filterable: props.filters || props.filterMethod, - filteredValue: [], - filterPlacement: "", - filterClassName: "", - isColumnGroup: false, - isSubColumn: false, - filterOpened: false, - sortable, - index: props.index, - rawColumnKey: instance.vnode.key - }; - const basicProps = [ - "columnKey", - "label", - "className", - "labelClassName", - "type", - "renderHeader", - "formatter", - "fixed", - "resizable" - ]; - const sortProps = ["sortMethod", "sortBy", "sortOrders"]; - const selectProps = ["selectable", "reserveSelection"]; - const filterProps = [ - "filterMethod", - "filters", - "filterMultiple", - "filterOpened", - "filteredValue", - "filterPlacement", - "filterClassName" - ]; - let column = getPropsData(basicProps, sortProps, selectProps, filterProps); - column = mergeOptions(defaults, column); - const chains = compose(setColumnRenders, setColumnWidth, setColumnForcedProps); - column = chains(column); - columnConfig.value = column; - registerNormalWatchers(); - registerComplexWatchers(); - }); - vue.onMounted(() => { - var _a; - const parent2 = columnOrTableParent.value; - const children = isSubColumn.value ? parent2.vnode.el.children : (_a = parent2.refs.hiddenColumns) == null ? void 0 : _a.children; - const getColumnIndex = () => getColumnElIndex(children || [], instance.vnode.el); - columnConfig.value.getColumnIndex = getColumnIndex; - const columnIndex = getColumnIndex(); - columnIndex > -1 && owner.value.store.commit("insertColumn", columnConfig.value, isSubColumn.value ? parent2.columnConfig.value : null, updateColumnOrder); - }); - vue.onBeforeUnmount(() => { - const getColumnIndex = columnConfig.value.getColumnIndex; - const columnIndex = getColumnIndex ? getColumnIndex() : -1; - columnIndex > -1 && owner.value.store.commit("removeColumn", columnConfig.value, isSubColumn.value ? parent.columnConfig.value : null, updateColumnOrder); - }); - instance.columnId = columnId.value; - instance.columnConfig = columnConfig; - return; - }, - render() { - var _a, _b, _c; - try { - const renderDefault = (_b = (_a = this.$slots).default) == null ? void 0 : _b.call(_a, { - row: {}, - column: {}, - $index: -1 - }); - const children = []; - if (isArray$1(renderDefault)) { - for (const childNode of renderDefault) { - if (((_c = childNode.type) == null ? void 0 : _c.name) === "ElTableColumn" || childNode.shapeFlag & 2) { - children.push(childNode); - } else if (childNode.type === vue.Fragment && isArray$1(childNode.children)) { - childNode.children.forEach((vnode2) => { - if ((vnode2 == null ? void 0 : vnode2.patchFlag) !== 1024 && !isString$1(vnode2 == null ? void 0 : vnode2.children)) { - children.push(vnode2); - } - }); - } - } - } - const vnode = vue.h("div", children); - return vnode; - } catch (e) { - return vue.h("div", []); - } - } - }); - - const ElTable = withInstall(Table, { - TableColumn: ElTableColumn$1 - }); - const ElTableColumn = withNoopInstall(ElTableColumn$1); - - var SortOrder = /* @__PURE__ */ ((SortOrder2) => { - SortOrder2["ASC"] = "asc"; - SortOrder2["DESC"] = "desc"; - return SortOrder2; - })(SortOrder || {}); - var Alignment = /* @__PURE__ */ ((Alignment2) => { - Alignment2["CENTER"] = "center"; - Alignment2["RIGHT"] = "right"; - return Alignment2; - })(Alignment || {}); - var FixedDir = /* @__PURE__ */ ((FixedDir2) => { - FixedDir2["LEFT"] = "left"; - FixedDir2["RIGHT"] = "right"; - return FixedDir2; - })(FixedDir || {}); - const oppositeOrderMap = { - ["asc" /* ASC */]: "desc" /* DESC */, - ["desc" /* DESC */]: "asc" /* ASC */ - }; - - const placeholderSign = Symbol("placeholder"); - - const calcColumnStyle = (column, fixedColumn, fixed) => { - var _a; - const flex = { - flexGrow: 0, - flexShrink: 0, - ...fixed ? {} : { - flexGrow: column.flexGrow || 0, - flexShrink: column.flexShrink || 1 - } - }; - if (!fixed) { - flex.flexShrink = 1; - } - const style = { - ...(_a = column.style) != null ? _a : {}, - ...flex, - flexBasis: "auto", - width: column.width - }; - if (!fixedColumn) { - if (column.maxWidth) - style.maxWidth = column.maxWidth; - if (column.minWidth) - style.minWidth = column.minWidth; - } - return style; - }; - - function useColumns(props, columns, fixed) { - const _columns = vue.computed(() => vue.unref(columns).map((column, index) => { - var _a, _b; - return { - ...column, - key: (_b = (_a = column.key) != null ? _a : column.dataKey) != null ? _b : index - }; - })); - const visibleColumns = vue.computed(() => { - return vue.unref(_columns).filter((column) => !column.hidden); - }); - const fixedColumnsOnLeft = vue.computed(() => vue.unref(visibleColumns).filter((column) => column.fixed === "left" || column.fixed === true)); - const fixedColumnsOnRight = vue.computed(() => vue.unref(visibleColumns).filter((column) => column.fixed === "right")); - const normalColumns = vue.computed(() => vue.unref(visibleColumns).filter((column) => !column.fixed)); - const mainColumns = vue.computed(() => { - const ret = []; - vue.unref(fixedColumnsOnLeft).forEach((column) => { - ret.push({ - ...column, - placeholderSign - }); - }); - vue.unref(normalColumns).forEach((column) => { - ret.push(column); - }); - vue.unref(fixedColumnsOnRight).forEach((column) => { - ret.push({ - ...column, - placeholderSign - }); - }); - return ret; - }); - const hasFixedColumns = vue.computed(() => { - return vue.unref(fixedColumnsOnLeft).length || vue.unref(fixedColumnsOnRight).length; - }); - const columnsStyles = vue.computed(() => { - return vue.unref(_columns).reduce((style, column) => { - style[column.key] = calcColumnStyle(column, vue.unref(fixed), props.fixed); - return style; - }, {}); - }); - const columnsTotalWidth = vue.computed(() => { - return vue.unref(visibleColumns).reduce((width, column) => width + column.width, 0); - }); - const getColumn = (key) => { - return vue.unref(_columns).find((column) => column.key === key); - }; - const getColumnStyle = (key) => { - return vue.unref(columnsStyles)[key]; - }; - const updateColumnWidth = (column, width) => { - column.width = width; - }; - function onColumnSorted(e) { - var _a; - const { key } = e.currentTarget.dataset; - if (!key) - return; - const { sortState, sortBy } = props; - let order = SortOrder.ASC; - if (isObject$1(sortState)) { - order = oppositeOrderMap[sortState[key]]; - } else { - order = oppositeOrderMap[sortBy.order]; - } - (_a = props.onColumnSort) == null ? void 0 : _a.call(props, { column: getColumn(key), key, order }); - } - return { - columns: _columns, - columnsStyles, - columnsTotalWidth, - fixedColumnsOnLeft, - fixedColumnsOnRight, - hasFixedColumns, - mainColumns, - normalColumns, - visibleColumns, - getColumn, - getColumnStyle, - updateColumnWidth, - onColumnSorted - }; - } - - const useScrollbar = (props, { - mainTableRef, - leftTableRef, - rightTableRef, - onMaybeEndReached - }) => { - const scrollPos = vue.ref({ scrollLeft: 0, scrollTop: 0 }); - function doScroll(params) { - var _a, _b, _c; - const { scrollTop } = params; - (_a = mainTableRef.value) == null ? void 0 : _a.scrollTo(params); - (_b = leftTableRef.value) == null ? void 0 : _b.scrollToTop(scrollTop); - (_c = rightTableRef.value) == null ? void 0 : _c.scrollToTop(scrollTop); - } - function scrollTo(params) { - scrollPos.value = params; - doScroll(params); - } - function scrollToTop(scrollTop) { - scrollPos.value.scrollTop = scrollTop; - doScroll(vue.unref(scrollPos)); - } - function scrollToLeft(scrollLeft) { - var _a, _b; - scrollPos.value.scrollLeft = scrollLeft; - (_b = (_a = mainTableRef.value) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, vue.unref(scrollPos)); - } - function onScroll(params) { - var _a; - scrollTo(params); - (_a = props.onScroll) == null ? void 0 : _a.call(props, params); - } - function onVerticalScroll({ scrollTop }) { - const { scrollTop: currentScrollTop } = vue.unref(scrollPos); - if (scrollTop !== currentScrollTop) - scrollToTop(scrollTop); - } - function scrollToRow(row, strategy = "auto") { - var _a; - (_a = mainTableRef.value) == null ? void 0 : _a.scrollToRow(row, strategy); - } - vue.watch(() => vue.unref(scrollPos).scrollTop, (cur, prev) => { - if (cur > prev) - onMaybeEndReached(); - }); - return { - scrollPos, - scrollTo, - scrollToLeft, - scrollToTop, - scrollToRow, - onScroll, - onVerticalScroll - }; - }; - - const useRow = (props, { - mainTableRef, - leftTableRef, - rightTableRef, - tableInstance, - ns, - isScrolling - }) => { - const vm = vue.getCurrentInstance(); - const { emit } = vm; - const isResetting = vue.shallowRef(false); - const expandedRowKeys = vue.ref(props.defaultExpandedRowKeys || []); - const lastRenderedRowIndex = vue.ref(-1); - const resetIndex = vue.shallowRef(null); - const rowHeights = vue.ref({}); - const pendingRowHeights = vue.ref({}); - const leftTableHeights = vue.shallowRef({}); - const mainTableHeights = vue.shallowRef({}); - const rightTableHeights = vue.shallowRef({}); - const isDynamic = vue.computed(() => isNumber(props.estimatedRowHeight)); - function onRowsRendered(params) { - var _a; - (_a = props.onRowsRendered) == null ? void 0 : _a.call(props, params); - if (params.rowCacheEnd > vue.unref(lastRenderedRowIndex)) { - lastRenderedRowIndex.value = params.rowCacheEnd; - } - } - function onRowHovered({ hovered, rowKey }) { - if (isScrolling.value) { - return; - } - const tableRoot = tableInstance.vnode.el; - const rows = tableRoot.querySelectorAll(`[rowkey="${String(rowKey)}"]`); - rows.forEach((row) => { - if (hovered) { - row.classList.add(ns.is("hovered")); - } else { - row.classList.remove(ns.is("hovered")); - } - }); - } - function onRowExpanded({ - expanded, - rowData, - rowIndex, - rowKey - }) { - var _a, _b; - const _expandedRowKeys = [...vue.unref(expandedRowKeys)]; - const currentKeyIndex = _expandedRowKeys.indexOf(rowKey); - if (expanded) { - if (currentKeyIndex === -1) - _expandedRowKeys.push(rowKey); - } else { - if (currentKeyIndex > -1) - _expandedRowKeys.splice(currentKeyIndex, 1); - } - expandedRowKeys.value = _expandedRowKeys; - emit("update:expandedRowKeys", _expandedRowKeys); - (_a = props.onRowExpand) == null ? void 0 : _a.call(props, { - expanded, - rowData, - rowIndex, - rowKey - }); - (_b = props.onExpandedRowsChange) == null ? void 0 : _b.call(props, _expandedRowKeys); - } - const flushingRowHeights = debounce(() => { - var _a, _b, _c, _d; - isResetting.value = true; - rowHeights.value = { ...vue.unref(rowHeights), ...vue.unref(pendingRowHeights) }; - resetAfterIndex(vue.unref(resetIndex), false); - pendingRowHeights.value = {}; - resetIndex.value = null; - (_a = mainTableRef.value) == null ? void 0 : _a.forceUpdate(); - (_b = leftTableRef.value) == null ? void 0 : _b.forceUpdate(); - (_c = rightTableRef.value) == null ? void 0 : _c.forceUpdate(); - (_d = vm.proxy) == null ? void 0 : _d.$forceUpdate(); - isResetting.value = false; - }, 0); - function resetAfterIndex(index, forceUpdate = false) { - if (!vue.unref(isDynamic)) - return; - [mainTableRef, leftTableRef, rightTableRef].forEach((tableRef) => { - const table = vue.unref(tableRef); - if (table) - table.resetAfterRowIndex(index, forceUpdate); - }); - } - function resetHeights(rowKey, height, rowIdx) { - const resetIdx = vue.unref(resetIndex); - if (resetIdx === null) { - resetIndex.value = rowIdx; - } else { - if (resetIdx > rowIdx) { - resetIndex.value = rowIdx; - } - } - pendingRowHeights.value[rowKey] = height; - } - function onRowHeightChange({ rowKey, height, rowIndex }, fixedDir) { - if (!fixedDir) { - mainTableHeights.value[rowKey] = height; - } else { - if (fixedDir === FixedDir.RIGHT) { - rightTableHeights.value[rowKey] = height; - } else { - leftTableHeights.value[rowKey] = height; - } - } - const maximumHeight = Math.max(...[leftTableHeights, rightTableHeights, mainTableHeights].map((records) => records.value[rowKey] || 0)); - if (vue.unref(rowHeights)[rowKey] !== maximumHeight) { - resetHeights(rowKey, maximumHeight, rowIndex); - flushingRowHeights(); - } - } - return { - expandedRowKeys, - lastRenderedRowIndex, - isDynamic, - isResetting, - rowHeights, - resetAfterIndex, - onRowExpanded, - onRowHovered, - onRowsRendered, - onRowHeightChange - }; - }; - - const useData = (props, { expandedRowKeys, lastRenderedRowIndex, resetAfterIndex }) => { - const depthMap = vue.ref({}); - const flattenedData = vue.computed(() => { - const depths = {}; - const { data: data2, rowKey } = props; - const _expandedRowKeys = vue.unref(expandedRowKeys); - if (!_expandedRowKeys || !_expandedRowKeys.length) - return data2; - const array = []; - const keysSet = /* @__PURE__ */ new Set(); - _expandedRowKeys.forEach((x) => keysSet.add(x)); - let copy = data2.slice(); - copy.forEach((x) => depths[x[rowKey]] = 0); - while (copy.length > 0) { - const item = copy.shift(); - array.push(item); - if (keysSet.has(item[rowKey]) && isArray$1(item.children) && item.children.length > 0) { - copy = [...item.children, ...copy]; - item.children.forEach((child) => depths[child[rowKey]] = depths[item[rowKey]] + 1); - } - } - depthMap.value = depths; - return array; - }); - const data = vue.computed(() => { - const { data: data2, expandColumnKey } = props; - return expandColumnKey ? vue.unref(flattenedData) : data2; - }); - vue.watch(data, (val, prev) => { - if (val !== prev) { - lastRenderedRowIndex.value = -1; - resetAfterIndex(0, true); - } - }); - return { - data, - depthMap - }; - }; - - const sumReducer = (sum2, num) => sum2 + num; - const sum = (listLike) => { - return isArray$1(listLike) ? listLike.reduce(sumReducer, 0) : listLike; - }; - const tryCall = (fLike, params, defaultRet = {}) => { - return isFunction$1(fLike) ? fLike(params) : fLike != null ? fLike : defaultRet; - }; - const enforceUnit = (style) => { - ["width", "maxWidth", "minWidth", "height"].forEach((key) => { - style[key] = addUnit(style[key]); - }); - return style; - }; - const componentToSlot = (ComponentLike) => vue.isVNode(ComponentLike) ? (props) => vue.h(ComponentLike, props) : ComponentLike; - - const useStyles = (props, { - columnsTotalWidth, - rowsHeight, - fixedColumnsOnLeft, - fixedColumnsOnRight - }) => { - const bodyWidth = vue.computed(() => { - const { fixed, width, vScrollbarSize } = props; - const ret = width - vScrollbarSize; - return fixed ? Math.max(Math.round(vue.unref(columnsTotalWidth)), ret) : ret; - }); - const headerWidth = vue.computed(() => vue.unref(bodyWidth) + props.vScrollbarSize); - const mainTableHeight = vue.computed(() => { - const { height = 0, maxHeight = 0, footerHeight: footerHeight2, hScrollbarSize } = props; - if (maxHeight > 0) { - const _fixedRowsHeight = vue.unref(fixedRowsHeight); - const _rowsHeight = vue.unref(rowsHeight); - const _headerHeight = vue.unref(headerHeight); - const total = _headerHeight + _fixedRowsHeight + _rowsHeight + hScrollbarSize; - return Math.min(total, maxHeight - footerHeight2); - } - return height - footerHeight2; - }); - const fixedTableHeight = vue.computed(() => { - const { maxHeight } = props; - const tableHeight = vue.unref(mainTableHeight); - if (isNumber(maxHeight) && maxHeight > 0) - return tableHeight; - const totalHeight = vue.unref(rowsHeight) + vue.unref(headerHeight) + vue.unref(fixedRowsHeight); - return Math.min(tableHeight, totalHeight); - }); - const mapColumn = (column) => column.width; - const leftTableWidth = vue.computed(() => sum(vue.unref(fixedColumnsOnLeft).map(mapColumn))); - const rightTableWidth = vue.computed(() => sum(vue.unref(fixedColumnsOnRight).map(mapColumn))); - const headerHeight = vue.computed(() => sum(props.headerHeight)); - const fixedRowsHeight = vue.computed(() => { - var _a; - return (((_a = props.fixedData) == null ? void 0 : _a.length) || 0) * props.rowHeight; - }); - const windowHeight = vue.computed(() => { - return vue.unref(mainTableHeight) - vue.unref(headerHeight) - vue.unref(fixedRowsHeight); - }); - const rootStyle = vue.computed(() => { - const { style = {}, height, width } = props; - return enforceUnit({ - ...style, - height, - width - }); - }); - const footerHeight = vue.computed(() => enforceUnit({ height: props.footerHeight })); - const emptyStyle = vue.computed(() => ({ - top: addUnit(vue.unref(headerHeight)), - bottom: addUnit(props.footerHeight), - width: addUnit(props.width) - })); - return { - bodyWidth, - fixedTableHeight, - mainTableHeight, - leftTableWidth, - rightTableWidth, - headerWidth, - windowHeight, - footerHeight, - emptyStyle, - rootStyle, - headerHeight - }; - }; - - const useAutoResize = (props) => { - const sizer = vue.ref(); - const width$ = vue.ref(0); - const height$ = vue.ref(0); - let resizerStopper; - vue.onMounted(() => { - resizerStopper = useResizeObserver(sizer, ([entry]) => { - const { width, height } = entry.contentRect; - const { paddingLeft, paddingRight, paddingTop, paddingBottom } = getComputedStyle(entry.target); - const left = Number.parseInt(paddingLeft) || 0; - const right = Number.parseInt(paddingRight) || 0; - const top = Number.parseInt(paddingTop) || 0; - const bottom = Number.parseInt(paddingBottom) || 0; - width$.value = width - left - right; - height$.value = height - top - bottom; - }).stop; - }); - vue.onBeforeUnmount(() => { - resizerStopper == null ? void 0 : resizerStopper(); - }); - vue.watch([width$, height$], ([width, height]) => { - var _a; - (_a = props.onResize) == null ? void 0 : _a.call(props, { - width, - height - }); - }); - return { - sizer, - width: width$, - height: height$ - }; - }; - - function useTable(props) { - const mainTableRef = vue.ref(); - const leftTableRef = vue.ref(); - const rightTableRef = vue.ref(); - const { - columns, - columnsStyles, - columnsTotalWidth, - fixedColumnsOnLeft, - fixedColumnsOnRight, - hasFixedColumns, - mainColumns, - onColumnSorted - } = useColumns(props, vue.toRef(props, "columns"), vue.toRef(props, "fixed")); - const { - scrollTo, - scrollToLeft, - scrollToTop, - scrollToRow, - onScroll, - onVerticalScroll, - scrollPos - } = useScrollbar(props, { - mainTableRef, - leftTableRef, - rightTableRef, - onMaybeEndReached - }); - const ns = useNamespace("table-v2"); - const instance = vue.getCurrentInstance(); - const isScrolling = vue.shallowRef(false); - const { - expandedRowKeys, - lastRenderedRowIndex, - isDynamic, - isResetting, - rowHeights, - resetAfterIndex, - onRowExpanded, - onRowHeightChange, - onRowHovered, - onRowsRendered - } = useRow(props, { - mainTableRef, - leftTableRef, - rightTableRef, - tableInstance: instance, - ns, - isScrolling - }); - const { data, depthMap } = useData(props, { - expandedRowKeys, - lastRenderedRowIndex, - resetAfterIndex - }); - const rowsHeight = vue.computed(() => { - const { estimatedRowHeight, rowHeight } = props; - const _data = vue.unref(data); - if (isNumber(estimatedRowHeight)) { - return Object.values(vue.unref(rowHeights)).reduce((acc, curr) => acc + curr, 0); - } - return _data.length * rowHeight; - }); - const { - bodyWidth, - fixedTableHeight, - mainTableHeight, - leftTableWidth, - rightTableWidth, - headerWidth, - windowHeight, - footerHeight, - emptyStyle, - rootStyle, - headerHeight - } = useStyles(props, { - columnsTotalWidth, - fixedColumnsOnLeft, - fixedColumnsOnRight, - rowsHeight - }); - const containerRef = vue.ref(); - const showEmpty = vue.computed(() => { - const noData = vue.unref(data).length === 0; - return isArray$1(props.fixedData) ? props.fixedData.length === 0 && noData : noData; - }); - function getRowHeight(rowIndex) { - const { estimatedRowHeight, rowHeight, rowKey } = props; - if (!estimatedRowHeight) - return rowHeight; - return vue.unref(rowHeights)[vue.unref(data)[rowIndex][rowKey]] || estimatedRowHeight; - } - function onMaybeEndReached() { - const { onEndReached } = props; - if (!onEndReached) - return; - const { scrollTop } = vue.unref(scrollPos); - const _totalHeight = vue.unref(rowsHeight); - const clientHeight = vue.unref(windowHeight); - const heightUntilEnd = _totalHeight - (scrollTop + clientHeight) + props.hScrollbarSize; - if (vue.unref(lastRenderedRowIndex) >= 0 && _totalHeight === scrollTop + vue.unref(mainTableHeight) - vue.unref(headerHeight)) { - onEndReached(heightUntilEnd); - } - } - vue.watch(() => props.expandedRowKeys, (val) => expandedRowKeys.value = val, { - deep: true - }); - return { - columns, - containerRef, - mainTableRef, - leftTableRef, - rightTableRef, - isDynamic, - isResetting, - isScrolling, - hasFixedColumns, - columnsStyles, - columnsTotalWidth, - data, - expandedRowKeys, - depthMap, - fixedColumnsOnLeft, - fixedColumnsOnRight, - mainColumns, - bodyWidth, - emptyStyle, - rootStyle, - headerWidth, - footerHeight, - mainTableHeight, - fixedTableHeight, - leftTableWidth, - rightTableWidth, - showEmpty, - getRowHeight, - onColumnSorted, - onRowHovered, - onRowExpanded, - onRowsRendered, - onRowHeightChange, - scrollTo, - scrollToLeft, - scrollToTop, - scrollToRow, - onScroll, - onVerticalScroll - }; - } - - const TableV2InjectionKey = Symbol("tableV2"); - - const classType = String; - const columns = { - type: definePropType(Array), - required: true - }; - const fixedDataType = { - type: definePropType(Array) - }; - const dataType = { - ...fixedDataType, - required: true - }; - const expandColumnKey = String; - const expandKeys = { - type: definePropType(Array), - default: () => mutable([]) - }; - const requiredNumber = { - type: Number, - required: true - }; - const rowKey = { - type: definePropType([String, Number, Symbol]), - default: "id" - }; - const styleType = { - type: definePropType(Object) - }; - - const tableV2RowProps = buildProps({ - class: String, - columns, - columnsStyles: { - type: definePropType(Object), - required: true - }, - depth: Number, - expandColumnKey, - estimatedRowHeight: { - ...virtualizedGridProps.estimatedRowHeight, - default: void 0 - }, - isScrolling: Boolean, - onRowExpand: { - type: definePropType(Function) - }, - onRowHover: { - type: definePropType(Function) - }, - onRowHeightChange: { - type: definePropType(Function) - }, - rowData: { - type: definePropType(Object), - required: true - }, - rowEventHandlers: { - type: definePropType(Object) - }, - rowIndex: { - type: Number, - required: true - }, - rowKey, - style: { - type: definePropType(Object) - } - }); - - const requiredNumberType = { - type: Number, - required: true - }; - const tableV2HeaderProps = buildProps({ - class: String, - columns, - fixedHeaderData: { - type: definePropType(Array) - }, - headerData: { - type: definePropType(Array), - required: true - }, - headerHeight: { - type: definePropType([Number, Array]), - default: 50 - }, - rowWidth: requiredNumberType, - rowHeight: { - type: Number, - default: 50 - }, - height: requiredNumberType, - width: requiredNumberType - }); - - const tableV2GridProps = buildProps({ - columns, - data: dataType, - fixedData: fixedDataType, - estimatedRowHeight: tableV2RowProps.estimatedRowHeight, - width: requiredNumber, - height: requiredNumber, - headerWidth: requiredNumber, - headerHeight: tableV2HeaderProps.headerHeight, - bodyWidth: requiredNumber, - rowHeight: requiredNumber, - cache: virtualizedListProps.cache, - useIsScrolling: Boolean, - scrollbarAlwaysOn: virtualizedGridProps.scrollbarAlwaysOn, - scrollbarStartGap: virtualizedGridProps.scrollbarStartGap, - scrollbarEndGap: virtualizedGridProps.scrollbarEndGap, - class: classType, - style: styleType, - containerStyle: styleType, - getRowHeight: { - type: definePropType(Function), - required: true - }, - rowKey: tableV2RowProps.rowKey, - onRowsRendered: { - type: definePropType(Function) - }, - onScroll: { - type: definePropType(Function) - } - }); - - const tableV2Props = buildProps({ - cache: tableV2GridProps.cache, - estimatedRowHeight: tableV2RowProps.estimatedRowHeight, - rowKey, - headerClass: { - type: definePropType([ - String, - Function - ]) - }, - headerProps: { - type: definePropType([ - Object, - Function - ]) - }, - headerCellProps: { - type: definePropType([ - Object, - Function - ]) - }, - headerHeight: tableV2HeaderProps.headerHeight, - footerHeight: { - type: Number, - default: 0 - }, - rowClass: { - type: definePropType([String, Function]) - }, - rowProps: { - type: definePropType([Object, Function]) - }, - rowHeight: { - type: Number, - default: 50 - }, - cellProps: { - type: definePropType([ - Object, - Function - ]) - }, - columns, - data: dataType, - dataGetter: { - type: definePropType(Function) - }, - fixedData: fixedDataType, - expandColumnKey: tableV2RowProps.expandColumnKey, - expandedRowKeys: expandKeys, - defaultExpandedRowKeys: expandKeys, - class: classType, - fixed: Boolean, - style: { - type: definePropType(Object) - }, - width: requiredNumber, - height: requiredNumber, - maxHeight: Number, - useIsScrolling: Boolean, - indentSize: { - type: Number, - default: 12 - }, - iconSize: { - type: Number, - default: 12 - }, - hScrollbarSize: virtualizedGridProps.hScrollbarSize, - vScrollbarSize: virtualizedGridProps.vScrollbarSize, - scrollbarAlwaysOn: virtualizedScrollbarProps.alwaysOn, - sortBy: { - type: definePropType(Object), - default: () => ({}) - }, - sortState: { - type: definePropType(Object), - default: void 0 - }, - onColumnSort: { - type: definePropType(Function) - }, - onExpandedRowsChange: { - type: definePropType(Function) - }, - onEndReached: { - type: definePropType(Function) - }, - onRowExpand: tableV2RowProps.onRowExpand, - onScroll: tableV2GridProps.onScroll, - onRowsRendered: tableV2GridProps.onRowsRendered, - rowEventHandlers: tableV2RowProps.rowEventHandlers - }); - - const TableV2Cell = (props, { - slots - }) => { - var _a; - const { - cellData, - style - } = props; - const displayText = ((_a = cellData == null ? void 0 : cellData.toString) == null ? void 0 : _a.call(cellData)) || ""; - const defaultSlot = vue.renderSlot(slots, "default", props, () => [displayText]); - return vue.createVNode("div", { - "class": props.class, - "title": displayText, - "style": style - }, [defaultSlot]); - }; - TableV2Cell.displayName = "ElTableV2Cell"; - TableV2Cell.inheritAttrs = false; - var TableCell = TableV2Cell; - - const HeaderCell = (props, { - slots - }) => vue.renderSlot(slots, "default", props, () => { - var _a, _b; - return [vue.createVNode("div", { - "class": props.class, - "title": (_a = props.column) == null ? void 0 : _a.title - }, [(_b = props.column) == null ? void 0 : _b.title])]; - }); - HeaderCell.displayName = "ElTableV2HeaderCell"; - HeaderCell.inheritAttrs = false; - var HeaderCell$1 = HeaderCell; - - const tableV2HeaderRowProps = buildProps({ - class: String, - columns, - columnsStyles: { - type: definePropType(Object), - required: true - }, - headerIndex: Number, - style: { type: definePropType(Object) } - }); - - const TableV2HeaderRow = vue.defineComponent({ - name: "ElTableV2HeaderRow", - props: tableV2HeaderRowProps, - setup(props, { - slots - }) { - return () => { - const { - columns, - columnsStyles, - headerIndex, - style - } = props; - let Cells = columns.map((column, columnIndex) => { - return slots.cell({ - columns, - column, - columnIndex, - headerIndex, - style: columnsStyles[column.key] - }); - }); - if (slots.header) { - Cells = slots.header({ - cells: Cells.map((node) => { - if (isArray$1(node) && node.length === 1) { - return node[0]; - } - return node; - }), - columns, - headerIndex - }); - } - return vue.createVNode("div", { - "class": props.class, - "style": style, - "role": "row" - }, [Cells]); - }; - } - }); - var HeaderRow = TableV2HeaderRow; - - const COMPONENT_NAME$7 = "ElTableV2Header"; - const TableV2Header = vue.defineComponent({ - name: COMPONENT_NAME$7, - props: tableV2HeaderProps, - setup(props, { - slots, - expose - }) { - const ns = useNamespace("table-v2"); - const scrollLeftInfo = vue.inject("tableV2GridScrollLeft"); - const headerRef = vue.ref(); - const headerStyle = vue.computed(() => enforceUnit({ - width: props.width, - height: props.height - })); - const rowStyle = vue.computed(() => enforceUnit({ - width: props.rowWidth, - height: props.height - })); - const headerHeights = vue.computed(() => castArray$1(vue.unref(props.headerHeight))); - const scrollToLeft = (left) => { - const headerEl = vue.unref(headerRef); - vue.nextTick(() => { - (headerEl == null ? void 0 : headerEl.scroll) && headerEl.scroll({ - left - }); - }); - }; - const renderFixedRows = () => { - const fixedRowClassName = ns.e("fixed-header-row"); - const { - columns, - fixedHeaderData, - rowHeight - } = props; - return fixedHeaderData == null ? void 0 : fixedHeaderData.map((fixedRowData, fixedRowIndex) => { - var _a; - const style = enforceUnit({ - height: rowHeight, - width: "100%" - }); - return (_a = slots.fixed) == null ? void 0 : _a.call(slots, { - class: fixedRowClassName, - columns, - rowData: fixedRowData, - rowIndex: -(fixedRowIndex + 1), - style - }); - }); - }; - const renderDynamicRows = () => { - const dynamicRowClassName = ns.e("dynamic-header-row"); - const { - columns - } = props; - return vue.unref(headerHeights).map((rowHeight, rowIndex) => { - var _a; - const style = enforceUnit({ - width: "100%", - height: rowHeight - }); - return (_a = slots.dynamic) == null ? void 0 : _a.call(slots, { - class: dynamicRowClassName, - columns, - headerIndex: rowIndex, - style - }); - }); - }; - vue.onUpdated(() => { - if (scrollLeftInfo == null ? void 0 : scrollLeftInfo.value) { - scrollToLeft(scrollLeftInfo.value); - } - }); - expose({ - scrollToLeft - }); - return () => { - if (props.height <= 0) - return; - return vue.createVNode("div", { - "ref": headerRef, - "class": props.class, - "style": vue.unref(headerStyle), - "role": "rowgroup" - }, [vue.createVNode("div", { - "style": vue.unref(rowStyle), - "class": ns.e("header") - }, [renderDynamicRows(), renderFixedRows()])]); - }; - } - }); - var Header = TableV2Header; - - const useTableRow = (props) => { - const { - isScrolling - } = vue.inject(TableV2InjectionKey); - const measured = vue.ref(false); - const rowRef = vue.ref(); - const measurable = vue.computed(() => { - return isNumber(props.estimatedRowHeight) && props.rowIndex >= 0; - }); - const doMeasure = (isInit = false) => { - const $rowRef = vue.unref(rowRef); - if (!$rowRef) - return; - const { - columns, - onRowHeightChange, - rowKey, - rowIndex, - style - } = props; - const { - height - } = $rowRef.getBoundingClientRect(); - measured.value = true; - vue.nextTick(() => { - if (isInit || height !== Number.parseInt(style.height)) { - const firstColumn = columns[0]; - const isPlaceholder = (firstColumn == null ? void 0 : firstColumn.placeholderSign) === placeholderSign; - onRowHeightChange == null ? void 0 : onRowHeightChange({ - rowKey, - height, - rowIndex - }, firstColumn && !isPlaceholder && firstColumn.fixed); - } - }); - }; - const eventHandlers = vue.computed(() => { - const { - rowData, - rowIndex, - rowKey, - onRowHover - } = props; - const handlers = props.rowEventHandlers || {}; - const eventHandlers2 = {}; - Object.entries(handlers).forEach(([eventName, handler]) => { - if (isFunction$1(handler)) { - eventHandlers2[eventName] = (event) => { - handler({ - event, - rowData, - rowIndex, - rowKey - }); - }; - } - }); - if (onRowHover) { - [{ - name: "onMouseleave", - hovered: false - }, { - name: "onMouseenter", - hovered: true - }].forEach(({ - name, - hovered - }) => { - const existedHandler = eventHandlers2[name]; - eventHandlers2[name] = (event) => { - onRowHover({ - event, - hovered, - rowData, - rowIndex, - rowKey - }); - existedHandler == null ? void 0 : existedHandler(event); - }; - }); - } - return eventHandlers2; - }); - const onExpand = (expanded) => { - const { - onRowExpand, - rowData, - rowIndex, - rowKey - } = props; - onRowExpand == null ? void 0 : onRowExpand({ - expanded, - rowData, - rowIndex, - rowKey - }); - }; - vue.onMounted(() => { - if (vue.unref(measurable)) { - doMeasure(true); - } - }); - return { - isScrolling, - measurable, - measured, - rowRef, - eventHandlers, - onExpand - }; - }; - const COMPONENT_NAME$6 = "ElTableV2TableRow"; - const TableV2Row = vue.defineComponent({ - name: COMPONENT_NAME$6, - props: tableV2RowProps, - setup(props, { - expose, - slots, - attrs - }) { - const { - eventHandlers, - isScrolling, - measurable, - measured, - rowRef, - onExpand - } = useTableRow(props); - expose({ - onExpand - }); - return () => { - const { - columns, - columnsStyles, - expandColumnKey, - depth, - rowData, - rowIndex, - style - } = props; - let ColumnCells = columns.map((column, columnIndex) => { - const expandable = isArray$1(rowData.children) && rowData.children.length > 0 && column.key === expandColumnKey; - return slots.cell({ - column, - columns, - columnIndex, - depth, - style: columnsStyles[column.key], - rowData, - rowIndex, - isScrolling: vue.unref(isScrolling), - expandIconProps: expandable ? { - rowData, - rowIndex, - onExpand - } : void 0 - }); - }); - if (slots.row) { - ColumnCells = slots.row({ - cells: ColumnCells.map((node) => { - if (isArray$1(node) && node.length === 1) { - return node[0]; - } - return node; - }), - style, - columns, - depth, - rowData, - rowIndex, - isScrolling: vue.unref(isScrolling) - }); - } - if (vue.unref(measurable)) { - const { - height, - ...exceptHeightStyle - } = style || {}; - const _measured = vue.unref(measured); - return vue.createVNode("div", vue.mergeProps({ - "ref": rowRef, - "class": props.class, - "style": _measured ? style : exceptHeightStyle, - "role": "row" - }, attrs, vue.unref(eventHandlers)), [ColumnCells]); - } - return vue.createVNode("div", vue.mergeProps(attrs, { - "ref": rowRef, - "class": props.class, - "style": style, - "role": "row" - }, vue.unref(eventHandlers)), [ColumnCells]); - }; - } - }); - var Row = TableV2Row; - - const SortIcon = (props) => { - const { - sortOrder - } = props; - return vue.createVNode(ElIcon, { - "size": 14, - "class": props.class - }, { - default: () => [sortOrder === SortOrder.ASC ? vue.createVNode(sort_up_default, null, null) : vue.createVNode(sort_down_default, null, null)] - }); - }; - var SortIcon$1 = SortIcon; - - const ExpandIcon = (props) => { - const { - expanded, - expandable, - onExpand, - style, - size - } = props; - const expandIconProps = { - onClick: expandable ? () => onExpand(!expanded) : void 0, - class: props.class - }; - return vue.createVNode(ElIcon, vue.mergeProps(expandIconProps, { - "size": size, - "style": style - }), { - default: () => [vue.createVNode(arrow_right_default, null, null)] - }); - }; - var ExpandIcon$1 = ExpandIcon; - - const COMPONENT_NAME$5 = "ElTableV2Grid"; - const useTableGrid = (props) => { - const headerRef = vue.ref(); - const bodyRef = vue.ref(); - const scrollLeft = vue.ref(0); - const totalHeight = vue.computed(() => { - const { - data, - rowHeight, - estimatedRowHeight - } = props; - if (estimatedRowHeight) { - return; - } - return data.length * rowHeight; - }); - const fixedRowHeight = vue.computed(() => { - const { - fixedData, - rowHeight - } = props; - return ((fixedData == null ? void 0 : fixedData.length) || 0) * rowHeight; - }); - const headerHeight = vue.computed(() => sum(props.headerHeight)); - const gridHeight = vue.computed(() => { - const { - height - } = props; - return Math.max(0, height - vue.unref(headerHeight) - vue.unref(fixedRowHeight)); - }); - const hasHeader = vue.computed(() => { - return vue.unref(headerHeight) + vue.unref(fixedRowHeight) > 0; - }); - const itemKey = ({ - data, - rowIndex - }) => data[rowIndex][props.rowKey]; - function onItemRendered({ - rowCacheStart, - rowCacheEnd, - rowVisibleStart, - rowVisibleEnd - }) { - var _a; - (_a = props.onRowsRendered) == null ? void 0 : _a.call(props, { - rowCacheStart, - rowCacheEnd, - rowVisibleStart, - rowVisibleEnd - }); - } - function resetAfterRowIndex(index, forceUpdate2) { - var _a; - (_a = bodyRef.value) == null ? void 0 : _a.resetAfterRowIndex(index, forceUpdate2); - } - function scrollTo(leftOrOptions, top) { - const header$ = vue.unref(headerRef); - const body$ = vue.unref(bodyRef); - if (isObject$1(leftOrOptions)) { - header$ == null ? void 0 : header$.scrollToLeft(leftOrOptions.scrollLeft); - scrollLeft.value = leftOrOptions.scrollLeft; - body$ == null ? void 0 : body$.scrollTo(leftOrOptions); - } else { - header$ == null ? void 0 : header$.scrollToLeft(leftOrOptions); - scrollLeft.value = leftOrOptions; - body$ == null ? void 0 : body$.scrollTo({ - scrollLeft: leftOrOptions, - scrollTop: top - }); - } - } - function scrollToTop(scrollTop) { - var _a; - (_a = vue.unref(bodyRef)) == null ? void 0 : _a.scrollTo({ - scrollTop - }); - } - function scrollToRow(row, strategy) { - var _a; - (_a = vue.unref(bodyRef)) == null ? void 0 : _a.scrollToItem(row, 1, strategy); - } - function forceUpdate() { - var _a, _b; - (_a = vue.unref(bodyRef)) == null ? void 0 : _a.$forceUpdate(); - (_b = vue.unref(headerRef)) == null ? void 0 : _b.$forceUpdate(); - } - vue.watch(() => props.bodyWidth, () => { - var _a; - if (isNumber(props.estimatedRowHeight)) - (_a = bodyRef.value) == null ? void 0 : _a.resetAfter({ - columnIndex: 0 - }, false); - }); - return { - bodyRef, - forceUpdate, - fixedRowHeight, - gridHeight, - hasHeader, - headerHeight, - headerRef, - totalHeight, - itemKey, - onItemRendered, - resetAfterRowIndex, - scrollTo, - scrollToTop, - scrollToRow, - scrollLeft - }; - }; - const TableGrid = vue.defineComponent({ - name: COMPONENT_NAME$5, - props: tableV2GridProps, - setup(props, { - slots, - expose - }) { - const { - ns - } = vue.inject(TableV2InjectionKey); - const { - bodyRef, - fixedRowHeight, - gridHeight, - hasHeader, - headerRef, - headerHeight, - totalHeight, - forceUpdate, - itemKey, - onItemRendered, - resetAfterRowIndex, - scrollTo, - scrollToTop, - scrollToRow, - scrollLeft - } = useTableGrid(props); - vue.provide("tableV2GridScrollLeft", scrollLeft); - expose({ - forceUpdate, - totalHeight, - scrollTo, - scrollToTop, - scrollToRow, - resetAfterRowIndex - }); - const getColumnWidth = () => props.bodyWidth; - return () => { - const { - cache, - columns, - data, - fixedData, - useIsScrolling, - scrollbarAlwaysOn, - scrollbarEndGap, - scrollbarStartGap, - style, - rowHeight, - bodyWidth, - estimatedRowHeight, - headerWidth, - height, - width, - getRowHeight, - onScroll - } = props; - const isDynamicRowEnabled = isNumber(estimatedRowHeight); - const Grid = isDynamicRowEnabled ? DynamicSizeGrid$1 : FixedSizeGrid$1; - const _headerHeight = vue.unref(headerHeight); - return vue.createVNode("div", { - "role": "table", - "class": [ns.e("table"), props.class], - "style": style - }, [vue.createVNode(Grid, { - "ref": bodyRef, - "data": data, - "useIsScrolling": useIsScrolling, - "itemKey": itemKey, - "columnCache": 0, - "columnWidth": isDynamicRowEnabled ? getColumnWidth : bodyWidth, - "totalColumn": 1, - "totalRow": data.length, - "rowCache": cache, - "rowHeight": isDynamicRowEnabled ? getRowHeight : rowHeight, - "width": width, - "height": vue.unref(gridHeight), - "class": ns.e("body"), - "role": "rowgroup", - "scrollbarStartGap": scrollbarStartGap, - "scrollbarEndGap": scrollbarEndGap, - "scrollbarAlwaysOn": scrollbarAlwaysOn, - "onScroll": onScroll, - "onItemRendered": onItemRendered, - "perfMode": false - }, { - default: (params) => { - var _a; - const rowData = data[params.rowIndex]; - return (_a = slots.row) == null ? void 0 : _a.call(slots, { - ...params, - columns, - rowData - }); - } - }), vue.unref(hasHeader) && vue.createVNode(Header, { - "ref": headerRef, - "class": ns.e("header-wrapper"), - "columns": columns, - "headerData": data, - "headerHeight": props.headerHeight, - "fixedHeaderData": fixedData, - "rowWidth": headerWidth, - "rowHeight": rowHeight, - "width": width, - "height": Math.min(_headerHeight + vue.unref(fixedRowHeight), height) - }, { - dynamic: slots.header, - fixed: slots.row - })]); - }; - } - }); - - function _isSlot$5(s) { - return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s); - } - const MainTable = (props, { - slots - }) => { - const { - mainTableRef, - ...rest - } = props; - return vue.createVNode(TableGrid, vue.mergeProps({ - "ref": mainTableRef - }, rest), _isSlot$5(slots) ? slots : { - default: () => [slots] - }); - }; - - function _isSlot$4(s) { - return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s); - } - const LeftTable$1 = (props, { - slots - }) => { - if (!props.columns.length) - return; - const { - leftTableRef, - ...rest - } = props; - return vue.createVNode(TableGrid, vue.mergeProps({ - "ref": leftTableRef - }, rest), _isSlot$4(slots) ? slots : { - default: () => [slots] - }); - }; - - function _isSlot$3(s) { - return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s); - } - const LeftTable = (props, { - slots - }) => { - if (!props.columns.length) - return; - const { - rightTableRef, - ...rest - } = props; - return vue.createVNode(TableGrid, vue.mergeProps({ - "ref": rightTableRef - }, rest), _isSlot$3(slots) ? slots : { - default: () => [slots] - }); - }; - - function _isSlot$2(s) { - return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s); - } - const RowRenderer = (props, { - slots - }) => { - const { - columns, - columnsStyles, - depthMap, - expandColumnKey, - expandedRowKeys, - estimatedRowHeight, - hasFixedColumns, - rowData, - rowIndex, - style, - isScrolling, - rowProps, - rowClass, - rowKey, - rowEventHandlers, - ns, - onRowHovered, - onRowExpanded - } = props; - const rowKls = tryCall(rowClass, { - columns, - rowData, - rowIndex - }, ""); - const additionalProps = tryCall(rowProps, { - columns, - rowData, - rowIndex - }); - const _rowKey = rowData[rowKey]; - const depth = depthMap[_rowKey] || 0; - const canExpand = Boolean(expandColumnKey); - const isFixedRow = rowIndex < 0; - const kls = [ns.e("row"), rowKls, { - [ns.e(`row-depth-${depth}`)]: canExpand && rowIndex >= 0, - [ns.is("expanded")]: canExpand && expandedRowKeys.includes(_rowKey), - [ns.is("fixed")]: !depth && isFixedRow, - [ns.is("customized")]: Boolean(slots.row) - }]; - const onRowHover = hasFixedColumns ? onRowHovered : void 0; - const _rowProps = { - ...additionalProps, - columns, - columnsStyles, - class: kls, - depth, - expandColumnKey, - estimatedRowHeight: isFixedRow ? void 0 : estimatedRowHeight, - isScrolling, - rowIndex, - rowData, - rowKey: _rowKey, - rowEventHandlers, - style - }; - const handlerMosueEnter = (e) => { - onRowHover == null ? void 0 : onRowHover({ - hovered: true, - rowKey: _rowKey, - event: e, - rowData, - rowIndex - }); - }; - const handlerMouseLeave = (e) => { - onRowHover == null ? void 0 : onRowHover({ - hovered: false, - rowKey: _rowKey, - event: e, - rowData, - rowIndex - }); - }; - return vue.createVNode(Row, vue.mergeProps(_rowProps, { - "onRowExpand": onRowExpanded, - "onMouseenter": handlerMosueEnter, - "onMouseleave": handlerMouseLeave, - "rowkey": _rowKey - }), _isSlot$2(slots) ? slots : { - default: () => [slots] - }); - }; - - const CellRenderer = ({ - columns, - column, - columnIndex, - depth, - expandIconProps, - isScrolling, - rowData, - rowIndex, - style, - expandedRowKeys, - ns, - cellProps: _cellProps, - expandColumnKey, - indentSize, - iconSize, - rowKey - }, { - slots - }) => { - const cellStyle = enforceUnit(style); - if (column.placeholderSign === placeholderSign) { - return vue.createVNode("div", { - "class": ns.em("row-cell", "placeholder"), - "style": cellStyle - }, null); - } - const { - cellRenderer, - dataKey, - dataGetter - } = column; - const cellData = isFunction$1(dataGetter) ? dataGetter({ - columns, - column, - columnIndex, - rowData, - rowIndex - }) : get(rowData, dataKey != null ? dataKey : ""); - const extraCellProps = tryCall(_cellProps, { - cellData, - columns, - column, - columnIndex, - rowIndex, - rowData - }); - const cellProps = { - class: ns.e("cell-text"), - columns, - column, - columnIndex, - cellData, - isScrolling, - rowData, - rowIndex - }; - const columnCellRenderer = componentToSlot(cellRenderer); - const Cell = columnCellRenderer ? columnCellRenderer(cellProps) : vue.renderSlot(slots, "default", cellProps, () => [vue.createVNode(TableCell, cellProps, null)]); - const kls = [ns.e("row-cell"), column.class, column.align === Alignment.CENTER && ns.is("align-center"), column.align === Alignment.RIGHT && ns.is("align-right")]; - const expandable = rowIndex >= 0 && expandColumnKey && column.key === expandColumnKey; - const expanded = rowIndex >= 0 && expandedRowKeys.includes(rowData[rowKey]); - let IconOrPlaceholder; - const iconStyle = `margin-inline-start: ${depth * indentSize}px;`; - if (expandable) { - if (isObject$1(expandIconProps)) { - IconOrPlaceholder = vue.createVNode(ExpandIcon$1, vue.mergeProps(expandIconProps, { - "class": [ns.e("expand-icon"), ns.is("expanded", expanded)], - "size": iconSize, - "expanded": expanded, - "style": iconStyle, - "expandable": true - }), null); - } else { - IconOrPlaceholder = vue.createVNode("div", { - "style": [iconStyle, `width: ${iconSize}px; height: ${iconSize}px;`].join(" ") - }, null); - } - } - return vue.createVNode("div", vue.mergeProps({ - "class": kls, - "style": cellStyle - }, extraCellProps, { - "role": "cell" - }), [IconOrPlaceholder, Cell]); - }; - CellRenderer.inheritAttrs = false; - - function _isSlot$1(s) { - return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s); - } - const HeaderRenderer = ({ - columns, - columnsStyles, - headerIndex, - style, - headerClass, - headerProps, - ns - }, { - slots - }) => { - const param = { - columns, - headerIndex - }; - const kls = [ns.e("header-row"), tryCall(headerClass, param, ""), { - [ns.is("customized")]: Boolean(slots.header) - }]; - const extraProps = { - ...tryCall(headerProps, param), - columnsStyles, - class: kls, - columns, - headerIndex, - style - }; - return vue.createVNode(HeaderRow, extraProps, _isSlot$1(slots) ? slots : { - default: () => [slots] - }); - }; - - const HeaderCellRenderer = (props, { - slots - }) => { - const { - column, - ns, - style, - onColumnSorted - } = props; - const cellStyle = enforceUnit(style); - if (column.placeholderSign === placeholderSign) { - return vue.createVNode("div", { - "class": ns.em("header-row-cell", "placeholder"), - "style": cellStyle - }, null); - } - const { - headerCellRenderer, - headerClass, - sortable - } = column; - const cellProps = { - ...props, - class: ns.e("header-cell-text") - }; - const columnCellRenderer = componentToSlot(headerCellRenderer); - const Cell = columnCellRenderer ? columnCellRenderer(cellProps) : vue.renderSlot(slots, "default", cellProps, () => [vue.createVNode(HeaderCell$1, cellProps, null)]); - const { - sortBy, - sortState, - headerCellProps - } = props; - let sorting, sortOrder; - if (sortState) { - const order = sortState[column.key]; - sorting = Boolean(oppositeOrderMap[order]); - sortOrder = sorting ? order : SortOrder.ASC; - } else { - sorting = column.key === sortBy.key; - sortOrder = sorting ? sortBy.order : SortOrder.ASC; - } - const cellKls = [ns.e("header-cell"), tryCall(headerClass, props, ""), column.align === Alignment.CENTER && ns.is("align-center"), column.align === Alignment.RIGHT && ns.is("align-right"), sortable && ns.is("sortable")]; - const cellWrapperProps = { - ...tryCall(headerCellProps, props), - onClick: column.sortable ? onColumnSorted : void 0, - class: cellKls, - style: cellStyle, - ["data-key"]: column.key - }; - return vue.createVNode("div", vue.mergeProps(cellWrapperProps, { - "role": "columnheader" - }), [Cell, sortable && vue.createVNode(SortIcon$1, { - "class": [ns.e("sort-icon"), sorting && ns.is("sorting")], - "sortOrder": sortOrder - }, null)]); - }; - - const Footer$1 = (props, { - slots - }) => { - var _a; - return vue.createVNode("div", { - "class": props.class, - "style": props.style - }, [(_a = slots.default) == null ? void 0 : _a.call(slots)]); - }; - Footer$1.displayName = "ElTableV2Footer"; - - const Footer = (props, { - slots - }) => { - const defaultSlot = vue.renderSlot(slots, "default", {}, () => [vue.createVNode(ElEmpty, null, null)]); - return vue.createVNode("div", { - "class": props.class, - "style": props.style - }, [defaultSlot]); - }; - Footer.displayName = "ElTableV2Empty"; - - const Overlay = (props, { - slots - }) => { - var _a; - return vue.createVNode("div", { - "class": props.class, - "style": props.style - }, [(_a = slots.default) == null ? void 0 : _a.call(slots)]); - }; - Overlay.displayName = "ElTableV2Overlay"; - - function _isSlot(s) { - return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s); - } - const COMPONENT_NAME$4 = "ElTableV2"; - const TableV2 = vue.defineComponent({ - name: COMPONENT_NAME$4, - props: tableV2Props, - setup(props, { - slots, - expose - }) { - const ns = useNamespace("table-v2"); - const { - columnsStyles, - fixedColumnsOnLeft, - fixedColumnsOnRight, - mainColumns, - mainTableHeight, - fixedTableHeight, - leftTableWidth, - rightTableWidth, - data, - depthMap, - expandedRowKeys, - hasFixedColumns, - mainTableRef, - leftTableRef, - rightTableRef, - isDynamic, - isResetting, - isScrolling, - bodyWidth, - emptyStyle, - rootStyle, - headerWidth, - footerHeight, - showEmpty, - scrollTo, - scrollToLeft, - scrollToTop, - scrollToRow, - getRowHeight, - onColumnSorted, - onRowHeightChange, - onRowHovered, - onRowExpanded, - onRowsRendered, - onScroll, - onVerticalScroll - } = useTable(props); - expose({ - scrollTo, - scrollToLeft, - scrollToTop, - scrollToRow - }); - vue.provide(TableV2InjectionKey, { - ns, - isResetting, - isScrolling - }); - return () => { - const { - cache, - cellProps, - estimatedRowHeight, - expandColumnKey, - fixedData, - headerHeight, - headerClass, - headerProps, - headerCellProps, - sortBy, - sortState, - rowHeight, - rowClass, - rowEventHandlers, - rowKey, - rowProps, - scrollbarAlwaysOn, - indentSize, - iconSize, - useIsScrolling, - vScrollbarSize, - width - } = props; - const _data = vue.unref(data); - const mainTableProps = { - cache, - class: ns.e("main"), - columns: vue.unref(mainColumns), - data: _data, - fixedData, - estimatedRowHeight, - bodyWidth: vue.unref(bodyWidth) + vScrollbarSize, - headerHeight, - headerWidth: vue.unref(headerWidth), - height: vue.unref(mainTableHeight), - mainTableRef, - rowKey, - rowHeight, - scrollbarAlwaysOn, - scrollbarStartGap: 2, - scrollbarEndGap: vScrollbarSize, - useIsScrolling, - width, - getRowHeight, - onRowsRendered, - onScroll - }; - const leftColumnsWidth = vue.unref(leftTableWidth); - const _fixedTableHeight = vue.unref(fixedTableHeight); - const leftTableProps = { - cache, - class: ns.e("left"), - columns: vue.unref(fixedColumnsOnLeft), - data: _data, - fixedData, - estimatedRowHeight, - leftTableRef, - rowHeight, - bodyWidth: leftColumnsWidth, - headerWidth: leftColumnsWidth, - headerHeight, - height: _fixedTableHeight, - rowKey, - scrollbarAlwaysOn, - scrollbarStartGap: 2, - scrollbarEndGap: vScrollbarSize, - useIsScrolling, - width: leftColumnsWidth, - getRowHeight, - onScroll: onVerticalScroll - }; - const rightColumnsWidth = vue.unref(rightTableWidth); - const rightColumnsWidthWithScrollbar = rightColumnsWidth + vScrollbarSize; - const rightTableProps = { - cache, - class: ns.e("right"), - columns: vue.unref(fixedColumnsOnRight), - data: _data, - fixedData, - estimatedRowHeight, - rightTableRef, - rowHeight, - bodyWidth: rightColumnsWidthWithScrollbar, - headerWidth: rightColumnsWidthWithScrollbar, - headerHeight, - height: _fixedTableHeight, - rowKey, - scrollbarAlwaysOn, - scrollbarStartGap: 2, - scrollbarEndGap: vScrollbarSize, - width: rightColumnsWidthWithScrollbar, - style: `--${vue.unref(ns.namespace)}-table-scrollbar-size: ${vScrollbarSize}px`, - useIsScrolling, - getRowHeight, - onScroll: onVerticalScroll - }; - const _columnsStyles = vue.unref(columnsStyles); - const tableRowProps = { - ns, - depthMap: vue.unref(depthMap), - columnsStyles: _columnsStyles, - expandColumnKey, - expandedRowKeys: vue.unref(expandedRowKeys), - estimatedRowHeight, - hasFixedColumns: vue.unref(hasFixedColumns), - rowProps, - rowClass, - rowKey, - rowEventHandlers, - onRowHovered, - onRowExpanded, - onRowHeightChange - }; - const tableCellProps = { - cellProps, - expandColumnKey, - indentSize, - iconSize, - rowKey, - expandedRowKeys: vue.unref(expandedRowKeys), - ns - }; - const tableHeaderProps = { - ns, - headerClass, - headerProps, - columnsStyles: _columnsStyles - }; - const tableHeaderCellProps = { - ns, - sortBy, - sortState, - headerCellProps, - onColumnSorted - }; - const tableSlots = { - row: (props2) => vue.createVNode(RowRenderer, vue.mergeProps(props2, tableRowProps), { - row: slots.row, - cell: (props3) => { - let _slot; - return slots.cell ? vue.createVNode(CellRenderer, vue.mergeProps(props3, tableCellProps, { - "style": _columnsStyles[props3.column.key] - }), _isSlot(_slot = slots.cell(props3)) ? _slot : { - default: () => [_slot] - }) : vue.createVNode(CellRenderer, vue.mergeProps(props3, tableCellProps, { - "style": _columnsStyles[props3.column.key] - }), null); - } - }), - header: (props2) => vue.createVNode(HeaderRenderer, vue.mergeProps(props2, tableHeaderProps), { - header: slots.header, - cell: (props3) => { - let _slot2; - return slots["header-cell"] ? vue.createVNode(HeaderCellRenderer, vue.mergeProps(props3, tableHeaderCellProps, { - "style": _columnsStyles[props3.column.key] - }), _isSlot(_slot2 = slots["header-cell"](props3)) ? _slot2 : { - default: () => [_slot2] - }) : vue.createVNode(HeaderCellRenderer, vue.mergeProps(props3, tableHeaderCellProps, { - "style": _columnsStyles[props3.column.key] - }), null); - } - }) - }; - const rootKls = [props.class, ns.b(), ns.e("root"), { - [ns.is("dynamic")]: vue.unref(isDynamic) - }]; - const footerProps = { - class: ns.e("footer"), - style: vue.unref(footerHeight) - }; - return vue.createVNode("div", { - "class": rootKls, - "style": vue.unref(rootStyle) - }, [vue.createVNode(MainTable, mainTableProps, _isSlot(tableSlots) ? tableSlots : { - default: () => [tableSlots] - }), vue.createVNode(LeftTable$1, leftTableProps, _isSlot(tableSlots) ? tableSlots : { - default: () => [tableSlots] - }), vue.createVNode(LeftTable, rightTableProps, _isSlot(tableSlots) ? tableSlots : { - default: () => [tableSlots] - }), slots.footer && vue.createVNode(Footer$1, footerProps, { - default: slots.footer - }), vue.unref(showEmpty) && vue.createVNode(Footer, { - "class": ns.e("empty"), - "style": vue.unref(emptyStyle) - }, { - default: slots.empty - }), slots.overlay && vue.createVNode(Overlay, { - "class": ns.e("overlay") - }, { - default: slots.overlay - })]); - }; - } - }); - var TableV2$1 = TableV2; - - const autoResizerProps = buildProps({ - disableWidth: Boolean, - disableHeight: Boolean, - onResize: { - type: definePropType(Function) - } - }); - - const AutoResizer = vue.defineComponent({ - name: "ElAutoResizer", - props: autoResizerProps, - setup(props, { - slots - }) { - const ns = useNamespace("auto-resizer"); - const { - height, - width, - sizer - } = useAutoResize(props); - const style = { - width: "100%", - height: "100%" - }; - return () => { - var _a; - return vue.createVNode("div", { - "ref": sizer, - "class": ns.b(), - "style": style - }, [(_a = slots.default) == null ? void 0 : _a.call(slots, { - height: height.value, - width: width.value - })]); - }; - } - }); - - const ElTableV2 = withInstall(TableV2$1); - const ElAutoResizer = withInstall(AutoResizer); - - const tabsRootContextKey = Symbol("tabsRootContextKey"); - - const tabBarProps = buildProps({ - tabs: { - type: definePropType(Array), - default: () => mutable([]) - } - }); - - const COMPONENT_NAME$3 = "ElTabBar"; - const __default__$u = vue.defineComponent({ - name: COMPONENT_NAME$3 - }); - const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({ - ...__default__$u, - props: tabBarProps, - setup(__props, { expose }) { - const props = __props; - const instance = vue.getCurrentInstance(); - const rootTabs = vue.inject(tabsRootContextKey); - if (!rootTabs) - throwError(COMPONENT_NAME$3, ""); - const ns = useNamespace("tabs"); - const barRef = vue.ref(); - const barStyle = vue.ref(); - const getBarStyle = () => { - let offset = 0; - let tabSize = 0; - const sizeName = ["top", "bottom"].includes(rootTabs.props.tabPosition) ? "width" : "height"; - const sizeDir = sizeName === "width" ? "x" : "y"; - const position = sizeDir === "x" ? "left" : "top"; - props.tabs.every((tab) => { - var _a, _b; - const $el = (_b = (_a = instance.parent) == null ? void 0 : _a.refs) == null ? void 0 : _b[`tab-${tab.uid}`]; - if (!$el) - return false; - if (!tab.active) { - return true; - } - offset = $el[`offset${capitalize(position)}`]; - tabSize = $el[`client${capitalize(sizeName)}`]; - const tabStyles = window.getComputedStyle($el); - if (sizeName === "width") { - tabSize -= Number.parseFloat(tabStyles.paddingLeft) + Number.parseFloat(tabStyles.paddingRight); - offset += Number.parseFloat(tabStyles.paddingLeft); - } - return false; - }); - return { - [sizeName]: `${tabSize}px`, - transform: `translate${capitalize(sizeDir)}(${offset}px)` - }; - }; - const update = () => barStyle.value = getBarStyle(); - const saveObserver = []; - const observerTabs = () => { - var _a; - saveObserver.forEach((observer) => observer.stop()); - saveObserver.length = 0; - const list = (_a = instance.parent) == null ? void 0 : _a.refs; - if (!list) - return; - for (const key in list) { - if (key.startsWith("tab-")) { - const _el = list[key]; - if (_el) { - saveObserver.push(useResizeObserver(_el, update)); - } - } - } - }; - vue.watch(() => props.tabs, async () => { - await vue.nextTick(); - update(); - observerTabs(); - }, { immediate: true }); - const barObserever = useResizeObserver(barRef, () => update()); - vue.onBeforeUnmount(() => { - saveObserver.forEach((observer) => observer.stop()); - saveObserver.length = 0; - barObserever.stop(); - }); - expose({ - ref: barRef, - update - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "barRef", - ref: barRef, - class: vue.normalizeClass([vue.unref(ns).e("active-bar"), vue.unref(ns).is(vue.unref(rootTabs).props.tabPosition)]), - style: vue.normalizeStyle(barStyle.value) - }, null, 6); - }; - } - }); - var TabBar = /* @__PURE__ */ _export_sfc(_sfc_main$z, [["__file", "tab-bar.vue"]]); - - const tabNavProps = buildProps({ - panes: { - type: definePropType(Array), - default: () => mutable([]) - }, - currentName: { - type: [String, Number], - default: "" - }, - editable: Boolean, - type: { - type: String, - values: ["card", "border-card", ""], - default: "" - }, - stretch: Boolean - }); - const tabNavEmits = { - tabClick: (tab, tabName, ev) => ev instanceof Event, - tabRemove: (tab, ev) => ev instanceof Event - }; - const COMPONENT_NAME$2 = "ElTabNav"; - const TabNav = vue.defineComponent({ - name: COMPONENT_NAME$2, - props: tabNavProps, - emits: tabNavEmits, - setup(props, { - expose, - emit - }) { - const rootTabs = vue.inject(tabsRootContextKey); - if (!rootTabs) - throwError(COMPONENT_NAME$2, ``); - const ns = useNamespace("tabs"); - const visibility = useDocumentVisibility(); - const focused = useWindowFocus(); - const navScroll$ = vue.ref(); - const nav$ = vue.ref(); - const el$ = vue.ref(); - const tabBarRef = vue.ref(); - const scrollable = vue.ref(false); - const navOffset = vue.ref(0); - const isFocus = vue.ref(false); - const focusable = vue.ref(true); - const sizeName = vue.computed(() => ["top", "bottom"].includes(rootTabs.props.tabPosition) ? "width" : "height"); - const navStyle = vue.computed(() => { - const dir = sizeName.value === "width" ? "X" : "Y"; - return { - transform: `translate${dir}(-${navOffset.value}px)` - }; - }); - const scrollPrev = () => { - if (!navScroll$.value) - return; - const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`]; - const currentOffset = navOffset.value; - if (!currentOffset) - return; - const newOffset = currentOffset > containerSize ? currentOffset - containerSize : 0; - navOffset.value = newOffset; - }; - const scrollNext = () => { - if (!navScroll$.value || !nav$.value) - return; - const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]; - const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`]; - const currentOffset = navOffset.value; - if (navSize - currentOffset <= containerSize) - return; - const newOffset = navSize - currentOffset > containerSize * 2 ? currentOffset + containerSize : navSize - containerSize; - navOffset.value = newOffset; - }; - const scrollToActiveTab = async () => { - const nav = nav$.value; - if (!scrollable.value || !el$.value || !navScroll$.value || !nav) - return; - await vue.nextTick(); - const activeTab = el$.value.querySelector(".is-active"); - if (!activeTab) - return; - const navScroll = navScroll$.value; - const isHorizontal = ["top", "bottom"].includes(rootTabs.props.tabPosition); - const activeTabBounding = activeTab.getBoundingClientRect(); - const navScrollBounding = navScroll.getBoundingClientRect(); - const maxOffset = isHorizontal ? nav.offsetWidth - navScrollBounding.width : nav.offsetHeight - navScrollBounding.height; - const currentOffset = navOffset.value; - let newOffset = currentOffset; - if (isHorizontal) { - if (activeTabBounding.left < navScrollBounding.left) { - newOffset = currentOffset - (navScrollBounding.left - activeTabBounding.left); - } - if (activeTabBounding.right > navScrollBounding.right) { - newOffset = currentOffset + activeTabBounding.right - navScrollBounding.right; - } - } else { - if (activeTabBounding.top < navScrollBounding.top) { - newOffset = currentOffset - (navScrollBounding.top - activeTabBounding.top); - } - if (activeTabBounding.bottom > navScrollBounding.bottom) { - newOffset = currentOffset + (activeTabBounding.bottom - navScrollBounding.bottom); - } - } - newOffset = Math.max(newOffset, 0); - navOffset.value = Math.min(newOffset, maxOffset); - }; - const update = () => { - var _a; - if (!nav$.value || !navScroll$.value) - return; - props.stretch && ((_a = tabBarRef.value) == null ? void 0 : _a.update()); - const navSize = nav$.value[`offset${capitalize(sizeName.value)}`]; - const containerSize = navScroll$.value[`offset${capitalize(sizeName.value)}`]; - const currentOffset = navOffset.value; - if (containerSize < navSize) { - scrollable.value = scrollable.value || {}; - scrollable.value.prev = currentOffset; - scrollable.value.next = currentOffset + containerSize < navSize; - if (navSize - currentOffset < containerSize) { - navOffset.value = navSize - containerSize; - } - } else { - scrollable.value = false; - if (currentOffset > 0) { - navOffset.value = 0; - } - } - }; - const changeTab = (event) => { - let step = 0; - switch (event.code) { - case EVENT_CODE.left: - case EVENT_CODE.up: - step = -1; - break; - case EVENT_CODE.right: - case EVENT_CODE.down: - step = 1; - break; - default: - return; - } - const tabList = Array.from(event.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)")); - const currentIndex = tabList.indexOf(event.target); - let nextIndex = currentIndex + step; - if (nextIndex < 0) { - nextIndex = tabList.length - 1; - } else if (nextIndex >= tabList.length) { - nextIndex = 0; - } - tabList[nextIndex].focus({ - preventScroll: true - }); - tabList[nextIndex].click(); - setFocus(); - }; - const setFocus = () => { - if (focusable.value) - isFocus.value = true; - }; - const removeFocus = () => isFocus.value = false; - vue.watch(visibility, (visibility2) => { - if (visibility2 === "hidden") { - focusable.value = false; - } else if (visibility2 === "visible") { - setTimeout(() => focusable.value = true, 50); - } - }); - vue.watch(focused, (focused2) => { - if (focused2) { - setTimeout(() => focusable.value = true, 50); - } else { - focusable.value = false; - } - }); - useResizeObserver(el$, update); - vue.onMounted(() => setTimeout(() => scrollToActiveTab(), 0)); - vue.onUpdated(() => update()); - expose({ - scrollToActiveTab, - removeFocus - }); - return () => { - const scrollBtn = scrollable.value ? [vue.createVNode("span", { - "class": [ns.e("nav-prev"), ns.is("disabled", !scrollable.value.prev)], - "onClick": scrollPrev - }, [vue.createVNode(ElIcon, null, { - default: () => [vue.createVNode(arrow_left_default, null, null)] - })]), vue.createVNode("span", { - "class": [ns.e("nav-next"), ns.is("disabled", !scrollable.value.next)], - "onClick": scrollNext - }, [vue.createVNode(ElIcon, null, { - default: () => [vue.createVNode(arrow_right_default, null, null)] - })])] : null; - const tabs = props.panes.map((pane, index) => { - var _a, _b, _c, _d; - const uid = pane.uid; - const disabled = pane.props.disabled; - const tabName = (_b = (_a = pane.props.name) != null ? _a : pane.index) != null ? _b : `${index}`; - const closable = !disabled && (pane.isClosable || props.editable); - pane.index = `${index}`; - const btnClose = closable ? vue.createVNode(ElIcon, { - "class": "is-icon-close", - "onClick": (ev) => emit("tabRemove", pane, ev) - }, { - default: () => [vue.createVNode(close_default, null, null)] - }) : null; - const tabLabelContent = ((_d = (_c = pane.slots).label) == null ? void 0 : _d.call(_c)) || pane.props.label; - const tabindex = !disabled && pane.active ? 0 : -1; - return vue.createVNode("div", { - "ref": `tab-${uid}`, - "class": [ns.e("item"), ns.is(rootTabs.props.tabPosition), ns.is("active", pane.active), ns.is("disabled", disabled), ns.is("closable", closable), ns.is("focus", isFocus.value)], - "id": `tab-${tabName}`, - "key": `tab-${uid}`, - "aria-controls": `pane-${tabName}`, - "role": "tab", - "aria-selected": pane.active, - "tabindex": tabindex, - "onFocus": () => setFocus(), - "onBlur": () => removeFocus(), - "onClick": (ev) => { - removeFocus(); - emit("tabClick", pane, tabName, ev); - }, - "onKeydown": (ev) => { - if (closable && (ev.code === EVENT_CODE.delete || ev.code === EVENT_CODE.backspace)) { - emit("tabRemove", pane, ev); - } - } - }, [...[tabLabelContent, btnClose]]); - }); - return vue.createVNode("div", { - "ref": el$, - "class": [ns.e("nav-wrap"), ns.is("scrollable", !!scrollable.value), ns.is(rootTabs.props.tabPosition)] - }, [scrollBtn, vue.createVNode("div", { - "class": ns.e("nav-scroll"), - "ref": navScroll$ - }, [vue.createVNode("div", { - "class": [ns.e("nav"), ns.is(rootTabs.props.tabPosition), ns.is("stretch", props.stretch && ["top", "bottom"].includes(rootTabs.props.tabPosition))], - "ref": nav$, - "style": navStyle.value, - "role": "tablist", - "onKeydown": changeTab - }, [...[!props.type ? vue.createVNode(TabBar, { - "ref": tabBarRef, - "tabs": [...props.panes] - }, null) : null, tabs]])])]); - }; - } - }); - - const tabsProps = buildProps({ - type: { - type: String, - values: ["card", "border-card", ""], - default: "" - }, - closable: Boolean, - addable: Boolean, - modelValue: { - type: [String, Number] - }, - editable: Boolean, - tabPosition: { - type: String, - values: ["top", "right", "bottom", "left"], - default: "top" - }, - beforeLeave: { - type: definePropType(Function), - default: () => true - }, - stretch: Boolean - }); - const isPaneName = (value) => isString$1(value) || isNumber(value); - const tabsEmits = { - [UPDATE_MODEL_EVENT]: (name) => isPaneName(name), - tabClick: (pane, ev) => ev instanceof Event, - tabChange: (name) => isPaneName(name), - edit: (paneName, action) => ["remove", "add"].includes(action), - tabRemove: (name) => isPaneName(name), - tabAdd: () => true - }; - const Tabs = vue.defineComponent({ - name: "ElTabs", - props: tabsProps, - emits: tabsEmits, - setup(props, { - emit, - slots, - expose - }) { - var _a; - const ns = useNamespace("tabs"); - const isVertical = vue.computed(() => ["left", "right"].includes(props.tabPosition)); - const { - children: panes, - addChild: sortPane, - removeChild: unregisterPane - } = useOrderedChildren(vue.getCurrentInstance(), "ElTabPane"); - const nav$ = vue.ref(); - const currentName = vue.ref((_a = props.modelValue) != null ? _a : "0"); - const setCurrentName = async (value, trigger = false) => { - var _a2, _b; - if (currentName.value === value || isUndefined(value)) - return; - try { - let canLeave; - if (props.beforeLeave) { - const result = props.beforeLeave(value, currentName.value); - canLeave = result instanceof Promise ? await result : result; - } else { - canLeave = true; - } - if (canLeave !== false) { - currentName.value = value; - if (trigger) { - emit(UPDATE_MODEL_EVENT, value); - emit("tabChange", value); - } - (_b = (_a2 = nav$.value) == null ? void 0 : _a2.removeFocus) == null ? void 0 : _b.call(_a2); - } - } catch (e) { - } - }; - const handleTabClick = (tab, tabName, event) => { - if (tab.props.disabled) - return; - setCurrentName(tabName, true); - emit("tabClick", tab, event); - }; - const handleTabRemove = (pane, ev) => { - if (pane.props.disabled || isUndefined(pane.props.name)) - return; - ev.stopPropagation(); - emit("edit", pane.props.name, "remove"); - emit("tabRemove", pane.props.name); - }; - const handleTabAdd = () => { - emit("edit", void 0, "add"); - emit("tabAdd"); - }; - vue.watch(() => props.modelValue, (modelValue) => setCurrentName(modelValue)); - vue.watch(currentName, async () => { - var _a2; - await vue.nextTick(); - (_a2 = nav$.value) == null ? void 0 : _a2.scrollToActiveTab(); - }); - vue.provide(tabsRootContextKey, { - props, - currentName, - registerPane: (pane) => { - panes.value.push(pane); - }, - sortPane, - unregisterPane - }); - expose({ - currentName - }); - const TabNavRenderer = ({ - render - }) => { - return render(); - }; - return () => { - const addSlot = slots["add-icon"]; - const newButton = props.editable || props.addable ? vue.createVNode("div", { - "class": [ns.e("new-tab"), isVertical.value && ns.e("new-tab-vertical")], - "tabindex": "0", - "onClick": handleTabAdd, - "onKeydown": (ev) => { - if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter].includes(ev.code)) - handleTabAdd(); - } - }, [addSlot ? vue.renderSlot(slots, "add-icon") : vue.createVNode(ElIcon, { - "class": ns.is("icon-plus") - }, { - default: () => [vue.createVNode(plus_default, null, null)] - })]) : null; - const header = vue.createVNode("div", { - "class": [ns.e("header"), isVertical.value && ns.e("header-vertical"), ns.is(props.tabPosition)] - }, [vue.createVNode(TabNavRenderer, { - "render": () => { - const hasLabelSlot = panes.value.some((pane) => pane.slots.label); - return vue.createVNode(TabNav, { - ref: nav$, - currentName: currentName.value, - editable: props.editable, - type: props.type, - panes: panes.value, - stretch: props.stretch, - onTabClick: handleTabClick, - onTabRemove: handleTabRemove - }, { - $stable: !hasLabelSlot - }); - } - }, null), newButton]); - const panels = vue.createVNode("div", { - "class": ns.e("content") - }, [vue.renderSlot(slots, "default")]); - return vue.createVNode("div", { - "class": [ns.b(), ns.m(props.tabPosition), { - [ns.m("card")]: props.type === "card", - [ns.m("border-card")]: props.type === "border-card" - }] - }, [panels, header]); - }; - } - }); - - const tabPaneProps = buildProps({ - label: { - type: String, - default: "" - }, - name: { - type: [String, Number] - }, - closable: Boolean, - disabled: Boolean, - lazy: Boolean - }); - - const COMPONENT_NAME$1 = "ElTabPane"; - const __default__$t = vue.defineComponent({ - name: COMPONENT_NAME$1 - }); - const _sfc_main$y = /* @__PURE__ */ vue.defineComponent({ - ...__default__$t, - props: tabPaneProps, - setup(__props) { - const props = __props; - const instance = vue.getCurrentInstance(); - const slots = vue.useSlots(); - const tabsRoot = vue.inject(tabsRootContextKey); - if (!tabsRoot) - throwError(COMPONENT_NAME$1, "usage: "); - const ns = useNamespace("tab-pane"); - const index = vue.ref(); - const isClosable = vue.computed(() => props.closable || tabsRoot.props.closable); - const active = computedEager(() => { - var _a; - return tabsRoot.currentName.value === ((_a = props.name) != null ? _a : index.value); - }); - const loaded = vue.ref(active.value); - const paneName = vue.computed(() => { - var _a; - return (_a = props.name) != null ? _a : index.value; - }); - const shouldBeRender = computedEager(() => !props.lazy || loaded.value || active.value); - vue.watch(active, (val) => { - if (val) - loaded.value = true; - }); - const pane = vue.reactive({ - uid: instance.uid, - slots, - props, - paneName, - active, - index, - isClosable - }); - tabsRoot.registerPane(pane); - vue.onMounted(() => { - tabsRoot.sortPane(pane); - }); - vue.onUnmounted(() => { - tabsRoot.unregisterPane(pane.uid); - }); - return (_ctx, _cache) => { - return vue.unref(shouldBeRender) ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - key: 0, - id: `pane-${vue.unref(paneName)}`, - class: vue.normalizeClass(vue.unref(ns).b()), - role: "tabpanel", - "aria-hidden": !vue.unref(active), - "aria-labelledby": `tab-${vue.unref(paneName)}` - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 10, ["id", "aria-hidden", "aria-labelledby"])), [ - [vue.vShow, vue.unref(active)] - ]) : vue.createCommentVNode("v-if", true); - }; - } - }); - var TabPane = /* @__PURE__ */ _export_sfc(_sfc_main$y, [["__file", "tab-pane.vue"]]); - - const ElTabs = withInstall(Tabs, { - TabPane - }); - const ElTabPane = withNoopInstall(TabPane); - - const textProps = buildProps({ - type: { - type: String, - values: ["primary", "success", "info", "warning", "danger", ""], - default: "" - }, - size: { - type: String, - values: componentSizes, - default: "" - }, - truncated: Boolean, - lineClamp: { - type: [String, Number] - }, - tag: { - type: String, - default: "span" - } - }); - - const __default__$s = vue.defineComponent({ - name: "ElText" - }); - const _sfc_main$x = /* @__PURE__ */ vue.defineComponent({ - ...__default__$s, - props: textProps, - setup(__props) { - const props = __props; - const textRef = vue.ref(); - const textSize = useFormSize(); - const ns = useNamespace("text"); - const textKls = vue.computed(() => [ - ns.b(), - ns.m(props.type), - ns.m(textSize.value), - ns.is("truncated", props.truncated), - ns.is("line-clamp", !isUndefined(props.lineClamp)) - ]); - const inheritTitle = vue.useAttrs().title; - const bindTitle = () => { - var _a, _b, _c, _d, _e; - if (inheritTitle) - return; - let shouldAddTitle = false; - const text = ((_a = textRef.value) == null ? void 0 : _a.textContent) || ""; - if (props.truncated) { - const width = (_b = textRef.value) == null ? void 0 : _b.offsetWidth; - const scrollWidth = (_c = textRef.value) == null ? void 0 : _c.scrollWidth; - if (width && scrollWidth && scrollWidth > width) { - shouldAddTitle = true; - } - } else if (!isUndefined(props.lineClamp)) { - const height = (_d = textRef.value) == null ? void 0 : _d.offsetHeight; - const scrollHeight = (_e = textRef.value) == null ? void 0 : _e.scrollHeight; - if (height && scrollHeight && scrollHeight > height) { - shouldAddTitle = true; - } - } - if (shouldAddTitle) { - textRef.value.setAttribute("title", text); - } else { - textRef.value.removeAttribute("title"); - } - }; - vue.onMounted(bindTitle); - vue.onUpdated(bindTitle); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tag), { - ref_key: "textRef", - ref: textRef, - class: vue.normalizeClass(vue.unref(textKls)), - style: vue.normalizeStyle({ "-webkit-line-clamp": _ctx.lineClamp }) - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["class", "style"]); - }; - } - }); - var Text = /* @__PURE__ */ _export_sfc(_sfc_main$x, [["__file", "text.vue"]]); - - const ElText = withInstall(Text); - - const timeSelectProps = buildProps({ - format: { - type: String, - default: "HH:mm" - }, - modelValue: String, - disabled: Boolean, - editable: { - type: Boolean, - default: true - }, - effect: { - type: definePropType(String), - default: "light" - }, - clearable: { - type: Boolean, - default: true - }, - size: useSizeProp, - placeholder: String, - start: { - type: String, - default: "09:00" - }, - end: { - type: String, - default: "18:00" - }, - step: { - type: String, - default: "00:30" - }, - minTime: String, - maxTime: String, - includeEndTime: { - type: Boolean, - default: false - }, - name: String, - prefixIcon: { - type: definePropType([String, Object]), - default: () => clock_default - }, - clearIcon: { - type: definePropType([String, Object]), - default: () => circle_close_default - }, - ...useEmptyValuesProps - }); - - const parseTime = (time) => { - const values = (time || "").split(":"); - if (values.length >= 2) { - let hours = Number.parseInt(values[0], 10); - const minutes = Number.parseInt(values[1], 10); - const timeUpper = time.toUpperCase(); - if (timeUpper.includes("AM") && hours === 12) { - hours = 0; - } else if (timeUpper.includes("PM") && hours !== 12) { - hours += 12; - } - return { - hours, - minutes - }; - } - return null; - }; - const compareTime = (time1, time2) => { - const value1 = parseTime(time1); - if (!value1) - return -1; - const value2 = parseTime(time2); - if (!value2) - return -1; - const minutes1 = value1.minutes + value1.hours * 60; - const minutes2 = value2.minutes + value2.hours * 60; - if (minutes1 === minutes2) { - return 0; - } - return minutes1 > minutes2 ? 1 : -1; - }; - const padTime = (time) => { - return `${time}`.padStart(2, "0"); - }; - const formatTime = (time) => { - return `${padTime(time.hours)}:${padTime(time.minutes)}`; - }; - const nextTime = (time, step) => { - const timeValue = parseTime(time); - if (!timeValue) - return ""; - const stepValue = parseTime(step); - if (!stepValue) - return ""; - const next = { - hours: timeValue.hours, - minutes: timeValue.minutes - }; - next.minutes += stepValue.minutes; - next.hours += stepValue.hours; - next.hours += Math.floor(next.minutes / 60); - next.minutes = next.minutes % 60; - return formatTime(next); - }; - - const __default__$r = vue.defineComponent({ - name: "ElTimeSelect" - }); - const _sfc_main$w = /* @__PURE__ */ vue.defineComponent({ - ...__default__$r, - props: timeSelectProps, - emits: ["change", "blur", "focus", "clear", "update:modelValue"], - setup(__props, { expose }) { - const props = __props; - dayjs.extend(customParseFormat); - const { Option: ElOption } = ElSelect; - const nsInput = useNamespace("input"); - const select = vue.ref(); - const _disabled = useFormDisabled(); - const { lang } = useLocale(); - const value = vue.computed(() => props.modelValue); - const start = vue.computed(() => { - const time = parseTime(props.start); - return time ? formatTime(time) : null; - }); - const end = vue.computed(() => { - const time = parseTime(props.end); - return time ? formatTime(time) : null; - }); - const step = vue.computed(() => { - const time = parseTime(props.step); - return time ? formatTime(time) : null; - }); - const minTime = vue.computed(() => { - const time = parseTime(props.minTime || ""); - return time ? formatTime(time) : null; - }); - const maxTime = vue.computed(() => { - const time = parseTime(props.maxTime || ""); - return time ? formatTime(time) : null; - }); - const items = vue.computed(() => { - var _a; - const result = []; - const push = (formattedValue, rawValue) => { - result.push({ - value: formattedValue, - disabled: compareTime(rawValue, minTime.value || "-1:-1") <= 0 || compareTime(rawValue, maxTime.value || "100:100") >= 0 - }); - }; - if (props.start && props.end && props.step) { - let current = start.value; - let currentTime; - while (current && end.value && compareTime(current, end.value) <= 0) { - currentTime = dayjs(current, "HH:mm").locale(lang.value).format(props.format); - push(currentTime, current); - current = nextTime(current, step.value); - } - if (props.includeEndTime && end.value && ((_a = result[result.length - 1]) == null ? void 0 : _a.value) !== end.value) { - const formattedValue = dayjs(end.value, "HH:mm").locale(lang.value).format(props.format); - push(formattedValue, end.value); - } - } - return result; - }); - const blur = () => { - var _a, _b; - (_b = (_a = select.value) == null ? void 0 : _a.blur) == null ? void 0 : _b.call(_a); - }; - const focus = () => { - var _a, _b; - (_b = (_a = select.value) == null ? void 0 : _a.focus) == null ? void 0 : _b.call(_a); - }; - expose({ - blur, - focus - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElSelect), { - ref_key: "select", - ref: select, - "model-value": vue.unref(value), - disabled: vue.unref(_disabled), - clearable: _ctx.clearable, - "clear-icon": _ctx.clearIcon, - size: _ctx.size, - effect: _ctx.effect, - placeholder: _ctx.placeholder, - "default-first-option": "", - filterable: _ctx.editable, - "empty-values": _ctx.emptyValues, - "value-on-clear": _ctx.valueOnClear, - "onUpdate:modelValue": (event) => _ctx.$emit("update:modelValue", event), - onChange: (event) => _ctx.$emit("change", event), - onBlur: (event) => _ctx.$emit("blur", event), - onFocus: (event) => _ctx.$emit("focus", event), - onClear: () => _ctx.$emit("clear") - }, { - prefix: vue.withCtx(() => [ - _ctx.prefixIcon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(nsInput).e("prefix-icon")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.prefixIcon))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ]), - default: vue.withCtx(() => [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(items), (item) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElOption), { - key: item.value, - label: item.value, - value: item.value, - disabled: item.disabled - }, null, 8, ["label", "value", "disabled"]); - }), 128)) - ]), - _: 1 - }, 8, ["model-value", "disabled", "clearable", "clear-icon", "size", "effect", "placeholder", "filterable", "empty-values", "value-on-clear", "onUpdate:modelValue", "onChange", "onBlur", "onFocus", "onClear"]); - }; - } - }); - var TimeSelect = /* @__PURE__ */ _export_sfc(_sfc_main$w, [["__file", "time-select.vue"]]); - - const ElTimeSelect = withInstall(TimeSelect); - - const Timeline = vue.defineComponent({ - name: "ElTimeline", - setup(_, { slots }) { - const ns = useNamespace("timeline"); - vue.provide("timeline", slots); - return () => { - return vue.h("ul", { class: [ns.b()] }, [vue.renderSlot(slots, "default")]); - }; - } - }); - var Timeline$1 = Timeline; - - const timelineItemProps = buildProps({ - timestamp: { - type: String, - default: "" - }, - hideTimestamp: Boolean, - center: Boolean, - placement: { - type: String, - values: ["top", "bottom"], - default: "bottom" - }, - type: { - type: String, - values: ["primary", "success", "warning", "danger", "info"], - default: "" - }, - color: { - type: String, - default: "" - }, - size: { - type: String, - values: ["normal", "large"], - default: "normal" - }, - icon: { - type: iconPropType - }, - hollow: Boolean - }); - - const __default__$q = vue.defineComponent({ - name: "ElTimelineItem" - }); - const _sfc_main$v = /* @__PURE__ */ vue.defineComponent({ - ...__default__$q, - props: timelineItemProps, - setup(__props) { - const props = __props; - const ns = useNamespace("timeline-item"); - const defaultNodeKls = vue.computed(() => [ - ns.e("node"), - ns.em("node", props.size || ""), - ns.em("node", props.type || ""), - ns.is("hollow", props.hollow) - ]); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("li", { - class: vue.normalizeClass([vue.unref(ns).b(), { [vue.unref(ns).e("center")]: _ctx.center }]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("tail")) - }, null, 2), - !_ctx.$slots.dot ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(defaultNodeKls)), - style: vue.normalizeStyle({ - backgroundColor: _ctx.color - }) - }, [ - _ctx.icon ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("icon")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.icon))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ], 6)) : vue.createCommentVNode("v-if", true), - _ctx.$slots.dot ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("dot")) - }, [ - vue.renderSlot(_ctx.$slots, "dot") - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("wrapper")) - }, [ - !_ctx.hideTimestamp && _ctx.placement === "top" ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass([vue.unref(ns).e("timestamp"), vue.unref(ns).is("top")]) - }, vue.toDisplayString(_ctx.timestamp), 3)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("content")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2), - !_ctx.hideTimestamp && _ctx.placement === "bottom" ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass([vue.unref(ns).e("timestamp"), vue.unref(ns).is("bottom")]) - }, vue.toDisplayString(_ctx.timestamp), 3)) : vue.createCommentVNode("v-if", true) - ], 2) - ], 2); - }; - } - }); - var TimelineItem = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["__file", "timeline-item.vue"]]); - - const ElTimeline = withInstall(Timeline$1, { - TimelineItem - }); - const ElTimelineItem = withNoopInstall(TimelineItem); - - const tooltipV2CommonProps = buildProps({ - nowrap: Boolean - }); - var TooltipV2Sides = /* @__PURE__ */ ((TooltipV2Sides2) => { - TooltipV2Sides2["top"] = "top"; - TooltipV2Sides2["bottom"] = "bottom"; - TooltipV2Sides2["left"] = "left"; - TooltipV2Sides2["right"] = "right"; - return TooltipV2Sides2; - })(TooltipV2Sides || {}); - const tooltipV2Sides = Object.values(TooltipV2Sides); - - const tooltipV2ArrowProps = buildProps({ - width: { - type: Number, - default: 10 - }, - height: { - type: Number, - default: 10 - }, - style: { - type: definePropType(Object), - default: null - } - }); - const tooltipV2ArrowSpecialProps = buildProps({ - side: { - type: definePropType(String), - values: tooltipV2Sides, - required: true - } - }); - - const tooltipV2Strategies = ["absolute", "fixed"]; - const tooltipV2Placements = [ - "top-start", - "top-end", - "top", - "bottom-start", - "bottom-end", - "bottom", - "left-start", - "left-end", - "left", - "right-start", - "right-end", - "right" - ]; - const tooltipV2ContentProps = buildProps({ - arrowPadding: { - type: definePropType(Number), - default: 5 - }, - effect: { - type: definePropType(String), - default: "light" - }, - contentClass: String, - placement: { - type: definePropType(String), - values: tooltipV2Placements, - default: "bottom" - }, - reference: { - type: definePropType(Object), - default: null - }, - offset: { - type: Number, - default: 8 - }, - strategy: { - type: definePropType(String), - values: tooltipV2Strategies, - default: "absolute" - }, - showArrow: Boolean, - ...useAriaProps(["ariaLabel"]) - }); - - const tooltipV2RootProps = buildProps({ - delayDuration: { - type: Number, - default: 300 - }, - defaultOpen: Boolean, - open: { - type: Boolean, - default: void 0 - }, - onOpenChange: { - type: definePropType(Function) - }, - "onUpdate:open": { - type: definePropType(Function) - } - }); - - const EventHandler = { - type: definePropType(Function) - }; - const tooltipV2TriggerProps = buildProps({ - onBlur: EventHandler, - onClick: EventHandler, - onFocus: EventHandler, - onMouseDown: EventHandler, - onMouseEnter: EventHandler, - onMouseLeave: EventHandler - }); - - const tooltipV2Props = buildProps({ - ...tooltipV2RootProps, - ...tooltipV2ArrowProps, - ...tooltipV2TriggerProps, - ...tooltipV2ContentProps, - alwaysOn: Boolean, - fullTransition: Boolean, - transitionProps: { - type: definePropType(Object), - default: null - }, - teleported: Boolean, - to: { - type: definePropType(String), - default: "body" - } - }); - - const tooltipV2RootKey = Symbol("tooltipV2"); - const tooltipV2ContentKey = Symbol("tooltipV2Content"); - const TOOLTIP_V2_OPEN = "tooltip_v2.open"; - - const __default__$p = vue.defineComponent({ - name: "ElTooltipV2Root" - }); - const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({ - ...__default__$p, - props: tooltipV2RootProps, - setup(__props, { expose }) { - const props = __props; - const _open = vue.ref(props.defaultOpen); - const triggerRef = vue.ref(null); - const open = vue.computed({ - get: () => isPropAbsent(props.open) ? _open.value : props.open, - set: (open2) => { - var _a; - _open.value = open2; - (_a = props["onUpdate:open"]) == null ? void 0 : _a.call(props, open2); - } - }); - const isOpenDelayed = vue.computed(() => isNumber(props.delayDuration) && props.delayDuration > 0); - const { start: onDelayedOpen, stop: clearTimer } = useTimeoutFn(() => { - open.value = true; - }, vue.computed(() => props.delayDuration), { - immediate: false - }); - const ns = useNamespace("tooltip-v2"); - const contentId = useId(); - const onNormalOpen = () => { - clearTimer(); - open.value = true; - }; - const onDelayOpen = () => { - vue.unref(isOpenDelayed) ? onDelayedOpen() : onNormalOpen(); - }; - const onOpen = onNormalOpen; - const onClose = () => { - clearTimer(); - open.value = false; - }; - const onChange = (open2) => { - var _a; - if (open2) { - document.dispatchEvent(new CustomEvent(TOOLTIP_V2_OPEN)); - onOpen(); - } - (_a = props.onOpenChange) == null ? void 0 : _a.call(props, open2); - }; - vue.watch(open, onChange); - vue.onMounted(() => { - document.addEventListener(TOOLTIP_V2_OPEN, onClose); - }); - vue.onBeforeUnmount(() => { - clearTimer(); - document.removeEventListener(TOOLTIP_V2_OPEN, onClose); - }); - vue.provide(tooltipV2RootKey, { - contentId, - triggerRef, - ns, - onClose, - onDelayOpen, - onOpen - }); - expose({ - onOpen, - onClose - }); - return (_ctx, _cache) => { - return vue.renderSlot(_ctx.$slots, "default", { open: vue.unref(open) }); - }; - } - }); - var TooltipV2Root = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["__file", "root.vue"]]); - - const __default__$o = vue.defineComponent({ - name: "ElTooltipV2Arrow" - }); - const _sfc_main$t = /* @__PURE__ */ vue.defineComponent({ - ...__default__$o, - props: { - ...tooltipV2ArrowProps, - ...tooltipV2ArrowSpecialProps - }, - setup(__props) { - const props = __props; - const { ns } = vue.inject(tooltipV2RootKey); - const { arrowRef } = vue.inject(tooltipV2ContentKey); - const arrowStyle = vue.computed(() => { - const { style, width, height } = props; - const namespace = ns.namespace.value; - return { - [`--${namespace}-tooltip-v2-arrow-width`]: `${width}px`, - [`--${namespace}-tooltip-v2-arrow-height`]: `${height}px`, - [`--${namespace}-tooltip-v2-arrow-border-width`]: `${width / 2}px`, - [`--${namespace}-tooltip-v2-arrow-cover-width`]: width / 2 - 1, - ...style || {} - }; - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("span", { - ref_key: "arrowRef", - ref: arrowRef, - style: vue.normalizeStyle(vue.unref(arrowStyle)), - class: vue.normalizeClass(vue.unref(ns).e("arrow")) - }, null, 6); - }; - } - }); - var TooltipV2Arrow = /* @__PURE__ */ _export_sfc(_sfc_main$t, [["__file", "arrow.vue"]]); - - const visualHiddenProps = buildProps({ - style: { - type: definePropType([String, Object, Array]), - default: () => ({}) - } - }); - - const __default__$n = vue.defineComponent({ - name: "ElVisuallyHidden" - }); - const _sfc_main$s = /* @__PURE__ */ vue.defineComponent({ - ...__default__$n, - props: visualHiddenProps, - setup(__props) { - const props = __props; - const computedStyle = vue.computed(() => { - return [ - props.style, - { - position: "absolute", - border: 0, - width: 1, - height: 1, - padding: 0, - margin: -1, - overflow: "hidden", - clip: "rect(0, 0, 0, 0)", - whiteSpace: "nowrap", - wordWrap: "normal" - } - ]; - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("span", vue.mergeProps(_ctx.$attrs, { style: vue.unref(computedStyle) }), [ - vue.renderSlot(_ctx.$slots, "default") - ], 16); - }; - } - }); - var ElVisuallyHidden = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["__file", "visual-hidden.vue"]]); - - const __default__$m = vue.defineComponent({ - name: "ElTooltipV2Content" - }); - const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({ - ...__default__$m, - props: { ...tooltipV2ContentProps, ...tooltipV2CommonProps }, - setup(__props) { - const props = __props; - const { triggerRef, contentId } = vue.inject(tooltipV2RootKey); - const placement = vue.ref(props.placement); - const strategy = vue.ref(props.strategy); - const arrowRef = vue.ref(null); - const { referenceRef, contentRef, middlewareData, x, y, update } = useFloating$1({ - placement, - strategy, - middleware: vue.computed(() => { - const middleware = [offset(props.offset)]; - if (props.showArrow) { - middleware.push(arrowMiddleware({ - arrowRef - })); - } - return middleware; - }) - }); - const zIndex = useZIndex().nextZIndex(); - const ns = useNamespace("tooltip-v2"); - const side = vue.computed(() => { - return placement.value.split("-")[0]; - }); - const contentStyle = vue.computed(() => { - return { - position: vue.unref(strategy), - top: `${vue.unref(y) || 0}px`, - left: `${vue.unref(x) || 0}px`, - zIndex - }; - }); - const arrowStyle = vue.computed(() => { - if (!props.showArrow) - return {}; - const { arrow } = vue.unref(middlewareData); - return { - [`--${ns.namespace.value}-tooltip-v2-arrow-x`]: `${arrow == null ? void 0 : arrow.x}px` || "", - [`--${ns.namespace.value}-tooltip-v2-arrow-y`]: `${arrow == null ? void 0 : arrow.y}px` || "" - }; - }); - const contentClass = vue.computed(() => [ - ns.e("content"), - ns.is("dark", props.effect === "dark"), - ns.is(vue.unref(strategy)), - props.contentClass - ]); - vue.watch(arrowRef, () => update()); - vue.watch(() => props.placement, (val) => placement.value = val); - vue.onMounted(() => { - vue.watch(() => props.reference || triggerRef.value, (el) => { - referenceRef.value = el || void 0; - }, { - immediate: true - }); - }); - vue.provide(tooltipV2ContentKey, { arrowRef }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "contentRef", - ref: contentRef, - style: vue.normalizeStyle(vue.unref(contentStyle)), - "data-tooltip-v2-root": "" - }, [ - !_ctx.nowrap ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - "data-side": vue.unref(side), - class: vue.normalizeClass(vue.unref(contentClass)) - }, [ - vue.renderSlot(_ctx.$slots, "default", { - contentStyle: vue.unref(contentStyle), - contentClass: vue.unref(contentClass) - }), - vue.createVNode(vue.unref(ElVisuallyHidden), { - id: vue.unref(contentId), - role: "tooltip" - }, { - default: vue.withCtx(() => [ - _ctx.ariaLabel ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [ - vue.createTextVNode(vue.toDisplayString(_ctx.ariaLabel), 1) - ], 64)) : vue.renderSlot(_ctx.$slots, "default", { key: 1 }) - ]), - _: 3 - }, 8, ["id"]), - vue.renderSlot(_ctx.$slots, "arrow", { - style: vue.normalizeStyle(vue.unref(arrowStyle)), - side: vue.unref(side) - }) - ], 10, ["data-side"])) : vue.createCommentVNode("v-if", true) - ], 4); - }; - } - }); - var TooltipV2Content = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["__file", "content.vue"]]); - - const forwardRefProps = buildProps({ - setRef: { - type: definePropType(Function), - required: true - }, - onlyChild: Boolean - }); - var ForwardRef = vue.defineComponent({ - props: forwardRefProps, - setup(props, { - slots - }) { - const fragmentRef = vue.ref(); - const setRef = composeRefs(fragmentRef, (el) => { - if (el) { - props.setRef(el.nextElementSibling); - } else { - props.setRef(null); - } - }); - return () => { - var _a; - const [firstChild] = ((_a = slots.default) == null ? void 0 : _a.call(slots)) || []; - const child = props.onlyChild ? ensureOnlyChild(firstChild.children) : firstChild.children; - return vue.createVNode(vue.Fragment, { - "ref": setRef - }, [child]); - }; - } - }); - - const __default__$l = vue.defineComponent({ - name: "ElTooltipV2Trigger" - }); - const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({ - ...__default__$l, - props: { - ...tooltipV2CommonProps, - ...tooltipV2TriggerProps - }, - setup(__props) { - const props = __props; - const { onClose, onOpen, onDelayOpen, triggerRef, contentId } = vue.inject(tooltipV2RootKey); - let isMousedown = false; - const setTriggerRef = (el) => { - triggerRef.value = el; - }; - const onMouseup = () => { - isMousedown = false; - }; - const onMouseenter = composeEventHandlers(props.onMouseEnter, onDelayOpen); - const onMouseleave = composeEventHandlers(props.onMouseLeave, onClose); - const onMousedown = composeEventHandlers(props.onMouseDown, () => { - onClose(); - isMousedown = true; - document.addEventListener("mouseup", onMouseup, { once: true }); - }); - const onFocus = composeEventHandlers(props.onFocus, () => { - if (!isMousedown) - onOpen(); - }); - const onBlur = composeEventHandlers(props.onBlur, onClose); - const onClick = composeEventHandlers(props.onClick, (e) => { - if (e.detail === 0) - onClose(); - }); - const events = { - blur: onBlur, - click: onClick, - focus: onFocus, - mousedown: onMousedown, - mouseenter: onMouseenter, - mouseleave: onMouseleave - }; - const setEvents = (el, events2, type) => { - if (el) { - Object.entries(events2).forEach(([name, handler]) => { - el[type](name, handler); - }); - } - }; - vue.watch(triggerRef, (triggerEl, previousTriggerEl) => { - setEvents(triggerEl, events, "addEventListener"); - setEvents(previousTriggerEl, events, "removeEventListener"); - if (triggerEl) { - triggerEl.setAttribute("aria-describedby", contentId.value); - } - }); - vue.onBeforeUnmount(() => { - setEvents(triggerRef.value, events, "removeEventListener"); - document.removeEventListener("mouseup", onMouseup); - }); - return (_ctx, _cache) => { - return _ctx.nowrap ? (vue.openBlock(), vue.createBlock(vue.unref(ForwardRef), { - key: 0, - "set-ref": setTriggerRef, - "only-child": "" - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - })) : (vue.openBlock(), vue.createElementBlock("button", vue.mergeProps({ - key: 1, - ref_key: "triggerRef", - ref: triggerRef - }, _ctx.$attrs), [ - vue.renderSlot(_ctx.$slots, "default") - ], 16)); - }; - } - }); - var TooltipV2Trigger = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["__file", "trigger.vue"]]); - - const __default__$k = vue.defineComponent({ - name: "ElTooltipV2" - }); - const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({ - ...__default__$k, - props: tooltipV2Props, - setup(__props) { - const props = __props; - const refedProps = vue.toRefs(props); - const arrowProps = vue.reactive(pick(refedProps, Object.keys(tooltipV2ArrowProps))); - const contentProps = vue.reactive(pick(refedProps, Object.keys(tooltipV2ContentProps))); - const rootProps = vue.reactive(pick(refedProps, Object.keys(tooltipV2RootProps))); - const triggerProps = vue.reactive(pick(refedProps, Object.keys(tooltipV2TriggerProps))); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(TooltipV2Root, vue.normalizeProps(vue.guardReactiveProps(rootProps)), { - default: vue.withCtx(({ open }) => [ - vue.createVNode(TooltipV2Trigger, vue.mergeProps(triggerProps, { nowrap: "" }), { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "trigger") - ]), - _: 3 - }, 16), - vue.createVNode(vue.unref(ElTeleport$1), { - to: _ctx.to, - disabled: !_ctx.teleported - }, { - default: vue.withCtx(() => [ - _ctx.fullTransition ? (vue.openBlock(), vue.createBlock(vue.Transition, vue.normalizeProps(vue.mergeProps({ key: 0 }, _ctx.transitionProps)), { - default: vue.withCtx(() => [ - _ctx.alwaysOn || open ? (vue.openBlock(), vue.createBlock(TooltipV2Content, vue.normalizeProps(vue.mergeProps({ key: 0 }, contentProps)), { - arrow: vue.withCtx(({ style, side }) => [ - _ctx.showArrow ? (vue.openBlock(), vue.createBlock(TooltipV2Arrow, vue.mergeProps({ key: 0 }, arrowProps, { - style, - side - }), null, 16, ["style", "side"])) : vue.createCommentVNode("v-if", true) - ]), - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 16)) : vue.createCommentVNode("v-if", true) - ]), - _: 2 - }, 1040)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ - _ctx.alwaysOn || open ? (vue.openBlock(), vue.createBlock(TooltipV2Content, vue.normalizeProps(vue.mergeProps({ key: 0 }, contentProps)), { - arrow: vue.withCtx(({ style, side }) => [ - _ctx.showArrow ? (vue.openBlock(), vue.createBlock(TooltipV2Arrow, vue.mergeProps({ key: 0 }, arrowProps, { - style, - side - }), null, 16, ["style", "side"])) : vue.createCommentVNode("v-if", true) - ]), - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 16)) : vue.createCommentVNode("v-if", true) - ], 64)) - ]), - _: 2 - }, 1032, ["to", "disabled"]) - ]), - _: 3 - }, 16); - }; - } - }); - var TooltipV2 = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["__file", "tooltip.vue"]]); - - const ElTooltipV2 = withInstall(TooltipV2); - - const LEFT_CHECK_CHANGE_EVENT = "left-check-change"; - const RIGHT_CHECK_CHANGE_EVENT = "right-check-change"; - const transferProps = buildProps({ - data: { - type: definePropType(Array), - default: () => [] - }, - titles: { - type: definePropType(Array), - default: () => [] - }, - buttonTexts: { - type: definePropType(Array), - default: () => [] - }, - filterPlaceholder: String, - filterMethod: { - type: definePropType(Function) - }, - leftDefaultChecked: { - type: definePropType(Array), - default: () => [] - }, - rightDefaultChecked: { - type: definePropType(Array), - default: () => [] - }, - renderContent: { - type: definePropType(Function) - }, - modelValue: { - type: definePropType(Array), - default: () => [] - }, - format: { - type: definePropType(Object), - default: () => ({}) - }, - filterable: Boolean, - props: { - type: definePropType(Object), - default: () => mutable({ - label: "label", - key: "key", - disabled: "disabled" - }) - }, - targetOrder: { - type: String, - values: ["original", "push", "unshift"], - default: "original" - }, - validateEvent: { - type: Boolean, - default: true - } - }); - const transferCheckedChangeFn = (value, movedKeys) => [value, movedKeys].every(isArray$1) || isArray$1(value) && isNil(movedKeys); - const transferEmits = { - [CHANGE_EVENT]: (value, direction, movedKeys) => [value, movedKeys].every(isArray$1) && ["left", "right"].includes(direction), - [UPDATE_MODEL_EVENT]: (value) => isArray$1(value), - [LEFT_CHECK_CHANGE_EVENT]: transferCheckedChangeFn, - [RIGHT_CHECK_CHANGE_EVENT]: transferCheckedChangeFn - }; - - const CHECKED_CHANGE_EVENT = "checked-change"; - const transferPanelProps = buildProps({ - data: transferProps.data, - optionRender: { - type: definePropType(Function) - }, - placeholder: String, - title: String, - filterable: Boolean, - format: transferProps.format, - filterMethod: transferProps.filterMethod, - defaultChecked: transferProps.leftDefaultChecked, - props: transferProps.props - }); - const transferPanelEmits = { - [CHECKED_CHANGE_EVENT]: transferCheckedChangeFn - }; - - const usePropsAlias = (props) => { - const initProps = { - label: "label", - key: "key", - disabled: "disabled" - }; - return vue.computed(() => ({ - ...initProps, - ...props.props - })); - }; - - const useCheck$1 = (props, panelState, emit) => { - const propsAlias = usePropsAlias(props); - const filteredData = vue.computed(() => { - return props.data.filter((item) => { - if (isFunction$1(props.filterMethod)) { - return props.filterMethod(panelState.query, item); - } else { - const label = String(item[propsAlias.value.label] || item[propsAlias.value.key]); - return label.toLowerCase().includes(panelState.query.toLowerCase()); - } - }); - }); - const checkableData = vue.computed(() => filteredData.value.filter((item) => !item[propsAlias.value.disabled])); - const checkedSummary = vue.computed(() => { - const checkedLength = panelState.checked.length; - const dataLength = props.data.length; - const { noChecked, hasChecked } = props.format; - if (noChecked && hasChecked) { - return checkedLength > 0 ? hasChecked.replace(/\${checked}/g, checkedLength.toString()).replace(/\${total}/g, dataLength.toString()) : noChecked.replace(/\${total}/g, dataLength.toString()); - } else { - return `${checkedLength}/${dataLength}`; - } - }); - const isIndeterminate = vue.computed(() => { - const checkedLength = panelState.checked.length; - return checkedLength > 0 && checkedLength < checkableData.value.length; - }); - const updateAllChecked = () => { - const checkableDataKeys = checkableData.value.map((item) => item[propsAlias.value.key]); - panelState.allChecked = checkableDataKeys.length > 0 && checkableDataKeys.every((item) => panelState.checked.includes(item)); - }; - const handleAllCheckedChange = (value) => { - panelState.checked = value ? checkableData.value.map((item) => item[propsAlias.value.key]) : []; - }; - vue.watch(() => panelState.checked, (val, oldVal) => { - updateAllChecked(); - if (panelState.checkChangeByUser) { - const movedKeys = val.concat(oldVal).filter((v) => !val.includes(v) || !oldVal.includes(v)); - emit(CHECKED_CHANGE_EVENT, val, movedKeys); - } else { - emit(CHECKED_CHANGE_EVENT, val); - panelState.checkChangeByUser = true; - } - }); - vue.watch(checkableData, () => { - updateAllChecked(); - }); - vue.watch(() => props.data, () => { - const checked = []; - const filteredDataKeys = filteredData.value.map((item) => item[propsAlias.value.key]); - panelState.checked.forEach((item) => { - if (filteredDataKeys.includes(item)) { - checked.push(item); - } - }); - panelState.checkChangeByUser = false; - panelState.checked = checked; - }); - vue.watch(() => props.defaultChecked, (val, oldVal) => { - if (oldVal && val.length === oldVal.length && val.every((item) => oldVal.includes(item))) - return; - const checked = []; - const checkableDataKeys = checkableData.value.map((item) => item[propsAlias.value.key]); - val.forEach((item) => { - if (checkableDataKeys.includes(item)) { - checked.push(item); - } - }); - panelState.checkChangeByUser = false; - panelState.checked = checked; - }, { - immediate: true - }); - return { - filteredData, - checkableData, - checkedSummary, - isIndeterminate, - updateAllChecked, - handleAllCheckedChange - }; - }; - - const useCheckedChange = (checkedState, emit) => { - const onSourceCheckedChange = (val, movedKeys) => { - checkedState.leftChecked = val; - if (!movedKeys) - return; - emit(LEFT_CHECK_CHANGE_EVENT, val, movedKeys); - }; - const onTargetCheckedChange = (val, movedKeys) => { - checkedState.rightChecked = val; - if (!movedKeys) - return; - emit(RIGHT_CHECK_CHANGE_EVENT, val, movedKeys); - }; - return { - onSourceCheckedChange, - onTargetCheckedChange - }; - }; - - const useComputedData = (props) => { - const propsAlias = usePropsAlias(props); - const dataObj = vue.computed(() => props.data.reduce((o, cur) => (o[cur[propsAlias.value.key]] = cur) && o, {})); - const sourceData = vue.computed(() => props.data.filter((item) => !props.modelValue.includes(item[propsAlias.value.key]))); - const targetData = vue.computed(() => { - if (props.targetOrder === "original") { - return props.data.filter((item) => props.modelValue.includes(item[propsAlias.value.key])); - } else { - return props.modelValue.reduce((arr, cur) => { - const val = dataObj.value[cur]; - if (val) { - arr.push(val); - } - return arr; - }, []); - } - }); - return { - sourceData, - targetData - }; - }; - - const useMove = (props, checkedState, emit) => { - const propsAlias = usePropsAlias(props); - const _emit = (value, direction, movedKeys) => { - emit(UPDATE_MODEL_EVENT, value); - emit(CHANGE_EVENT, value, direction, movedKeys); - }; - const addToLeft = () => { - const currentValue = props.modelValue.slice(); - checkedState.rightChecked.forEach((item) => { - const index = currentValue.indexOf(item); - if (index > -1) { - currentValue.splice(index, 1); - } - }); - _emit(currentValue, "left", checkedState.rightChecked); - }; - const addToRight = () => { - let currentValue = props.modelValue.slice(); - const itemsToBeMoved = props.data.filter((item) => { - const itemKey = item[propsAlias.value.key]; - return checkedState.leftChecked.includes(itemKey) && !props.modelValue.includes(itemKey); - }).map((item) => item[propsAlias.value.key]); - currentValue = props.targetOrder === "unshift" ? itemsToBeMoved.concat(currentValue) : currentValue.concat(itemsToBeMoved); - if (props.targetOrder === "original") { - currentValue = props.data.filter((item) => currentValue.includes(item[propsAlias.value.key])).map((item) => item[propsAlias.value.key]); - } - _emit(currentValue, "right", checkedState.leftChecked); - }; - return { - addToLeft, - addToRight - }; - }; - - const __default__$j = vue.defineComponent({ - name: "ElTransferPanel" - }); - const _sfc_main$o = /* @__PURE__ */ vue.defineComponent({ - ...__default__$j, - props: transferPanelProps, - emits: transferPanelEmits, - setup(__props, { expose, emit }) { - const props = __props; - const slots = vue.useSlots(); - const OptionContent = ({ option }) => option; - const { t } = useLocale(); - const ns = useNamespace("transfer"); - const panelState = vue.reactive({ - checked: [], - allChecked: false, - query: "", - checkChangeByUser: true - }); - const propsAlias = usePropsAlias(props); - const { - filteredData, - checkedSummary, - isIndeterminate, - handleAllCheckedChange - } = useCheck$1(props, panelState, emit); - const hasNoMatch = vue.computed(() => !isEmpty(panelState.query) && isEmpty(filteredData.value)); - const hasFooter = vue.computed(() => !isEmpty(slots.default()[0].children)); - const { checked, allChecked, query } = vue.toRefs(panelState); - expose({ - query - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(ns).b("panel")) - }, [ - vue.createElementVNode("p", { - class: vue.normalizeClass(vue.unref(ns).be("panel", "header")) - }, [ - vue.createVNode(vue.unref(ElCheckbox), { - modelValue: vue.unref(allChecked), - "onUpdate:modelValue": ($event) => vue.isRef(allChecked) ? allChecked.value = $event : null, - indeterminate: vue.unref(isIndeterminate), - "validate-event": false, - onChange: vue.unref(handleAllCheckedChange) - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(_ctx.title) + " ", 1), - vue.createElementVNode("span", null, vue.toDisplayString(vue.unref(checkedSummary)), 1) - ]), - _: 1 - }, 8, ["modelValue", "onUpdate:modelValue", "indeterminate", "onChange"]) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass([vue.unref(ns).be("panel", "body"), vue.unref(ns).is("with-footer", vue.unref(hasFooter))]) - }, [ - _ctx.filterable ? (vue.openBlock(), vue.createBlock(vue.unref(ElInput), { - key: 0, - modelValue: vue.unref(query), - "onUpdate:modelValue": ($event) => vue.isRef(query) ? query.value = $event : null, - class: vue.normalizeClass(vue.unref(ns).be("panel", "filter")), - size: "default", - placeholder: _ctx.placeholder, - "prefix-icon": vue.unref(search_default), - clearable: "", - "validate-event": false - }, null, 8, ["modelValue", "onUpdate:modelValue", "class", "placeholder", "prefix-icon"])) : vue.createCommentVNode("v-if", true), - vue.withDirectives(vue.createVNode(vue.unref(ElCheckboxGroup$1), { - modelValue: vue.unref(checked), - "onUpdate:modelValue": ($event) => vue.isRef(checked) ? checked.value = $event : null, - "validate-event": false, - class: vue.normalizeClass([vue.unref(ns).is("filterable", _ctx.filterable), vue.unref(ns).be("panel", "list")]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(vue.unref(filteredData), (item) => { - return vue.openBlock(), vue.createBlock(vue.unref(ElCheckbox), { - key: item[vue.unref(propsAlias).key], - class: vue.normalizeClass(vue.unref(ns).be("panel", "item")), - value: item[vue.unref(propsAlias).key], - disabled: item[vue.unref(propsAlias).disabled], - "validate-event": false - }, { - default: vue.withCtx(() => { - var _a; - return [ - vue.createVNode(OptionContent, { - option: (_a = _ctx.optionRender) == null ? void 0 : _a.call(_ctx, item) - }, null, 8, ["option"]) - ]; - }), - _: 2 - }, 1032, ["class", "value", "disabled"]); - }), 128)) - ]), - _: 1 - }, 8, ["modelValue", "onUpdate:modelValue", "class"]), [ - [vue.vShow, !vue.unref(hasNoMatch) && !vue.unref(isEmpty)(_ctx.data)] - ]), - vue.withDirectives(vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).be("panel", "empty")) - }, [ - vue.renderSlot(_ctx.$slots, "empty", {}, () => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(hasNoMatch) ? vue.unref(t)("el.transfer.noMatch") : vue.unref(t)("el.transfer.noData")), 1) - ]) - ], 2), [ - [vue.vShow, vue.unref(hasNoMatch) || vue.unref(isEmpty)(_ctx.data)] - ]) - ], 2), - vue.unref(hasFooter) ? (vue.openBlock(), vue.createElementBlock("p", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).be("panel", "footer")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var TransferPanel = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["__file", "transfer-panel.vue"]]); - - const __default__$i = vue.defineComponent({ - name: "ElTransfer" - }); - const _sfc_main$n = /* @__PURE__ */ vue.defineComponent({ - ...__default__$i, - props: transferProps, - emits: transferEmits, - setup(__props, { expose, emit }) { - const props = __props; - const slots = vue.useSlots(); - const { t } = useLocale(); - const ns = useNamespace("transfer"); - const { formItem } = useFormItem(); - const checkedState = vue.reactive({ - leftChecked: [], - rightChecked: [] - }); - const propsAlias = usePropsAlias(props); - const { sourceData, targetData } = useComputedData(props); - const { onSourceCheckedChange, onTargetCheckedChange } = useCheckedChange(checkedState, emit); - const { addToLeft, addToRight } = useMove(props, checkedState, emit); - const leftPanel = vue.ref(); - const rightPanel = vue.ref(); - const clearQuery = (which) => { - switch (which) { - case "left": - leftPanel.value.query = ""; - break; - case "right": - rightPanel.value.query = ""; - break; - } - }; - const hasButtonTexts = vue.computed(() => props.buttonTexts.length === 2); - const leftPanelTitle = vue.computed(() => props.titles[0] || t("el.transfer.titles.0")); - const rightPanelTitle = vue.computed(() => props.titles[1] || t("el.transfer.titles.1")); - const panelFilterPlaceholder = vue.computed(() => props.filterPlaceholder || t("el.transfer.filterPlaceholder")); - vue.watch(() => props.modelValue, () => { - var _a; - if (props.validateEvent) { - (_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, "change").catch((err) => debugWarn()); - } - }); - const optionRender = vue.computed(() => (option) => { - var _a; - if (props.renderContent) - return props.renderContent(vue.h, option); - const defaultSlotVNodes = (((_a = slots.default) == null ? void 0 : _a.call(slots, { option })) || []).filter((node) => node.type !== vue.Comment); - if (defaultSlotVNodes.length) { - return defaultSlotVNodes; - } - return vue.h("span", option[propsAlias.value.label] || option[propsAlias.value.key]); - }); - expose({ - clearQuery, - leftPanel, - rightPanel - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(ns).b()) - }, [ - vue.createVNode(TransferPanel, { - ref_key: "leftPanel", - ref: leftPanel, - data: vue.unref(sourceData), - "option-render": vue.unref(optionRender), - placeholder: vue.unref(panelFilterPlaceholder), - title: vue.unref(leftPanelTitle), - filterable: _ctx.filterable, - format: _ctx.format, - "filter-method": _ctx.filterMethod, - "default-checked": _ctx.leftDefaultChecked, - props: props.props, - onCheckedChange: vue.unref(onSourceCheckedChange) - }, { - empty: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "left-empty") - ]), - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "left-footer") - ]), - _: 3 - }, 8, ["data", "option-render", "placeholder", "title", "filterable", "format", "filter-method", "default-checked", "props", "onCheckedChange"]), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("buttons")) - }, [ - vue.createVNode(vue.unref(ElButton), { - type: "primary", - class: vue.normalizeClass([vue.unref(ns).e("button"), vue.unref(ns).is("with-texts", vue.unref(hasButtonTexts))]), - disabled: vue.unref(isEmpty)(checkedState.rightChecked), - onClick: vue.unref(addToLeft) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_left_default)) - ]), - _: 1 - }), - !vue.unref(isUndefined)(_ctx.buttonTexts[0]) ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, vue.toDisplayString(_ctx.buttonTexts[0]), 1)) : vue.createCommentVNode("v-if", true) - ]), - _: 1 - }, 8, ["class", "disabled", "onClick"]), - vue.createVNode(vue.unref(ElButton), { - type: "primary", - class: vue.normalizeClass([vue.unref(ns).e("button"), vue.unref(ns).is("with-texts", vue.unref(hasButtonTexts))]), - disabled: vue.unref(isEmpty)(checkedState.leftChecked), - onClick: vue.unref(addToRight) - }, { - default: vue.withCtx(() => [ - !vue.unref(isUndefined)(_ctx.buttonTexts[1]) ? (vue.openBlock(), vue.createElementBlock("span", { key: 0 }, vue.toDisplayString(_ctx.buttonTexts[1]), 1)) : vue.createCommentVNode("v-if", true), - vue.createVNode(vue.unref(ElIcon), null, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(arrow_right_default)) - ]), - _: 1 - }) - ]), - _: 1 - }, 8, ["class", "disabled", "onClick"]) - ], 2), - vue.createVNode(TransferPanel, { - ref_key: "rightPanel", - ref: rightPanel, - data: vue.unref(targetData), - "option-render": vue.unref(optionRender), - placeholder: vue.unref(panelFilterPlaceholder), - filterable: _ctx.filterable, - format: _ctx.format, - "filter-method": _ctx.filterMethod, - title: vue.unref(rightPanelTitle), - "default-checked": _ctx.rightDefaultChecked, - props: props.props, - onCheckedChange: vue.unref(onTargetCheckedChange) - }, { - empty: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "right-empty") - ]), - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "right-footer") - ]), - _: 3 - }, 8, ["data", "option-render", "placeholder", "filterable", "format", "filter-method", "title", "default-checked", "props", "onCheckedChange"]) - ], 2); - }; - } - }); - var Transfer = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["__file", "transfer.vue"]]); - - const ElTransfer = withInstall(Transfer); - - const NODE_KEY = "$treeNodeId"; - const markNodeData = function(node, data) { - if (!data || data[NODE_KEY]) - return; - Object.defineProperty(data, NODE_KEY, { - value: node.id, - enumerable: false, - configurable: false, - writable: false - }); - }; - const getNodeKey = function(key, data) { - if (!key) - return data[NODE_KEY]; - return data[key]; - }; - const handleCurrentChange = (store, emit, setCurrent) => { - const preCurrentNode = store.value.currentNode; - setCurrent(); - const currentNode = store.value.currentNode; - if (preCurrentNode === currentNode) - return; - emit("current-change", currentNode ? currentNode.data : null, currentNode); - }; - - const getChildState = (node) => { - let all = true; - let none = true; - let allWithoutDisable = true; - for (let i = 0, j = node.length; i < j; i++) { - const n = node[i]; - if (n.checked !== true || n.indeterminate) { - all = false; - if (!n.disabled) { - allWithoutDisable = false; - } - } - if (n.checked !== false || n.indeterminate) { - none = false; - } - } - return { all, none, allWithoutDisable, half: !all && !none }; - }; - const reInitChecked = function(node) { - if (node.childNodes.length === 0 || node.loading) - return; - const { all, none, half } = getChildState(node.childNodes); - if (all) { - node.checked = true; - node.indeterminate = false; - } else if (half) { - node.checked = false; - node.indeterminate = true; - } else if (none) { - node.checked = false; - node.indeterminate = false; - } - const parent = node.parent; - if (!parent || parent.level === 0) - return; - if (!node.store.checkStrictly) { - reInitChecked(parent); - } - }; - const getPropertyFromData = function(node, prop) { - const props = node.store.props; - const data = node.data || {}; - const config = props[prop]; - if (isFunction$1(config)) { - return config(data, node); - } else if (isString$1(config)) { - return data[config]; - } else if (isUndefined(config)) { - const dataProp = data[prop]; - return dataProp === void 0 ? "" : dataProp; - } - }; - let nodeIdSeed = 0; - class Node { - constructor(options) { - this.id = nodeIdSeed++; - this.text = null; - this.checked = false; - this.indeterminate = false; - this.data = null; - this.expanded = false; - this.parent = null; - this.visible = true; - this.isCurrent = false; - this.canFocus = false; - for (const name in options) { - if (hasOwn(options, name)) { - this[name] = options[name]; - } - } - this.level = 0; - this.loaded = false; - this.childNodes = []; - this.loading = false; - if (this.parent) { - this.level = this.parent.level + 1; - } - } - initialize() { - const store = this.store; - if (!store) { - throw new Error("[Node]store is required!"); - } - store.registerNode(this); - const props = store.props; - if (props && typeof props.isLeaf !== "undefined") { - const isLeaf = getPropertyFromData(this, "isLeaf"); - if (isBoolean(isLeaf)) { - this.isLeafByUser = isLeaf; - } - } - if (store.lazy !== true && this.data) { - this.setData(this.data); - if (store.defaultExpandAll) { - this.expanded = true; - this.canFocus = true; - } - } else if (this.level > 0 && store.lazy && store.defaultExpandAll && !this.isLeafByUser) { - this.expand(); - } - if (!isArray$1(this.data)) { - markNodeData(this, this.data); - } - if (!this.data) - return; - const defaultExpandedKeys = store.defaultExpandedKeys; - const key = store.key; - if (key && defaultExpandedKeys && defaultExpandedKeys.includes(this.key)) { - this.expand(null, store.autoExpandParent); - } - if (key && store.currentNodeKey !== void 0 && this.key === store.currentNodeKey) { - store.currentNode = this; - store.currentNode.isCurrent = true; - } - if (store.lazy) { - store._initDefaultCheckedNode(this); - } - this.updateLeafState(); - if (this.parent && (this.level === 1 || this.parent.expanded === true)) - this.canFocus = true; - } - setData(data) { - if (!isArray$1(data)) { - markNodeData(this, data); - } - this.data = data; - this.childNodes = []; - let children; - if (this.level === 0 && isArray$1(this.data)) { - children = this.data; - } else { - children = getPropertyFromData(this, "children") || []; - } - for (let i = 0, j = children.length; i < j; i++) { - this.insertChild({ data: children[i] }); - } - } - get label() { - return getPropertyFromData(this, "label"); - } - get key() { - const nodeKey = this.store.key; - if (this.data) - return this.data[nodeKey]; - return null; - } - get disabled() { - return getPropertyFromData(this, "disabled"); - } - get nextSibling() { - const parent = this.parent; - if (parent) { - const index = parent.childNodes.indexOf(this); - if (index > -1) { - return parent.childNodes[index + 1]; - } - } - return null; - } - get previousSibling() { - const parent = this.parent; - if (parent) { - const index = parent.childNodes.indexOf(this); - if (index > -1) { - return index > 0 ? parent.childNodes[index - 1] : null; - } - } - return null; - } - contains(target, deep = true) { - return (this.childNodes || []).some((child) => child === target || deep && child.contains(target)); - } - remove() { - const parent = this.parent; - if (parent) { - parent.removeChild(this); - } - } - insertChild(child, index, batch) { - if (!child) - throw new Error("InsertChild error: child is required."); - if (!(child instanceof Node)) { - if (!batch) { - const children = this.getChildren(true); - if (!children.includes(child.data)) { - if (isUndefined(index) || index < 0) { - children.push(child.data); - } else { - children.splice(index, 0, child.data); - } - } - } - Object.assign(child, { - parent: this, - store: this.store - }); - child = vue.reactive(new Node(child)); - if (child instanceof Node) { - child.initialize(); - } - } - child.level = this.level + 1; - if (isUndefined(index) || index < 0) { - this.childNodes.push(child); - } else { - this.childNodes.splice(index, 0, child); - } - this.updateLeafState(); - } - insertBefore(child, ref) { - let index; - if (ref) { - index = this.childNodes.indexOf(ref); - } - this.insertChild(child, index); - } - insertAfter(child, ref) { - let index; - if (ref) { - index = this.childNodes.indexOf(ref); - if (index !== -1) - index += 1; - } - this.insertChild(child, index); - } - removeChild(child) { - const children = this.getChildren() || []; - const dataIndex = children.indexOf(child.data); - if (dataIndex > -1) { - children.splice(dataIndex, 1); - } - const index = this.childNodes.indexOf(child); - if (index > -1) { - this.store && this.store.deregisterNode(child); - child.parent = null; - this.childNodes.splice(index, 1); - } - this.updateLeafState(); - } - removeChildByData(data) { - let targetNode = null; - for (let i = 0; i < this.childNodes.length; i++) { - if (this.childNodes[i].data === data) { - targetNode = this.childNodes[i]; - break; - } - } - if (targetNode) { - this.removeChild(targetNode); - } - } - expand(callback, expandParent) { - const done = () => { - if (expandParent) { - let parent = this.parent; - while (parent.level > 0) { - parent.expanded = true; - parent = parent.parent; - } - } - this.expanded = true; - if (callback) - callback(); - this.childNodes.forEach((item) => { - item.canFocus = true; - }); - }; - if (this.shouldLoadData()) { - this.loadData((data) => { - if (isArray$1(data)) { - if (this.checked) { - this.setChecked(true, true); - } else if (!this.store.checkStrictly) { - reInitChecked(this); - } - done(); - } - }); - } else { - done(); - } - } - doCreateChildren(array, defaultProps = {}) { - array.forEach((item) => { - this.insertChild(Object.assign({ data: item }, defaultProps), void 0, true); - }); - } - collapse() { - this.expanded = false; - this.childNodes.forEach((item) => { - item.canFocus = false; - }); - } - shouldLoadData() { - return this.store.lazy === true && this.store.load && !this.loaded; - } - updateLeafState() { - if (this.store.lazy === true && this.loaded !== true && typeof this.isLeafByUser !== "undefined") { - this.isLeaf = this.isLeafByUser; - return; - } - const childNodes = this.childNodes; - if (!this.store.lazy || this.store.lazy === true && this.loaded === true) { - this.isLeaf = !childNodes || childNodes.length === 0; - return; - } - this.isLeaf = false; - } - setChecked(value, deep, recursion, passValue) { - this.indeterminate = value === "half"; - this.checked = value === true; - if (this.store.checkStrictly) - return; - if (!(this.shouldLoadData() && !this.store.checkDescendants)) { - const { all, allWithoutDisable } = getChildState(this.childNodes); - if (!this.isLeaf && !all && allWithoutDisable) { - this.checked = false; - value = false; - } - const handleDescendants = () => { - if (deep) { - const childNodes = this.childNodes; - for (let i = 0, j = childNodes.length; i < j; i++) { - const child = childNodes[i]; - passValue = passValue || value !== false; - const isCheck = child.disabled ? child.checked : passValue; - child.setChecked(isCheck, deep, true, passValue); - } - const { half, all: all2 } = getChildState(childNodes); - if (!all2) { - this.checked = all2; - this.indeterminate = half; - } - } - }; - if (this.shouldLoadData()) { - this.loadData(() => { - handleDescendants(); - reInitChecked(this); - }, { - checked: value !== false - }); - return; - } else { - handleDescendants(); - } - } - const parent = this.parent; - if (!parent || parent.level === 0) - return; - if (!recursion) { - reInitChecked(parent); - } - } - getChildren(forceInit = false) { - if (this.level === 0) - return this.data; - const data = this.data; - if (!data) - return null; - const props = this.store.props; - let children = "children"; - if (props) { - children = props.children || "children"; - } - if (data[children] === void 0) { - data[children] = null; - } - if (forceInit && !data[children]) { - data[children] = []; - } - return data[children]; - } - updateChildren() { - const newData = this.getChildren() || []; - const oldData = this.childNodes.map((node) => node.data); - const newDataMap = {}; - const newNodes = []; - newData.forEach((item, index) => { - const key = item[NODE_KEY]; - const isNodeExists = !!key && oldData.findIndex((data) => data[NODE_KEY] === key) >= 0; - if (isNodeExists) { - newDataMap[key] = { index, data: item }; - } else { - newNodes.push({ index, data: item }); - } - }); - if (!this.store.lazy) { - oldData.forEach((item) => { - if (!newDataMap[item[NODE_KEY]]) - this.removeChildByData(item); - }); - } - newNodes.forEach(({ index, data }) => { - this.insertChild({ data }, index); - }); - this.updateLeafState(); - } - loadData(callback, defaultProps = {}) { - if (this.store.lazy === true && this.store.load && !this.loaded && (!this.loading || Object.keys(defaultProps).length)) { - this.loading = true; - const resolve = (children) => { - this.childNodes = []; - this.doCreateChildren(children, defaultProps); - this.loaded = true; - this.loading = false; - this.updateLeafState(); - if (callback) { - callback.call(this, children); - } - }; - const reject = () => { - this.loading = false; - }; - this.store.load(this, resolve, reject); - } else { - if (callback) { - callback.call(this); - } - } - } - eachNode(callback) { - const arr = [this]; - while (arr.length) { - const node = arr.shift(); - arr.unshift(...node.childNodes); - callback(node); - } - } - reInitChecked() { - if (this.store.checkStrictly) - return; - reInitChecked(this); - } - } - var Node$1 = Node; - - class TreeStore { - constructor(options) { - this.currentNode = null; - this.currentNodeKey = null; - for (const option in options) { - if (hasOwn(options, option)) { - this[option] = options[option]; - } - } - this.nodesMap = {}; - } - initialize() { - this.root = new Node$1({ - data: this.data, - store: this - }); - this.root.initialize(); - if (this.lazy && this.load) { - const loadFn = this.load; - loadFn(this.root, (data) => { - this.root.doCreateChildren(data); - this._initDefaultCheckedNodes(); - }); - } else { - this._initDefaultCheckedNodes(); - } - } - filter(value) { - const filterNodeMethod = this.filterNodeMethod; - const lazy = this.lazy; - const traverse = function(node) { - const childNodes = node.root ? node.root.childNodes : node.childNodes; - childNodes.forEach((child) => { - child.visible = filterNodeMethod.call(child, value, child.data, child); - traverse(child); - }); - if (!node.visible && childNodes.length) { - let allHidden = true; - allHidden = !childNodes.some((child) => child.visible); - if (node.root) { - node.root.visible = allHidden === false; - } else { - node.visible = allHidden === false; - } - } - if (!value) - return; - if (node.visible && !node.isLeaf) { - if (!lazy || node.loaded) { - node.expand(); - } - } - }; - traverse(this); - } - setData(newVal) { - const instanceChanged = newVal !== this.root.data; - if (instanceChanged) { - this.nodesMap = {}; - this.root.setData(newVal); - this._initDefaultCheckedNodes(); - this.setCurrentNodeKey(this.currentNodeKey); - } else { - this.root.updateChildren(); - } - } - getNode(data) { - if (data instanceof Node$1) - return data; - const key = isObject$1(data) ? getNodeKey(this.key, data) : data; - return this.nodesMap[key] || null; - } - insertBefore(data, refData) { - const refNode = this.getNode(refData); - refNode.parent.insertBefore({ data }, refNode); - } - insertAfter(data, refData) { - const refNode = this.getNode(refData); - refNode.parent.insertAfter({ data }, refNode); - } - remove(data) { - const node = this.getNode(data); - if (node && node.parent) { - if (node === this.currentNode) { - this.currentNode = null; - } - node.parent.removeChild(node); - } - } - append(data, parentData) { - const parentNode = !isPropAbsent(parentData) ? this.getNode(parentData) : this.root; - if (parentNode) { - parentNode.insertChild({ data }); - } - } - _initDefaultCheckedNodes() { - const defaultCheckedKeys = this.defaultCheckedKeys || []; - const nodesMap = this.nodesMap; - defaultCheckedKeys.forEach((checkedKey) => { - const node = nodesMap[checkedKey]; - if (node) { - node.setChecked(true, !this.checkStrictly); - } - }); - } - _initDefaultCheckedNode(node) { - const defaultCheckedKeys = this.defaultCheckedKeys || []; - if (defaultCheckedKeys.includes(node.key)) { - node.setChecked(true, !this.checkStrictly); - } - } - setDefaultCheckedKey(newVal) { - if (newVal !== this.defaultCheckedKeys) { - this.defaultCheckedKeys = newVal; - this._initDefaultCheckedNodes(); - } - } - registerNode(node) { - const key = this.key; - if (!node || !node.data) - return; - if (!key) { - this.nodesMap[node.id] = node; - } else { - const nodeKey = node.key; - if (nodeKey !== void 0) - this.nodesMap[node.key] = node; - } - } - deregisterNode(node) { - const key = this.key; - if (!key || !node || !node.data) - return; - node.childNodes.forEach((child) => { - this.deregisterNode(child); - }); - delete this.nodesMap[node.key]; - } - getCheckedNodes(leafOnly = false, includeHalfChecked = false) { - const checkedNodes = []; - const traverse = function(node) { - const childNodes = node.root ? node.root.childNodes : node.childNodes; - childNodes.forEach((child) => { - if ((child.checked || includeHalfChecked && child.indeterminate) && (!leafOnly || leafOnly && child.isLeaf)) { - checkedNodes.push(child.data); - } - traverse(child); - }); - }; - traverse(this); - return checkedNodes; - } - getCheckedKeys(leafOnly = false) { - return this.getCheckedNodes(leafOnly).map((data) => (data || {})[this.key]); - } - getHalfCheckedNodes() { - const nodes = []; - const traverse = function(node) { - const childNodes = node.root ? node.root.childNodes : node.childNodes; - childNodes.forEach((child) => { - if (child.indeterminate) { - nodes.push(child.data); - } - traverse(child); - }); - }; - traverse(this); - return nodes; - } - getHalfCheckedKeys() { - return this.getHalfCheckedNodes().map((data) => (data || {})[this.key]); - } - _getAllNodes() { - const allNodes = []; - const nodesMap = this.nodesMap; - for (const nodeKey in nodesMap) { - if (hasOwn(nodesMap, nodeKey)) { - allNodes.push(nodesMap[nodeKey]); - } - } - return allNodes; - } - updateChildren(key, data) { - const node = this.nodesMap[key]; - if (!node) - return; - const childNodes = node.childNodes; - for (let i = childNodes.length - 1; i >= 0; i--) { - const child = childNodes[i]; - this.remove(child.data); - } - for (let i = 0, j = data.length; i < j; i++) { - const child = data[i]; - this.append(child, node.data); - } - } - _setCheckedKeys(key, leafOnly = false, checkedKeys) { - const allNodes = this._getAllNodes().sort((a, b) => a.level - b.level); - const cache = /* @__PURE__ */ Object.create(null); - const keys = Object.keys(checkedKeys); - allNodes.forEach((node) => node.setChecked(false, false)); - const cacheCheckedChild = (node) => { - node.childNodes.forEach((child) => { - var _a; - cache[child.data[key]] = true; - if ((_a = child.childNodes) == null ? void 0 : _a.length) { - cacheCheckedChild(child); - } - }); - }; - for (let i = 0, j = allNodes.length; i < j; i++) { - const node = allNodes[i]; - const nodeKey = node.data[key].toString(); - const checked = keys.includes(nodeKey); - if (!checked) { - if (node.checked && !cache[nodeKey]) { - node.setChecked(false, false); - } - continue; - } - if (node.childNodes.length) { - cacheCheckedChild(node); - } - if (node.isLeaf || this.checkStrictly) { - node.setChecked(true, false); - continue; - } - node.setChecked(true, true); - if (leafOnly) { - node.setChecked(false, false); - const traverse = function(node2) { - const childNodes = node2.childNodes; - childNodes.forEach((child) => { - if (!child.isLeaf) { - child.setChecked(false, false); - } - traverse(child); - }); - }; - traverse(node); - } - } - } - setCheckedNodes(array, leafOnly = false) { - const key = this.key; - const checkedKeys = {}; - array.forEach((item) => { - checkedKeys[(item || {})[key]] = true; - }); - this._setCheckedKeys(key, leafOnly, checkedKeys); - } - setCheckedKeys(keys, leafOnly = false) { - this.defaultCheckedKeys = keys; - const key = this.key; - const checkedKeys = {}; - keys.forEach((key2) => { - checkedKeys[key2] = true; - }); - this._setCheckedKeys(key, leafOnly, checkedKeys); - } - setDefaultExpandedKeys(keys) { - keys = keys || []; - this.defaultExpandedKeys = keys; - keys.forEach((key) => { - const node = this.getNode(key); - if (node) - node.expand(null, this.autoExpandParent); - }); - } - setChecked(data, checked, deep) { - const node = this.getNode(data); - if (node) { - node.setChecked(!!checked, deep); - } - } - getCurrentNode() { - return this.currentNode; - } - setCurrentNode(currentNode) { - const prevCurrentNode = this.currentNode; - if (prevCurrentNode) { - prevCurrentNode.isCurrent = false; - } - this.currentNode = currentNode; - this.currentNode.isCurrent = true; - } - setUserCurrentNode(node, shouldAutoExpandParent = true) { - const key = node[this.key]; - const currNode = this.nodesMap[key]; - this.setCurrentNode(currNode); - if (shouldAutoExpandParent && this.currentNode.level > 1) { - this.currentNode.parent.expand(null, true); - } - } - setCurrentNodeKey(key, shouldAutoExpandParent = true) { - this.currentNodeKey = key; - if (key === null || key === void 0) { - this.currentNode && (this.currentNode.isCurrent = false); - this.currentNode = null; - return; - } - const node = this.getNode(key); - if (node) { - this.setCurrentNode(node); - if (shouldAutoExpandParent && this.currentNode.level > 1) { - this.currentNode.parent.expand(null, true); - } - } - } - } - - const _sfc_main$m = vue.defineComponent({ - name: "ElTreeNodeContent", - props: { - node: { - type: Object, - required: true - }, - renderContent: Function - }, - setup(props) { - const ns = useNamespace("tree"); - const nodeInstance = vue.inject("NodeInstance"); - const tree = vue.inject("RootTree"); - return () => { - const node = props.node; - const { data, store } = node; - return props.renderContent ? props.renderContent(vue.h, { _self: nodeInstance, node, data, store }) : vue.renderSlot(tree.ctx.slots, "default", { node, data }, () => [ - vue.h("span", { class: ns.be("node", "label") }, [node.label]) - ]); - }; - } - }); - var NodeContent = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["__file", "tree-node-content.vue"]]); - - function useNodeExpandEventBroadcast(props) { - const parentNodeMap = vue.inject("TreeNodeMap", null); - const currentNodeMap = { - treeNodeExpand: (node) => { - if (props.node !== node) { - props.node.collapse(); - } - }, - children: [] - }; - if (parentNodeMap) { - parentNodeMap.children.push(currentNodeMap); - } - vue.provide("TreeNodeMap", currentNodeMap); - return { - broadcastExpanded: (node) => { - if (!props.accordion) - return; - for (const childNode of currentNodeMap.children) { - childNode.treeNodeExpand(node); - } - } - }; - } - - const dragEventsKey = Symbol("dragEvents"); - function useDragNodeHandler({ props, ctx, el$, dropIndicator$, store }) { - const ns = useNamespace("tree"); - const dragState = vue.ref({ - showDropIndicator: false, - draggingNode: null, - dropNode: null, - allowDrop: true, - dropType: null - }); - const treeNodeDragStart = ({ event, treeNode }) => { - if (isFunction$1(props.allowDrag) && !props.allowDrag(treeNode.node)) { - event.preventDefault(); - return false; - } - event.dataTransfer.effectAllowed = "move"; - try { - event.dataTransfer.setData("text/plain", ""); - } catch (e) { - } - dragState.value.draggingNode = treeNode; - ctx.emit("node-drag-start", treeNode.node, event); - }; - const treeNodeDragOver = ({ event, treeNode }) => { - const dropNode = treeNode; - const oldDropNode = dragState.value.dropNode; - if (oldDropNode && oldDropNode.node.id !== dropNode.node.id) { - removeClass(oldDropNode.$el, ns.is("drop-inner")); - } - const draggingNode = dragState.value.draggingNode; - if (!draggingNode || !dropNode) - return; - let dropPrev = true; - let dropInner = true; - let dropNext = true; - let userAllowDropInner = true; - if (isFunction$1(props.allowDrop)) { - dropPrev = props.allowDrop(draggingNode.node, dropNode.node, "prev"); - userAllowDropInner = dropInner = props.allowDrop(draggingNode.node, dropNode.node, "inner"); - dropNext = props.allowDrop(draggingNode.node, dropNode.node, "next"); - } - event.dataTransfer.dropEffect = dropInner || dropPrev || dropNext ? "move" : "none"; - if ((dropPrev || dropInner || dropNext) && (oldDropNode == null ? void 0 : oldDropNode.node.id) !== dropNode.node.id) { - if (oldDropNode) { - ctx.emit("node-drag-leave", draggingNode.node, oldDropNode.node, event); - } - ctx.emit("node-drag-enter", draggingNode.node, dropNode.node, event); - } - if (dropPrev || dropInner || dropNext) { - dragState.value.dropNode = dropNode; - } else { - dragState.value.dropNode = null; - } - if (dropNode.node.nextSibling === draggingNode.node) { - dropNext = false; - } - if (dropNode.node.previousSibling === draggingNode.node) { - dropPrev = false; - } - if (dropNode.node.contains(draggingNode.node, false)) { - dropInner = false; - } - if (draggingNode.node === dropNode.node || draggingNode.node.contains(dropNode.node)) { - dropPrev = false; - dropInner = false; - dropNext = false; - } - const targetPosition = dropNode.$el.querySelector(`.${ns.be("node", "content")}`).getBoundingClientRect(); - const treePosition = el$.value.getBoundingClientRect(); - let dropType; - const prevPercent = dropPrev ? dropInner ? 0.25 : dropNext ? 0.45 : 1 : -1; - const nextPercent = dropNext ? dropInner ? 0.75 : dropPrev ? 0.55 : 0 : 1; - let indicatorTop = -9999; - const distance = event.clientY - targetPosition.top; - if (distance < targetPosition.height * prevPercent) { - dropType = "before"; - } else if (distance > targetPosition.height * nextPercent) { - dropType = "after"; - } else if (dropInner) { - dropType = "inner"; - } else { - dropType = "none"; - } - const iconPosition = dropNode.$el.querySelector(`.${ns.be("node", "expand-icon")}`).getBoundingClientRect(); - const dropIndicator = dropIndicator$.value; - if (dropType === "before") { - indicatorTop = iconPosition.top - treePosition.top; - } else if (dropType === "after") { - indicatorTop = iconPosition.bottom - treePosition.top; - } - dropIndicator.style.top = `${indicatorTop}px`; - dropIndicator.style.left = `${iconPosition.right - treePosition.left}px`; - if (dropType === "inner") { - addClass(dropNode.$el, ns.is("drop-inner")); - } else { - removeClass(dropNode.$el, ns.is("drop-inner")); - } - dragState.value.showDropIndicator = dropType === "before" || dropType === "after"; - dragState.value.allowDrop = dragState.value.showDropIndicator || userAllowDropInner; - dragState.value.dropType = dropType; - ctx.emit("node-drag-over", draggingNode.node, dropNode.node, event); - }; - const treeNodeDragEnd = (event) => { - const { draggingNode, dropType, dropNode } = dragState.value; - event.preventDefault(); - if (event.dataTransfer) { - event.dataTransfer.dropEffect = "move"; - } - if (draggingNode && dropNode) { - const draggingNodeCopy = { data: draggingNode.node.data }; - if (dropType !== "none") { - draggingNode.node.remove(); - } - if (dropType === "before") { - dropNode.node.parent.insertBefore(draggingNodeCopy, dropNode.node); - } else if (dropType === "after") { - dropNode.node.parent.insertAfter(draggingNodeCopy, dropNode.node); - } else if (dropType === "inner") { - dropNode.node.insertChild(draggingNodeCopy); - } - if (dropType !== "none") { - store.value.registerNode(draggingNodeCopy); - if (store.value.key) { - draggingNode.node.eachNode((node) => { - var _a; - (_a = store.value.nodesMap[node.data[store.value.key]]) == null ? void 0 : _a.setChecked(node.checked, !store.value.checkStrictly); - }); - } - } - removeClass(dropNode.$el, ns.is("drop-inner")); - ctx.emit("node-drag-end", draggingNode.node, dropNode.node, dropType, event); - if (dropType !== "none") { - ctx.emit("node-drop", draggingNode.node, dropNode.node, dropType, event); - } - } - if (draggingNode && !dropNode) { - ctx.emit("node-drag-end", draggingNode.node, null, dropType, event); - } - dragState.value.showDropIndicator = false; - dragState.value.draggingNode = null; - dragState.value.dropNode = null; - dragState.value.allowDrop = true; - }; - vue.provide(dragEventsKey, { - treeNodeDragStart, - treeNodeDragOver, - treeNodeDragEnd - }); - return { - dragState - }; - } - - const _sfc_main$l = vue.defineComponent({ - name: "ElTreeNode", - components: { - ElCollapseTransition, - ElCheckbox, - NodeContent, - ElIcon, - Loading: loading_default - }, - props: { - node: { - type: Node$1, - default: () => ({}) - }, - props: { - type: Object, - default: () => ({}) - }, - accordion: Boolean, - renderContent: Function, - renderAfterExpand: Boolean, - showCheckbox: { - type: Boolean, - default: false - } - }, - emits: ["node-expand"], - setup(props, ctx) { - const ns = useNamespace("tree"); - const { broadcastExpanded } = useNodeExpandEventBroadcast(props); - const tree = vue.inject("RootTree"); - const expanded = vue.ref(false); - const childNodeRendered = vue.ref(false); - const oldChecked = vue.ref(null); - const oldIndeterminate = vue.ref(null); - const node$ = vue.ref(null); - const dragEvents = vue.inject(dragEventsKey); - const instance = vue.getCurrentInstance(); - vue.provide("NodeInstance", instance); - if (props.node.expanded) { - expanded.value = true; - childNodeRendered.value = true; - } - const childrenKey = tree.props.props["children"] || "children"; - vue.watch(() => { - const children = props.node.data[childrenKey]; - return children && [...children]; - }, () => { - props.node.updateChildren(); - }); - vue.watch(() => props.node.indeterminate, (val) => { - handleSelectChange(props.node.checked, val); - }); - vue.watch(() => props.node.checked, (val) => { - handleSelectChange(val, props.node.indeterminate); - }); - vue.watch(() => props.node.childNodes.length, () => props.node.reInitChecked()); - vue.watch(() => props.node.expanded, (val) => { - vue.nextTick(() => expanded.value = val); - if (val) { - childNodeRendered.value = true; - } - }); - const getNodeKey$1 = (node) => { - return getNodeKey(tree.props.nodeKey, node.data); - }; - const getNodeClass = (node) => { - const nodeClassFunc = props.props.class; - if (!nodeClassFunc) { - return {}; - } - let className; - if (isFunction$1(nodeClassFunc)) { - const { data } = node; - className = nodeClassFunc(data, node); - } else { - className = nodeClassFunc; - } - if (isString$1(className)) { - return { [className]: true }; - } else { - return className; - } - }; - const handleSelectChange = (checked, indeterminate) => { - if (oldChecked.value !== checked || oldIndeterminate.value !== indeterminate) { - tree.ctx.emit("check-change", props.node.data, checked, indeterminate); - } - oldChecked.value = checked; - oldIndeterminate.value = indeterminate; - }; - const handleClick = (e) => { - handleCurrentChange(tree.store, tree.ctx.emit, () => { - var _a; - const nodeKeyProp = (_a = tree == null ? void 0 : tree.props) == null ? void 0 : _a.nodeKey; - if (nodeKeyProp) { - const curNodeKey = getNodeKey$1(props.node); - tree.store.value.setCurrentNodeKey(curNodeKey); - } else { - tree.store.value.setCurrentNode(props.node); - } - }); - tree.currentNode.value = props.node; - if (tree.props.expandOnClickNode) { - handleExpandIconClick(); - } - if (tree.props.checkOnClickNode && !props.node.disabled) { - handleCheckChange(!props.node.checked); - } - tree.ctx.emit("node-click", props.node.data, props.node, instance, e); - }; - const handleContextMenu = (event) => { - if (tree.instance.vnode.props["onNodeContextmenu"]) { - event.stopPropagation(); - event.preventDefault(); - } - tree.ctx.emit("node-contextmenu", event, props.node.data, props.node, instance); - }; - const handleExpandIconClick = () => { - if (props.node.isLeaf) - return; - if (expanded.value) { - tree.ctx.emit("node-collapse", props.node.data, props.node, instance); - props.node.collapse(); - } else { - props.node.expand(() => { - ctx.emit("node-expand", props.node.data, props.node, instance); - }); - } - }; - const handleCheckChange = (value) => { - props.node.setChecked(value, !(tree == null ? void 0 : tree.props.checkStrictly)); - vue.nextTick(() => { - const store = tree.store.value; - tree.ctx.emit("check", props.node.data, { - checkedNodes: store.getCheckedNodes(), - checkedKeys: store.getCheckedKeys(), - halfCheckedNodes: store.getHalfCheckedNodes(), - halfCheckedKeys: store.getHalfCheckedKeys() - }); - }); - }; - const handleChildNodeExpand = (nodeData, node, instance2) => { - broadcastExpanded(node); - tree.ctx.emit("node-expand", nodeData, node, instance2); - }; - const handleDragStart = (event) => { - if (!tree.props.draggable) - return; - dragEvents.treeNodeDragStart({ event, treeNode: props }); - }; - const handleDragOver = (event) => { - event.preventDefault(); - if (!tree.props.draggable) - return; - dragEvents.treeNodeDragOver({ - event, - treeNode: { $el: node$.value, node: props.node } - }); - }; - const handleDrop = (event) => { - event.preventDefault(); - }; - const handleDragEnd = (event) => { - if (!tree.props.draggable) - return; - dragEvents.treeNodeDragEnd(event); - }; - return { - ns, - node$, - tree, - expanded, - childNodeRendered, - oldChecked, - oldIndeterminate, - getNodeKey: getNodeKey$1, - getNodeClass, - handleSelectChange, - handleClick, - handleContextMenu, - handleExpandIconClick, - handleCheckChange, - handleChildNodeExpand, - handleDragStart, - handleDragOver, - handleDrop, - handleDragEnd, - CaretRight: caret_right_default - }; - } - }); - function _sfc_render$2(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_icon = vue.resolveComponent("el-icon"); - const _component_el_checkbox = vue.resolveComponent("el-checkbox"); - const _component_loading = vue.resolveComponent("loading"); - const _component_node_content = vue.resolveComponent("node-content"); - const _component_el_tree_node = vue.resolveComponent("el-tree-node"); - const _component_el_collapse_transition = vue.resolveComponent("el-collapse-transition"); - return vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - ref: "node$", - class: vue.normalizeClass([ - _ctx.ns.b("node"), - _ctx.ns.is("expanded", _ctx.expanded), - _ctx.ns.is("current", _ctx.node.isCurrent), - _ctx.ns.is("hidden", !_ctx.node.visible), - _ctx.ns.is("focusable", !_ctx.node.disabled), - _ctx.ns.is("checked", !_ctx.node.disabled && _ctx.node.checked), - _ctx.getNodeClass(_ctx.node) - ]), - role: "treeitem", - tabindex: "-1", - "aria-expanded": _ctx.expanded, - "aria-disabled": _ctx.node.disabled, - "aria-checked": _ctx.node.checked, - draggable: _ctx.tree.props.draggable, - "data-key": _ctx.getNodeKey(_ctx.node), - onClick: vue.withModifiers(_ctx.handleClick, ["stop"]), - onContextmenu: _ctx.handleContextMenu, - onDragstart: vue.withModifiers(_ctx.handleDragStart, ["stop"]), - onDragover: vue.withModifiers(_ctx.handleDragOver, ["stop"]), - onDragend: vue.withModifiers(_ctx.handleDragEnd, ["stop"]), - onDrop: vue.withModifiers(_ctx.handleDrop, ["stop"]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.be("node", "content")), - style: vue.normalizeStyle({ paddingLeft: (_ctx.node.level - 1) * _ctx.tree.props.indent + "px" }) - }, [ - _ctx.tree.props.icon || _ctx.CaretRight ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 0, - class: vue.normalizeClass([ - _ctx.ns.be("node", "expand-icon"), - _ctx.ns.is("leaf", _ctx.node.isLeaf), - { - expanded: !_ctx.node.isLeaf && _ctx.expanded - } - ]), - onClick: vue.withModifiers(_ctx.handleExpandIconClick, ["stop"]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.tree.props.icon || _ctx.CaretRight))) - ]), - _: 1 - }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true), - _ctx.showCheckbox ? (vue.openBlock(), vue.createBlock(_component_el_checkbox, { - key: 1, - "model-value": _ctx.node.checked, - indeterminate: _ctx.node.indeterminate, - disabled: !!_ctx.node.disabled, - onClick: vue.withModifiers(() => { - }, ["stop"]), - onChange: _ctx.handleCheckChange - }, null, 8, ["model-value", "indeterminate", "disabled", "onClick", "onChange"])) : vue.createCommentVNode("v-if", true), - _ctx.node.loading ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 2, - class: vue.normalizeClass([_ctx.ns.be("node", "loading-icon"), _ctx.ns.is("loading")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_loading) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true), - vue.createVNode(_component_node_content, { - node: _ctx.node, - "render-content": _ctx.renderContent - }, null, 8, ["node", "render-content"]) - ], 6), - vue.createVNode(_component_el_collapse_transition, null, { - default: vue.withCtx(() => [ - !_ctx.renderAfterExpand || _ctx.childNodeRendered ? vue.withDirectives((vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(_ctx.ns.be("node", "children")), - role: "group", - "aria-expanded": _ctx.expanded - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.node.childNodes, (child) => { - return vue.openBlock(), vue.createBlock(_component_el_tree_node, { - key: _ctx.getNodeKey(child), - "render-content": _ctx.renderContent, - "render-after-expand": _ctx.renderAfterExpand, - "show-checkbox": _ctx.showCheckbox, - node: child, - accordion: _ctx.accordion, - props: _ctx.props, - onNodeExpand: _ctx.handleChildNodeExpand - }, null, 8, ["render-content", "render-after-expand", "show-checkbox", "node", "accordion", "props", "onNodeExpand"]); - }), 128)) - ], 10, ["aria-expanded"])), [ - [vue.vShow, _ctx.expanded] - ]) : vue.createCommentVNode("v-if", true) - ]), - _: 1 - }) - ], 42, ["aria-expanded", "aria-disabled", "aria-checked", "draggable", "data-key", "onClick", "onContextmenu", "onDragstart", "onDragover", "onDragend", "onDrop"])), [ - [vue.vShow, _ctx.node.visible] - ]); - } - var ElTreeNode$1 = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["render", _sfc_render$2], ["__file", "tree-node.vue"]]); - - function useKeydown({ el$ }, store) { - const ns = useNamespace("tree"); - const treeItems = vue.shallowRef([]); - const checkboxItems = vue.shallowRef([]); - vue.onMounted(() => { - initTabIndex(); - }); - vue.onUpdated(() => { - treeItems.value = Array.from(el$.value.querySelectorAll("[role=treeitem]")); - checkboxItems.value = Array.from(el$.value.querySelectorAll("input[type=checkbox]")); - }); - vue.watch(checkboxItems, (val) => { - val.forEach((checkbox) => { - checkbox.setAttribute("tabindex", "-1"); - }); - }); - const handleKeydown = (ev) => { - const currentItem = ev.target; - if (!currentItem.className.includes(ns.b("node"))) - return; - const code = ev.code; - treeItems.value = Array.from(el$.value.querySelectorAll(`.${ns.is("focusable")}[role=treeitem]`)); - const currentIndex = treeItems.value.indexOf(currentItem); - let nextIndex; - if ([EVENT_CODE.up, EVENT_CODE.down].includes(code)) { - ev.preventDefault(); - if (code === EVENT_CODE.up) { - nextIndex = currentIndex === -1 ? 0 : currentIndex !== 0 ? currentIndex - 1 : treeItems.value.length - 1; - const startIndex = nextIndex; - while (true) { - if (store.value.getNode(treeItems.value[nextIndex].dataset.key).canFocus) - break; - nextIndex--; - if (nextIndex === startIndex) { - nextIndex = -1; - break; - } - if (nextIndex < 0) { - nextIndex = treeItems.value.length - 1; - } - } - } else { - nextIndex = currentIndex === -1 ? 0 : currentIndex < treeItems.value.length - 1 ? currentIndex + 1 : 0; - const startIndex = nextIndex; - while (true) { - if (store.value.getNode(treeItems.value[nextIndex].dataset.key).canFocus) - break; - nextIndex++; - if (nextIndex === startIndex) { - nextIndex = -1; - break; - } - if (nextIndex >= treeItems.value.length) { - nextIndex = 0; - } - } - } - nextIndex !== -1 && treeItems.value[nextIndex].focus(); - } - if ([EVENT_CODE.left, EVENT_CODE.right].includes(code)) { - ev.preventDefault(); - currentItem.click(); - } - const hasInput = currentItem.querySelector('[type="checkbox"]'); - if ([EVENT_CODE.enter, EVENT_CODE.numpadEnter, EVENT_CODE.space].includes(code) && hasInput) { - ev.preventDefault(); - hasInput.click(); - } - }; - useEventListener(el$, "keydown", handleKeydown); - const initTabIndex = () => { - var _a; - treeItems.value = Array.from(el$.value.querySelectorAll(`.${ns.is("focusable")}[role=treeitem]`)); - checkboxItems.value = Array.from(el$.value.querySelectorAll("input[type=checkbox]")); - const checkedItem = el$.value.querySelectorAll(`.${ns.is("checked")}[role=treeitem]`); - if (checkedItem.length) { - checkedItem[0].setAttribute("tabindex", "0"); - return; - } - (_a = treeItems.value[0]) == null ? void 0 : _a.setAttribute("tabindex", "0"); - }; - } - - const _sfc_main$k = vue.defineComponent({ - name: "ElTree", - components: { ElTreeNode: ElTreeNode$1 }, - props: { - data: { - type: Array, - default: () => [] - }, - emptyText: { - type: String - }, - renderAfterExpand: { - type: Boolean, - default: true - }, - nodeKey: String, - checkStrictly: Boolean, - defaultExpandAll: Boolean, - expandOnClickNode: { - type: Boolean, - default: true - }, - checkOnClickNode: Boolean, - checkDescendants: { - type: Boolean, - default: false - }, - autoExpandParent: { - type: Boolean, - default: true - }, - defaultCheckedKeys: Array, - defaultExpandedKeys: Array, - currentNodeKey: [String, Number], - renderContent: Function, - showCheckbox: { - type: Boolean, - default: false - }, - draggable: { - type: Boolean, - default: false - }, - allowDrag: Function, - allowDrop: Function, - props: { - type: Object, - default: () => ({ - children: "children", - label: "label", - disabled: "disabled" - }) - }, - lazy: { - type: Boolean, - default: false - }, - highlightCurrent: Boolean, - load: Function, - filterNodeMethod: Function, - accordion: Boolean, - indent: { - type: Number, - default: 18 - }, - icon: { - type: iconPropType - } - }, - emits: [ - "check-change", - "current-change", - "node-click", - "node-contextmenu", - "node-collapse", - "node-expand", - "check", - "node-drag-start", - "node-drag-end", - "node-drop", - "node-drag-leave", - "node-drag-enter", - "node-drag-over" - ], - setup(props, ctx) { - const { t } = useLocale(); - const ns = useNamespace("tree"); - const selectInfo = vue.inject(selectKey, null); - const store = vue.ref(new TreeStore({ - key: props.nodeKey, - data: props.data, - lazy: props.lazy, - props: props.props, - load: props.load, - currentNodeKey: props.currentNodeKey, - checkStrictly: props.checkStrictly, - checkDescendants: props.checkDescendants, - defaultCheckedKeys: props.defaultCheckedKeys, - defaultExpandedKeys: props.defaultExpandedKeys, - autoExpandParent: props.autoExpandParent, - defaultExpandAll: props.defaultExpandAll, - filterNodeMethod: props.filterNodeMethod - })); - store.value.initialize(); - const root = vue.ref(store.value.root); - const currentNode = vue.ref(null); - const el$ = vue.ref(null); - const dropIndicator$ = vue.ref(null); - const { broadcastExpanded } = useNodeExpandEventBroadcast(props); - const { dragState } = useDragNodeHandler({ - props, - ctx, - el$, - dropIndicator$, - store - }); - useKeydown({ el$ }, store); - const isEmpty = vue.computed(() => { - const { childNodes } = root.value; - const hasFilteredOptions = selectInfo ? selectInfo.hasFilteredOptions !== 0 : false; - return (!childNodes || childNodes.length === 0 || childNodes.every(({ visible }) => !visible)) && !hasFilteredOptions; - }); - vue.watch(() => props.currentNodeKey, (newVal) => { - store.value.setCurrentNodeKey(newVal); - }); - vue.watch(() => props.defaultCheckedKeys, (newVal) => { - store.value.setDefaultCheckedKey(newVal); - }); - vue.watch(() => props.defaultExpandedKeys, (newVal) => { - store.value.setDefaultExpandedKeys(newVal); - }); - vue.watch(() => props.data, (newVal) => { - store.value.setData(newVal); - }, { deep: true }); - vue.watch(() => props.checkStrictly, (newVal) => { - store.value.checkStrictly = newVal; - }); - const filter = (value) => { - if (!props.filterNodeMethod) - throw new Error("[Tree] filterNodeMethod is required when filter"); - store.value.filter(value); - }; - const getNodeKey$1 = (node) => { - return getNodeKey(props.nodeKey, node.data); - }; - const getNodePath = (data) => { - if (!props.nodeKey) - throw new Error("[Tree] nodeKey is required in getNodePath"); - const node = store.value.getNode(data); - if (!node) - return []; - const path = [node.data]; - let parent = node.parent; - while (parent && parent !== root.value) { - path.push(parent.data); - parent = parent.parent; - } - return path.reverse(); - }; - const getCheckedNodes = (leafOnly, includeHalfChecked) => { - return store.value.getCheckedNodes(leafOnly, includeHalfChecked); - }; - const getCheckedKeys = (leafOnly) => { - return store.value.getCheckedKeys(leafOnly); - }; - const getCurrentNode = () => { - const currentNode2 = store.value.getCurrentNode(); - return currentNode2 ? currentNode2.data : null; - }; - const getCurrentKey = () => { - if (!props.nodeKey) - throw new Error("[Tree] nodeKey is required in getCurrentKey"); - const currentNode2 = getCurrentNode(); - return currentNode2 ? currentNode2[props.nodeKey] : null; - }; - const setCheckedNodes = (nodes, leafOnly) => { - if (!props.nodeKey) - throw new Error("[Tree] nodeKey is required in setCheckedNodes"); - store.value.setCheckedNodes(nodes, leafOnly); - }; - const setCheckedKeys = (keys, leafOnly) => { - if (!props.nodeKey) - throw new Error("[Tree] nodeKey is required in setCheckedKeys"); - store.value.setCheckedKeys(keys, leafOnly); - }; - const setChecked = (data, checked, deep) => { - store.value.setChecked(data, checked, deep); - }; - const getHalfCheckedNodes = () => { - return store.value.getHalfCheckedNodes(); - }; - const getHalfCheckedKeys = () => { - return store.value.getHalfCheckedKeys(); - }; - const setCurrentNode = (node, shouldAutoExpandParent = true) => { - if (!props.nodeKey) - throw new Error("[Tree] nodeKey is required in setCurrentNode"); - handleCurrentChange(store, ctx.emit, () => { - broadcastExpanded(node); - store.value.setUserCurrentNode(node, shouldAutoExpandParent); - }); - }; - const setCurrentKey = (key, shouldAutoExpandParent = true) => { - if (!props.nodeKey) - throw new Error("[Tree] nodeKey is required in setCurrentKey"); - handleCurrentChange(store, ctx.emit, () => { - broadcastExpanded(); - store.value.setCurrentNodeKey(key, shouldAutoExpandParent); - }); - }; - const getNode = (data) => { - return store.value.getNode(data); - }; - const remove = (data) => { - store.value.remove(data); - }; - const append = (data, parentNode) => { - store.value.append(data, parentNode); - }; - const insertBefore = (data, refNode) => { - store.value.insertBefore(data, refNode); - }; - const insertAfter = (data, refNode) => { - store.value.insertAfter(data, refNode); - }; - const handleNodeExpand = (nodeData, node, instance) => { - broadcastExpanded(node); - ctx.emit("node-expand", nodeData, node, instance); - }; - const updateKeyChildren = (key, data) => { - if (!props.nodeKey) - throw new Error("[Tree] nodeKey is required in updateKeyChild"); - store.value.updateChildren(key, data); - }; - vue.provide("RootTree", { - ctx, - props, - store, - root, - currentNode, - instance: vue.getCurrentInstance() - }); - vue.provide(formItemContextKey, void 0); - return { - ns, - store, - root, - currentNode, - dragState, - el$, - dropIndicator$, - isEmpty, - filter, - getNodeKey: getNodeKey$1, - getNodePath, - getCheckedNodes, - getCheckedKeys, - getCurrentNode, - getCurrentKey, - setCheckedNodes, - setCheckedKeys, - setChecked, - getHalfCheckedNodes, - getHalfCheckedKeys, - setCurrentNode, - setCurrentKey, - t, - getNode, - remove, - append, - insertBefore, - insertAfter, - handleNodeExpand, - updateKeyChildren - }; - } - }); - function _sfc_render$1(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_tree_node = vue.resolveComponent("el-tree-node"); - return vue.openBlock(), vue.createElementBlock("div", { - ref: "el$", - class: vue.normalizeClass([ - _ctx.ns.b(), - _ctx.ns.is("dragging", !!_ctx.dragState.draggingNode), - _ctx.ns.is("drop-not-allow", !_ctx.dragState.allowDrop), - _ctx.ns.is("drop-inner", _ctx.dragState.dropType === "inner"), - { [_ctx.ns.m("highlight-current")]: _ctx.highlightCurrent } - ]), - role: "tree" - }, [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.root.childNodes, (child) => { - return vue.openBlock(), vue.createBlock(_component_el_tree_node, { - key: _ctx.getNodeKey(child), - node: child, - props: _ctx.props, - accordion: _ctx.accordion, - "render-after-expand": _ctx.renderAfterExpand, - "show-checkbox": _ctx.showCheckbox, - "render-content": _ctx.renderContent, - onNodeExpand: _ctx.handleNodeExpand - }, null, 8, ["node", "props", "accordion", "render-after-expand", "show-checkbox", "render-content", "onNodeExpand"]); - }), 128)), - _ctx.isEmpty ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(_ctx.ns.e("empty-block")) - }, [ - vue.renderSlot(_ctx.$slots, "empty", {}, () => { - var _a; - return [ - vue.createElementVNode("span", { - class: vue.normalizeClass(_ctx.ns.e("empty-text")) - }, vue.toDisplayString((_a = _ctx.emptyText) != null ? _a : _ctx.t("el.tree.emptyText")), 3) - ]; - }) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.withDirectives(vue.createElementVNode("div", { - ref: "dropIndicator$", - class: vue.normalizeClass(_ctx.ns.e("drop-indicator")) - }, null, 2), [ - [vue.vShow, _ctx.dragState.showDropIndicator] - ]) - ], 2); - } - var Tree = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["render", _sfc_render$1], ["__file", "tree.vue"]]); - - const ElTree = withInstall(Tree); - - const useSelect = (props, { attrs, emit }, { - select, - tree, - key - }) => { - const ns = useNamespace("tree-select"); - vue.watch(() => props.data, () => { - if (props.filterable) { - vue.nextTick(() => { - var _a, _b; - (_b = tree.value) == null ? void 0 : _b.filter((_a = select.value) == null ? void 0 : _a.states.inputValue); - }); - } - }, { flush: "post" }); - const result = { - ...pick(vue.toRefs(props), Object.keys(ElSelect.props)), - ...attrs, - "onUpdate:modelValue": (value) => emit(UPDATE_MODEL_EVENT, value), - valueKey: key, - popperClass: vue.computed(() => { - const classes = [ns.e("popper")]; - if (props.popperClass) - classes.push(props.popperClass); - return classes.join(" "); - }), - filterMethod: (keyword = "") => { - var _a; - if (props.filterMethod) { - props.filterMethod(keyword); - } else if (props.remoteMethod) { - props.remoteMethod(keyword); - } else { - (_a = tree.value) == null ? void 0 : _a.filter(keyword); - } - } - }; - return result; - }; - - const component = vue.defineComponent({ - extends: ElOption, - setup(props, ctx) { - const result = ElOption.setup(props, ctx); - delete result.selectOptionClick; - const vm = vue.getCurrentInstance().proxy; - vue.nextTick(() => { - if (!result.select.states.cachedOptions.get(vm.value)) { - result.select.onOptionCreate(vm); - } - }); - vue.watch(() => ctx.attrs.visible, (val) => { - result.states.visible = val; - }, { - immediate: true - }); - return result; - }, - methods: { - selectOptionClick() { - this.$el.parentElement.click(); - } - } - }); - var TreeSelectOption = component; - - function isValidValue(val) { - return val || val === 0; - } - function isValidArray(val) { - return isArray$1(val) && val.length; - } - function toValidArray(val) { - return isArray$1(val) ? val : isValidValue(val) ? [val] : []; - } - function treeFind(treeData, findCallback, getChildren, resultCallback, parent) { - for (let i = 0; i < treeData.length; i++) { - const data = treeData[i]; - if (findCallback(data, i, treeData, parent)) { - return resultCallback ? resultCallback(data, i, treeData, parent) : data; - } else { - const children = getChildren(data); - if (isValidArray(children)) { - const find = treeFind(children, findCallback, getChildren, resultCallback, data); - if (find) - return find; - } - } - } - } - function treeEach(treeData, callback, getChildren, parent) { - for (let i = 0; i < treeData.length; i++) { - const data = treeData[i]; - callback(data, i, treeData, parent); - const children = getChildren(data); - if (isValidArray(children)) { - treeEach(children, callback, getChildren, data); - } - } - } - - const useTree$1 = (props, { attrs, slots, emit }, { - select, - tree, - key - }) => { - vue.watch(() => props.modelValue, () => { - if (props.showCheckbox) { - vue.nextTick(() => { - const treeInstance = tree.value; - if (treeInstance && !isEqual$1(treeInstance.getCheckedKeys(), toValidArray(props.modelValue))) { - treeInstance.setCheckedKeys(toValidArray(props.modelValue)); - } - }); - } - }, { - immediate: true, - deep: true - }); - const propsMap = vue.computed(() => ({ - value: key.value, - label: "label", - children: "children", - disabled: "disabled", - isLeaf: "isLeaf", - ...props.props - })); - const getNodeValByProp = (prop, data) => { - var _a; - const propVal = propsMap.value[prop]; - if (isFunction$1(propVal)) { - return propVal(data, (_a = tree.value) == null ? void 0 : _a.getNode(getNodeValByProp("value", data))); - } else { - return data[propVal]; - } - }; - const defaultExpandedParentKeys = toValidArray(props.modelValue).map((value) => { - return treeFind(props.data || [], (data) => getNodeValByProp("value", data) === value, (data) => getNodeValByProp("children", data), (data, index, array, parent) => parent && getNodeValByProp("value", parent)); - }).filter((item) => isValidValue(item)); - const cacheOptions = vue.computed(() => { - if (!props.renderAfterExpand && !props.lazy) - return []; - const options = []; - treeEach(props.data.concat(props.cacheData), (node) => { - const value = getNodeValByProp("value", node); - options.push({ - value, - currentLabel: getNodeValByProp("label", node), - isDisabled: getNodeValByProp("disabled", node) - }); - }, (data) => getNodeValByProp("children", data)); - return options; - }); - const getChildCheckedKeys = () => { - var _a; - return (_a = tree.value) == null ? void 0 : _a.getCheckedKeys().filter((checkedKey) => { - var _a2; - const node = (_a2 = tree.value) == null ? void 0 : _a2.getNode(checkedKey); - return !isNil(node) && isEmpty(node.childNodes); - }); - }; - return { - ...pick(vue.toRefs(props), Object.keys(ElTree.props)), - ...attrs, - nodeKey: key, - expandOnClickNode: vue.computed(() => { - return !props.checkStrictly && props.expandOnClickNode; - }), - defaultExpandedKeys: vue.computed(() => { - return props.defaultExpandedKeys ? props.defaultExpandedKeys.concat(defaultExpandedParentKeys) : defaultExpandedParentKeys; - }), - renderContent: (h, { node, data, store }) => { - return h(TreeSelectOption, { - value: getNodeValByProp("value", data), - label: getNodeValByProp("label", data), - disabled: getNodeValByProp("disabled", data), - visible: node.visible - }, props.renderContent ? () => props.renderContent(h, { node, data, store }) : slots.default ? () => slots.default({ node, data, store }) : void 0); - }, - filterNodeMethod: (value, data, node) => { - if (props.filterNodeMethod) - return props.filterNodeMethod(value, data, node); - if (!value) - return true; - const regexp = new RegExp(escapeStringRegexp(value), "i"); - return regexp.test(getNodeValByProp("label", data) || ""); - }, - onNodeClick: (data, node, e) => { - var _a, _b, _c, _d; - (_a = attrs.onNodeClick) == null ? void 0 : _a.call(attrs, data, node, e); - if (props.showCheckbox && props.checkOnClickNode) - return; - if (!props.showCheckbox && (props.checkStrictly || node.isLeaf)) { - if (!getNodeValByProp("disabled", data)) { - const option = (_b = select.value) == null ? void 0 : _b.states.options.get(getNodeValByProp("value", data)); - (_c = select.value) == null ? void 0 : _c.handleOptionSelect(option); - } - } else if (props.expandOnClickNode) { - e.proxy.handleExpandIconClick(); - } - (_d = select.value) == null ? void 0 : _d.focus(); - }, - onCheck: (data, params) => { - var _a; - if (!props.showCheckbox) - return; - const dataValue = getNodeValByProp("value", data); - const dataMap = {}; - treeEach([tree.value.store.root], (node) => dataMap[node.key] = node, (node) => node.childNodes); - const uncachedCheckedKeys = params.checkedKeys; - const cachedKeys = props.multiple ? toValidArray(props.modelValue).filter((item) => !(item in dataMap) && !uncachedCheckedKeys.includes(item)) : []; - const checkedKeys = cachedKeys.concat(uncachedCheckedKeys); - if (props.checkStrictly) { - emit(UPDATE_MODEL_EVENT, props.multiple ? checkedKeys : checkedKeys.includes(dataValue) ? dataValue : void 0); - } else { - if (props.multiple) { - const childKeys = getChildCheckedKeys(); - emit(UPDATE_MODEL_EVENT, cachedKeys.concat(childKeys)); - } else { - const firstLeaf = treeFind([data], (data2) => !isValidArray(getNodeValByProp("children", data2)) && !getNodeValByProp("disabled", data2), (data2) => getNodeValByProp("children", data2)); - const firstLeafKey = firstLeaf ? getNodeValByProp("value", firstLeaf) : void 0; - const hasCheckedChild = isValidValue(props.modelValue) && !!treeFind([data], (data2) => getNodeValByProp("value", data2) === props.modelValue, (data2) => getNodeValByProp("children", data2)); - emit(UPDATE_MODEL_EVENT, firstLeafKey === props.modelValue || hasCheckedChild ? void 0 : firstLeafKey); - } - } - vue.nextTick(() => { - var _a2; - const checkedKeys2 = toValidArray(props.modelValue); - tree.value.setCheckedKeys(checkedKeys2); - (_a2 = attrs.onCheck) == null ? void 0 : _a2.call(attrs, data, { - checkedKeys: tree.value.getCheckedKeys(), - checkedNodes: tree.value.getCheckedNodes(), - halfCheckedKeys: tree.value.getHalfCheckedKeys(), - halfCheckedNodes: tree.value.getHalfCheckedNodes() - }); - }); - (_a = select.value) == null ? void 0 : _a.focus(); - }, - onNodeExpand: (data, node, e) => { - var _a; - (_a = attrs.onNodeExpand) == null ? void 0 : _a.call(attrs, data, node, e); - vue.nextTick(() => { - if (!props.checkStrictly && props.lazy && props.multiple && node.checked) { - const dataMap = {}; - const uncachedCheckedKeys = tree.value.getCheckedKeys(); - treeEach([tree.value.store.root], (node2) => dataMap[node2.key] = node2, (node2) => node2.childNodes); - const cachedKeys = toValidArray(props.modelValue).filter((item) => !(item in dataMap) && !uncachedCheckedKeys.includes(item)); - const childKeys = getChildCheckedKeys(); - emit(UPDATE_MODEL_EVENT, cachedKeys.concat(childKeys)); - } - }); - }, - cacheOptions - }; - }; - - var CacheOptions = vue.defineComponent({ - props: { - data: { - type: Array, - default: () => [] - } - }, - setup(props) { - const select = vue.inject(selectKey); - vue.watch(() => props.data, () => { - var _a; - props.data.forEach((item) => { - if (!select.states.cachedOptions.has(item.value)) { - select.states.cachedOptions.set(item.value, item); - } - }); - const inputs = ((_a = select.selectRef) == null ? void 0 : _a.querySelectorAll("input")) || []; - if (isClient && !Array.from(inputs).includes(document.activeElement)) { - select.setSelected(); - } - }, { flush: "post", immediate: true }); - return () => void 0; - } - }); - - const _sfc_main$j = vue.defineComponent({ - name: "ElTreeSelect", - inheritAttrs: false, - props: { - ...ElSelect.props, - ...ElTree.props, - cacheData: { - type: Array, - default: () => [] - } - }, - setup(props, context) { - const { slots, expose } = context; - const select = vue.ref(); - const tree = vue.ref(); - const key = vue.computed(() => props.nodeKey || props.valueKey || "value"); - const selectProps = useSelect(props, context, { select, tree, key }); - const { cacheOptions, ...treeProps } = useTree$1(props, context, { - select, - tree, - key - }); - const methods = vue.reactive({}); - expose(methods); - vue.onMounted(() => { - Object.assign(methods, { - ...pick(tree.value, [ - "filter", - "updateKeyChildren", - "getCheckedNodes", - "setCheckedNodes", - "getCheckedKeys", - "setCheckedKeys", - "setChecked", - "getHalfCheckedNodes", - "getHalfCheckedKeys", - "getCurrentKey", - "getCurrentNode", - "setCurrentKey", - "setCurrentNode", - "getNode", - "remove", - "append", - "insertBefore", - "insertAfter" - ]), - ...pick(select.value, ["focus", "blur", "selectedLabel"]) - }); - }); - return () => vue.h(ElSelect, vue.reactive({ - ...selectProps, - ref: (ref2) => select.value = ref2 - }), { - ...slots, - default: () => [ - vue.h(CacheOptions, { data: cacheOptions.value }), - vue.h(ElTree, vue.reactive({ - ...treeProps, - ref: (ref2) => tree.value = ref2 - })) - ] - }); - } - }); - var TreeSelect = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__file", "tree-select.vue"]]); - - const ElTreeSelect = withInstall(TreeSelect); - - const ROOT_TREE_INJECTION_KEY = Symbol(); - const EMPTY_NODE = { - key: -1, - level: -1, - data: {} - }; - var TreeOptionsEnum = /* @__PURE__ */ ((TreeOptionsEnum2) => { - TreeOptionsEnum2["KEY"] = "id"; - TreeOptionsEnum2["LABEL"] = "label"; - TreeOptionsEnum2["CHILDREN"] = "children"; - TreeOptionsEnum2["DISABLED"] = "disabled"; - TreeOptionsEnum2["CLASS"] = ""; - return TreeOptionsEnum2; - })(TreeOptionsEnum || {}); - var SetOperationEnum = /* @__PURE__ */ ((SetOperationEnum2) => { - SetOperationEnum2["ADD"] = "add"; - SetOperationEnum2["DELETE"] = "delete"; - return SetOperationEnum2; - })(SetOperationEnum || {}); - const itemSize = { - type: Number, - default: 26 - }; - const treeProps = buildProps({ - data: { - type: definePropType(Array), - default: () => mutable([]) - }, - emptyText: { - type: String - }, - height: { - type: Number, - default: 200 - }, - props: { - type: definePropType(Object), - default: () => mutable({ - children: "children" /* CHILDREN */, - label: "label" /* LABEL */, - disabled: "disabled" /* DISABLED */, - value: "id" /* KEY */, - class: "" /* CLASS */ - }) - }, - highlightCurrent: { - type: Boolean, - default: false - }, - showCheckbox: { - type: Boolean, - default: false - }, - defaultCheckedKeys: { - type: definePropType(Array), - default: () => mutable([]) - }, - checkStrictly: { - type: Boolean, - default: false - }, - defaultExpandedKeys: { - type: definePropType(Array), - default: () => mutable([]) - }, - indent: { - type: Number, - default: 16 - }, - itemSize, - icon: { - type: iconPropType - }, - expandOnClickNode: { - type: Boolean, - default: true - }, - checkOnClickNode: { - type: Boolean, - default: false - }, - currentNodeKey: { - type: definePropType([String, Number]) - }, - accordion: { - type: Boolean, - default: false - }, - filterMethod: { - type: definePropType(Function) - }, - perfMode: { - type: Boolean, - default: true - } - }); - const treeNodeProps = buildProps({ - node: { - type: definePropType(Object), - default: () => mutable(EMPTY_NODE) - }, - expanded: { - type: Boolean, - default: false - }, - checked: { - type: Boolean, - default: false - }, - indeterminate: { - type: Boolean, - default: false - }, - showCheckbox: { - type: Boolean, - default: false - }, - disabled: { - type: Boolean, - default: false - }, - current: { - type: Boolean, - default: false - }, - hiddenExpandIcon: { - type: Boolean, - default: false - }, - itemSize - }); - const treeNodeContentProps = buildProps({ - node: { - type: definePropType(Object), - required: true - } - }); - const NODE_CLICK = "node-click"; - const NODE_DROP = "node-drop"; - const NODE_EXPAND = "node-expand"; - const NODE_COLLAPSE = "node-collapse"; - const CURRENT_CHANGE = "current-change"; - const NODE_CHECK = "check"; - const NODE_CHECK_CHANGE = "check-change"; - const NODE_CONTEXTMENU = "node-contextmenu"; - const treeEmits = { - [NODE_CLICK]: (data, node, e) => data && node && e, - [NODE_DROP]: (data, node, e) => data && node && e, - [NODE_EXPAND]: (data, node) => data && node, - [NODE_COLLAPSE]: (data, node) => data && node, - [CURRENT_CHANGE]: (data, node) => data && node, - [NODE_CHECK]: (data, checkedInfo) => data && checkedInfo, - [NODE_CHECK_CHANGE]: (data, checked) => data && isBoolean(checked), - [NODE_CONTEXTMENU]: (evt, data, node) => evt && data && node - }; - const treeNodeEmits = { - click: (node, e) => !!(node && e), - drop: (node, e) => !!(node && e), - toggle: (node) => !!node, - check: (node, checked) => node && isBoolean(checked) - }; - - function useCheck(props, tree) { - const checkedKeys = vue.ref(/* @__PURE__ */ new Set()); - const indeterminateKeys = vue.ref(/* @__PURE__ */ new Set()); - const { emit } = vue.getCurrentInstance(); - vue.watch([() => tree.value, () => props.defaultCheckedKeys], () => { - return vue.nextTick(() => { - _setCheckedKeys(props.defaultCheckedKeys); - }); - }, { - immediate: true - }); - const updateCheckedKeys = () => { - if (!tree.value || !props.showCheckbox || props.checkStrictly) { - return; - } - const { levelTreeNodeMap, maxLevel } = tree.value; - const checkedKeySet = checkedKeys.value; - const indeterminateKeySet = /* @__PURE__ */ new Set(); - for (let level = maxLevel - 1; level >= 1; --level) { - const nodes = levelTreeNodeMap.get(level); - if (!nodes) - continue; - nodes.forEach((node) => { - const children = node.children; - if (children) { - let allChecked = true; - let hasChecked = false; - for (const childNode of children) { - const key = childNode.key; - if (checkedKeySet.has(key)) { - hasChecked = true; - } else if (indeterminateKeySet.has(key)) { - allChecked = false; - hasChecked = true; - break; - } else { - allChecked = false; - } - } - if (allChecked) { - checkedKeySet.add(node.key); - } else if (hasChecked) { - indeterminateKeySet.add(node.key); - checkedKeySet.delete(node.key); - } else { - checkedKeySet.delete(node.key); - indeterminateKeySet.delete(node.key); - } - } - }); - } - indeterminateKeys.value = indeterminateKeySet; - }; - const isChecked = (node) => checkedKeys.value.has(node.key); - const isIndeterminate = (node) => indeterminateKeys.value.has(node.key); - const toggleCheckbox = (node, isChecked2, nodeClick = true, immediateUpdate = true) => { - const checkedKeySet = checkedKeys.value; - const toggle = (node2, checked) => { - checkedKeySet[checked ? SetOperationEnum.ADD : SetOperationEnum.DELETE](node2.key); - const children = node2.children; - if (!props.checkStrictly && children) { - children.forEach((childNode) => { - if (!childNode.disabled) { - toggle(childNode, checked); - } - }); - } - }; - toggle(node, isChecked2); - if (immediateUpdate) { - updateCheckedKeys(); - } - if (nodeClick) { - afterNodeCheck(node, isChecked2); - } - }; - const afterNodeCheck = (node, checked) => { - const { checkedNodes, checkedKeys: checkedKeys2 } = getChecked(); - const { halfCheckedNodes, halfCheckedKeys } = getHalfChecked(); - emit(NODE_CHECK, node.data, { - checkedKeys: checkedKeys2, - checkedNodes, - halfCheckedKeys, - halfCheckedNodes - }); - emit(NODE_CHECK_CHANGE, node.data, checked); - }; - function getCheckedKeys(leafOnly = false) { - return getChecked(leafOnly).checkedKeys; - } - function getCheckedNodes(leafOnly = false) { - return getChecked(leafOnly).checkedNodes; - } - function getHalfCheckedKeys() { - return getHalfChecked().halfCheckedKeys; - } - function getHalfCheckedNodes() { - return getHalfChecked().halfCheckedNodes; - } - function getChecked(leafOnly = false) { - const checkedNodes = []; - const keys = []; - if ((tree == null ? void 0 : tree.value) && props.showCheckbox) { - const { treeNodeMap } = tree.value; - checkedKeys.value.forEach((key) => { - const node = treeNodeMap.get(key); - if (node && (!leafOnly || leafOnly && node.isLeaf)) { - keys.push(key); - checkedNodes.push(node.data); - } - }); - } - return { - checkedKeys: keys, - checkedNodes - }; - } - function getHalfChecked() { - const halfCheckedNodes = []; - const halfCheckedKeys = []; - if ((tree == null ? void 0 : tree.value) && props.showCheckbox) { - const { treeNodeMap } = tree.value; - indeterminateKeys.value.forEach((key) => { - const node = treeNodeMap.get(key); - if (node) { - halfCheckedKeys.push(key); - halfCheckedNodes.push(node.data); - } - }); - } - return { - halfCheckedNodes, - halfCheckedKeys - }; - } - function setCheckedKeys(keys) { - checkedKeys.value.clear(); - indeterminateKeys.value.clear(); - vue.nextTick(() => { - _setCheckedKeys(keys); - }); - } - function setChecked(key, isChecked2) { - if ((tree == null ? void 0 : tree.value) && props.showCheckbox) { - const node = tree.value.treeNodeMap.get(key); - if (node) { - toggleCheckbox(node, isChecked2, false); - } - } - } - function _setCheckedKeys(keys) { - if (tree == null ? void 0 : tree.value) { - const { treeNodeMap } = tree.value; - if (props.showCheckbox && treeNodeMap && (keys == null ? void 0 : keys.length) > 0) { - for (const key of keys) { - const node = treeNodeMap.get(key); - if (node && !isChecked(node)) { - toggleCheckbox(node, true, false, false); - } - } - updateCheckedKeys(); - } - } - } - return { - updateCheckedKeys, - toggleCheckbox, - isChecked, - isIndeterminate, - getCheckedKeys, - getCheckedNodes, - getHalfCheckedKeys, - getHalfCheckedNodes, - setChecked, - setCheckedKeys - }; - } - - function useFilter(props, tree) { - const hiddenNodeKeySet = vue.ref(/* @__PURE__ */ new Set([])); - const hiddenExpandIconKeySet = vue.ref(/* @__PURE__ */ new Set([])); - const filterable = vue.computed(() => { - return isFunction$1(props.filterMethod); - }); - function doFilter(query) { - var _a; - if (!filterable.value) { - return; - } - const expandKeySet = /* @__PURE__ */ new Set(); - const hiddenExpandIconKeys = hiddenExpandIconKeySet.value; - const hiddenKeys = hiddenNodeKeySet.value; - const family = []; - const nodes = ((_a = tree.value) == null ? void 0 : _a.treeNodes) || []; - const filter = props.filterMethod; - hiddenKeys.clear(); - function traverse(nodes2) { - nodes2.forEach((node) => { - family.push(node); - if (filter == null ? void 0 : filter(query, node.data, node)) { - family.forEach((member) => { - expandKeySet.add(member.key); - }); - } else if (node.isLeaf) { - hiddenKeys.add(node.key); - } - const children = node.children; - if (children) { - traverse(children); - } - if (!node.isLeaf) { - if (!expandKeySet.has(node.key)) { - hiddenKeys.add(node.key); - } else if (children) { - let allHidden = true; - for (const childNode of children) { - if (!hiddenKeys.has(childNode.key)) { - allHidden = false; - break; - } - } - if (allHidden) { - hiddenExpandIconKeys.add(node.key); - } else { - hiddenExpandIconKeys.delete(node.key); - } - } - } - family.pop(); - }); - } - traverse(nodes); - return expandKeySet; - } - function isForceHiddenExpandIcon(node) { - return hiddenExpandIconKeySet.value.has(node.key); - } - return { - hiddenExpandIconKeySet, - hiddenNodeKeySet, - doFilter, - isForceHiddenExpandIcon - }; - } - - function useTree(props, emit) { - const expandedKeySet = vue.ref(new Set(props.defaultExpandedKeys)); - const currentKey = vue.ref(); - const tree = vue.shallowRef(); - const listRef = vue.ref(); - vue.watch(() => props.currentNodeKey, (key) => { - currentKey.value = key; - }, { - immediate: true - }); - vue.watch(() => props.data, (data) => { - setData(data); - }, { - immediate: true - }); - const { - isIndeterminate, - isChecked, - toggleCheckbox, - getCheckedKeys, - getCheckedNodes, - getHalfCheckedKeys, - getHalfCheckedNodes, - setChecked, - setCheckedKeys - } = useCheck(props, tree); - const { doFilter, hiddenNodeKeySet, isForceHiddenExpandIcon } = useFilter(props, tree); - const valueKey = vue.computed(() => { - var _a; - return ((_a = props.props) == null ? void 0 : _a.value) || TreeOptionsEnum.KEY; - }); - const childrenKey = vue.computed(() => { - var _a; - return ((_a = props.props) == null ? void 0 : _a.children) || TreeOptionsEnum.CHILDREN; - }); - const disabledKey = vue.computed(() => { - var _a; - return ((_a = props.props) == null ? void 0 : _a.disabled) || TreeOptionsEnum.DISABLED; - }); - const labelKey = vue.computed(() => { - var _a; - return ((_a = props.props) == null ? void 0 : _a.label) || TreeOptionsEnum.LABEL; - }); - const flattenTree = vue.computed(() => { - var _a; - const expandedKeys = expandedKeySet.value; - const hiddenKeys = hiddenNodeKeySet.value; - const flattenNodes = []; - const nodes = ((_a = tree.value) == null ? void 0 : _a.treeNodes) || []; - const stack = []; - for (let i = nodes.length - 1; i >= 0; --i) { - stack.push(nodes[i]); - } - while (stack.length) { - const node = stack.pop(); - if (hiddenKeys.has(node.key)) - continue; - flattenNodes.push(node); - if (node.children && expandedKeys.has(node.key)) { - for (let i = node.children.length - 1; i >= 0; --i) { - stack.push(node.children[i]); - } - } - } - return flattenNodes; - }); - const isNotEmpty = vue.computed(() => { - return flattenTree.value.length > 0; - }); - function createTree(data) { - const treeNodeMap = /* @__PURE__ */ new Map(); - const levelTreeNodeMap = /* @__PURE__ */ new Map(); - let maxLevel = 1; - function traverse(nodes, level = 1, parent = void 0) { - var _a; - const siblings = []; - for (const rawNode of nodes) { - const value = getKey(rawNode); - const node = { - level, - key: value, - data: rawNode - }; - node.label = getLabel(rawNode); - node.parent = parent; - const children = getChildren(rawNode); - node.disabled = getDisabled(rawNode); - node.isLeaf = !children || children.length === 0; - if (children && children.length) { - node.children = traverse(children, level + 1, node); - } - siblings.push(node); - treeNodeMap.set(value, node); - if (!levelTreeNodeMap.has(level)) { - levelTreeNodeMap.set(level, []); - } - (_a = levelTreeNodeMap.get(level)) == null ? void 0 : _a.push(node); - } - if (level > maxLevel) { - maxLevel = level; - } - return siblings; - } - const treeNodes = traverse(data); - return { - treeNodeMap, - levelTreeNodeMap, - maxLevel, - treeNodes - }; - } - function filter(query) { - const keys = doFilter(query); - if (keys) { - expandedKeySet.value = keys; - } - } - function getChildren(node) { - return node[childrenKey.value]; - } - function getKey(node) { - if (!node) { - return ""; - } - return node[valueKey.value]; - } - function getDisabled(node) { - return node[disabledKey.value]; - } - function getLabel(node) { - return node[labelKey.value]; - } - function toggleExpand(node) { - const expandedKeys = expandedKeySet.value; - if (expandedKeys.has(node.key)) { - collapseNode(node); - } else { - expandNode(node); - } - } - function setExpandedKeys(keys) { - const expandedKeys = /* @__PURE__ */ new Set(); - const nodeMap = tree.value.treeNodeMap; - keys.forEach((k) => { - let node = nodeMap.get(k); - while (node && !expandedKeys.has(node.key)) { - expandedKeys.add(node.key); - node = node.parent; - } - }); - expandedKeySet.value = expandedKeys; - } - function handleNodeClick(node, e) { - emit(NODE_CLICK, node.data, node, e); - handleCurrentChange(node); - if (props.expandOnClickNode) { - toggleExpand(node); - } - if (props.showCheckbox && props.checkOnClickNode && !node.disabled) { - toggleCheckbox(node, !isChecked(node), true); - } - } - function handleNodeDrop(node, e) { - emit(NODE_DROP, node.data, node, e); - } - function handleCurrentChange(node) { - if (!isCurrent(node)) { - currentKey.value = node.key; - emit(CURRENT_CHANGE, node.data, node); - } - } - function handleNodeCheck(node, checked) { - toggleCheckbox(node, checked); - } - function expandNode(node) { - const keySet = expandedKeySet.value; - if (tree.value && props.accordion) { - const { treeNodeMap } = tree.value; - keySet.forEach((key) => { - const treeNode = treeNodeMap.get(key); - if (node && node.level === (treeNode == null ? void 0 : treeNode.level)) { - keySet.delete(key); - } - }); - } - keySet.add(node.key); - emit(NODE_EXPAND, node.data, node); - } - function collapseNode(node) { - expandedKeySet.value.delete(node.key); - emit(NODE_COLLAPSE, node.data, node); - } - function isExpanded(node) { - return expandedKeySet.value.has(node.key); - } - function isDisabled(node) { - return !!node.disabled; - } - function isCurrent(node) { - const current = currentKey.value; - return current !== void 0 && current === node.key; - } - function getCurrentNode() { - var _a, _b; - if (!currentKey.value) - return void 0; - return (_b = (_a = tree.value) == null ? void 0 : _a.treeNodeMap.get(currentKey.value)) == null ? void 0 : _b.data; - } - function getCurrentKey() { - return currentKey.value; - } - function setCurrentKey(key) { - currentKey.value = key; - } - function setData(data) { - vue.nextTick(() => tree.value = createTree(data)); - } - function getNode(data) { - var _a; - const key = isObject$1(data) ? getKey(data) : data; - return (_a = tree.value) == null ? void 0 : _a.treeNodeMap.get(key); - } - function scrollToNode(key, strategy = "auto") { - const node = getNode(key); - if (node && listRef.value) { - listRef.value.scrollToItem(flattenTree.value.indexOf(node), strategy); - } - } - function scrollTo(offset) { - var _a; - (_a = listRef.value) == null ? void 0 : _a.scrollTo(offset); - } - return { - tree, - flattenTree, - isNotEmpty, - listRef, - getKey, - getChildren, - toggleExpand, - toggleCheckbox, - isExpanded, - isChecked, - isIndeterminate, - isDisabled, - isCurrent, - isForceHiddenExpandIcon, - handleNodeClick, - handleNodeDrop, - handleNodeCheck, - getCurrentNode, - getCurrentKey, - setCurrentKey, - getCheckedKeys, - getCheckedNodes, - getHalfCheckedKeys, - getHalfCheckedNodes, - setChecked, - setCheckedKeys, - filter, - setData, - getNode, - expandNode, - collapseNode, - setExpandedKeys, - scrollToNode, - scrollTo - }; - } - - var ElNodeContent = vue.defineComponent({ - name: "ElTreeNodeContent", - props: treeNodeContentProps, - setup(props) { - const tree = vue.inject(ROOT_TREE_INJECTION_KEY); - const ns = useNamespace("tree"); - return () => { - const node = props.node; - const { data } = node; - return (tree == null ? void 0 : tree.ctx.slots.default) ? tree.ctx.slots.default({ node, data }) : vue.h("span", { class: ns.be("node", "label") }, [node == null ? void 0 : node.label]); - }; - } - }); - - const __default__$h = vue.defineComponent({ - name: "ElTreeNode" - }); - const _sfc_main$i = /* @__PURE__ */ vue.defineComponent({ - ...__default__$h, - props: treeNodeProps, - emits: treeNodeEmits, - setup(__props, { emit }) { - const props = __props; - const tree = vue.inject(ROOT_TREE_INJECTION_KEY); - const ns = useNamespace("tree"); - const indent = vue.computed(() => { - var _a; - return (_a = tree == null ? void 0 : tree.props.indent) != null ? _a : 16; - }); - const icon = vue.computed(() => { - var _a; - return (_a = tree == null ? void 0 : tree.props.icon) != null ? _a : caret_right_default; - }); - const getNodeClass = (node) => { - const nodeClassFunc = tree == null ? void 0 : tree.props.props.class; - if (!nodeClassFunc) - return {}; - let className; - if (isFunction$1(nodeClassFunc)) { - const { data } = node; - className = nodeClassFunc(data, node); - } else { - className = nodeClassFunc; - } - return isString$1(className) ? { [className]: true } : className; - }; - const handleClick = (e) => { - emit("click", props.node, e); - }; - const handleDrop = (e) => { - emit("drop", props.node, e); - }; - const handleExpandIconClick = () => { - emit("toggle", props.node); - }; - const handleCheckChange = (value) => { - emit("check", props.node, value); - }; - const handleContextMenu = (event) => { - var _a, _b, _c, _d; - if ((_c = (_b = (_a = tree == null ? void 0 : tree.instance) == null ? void 0 : _a.vnode) == null ? void 0 : _b.props) == null ? void 0 : _c["onNodeContextmenu"]) { - event.stopPropagation(); - event.preventDefault(); - } - tree == null ? void 0 : tree.ctx.emit(NODE_CONTEXTMENU, event, (_d = props.node) == null ? void 0 : _d.data, props.node); - }; - return (_ctx, _cache) => { - var _a, _b, _c; - return vue.openBlock(), vue.createElementBlock("div", { - ref: "node$", - class: vue.normalizeClass([ - vue.unref(ns).b("node"), - vue.unref(ns).is("expanded", _ctx.expanded), - vue.unref(ns).is("current", _ctx.current), - vue.unref(ns).is("focusable", !_ctx.disabled), - vue.unref(ns).is("checked", !_ctx.disabled && _ctx.checked), - getNodeClass(_ctx.node) - ]), - role: "treeitem", - tabindex: "-1", - "aria-expanded": _ctx.expanded, - "aria-disabled": _ctx.disabled, - "aria-checked": _ctx.checked, - "data-key": (_a = _ctx.node) == null ? void 0 : _a.key, - onClick: vue.withModifiers(handleClick, ["stop"]), - onContextmenu: handleContextMenu, - onDragover: vue.withModifiers(() => { - }, ["prevent"]), - onDragenter: vue.withModifiers(() => { - }, ["prevent"]), - onDrop: vue.withModifiers(handleDrop, ["stop"]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).be("node", "content")), - style: vue.normalizeStyle({ - paddingLeft: `${(_ctx.node.level - 1) * vue.unref(indent)}px`, - height: _ctx.itemSize + "px" - }) - }, [ - vue.unref(icon) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass([ - vue.unref(ns).is("leaf", !!((_b = _ctx.node) == null ? void 0 : _b.isLeaf)), - vue.unref(ns).is("hidden", _ctx.hiddenExpandIcon), - { - expanded: !((_c = _ctx.node) == null ? void 0 : _c.isLeaf) && _ctx.expanded - }, - vue.unref(ns).be("node", "expand-icon") - ]), - onClick: vue.withModifiers(handleExpandIconClick, ["stop"]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(icon)))) - ]), - _: 1 - }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true), - _ctx.showCheckbox ? (vue.openBlock(), vue.createBlock(vue.unref(ElCheckbox), { - key: 1, - "model-value": _ctx.checked, - indeterminate: _ctx.indeterminate, - disabled: _ctx.disabled, - onChange: handleCheckChange, - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, null, 8, ["model-value", "indeterminate", "disabled", "onClick"])) : vue.createCommentVNode("v-if", true), - vue.createVNode(vue.unref(ElNodeContent), { node: _ctx.node }, null, 8, ["node"]) - ], 6) - ], 42, ["aria-expanded", "aria-disabled", "aria-checked", "data-key", "onClick", "onDragover", "onDragenter", "onDrop"]); - }; - } - }); - var ElTreeNode = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__file", "tree-node.vue"]]); - - const __default__$g = vue.defineComponent({ - name: "ElTreeV2" - }); - const _sfc_main$h = /* @__PURE__ */ vue.defineComponent({ - ...__default__$g, - props: treeProps, - emits: treeEmits, - setup(__props, { expose, emit }) { - const props = __props; - const slots = vue.useSlots(); - const treeNodeSize = vue.computed(() => props.itemSize); - vue.provide(ROOT_TREE_INJECTION_KEY, { - ctx: { - emit, - slots - }, - props, - instance: vue.getCurrentInstance() - }); - vue.provide(formItemContextKey, void 0); - const { t } = useLocale(); - const ns = useNamespace("tree"); - const { - flattenTree, - isNotEmpty, - listRef, - toggleExpand, - isExpanded, - isIndeterminate, - isChecked, - isDisabled, - isCurrent, - isForceHiddenExpandIcon, - handleNodeClick, - handleNodeDrop, - handleNodeCheck, - toggleCheckbox, - getCurrentNode, - getCurrentKey, - setCurrentKey, - getCheckedKeys, - getCheckedNodes, - getHalfCheckedKeys, - getHalfCheckedNodes, - setChecked, - setCheckedKeys, - filter, - setData, - getNode, - expandNode, - collapseNode, - setExpandedKeys, - scrollToNode, - scrollTo - } = useTree(props, emit); - expose({ - toggleCheckbox, - getCurrentNode, - getCurrentKey, - setCurrentKey, - getCheckedKeys, - getCheckedNodes, - getHalfCheckedKeys, - getHalfCheckedNodes, - setChecked, - setCheckedKeys, - filter, - setData, - getNode, - expandNode, - collapseNode, - setExpandedKeys, - scrollToNode, - scrollTo - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([vue.unref(ns).b(), { [vue.unref(ns).m("highlight-current")]: _ctx.highlightCurrent }]), - role: "tree" - }, [ - vue.unref(isNotEmpty) ? (vue.openBlock(), vue.createBlock(vue.unref(FixedSizeList$1), { - key: 0, - ref_key: "listRef", - ref: listRef, - "class-name": vue.unref(ns).b("virtual-list"), - data: vue.unref(flattenTree), - total: vue.unref(flattenTree).length, - height: _ctx.height, - "item-size": vue.unref(treeNodeSize), - "perf-mode": _ctx.perfMode - }, { - default: vue.withCtx(({ data, index, style }) => [ - (vue.openBlock(), vue.createBlock(ElTreeNode, { - key: data[index].key, - style: vue.normalizeStyle(style), - node: data[index], - expanded: vue.unref(isExpanded)(data[index]), - "show-checkbox": _ctx.showCheckbox, - checked: vue.unref(isChecked)(data[index]), - indeterminate: vue.unref(isIndeterminate)(data[index]), - "item-size": vue.unref(treeNodeSize), - disabled: vue.unref(isDisabled)(data[index]), - current: vue.unref(isCurrent)(data[index]), - "hidden-expand-icon": vue.unref(isForceHiddenExpandIcon)(data[index]), - onClick: vue.unref(handleNodeClick), - onToggle: vue.unref(toggleExpand), - onCheck: vue.unref(handleNodeCheck), - onDrop: vue.unref(handleNodeDrop) - }, null, 8, ["style", "node", "expanded", "show-checkbox", "checked", "indeterminate", "item-size", "disabled", "current", "hidden-expand-icon", "onClick", "onToggle", "onCheck", "onDrop"])) - ]), - _: 1 - }, 8, ["class-name", "data", "total", "height", "item-size", "perf-mode"])) : (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).e("empty-block")) - }, [ - vue.renderSlot(_ctx.$slots, "empty", {}, () => { - var _a; - return [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(ns).e("empty-text")) - }, vue.toDisplayString((_a = _ctx.emptyText) != null ? _a : vue.unref(t)("el.tree.emptyText")), 3) - ]; - }) - ], 2)) - ], 2); - }; - } - }); - var TreeV2 = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__file", "tree.vue"]]); - - const ElTreeV2 = withInstall(TreeV2); - - const uploadContextKey = Symbol("uploadContextKey"); - - const SCOPE$2 = "ElUpload"; - class UploadAjaxError extends Error { - constructor(message, status, method, url) { - super(message); - this.name = "UploadAjaxError"; - this.status = status; - this.method = method; - this.url = url; - } - } - function getError(action, option, xhr) { - let msg; - if (xhr.response) { - msg = `${xhr.response.error || xhr.response}`; - } else if (xhr.responseText) { - msg = `${xhr.responseText}`; - } else { - msg = `fail to ${option.method} ${action} ${xhr.status}`; - } - return new UploadAjaxError(msg, xhr.status, option.method, action); - } - function getBody(xhr) { - const text = xhr.responseText || xhr.response; - if (!text) { - return text; - } - try { - return JSON.parse(text); - } catch (e) { - return text; - } - } - const ajaxUpload = (option) => { - if (typeof XMLHttpRequest === "undefined") - throwError(SCOPE$2, "XMLHttpRequest is undefined"); - const xhr = new XMLHttpRequest(); - const action = option.action; - if (xhr.upload) { - xhr.upload.addEventListener("progress", (evt) => { - const progressEvt = evt; - progressEvt.percent = evt.total > 0 ? evt.loaded / evt.total * 100 : 0; - option.onProgress(progressEvt); - }); - } - const formData = new FormData(); - if (option.data) { - for (const [key, value] of Object.entries(option.data)) { - if (isArray$1(value) && value.length) - formData.append(key, ...value); - else - formData.append(key, value); - } - } - formData.append(option.filename, option.file, option.file.name); - xhr.addEventListener("error", () => { - option.onError(getError(action, option, xhr)); - }); - xhr.addEventListener("load", () => { - if (xhr.status < 200 || xhr.status >= 300) { - return option.onError(getError(action, option, xhr)); - } - option.onSuccess(getBody(xhr)); - }); - xhr.open(option.method, action, true); - if (option.withCredentials && "withCredentials" in xhr) { - xhr.withCredentials = true; - } - const headers = option.headers || {}; - if (headers instanceof Headers) { - headers.forEach((value, key) => xhr.setRequestHeader(key, value)); - } else { - for (const [key, value] of Object.entries(headers)) { - if (isNil(value)) - continue; - xhr.setRequestHeader(key, String(value)); - } - } - xhr.send(formData); - return xhr; - }; - - const uploadListTypes = ["text", "picture", "picture-card"]; - let fileId = 1; - const genFileId = () => Date.now() + fileId++; - const uploadBaseProps = buildProps({ - action: { - type: String, - default: "#" - }, - headers: { - type: definePropType(Object) - }, - method: { - type: String, - default: "post" - }, - data: { - type: definePropType([Object, Function, Promise]), - default: () => mutable({}) - }, - multiple: Boolean, - name: { - type: String, - default: "file" - }, - drag: Boolean, - withCredentials: Boolean, - showFileList: { - type: Boolean, - default: true - }, - accept: { - type: String, - default: "" - }, - fileList: { - type: definePropType(Array), - default: () => mutable([]) - }, - autoUpload: { - type: Boolean, - default: true - }, - listType: { - type: String, - values: uploadListTypes, - default: "text" - }, - httpRequest: { - type: definePropType(Function), - default: ajaxUpload - }, - disabled: Boolean, - limit: Number - }); - const uploadProps = buildProps({ - ...uploadBaseProps, - beforeUpload: { - type: definePropType(Function), - default: NOOP - }, - beforeRemove: { - type: definePropType(Function) - }, - onRemove: { - type: definePropType(Function), - default: NOOP - }, - onChange: { - type: definePropType(Function), - default: NOOP - }, - onPreview: { - type: definePropType(Function), - default: NOOP - }, - onSuccess: { - type: definePropType(Function), - default: NOOP - }, - onProgress: { - type: definePropType(Function), - default: NOOP - }, - onError: { - type: definePropType(Function), - default: NOOP - }, - onExceed: { - type: definePropType(Function), - default: NOOP - }, - crossorigin: { - type: definePropType(String) - } - }); - - const uploadListProps = buildProps({ - files: { - type: definePropType(Array), - default: () => mutable([]) - }, - disabled: { - type: Boolean, - default: false - }, - handlePreview: { - type: definePropType(Function), - default: NOOP - }, - listType: { - type: String, - values: uploadListTypes, - default: "text" - }, - crossorigin: { - type: definePropType(String) - } - }); - const uploadListEmits = { - remove: (file) => !!file - }; - - const __default__$f = vue.defineComponent({ - name: "ElUploadList" - }); - const _sfc_main$g = /* @__PURE__ */ vue.defineComponent({ - ...__default__$f, - props: uploadListProps, - emits: uploadListEmits, - setup(__props, { emit }) { - const props = __props; - const { t } = useLocale(); - const nsUpload = useNamespace("upload"); - const nsIcon = useNamespace("icon"); - const nsList = useNamespace("list"); - const disabled = useFormDisabled(); - const focusing = vue.ref(false); - const containerKls = vue.computed(() => [ - nsUpload.b("list"), - nsUpload.bm("list", props.listType), - nsUpload.is("disabled", props.disabled) - ]); - const handleRemove = (file) => { - emit("remove", file); - }; - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.TransitionGroup, { - tag: "ul", - class: vue.normalizeClass(vue.unref(containerKls)), - name: vue.unref(nsList).b() - }, { - default: vue.withCtx(() => [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.files, (file, index) => { - return vue.openBlock(), vue.createElementBlock("li", { - key: file.uid || file.name, - class: vue.normalizeClass([ - vue.unref(nsUpload).be("list", "item"), - vue.unref(nsUpload).is(file.status), - { focusing: focusing.value } - ]), - tabindex: "0", - onKeydown: vue.withKeys(($event) => !vue.unref(disabled) && handleRemove(file), ["delete"]), - onFocus: ($event) => focusing.value = true, - onBlur: ($event) => focusing.value = false, - onClick: ($event) => focusing.value = false - }, [ - vue.renderSlot(_ctx.$slots, "default", { - file, - index - }, () => [ - _ctx.listType === "picture" || file.status !== "uploading" && _ctx.listType === "picture-card" ? (vue.openBlock(), vue.createElementBlock("img", { - key: 0, - class: vue.normalizeClass(vue.unref(nsUpload).be("list", "item-thumbnail")), - src: file.url, - crossorigin: _ctx.crossorigin, - alt: "" - }, null, 10, ["src", "crossorigin"])) : vue.createCommentVNode("v-if", true), - file.status === "uploading" || _ctx.listType !== "picture-card" ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(nsUpload).be("list", "item-info")) - }, [ - vue.createElementVNode("a", { - class: vue.normalizeClass(vue.unref(nsUpload).be("list", "item-name")), - onClick: vue.withModifiers(($event) => _ctx.handlePreview(file), ["prevent"]) - }, [ - vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass(vue.unref(nsIcon).m("document")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(document_default)) - ]), - _: 1 - }, 8, ["class"]), - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(nsUpload).be("list", "item-file-name")), - title: file.name - }, vue.toDisplayString(file.name), 11, ["title"]) - ], 10, ["onClick"]), - file.status === "uploading" ? (vue.openBlock(), vue.createBlock(vue.unref(ElProgress), { - key: 0, - type: _ctx.listType === "picture-card" ? "circle" : "line", - "stroke-width": _ctx.listType === "picture-card" ? 6 : 2, - percentage: Number(file.percentage), - style: vue.normalizeStyle(_ctx.listType === "picture-card" ? "" : "margin-top: 0.5rem") - }, null, 8, ["type", "stroke-width", "percentage", "style"])) : vue.createCommentVNode("v-if", true) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("label", { - class: vue.normalizeClass(vue.unref(nsUpload).be("list", "item-status-label")) - }, [ - _ctx.listType === "text" ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass([vue.unref(nsIcon).m("upload-success"), vue.unref(nsIcon).m("circle-check")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(circle_check_default)) - ]), - _: 1 - }, 8, ["class"])) : ["picture-card", "picture"].includes(_ctx.listType) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 1, - class: vue.normalizeClass([vue.unref(nsIcon).m("upload-success"), vue.unref(nsIcon).m("check")]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(check_default)) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true) - ], 2), - !vue.unref(disabled) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 2, - class: vue.normalizeClass(vue.unref(nsIcon).m("close")), - onClick: ($event) => handleRemove(file) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(close_default)) - ]), - _: 2 - }, 1032, ["class", "onClick"])) : vue.createCommentVNode("v-if", true), - vue.createCommentVNode(" Due to close btn only appears when li gets focused disappears after li gets blurred, thus keyboard navigation can never reach close btn"), - vue.createCommentVNode(" This is a bug which needs to be fixed "), - vue.createCommentVNode(" TODO: Fix the incorrect navigation interaction "), - !vue.unref(disabled) ? (vue.openBlock(), vue.createElementBlock("i", { - key: 3, - class: vue.normalizeClass(vue.unref(nsIcon).m("close-tip")) - }, vue.toDisplayString(vue.unref(t)("el.upload.deleteTip")), 3)) : vue.createCommentVNode("v-if", true), - _ctx.listType === "picture-card" ? (vue.openBlock(), vue.createElementBlock("span", { - key: 4, - class: vue.normalizeClass(vue.unref(nsUpload).be("list", "item-actions")) - }, [ - vue.createElementVNode("span", { - class: vue.normalizeClass(vue.unref(nsUpload).be("list", "item-preview")), - onClick: ($event) => _ctx.handlePreview(file) - }, [ - vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass(vue.unref(nsIcon).m("zoom-in")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(zoom_in_default)) - ]), - _: 1 - }, 8, ["class"]) - ], 10, ["onClick"]), - !vue.unref(disabled) ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - class: vue.normalizeClass(vue.unref(nsUpload).be("list", "item-delete")), - onClick: ($event) => handleRemove(file) - }, [ - vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass(vue.unref(nsIcon).m("delete")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(delete_default)) - ]), - _: 1 - }, 8, ["class"]) - ], 10, ["onClick"])) : vue.createCommentVNode("v-if", true) - ], 2)) : vue.createCommentVNode("v-if", true) - ]) - ], 42, ["onKeydown", "onFocus", "onBlur", "onClick"]); - }), 128)), - vue.renderSlot(_ctx.$slots, "append") - ]), - _: 3 - }, 8, ["class", "name"]); - }; - } - }); - var UploadList = /* @__PURE__ */ _export_sfc(_sfc_main$g, [["__file", "upload-list.vue"]]); - - const uploadDraggerProps = buildProps({ - disabled: { - type: Boolean, - default: false - } - }); - const uploadDraggerEmits = { - file: (file) => isArray$1(file) - }; - - const COMPONENT_NAME = "ElUploadDrag"; - const __default__$e = vue.defineComponent({ - name: COMPONENT_NAME - }); - const _sfc_main$f = /* @__PURE__ */ vue.defineComponent({ - ...__default__$e, - props: uploadDraggerProps, - emits: uploadDraggerEmits, - setup(__props, { emit }) { - const uploaderContext = vue.inject(uploadContextKey); - if (!uploaderContext) { - throwError(COMPONENT_NAME, "usage: "); - } - const ns = useNamespace("upload"); - const dragover = vue.ref(false); - const disabled = useFormDisabled(); - const onDrop = (e) => { - if (disabled.value) - return; - dragover.value = false; - e.stopPropagation(); - const files = Array.from(e.dataTransfer.files); - emit("file", files); - }; - const onDragover = () => { - if (!disabled.value) - dragover.value = true; - }; - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([vue.unref(ns).b("dragger"), vue.unref(ns).is("dragover", dragover.value)]), - onDrop: vue.withModifiers(onDrop, ["prevent"]), - onDragover: vue.withModifiers(onDragover, ["prevent"]), - onDragleave: vue.withModifiers(($event) => dragover.value = false, ["prevent"]) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 42, ["onDrop", "onDragover", "onDragleave"]); - }; - } - }); - var UploadDragger = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__file", "upload-dragger.vue"]]); - - const uploadContentProps = buildProps({ - ...uploadBaseProps, - beforeUpload: { - type: definePropType(Function), - default: NOOP - }, - onRemove: { - type: definePropType(Function), - default: NOOP - }, - onStart: { - type: definePropType(Function), - default: NOOP - }, - onSuccess: { - type: definePropType(Function), - default: NOOP - }, - onProgress: { - type: definePropType(Function), - default: NOOP - }, - onError: { - type: definePropType(Function), - default: NOOP - }, - onExceed: { - type: definePropType(Function), - default: NOOP - } - }); - - const __default__$d = vue.defineComponent({ - name: "ElUploadContent", - inheritAttrs: false - }); - const _sfc_main$e = /* @__PURE__ */ vue.defineComponent({ - ...__default__$d, - props: uploadContentProps, - setup(__props, { expose }) { - const props = __props; - const ns = useNamespace("upload"); - const disabled = useFormDisabled(); - const requests = vue.shallowRef({}); - const inputRef = vue.shallowRef(); - const uploadFiles = (files) => { - if (files.length === 0) - return; - const { autoUpload, limit, fileList, multiple, onStart, onExceed } = props; - if (limit && fileList.length + files.length > limit) { - onExceed(files, fileList); - return; - } - if (!multiple) { - files = files.slice(0, 1); - } - for (const file of files) { - const rawFile = file; - rawFile.uid = genFileId(); - onStart(rawFile); - if (autoUpload) - upload(rawFile); - } - }; - const upload = async (rawFile) => { - inputRef.value.value = ""; - if (!props.beforeUpload) { - return doUpload(rawFile); - } - let hookResult; - let beforeData = {}; - try { - const originData = props.data; - const beforeUploadPromise = props.beforeUpload(rawFile); - beforeData = isPlainObject$1(props.data) ? cloneDeep(props.data) : props.data; - hookResult = await beforeUploadPromise; - if (isPlainObject$1(props.data) && isEqual$1(originData, beforeData)) { - beforeData = cloneDeep(props.data); - } - } catch (e) { - hookResult = false; - } - if (hookResult === false) { - props.onRemove(rawFile); - return; - } - let file = rawFile; - if (hookResult instanceof Blob) { - if (hookResult instanceof File) { - file = hookResult; - } else { - file = new File([hookResult], rawFile.name, { - type: rawFile.type - }); - } - } - doUpload(Object.assign(file, { - uid: rawFile.uid - }), beforeData); - }; - const resolveData = async (data, rawFile) => { - if (isFunction$1(data)) { - return data(rawFile); - } - return data; - }; - const doUpload = async (rawFile, beforeData) => { - const { - headers, - data, - method, - withCredentials, - name: filename, - action, - onProgress, - onSuccess, - onError, - httpRequest - } = props; - try { - beforeData = await resolveData(beforeData != null ? beforeData : data, rawFile); - } catch (e) { - props.onRemove(rawFile); - return; - } - const { uid } = rawFile; - const options = { - headers: headers || {}, - withCredentials, - file: rawFile, - data: beforeData, - method, - filename, - action, - onProgress: (evt) => { - onProgress(evt, rawFile); - }, - onSuccess: (res) => { - onSuccess(res, rawFile); - delete requests.value[uid]; - }, - onError: (err) => { - onError(err, rawFile); - delete requests.value[uid]; - } - }; - const request = httpRequest(options); - requests.value[uid] = request; - if (request instanceof Promise) { - request.then(options.onSuccess, options.onError); - } - }; - const handleChange = (e) => { - const files = e.target.files; - if (!files) - return; - uploadFiles(Array.from(files)); - }; - const handleClick = () => { - if (!disabled.value) { - inputRef.value.value = ""; - inputRef.value.click(); - } - }; - const handleKeydown = () => { - handleClick(); - }; - const abort = (file) => { - const _reqs = entriesOf(requests.value).filter(file ? ([uid]) => String(file.uid) === uid : () => true); - _reqs.forEach(([uid, req]) => { - if (req instanceof XMLHttpRequest) - req.abort(); - delete requests.value[uid]; - }); - }; - expose({ - abort, - upload - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass([ - vue.unref(ns).b(), - vue.unref(ns).m(_ctx.listType), - vue.unref(ns).is("drag", _ctx.drag), - vue.unref(ns).is("disabled", vue.unref(disabled)) - ]), - tabindex: vue.unref(disabled) ? "-1" : "0", - onClick: handleClick, - onKeydown: vue.withKeys(vue.withModifiers(handleKeydown, ["self"]), ["enter", "space"]) - }, [ - _ctx.drag ? (vue.openBlock(), vue.createBlock(UploadDragger, { - key: 0, - disabled: vue.unref(disabled), - onFile: uploadFiles - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["disabled"])) : vue.renderSlot(_ctx.$slots, "default", { key: 1 }), - vue.createElementVNode("input", { - ref_key: "inputRef", - ref: inputRef, - class: vue.normalizeClass(vue.unref(ns).e("input")), - name: _ctx.name, - disabled: vue.unref(disabled), - multiple: _ctx.multiple, - accept: _ctx.accept, - type: "file", - onChange: handleChange, - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, null, 42, ["name", "disabled", "multiple", "accept", "onClick"]) - ], 42, ["tabindex", "onKeydown"]); - }; - } - }); - var UploadContent = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__file", "upload-content.vue"]]); - - const SCOPE$1 = "ElUpload"; - const revokeFileObjectURL = (file) => { - var _a; - if ((_a = file.url) == null ? void 0 : _a.startsWith("blob:")) { - URL.revokeObjectURL(file.url); - } - }; - const useHandlers = (props, uploadRef) => { - const uploadFiles = useVModel(props, "fileList", void 0, { passive: true }); - const getFile = (rawFile) => uploadFiles.value.find((file) => file.uid === rawFile.uid); - function abort(file) { - var _a; - (_a = uploadRef.value) == null ? void 0 : _a.abort(file); - } - function clearFiles(states = ["ready", "uploading", "success", "fail"]) { - uploadFiles.value = uploadFiles.value.filter((row) => !states.includes(row.status)); - } - function removeFile(file) { - uploadFiles.value = uploadFiles.value.filter((uploadFile) => uploadFile.uid !== file.uid); - } - const handleError = (err, rawFile) => { - const file = getFile(rawFile); - if (!file) - return; - console.error(err); - file.status = "fail"; - removeFile(file); - props.onError(err, file, uploadFiles.value); - props.onChange(file, uploadFiles.value); - }; - const handleProgress = (evt, rawFile) => { - const file = getFile(rawFile); - if (!file) - return; - props.onProgress(evt, file, uploadFiles.value); - file.status = "uploading"; - file.percentage = Math.round(evt.percent); - }; - const handleSuccess = (response, rawFile) => { - const file = getFile(rawFile); - if (!file) - return; - file.status = "success"; - file.response = response; - props.onSuccess(response, file, uploadFiles.value); - props.onChange(file, uploadFiles.value); - }; - const handleStart = (file) => { - if (isNil(file.uid)) - file.uid = genFileId(); - const uploadFile = { - name: file.name, - percentage: 0, - status: "ready", - size: file.size, - raw: file, - uid: file.uid - }; - if (props.listType === "picture-card" || props.listType === "picture") { - try { - uploadFile.url = URL.createObjectURL(file); - } catch (err) { - debugWarn(SCOPE$1, err.message); - props.onError(err, uploadFile, uploadFiles.value); - } - } - uploadFiles.value = [...uploadFiles.value, uploadFile]; - props.onChange(uploadFile, uploadFiles.value); - }; - const handleRemove = async (file) => { - const uploadFile = file instanceof File ? getFile(file) : file; - if (!uploadFile) - throwError(SCOPE$1, "file to be removed not found"); - const doRemove = (file2) => { - abort(file2); - removeFile(file2); - props.onRemove(file2, uploadFiles.value); - revokeFileObjectURL(file2); - }; - if (props.beforeRemove) { - const before = await props.beforeRemove(uploadFile, uploadFiles.value); - if (before !== false) - doRemove(uploadFile); - } else { - doRemove(uploadFile); - } - }; - function submit() { - uploadFiles.value.filter(({ status }) => status === "ready").forEach(({ raw }) => { - var _a; - return raw && ((_a = uploadRef.value) == null ? void 0 : _a.upload(raw)); - }); - } - vue.watch(() => props.listType, (val) => { - if (val !== "picture-card" && val !== "picture") { - return; - } - uploadFiles.value = uploadFiles.value.map((file) => { - const { raw, url } = file; - if (!url && raw) { - try { - file.url = URL.createObjectURL(raw); - } catch (err) { - props.onError(err, file, uploadFiles.value); - } - } - return file; - }); - }); - vue.watch(uploadFiles, (files) => { - for (const file of files) { - file.uid || (file.uid = genFileId()); - file.status || (file.status = "success"); - } - }, { immediate: true, deep: true }); - return { - uploadFiles, - abort, - clearFiles, - handleError, - handleProgress, - handleStart, - handleSuccess, - handleRemove, - submit, - revokeFileObjectURL - }; - }; - - const __default__$c = vue.defineComponent({ - name: "ElUpload" - }); - const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({ - ...__default__$c, - props: uploadProps, - setup(__props, { expose }) { - const props = __props; - const disabled = useFormDisabled(); - const uploadRef = vue.shallowRef(); - const { - abort, - submit, - clearFiles, - uploadFiles, - handleStart, - handleError, - handleRemove, - handleSuccess, - handleProgress, - revokeFileObjectURL - } = useHandlers(props, uploadRef); - const isPictureCard = vue.computed(() => props.listType === "picture-card"); - const uploadContentProps = vue.computed(() => ({ - ...props, - fileList: uploadFiles.value, - onStart: handleStart, - onProgress: handleProgress, - onSuccess: handleSuccess, - onError: handleError, - onRemove: handleRemove - })); - vue.onBeforeUnmount(() => { - uploadFiles.value.forEach(revokeFileObjectURL); - }); - vue.provide(uploadContextKey, { - accept: vue.toRef(props, "accept") - }); - expose({ - abort, - submit, - clearFiles, - handleStart, - handleRemove - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", null, [ - vue.unref(isPictureCard) && _ctx.showFileList ? (vue.openBlock(), vue.createBlock(UploadList, { - key: 0, - disabled: vue.unref(disabled), - "list-type": _ctx.listType, - files: vue.unref(uploadFiles), - crossorigin: _ctx.crossorigin, - "handle-preview": _ctx.onPreview, - onRemove: vue.unref(handleRemove) - }, vue.createSlots({ - append: vue.withCtx(() => [ - vue.createVNode(UploadContent, vue.mergeProps({ - ref_key: "uploadRef", - ref: uploadRef - }, vue.unref(uploadContentProps)), { - default: vue.withCtx(() => [ - _ctx.$slots.trigger ? vue.renderSlot(_ctx.$slots, "trigger", { key: 0 }) : vue.createCommentVNode("v-if", true), - !_ctx.$slots.trigger && _ctx.$slots.default ? vue.renderSlot(_ctx.$slots, "default", { key: 1 }) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 16) - ]), - _: 2 - }, [ - _ctx.$slots.file ? { - name: "default", - fn: vue.withCtx(({ file, index }) => [ - vue.renderSlot(_ctx.$slots, "file", { - file, - index - }) - ]) - } : void 0 - ]), 1032, ["disabled", "list-type", "files", "crossorigin", "handle-preview", "onRemove"])) : vue.createCommentVNode("v-if", true), - !vue.unref(isPictureCard) || vue.unref(isPictureCard) && !_ctx.showFileList ? (vue.openBlock(), vue.createBlock(UploadContent, vue.mergeProps({ - key: 1, - ref_key: "uploadRef", - ref: uploadRef - }, vue.unref(uploadContentProps)), { - default: vue.withCtx(() => [ - _ctx.$slots.trigger ? vue.renderSlot(_ctx.$slots, "trigger", { key: 0 }) : vue.createCommentVNode("v-if", true), - !_ctx.$slots.trigger && _ctx.$slots.default ? vue.renderSlot(_ctx.$slots, "default", { key: 1 }) : vue.createCommentVNode("v-if", true) - ]), - _: 3 - }, 16)) : vue.createCommentVNode("v-if", true), - _ctx.$slots.trigger ? vue.renderSlot(_ctx.$slots, "default", { key: 2 }) : vue.createCommentVNode("v-if", true), - vue.renderSlot(_ctx.$slots, "tip"), - !vue.unref(isPictureCard) && _ctx.showFileList ? (vue.openBlock(), vue.createBlock(UploadList, { - key: 3, - disabled: vue.unref(disabled), - "list-type": _ctx.listType, - files: vue.unref(uploadFiles), - crossorigin: _ctx.crossorigin, - "handle-preview": _ctx.onPreview, - onRemove: vue.unref(handleRemove) - }, vue.createSlots({ - _: 2 - }, [ - _ctx.$slots.file ? { - name: "default", - fn: vue.withCtx(({ file, index }) => [ - vue.renderSlot(_ctx.$slots, "file", { - file, - index - }) - ]) - } : void 0 - ]), 1032, ["disabled", "list-type", "files", "crossorigin", "handle-preview", "onRemove"])) : vue.createCommentVNode("v-if", true) - ]); - }; - } - }); - var Upload = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__file", "upload.vue"]]); - - const ElUpload = withInstall(Upload); - - const watermarkProps = buildProps({ - zIndex: { - type: Number, - default: 9 - }, - rotate: { - type: Number, - default: -22 - }, - width: Number, - height: Number, - image: String, - content: { - type: definePropType([String, Array]), - default: "Element Plus" - }, - font: { - type: definePropType(Object) - }, - gap: { - type: definePropType(Array), - default: () => [100, 100] - }, - offset: { - type: definePropType(Array) - } - }); - - function toLowercaseSeparator(key) { - return key.replace(/([A-Z])/g, "-$1").toLowerCase(); - } - function getStyleStr(style) { - return Object.keys(style).map((key) => `${toLowercaseSeparator(key)}: ${style[key]};`).join(" "); - } - function getPixelRatio() { - return window.devicePixelRatio || 1; - } - const reRendering = (mutation, watermarkElement) => { - let flag = false; - if (mutation.removedNodes.length && watermarkElement) { - flag = Array.from(mutation.removedNodes).includes(watermarkElement); - } - if (mutation.type === "attributes" && mutation.target === watermarkElement) { - flag = true; - } - return flag; - }; - - const FontGap = 3; - function prepareCanvas(width, height, ratio = 1) { - const canvas = document.createElement("canvas"); - const ctx = canvas.getContext("2d"); - const realWidth = width * ratio; - const realHeight = height * ratio; - canvas.setAttribute("width", `${realWidth}px`); - canvas.setAttribute("height", `${realHeight}px`); - ctx.save(); - return [ctx, canvas, realWidth, realHeight]; - } - function useClips() { - function getClips(content, rotate, ratio, width, height, font, gapX, gapY) { - const [ctx, canvas, contentWidth, contentHeight] = prepareCanvas(width, height, ratio); - if (content instanceof HTMLImageElement) { - ctx.drawImage(content, 0, 0, contentWidth, contentHeight); - } else { - const { - color, - fontSize, - fontStyle, - fontWeight, - fontFamily, - textAlign, - textBaseline - } = font; - const mergedFontSize = Number(fontSize) * ratio; - ctx.font = `${fontStyle} normal ${fontWeight} ${mergedFontSize}px/${height}px ${fontFamily}`; - ctx.fillStyle = color; - ctx.textAlign = textAlign; - ctx.textBaseline = textBaseline; - const contents = isArray$1(content) ? content : [content]; - contents == null ? void 0 : contents.forEach((item, index) => { - ctx.fillText(item != null ? item : "", contentWidth / 2, index * (mergedFontSize + FontGap * ratio)); - }); - } - const angle = Math.PI / 180 * Number(rotate); - const maxSize = Math.max(width, height); - const [rCtx, rCanvas, realMaxSize] = prepareCanvas(maxSize, maxSize, ratio); - rCtx.translate(realMaxSize / 2, realMaxSize / 2); - rCtx.rotate(angle); - if (contentWidth > 0 && contentHeight > 0) { - rCtx.drawImage(canvas, -contentWidth / 2, -contentHeight / 2); - } - function getRotatePos(x, y) { - const targetX = x * Math.cos(angle) - y * Math.sin(angle); - const targetY = x * Math.sin(angle) + y * Math.cos(angle); - return [targetX, targetY]; - } - let left = 0; - let right = 0; - let top = 0; - let bottom = 0; - const halfWidth = contentWidth / 2; - const halfHeight = contentHeight / 2; - const points = [ - [0 - halfWidth, 0 - halfHeight], - [0 + halfWidth, 0 - halfHeight], - [0 + halfWidth, 0 + halfHeight], - [0 - halfWidth, 0 + halfHeight] - ]; - points.forEach(([x, y]) => { - const [targetX, targetY] = getRotatePos(x, y); - left = Math.min(left, targetX); - right = Math.max(right, targetX); - top = Math.min(top, targetY); - bottom = Math.max(bottom, targetY); - }); - const cutLeft = left + realMaxSize / 2; - const cutTop = top + realMaxSize / 2; - const cutWidth = right - left; - const cutHeight = bottom - top; - const realGapX = gapX * ratio; - const realGapY = gapY * ratio; - const filledWidth = (cutWidth + realGapX) * 2; - const filledHeight = cutHeight + realGapY; - const [fCtx, fCanvas] = prepareCanvas(filledWidth, filledHeight); - function drawImg(targetX = 0, targetY = 0) { - fCtx.drawImage(rCanvas, cutLeft, cutTop, cutWidth, cutHeight, targetX, targetY, cutWidth, cutHeight); - } - drawImg(); - drawImg(cutWidth + realGapX, -cutHeight / 2 - realGapY / 2); - drawImg(cutWidth + realGapX, +cutHeight / 2 + realGapY / 2); - return [fCanvas.toDataURL(), filledWidth / ratio, filledHeight / ratio]; - } - return getClips; - } - - const __default__$b = vue.defineComponent({ - name: "ElWatermark" - }); - const _sfc_main$c = /* @__PURE__ */ vue.defineComponent({ - ...__default__$b, - props: watermarkProps, - setup(__props) { - const props = __props; - const style = { - position: "relative" - }; - const color = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.font) == null ? void 0 : _a.color) != null ? _b : "rgba(0,0,0,.15)"; - }); - const fontSize = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.font) == null ? void 0 : _a.fontSize) != null ? _b : 16; - }); - const fontWeight = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.font) == null ? void 0 : _a.fontWeight) != null ? _b : "normal"; - }); - const fontStyle = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.font) == null ? void 0 : _a.fontStyle) != null ? _b : "normal"; - }); - const fontFamily = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.font) == null ? void 0 : _a.fontFamily) != null ? _b : "sans-serif"; - }); - const textAlign = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.font) == null ? void 0 : _a.textAlign) != null ? _b : "center"; - }); - const textBaseline = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.font) == null ? void 0 : _a.textBaseline) != null ? _b : "hanging"; - }); - const gapX = vue.computed(() => props.gap[0]); - const gapY = vue.computed(() => props.gap[1]); - const gapXCenter = vue.computed(() => gapX.value / 2); - const gapYCenter = vue.computed(() => gapY.value / 2); - const offsetLeft = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.offset) == null ? void 0 : _a[0]) != null ? _b : gapXCenter.value; - }); - const offsetTop = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.offset) == null ? void 0 : _a[1]) != null ? _b : gapYCenter.value; - }); - const getMarkStyle = () => { - const markStyle = { - zIndex: props.zIndex, - position: "absolute", - left: 0, - top: 0, - width: "100%", - height: "100%", - pointerEvents: "none", - backgroundRepeat: "repeat" - }; - let positionLeft = offsetLeft.value - gapXCenter.value; - let positionTop = offsetTop.value - gapYCenter.value; - if (positionLeft > 0) { - markStyle.left = `${positionLeft}px`; - markStyle.width = `calc(100% - ${positionLeft}px)`; - positionLeft = 0; - } - if (positionTop > 0) { - markStyle.top = `${positionTop}px`; - markStyle.height = `calc(100% - ${positionTop}px)`; - positionTop = 0; - } - markStyle.backgroundPosition = `${positionLeft}px ${positionTop}px`; - return markStyle; - }; - const containerRef = vue.shallowRef(null); - const watermarkRef = vue.shallowRef(); - const stopObservation = vue.ref(false); - const destroyWatermark = () => { - if (watermarkRef.value) { - watermarkRef.value.remove(); - watermarkRef.value = void 0; - } - }; - const appendWatermark = (base64Url, markWidth) => { - var _a; - if (containerRef.value && watermarkRef.value) { - stopObservation.value = true; - watermarkRef.value.setAttribute("style", getStyleStr({ - ...getMarkStyle(), - backgroundImage: `url('${base64Url}')`, - backgroundSize: `${Math.floor(markWidth)}px` - })); - (_a = containerRef.value) == null ? void 0 : _a.append(watermarkRef.value); - setTimeout(() => { - stopObservation.value = false; - }); - } - }; - const getMarkSize = (ctx) => { - let defaultWidth = 120; - let defaultHeight = 64; - const image = props.image; - const content = props.content; - const width = props.width; - const height = props.height; - if (!image && ctx.measureText) { - ctx.font = `${Number(fontSize.value)}px ${fontFamily.value}`; - const contents = isArray$1(content) ? content : [content]; - const sizes = contents.map((item) => { - const metrics = ctx.measureText(item); - return [ - metrics.width, - metrics.fontBoundingBoxAscent !== void 0 ? metrics.fontBoundingBoxAscent + metrics.fontBoundingBoxDescent : metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent - ]; - }); - defaultWidth = Math.ceil(Math.max(...sizes.map((size) => size[0]))); - defaultHeight = Math.ceil(Math.max(...sizes.map((size) => size[1]))) * contents.length + (contents.length - 1) * FontGap; - } - return [width != null ? width : defaultWidth, height != null ? height : defaultHeight]; - }; - const getClips = useClips(); - const renderWatermark = () => { - const canvas = document.createElement("canvas"); - const ctx = canvas.getContext("2d"); - const image = props.image; - const content = props.content; - const rotate = props.rotate; - if (ctx) { - if (!watermarkRef.value) { - watermarkRef.value = document.createElement("div"); - } - const ratio = getPixelRatio(); - const [markWidth, markHeight] = getMarkSize(ctx); - const drawCanvas = (drawContent) => { - const [textClips, clipWidth] = getClips(drawContent || "", rotate, ratio, markWidth, markHeight, { - color: color.value, - fontSize: fontSize.value, - fontStyle: fontStyle.value, - fontWeight: fontWeight.value, - fontFamily: fontFamily.value, - textAlign: textAlign.value, - textBaseline: textBaseline.value - }, gapX.value, gapY.value); - appendWatermark(textClips, clipWidth); - }; - if (image) { - const img = new Image(); - img.onload = () => { - drawCanvas(img); - }; - img.onerror = () => { - drawCanvas(content); - }; - img.crossOrigin = "anonymous"; - img.referrerPolicy = "no-referrer"; - img.src = image; - } else { - drawCanvas(content); - } - } - }; - vue.onMounted(() => { - renderWatermark(); - }); - vue.watch(() => props, () => { - renderWatermark(); - }, { - deep: true, - flush: "post" - }); - vue.onBeforeUnmount(() => { - destroyWatermark(); - }); - const onMutate = (mutations) => { - if (stopObservation.value) { - return; - } - mutations.forEach((mutation) => { - if (reRendering(mutation, watermarkRef.value)) { - destroyWatermark(); - renderWatermark(); - } - }); - }; - useMutationObserver(containerRef, onMutate, { - attributes: true, - subtree: true, - childList: true - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "containerRef", - ref: containerRef, - style: vue.normalizeStyle([style]) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 4); - }; - } - }); - var Watermark = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__file", "watermark.vue"]]); - - const ElWatermark = withInstall(Watermark); - - const maskProps = buildProps({ - zIndex: { - type: Number, - default: 1001 - }, - visible: Boolean, - fill: { - type: String, - default: "rgba(0,0,0,0.5)" - }, - pos: { - type: definePropType(Object) - }, - targetAreaClickable: { - type: Boolean, - default: true - } - }); - - const useTarget = (target, open, gap, mergedMask, scrollIntoViewOptions) => { - const posInfo = vue.ref(null); - const getTargetEl = () => { - let targetEl; - if (isString$1(target.value)) { - targetEl = document.querySelector(target.value); - } else if (isFunction$1(target.value)) { - targetEl = target.value(); - } else { - targetEl = target.value; - } - return targetEl; - }; - const updatePosInfo = () => { - const targetEl = getTargetEl(); - if (!targetEl || !open.value) { - posInfo.value = null; - return; - } - if (!isInViewPort(targetEl)) { - targetEl.scrollIntoView(scrollIntoViewOptions.value); - } - const { left, top, width, height } = targetEl.getBoundingClientRect(); - posInfo.value = { - left, - top, - width, - height, - radius: 0 - }; - }; - vue.onMounted(() => { - vue.watch([open, target], () => { - updatePosInfo(); - }, { - immediate: true - }); - window.addEventListener("resize", updatePosInfo); - }); - vue.onBeforeUnmount(() => { - window.removeEventListener("resize", updatePosInfo); - }); - const getGapOffset = (index) => { - var _a; - return (_a = isArray$1(gap.value.offset) ? gap.value.offset[index] : gap.value.offset) != null ? _a : 6; - }; - const mergedPosInfo = vue.computed(() => { - var _a; - if (!posInfo.value) - return posInfo.value; - const gapOffsetX = getGapOffset(0); - const gapOffsetY = getGapOffset(1); - const gapRadius = ((_a = gap.value) == null ? void 0 : _a.radius) || 2; - return { - left: posInfo.value.left - gapOffsetX, - top: posInfo.value.top - gapOffsetY, - width: posInfo.value.width + gapOffsetX * 2, - height: posInfo.value.height + gapOffsetY * 2, - radius: gapRadius - }; - }); - const triggerTarget = vue.computed(() => { - const targetEl = getTargetEl(); - if (!mergedMask.value || !targetEl || !window.DOMRect) { - return targetEl || void 0; - } - return { - getBoundingClientRect() { - var _a, _b, _c, _d; - return window.DOMRect.fromRect({ - width: ((_a = mergedPosInfo.value) == null ? void 0 : _a.width) || 0, - height: ((_b = mergedPosInfo.value) == null ? void 0 : _b.height) || 0, - x: ((_c = mergedPosInfo.value) == null ? void 0 : _c.left) || 0, - y: ((_d = mergedPosInfo.value) == null ? void 0 : _d.top) || 0 - }); - } - }; - }); - return { - mergedPosInfo, - triggerTarget - }; - }; - const tourKey = Symbol("ElTour"); - function isInViewPort(element) { - const viewWidth = window.innerWidth || document.documentElement.clientWidth; - const viewHeight = window.innerHeight || document.documentElement.clientHeight; - const { top, right, bottom, left } = element.getBoundingClientRect(); - return top >= 0 && left >= 0 && right <= viewWidth && bottom <= viewHeight; - } - const useFloating = (referenceRef, contentRef, arrowRef, placement, strategy, offset$1, zIndex, showArrow) => { - const x = vue.ref(); - const y = vue.ref(); - const middlewareData = vue.ref({}); - const states = { - x, - y, - placement, - strategy, - middlewareData - }; - const middleware = vue.computed(() => { - const _middleware = [ - offset(vue.unref(offset$1)), - flip(), - shift(), - overflowMiddleware() - ]; - if (vue.unref(showArrow) && vue.unref(arrowRef)) { - _middleware.push(arrow({ - element: vue.unref(arrowRef) - })); - } - return _middleware; - }); - const update = async () => { - if (!isClient) - return; - const referenceEl = vue.unref(referenceRef); - const contentEl = vue.unref(contentRef); - if (!referenceEl || !contentEl) - return; - const data = await computePosition(referenceEl, contentEl, { - placement: vue.unref(placement), - strategy: vue.unref(strategy), - middleware: vue.unref(middleware) - }); - keysOf(states).forEach((key) => { - states[key].value = data[key]; - }); - }; - const contentStyle = vue.computed(() => { - if (!vue.unref(referenceRef)) { - return { - position: "fixed", - top: "50%", - left: "50%", - transform: "translate3d(-50%, -50%, 0)", - maxWidth: "100vw", - zIndex: vue.unref(zIndex) - }; - } - const { overflow } = vue.unref(middlewareData); - return { - position: vue.unref(strategy), - zIndex: vue.unref(zIndex), - top: vue.unref(y) != null ? `${vue.unref(y)}px` : "", - left: vue.unref(x) != null ? `${vue.unref(x)}px` : "", - maxWidth: (overflow == null ? void 0 : overflow.maxWidth) ? `${overflow == null ? void 0 : overflow.maxWidth}px` : "" - }; - }); - const arrowStyle = vue.computed(() => { - if (!vue.unref(showArrow)) - return {}; - const { arrow: arrow2 } = vue.unref(middlewareData); - return { - left: (arrow2 == null ? void 0 : arrow2.x) != null ? `${arrow2 == null ? void 0 : arrow2.x}px` : "", - top: (arrow2 == null ? void 0 : arrow2.y) != null ? `${arrow2 == null ? void 0 : arrow2.y}px` : "" - }; - }); - let cleanup; - vue.onMounted(() => { - const referenceEl = vue.unref(referenceRef); - const contentEl = vue.unref(contentRef); - if (referenceEl && contentEl) { - cleanup = autoUpdate(referenceEl, contentEl, update); - } - vue.watchEffect(() => { - update(); - }); - }); - vue.onBeforeUnmount(() => { - cleanup && cleanup(); - }); - return { - update, - contentStyle, - arrowStyle - }; - }; - const overflowMiddleware = () => { - return { - name: "overflow", - async fn(state) { - const overflow = await detectOverflow(state); - let overWidth = 0; - if (overflow.left > 0) - overWidth = overflow.left; - if (overflow.right > 0) - overWidth = overflow.right; - const floatingWidth = state.rects.floating.width; - return { - data: { - maxWidth: floatingWidth - overWidth - } - }; - } - }; - }; - - const __default__$a = vue.defineComponent({ - name: "ElTourMask", - inheritAttrs: false - }); - const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({ - ...__default__$a, - props: maskProps, - setup(__props) { - const props = __props; - const { ns } = vue.inject(tourKey); - const radius = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.pos) == null ? void 0 : _a.radius) != null ? _b : 2; - }); - const roundInfo = vue.computed(() => { - const v = radius.value; - const baseInfo = `a${v},${v} 0 0 1`; - return { - topRight: `${baseInfo} ${v},${v}`, - bottomRight: `${baseInfo} ${-v},${v}`, - bottomLeft: `${baseInfo} ${-v},${-v}`, - topLeft: `${baseInfo} ${v},${-v}` - }; - }); - const path = vue.computed(() => { - const width = window.innerWidth; - const height = window.innerHeight; - const info = roundInfo.value; - const _path = `M${width},0 L0,0 L0,${height} L${width},${height} L${width},0 Z`; - const _radius = radius.value; - return props.pos ? `${_path} M${props.pos.left + _radius},${props.pos.top} h${props.pos.width - _radius * 2} ${info.topRight} v${props.pos.height - _radius * 2} ${info.bottomRight} h${-props.pos.width + _radius * 2} ${info.bottomLeft} v${-props.pos.height + _radius * 2} ${info.topLeft} z` : _path; - }); - const pathStyle = vue.computed(() => { - return { - fill: props.fill, - pointerEvents: "auto", - cursor: "auto" - }; - }); - useLockscreen(vue.toRef(props, "visible"), { - ns - }); - return (_ctx, _cache) => { - return _ctx.visible ? (vue.openBlock(), vue.createElementBlock("div", vue.mergeProps({ - key: 0, - class: vue.unref(ns).e("mask"), - style: { - position: "fixed", - left: 0, - right: 0, - top: 0, - bottom: 0, - zIndex: _ctx.zIndex, - pointerEvents: _ctx.pos && _ctx.targetAreaClickable ? "none" : "auto" - } - }, _ctx.$attrs), [ - (vue.openBlock(), vue.createElementBlock("svg", { style: { - width: "100%", - height: "100%" - } }, [ - vue.createElementVNode("path", { - class: vue.normalizeClass(vue.unref(ns).e("hollow")), - style: vue.normalizeStyle(vue.unref(pathStyle)), - d: vue.unref(path) - }, null, 14, ["d"]) - ])) - ], 16)) : vue.createCommentVNode("v-if", true); - }; - } - }); - var ElTourMask = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__file", "mask.vue"]]); - - const tourStrategies = ["absolute", "fixed"]; - const tourPlacements = [ - "top-start", - "top-end", - "top", - "bottom-start", - "bottom-end", - "bottom", - "left-start", - "left-end", - "left", - "right-start", - "right-end", - "right" - ]; - const tourContentProps = buildProps({ - placement: { - type: definePropType(String), - values: tourPlacements, - default: "bottom" - }, - reference: { - type: definePropType(Object), - default: null - }, - strategy: { - type: definePropType(String), - values: tourStrategies, - default: "absolute" - }, - offset: { - type: Number, - default: 10 - }, - showArrow: Boolean, - zIndex: { - type: Number, - default: 2001 - } - }); - const tourContentEmits = { - close: () => true - }; - - const __default__$9 = vue.defineComponent({ - name: "ElTourContent" - }); - const _sfc_main$a = /* @__PURE__ */ vue.defineComponent({ - ...__default__$9, - props: tourContentProps, - emits: tourContentEmits, - setup(__props, { emit }) { - const props = __props; - const placement = vue.ref(props.placement); - const strategy = vue.ref(props.strategy); - const contentRef = vue.ref(null); - const arrowRef = vue.ref(null); - vue.watch(() => props.placement, () => { - placement.value = props.placement; - }); - const { contentStyle, arrowStyle } = useFloating(vue.toRef(props, "reference"), contentRef, arrowRef, placement, strategy, vue.toRef(props, "offset"), vue.toRef(props, "zIndex"), vue.toRef(props, "showArrow")); - const side = vue.computed(() => { - return placement.value.split("-")[0]; - }); - const { ns } = vue.inject(tourKey); - const onCloseRequested = () => { - emit("close"); - }; - const onFocusoutPrevented = (event) => { - if (event.detail.focusReason === "pointer") { - event.preventDefault(); - } - }; - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "contentRef", - ref: contentRef, - style: vue.normalizeStyle(vue.unref(contentStyle)), - class: vue.normalizeClass(vue.unref(ns).e("content")), - "data-side": vue.unref(side), - tabindex: "-1" - }, [ - vue.createVNode(vue.unref(ElFocusTrap), { - loop: "", - trapped: "", - "focus-start-el": "container", - "focus-trap-el": contentRef.value || void 0, - onReleaseRequested: onCloseRequested, - onFocusoutPrevented - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["focus-trap-el"]), - _ctx.showArrow ? (vue.openBlock(), vue.createElementBlock("span", { - key: 0, - ref_key: "arrowRef", - ref: arrowRef, - style: vue.normalizeStyle(vue.unref(arrowStyle)), - class: vue.normalizeClass(vue.unref(ns).e("arrow")) - }, null, 6)) : vue.createCommentVNode("v-if", true) - ], 14, ["data-side"]); - }; - } - }); - var ElTourContent = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__file", "content.vue"]]); - - var ElTourSteps = vue.defineComponent({ - name: "ElTourSteps", - props: { - current: { - type: Number, - default: 0 - } - }, - emits: ["update-total"], - setup(props, { slots, emit }) { - let cacheTotal = 0; - return () => { - var _a, _b; - const children = (_a = slots.default) == null ? void 0 : _a.call(slots); - const result = []; - let total = 0; - function filterSteps(children2) { - if (!isArray$1(children2)) - return; - children2.forEach((item) => { - var _a2; - const name = (_a2 = (item == null ? void 0 : item.type) || {}) == null ? void 0 : _a2.name; - if (name === "ElTourStep") { - result.push(item); - total += 1; - } - }); - } - if (children.length) { - filterSteps(flattedChildren((_b = children[0]) == null ? void 0 : _b.children)); - } - if (cacheTotal !== total) { - cacheTotal = total; - emit("update-total", total); - } - if (result.length) { - return result[props.current]; - } - return null; - }; - } - }); - - const tourProps = buildProps({ - modelValue: Boolean, - current: { - type: Number, - default: 0 - }, - showArrow: { - type: Boolean, - default: true - }, - showClose: { - type: Boolean, - default: true - }, - closeIcon: { - type: iconPropType - }, - placement: tourContentProps.placement, - contentStyle: { - type: definePropType([Object]) - }, - mask: { - type: definePropType([Boolean, Object]), - default: true - }, - gap: { - type: definePropType(Object), - default: () => ({ - offset: 6, - radius: 2 - }) - }, - zIndex: { - type: Number - }, - scrollIntoViewOptions: { - type: definePropType([Boolean, Object]), - default: () => ({ - block: "center" - }) - }, - type: { - type: definePropType(String) - }, - appendTo: { - type: definePropType([String, Object]), - default: "body" - }, - closeOnPressEscape: { - type: Boolean, - default: true - }, - targetAreaClickable: { - type: Boolean, - default: true - } - }); - const tourEmits = { - [UPDATE_MODEL_EVENT]: (value) => isBoolean(value), - ["update:current"]: (current) => isNumber(current), - close: (current) => isNumber(current), - finish: () => true, - change: (current) => isNumber(current) - }; - - const __default__$8 = vue.defineComponent({ - name: "ElTour" - }); - const _sfc_main$9 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$8, - props: tourProps, - emits: tourEmits, - setup(__props, { emit }) { - const props = __props; - const ns = useNamespace("tour"); - const total = vue.ref(0); - const currentStep = vue.ref(); - const current = useVModel(props, "current", emit, { - passive: true - }); - const currentTarget = vue.computed(() => { - var _a; - return (_a = currentStep.value) == null ? void 0 : _a.target; - }); - const kls = vue.computed(() => [ - ns.b(), - mergedType.value === "primary" ? ns.m("primary") : "" - ]); - const mergedPlacement = vue.computed(() => { - var _a; - return ((_a = currentStep.value) == null ? void 0 : _a.placement) || props.placement; - }); - const mergedContentStyle = vue.computed(() => { - var _a, _b; - return (_b = (_a = currentStep.value) == null ? void 0 : _a.contentStyle) != null ? _b : props.contentStyle; - }); - const mergedMask = vue.computed(() => { - var _a, _b; - return (_b = (_a = currentStep.value) == null ? void 0 : _a.mask) != null ? _b : props.mask; - }); - const mergedShowMask = vue.computed(() => !!mergedMask.value && props.modelValue); - const mergedMaskStyle = vue.computed(() => isBoolean(mergedMask.value) ? void 0 : mergedMask.value); - const mergedShowArrow = vue.computed(() => { - var _a, _b; - return !!currentTarget.value && ((_b = (_a = currentStep.value) == null ? void 0 : _a.showArrow) != null ? _b : props.showArrow); - }); - const mergedScrollIntoViewOptions = vue.computed(() => { - var _a, _b; - return (_b = (_a = currentStep.value) == null ? void 0 : _a.scrollIntoViewOptions) != null ? _b : props.scrollIntoViewOptions; - }); - const mergedType = vue.computed(() => { - var _a, _b; - return (_b = (_a = currentStep.value) == null ? void 0 : _a.type) != null ? _b : props.type; - }); - const { nextZIndex } = useZIndex(); - const nowZIndex = nextZIndex(); - const mergedZIndex = vue.computed(() => { - var _a; - return (_a = props.zIndex) != null ? _a : nowZIndex; - }); - const { mergedPosInfo: pos, triggerTarget } = useTarget(currentTarget, vue.toRef(props, "modelValue"), vue.toRef(props, "gap"), mergedMask, mergedScrollIntoViewOptions); - vue.watch(() => props.modelValue, (val) => { - if (!val) { - current.value = 0; - } - }); - const onEscClose = () => { - if (props.closeOnPressEscape) { - emit("update:modelValue", false); - emit("close", current.value); - } - }; - const onUpdateTotal = (val) => { - total.value = val; - }; - const slots = vue.useSlots(); - vue.provide(tourKey, { - currentStep, - current, - total, - showClose: vue.toRef(props, "showClose"), - closeIcon: vue.toRef(props, "closeIcon"), - mergedType, - ns, - slots, - updateModelValue(modelValue) { - emit("update:modelValue", modelValue); - }, - onClose() { - emit("close", current.value); - }, - onFinish() { - emit("finish"); - }, - onChange() { - emit("change", current.value); - } - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ - vue.createVNode(vue.unref(ElTeleport$1), { to: _ctx.appendTo }, { - default: vue.withCtx(() => { - var _a, _b; - return [ - vue.createElementVNode("div", vue.mergeProps({ class: vue.unref(kls) }, _ctx.$attrs), [ - vue.createVNode(ElTourMask, { - visible: vue.unref(mergedShowMask), - fill: (_a = vue.unref(mergedMaskStyle)) == null ? void 0 : _a.color, - style: vue.normalizeStyle((_b = vue.unref(mergedMaskStyle)) == null ? void 0 : _b.style), - pos: vue.unref(pos), - "z-index": vue.unref(mergedZIndex), - "target-area-clickable": _ctx.targetAreaClickable - }, null, 8, ["visible", "fill", "style", "pos", "z-index", "target-area-clickable"]), - _ctx.modelValue ? (vue.openBlock(), vue.createBlock(ElTourContent, { - key: vue.unref(current), - reference: vue.unref(triggerTarget), - placement: vue.unref(mergedPlacement), - "show-arrow": vue.unref(mergedShowArrow), - "z-index": vue.unref(mergedZIndex), - style: vue.normalizeStyle(vue.unref(mergedContentStyle)), - onClose: onEscClose - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(ElTourSteps), { - current: vue.unref(current), - onUpdateTotal - }, { - default: vue.withCtx(() => [ - vue.renderSlot(_ctx.$slots, "default") - ]), - _: 3 - }, 8, ["current"]) - ]), - _: 3 - }, 8, ["reference", "placement", "show-arrow", "z-index", "style"])) : vue.createCommentVNode("v-if", true) - ], 16) - ]; - }), - _: 3 - }, 8, ["to"]), - vue.createCommentVNode(" just for IDE "), - vue.createCommentVNode("v-if", true) - ], 64); - }; - } - }); - var Tour = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__file", "tour.vue"]]); - - const tourStepProps = buildProps({ - target: { - type: definePropType([String, Object, Function]) - }, - title: String, - description: String, - showClose: { - type: Boolean, - default: void 0 - }, - closeIcon: { - type: iconPropType - }, - showArrow: { - type: Boolean, - default: void 0 - }, - placement: tourContentProps.placement, - mask: { - type: definePropType([Boolean, Object]), - default: void 0 - }, - contentStyle: { - type: definePropType([Object]) - }, - prevButtonProps: { - type: definePropType(Object) - }, - nextButtonProps: { - type: definePropType(Object) - }, - scrollIntoViewOptions: { - type: definePropType([Boolean, Object]), - default: void 0 - }, - type: { - type: definePropType(String) - } - }); - const tourStepEmits = { - close: () => true - }; - - const __default__$7 = vue.defineComponent({ - name: "ElTourStep" - }); - const _sfc_main$8 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$7, - props: tourStepProps, - emits: tourStepEmits, - setup(__props, { emit }) { - const props = __props; - const { Close } = CloseComponents; - const { t } = useLocale(); - const { - currentStep, - current, - total, - showClose, - closeIcon, - mergedType, - ns, - slots: tourSlots, - updateModelValue, - onClose: tourOnClose, - onFinish: tourOnFinish, - onChange - } = vue.inject(tourKey); - vue.watch(props, (val) => { - currentStep.value = val; - }, { - immediate: true - }); - const mergedShowClose = vue.computed(() => { - var _a; - return (_a = props.showClose) != null ? _a : showClose.value; - }); - const mergedCloseIcon = vue.computed(() => { - var _a, _b; - return (_b = (_a = props.closeIcon) != null ? _a : closeIcon.value) != null ? _b : Close; - }); - const filterButtonProps = (btnProps) => { - if (!btnProps) - return; - return omit(btnProps, ["children", "onClick"]); - }; - const onPrev = () => { - var _a, _b; - current.value -= 1; - if ((_a = props.prevButtonProps) == null ? void 0 : _a.onClick) { - (_b = props.prevButtonProps) == null ? void 0 : _b.onClick(); - } - onChange(); - }; - const onNext = () => { - var _a; - if (current.value >= total.value - 1) { - onFinish(); - } else { - current.value += 1; - } - if ((_a = props.nextButtonProps) == null ? void 0 : _a.onClick) { - props.nextButtonProps.onClick(); - } - onChange(); - }; - const onFinish = () => { - onClose(); - tourOnFinish(); - }; - const onClose = () => { - updateModelValue(false); - tourOnClose(); - emit("close"); - }; - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock(vue.Fragment, null, [ - vue.unref(mergedShowClose) ? (vue.openBlock(), vue.createElementBlock("button", { - key: 0, - "aria-label": "Close", - class: vue.normalizeClass(vue.unref(ns).e("closebtn")), - type: "button", - onClick: onClose - }, [ - vue.createVNode(vue.unref(ElIcon), { - class: vue.normalizeClass(vue.unref(ns).e("close")) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(mergedCloseIcon)))) - ]), - _: 1 - }, 8, ["class"]) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("header", { - class: vue.normalizeClass([vue.unref(ns).e("header"), { "show-close": vue.unref(showClose) }]) - }, [ - vue.renderSlot(_ctx.$slots, "header", {}, () => [ - vue.createElementVNode("span", { - role: "heading", - class: vue.normalizeClass(vue.unref(ns).e("title")) - }, vue.toDisplayString(_ctx.title), 3) - ]) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("body")) - }, [ - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - vue.createElementVNode("span", null, vue.toDisplayString(_ctx.description), 1) - ]) - ], 2), - vue.createElementVNode("footer", { - class: vue.normalizeClass(vue.unref(ns).e("footer")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).b("indicators")) - }, [ - vue.unref(tourSlots).indicators ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(tourSlots).indicators), { - key: 0, - current: vue.unref(current), - total: vue.unref(total) - }, null, 8, ["current", "total"])) : (vue.openBlock(true), vue.createElementBlock(vue.Fragment, { key: 1 }, vue.renderList(vue.unref(total), (item, index) => { - return vue.openBlock(), vue.createElementBlock("span", { - key: item, - class: vue.normalizeClass([vue.unref(ns).b("indicator"), index === vue.unref(current) ? "is-active" : ""]) - }, null, 2); - }), 128)) - ], 2), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).b("buttons")) - }, [ - vue.unref(current) > 0 ? (vue.openBlock(), vue.createBlock(vue.unref(ElButton), vue.mergeProps({ - key: 0, - size: "small", - type: vue.unref(mergedType) - }, filterButtonProps(_ctx.prevButtonProps), { onClick: onPrev }), { - default: vue.withCtx(() => { - var _a, _b; - return [ - vue.createTextVNode(vue.toDisplayString((_b = (_a = _ctx.prevButtonProps) == null ? void 0 : _a.children) != null ? _b : vue.unref(t)("el.tour.previous")), 1) - ]; - }), - _: 1 - }, 16, ["type"])) : vue.createCommentVNode("v-if", true), - vue.unref(current) <= vue.unref(total) - 1 ? (vue.openBlock(), vue.createBlock(vue.unref(ElButton), vue.mergeProps({ - key: 1, - size: "small", - type: vue.unref(mergedType) === "primary" ? "default" : "primary" - }, filterButtonProps(_ctx.nextButtonProps), { onClick: onNext }), { - default: vue.withCtx(() => { - var _a, _b; - return [ - vue.createTextVNode(vue.toDisplayString((_b = (_a = _ctx.nextButtonProps) == null ? void 0 : _a.children) != null ? _b : vue.unref(current) === vue.unref(total) - 1 ? vue.unref(t)("el.tour.finish") : vue.unref(t)("el.tour.next")), 1) - ]; - }), - _: 1 - }, 16, ["type"])) : vue.createCommentVNode("v-if", true) - ], 2) - ], 2) - ], 64); - }; - } - }); - var TourStep = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__file", "step.vue"]]); - - const ElTour = withInstall(Tour, { - TourStep - }); - const ElTourStep = withNoopInstall(TourStep); - - const anchorProps = buildProps({ - container: { - type: definePropType([ - String, - Object - ]) - }, - offset: { - type: Number, - default: 0 - }, - bound: { - type: Number, - default: 15 - }, - duration: { - type: Number, - default: 300 - }, - marker: { - type: Boolean, - default: true - }, - type: { - type: definePropType(String), - default: "default" - }, - direction: { - type: definePropType(String), - default: "vertical" - }, - selectScrollTop: { - type: Boolean, - default: false - } - }); - const anchorEmits = { - change: (href) => isString$1(href), - click: (e, href) => e instanceof MouseEvent && (isString$1(href) || isUndefined(href)) - }; - - const anchorKey = Symbol("anchor"); - - const __default__$6 = vue.defineComponent({ - name: "ElAnchor" - }); - const _sfc_main$7 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$6, - props: anchorProps, - emits: anchorEmits, - setup(__props, { expose, emit }) { - const props = __props; - const currentAnchor = vue.ref(""); - const anchorRef = vue.ref(null); - const markerRef = vue.ref(null); - const containerEl = vue.ref(); - const links = {}; - let isScrolling = false; - let currentScrollTop = 0; - const ns = useNamespace("anchor"); - const cls = vue.computed(() => [ - ns.b(), - props.type === "underline" ? ns.m("underline") : "", - ns.m(props.direction) - ]); - const addLink = (state) => { - links[state.href] = state.el; - }; - const removeLink = (href) => { - delete links[href]; - }; - const setCurrentAnchor = (href) => { - const activeHref = currentAnchor.value; - if (activeHref !== href) { - currentAnchor.value = href; - emit("change", href); - } - }; - let clearAnimate = null; - const scrollToAnchor = (href) => { - if (!containerEl.value) - return; - const target = getElement(href); - if (!target) - return; - if (clearAnimate) - clearAnimate(); - isScrolling = true; - const scrollEle = getScrollElement(target, containerEl.value); - const distance = getOffsetTopDistance(target, scrollEle); - const max = scrollEle.scrollHeight - scrollEle.clientHeight; - const to = Math.min(distance - props.offset, max); - clearAnimate = animateScrollTo(containerEl.value, currentScrollTop, to, props.duration, () => { - setTimeout(() => { - isScrolling = false; - }, 20); - }); - }; - const scrollTo = (href) => { - if (href) { - setCurrentAnchor(href); - scrollToAnchor(href); - } - }; - const handleClick = (e, href) => { - emit("click", e, href); - scrollTo(href); - }; - const handleScroll = throttleByRaf(() => { - if (containerEl.value) { - currentScrollTop = getScrollTop(containerEl.value); - } - const currentHref = getCurrentHref(); - if (isScrolling || isUndefined(currentHref)) - return; - setCurrentAnchor(currentHref); - }); - const getCurrentHref = () => { - if (!containerEl.value) - return; - const scrollTop = getScrollTop(containerEl.value); - const anchorTopList = []; - for (const href of Object.keys(links)) { - const target = getElement(href); - if (!target) - continue; - const scrollEle = getScrollElement(target, containerEl.value); - const distance = getOffsetTopDistance(target, scrollEle); - anchorTopList.push({ - top: distance - props.offset - props.bound, - href - }); - } - anchorTopList.sort((prev, next) => prev.top - next.top); - for (let i = 0; i < anchorTopList.length; i++) { - const item = anchorTopList[i]; - const next = anchorTopList[i + 1]; - if (i === 0 && scrollTop === 0) { - return props.selectScrollTop ? item.href : ""; - } - if (item.top <= scrollTop && (!next || next.top > scrollTop)) { - return item.href; - } - } - }; - const getContainer = () => { - const el = getElement(props.container); - if (!el || isWindow$1(el)) { - containerEl.value = window; - } else { - containerEl.value = el; - } - }; - useEventListener(containerEl, "scroll", handleScroll); - const markerStyle = vue.computed(() => { - if (!anchorRef.value || !markerRef.value || !currentAnchor.value) - return {}; - const currentLinkEl = links[currentAnchor.value]; - if (!currentLinkEl) - return {}; - const anchorRect = anchorRef.value.getBoundingClientRect(); - const markerRect = markerRef.value.getBoundingClientRect(); - const linkRect = currentLinkEl.getBoundingClientRect(); - if (props.direction === "horizontal") { - const left = linkRect.left - anchorRect.left; - return { - left: `${left}px`, - width: `${linkRect.width}px`, - opacity: 1 - }; - } else { - const top = linkRect.top - anchorRect.top + (linkRect.height - markerRect.height) / 2; - return { - top: `${top}px`, - opacity: 1 - }; - } - }); - vue.onMounted(() => { - getContainer(); - const hash = decodeURIComponent(window.location.hash); - const target = getElement(hash); - if (target) { - scrollTo(hash); - } else { - handleScroll(); - } - }); - vue.watch(() => props.container, () => { - getContainer(); - }); - vue.provide(anchorKey, { - ns, - direction: props.direction, - currentAnchor, - addLink, - removeLink, - handleClick - }); - expose({ - scrollTo - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "anchorRef", - ref: anchorRef, - class: vue.normalizeClass(vue.unref(cls)) - }, [ - _ctx.marker ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - ref_key: "markerRef", - ref: markerRef, - class: vue.normalizeClass(vue.unref(ns).e("marker")), - style: vue.normalizeStyle(vue.unref(markerStyle)) - }, null, 6)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("list")) - }, [ - vue.renderSlot(_ctx.$slots, "default") - ], 2) - ], 2); - }; - } - }); - var Anchor = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__file", "anchor.vue"]]); - - const anchorLinkProps = buildProps({ - title: String, - href: String - }); - - const __default__$5 = vue.defineComponent({ - name: "ElAnchorLink" - }); - const _sfc_main$6 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$5, - props: anchorLinkProps, - setup(__props) { - const props = __props; - const linkRef = vue.ref(null); - const { - ns, - direction, - currentAnchor, - addLink, - removeLink, - handleClick: contextHandleClick - } = vue.inject(anchorKey); - const cls = vue.computed(() => [ - ns.e("link"), - ns.is("active", currentAnchor.value === props.href) - ]); - const handleClick = (e) => { - contextHandleClick(e, props.href); - }; - vue.watch(() => props.href, (val, oldVal) => { - vue.nextTick(() => { - if (oldVal) - removeLink(oldVal); - if (val) { - addLink({ - href: val, - el: linkRef.value - }); - } - }); - }); - vue.onMounted(() => { - const { href } = props; - if (href) { - addLink({ - href, - el: linkRef.value - }); - } - }); - vue.onBeforeUnmount(() => { - const { href } = props; - if (href) { - removeLink(href); - } - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - class: vue.normalizeClass(vue.unref(ns).e("item")) - }, [ - vue.createElementVNode("a", { - ref_key: "linkRef", - ref: linkRef, - class: vue.normalizeClass(vue.unref(cls)), - href: _ctx.href, - onClick: handleClick - }, [ - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - vue.createTextVNode(vue.toDisplayString(_ctx.title), 1) - ]) - ], 10, ["href"]), - _ctx.$slots["sub-link"] && vue.unref(direction) === "vertical" ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("list")) - }, [ - vue.renderSlot(_ctx.$slots, "sub-link") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var AnchorLink = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__file", "anchor-link.vue"]]); - - const ElAnchor = withInstall(Anchor, { - AnchorLink - }); - const ElAnchorLink = withNoopInstall(AnchorLink); - - const segmentedProps = buildProps({ - direction: { - type: definePropType(String), - default: "horizontal" - }, - options: { - type: definePropType(Array), - default: () => [] - }, - modelValue: { - type: [String, Number, Boolean], - default: void 0 - }, - block: Boolean, - size: useSizeProp, - disabled: Boolean, - validateEvent: { - type: Boolean, - default: true - }, - id: String, - name: String, - ...useAriaProps(["ariaLabel"]) - }); - const segmentedEmits = { - [UPDATE_MODEL_EVENT]: (val) => isString$1(val) || isNumber(val) || isBoolean(val), - [CHANGE_EVENT]: (val) => isString$1(val) || isNumber(val) || isBoolean(val) - }; - - const __default__$4 = vue.defineComponent({ - name: "ElSegmented" - }); - const _sfc_main$5 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$4, - props: segmentedProps, - emits: segmentedEmits, - setup(__props, { emit }) { - const props = __props; - const ns = useNamespace("segmented"); - const segmentedId = useId(); - const segmentedSize = useFormSize(); - const _disabled = useFormDisabled(); - const { formItem } = useFormItem(); - const { inputId, isLabeledByFormItem } = useFormItemInputId(props, { - formItemContext: formItem - }); - const segmentedRef = vue.ref(null); - const activeElement = useActiveElement(); - const state = vue.reactive({ - isInit: false, - width: 0, - height: 0, - translateX: 0, - translateY: 0, - focusVisible: false - }); - const handleChange = (item) => { - const value = getValue(item); - emit(UPDATE_MODEL_EVENT, value); - emit(CHANGE_EVENT, value); - }; - const getValue = (item) => { - return isObject$1(item) ? item.value : item; - }; - const getLabel = (item) => { - return isObject$1(item) ? item.label : item; - }; - const getDisabled = (item) => { - return !!(_disabled.value || (isObject$1(item) ? item.disabled : false)); - }; - const getSelected = (item) => { - return props.modelValue === getValue(item); - }; - const getOption = (value) => { - return props.options.find((item) => getValue(item) === value); - }; - const getItemCls = (item) => { - return [ - ns.e("item"), - ns.is("selected", getSelected(item)), - ns.is("disabled", getDisabled(item)) - ]; - }; - const updateSelect = () => { - if (!segmentedRef.value) - return; - const selectedItem = segmentedRef.value.querySelector(".is-selected"); - const selectedItemInput = segmentedRef.value.querySelector(".is-selected input"); - if (!selectedItem || !selectedItemInput) { - state.width = 0; - state.height = 0; - state.translateX = 0; - state.translateY = 0; - state.focusVisible = false; - return; - } - const rect = selectedItem.getBoundingClientRect(); - state.isInit = true; - if (props.direction === "vertical") { - state.height = rect.height; - state.translateY = selectedItem.offsetTop; - } else { - state.width = rect.width; - state.translateX = selectedItem.offsetLeft; - } - try { - state.focusVisible = selectedItemInput.matches(":focus-visible"); - } catch (e) { - } - }; - const segmentedCls = vue.computed(() => [ - ns.b(), - ns.m(segmentedSize.value), - ns.is("block", props.block) - ]); - const selectedStyle = vue.computed(() => ({ - width: props.direction === "vertical" ? "100%" : `${state.width}px`, - height: props.direction === "vertical" ? `${state.height}px` : "100%", - transform: props.direction === "vertical" ? `translateY(${state.translateY}px)` : `translateX(${state.translateX}px)`, - display: state.isInit ? "block" : "none" - })); - const selectedCls = vue.computed(() => [ - ns.e("item-selected"), - ns.is("disabled", getDisabled(getOption(props.modelValue))), - ns.is("focus-visible", state.focusVisible) - ]); - const name = vue.computed(() => { - return props.name || segmentedId.value; - }); - useResizeObserver(segmentedRef, updateSelect); - vue.watch(activeElement, updateSelect); - vue.watch(() => props.modelValue, () => { - var _a; - updateSelect(); - if (props.validateEvent) { - (_a = formItem == null ? void 0 : formItem.validate) == null ? void 0 : _a.call(formItem, "change").catch((err) => debugWarn()); - } - }, { - flush: "post" - }); - return (_ctx, _cache) => { - return _ctx.options.length ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - id: vue.unref(inputId), - ref_key: "segmentedRef", - ref: segmentedRef, - class: vue.normalizeClass(vue.unref(segmentedCls)), - role: "radiogroup", - "aria-label": !vue.unref(isLabeledByFormItem) ? _ctx.ariaLabel || "segmented" : void 0, - "aria-labelledby": vue.unref(isLabeledByFormItem) ? vue.unref(formItem).labelId : void 0 - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass([vue.unref(ns).e("group"), vue.unref(ns).m(props.direction)]) - }, [ - vue.createElementVNode("div", { - style: vue.normalizeStyle(vue.unref(selectedStyle)), - class: vue.normalizeClass(vue.unref(selectedCls)) - }, null, 6), - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.options, (item, index) => { - return vue.openBlock(), vue.createElementBlock("label", { - key: index, - class: vue.normalizeClass(getItemCls(item)) - }, [ - vue.createElementVNode("input", { - class: vue.normalizeClass(vue.unref(ns).e("item-input")), - type: "radio", - name: vue.unref(name), - disabled: getDisabled(item), - checked: getSelected(item), - onChange: ($event) => handleChange(item) - }, null, 42, ["name", "disabled", "checked", "onChange"]), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("item-label")) - }, [ - vue.renderSlot(_ctx.$slots, "default", { item }, () => [ - vue.createTextVNode(vue.toDisplayString(getLabel(item)), 1) - ]) - ], 2) - ], 2); - }), 128)) - ], 2) - ], 10, ["id", "aria-label", "aria-labelledby"])) : vue.createCommentVNode("v-if", true); - }; - } - }); - var Segmented = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__file", "segmented.vue"]]); - - const ElSegmented = withInstall(Segmented); - - const filterOption = (pattern, option) => { - const lowerCase = pattern.toLowerCase(); - const label = option.label || option.value; - return label.toLowerCase().includes(lowerCase); - }; - const getMentionCtx = (inputEl, prefix, split) => { - const { selectionEnd } = inputEl; - if (selectionEnd === null) - return; - const inputValue = inputEl.value; - const prefixArray = castArray$1(prefix); - let splitIndex = -1; - let mentionCtx; - for (let i = selectionEnd - 1; i >= 0; --i) { - const char = inputValue[i]; - if (char === split || char === "\n" || char === "\r") { - splitIndex = i; - continue; - } - if (prefixArray.includes(char)) { - const end = splitIndex === -1 ? selectionEnd : splitIndex; - const pattern = inputValue.slice(i + 1, end); - mentionCtx = { - pattern, - start: i + 1, - end, - prefix: char, - prefixIndex: i, - splitIndex, - selectionEnd - }; - break; - } - } - return mentionCtx; - }; - const getCursorPosition = (element, options = { - debug: false, - useSelectionEnd: false - }) => { - const selectionStart = element.selectionStart !== null ? element.selectionStart : 0; - const selectionEnd = element.selectionEnd !== null ? element.selectionEnd : 0; - const position = options.useSelectionEnd ? selectionEnd : selectionStart; - const properties = [ - "direction", - "boxSizing", - "width", - "height", - "overflowX", - "overflowY", - "borderTopWidth", - "borderRightWidth", - "borderBottomWidth", - "borderLeftWidth", - "borderStyle", - "paddingTop", - "paddingRight", - "paddingBottom", - "paddingLeft", - "fontStyle", - "fontVariant", - "fontWeight", - "fontStretch", - "fontSize", - "fontSizeAdjust", - "lineHeight", - "fontFamily", - "textAlign", - "textTransform", - "textIndent", - "textDecoration", - "letterSpacing", - "wordSpacing", - "tabSize", - "MozTabSize" - ]; - if (options.debug) { - const el = document.querySelector("#input-textarea-caret-position-mirror-div"); - if (el == null ? void 0 : el.parentNode) - el.parentNode.removeChild(el); - } - const div = document.createElement("div"); - div.id = "input-textarea-caret-position-mirror-div"; - document.body.appendChild(div); - const style = div.style; - const computed = window.getComputedStyle(element); - const isInput = element.nodeName === "INPUT"; - style.whiteSpace = isInput ? "nowrap" : "pre-wrap"; - if (!isInput) - style.wordWrap = "break-word"; - style.position = "absolute"; - if (!options.debug) - style.visibility = "hidden"; - properties.forEach((prop) => { - if (isInput && prop === "lineHeight") { - if (computed.boxSizing === "border-box") { - const height = Number.parseInt(computed.height); - const outerHeight = Number.parseInt(computed.paddingTop) + Number.parseInt(computed.paddingBottom) + Number.parseInt(computed.borderTopWidth) + Number.parseInt(computed.borderBottomWidth); - const targetHeight = outerHeight + Number.parseInt(computed.lineHeight); - if (height > targetHeight) { - style.lineHeight = `${height - outerHeight}px`; - } else if (height === targetHeight) { - style.lineHeight = computed.lineHeight; - } else { - style.lineHeight = "0"; - } - } else { - style.lineHeight = computed.height; - } - } else { - style[prop] = computed[prop]; - } - }); - if (isFirefox()) { - if (element.scrollHeight > Number.parseInt(computed.height)) { - style.overflowY = "scroll"; - } - } else { - style.overflow = "hidden"; - } - div.textContent = element.value.slice(0, Math.max(0, position)); - if (isInput && div.textContent) { - div.textContent = div.textContent.replace(/\s/g, "\xA0"); - } - const span = document.createElement("span"); - span.textContent = element.value.slice(Math.max(0, position)) || "."; - span.style.position = "relative"; - span.style.left = `${-element.scrollLeft}px`; - span.style.top = `${-element.scrollTop}px`; - div.appendChild(span); - const relativePosition = { - top: span.offsetTop + Number.parseInt(computed.borderTopWidth), - left: span.offsetLeft + Number.parseInt(computed.borderLeftWidth), - height: Number.parseInt(computed.fontSize) * 1.5 - }; - if (options.debug) { - span.style.backgroundColor = "#aaa"; - } else { - document.body.removeChild(div); - } - if (relativePosition.left >= element.clientWidth) { - relativePosition.left = element.clientWidth; - } - return relativePosition; - }; - - const mentionProps = buildProps({ - ...inputProps, - options: { - type: definePropType(Array), - default: () => [] - }, - prefix: { - type: definePropType([String, Array]), - default: "@", - validator: (val) => { - if (isString$1(val)) - return val.length === 1; - return val.every((v) => isString$1(v) && v.length === 1); - } - }, - split: { - type: String, - default: " ", - validator: (val) => val.length === 1 - }, - filterOption: { - type: definePropType([Boolean, Function]), - default: () => filterOption, - validator: (val) => { - if (val === false) - return true; - return isFunction$1(val); - } - }, - placement: { - type: definePropType(String), - default: "bottom" - }, - showArrow: Boolean, - offset: { - type: Number, - default: 0 - }, - whole: Boolean, - checkIsWhole: { - type: definePropType(Function) - }, - modelValue: String, - loading: Boolean, - popperClass: { - type: String, - default: "" - }, - popperOptions: { - type: definePropType(Object), - default: () => ({}) - } - }); - const mentionEmits = { - [UPDATE_MODEL_EVENT]: (value) => isString$1(value), - search: (pattern, prefix) => isString$1(pattern) && isString$1(prefix), - select: (option, prefix) => isString$1(option.value) && isString$1(prefix), - focus: (evt) => evt instanceof FocusEvent, - blur: (evt) => evt instanceof FocusEvent - }; - - const mentionDropdownProps = buildProps({ - options: { - type: definePropType(Array), - default: () => [] - }, - loading: Boolean, - disabled: Boolean, - contentId: String, - ariaLabel: String - }); - const mentionDropdownEmits = { - select: (option) => isString$1(option.value) - }; - - const __default__$3 = vue.defineComponent({ - name: "ElMentionDropdown" - }); - const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$3, - props: mentionDropdownProps, - emits: mentionDropdownEmits, - setup(__props, { expose, emit }) { - const props = __props; - const ns = useNamespace("mention"); - const { t } = useLocale(); - const hoveringIndex = vue.ref(-1); - const scrollbarRef = vue.ref(); - const optionRefs = vue.ref(); - const dropdownRef = vue.ref(); - const optionkls = (item, index) => [ - ns.be("dropdown", "item"), - ns.is("hovering", hoveringIndex.value === index), - ns.is("disabled", item.disabled || props.disabled) - ]; - const handleSelect = (item) => { - if (item.disabled || props.disabled) - return; - emit("select", item); - }; - const handleMouseEnter = (index) => { - hoveringIndex.value = index; - }; - const filteredAllDisabled = vue.computed(() => props.disabled || props.options.every((item) => item.disabled)); - const hoverOption = vue.computed(() => props.options[hoveringIndex.value]); - const selectHoverOption = () => { - if (!hoverOption.value) - return; - emit("select", hoverOption.value); - }; - const navigateOptions = (direction) => { - const { options } = props; - if (options.length === 0 || filteredAllDisabled.value) - return; - if (direction === "next") { - hoveringIndex.value++; - if (hoveringIndex.value === options.length) { - hoveringIndex.value = 0; - } - } else if (direction === "prev") { - hoveringIndex.value--; - if (hoveringIndex.value < 0) { - hoveringIndex.value = options.length - 1; - } - } - const option = options[hoveringIndex.value]; - if (option.disabled) { - navigateOptions(direction); - return; - } - vue.nextTick(() => scrollToOption(option)); - }; - const scrollToOption = (option) => { - var _a, _b, _c, _d; - const { options } = props; - const index = options.findIndex((item) => item.value === option.value); - const target = (_a = optionRefs.value) == null ? void 0 : _a[index]; - if (target) { - const menu = (_c = (_b = dropdownRef.value) == null ? void 0 : _b.querySelector) == null ? void 0 : _c.call(_b, `.${ns.be("dropdown", "wrap")}`); - if (menu) { - scrollIntoView(menu, target); - } - } - (_d = scrollbarRef.value) == null ? void 0 : _d.handleScroll(); - }; - const resetHoveringIndex = () => { - if (filteredAllDisabled.value || props.options.length === 0) { - hoveringIndex.value = -1; - } else { - hoveringIndex.value = 0; - } - }; - vue.watch(() => props.options, resetHoveringIndex, { - immediate: true - }); - expose({ - hoveringIndex, - navigateOptions, - selectHoverOption, - hoverOption - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "dropdownRef", - ref: dropdownRef, - class: vue.normalizeClass(vue.unref(ns).b("dropdown")) - }, [ - _ctx.$slots.header ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).be("dropdown", "header")) - }, [ - vue.renderSlot(_ctx.$slots, "header") - ], 2)) : vue.createCommentVNode("v-if", true), - vue.withDirectives(vue.createVNode(vue.unref(ElScrollbar), { - id: _ctx.contentId, - ref_key: "scrollbarRef", - ref: scrollbarRef, - tag: "ul", - "wrap-class": vue.unref(ns).be("dropdown", "wrap"), - "view-class": vue.unref(ns).be("dropdown", "list"), - role: "listbox", - "aria-label": _ctx.ariaLabel, - "aria-orientation": "vertical" - }, { - default: vue.withCtx(() => [ - (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.options, (item, index) => { - return vue.openBlock(), vue.createElementBlock("li", { - id: `${_ctx.contentId}-${index}`, - ref_for: true, - ref_key: "optionRefs", - ref: optionRefs, - key: index, - class: vue.normalizeClass(optionkls(item, index)), - role: "option", - "aria-disabled": item.disabled || _ctx.disabled || void 0, - "aria-selected": hoveringIndex.value === index, - onMousemove: ($event) => handleMouseEnter(index), - onClick: vue.withModifiers(($event) => handleSelect(item), ["stop"]) - }, [ - vue.renderSlot(_ctx.$slots, "label", { - item, - index - }, () => { - var _a; - return [ - vue.createElementVNode("span", null, vue.toDisplayString((_a = item.label) != null ? _a : item.value), 1) - ]; - }) - ], 42, ["id", "aria-disabled", "aria-selected", "onMousemove", "onClick"]); - }), 128)) - ]), - _: 3 - }, 8, ["id", "wrap-class", "view-class", "aria-label"]), [ - [vue.vShow, _ctx.options.length > 0 && !_ctx.loading] - ]), - _ctx.loading ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(vue.unref(ns).be("dropdown", "loading")) - }, [ - vue.renderSlot(_ctx.$slots, "loading", {}, () => [ - vue.createTextVNode(vue.toDisplayString(vue.unref(t)("el.mention.loading")), 1) - ]) - ], 2)) : vue.createCommentVNode("v-if", true), - _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", { - key: 2, - class: vue.normalizeClass(vue.unref(ns).be("dropdown", "footer")) - }, [ - vue.renderSlot(_ctx.$slots, "footer") - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2); - }; - } - }); - var ElMentionDropdown = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__file", "mention-dropdown.vue"]]); - - const __default__$2 = vue.defineComponent({ - name: "ElMention", - inheritAttrs: false - }); - const _sfc_main$3 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$2, - props: mentionProps, - emits: mentionEmits, - setup(__props, { expose, emit }) { - const props = __props; - const passInputProps = vue.computed(() => pick(props, Object.keys(inputProps))); - const ns = useNamespace("mention"); - const disabled = useFormDisabled(); - const contentId = useId(); - const elInputRef = vue.ref(); - const tooltipRef = vue.ref(); - const dropdownRef = vue.ref(); - const visible = vue.ref(false); - const cursorStyle = vue.ref(); - const mentionCtx = vue.ref(); - const computedPlacement = vue.computed(() => props.showArrow ? props.placement : `${props.placement}-start`); - const computedFallbackPlacements = vue.computed(() => props.showArrow ? ["bottom", "top"] : ["bottom-start", "top-start"]); - const filteredOptions = vue.computed(() => { - const { filterOption, options } = props; - if (!mentionCtx.value || !filterOption) - return options; - return options.filter((option) => filterOption(mentionCtx.value.pattern, option)); - }); - const dropdownVisible = vue.computed(() => { - return visible.value && (!!filteredOptions.value.length || props.loading); - }); - const hoveringId = vue.computed(() => { - var _a; - return `${contentId.value}-${(_a = dropdownRef.value) == null ? void 0 : _a.hoveringIndex}`; - }); - const handleInputChange = (value) => { - emit("update:modelValue", value); - syncAfterCursorMove(); - }; - const handleInputKeyDown = (event) => { - var _a, _b, _c, _d; - if (!("code" in event) || ((_a = elInputRef.value) == null ? void 0 : _a.isComposing)) - return; - switch (event.code) { - case EVENT_CODE.left: - case EVENT_CODE.right: - syncAfterCursorMove(); - break; - case EVENT_CODE.up: - case EVENT_CODE.down: - if (!visible.value) - return; - event.preventDefault(); - (_b = dropdownRef.value) == null ? void 0 : _b.navigateOptions(event.code === EVENT_CODE.up ? "prev" : "next"); - break; - case EVENT_CODE.enter: - case EVENT_CODE.numpadEnter: - if (!visible.value) - return; - event.preventDefault(); - if ((_c = dropdownRef.value) == null ? void 0 : _c.hoverOption) { - (_d = dropdownRef.value) == null ? void 0 : _d.selectHoverOption(); - } else { - visible.value = false; - } - break; - case EVENT_CODE.esc: - if (!visible.value) - return; - event.preventDefault(); - visible.value = false; - break; - case EVENT_CODE.backspace: - if (props.whole && mentionCtx.value) { - const { splitIndex, selectionEnd, pattern, prefixIndex, prefix } = mentionCtx.value; - const inputEl = getInputEl(); - if (!inputEl) - return; - const inputValue = inputEl.value; - const matchOption = props.options.find((item) => item.value === pattern); - const isWhole = isFunction$1(props.checkIsWhole) ? props.checkIsWhole(pattern, prefix) : matchOption; - if (isWhole && splitIndex !== -1 && splitIndex + 1 === selectionEnd) { - event.preventDefault(); - const newValue = inputValue.slice(0, prefixIndex) + inputValue.slice(splitIndex + 1); - emit(UPDATE_MODEL_EVENT, newValue); - const newSelectionEnd = prefixIndex; - vue.nextTick(() => { - inputEl.selectionStart = newSelectionEnd; - inputEl.selectionEnd = newSelectionEnd; - syncDropdownVisible(); - }); - } - } - } - }; - const { wrapperRef } = useFocusController(elInputRef, { - beforeFocus() { - return disabled.value; - }, - afterFocus() { - syncAfterCursorMove(); - }, - beforeBlur(event) { - var _a; - return (_a = tooltipRef.value) == null ? void 0 : _a.isFocusInsideContent(event); - }, - afterBlur() { - visible.value = false; - } - }); - const handleInputMouseDown = () => { - syncAfterCursorMove(); - }; - const handleSelect = (item) => { - if (!mentionCtx.value) - return; - const inputEl = getInputEl(); - if (!inputEl) - return; - const inputValue = inputEl.value; - const { split } = props; - const newEndPart = inputValue.slice(mentionCtx.value.end); - const alreadySeparated = newEndPart.startsWith(split); - const newMiddlePart = `${item.value}${alreadySeparated ? "" : split}`; - const newValue = inputValue.slice(0, mentionCtx.value.start) + newMiddlePart + newEndPart; - emit(UPDATE_MODEL_EVENT, newValue); - emit("select", item, mentionCtx.value.prefix); - const newSelectionEnd = mentionCtx.value.start + newMiddlePart.length + (alreadySeparated ? 1 : 0); - vue.nextTick(() => { - inputEl.selectionStart = newSelectionEnd; - inputEl.selectionEnd = newSelectionEnd; - inputEl.focus(); - syncDropdownVisible(); - }); - }; - const getInputEl = () => { - var _a, _b; - return props.type === "textarea" ? (_a = elInputRef.value) == null ? void 0 : _a.textarea : (_b = elInputRef.value) == null ? void 0 : _b.input; - }; - const syncAfterCursorMove = () => { - setTimeout(() => { - syncCursor(); - syncDropdownVisible(); - vue.nextTick(() => { - var _a; - return (_a = tooltipRef.value) == null ? void 0 : _a.updatePopper(); - }); - }, 0); - }; - const syncCursor = () => { - const inputEl = getInputEl(); - if (!inputEl) - return; - const caretPosition = getCursorPosition(inputEl); - const inputRect = inputEl.getBoundingClientRect(); - const elInputRect = elInputRef.value.$el.getBoundingClientRect(); - cursorStyle.value = { - position: "absolute", - width: 0, - height: `${caretPosition.height}px`, - left: `${caretPosition.left + inputRect.left - elInputRect.left}px`, - top: `${caretPosition.top + inputRect.top - elInputRect.top}px` - }; - }; - const syncDropdownVisible = () => { - const inputEl = getInputEl(); - if (document.activeElement !== inputEl) { - visible.value = false; - return; - } - const { prefix, split } = props; - mentionCtx.value = getMentionCtx(inputEl, prefix, split); - if (mentionCtx.value && mentionCtx.value.splitIndex === -1) { - visible.value = true; - emit("search", mentionCtx.value.pattern, mentionCtx.value.prefix); - return; - } - visible.value = false; - }; - expose({ - input: elInputRef, - tooltip: tooltipRef, - dropdownVisible - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createElementBlock("div", { - ref_key: "wrapperRef", - ref: wrapperRef, - class: vue.normalizeClass([vue.unref(ns).b(), vue.unref(ns).is("disabled", vue.unref(disabled))]) - }, [ - vue.createVNode(vue.unref(ElInput), vue.mergeProps(vue.mergeProps(vue.unref(passInputProps), _ctx.$attrs), { - ref_key: "elInputRef", - ref: elInputRef, - "model-value": _ctx.modelValue, - disabled: vue.unref(disabled), - role: vue.unref(dropdownVisible) ? "combobox" : void 0, - "aria-activedescendant": vue.unref(dropdownVisible) ? vue.unref(hoveringId) || "" : void 0, - "aria-controls": vue.unref(dropdownVisible) ? vue.unref(contentId) : void 0, - "aria-expanded": vue.unref(dropdownVisible) || void 0, - "aria-label": _ctx.ariaLabel, - "aria-autocomplete": vue.unref(dropdownVisible) ? "none" : void 0, - "aria-haspopup": vue.unref(dropdownVisible) ? "listbox" : void 0, - onInput: handleInputChange, - onKeydown: handleInputKeyDown, - onMousedown: handleInputMouseDown - }), vue.createSlots({ - _: 2 - }, [ - vue.renderList(_ctx.$slots, (_, name) => { - return { - name, - fn: vue.withCtx((slotProps) => [ - vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotProps))) - ]) - }; - }) - ]), 1040, ["model-value", "disabled", "role", "aria-activedescendant", "aria-controls", "aria-expanded", "aria-label", "aria-autocomplete", "aria-haspopup"]), - vue.createVNode(vue.unref(ElTooltip), { - ref_key: "tooltipRef", - ref: tooltipRef, - visible: vue.unref(dropdownVisible), - "popper-class": [vue.unref(ns).e("popper"), _ctx.popperClass], - "popper-options": _ctx.popperOptions, - placement: vue.unref(computedPlacement), - "fallback-placements": vue.unref(computedFallbackPlacements), - effect: "light", - pure: "", - offset: _ctx.offset, - "show-arrow": _ctx.showArrow - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - style: vue.normalizeStyle(cursorStyle.value) - }, null, 4) - ]), - content: vue.withCtx(() => { - var _a; - return [ - vue.createVNode(ElMentionDropdown, { - ref_key: "dropdownRef", - ref: dropdownRef, - options: vue.unref(filteredOptions), - disabled: vue.unref(disabled), - loading: _ctx.loading, - "content-id": vue.unref(contentId), - "aria-label": _ctx.ariaLabel, - onSelect: handleSelect, - onClick: vue.withModifiers((_a = elInputRef.value) == null ? void 0 : _a.focus, ["stop"]) - }, vue.createSlots({ - _: 2 - }, [ - vue.renderList(_ctx.$slots, (_, name) => { - return { - name, - fn: vue.withCtx((slotProps) => [ - vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotProps))) - ]) - }; - }) - ]), 1032, ["options", "disabled", "loading", "content-id", "aria-label", "onClick"]) - ]; - }), - _: 3 - }, 8, ["visible", "popper-class", "popper-options", "placement", "fallback-placements", "offset", "show-arrow"]) - ], 2); - }; - } - }); - var Mention = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__file", "mention.vue"]]); - - const ElMention = withInstall(Mention); - - var Components = [ - ElAffix, - ElAlert, - ElAutocomplete, - ElAutoResizer, - ElAvatar, - ElBacktop, - ElBadge, - ElBreadcrumb, - ElBreadcrumbItem, - ElButton, - ElButtonGroup$1, - ElCalendar, - ElCard, - ElCarousel, - ElCarouselItem, - ElCascader, - ElCascaderPanel, - ElCheckTag, - ElCheckbox, - ElCheckboxButton, - ElCheckboxGroup$1, - ElCol, - ElCollapse, - ElCollapseItem, - ElCollapseTransition, - ElColorPicker, - ElConfigProvider, - ElContainer, - ElAside, - ElFooter, - ElHeader, - ElMain, - ElDatePicker, - ElDescriptions, - ElDescriptionsItem, - ElDialog, - ElDivider, - ElDrawer, - ElDropdown, - ElDropdownItem, - ElDropdownMenu, - ElEmpty, - ElForm, - ElFormItem, - ElIcon, - ElImage, - ElImageViewer, - ElInput, - ElInputNumber, - ElInputTag, - ElLink, - ElMenu, - ElMenuItem, - ElMenuItemGroup, - ElSubMenu, - ElPageHeader, - ElPagination, - ElPopconfirm, - ElPopover, - ElPopper, - ElProgress, - ElRadio, - ElRadioButton, - ElRadioGroup, - ElRate, - ElResult, - ElRow, - ElScrollbar, - ElSelect, - ElOption, - ElOptionGroup, - ElSelectV2, - ElSkeleton, - ElSkeletonItem, - ElSlider, - ElSpace, - ElStatistic, - ElCountdown, - ElSteps, - ElStep, - ElSwitch, - ElTable, - ElTableColumn, - ElTableV2, - ElTabs, - ElTabPane, - ElTag, - ElText, - ElTimePicker, - ElTimeSelect, - ElTimeline, - ElTimelineItem, - ElTooltip, - ElTooltipV2, - ElTransfer, - ElTree, - ElTreeSelect, - ElTreeV2, - ElUpload, - ElWatermark, - ElTour, - ElTourStep, - ElAnchor, - ElAnchorLink, - ElSegmented, - ElMention - ]; - - const SCOPE = "ElInfiniteScroll"; - const CHECK_INTERVAL = 50; - const DEFAULT_DELAY = 200; - const DEFAULT_DISTANCE = 0; - const attributes = { - delay: { - type: Number, - default: DEFAULT_DELAY - }, - distance: { - type: Number, - default: DEFAULT_DISTANCE - }, - disabled: { - type: Boolean, - default: false - }, - immediate: { - type: Boolean, - default: true - } - }; - const getScrollOptions = (el, instance) => { - return Object.entries(attributes).reduce((acm, [name, option]) => { - var _a, _b; - const { type, default: defaultValue } = option; - const attrVal = el.getAttribute(`infinite-scroll-${name}`); - let value = (_b = (_a = instance[attrVal]) != null ? _a : attrVal) != null ? _b : defaultValue; - value = value === "false" ? false : value; - value = type(value); - acm[name] = Number.isNaN(value) ? defaultValue : value; - return acm; - }, {}); - }; - const destroyObserver = (el) => { - const { observer } = el[SCOPE]; - if (observer) { - observer.disconnect(); - delete el[SCOPE].observer; - } - }; - const handleScroll = (el, cb) => { - const { container, containerEl, instance, observer, lastScrollTop } = el[SCOPE]; - const { disabled, distance } = getScrollOptions(el, instance); - const { clientHeight, scrollHeight, scrollTop } = containerEl; - const delta = scrollTop - lastScrollTop; - el[SCOPE].lastScrollTop = scrollTop; - if (observer || disabled || delta < 0) - return; - let shouldTrigger = false; - if (container === el) { - shouldTrigger = scrollHeight - (clientHeight + scrollTop) <= distance; - } else { - const { clientTop, scrollHeight: height } = el; - const offsetTop = getOffsetTopDistance(el, containerEl); - shouldTrigger = scrollTop + clientHeight >= offsetTop + clientTop + height - distance; - } - if (shouldTrigger) { - cb.call(instance); - } - }; - function checkFull(el, cb) { - const { containerEl, instance } = el[SCOPE]; - const { disabled } = getScrollOptions(el, instance); - if (disabled || containerEl.clientHeight === 0) - return; - if (containerEl.scrollHeight <= containerEl.clientHeight) { - cb.call(instance); - } else { - destroyObserver(el); - } - } - const InfiniteScroll = { - async mounted(el, binding) { - const { instance, value: cb } = binding; - if (!isFunction$1(cb)) { - throwError(SCOPE, "'v-infinite-scroll' binding value must be a function"); - } - await vue.nextTick(); - const { delay, immediate } = getScrollOptions(el, instance); - const container = getScrollContainer(el, true); - const containerEl = container === window ? document.documentElement : container; - const onScroll = throttle(handleScroll.bind(null, el, cb), delay); - if (!container) - return; - el[SCOPE] = { - instance, - container, - containerEl, - delay, - cb, - onScroll, - lastScrollTop: containerEl.scrollTop - }; - if (immediate) { - const observer = new MutationObserver(throttle(checkFull.bind(null, el, cb), CHECK_INTERVAL)); - el[SCOPE].observer = observer; - observer.observe(el, { childList: true, subtree: true }); - checkFull(el, cb); - } - container.addEventListener("scroll", onScroll); - }, - unmounted(el) { - if (!el[SCOPE]) - return; - const { container, onScroll } = el[SCOPE]; - container == null ? void 0 : container.removeEventListener("scroll", onScroll); - destroyObserver(el); - }, - async updated(el) { - if (!el[SCOPE]) { - await vue.nextTick(); - } else { - const { containerEl, cb, observer } = el[SCOPE]; - if (containerEl.clientHeight && observer) { - checkFull(el, cb); - } - } - } - }; - var InfiniteScroll$1 = InfiniteScroll; - - const _InfiniteScroll = InfiniteScroll$1; - _InfiniteScroll.install = (app) => { - app.directive("InfiniteScroll", _InfiniteScroll); - }; - const ElInfiniteScroll = _InfiniteScroll; - - function createLoadingComponent(options) { - let afterLeaveTimer; - const afterLeaveFlag = vue.ref(false); - const data = vue.reactive({ - ...options, - originalPosition: "", - originalOverflow: "", - visible: false - }); - function setText(text) { - data.text = text; - } - function destroySelf() { - const target = data.parent; - const ns = vm.ns; - if (!target.vLoadingAddClassList) { - let loadingNumber = target.getAttribute("loading-number"); - loadingNumber = Number.parseInt(loadingNumber) - 1; - if (!loadingNumber) { - removeClass(target, ns.bm("parent", "relative")); - target.removeAttribute("loading-number"); - } else { - target.setAttribute("loading-number", loadingNumber.toString()); - } - removeClass(target, ns.bm("parent", "hidden")); - } - removeElLoadingChild(); - loadingInstance.unmount(); - } - function removeElLoadingChild() { - var _a, _b; - (_b = (_a = vm.$el) == null ? void 0 : _a.parentNode) == null ? void 0 : _b.removeChild(vm.$el); - } - function close() { - var _a; - if (options.beforeClose && !options.beforeClose()) - return; - afterLeaveFlag.value = true; - clearTimeout(afterLeaveTimer); - afterLeaveTimer = setTimeout(handleAfterLeave, 400); - data.visible = false; - (_a = options.closed) == null ? void 0 : _a.call(options); - } - function handleAfterLeave() { - if (!afterLeaveFlag.value) - return; - const target = data.parent; - afterLeaveFlag.value = false; - target.vLoadingAddClassList = void 0; - destroySelf(); - } - const elLoadingComponent = vue.defineComponent({ - name: "ElLoading", - setup(_, { expose }) { - const { ns, zIndex } = useGlobalComponentSettings("loading"); - expose({ - ns, - zIndex - }); - return () => { - const svg = data.spinner || data.svg; - const spinner = vue.h("svg", { - class: "circular", - viewBox: data.svgViewBox ? data.svgViewBox : "0 0 50 50", - ...svg ? { innerHTML: svg } : {} - }, [ - vue.h("circle", { - class: "path", - cx: "25", - cy: "25", - r: "20", - fill: "none" - }) - ]); - const spinnerText = data.text ? vue.h("p", { class: ns.b("text") }, [data.text]) : void 0; - return vue.h(vue.Transition, { - name: ns.b("fade"), - onAfterLeave: handleAfterLeave - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createVNode("div", { - style: { - backgroundColor: data.background || "" - }, - class: [ - ns.b("mask"), - data.customClass, - data.fullscreen ? "is-fullscreen" : "" - ] - }, [ - vue.h("div", { - class: ns.b("spinner") - }, [spinner, spinnerText]) - ]), [[vue.vShow, data.visible]]) - ]) - }); - }; - } - }); - const loadingInstance = vue.createApp(elLoadingComponent); - const vm = loadingInstance.mount(document.createElement("div")); - return { - ...vue.toRefs(data), - setText, - removeElLoadingChild, - close, - handleAfterLeave, - vm, - get $el() { - return vm.$el; - } - }; - } - - let fullscreenInstance = void 0; - const Loading = function(options = {}) { - if (!isClient) - return void 0; - const resolved = resolveOptions(options); - if (resolved.fullscreen && fullscreenInstance) { - return fullscreenInstance; - } - const instance = createLoadingComponent({ - ...resolved, - closed: () => { - var _a; - (_a = resolved.closed) == null ? void 0 : _a.call(resolved); - if (resolved.fullscreen) - fullscreenInstance = void 0; - } - }); - addStyle(resolved, resolved.parent, instance); - addClassList(resolved, resolved.parent, instance); - resolved.parent.vLoadingAddClassList = () => addClassList(resolved, resolved.parent, instance); - let loadingNumber = resolved.parent.getAttribute("loading-number"); - if (!loadingNumber) { - loadingNumber = "1"; - } else { - loadingNumber = `${Number.parseInt(loadingNumber) + 1}`; - } - resolved.parent.setAttribute("loading-number", loadingNumber); - resolved.parent.appendChild(instance.$el); - vue.nextTick(() => instance.visible.value = resolved.visible); - if (resolved.fullscreen) { - fullscreenInstance = instance; - } - return instance; - }; - const resolveOptions = (options) => { - var _a, _b, _c, _d; - let target; - if (isString$1(options.target)) { - target = (_a = document.querySelector(options.target)) != null ? _a : document.body; - } else { - target = options.target || document.body; - } - return { - parent: target === document.body || options.body ? document.body : target, - background: options.background || "", - svg: options.svg || "", - svgViewBox: options.svgViewBox || "", - spinner: options.spinner || false, - text: options.text || "", - fullscreen: target === document.body && ((_b = options.fullscreen) != null ? _b : true), - lock: (_c = options.lock) != null ? _c : false, - customClass: options.customClass || "", - visible: (_d = options.visible) != null ? _d : true, - beforeClose: options.beforeClose, - closed: options.closed, - target - }; - }; - const addStyle = async (options, parent, instance) => { - const { nextZIndex } = instance.vm.zIndex || instance.vm._.exposed.zIndex; - const maskStyle = {}; - if (options.fullscreen) { - instance.originalPosition.value = getStyle(document.body, "position"); - instance.originalOverflow.value = getStyle(document.body, "overflow"); - maskStyle.zIndex = nextZIndex(); - } else if (options.parent === document.body) { - instance.originalPosition.value = getStyle(document.body, "position"); - await vue.nextTick(); - for (const property of ["top", "left"]) { - const scroll = property === "top" ? "scrollTop" : "scrollLeft"; - maskStyle[property] = `${options.target.getBoundingClientRect()[property] + document.body[scroll] + document.documentElement[scroll] - Number.parseInt(getStyle(document.body, `margin-${property}`), 10)}px`; - } - for (const property of ["height", "width"]) { - maskStyle[property] = `${options.target.getBoundingClientRect()[property]}px`; - } - } else { - instance.originalPosition.value = getStyle(parent, "position"); - } - for (const [key, value] of Object.entries(maskStyle)) { - instance.$el.style[key] = value; - } - }; - const addClassList = (options, parent, instance) => { - const ns = instance.vm.ns || instance.vm._.exposed.ns; - if (!["absolute", "fixed", "sticky"].includes(instance.originalPosition.value)) { - addClass(parent, ns.bm("parent", "relative")); - } else { - removeClass(parent, ns.bm("parent", "relative")); - } - if (options.fullscreen && options.lock) { - addClass(parent, ns.bm("parent", "hidden")); - } else { - removeClass(parent, ns.bm("parent", "hidden")); - } - }; - - const INSTANCE_KEY = Symbol("ElLoading"); - const createInstance = (el, binding) => { - var _a, _b, _c, _d; - const vm = binding.instance; - const getBindingProp = (key) => isObject$1(binding.value) ? binding.value[key] : void 0; - const resolveExpression = (key) => { - const data = isString$1(key) && (vm == null ? void 0 : vm[key]) || key; - if (data) - return vue.ref(data); - else - return data; - }; - const getProp = (name) => resolveExpression(getBindingProp(name) || el.getAttribute(`element-loading-${hyphenate(name)}`)); - const fullscreen = (_a = getBindingProp("fullscreen")) != null ? _a : binding.modifiers.fullscreen; - const options = { - text: getProp("text"), - svg: getProp("svg"), - svgViewBox: getProp("svgViewBox"), - spinner: getProp("spinner"), - background: getProp("background"), - customClass: getProp("customClass"), - fullscreen, - target: (_b = getBindingProp("target")) != null ? _b : fullscreen ? void 0 : el, - body: (_c = getBindingProp("body")) != null ? _c : binding.modifiers.body, - lock: (_d = getBindingProp("lock")) != null ? _d : binding.modifiers.lock - }; - el[INSTANCE_KEY] = { - options, - instance: Loading(options) - }; - }; - const updateOptions = (newOptions, originalOptions) => { - for (const key of Object.keys(originalOptions)) { - if (vue.isRef(originalOptions[key])) - originalOptions[key].value = newOptions[key]; - } - }; - const vLoading = { - mounted(el, binding) { - if (binding.value) { - createInstance(el, binding); - } - }, - updated(el, binding) { - const instance = el[INSTANCE_KEY]; - if (binding.oldValue !== binding.value) { - if (binding.value && !binding.oldValue) { - createInstance(el, binding); - } else if (binding.value && binding.oldValue) { - if (isObject$1(binding.value)) - updateOptions(binding.value, instance.options); - } else { - instance == null ? void 0 : instance.instance.close(); - } - } - }, - unmounted(el) { - var _a; - (_a = el[INSTANCE_KEY]) == null ? void 0 : _a.instance.close(); - el[INSTANCE_KEY] = null; - } - }; - - const ElLoading = { - install(app) { - app.directive("loading", vLoading); - app.config.globalProperties.$loading = Loading; - }, - directive: vLoading, - service: Loading - }; - - const messageTypes = ["success", "info", "warning", "error"]; - const messageDefaults = mutable({ - customClass: "", - center: false, - dangerouslyUseHTMLString: false, - duration: 3e3, - icon: void 0, - id: "", - message: "", - onClose: void 0, - showClose: false, - type: "info", - plain: false, - offset: 16, - zIndex: 0, - grouping: false, - repeatNum: 1, - appendTo: isClient ? document.body : void 0 - }); - const messageProps = buildProps({ - customClass: { - type: String, - default: messageDefaults.customClass - }, - center: { - type: Boolean, - default: messageDefaults.center - }, - dangerouslyUseHTMLString: { - type: Boolean, - default: messageDefaults.dangerouslyUseHTMLString - }, - duration: { - type: Number, - default: messageDefaults.duration - }, - icon: { - type: iconPropType, - default: messageDefaults.icon - }, - id: { - type: String, - default: messageDefaults.id - }, - message: { - type: definePropType([ - String, - Object, - Function - ]), - default: messageDefaults.message - }, - onClose: { - type: definePropType(Function), - default: messageDefaults.onClose - }, - showClose: { - type: Boolean, - default: messageDefaults.showClose - }, - type: { - type: String, - values: messageTypes, - default: messageDefaults.type - }, - plain: { - type: Boolean, - default: messageDefaults.plain - }, - offset: { - type: Number, - default: messageDefaults.offset - }, - zIndex: { - type: Number, - default: messageDefaults.zIndex - }, - grouping: { - type: Boolean, - default: messageDefaults.grouping - }, - repeatNum: { - type: Number, - default: messageDefaults.repeatNum - } - }); - const messageEmits = { - destroy: () => true - }; - - const instances = vue.shallowReactive([]); - const getInstance = (id) => { - const idx = instances.findIndex((instance) => instance.id === id); - const current = instances[idx]; - let prev; - if (idx > 0) { - prev = instances[idx - 1]; - } - return { current, prev }; - }; - const getLastOffset = (id) => { - const { prev } = getInstance(id); - if (!prev) - return 0; - return prev.vm.exposed.bottom.value; - }; - const getOffsetOrSpace = (id, offset) => { - const idx = instances.findIndex((instance) => instance.id === id); - return idx > 0 ? 16 : offset; - }; - - const __default__$1 = vue.defineComponent({ - name: "ElMessage" - }); - const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({ - ...__default__$1, - props: messageProps, - emits: messageEmits, - setup(__props, { expose }) { - const props = __props; - const { Close } = TypeComponents; - const { ns, zIndex } = useGlobalComponentSettings("message"); - const { currentZIndex, nextZIndex } = zIndex; - const messageRef = vue.ref(); - const visible = vue.ref(false); - const height = vue.ref(0); - let stopTimer = void 0; - const badgeType = vue.computed(() => props.type ? props.type === "error" ? "danger" : props.type : "info"); - const typeClass = vue.computed(() => { - const type = props.type; - return { [ns.bm("icon", type)]: type && TypeComponentsMap[type] }; - }); - const iconComponent = vue.computed(() => props.icon || TypeComponentsMap[props.type] || ""); - const lastOffset = vue.computed(() => getLastOffset(props.id)); - const offset = vue.computed(() => getOffsetOrSpace(props.id, props.offset) + lastOffset.value); - const bottom = vue.computed(() => height.value + offset.value); - const customStyle = vue.computed(() => ({ - top: `${offset.value}px`, - zIndex: currentZIndex.value - })); - function startTimer() { - if (props.duration === 0) - return; - ({ stop: stopTimer } = useTimeoutFn(() => { - close(); - }, props.duration)); - } - function clearTimer() { - stopTimer == null ? void 0 : stopTimer(); - } - function close() { - visible.value = false; - } - function keydown({ code }) { - if (code === EVENT_CODE.esc) { - close(); - } - } - vue.onMounted(() => { - startTimer(); - nextZIndex(); - visible.value = true; - }); - vue.watch(() => props.repeatNum, () => { - clearTimer(); - startTimer(); - }); - useEventListener(document, "keydown", keydown); - useResizeObserver(messageRef, () => { - height.value = messageRef.value.getBoundingClientRect().height; - }); - expose({ - visible, - bottom, - close - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.Transition, { - name: vue.unref(ns).b("fade"), - onBeforeLeave: _ctx.onClose, - onAfterLeave: ($event) => _ctx.$emit("destroy"), - persisted: "" - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createElementVNode("div", { - id: _ctx.id, - ref_key: "messageRef", - ref: messageRef, - class: vue.normalizeClass([ - vue.unref(ns).b(), - { [vue.unref(ns).m(_ctx.type)]: _ctx.type }, - vue.unref(ns).is("center", _ctx.center), - vue.unref(ns).is("closable", _ctx.showClose), - vue.unref(ns).is("plain", _ctx.plain), - _ctx.customClass - ]), - style: vue.normalizeStyle(vue.unref(customStyle)), - role: "alert", - onMouseenter: clearTimer, - onMouseleave: startTimer - }, [ - _ctx.repeatNum > 1 ? (vue.openBlock(), vue.createBlock(vue.unref(ElBadge), { - key: 0, - value: _ctx.repeatNum, - type: vue.unref(badgeType), - class: vue.normalizeClass(vue.unref(ns).e("badge")) - }, null, 8, ["value", "type", "class"])) : vue.createCommentVNode("v-if", true), - vue.unref(iconComponent) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 1, - class: vue.normalizeClass([vue.unref(ns).e("icon"), vue.unref(typeClass)]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(iconComponent)))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true), - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - !_ctx.dangerouslyUseHTMLString ? (vue.openBlock(), vue.createElementBlock("p", { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("content")) - }, vue.toDisplayString(_ctx.message), 3)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ - vue.createCommentVNode(" Caution here, message could've been compromised, never use user's input as message "), - vue.createElementVNode("p", { - class: vue.normalizeClass(vue.unref(ns).e("content")), - innerHTML: _ctx.message - }, null, 10, ["innerHTML"]) - ], 2112)) - ]), - _ctx.showClose ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 2, - class: vue.normalizeClass(vue.unref(ns).e("closeBtn")), - onClick: vue.withModifiers(close, ["stop"]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(Close)) - ]), - _: 1 - }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true) - ], 46, ["id"]), [ - [vue.vShow, visible.value] - ]) - ]), - _: 3 - }, 8, ["name", "onBeforeLeave", "onAfterLeave"]); - }; - } - }); - var MessageConstructor = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__file", "message.vue"]]); - - let seed$1 = 1; - const normalizeOptions = (params) => { - const options = !params || isString$1(params) || vue.isVNode(params) || isFunction$1(params) ? { message: params } : params; - const normalized = { - ...messageDefaults, - ...options - }; - if (!normalized.appendTo) { - normalized.appendTo = document.body; - } else if (isString$1(normalized.appendTo)) { - let appendTo = document.querySelector(normalized.appendTo); - if (!isElement$1(appendTo)) { - appendTo = document.body; - } - normalized.appendTo = appendTo; - } - if (isBoolean(messageConfig.grouping) && !normalized.grouping) { - normalized.grouping = messageConfig.grouping; - } - if (isNumber(messageConfig.duration) && normalized.duration === 3e3) { - normalized.duration = messageConfig.duration; - } - if (isNumber(messageConfig.offset) && normalized.offset === 16) { - normalized.offset = messageConfig.offset; - } - if (isBoolean(messageConfig.showClose) && !normalized.showClose) { - normalized.showClose = messageConfig.showClose; - } - return normalized; - }; - const closeMessage = (instance) => { - const idx = instances.indexOf(instance); - if (idx === -1) - return; - instances.splice(idx, 1); - const { handler } = instance; - handler.close(); - }; - const createMessage = ({ appendTo, ...options }, context) => { - const id = `message_${seed$1++}`; - const userOnClose = options.onClose; - const container = document.createElement("div"); - const props = { - ...options, - id, - onClose: () => { - userOnClose == null ? void 0 : userOnClose(); - closeMessage(instance); - }, - onDestroy: () => { - vue.render(null, container); - } - }; - const vnode = vue.createVNode(MessageConstructor, props, isFunction$1(props.message) || vue.isVNode(props.message) ? { - default: isFunction$1(props.message) ? props.message : () => props.message - } : null); - vnode.appContext = context || message._context; - vue.render(vnode, container); - appendTo.appendChild(container.firstElementChild); - const vm = vnode.component; - const handler = { - close: () => { - vm.exposed.visible.value = false; - } - }; - const instance = { - id, - vnode, - vm, - handler, - props: vnode.component.props - }; - return instance; - }; - const message = (options = {}, context) => { - if (!isClient) - return { close: () => void 0 }; - const normalized = normalizeOptions(options); - if (normalized.grouping && instances.length) { - const instance2 = instances.find(({ vnode: vm }) => { - var _a; - return ((_a = vm.props) == null ? void 0 : _a.message) === normalized.message; - }); - if (instance2) { - instance2.props.repeatNum += 1; - instance2.props.type = normalized.type; - return instance2.handler; - } - } - if (isNumber(messageConfig.max) && instances.length >= messageConfig.max) { - return { close: () => void 0 }; - } - const instance = createMessage(normalized, context); - instances.push(instance); - return instance.handler; - }; - messageTypes.forEach((type) => { - message[type] = (options = {}, appContext) => { - const normalized = normalizeOptions(options); - return message({ ...normalized, type }, appContext); - }; - }); - function closeAll$1(type) { - for (const instance of instances) { - if (!type || type === instance.props.type) { - instance.handler.close(); - } - } - } - message.closeAll = closeAll$1; - message._context = null; - var Message = message; - - const ElMessage = withInstallFunction(Message, "$message"); - - const _sfc_main$1 = vue.defineComponent({ - name: "ElMessageBox", - directives: { - TrapFocus - }, - components: { - ElButton, - ElFocusTrap, - ElInput, - ElOverlay, - ElIcon, - ...TypeComponents - }, - inheritAttrs: false, - props: { - buttonSize: { - type: String, - validator: isValidComponentSize - }, - modal: { - type: Boolean, - default: true - }, - lockScroll: { - type: Boolean, - default: true - }, - showClose: { - type: Boolean, - default: true - }, - closeOnClickModal: { - type: Boolean, - default: true - }, - closeOnPressEscape: { - type: Boolean, - default: true - }, - closeOnHashChange: { - type: Boolean, - default: true - }, - center: Boolean, - draggable: Boolean, - overflow: Boolean, - roundButton: { - default: false, - type: Boolean - }, - container: { - type: String, - default: "body" - }, - boxType: { - type: String, - default: "" - } - }, - emits: ["vanish", "action"], - setup(props, { emit }) { - const { - locale, - zIndex, - ns, - size: btnSize - } = useGlobalComponentSettings("message-box", vue.computed(() => props.buttonSize)); - const { t } = locale; - const { nextZIndex } = zIndex; - const visible = vue.ref(false); - const state = vue.reactive({ - autofocus: true, - beforeClose: null, - callback: null, - cancelButtonText: "", - cancelButtonClass: "", - confirmButtonText: "", - confirmButtonClass: "", - customClass: "", - customStyle: {}, - dangerouslyUseHTMLString: false, - distinguishCancelAndClose: false, - icon: "", - inputPattern: null, - inputPlaceholder: "", - inputType: "text", - inputValue: "", - inputValidator: void 0, - inputErrorMessage: "", - message: "", - modalFade: true, - modalClass: "", - showCancelButton: false, - showConfirmButton: true, - type: "", - title: void 0, - showInput: false, - action: "", - confirmButtonLoading: false, - cancelButtonLoading: false, - confirmButtonLoadingIcon: vue.markRaw(loading_default), - cancelButtonLoadingIcon: vue.markRaw(loading_default), - confirmButtonDisabled: false, - editorErrorMessage: "", - validateError: false, - zIndex: nextZIndex() - }); - const typeClass = vue.computed(() => { - const type = state.type; - return { [ns.bm("icon", type)]: type && TypeComponentsMap[type] }; - }); - const contentId = useId(); - const inputId = useId(); - const iconComponent = vue.computed(() => { - const type = state.type; - return state.icon || type && TypeComponentsMap[type] || ""; - }); - const hasMessage = vue.computed(() => !!state.message); - const rootRef = vue.ref(); - const headerRef = vue.ref(); - const focusStartRef = vue.ref(); - const inputRef = vue.ref(); - const confirmRef = vue.ref(); - const confirmButtonClasses = vue.computed(() => state.confirmButtonClass); - vue.watch(() => state.inputValue, async (val) => { - await vue.nextTick(); - if (props.boxType === "prompt" && val !== null) { - validate(); - } - }, { immediate: true }); - vue.watch(() => visible.value, (val) => { - var _a, _b; - if (val) { - if (props.boxType !== "prompt") { - if (state.autofocus) { - focusStartRef.value = (_b = (_a = confirmRef.value) == null ? void 0 : _a.$el) != null ? _b : rootRef.value; - } else { - focusStartRef.value = rootRef.value; - } - } - state.zIndex = nextZIndex(); - } - if (props.boxType !== "prompt") - return; - if (val) { - vue.nextTick().then(() => { - var _a2; - if (inputRef.value && inputRef.value.$el) { - if (state.autofocus) { - focusStartRef.value = (_a2 = getInputElement()) != null ? _a2 : rootRef.value; - } else { - focusStartRef.value = rootRef.value; - } - } - }); - } else { - state.editorErrorMessage = ""; - state.validateError = false; - } - }); - const draggable = vue.computed(() => props.draggable); - const overflow = vue.computed(() => props.overflow); - useDraggable(rootRef, headerRef, draggable, overflow); - vue.onMounted(async () => { - await vue.nextTick(); - if (props.closeOnHashChange) { - window.addEventListener("hashchange", doClose); - } - }); - vue.onBeforeUnmount(() => { - if (props.closeOnHashChange) { - window.removeEventListener("hashchange", doClose); - } - }); - function doClose() { - if (!visible.value) - return; - visible.value = false; - vue.nextTick(() => { - if (state.action) - emit("action", state.action); - }); - } - const handleWrapperClick = () => { - if (props.closeOnClickModal) { - handleAction(state.distinguishCancelAndClose ? "close" : "cancel"); - } - }; - const overlayEvent = useSameTarget(handleWrapperClick); - const handleInputEnter = (e) => { - if (state.inputType !== "textarea") { - e.preventDefault(); - return handleAction("confirm"); - } - }; - const handleAction = (action) => { - var _a; - if (props.boxType === "prompt" && action === "confirm" && !validate()) { - return; - } - state.action = action; - if (state.beforeClose) { - (_a = state.beforeClose) == null ? void 0 : _a.call(state, action, state, doClose); - } else { - doClose(); - } - }; - const validate = () => { - if (props.boxType === "prompt") { - const inputPattern = state.inputPattern; - if (inputPattern && !inputPattern.test(state.inputValue || "")) { - state.editorErrorMessage = state.inputErrorMessage || t("el.messagebox.error"); - state.validateError = true; - return false; - } - const inputValidator = state.inputValidator; - if (isFunction$1(inputValidator)) { - const validateResult = inputValidator(state.inputValue); - if (validateResult === false) { - state.editorErrorMessage = state.inputErrorMessage || t("el.messagebox.error"); - state.validateError = true; - return false; - } - if (isString$1(validateResult)) { - state.editorErrorMessage = validateResult; - state.validateError = true; - return false; - } - } - } - state.editorErrorMessage = ""; - state.validateError = false; - return true; - }; - const getInputElement = () => { - var _a, _b; - const inputRefs = (_a = inputRef.value) == null ? void 0 : _a.$refs; - return (_b = inputRefs == null ? void 0 : inputRefs.input) != null ? _b : inputRefs == null ? void 0 : inputRefs.textarea; - }; - const handleClose = () => { - handleAction("close"); - }; - const onCloseRequested = () => { - if (props.closeOnPressEscape) { - handleClose(); - } - }; - if (props.lockScroll) { - useLockscreen(visible); - } - return { - ...vue.toRefs(state), - ns, - overlayEvent, - visible, - hasMessage, - typeClass, - contentId, - inputId, - btnSize, - iconComponent, - confirmButtonClasses, - rootRef, - focusStartRef, - headerRef, - inputRef, - confirmRef, - doClose, - handleClose, - onCloseRequested, - handleWrapperClick, - handleInputEnter, - handleAction, - t - }; - } - }); - function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { - const _component_el_icon = vue.resolveComponent("el-icon"); - const _component_close = vue.resolveComponent("close"); - const _component_el_input = vue.resolveComponent("el-input"); - const _component_el_button = vue.resolveComponent("el-button"); - const _component_el_focus_trap = vue.resolveComponent("el-focus-trap"); - const _component_el_overlay = vue.resolveComponent("el-overlay"); - return vue.openBlock(), vue.createBlock(vue.Transition, { - name: "fade-in-linear", - onAfterLeave: ($event) => _ctx.$emit("vanish"), - persisted: "" - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createVNode(_component_el_overlay, { - "z-index": _ctx.zIndex, - "overlay-class": [_ctx.ns.is("message-box"), _ctx.modalClass], - mask: _ctx.modal - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - role: "dialog", - "aria-label": _ctx.title, - "aria-modal": "true", - "aria-describedby": !_ctx.showInput ? _ctx.contentId : void 0, - class: vue.normalizeClass(`${_ctx.ns.namespace.value}-overlay-message-box`), - onClick: _ctx.overlayEvent.onClick, - onMousedown: _ctx.overlayEvent.onMousedown, - onMouseup: _ctx.overlayEvent.onMouseup - }, [ - vue.createVNode(_component_el_focus_trap, { - loop: "", - trapped: _ctx.visible, - "focus-trap-el": _ctx.rootRef, - "focus-start-el": _ctx.focusStartRef, - onReleaseRequested: _ctx.onCloseRequested - }, { - default: vue.withCtx(() => [ - vue.createElementVNode("div", { - ref: "rootRef", - class: vue.normalizeClass([ - _ctx.ns.b(), - _ctx.customClass, - _ctx.ns.is("draggable", _ctx.draggable), - { [_ctx.ns.m("center")]: _ctx.center } - ]), - style: vue.normalizeStyle(_ctx.customStyle), - tabindex: "-1", - onClick: vue.withModifiers(() => { - }, ["stop"]) - }, [ - _ctx.title !== null && _ctx.title !== void 0 ? (vue.openBlock(), vue.createElementBlock("div", { - key: 0, - ref: "headerRef", - class: vue.normalizeClass([_ctx.ns.e("header"), { "show-close": _ctx.showClose }]) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("title")) - }, [ - _ctx.iconComponent && _ctx.center ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 0, - class: vue.normalizeClass([_ctx.ns.e("status"), _ctx.typeClass]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.iconComponent))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("span", null, vue.toDisplayString(_ctx.title), 1) - ], 2), - _ctx.showClose ? (vue.openBlock(), vue.createElementBlock("button", { - key: 0, - type: "button", - class: vue.normalizeClass(_ctx.ns.e("headerbtn")), - "aria-label": _ctx.t("el.messagebox.close"), - onClick: ($event) => _ctx.handleAction(_ctx.distinguishCancelAndClose ? "close" : "cancel"), - onKeydown: vue.withKeys(vue.withModifiers(($event) => _ctx.handleAction(_ctx.distinguishCancelAndClose ? "close" : "cancel"), ["prevent"]), ["enter"]) - }, [ - vue.createVNode(_component_el_icon, { - class: vue.normalizeClass(_ctx.ns.e("close")) - }, { - default: vue.withCtx(() => [ - vue.createVNode(_component_close) - ]), - _: 1 - }, 8, ["class"]) - ], 42, ["aria-label", "onClick", "onKeydown"])) : vue.createCommentVNode("v-if", true) - ], 2)) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - id: _ctx.contentId, - class: vue.normalizeClass(_ctx.ns.e("content")) - }, [ - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("container")) - }, [ - _ctx.iconComponent && !_ctx.center && _ctx.hasMessage ? (vue.openBlock(), vue.createBlock(_component_el_icon, { - key: 0, - class: vue.normalizeClass([_ctx.ns.e("status"), _ctx.typeClass]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.iconComponent))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true), - _ctx.hasMessage ? (vue.openBlock(), vue.createElementBlock("div", { - key: 1, - class: vue.normalizeClass(_ctx.ns.e("message")) - }, [ - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - !_ctx.dangerouslyUseHTMLString ? (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.showInput ? "label" : "p"), { - key: 0, - for: _ctx.showInput ? _ctx.inputId : void 0 - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(!_ctx.dangerouslyUseHTMLString ? _ctx.message : ""), 1) - ]), - _: 1 - }, 8, ["for"])) : (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(_ctx.showInput ? "label" : "p"), { - key: 1, - for: _ctx.showInput ? _ctx.inputId : void 0, - innerHTML: _ctx.message - }, null, 8, ["for", "innerHTML"])) - ]) - ], 2)) : vue.createCommentVNode("v-if", true) - ], 2), - vue.withDirectives(vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("input")) - }, [ - vue.createVNode(_component_el_input, { - id: _ctx.inputId, - ref: "inputRef", - modelValue: _ctx.inputValue, - "onUpdate:modelValue": ($event) => _ctx.inputValue = $event, - type: _ctx.inputType, - placeholder: _ctx.inputPlaceholder, - "aria-invalid": _ctx.validateError, - class: vue.normalizeClass({ invalid: _ctx.validateError }), - onKeydown: vue.withKeys(_ctx.handleInputEnter, ["enter"]) - }, null, 8, ["id", "modelValue", "onUpdate:modelValue", "type", "placeholder", "aria-invalid", "class", "onKeydown"]), - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("errormsg")), - style: vue.normalizeStyle({ - visibility: !!_ctx.editorErrorMessage ? "visible" : "hidden" - }) - }, vue.toDisplayString(_ctx.editorErrorMessage), 7) - ], 2), [ - [vue.vShow, _ctx.showInput] - ]) - ], 10, ["id"]), - vue.createElementVNode("div", { - class: vue.normalizeClass(_ctx.ns.e("btns")) - }, [ - _ctx.showCancelButton ? (vue.openBlock(), vue.createBlock(_component_el_button, { - key: 0, - loading: _ctx.cancelButtonLoading, - "loading-icon": _ctx.cancelButtonLoadingIcon, - class: vue.normalizeClass([_ctx.cancelButtonClass]), - round: _ctx.roundButton, - size: _ctx.btnSize, - onClick: ($event) => _ctx.handleAction("cancel"), - onKeydown: vue.withKeys(vue.withModifiers(($event) => _ctx.handleAction("cancel"), ["prevent"]), ["enter"]) - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(_ctx.cancelButtonText || _ctx.t("el.messagebox.cancel")), 1) - ]), - _: 1 - }, 8, ["loading", "loading-icon", "class", "round", "size", "onClick", "onKeydown"])) : vue.createCommentVNode("v-if", true), - vue.withDirectives(vue.createVNode(_component_el_button, { - ref: "confirmRef", - type: "primary", - loading: _ctx.confirmButtonLoading, - "loading-icon": _ctx.confirmButtonLoadingIcon, - class: vue.normalizeClass([_ctx.confirmButtonClasses]), - round: _ctx.roundButton, - disabled: _ctx.confirmButtonDisabled, - size: _ctx.btnSize, - onClick: ($event) => _ctx.handleAction("confirm"), - onKeydown: vue.withKeys(vue.withModifiers(($event) => _ctx.handleAction("confirm"), ["prevent"]), ["enter"]) - }, { - default: vue.withCtx(() => [ - vue.createTextVNode(vue.toDisplayString(_ctx.confirmButtonText || _ctx.t("el.messagebox.confirm")), 1) - ]), - _: 1 - }, 8, ["loading", "loading-icon", "class", "round", "disabled", "size", "onClick", "onKeydown"]), [ - [vue.vShow, _ctx.showConfirmButton] - ]) - ], 2) - ], 14, ["onClick"]) - ]), - _: 3 - }, 8, ["trapped", "focus-trap-el", "focus-start-el", "onReleaseRequested"]) - ], 42, ["aria-label", "aria-describedby", "onClick", "onMousedown", "onMouseup"]) - ]), - _: 3 - }, 8, ["z-index", "overlay-class", "mask"]), [ - [vue.vShow, _ctx.visible] - ]) - ]), - _: 3 - }, 8, ["onAfterLeave"]); - } - var MessageBoxConstructor = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["render", _sfc_render], ["__file", "index.vue"]]); - - const messageInstance = /* @__PURE__ */ new Map(); - const getAppendToElement = (props) => { - let appendTo = document.body; - if (props.appendTo) { - if (isString$1(props.appendTo)) { - appendTo = document.querySelector(props.appendTo); - } - if (isElement$1(props.appendTo)) { - appendTo = props.appendTo; - } - if (!isElement$1(appendTo)) { - appendTo = document.body; - } - } - return appendTo; - }; - const initInstance = (props, container, appContext = null) => { - const vnode = vue.createVNode(MessageBoxConstructor, props, isFunction$1(props.message) || vue.isVNode(props.message) ? { - default: isFunction$1(props.message) ? props.message : () => props.message - } : null); - vnode.appContext = appContext; - vue.render(vnode, container); - getAppendToElement(props).appendChild(container.firstElementChild); - return vnode.component; - }; - const genContainer = () => { - return document.createElement("div"); - }; - const showMessage = (options, appContext) => { - const container = genContainer(); - options.onVanish = () => { - vue.render(null, container); - messageInstance.delete(vm); - }; - options.onAction = (action) => { - const currentMsg = messageInstance.get(vm); - let resolve; - if (options.showInput) { - resolve = { value: vm.inputValue, action }; - } else { - resolve = action; - } - if (options.callback) { - options.callback(resolve, instance.proxy); - } else { - if (action === "cancel" || action === "close") { - if (options.distinguishCancelAndClose && action !== "cancel") { - currentMsg.reject("close"); - } else { - currentMsg.reject("cancel"); - } - } else { - currentMsg.resolve(resolve); - } - } - }; - const instance = initInstance(options, container, appContext); - const vm = instance.proxy; - for (const prop in options) { - if (hasOwn(options, prop) && !hasOwn(vm.$props, prop)) { - vm[prop] = options[prop]; - } - } - vm.visible = true; - return vm; - }; - function MessageBox(options, appContext = null) { - if (!isClient) - return Promise.reject(); - let callback; - if (isString$1(options) || vue.isVNode(options)) { - options = { - message: options - }; - } else { - callback = options.callback; - } - return new Promise((resolve, reject) => { - const vm = showMessage(options, appContext != null ? appContext : MessageBox._context); - messageInstance.set(vm, { - options, - callback, - resolve, - reject - }); - }); - } - const MESSAGE_BOX_VARIANTS = ["alert", "confirm", "prompt"]; - const MESSAGE_BOX_DEFAULT_OPTS = { - alert: { closeOnPressEscape: false, closeOnClickModal: false }, - confirm: { showCancelButton: true }, - prompt: { showCancelButton: true, showInput: true } - }; - MESSAGE_BOX_VARIANTS.forEach((boxType) => { - MessageBox[boxType] = messageBoxFactory(boxType); - }); - function messageBoxFactory(boxType) { - return (message, title, options, appContext) => { - let titleOrOpts = ""; - if (isObject$1(title)) { - options = title; - titleOrOpts = ""; - } else if (isUndefined(title)) { - titleOrOpts = ""; - } else { - titleOrOpts = title; - } - return MessageBox(Object.assign({ - title: titleOrOpts, - message, - type: "", - ...MESSAGE_BOX_DEFAULT_OPTS[boxType] - }, options, { - boxType - }), appContext); - }; - } - MessageBox.close = () => { - messageInstance.forEach((_, vm) => { - vm.doClose(); - }); - messageInstance.clear(); - }; - MessageBox._context = null; - - const _MessageBox = MessageBox; - _MessageBox.install = (app) => { - _MessageBox._context = app._context; - app.config.globalProperties.$msgbox = _MessageBox; - app.config.globalProperties.$messageBox = _MessageBox; - app.config.globalProperties.$alert = _MessageBox.alert; - app.config.globalProperties.$confirm = _MessageBox.confirm; - app.config.globalProperties.$prompt = _MessageBox.prompt; - }; - const ElMessageBox = _MessageBox; - - const notificationTypes = [ - "success", - "info", - "warning", - "error" - ]; - const notificationProps = buildProps({ - customClass: { - type: String, - default: "" - }, - dangerouslyUseHTMLString: Boolean, - duration: { - type: Number, - default: 4500 - }, - icon: { - type: iconPropType - }, - id: { - type: String, - default: "" - }, - message: { - type: definePropType([ - String, - Object, - Function - ]), - default: "" - }, - offset: { - type: Number, - default: 0 - }, - onClick: { - type: definePropType(Function), - default: () => void 0 - }, - onClose: { - type: definePropType(Function), - required: true - }, - position: { - type: String, - values: ["top-right", "top-left", "bottom-right", "bottom-left"], - default: "top-right" - }, - showClose: { - type: Boolean, - default: true - }, - title: { - type: String, - default: "" - }, - type: { - type: String, - values: [...notificationTypes, ""], - default: "" - }, - zIndex: Number - }); - const notificationEmits = { - destroy: () => true - }; - - const __default__ = vue.defineComponent({ - name: "ElNotification" - }); - const _sfc_main = /* @__PURE__ */ vue.defineComponent({ - ...__default__, - props: notificationProps, - emits: notificationEmits, - setup(__props, { expose }) { - const props = __props; - const { ns, zIndex } = useGlobalComponentSettings("notification"); - const { nextZIndex, currentZIndex } = zIndex; - const { Close } = CloseComponents; - const visible = vue.ref(false); - let timer = void 0; - const typeClass = vue.computed(() => { - const type = props.type; - return type && TypeComponentsMap[props.type] ? ns.m(type) : ""; - }); - const iconComponent = vue.computed(() => { - if (!props.type) - return props.icon; - return TypeComponentsMap[props.type] || props.icon; - }); - const horizontalClass = vue.computed(() => props.position.endsWith("right") ? "right" : "left"); - const verticalProperty = vue.computed(() => props.position.startsWith("top") ? "top" : "bottom"); - const positionStyle = vue.computed(() => { - var _a; - return { - [verticalProperty.value]: `${props.offset}px`, - zIndex: (_a = props.zIndex) != null ? _a : currentZIndex.value - }; - }); - function startTimer() { - if (props.duration > 0) { - ({ stop: timer } = useTimeoutFn(() => { - if (visible.value) - close(); - }, props.duration)); - } - } - function clearTimer() { - timer == null ? void 0 : timer(); - } - function close() { - visible.value = false; - } - function onKeydown({ code }) { - if (code === EVENT_CODE.delete || code === EVENT_CODE.backspace) { - clearTimer(); - } else if (code === EVENT_CODE.esc) { - if (visible.value) { - close(); - } - } else { - startTimer(); - } - } - vue.onMounted(() => { - startTimer(); - nextZIndex(); - visible.value = true; - }); - useEventListener(document, "keydown", onKeydown); - expose({ - visible, - close - }); - return (_ctx, _cache) => { - return vue.openBlock(), vue.createBlock(vue.Transition, { - name: vue.unref(ns).b("fade"), - onBeforeLeave: _ctx.onClose, - onAfterLeave: ($event) => _ctx.$emit("destroy"), - persisted: "" - }, { - default: vue.withCtx(() => [ - vue.withDirectives(vue.createElementVNode("div", { - id: _ctx.id, - class: vue.normalizeClass([vue.unref(ns).b(), _ctx.customClass, vue.unref(horizontalClass)]), - style: vue.normalizeStyle(vue.unref(positionStyle)), - role: "alert", - onMouseenter: clearTimer, - onMouseleave: startTimer, - onClick: _ctx.onClick - }, [ - vue.unref(iconComponent) ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass([vue.unref(ns).e("icon"), vue.unref(typeClass)]) - }, { - default: vue.withCtx(() => [ - (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(vue.unref(iconComponent)))) - ]), - _: 1 - }, 8, ["class"])) : vue.createCommentVNode("v-if", true), - vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("group")) - }, [ - vue.createElementVNode("h2", { - class: vue.normalizeClass(vue.unref(ns).e("title")), - textContent: vue.toDisplayString(_ctx.title) - }, null, 10, ["textContent"]), - vue.withDirectives(vue.createElementVNode("div", { - class: vue.normalizeClass(vue.unref(ns).e("content")), - style: vue.normalizeStyle(!!_ctx.title ? void 0 : { margin: 0 }) - }, [ - vue.renderSlot(_ctx.$slots, "default", {}, () => [ - !_ctx.dangerouslyUseHTMLString ? (vue.openBlock(), vue.createElementBlock("p", { key: 0 }, vue.toDisplayString(_ctx.message), 1)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [ - vue.createCommentVNode(" Caution here, message could've been compromised, never use user's input as message "), - vue.createElementVNode("p", { innerHTML: _ctx.message }, null, 8, ["innerHTML"]) - ], 2112)) - ]) - ], 6), [ - [vue.vShow, _ctx.message] - ]), - _ctx.showClose ? (vue.openBlock(), vue.createBlock(vue.unref(ElIcon), { - key: 0, - class: vue.normalizeClass(vue.unref(ns).e("closeBtn")), - onClick: vue.withModifiers(close, ["stop"]) - }, { - default: vue.withCtx(() => [ - vue.createVNode(vue.unref(Close)) - ]), - _: 1 - }, 8, ["class", "onClick"])) : vue.createCommentVNode("v-if", true) - ], 2) - ], 46, ["id", "onClick"]), [ - [vue.vShow, visible.value] - ]) - ]), - _: 3 - }, 8, ["name", "onBeforeLeave", "onAfterLeave"]); - }; - } - }); - var NotificationConstructor = /* @__PURE__ */ _export_sfc(_sfc_main, [["__file", "notification.vue"]]); - - const notifications = { - "top-left": [], - "top-right": [], - "bottom-left": [], - "bottom-right": [] - }; - const GAP_SIZE = 16; - let seed = 1; - const notify = function(options = {}, context) { - if (!isClient) - return { close: () => void 0 }; - if (isString$1(options) || vue.isVNode(options)) { - options = { message: options }; - } - const position = options.position || "top-right"; - let verticalOffset = options.offset || 0; - notifications[position].forEach(({ vm: vm2 }) => { - var _a; - verticalOffset += (((_a = vm2.el) == null ? void 0 : _a.offsetHeight) || 0) + GAP_SIZE; - }); - verticalOffset += GAP_SIZE; - const id = `notification_${seed++}`; - const userOnClose = options.onClose; - const props = { - ...options, - offset: verticalOffset, - id, - onClose: () => { - close(id, position, userOnClose); - } - }; - let appendTo = document.body; - if (isElement$1(options.appendTo)) { - appendTo = options.appendTo; - } else if (isString$1(options.appendTo)) { - appendTo = document.querySelector(options.appendTo); - } - if (!isElement$1(appendTo)) { - appendTo = document.body; - } - const container = document.createElement("div"); - const vm = vue.createVNode(NotificationConstructor, props, isFunction$1(props.message) ? props.message : vue.isVNode(props.message) ? () => props.message : null); - vm.appContext = isUndefined(context) ? notify._context : context; - vm.props.onDestroy = () => { - vue.render(null, container); - }; - vue.render(vm, container); - notifications[position].push({ vm }); - appendTo.appendChild(container.firstElementChild); - return { - close: () => { - vm.component.exposed.visible.value = false; - } - }; - }; - notificationTypes.forEach((type) => { - notify[type] = (options = {}, appContext) => { - if (isString$1(options) || vue.isVNode(options)) { - options = { - message: options - }; - } - return notify({ ...options, type }, appContext); - }; - }); - function close(id, position, userOnClose) { - const orientedNotifications = notifications[position]; - const idx = orientedNotifications.findIndex(({ vm: vm2 }) => { - var _a; - return ((_a = vm2.component) == null ? void 0 : _a.props.id) === id; - }); - if (idx === -1) - return; - const { vm } = orientedNotifications[idx]; - if (!vm) - return; - userOnClose == null ? void 0 : userOnClose(vm); - const removedHeight = vm.el.offsetHeight; - const verticalPos = position.split("-")[0]; - orientedNotifications.splice(idx, 1); - const len = orientedNotifications.length; - if (len < 1) - return; - for (let i = idx; i < len; i++) { - const { el, component } = orientedNotifications[i].vm; - const pos = Number.parseInt(el.style[verticalPos], 10) - removedHeight - GAP_SIZE; - component.props.offset = pos; - } - } - function closeAll() { - for (const orientedNotifications of Object.values(notifications)) { - orientedNotifications.forEach(({ vm }) => { - vm.component.exposed.visible.value = false; - }); - } - } - notify.closeAll = closeAll; - notify._context = null; - var Notify = notify; - - const ElNotification = withInstallFunction(Notify, "$notify"); - - var Plugins = [ - ElInfiniteScroll, - ElLoading, - ElMessage, - ElMessageBox, - ElNotification, - ElPopoverDirective - ]; - - var installer = makeInstaller([...Components, ...Plugins]); - - const install = installer.install; - const version = installer.version; - - exports.BAR_MAP = BAR_MAP; - exports.CAROUSEL_ITEM_NAME = CAROUSEL_ITEM_NAME; - exports.CASCADER_PANEL_INJECTION_KEY = CASCADER_PANEL_INJECTION_KEY; - exports.CHANGE_EVENT = CHANGE_EVENT; - exports.ClickOutside = ClickOutside; - exports.CommonPicker = CommonPicker; - exports.CommonProps = CommonProps; - exports.DEFAULT_EMPTY_VALUES = DEFAULT_EMPTY_VALUES; - exports.DEFAULT_FORMATS_DATE = DEFAULT_FORMATS_DATE; - exports.DEFAULT_FORMATS_DATEPICKER = DEFAULT_FORMATS_DATEPICKER; - exports.DEFAULT_FORMATS_TIME = DEFAULT_FORMATS_TIME; - exports.DEFAULT_VALUE_ON_CLEAR = DEFAULT_VALUE_ON_CLEAR; - exports.DROPDOWN_COLLECTION_INJECTION_KEY = COLLECTION_INJECTION_KEY; - exports.DROPDOWN_COLLECTION_ITEM_INJECTION_KEY = COLLECTION_ITEM_INJECTION_KEY; - exports.DROPDOWN_INJECTION_KEY = DROPDOWN_INJECTION_KEY; - exports.DefaultProps = DefaultProps; - exports.DynamicSizeGrid = DynamicSizeGrid$1; - exports.DynamicSizeList = DynamicSizeList$1; - exports.EVENT_CODE = EVENT_CODE; - exports.Effect = Effect; - exports.ElAffix = ElAffix; - exports.ElAlert = ElAlert; - exports.ElAnchor = ElAnchor; - exports.ElAnchorLink = ElAnchorLink; - exports.ElAside = ElAside; - exports.ElAutoResizer = ElAutoResizer; - exports.ElAutocomplete = ElAutocomplete; - exports.ElAvatar = ElAvatar; - exports.ElBacktop = ElBacktop; - exports.ElBadge = ElBadge; - exports.ElBreadcrumb = ElBreadcrumb; - exports.ElBreadcrumbItem = ElBreadcrumbItem; - exports.ElButton = ElButton; - exports.ElButtonGroup = ElButtonGroup$1; - exports.ElCalendar = ElCalendar; - exports.ElCard = ElCard; - exports.ElCarousel = ElCarousel; - exports.ElCarouselItem = ElCarouselItem; - exports.ElCascader = ElCascader; - exports.ElCascaderPanel = ElCascaderPanel; - exports.ElCheckTag = ElCheckTag; - exports.ElCheckbox = ElCheckbox; - exports.ElCheckboxButton = ElCheckboxButton; - exports.ElCheckboxGroup = ElCheckboxGroup$1; - exports.ElCol = ElCol; - exports.ElCollapse = ElCollapse; - exports.ElCollapseItem = ElCollapseItem; - exports.ElCollapseTransition = ElCollapseTransition; - exports.ElCollection = ElCollection; - exports.ElCollectionItem = ElCollectionItem; - exports.ElColorPicker = ElColorPicker; - exports.ElConfigProvider = ElConfigProvider; - exports.ElContainer = ElContainer; - exports.ElCountdown = ElCountdown; - exports.ElDatePicker = ElDatePicker; - exports.ElDescriptions = ElDescriptions; - exports.ElDescriptionsItem = ElDescriptionsItem; - exports.ElDialog = ElDialog; - exports.ElDivider = ElDivider; - exports.ElDrawer = ElDrawer; - exports.ElDropdown = ElDropdown; - exports.ElDropdownItem = ElDropdownItem; - exports.ElDropdownMenu = ElDropdownMenu; - exports.ElEmpty = ElEmpty; - exports.ElFooter = ElFooter; - exports.ElForm = ElForm; - exports.ElFormItem = ElFormItem; - exports.ElHeader = ElHeader; - exports.ElIcon = ElIcon; - exports.ElImage = ElImage; - exports.ElImageViewer = ElImageViewer; - exports.ElInfiniteScroll = ElInfiniteScroll; - exports.ElInput = ElInput; - exports.ElInputNumber = ElInputNumber; - exports.ElInputTag = ElInputTag; - exports.ElLink = ElLink; - exports.ElLoading = ElLoading; - exports.ElLoadingDirective = vLoading; - exports.ElLoadingService = Loading; - exports.ElMain = ElMain; - exports.ElMention = ElMention; - exports.ElMenu = ElMenu; - exports.ElMenuItem = ElMenuItem; - exports.ElMenuItemGroup = ElMenuItemGroup; - exports.ElMessage = ElMessage; - exports.ElMessageBox = ElMessageBox; - exports.ElNotification = ElNotification; - exports.ElOption = ElOption; - exports.ElOptionGroup = ElOptionGroup; - exports.ElOverlay = ElOverlay; - exports.ElPageHeader = ElPageHeader; - exports.ElPagination = ElPagination; - exports.ElPopconfirm = ElPopconfirm; - exports.ElPopover = ElPopover; - exports.ElPopoverDirective = ElPopoverDirective; - exports.ElPopper = ElPopper; - exports.ElPopperArrow = ElPopperArrow; - exports.ElPopperContent = ElPopperContent; - exports.ElPopperTrigger = ElPopperTrigger; - exports.ElProgress = ElProgress; - exports.ElRadio = ElRadio; - exports.ElRadioButton = ElRadioButton; - exports.ElRadioGroup = ElRadioGroup; - exports.ElRate = ElRate; - exports.ElResult = ElResult; - exports.ElRow = ElRow; - exports.ElScrollbar = ElScrollbar; - exports.ElSegmented = ElSegmented; - exports.ElSelect = ElSelect; - exports.ElSelectV2 = ElSelectV2; - exports.ElSkeleton = ElSkeleton; - exports.ElSkeletonItem = ElSkeletonItem; - exports.ElSlider = ElSlider; - exports.ElSpace = ElSpace; - exports.ElStatistic = ElStatistic; - exports.ElStep = ElStep; - exports.ElSteps = ElSteps; - exports.ElSubMenu = ElSubMenu; - exports.ElSwitch = ElSwitch; - exports.ElTabPane = ElTabPane; - exports.ElTable = ElTable; - exports.ElTableColumn = ElTableColumn; - exports.ElTableV2 = ElTableV2; - exports.ElTabs = ElTabs; - exports.ElTag = ElTag; - exports.ElText = ElText; - exports.ElTimePicker = ElTimePicker; - exports.ElTimeSelect = ElTimeSelect; - exports.ElTimeline = ElTimeline; - exports.ElTimelineItem = ElTimelineItem; - exports.ElTooltip = ElTooltip; - exports.ElTour = ElTour; - exports.ElTourStep = ElTourStep; - exports.ElTransfer = ElTransfer; - exports.ElTree = ElTree; - exports.ElTreeSelect = ElTreeSelect; - exports.ElTreeV2 = ElTreeV2; - exports.ElUpload = ElUpload; - exports.ElWatermark = ElWatermark; - exports.FIRST_KEYS = FIRST_KEYS; - exports.FIRST_LAST_KEYS = FIRST_LAST_KEYS; - exports.FORWARD_REF_INJECTION_KEY = FORWARD_REF_INJECTION_KEY; - exports.FixedSizeGrid = FixedSizeGrid$1; - exports.FixedSizeList = FixedSizeList$1; - exports.GAP = GAP; - exports.ID_INJECTION_KEY = ID_INJECTION_KEY; - exports.INPUT_EVENT = INPUT_EVENT; - exports.INSTALLED_KEY = INSTALLED_KEY; - exports.IconComponentMap = IconComponentMap; - exports.IconMap = IconMap; - exports.LAST_KEYS = LAST_KEYS; - exports.LEFT_CHECK_CHANGE_EVENT = LEFT_CHECK_CHANGE_EVENT; - exports.Mousewheel = Mousewheel; - exports.POPPER_CONTENT_INJECTION_KEY = POPPER_CONTENT_INJECTION_KEY; - exports.POPPER_INJECTION_KEY = POPPER_INJECTION_KEY; - exports.RIGHT_CHECK_CHANGE_EVENT = RIGHT_CHECK_CHANGE_EVENT; - exports.ROOT_PICKER_INJECTION_KEY = ROOT_PICKER_INJECTION_KEY; - exports.RowAlign = RowAlign; - exports.RowJustify = RowJustify; - exports.SCOPE = SCOPE$3; - exports.SIZE_INJECTION_KEY = SIZE_INJECTION_KEY; - exports.TOOLTIP_INJECTION_KEY = TOOLTIP_INJECTION_KEY; - exports.TableV2 = TableV2$1; - exports.TableV2Alignment = Alignment; - exports.TableV2FixedDir = FixedDir; - exports.TableV2Placeholder = placeholderSign; - exports.TableV2SortOrder = SortOrder; - exports.TimePickPanel = TimePickPanel; - exports.TrapFocus = TrapFocus; - exports.UPDATE_MODEL_EVENT = UPDATE_MODEL_EVENT; - exports.WEEK_DAYS = WEEK_DAYS; - exports.ZINDEX_INJECTION_KEY = ZINDEX_INJECTION_KEY; - exports.affixEmits = affixEmits; - exports.affixProps = affixProps; - exports.alertEffects = alertEffects; - exports.alertEmits = alertEmits; - exports.alertProps = alertProps; - exports.anchorEmits = anchorEmits; - exports.anchorProps = anchorProps; - exports.ariaProps = ariaProps; - exports.arrowMiddleware = arrowMiddleware; - exports.autoResizerProps = autoResizerProps; - exports.autocompleteEmits = autocompleteEmits; - exports.autocompleteProps = autocompleteProps; - exports.avatarEmits = avatarEmits; - exports.avatarProps = avatarProps; - exports.backtopEmits = backtopEmits; - exports.backtopProps = backtopProps; - exports.badgeProps = badgeProps; - exports.breadcrumbItemProps = breadcrumbItemProps; - exports.breadcrumbKey = breadcrumbKey; - exports.breadcrumbProps = breadcrumbProps; - exports.buildLocaleContext = buildLocaleContext; - exports.buildTimeList = buildTimeList; - exports.buildTranslator = buildTranslator; - exports.buttonEmits = buttonEmits; - exports.buttonGroupContextKey = buttonGroupContextKey; - exports.buttonNativeTypes = buttonNativeTypes; - exports.buttonProps = buttonProps; - exports.buttonTypes = buttonTypes; - exports.calendarEmits = calendarEmits; - exports.calendarProps = calendarProps; - exports.cardProps = cardProps; - exports.carouselContextKey = carouselContextKey; - exports.carouselEmits = carouselEmits; - exports.carouselItemProps = carouselItemProps; - exports.carouselProps = carouselProps; - exports.cascaderEmits = cascaderEmits; - exports.cascaderProps = cascaderProps; - exports.checkTagEmits = checkTagEmits; - exports.checkTagProps = checkTagProps; - exports.checkboxEmits = checkboxEmits; - exports.checkboxGroupContextKey = checkboxGroupContextKey; - exports.checkboxGroupEmits = checkboxGroupEmits; - exports.checkboxGroupProps = checkboxGroupProps; - exports.checkboxProps = checkboxProps; - exports.colProps = colProps; - exports.collapseContextKey = collapseContextKey; - exports.collapseEmits = collapseEmits; - exports.collapseItemProps = collapseItemProps; - exports.collapseProps = collapseProps; - exports.colorPickerContextKey = colorPickerContextKey; - exports.colorPickerEmits = colorPickerEmits; - exports.colorPickerProps = colorPickerProps; - exports.componentSizeMap = componentSizeMap; - exports.componentSizes = componentSizes; - exports.configProviderContextKey = configProviderContextKey; - exports.configProviderProps = configProviderProps; - exports.countdownEmits = countdownEmits; - exports.countdownProps = countdownProps; - exports.createModelToggleComposable = createModelToggleComposable; - exports.dateEquals = dateEquals; - exports.datePickTypes = datePickTypes; - exports.datePickerProps = datePickerProps; - exports.dayOrDaysToDate = dayOrDaysToDate; - exports.dayjs = dayjs; - exports["default"] = installer; - exports.defaultInitialZIndex = defaultInitialZIndex; - exports.defaultNamespace = defaultNamespace; - exports.descriptionItemProps = descriptionItemProps; - exports.descriptionProps = descriptionProps; - exports.dialogEmits = dialogEmits; - exports.dialogInjectionKey = dialogInjectionKey; - exports.dialogProps = dialogProps; - exports.dividerProps = dividerProps; - exports.drawerEmits = drawerEmits; - exports.drawerProps = drawerProps; - exports.dropdownItemProps = dropdownItemProps; - exports.dropdownMenuProps = dropdownMenuProps; - exports.dropdownProps = dropdownProps; - exports.elPaginationKey = elPaginationKey; - exports.emitChangeFn = emitChangeFn; - exports.emptyProps = emptyProps; - exports.emptyValuesContextKey = emptyValuesContextKey; - exports.extractDateFormat = extractDateFormat; - exports.extractTimeFormat = extractTimeFormat; - exports.formContextKey = formContextKey; - exports.formEmits = formEmits; - exports.formItemContextKey = formItemContextKey; - exports.formItemProps = formItemProps; - exports.formItemValidateStates = formItemValidateStates; - exports.formMetaProps = formMetaProps; - exports.formProps = formProps; - exports.formatter = formatter; - exports.genFileId = genFileId; - exports.getPositionDataWithUnit = getPositionDataWithUnit; - exports.iconProps = iconProps; - exports.imageEmits = imageEmits; - exports.imageProps = imageProps; - exports.imageViewerEmits = imageViewerEmits; - exports.imageViewerProps = imageViewerProps; - exports.inputEmits = inputEmits; - exports.inputNumberEmits = inputNumberEmits; - exports.inputNumberProps = inputNumberProps; - exports.inputProps = inputProps; - exports.inputTagEmits = inputTagEmits; - exports.inputTagProps = inputTagProps; - exports.install = install; - exports.linkEmits = linkEmits; - exports.linkProps = linkProps; - exports.localeContextKey = localeContextKey; - exports.makeInstaller = makeInstaller; - exports.makeList = makeList; - exports.mentionEmits = mentionEmits; - exports.mentionProps = mentionProps; - exports.menuEmits = menuEmits; - exports.menuItemEmits = menuItemEmits; - exports.menuItemGroupProps = menuItemGroupProps; - exports.menuItemProps = menuItemProps; - exports.menuProps = menuProps; - exports.messageConfig = messageConfig; - exports.messageDefaults = messageDefaults; - exports.messageEmits = messageEmits; - exports.messageProps = messageProps; - exports.messageTypes = messageTypes; - exports.namespaceContextKey = namespaceContextKey; - exports.notificationEmits = notificationEmits; - exports.notificationProps = notificationProps; - exports.notificationTypes = notificationTypes; - exports.overlayEmits = overlayEmits; - exports.overlayProps = overlayProps; - exports.pageHeaderEmits = pageHeaderEmits; - exports.pageHeaderProps = pageHeaderProps; - exports.paginationEmits = paginationEmits; - exports.paginationProps = paginationProps; - exports.parseDate = parseDate; - exports.popconfirmEmits = popconfirmEmits; - exports.popconfirmProps = popconfirmProps; - exports.popoverEmits = popoverEmits; - exports.popoverProps = popoverProps; - exports.popperArrowProps = popperArrowProps; - exports.popperContentEmits = popperContentEmits; - exports.popperContentProps = popperContentProps; - exports.popperCoreConfigProps = popperCoreConfigProps; - exports.popperProps = popperProps; - exports.popperTriggerProps = popperTriggerProps; - exports.progressProps = progressProps; - exports.provideGlobalConfig = provideGlobalConfig; - exports.radioButtonProps = radioButtonProps; - exports.radioEmits = radioEmits; - exports.radioGroupEmits = radioGroupEmits; - exports.radioGroupKey = radioGroupKey; - exports.radioGroupProps = radioGroupProps; - exports.radioProps = radioProps; - exports.radioPropsBase = radioPropsBase; - exports.rangeArr = rangeArr; - exports.rateEmits = rateEmits; - exports.rateProps = rateProps; - exports.renderThumbStyle = renderThumbStyle$1; - exports.resultProps = resultProps; - exports.roleTypes = roleTypes; - exports.rowContextKey = rowContextKey; - exports.rowProps = rowProps; - exports.scrollbarContextKey = scrollbarContextKey; - exports.scrollbarEmits = scrollbarEmits; - exports.scrollbarProps = scrollbarProps; - exports.segmentedEmits = segmentedEmits; - exports.segmentedProps = segmentedProps; - exports.selectGroupKey = selectGroupKey; - exports.selectKey = selectKey; - exports.selectV2InjectionKey = selectV2InjectionKey; - exports.skeletonItemProps = skeletonItemProps; - exports.skeletonProps = skeletonProps; - exports.sliderContextKey = sliderContextKey; - exports.sliderEmits = sliderEmits; - exports.sliderProps = sliderProps; - exports.spaceItemProps = spaceItemProps; - exports.spaceProps = spaceProps; - exports.statisticProps = statisticProps; - exports.stepProps = stepProps; - exports.stepsEmits = stepsEmits; - exports.stepsProps = stepsProps; - exports.subMenuProps = subMenuProps; - exports.switchEmits = switchEmits; - exports.switchProps = switchProps; - exports.tabBarProps = tabBarProps; - exports.tabNavEmits = tabNavEmits; - exports.tabNavProps = tabNavProps; - exports.tabPaneProps = tabPaneProps; - exports.tableV2Props = tableV2Props; - exports.tableV2RowProps = tableV2RowProps; - exports.tabsEmits = tabsEmits; - exports.tabsProps = tabsProps; - exports.tabsRootContextKey = tabsRootContextKey; - exports.tagEmits = tagEmits; - exports.tagProps = tagProps; - exports.textProps = textProps; - exports.thumbProps = thumbProps; - exports.timePickerDefaultProps = timePickerDefaultProps; - exports.timePickerRangeTriggerProps = timePickerRangeTriggerProps; - exports.timePickerRngeTriggerProps = timePickerRngeTriggerProps; - exports.timeSelectProps = timeSelectProps; - exports.timeUnits = timeUnits$1; - exports.timelineItemProps = timelineItemProps; - exports.tooltipEmits = tooltipEmits; - exports.tourContentEmits = tourContentEmits; - exports.tourContentProps = tourContentProps; - exports.tourEmits = tourEmits; - exports.tourPlacements = tourPlacements; - exports.tourProps = tourProps; - exports.tourStepEmits = tourStepEmits; - exports.tourStepProps = tourStepProps; - exports.tourStrategies = tourStrategies; - exports.transferCheckedChangeFn = transferCheckedChangeFn; - exports.transferEmits = transferEmits; - exports.transferProps = transferProps; - exports.translate = translate; - exports.uploadBaseProps = uploadBaseProps; - exports.uploadContentProps = uploadContentProps; - exports.uploadContextKey = uploadContextKey; - exports.uploadDraggerEmits = uploadDraggerEmits; - exports.uploadDraggerProps = uploadDraggerProps; - exports.uploadListEmits = uploadListEmits; - exports.uploadListProps = uploadListProps; - exports.uploadListTypes = uploadListTypes; - exports.uploadProps = uploadProps; - exports.useAriaProps = useAriaProps; - exports.useAttrs = useAttrs; - exports.useCalcInputWidth = useCalcInputWidth; - exports.useCascaderConfig = useCascaderConfig; - exports.useComposition = useComposition; - exports.useCursor = useCursor; - exports.useDelayedRender = useDelayedRender; - exports.useDelayedToggle = useDelayedToggle; - exports.useDelayedToggleProps = useDelayedToggleProps; - exports.useDeprecated = useDeprecated; - exports.useDialog = useDialog; - exports.useDisabled = useDisabled; - exports.useDraggable = useDraggable; - exports.useEmptyValues = useEmptyValues; - exports.useEmptyValuesProps = useEmptyValuesProps; - exports.useEscapeKeydown = useEscapeKeydown; - exports.useFloating = useFloating$1; - exports.useFloatingProps = useFloatingProps; - exports.useFocus = useFocus; - exports.useFocusController = useFocusController; - exports.useFormDisabled = useFormDisabled; - exports.useFormItem = useFormItem; - exports.useFormItemInputId = useFormItemInputId; - exports.useFormSize = useFormSize; - exports.useForwardRef = useForwardRef; - exports.useForwardRefDirective = useForwardRefDirective; - exports.useGetDerivedNamespace = useGetDerivedNamespace; - exports.useGlobalComponentSettings = useGlobalComponentSettings; - exports.useGlobalConfig = useGlobalConfig; - exports.useGlobalSize = useGlobalSize; - exports.useId = useId; - exports.useIdInjection = useIdInjection; - exports.useLocale = useLocale; - exports.useLockscreen = useLockscreen; - exports.useModal = useModal; - exports.useModelToggle = useModelToggle; - exports.useModelToggleEmits = useModelToggleEmits; - exports.useModelToggleProps = useModelToggleProps; - exports.useNamespace = useNamespace; - exports.useOrderedChildren = useOrderedChildren; - exports.usePopper = usePopper; - exports.usePopperArrowProps = usePopperArrowProps; - exports.usePopperContainer = usePopperContainer; - exports.usePopperContainerId = usePopperContainerId; - exports.usePopperContentEmits = usePopperContentEmits; - exports.usePopperContentProps = usePopperContentProps; - exports.usePopperCoreConfigProps = usePopperCoreConfigProps; - exports.usePopperProps = usePopperProps; - exports.usePopperTriggerProps = usePopperTriggerProps; - exports.usePreventGlobal = usePreventGlobal; - exports.useProp = useProp; - exports.useSameTarget = useSameTarget; - exports.useSize = useSize; - exports.useSizeProp = useSizeProp; - exports.useSizeProps = useSizeProps; - exports.useSpace = useSpace; - exports.useTeleport = useTeleport; - exports.useThrottleRender = useThrottleRender; - exports.useTimeout = useTimeout; - exports.useTooltipContentProps = useTooltipContentProps; - exports.useTooltipModelToggle = useTooltipModelToggle; - exports.useTooltipModelToggleEmits = useTooltipModelToggleEmits; - exports.useTooltipModelToggleProps = useTooltipModelToggleProps; - exports.useTooltipProps = useTooltipProps; - exports.useTooltipTriggerProps = useTooltipTriggerProps; - exports.useTransitionFallthrough = useTransitionFallthrough; - exports.useTransitionFallthroughEmits = useTransitionFallthroughEmits; - exports.useZIndex = useZIndex; - exports.vLoading = vLoading; - exports.vRepeatClick = vRepeatClick; - exports.valueEquals = valueEquals; - exports.version = version; - exports.virtualizedGridProps = virtualizedGridProps; - exports.virtualizedListProps = virtualizedListProps; - exports.virtualizedProps = virtualizedProps; - exports.virtualizedScrollbarProps = virtualizedScrollbarProps; - exports.watermarkProps = watermarkProps; - exports.zIndexContextKey = zIndexContextKey; - - Object.defineProperty(exports, '__esModule', { value: true }); - -})); diff --git a/manager/static/js/icons-vue2.3.1.js b/manager/static/js/icons-vue2.3.1.js deleted file mode 100644 index 95462818..00000000 --- a/manager/static/js/icons-vue2.3.1.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! Element Plus Icons Vue v2.3.1 */ - -"use strict";var ElementPlusIconsVue=(()=>{var Xs=Object.create;var H1=Object.defineProperty;var Ys=Object.getOwnPropertyDescriptor;var $s=Object.getOwnPropertyNames;var e_=Object.getPrototypeOf,o_=Object.prototype.hasOwnProperty;var t_=(t,r)=>()=>(r||t((r={exports:{}}).exports,r),r.exports),r_=(t,r)=>{for(var a in r)H1(t,a,{get:r[a],enumerable:!0})},A1=(t,r,a,L1)=>{if(r&&typeof r=="object"||typeof r=="function")for(let N1 of $s(r))!o_.call(t,N1)&&N1!==a&&H1(t,N1,{get:()=>r[N1],enumerable:!(L1=Ys(r,N1))||L1.enumerable});return t};var o=(t,r,a)=>(a=t!=null?Xs(e_(t)):{},A1(r||!t||!t.__esModule?H1(a,"default",{value:t,enumerable:!0}):a,t)),a_=t=>A1(H1({},"__esModule",{value:!0}),t);var e=t_((l_,S1)=>{S1.exports=Vue});var n_={};r_(n_,{AddLocation:()=>b1,Aim:()=>R1,AlarmClock:()=>G1,Apple:()=>I1,ArrowDown:()=>X1,ArrowDownBold:()=>Q1,ArrowLeft:()=>r4,ArrowLeftBold:()=>e4,ArrowRight:()=>c4,ArrowRightBold:()=>m4,ArrowUp:()=>u4,ArrowUpBold:()=>_4,Avatar:()=>v4,Back:()=>k4,Baseball:()=>V4,Basketball:()=>y4,Bell:()=>S4,BellFilled:()=>H4,Bicycle:()=>b4,Bottom:()=>I4,BottomLeft:()=>R4,BottomRight:()=>G4,Bowl:()=>Q4,Box:()=>X4,Briefcase:()=>et,Brush:()=>mt,BrushFilled:()=>rt,Burger:()=>ct,Calendar:()=>_t,Camera:()=>vt,CameraFilled:()=>ut,CaretBottom:()=>kt,CaretLeft:()=>Vt,CaretRight:()=>yt,CaretTop:()=>Ht,Cellphone:()=>St,ChatDotRound:()=>bt,ChatDotSquare:()=>Rt,ChatLineRound:()=>Gt,ChatLineSquare:()=>It,ChatRound:()=>Qt,ChatSquare:()=>Xt,Check:()=>er,Checked:()=>rr,Cherry:()=>mr,Chicken:()=>cr,ChromeFilled:()=>_r,CircleCheck:()=>vr,CircleCheckFilled:()=>ur,CircleClose:()=>Vr,CircleCloseFilled:()=>kr,CirclePlus:()=>Hr,CirclePlusFilled:()=>yr,Clock:()=>Sr,Close:()=>Rr,CloseBold:()=>br,Cloudy:()=>Gr,Coffee:()=>Qr,CoffeeCup:()=>Ir,Coin:()=>Xr,ColdDrink:()=>e6,Collection:()=>m6,CollectionTag:()=>r6,Comment:()=>c6,Compass:()=>_6,Connection:()=>u6,Coordinate:()=>v6,CopyDocument:()=>k6,Cpu:()=>V6,CreditCard:()=>y6,Crop:()=>H6,DArrowLeft:()=>S6,DArrowRight:()=>b6,DCaret:()=>R6,DataAnalysis:()=>G6,DataBoard:()=>I6,DataLine:()=>Q6,Delete:()=>r3,DeleteFilled:()=>X6,DeleteLocation:()=>e3,Dessert:()=>m3,Discount:()=>c3,Dish:()=>u3,DishDot:()=>_3,Document:()=>S3,DocumentAdd:()=>v3,DocumentChecked:()=>k3,DocumentCopy:()=>V3,DocumentDelete:()=>y3,DocumentRemove:()=>H3,Download:()=>b3,Drizzling:()=>R3,Edit:()=>I3,EditPen:()=>G3,Eleme:()=>X3,ElemeFilled:()=>Q3,ElementPlus:()=>ea,Expand:()=>ra,Failed:()=>ma,Female:()=>ca,Files:()=>_a,Film:()=>ua,Filter:()=>va,Finished:()=>ka,FirstAidKit:()=>Va,Flag:()=>ya,Fold:()=>Ha,Folder:()=>Qa,FolderAdd:()=>Sa,FolderChecked:()=>ba,FolderDelete:()=>Ra,FolderOpened:()=>Ga,FolderRemove:()=>Ia,Food:()=>Xa,Football:()=>e8,ForkSpoon:()=>r8,Fries:()=>m8,FullScreen:()=>c8,Goblet:()=>k8,GobletFull:()=>_8,GobletSquare:()=>v8,GobletSquareFull:()=>u8,GoldMedal:()=>V8,Goods:()=>H8,GoodsFilled:()=>y8,Grape:()=>S8,Grid:()=>b8,Guide:()=>R8,Handbag:()=>G8,Headset:()=>I8,Help:()=>X8,HelpFilled:()=>Q8,Hide:()=>en,Histogram:()=>rn,HomeFilled:()=>mn,HotWater:()=>cn,House:()=>_n,IceCream:()=>Cn,IceCreamRound:()=>xn,IceCreamSquare:()=>wn,IceDrink:()=>gn,IceTea:()=>Mn,InfoFilled:()=>Ln,Iphone:()=>qn,Key:()=>Dn,KnifeFork:()=>Tn,Lightning:()=>Un,Link:()=>Zn,List:()=>jn,Loading:()=>Yn,Location:()=>lm,LocationFilled:()=>om,LocationInformation:()=>am,Lock:()=>fm,Lollipop:()=>im,MagicStick:()=>xm,Magnet:()=>wm,Male:()=>Cm,Management:()=>gm,MapLocation:()=>Mm,Medal:()=>Lm,Memo:()=>qm,Menu:()=>Dm,Message:()=>Um,MessageBox:()=>Tm,Mic:()=>Zm,Microphone:()=>jm,MilkTea:()=>Ym,Minus:()=>ol,Money:()=>al,Monitor:()=>ll,Moon:()=>il,MoonNight:()=>fl,More:()=>wl,MoreFilled:()=>xl,MostlyCloudy:()=>Cl,Mouse:()=>gl,Mug:()=>Ml,Mute:()=>ql,MuteNotification:()=>Ll,NoSmoking:()=>Dl,Notebook:()=>Tl,Notification:()=>Ul,Odometer:()=>Zl,OfficeBuilding:()=>jl,Open:()=>Yl,Operation:()=>op,Opportunity:()=>ap,Orange:()=>lp,Paperclip:()=>fp,PartlyCloudy:()=>ip,Pear:()=>xp,Phone:()=>Cp,PhoneFilled:()=>wp,Picture:()=>Lp,PictureFilled:()=>gp,PictureRounded:()=>Mp,PieChart:()=>qp,Place:()=>Dp,Platform:()=>Tp,Plus:()=>Up,Pointer:()=>Zp,Position:()=>jp,Postcard:()=>Yp,Pouring:()=>oc,Present:()=>ac,PriceTag:()=>lc,Printer:()=>fc,Promotion:()=>ic,QuartzWatch:()=>xc,QuestionFilled:()=>wc,Rank:()=>Cc,Reading:()=>Mc,ReadingLamp:()=>gc,Refresh:()=>Dc,RefreshLeft:()=>Lc,RefreshRight:()=>qc,Refrigerator:()=>Tc,Remove:()=>Zc,RemoveFilled:()=>Uc,Right:()=>jc,ScaleToOriginal:()=>Yc,School:()=>o5,Scissor:()=>a5,Search:()=>l5,Select:()=>f5,Sell:()=>i5,SemiSelect:()=>x5,Service:()=>w5,SetUp:()=>C5,Setting:()=>g5,Share:()=>M5,Ship:()=>L5,Shop:()=>q5,ShoppingBag:()=>D5,ShoppingCart:()=>U5,ShoppingCartFull:()=>T5,ShoppingTrolley:()=>Z5,Smoking:()=>j5,Soccer:()=>Y5,SoldOut:()=>o9,Sort:()=>f9,SortDown:()=>a9,SortUp:()=>l9,Stamp:()=>i9,Star:()=>w9,StarFilled:()=>x9,Stopwatch:()=>C9,SuccessFilled:()=>g9,Sugar:()=>M9,Suitcase:()=>q9,SuitcaseLine:()=>L9,Sunny:()=>D9,Sunrise:()=>T9,Sunset:()=>U9,Switch:()=>Y9,SwitchButton:()=>Z9,SwitchFilled:()=>j9,TakeawayBox:()=>of,Ticket:()=>af,Tickets:()=>lf,Timer:()=>ff,ToiletPaper:()=>df,Tools:()=>hf,Top:()=>zf,TopLeft:()=>Bf,TopRight:()=>Ef,TrendCharts:()=>Nf,Trophy:()=>Ff,TrophyBase:()=>Af,TurnOff:()=>Pf,Umbrella:()=>Of,Unlock:()=>Wf,Upload:()=>Jf,UploadFilled:()=>Kf,User:()=>ts,UserFilled:()=>$f,Van:()=>ns,VideoCamera:()=>ss,VideoCameraFilled:()=>ps,VideoPause:()=>ds,VideoPlay:()=>hs,View:()=>Bs,Wallet:()=>zs,WalletFilled:()=>Es,WarnTriangleFilled:()=>Ns,Warning:()=>Fs,WarningFilled:()=>As,Watch:()=>Ps,Watermelon:()=>Os,WindPower:()=>Ws,ZoomIn:()=>Ks,ZoomOut:()=>Js});var q1=o(e()),p=o(e()),F1=(0,q1.defineComponent)({name:"AddLocation",__name:"add-location",setup(t){return(r,a)=>((0,p.openBlock)(),(0,p.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,p.createElementVNode)("path",{fill:"currentColor",d:"M288 896h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32"}),(0,p.createElementVNode)("path",{fill:"currentColor",d:"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544"}),(0,p.createElementVNode)("path",{fill:"currentColor",d:"M544 384h96a32 32 0 1 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64h96v-96a32 32 0 0 1 64 0z"})]))}});var b1=F1;var D1=o(e()),H=o(e()),P1=(0,D1.defineComponent)({name:"Aim",__name:"aim",setup(t){return(r,a)=>((0,H.openBlock)(),(0,H.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,H.createElementVNode)("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),(0,H.createElementVNode)("path",{fill:"currentColor",d:"M512 96a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V128a32 32 0 0 1 32-32m0 576a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V704a32 32 0 0 1 32-32M96 512a32 32 0 0 1 32-32h192a32 32 0 0 1 0 64H128a32 32 0 0 1-32-32m576 0a32 32 0 0 1 32-32h192a32 32 0 1 1 0 64H704a32 32 0 0 1-32-32"})]))}});var R1=P1;var T1=o(e()),L=o(e()),O1=(0,T1.defineComponent)({name:"AlarmClock",__name:"alarm-clock",setup(t){return(r,a)=>((0,L.openBlock)(),(0,L.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,L.createElementVNode)("path",{fill:"currentColor",d:"M512 832a320 320 0 1 0 0-640 320 320 0 0 0 0 640m0 64a384 384 0 1 1 0-768 384 384 0 0 1 0 768"}),(0,L.createElementVNode)("path",{fill:"currentColor",d:"m292.288 824.576 55.424 32-48 83.136a32 32 0 1 1-55.424-32zm439.424 0-55.424 32 48 83.136a32 32 0 1 0 55.424-32zM512 512h160a32 32 0 1 1 0 64H480a32 32 0 0 1-32-32V320a32 32 0 0 1 64 0zM90.496 312.256A160 160 0 0 1 312.32 90.496l-46.848 46.848a96 96 0 0 0-128 128L90.56 312.256zm835.264 0A160 160 0 0 0 704 90.496l46.848 46.848a96 96 0 0 1 128 128z"})]))}});var G1=O1;var U1=o(e()),Pe=o(e()),W1=(0,U1.defineComponent)({name:"Apple",__name:"apple",setup(t){return(r,a)=>((0,Pe.openBlock)(),(0,Pe.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Pe.createElementVNode)("path",{fill:"currentColor",d:"M599.872 203.776a189.44 189.44 0 0 1 64.384-4.672l2.624.128c31.168 1.024 51.2 4.096 79.488 16.32 37.632 16.128 74.496 45.056 111.488 89.344 96.384 115.264 82.752 372.8-34.752 521.728-7.68 9.728-32 41.6-30.72 39.936a426.624 426.624 0 0 1-30.08 35.776c-31.232 32.576-65.28 49.216-110.08 50.048-31.36.64-53.568-5.312-84.288-18.752l-6.528-2.88c-20.992-9.216-30.592-11.904-47.296-11.904-18.112 0-28.608 2.88-51.136 12.672l-6.464 2.816c-28.416 12.224-48.32 18.048-76.16 19.2-74.112 2.752-116.928-38.08-180.672-132.16-96.64-142.08-132.608-349.312-55.04-486.4 46.272-81.92 129.92-133.632 220.672-135.04 32.832-.576 60.288 6.848 99.648 22.72 27.136 10.88 34.752 13.76 37.376 14.272 16.256-20.16 27.776-36.992 34.56-50.24 13.568-26.304 27.2-59.968 40.704-100.8a32 32 0 1 1 60.8 20.224c-12.608 37.888-25.408 70.4-38.528 97.664zm-51.52 78.08c-14.528 17.792-31.808 37.376-51.904 58.816a32 32 0 1 1-46.72-43.776l12.288-13.248c-28.032-11.2-61.248-26.688-95.68-26.112-70.4 1.088-135.296 41.6-171.648 105.792C121.6 492.608 176 684.16 247.296 788.992c34.816 51.328 76.352 108.992 130.944 106.944 52.48-2.112 72.32-34.688 135.872-34.688 63.552 0 81.28 34.688 136.96 33.536 56.448-1.088 75.776-39.04 126.848-103.872 107.904-136.768 107.904-362.752 35.776-449.088-72.192-86.272-124.672-84.096-151.68-85.12-41.472-4.288-81.6 12.544-113.664 25.152z"})]))}});var I1=W1;var Z1=o(e()),Re=o(e()),K1=(0,Z1.defineComponent)({name:"ArrowDownBold",__name:"arrow-down-bold",setup(t){return(r,a)=>((0,Re.openBlock)(),(0,Re.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Re.createElementVNode)("path",{fill:"currentColor",d:"M104.704 338.752a64 64 0 0 1 90.496 0l316.8 316.8 316.8-316.8a64 64 0 0 1 90.496 90.496L557.248 791.296a64 64 0 0 1-90.496 0L104.704 429.248a64 64 0 0 1 0-90.496z"})]))}});var Q1=K1;var j1=o(e()),Te=o(e()),J1=(0,j1.defineComponent)({name:"ArrowDown",__name:"arrow-down",setup(t){return(r,a)=>((0,Te.openBlock)(),(0,Te.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Te.createElementVNode)("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.592 30.592 0 0 0-42.752 0 29.12 29.12 0 0 0 0 41.6L489.664 714.24a32 32 0 0 0 44.672 0l340.288-331.712a29.12 29.12 0 0 0 0-41.728 30.592 30.592 0 0 0-42.752 0z"})]))}});var X1=J1;var Y1=o(e()),Oe=o(e()),$1=(0,Y1.defineComponent)({name:"ArrowLeftBold",__name:"arrow-left-bold",setup(t){return(r,a)=>((0,Oe.openBlock)(),(0,Oe.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Oe.createElementVNode)("path",{fill:"currentColor",d:"M685.248 104.704a64 64 0 0 1 0 90.496L368.448 512l316.8 316.8a64 64 0 0 1-90.496 90.496L232.704 557.248a64 64 0 0 1 0-90.496l362.048-362.048a64 64 0 0 1 90.496 0z"})]))}});var e4=$1;var o4=o(e()),Ge=o(e()),t4=(0,o4.defineComponent)({name:"ArrowLeft",__name:"arrow-left",setup(t){return(r,a)=>((0,Ge.openBlock)(),(0,Ge.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ge.createElementVNode)("path",{fill:"currentColor",d:"M609.408 149.376 277.76 489.6a32 32 0 0 0 0 44.672l331.648 340.352a29.12 29.12 0 0 0 41.728 0 30.592 30.592 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.592 30.592 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0z"})]))}});var r4=t4;var a4=o(e()),Ue=o(e()),n4=(0,a4.defineComponent)({name:"ArrowRightBold",__name:"arrow-right-bold",setup(t){return(r,a)=>((0,Ue.openBlock)(),(0,Ue.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ue.createElementVNode)("path",{fill:"currentColor",d:"M338.752 104.704a64 64 0 0 0 0 90.496l316.8 316.8-316.8 316.8a64 64 0 0 0 90.496 90.496l362.048-362.048a64 64 0 0 0 0-90.496L429.248 104.704a64 64 0 0 0-90.496 0z"})]))}});var m4=n4;var l4=o(e()),We=o(e()),p4=(0,l4.defineComponent)({name:"ArrowRight",__name:"arrow-right",setup(t){return(r,a)=>((0,We.openBlock)(),(0,We.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,We.createElementVNode)("path",{fill:"currentColor",d:"M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"})]))}});var c4=p4;var f4=o(e()),Ie=o(e()),s4=(0,f4.defineComponent)({name:"ArrowUpBold",__name:"arrow-up-bold",setup(t){return(r,a)=>((0,Ie.openBlock)(),(0,Ie.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ie.createElementVNode)("path",{fill:"currentColor",d:"M104.704 685.248a64 64 0 0 0 90.496 0l316.8-316.8 316.8 316.8a64 64 0 0 0 90.496-90.496L557.248 232.704a64 64 0 0 0-90.496 0L104.704 594.752a64 64 0 0 0 0 90.496z"})]))}});var _4=s4;var i4=o(e()),Ze=o(e()),d4=(0,i4.defineComponent)({name:"ArrowUp",__name:"arrow-up",setup(t){return(r,a)=>((0,Ze.openBlock)(),(0,Ze.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ze.createElementVNode)("path",{fill:"currentColor",d:"m488.832 344.32-339.84 356.672a32 32 0 0 0 0 44.16l.384.384a29.44 29.44 0 0 0 42.688 0l320-335.872 319.872 335.872a29.44 29.44 0 0 0 42.688 0l.384-.384a32 32 0 0 0 0-44.16L535.168 344.32a32 32 0 0 0-46.336 0"})]))}});var u4=d4;var x4=o(e()),Ke=o(e()),h4=(0,x4.defineComponent)({name:"Avatar",__name:"avatar",setup(t){return(r,a)=>((0,Ke.openBlock)(),(0,Ke.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ke.createElementVNode)("path",{fill:"currentColor",d:"M628.736 528.896A416 416 0 0 1 928 928H96a415.872 415.872 0 0 1 299.264-399.104L512 704zM720 304a208 208 0 1 1-416 0 208 208 0 0 1 416 0"})]))}});var v4=h4;var w4=o(e()),A=o(e()),B4=(0,w4.defineComponent)({name:"Back",__name:"back",setup(t){return(r,a)=>((0,A.openBlock)(),(0,A.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,A.createElementVNode)("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),(0,A.createElementVNode)("path",{fill:"currentColor",d:"m237.248 512 265.408 265.344a32 32 0 0 1-45.312 45.312l-288-288a32 32 0 0 1 0-45.312l288-288a32 32 0 1 1 45.312 45.312z"})]))}});var k4=B4;var C4=o(e()),S=o(e()),E4=(0,C4.defineComponent)({name:"Baseball",__name:"baseball",setup(t){return(r,a)=>((0,S.openBlock)(),(0,S.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,S.createElementVNode)("path",{fill:"currentColor",d:"M195.2 828.8a448 448 0 1 1 633.6-633.6 448 448 0 0 1-633.6 633.6zm45.248-45.248a384 384 0 1 0 543.104-543.104 384 384 0 0 0-543.104 543.104"}),(0,S.createElementVNode)("path",{fill:"currentColor",d:"M497.472 96.896c22.784 4.672 44.416 9.472 64.896 14.528a256.128 256.128 0 0 0 350.208 350.208c5.056 20.48 9.856 42.112 14.528 64.896A320.128 320.128 0 0 1 497.472 96.896zM108.48 491.904a320.128 320.128 0 0 1 423.616 423.68c-23.04-3.648-44.992-7.424-65.728-11.52a256.128 256.128 0 0 0-346.496-346.432 1736.64 1736.64 0 0 1-11.392-65.728z"})]))}});var V4=E4;var g4=o(e()),Qe=o(e()),z4=(0,g4.defineComponent)({name:"Basketball",__name:"basketball",setup(t){return(r,a)=>((0,Qe.openBlock)(),(0,Qe.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Qe.createElementVNode)("path",{fill:"currentColor",d:"M778.752 788.224a382.464 382.464 0 0 0 116.032-245.632 256.512 256.512 0 0 0-241.728-13.952 762.88 762.88 0 0 1 125.696 259.584zm-55.04 44.224a699.648 699.648 0 0 0-125.056-269.632 256.128 256.128 0 0 0-56.064 331.968 382.72 382.72 0 0 0 181.12-62.336m-254.08 61.248A320.128 320.128 0 0 1 557.76 513.6a715.84 715.84 0 0 0-48.192-48.128 320.128 320.128 0 0 1-379.264 88.384 382.4 382.4 0 0 0 110.144 229.696 382.4 382.4 0 0 0 229.184 110.08zM129.28 481.088a256.128 256.128 0 0 0 331.072-56.448 699.648 699.648 0 0 0-268.8-124.352 382.656 382.656 0 0 0-62.272 180.8m106.56-235.84a762.88 762.88 0 0 1 258.688 125.056 256.512 256.512 0 0 0-13.44-241.088A382.464 382.464 0 0 0 235.84 245.248zm318.08-114.944c40.576 89.536 37.76 193.92-8.448 281.344a779.84 779.84 0 0 1 66.176 66.112 320.832 320.832 0 0 1 282.112-8.128 382.4 382.4 0 0 0-110.144-229.12 382.4 382.4 0 0 0-229.632-110.208zM828.8 828.8a448 448 0 1 1-633.6-633.6 448 448 0 0 1 633.6 633.6"})]))}});var y4=z4;var M4=o(e()),je=o(e()),N4=(0,M4.defineComponent)({name:"BellFilled",__name:"bell-filled",setup(t){return(r,a)=>((0,je.openBlock)(),(0,je.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,je.createElementVNode)("path",{fill:"currentColor",d:"M640 832a128 128 0 0 1-256 0zm192-64H134.4a38.4 38.4 0 0 1 0-76.8H192V448c0-154.88 110.08-284.16 256.32-313.6a64 64 0 1 1 127.36 0A320.128 320.128 0 0 1 832 448v243.2h57.6a38.4 38.4 0 0 1 0 76.8z"})]))}});var H4=N4;var L4=o(e()),c=o(e()),A4=(0,L4.defineComponent)({name:"Bell",__name:"bell",setup(t){return(r,a)=>((0,c.openBlock)(),(0,c.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,c.createElementVNode)("path",{fill:"currentColor",d:"M512 64a64 64 0 0 1 64 64v64H448v-64a64 64 0 0 1 64-64"}),(0,c.createElementVNode)("path",{fill:"currentColor",d:"M256 768h512V448a256 256 0 1 0-512 0zm256-640a320 320 0 0 1 320 320v384H192V448a320 320 0 0 1 320-320"}),(0,c.createElementVNode)("path",{fill:"currentColor",d:"M96 768h832q32 0 32 32t-32 32H96q-32 0-32-32t32-32m352 128h128a64 64 0 0 1-128 0"})]))}});var S4=A4;var q4=o(e()),n=o(e()),F4=(0,q4.defineComponent)({name:"Bicycle",__name:"bicycle",setup(t){return(r,a)=>((0,n.openBlock)(),(0,n.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,n.createElementVNode)("path",{fill:"currentColor",d:"M256 832a128 128 0 1 0 0-256 128 128 0 0 0 0 256m0 64a192 192 0 1 1 0-384 192 192 0 0 1 0 384"}),(0,n.createElementVNode)("path",{fill:"currentColor",d:"M288 672h320q32 0 32 32t-32 32H288q-32 0-32-32t32-32"}),(0,n.createElementVNode)("path",{fill:"currentColor",d:"M768 832a128 128 0 1 0 0-256 128 128 0 0 0 0 256m0 64a192 192 0 1 1 0-384 192 192 0 0 1 0 384"}),(0,n.createElementVNode)("path",{fill:"currentColor",d:"M480 192a32 32 0 0 1 0-64h160a32 32 0 0 1 31.04 24.256l96 384a32 32 0 0 1-62.08 15.488L615.04 192zM96 384a32 32 0 0 1 0-64h128a32 32 0 0 1 30.336 21.888l64 192a32 32 0 1 1-60.672 20.224L200.96 384z"}),(0,n.createElementVNode)("path",{fill:"currentColor",d:"m373.376 599.808-42.752-47.616 320-288 42.752 47.616z"})]))}});var b4=F4;var D4=o(e()),q=o(e()),P4=(0,D4.defineComponent)({name:"BottomLeft",__name:"bottom-left",setup(t){return(r,a)=>((0,q.openBlock)(),(0,q.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,q.createElementVNode)("path",{fill:"currentColor",d:"M256 768h416a32 32 0 1 1 0 64H224a32 32 0 0 1-32-32V352a32 32 0 0 1 64 0z"}),(0,q.createElementVNode)("path",{fill:"currentColor",d:"M246.656 822.656a32 32 0 0 1-45.312-45.312l544-544a32 32 0 0 1 45.312 45.312l-544 544z"})]))}});var R4=P4;var T4=o(e()),F=o(e()),O4=(0,T4.defineComponent)({name:"BottomRight",__name:"bottom-right",setup(t){return(r,a)=>((0,F.openBlock)(),(0,F.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,F.createElementVNode)("path",{fill:"currentColor",d:"M352 768a32 32 0 1 0 0 64h448a32 32 0 0 0 32-32V352a32 32 0 0 0-64 0v416z"}),(0,F.createElementVNode)("path",{fill:"currentColor",d:"M777.344 822.656a32 32 0 0 0 45.312-45.312l-544-544a32 32 0 0 0-45.312 45.312z"})]))}});var G4=O4;var U4=o(e()),Je=o(e()),W4=(0,U4.defineComponent)({name:"Bottom",__name:"bottom",setup(t){return(r,a)=>((0,Je.openBlock)(),(0,Je.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Je.createElementVNode)("path",{fill:"currentColor",d:"M544 805.888V168a32 32 0 1 0-64 0v637.888L246.656 557.952a30.72 30.72 0 0 0-45.312 0 35.52 35.52 0 0 0 0 48.064l288 306.048a30.72 30.72 0 0 0 45.312 0l288-306.048a35.52 35.52 0 0 0 0-48 30.72 30.72 0 0 0-45.312 0L544 805.824z"})]))}});var I4=W4;var Z4=o(e()),Xe=o(e()),K4=(0,Z4.defineComponent)({name:"Bowl",__name:"bowl",setup(t){return(r,a)=>((0,Xe.openBlock)(),(0,Xe.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Xe.createElementVNode)("path",{fill:"currentColor",d:"M714.432 704a351.744 351.744 0 0 0 148.16-256H161.408a351.744 351.744 0 0 0 148.16 256zM288 766.592A415.68 415.68 0 0 1 96 416a32 32 0 0 1 32-32h768a32 32 0 0 1 32 32 415.68 415.68 0 0 1-192 350.592V832a64 64 0 0 1-64 64H352a64 64 0 0 1-64-64zM493.248 320h-90.496l254.4-254.4a32 32 0 1 1 45.248 45.248zm187.328 0h-128l269.696-155.712a32 32 0 0 1 32 55.424zM352 768v64h320v-64z"})]))}});var Q4=K4;var j4=o(e()),f=o(e()),J4=(0,j4.defineComponent)({name:"Box",__name:"box",setup(t){return(r,a)=>((0,f.openBlock)(),(0,f.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,f.createElementVNode)("path",{fill:"currentColor",d:"M317.056 128 128 344.064V896h768V344.064L706.944 128zm-14.528-64h418.944a32 32 0 0 1 24.064 10.88l206.528 236.096A32 32 0 0 1 960 332.032V928a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V332.032a32 32 0 0 1 7.936-21.12L278.4 75.008A32 32 0 0 1 302.528 64z"}),(0,f.createElementVNode)("path",{fill:"currentColor",d:"M64 320h896v64H64z"}),(0,f.createElementVNode)("path",{fill:"currentColor",d:"M448 327.872V640h128V327.872L526.08 128h-28.16zM448 64h128l64 256v352a32 32 0 0 1-32 32H416a32 32 0 0 1-32-32V320z"})]))}});var X4=J4;var Y4=o(e()),Ye=o(e()),$4=(0,Y4.defineComponent)({name:"Briefcase",__name:"briefcase",setup(t){return(r,a)=>((0,Ye.openBlock)(),(0,Ye.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ye.createElementVNode)("path",{fill:"currentColor",d:"M320 320V128h384v192h192v192H128V320zM128 576h768v320H128zm256-256h256.064V192H384z"})]))}});var et=$4;var ot=o(e()),$e=o(e()),tt=(0,ot.defineComponent)({name:"BrushFilled",__name:"brush-filled",setup(t){return(r,a)=>((0,$e.openBlock)(),(0,$e.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,$e.createElementVNode)("path",{fill:"currentColor",d:"M608 704v160a96 96 0 0 1-192 0V704h-96a128 128 0 0 1-128-128h640a128 128 0 0 1-128 128zM192 512V128.064h640V512z"})]))}});var rt=tt;var at=o(e()),e2=o(e()),nt=(0,at.defineComponent)({name:"Brush",__name:"brush",setup(t){return(r,a)=>((0,e2.openBlock)(),(0,e2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,e2.createElementVNode)("path",{fill:"currentColor",d:"M896 448H128v192a64 64 0 0 0 64 64h192v192h256V704h192a64 64 0 0 0 64-64zm-770.752-64c0-47.552 5.248-90.24 15.552-128 14.72-54.016 42.496-107.392 83.2-160h417.28l-15.36 70.336L736 96h211.2c-24.832 42.88-41.92 96.256-51.2 160a663.872 663.872 0 0 0-6.144 128H960v256a128 128 0 0 1-128 128H704v160a32 32 0 0 1-32 32H352a32 32 0 0 1-32-32V768H192A128 128 0 0 1 64 640V384h61.248zm64 0h636.544c-2.048-45.824.256-91.584 6.848-137.216 4.48-30.848 10.688-59.776 18.688-86.784h-96.64l-221.12 141.248L561.92 160H256.512c-25.856 37.888-43.776 75.456-53.952 112.832-8.768 32.064-13.248 69.12-13.312 111.168z"})]))}});var mt=nt;var lt=o(e()),o2=o(e()),pt=(0,lt.defineComponent)({name:"Burger",__name:"burger",setup(t){return(r,a)=>((0,o2.openBlock)(),(0,o2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,o2.createElementVNode)("path",{fill:"currentColor",d:"M160 512a32 32 0 0 0-32 32v64a32 32 0 0 0 30.08 32H864a32 32 0 0 0 32-32v-64a32 32 0 0 0-32-32zm736-58.56A96 96 0 0 1 960 544v64a96 96 0 0 1-51.968 85.312L855.36 833.6a96 96 0 0 1-89.856 62.272H258.496A96 96 0 0 1 168.64 833.6l-52.608-140.224A96 96 0 0 1 64 608v-64a96 96 0 0 1 64-90.56V448a384 384 0 1 1 768 5.44M832 448a320 320 0 0 0-640 0zM512 704H188.352l40.192 107.136a32 32 0 0 0 29.952 20.736h507.008a32 32 0 0 0 29.952-20.736L835.648 704z"})]))}});var ct=pt;var ft=o(e()),t2=o(e()),st=(0,ft.defineComponent)({name:"Calendar",__name:"calendar",setup(t){return(r,a)=>((0,t2.openBlock)(),(0,t2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,t2.createElementVNode)("path",{fill:"currentColor",d:"M128 384v512h768V192H768v32a32 32 0 1 1-64 0v-32H320v32a32 32 0 0 1-64 0v-32H128v128h768v64zm192-256h384V96a32 32 0 1 1 64 0v32h160a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h160V96a32 32 0 0 1 64 0zm-32 384h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 0 1 0 64h-64a32 32 0 0 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m192-192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64m0 192h64a32 32 0 1 1 0 64h-64a32 32 0 1 1 0-64"})]))}});var _t=st;var it=o(e()),r2=o(e()),dt=(0,it.defineComponent)({name:"CameraFilled",__name:"camera-filled",setup(t){return(r,a)=>((0,r2.openBlock)(),(0,r2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,r2.createElementVNode)("path",{fill:"currentColor",d:"M160 224a64 64 0 0 0-64 64v512a64 64 0 0 0 64 64h704a64 64 0 0 0 64-64V288a64 64 0 0 0-64-64H748.416l-46.464-92.672A64 64 0 0 0 644.736 96H379.328a64 64 0 0 0-57.216 35.392L275.776 224zm352 435.2a115.2 115.2 0 1 0 0-230.4 115.2 115.2 0 0 0 0 230.4m0 140.8a256 256 0 1 1 0-512 256 256 0 0 1 0 512"})]))}});var ut=dt;var xt=o(e()),a2=o(e()),ht=(0,xt.defineComponent)({name:"Camera",__name:"camera",setup(t){return(r,a)=>((0,a2.openBlock)(),(0,a2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,a2.createElementVNode)("path",{fill:"currentColor",d:"M896 256H128v576h768zm-199.424-64-32.064-64h-304.96l-32 64zM96 192h160l46.336-92.608A64 64 0 0 1 359.552 64h304.96a64 64 0 0 1 57.216 35.328L768.192 192H928a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V224a32 32 0 0 1 32-32m416 512a160 160 0 1 0 0-320 160 160 0 0 0 0 320m0 64a224 224 0 1 1 0-448 224 224 0 0 1 0 448"})]))}});var vt=ht;var wt=o(e()),n2=o(e()),Bt=(0,wt.defineComponent)({name:"CaretBottom",__name:"caret-bottom",setup(t){return(r,a)=>((0,n2.openBlock)(),(0,n2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,n2.createElementVNode)("path",{fill:"currentColor",d:"m192 384 320 384 320-384z"})]))}});var kt=Bt;var Ct=o(e()),m2=o(e()),Et=(0,Ct.defineComponent)({name:"CaretLeft",__name:"caret-left",setup(t){return(r,a)=>((0,m2.openBlock)(),(0,m2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,m2.createElementVNode)("path",{fill:"currentColor",d:"M672 192 288 511.936 672 832z"})]))}});var Vt=Et;var gt=o(e()),l2=o(e()),zt=(0,gt.defineComponent)({name:"CaretRight",__name:"caret-right",setup(t){return(r,a)=>((0,l2.openBlock)(),(0,l2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,l2.createElementVNode)("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}});var yt=zt;var Mt=o(e()),p2=o(e()),Nt=(0,Mt.defineComponent)({name:"CaretTop",__name:"caret-top",setup(t){return(r,a)=>((0,p2.openBlock)(),(0,p2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,p2.createElementVNode)("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}});var Ht=Nt;var Lt=o(e()),c2=o(e()),At=(0,Lt.defineComponent)({name:"Cellphone",__name:"cellphone",setup(t){return(r,a)=>((0,c2.openBlock)(),(0,c2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,c2.createElementVNode)("path",{fill:"currentColor",d:"M256 128a64 64 0 0 0-64 64v640a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64zm0-64h512a128 128 0 0 1 128 128v640a128 128 0 0 1-128 128H256a128 128 0 0 1-128-128V192A128 128 0 0 1 256 64m128 128h256a32 32 0 1 1 0 64H384a32 32 0 0 1 0-64m128 640a64 64 0 1 1 0-128 64 64 0 0 1 0 128"})]))}});var St=At;var qt=o(e()),b=o(e()),Ft=(0,qt.defineComponent)({name:"ChatDotRound",__name:"chat-dot-round",setup(t){return(r,a)=>((0,b.openBlock)(),(0,b.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,b.createElementVNode)("path",{fill:"currentColor",d:"m174.72 855.68 135.296-45.12 23.68 11.84C388.096 849.536 448.576 864 512 864c211.84 0 384-166.784 384-352S723.84 160 512 160 128 326.784 128 512c0 69.12 24.96 139.264 70.848 199.232l22.08 28.8-46.272 115.584zm-45.248 82.56A32 32 0 0 1 89.6 896l58.368-145.92C94.72 680.32 64 596.864 64 512 64 299.904 256 96 512 96s448 203.904 448 416-192 416-448 416a461.056 461.056 0 0 1-206.912-48.384l-175.616 58.56z"}),(0,b.createElementVNode)("path",{fill:"currentColor",d:"M512 563.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4m192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4m-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4"})]))}});var bt=Ft;var Dt=o(e()),D=o(e()),Pt=(0,Dt.defineComponent)({name:"ChatDotSquare",__name:"chat-dot-square",setup(t){return(r,a)=>((0,D.openBlock)(),(0,D.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,D.createElementVNode)("path",{fill:"currentColor",d:"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128z"}),(0,D.createElementVNode)("path",{fill:"currentColor",d:"M512 499.2a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm192 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4zm-384 0a51.2 51.2 0 1 1 0-102.4 51.2 51.2 0 0 1 0 102.4z"})]))}});var Rt=Pt;var Tt=o(e()),P=o(e()),Ot=(0,Tt.defineComponent)({name:"ChatLineRound",__name:"chat-line-round",setup(t){return(r,a)=>((0,P.openBlock)(),(0,P.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,P.createElementVNode)("path",{fill:"currentColor",d:"m174.72 855.68 135.296-45.12 23.68 11.84C388.096 849.536 448.576 864 512 864c211.84 0 384-166.784 384-352S723.84 160 512 160 128 326.784 128 512c0 69.12 24.96 139.264 70.848 199.232l22.08 28.8-46.272 115.584zm-45.248 82.56A32 32 0 0 1 89.6 896l58.368-145.92C94.72 680.32 64 596.864 64 512 64 299.904 256 96 512 96s448 203.904 448 416-192 416-448 416a461.056 461.056 0 0 1-206.912-48.384l-175.616 58.56z"}),(0,P.createElementVNode)("path",{fill:"currentColor",d:"M352 576h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32m32-192h256q32 0 32 32t-32 32H384q-32 0-32-32t32-32"})]))}});var Gt=Ot;var Ut=o(e()),R=o(e()),Wt=(0,Ut.defineComponent)({name:"ChatLineSquare",__name:"chat-line-square",setup(t){return(r,a)=>((0,R.openBlock)(),(0,R.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,R.createElementVNode)("path",{fill:"currentColor",d:"M160 826.88 273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128z"}),(0,R.createElementVNode)("path",{fill:"currentColor",d:"M352 512h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32m0-192h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32"})]))}});var It=Wt;var Zt=o(e()),f2=o(e()),Kt=(0,Zt.defineComponent)({name:"ChatRound",__name:"chat-round",setup(t){return(r,a)=>((0,f2.openBlock)(),(0,f2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,f2.createElementVNode)("path",{fill:"currentColor",d:"m174.72 855.68 130.048-43.392 23.424 11.392C382.4 849.984 444.352 864 512 864c223.744 0 384-159.872 384-352 0-192.832-159.104-352-384-352S128 319.168 128 512a341.12 341.12 0 0 0 69.248 204.288l21.632 28.8-44.16 110.528zm-45.248 82.56A32 32 0 0 1 89.6 896l56.512-141.248A405.12 405.12 0 0 1 64 512C64 299.904 235.648 96 512 96s448 203.904 448 416-173.44 416-448 416c-79.68 0-150.848-17.152-211.712-46.72l-170.88 56.96z"})]))}});var Qt=Kt;var jt=o(e()),s2=o(e()),Jt=(0,jt.defineComponent)({name:"ChatSquare",__name:"chat-square",setup(t){return(r,a)=>((0,s2.openBlock)(),(0,s2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,s2.createElementVNode)("path",{fill:"currentColor",d:"M273.536 736H800a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64H224a64 64 0 0 0-64 64v570.88zM296 800 147.968 918.4A32 32 0 0 1 96 893.44V256a128 128 0 0 1 128-128h576a128 128 0 0 1 128 128v416a128 128 0 0 1-128 128z"})]))}});var Xt=Jt;var Yt=o(e()),_2=o(e()),$t=(0,Yt.defineComponent)({name:"Check",__name:"check",setup(t){return(r,a)=>((0,_2.openBlock)(),(0,_2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,_2.createElementVNode)("path",{fill:"currentColor",d:"M406.656 706.944 195.84 496.256a32 32 0 1 0-45.248 45.248l256 256 512-512a32 32 0 0 0-45.248-45.248L406.592 706.944z"})]))}});var er=$t;var or=o(e()),i2=o(e()),tr=(0,or.defineComponent)({name:"Checked",__name:"checked",setup(t){return(r,a)=>((0,i2.openBlock)(),(0,i2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,i2.createElementVNode)("path",{fill:"currentColor",d:"M704 192h160v736H160V192h160.064v64H704zM311.616 537.28l-45.312 45.248L447.36 763.52l316.8-316.8-45.312-45.184L447.36 673.024zM384 192V96h256v96z"})]))}});var rr=tr;var ar=o(e()),d2=o(e()),nr=(0,ar.defineComponent)({name:"Cherry",__name:"cherry",setup(t){return(r,a)=>((0,d2.openBlock)(),(0,d2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,d2.createElementVNode)("path",{fill:"currentColor",d:"M261.056 449.6c13.824-69.696 34.88-128.96 63.36-177.728 23.744-40.832 61.12-88.64 112.256-143.872H320a32 32 0 0 1 0-64h384a32 32 0 1 1 0 64H554.752c14.912 39.168 41.344 86.592 79.552 141.76 47.36 68.48 84.8 106.752 106.304 114.304a224 224 0 1 1-84.992 14.784c-22.656-22.912-47.04-53.76-73.92-92.608-38.848-56.128-67.008-105.792-84.352-149.312-55.296 58.24-94.528 107.52-117.76 147.2-23.168 39.744-41.088 88.768-53.568 147.072a224.064 224.064 0 1 1-64.96-1.6zM288 832a160 160 0 1 0 0-320 160 160 0 0 0 0 320m448-64a160 160 0 1 0 0-320 160 160 0 0 0 0 320"})]))}});var mr=nr;var lr=o(e()),u2=o(e()),pr=(0,lr.defineComponent)({name:"Chicken",__name:"chicken",setup(t){return(r,a)=>((0,u2.openBlock)(),(0,u2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,u2.createElementVNode)("path",{fill:"currentColor",d:"M349.952 716.992 478.72 588.16a106.688 106.688 0 0 1-26.176-19.072 106.688 106.688 0 0 1-19.072-26.176L304.704 671.744c.768 3.072 1.472 6.144 2.048 9.216l2.048 31.936 31.872 1.984c3.136.64 6.208 1.28 9.28 2.112zm57.344 33.152a128 128 0 1 1-216.32 114.432l-1.92-32-32-1.92a128 128 0 1 1 114.432-216.32L416.64 469.248c-2.432-101.44 58.112-239.104 149.056-330.048 107.328-107.328 231.296-85.504 316.8 0 85.44 85.44 107.328 209.408 0 316.8-91.008 90.88-228.672 151.424-330.112 149.056L407.296 750.08zm90.496-226.304c49.536 49.536 233.344-7.04 339.392-113.088 78.208-78.208 63.232-163.072 0-226.304-63.168-63.232-148.032-78.208-226.24 0C504.896 290.496 448.32 474.368 497.792 523.84M244.864 708.928a64 64 0 1 0-59.84 59.84l56.32-3.52zm8.064 127.68a64 64 0 1 0 59.84-59.84l-56.32 3.52-3.52 56.32z"})]))}});var cr=pr;var fr=o(e()),s=o(e()),sr=(0,fr.defineComponent)({name:"ChromeFilled",__name:"chrome-filled",setup(t){return(r,a)=>((0,s.openBlock)(),(0,s.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[(0,s.createElementVNode)("path",{fill:"currentColor",d:"M938.67 512.01c0-44.59-6.82-87.6-19.54-128H682.67a212.372 212.372 0 0 1 42.67 128c.06 38.71-10.45 76.7-30.42 109.87l-182.91 316.8c235.65-.01 426.66-191.02 426.66-426.67z"}),(0,s.createElementVNode)("path",{fill:"currentColor",d:"M576.79 401.63a127.92 127.92 0 0 0-63.56-17.6c-22.36-.22-44.39 5.43-63.89 16.38s-35.79 26.82-47.25 46.02a128.005 128.005 0 0 0-2.16 127.44l1.24 2.13a127.906 127.906 0 0 0 46.36 46.61 127.907 127.907 0 0 0 63.38 17.44c22.29.2 44.24-5.43 63.68-16.33a127.94 127.94 0 0 0 47.16-45.79v-.01l1.11-1.92a127.984 127.984 0 0 0 .29-127.46 127.957 127.957 0 0 0-46.36-46.91"}),(0,s.createElementVNode)("path",{fill:"currentColor",d:"M394.45 333.96A213.336 213.336 0 0 1 512 298.67h369.58A426.503 426.503 0 0 0 512 85.34a425.598 425.598 0 0 0-171.74 35.98 425.644 425.644 0 0 0-142.62 102.22l118.14 204.63a213.397 213.397 0 0 1 78.67-94.21m117.56 604.72H512zm-97.25-236.73a213.284 213.284 0 0 1-89.54-86.81L142.48 298.6c-36.35 62.81-57.13 135.68-57.13 213.42 0 203.81 142.93 374.22 333.95 416.55h.04l118.19-204.71a213.315 213.315 0 0 1-122.77-21.91z"})]))}});var _r=sr;var ir=o(e()),x2=o(e()),dr=(0,ir.defineComponent)({name:"CircleCheckFilled",__name:"circle-check-filled",setup(t){return(r,a)=>((0,x2.openBlock)(),(0,x2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,x2.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}});var ur=dr;var xr=o(e()),T=o(e()),hr=(0,xr.defineComponent)({name:"CircleCheck",__name:"circle-check",setup(t){return(r,a)=>((0,T.openBlock)(),(0,T.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,T.createElementVNode)("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),(0,T.createElementVNode)("path",{fill:"currentColor",d:"M745.344 361.344a32 32 0 0 1 45.312 45.312l-288 288a32 32 0 0 1-45.312 0l-160-160a32 32 0 1 1 45.312-45.312L480 626.752l265.344-265.408z"})]))}});var vr=hr;var wr=o(e()),h2=o(e()),Br=(0,wr.defineComponent)({name:"CircleCloseFilled",__name:"circle-close-filled",setup(t){return(r,a)=>((0,h2.openBlock)(),(0,h2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,h2.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 393.664L407.936 353.6a38.4 38.4 0 1 0-54.336 54.336L457.664 512 353.6 616.064a38.4 38.4 0 1 0 54.336 54.336L512 566.336 616.064 670.4a38.4 38.4 0 1 0 54.336-54.336L566.336 512 670.4 407.936a38.4 38.4 0 1 0-54.336-54.336z"})]))}});var kr=Br;var Cr=o(e()),O=o(e()),Er=(0,Cr.defineComponent)({name:"CircleClose",__name:"circle-close",setup(t){return(r,a)=>((0,O.openBlock)(),(0,O.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,O.createElementVNode)("path",{fill:"currentColor",d:"m466.752 512-90.496-90.496a32 32 0 0 1 45.248-45.248L512 466.752l90.496-90.496a32 32 0 1 1 45.248 45.248L557.248 512l90.496 90.496a32 32 0 1 1-45.248 45.248L512 557.248l-90.496 90.496a32 32 0 0 1-45.248-45.248z"}),(0,O.createElementVNode)("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}});var Vr=Er;var gr=o(e()),v2=o(e()),zr=(0,gr.defineComponent)({name:"CirclePlusFilled",__name:"circle-plus-filled",setup(t){return(r,a)=>((0,v2.openBlock)(),(0,v2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,v2.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-38.4 409.6H326.4a38.4 38.4 0 1 0 0 76.8h147.2v147.2a38.4 38.4 0 0 0 76.8 0V550.4h147.2a38.4 38.4 0 0 0 0-76.8H550.4V326.4a38.4 38.4 0 1 0-76.8 0v147.2z"})]))}});var yr=zr;var Mr=o(e()),_=o(e()),Nr=(0,Mr.defineComponent)({name:"CirclePlus",__name:"circle-plus",setup(t){return(r,a)=>((0,_.openBlock)(),(0,_.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,_.createElementVNode)("path",{fill:"currentColor",d:"M352 480h320a32 32 0 1 1 0 64H352a32 32 0 0 1 0-64"}),(0,_.createElementVNode)("path",{fill:"currentColor",d:"M480 672V352a32 32 0 1 1 64 0v320a32 32 0 0 1-64 0"}),(0,_.createElementVNode)("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}});var Hr=Nr;var Lr=o(e()),i=o(e()),Ar=(0,Lr.defineComponent)({name:"Clock",__name:"clock",setup(t){return(r,a)=>((0,i.openBlock)(),(0,i.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,i.createElementVNode)("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),(0,i.createElementVNode)("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),(0,i.createElementVNode)("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}});var Sr=Ar;var qr=o(e()),w2=o(e()),Fr=(0,qr.defineComponent)({name:"CloseBold",__name:"close-bold",setup(t){return(r,a)=>((0,w2.openBlock)(),(0,w2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,w2.createElementVNode)("path",{fill:"currentColor",d:"M195.2 195.2a64 64 0 0 1 90.496 0L512 421.504 738.304 195.2a64 64 0 0 1 90.496 90.496L602.496 512 828.8 738.304a64 64 0 0 1-90.496 90.496L512 602.496 285.696 828.8a64 64 0 0 1-90.496-90.496L421.504 512 195.2 285.696a64 64 0 0 1 0-90.496z"})]))}});var br=Fr;var Dr=o(e()),B2=o(e()),Pr=(0,Dr.defineComponent)({name:"Close",__name:"close",setup(t){return(r,a)=>((0,B2.openBlock)(),(0,B2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,B2.createElementVNode)("path",{fill:"currentColor",d:"M764.288 214.592 512 466.88 259.712 214.592a31.936 31.936 0 0 0-45.12 45.12L466.752 512 214.528 764.224a31.936 31.936 0 1 0 45.12 45.184L512 557.184l252.288 252.288a31.936 31.936 0 0 0 45.12-45.12L557.12 512.064l252.288-252.352a31.936 31.936 0 1 0-45.12-45.184z"})]))}});var Rr=Pr;var Tr=o(e()),k2=o(e()),Or=(0,Tr.defineComponent)({name:"Cloudy",__name:"cloudy",setup(t){return(r,a)=>((0,k2.openBlock)(),(0,k2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,k2.createElementVNode)("path",{fill:"currentColor",d:"M598.4 831.872H328.192a256 256 0 0 1-34.496-510.528A352 352 0 1 1 598.4 831.872m-271.36-64h272.256a288 288 0 1 0-248.512-417.664L335.04 381.44l-34.816 3.584a192 192 0 0 0 26.88 382.848z"})]))}});var Gr=Or;var Ur=o(e()),C2=o(e()),Wr=(0,Ur.defineComponent)({name:"CoffeeCup",__name:"coffee-cup",setup(t){return(r,a)=>((0,C2.openBlock)(),(0,C2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,C2.createElementVNode)("path",{fill:"currentColor",d:"M768 192a192 192 0 1 1-8 383.808A256.128 256.128 0 0 1 512 768H320A256 256 0 0 1 64 512V160a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zm0 64v256a128 128 0 1 0 0-256M96 832h640a32 32 0 1 1 0 64H96a32 32 0 1 1 0-64m32-640v320a192 192 0 0 0 192 192h192a192 192 0 0 0 192-192V192z"})]))}});var Ir=Wr;var Zr=o(e()),E2=o(e()),Kr=(0,Zr.defineComponent)({name:"Coffee",__name:"coffee",setup(t){return(r,a)=>((0,E2.openBlock)(),(0,E2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,E2.createElementVNode)("path",{fill:"currentColor",d:"M822.592 192h14.272a32 32 0 0 1 31.616 26.752l21.312 128A32 32 0 0 1 858.24 384h-49.344l-39.04 546.304A32 32 0 0 1 737.92 960H285.824a32 32 0 0 1-32-29.696L214.912 384H165.76a32 32 0 0 1-31.552-37.248l21.312-128A32 32 0 0 1 187.136 192h14.016l-6.72-93.696A32 32 0 0 1 226.368 64h571.008a32 32 0 0 1 31.936 34.304zm-64.128 0 4.544-64H260.736l4.544 64h493.184m-548.16 128H820.48l-10.688-64H214.208l-10.688 64h6.784m68.736 64 36.544 512H708.16l36.544-512z"})]))}});var Qr=Kr;var jr=o(e()),d=o(e()),Jr=(0,jr.defineComponent)({name:"Coin",__name:"coin",setup(t){return(r,a)=>((0,d.openBlock)(),(0,d.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,d.createElementVNode)("path",{fill:"currentColor",d:"m161.92 580.736 29.888 58.88C171.328 659.776 160 681.728 160 704c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 615.808 928 657.664 928 704c0 129.728-188.544 224-416 224S96 833.728 96 704c0-46.592 24.32-88.576 65.92-123.264z"}),(0,d.createElementVNode)("path",{fill:"currentColor",d:"m161.92 388.736 29.888 58.88C171.328 467.84 160 489.792 160 512c0 82.304 155.328 160 352 160s352-77.696 352-160c0-22.272-11.392-44.16-31.808-64.32l30.464-58.432C903.936 423.808 928 465.664 928 512c0 129.728-188.544 224-416 224S96 641.728 96 512c0-46.592 24.32-88.576 65.92-123.264z"}),(0,d.createElementVNode)("path",{fill:"currentColor",d:"M512 544c-227.456 0-416-94.272-416-224S284.544 96 512 96s416 94.272 416 224-188.544 224-416 224m0-64c196.672 0 352-77.696 352-160S708.672 160 512 160s-352 77.696-352 160 155.328 160 352 160"})]))}});var Xr=Jr;var Yr=o(e()),V2=o(e()),$r=(0,Yr.defineComponent)({name:"ColdDrink",__name:"cold-drink",setup(t){return(r,a)=>((0,V2.openBlock)(),(0,V2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,V2.createElementVNode)("path",{fill:"currentColor",d:"M768 64a192 192 0 1 1-69.952 370.88L480 725.376V896h96a32 32 0 1 1 0 64H320a32 32 0 1 1 0-64h96V725.376L76.8 273.536a64 64 0 0 1-12.8-38.4v-10.688a32 32 0 0 1 32-32h71.808l-65.536-83.84a32 32 0 0 1 50.432-39.424l96.256 123.264h337.728A192.064 192.064 0 0 1 768 64M656.896 192.448H800a32 32 0 0 1 32 32v10.624a64 64 0 0 1-12.8 38.4l-80.448 107.2a128 128 0 1 0-81.92-188.16v-.064zm-357.888 64 129.472 165.76a32 32 0 0 1-50.432 39.36l-160.256-205.12H144l304 404.928 304-404.928z"})]))}});var e6=$r;var o6=o(e()),g2=o(e()),t6=(0,o6.defineComponent)({name:"CollectionTag",__name:"collection-tag",setup(t){return(r,a)=>((0,g2.openBlock)(),(0,g2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,g2.createElementVNode)("path",{fill:"currentColor",d:"M256 128v698.88l196.032-156.864a96 96 0 0 1 119.936 0L768 826.816V128zm-32-64h576a32 32 0 0 1 32 32v797.44a32 32 0 0 1-51.968 24.96L531.968 720a32 32 0 0 0-39.936 0L243.968 918.4A32 32 0 0 1 192 893.44V96a32 32 0 0 1 32-32"})]))}});var r6=t6;var a6=o(e()),G=o(e()),n6=(0,a6.defineComponent)({name:"Collection",__name:"collection",setup(t){return(r,a)=>((0,G.openBlock)(),(0,G.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,G.createElementVNode)("path",{fill:"currentColor",d:"M192 736h640V128H256a64 64 0 0 0-64 64zm64-672h608a32 32 0 0 1 32 32v672a32 32 0 0 1-32 32H160l-32 57.536V192A128 128 0 0 1 256 64"}),(0,G.createElementVNode)("path",{fill:"currentColor",d:"M240 800a48 48 0 1 0 0 96h592v-96zm0-64h656v160a64 64 0 0 1-64 64H240a112 112 0 0 1 0-224m144-608v250.88l96-76.8 96 76.8V128zm-64-64h320v381.44a32 32 0 0 1-51.968 24.96L480 384l-108.032 86.4A32 32 0 0 1 320 445.44z"})]))}});var m6=n6;var l6=o(e()),z2=o(e()),p6=(0,l6.defineComponent)({name:"Comment",__name:"comment",setup(t){return(r,a)=>((0,z2.openBlock)(),(0,z2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,z2.createElementVNode)("path",{fill:"currentColor",d:"M736 504a56 56 0 1 1 0-112 56 56 0 0 1 0 112m-224 0a56 56 0 1 1 0-112 56 56 0 0 1 0 112m-224 0a56 56 0 1 1 0-112 56 56 0 0 1 0 112M128 128v640h192v160l224-160h352V128z"})]))}});var c6=p6;var f6=o(e()),U=o(e()),s6=(0,f6.defineComponent)({name:"Compass",__name:"compass",setup(t){return(r,a)=>((0,U.openBlock)(),(0,U.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,U.createElementVNode)("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),(0,U.createElementVNode)("path",{fill:"currentColor",d:"M725.888 315.008C676.48 428.672 624 513.28 568.576 568.64c-55.424 55.424-139.968 107.904-253.568 157.312a12.8 12.8 0 0 1-16.896-16.832c49.536-113.728 102.016-198.272 157.312-253.632 55.36-55.296 139.904-107.776 253.632-157.312a12.8 12.8 0 0 1 16.832 16.832"})]))}});var _6=s6;var i6=o(e()),W=o(e()),d6=(0,i6.defineComponent)({name:"Connection",__name:"connection",setup(t){return(r,a)=>((0,W.openBlock)(),(0,W.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,W.createElementVNode)("path",{fill:"currentColor",d:"M640 384v64H448a128 128 0 0 0-128 128v128a128 128 0 0 0 128 128h320a128 128 0 0 0 128-128V576a128 128 0 0 0-64-110.848V394.88c74.56 26.368 128 97.472 128 181.056v128a192 192 0 0 1-192 192H448a192 192 0 0 1-192-192V576a192 192 0 0 1 192-192z"}),(0,W.createElementVNode)("path",{fill:"currentColor",d:"M384 640v-64h192a128 128 0 0 0 128-128V320a128 128 0 0 0-128-128H256a128 128 0 0 0-128 128v128a128 128 0 0 0 64 110.848v70.272A192.064 192.064 0 0 1 64 448V320a192 192 0 0 1 192-192h320a192 192 0 0 1 192 192v128a192 192 0 0 1-192 192z"})]))}});var u6=d6;var x6=o(e()),I=o(e()),h6=(0,x6.defineComponent)({name:"Coordinate",__name:"coordinate",setup(t){return(r,a)=>((0,I.openBlock)(),(0,I.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,I.createElementVNode)("path",{fill:"currentColor",d:"M480 512h64v320h-64z"}),(0,I.createElementVNode)("path",{fill:"currentColor",d:"M192 896h640a64 64 0 0 0-64-64H256a64 64 0 0 0-64 64m64-128h512a128 128 0 0 1 128 128v64H128v-64a128 128 0 0 1 128-128m256-256a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512"})]))}});var v6=h6;var w6=o(e()),Z=o(e()),B6=(0,w6.defineComponent)({name:"CopyDocument",__name:"copy-document",setup(t){return(r,a)=>((0,Z.openBlock)(),(0,Z.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Z.createElementVNode)("path",{fill:"currentColor",d:"M768 832a128 128 0 0 1-128 128H192A128 128 0 0 1 64 832V384a128 128 0 0 1 128-128v64a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64z"}),(0,Z.createElementVNode)("path",{fill:"currentColor",d:"M384 128a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V192a64 64 0 0 0-64-64zm0-64h448a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H384a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64"})]))}});var k6=B6;var C6=o(e()),K=o(e()),E6=(0,C6.defineComponent)({name:"Cpu",__name:"cpu",setup(t){return(r,a)=>((0,K.openBlock)(),(0,K.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,K.createElementVNode)("path",{fill:"currentColor",d:"M320 256a64 64 0 0 0-64 64v384a64 64 0 0 0 64 64h384a64 64 0 0 0 64-64V320a64 64 0 0 0-64-64zm0-64h384a128 128 0 0 1 128 128v384a128 128 0 0 1-128 128H320a128 128 0 0 1-128-128V320a128 128 0 0 1 128-128"}),(0,K.createElementVNode)("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m160 0a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m-320 0a32 32 0 0 1 32 32v128h-64V96a32 32 0 0 1 32-32m160 896a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32m160 0a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32m-320 0a32 32 0 0 1-32-32V800h64v128a32 32 0 0 1-32 32M64 512a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m0-160a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m0 320a32 32 0 0 1 32-32h128v64H96a32 32 0 0 1-32-32m896-160a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32m0-160a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32m0 320a32 32 0 0 1-32 32H800v-64h128a32 32 0 0 1 32 32"})]))}});var V6=E6;var g6=o(e()),Q=o(e()),z6=(0,g6.defineComponent)({name:"CreditCard",__name:"credit-card",setup(t){return(r,a)=>((0,Q.openBlock)(),(0,Q.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Q.createElementVNode)("path",{fill:"currentColor",d:"M896 324.096c0-42.368-2.496-55.296-9.536-68.48a52.352 52.352 0 0 0-22.144-22.08c-13.12-7.04-26.048-9.536-68.416-9.536H228.096c-42.368 0-55.296 2.496-68.48 9.536a52.352 52.352 0 0 0-22.08 22.144c-7.04 13.12-9.536 26.048-9.536 68.416v375.808c0 42.368 2.496 55.296 9.536 68.48a52.352 52.352 0 0 0 22.144 22.08c13.12 7.04 26.048 9.536 68.416 9.536h567.808c42.368 0 55.296-2.496 68.48-9.536a52.352 52.352 0 0 0 22.08-22.144c7.04-13.12 9.536-26.048 9.536-68.416zm64 0v375.808c0 57.088-5.952 77.76-17.088 98.56-11.136 20.928-27.52 37.312-48.384 48.448-20.864 11.136-41.6 17.088-98.56 17.088H228.032c-57.088 0-77.76-5.952-98.56-17.088a116.288 116.288 0 0 1-48.448-48.384c-11.136-20.864-17.088-41.6-17.088-98.56V324.032c0-57.088 5.952-77.76 17.088-98.56 11.136-20.928 27.52-37.312 48.384-48.448 20.864-11.136 41.6-17.088 98.56-17.088H795.84c57.088 0 77.76 5.952 98.56 17.088 20.928 11.136 37.312 27.52 48.448 48.384 11.136 20.864 17.088 41.6 17.088 98.56z"}),(0,Q.createElementVNode)("path",{fill:"currentColor",d:"M64 320h896v64H64zm0 128h896v64H64zm128 192h256v64H192z"})]))}});var y6=z6;var M6=o(e()),j=o(e()),N6=(0,M6.defineComponent)({name:"Crop",__name:"crop",setup(t){return(r,a)=>((0,j.openBlock)(),(0,j.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,j.createElementVNode)("path",{fill:"currentColor",d:"M256 768h672a32 32 0 1 1 0 64H224a32 32 0 0 1-32-32V96a32 32 0 0 1 64 0z"}),(0,j.createElementVNode)("path",{fill:"currentColor",d:"M832 224v704a32 32 0 1 1-64 0V256H96a32 32 0 0 1 0-64h704a32 32 0 0 1 32 32"})]))}});var H6=N6;var L6=o(e()),y2=o(e()),A6=(0,L6.defineComponent)({name:"DArrowLeft",__name:"d-arrow-left",setup(t){return(r,a)=>((0,y2.openBlock)(),(0,y2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,y2.createElementVNode)("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L197.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224zm256 0a29.12 29.12 0 0 1 41.728 0 30.592 30.592 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.592 30.592 0 0 1-.512 43.264 29.12 29.12 0 0 1-41.216-.512L453.76 534.272a32 32 0 0 1 0-44.672l331.648-340.224z"})]))}});var S6=A6;var q6=o(e()),M2=o(e()),F6=(0,q6.defineComponent)({name:"DArrowRight",__name:"d-arrow-right",setup(t){return(r,a)=>((0,M2.openBlock)(),(0,M2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,M2.createElementVNode)("path",{fill:"currentColor",d:"M452.864 149.312a29.12 29.12 0 0 1 41.728.064L826.24 489.664a32 32 0 0 1 0 44.672L494.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L764.736 512 452.864 192a30.592 30.592 0 0 1 0-42.688m-256 0a29.12 29.12 0 0 1 41.728.064L570.24 489.664a32 32 0 0 1 0 44.672L238.592 874.624a29.12 29.12 0 0 1-41.728 0 30.592 30.592 0 0 1 0-42.752L508.736 512 196.864 192a30.592 30.592 0 0 1 0-42.688z"})]))}});var b6=F6;var D6=o(e()),N2=o(e()),P6=(0,D6.defineComponent)({name:"DCaret",__name:"d-caret",setup(t){return(r,a)=>((0,N2.openBlock)(),(0,N2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,N2.createElementVNode)("path",{fill:"currentColor",d:"m512 128 288 320H224zM224 576h576L512 896z"})]))}});var R6=P6;var T6=o(e()),H2=o(e()),O6=(0,T6.defineComponent)({name:"DataAnalysis",__name:"data-analysis",setup(t){return(r,a)=>((0,H2.openBlock)(),(0,H2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,H2.createElementVNode)("path",{fill:"currentColor",d:"m665.216 768 110.848 192h-73.856L591.36 768H433.024L322.176 960H248.32l110.848-192H160a32 32 0 0 1-32-32V192H64a32 32 0 0 1 0-64h896a32 32 0 1 1 0 64h-64v544a32 32 0 0 1-32 32zM832 192H192v512h640zM352 448a32 32 0 0 1 32 32v64a32 32 0 0 1-64 0v-64a32 32 0 0 1 32-32m160-64a32 32 0 0 1 32 32v128a32 32 0 0 1-64 0V416a32 32 0 0 1 32-32m160-64a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V352a32 32 0 0 1 32-32"})]))}});var G6=O6;var U6=o(e()),u=o(e()),W6=(0,U6.defineComponent)({name:"DataBoard",__name:"data-board",setup(t){return(r,a)=>((0,u.openBlock)(),(0,u.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,u.createElementVNode)("path",{fill:"currentColor",d:"M32 128h960v64H32z"}),(0,u.createElementVNode)("path",{fill:"currentColor",d:"M192 192v512h640V192zm-64-64h768v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32z"}),(0,u.createElementVNode)("path",{fill:"currentColor",d:"M322.176 960H248.32l144.64-250.56 55.424 32zm453.888 0h-73.856L576 741.44l55.424-32z"})]))}});var I6=W6;var Z6=o(e()),L2=o(e()),K6=(0,Z6.defineComponent)({name:"DataLine",__name:"data-line",setup(t){return(r,a)=>((0,L2.openBlock)(),(0,L2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,L2.createElementVNode)("path",{fill:"currentColor",d:"M359.168 768H160a32 32 0 0 1-32-32V192H64a32 32 0 0 1 0-64h896a32 32 0 1 1 0 64h-64v544a32 32 0 0 1-32 32H665.216l110.848 192h-73.856L591.36 768H433.024L322.176 960H248.32zM832 192H192v512h640zM342.656 534.656a32 32 0 1 1-45.312-45.312L444.992 341.76l125.44 94.08L679.04 300.032a32 32 0 1 1 49.92 39.936L581.632 524.224 451.008 426.24 342.656 534.592z"})]))}});var Q6=K6;var j6=o(e()),A2=o(e()),J6=(0,j6.defineComponent)({name:"DeleteFilled",__name:"delete-filled",setup(t){return(r,a)=>((0,A2.openBlock)(),(0,A2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,A2.createElementVNode)("path",{fill:"currentColor",d:"M352 192V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64H96a32 32 0 0 1 0-64zm64 0h192v-64H416zM192 960a32 32 0 0 1-32-32V256h704v672a32 32 0 0 1-32 32zm224-192a32 32 0 0 0 32-32V416a32 32 0 0 0-64 0v320a32 32 0 0 0 32 32m192 0a32 32 0 0 0 32-32V416a32 32 0 0 0-64 0v320a32 32 0 0 0 32 32"})]))}});var X6=J6;var Y6=o(e()),x=o(e()),$6=(0,Y6.defineComponent)({name:"DeleteLocation",__name:"delete-location",setup(t){return(r,a)=>((0,x.openBlock)(),(0,x.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,x.createElementVNode)("path",{fill:"currentColor",d:"M288 896h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32"}),(0,x.createElementVNode)("path",{fill:"currentColor",d:"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544"}),(0,x.createElementVNode)("path",{fill:"currentColor",d:"M384 384h256q32 0 32 32t-32 32H384q-32 0-32-32t32-32"})]))}});var e3=$6;var o3=o(e()),S2=o(e()),t3=(0,o3.defineComponent)({name:"Delete",__name:"delete",setup(t){return(r,a)=>((0,S2.openBlock)(),(0,S2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,S2.createElementVNode)("path",{fill:"currentColor",d:"M160 256H96a32 32 0 0 1 0-64h256V95.936a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V192h256a32 32 0 1 1 0 64h-64v672a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32zm448-64v-64H416v64zM224 896h576V256H224zm192-128a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32m192 0a32 32 0 0 1-32-32V416a32 32 0 0 1 64 0v320a32 32 0 0 1-32 32"})]))}});var r3=t3;var a3=o(e()),q2=o(e()),n3=(0,a3.defineComponent)({name:"Dessert",__name:"dessert",setup(t){return(r,a)=>((0,q2.openBlock)(),(0,q2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,q2.createElementVNode)("path",{fill:"currentColor",d:"M128 416v-48a144 144 0 0 1 168.64-141.888 224.128 224.128 0 0 1 430.72 0A144 144 0 0 1 896 368v48a384 384 0 0 1-352 382.72V896h-64v-97.28A384 384 0 0 1 128 416m287.104-32.064h193.792a143.808 143.808 0 0 1 58.88-132.736 160.064 160.064 0 0 0-311.552 0 143.808 143.808 0 0 1 58.88 132.8zm-72.896 0a72 72 0 1 0-140.48 0h140.48m339.584 0h140.416a72 72 0 1 0-140.48 0zM512 736a320 320 0 0 0 318.4-288.064H193.6A320 320 0 0 0 512 736M384 896.064h256a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64"})]))}});var m3=n3;var l3=o(e()),J=o(e()),p3=(0,l3.defineComponent)({name:"Discount",__name:"discount",setup(t){return(r,a)=>((0,J.openBlock)(),(0,J.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,J.createElementVNode)("path",{fill:"currentColor",d:"M224 704h576V318.336L552.512 115.84a64 64 0 0 0-81.024 0L224 318.336zm0 64v128h576V768zM593.024 66.304l259.2 212.096A32 32 0 0 1 864 303.168V928a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V303.168a32 32 0 0 1 11.712-24.768l259.2-212.096a128 128 0 0 1 162.112 0"}),(0,J.createElementVNode)("path",{fill:"currentColor",d:"M512 448a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"})]))}});var c3=p3;var f3=o(e()),F2=o(e()),s3=(0,f3.defineComponent)({name:"DishDot",__name:"dish-dot",setup(t){return(r,a)=>((0,F2.openBlock)(),(0,F2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,F2.createElementVNode)("path",{fill:"currentColor",d:"m384.064 274.56.064-50.688A128 128 0 0 1 512.128 96c70.528 0 127.68 57.152 127.68 127.68v50.752A448.192 448.192 0 0 1 955.392 768H68.544A448.192 448.192 0 0 1 384 274.56zM96 832h832a32 32 0 1 1 0 64H96a32 32 0 1 1 0-64m32-128h768a384 384 0 1 0-768 0m447.808-448v-32.32a63.68 63.68 0 0 0-63.68-63.68 64 64 0 0 0-64 63.936V256z"})]))}});var _3=s3;var i3=o(e()),b2=o(e()),d3=(0,i3.defineComponent)({name:"Dish",__name:"dish",setup(t){return(r,a)=>((0,b2.openBlock)(),(0,b2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,b2.createElementVNode)("path",{fill:"currentColor",d:"M480 257.152V192h-96a32 32 0 0 1 0-64h256a32 32 0 1 1 0 64h-96v65.152A448 448 0 0 1 955.52 768H68.48A448 448 0 0 1 480 257.152M128 704h768a384 384 0 1 0-768 0M96 832h832a32 32 0 1 1 0 64H96a32 32 0 1 1 0-64"})]))}});var u3=d3;var x3=o(e()),D2=o(e()),h3=(0,x3.defineComponent)({name:"DocumentAdd",__name:"document-add",setup(t){return(r,a)=>((0,D2.openBlock)(),(0,D2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,D2.createElementVNode)("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m320 512V448h64v128h128v64H544v128h-64V640H352v-64z"})]))}});var v3=h3;var w3=o(e()),P2=o(e()),B3=(0,w3.defineComponent)({name:"DocumentChecked",__name:"document-checked",setup(t){return(r,a)=>((0,P2.openBlock)(),(0,P2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,P2.createElementVNode)("path",{fill:"currentColor",d:"M805.504 320 640 154.496V320zM832 384H576V128H192v768h640zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m318.4 582.144 180.992-180.992L704.64 510.4 478.4 736.64 320 578.304l45.248-45.312z"})]))}});var k3=B3;var C3=o(e()),R2=o(e()),E3=(0,C3.defineComponent)({name:"DocumentCopy",__name:"document-copy",setup(t){return(r,a)=>((0,R2.openBlock)(),(0,R2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,R2.createElementVNode)("path",{fill:"currentColor",d:"M128 320v576h576V320zm-32-64h640a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V288a32 32 0 0 1 32-32M960 96v704a32 32 0 0 1-32 32h-96v-64h64V128H384v64h-64V96a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32M256 672h320v64H256zm0-192h320v64H256z"})]))}});var V3=E3;var g3=o(e()),T2=o(e()),z3=(0,g3.defineComponent)({name:"DocumentDelete",__name:"document-delete",setup(t){return(r,a)=>((0,T2.openBlock)(),(0,T2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,T2.createElementVNode)("path",{fill:"currentColor",d:"M805.504 320 640 154.496V320zM832 384H576V128H192v768h640zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m308.992 546.304-90.496-90.624 45.248-45.248 90.56 90.496 90.496-90.432 45.248 45.248-90.496 90.56 90.496 90.496-45.248 45.248-90.496-90.496-90.56 90.496-45.248-45.248 90.496-90.496z"})]))}});var y3=z3;var M3=o(e()),O2=o(e()),N3=(0,M3.defineComponent)({name:"DocumentRemove",__name:"document-remove",setup(t){return(r,a)=>((0,O2.openBlock)(),(0,O2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,O2.createElementVNode)("path",{fill:"currentColor",d:"M805.504 320 640 154.496V320zM832 384H576V128H192v768h640zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m192 512h320v64H352z"})]))}});var H3=N3;var L3=o(e()),G2=o(e()),A3=(0,L3.defineComponent)({name:"Document",__name:"document",setup(t){return(r,a)=>((0,G2.openBlock)(),(0,G2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,G2.createElementVNode)("path",{fill:"currentColor",d:"M832 384H576V128H192v768h640zm-26.496-64L640 154.496V320zM160 64h480l256 256v608a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h160v64H320zm0 384h384v64H320z"})]))}});var S3=A3;var q3=o(e()),U2=o(e()),F3=(0,q3.defineComponent)({name:"Download",__name:"download",setup(t){return(r,a)=>((0,U2.openBlock)(),(0,U2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,U2.createElementVNode)("path",{fill:"currentColor",d:"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-253.696 236.288-236.352 45.248 45.248L508.8 704 192 387.2l45.248-45.248L480 584.704V128h64z"})]))}});var b3=F3;var D3=o(e()),W2=o(e()),P3=(0,D3.defineComponent)({name:"Drizzling",__name:"drizzling",setup(t){return(r,a)=>((0,W2.openBlock)(),(0,W2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,W2.createElementVNode)("path",{fill:"currentColor",d:"m739.328 291.328-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 97.28 78.72 175.936 175.808 175.936h400a192 192 0 0 0 35.776-380.672zM959.552 480a256 256 0 0 1-256 256h-400A239.808 239.808 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 959.552 480M288 800h64v64h-64zm192 0h64v64h-64zm-96 96h64v64h-64zm192 0h64v64h-64zm96-96h64v64h-64z"})]))}});var R3=P3;var T3=o(e()),I2=o(e()),O3=(0,T3.defineComponent)({name:"EditPen",__name:"edit-pen",setup(t){return(r,a)=>((0,I2.openBlock)(),(0,I2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,I2.createElementVNode)("path",{fill:"currentColor",d:"m199.04 672.64 193.984 112 224-387.968-193.92-112-224 388.032zm-23.872 60.16 32.896 148.288 144.896-45.696zM455.04 229.248l193.92 112 56.704-98.112-193.984-112-56.64 98.112zM104.32 708.8l384-665.024 304.768 175.936L409.152 884.8h.064l-248.448 78.336zm384 254.272v-64h448v64h-448z"})]))}});var G3=O3;var U3=o(e()),X=o(e()),W3=(0,U3.defineComponent)({name:"Edit",__name:"edit",setup(t){return(r,a)=>((0,X.openBlock)(),(0,X.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,X.createElementVNode)("path",{fill:"currentColor",d:"M832 512a32 32 0 1 1 64 0v352a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h352a32 32 0 0 1 0 64H192v640h640z"}),(0,X.createElementVNode)("path",{fill:"currentColor",d:"m469.952 554.24 52.8-7.552L847.104 222.4a32 32 0 1 0-45.248-45.248L477.44 501.44l-7.552 52.8zm422.4-422.4a96 96 0 0 1 0 135.808l-331.84 331.84a32 32 0 0 1-18.112 9.088L436.8 623.68a32 32 0 0 1-36.224-36.224l15.104-105.6a32 32 0 0 1 9.024-18.112l331.904-331.84a96 96 0 0 1 135.744 0z"})]))}});var I3=W3;var Z3=o(e()),Z2=o(e()),K3=(0,Z3.defineComponent)({name:"ElemeFilled",__name:"eleme-filled",setup(t){return(r,a)=>((0,Z2.openBlock)(),(0,Z2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Z2.createElementVNode)("path",{fill:"currentColor",d:"M176 64h672c61.824 0 112 50.176 112 112v672a112 112 0 0 1-112 112H176A112 112 0 0 1 64 848V176c0-61.824 50.176-112 112-112m150.528 173.568c-152.896 99.968-196.544 304.064-97.408 456.96a330.688 330.688 0 0 0 456.96 96.64c9.216-5.888 17.6-11.776 25.152-18.56a18.24 18.24 0 0 0 4.224-24.32L700.352 724.8a47.552 47.552 0 0 0-65.536-14.272A234.56 234.56 0 0 1 310.592 641.6C240 533.248 271.104 387.968 379.456 316.48a234.304 234.304 0 0 1 276.352 15.168c1.664.832 2.56 2.56 3.392 4.224 5.888 8.384 3.328 19.328-5.12 25.216L456.832 489.6a47.552 47.552 0 0 0-14.336 65.472l16 24.384c5.888 8.384 16.768 10.88 25.216 5.056l308.224-199.936a19.584 19.584 0 0 0 6.72-23.488v-.896c-4.992-9.216-10.048-17.6-15.104-26.88-99.968-151.168-304.064-194.88-456.96-95.744zM786.88 504.704l-62.208 40.32c-8.32 5.888-10.88 16.768-4.992 25.216L760 632.32c5.888 8.448 16.768 11.008 25.152 5.12l31.104-20.16a55.36 55.36 0 0 0 16-76.48l-20.224-31.04a19.52 19.52 0 0 0-25.152-5.12z"})]))}});var Q3=K3;var j3=o(e()),K2=o(e()),J3=(0,j3.defineComponent)({name:"Eleme",__name:"eleme",setup(t){return(r,a)=>((0,K2.openBlock)(),(0,K2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,K2.createElementVNode)("path",{fill:"currentColor",d:"M300.032 188.8c174.72-113.28 408-63.36 522.24 109.44 5.76 10.56 11.52 20.16 17.28 30.72v.96a22.4 22.4 0 0 1-7.68 26.88l-352.32 228.48c-9.6 6.72-22.08 3.84-28.8-5.76l-18.24-27.84a54.336 54.336 0 0 1 16.32-74.88l225.6-146.88c9.6-6.72 12.48-19.2 5.76-28.8-.96-1.92-1.92-3.84-3.84-4.8a267.84 267.84 0 0 0-315.84-17.28c-123.84 81.6-159.36 247.68-78.72 371.52a268.096 268.096 0 0 0 370.56 78.72 54.336 54.336 0 0 1 74.88 16.32l17.28 26.88c5.76 9.6 3.84 21.12-4.8 27.84-8.64 7.68-18.24 14.4-28.8 21.12a377.92 377.92 0 0 1-522.24-110.4c-113.28-174.72-63.36-408 111.36-522.24zm526.08 305.28a22.336 22.336 0 0 1 28.8 5.76l23.04 35.52a63.232 63.232 0 0 1-18.24 87.36l-35.52 23.04c-9.6 6.72-22.08 3.84-28.8-5.76l-46.08-71.04c-6.72-9.6-3.84-22.08 5.76-28.8l71.04-46.08z"})]))}});var X3=J3;var Y3=o(e()),Q2=o(e()),$3=(0,Y3.defineComponent)({name:"ElementPlus",__name:"element-plus",setup(t){return(r,a)=>((0,Q2.openBlock)(),(0,Q2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Q2.createElementVNode)("path",{fill:"currentColor",d:"M839.7 734.7c0 33.3-17.9 41-17.9 41S519.7 949.8 499.2 960c-10.2 5.1-20.5 5.1-30.7 0 0 0-314.9-184.3-325.1-192-5.1-5.1-10.2-12.8-12.8-20.5V368.6c0-17.9 20.5-28.2 20.5-28.2L466 158.6c12.8-5.1 25.6-5.1 38.4 0 0 0 279 161.3 309.8 179.2 17.9 7.7 28.2 25.6 25.6 46.1-.1-5-.1 317.5-.1 350.8M714.2 371.2c-64-35.8-217.6-125.4-217.6-125.4-7.7-5.1-20.5-5.1-30.7 0L217.6 389.1s-17.9 10.2-17.9 23v297c0 5.1 5.1 12.8 7.7 17.9 7.7 5.1 256 148.5 256 148.5 7.7 5.1 17.9 5.1 25.6 0 15.4-7.7 250.9-145.9 250.9-145.9s12.8-5.1 12.8-30.7v-74.2l-276.5 169v-64c0-17.9 7.7-30.7 20.5-46.1L745 535c5.1-7.7 10.2-20.5 10.2-30.7v-66.6l-279 169v-69.1c0-15.4 5.1-30.7 17.9-38.4l220.1-128zM919 135.7c0-5.1-5.1-7.7-7.7-7.7h-58.9V66.6c0-5.1-5.1-5.1-10.2-5.1l-30.7 5.1c-5.1 0-5.1 2.6-5.1 5.1V128h-56.3c-5.1 0-5.1 5.1-7.7 5.1v38.4h69.1v64c0 5.1 5.1 5.1 10.2 5.1l30.7-5.1c5.1 0 5.1-2.6 5.1-5.1v-56.3h64l-2.5-38.4z"})]))}});var ea=$3;var oa=o(e()),j2=o(e()),ta=(0,oa.defineComponent)({name:"Expand",__name:"expand",setup(t){return(r,a)=>((0,j2.openBlock)(),(0,j2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,j2.createElementVNode)("path",{fill:"currentColor",d:"M128 192h768v128H128zm0 256h512v128H128zm0 256h768v128H128zm576-352 192 160-192 128z"})]))}});var ra=ta;var aa=o(e()),J2=o(e()),na=(0,aa.defineComponent)({name:"Failed",__name:"failed",setup(t){return(r,a)=>((0,J2.openBlock)(),(0,J2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,J2.createElementVNode)("path",{fill:"currentColor",d:"m557.248 608 135.744-135.744-45.248-45.248-135.68 135.744-135.808-135.68-45.248 45.184L466.752 608l-135.68 135.68 45.184 45.312L512 653.248l135.744 135.744 45.248-45.248L557.312 608zM704 192h160v736H160V192h160v64h384zm-320 0V96h256v96z"})]))}});var ma=na;var la=o(e()),h=o(e()),pa=(0,la.defineComponent)({name:"Female",__name:"female",setup(t){return(r,a)=>((0,h.openBlock)(),(0,h.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,h.createElementVNode)("path",{fill:"currentColor",d:"M512 640a256 256 0 1 0 0-512 256 256 0 0 0 0 512m0 64a320 320 0 1 1 0-640 320 320 0 0 1 0 640"}),(0,h.createElementVNode)("path",{fill:"currentColor",d:"M512 640q32 0 32 32v256q0 32-32 32t-32-32V672q0-32 32-32"}),(0,h.createElementVNode)("path",{fill:"currentColor",d:"M352 800h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32"})]))}});var ca=pa;var fa=o(e()),X2=o(e()),sa=(0,fa.defineComponent)({name:"Files",__name:"files",setup(t){return(r,a)=>((0,X2.openBlock)(),(0,X2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,X2.createElementVNode)("path",{fill:"currentColor",d:"M128 384v448h768V384zm-32-64h832a32 32 0 0 1 32 32v512a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V352a32 32 0 0 1 32-32m64-128h704v64H160zm96-128h512v64H256z"})]))}});var _a=sa;var ia=o(e()),Y=o(e()),da=(0,ia.defineComponent)({name:"Film",__name:"film",setup(t){return(r,a)=>((0,Y.openBlock)(),(0,Y.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Y.createElementVNode)("path",{fill:"currentColor",d:"M160 160v704h704V160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32"}),(0,Y.createElementVNode)("path",{fill:"currentColor",d:"M320 288V128h64v352h256V128h64v160h160v64H704v128h160v64H704v128h160v64H704v160h-64V544H384v352h-64V736H128v-64h192V544H128v-64h192V352H128v-64z"})]))}});var ua=da;var xa=o(e()),Y2=o(e()),ha=(0,xa.defineComponent)({name:"Filter",__name:"filter",setup(t){return(r,a)=>((0,Y2.openBlock)(),(0,Y2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Y2.createElementVNode)("path",{fill:"currentColor",d:"M384 523.392V928a32 32 0 0 0 46.336 28.608l192-96A32 32 0 0 0 640 832V523.392l280.768-343.104a32 32 0 1 0-49.536-40.576l-288 352A32 32 0 0 0 576 512v300.224l-128 64V512a32 32 0 0 0-7.232-20.288L195.52 192H704a32 32 0 1 0 0-64H128a32 32 0 0 0-24.768 52.288z"})]))}});var va=ha;var wa=o(e()),$2=o(e()),Ba=(0,wa.defineComponent)({name:"Finished",__name:"finished",setup(t){return(r,a)=>((0,$2.openBlock)(),(0,$2.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,$2.createElementVNode)("path",{fill:"currentColor",d:"M280.768 753.728 691.456 167.04a32 32 0 1 1 52.416 36.672L314.24 817.472a32 32 0 0 1-45.44 7.296l-230.4-172.8a32 32 0 0 1 38.4-51.2l203.968 152.96zM736 448a32 32 0 1 1 0-64h192a32 32 0 1 1 0 64zM608 640a32 32 0 0 1 0-64h319.936a32 32 0 1 1 0 64zM480 832a32 32 0 1 1 0-64h447.936a32 32 0 1 1 0 64z"})]))}});var ka=Ba;var Ca=o(e()),$=o(e()),Ea=(0,Ca.defineComponent)({name:"FirstAidKit",__name:"first-aid-kit",setup(t){return(r,a)=>((0,$.openBlock)(),(0,$.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,$.createElementVNode)("path",{fill:"currentColor",d:"M192 256a64 64 0 0 0-64 64v448a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V320a64 64 0 0 0-64-64zm0-64h640a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H192A128 128 0 0 1 64 768V320a128 128 0 0 1 128-128"}),(0,$.createElementVNode)("path",{fill:"currentColor",d:"M544 512h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64h96v-96a32 32 0 0 1 64 0zM352 128v64h320v-64zm-32-64h384a32 32 0 0 1 32 32v128a32 32 0 0 1-32 32H320a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32"})]))}});var Va=Ea;var ga=o(e()),e0=o(e()),za=(0,ga.defineComponent)({name:"Flag",__name:"flag",setup(t){return(r,a)=>((0,e0.openBlock)(),(0,e0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,e0.createElementVNode)("path",{fill:"currentColor",d:"M288 128h608L736 384l160 256H288v320h-96V64h96z"})]))}});var ya=za;var Ma=o(e()),o0=o(e()),Na=(0,Ma.defineComponent)({name:"Fold",__name:"fold",setup(t){return(r,a)=>((0,o0.openBlock)(),(0,o0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,o0.createElementVNode)("path",{fill:"currentColor",d:"M896 192H128v128h768zm0 256H384v128h512zm0 256H128v128h768zM320 384 128 512l192 128z"})]))}});var Ha=Na;var La=o(e()),t0=o(e()),Aa=(0,La.defineComponent)({name:"FolderAdd",__name:"folder-add",setup(t){return(r,a)=>((0,t0.openBlock)(),(0,t0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,t0.createElementVNode)("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m384 416V416h64v128h128v64H544v128h-64V608H352v-64z"})]))}});var Sa=Aa;var qa=o(e()),r0=o(e()),Fa=(0,qa.defineComponent)({name:"FolderChecked",__name:"folder-checked",setup(t){return(r,a)=>((0,r0.openBlock)(),(0,r0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,r0.createElementVNode)("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m414.08 502.144 180.992-180.992L736.32 494.4 510.08 720.64l-158.4-158.336 45.248-45.312z"})]))}});var ba=Fa;var Da=o(e()),a0=o(e()),Pa=(0,Da.defineComponent)({name:"FolderDelete",__name:"folder-delete",setup(t){return(r,a)=>((0,a0.openBlock)(),(0,a0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,a0.createElementVNode)("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m370.752 448-90.496-90.496 45.248-45.248L512 530.752l90.496-90.496 45.248 45.248L557.248 576l90.496 90.496-45.248 45.248L512 621.248l-90.496 90.496-45.248-45.248z"})]))}});var Ra=Pa;var Ta=o(e()),n0=o(e()),Oa=(0,Ta.defineComponent)({name:"FolderOpened",__name:"folder-opened",setup(t){return(r,a)=>((0,n0.openBlock)(),(0,n0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,n0.createElementVNode)("path",{fill:"currentColor",d:"M878.08 448H241.92l-96 384h636.16l96-384zM832 384v-64H485.76L357.504 192H128v448l57.92-231.744A32 32 0 0 1 216.96 384zm-24.96 512H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h287.872l128.384 128H864a32 32 0 0 1 32 32v96h23.04a32 32 0 0 1 31.04 39.744l-112 448A32 32 0 0 1 807.04 896"})]))}});var Ga=Oa;var Ua=o(e()),m0=o(e()),Wa=(0,Ua.defineComponent)({name:"FolderRemove",__name:"folder-remove",setup(t){return(r,a)=>((0,m0.openBlock)(),(0,m0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,m0.createElementVNode)("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32m256 416h320v64H352z"})]))}});var Ia=Wa;var Za=o(e()),l0=o(e()),Ka=(0,Za.defineComponent)({name:"Folder",__name:"folder",setup(t){return(r,a)=>((0,l0.openBlock)(),(0,l0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,l0.createElementVNode)("path",{fill:"currentColor",d:"M128 192v640h768V320H485.76L357.504 192zm-32-64h287.872l128.384 128H928a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32"})]))}});var Qa=Ka;var ja=o(e()),p0=o(e()),Ja=(0,ja.defineComponent)({name:"Food",__name:"food",setup(t){return(r,a)=>((0,p0.openBlock)(),(0,p0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,p0.createElementVNode)("path",{fill:"currentColor",d:"M128 352.576V352a288 288 0 0 1 491.072-204.224 192 192 0 0 1 274.24 204.48 64 64 0 0 1 57.216 74.24C921.6 600.512 850.048 710.656 736 756.992V800a96 96 0 0 1-96 96H384a96 96 0 0 1-96-96v-43.008c-114.048-46.336-185.6-156.48-214.528-330.496A64 64 0 0 1 128 352.64zm64-.576h64a160 160 0 0 1 320 0h64a224 224 0 0 0-448 0m128 0h192a96 96 0 0 0-192 0m439.424 0h68.544A128.256 128.256 0 0 0 704 192c-15.36 0-29.952 2.688-43.52 7.616 11.328 18.176 20.672 37.76 27.84 58.304A64.128 64.128 0 0 1 759.424 352M672 768H352v32a32 32 0 0 0 32 32h256a32 32 0 0 0 32-32zm-342.528-64h365.056c101.504-32.64 165.76-124.928 192.896-288H136.576c27.136 163.072 91.392 255.36 192.896 288"})]))}});var Xa=Ja;var Ya=o(e()),ee=o(e()),$a=(0,Ya.defineComponent)({name:"Football",__name:"football",setup(t){return(r,a)=>((0,ee.openBlock)(),(0,ee.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ee.createElementVNode)("path",{fill:"currentColor",d:"M512 960a448 448 0 1 1 0-896 448 448 0 0 1 0 896m0-64a384 384 0 1 0 0-768 384 384 0 0 0 0 768"}),(0,ee.createElementVNode)("path",{fill:"currentColor",d:"M186.816 268.288c16-16.384 31.616-31.744 46.976-46.08 17.472 30.656 39.808 58.112 65.984 81.28l-32.512 56.448a385.984 385.984 0 0 1-80.448-91.648zm653.696-5.312a385.92 385.92 0 0 1-83.776 96.96l-32.512-56.384a322.923 322.923 0 0 0 68.48-85.76c15.552 14.08 31.488 29.12 47.808 45.184zM465.984 445.248l11.136-63.104a323.584 323.584 0 0 0 69.76 0l11.136 63.104a387.968 387.968 0 0 1-92.032 0m-62.72-12.8A381.824 381.824 0 0 1 320 396.544l32-55.424a319.885 319.885 0 0 0 62.464 27.712l-11.2 63.488zm300.8-35.84a381.824 381.824 0 0 1-83.328 35.84l-11.2-63.552A319.885 319.885 0 0 0 672 341.184l32 55.424zm-520.768 364.8a385.92 385.92 0 0 1 83.968-97.28l32.512 56.32c-26.88 23.936-49.856 52.352-67.52 84.032-16-13.44-32.32-27.712-48.96-43.072zm657.536.128a1442.759 1442.759 0 0 1-49.024 43.072 321.408 321.408 0 0 0-67.584-84.16l32.512-56.32c33.216 27.456 61.696 60.352 84.096 97.408zM465.92 578.752a387.968 387.968 0 0 1 92.032 0l-11.136 63.104a323.584 323.584 0 0 0-69.76 0zm-62.72 12.8 11.2 63.552a319.885 319.885 0 0 0-62.464 27.712L320 627.392a381.824 381.824 0 0 1 83.264-35.84zm300.8 35.84-32 55.424a318.272 318.272 0 0 0-62.528-27.712l11.2-63.488c29.44 8.64 57.28 20.736 83.264 35.776z"})]))}});var e8=$a;var o8=o(e()),c0=o(e()),t8=(0,o8.defineComponent)({name:"ForkSpoon",__name:"fork-spoon",setup(t){return(r,a)=>((0,c0.openBlock)(),(0,c0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,c0.createElementVNode)("path",{fill:"currentColor",d:"M256 410.304V96a32 32 0 0 1 64 0v314.304a96 96 0 0 0 64-90.56V96a32 32 0 0 1 64 0v223.744a160 160 0 0 1-128 156.8V928a32 32 0 1 1-64 0V476.544a160 160 0 0 1-128-156.8V96a32 32 0 0 1 64 0v223.744a96 96 0 0 0 64 90.56zM672 572.48C581.184 552.128 512 446.848 512 320c0-141.44 85.952-256 192-256s192 114.56 192 256c0 126.848-69.184 232.128-160 252.48V928a32 32 0 1 1-64 0zM704 512c66.048 0 128-82.56 128-192s-61.952-192-128-192-128 82.56-128 192 61.952 192 128 192"})]))}});var r8=t8;var a8=o(e()),f0=o(e()),n8=(0,a8.defineComponent)({name:"Fries",__name:"fries",setup(t){return(r,a)=>((0,f0.openBlock)(),(0,f0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,f0.createElementVNode)("path",{fill:"currentColor",d:"M608 224v-64a32 32 0 0 0-64 0v336h26.88A64 64 0 0 0 608 484.096zm101.12 160A64 64 0 0 0 672 395.904V384h64V224a32 32 0 1 0-64 0v160zm74.88 0a92.928 92.928 0 0 1 91.328 110.08l-60.672 323.584A96 96 0 0 1 720.32 896H303.68a96 96 0 0 1-94.336-78.336L148.672 494.08A92.928 92.928 0 0 1 240 384h-16V224a96 96 0 0 1 188.608-25.28A95.744 95.744 0 0 1 480 197.44V160a96 96 0 0 1 188.608-25.28A96 96 0 0 1 800 224v160zM670.784 512a128 128 0 0 1-99.904 48H453.12a128 128 0 0 1-99.84-48H352v-1.536a128.128 128.128 0 0 1-9.984-14.976L314.88 448H240a28.928 28.928 0 0 0-28.48 34.304L241.088 640h541.824l29.568-157.696A28.928 28.928 0 0 0 784 448h-74.88l-27.136 47.488A132.405 132.405 0 0 1 672 510.464V512zM480 288a32 32 0 0 0-64 0v196.096A64 64 0 0 0 453.12 496H480zm-128 96V224a32 32 0 0 0-64 0v160zh-37.12A64 64 0 0 1 352 395.904zm-98.88 320 19.072 101.888A32 32 0 0 0 303.68 832h416.64a32 32 0 0 0 31.488-26.112L770.88 704z"})]))}});var m8=n8;var l8=o(e()),s0=o(e()),p8=(0,l8.defineComponent)({name:"FullScreen",__name:"full-screen",setup(t){return(r,a)=>((0,s0.openBlock)(),(0,s0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,s0.createElementVNode)("path",{fill:"currentColor",d:"m160 96.064 192 .192a32 32 0 0 1 0 64l-192-.192V352a32 32 0 0 1-64 0V96h64zm0 831.872V928H96V672a32 32 0 1 1 64 0v191.936l192-.192a32 32 0 1 1 0 64zM864 96.064V96h64v256a32 32 0 1 1-64 0V160.064l-192 .192a32 32 0 1 1 0-64l192-.192zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}});var c8=p8;var f8=o(e()),_0=o(e()),s8=(0,f8.defineComponent)({name:"GobletFull",__name:"goblet-full",setup(t){return(r,a)=>((0,_0.openBlock)(),(0,_0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,_0.createElementVNode)("path",{fill:"currentColor",d:"M256 320h512c0-78.592-12.608-142.4-36.928-192h-434.24C269.504 192.384 256 256.256 256 320m503.936 64H264.064a256.128 256.128 0 0 0 495.872 0zM544 638.4V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96V638.4A320 320 0 0 1 192 320c0-85.632 21.312-170.944 64-256h512c42.688 64.32 64 149.632 64 256a320 320 0 0 1-288 318.4"})]))}});var _8=s8;var i8=o(e()),i0=o(e()),d8=(0,i8.defineComponent)({name:"GobletSquareFull",__name:"goblet-square-full",setup(t){return(r,a)=>((0,i0.openBlock)(),(0,i0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,i0.createElementVNode)("path",{fill:"currentColor",d:"M256 270.912c10.048 6.72 22.464 14.912 28.992 18.624a220.16 220.16 0 0 0 114.752 30.72c30.592 0 49.408-9.472 91.072-41.152l.64-.448c52.928-40.32 82.368-55.04 132.288-54.656 55.552.448 99.584 20.8 142.72 57.408l1.536 1.28V128H256v142.912zm.96 76.288C266.368 482.176 346.88 575.872 512 576c157.44.064 237.952-85.056 253.248-209.984a952.32 952.32 0 0 1-40.192-35.712c-32.704-27.776-63.36-41.92-101.888-42.24-31.552-.256-50.624 9.28-93.12 41.6l-.576.448c-52.096 39.616-81.024 54.208-129.792 54.208-54.784 0-100.48-13.376-142.784-37.056zM480 638.848C250.624 623.424 192 442.496 192 319.68V96a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v224c0 122.816-58.624 303.68-288 318.912V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96z"})]))}});var u8=d8;var x8=o(e()),d0=o(e()),h8=(0,x8.defineComponent)({name:"GobletSquare",__name:"goblet-square",setup(t){return(r,a)=>((0,d0.openBlock)(),(0,d0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,d0.createElementVNode)("path",{fill:"currentColor",d:"M544 638.912V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96V638.848C250.624 623.424 192 442.496 192 319.68V96a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v224c0 122.816-58.624 303.68-288 318.912M256 319.68c0 149.568 80 256.192 256 256.256C688.128 576 768 469.568 768 320V128H256z"})]))}});var v8=h8;var w8=o(e()),u0=o(e()),B8=(0,w8.defineComponent)({name:"Goblet",__name:"goblet",setup(t){return(r,a)=>((0,u0.openBlock)(),(0,u0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,u0.createElementVNode)("path",{fill:"currentColor",d:"M544 638.4V896h96a32 32 0 1 1 0 64H384a32 32 0 1 1 0-64h96V638.4A320 320 0 0 1 192 320c0-85.632 21.312-170.944 64-256h512c42.688 64.32 64 149.632 64 256a320 320 0 0 1-288 318.4M256 320a256 256 0 1 0 512 0c0-78.592-12.608-142.4-36.928-192h-434.24C269.504 192.384 256 256.256 256 320"})]))}});var k8=B8;var C8=o(e()),oe=o(e()),E8=(0,C8.defineComponent)({name:"GoldMedal",__name:"gold-medal",setup(t){return(r,a)=>((0,oe.openBlock)(),(0,oe.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[(0,oe.createElementVNode)("path",{fill:"currentColor",d:"m772.13 452.84 53.86-351.81c1.32-10.01-1.17-18.68-7.49-26.02S804.35 64 795.01 64H228.99v-.01h-.06c-9.33 0-17.15 3.67-23.49 11.01s-8.83 16.01-7.49 26.02l53.87 351.89C213.54 505.73 193.59 568.09 192 640c2 90.67 33.17 166.17 93.5 226.5S421.33 957.99 512 960c90.67-2 166.17-33.17 226.5-93.5 60.33-60.34 91.49-135.83 93.5-226.5-1.59-71.94-21.56-134.32-59.87-187.16zM640.01 128h117.02l-39.01 254.02c-20.75-10.64-40.74-19.73-59.94-27.28-5.92-3-11.95-5.8-18.08-8.41V128h.01zM576 128v198.76c-13.18-2.58-26.74-4.43-40.67-5.55-8.07-.8-15.85-1.2-23.33-1.2-10.54 0-21.09.66-31.64 1.96a359.844 359.844 0 0 0-32.36 4.79V128zm-192 0h.04v218.3c-6.22 2.66-12.34 5.5-18.36 8.56-19.13 7.54-39.02 16.6-59.66 27.16L267.01 128zm308.99 692.99c-48 48-108.33 73-180.99 75.01-72.66-2.01-132.99-27.01-180.99-75.01S258.01 712.66 256 640c2.01-72.66 27.01-132.99 75.01-180.99 19.67-19.67 41.41-35.47 65.22-47.41 38.33-15.04 71.15-23.92 98.44-26.65 5.07-.41 10.2-.7 15.39-.88.63-.01 1.28-.03 1.91-.03.66 0 1.35.03 2.02.04 5.11.17 10.15.46 15.13.86 27.4 2.71 60.37 11.65 98.91 26.79 23.71 11.93 45.36 27.69 64.96 47.29 48 48 73 108.33 75.01 180.99-2.01 72.65-27.01 132.98-75.01 180.98z"}),(0,oe.createElementVNode)("path",{fill:"currentColor",d:"M544 480H416v64h64v192h-64v64h192v-64h-64z"})]))}});var V8=E8;var g8=o(e()),x0=o(e()),z8=(0,g8.defineComponent)({name:"GoodsFilled",__name:"goods-filled",setup(t){return(r,a)=>((0,x0.openBlock)(),(0,x0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,x0.createElementVNode)("path",{fill:"currentColor",d:"M192 352h640l64 544H128zm128 224h64V448h-64zm320 0h64V448h-64zM384 288h-64a192 192 0 1 1 384 0h-64a128 128 0 1 0-256 0"})]))}});var y8=z8;var M8=o(e()),h0=o(e()),N8=(0,M8.defineComponent)({name:"Goods",__name:"goods",setup(t){return(r,a)=>((0,h0.openBlock)(),(0,h0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,h0.createElementVNode)("path",{fill:"currentColor",d:"M320 288v-22.336C320 154.688 405.504 64 512 64s192 90.688 192 201.664v22.4h131.072a32 32 0 0 1 31.808 28.8l57.6 576a32 32 0 0 1-31.808 35.2H131.328a32 32 0 0 1-31.808-35.2l57.6-576a32 32 0 0 1 31.808-28.8H320zm64 0h256v-22.336C640 189.248 582.272 128 512 128c-70.272 0-128 61.248-128 137.664v22.4zm-64 64H217.92l-51.2 512h690.56l-51.264-512H704v96a32 32 0 1 1-64 0v-96H384v96a32 32 0 0 1-64 0z"})]))}});var H8=N8;var L8=o(e()),v0=o(e()),A8=(0,L8.defineComponent)({name:"Grape",__name:"grape",setup(t){return(r,a)=>((0,v0.openBlock)(),(0,v0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,v0.createElementVNode)("path",{fill:"currentColor",d:"M544 195.2a160 160 0 0 1 96 60.8 160 160 0 1 1 146.24 254.976 160 160 0 0 1-128 224 160 160 0 1 1-292.48 0 160 160 0 0 1-128-224A160 160 0 1 1 384 256a160 160 0 0 1 96-60.8V128h-64a32 32 0 0 1 0-64h192a32 32 0 0 1 0 64h-64zM512 448a96 96 0 1 0 0-192 96 96 0 0 0 0 192m-256 0a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128 224a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128 224a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128-224a96 96 0 1 0 0-192 96 96 0 0 0 0 192m128-224a96 96 0 1 0 0-192 96 96 0 0 0 0 192"})]))}});var S8=A8;var q8=o(e()),w0=o(e()),F8=(0,q8.defineComponent)({name:"Grid",__name:"grid",setup(t){return(r,a)=>((0,w0.openBlock)(),(0,w0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,w0.createElementVNode)("path",{fill:"currentColor",d:"M640 384v256H384V384zm64 0h192v256H704zm-64 512H384V704h256zm64 0V704h192v192zm-64-768v192H384V128zm64 0h192v192H704zM320 384v256H128V384zm0 512H128V704h192zm0-768v192H128V128z"})]))}});var b8=F8;var D8=o(e()),te=o(e()),P8=(0,D8.defineComponent)({name:"Guide",__name:"guide",setup(t){return(r,a)=>((0,te.openBlock)(),(0,te.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,te.createElementVNode)("path",{fill:"currentColor",d:"M640 608h-64V416h64zm0 160v160a32 32 0 0 1-32 32H416a32 32 0 0 1-32-32V768h64v128h128V768zM384 608V416h64v192zm256-352h-64V128H448v128h-64V96a32 32 0 0 1 32-32h192a32 32 0 0 1 32 32z"}),(0,te.createElementVNode)("path",{fill:"currentColor",d:"m220.8 256-71.232 80 71.168 80H768V256H220.8zm-14.4-64H800a32 32 0 0 1 32 32v224a32 32 0 0 1-32 32H206.4a32 32 0 0 1-23.936-10.752l-99.584-112a32 32 0 0 1 0-42.496l99.584-112A32 32 0 0 1 206.4 192m678.784 496-71.104 80H266.816V608h547.2l71.168 80zm-56.768-144H234.88a32 32 0 0 0-32 32v224a32 32 0 0 0 32 32h593.6a32 32 0 0 0 23.936-10.752l99.584-112a32 32 0 0 0 0-42.496l-99.584-112A32 32 0 0 0 828.48 544z"})]))}});var R8=P8;var T8=o(e()),B0=o(e()),O8=(0,T8.defineComponent)({name:"Handbag",__name:"handbag",setup(t){return(r,a)=>((0,B0.openBlock)(),(0,B0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[(0,B0.createElementVNode)("path",{fill:"currentColor",d:"M887.01 264.99c-6-5.99-13.67-8.99-23.01-8.99H704c-1.34-54.68-20.01-100.01-56-136s-81.32-54.66-136-56c-54.68 1.34-100.01 20.01-136 56s-54.66 81.32-56 136H160c-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.67-8.99 23.01v640c0 9.35 2.99 17.02 8.99 23.01S150.66 960 160 960h704c9.35 0 17.02-2.99 23.01-8.99S896 937.34 896 928V288c0-9.35-2.99-17.02-8.99-23.01M421.5 165.5c24.32-24.34 54.49-36.84 90.5-37.5 35.99.68 66.16 13.18 90.5 37.5s36.84 54.49 37.5 90.5H384c.68-35.99 13.18-66.16 37.5-90.5M832 896H192V320h128v128h64V320h256v128h64V320h128z"})]))}});var G8=O8;var U8=o(e()),k0=o(e()),W8=(0,U8.defineComponent)({name:"Headset",__name:"headset",setup(t){return(r,a)=>((0,k0.openBlock)(),(0,k0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,k0.createElementVNode)("path",{fill:"currentColor",d:"M896 529.152V512a384 384 0 1 0-768 0v17.152A128 128 0 0 1 320 640v128a128 128 0 1 1-256 0V512a448 448 0 1 1 896 0v256a128 128 0 1 1-256 0V640a128 128 0 0 1 192-110.848M896 640a64 64 0 0 0-128 0v128a64 64 0 0 0 128 0zm-768 0v128a64 64 0 0 0 128 0V640a64 64 0 1 0-128 0"})]))}});var I8=W8;var Z8=o(e()),C0=o(e()),K8=(0,Z8.defineComponent)({name:"HelpFilled",__name:"help-filled",setup(t){return(r,a)=>((0,C0.openBlock)(),(0,C0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,C0.createElementVNode)("path",{fill:"currentColor",d:"M926.784 480H701.312A192.512 192.512 0 0 0 544 322.688V97.216A416.064 416.064 0 0 1 926.784 480m0 64A416.064 416.064 0 0 1 544 926.784V701.312A192.512 192.512 0 0 0 701.312 544zM97.28 544h225.472A192.512 192.512 0 0 0 480 701.312v225.472A416.064 416.064 0 0 1 97.216 544zm0-64A416.064 416.064 0 0 1 480 97.216v225.472A192.512 192.512 0 0 0 322.688 480H97.216z"})]))}});var Q8=K8;var j8=o(e()),E0=o(e()),J8=(0,j8.defineComponent)({name:"Help",__name:"help",setup(t){return(r,a)=>((0,E0.openBlock)(),(0,E0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,E0.createElementVNode)("path",{fill:"currentColor",d:"m759.936 805.248-90.944-91.008A254.912 254.912 0 0 1 512 768a254.912 254.912 0 0 1-156.992-53.76l-90.944 91.008A382.464 382.464 0 0 0 512 896c94.528 0 181.12-34.176 247.936-90.752m45.312-45.312A382.464 382.464 0 0 0 896 512c0-94.528-34.176-181.12-90.752-247.936l-91.008 90.944C747.904 398.4 768 452.864 768 512c0 59.136-20.096 113.6-53.76 156.992l91.008 90.944zm-45.312-541.184A382.464 382.464 0 0 0 512 128c-94.528 0-181.12 34.176-247.936 90.752l90.944 91.008A254.912 254.912 0 0 1 512 256c59.136 0 113.6 20.096 156.992 53.76l90.944-91.008zm-541.184 45.312A382.464 382.464 0 0 0 128 512c0 94.528 34.176 181.12 90.752 247.936l91.008-90.944A254.912 254.912 0 0 1 256 512c0-59.136 20.096-113.6 53.76-156.992zm417.28 394.496a194.56 194.56 0 0 0 22.528-22.528C686.912 602.56 704 559.232 704 512a191.232 191.232 0 0 0-67.968-146.56A191.296 191.296 0 0 0 512 320a191.232 191.232 0 0 0-146.56 67.968C337.088 421.44 320 464.768 320 512a191.232 191.232 0 0 0 67.968 146.56C421.44 686.912 464.768 704 512 704c47.296 0 90.56-17.088 124.032-45.44zM512 960a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}});var X8=J8;var Y8=o(e()),re=o(e()),$8=(0,Y8.defineComponent)({name:"Hide",__name:"hide",setup(t){return(r,a)=>((0,re.openBlock)(),(0,re.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,re.createElementVNode)("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4-6.4-6.4-12.8-9.6-22.4-9.6-9.6 0-16 3.2-22.4 9.6L736 220.8c-64-32-137.6-51.2-224-60.8-160 16-288 73.6-377.6 176C44.8 438.4 0 496 0 512s48 73.6 134.4 176c22.4 25.6 44.8 48 73.6 67.2l-86.4 89.6c-6.4 6.4-9.6 12.8-9.6 22.4 0 9.6 3.2 16 9.6 22.4 6.4 6.4 12.8 9.6 22.4 9.6 9.6 0 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4Zm-646.4 528c-76.8-70.4-128-128-153.6-172.8 28.8-48 80-105.6 153.6-172.8C304 272 400 230.4 512 224c64 3.2 124.8 19.2 176 44.8l-54.4 54.4C598.4 300.8 560 288 512 288c-64 0-115.2 22.4-160 64s-64 96-64 160c0 48 12.8 89.6 35.2 124.8L256 707.2c-9.6-6.4-19.2-16-25.6-22.4Zm140.8-96c-12.8-22.4-19.2-48-19.2-76.8 0-44.8 16-83.2 48-112 32-28.8 67.2-48 112-48 28.8 0 54.4 6.4 73.6 19.2zM889.599 336c-12.8-16-28.8-28.8-41.6-41.6l-48 48c73.6 67.2 124.8 124.8 150.4 169.6-28.8 48-80 105.6-153.6 172.8-73.6 67.2-172.8 108.8-284.8 115.2-51.2-3.2-99.2-12.8-140.8-28.8l-48 48c57.6 22.4 118.4 38.4 188.8 44.8 160-16 288-73.6 377.6-176C979.199 585.6 1024 528 1024 512s-48.001-73.6-134.401-176Z"}),(0,re.createElementVNode)("path",{fill:"currentColor",d:"M511.998 672c-12.8 0-25.6-3.2-38.4-6.4l-51.2 51.2c28.8 12.8 57.6 19.2 89.6 19.2 64 0 115.2-22.4 160-64 41.6-41.6 64-96 64-160 0-32-6.4-64-19.2-89.6l-51.2 51.2c3.2 12.8 6.4 25.6 6.4 38.4 0 44.8-16 83.2-48 112-32 28.8-67.2 48-112 48Z"})]))}});var en=$8;var on=o(e()),V0=o(e()),tn=(0,on.defineComponent)({name:"Histogram",__name:"histogram",setup(t){return(r,a)=>((0,V0.openBlock)(),(0,V0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,V0.createElementVNode)("path",{fill:"currentColor",d:"M416 896V128h192v768zm-288 0V448h192v448zm576 0V320h192v576z"})]))}});var rn=tn;var an=o(e()),g0=o(e()),nn=(0,an.defineComponent)({name:"HomeFilled",__name:"home-filled",setup(t){return(r,a)=>((0,g0.openBlock)(),(0,g0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,g0.createElementVNode)("path",{fill:"currentColor",d:"M512 128 128 447.936V896h255.936V640H640v256h255.936V447.936z"})]))}});var mn=nn;var ln=o(e()),z0=o(e()),pn=(0,ln.defineComponent)({name:"HotWater",__name:"hot-water",setup(t){return(r,a)=>((0,z0.openBlock)(),(0,z0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,z0.createElementVNode)("path",{fill:"currentColor",d:"M273.067 477.867h477.866V409.6H273.067zm0 68.266v51.2A187.733 187.733 0 0 0 460.8 785.067h102.4a187.733 187.733 0 0 0 187.733-187.734v-51.2H273.067zm-34.134-204.8h546.134a34.133 34.133 0 0 1 34.133 34.134v221.866a256 256 0 0 1-256 256H460.8a256 256 0 0 1-256-256V375.467a34.133 34.133 0 0 1 34.133-34.134zM512 34.133a34.133 34.133 0 0 1 34.133 34.134v170.666a34.133 34.133 0 0 1-68.266 0V68.267A34.133 34.133 0 0 1 512 34.133zM375.467 102.4a34.133 34.133 0 0 1 34.133 34.133v102.4a34.133 34.133 0 0 1-68.267 0v-102.4a34.133 34.133 0 0 1 34.134-34.133m273.066 0a34.133 34.133 0 0 1 34.134 34.133v102.4a34.133 34.133 0 1 1-68.267 0v-102.4a34.133 34.133 0 0 1 34.133-34.133M170.667 921.668h682.666a34.133 34.133 0 1 1 0 68.267H170.667a34.133 34.133 0 1 1 0-68.267z"})]))}});var cn=pn;var fn=o(e()),y0=o(e()),sn=(0,fn.defineComponent)({name:"House",__name:"house",setup(t){return(r,a)=>((0,y0.openBlock)(),(0,y0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,y0.createElementVNode)("path",{fill:"currentColor",d:"M192 413.952V896h640V413.952L512 147.328zM139.52 374.4l352-293.312a32 32 0 0 1 40.96 0l352 293.312A32 32 0 0 1 896 398.976V928a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V398.976a32 32 0 0 1 11.52-24.576"})]))}});var _n=sn;var dn=o(e()),M0=o(e()),un=(0,dn.defineComponent)({name:"IceCreamRound",__name:"ice-cream-round",setup(t){return(r,a)=>((0,M0.openBlock)(),(0,M0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,M0.createElementVNode)("path",{fill:"currentColor",d:"m308.352 489.344 226.304 226.304a32 32 0 0 0 45.248 0L783.552 512A192 192 0 1 0 512 240.448L308.352 444.16a32 32 0 0 0 0 45.248zm135.744 226.304L308.352 851.392a96 96 0 0 1-135.744-135.744l135.744-135.744-45.248-45.248a96 96 0 0 1 0-135.808L466.752 195.2A256 256 0 0 1 828.8 557.248L625.152 760.96a96 96 0 0 1-135.808 0l-45.248-45.248zM398.848 670.4 353.6 625.152 217.856 760.896a32 32 0 0 0 45.248 45.248zm248.96-384.64a32 32 0 0 1 0 45.248L466.624 512a32 32 0 1 1-45.184-45.248l180.992-181.056a32 32 0 0 1 45.248 0zm90.496 90.496a32 32 0 0 1 0 45.248L557.248 602.496A32 32 0 1 1 512 557.248l180.992-180.992a32 32 0 0 1 45.312 0z"})]))}});var xn=un;var hn=o(e()),N0=o(e()),vn=(0,hn.defineComponent)({name:"IceCreamSquare",__name:"ice-cream-square",setup(t){return(r,a)=>((0,N0.openBlock)(),(0,N0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,N0.createElementVNode)("path",{fill:"currentColor",d:"M416 640h256a32 32 0 0 0 32-32V160a32 32 0 0 0-32-32H352a32 32 0 0 0-32 32v448a32 32 0 0 0 32 32zm192 64v160a96 96 0 0 1-192 0V704h-64a96 96 0 0 1-96-96V160a96 96 0 0 1 96-96h320a96 96 0 0 1 96 96v448a96 96 0 0 1-96 96zm-64 0h-64v160a32 32 0 1 0 64 0z"})]))}});var wn=vn;var Bn=o(e()),H0=o(e()),kn=(0,Bn.defineComponent)({name:"IceCream",__name:"ice-cream",setup(t){return(r,a)=>((0,H0.openBlock)(),(0,H0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,H0.createElementVNode)("path",{fill:"currentColor",d:"M128.64 448a208 208 0 0 1 193.536-191.552 224 224 0 0 1 445.248 15.488A208.128 208.128 0 0 1 894.784 448H896L548.8 983.68a32 32 0 0 1-53.248.704L128 448zm64.256 0h286.208a144 144 0 0 0-286.208 0zm351.36 0h286.272a144 144 0 0 0-286.272 0zm-294.848 64 271.808 396.608L778.24 512H249.408zM511.68 352.64a207.872 207.872 0 0 1 189.184-96.192 160 160 0 0 0-314.752 5.632c52.608 12.992 97.28 46.08 125.568 90.56"})]))}});var Cn=kn;var En=o(e()),L0=o(e()),Vn=(0,En.defineComponent)({name:"IceDrink",__name:"ice-drink",setup(t){return(r,a)=>((0,L0.openBlock)(),(0,L0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,L0.createElementVNode)("path",{fill:"currentColor",d:"M512 448v128h239.68l16.064-128zm-64 0H256.256l16.064 128H448zm64-255.36V384h247.744A256.128 256.128 0 0 0 512 192.64m-64 8.064A256.448 256.448 0 0 0 264.256 384H448zm64-72.064A320.128 320.128 0 0 1 825.472 384H896a32 32 0 1 1 0 64h-64v1.92l-56.96 454.016A64 64 0 0 1 711.552 960H312.448a64 64 0 0 1-63.488-56.064L192 449.92V448h-64a32 32 0 0 1 0-64h70.528A320.384 320.384 0 0 1 448 135.04V96a96 96 0 0 1 96-96h128a32 32 0 1 1 0 64H544a32 32 0 0 0-32 32zM743.68 640H280.32l32.128 256h399.104z"})]))}});var gn=Vn;var zn=o(e()),A0=o(e()),yn=(0,zn.defineComponent)({name:"IceTea",__name:"ice-tea",setup(t){return(r,a)=>((0,A0.openBlock)(),(0,A0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,A0.createElementVNode)("path",{fill:"currentColor",d:"M197.696 259.648a320.128 320.128 0 0 1 628.608 0A96 96 0 0 1 896 352v64a96 96 0 0 1-71.616 92.864l-49.408 395.072A64 64 0 0 1 711.488 960H312.512a64 64 0 0 1-63.488-56.064l-49.408-395.072A96 96 0 0 1 128 416v-64a96 96 0 0 1 69.696-92.352M264.064 256h495.872a256.128 256.128 0 0 0-495.872 0m495.424 256H264.512l48 384h398.976zM224 448h576a32 32 0 0 0 32-32v-64a32 32 0 0 0-32-32H224a32 32 0 0 0-32 32v64a32 32 0 0 0 32 32m160 192h64v64h-64zm192 64h64v64h-64zm-128 64h64v64h-64zm64-192h64v64h-64z"})]))}});var Mn=yn;var Nn=o(e()),S0=o(e()),Hn=(0,Nn.defineComponent)({name:"InfoFilled",__name:"info-filled",setup(t){return(r,a)=>((0,S0.openBlock)(),(0,S0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,S0.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896.064A448 448 0 0 1 512 64m67.2 275.072c33.28 0 60.288-23.104 60.288-57.344s-27.072-57.344-60.288-57.344c-33.28 0-60.16 23.104-60.16 57.344s26.88 57.344 60.16 57.344M590.912 699.2c0-6.848 2.368-24.64 1.024-34.752l-52.608 60.544c-10.88 11.456-24.512 19.392-30.912 17.28a12.992 12.992 0 0 1-8.256-14.72l87.68-276.992c7.168-35.136-12.544-67.2-54.336-71.296-44.096 0-108.992 44.736-148.48 101.504 0 6.784-1.28 23.68.064 33.792l52.544-60.608c10.88-11.328 23.552-19.328 29.952-17.152a12.8 12.8 0 0 1 7.808 16.128L388.48 728.576c-10.048 32.256 8.96 63.872 55.04 71.04 67.84 0 107.904-43.648 147.456-100.416z"})]))}});var Ln=Hn;var An=o(e()),q0=o(e()),Sn=(0,An.defineComponent)({name:"Iphone",__name:"iphone",setup(t){return(r,a)=>((0,q0.openBlock)(),(0,q0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,q0.createElementVNode)("path",{fill:"currentColor",d:"M224 768v96.064a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64V768zm0-64h576V160a64 64 0 0 0-64-64H288a64 64 0 0 0-64 64zm32 288a96 96 0 0 1-96-96V128a96 96 0 0 1 96-96h512a96 96 0 0 1 96 96v768a96 96 0 0 1-96 96zm304-144a48 48 0 1 1-96 0 48 48 0 0 1 96 0"})]))}});var qn=Sn;var Fn=o(e()),F0=o(e()),bn=(0,Fn.defineComponent)({name:"Key",__name:"key",setup(t){return(r,a)=>((0,F0.openBlock)(),(0,F0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,F0.createElementVNode)("path",{fill:"currentColor",d:"M448 456.064V96a32 32 0 0 1 32-32.064L672 64a32 32 0 0 1 0 64H512v128h160a32 32 0 0 1 0 64H512v128a256 256 0 1 1-64 8.064M512 896a192 192 0 1 0 0-384 192 192 0 0 0 0 384"})]))}});var Dn=bn;var Pn=o(e()),b0=o(e()),Rn=(0,Pn.defineComponent)({name:"KnifeFork",__name:"knife-fork",setup(t){return(r,a)=>((0,b0.openBlock)(),(0,b0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,b0.createElementVNode)("path",{fill:"currentColor",d:"M256 410.56V96a32 32 0 0 1 64 0v314.56A96 96 0 0 0 384 320V96a32 32 0 0 1 64 0v224a160 160 0 0 1-128 156.8V928a32 32 0 1 1-64 0V476.8A160 160 0 0 1 128 320V96a32 32 0 0 1 64 0v224a96 96 0 0 0 64 90.56m384-250.24V544h126.72c-3.328-78.72-12.928-147.968-28.608-207.744-14.336-54.528-46.848-113.344-98.112-175.872zM640 608v320a32 32 0 1 1-64 0V64h64c85.312 89.472 138.688 174.848 160 256 21.312 81.152 32 177.152 32 288z"})]))}});var Tn=Rn;var On=o(e()),ae=o(e()),Gn=(0,On.defineComponent)({name:"Lightning",__name:"lightning",setup(t){return(r,a)=>((0,ae.openBlock)(),(0,ae.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ae.createElementVNode)("path",{fill:"currentColor",d:"M288 671.36v64.128A239.808 239.808 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 736 734.016v-64.768a192 192 0 0 0 3.328-377.92l-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 91.968 70.464 167.36 160.256 175.232z"}),(0,ae.createElementVNode)("path",{fill:"currentColor",d:"M416 736a32 32 0 0 1-27.776-47.872l128-224a32 32 0 1 1 55.552 31.744L471.168 672H608a32 32 0 0 1 27.776 47.872l-128 224a32 32 0 1 1-55.68-31.744L552.96 736z"})]))}});var Un=Gn;var Wn=o(e()),D0=o(e()),In=(0,Wn.defineComponent)({name:"Link",__name:"link",setup(t){return(r,a)=>((0,D0.openBlock)(),(0,D0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,D0.createElementVNode)("path",{fill:"currentColor",d:"M715.648 625.152 670.4 579.904l90.496-90.56c75.008-74.944 85.12-186.368 22.656-248.896-62.528-62.464-173.952-52.352-248.96 22.656L444.16 353.6l-45.248-45.248 90.496-90.496c100.032-99.968 251.968-110.08 339.456-22.656 87.488 87.488 77.312 239.424-22.656 339.456l-90.496 90.496zm-90.496 90.496-90.496 90.496C434.624 906.112 282.688 916.224 195.2 828.8c-87.488-87.488-77.312-239.424 22.656-339.456l90.496-90.496 45.248 45.248-90.496 90.56c-75.008 74.944-85.12 186.368-22.656 248.896 62.528 62.464 173.952 52.352 248.96-22.656l90.496-90.496zm0-362.048 45.248 45.248L398.848 670.4 353.6 625.152z"})]))}});var Zn=In;var Kn=o(e()),P0=o(e()),Qn=(0,Kn.defineComponent)({name:"List",__name:"list",setup(t){return(r,a)=>((0,P0.openBlock)(),(0,P0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,P0.createElementVNode)("path",{fill:"currentColor",d:"M704 192h160v736H160V192h160v64h384zM288 512h448v-64H288zm0 256h448v-64H288zm96-576V96h256v96z"})]))}});var jn=Qn;var Jn=o(e()),R0=o(e()),Xn=(0,Jn.defineComponent)({name:"Loading",__name:"loading",setup(t){return(r,a)=>((0,R0.openBlock)(),(0,R0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,R0.createElementVNode)("path",{fill:"currentColor",d:"M512 64a32 32 0 0 1 32 32v192a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 640a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V736a32 32 0 0 1 32-32m448-192a32 32 0 0 1-32 32H736a32 32 0 1 1 0-64h192a32 32 0 0 1 32 32m-640 0a32 32 0 0 1-32 32H96a32 32 0 0 1 0-64h192a32 32 0 0 1 32 32M195.2 195.2a32 32 0 0 1 45.248 0L376.32 331.008a32 32 0 0 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm452.544 452.544a32 32 0 0 1 45.248 0L828.8 783.552a32 32 0 0 1-45.248 45.248L647.744 692.992a32 32 0 0 1 0-45.248zM828.8 195.264a32 32 0 0 1 0 45.184L692.992 376.32a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0m-452.544 452.48a32 32 0 0 1 0 45.248L240.448 828.8a32 32 0 0 1-45.248-45.248l135.808-135.808a32 32 0 0 1 45.248 0z"})]))}});var Yn=Xn;var $n=o(e()),T0=o(e()),em=(0,$n.defineComponent)({name:"LocationFilled",__name:"location-filled",setup(t){return(r,a)=>((0,T0.openBlock)(),(0,T0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,T0.createElementVNode)("path",{fill:"currentColor",d:"M512 928c23.936 0 117.504-68.352 192.064-153.152C803.456 661.888 864 535.808 864 416c0-189.632-155.84-320-352-320S160 226.368 160 416c0 120.32 60.544 246.4 159.936 359.232C394.432 859.84 488 928 512 928m0-435.2a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 140.8a204.8 204.8 0 1 1 0-409.6 204.8 204.8 0 0 1 0 409.6"})]))}});var om=em;var tm=o(e()),v=o(e()),rm=(0,tm.defineComponent)({name:"LocationInformation",__name:"location-information",setup(t){return(r,a)=>((0,v.openBlock)(),(0,v.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,v.createElementVNode)("path",{fill:"currentColor",d:"M288 896h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32"}),(0,v.createElementVNode)("path",{fill:"currentColor",d:"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544"}),(0,v.createElementVNode)("path",{fill:"currentColor",d:"M512 512a96 96 0 1 0 0-192 96 96 0 0 0 0 192m0 64a160 160 0 1 1 0-320 160 160 0 0 1 0 320"})]))}});var am=rm;var nm=o(e()),ne=o(e()),mm=(0,nm.defineComponent)({name:"Location",__name:"location",setup(t){return(r,a)=>((0,ne.openBlock)(),(0,ne.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ne.createElementVNode)("path",{fill:"currentColor",d:"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544"}),(0,ne.createElementVNode)("path",{fill:"currentColor",d:"M512 512a96 96 0 1 0 0-192 96 96 0 0 0 0 192m0 64a160 160 0 1 1 0-320 160 160 0 0 1 0 320"})]))}});var lm=mm;var pm=o(e()),me=o(e()),cm=(0,pm.defineComponent)({name:"Lock",__name:"lock",setup(t){return(r,a)=>((0,me.openBlock)(),(0,me.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,me.createElementVNode)("path",{fill:"currentColor",d:"M224 448a32 32 0 0 0-32 32v384a32 32 0 0 0 32 32h576a32 32 0 0 0 32-32V480a32 32 0 0 0-32-32zm0-64h576a96 96 0 0 1 96 96v384a96 96 0 0 1-96 96H224a96 96 0 0 1-96-96V480a96 96 0 0 1 96-96"}),(0,me.createElementVNode)("path",{fill:"currentColor",d:"M512 544a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V576a32 32 0 0 1 32-32m192-160v-64a192 192 0 1 0-384 0v64zM512 64a256 256 0 0 1 256 256v128H256V320A256 256 0 0 1 512 64"})]))}});var fm=cm;var sm=o(e()),O0=o(e()),_m=(0,sm.defineComponent)({name:"Lollipop",__name:"lollipop",setup(t){return(r,a)=>((0,O0.openBlock)(),(0,O0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,O0.createElementVNode)("path",{fill:"currentColor",d:"M513.28 448a64 64 0 1 1 76.544 49.728A96 96 0 0 0 768 448h64a160 160 0 0 1-320 0zm-126.976-29.696a256 256 0 1 0 43.52-180.48A256 256 0 0 1 832 448h-64a192 192 0 0 0-381.696-29.696m105.664 249.472L285.696 874.048a96 96 0 0 1-135.68-135.744l206.208-206.272a320 320 0 1 1 135.744 135.744zm-54.464-36.032a321.92 321.92 0 0 1-45.248-45.248L195.2 783.552a32 32 0 1 0 45.248 45.248l197.056-197.12z"})]))}});var im=_m;var dm=o(e()),G0=o(e()),um=(0,dm.defineComponent)({name:"MagicStick",__name:"magic-stick",setup(t){return(r,a)=>((0,G0.openBlock)(),(0,G0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,G0.createElementVNode)("path",{fill:"currentColor",d:"M512 64h64v192h-64zm0 576h64v192h-64zM160 480v-64h192v64zm576 0v-64h192v64zM249.856 199.04l45.248-45.184L430.848 289.6 385.6 334.848 249.856 199.104zM657.152 606.4l45.248-45.248 135.744 135.744-45.248 45.248zM114.048 923.2 68.8 877.952l316.8-316.8 45.248 45.248zM702.4 334.848 657.152 289.6l135.744-135.744 45.248 45.248z"})]))}});var xm=um;var hm=o(e()),U0=o(e()),vm=(0,hm.defineComponent)({name:"Magnet",__name:"magnet",setup(t){return(r,a)=>((0,U0.openBlock)(),(0,U0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,U0.createElementVNode)("path",{fill:"currentColor",d:"M832 320V192H704v320a192 192 0 1 1-384 0V192H192v128h128v64H192v128a320 320 0 0 0 640 0V384H704v-64zM640 512V128h256v384a384 384 0 1 1-768 0V128h256v384a128 128 0 1 0 256 0"})]))}});var wm=vm;var Bm=o(e()),w=o(e()),km=(0,Bm.defineComponent)({name:"Male",__name:"male",setup(t){return(r,a)=>((0,w.openBlock)(),(0,w.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,w.createElementVNode)("path",{fill:"currentColor",d:"M399.5 849.5a225 225 0 1 0 0-450 225 225 0 0 0 0 450m0 56.25a281.25 281.25 0 1 1 0-562.5 281.25 281.25 0 0 1 0 562.5m253.125-787.5h225q28.125 0 28.125 28.125T877.625 174.5h-225q-28.125 0-28.125-28.125t28.125-28.125"}),(0,w.createElementVNode)("path",{fill:"currentColor",d:"M877.625 118.25q28.125 0 28.125 28.125v225q0 28.125-28.125 28.125T849.5 371.375v-225q0-28.125 28.125-28.125"}),(0,w.createElementVNode)("path",{fill:"currentColor",d:"M604.813 458.9 565.1 419.131l292.613-292.668 39.825 39.824z"})]))}});var Cm=km;var Em=o(e()),W0=o(e()),Vm=(0,Em.defineComponent)({name:"Management",__name:"management",setup(t){return(r,a)=>((0,W0.openBlock)(),(0,W0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,W0.createElementVNode)("path",{fill:"currentColor",d:"M576 128v288l96-96 96 96V128h128v768H320V128zm-448 0h128v768H128z"})]))}});var gm=Vm;var zm=o(e()),le=o(e()),ym=(0,zm.defineComponent)({name:"MapLocation",__name:"map-location",setup(t){return(r,a)=>((0,le.openBlock)(),(0,le.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,le.createElementVNode)("path",{fill:"currentColor",d:"M800 416a288 288 0 1 0-576 0c0 118.144 94.528 272.128 288 456.576C705.472 688.128 800 534.144 800 416M512 960C277.312 746.688 160 565.312 160 416a352 352 0 0 1 704 0c0 149.312-117.312 330.688-352 544"}),(0,le.createElementVNode)("path",{fill:"currentColor",d:"M512 448a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256m345.6 192L960 960H672v-64H352v64H64l102.4-256zm-68.928 0H235.328l-76.8 192h706.944z"})]))}});var Mm=ym;var Nm=o(e()),pe=o(e()),Hm=(0,Nm.defineComponent)({name:"Medal",__name:"medal",setup(t){return(r,a)=>((0,pe.openBlock)(),(0,pe.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,pe.createElementVNode)("path",{fill:"currentColor",d:"M512 896a256 256 0 1 0 0-512 256 256 0 0 0 0 512m0 64a320 320 0 1 1 0-640 320 320 0 0 1 0 640"}),(0,pe.createElementVNode)("path",{fill:"currentColor",d:"M576 128H448v200a286.72 286.72 0 0 1 64-8c19.52 0 40.832 2.688 64 8zm64 0v219.648c24.448 9.088 50.56 20.416 78.4 33.92L757.44 128zm-256 0H266.624l39.04 253.568c27.84-13.504 53.888-24.832 78.336-33.92V128zM229.312 64h565.376a32 32 0 0 1 31.616 36.864L768 480c-113.792-64-199.104-96-256-96-56.896 0-142.208 32-256 96l-58.304-379.136A32 32 0 0 1 229.312 64"})]))}});var Lm=Hm;var Am=o(e()),B=o(e()),Sm=(0,Am.defineComponent)({name:"Memo",__name:"memo",setup(t){return(r,a)=>((0,B.openBlock)(),(0,B.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[(0,B.createElementVNode)("path",{fill:"currentColor",d:"M480 320h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32"}),(0,B.createElementVNode)("path",{fill:"currentColor",d:"M887.01 72.99C881.01 67 873.34 64 864 64H160c-9.35 0-17.02 3-23.01 8.99C131 78.99 128 86.66 128 96v832c0 9.35 2.99 17.02 8.99 23.01S150.66 960 160 960h704c9.35 0 17.02-2.99 23.01-8.99S896 937.34 896 928V96c0-9.35-3-17.02-8.99-23.01M192 896V128h96v768zm640 0H352V128h480z"}),(0,B.createElementVNode)("path",{fill:"currentColor",d:"M480 512h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32m0 192h192c21.33 0 32-10.67 32-32s-10.67-32-32-32H480c-21.33 0-32 10.67-32 32s10.67 32 32 32"})]))}});var qm=Sm;var Fm=o(e()),I0=o(e()),bm=(0,Fm.defineComponent)({name:"Menu",__name:"menu",setup(t){return(r,a)=>((0,I0.openBlock)(),(0,I0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,I0.createElementVNode)("path",{fill:"currentColor",d:"M160 448a32 32 0 0 1-32-32V160.064a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32V416a32 32 0 0 1-32 32zm448 0a32 32 0 0 1-32-32V160.064a32 32 0 0 1 32-32h255.936a32 32 0 0 1 32 32V416a32 32 0 0 1-32 32zM160 896a32 32 0 0 1-32-32V608a32 32 0 0 1 32-32h256a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32zm448 0a32 32 0 0 1-32-32V608a32 32 0 0 1 32-32h255.936a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32z"})]))}});var Dm=bm;var Pm=o(e()),Z0=o(e()),Rm=(0,Pm.defineComponent)({name:"MessageBox",__name:"message-box",setup(t){return(r,a)=>((0,Z0.openBlock)(),(0,Z0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Z0.createElementVNode)("path",{fill:"currentColor",d:"M288 384h448v64H288zm96-128h256v64H384zM131.456 512H384v128h256V512h252.544L721.856 192H302.144zM896 576H704v128H320V576H128v256h768zM275.776 128h472.448a32 32 0 0 1 28.608 17.664l179.84 359.552A32 32 0 0 1 960 519.552V864a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V519.552a32 32 0 0 1 3.392-14.336l179.776-359.552A32 32 0 0 1 275.776 128z"})]))}});var Tm=Rm;var Om=o(e()),ce=o(e()),Gm=(0,Om.defineComponent)({name:"Message",__name:"message",setup(t){return(r,a)=>((0,ce.openBlock)(),(0,ce.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ce.createElementVNode)("path",{fill:"currentColor",d:"M128 224v512a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V224zm0-64h768a64 64 0 0 1 64 64v512a128 128 0 0 1-128 128H192A128 128 0 0 1 64 736V224a64 64 0 0 1 64-64"}),(0,ce.createElementVNode)("path",{fill:"currentColor",d:"M904 224 656.512 506.88a192 192 0 0 1-289.024 0L120 224zm-698.944 0 210.56 240.704a128 128 0 0 0 192.704 0L818.944 224H205.056"})]))}});var Um=Gm;var Wm=o(e()),K0=o(e()),Im=(0,Wm.defineComponent)({name:"Mic",__name:"mic",setup(t){return(r,a)=>((0,K0.openBlock)(),(0,K0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,K0.createElementVNode)("path",{fill:"currentColor",d:"M480 704h160a64 64 0 0 0 64-64v-32h-96a32 32 0 0 1 0-64h96v-96h-96a32 32 0 0 1 0-64h96v-96h-96a32 32 0 0 1 0-64h96v-32a64 64 0 0 0-64-64H384a64 64 0 0 0-64 64v32h96a32 32 0 0 1 0 64h-96v96h96a32 32 0 0 1 0 64h-96v96h96a32 32 0 0 1 0 64h-96v32a64 64 0 0 0 64 64zm64 64v128h192a32 32 0 1 1 0 64H288a32 32 0 1 1 0-64h192V768h-96a128 128 0 0 1-128-128V192A128 128 0 0 1 384 64h256a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128z"})]))}});var Zm=Im;var Km=o(e()),Q0=o(e()),Qm=(0,Km.defineComponent)({name:"Microphone",__name:"microphone",setup(t){return(r,a)=>((0,Q0.openBlock)(),(0,Q0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Q0.createElementVNode)("path",{fill:"currentColor",d:"M512 128a128 128 0 0 0-128 128v256a128 128 0 1 0 256 0V256a128 128 0 0 0-128-128m0-64a192 192 0 0 1 192 192v256a192 192 0 1 1-384 0V256A192 192 0 0 1 512 64m-32 832v-64a288 288 0 0 1-288-288v-32a32 32 0 0 1 64 0v32a224 224 0 0 0 224 224h64a224 224 0 0 0 224-224v-32a32 32 0 1 1 64 0v32a288 288 0 0 1-288 288v64h64a32 32 0 1 1 0 64H416a32 32 0 1 1 0-64z"})]))}});var jm=Qm;var Jm=o(e()),j0=o(e()),Xm=(0,Jm.defineComponent)({name:"MilkTea",__name:"milk-tea",setup(t){return(r,a)=>((0,j0.openBlock)(),(0,j0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,j0.createElementVNode)("path",{fill:"currentColor",d:"M416 128V96a96 96 0 0 1 96-96h128a32 32 0 1 1 0 64H512a32 32 0 0 0-32 32v32h320a96 96 0 0 1 11.712 191.296l-39.68 581.056A64 64 0 0 1 708.224 960H315.776a64 64 0 0 1-63.872-59.648l-39.616-581.056A96 96 0 0 1 224 128zM276.48 320l39.296 576h392.448l4.8-70.784a224.064 224.064 0 0 1 30.016-439.808L747.52 320zM224 256h576a32 32 0 1 0 0-64H224a32 32 0 0 0 0 64m493.44 503.872 21.12-309.12a160 160 0 0 0-21.12 309.12"})]))}});var Ym=Xm;var $m=o(e()),J0=o(e()),el=(0,$m.defineComponent)({name:"Minus",__name:"minus",setup(t){return(r,a)=>((0,J0.openBlock)(),(0,J0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,J0.createElementVNode)("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}});var ol=el;var tl=o(e()),k=o(e()),rl=(0,tl.defineComponent)({name:"Money",__name:"money",setup(t){return(r,a)=>((0,k.openBlock)(),(0,k.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,k.createElementVNode)("path",{fill:"currentColor",d:"M256 640v192h640V384H768v-64h150.976c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H233.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096c-2.688-5.184-4.224-10.368-4.224-24.576V640z"}),(0,k.createElementVNode)("path",{fill:"currentColor",d:"M768 192H128v448h640zm64-22.976v493.952c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H105.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096C65.536 682.432 64 677.248 64 663.04V169.024c0-14.272 1.472-19.456 4.288-24.64a29.056 29.056 0 0 1 12.096-12.16C85.568 129.536 90.752 128 104.96 128h685.952c14.272 0 19.456 1.472 24.64 4.288a29.056 29.056 0 0 1 12.16 12.096c2.752 5.184 4.224 10.368 4.224 24.64z"}),(0,k.createElementVNode)("path",{fill:"currentColor",d:"M448 576a160 160 0 1 1 0-320 160 160 0 0 1 0 320m0-64a96 96 0 1 0 0-192 96 96 0 0 0 0 192"})]))}});var al=rl;var nl=o(e()),X0=o(e()),ml=(0,nl.defineComponent)({name:"Monitor",__name:"monitor",setup(t){return(r,a)=>((0,X0.openBlock)(),(0,X0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,X0.createElementVNode)("path",{fill:"currentColor",d:"M544 768v128h192a32 32 0 1 1 0 64H288a32 32 0 1 1 0-64h192V768H192A128 128 0 0 1 64 640V256a128 128 0 0 1 128-128h640a128 128 0 0 1 128 128v384a128 128 0 0 1-128 128zM192 192a64 64 0 0 0-64 64v384a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V256a64 64 0 0 0-64-64z"})]))}});var ll=ml;var pl=o(e()),fe=o(e()),cl=(0,pl.defineComponent)({name:"MoonNight",__name:"moon-night",setup(t){return(r,a)=>((0,fe.openBlock)(),(0,fe.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,fe.createElementVNode)("path",{fill:"currentColor",d:"M384 512a448 448 0 0 1 215.872-383.296A384 384 0 0 0 213.76 640h188.8A448.256 448.256 0 0 1 384 512M171.136 704a448 448 0 0 1 636.992-575.296A384 384 0 0 0 499.328 704h-328.32z"}),(0,fe.createElementVNode)("path",{fill:"currentColor",d:"M32 640h960q32 0 32 32t-32 32H32q-32 0-32-32t32-32m128 128h384a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m160 127.68 224 .256a32 32 0 0 1 32 32V928a32 32 0 0 1-32 32l-224-.384a32 32 0 0 1-32-32v-.064a32 32 0 0 1 32-32z"})]))}});var fl=cl;var sl=o(e()),Y0=o(e()),_l=(0,sl.defineComponent)({name:"Moon",__name:"moon",setup(t){return(r,a)=>((0,Y0.openBlock)(),(0,Y0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Y0.createElementVNode)("path",{fill:"currentColor",d:"M240.448 240.448a384 384 0 1 0 559.424 525.696 448 448 0 0 1-542.016-542.08 390.592 390.592 0 0 0-17.408 16.384zm181.056 362.048a384 384 0 0 0 525.632 16.384A448 448 0 1 1 405.056 76.8a384 384 0 0 0 16.448 525.696"})]))}});var il=_l;var dl=o(e()),$0=o(e()),ul=(0,dl.defineComponent)({name:"MoreFilled",__name:"more-filled",setup(t){return(r,a)=>((0,$0.openBlock)(),(0,$0.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,$0.createElementVNode)("path",{fill:"currentColor",d:"M176 416a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224m336 0a112 112 0 1 1 0 224 112 112 0 0 1 0-224"})]))}});var xl=ul;var hl=o(e()),eo=o(e()),vl=(0,hl.defineComponent)({name:"More",__name:"more",setup(t){return(r,a)=>((0,eo.openBlock)(),(0,eo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,eo.createElementVNode)("path",{fill:"currentColor",d:"M176 416a112 112 0 1 0 0 224 112 112 0 0 0 0-224m0 64a48 48 0 1 1 0 96 48 48 0 0 1 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96m336-64a112 112 0 1 1 0 224 112 112 0 0 1 0-224m0 64a48 48 0 1 0 0 96 48 48 0 0 0 0-96"})]))}});var wl=vl;var Bl=o(e()),oo=o(e()),kl=(0,Bl.defineComponent)({name:"MostlyCloudy",__name:"mostly-cloudy",setup(t){return(r,a)=>((0,oo.openBlock)(),(0,oo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,oo.createElementVNode)("path",{fill:"currentColor",d:"M737.216 357.952 704 349.824l-11.776-32a192.064 192.064 0 0 0-367.424 23.04l-8.96 39.04-39.04 8.96A192.064 192.064 0 0 0 320 768h368a207.808 207.808 0 0 0 207.808-208 208.32 208.32 0 0 0-158.592-202.048m15.168-62.208A272.32 272.32 0 0 1 959.744 560a271.808 271.808 0 0 1-271.552 272H320a256 256 0 0 1-57.536-505.536 256.128 256.128 0 0 1 489.92-30.72"})]))}});var Cl=kl;var El=o(e()),se=o(e()),Vl=(0,El.defineComponent)({name:"Mouse",__name:"mouse",setup(t){return(r,a)=>((0,se.openBlock)(),(0,se.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,se.createElementVNode)("path",{fill:"currentColor",d:"M438.144 256c-68.352 0-92.736 4.672-117.76 18.112-20.096 10.752-35.52 26.176-46.272 46.272C260.672 345.408 256 369.792 256 438.144v275.712c0 68.352 4.672 92.736 18.112 117.76 10.752 20.096 26.176 35.52 46.272 46.272C345.408 891.328 369.792 896 438.144 896h147.712c68.352 0 92.736-4.672 117.76-18.112 20.096-10.752 35.52-26.176 46.272-46.272C763.328 806.592 768 782.208 768 713.856V438.144c0-68.352-4.672-92.736-18.112-117.76a110.464 110.464 0 0 0-46.272-46.272C678.592 260.672 654.208 256 585.856 256zm0-64h147.712c85.568 0 116.608 8.96 147.904 25.6 31.36 16.768 55.872 41.344 72.576 72.64C823.104 321.536 832 352.576 832 438.08v275.84c0 85.504-8.96 116.544-25.6 147.84a174.464 174.464 0 0 1-72.64 72.576C702.464 951.104 671.424 960 585.92 960H438.08c-85.504 0-116.544-8.96-147.84-25.6a174.464 174.464 0 0 1-72.64-72.704c-16.768-31.296-25.664-62.336-25.664-147.84v-275.84c0-85.504 8.96-116.544 25.6-147.84a174.464 174.464 0 0 1 72.768-72.576c31.232-16.704 62.272-25.6 147.776-25.6z"}),(0,se.createElementVNode)("path",{fill:"currentColor",d:"M512 320q32 0 32 32v128q0 32-32 32t-32-32V352q0-32 32-32m32-96a32 32 0 0 1-64 0v-64a32 32 0 0 0-32-32h-96a32 32 0 0 1 0-64h96a96 96 0 0 1 96 96z"})]))}});var gl=Vl;var zl=o(e()),to=o(e()),yl=(0,zl.defineComponent)({name:"Mug",__name:"mug",setup(t){return(r,a)=>((0,to.openBlock)(),(0,to.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,to.createElementVNode)("path",{fill:"currentColor",d:"M736 800V160H160v640a64 64 0 0 0 64 64h448a64 64 0 0 0 64-64m64-544h63.552a96 96 0 0 1 96 96v224a96 96 0 0 1-96 96H800v128a128 128 0 0 1-128 128H224A128 128 0 0 1 96 800V128a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zm0 64v288h63.552a32 32 0 0 0 32-32V352a32 32 0 0 0-32-32z"})]))}});var Ml=yl;var Nl=o(e()),_e=o(e()),Hl=(0,Nl.defineComponent)({name:"MuteNotification",__name:"mute-notification",setup(t){return(r,a)=>((0,_e.openBlock)(),(0,_e.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,_e.createElementVNode)("path",{fill:"currentColor",d:"m241.216 832 63.616-64H768V448c0-42.368-10.24-82.304-28.48-117.504l46.912-47.232C815.36 331.392 832 387.84 832 448v320h96a32 32 0 1 1 0 64zm-90.24 0H96a32 32 0 1 1 0-64h96V448a320.128 320.128 0 0 1 256-313.6V128a64 64 0 1 1 128 0v6.4a319.552 319.552 0 0 1 171.648 97.088l-45.184 45.44A256 256 0 0 0 256 448v278.336L151.04 832zM448 896h128a64 64 0 0 1-128 0"}),(0,_e.createElementVNode)("path",{fill:"currentColor",d:"M150.72 859.072a32 32 0 0 1-45.44-45.056l704-708.544a32 32 0 0 1 45.44 45.056l-704 708.544z"})]))}});var Ll=Hl;var Al=o(e()),ie=o(e()),Sl=(0,Al.defineComponent)({name:"Mute",__name:"mute",setup(t){return(r,a)=>((0,ie.openBlock)(),(0,ie.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ie.createElementVNode)("path",{fill:"currentColor",d:"m412.16 592.128-45.44 45.44A191.232 191.232 0 0 1 320 512V256a192 192 0 1 1 384 0v44.352l-64 64V256a128 128 0 1 0-256 0v256c0 30.336 10.56 58.24 28.16 80.128m51.968 38.592A128 128 0 0 0 640 512v-57.152l64-64V512a192 192 0 0 1-287.68 166.528zM314.88 779.968l46.144-46.08A222.976 222.976 0 0 0 480 768h64a224 224 0 0 0 224-224v-32a32 32 0 1 1 64 0v32a288 288 0 0 1-288 288v64h64a32 32 0 1 1 0 64H416a32 32 0 1 1 0-64h64v-64c-61.44 0-118.4-19.2-165.12-52.032M266.752 737.6A286.976 286.976 0 0 1 192 544v-32a32 32 0 0 1 64 0v32c0 56.832 21.184 108.8 56.064 148.288z"}),(0,ie.createElementVNode)("path",{fill:"currentColor",d:"M150.72 859.072a32 32 0 0 1-45.44-45.056l704-708.544a32 32 0 0 1 45.44 45.056l-704 708.544z"})]))}});var ql=Sl;var Fl=o(e()),ro=o(e()),bl=(0,Fl.defineComponent)({name:"NoSmoking",__name:"no-smoking",setup(t){return(r,a)=>((0,ro.openBlock)(),(0,ro.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ro.createElementVNode)("path",{fill:"currentColor",d:"M440.256 576H256v128h56.256l-64 64H224a32 32 0 0 1-32-32V544a32 32 0 0 1 32-32h280.256zm143.488 128H704V583.744L775.744 512H928a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32H519.744zM768 576v128h128V576zm-29.696-207.552 45.248 45.248-497.856 497.856-45.248-45.248zM256 64h64v320h-64zM128 192h64v192h-64zM64 512h64v256H64z"})]))}});var Dl=bl;var Pl=o(e()),de=o(e()),Rl=(0,Pl.defineComponent)({name:"Notebook",__name:"notebook",setup(t){return(r,a)=>((0,de.openBlock)(),(0,de.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,de.createElementVNode)("path",{fill:"currentColor",d:"M192 128v768h640V128zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32"}),(0,de.createElementVNode)("path",{fill:"currentColor",d:"M672 128h64v768h-64zM96 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32m0 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32m0 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32m0 192h128q32 0 32 32t-32 32H96q-32 0-32-32t32-32"})]))}});var Tl=Rl;var Ol=o(e()),ue=o(e()),Gl=(0,Ol.defineComponent)({name:"Notification",__name:"notification",setup(t){return(r,a)=>((0,ue.openBlock)(),(0,ue.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ue.createElementVNode)("path",{fill:"currentColor",d:"M512 128v64H256a64 64 0 0 0-64 64v512a64 64 0 0 0 64 64h512a64 64 0 0 0 64-64V512h64v256a128 128 0 0 1-128 128H256a128 128 0 0 1-128-128V256a128 128 0 0 1 128-128z"}),(0,ue.createElementVNode)("path",{fill:"currentColor",d:"M768 384a128 128 0 1 0 0-256 128 128 0 0 0 0 256m0 64a192 192 0 1 1 0-384 192 192 0 0 1 0 384"})]))}});var Ul=Gl;var Wl=o(e()),C=o(e()),Il=(0,Wl.defineComponent)({name:"Odometer",__name:"odometer",setup(t){return(r,a)=>((0,C.openBlock)(),(0,C.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,C.createElementVNode)("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),(0,C.createElementVNode)("path",{fill:"currentColor",d:"M192 512a320 320 0 1 1 640 0 32 32 0 1 1-64 0 256 256 0 1 0-512 0 32 32 0 0 1-64 0"}),(0,C.createElementVNode)("path",{fill:"currentColor",d:"M570.432 627.84A96 96 0 1 1 509.568 608l60.992-187.776A32 32 0 1 1 631.424 440l-60.992 187.776zM502.08 734.464a32 32 0 1 0 19.84-60.928 32 32 0 0 0-19.84 60.928"})]))}});var Zl=Il;var Kl=o(e()),E=o(e()),Ql=(0,Kl.defineComponent)({name:"OfficeBuilding",__name:"office-building",setup(t){return(r,a)=>((0,E.openBlock)(),(0,E.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,E.createElementVNode)("path",{fill:"currentColor",d:"M192 128v704h384V128zm-32-64h448a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32"}),(0,E.createElementVNode)("path",{fill:"currentColor",d:"M256 256h256v64H256zm0 192h256v64H256zm0 192h256v64H256zm384-128h128v64H640zm0 128h128v64H640zM64 832h896v64H64z"}),(0,E.createElementVNode)("path",{fill:"currentColor",d:"M640 384v448h192V384zm-32-64h256a32 32 0 0 1 32 32v512a32 32 0 0 1-32 32H608a32 32 0 0 1-32-32V352a32 32 0 0 1 32-32"})]))}});var jl=Ql;var Jl=o(e()),xe=o(e()),Xl=(0,Jl.defineComponent)({name:"Open",__name:"open",setup(t){return(r,a)=>((0,xe.openBlock)(),(0,xe.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,xe.createElementVNode)("path",{fill:"currentColor",d:"M329.956 257.138a254.862 254.862 0 0 0 0 509.724h364.088a254.862 254.862 0 0 0 0-509.724zm0-72.818h364.088a327.68 327.68 0 1 1 0 655.36H329.956a327.68 327.68 0 1 1 0-655.36z"}),(0,xe.createElementVNode)("path",{fill:"currentColor",d:"M694.044 621.227a109.227 109.227 0 1 0 0-218.454 109.227 109.227 0 0 0 0 218.454m0 72.817a182.044 182.044 0 1 1 0-364.088 182.044 182.044 0 0 1 0 364.088"})]))}});var Yl=Xl;var $l=o(e()),ao=o(e()),ep=(0,$l.defineComponent)({name:"Operation",__name:"operation",setup(t){return(r,a)=>((0,ao.openBlock)(),(0,ao.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ao.createElementVNode)("path",{fill:"currentColor",d:"M389.44 768a96.064 96.064 0 0 1 181.12 0H896v64H570.56a96.064 96.064 0 0 1-181.12 0H128v-64zm192-288a96.064 96.064 0 0 1 181.12 0H896v64H762.56a96.064 96.064 0 0 1-181.12 0H128v-64zm-320-288a96.064 96.064 0 0 1 181.12 0H896v64H442.56a96.064 96.064 0 0 1-181.12 0H128v-64z"})]))}});var op=ep;var tp=o(e()),no=o(e()),rp=(0,tp.defineComponent)({name:"Opportunity",__name:"opportunity",setup(t){return(r,a)=>((0,no.openBlock)(),(0,no.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,no.createElementVNode)("path",{fill:"currentColor",d:"M384 960v-64h192.064v64zm448-544a350.656 350.656 0 0 1-128.32 271.424C665.344 719.04 640 763.776 640 813.504V832H320v-14.336c0-48-19.392-95.36-57.216-124.992a351.552 351.552 0 0 1-128.448-344.256c25.344-136.448 133.888-248.128 269.76-276.48A352.384 352.384 0 0 1 832 416m-544 32c0-132.288 75.904-224 192-224v-64c-154.432 0-256 122.752-256 288z"})]))}});var ap=rp;var np=o(e()),mo=o(e()),mp=(0,np.defineComponent)({name:"Orange",__name:"orange",setup(t){return(r,a)=>((0,mo.openBlock)(),(0,mo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,mo.createElementVNode)("path",{fill:"currentColor",d:"M544 894.72a382.336 382.336 0 0 0 215.936-89.472L577.024 622.272c-10.24 6.016-21.248 10.688-33.024 13.696v258.688zm261.248-134.784A382.336 382.336 0 0 0 894.656 544H635.968c-3.008 11.776-7.68 22.848-13.696 33.024l182.976 182.912zM894.656 480a382.336 382.336 0 0 0-89.408-215.936L622.272 446.976c6.016 10.24 10.688 21.248 13.696 33.024h258.688zm-134.72-261.248A382.336 382.336 0 0 0 544 129.344v258.688c11.776 3.008 22.848 7.68 33.024 13.696zM480 129.344a382.336 382.336 0 0 0-215.936 89.408l182.912 182.976c10.24-6.016 21.248-10.688 33.024-13.696zm-261.248 134.72A382.336 382.336 0 0 0 129.344 480h258.688c3.008-11.776 7.68-22.848 13.696-33.024zM129.344 544a382.336 382.336 0 0 0 89.408 215.936l182.976-182.912A127.232 127.232 0 0 1 388.032 544zm134.72 261.248A382.336 382.336 0 0 0 480 894.656V635.968a127.232 127.232 0 0 1-33.024-13.696zM512 960a448 448 0 1 1 0-896 448 448 0 0 1 0 896m0-384a64 64 0 1 0 0-128 64 64 0 0 0 0 128"})]))}});var lp=mp;var pp=o(e()),lo=o(e()),cp=(0,pp.defineComponent)({name:"Paperclip",__name:"paperclip",setup(t){return(r,a)=>((0,lo.openBlock)(),(0,lo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,lo.createElementVNode)("path",{fill:"currentColor",d:"M602.496 240.448A192 192 0 1 1 874.048 512l-316.8 316.8A256 256 0 0 1 195.2 466.752L602.496 59.456l45.248 45.248L240.448 512A192 192 0 0 0 512 783.552l316.8-316.8a128 128 0 1 0-181.056-181.056L353.6 579.904a32 32 0 1 0 45.248 45.248l294.144-294.144 45.312 45.248L444.096 670.4a96 96 0 1 1-135.744-135.744l294.144-294.208z"})]))}});var fp=cp;var sp=o(e()),he=o(e()),_p=(0,sp.defineComponent)({name:"PartlyCloudy",__name:"partly-cloudy",setup(t){return(r,a)=>((0,he.openBlock)(),(0,he.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,he.createElementVNode)("path",{fill:"currentColor",d:"M598.4 895.872H328.192a256 256 0 0 1-34.496-510.528A352 352 0 1 1 598.4 895.872m-271.36-64h272.256a288 288 0 1 0-248.512-417.664L335.04 445.44l-34.816 3.584a192 192 0 0 0 26.88 382.848z"}),(0,he.createElementVNode)("path",{fill:"currentColor",d:"M139.84 501.888a256 256 0 1 1 417.856-277.12c-17.728 2.176-38.208 8.448-61.504 18.816A192 192 0 1 0 189.12 460.48a6003.84 6003.84 0 0 0-49.28 41.408z"})]))}});var ip=_p;var dp=o(e()),po=o(e()),up=(0,dp.defineComponent)({name:"Pear",__name:"pear",setup(t){return(r,a)=>((0,po.openBlock)(),(0,po.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,po.createElementVNode)("path",{fill:"currentColor",d:"M542.336 258.816a443.255 443.255 0 0 0-9.024 25.088 32 32 0 1 1-60.8-20.032l1.088-3.328a162.688 162.688 0 0 0-122.048 131.392l-17.088 102.72-20.736 15.36C256.192 552.704 224 610.88 224 672c0 120.576 126.4 224 288 224s288-103.424 288-224c0-61.12-32.192-119.296-89.728-161.92l-20.736-15.424-17.088-102.72a162.688 162.688 0 0 0-130.112-133.12zm-40.128-66.56c7.936-15.552 16.576-30.08 25.92-43.776 23.296-33.92 49.408-59.776 78.528-77.12a32 32 0 1 1 32.704 55.04c-20.544 12.224-40.064 31.552-58.432 58.304a316.608 316.608 0 0 0-9.792 15.104 226.688 226.688 0 0 1 164.48 181.568l12.8 77.248C819.456 511.36 864 587.392 864 672c0 159.04-157.568 288-352 288S160 831.04 160 672c0-84.608 44.608-160.64 115.584-213.376l12.8-77.248a226.624 226.624 0 0 1 213.76-189.184z"})]))}});var xp=up;var hp=o(e()),co=o(e()),vp=(0,hp.defineComponent)({name:"PhoneFilled",__name:"phone-filled",setup(t){return(r,a)=>((0,co.openBlock)(),(0,co.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,co.createElementVNode)("path",{fill:"currentColor",d:"M199.232 125.568 90.624 379.008a32 32 0 0 0 6.784 35.2l512.384 512.384a32 32 0 0 0 35.2 6.784l253.44-108.608a32 32 0 0 0 10.048-52.032L769.6 633.92a32 32 0 0 0-36.928-5.952l-130.176 65.088-271.488-271.552 65.024-130.176a32 32 0 0 0-5.952-36.928L251.2 115.52a32 32 0 0 0-51.968 10.048z"})]))}});var wp=vp;var Bp=o(e()),fo=o(e()),kp=(0,Bp.defineComponent)({name:"Phone",__name:"phone",setup(t){return(r,a)=>((0,fo.openBlock)(),(0,fo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,fo.createElementVNode)("path",{fill:"currentColor",d:"M79.36 432.256 591.744 944.64a32 32 0 0 0 35.2 6.784l253.44-108.544a32 32 0 0 0 9.984-52.032l-153.856-153.92a32 32 0 0 0-36.928-6.016l-69.888 34.944L358.08 394.24l35.008-69.888a32 32 0 0 0-5.952-36.928L233.152 133.568a32 32 0 0 0-52.032 10.048L72.512 397.056a32 32 0 0 0 6.784 35.2zm60.48-29.952 81.536-190.08L325.568 316.48l-24.64 49.216-20.608 41.216 32.576 32.64 271.552 271.552 32.64 32.64 41.216-20.672 49.28-24.576 104.192 104.128-190.08 81.472L139.84 402.304zM512 320v-64a256 256 0 0 1 256 256h-64a192 192 0 0 0-192-192m0-192V64a448 448 0 0 1 448 448h-64a384 384 0 0 0-384-384"})]))}});var Cp=kp;var Ep=o(e()),so=o(e()),Vp=(0,Ep.defineComponent)({name:"PictureFilled",__name:"picture-filled",setup(t){return(r,a)=>((0,so.openBlock)(),(0,so.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,so.createElementVNode)("path",{fill:"currentColor",d:"M96 896a32 32 0 0 1-32-32V160a32 32 0 0 1 32-32h832a32 32 0 0 1 32 32v704a32 32 0 0 1-32 32zm315.52-228.48-68.928-68.928a32 32 0 0 0-45.248 0L128 768.064h778.688l-242.112-290.56a32 32 0 0 0-49.216 0L458.752 665.408a32 32 0 0 1-47.232 2.112M256 384a96 96 0 1 0 192.064-.064A96 96 0 0 0 256 384"})]))}});var gp=Vp;var zp=o(e()),ve=o(e()),yp=(0,zp.defineComponent)({name:"PictureRounded",__name:"picture-rounded",setup(t){return(r,a)=>((0,ve.openBlock)(),(0,ve.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ve.createElementVNode)("path",{fill:"currentColor",d:"M512 128a384 384 0 1 0 0 768 384 384 0 0 0 0-768m0-64a448 448 0 1 1 0 896 448 448 0 0 1 0-896"}),(0,ve.createElementVNode)("path",{fill:"currentColor",d:"M640 288q64 0 64 64t-64 64q-64 0-64-64t64-64M214.656 790.656l-45.312-45.312 185.664-185.6a96 96 0 0 1 123.712-10.24l138.24 98.688a32 32 0 0 0 39.872-2.176L906.688 422.4l42.624 47.744L699.52 693.696a96 96 0 0 1-119.808 6.592l-138.24-98.752a32 32 0 0 0-41.152 3.456l-185.664 185.6z"})]))}});var Mp=yp;var Np=o(e()),we=o(e()),Hp=(0,Np.defineComponent)({name:"Picture",__name:"picture",setup(t){return(r,a)=>((0,we.openBlock)(),(0,we.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,we.createElementVNode)("path",{fill:"currentColor",d:"M160 160v704h704V160zm-32-64h768a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H128a32 32 0 0 1-32-32V128a32 32 0 0 1 32-32"}),(0,we.createElementVNode)("path",{fill:"currentColor",d:"M384 288q64 0 64 64t-64 64q-64 0-64-64t64-64M185.408 876.992l-50.816-38.912L350.72 556.032a96 96 0 0 1 134.592-17.856l1.856 1.472 122.88 99.136a32 32 0 0 0 44.992-4.864l216-269.888 49.92 39.936-215.808 269.824-.256.32a96 96 0 0 1-135.04 14.464l-122.88-99.072-.64-.512a32 32 0 0 0-44.8 5.952z"})]))}});var Lp=Hp;var Ap=o(e()),Be=o(e()),Sp=(0,Ap.defineComponent)({name:"PieChart",__name:"pie-chart",setup(t){return(r,a)=>((0,Be.openBlock)(),(0,Be.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Be.createElementVNode)("path",{fill:"currentColor",d:"M448 68.48v64.832A384.128 384.128 0 0 0 512 896a384.128 384.128 0 0 0 378.688-320h64.768A448.128 448.128 0 0 1 64 512 448.128 448.128 0 0 1 448 68.48z"}),(0,Be.createElementVNode)("path",{fill:"currentColor",d:"M576 97.28V448h350.72A384.064 384.064 0 0 0 576 97.28zM512 64V33.152A448 448 0 0 1 990.848 512H512z"})]))}});var qp=Sp;var Fp=o(e()),V=o(e()),bp=(0,Fp.defineComponent)({name:"Place",__name:"place",setup(t){return(r,a)=>((0,V.openBlock)(),(0,V.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,V.createElementVNode)("path",{fill:"currentColor",d:"M512 512a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512"}),(0,V.createElementVNode)("path",{fill:"currentColor",d:"M512 512a32 32 0 0 1 32 32v256a32 32 0 1 1-64 0V544a32 32 0 0 1 32-32"}),(0,V.createElementVNode)("path",{fill:"currentColor",d:"M384 649.088v64.96C269.76 732.352 192 771.904 192 800c0 37.696 139.904 96 320 96s320-58.304 320-96c0-28.16-77.76-67.648-192-85.952v-64.96C789.12 671.04 896 730.368 896 800c0 88.32-171.904 160-384 160s-384-71.68-384-160c0-69.696 106.88-128.96 256-150.912"})]))}});var Dp=bp;var Pp=o(e()),_o=o(e()),Rp=(0,Pp.defineComponent)({name:"Platform",__name:"platform",setup(t){return(r,a)=>((0,_o.openBlock)(),(0,_o.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,_o.createElementVNode)("path",{fill:"currentColor",d:"M448 832v-64h128v64h192v64H256v-64zM128 704V128h768v576z"})]))}});var Tp=Rp;var Op=o(e()),io=o(e()),Gp=(0,Op.defineComponent)({name:"Plus",__name:"plus",setup(t){return(r,a)=>((0,io.openBlock)(),(0,io.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,io.createElementVNode)("path",{fill:"currentColor",d:"M480 480V128a32 32 0 0 1 64 0v352h352a32 32 0 1 1 0 64H544v352a32 32 0 1 1-64 0V544H128a32 32 0 0 1 0-64z"})]))}});var Up=Gp;var Wp=o(e()),uo=o(e()),Ip=(0,Wp.defineComponent)({name:"Pointer",__name:"pointer",setup(t){return(r,a)=>((0,uo.openBlock)(),(0,uo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,uo.createElementVNode)("path",{fill:"currentColor",d:"M511.552 128c-35.584 0-64.384 28.8-64.384 64.448v516.48L274.048 570.88a94.272 94.272 0 0 0-112.896-3.456 44.416 44.416 0 0 0-8.96 62.208L332.8 870.4A64 64 0 0 0 384 896h512V575.232a64 64 0 0 0-45.632-61.312l-205.952-61.76A96 96 0 0 1 576 360.192V192.448C576 156.8 547.2 128 511.552 128M359.04 556.8l24.128 19.2V192.448a128.448 128.448 0 1 1 256.832 0v167.744a32 32 0 0 0 22.784 30.656l206.016 61.76A128 128 0 0 1 960 575.232V896a64 64 0 0 1-64 64H384a128 128 0 0 1-102.4-51.2L101.056 668.032A108.416 108.416 0 0 1 128 512.512a158.272 158.272 0 0 1 185.984 8.32z"})]))}});var Zp=Ip;var Kp=o(e()),xo=o(e()),Qp=(0,Kp.defineComponent)({name:"Position",__name:"position",setup(t){return(r,a)=>((0,xo.openBlock)(),(0,xo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,xo.createElementVNode)("path",{fill:"currentColor",d:"m249.6 417.088 319.744 43.072 39.168 310.272L845.12 178.88 249.6 417.088zm-129.024 47.168a32 32 0 0 1-7.68-61.44l777.792-311.04a32 32 0 0 1 41.6 41.6l-310.336 775.68a32 32 0 0 1-61.44-7.808L512 516.992l-391.424-52.736z"})]))}});var jp=Qp;var Jp=o(e()),ke=o(e()),Xp=(0,Jp.defineComponent)({name:"Postcard",__name:"postcard",setup(t){return(r,a)=>((0,ke.openBlock)(),(0,ke.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ke.createElementVNode)("path",{fill:"currentColor",d:"M160 224a32 32 0 0 0-32 32v512a32 32 0 0 0 32 32h704a32 32 0 0 0 32-32V256a32 32 0 0 0-32-32zm0-64h704a96 96 0 0 1 96 96v512a96 96 0 0 1-96 96H160a96 96 0 0 1-96-96V256a96 96 0 0 1 96-96"}),(0,ke.createElementVNode)("path",{fill:"currentColor",d:"M704 320a64 64 0 1 1 0 128 64 64 0 0 1 0-128M288 448h256q32 0 32 32t-32 32H288q-32 0-32-32t32-32m0 128h256q32 0 32 32t-32 32H288q-32 0-32-32t32-32"})]))}});var Yp=Xp;var $p=o(e()),ho=o(e()),ec=(0,$p.defineComponent)({name:"Pouring",__name:"pouring",setup(t){return(r,a)=>((0,ho.openBlock)(),(0,ho.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ho.createElementVNode)("path",{fill:"currentColor",d:"m739.328 291.328-35.2-6.592-12.8-33.408a192.064 192.064 0 0 0-365.952 23.232l-9.92 40.896-41.472 7.04a176.32 176.32 0 0 0-146.24 173.568c0 97.28 78.72 175.936 175.808 175.936h400a192 192 0 0 0 35.776-380.672zM959.552 480a256 256 0 0 1-256 256h-400A239.808 239.808 0 0 1 63.744 496.192a240.32 240.32 0 0 1 199.488-236.8 256.128 256.128 0 0 1 487.872-30.976A256.064 256.064 0 0 1 959.552 480M224 800a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32m192 0a32 32 0 0 1 32 32v96a32 32 0 1 1-64 0v-96a32 32 0 0 1 32-32"})]))}});var oc=ec;var tc=o(e()),m=o(e()),rc=(0,tc.defineComponent)({name:"Present",__name:"present",setup(t){return(r,a)=>((0,m.openBlock)(),(0,m.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,m.createElementVNode)("path",{fill:"currentColor",d:"M480 896V640H192v-64h288V320H192v576zm64 0h288V320H544v256h288v64H544zM128 256h768v672a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32z"}),(0,m.createElementVNode)("path",{fill:"currentColor",d:"M96 256h832q32 0 32 32t-32 32H96q-32 0-32-32t32-32"}),(0,m.createElementVNode)("path",{fill:"currentColor",d:"M416 256a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"}),(0,m.createElementVNode)("path",{fill:"currentColor",d:"M608 256a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"})]))}});var ac=rc;var nc=o(e()),Ce=o(e()),mc=(0,nc.defineComponent)({name:"PriceTag",__name:"price-tag",setup(t){return(r,a)=>((0,Ce.openBlock)(),(0,Ce.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ce.createElementVNode)("path",{fill:"currentColor",d:"M224 318.336V896h576V318.336L552.512 115.84a64 64 0 0 0-81.024 0zM593.024 66.304l259.2 212.096A32 32 0 0 1 864 303.168V928a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V303.168a32 32 0 0 1 11.712-24.768l259.2-212.096a128 128 0 0 1 162.112 0z"}),(0,Ce.createElementVNode)("path",{fill:"currentColor",d:"M512 448a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"})]))}});var lc=mc;var pc=o(e()),vo=o(e()),cc=(0,pc.defineComponent)({name:"Printer",__name:"printer",setup(t){return(r,a)=>((0,vo.openBlock)(),(0,vo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,vo.createElementVNode)("path",{fill:"currentColor",d:"M256 768H105.024c-14.272 0-19.456-1.472-24.64-4.288a29.056 29.056 0 0 1-12.16-12.096C65.536 746.432 64 741.248 64 727.04V379.072c0-42.816 4.48-58.304 12.8-73.984 8.384-15.616 20.672-27.904 36.288-36.288 15.68-8.32 31.168-12.8 73.984-12.8H256V64h512v192h68.928c42.816 0 58.304 4.48 73.984 12.8 15.616 8.384 27.904 20.672 36.288 36.288 8.32 15.68 12.8 31.168 12.8 73.984v347.904c0 14.272-1.472 19.456-4.288 24.64a29.056 29.056 0 0 1-12.096 12.16c-5.184 2.752-10.368 4.224-24.64 4.224H768v192H256zm64-192v320h384V576zm-64 128V512h512v192h128V379.072c0-29.376-1.408-36.48-5.248-43.776a23.296 23.296 0 0 0-10.048-10.048c-7.232-3.84-14.4-5.248-43.776-5.248H187.072c-29.376 0-36.48 1.408-43.776 5.248a23.296 23.296 0 0 0-10.048 10.048c-3.84 7.232-5.248 14.4-5.248 43.776V704zm64-448h384V128H320zm-64 128h64v64h-64zm128 0h64v64h-64z"})]))}});var fc=cc;var sc=o(e()),wo=o(e()),_c=(0,sc.defineComponent)({name:"Promotion",__name:"promotion",setup(t){return(r,a)=>((0,wo.openBlock)(),(0,wo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,wo.createElementVNode)("path",{fill:"currentColor",d:"m64 448 832-320-128 704-446.08-243.328L832 192 242.816 545.472zm256 512V657.024L512 768z"})]))}});var ic=_c;var dc=o(e()),g=o(e()),uc=(0,dc.defineComponent)({name:"QuartzWatch",__name:"quartz-watch",setup(t){return(r,a)=>((0,g.openBlock)(),(0,g.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[(0,g.createElementVNode)("path",{fill:"currentColor",d:"M422.02 602.01v-.03c-6.68-5.99-14.35-8.83-23.01-8.51-8.67.32-16.17 3.66-22.5 10.02-6.33 6.36-9.5 13.7-9.5 22.02s3 15.82 8.99 22.5c8.68 8.68 19.02 11.35 31.01 8s19.49-10.85 22.5-22.5c3.01-11.65.51-22.15-7.49-31.49zM384 512c0-9.35-3-17.02-8.99-23.01-6-5.99-13.66-8.99-23.01-8.99-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.66-8.99 23.01s3 17.02 8.99 23.01c6 5.99 13.66 8.99 23.01 8.99 9.35 0 17.02-3 23.01-8.99 5.99-6 8.99-13.67 8.99-23.01m6.53-82.49c11.65 3.01 22.15.51 31.49-7.49h.04c5.99-6.68 8.83-14.34 8.51-23.01-.32-8.67-3.66-16.16-10.02-22.5-6.36-6.33-13.7-9.5-22.02-9.5s-15.82 3-22.5 8.99c-8.68 8.69-11.35 19.02-8 31.01 3.35 11.99 10.85 19.49 22.5 22.5zm242.94 0c11.67-3.03 19.01-10.37 22.02-22.02 3.01-11.65.51-22.15-7.49-31.49h.01c-6.68-5.99-14.18-8.99-22.5-8.99s-15.66 3.16-22.02 9.5c-6.36 6.34-9.7 13.84-10.02 22.5-.32 8.66 2.52 16.33 8.51 23.01 9.32 8.02 19.82 10.52 31.49 7.49M512 640c-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.66-8.99 23.01s3 17.02 8.99 23.01c6 5.99 13.67 8.99 23.01 8.99 9.35 0 17.02-3 23.01-8.99 5.99-6 8.99-13.66 8.99-23.01s-3-17.02-8.99-23.01c-6-5.99-13.66-8.99-23.01-8.99m183.01-151.01c-6-5.99-13.66-8.99-23.01-8.99s-17.02 3-23.01 8.99c-5.99 6-8.99 13.66-8.99 23.01s3 17.02 8.99 23.01c6 5.99 13.66 8.99 23.01 8.99s17.02-3 23.01-8.99c5.99-6 8.99-13.67 8.99-23.01 0-9.35-3-17.02-8.99-23.01"}),(0,g.createElementVNode)("path",{fill:"currentColor",d:"M832 512c-2-90.67-33.17-166.17-93.5-226.5-20.43-20.42-42.6-37.49-66.5-51.23V64H352v170.26c-23.9 13.74-46.07 30.81-66.5 51.24-60.33 60.33-91.49 135.83-93.5 226.5 2 90.67 33.17 166.17 93.5 226.5 20.43 20.43 42.6 37.5 66.5 51.24V960h320V789.74c23.9-13.74 46.07-30.81 66.5-51.24 60.33-60.34 91.49-135.83 93.5-226.5M416 128h192v78.69c-29.85-9.03-61.85-13.93-96-14.69-34.15.75-66.15 5.65-96 14.68zm192 768H416v-78.68c29.85 9.03 61.85 13.93 96 14.68 34.15-.75 66.15-5.65 96-14.68zm-96-128c-72.66-2.01-132.99-27.01-180.99-75.01S258.01 584.66 256 512c2.01-72.66 27.01-132.99 75.01-180.99S439.34 258.01 512 256c72.66 2.01 132.99 27.01 180.99 75.01S765.99 439.34 768 512c-2.01 72.66-27.01 132.99-75.01 180.99S584.66 765.99 512 768"}),(0,g.createElementVNode)("path",{fill:"currentColor",d:"M512 320c-9.35 0-17.02 3-23.01 8.99-5.99 6-8.99 13.66-8.99 23.01 0 9.35 3 17.02 8.99 23.01 6 5.99 13.67 8.99 23.01 8.99 9.35 0 17.02-3 23.01-8.99 5.99-6 8.99-13.66 8.99-23.01 0-9.35-3-17.02-8.99-23.01-6-5.99-13.66-8.99-23.01-8.99m112.99 273.5c-8.66-.32-16.33 2.52-23.01 8.51-7.98 9.32-10.48 19.82-7.49 31.49s10.49 19.17 22.5 22.5 22.35.66 31.01-8v.04c5.99-6.68 8.99-14.18 8.99-22.5s-3.16-15.66-9.5-22.02-13.84-9.7-22.5-10.02"})]))}});var xc=uc;var hc=o(e()),Bo=o(e()),vc=(0,hc.defineComponent)({name:"QuestionFilled",__name:"question-filled",setup(t){return(r,a)=>((0,Bo.openBlock)(),(0,Bo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Bo.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m23.744 191.488c-52.096 0-92.928 14.784-123.2 44.352-30.976 29.568-45.76 70.4-45.76 122.496h80.256c0-29.568 5.632-52.8 17.6-68.992 13.376-19.712 35.2-28.864 66.176-28.864 23.936 0 42.944 6.336 56.32 19.712 12.672 13.376 19.712 31.68 19.712 54.912 0 17.6-6.336 34.496-19.008 49.984l-8.448 9.856c-45.76 40.832-73.216 70.4-82.368 89.408-9.856 19.008-14.08 42.24-14.08 68.992v9.856h80.96v-9.856c0-16.896 3.52-31.68 10.56-45.76 6.336-12.672 15.488-24.64 28.16-35.2 33.792-29.568 54.208-48.576 60.544-55.616 16.896-22.528 26.048-51.392 26.048-86.592 0-42.944-14.08-76.736-42.24-101.376-28.16-25.344-65.472-37.312-111.232-37.312zm-12.672 406.208a54.272 54.272 0 0 0-38.72 14.784 49.408 49.408 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.848 54.848 0 0 0 523.072 768c15.488 0 28.16-4.928 38.72-14.784a51.52 51.52 0 0 0 16.192-38.72 51.968 51.968 0 0 0-15.488-38.016 55.936 55.936 0 0 0-39.424-14.784z"})]))}});var wc=vc;var Bc=o(e()),ko=o(e()),kc=(0,Bc.defineComponent)({name:"Rank",__name:"rank",setup(t){return(r,a)=>((0,ko.openBlock)(),(0,ko.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ko.createElementVNode)("path",{fill:"currentColor",d:"m186.496 544 41.408 41.344a32 32 0 1 1-45.248 45.312l-96-96a32 32 0 0 1 0-45.312l96-96a32 32 0 1 1 45.248 45.312L186.496 480h290.816V186.432l-41.472 41.472a32 32 0 1 1-45.248-45.184l96-96.128a32 32 0 0 1 45.312 0l96 96.064a32 32 0 0 1-45.248 45.184l-41.344-41.28V480H832l-41.344-41.344a32 32 0 0 1 45.248-45.312l96 96a32 32 0 0 1 0 45.312l-96 96a32 32 0 0 1-45.248-45.312L832 544H541.312v293.44l41.344-41.28a32 32 0 1 1 45.248 45.248l-96 96a32 32 0 0 1-45.312 0l-96-96a32 32 0 1 1 45.312-45.248l41.408 41.408V544H186.496z"})]))}});var Cc=kc;var Ec=o(e()),Ee=o(e()),Vc=(0,Ec.defineComponent)({name:"ReadingLamp",__name:"reading-lamp",setup(t){return(r,a)=>((0,Ee.openBlock)(),(0,Ee.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ee.createElementVNode)("path",{fill:"currentColor",d:"M352 896h320q32 0 32 32t-32 32H352q-32 0-32-32t32-32m-44.672-768-99.52 448h608.384l-99.52-448zm-25.6-64h460.608a32 32 0 0 1 31.232 25.088l113.792 512A32 32 0 0 1 856.128 640H167.872a32 32 0 0 1-31.232-38.912l113.792-512A32 32 0 0 1 281.664 64z"}),(0,Ee.createElementVNode)("path",{fill:"currentColor",d:"M672 576q32 0 32 32v128q0 32-32 32t-32-32V608q0-32 32-32m-192-.064h64V960h-64z"})]))}});var gc=Vc;var zc=o(e()),Ve=o(e()),yc=(0,zc.defineComponent)({name:"Reading",__name:"reading",setup(t){return(r,a)=>((0,Ve.openBlock)(),(0,Ve.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ve.createElementVNode)("path",{fill:"currentColor",d:"m512 863.36 384-54.848v-638.72L525.568 222.72a96 96 0 0 1-27.136 0L128 169.792v638.72zM137.024 106.432l370.432 52.928a32 32 0 0 0 9.088 0l370.432-52.928A64 64 0 0 1 960 169.792v638.72a64 64 0 0 1-54.976 63.36l-388.48 55.488a32 32 0 0 1-9.088 0l-388.48-55.488A64 64 0 0 1 64 808.512v-638.72a64 64 0 0 1 73.024-63.36z"}),(0,Ve.createElementVNode)("path",{fill:"currentColor",d:"M480 192h64v704h-64z"})]))}});var Mc=yc;var Nc=o(e()),Co=o(e()),Hc=(0,Nc.defineComponent)({name:"RefreshLeft",__name:"refresh-left",setup(t){return(r,a)=>((0,Co.openBlock)(),(0,Co.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Co.createElementVNode)("path",{fill:"currentColor",d:"M289.088 296.704h92.992a32 32 0 0 1 0 64H232.96a32 32 0 0 1-32-32V179.712a32 32 0 0 1 64 0v50.56a384 384 0 0 1 643.84 282.88 384 384 0 0 1-383.936 384 384 384 0 0 1-384-384h64a320 320 0 1 0 640 0 320 320 0 0 0-555.712-216.448z"})]))}});var Lc=Hc;var Ac=o(e()),Eo=o(e()),Sc=(0,Ac.defineComponent)({name:"RefreshRight",__name:"refresh-right",setup(t){return(r,a)=>((0,Eo.openBlock)(),(0,Eo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Eo.createElementVNode)("path",{fill:"currentColor",d:"M784.512 230.272v-50.56a32 32 0 1 1 64 0v149.056a32 32 0 0 1-32 32H667.52a32 32 0 1 1 0-64h92.992A320 320 0 1 0 524.8 833.152a320 320 0 0 0 320-320h64a384 384 0 0 1-384 384 384 384 0 0 1-384-384 384 384 0 0 1 643.712-282.88z"})]))}});var qc=Sc;var Fc=o(e()),Vo=o(e()),bc=(0,Fc.defineComponent)({name:"Refresh",__name:"refresh",setup(t){return(r,a)=>((0,Vo.openBlock)(),(0,Vo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Vo.createElementVNode)("path",{fill:"currentColor",d:"M771.776 794.88A384 384 0 0 1 128 512h64a320 320 0 0 0 555.712 216.448H654.72a32 32 0 1 1 0-64h149.056a32 32 0 0 1 32 32v148.928a32 32 0 1 1-64 0v-50.56zM276.288 295.616h92.992a32 32 0 0 1 0 64H220.16a32 32 0 0 1-32-32V178.56a32 32 0 0 1 64 0v50.56A384 384 0 0 1 896.128 512h-64a320 320 0 0 0-555.776-216.384z"})]))}});var Dc=bc;var Pc=o(e()),go=o(e()),Rc=(0,Pc.defineComponent)({name:"Refrigerator",__name:"refrigerator",setup(t){return(r,a)=>((0,go.openBlock)(),(0,go.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,go.createElementVNode)("path",{fill:"currentColor",d:"M256 448h512V160a32 32 0 0 0-32-32H288a32 32 0 0 0-32 32zm0 64v352a32 32 0 0 0 32 32h448a32 32 0 0 0 32-32V512zm32-448h448a96 96 0 0 1 96 96v704a96 96 0 0 1-96 96H288a96 96 0 0 1-96-96V160a96 96 0 0 1 96-96m32 224h64v96h-64zm0 288h64v96h-64z"})]))}});var Tc=Rc;var Oc=o(e()),zo=o(e()),Gc=(0,Oc.defineComponent)({name:"RemoveFilled",__name:"remove-filled",setup(t){return(r,a)=>((0,zo.openBlock)(),(0,zo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,zo.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896M288 512a38.4 38.4 0 0 0 38.4 38.4h371.2a38.4 38.4 0 0 0 0-76.8H326.4A38.4 38.4 0 0 0 288 512"})]))}});var Uc=Gc;var Wc=o(e()),ge=o(e()),Ic=(0,Wc.defineComponent)({name:"Remove",__name:"remove",setup(t){return(r,a)=>((0,ge.openBlock)(),(0,ge.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ge.createElementVNode)("path",{fill:"currentColor",d:"M352 480h320a32 32 0 1 1 0 64H352a32 32 0 0 1 0-64"}),(0,ge.createElementVNode)("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"})]))}});var Zc=Ic;var Kc=o(e()),yo=o(e()),Qc=(0,Kc.defineComponent)({name:"Right",__name:"right",setup(t){return(r,a)=>((0,yo.openBlock)(),(0,yo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,yo.createElementVNode)("path",{fill:"currentColor",d:"M754.752 480H160a32 32 0 1 0 0 64h594.752L521.344 777.344a32 32 0 0 0 45.312 45.312l288-288a32 32 0 0 0 0-45.312l-288-288a32 32 0 1 0-45.312 45.312z"})]))}});var jc=Qc;var Jc=o(e()),Mo=o(e()),Xc=(0,Jc.defineComponent)({name:"ScaleToOriginal",__name:"scale-to-original",setup(t){return(r,a)=>((0,Mo.openBlock)(),(0,Mo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Mo.createElementVNode)("path",{fill:"currentColor",d:"M813.176 180.706a60.235 60.235 0 0 1 60.236 60.235v481.883a60.235 60.235 0 0 1-60.236 60.235H210.824a60.235 60.235 0 0 1-60.236-60.235V240.94a60.235 60.235 0 0 1 60.236-60.235h602.352zm0-60.235H210.824A120.47 120.47 0 0 0 90.353 240.94v481.883a120.47 120.47 0 0 0 120.47 120.47h602.353a120.47 120.47 0 0 0 120.471-120.47V240.94a120.47 120.47 0 0 0-120.47-120.47zm-120.47 180.705a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118zm-361.412 0a30.118 30.118 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.118 30.118 0 0 0-30.118-30.118M512 361.412a30.118 30.118 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.118 30.118 0 0 0 512 361.412M512 512a30.118 30.118 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.118 30.118 0 0 0 512 512"})]))}});var Yc=Xc;var $c=o(e()),z=o(e()),e5=(0,$c.defineComponent)({name:"School",__name:"school",setup(t){return(r,a)=>((0,z.openBlock)(),(0,z.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,z.createElementVNode)("path",{fill:"currentColor",d:"M224 128v704h576V128zm-32-64h640a32 32 0 0 1 32 32v768a32 32 0 0 1-32 32H192a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32"}),(0,z.createElementVNode)("path",{fill:"currentColor",d:"M64 832h896v64H64zm256-640h128v96H320z"}),(0,z.createElementVNode)("path",{fill:"currentColor",d:"M384 832h256v-64a128 128 0 1 0-256 0zm128-256a192 192 0 0 1 192 192v128H320V768a192 192 0 0 1 192-192M320 384h128v96H320zm256-192h128v96H576zm0 192h128v96H576z"})]))}});var o5=e5;var t5=o(e()),No=o(e()),r5=(0,t5.defineComponent)({name:"Scissor",__name:"scissor",setup(t){return(r,a)=>((0,No.openBlock)(),(0,No.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,No.createElementVNode)("path",{fill:"currentColor",d:"m512.064 578.368-106.88 152.768a160 160 0 1 1-23.36-78.208L472.96 522.56 196.864 128.256a32 32 0 1 1 52.48-36.736l393.024 561.344a160 160 0 1 1-23.36 78.208l-106.88-152.704zm54.4-189.248 208.384-297.6a32 32 0 0 1 52.48 36.736l-221.76 316.672-39.04-55.808zm-376.32 425.856a96 96 0 1 0 110.144-157.248 96 96 0 0 0-110.08 157.248zm643.84 0a96 96 0 1 0-110.08-157.248 96 96 0 0 0 110.08 157.248"})]))}});var a5=r5;var n5=o(e()),Ho=o(e()),m5=(0,n5.defineComponent)({name:"Search",__name:"search",setup(t){return(r,a)=>((0,Ho.openBlock)(),(0,Ho.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ho.createElementVNode)("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704"})]))}});var l5=m5;var p5=o(e()),Lo=o(e()),c5=(0,p5.defineComponent)({name:"Select",__name:"select",setup(t){return(r,a)=>((0,Lo.openBlock)(),(0,Lo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Lo.createElementVNode)("path",{fill:"currentColor",d:"M77.248 415.04a64 64 0 0 1 90.496 0l226.304 226.304L846.528 188.8a64 64 0 1 1 90.56 90.496l-543.04 543.04-316.8-316.8a64 64 0 0 1 0-90.496z"})]))}});var f5=c5;var s5=o(e()),Ao=o(e()),_5=(0,s5.defineComponent)({name:"Sell",__name:"sell",setup(t){return(r,a)=>((0,Ao.openBlock)(),(0,Ao.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ao.createElementVNode)("path",{fill:"currentColor",d:"M704 288h131.072a32 32 0 0 1 31.808 28.8L886.4 512h-64.384l-16-160H704v96a32 32 0 1 1-64 0v-96H384v96a32 32 0 0 1-64 0v-96H217.92l-51.2 512H512v64H131.328a32 32 0 0 1-31.808-35.2l57.6-576a32 32 0 0 1 31.808-28.8H320v-22.336C320 154.688 405.504 64 512 64s192 90.688 192 201.664v22.4zm-64 0v-22.336C640 189.248 582.272 128 512 128c-70.272 0-128 61.248-128 137.664v22.4h256zm201.408 483.84L768 698.496V928a32 32 0 1 1-64 0V698.496l-73.344 73.344a32 32 0 1 1-45.248-45.248l128-128a32 32 0 0 1 45.248 0l128 128a32 32 0 1 1-45.248 45.248z"})]))}});var i5=_5;var d5=o(e()),So=o(e()),u5=(0,d5.defineComponent)({name:"SemiSelect",__name:"semi-select",setup(t){return(r,a)=>((0,So.openBlock)(),(0,So.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,So.createElementVNode)("path",{fill:"currentColor",d:"M128 448h768q64 0 64 64t-64 64H128q-64 0-64-64t64-64"})]))}});var x5=u5;var h5=o(e()),qo=o(e()),v5=(0,h5.defineComponent)({name:"Service",__name:"service",setup(t){return(r,a)=>((0,qo.openBlock)(),(0,qo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,qo.createElementVNode)("path",{fill:"currentColor",d:"M864 409.6a192 192 0 0 1-37.888 349.44A256.064 256.064 0 0 1 576 960h-96a32 32 0 1 1 0-64h96a192.064 192.064 0 0 0 181.12-128H736a32 32 0 0 1-32-32V416a32 32 0 0 1 32-32h32c10.368 0 20.544.832 30.528 2.432a288 288 0 0 0-573.056 0A193.235 193.235 0 0 1 256 384h32a32 32 0 0 1 32 32v320a32 32 0 0 1-32 32h-32a192 192 0 0 1-96-358.4 352 352 0 0 1 704 0M256 448a128 128 0 1 0 0 256zm640 128a128 128 0 0 0-128-128v256a128 128 0 0 0 128-128"})]))}});var w5=v5;var B5=o(e()),l=o(e()),k5=(0,B5.defineComponent)({name:"SetUp",__name:"set-up",setup(t){return(r,a)=>((0,l.openBlock)(),(0,l.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,l.createElementVNode)("path",{fill:"currentColor",d:"M224 160a64 64 0 0 0-64 64v576a64 64 0 0 0 64 64h576a64 64 0 0 0 64-64V224a64 64 0 0 0-64-64zm0-64h576a128 128 0 0 1 128 128v576a128 128 0 0 1-128 128H224A128 128 0 0 1 96 800V224A128 128 0 0 1 224 96"}),(0,l.createElementVNode)("path",{fill:"currentColor",d:"M384 416a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"}),(0,l.createElementVNode)("path",{fill:"currentColor",d:"M480 320h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32m160 416a64 64 0 1 0 0-128 64 64 0 0 0 0 128m0 64a128 128 0 1 1 0-256 128 128 0 0 1 0 256"}),(0,l.createElementVNode)("path",{fill:"currentColor",d:"M288 640h256q32 0 32 32t-32 32H288q-32 0-32-32t32-32"})]))}});var C5=k5;var E5=o(e()),Fo=o(e()),V5=(0,E5.defineComponent)({name:"Setting",__name:"setting",setup(t){return(r,a)=>((0,Fo.openBlock)(),(0,Fo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Fo.createElementVNode)("path",{fill:"currentColor",d:"M600.704 64a32 32 0 0 1 30.464 22.208l35.2 109.376c14.784 7.232 28.928 15.36 42.432 24.512l112.384-24.192a32 32 0 0 1 34.432 15.36L944.32 364.8a32 32 0 0 1-4.032 37.504l-77.12 85.12a357.12 357.12 0 0 1 0 49.024l77.12 85.248a32 32 0 0 1 4.032 37.504l-88.704 153.6a32 32 0 0 1-34.432 15.296L708.8 803.904c-13.44 9.088-27.648 17.28-42.368 24.512l-35.264 109.376A32 32 0 0 1 600.704 960H423.296a32 32 0 0 1-30.464-22.208L357.696 828.48a351.616 351.616 0 0 1-42.56-24.64l-112.32 24.256a32 32 0 0 1-34.432-15.36L79.68 659.2a32 32 0 0 1 4.032-37.504l77.12-85.248a357.12 357.12 0 0 1 0-48.896l-77.12-85.248A32 32 0 0 1 79.68 364.8l88.704-153.6a32 32 0 0 1 34.432-15.296l112.32 24.256c13.568-9.152 27.776-17.408 42.56-24.64l35.2-109.312A32 32 0 0 1 423.232 64H600.64zm-23.424 64H446.72l-36.352 113.088-24.512 11.968a294.113 294.113 0 0 0-34.816 20.096l-22.656 15.36-116.224-25.088-65.28 113.152 79.68 88.192-1.92 27.136a293.12 293.12 0 0 0 0 40.192l1.92 27.136-79.808 88.192 65.344 113.152 116.224-25.024 22.656 15.296a294.113 294.113 0 0 0 34.816 20.096l24.512 11.968L446.72 896h130.688l36.48-113.152 24.448-11.904a288.282 288.282 0 0 0 34.752-20.096l22.592-15.296 116.288 25.024 65.28-113.152-79.744-88.192 1.92-27.136a293.12 293.12 0 0 0 0-40.256l-1.92-27.136 79.808-88.128-65.344-113.152-116.288 24.96-22.592-15.232a287.616 287.616 0 0 0-34.752-20.096l-24.448-11.904L577.344 128zM512 320a192 192 0 1 1 0 384 192 192 0 0 1 0-384m0 64a128 128 0 1 0 0 256 128 128 0 0 0 0-256"})]))}});var g5=V5;var z5=o(e()),bo=o(e()),y5=(0,z5.defineComponent)({name:"Share",__name:"share",setup(t){return(r,a)=>((0,bo.openBlock)(),(0,bo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,bo.createElementVNode)("path",{fill:"currentColor",d:"m679.872 348.8-301.76 188.608a127.808 127.808 0 0 1 5.12 52.16l279.936 104.96a128 128 0 1 1-22.464 59.904l-279.872-104.96a128 128 0 1 1-16.64-166.272l301.696-188.608a128 128 0 1 1 33.92 54.272z"})]))}});var M5=y5;var N5=o(e()),Do=o(e()),H5=(0,N5.defineComponent)({name:"Ship",__name:"ship",setup(t){return(r,a)=>((0,Do.openBlock)(),(0,Do.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Do.createElementVNode)("path",{fill:"currentColor",d:"M512 386.88V448h405.568a32 32 0 0 1 30.72 40.768l-76.48 267.968A192 192 0 0 1 687.168 896H336.832a192 192 0 0 1-184.64-139.264L75.648 488.768A32 32 0 0 1 106.368 448H448V117.888a32 32 0 0 1 47.36-28.096l13.888 7.616L512 96v2.88l231.68 126.4a32 32 0 0 1-2.048 57.216zm0-70.272 144.768-65.792L512 171.84zM512 512H148.864l18.24 64H856.96l18.24-64zM185.408 640l28.352 99.2A128 128 0 0 0 336.832 832h350.336a128 128 0 0 0 123.072-92.8l28.352-99.2H185.408"})]))}});var L5=H5;var A5=o(e()),Po=o(e()),S5=(0,A5.defineComponent)({name:"Shop",__name:"shop",setup(t){return(r,a)=>((0,Po.openBlock)(),(0,Po.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Po.createElementVNode)("path",{fill:"currentColor",d:"M704 704h64v192H256V704h64v64h384zm188.544-152.192C894.528 559.616 896 567.616 896 576a96 96 0 1 1-192 0 96 96 0 1 1-192 0 96 96 0 1 1-192 0 96 96 0 1 1-192 0c0-8.384 1.408-16.384 3.392-24.192L192 128h640z"})]))}});var q5=S5;var F5=o(e()),ze=o(e()),b5=(0,F5.defineComponent)({name:"ShoppingBag",__name:"shopping-bag",setup(t){return(r,a)=>((0,ze.openBlock)(),(0,ze.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ze.createElementVNode)("path",{fill:"currentColor",d:"M704 320v96a32 32 0 0 1-32 32h-32V320H384v128h-32a32 32 0 0 1-32-32v-96H192v576h640V320zm-384-64a192 192 0 1 1 384 0h160a32 32 0 0 1 32 32v640a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V288a32 32 0 0 1 32-32zm64 0h256a128 128 0 1 0-256 0"}),(0,ze.createElementVNode)("path",{fill:"currentColor",d:"M192 704h640v64H192z"})]))}});var D5=b5;var P5=o(e()),ye=o(e()),R5=(0,P5.defineComponent)({name:"ShoppingCartFull",__name:"shopping-cart-full",setup(t){return(r,a)=>((0,ye.openBlock)(),(0,ye.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,ye.createElementVNode)("path",{fill:"currentColor",d:"M432 928a48 48 0 1 1 0-96 48 48 0 0 1 0 96m320 0a48 48 0 1 1 0-96 48 48 0 0 1 0 96M96 128a32 32 0 0 1 0-64h160a32 32 0 0 1 31.36 25.728L320.64 256H928a32 32 0 0 1 31.296 38.72l-96 448A32 32 0 0 1 832 768H384a32 32 0 0 1-31.36-25.728L229.76 128zm314.24 576h395.904l82.304-384H333.44l76.8 384z"}),(0,ye.createElementVNode)("path",{fill:"currentColor",d:"M699.648 256 608 145.984 516.352 256h183.296zm-140.8-151.04a64 64 0 0 1 98.304 0L836.352 320H379.648l179.2-215.04"})]))}});var T5=R5;var O5=o(e()),Ro=o(e()),G5=(0,O5.defineComponent)({name:"ShoppingCart",__name:"shopping-cart",setup(t){return(r,a)=>((0,Ro.openBlock)(),(0,Ro.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ro.createElementVNode)("path",{fill:"currentColor",d:"M432 928a48 48 0 1 1 0-96 48 48 0 0 1 0 96m320 0a48 48 0 1 1 0-96 48 48 0 0 1 0 96M96 128a32 32 0 0 1 0-64h160a32 32 0 0 1 31.36 25.728L320.64 256H928a32 32 0 0 1 31.296 38.72l-96 448A32 32 0 0 1 832 768H384a32 32 0 0 1-31.36-25.728L229.76 128zm314.24 576h395.904l82.304-384H333.44l76.8 384z"})]))}});var U5=G5;var W5=o(e()),To=o(e()),I5=(0,W5.defineComponent)({name:"ShoppingTrolley",__name:"shopping-trolley",setup(t){return(r,a)=>((0,To.openBlock)(),(0,To.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[(0,To.createElementVNode)("path",{fill:"currentColor",d:"M368 833c-13.3 0-24.5 4.5-33.5 13.5S321 866.7 321 880s4.5 24.5 13.5 33.5 20.2 13.8 33.5 14.5c13.3-.7 24.5-5.5 33.5-14.5S415 893.3 415 880s-4.5-24.5-13.5-33.5S381.3 833 368 833m439-193c7.4 0 13.8-2.2 19.5-6.5S836 623.3 838 616l112-448c2-10-.2-19.2-6.5-27.5S929 128 919 128H96c-9.3 0-17 3-23 9s-9 13.7-9 23 3 17 9 23 13.7 9 23 9h96v576h672c9.3 0 17-3 23-9s9-13.7 9-23-3-17-9-23-13.7-9-23-9H256v-64zM256 192h622l-96 384H256zm432 641c-13.3 0-24.5 4.5-33.5 13.5S641 866.7 641 880s4.5 24.5 13.5 33.5 20.2 13.8 33.5 14.5c13.3-.7 24.5-5.5 33.5-14.5S735 893.3 735 880s-4.5-24.5-13.5-33.5S701.3 833 688 833"})]))}});var Z5=I5;var K5=o(e()),Me=o(e()),Q5=(0,K5.defineComponent)({name:"Smoking",__name:"smoking",setup(t){return(r,a)=>((0,Me.openBlock)(),(0,Me.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Me.createElementVNode)("path",{fill:"currentColor",d:"M256 576v128h640V576zm-32-64h704a32 32 0 0 1 32 32v192a32 32 0 0 1-32 32H224a32 32 0 0 1-32-32V544a32 32 0 0 1 32-32"}),(0,Me.createElementVNode)("path",{fill:"currentColor",d:"M704 576h64v128h-64zM256 64h64v320h-64zM128 192h64v192h-64zM64 512h64v256H64z"})]))}});var j5=Q5;var J5=o(e()),Oo=o(e()),X5=(0,J5.defineComponent)({name:"Soccer",__name:"soccer",setup(t){return(r,a)=>((0,Oo.openBlock)(),(0,Oo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Oo.createElementVNode)("path",{fill:"currentColor",d:"M418.496 871.04 152.256 604.8c-16.512 94.016-2.368 178.624 42.944 224 44.928 44.928 129.344 58.752 223.296 42.24m72.32-18.176a573.056 573.056 0 0 0 224.832-137.216 573.12 573.12 0 0 0 137.216-224.832L533.888 171.84a578.56 578.56 0 0 0-227.52 138.496A567.68 567.68 0 0 0 170.432 532.48l320.384 320.384zM871.04 418.496c16.512-93.952 2.688-178.368-42.24-223.296-44.544-44.544-128.704-58.048-222.592-41.536zM149.952 874.048c-112.96-112.96-88.832-408.96 111.168-608.96C461.056 65.152 760.96 36.928 874.048 149.952c113.024 113.024 86.784 411.008-113.152 610.944-199.936 199.936-497.92 226.112-610.944 113.152m452.544-497.792 22.656-22.656a32 32 0 0 1 45.248 45.248l-22.656 22.656 45.248 45.248A32 32 0 1 1 647.744 512l-45.248-45.248L557.248 512l45.248 45.248a32 32 0 1 1-45.248 45.248L512 557.248l-45.248 45.248L512 647.744a32 32 0 1 1-45.248 45.248l-45.248-45.248-22.656 22.656a32 32 0 1 1-45.248-45.248l22.656-22.656-45.248-45.248A32 32 0 1 1 376.256 512l45.248 45.248L466.752 512l-45.248-45.248a32 32 0 1 1 45.248-45.248L512 466.752l45.248-45.248L512 376.256a32 32 0 0 1 45.248-45.248l45.248 45.248z"})]))}});var Y5=X5;var $5=o(e()),Go=o(e()),e9=(0,$5.defineComponent)({name:"SoldOut",__name:"sold-out",setup(t){return(r,a)=>((0,Go.openBlock)(),(0,Go.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Go.createElementVNode)("path",{fill:"currentColor",d:"M704 288h131.072a32 32 0 0 1 31.808 28.8L886.4 512h-64.384l-16-160H704v96a32 32 0 1 1-64 0v-96H384v96a32 32 0 0 1-64 0v-96H217.92l-51.2 512H512v64H131.328a32 32 0 0 1-31.808-35.2l57.6-576a32 32 0 0 1 31.808-28.8H320v-22.336C320 154.688 405.504 64 512 64s192 90.688 192 201.664v22.4zm-64 0v-22.336C640 189.248 582.272 128 512 128c-70.272 0-128 61.248-128 137.664v22.4h256zm201.408 476.16a32 32 0 1 1 45.248 45.184l-128 128a32 32 0 0 1-45.248 0l-128-128a32 32 0 1 1 45.248-45.248L704 837.504V608a32 32 0 1 1 64 0v229.504l73.408-73.408z"})]))}});var o9=e9;var t9=o(e()),Uo=o(e()),r9=(0,t9.defineComponent)({name:"SortDown",__name:"sort-down",setup(t){return(r,a)=>((0,Uo.openBlock)(),(0,Uo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Uo.createElementVNode)("path",{fill:"currentColor",d:"M576 96v709.568L333.312 562.816A32 32 0 1 0 288 608l297.408 297.344A32 32 0 0 0 640 882.688V96a32 32 0 0 0-64 0"})]))}});var a9=r9;var n9=o(e()),Wo=o(e()),m9=(0,n9.defineComponent)({name:"SortUp",__name:"sort-up",setup(t){return(r,a)=>((0,Wo.openBlock)(),(0,Wo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Wo.createElementVNode)("path",{fill:"currentColor",d:"M384 141.248V928a32 32 0 1 0 64 0V218.56l242.688 242.688A32 32 0 1 0 736 416L438.592 118.656A32 32 0 0 0 384 141.248"})]))}});var l9=m9;var p9=o(e()),Io=o(e()),c9=(0,p9.defineComponent)({name:"Sort",__name:"sort",setup(t){return(r,a)=>((0,Io.openBlock)(),(0,Io.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Io.createElementVNode)("path",{fill:"currentColor",d:"M384 96a32 32 0 0 1 64 0v786.752a32 32 0 0 1-54.592 22.656L95.936 608a32 32 0 0 1 0-45.312h.128a32 32 0 0 1 45.184 0L384 805.632zm192 45.248a32 32 0 0 1 54.592-22.592L928.064 416a32 32 0 0 1 0 45.312h-.128a32 32 0 0 1-45.184 0L640 218.496V928a32 32 0 1 1-64 0V141.248z"})]))}});var f9=c9;var s9=o(e()),Zo=o(e()),_9=(0,s9.defineComponent)({name:"Stamp",__name:"stamp",setup(t){return(r,a)=>((0,Zo.openBlock)(),(0,Zo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Zo.createElementVNode)("path",{fill:"currentColor",d:"M624 475.968V640h144a128 128 0 0 1 128 128H128a128 128 0 0 1 128-128h144V475.968a192 192 0 1 1 224 0M128 896v-64h768v64z"})]))}});var i9=_9;var d9=o(e()),Ko=o(e()),u9=(0,d9.defineComponent)({name:"StarFilled",__name:"star-filled",setup(t){return(r,a)=>((0,Ko.openBlock)(),(0,Ko.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ko.createElementVNode)("path",{fill:"currentColor",d:"M283.84 867.84 512 747.776l228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72z"})]))}});var x9=u9;var h9=o(e()),Qo=o(e()),v9=(0,h9.defineComponent)({name:"Star",__name:"star",setup(t){return(r,a)=>((0,Qo.openBlock)(),(0,Qo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Qo.createElementVNode)("path",{fill:"currentColor",d:"m512 747.84 228.16 119.936a6.4 6.4 0 0 0 9.28-6.72l-43.52-254.08 184.512-179.904a6.4 6.4 0 0 0-3.52-10.88l-255.104-37.12L517.76 147.904a6.4 6.4 0 0 0-11.52 0L392.192 379.072l-255.104 37.12a6.4 6.4 0 0 0-3.52 10.88L318.08 606.976l-43.584 254.08a6.4 6.4 0 0 0 9.28 6.72zM313.6 924.48a70.4 70.4 0 0 1-102.144-74.24l37.888-220.928L88.96 472.96A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 126.208 0l99.2 200.96 221.824 32.256a70.4 70.4 0 0 1 39.04 120.064L774.72 629.376l37.888 220.928a70.4 70.4 0 0 1-102.144 74.24L512 820.096l-198.4 104.32z"})]))}});var w9=v9;var B9=o(e()),Ne=o(e()),k9=(0,B9.defineComponent)({name:"Stopwatch",__name:"stopwatch",setup(t){return(r,a)=>((0,Ne.openBlock)(),(0,Ne.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Ne.createElementVNode)("path",{fill:"currentColor",d:"M512 896a384 384 0 1 0 0-768 384 384 0 0 0 0 768m0 64a448 448 0 1 1 0-896 448 448 0 0 1 0 896"}),(0,Ne.createElementVNode)("path",{fill:"currentColor",d:"M672 234.88c-39.168 174.464-80 298.624-122.688 372.48-64 110.848-202.624 30.848-138.624-80C453.376 453.44 540.48 355.968 672 234.816z"})]))}});var C9=k9;var E9=o(e()),jo=o(e()),V9=(0,E9.defineComponent)({name:"SuccessFilled",__name:"success-filled",setup(t){return(r,a)=>((0,jo.openBlock)(),(0,jo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,jo.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m-55.808 536.384-99.52-99.584a38.4 38.4 0 1 0-54.336 54.336l126.72 126.72a38.272 38.272 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}});var g9=V9;var z9=o(e()),Jo=o(e()),y9=(0,z9.defineComponent)({name:"Sugar",__name:"sugar",setup(t){return(r,a)=>((0,Jo.openBlock)(),(0,Jo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Jo.createElementVNode)("path",{fill:"currentColor",d:"m801.728 349.184 4.48 4.48a128 128 0 0 1 0 180.992L534.656 806.144a128 128 0 0 1-181.056 0l-4.48-4.48-19.392 109.696a64 64 0 0 1-108.288 34.176L78.464 802.56a64 64 0 0 1 34.176-108.288l109.76-19.328-4.544-4.544a128 128 0 0 1 0-181.056l271.488-271.488a128 128 0 0 1 181.056 0l4.48 4.48 19.392-109.504a64 64 0 0 1 108.352-34.048l142.592 143.04a64 64 0 0 1-34.24 108.16l-109.248 19.2zm-548.8 198.72h447.168v2.24l60.8-60.8a63.808 63.808 0 0 0 18.752-44.416h-426.88l-89.664 89.728a64.064 64.064 0 0 0-10.24 13.248zm0 64c2.752 4.736 6.144 9.152 10.176 13.248l135.744 135.744a64 64 0 0 0 90.496 0L638.4 611.904zm490.048-230.976L625.152 263.104a64 64 0 0 0-90.496 0L416.768 380.928zM123.712 757.312l142.976 142.976 24.32-137.6a25.6 25.6 0 0 0-29.696-29.632l-137.6 24.256zm633.6-633.344-24.32 137.472a25.6 25.6 0 0 0 29.632 29.632l137.28-24.064-142.656-143.04z"})]))}});var M9=y9;var N9=o(e()),Xo=o(e()),H9=(0,N9.defineComponent)({name:"SuitcaseLine",__name:"suitcase-line",setup(t){return(r,a)=>((0,Xo.openBlock)(),(0,Xo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[(0,Xo.createElementVNode)("path",{fill:"currentColor",d:"M922.5 229.5c-24.32-24.34-54.49-36.84-90.5-37.5H704v-64c-.68-17.98-7.02-32.98-19.01-44.99S658.01 64.66 640 64H384c-17.98.68-32.98 7.02-44.99 19.01S320.66 110 320 128v64H192c-35.99.68-66.16 13.18-90.5 37.5C77.16 253.82 64.66 283.99 64 320v448c.68 35.99 13.18 66.16 37.5 90.5s54.49 36.84 90.5 37.5h640c35.99-.68 66.16-13.18 90.5-37.5s36.84-54.49 37.5-90.5V320c-.68-35.99-13.18-66.16-37.5-90.5M384 128h256v64H384zM256 832h-64c-17.98-.68-32.98-7.02-44.99-19.01S128.66 786.01 128 768V448h128zm448 0H320V448h384zm192-64c-.68 17.98-7.02 32.98-19.01 44.99S850.01 831.34 832 832h-64V448h128zm0-384H128v-64c.69-17.98 7.02-32.98 19.01-44.99S173.99 256.66 192 256h640c17.98.69 32.98 7.02 44.99 19.01S895.34 301.99 896 320z"})]))}});var L9=H9;var A9=o(e()),He=o(e()),S9=(0,A9.defineComponent)({name:"Suitcase",__name:"suitcase",setup(t){return(r,a)=>((0,He.openBlock)(),(0,He.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,He.createElementVNode)("path",{fill:"currentColor",d:"M128 384h768v-64a64 64 0 0 0-64-64H192a64 64 0 0 0-64 64zm0 64v320a64 64 0 0 0 64 64h640a64 64 0 0 0 64-64V448zm64-256h640a128 128 0 0 1 128 128v448a128 128 0 0 1-128 128H192A128 128 0 0 1 64 768V320a128 128 0 0 1 128-128"}),(0,He.createElementVNode)("path",{fill:"currentColor",d:"M384 128v64h256v-64zm0-64h256a64 64 0 0 1 64 64v64a64 64 0 0 1-64 64H384a64 64 0 0 1-64-64v-64a64 64 0 0 1 64-64"})]))}});var q9=S9;var F9=o(e()),Yo=o(e()),b9=(0,F9.defineComponent)({name:"Sunny",__name:"sunny",setup(t){return(r,a)=>((0,Yo.openBlock)(),(0,Yo.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Yo.createElementVNode)("path",{fill:"currentColor",d:"M512 704a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512m0-704a32 32 0 0 1 32 32v64a32 32 0 0 1-64 0V96a32 32 0 0 1 32-32m0 768a32 32 0 0 1 32 32v64a32 32 0 1 1-64 0v-64a32 32 0 0 1 32-32M195.2 195.2a32 32 0 0 1 45.248 0l45.248 45.248a32 32 0 1 1-45.248 45.248L195.2 240.448a32 32 0 0 1 0-45.248zm543.104 543.104a32 32 0 0 1 45.248 0l45.248 45.248a32 32 0 0 1-45.248 45.248l-45.248-45.248a32 32 0 0 1 0-45.248M64 512a32 32 0 0 1 32-32h64a32 32 0 0 1 0 64H96a32 32 0 0 1-32-32m768 0a32 32 0 0 1 32-32h64a32 32 0 1 1 0 64h-64a32 32 0 0 1-32-32M195.2 828.8a32 32 0 0 1 0-45.248l45.248-45.248a32 32 0 0 1 45.248 45.248L240.448 828.8a32 32 0 0 1-45.248 0zm543.104-543.104a32 32 0 0 1 0-45.248l45.248-45.248a32 32 0 0 1 45.248 45.248l-45.248 45.248a32 32 0 0 1-45.248 0"})]))}});var D9=b9;var P9=o(e()),$o=o(e()),R9=(0,P9.defineComponent)({name:"Sunrise",__name:"sunrise",setup(t){return(r,a)=>((0,$o.openBlock)(),(0,$o.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,$o.createElementVNode)("path",{fill:"currentColor",d:"M32 768h960a32 32 0 1 1 0 64H32a32 32 0 1 1 0-64m129.408-96a352 352 0 0 1 701.184 0h-64.32a288 288 0 0 0-572.544 0h-64.32zM512 128a32 32 0 0 1 32 32v96a32 32 0 0 1-64 0v-96a32 32 0 0 1 32-32m407.296 168.704a32 32 0 0 1 0 45.248l-67.84 67.84a32 32 0 1 1-45.248-45.248l67.84-67.84a32 32 0 0 1 45.248 0zm-814.592 0a32 32 0 0 1 45.248 0l67.84 67.84a32 32 0 1 1-45.248 45.248l-67.84-67.84a32 32 0 0 1 0-45.248"})]))}});var T9=R9;var O9=o(e()),e1=o(e()),G9=(0,O9.defineComponent)({name:"Sunset",__name:"sunset",setup(t){return(r,a)=>((0,e1.openBlock)(),(0,e1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,e1.createElementVNode)("path",{fill:"currentColor",d:"M82.56 640a448 448 0 1 1 858.88 0h-67.2a384 384 0 1 0-724.288 0zM32 704h960q32 0 32 32t-32 32H32q-32 0-32-32t32-32m256 128h448q32 0 32 32t-32 32H288q-32 0-32-32t32-32"})]))}});var U9=G9;var W9=o(e()),Le=o(e()),I9=(0,W9.defineComponent)({name:"SwitchButton",__name:"switch-button",setup(t){return(r,a)=>((0,Le.openBlock)(),(0,Le.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Le.createElementVNode)("path",{fill:"currentColor",d:"M352 159.872V230.4a352 352 0 1 0 320 0v-70.528A416.128 416.128 0 0 1 512 960a416 416 0 0 1-160-800.128z"}),(0,Le.createElementVNode)("path",{fill:"currentColor",d:"M512 64q32 0 32 32v320q0 32-32 32t-32-32V96q0-32 32-32"})]))}});var Z9=I9;var K9=o(e()),Ae=o(e()),Q9=(0,K9.defineComponent)({name:"SwitchFilled",__name:"switch-filled",setup(t){return(r,a)=>((0,Ae.openBlock)(),(0,Ae.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[(0,Ae.createElementVNode)("path",{fill:"currentColor",d:"M247.47 358.4v.04c.07 19.17 7.72 37.53 21.27 51.09s31.92 21.2 51.09 21.27c39.86 0 72.41-32.6 72.41-72.4s-32.6-72.36-72.41-72.36-72.36 32.55-72.36 72.36z"}),(0,Ae.createElementVNode)("path",{fill:"currentColor",d:"M492.38 128H324.7c-52.16 0-102.19 20.73-139.08 57.61a196.655 196.655 0 0 0-57.61 139.08V698.7c-.01 25.84 5.08 51.42 14.96 75.29s24.36 45.56 42.63 63.83 39.95 32.76 63.82 42.65a196.67 196.67 0 0 0 75.28 14.98h167.68c3.03 0 5.46-2.43 5.46-5.42V133.42c.6-2.99-1.83-5.42-5.46-5.42zm-56.11 705.88H324.7c-17.76.13-35.36-3.33-51.75-10.18s-31.22-16.94-43.61-29.67c-25.3-25.35-39.81-59.1-39.81-95.32V324.69c-.13-17.75 3.33-35.35 10.17-51.74a131.695 131.695 0 0 1 29.64-43.62c25.39-25.3 59.14-39.81 95.36-39.81h111.57zm402.12-647.67a196.655 196.655 0 0 0-139.08-57.61H580.48c-3.03 0-4.82 2.43-4.82 4.82v757.16c-.6 2.99 1.79 5.42 5.42 5.42h118.23a196.69 196.69 0 0 0 139.08-57.61A196.655 196.655 0 0 0 896 699.31V325.29a196.69 196.69 0 0 0-57.61-139.08zm-111.3 441.92c-42.83 0-77.82-34.99-77.82-77.82s34.98-77.82 77.82-77.82c42.83 0 77.82 34.99 77.82 77.82s-34.99 77.82-77.82 77.82z"})]))}});var j9=Q9;var J9=o(e()),o1=o(e()),X9=(0,J9.defineComponent)({name:"Switch",__name:"switch",setup(t){return(r,a)=>((0,o1.openBlock)(),(0,o1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,o1.createElementVNode)("path",{fill:"currentColor",d:"M118.656 438.656a32 32 0 0 1 0-45.248L416 96l4.48-3.776A32 32 0 0 1 461.248 96l3.712 4.48a32.064 32.064 0 0 1-3.712 40.832L218.56 384H928a32 32 0 1 1 0 64H141.248a32 32 0 0 1-22.592-9.344zM64 608a32 32 0 0 1 32-32h786.752a32 32 0 0 1 22.656 54.592L608 928l-4.48 3.776a32.064 32.064 0 0 1-40.832-49.024L805.632 640H96a32 32 0 0 1-32-32"})]))}});var Y9=X9;var $9=o(e()),t1=o(e()),ef=(0,$9.defineComponent)({name:"TakeawayBox",__name:"takeaway-box",setup(t){return(r,a)=>((0,t1.openBlock)(),(0,t1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,t1.createElementVNode)("path",{fill:"currentColor",d:"M832 384H192v448h640zM96 320h832V128H96zm800 64v480a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V384H64a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h896a32 32 0 0 1 32 32v256a32 32 0 0 1-32 32zM416 512h192a32 32 0 0 1 0 64H416a32 32 0 0 1 0-64"})]))}});var of=ef;var tf=o(e()),r1=o(e()),rf=(0,tf.defineComponent)({name:"Ticket",__name:"ticket",setup(t){return(r,a)=>((0,r1.openBlock)(),(0,r1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,r1.createElementVNode)("path",{fill:"currentColor",d:"M640 832H64V640a128 128 0 1 0 0-256V192h576v160h64V192h256v192a128 128 0 1 0 0 256v192H704V672h-64zm0-416v192h64V416z"})]))}});var af=rf;var nf=o(e()),a1=o(e()),mf=(0,nf.defineComponent)({name:"Tickets",__name:"tickets",setup(t){return(r,a)=>((0,a1.openBlock)(),(0,a1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,a1.createElementVNode)("path",{fill:"currentColor",d:"M192 128v768h640V128zm-32-64h704a32 32 0 0 1 32 32v832a32 32 0 0 1-32 32H160a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32m160 448h384v64H320zm0-192h192v64H320zm0 384h384v64H320z"})]))}});var lf=mf;var pf=o(e()),y=o(e()),cf=(0,pf.defineComponent)({name:"Timer",__name:"timer",setup(t){return(r,a)=>((0,y.openBlock)(),(0,y.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,y.createElementVNode)("path",{fill:"currentColor",d:"M512 896a320 320 0 1 0 0-640 320 320 0 0 0 0 640m0 64a384 384 0 1 1 0-768 384 384 0 0 1 0 768"}),(0,y.createElementVNode)("path",{fill:"currentColor",d:"M512 320a32 32 0 0 1 32 32l-.512 224a32 32 0 1 1-64 0L480 352a32 32 0 0 1 32-32"}),(0,y.createElementVNode)("path",{fill:"currentColor",d:"M448 576a64 64 0 1 0 128 0 64 64 0 1 0-128 0m96-448v128h-64V128h-96a32 32 0 0 1 0-64h256a32 32 0 1 1 0 64z"})]))}});var ff=cf;var sf=o(e()),Se=o(e()),_f=(0,sf.defineComponent)({name:"ToiletPaper",__name:"toilet-paper",setup(t){return(r,a)=>((0,Se.openBlock)(),(0,Se.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Se.createElementVNode)("path",{fill:"currentColor",d:"M595.2 128H320a192 192 0 0 0-192 192v576h384V352c0-90.496 32.448-171.2 83.2-224M736 64c123.712 0 224 128.96 224 288S859.712 640 736 640H576v320H64V320A256 256 0 0 1 320 64zM576 352v224h160c84.352 0 160-97.28 160-224s-75.648-224-160-224-160 97.28-160 224"}),(0,Se.createElementVNode)("path",{fill:"currentColor",d:"M736 448c-35.328 0-64-43.008-64-96s28.672-96 64-96 64 43.008 64 96-28.672 96-64 96"})]))}});var df=_f;var uf=o(e()),n1=o(e()),xf=(0,uf.defineComponent)({name:"Tools",__name:"tools",setup(t){return(r,a)=>((0,n1.openBlock)(),(0,n1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,n1.createElementVNode)("path",{fill:"currentColor",d:"M764.416 254.72a351.68 351.68 0 0 1 86.336 149.184H960v192.064H850.752a351.68 351.68 0 0 1-86.336 149.312l54.72 94.72-166.272 96-54.592-94.72a352.64 352.64 0 0 1-172.48 0L371.136 936l-166.272-96 54.72-94.72a351.68 351.68 0 0 1-86.336-149.312H64v-192h109.248a351.68 351.68 0 0 1 86.336-149.312L204.8 160l166.208-96h.192l54.656 94.592a352.64 352.64 0 0 1 172.48 0L652.8 64h.128L819.2 160l-54.72 94.72zM704 499.968a192 192 0 1 0-384 0 192 192 0 0 0 384 0"})]))}});var hf=xf;var vf=o(e()),qe=o(e()),wf=(0,vf.defineComponent)({name:"TopLeft",__name:"top-left",setup(t){return(r,a)=>((0,qe.openBlock)(),(0,qe.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,qe.createElementVNode)("path",{fill:"currentColor",d:"M256 256h416a32 32 0 1 0 0-64H224a32 32 0 0 0-32 32v448a32 32 0 0 0 64 0z"}),(0,qe.createElementVNode)("path",{fill:"currentColor",d:"M246.656 201.344a32 32 0 0 0-45.312 45.312l544 544a32 32 0 0 0 45.312-45.312l-544-544z"})]))}});var Bf=wf;var kf=o(e()),Fe=o(e()),Cf=(0,kf.defineComponent)({name:"TopRight",__name:"top-right",setup(t){return(r,a)=>((0,Fe.openBlock)(),(0,Fe.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,Fe.createElementVNode)("path",{fill:"currentColor",d:"M768 256H353.6a32 32 0 1 1 0-64H800a32 32 0 0 1 32 32v448a32 32 0 0 1-64 0z"}),(0,Fe.createElementVNode)("path",{fill:"currentColor",d:"M777.344 201.344a32 32 0 0 1 45.312 45.312l-544 544a32 32 0 0 1-45.312-45.312l544-544z"})]))}});var Ef=Cf;var Vf=o(e()),m1=o(e()),gf=(0,Vf.defineComponent)({name:"Top",__name:"top",setup(t){return(r,a)=>((0,m1.openBlock)(),(0,m1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,m1.createElementVNode)("path",{fill:"currentColor",d:"M572.235 205.282v600.365a30.118 30.118 0 1 1-60.235 0V205.282L292.382 438.633a28.913 28.913 0 0 1-42.646 0 33.43 33.43 0 0 1 0-45.236l271.058-288.045a28.913 28.913 0 0 1 42.647 0L834.5 393.397a33.43 33.43 0 0 1 0 45.176 28.913 28.913 0 0 1-42.647 0l-219.618-233.23z"})]))}});var zf=gf;var yf=o(e()),l1=o(e()),Mf=(0,yf.defineComponent)({name:"TrendCharts",__name:"trend-charts",setup(t){return(r,a)=>((0,l1.openBlock)(),(0,l1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,l1.createElementVNode)("path",{fill:"currentColor",d:"M128 896V128h768v768zm291.712-327.296 128 102.4 180.16-201.792-47.744-42.624-139.84 156.608-128-102.4-180.16 201.792 47.744 42.624 139.84-156.608zM816 352a48 48 0 1 0-96 0 48 48 0 0 0 96 0"})]))}});var Nf=Mf;var Hf=o(e()),p1=o(e()),Lf=(0,Hf.defineComponent)({name:"TrophyBase",__name:"trophy-base",setup(t){return(r,a)=>((0,p1.openBlock)(),(0,p1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[(0,p1.createElementVNode)("path",{fill:"currentColor",d:"M918.4 201.6c-6.4-6.4-12.8-9.6-22.4-9.6H768V96c0-9.6-3.2-16-9.6-22.4C752 67.2 745.6 64 736 64H288c-9.6 0-16 3.2-22.4 9.6C259.2 80 256 86.4 256 96v96H128c-9.6 0-16 3.2-22.4 9.6-6.4 6.4-9.6 16-9.6 22.4 3.2 108.8 25.6 185.6 64 224 34.4 34.4 77.56 55.65 127.65 61.99 10.91 20.44 24.78 39.25 41.95 56.41 40.86 40.86 91 65.47 150.4 71.9V768h-96c-9.6 0-16 3.2-22.4 9.6-6.4 6.4-9.6 12.8-9.6 22.4s3.2 16 9.6 22.4c6.4 6.4 12.8 9.6 22.4 9.6h256c9.6 0 16-3.2 22.4-9.6 6.4-6.4 9.6-12.8 9.6-22.4s-3.2-16-9.6-22.4c-6.4-6.4-12.8-9.6-22.4-9.6h-96V637.26c59.4-7.71 109.54-30.01 150.4-70.86 17.2-17.2 31.51-36.06 42.81-56.55 48.93-6.51 90.02-27.7 126.79-61.85 38.4-38.4 60.8-112 64-224 0-6.4-3.2-16-9.6-22.4zM256 438.4c-19.2-6.4-35.2-19.2-51.2-35.2-22.4-22.4-35.2-70.4-41.6-147.2H256zm390.4 80C608 553.6 566.4 576 512 576s-99.2-19.2-134.4-57.6C342.4 480 320 438.4 320 384V128h384v256c0 54.4-19.2 99.2-57.6 134.4m172.8-115.2c-16 16-32 25.6-51.2 35.2V256h92.8c-6.4 76.8-19.2 124.8-41.6 147.2zM768 896H256c-9.6 0-16 3.2-22.4 9.6-6.4 6.4-9.6 12.8-9.6 22.4s3.2 16 9.6 22.4c6.4 6.4 12.8 9.6 22.4 9.6h512c9.6 0 16-3.2 22.4-9.6 6.4-6.4 9.6-12.8 9.6-22.4s-3.2-16-9.6-22.4c-6.4-6.4-12.8-9.6-22.4-9.6"})]))}});var Af=Lf;var Sf=o(e()),c1=o(e()),qf=(0,Sf.defineComponent)({name:"Trophy",__name:"trophy",setup(t){return(r,a)=>((0,c1.openBlock)(),(0,c1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,c1.createElementVNode)("path",{fill:"currentColor",d:"M480 896V702.08A256.256 256.256 0 0 1 264.064 512h-32.64a96 96 0 0 1-91.968-68.416L93.632 290.88a76.8 76.8 0 0 1 73.6-98.88H256V96a32 32 0 0 1 32-32h448a32 32 0 0 1 32 32v96h88.768a76.8 76.8 0 0 1 73.6 98.88L884.48 443.52A96 96 0 0 1 792.576 512h-32.64A256.256 256.256 0 0 1 544 702.08V896h128a32 32 0 1 1 0 64H352a32 32 0 1 1 0-64zm224-448V128H320v320a192 192 0 1 0 384 0m64 0h24.576a32 32 0 0 0 30.656-22.784l45.824-152.768A12.8 12.8 0 0 0 856.768 256H768zm-512 0V256h-88.768a12.8 12.8 0 0 0-12.288 16.448l45.824 152.768A32 32 0 0 0 231.424 448z"})]))}});var Ff=qf;var bf=o(e()),be=o(e()),Df=(0,bf.defineComponent)({name:"TurnOff",__name:"turn-off",setup(t){return(r,a)=>((0,be.openBlock)(),(0,be.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,be.createElementVNode)("path",{fill:"currentColor",d:"M329.956 257.138a254.862 254.862 0 0 0 0 509.724h364.088a254.862 254.862 0 0 0 0-509.724zm0-72.818h364.088a327.68 327.68 0 1 1 0 655.36H329.956a327.68 327.68 0 1 1 0-655.36z"}),(0,be.createElementVNode)("path",{fill:"currentColor",d:"M329.956 621.227a109.227 109.227 0 1 0 0-218.454 109.227 109.227 0 0 0 0 218.454m0 72.817a182.044 182.044 0 1 1 0-364.088 182.044 182.044 0 0 1 0 364.088"})]))}});var Pf=Df;var Rf=o(e()),f1=o(e()),Tf=(0,Rf.defineComponent)({name:"Umbrella",__name:"umbrella",setup(t){return(r,a)=>((0,f1.openBlock)(),(0,f1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,f1.createElementVNode)("path",{fill:"currentColor",d:"M320 768a32 32 0 1 1 64 0 64 64 0 0 0 128 0V512H64a448 448 0 1 1 896 0H576v256a128 128 0 1 1-256 0m570.688-320a384.128 384.128 0 0 0-757.376 0z"})]))}});var Of=Tf;var Gf=o(e()),De=o(e()),Uf=(0,Gf.defineComponent)({name:"Unlock",__name:"unlock",setup(t){return(r,a)=>((0,De.openBlock)(),(0,De.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,De.createElementVNode)("path",{fill:"currentColor",d:"M224 448a32 32 0 0 0-32 32v384a32 32 0 0 0 32 32h576a32 32 0 0 0 32-32V480a32 32 0 0 0-32-32zm0-64h576a96 96 0 0 1 96 96v384a96 96 0 0 1-96 96H224a96 96 0 0 1-96-96V480a96 96 0 0 1 96-96"}),(0,De.createElementVNode)("path",{fill:"currentColor",d:"M512 544a32 32 0 0 1 32 32v192a32 32 0 1 1-64 0V576a32 32 0 0 1 32-32m178.304-295.296A192.064 192.064 0 0 0 320 320v64h352l96 38.4V448H256V320a256 256 0 0 1 493.76-95.104z"})]))}});var Wf=Uf;var If=o(e()),s1=o(e()),Zf=(0,If.defineComponent)({name:"UploadFilled",__name:"upload-filled",setup(t){return(r,a)=>((0,s1.openBlock)(),(0,s1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,s1.createElementVNode)("path",{fill:"currentColor",d:"M544 864V672h128L512 480 352 672h128v192H320v-1.6c-5.376.32-10.496 1.6-16 1.6A240 240 0 0 1 64 624c0-123.136 93.12-223.488 212.608-237.248A239.808 239.808 0 0 1 512 192a239.872 239.872 0 0 1 235.456 194.752c119.488 13.76 212.48 114.112 212.48 237.248a240 240 0 0 1-240 240c-5.376 0-10.56-1.28-16-1.6v1.6z"})]))}});var Kf=Zf;var Qf=o(e()),_1=o(e()),jf=(0,Qf.defineComponent)({name:"Upload",__name:"upload",setup(t){return(r,a)=>((0,_1.openBlock)(),(0,_1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,_1.createElementVNode)("path",{fill:"currentColor",d:"M160 832h704a32 32 0 1 1 0 64H160a32 32 0 1 1 0-64m384-578.304V704h-64V247.296L237.248 490.048 192 444.8 508.8 128l316.8 316.8-45.312 45.248z"})]))}});var Jf=jf;var Xf=o(e()),i1=o(e()),Yf=(0,Xf.defineComponent)({name:"UserFilled",__name:"user-filled",setup(t){return(r,a)=>((0,i1.openBlock)(),(0,i1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,i1.createElementVNode)("path",{fill:"currentColor",d:"M288 320a224 224 0 1 0 448 0 224 224 0 1 0-448 0m544 608H160a32 32 0 0 1-32-32v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 0 1-32 32z"})]))}});var $f=Yf;var es=o(e()),d1=o(e()),os=(0,es.defineComponent)({name:"User",__name:"user",setup(t){return(r,a)=>((0,d1.openBlock)(),(0,d1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,d1.createElementVNode)("path",{fill:"currentColor",d:"M512 512a192 192 0 1 0 0-384 192 192 0 0 0 0 384m0 64a256 256 0 1 1 0-512 256 256 0 0 1 0 512m320 320v-96a96 96 0 0 0-96-96H288a96 96 0 0 0-96 96v96a32 32 0 1 1-64 0v-96a160 160 0 0 1 160-160h448a160 160 0 0 1 160 160v96a32 32 0 1 1-64 0"})]))}});var ts=os;var rs=o(e()),u1=o(e()),as=(0,rs.defineComponent)({name:"Van",__name:"van",setup(t){return(r,a)=>((0,u1.openBlock)(),(0,u1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,u1.createElementVNode)("path",{fill:"currentColor",d:"M128.896 736H96a32 32 0 0 1-32-32V224a32 32 0 0 1 32-32h576a32 32 0 0 1 32 32v96h164.544a32 32 0 0 1 31.616 27.136l54.144 352A32 32 0 0 1 922.688 736h-91.52a144 144 0 1 1-286.272 0H415.104a144 144 0 1 1-286.272 0zm23.36-64a143.872 143.872 0 0 1 239.488 0H568.32c17.088-25.6 42.24-45.376 71.744-55.808V256H128v416zm655.488 0h77.632l-19.648-128H704v64.896A144 144 0 0 1 807.744 672m48.128-192-14.72-96H704v96h151.872M688 832a80 80 0 1 0 0-160 80 80 0 0 0 0 160m-416 0a80 80 0 1 0 0-160 80 80 0 0 0 0 160"})]))}});var ns=as;var ms=o(e()),x1=o(e()),ls=(0,ms.defineComponent)({name:"VideoCameraFilled",__name:"video-camera-filled",setup(t){return(r,a)=>((0,x1.openBlock)(),(0,x1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,x1.createElementVNode)("path",{fill:"currentColor",d:"m768 576 192-64v320l-192-64v96a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V480a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zM192 768v64h384v-64zm192-480a160 160 0 0 1 320 0 160 160 0 0 1-320 0m64 0a96 96 0 1 0 192.064-.064A96 96 0 0 0 448 288m-320 32a128 128 0 1 1 256.064.064A128 128 0 0 1 128 320m64 0a64 64 0 1 0 128 0 64 64 0 0 0-128 0"})]))}});var ps=ls;var cs=o(e()),h1=o(e()),fs=(0,cs.defineComponent)({name:"VideoCamera",__name:"video-camera",setup(t){return(r,a)=>((0,h1.openBlock)(),(0,h1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,h1.createElementVNode)("path",{fill:"currentColor",d:"M704 768V256H128v512zm64-416 192-96v512l-192-96v128a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V224a32 32 0 0 1 32-32h640a32 32 0 0 1 32 32zm0 71.552v176.896l128 64V359.552zM192 320h192v64H192z"})]))}});var ss=fs;var _s=o(e()),v1=o(e()),is=(0,_s.defineComponent)({name:"VideoPause",__name:"video-pause",setup(t){return(r,a)=>((0,v1.openBlock)(),(0,v1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,v1.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m-96-544q32 0 32 32v256q0 32-32 32t-32-32V384q0-32 32-32m192 0q32 0 32 32v256q0 32-32 32t-32-32V384q0-32 32-32"})]))}});var ds=is;var us=o(e()),w1=o(e()),xs=(0,us.defineComponent)({name:"VideoPlay",__name:"video-play",setup(t){return(r,a)=>((0,w1.openBlock)(),(0,w1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,w1.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m-48-247.616L668.608 512 464 375.616zm10.624-342.656 249.472 166.336a48 48 0 0 1 0 79.872L474.624 718.272A48 48 0 0 1 400 678.336V345.6a48 48 0 0 1 74.624-39.936z"})]))}});var hs=xs;var vs=o(e()),B1=o(e()),ws=(0,vs.defineComponent)({name:"View",__name:"view",setup(t){return(r,a)=>((0,B1.openBlock)(),(0,B1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,B1.createElementVNode)("path",{fill:"currentColor",d:"M512 160c320 0 512 352 512 352S832 864 512 864 0 512 0 512s192-352 512-352m0 64c-225.28 0-384.128 208.064-436.8 288 52.608 79.872 211.456 288 436.8 288 225.28 0 384.128-208.064 436.8-288-52.608-79.872-211.456-288-436.8-288zm0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.192 160.192 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}});var Bs=ws;var ks=o(e()),k1=o(e()),Cs=(0,ks.defineComponent)({name:"WalletFilled",__name:"wallet-filled",setup(t){return(r,a)=>((0,k1.openBlock)(),(0,k1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,k1.createElementVNode)("path",{fill:"currentColor",d:"M688 512a112 112 0 1 0 0 224h208v160H128V352h768v160zm32 160h-32a48 48 0 0 1 0-96h32a48 48 0 0 1 0 96m-80-544 128 160H384z"})]))}});var Es=Cs;var Vs=o(e()),M=o(e()),gs=(0,Vs.defineComponent)({name:"Wallet",__name:"wallet",setup(t){return(r,a)=>((0,M.openBlock)(),(0,M.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,M.createElementVNode)("path",{fill:"currentColor",d:"M640 288h-64V128H128v704h384v32a32 32 0 0 0 32 32H96a32 32 0 0 1-32-32V96a32 32 0 0 1 32-32h512a32 32 0 0 1 32 32z"}),(0,M.createElementVNode)("path",{fill:"currentColor",d:"M128 320v512h768V320zm-32-64h832a32 32 0 0 1 32 32v576a32 32 0 0 1-32 32H96a32 32 0 0 1-32-32V288a32 32 0 0 1 32-32"}),(0,M.createElementVNode)("path",{fill:"currentColor",d:"M704 640a64 64 0 1 1 0-128 64 64 0 0 1 0 128"})]))}});var zs=gs;var ys=o(e()),C1=o(e()),Ms=(0,ys.defineComponent)({name:"WarnTriangleFilled",__name:"warn-triangle-filled",setup(t){return(r,a)=>((0,C1.openBlock)(),(0,C1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg","xml:space":"preserve",style:{"enable-background":"new 0 0 1024 1024"},viewBox:"0 0 1024 1024"},[(0,C1.createElementVNode)("path",{fill:"currentColor",d:"M928.99 755.83 574.6 203.25c-12.89-20.16-36.76-32.58-62.6-32.58s-49.71 12.43-62.6 32.58L95.01 755.83c-12.91 20.12-12.9 44.91.01 65.03 12.92 20.12 36.78 32.51 62.59 32.49h708.78c25.82.01 49.68-12.37 62.59-32.49 12.91-20.12 12.92-44.91.01-65.03M554.67 768h-85.33v-85.33h85.33zm0-426.67v298.66h-85.33V341.32z"})]))}});var Ns=Ms;var Hs=o(e()),E1=o(e()),Ls=(0,Hs.defineComponent)({name:"WarningFilled",__name:"warning-filled",setup(t){return(r,a)=>((0,E1.openBlock)(),(0,E1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,E1.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.432 58.432 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.432 58.432 0 0 0 512 256m0 512a51.2 51.2 0 1 0 0-102.4 51.2 51.2 0 0 0 0 102.4"})]))}});var As=Ls;var Ss=o(e()),V1=o(e()),qs=(0,Ss.defineComponent)({name:"Warning",__name:"warning",setup(t){return(r,a)=>((0,V1.openBlock)(),(0,V1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,V1.createElementVNode)("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 832a384 384 0 0 0 0-768 384 384 0 0 0 0 768m48-176a48 48 0 1 1-96 0 48 48 0 0 1 96 0m-48-464a32 32 0 0 1 32 32v288a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"})]))}});var Fs=qs;var bs=o(e()),N=o(e()),Ds=(0,bs.defineComponent)({name:"Watch",__name:"watch",setup(t){return(r,a)=>((0,N.openBlock)(),(0,N.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,N.createElementVNode)("path",{fill:"currentColor",d:"M512 768a256 256 0 1 0 0-512 256 256 0 0 0 0 512m0 64a320 320 0 1 1 0-640 320 320 0 0 1 0 640"}),(0,N.createElementVNode)("path",{fill:"currentColor",d:"M480 352a32 32 0 0 1 32 32v160a32 32 0 0 1-64 0V384a32 32 0 0 1 32-32"}),(0,N.createElementVNode)("path",{fill:"currentColor",d:"M480 512h128q32 0 32 32t-32 32H480q-32 0-32-32t32-32m128-256V128H416v128h-64V64h320v192zM416 768v128h192V768h64v192H352V768z"})]))}});var Ps=Ds;var Rs=o(e()),g1=o(e()),Ts=(0,Rs.defineComponent)({name:"Watermelon",__name:"watermelon",setup(t){return(r,a)=>((0,g1.openBlock)(),(0,g1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,g1.createElementVNode)("path",{fill:"currentColor",d:"m683.072 600.32-43.648 162.816-61.824-16.512 53.248-198.528L576 493.248l-158.4 158.4-45.248-45.248 158.4-158.4-55.616-55.616-198.528 53.248-16.512-61.824 162.816-43.648L282.752 200A384 384 0 0 0 824 741.248zm231.552 141.056a448 448 0 1 1-632-632l632 632"})]))}});var Os=Ts;var Gs=o(e()),z1=o(e()),Us=(0,Gs.defineComponent)({name:"WindPower",__name:"wind-power",setup(t){return(r,a)=>((0,z1.openBlock)(),(0,z1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,z1.createElementVNode)("path",{fill:"currentColor",d:"M160 64q32 0 32 32v832q0 32-32 32t-32-32V96q0-32 32-32m416 354.624 128-11.584V168.96l-128-11.52v261.12zm-64 5.824V151.552L320 134.08V160h-64V64l616.704 56.064A96 96 0 0 1 960 215.68v144.64a96 96 0 0 1-87.296 95.616L256 512V224h64v217.92zm256-23.232 98.88-8.96A32 32 0 0 0 896 360.32V215.68a32 32 0 0 0-29.12-31.872l-98.88-8.96z"})]))}});var Ws=Us;var Is=o(e()),y1=o(e()),Zs=(0,Is.defineComponent)({name:"ZoomIn",__name:"zoom-in",setup(t){return(r,a)=>((0,y1.openBlock)(),(0,y1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,y1.createElementVNode)("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704m-32-384v-96a32 32 0 0 1 64 0v96h96a32 32 0 0 1 0 64h-96v96a32 32 0 0 1-64 0v-96h-96a32 32 0 0 1 0-64z"})]))}});var Ks=Zs;var Qs=o(e()),M1=o(e()),js=(0,Qs.defineComponent)({name:"ZoomOut",__name:"zoom-out",setup(t){return(r,a)=>((0,M1.openBlock)(),(0,M1.createElementBlock)("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[(0,M1.createElementVNode)("path",{fill:"currentColor",d:"m795.904 750.72 124.992 124.928a32 32 0 0 1-45.248 45.248L750.656 795.904a416 416 0 1 1 45.248-45.248zM480 832a352 352 0 1 0 0-704 352 352 0 0 0 0 704M352 448h256a32 32 0 0 1 0 64H352a32 32 0 0 1 0-64"})]))}});var Js=js;return a_(n_);})(); diff --git a/manager/static/js/vue3.5.13.js b/manager/static/js/vue3.5.13.js deleted file mode 100644 index ba3fbfb4..00000000 --- a/manager/static/js/vue3.5.13.js +++ /dev/null @@ -1,18096 +0,0 @@ -/** -* vue v3.5.13 -* (c) 2018-present Yuxi (Evan) You and Vue contributors -* @license MIT -**/ -var Vue = (function (exports) { - 'use strict'; - - /*! #__NO_SIDE_EFFECTS__ */ - // @__NO_SIDE_EFFECTS__ - function makeMap(str) { - const map = /* @__PURE__ */ Object.create(null); - for (const key of str.split(",")) map[key] = 1; - return (val) => val in map; - } - - const EMPTY_OBJ = Object.freeze({}) ; - const EMPTY_ARR = Object.freeze([]) ; - const NOOP = () => { - }; - const NO = () => false; - const isOn = (key) => key.charCodeAt(0) === 111 && key.charCodeAt(1) === 110 && // uppercase letter - (key.charCodeAt(2) > 122 || key.charCodeAt(2) < 97); - const isModelListener = (key) => key.startsWith("onUpdate:"); - const extend = Object.assign; - const remove = (arr, el) => { - const i = arr.indexOf(el); - if (i > -1) { - arr.splice(i, 1); - } - }; - const hasOwnProperty$1 = Object.prototype.hasOwnProperty; - const hasOwn = (val, key) => hasOwnProperty$1.call(val, key); - const isArray = Array.isArray; - const isMap = (val) => toTypeString(val) === "[object Map]"; - const isSet = (val) => toTypeString(val) === "[object Set]"; - const isDate = (val) => toTypeString(val) === "[object Date]"; - const isRegExp = (val) => toTypeString(val) === "[object RegExp]"; - const isFunction = (val) => typeof val === "function"; - const isString = (val) => typeof val === "string"; - const isSymbol = (val) => typeof val === "symbol"; - const isObject = (val) => val !== null && typeof val === "object"; - const isPromise = (val) => { - return (isObject(val) || isFunction(val)) && isFunction(val.then) && isFunction(val.catch); - }; - const objectToString = Object.prototype.toString; - const toTypeString = (value) => objectToString.call(value); - const toRawType = (value) => { - return toTypeString(value).slice(8, -1); - }; - const isPlainObject = (val) => toTypeString(val) === "[object Object]"; - const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key; - const isReservedProp = /* @__PURE__ */ makeMap( - // the leading comma is intentional so empty string "" is also included - ",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted" - ); - const isBuiltInDirective = /* @__PURE__ */ makeMap( - "bind,cloak,else-if,else,for,html,if,model,on,once,pre,show,slot,text,memo" - ); - const cacheStringFunction = (fn) => { - const cache = /* @__PURE__ */ Object.create(null); - return (str) => { - const hit = cache[str]; - return hit || (cache[str] = fn(str)); - }; - }; - const camelizeRE = /-(\w)/g; - const camelize = cacheStringFunction( - (str) => { - return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : ""); - } - ); - const hyphenateRE = /\B([A-Z])/g; - const hyphenate = cacheStringFunction( - (str) => str.replace(hyphenateRE, "-$1").toLowerCase() - ); - const capitalize = cacheStringFunction((str) => { - return str.charAt(0).toUpperCase() + str.slice(1); - }); - const toHandlerKey = cacheStringFunction( - (str) => { - const s = str ? `on${capitalize(str)}` : ``; - return s; - } - ); - const hasChanged = (value, oldValue) => !Object.is(value, oldValue); - const invokeArrayFns = (fns, ...arg) => { - for (let i = 0; i < fns.length; i++) { - fns[i](...arg); - } - }; - const def = (obj, key, value, writable = false) => { - Object.defineProperty(obj, key, { - configurable: true, - enumerable: false, - writable, - value - }); - }; - const looseToNumber = (val) => { - const n = parseFloat(val); - return isNaN(n) ? val : n; - }; - const toNumber = (val) => { - const n = isString(val) ? Number(val) : NaN; - return isNaN(n) ? val : n; - }; - let _globalThis; - const getGlobalThis = () => { - return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {}); - }; - function genCacheKey(source, options) { - return source + JSON.stringify( - options, - (_, val) => typeof val === "function" ? val.toString() : val - ); - } - - const PatchFlagNames = { - [1]: `TEXT`, - [2]: `CLASS`, - [4]: `STYLE`, - [8]: `PROPS`, - [16]: `FULL_PROPS`, - [32]: `NEED_HYDRATION`, - [64]: `STABLE_FRAGMENT`, - [128]: `KEYED_FRAGMENT`, - [256]: `UNKEYED_FRAGMENT`, - [512]: `NEED_PATCH`, - [1024]: `DYNAMIC_SLOTS`, - [2048]: `DEV_ROOT_FRAGMENT`, - [-1]: `HOISTED`, - [-2]: `BAIL` - }; - - const slotFlagsText = { - [1]: "STABLE", - [2]: "DYNAMIC", - [3]: "FORWARDED" - }; - - const GLOBALS_ALLOWED = "Infinity,undefined,NaN,isFinite,isNaN,parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,console,Error,Symbol"; - const isGloballyAllowed = /* @__PURE__ */ makeMap(GLOBALS_ALLOWED); - - const range = 2; - function generateCodeFrame(source, start = 0, end = source.length) { - start = Math.max(0, Math.min(start, source.length)); - end = Math.max(0, Math.min(end, source.length)); - if (start > end) return ""; - let lines = source.split(/(\r?\n)/); - const newlineSequences = lines.filter((_, idx) => idx % 2 === 1); - lines = lines.filter((_, idx) => idx % 2 === 0); - let count = 0; - const res = []; - for (let i = 0; i < lines.length; i++) { - count += lines[i].length + (newlineSequences[i] && newlineSequences[i].length || 0); - if (count >= start) { - for (let j = i - range; j <= i + range || end > count; j++) { - if (j < 0 || j >= lines.length) continue; - const line = j + 1; - res.push( - `${line}${" ".repeat(Math.max(3 - String(line).length, 0))}| ${lines[j]}` - ); - const lineLength = lines[j].length; - const newLineSeqLength = newlineSequences[j] && newlineSequences[j].length || 0; - if (j === i) { - const pad = start - (count - (lineLength + newLineSeqLength)); - const length = Math.max( - 1, - end > count ? lineLength - pad : end - start - ); - res.push(` | ` + " ".repeat(pad) + "^".repeat(length)); - } else if (j > i) { - if (end > count) { - const length = Math.max(Math.min(end - count, lineLength), 1); - res.push(` | ` + "^".repeat(length)); - } - count += lineLength + newLineSeqLength; - } - } - break; - } - } - return res.join("\n"); - } - - function normalizeStyle(value) { - if (isArray(value)) { - const res = {}; - for (let i = 0; i < value.length; i++) { - const item = value[i]; - const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item); - if (normalized) { - for (const key in normalized) { - res[key] = normalized[key]; - } - } - } - return res; - } else if (isString(value) || isObject(value)) { - return value; - } - } - const listDelimiterRE = /;(?![^(]*\))/g; - const propertyDelimiterRE = /:([^]+)/; - const styleCommentRE = /\/\*[^]*?\*\//g; - function parseStringStyle(cssText) { - const ret = {}; - cssText.replace(styleCommentRE, "").split(listDelimiterRE).forEach((item) => { - if (item) { - const tmp = item.split(propertyDelimiterRE); - tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim()); - } - }); - return ret; - } - function stringifyStyle(styles) { - if (!styles) return ""; - if (isString(styles)) return styles; - let ret = ""; - for (const key in styles) { - const value = styles[key]; - if (isString(value) || typeof value === "number") { - const normalizedKey = key.startsWith(`--`) ? key : hyphenate(key); - ret += `${normalizedKey}:${value};`; - } - } - return ret; - } - function normalizeClass(value) { - let res = ""; - if (isString(value)) { - res = value; - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - const normalized = normalizeClass(value[i]); - if (normalized) { - res += normalized + " "; - } - } - } else if (isObject(value)) { - for (const name in value) { - if (value[name]) { - res += name + " "; - } - } - } - return res.trim(); - } - function normalizeProps(props) { - if (!props) return null; - let { class: klass, style } = props; - if (klass && !isString(klass)) { - props.class = normalizeClass(klass); - } - if (style) { - props.style = normalizeStyle(style); - } - return props; - } - - const HTML_TAGS = "html,body,base,head,link,meta,style,title,address,article,aside,footer,header,hgroup,h1,h2,h3,h4,h5,h6,nav,section,div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,summary,template,blockquote,iframe,tfoot"; - const SVG_TAGS = "svg,animate,animateMotion,animateTransform,circle,clipPath,color-profile,defs,desc,discard,ellipse,feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feDropShadow,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence,filter,foreignObject,g,hatch,hatchpath,image,line,linearGradient,marker,mask,mesh,meshgradient,meshpatch,meshrow,metadata,mpath,path,pattern,polygon,polyline,radialGradient,rect,set,solidcolor,stop,switch,symbol,text,textPath,title,tspan,unknown,use,view"; - const MATH_TAGS = "annotation,annotation-xml,maction,maligngroup,malignmark,math,menclose,merror,mfenced,mfrac,mfraction,mglyph,mi,mlabeledtr,mlongdiv,mmultiscripts,mn,mo,mover,mpadded,mphantom,mprescripts,mroot,mrow,ms,mscarries,mscarry,msgroup,msline,mspace,msqrt,msrow,mstack,mstyle,msub,msubsup,msup,mtable,mtd,mtext,mtr,munder,munderover,none,semantics"; - const VOID_TAGS = "area,base,br,col,embed,hr,img,input,link,meta,param,source,track,wbr"; - const isHTMLTag = /* @__PURE__ */ makeMap(HTML_TAGS); - const isSVGTag = /* @__PURE__ */ makeMap(SVG_TAGS); - const isMathMLTag = /* @__PURE__ */ makeMap(MATH_TAGS); - const isVoidTag = /* @__PURE__ */ makeMap(VOID_TAGS); - - const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`; - const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs); - const isBooleanAttr = /* @__PURE__ */ makeMap( - specialBooleanAttrs + `,async,autofocus,autoplay,controls,default,defer,disabled,hidden,inert,loop,open,required,reversed,scoped,seamless,checked,muted,multiple,selected` - ); - function includeBooleanAttr(value) { - return !!value || value === ""; - } - const isKnownHtmlAttr = /* @__PURE__ */ makeMap( - `accept,accept-charset,accesskey,action,align,allow,alt,async,autocapitalize,autocomplete,autofocus,autoplay,background,bgcolor,border,buffered,capture,challenge,charset,checked,cite,class,code,codebase,color,cols,colspan,content,contenteditable,contextmenu,controls,coords,crossorigin,csp,data,datetime,decoding,default,defer,dir,dirname,disabled,download,draggable,dropzone,enctype,enterkeyhint,for,form,formaction,formenctype,formmethod,formnovalidate,formtarget,headers,height,hidden,high,href,hreflang,http-equiv,icon,id,importance,inert,integrity,ismap,itemprop,keytype,kind,label,lang,language,loading,list,loop,low,manifest,max,maxlength,minlength,media,min,multiple,muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,preload,radiogroup,readonly,referrerpolicy,rel,required,reversed,rows,rowspan,sandbox,scope,scoped,selected,shape,size,sizes,slot,span,spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,target,title,translate,type,usemap,value,width,wrap` - ); - const isKnownSvgAttr = /* @__PURE__ */ makeMap( - `xmlns,accent-height,accumulate,additive,alignment-baseline,alphabetic,amplitude,arabic-form,ascent,attributeName,attributeType,azimuth,baseFrequency,baseline-shift,baseProfile,bbox,begin,bias,by,calcMode,cap-height,class,clip,clipPathUnits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,contentScriptType,contentStyleType,crossorigin,cursor,cx,cy,d,decelerate,descent,diffuseConstant,direction,display,divisor,dominant-baseline,dur,dx,dy,edgeMode,elevation,enable-background,end,exponent,fill,fill-opacity,fill-rule,filter,filterRes,filterUnits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,format,from,fr,fx,fy,g1,g2,glyph-name,glyph-orientation-horizontal,glyph-orientation-vertical,glyphRef,gradientTransform,gradientUnits,hanging,height,href,hreflang,horiz-adv-x,horiz-origin-x,id,ideographic,image-rendering,in,in2,intercept,k,k1,k2,k3,k4,kernelMatrix,kernelUnitLength,kerning,keyPoints,keySplines,keyTimes,lang,lengthAdjust,letter-spacing,lighting-color,limitingConeAngle,local,marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mask,maskContentUnits,maskUnits,mathematical,max,media,method,min,mode,name,numOctaves,offset,opacity,operator,order,orient,orientation,origin,overflow,overline-position,overline-thickness,panose-1,paint-order,path,pathLength,patternContentUnits,patternTransform,patternUnits,ping,pointer-events,points,pointsAtX,pointsAtY,pointsAtZ,preserveAlpha,preserveAspectRatio,primitiveUnits,r,radius,referrerPolicy,refX,refY,rel,rendering-intent,repeatCount,repeatDur,requiredExtensions,requiredFeatures,restart,result,rotate,rx,ry,scale,seed,shape-rendering,slope,spacing,specularConstant,specularExponent,speed,spreadMethod,startOffset,stdDeviation,stemh,stemv,stitchTiles,stop-color,stop-opacity,strikethrough-position,strikethrough-thickness,string,stroke,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke-width,style,surfaceScale,systemLanguage,tabindex,tableValues,target,targetX,targetY,text-anchor,text-decoration,text-rendering,textLength,to,transform,transform-origin,type,u1,u2,underline-position,underline-thickness,unicode,unicode-bidi,unicode-range,units-per-em,v-alphabetic,v-hanging,v-ideographic,v-mathematical,values,vector-effect,version,vert-adv-y,vert-origin-x,vert-origin-y,viewBox,viewTarget,visibility,width,widths,word-spacing,writing-mode,x,x-height,x1,x2,xChannelSelector,xlink:actuate,xlink:arcrole,xlink:href,xlink:role,xlink:show,xlink:title,xlink:type,xmlns:xlink,xml:base,xml:lang,xml:space,y,y1,y2,yChannelSelector,z,zoomAndPan` - ); - function isRenderableAttrValue(value) { - if (value == null) { - return false; - } - const type = typeof value; - return type === "string" || type === "number" || type === "boolean"; - } - - const cssVarNameEscapeSymbolsRE = /[ !"#$%&'()*+,./:;<=>?@[\\\]^`{|}~]/g; - function getEscapedCssVarName(key, doubleEscape) { - return key.replace( - cssVarNameEscapeSymbolsRE, - (s) => `\\${s}` - ); - } - - function looseCompareArrays(a, b) { - if (a.length !== b.length) return false; - let equal = true; - for (let i = 0; equal && i < a.length; i++) { - equal = looseEqual(a[i], b[i]); - } - return equal; - } - function looseEqual(a, b) { - if (a === b) return true; - let aValidType = isDate(a); - let bValidType = isDate(b); - if (aValidType || bValidType) { - return aValidType && bValidType ? a.getTime() === b.getTime() : false; - } - aValidType = isSymbol(a); - bValidType = isSymbol(b); - if (aValidType || bValidType) { - return a === b; - } - aValidType = isArray(a); - bValidType = isArray(b); - if (aValidType || bValidType) { - return aValidType && bValidType ? looseCompareArrays(a, b) : false; - } - aValidType = isObject(a); - bValidType = isObject(b); - if (aValidType || bValidType) { - if (!aValidType || !bValidType) { - return false; - } - const aKeysCount = Object.keys(a).length; - const bKeysCount = Object.keys(b).length; - if (aKeysCount !== bKeysCount) { - return false; - } - for (const key in a) { - const aHasKey = a.hasOwnProperty(key); - const bHasKey = b.hasOwnProperty(key); - if (aHasKey && !bHasKey || !aHasKey && bHasKey || !looseEqual(a[key], b[key])) { - return false; - } - } - } - return String(a) === String(b); - } - function looseIndexOf(arr, val) { - return arr.findIndex((item) => looseEqual(item, val)); - } - - const isRef$1 = (val) => { - return !!(val && val["__v_isRef"] === true); - }; - const toDisplayString = (val) => { - return isString(val) ? val : val == null ? "" : isArray(val) || isObject(val) && (val.toString === objectToString || !isFunction(val.toString)) ? isRef$1(val) ? toDisplayString(val.value) : JSON.stringify(val, replacer, 2) : String(val); - }; - const replacer = (_key, val) => { - if (isRef$1(val)) { - return replacer(_key, val.value); - } else if (isMap(val)) { - return { - [`Map(${val.size})`]: [...val.entries()].reduce( - (entries, [key, val2], i) => { - entries[stringifySymbol(key, i) + " =>"] = val2; - return entries; - }, - {} - ) - }; - } else if (isSet(val)) { - return { - [`Set(${val.size})`]: [...val.values()].map((v) => stringifySymbol(v)) - }; - } else if (isSymbol(val)) { - return stringifySymbol(val); - } else if (isObject(val) && !isArray(val) && !isPlainObject(val)) { - return String(val); - } - return val; - }; - const stringifySymbol = (v, i = "") => { - var _a; - return ( - // Symbol.description in es2019+ so we need to cast here to pass - // the lib: es2016 check - isSymbol(v) ? `Symbol(${(_a = v.description) != null ? _a : i})` : v - ); - }; - - function warn$2(msg, ...args) { - console.warn(`[Vue warn] ${msg}`, ...args); - } - - let activeEffectScope; - class EffectScope { - constructor(detached = false) { - this.detached = detached; - /** - * @internal - */ - this._active = true; - /** - * @internal - */ - this.effects = []; - /** - * @internal - */ - this.cleanups = []; - this._isPaused = false; - this.parent = activeEffectScope; - if (!detached && activeEffectScope) { - this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push( - this - ) - 1; - } - } - get active() { - return this._active; - } - pause() { - if (this._active) { - this._isPaused = true; - let i, l; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].pause(); - } - } - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].pause(); - } - } - } - /** - * Resumes the effect scope, including all child scopes and effects. - */ - resume() { - if (this._active) { - if (this._isPaused) { - this._isPaused = false; - let i, l; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].resume(); - } - } - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].resume(); - } - } - } - } - run(fn) { - if (this._active) { - const currentEffectScope = activeEffectScope; - try { - activeEffectScope = this; - return fn(); - } finally { - activeEffectScope = currentEffectScope; - } - } else { - warn$2(`cannot run an inactive effect scope.`); - } - } - /** - * This should only be called on non-detached scopes - * @internal - */ - on() { - activeEffectScope = this; - } - /** - * This should only be called on non-detached scopes - * @internal - */ - off() { - activeEffectScope = this.parent; - } - stop(fromParent) { - if (this._active) { - this._active = false; - let i, l; - for (i = 0, l = this.effects.length; i < l; i++) { - this.effects[i].stop(); - } - this.effects.length = 0; - for (i = 0, l = this.cleanups.length; i < l; i++) { - this.cleanups[i](); - } - this.cleanups.length = 0; - if (this.scopes) { - for (i = 0, l = this.scopes.length; i < l; i++) { - this.scopes[i].stop(true); - } - this.scopes.length = 0; - } - if (!this.detached && this.parent && !fromParent) { - const last = this.parent.scopes.pop(); - if (last && last !== this) { - this.parent.scopes[this.index] = last; - last.index = this.index; - } - } - this.parent = void 0; - } - } - } - function effectScope(detached) { - return new EffectScope(detached); - } - function getCurrentScope() { - return activeEffectScope; - } - function onScopeDispose(fn, failSilently = false) { - if (activeEffectScope) { - activeEffectScope.cleanups.push(fn); - } else if (!failSilently) { - warn$2( - `onScopeDispose() is called when there is no active effect scope to be associated with.` - ); - } - } - - let activeSub; - const pausedQueueEffects = /* @__PURE__ */ new WeakSet(); - class ReactiveEffect { - constructor(fn) { - this.fn = fn; - /** - * @internal - */ - this.deps = void 0; - /** - * @internal - */ - this.depsTail = void 0; - /** - * @internal - */ - this.flags = 1 | 4; - /** - * @internal - */ - this.next = void 0; - /** - * @internal - */ - this.cleanup = void 0; - this.scheduler = void 0; - if (activeEffectScope && activeEffectScope.active) { - activeEffectScope.effects.push(this); - } - } - pause() { - this.flags |= 64; - } - resume() { - if (this.flags & 64) { - this.flags &= ~64; - if (pausedQueueEffects.has(this)) { - pausedQueueEffects.delete(this); - this.trigger(); - } - } - } - /** - * @internal - */ - notify() { - if (this.flags & 2 && !(this.flags & 32)) { - return; - } - if (!(this.flags & 8)) { - batch(this); - } - } - run() { - if (!(this.flags & 1)) { - return this.fn(); - } - this.flags |= 2; - cleanupEffect(this); - prepareDeps(this); - const prevEffect = activeSub; - const prevShouldTrack = shouldTrack; - activeSub = this; - shouldTrack = true; - try { - return this.fn(); - } finally { - if (activeSub !== this) { - warn$2( - "Active effect was not restored correctly - this is likely a Vue internal bug." - ); - } - cleanupDeps(this); - activeSub = prevEffect; - shouldTrack = prevShouldTrack; - this.flags &= ~2; - } - } - stop() { - if (this.flags & 1) { - for (let link = this.deps; link; link = link.nextDep) { - removeSub(link); - } - this.deps = this.depsTail = void 0; - cleanupEffect(this); - this.onStop && this.onStop(); - this.flags &= ~1; - } - } - trigger() { - if (this.flags & 64) { - pausedQueueEffects.add(this); - } else if (this.scheduler) { - this.scheduler(); - } else { - this.runIfDirty(); - } - } - /** - * @internal - */ - runIfDirty() { - if (isDirty(this)) { - this.run(); - } - } - get dirty() { - return isDirty(this); - } - } - let batchDepth = 0; - let batchedSub; - let batchedComputed; - function batch(sub, isComputed = false) { - sub.flags |= 8; - if (isComputed) { - sub.next = batchedComputed; - batchedComputed = sub; - return; - } - sub.next = batchedSub; - batchedSub = sub; - } - function startBatch() { - batchDepth++; - } - function endBatch() { - if (--batchDepth > 0) { - return; - } - if (batchedComputed) { - let e = batchedComputed; - batchedComputed = void 0; - while (e) { - const next = e.next; - e.next = void 0; - e.flags &= ~8; - e = next; - } - } - let error; - while (batchedSub) { - let e = batchedSub; - batchedSub = void 0; - while (e) { - const next = e.next; - e.next = void 0; - e.flags &= ~8; - if (e.flags & 1) { - try { - ; - e.trigger(); - } catch (err) { - if (!error) error = err; - } - } - e = next; - } - } - if (error) throw error; - } - function prepareDeps(sub) { - for (let link = sub.deps; link; link = link.nextDep) { - link.version = -1; - link.prevActiveLink = link.dep.activeLink; - link.dep.activeLink = link; - } - } - function cleanupDeps(sub) { - let head; - let tail = sub.depsTail; - let link = tail; - while (link) { - const prev = link.prevDep; - if (link.version === -1) { - if (link === tail) tail = prev; - removeSub(link); - removeDep(link); - } else { - head = link; - } - link.dep.activeLink = link.prevActiveLink; - link.prevActiveLink = void 0; - link = prev; - } - sub.deps = head; - sub.depsTail = tail; - } - function isDirty(sub) { - for (let link = sub.deps; link; link = link.nextDep) { - if (link.dep.version !== link.version || link.dep.computed && (refreshComputed(link.dep.computed) || link.dep.version !== link.version)) { - return true; - } - } - if (sub._dirty) { - return true; - } - return false; - } - function refreshComputed(computed) { - if (computed.flags & 4 && !(computed.flags & 16)) { - return; - } - computed.flags &= ~16; - if (computed.globalVersion === globalVersion) { - return; - } - computed.globalVersion = globalVersion; - const dep = computed.dep; - computed.flags |= 2; - if (dep.version > 0 && !computed.isSSR && computed.deps && !isDirty(computed)) { - computed.flags &= ~2; - return; - } - const prevSub = activeSub; - const prevShouldTrack = shouldTrack; - activeSub = computed; - shouldTrack = true; - try { - prepareDeps(computed); - const value = computed.fn(computed._value); - if (dep.version === 0 || hasChanged(value, computed._value)) { - computed._value = value; - dep.version++; - } - } catch (err) { - dep.version++; - throw err; - } finally { - activeSub = prevSub; - shouldTrack = prevShouldTrack; - cleanupDeps(computed); - computed.flags &= ~2; - } - } - function removeSub(link, soft = false) { - const { dep, prevSub, nextSub } = link; - if (prevSub) { - prevSub.nextSub = nextSub; - link.prevSub = void 0; - } - if (nextSub) { - nextSub.prevSub = prevSub; - link.nextSub = void 0; - } - if (dep.subsHead === link) { - dep.subsHead = nextSub; - } - if (dep.subs === link) { - dep.subs = prevSub; - if (!prevSub && dep.computed) { - dep.computed.flags &= ~4; - for (let l = dep.computed.deps; l; l = l.nextDep) { - removeSub(l, true); - } - } - } - if (!soft && !--dep.sc && dep.map) { - dep.map.delete(dep.key); - } - } - function removeDep(link) { - const { prevDep, nextDep } = link; - if (prevDep) { - prevDep.nextDep = nextDep; - link.prevDep = void 0; - } - if (nextDep) { - nextDep.prevDep = prevDep; - link.nextDep = void 0; - } - } - function effect(fn, options) { - if (fn.effect instanceof ReactiveEffect) { - fn = fn.effect.fn; - } - const e = new ReactiveEffect(fn); - if (options) { - extend(e, options); - } - try { - e.run(); - } catch (err) { - e.stop(); - throw err; - } - const runner = e.run.bind(e); - runner.effect = e; - return runner; - } - function stop(runner) { - runner.effect.stop(); - } - let shouldTrack = true; - const trackStack = []; - function pauseTracking() { - trackStack.push(shouldTrack); - shouldTrack = false; - } - function resetTracking() { - const last = trackStack.pop(); - shouldTrack = last === void 0 ? true : last; - } - function cleanupEffect(e) { - const { cleanup } = e; - e.cleanup = void 0; - if (cleanup) { - const prevSub = activeSub; - activeSub = void 0; - try { - cleanup(); - } finally { - activeSub = prevSub; - } - } - } - - let globalVersion = 0; - class Link { - constructor(sub, dep) { - this.sub = sub; - this.dep = dep; - this.version = dep.version; - this.nextDep = this.prevDep = this.nextSub = this.prevSub = this.prevActiveLink = void 0; - } - } - class Dep { - constructor(computed) { - this.computed = computed; - this.version = 0; - /** - * Link between this dep and the current active effect - */ - this.activeLink = void 0; - /** - * Doubly linked list representing the subscribing effects (tail) - */ - this.subs = void 0; - /** - * For object property deps cleanup - */ - this.map = void 0; - this.key = void 0; - /** - * Subscriber counter - */ - this.sc = 0; - { - this.subsHead = void 0; - } - } - track(debugInfo) { - if (!activeSub || !shouldTrack || activeSub === this.computed) { - return; - } - let link = this.activeLink; - if (link === void 0 || link.sub !== activeSub) { - link = this.activeLink = new Link(activeSub, this); - if (!activeSub.deps) { - activeSub.deps = activeSub.depsTail = link; - } else { - link.prevDep = activeSub.depsTail; - activeSub.depsTail.nextDep = link; - activeSub.depsTail = link; - } - addSub(link); - } else if (link.version === -1) { - link.version = this.version; - if (link.nextDep) { - const next = link.nextDep; - next.prevDep = link.prevDep; - if (link.prevDep) { - link.prevDep.nextDep = next; - } - link.prevDep = activeSub.depsTail; - link.nextDep = void 0; - activeSub.depsTail.nextDep = link; - activeSub.depsTail = link; - if (activeSub.deps === link) { - activeSub.deps = next; - } - } - } - if (activeSub.onTrack) { - activeSub.onTrack( - extend( - { - effect: activeSub - }, - debugInfo - ) - ); - } - return link; - } - trigger(debugInfo) { - this.version++; - globalVersion++; - this.notify(debugInfo); - } - notify(debugInfo) { - startBatch(); - try { - if (true) { - for (let head = this.subsHead; head; head = head.nextSub) { - if (head.sub.onTrigger && !(head.sub.flags & 8)) { - head.sub.onTrigger( - extend( - { - effect: head.sub - }, - debugInfo - ) - ); - } - } - } - for (let link = this.subs; link; link = link.prevSub) { - if (link.sub.notify()) { - ; - link.sub.dep.notify(); - } - } - } finally { - endBatch(); - } - } - } - function addSub(link) { - link.dep.sc++; - if (link.sub.flags & 4) { - const computed = link.dep.computed; - if (computed && !link.dep.subs) { - computed.flags |= 4 | 16; - for (let l = computed.deps; l; l = l.nextDep) { - addSub(l); - } - } - const currentTail = link.dep.subs; - if (currentTail !== link) { - link.prevSub = currentTail; - if (currentTail) currentTail.nextSub = link; - } - if (link.dep.subsHead === void 0) { - link.dep.subsHead = link; - } - link.dep.subs = link; - } - } - const targetMap = /* @__PURE__ */ new WeakMap(); - const ITERATE_KEY = Symbol( - "Object iterate" - ); - const MAP_KEY_ITERATE_KEY = Symbol( - "Map keys iterate" - ); - const ARRAY_ITERATE_KEY = Symbol( - "Array iterate" - ); - function track(target, type, key) { - if (shouldTrack && activeSub) { - let depsMap = targetMap.get(target); - if (!depsMap) { - targetMap.set(target, depsMap = /* @__PURE__ */ new Map()); - } - let dep = depsMap.get(key); - if (!dep) { - depsMap.set(key, dep = new Dep()); - dep.map = depsMap; - dep.key = key; - } - { - dep.track({ - target, - type, - key - }); - } - } - } - function trigger(target, type, key, newValue, oldValue, oldTarget) { - const depsMap = targetMap.get(target); - if (!depsMap) { - globalVersion++; - return; - } - const run = (dep) => { - if (dep) { - { - dep.trigger({ - target, - type, - key, - newValue, - oldValue, - oldTarget - }); - } - } - }; - startBatch(); - if (type === "clear") { - depsMap.forEach(run); - } else { - const targetIsArray = isArray(target); - const isArrayIndex = targetIsArray && isIntegerKey(key); - if (targetIsArray && key === "length") { - const newLength = Number(newValue); - depsMap.forEach((dep, key2) => { - if (key2 === "length" || key2 === ARRAY_ITERATE_KEY || !isSymbol(key2) && key2 >= newLength) { - run(dep); - } - }); - } else { - if (key !== void 0 || depsMap.has(void 0)) { - run(depsMap.get(key)); - } - if (isArrayIndex) { - run(depsMap.get(ARRAY_ITERATE_KEY)); - } - switch (type) { - case "add": - if (!targetIsArray) { - run(depsMap.get(ITERATE_KEY)); - if (isMap(target)) { - run(depsMap.get(MAP_KEY_ITERATE_KEY)); - } - } else if (isArrayIndex) { - run(depsMap.get("length")); - } - break; - case "delete": - if (!targetIsArray) { - run(depsMap.get(ITERATE_KEY)); - if (isMap(target)) { - run(depsMap.get(MAP_KEY_ITERATE_KEY)); - } - } - break; - case "set": - if (isMap(target)) { - run(depsMap.get(ITERATE_KEY)); - } - break; - } - } - } - endBatch(); - } - function getDepFromReactive(object, key) { - const depMap = targetMap.get(object); - return depMap && depMap.get(key); - } - - function reactiveReadArray(array) { - const raw = toRaw(array); - if (raw === array) return raw; - track(raw, "iterate", ARRAY_ITERATE_KEY); - return isShallow(array) ? raw : raw.map(toReactive); - } - function shallowReadArray(arr) { - track(arr = toRaw(arr), "iterate", ARRAY_ITERATE_KEY); - return arr; - } - const arrayInstrumentations = { - __proto__: null, - [Symbol.iterator]() { - return iterator(this, Symbol.iterator, toReactive); - }, - concat(...args) { - return reactiveReadArray(this).concat( - ...args.map((x) => isArray(x) ? reactiveReadArray(x) : x) - ); - }, - entries() { - return iterator(this, "entries", (value) => { - value[1] = toReactive(value[1]); - return value; - }); - }, - every(fn, thisArg) { - return apply(this, "every", fn, thisArg, void 0, arguments); - }, - filter(fn, thisArg) { - return apply(this, "filter", fn, thisArg, (v) => v.map(toReactive), arguments); - }, - find(fn, thisArg) { - return apply(this, "find", fn, thisArg, toReactive, arguments); - }, - findIndex(fn, thisArg) { - return apply(this, "findIndex", fn, thisArg, void 0, arguments); - }, - findLast(fn, thisArg) { - return apply(this, "findLast", fn, thisArg, toReactive, arguments); - }, - findLastIndex(fn, thisArg) { - return apply(this, "findLastIndex", fn, thisArg, void 0, arguments); - }, - // flat, flatMap could benefit from ARRAY_ITERATE but are not straight-forward to implement - forEach(fn, thisArg) { - return apply(this, "forEach", fn, thisArg, void 0, arguments); - }, - includes(...args) { - return searchProxy(this, "includes", args); - }, - indexOf(...args) { - return searchProxy(this, "indexOf", args); - }, - join(separator) { - return reactiveReadArray(this).join(separator); - }, - // keys() iterator only reads `length`, no optimisation required - lastIndexOf(...args) { - return searchProxy(this, "lastIndexOf", args); - }, - map(fn, thisArg) { - return apply(this, "map", fn, thisArg, void 0, arguments); - }, - pop() { - return noTracking(this, "pop"); - }, - push(...args) { - return noTracking(this, "push", args); - }, - reduce(fn, ...args) { - return reduce(this, "reduce", fn, args); - }, - reduceRight(fn, ...args) { - return reduce(this, "reduceRight", fn, args); - }, - shift() { - return noTracking(this, "shift"); - }, - // slice could use ARRAY_ITERATE but also seems to beg for range tracking - some(fn, thisArg) { - return apply(this, "some", fn, thisArg, void 0, arguments); - }, - splice(...args) { - return noTracking(this, "splice", args); - }, - toReversed() { - return reactiveReadArray(this).toReversed(); - }, - toSorted(comparer) { - return reactiveReadArray(this).toSorted(comparer); - }, - toSpliced(...args) { - return reactiveReadArray(this).toSpliced(...args); - }, - unshift(...args) { - return noTracking(this, "unshift", args); - }, - values() { - return iterator(this, "values", toReactive); - } - }; - function iterator(self, method, wrapValue) { - const arr = shallowReadArray(self); - const iter = arr[method](); - if (arr !== self && !isShallow(self)) { - iter._next = iter.next; - iter.next = () => { - const result = iter._next(); - if (result.value) { - result.value = wrapValue(result.value); - } - return result; - }; - } - return iter; - } - const arrayProto = Array.prototype; - function apply(self, method, fn, thisArg, wrappedRetFn, args) { - const arr = shallowReadArray(self); - const needsWrap = arr !== self && !isShallow(self); - const methodFn = arr[method]; - if (methodFn !== arrayProto[method]) { - const result2 = methodFn.apply(self, args); - return needsWrap ? toReactive(result2) : result2; - } - let wrappedFn = fn; - if (arr !== self) { - if (needsWrap) { - wrappedFn = function(item, index) { - return fn.call(this, toReactive(item), index, self); - }; - } else if (fn.length > 2) { - wrappedFn = function(item, index) { - return fn.call(this, item, index, self); - }; - } - } - const result = methodFn.call(arr, wrappedFn, thisArg); - return needsWrap && wrappedRetFn ? wrappedRetFn(result) : result; - } - function reduce(self, method, fn, args) { - const arr = shallowReadArray(self); - let wrappedFn = fn; - if (arr !== self) { - if (!isShallow(self)) { - wrappedFn = function(acc, item, index) { - return fn.call(this, acc, toReactive(item), index, self); - }; - } else if (fn.length > 3) { - wrappedFn = function(acc, item, index) { - return fn.call(this, acc, item, index, self); - }; - } - } - return arr[method](wrappedFn, ...args); - } - function searchProxy(self, method, args) { - const arr = toRaw(self); - track(arr, "iterate", ARRAY_ITERATE_KEY); - const res = arr[method](...args); - if ((res === -1 || res === false) && isProxy(args[0])) { - args[0] = toRaw(args[0]); - return arr[method](...args); - } - return res; - } - function noTracking(self, method, args = []) { - pauseTracking(); - startBatch(); - const res = toRaw(self)[method].apply(self, args); - endBatch(); - resetTracking(); - return res; - } - - const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`); - const builtInSymbols = new Set( - /* @__PURE__ */ Object.getOwnPropertyNames(Symbol).filter((key) => key !== "arguments" && key !== "caller").map((key) => Symbol[key]).filter(isSymbol) - ); - function hasOwnProperty(key) { - if (!isSymbol(key)) key = String(key); - const obj = toRaw(this); - track(obj, "has", key); - return obj.hasOwnProperty(key); - } - class BaseReactiveHandler { - constructor(_isReadonly = false, _isShallow = false) { - this._isReadonly = _isReadonly; - this._isShallow = _isShallow; - } - get(target, key, receiver) { - if (key === "__v_skip") return target["__v_skip"]; - const isReadonly2 = this._isReadonly, isShallow2 = this._isShallow; - if (key === "__v_isReactive") { - return !isReadonly2; - } else if (key === "__v_isReadonly") { - return isReadonly2; - } else if (key === "__v_isShallow") { - return isShallow2; - } else if (key === "__v_raw") { - if (receiver === (isReadonly2 ? isShallow2 ? shallowReadonlyMap : readonlyMap : isShallow2 ? shallowReactiveMap : reactiveMap).get(target) || // receiver is not the reactive proxy, but has the same prototype - // this means the receiver is a user proxy of the reactive proxy - Object.getPrototypeOf(target) === Object.getPrototypeOf(receiver)) { - return target; - } - return; - } - const targetIsArray = isArray(target); - if (!isReadonly2) { - let fn; - if (targetIsArray && (fn = arrayInstrumentations[key])) { - return fn; - } - if (key === "hasOwnProperty") { - return hasOwnProperty; - } - } - const res = Reflect.get( - target, - key, - // if this is a proxy wrapping a ref, return methods using the raw ref - // as receiver so that we don't have to call `toRaw` on the ref in all - // its class methods - isRef(target) ? target : receiver - ); - if (isSymbol(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) { - return res; - } - if (!isReadonly2) { - track(target, "get", key); - } - if (isShallow2) { - return res; - } - if (isRef(res)) { - return targetIsArray && isIntegerKey(key) ? res : res.value; - } - if (isObject(res)) { - return isReadonly2 ? readonly(res) : reactive(res); - } - return res; - } - } - class MutableReactiveHandler extends BaseReactiveHandler { - constructor(isShallow2 = false) { - super(false, isShallow2); - } - set(target, key, value, receiver) { - let oldValue = target[key]; - if (!this._isShallow) { - const isOldValueReadonly = isReadonly(oldValue); - if (!isShallow(value) && !isReadonly(value)) { - oldValue = toRaw(oldValue); - value = toRaw(value); - } - if (!isArray(target) && isRef(oldValue) && !isRef(value)) { - if (isOldValueReadonly) { - return false; - } else { - oldValue.value = value; - return true; - } - } - } - const hadKey = isArray(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key); - const result = Reflect.set( - target, - key, - value, - isRef(target) ? target : receiver - ); - if (target === toRaw(receiver)) { - if (!hadKey) { - trigger(target, "add", key, value); - } else if (hasChanged(value, oldValue)) { - trigger(target, "set", key, value, oldValue); - } - } - return result; - } - deleteProperty(target, key) { - const hadKey = hasOwn(target, key); - const oldValue = target[key]; - const result = Reflect.deleteProperty(target, key); - if (result && hadKey) { - trigger(target, "delete", key, void 0, oldValue); - } - return result; - } - has(target, key) { - const result = Reflect.has(target, key); - if (!isSymbol(key) || !builtInSymbols.has(key)) { - track(target, "has", key); - } - return result; - } - ownKeys(target) { - track( - target, - "iterate", - isArray(target) ? "length" : ITERATE_KEY - ); - return Reflect.ownKeys(target); - } - } - class ReadonlyReactiveHandler extends BaseReactiveHandler { - constructor(isShallow2 = false) { - super(true, isShallow2); - } - set(target, key) { - { - warn$2( - `Set operation on key "${String(key)}" failed: target is readonly.`, - target - ); - } - return true; - } - deleteProperty(target, key) { - { - warn$2( - `Delete operation on key "${String(key)}" failed: target is readonly.`, - target - ); - } - return true; - } - } - const mutableHandlers = /* @__PURE__ */ new MutableReactiveHandler(); - const readonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(); - const shallowReactiveHandlers = /* @__PURE__ */ new MutableReactiveHandler(true); - const shallowReadonlyHandlers = /* @__PURE__ */ new ReadonlyReactiveHandler(true); - - const toShallow = (value) => value; - const getProto = (v) => Reflect.getPrototypeOf(v); - function createIterableMethod(method, isReadonly2, isShallow2) { - return function(...args) { - const target = this["__v_raw"]; - const rawTarget = toRaw(target); - const targetIsMap = isMap(rawTarget); - const isPair = method === "entries" || method === Symbol.iterator && targetIsMap; - const isKeyOnly = method === "keys" && targetIsMap; - const innerIterator = target[method](...args); - const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive; - !isReadonly2 && track( - rawTarget, - "iterate", - isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY - ); - return { - // iterator protocol - next() { - const { value, done } = innerIterator.next(); - return done ? { value, done } : { - value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value), - done - }; - }, - // iterable protocol - [Symbol.iterator]() { - return this; - } - }; - }; - } - function createReadonlyMethod(type) { - return function(...args) { - { - const key = args[0] ? `on key "${args[0]}" ` : ``; - warn$2( - `${capitalize(type)} operation ${key}failed: target is readonly.`, - toRaw(this) - ); - } - return type === "delete" ? false : type === "clear" ? void 0 : this; - }; - } - function createInstrumentations(readonly, shallow) { - const instrumentations = { - get(key) { - const target = this["__v_raw"]; - const rawTarget = toRaw(target); - const rawKey = toRaw(key); - if (!readonly) { - if (hasChanged(key, rawKey)) { - track(rawTarget, "get", key); - } - track(rawTarget, "get", rawKey); - } - const { has } = getProto(rawTarget); - const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive; - if (has.call(rawTarget, key)) { - return wrap(target.get(key)); - } else if (has.call(rawTarget, rawKey)) { - return wrap(target.get(rawKey)); - } else if (target !== rawTarget) { - target.get(key); - } - }, - get size() { - const target = this["__v_raw"]; - !readonly && track(toRaw(target), "iterate", ITERATE_KEY); - return Reflect.get(target, "size", target); - }, - has(key) { - const target = this["__v_raw"]; - const rawTarget = toRaw(target); - const rawKey = toRaw(key); - if (!readonly) { - if (hasChanged(key, rawKey)) { - track(rawTarget, "has", key); - } - track(rawTarget, "has", rawKey); - } - return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey); - }, - forEach(callback, thisArg) { - const observed = this; - const target = observed["__v_raw"]; - const rawTarget = toRaw(target); - const wrap = shallow ? toShallow : readonly ? toReadonly : toReactive; - !readonly && track(rawTarget, "iterate", ITERATE_KEY); - return target.forEach((value, key) => { - return callback.call(thisArg, wrap(value), wrap(key), observed); - }); - } - }; - extend( - instrumentations, - readonly ? { - add: createReadonlyMethod("add"), - set: createReadonlyMethod("set"), - delete: createReadonlyMethod("delete"), - clear: createReadonlyMethod("clear") - } : { - add(value) { - if (!shallow && !isShallow(value) && !isReadonly(value)) { - value = toRaw(value); - } - const target = toRaw(this); - const proto = getProto(target); - const hadKey = proto.has.call(target, value); - if (!hadKey) { - target.add(value); - trigger(target, "add", value, value); - } - return this; - }, - set(key, value) { - if (!shallow && !isShallow(value) && !isReadonly(value)) { - value = toRaw(value); - } - const target = toRaw(this); - const { has, get } = getProto(target); - let hadKey = has.call(target, key); - if (!hadKey) { - key = toRaw(key); - hadKey = has.call(target, key); - } else { - checkIdentityKeys(target, has, key); - } - const oldValue = get.call(target, key); - target.set(key, value); - if (!hadKey) { - trigger(target, "add", key, value); - } else if (hasChanged(value, oldValue)) { - trigger(target, "set", key, value, oldValue); - } - return this; - }, - delete(key) { - const target = toRaw(this); - const { has, get } = getProto(target); - let hadKey = has.call(target, key); - if (!hadKey) { - key = toRaw(key); - hadKey = has.call(target, key); - } else { - checkIdentityKeys(target, has, key); - } - const oldValue = get ? get.call(target, key) : void 0; - const result = target.delete(key); - if (hadKey) { - trigger(target, "delete", key, void 0, oldValue); - } - return result; - }, - clear() { - const target = toRaw(this); - const hadItems = target.size !== 0; - const oldTarget = isMap(target) ? new Map(target) : new Set(target) ; - const result = target.clear(); - if (hadItems) { - trigger( - target, - "clear", - void 0, - void 0, - oldTarget - ); - } - return result; - } - } - ); - const iteratorMethods = [ - "keys", - "values", - "entries", - Symbol.iterator - ]; - iteratorMethods.forEach((method) => { - instrumentations[method] = createIterableMethod(method, readonly, shallow); - }); - return instrumentations; - } - function createInstrumentationGetter(isReadonly2, shallow) { - const instrumentations = createInstrumentations(isReadonly2, shallow); - return (target, key, receiver) => { - if (key === "__v_isReactive") { - return !isReadonly2; - } else if (key === "__v_isReadonly") { - return isReadonly2; - } else if (key === "__v_raw") { - return target; - } - return Reflect.get( - hasOwn(instrumentations, key) && key in target ? instrumentations : target, - key, - receiver - ); - }; - } - const mutableCollectionHandlers = { - get: /* @__PURE__ */ createInstrumentationGetter(false, false) - }; - const shallowCollectionHandlers = { - get: /* @__PURE__ */ createInstrumentationGetter(false, true) - }; - const readonlyCollectionHandlers = { - get: /* @__PURE__ */ createInstrumentationGetter(true, false) - }; - const shallowReadonlyCollectionHandlers = { - get: /* @__PURE__ */ createInstrumentationGetter(true, true) - }; - function checkIdentityKeys(target, has, key) { - const rawKey = toRaw(key); - if (rawKey !== key && has.call(target, rawKey)) { - const type = toRawType(target); - warn$2( - `Reactive ${type} contains both the raw and reactive versions of the same object${type === `Map` ? ` as keys` : ``}, which can lead to inconsistencies. Avoid differentiating between the raw and reactive versions of an object and only use the reactive version if possible.` - ); - } - } - - const reactiveMap = /* @__PURE__ */ new WeakMap(); - const shallowReactiveMap = /* @__PURE__ */ new WeakMap(); - const readonlyMap = /* @__PURE__ */ new WeakMap(); - const shallowReadonlyMap = /* @__PURE__ */ new WeakMap(); - function targetTypeMap(rawType) { - switch (rawType) { - case "Object": - case "Array": - return 1 /* COMMON */; - case "Map": - case "Set": - case "WeakMap": - case "WeakSet": - return 2 /* COLLECTION */; - default: - return 0 /* INVALID */; - } - } - function getTargetType(value) { - return value["__v_skip"] || !Object.isExtensible(value) ? 0 /* INVALID */ : targetTypeMap(toRawType(value)); - } - function reactive(target) { - if (isReadonly(target)) { - return target; - } - return createReactiveObject( - target, - false, - mutableHandlers, - mutableCollectionHandlers, - reactiveMap - ); - } - function shallowReactive(target) { - return createReactiveObject( - target, - false, - shallowReactiveHandlers, - shallowCollectionHandlers, - shallowReactiveMap - ); - } - function readonly(target) { - return createReactiveObject( - target, - true, - readonlyHandlers, - readonlyCollectionHandlers, - readonlyMap - ); - } - function shallowReadonly(target) { - return createReactiveObject( - target, - true, - shallowReadonlyHandlers, - shallowReadonlyCollectionHandlers, - shallowReadonlyMap - ); - } - function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) { - if (!isObject(target)) { - { - warn$2( - `value cannot be made ${isReadonly2 ? "readonly" : "reactive"}: ${String( - target - )}` - ); - } - return target; - } - if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) { - return target; - } - const existingProxy = proxyMap.get(target); - if (existingProxy) { - return existingProxy; - } - const targetType = getTargetType(target); - if (targetType === 0 /* INVALID */) { - return target; - } - const proxy = new Proxy( - target, - targetType === 2 /* COLLECTION */ ? collectionHandlers : baseHandlers - ); - proxyMap.set(target, proxy); - return proxy; - } - function isReactive(value) { - if (isReadonly(value)) { - return isReactive(value["__v_raw"]); - } - return !!(value && value["__v_isReactive"]); - } - function isReadonly(value) { - return !!(value && value["__v_isReadonly"]); - } - function isShallow(value) { - return !!(value && value["__v_isShallow"]); - } - function isProxy(value) { - return value ? !!value["__v_raw"] : false; - } - function toRaw(observed) { - const raw = observed && observed["__v_raw"]; - return raw ? toRaw(raw) : observed; - } - function markRaw(value) { - if (!hasOwn(value, "__v_skip") && Object.isExtensible(value)) { - def(value, "__v_skip", true); - } - return value; - } - const toReactive = (value) => isObject(value) ? reactive(value) : value; - const toReadonly = (value) => isObject(value) ? readonly(value) : value; - - function isRef(r) { - return r ? r["__v_isRef"] === true : false; - } - function ref(value) { - return createRef(value, false); - } - function shallowRef(value) { - return createRef(value, true); - } - function createRef(rawValue, shallow) { - if (isRef(rawValue)) { - return rawValue; - } - return new RefImpl(rawValue, shallow); - } - class RefImpl { - constructor(value, isShallow2) { - this.dep = new Dep(); - this["__v_isRef"] = true; - this["__v_isShallow"] = false; - this._rawValue = isShallow2 ? value : toRaw(value); - this._value = isShallow2 ? value : toReactive(value); - this["__v_isShallow"] = isShallow2; - } - get value() { - { - this.dep.track({ - target: this, - type: "get", - key: "value" - }); - } - return this._value; - } - set value(newValue) { - const oldValue = this._rawValue; - const useDirectValue = this["__v_isShallow"] || isShallow(newValue) || isReadonly(newValue); - newValue = useDirectValue ? newValue : toRaw(newValue); - if (hasChanged(newValue, oldValue)) { - this._rawValue = newValue; - this._value = useDirectValue ? newValue : toReactive(newValue); - { - this.dep.trigger({ - target: this, - type: "set", - key: "value", - newValue, - oldValue - }); - } - } - } - } - function triggerRef(ref2) { - if (ref2.dep) { - { - ref2.dep.trigger({ - target: ref2, - type: "set", - key: "value", - newValue: ref2._value - }); - } - } - } - function unref(ref2) { - return isRef(ref2) ? ref2.value : ref2; - } - function toValue(source) { - return isFunction(source) ? source() : unref(source); - } - const shallowUnwrapHandlers = { - get: (target, key, receiver) => key === "__v_raw" ? target : unref(Reflect.get(target, key, receiver)), - set: (target, key, value, receiver) => { - const oldValue = target[key]; - if (isRef(oldValue) && !isRef(value)) { - oldValue.value = value; - return true; - } else { - return Reflect.set(target, key, value, receiver); - } - } - }; - function proxyRefs(objectWithRefs) { - return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers); - } - class CustomRefImpl { - constructor(factory) { - this["__v_isRef"] = true; - this._value = void 0; - const dep = this.dep = new Dep(); - const { get, set } = factory(dep.track.bind(dep), dep.trigger.bind(dep)); - this._get = get; - this._set = set; - } - get value() { - return this._value = this._get(); - } - set value(newVal) { - this._set(newVal); - } - } - function customRef(factory) { - return new CustomRefImpl(factory); - } - function toRefs(object) { - if (!isProxy(object)) { - warn$2(`toRefs() expects a reactive object but received a plain one.`); - } - const ret = isArray(object) ? new Array(object.length) : {}; - for (const key in object) { - ret[key] = propertyToRef(object, key); - } - return ret; - } - class ObjectRefImpl { - constructor(_object, _key, _defaultValue) { - this._object = _object; - this._key = _key; - this._defaultValue = _defaultValue; - this["__v_isRef"] = true; - this._value = void 0; - } - get value() { - const val = this._object[this._key]; - return this._value = val === void 0 ? this._defaultValue : val; - } - set value(newVal) { - this._object[this._key] = newVal; - } - get dep() { - return getDepFromReactive(toRaw(this._object), this._key); - } - } - class GetterRefImpl { - constructor(_getter) { - this._getter = _getter; - this["__v_isRef"] = true; - this["__v_isReadonly"] = true; - this._value = void 0; - } - get value() { - return this._value = this._getter(); - } - } - function toRef(source, key, defaultValue) { - if (isRef(source)) { - return source; - } else if (isFunction(source)) { - return new GetterRefImpl(source); - } else if (isObject(source) && arguments.length > 1) { - return propertyToRef(source, key, defaultValue); - } else { - return ref(source); - } - } - function propertyToRef(source, key, defaultValue) { - const val = source[key]; - return isRef(val) ? val : new ObjectRefImpl(source, key, defaultValue); - } - - class ComputedRefImpl { - constructor(fn, setter, isSSR) { - this.fn = fn; - this.setter = setter; - /** - * @internal - */ - this._value = void 0; - /** - * @internal - */ - this.dep = new Dep(this); - /** - * @internal - */ - this.__v_isRef = true; - // TODO isolatedDeclarations "__v_isReadonly" - // A computed is also a subscriber that tracks other deps - /** - * @internal - */ - this.deps = void 0; - /** - * @internal - */ - this.depsTail = void 0; - /** - * @internal - */ - this.flags = 16; - /** - * @internal - */ - this.globalVersion = globalVersion - 1; - /** - * @internal - */ - this.next = void 0; - // for backwards compat - this.effect = this; - this["__v_isReadonly"] = !setter; - this.isSSR = isSSR; - } - /** - * @internal - */ - notify() { - this.flags |= 16; - if (!(this.flags & 8) && // avoid infinite self recursion - activeSub !== this) { - batch(this, true); - return true; - } - } - get value() { - const link = this.dep.track({ - target: this, - type: "get", - key: "value" - }) ; - refreshComputed(this); - if (link) { - link.version = this.dep.version; - } - return this._value; - } - set value(newValue) { - if (this.setter) { - this.setter(newValue); - } else { - warn$2("Write operation failed: computed value is readonly"); - } - } - } - function computed$1(getterOrOptions, debugOptions, isSSR = false) { - let getter; - let setter; - if (isFunction(getterOrOptions)) { - getter = getterOrOptions; - } else { - getter = getterOrOptions.get; - setter = getterOrOptions.set; - } - const cRef = new ComputedRefImpl(getter, setter, isSSR); - if (debugOptions && !isSSR) { - cRef.onTrack = debugOptions.onTrack; - cRef.onTrigger = debugOptions.onTrigger; - } - return cRef; - } - - const TrackOpTypes = { - "GET": "get", - "HAS": "has", - "ITERATE": "iterate" - }; - const TriggerOpTypes = { - "SET": "set", - "ADD": "add", - "DELETE": "delete", - "CLEAR": "clear" - }; - - const INITIAL_WATCHER_VALUE = {}; - const cleanupMap = /* @__PURE__ */ new WeakMap(); - let activeWatcher = void 0; - function getCurrentWatcher() { - return activeWatcher; - } - function onWatcherCleanup(cleanupFn, failSilently = false, owner = activeWatcher) { - if (owner) { - let cleanups = cleanupMap.get(owner); - if (!cleanups) cleanupMap.set(owner, cleanups = []); - cleanups.push(cleanupFn); - } else if (!failSilently) { - warn$2( - `onWatcherCleanup() was called when there was no active watcher to associate with.` - ); - } - } - function watch$1(source, cb, options = EMPTY_OBJ) { - const { immediate, deep, once, scheduler, augmentJob, call } = options; - const warnInvalidSource = (s) => { - (options.onWarn || warn$2)( - `Invalid watch source: `, - s, - `A watch source can only be a getter/effect function, a ref, a reactive object, or an array of these types.` - ); - }; - const reactiveGetter = (source2) => { - if (deep) return source2; - if (isShallow(source2) || deep === false || deep === 0) - return traverse(source2, 1); - return traverse(source2); - }; - let effect; - let getter; - let cleanup; - let boundCleanup; - let forceTrigger = false; - let isMultiSource = false; - if (isRef(source)) { - getter = () => source.value; - forceTrigger = isShallow(source); - } else if (isReactive(source)) { - getter = () => reactiveGetter(source); - forceTrigger = true; - } else if (isArray(source)) { - isMultiSource = true; - forceTrigger = source.some((s) => isReactive(s) || isShallow(s)); - getter = () => source.map((s) => { - if (isRef(s)) { - return s.value; - } else if (isReactive(s)) { - return reactiveGetter(s); - } else if (isFunction(s)) { - return call ? call(s, 2) : s(); - } else { - warnInvalidSource(s); - } - }); - } else if (isFunction(source)) { - if (cb) { - getter = call ? () => call(source, 2) : source; - } else { - getter = () => { - if (cleanup) { - pauseTracking(); - try { - cleanup(); - } finally { - resetTracking(); - } - } - const currentEffect = activeWatcher; - activeWatcher = effect; - try { - return call ? call(source, 3, [boundCleanup]) : source(boundCleanup); - } finally { - activeWatcher = currentEffect; - } - }; - } - } else { - getter = NOOP; - warnInvalidSource(source); - } - if (cb && deep) { - const baseGetter = getter; - const depth = deep === true ? Infinity : deep; - getter = () => traverse(baseGetter(), depth); - } - const scope = getCurrentScope(); - const watchHandle = () => { - effect.stop(); - if (scope && scope.active) { - remove(scope.effects, effect); - } - }; - if (once && cb) { - const _cb = cb; - cb = (...args) => { - _cb(...args); - watchHandle(); - }; - } - let oldValue = isMultiSource ? new Array(source.length).fill(INITIAL_WATCHER_VALUE) : INITIAL_WATCHER_VALUE; - const job = (immediateFirstRun) => { - if (!(effect.flags & 1) || !effect.dirty && !immediateFirstRun) { - return; - } - if (cb) { - const newValue = effect.run(); - if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue))) { - if (cleanup) { - cleanup(); - } - const currentWatcher = activeWatcher; - activeWatcher = effect; - try { - const args = [ - newValue, - // pass undefined as the old value when it's changed for the first time - oldValue === INITIAL_WATCHER_VALUE ? void 0 : isMultiSource && oldValue[0] === INITIAL_WATCHER_VALUE ? [] : oldValue, - boundCleanup - ]; - call ? call(cb, 3, args) : ( - // @ts-expect-error - cb(...args) - ); - oldValue = newValue; - } finally { - activeWatcher = currentWatcher; - } - } - } else { - effect.run(); - } - }; - if (augmentJob) { - augmentJob(job); - } - effect = new ReactiveEffect(getter); - effect.scheduler = scheduler ? () => scheduler(job, false) : job; - boundCleanup = (fn) => onWatcherCleanup(fn, false, effect); - cleanup = effect.onStop = () => { - const cleanups = cleanupMap.get(effect); - if (cleanups) { - if (call) { - call(cleanups, 4); - } else { - for (const cleanup2 of cleanups) cleanup2(); - } - cleanupMap.delete(effect); - } - }; - { - effect.onTrack = options.onTrack; - effect.onTrigger = options.onTrigger; - } - if (cb) { - if (immediate) { - job(true); - } else { - oldValue = effect.run(); - } - } else if (scheduler) { - scheduler(job.bind(null, true), true); - } else { - effect.run(); - } - watchHandle.pause = effect.pause.bind(effect); - watchHandle.resume = effect.resume.bind(effect); - watchHandle.stop = watchHandle; - return watchHandle; - } - function traverse(value, depth = Infinity, seen) { - if (depth <= 0 || !isObject(value) || value["__v_skip"]) { - return value; - } - seen = seen || /* @__PURE__ */ new Set(); - if (seen.has(value)) { - return value; - } - seen.add(value); - depth--; - if (isRef(value)) { - traverse(value.value, depth, seen); - } else if (isArray(value)) { - for (let i = 0; i < value.length; i++) { - traverse(value[i], depth, seen); - } - } else if (isSet(value) || isMap(value)) { - value.forEach((v) => { - traverse(v, depth, seen); - }); - } else if (isPlainObject(value)) { - for (const key in value) { - traverse(value[key], depth, seen); - } - for (const key of Object.getOwnPropertySymbols(value)) { - if (Object.prototype.propertyIsEnumerable.call(value, key)) { - traverse(value[key], depth, seen); - } - } - } - return value; - } - - const stack$1 = []; - function pushWarningContext(vnode) { - stack$1.push(vnode); - } - function popWarningContext() { - stack$1.pop(); - } - let isWarning = false; - function warn$1(msg, ...args) { - if (isWarning) return; - isWarning = true; - pauseTracking(); - const instance = stack$1.length ? stack$1[stack$1.length - 1].component : null; - const appWarnHandler = instance && instance.appContext.config.warnHandler; - const trace = getComponentTrace(); - if (appWarnHandler) { - callWithErrorHandling( - appWarnHandler, - instance, - 11, - [ - // eslint-disable-next-line no-restricted-syntax - msg + args.map((a) => { - var _a, _b; - return (_b = (_a = a.toString) == null ? void 0 : _a.call(a)) != null ? _b : JSON.stringify(a); - }).join(""), - instance && instance.proxy, - trace.map( - ({ vnode }) => `at <${formatComponentName(instance, vnode.type)}>` - ).join("\n"), - trace - ] - ); - } else { - const warnArgs = [`[Vue warn]: ${msg}`, ...args]; - if (trace.length && // avoid spamming console during tests - true) { - warnArgs.push(` -`, ...formatTrace(trace)); - } - console.warn(...warnArgs); - } - resetTracking(); - isWarning = false; - } - function getComponentTrace() { - let currentVNode = stack$1[stack$1.length - 1]; - if (!currentVNode) { - return []; - } - const normalizedStack = []; - while (currentVNode) { - const last = normalizedStack[0]; - if (last && last.vnode === currentVNode) { - last.recurseCount++; - } else { - normalizedStack.push({ - vnode: currentVNode, - recurseCount: 0 - }); - } - const parentInstance = currentVNode.component && currentVNode.component.parent; - currentVNode = parentInstance && parentInstance.vnode; - } - return normalizedStack; - } - function formatTrace(trace) { - const logs = []; - trace.forEach((entry, i) => { - logs.push(...i === 0 ? [] : [` -`], ...formatTraceEntry(entry)); - }); - return logs; - } - function formatTraceEntry({ vnode, recurseCount }) { - const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``; - const isRoot = vnode.component ? vnode.component.parent == null : false; - const open = ` at <${formatComponentName( - vnode.component, - vnode.type, - isRoot - )}`; - const close = `>` + postfix; - return vnode.props ? [open, ...formatProps(vnode.props), close] : [open + close]; - } - function formatProps(props) { - const res = []; - const keys = Object.keys(props); - keys.slice(0, 3).forEach((key) => { - res.push(...formatProp(key, props[key])); - }); - if (keys.length > 3) { - res.push(` ...`); - } - return res; - } - function formatProp(key, value, raw) { - if (isString(value)) { - value = JSON.stringify(value); - return raw ? value : [`${key}=${value}`]; - } else if (typeof value === "number" || typeof value === "boolean" || value == null) { - return raw ? value : [`${key}=${value}`]; - } else if (isRef(value)) { - value = formatProp(key, toRaw(value.value), true); - return raw ? value : [`${key}=Ref<`, value, `>`]; - } else if (isFunction(value)) { - return [`${key}=fn${value.name ? `<${value.name}>` : ``}`]; - } else { - value = toRaw(value); - return raw ? value : [`${key}=`, value]; - } - } - function assertNumber(val, type) { - if (val === void 0) { - return; - } else if (typeof val !== "number") { - warn$1(`${type} is not a valid number - got ${JSON.stringify(val)}.`); - } else if (isNaN(val)) { - warn$1(`${type} is NaN - the duration expression might be incorrect.`); - } - } - - const ErrorCodes = { - "SETUP_FUNCTION": 0, - "0": "SETUP_FUNCTION", - "RENDER_FUNCTION": 1, - "1": "RENDER_FUNCTION", - "NATIVE_EVENT_HANDLER": 5, - "5": "NATIVE_EVENT_HANDLER", - "COMPONENT_EVENT_HANDLER": 6, - "6": "COMPONENT_EVENT_HANDLER", - "VNODE_HOOK": 7, - "7": "VNODE_HOOK", - "DIRECTIVE_HOOK": 8, - "8": "DIRECTIVE_HOOK", - "TRANSITION_HOOK": 9, - "9": "TRANSITION_HOOK", - "APP_ERROR_HANDLER": 10, - "10": "APP_ERROR_HANDLER", - "APP_WARN_HANDLER": 11, - "11": "APP_WARN_HANDLER", - "FUNCTION_REF": 12, - "12": "FUNCTION_REF", - "ASYNC_COMPONENT_LOADER": 13, - "13": "ASYNC_COMPONENT_LOADER", - "SCHEDULER": 14, - "14": "SCHEDULER", - "COMPONENT_UPDATE": 15, - "15": "COMPONENT_UPDATE", - "APP_UNMOUNT_CLEANUP": 16, - "16": "APP_UNMOUNT_CLEANUP" - }; - const ErrorTypeStrings$1 = { - ["sp"]: "serverPrefetch hook", - ["bc"]: "beforeCreate hook", - ["c"]: "created hook", - ["bm"]: "beforeMount hook", - ["m"]: "mounted hook", - ["bu"]: "beforeUpdate hook", - ["u"]: "updated", - ["bum"]: "beforeUnmount hook", - ["um"]: "unmounted hook", - ["a"]: "activated hook", - ["da"]: "deactivated hook", - ["ec"]: "errorCaptured hook", - ["rtc"]: "renderTracked hook", - ["rtg"]: "renderTriggered hook", - [0]: "setup function", - [1]: "render function", - [2]: "watcher getter", - [3]: "watcher callback", - [4]: "watcher cleanup function", - [5]: "native event handler", - [6]: "component event handler", - [7]: "vnode hook", - [8]: "directive hook", - [9]: "transition hook", - [10]: "app errorHandler", - [11]: "app warnHandler", - [12]: "ref function", - [13]: "async component loader", - [14]: "scheduler flush", - [15]: "component update", - [16]: "app unmount cleanup function" - }; - function callWithErrorHandling(fn, instance, type, args) { - try { - return args ? fn(...args) : fn(); - } catch (err) { - handleError(err, instance, type); - } - } - function callWithAsyncErrorHandling(fn, instance, type, args) { - if (isFunction(fn)) { - const res = callWithErrorHandling(fn, instance, type, args); - if (res && isPromise(res)) { - res.catch((err) => { - handleError(err, instance, type); - }); - } - return res; - } - if (isArray(fn)) { - const values = []; - for (let i = 0; i < fn.length; i++) { - values.push(callWithAsyncErrorHandling(fn[i], instance, type, args)); - } - return values; - } else { - warn$1( - `Invalid value type passed to callWithAsyncErrorHandling(): ${typeof fn}` - ); - } - } - function handleError(err, instance, type, throwInDev = true) { - const contextVNode = instance ? instance.vnode : null; - const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || EMPTY_OBJ; - if (instance) { - let cur = instance.parent; - const exposedInstance = instance.proxy; - const errorInfo = ErrorTypeStrings$1[type] ; - while (cur) { - const errorCapturedHooks = cur.ec; - if (errorCapturedHooks) { - for (let i = 0; i < errorCapturedHooks.length; i++) { - if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) { - return; - } - } - } - cur = cur.parent; - } - if (errorHandler) { - pauseTracking(); - callWithErrorHandling(errorHandler, null, 10, [ - err, - exposedInstance, - errorInfo - ]); - resetTracking(); - return; - } - } - logError(err, type, contextVNode, throwInDev, throwUnhandledErrorInProduction); - } - function logError(err, type, contextVNode, throwInDev = true, throwInProd = false) { - { - const info = ErrorTypeStrings$1[type]; - if (contextVNode) { - pushWarningContext(contextVNode); - } - warn$1(`Unhandled error${info ? ` during execution of ${info}` : ``}`); - if (contextVNode) { - popWarningContext(); - } - if (throwInDev) { - throw err; - } else { - console.error(err); - } - } - } - - const queue = []; - let flushIndex = -1; - const pendingPostFlushCbs = []; - let activePostFlushCbs = null; - let postFlushIndex = 0; - const resolvedPromise = /* @__PURE__ */ Promise.resolve(); - let currentFlushPromise = null; - const RECURSION_LIMIT = 100; - function nextTick(fn) { - const p = currentFlushPromise || resolvedPromise; - return fn ? p.then(this ? fn.bind(this) : fn) : p; - } - function findInsertionIndex(id) { - let start = flushIndex + 1; - let end = queue.length; - while (start < end) { - const middle = start + end >>> 1; - const middleJob = queue[middle]; - const middleJobId = getId(middleJob); - if (middleJobId < id || middleJobId === id && middleJob.flags & 2) { - start = middle + 1; - } else { - end = middle; - } - } - return start; - } - function queueJob(job) { - if (!(job.flags & 1)) { - const jobId = getId(job); - const lastJob = queue[queue.length - 1]; - if (!lastJob || // fast path when the job id is larger than the tail - !(job.flags & 2) && jobId >= getId(lastJob)) { - queue.push(job); - } else { - queue.splice(findInsertionIndex(jobId), 0, job); - } - job.flags |= 1; - queueFlush(); - } - } - function queueFlush() { - if (!currentFlushPromise) { - currentFlushPromise = resolvedPromise.then(flushJobs); - } - } - function queuePostFlushCb(cb) { - if (!isArray(cb)) { - if (activePostFlushCbs && cb.id === -1) { - activePostFlushCbs.splice(postFlushIndex + 1, 0, cb); - } else if (!(cb.flags & 1)) { - pendingPostFlushCbs.push(cb); - cb.flags |= 1; - } - } else { - pendingPostFlushCbs.push(...cb); - } - queueFlush(); - } - function flushPreFlushCbs(instance, seen, i = flushIndex + 1) { - { - seen = seen || /* @__PURE__ */ new Map(); - } - for (; i < queue.length; i++) { - const cb = queue[i]; - if (cb && cb.flags & 2) { - if (instance && cb.id !== instance.uid) { - continue; - } - if (checkRecursiveUpdates(seen, cb)) { - continue; - } - queue.splice(i, 1); - i--; - if (cb.flags & 4) { - cb.flags &= ~1; - } - cb(); - if (!(cb.flags & 4)) { - cb.flags &= ~1; - } - } - } - } - function flushPostFlushCbs(seen) { - if (pendingPostFlushCbs.length) { - const deduped = [...new Set(pendingPostFlushCbs)].sort( - (a, b) => getId(a) - getId(b) - ); - pendingPostFlushCbs.length = 0; - if (activePostFlushCbs) { - activePostFlushCbs.push(...deduped); - return; - } - activePostFlushCbs = deduped; - { - seen = seen || /* @__PURE__ */ new Map(); - } - for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) { - const cb = activePostFlushCbs[postFlushIndex]; - if (checkRecursiveUpdates(seen, cb)) { - continue; - } - if (cb.flags & 4) { - cb.flags &= ~1; - } - if (!(cb.flags & 8)) cb(); - cb.flags &= ~1; - } - activePostFlushCbs = null; - postFlushIndex = 0; - } - } - const getId = (job) => job.id == null ? job.flags & 2 ? -1 : Infinity : job.id; - function flushJobs(seen) { - { - seen = seen || /* @__PURE__ */ new Map(); - } - const check = (job) => checkRecursiveUpdates(seen, job) ; - try { - for (flushIndex = 0; flushIndex < queue.length; flushIndex++) { - const job = queue[flushIndex]; - if (job && !(job.flags & 8)) { - if (check(job)) { - continue; - } - if (job.flags & 4) { - job.flags &= ~1; - } - callWithErrorHandling( - job, - job.i, - job.i ? 15 : 14 - ); - if (!(job.flags & 4)) { - job.flags &= ~1; - } - } - } - } finally { - for (; flushIndex < queue.length; flushIndex++) { - const job = queue[flushIndex]; - if (job) { - job.flags &= ~1; - } - } - flushIndex = -1; - queue.length = 0; - flushPostFlushCbs(seen); - currentFlushPromise = null; - if (queue.length || pendingPostFlushCbs.length) { - flushJobs(seen); - } - } - } - function checkRecursiveUpdates(seen, fn) { - const count = seen.get(fn) || 0; - if (count > RECURSION_LIMIT) { - const instance = fn.i; - const componentName = instance && getComponentName(instance.type); - handleError( - `Maximum recursive updates exceeded${componentName ? ` in component <${componentName}>` : ``}. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself. Possible sources include component template, render function, updated hook or watcher source function.`, - null, - 10 - ); - return true; - } - seen.set(fn, count + 1); - return false; - } - - let isHmrUpdating = false; - const hmrDirtyComponents = /* @__PURE__ */ new Map(); - { - getGlobalThis().__VUE_HMR_RUNTIME__ = { - createRecord: tryWrap(createRecord), - rerender: tryWrap(rerender), - reload: tryWrap(reload) - }; - } - const map = /* @__PURE__ */ new Map(); - function registerHMR(instance) { - const id = instance.type.__hmrId; - let record = map.get(id); - if (!record) { - createRecord(id, instance.type); - record = map.get(id); - } - record.instances.add(instance); - } - function unregisterHMR(instance) { - map.get(instance.type.__hmrId).instances.delete(instance); - } - function createRecord(id, initialDef) { - if (map.has(id)) { - return false; - } - map.set(id, { - initialDef: normalizeClassComponent(initialDef), - instances: /* @__PURE__ */ new Set() - }); - return true; - } - function normalizeClassComponent(component) { - return isClassComponent(component) ? component.__vccOpts : component; - } - function rerender(id, newRender) { - const record = map.get(id); - if (!record) { - return; - } - record.initialDef.render = newRender; - [...record.instances].forEach((instance) => { - if (newRender) { - instance.render = newRender; - normalizeClassComponent(instance.type).render = newRender; - } - instance.renderCache = []; - isHmrUpdating = true; - instance.update(); - isHmrUpdating = false; - }); - } - function reload(id, newComp) { - const record = map.get(id); - if (!record) return; - newComp = normalizeClassComponent(newComp); - updateComponentDef(record.initialDef, newComp); - const instances = [...record.instances]; - for (let i = 0; i < instances.length; i++) { - const instance = instances[i]; - const oldComp = normalizeClassComponent(instance.type); - let dirtyInstances = hmrDirtyComponents.get(oldComp); - if (!dirtyInstances) { - if (oldComp !== record.initialDef) { - updateComponentDef(oldComp, newComp); - } - hmrDirtyComponents.set(oldComp, dirtyInstances = /* @__PURE__ */ new Set()); - } - dirtyInstances.add(instance); - instance.appContext.propsCache.delete(instance.type); - instance.appContext.emitsCache.delete(instance.type); - instance.appContext.optionsCache.delete(instance.type); - if (instance.ceReload) { - dirtyInstances.add(instance); - instance.ceReload(newComp.styles); - dirtyInstances.delete(instance); - } else if (instance.parent) { - queueJob(() => { - isHmrUpdating = true; - instance.parent.update(); - isHmrUpdating = false; - dirtyInstances.delete(instance); - }); - } else if (instance.appContext.reload) { - instance.appContext.reload(); - } else if (typeof window !== "undefined") { - window.location.reload(); - } else { - console.warn( - "[HMR] Root or manually mounted instance modified. Full reload required." - ); - } - if (instance.root.ce && instance !== instance.root) { - instance.root.ce._removeChildStyle(oldComp); - } - } - queuePostFlushCb(() => { - hmrDirtyComponents.clear(); - }); - } - function updateComponentDef(oldComp, newComp) { - extend(oldComp, newComp); - for (const key in oldComp) { - if (key !== "__file" && !(key in newComp)) { - delete oldComp[key]; - } - } - } - function tryWrap(fn) { - return (id, arg) => { - try { - return fn(id, arg); - } catch (e) { - console.error(e); - console.warn( - `[HMR] Something went wrong during Vue component hot-reload. Full reload required.` - ); - } - }; - } - - let devtools$1; - let buffer = []; - let devtoolsNotInstalled = false; - function emit$1(event, ...args) { - if (devtools$1) { - devtools$1.emit(event, ...args); - } else if (!devtoolsNotInstalled) { - buffer.push({ event, args }); - } - } - function setDevtoolsHook$1(hook, target) { - var _a, _b; - devtools$1 = hook; - if (devtools$1) { - devtools$1.enabled = true; - buffer.forEach(({ event, args }) => devtools$1.emit(event, ...args)); - buffer = []; - } else if ( - // handle late devtools injection - only do this if we are in an actual - // browser environment to avoid the timer handle stalling test runner exit - // (#4815) - typeof window !== "undefined" && // some envs mock window but not fully - window.HTMLElement && // also exclude jsdom - // eslint-disable-next-line no-restricted-syntax - !((_b = (_a = window.navigator) == null ? void 0 : _a.userAgent) == null ? void 0 : _b.includes("jsdom")) - ) { - const replay = target.__VUE_DEVTOOLS_HOOK_REPLAY__ = target.__VUE_DEVTOOLS_HOOK_REPLAY__ || []; - replay.push((newHook) => { - setDevtoolsHook$1(newHook, target); - }); - setTimeout(() => { - if (!devtools$1) { - target.__VUE_DEVTOOLS_HOOK_REPLAY__ = null; - devtoolsNotInstalled = true; - buffer = []; - } - }, 3e3); - } else { - devtoolsNotInstalled = true; - buffer = []; - } - } - function devtoolsInitApp(app, version) { - emit$1("app:init" /* APP_INIT */, app, version, { - Fragment, - Text, - Comment, - Static - }); - } - function devtoolsUnmountApp(app) { - emit$1("app:unmount" /* APP_UNMOUNT */, app); - } - const devtoolsComponentAdded = /* @__PURE__ */ createDevtoolsComponentHook("component:added" /* COMPONENT_ADDED */); - const devtoolsComponentUpdated = /* @__PURE__ */ createDevtoolsComponentHook("component:updated" /* COMPONENT_UPDATED */); - const _devtoolsComponentRemoved = /* @__PURE__ */ createDevtoolsComponentHook( - "component:removed" /* COMPONENT_REMOVED */ - ); - const devtoolsComponentRemoved = (component) => { - if (devtools$1 && typeof devtools$1.cleanupBuffer === "function" && // remove the component if it wasn't buffered - !devtools$1.cleanupBuffer(component)) { - _devtoolsComponentRemoved(component); - } - }; - /*! #__NO_SIDE_EFFECTS__ */ - // @__NO_SIDE_EFFECTS__ - function createDevtoolsComponentHook(hook) { - return (component) => { - emit$1( - hook, - component.appContext.app, - component.uid, - component.parent ? component.parent.uid : void 0, - component - ); - }; - } - const devtoolsPerfStart = /* @__PURE__ */ createDevtoolsPerformanceHook("perf:start" /* PERFORMANCE_START */); - const devtoolsPerfEnd = /* @__PURE__ */ createDevtoolsPerformanceHook("perf:end" /* PERFORMANCE_END */); - function createDevtoolsPerformanceHook(hook) { - return (component, type, time) => { - emit$1(hook, component.appContext.app, component.uid, component, type, time); - }; - } - function devtoolsComponentEmit(component, event, params) { - emit$1( - "component:emit" /* COMPONENT_EMIT */, - component.appContext.app, - component, - event, - params - ); - } - - let currentRenderingInstance = null; - let currentScopeId = null; - function setCurrentRenderingInstance(instance) { - const prev = currentRenderingInstance; - currentRenderingInstance = instance; - currentScopeId = instance && instance.type.__scopeId || null; - return prev; - } - function pushScopeId(id) { - currentScopeId = id; - } - function popScopeId() { - currentScopeId = null; - } - const withScopeId = (_id) => withCtx; - function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) { - if (!ctx) return fn; - if (fn._n) { - return fn; - } - const renderFnWithContext = (...args) => { - if (renderFnWithContext._d) { - setBlockTracking(-1); - } - const prevInstance = setCurrentRenderingInstance(ctx); - let res; - try { - res = fn(...args); - } finally { - setCurrentRenderingInstance(prevInstance); - if (renderFnWithContext._d) { - setBlockTracking(1); - } - } - { - devtoolsComponentUpdated(ctx); - } - return res; - }; - renderFnWithContext._n = true; - renderFnWithContext._c = true; - renderFnWithContext._d = true; - return renderFnWithContext; - } - - function validateDirectiveName(name) { - if (isBuiltInDirective(name)) { - warn$1("Do not use built-in directive ids as custom directive id: " + name); - } - } - function withDirectives(vnode, directives) { - if (currentRenderingInstance === null) { - warn$1(`withDirectives can only be used inside render functions.`); - return vnode; - } - const instance = getComponentPublicInstance(currentRenderingInstance); - const bindings = vnode.dirs || (vnode.dirs = []); - for (let i = 0; i < directives.length; i++) { - let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i]; - if (dir) { - if (isFunction(dir)) { - dir = { - mounted: dir, - updated: dir - }; - } - if (dir.deep) { - traverse(value); - } - bindings.push({ - dir, - instance, - value, - oldValue: void 0, - arg, - modifiers - }); - } - } - return vnode; - } - function invokeDirectiveHook(vnode, prevVNode, instance, name) { - const bindings = vnode.dirs; - const oldBindings = prevVNode && prevVNode.dirs; - for (let i = 0; i < bindings.length; i++) { - const binding = bindings[i]; - if (oldBindings) { - binding.oldValue = oldBindings[i].value; - } - let hook = binding.dir[name]; - if (hook) { - pauseTracking(); - callWithAsyncErrorHandling(hook, instance, 8, [ - vnode.el, - binding, - vnode, - prevVNode - ]); - resetTracking(); - } - } - } - - const TeleportEndKey = Symbol("_vte"); - const isTeleport = (type) => type.__isTeleport; - const isTeleportDisabled = (props) => props && (props.disabled || props.disabled === ""); - const isTeleportDeferred = (props) => props && (props.defer || props.defer === ""); - const isTargetSVG = (target) => typeof SVGElement !== "undefined" && target instanceof SVGElement; - const isTargetMathML = (target) => typeof MathMLElement === "function" && target instanceof MathMLElement; - const resolveTarget = (props, select) => { - const targetSelector = props && props.to; - if (isString(targetSelector)) { - if (!select) { - warn$1( - `Current renderer does not support string target for Teleports. (missing querySelector renderer option)` - ); - return null; - } else { - const target = select(targetSelector); - if (!target && !isTeleportDisabled(props)) { - warn$1( - `Failed to locate Teleport target with selector "${targetSelector}". Note the target element must exist before the component is mounted - i.e. the target cannot be rendered by the component itself, and ideally should be outside of the entire Vue component tree.` - ); - } - return target; - } - } else { - if (!targetSelector && !isTeleportDisabled(props)) { - warn$1(`Invalid Teleport target: ${targetSelector}`); - } - return targetSelector; - } - }; - const TeleportImpl = { - name: "Teleport", - __isTeleport: true, - process(n1, n2, container, anchor, parentComponent, parentSuspense, namespace, slotScopeIds, optimized, internals) { - const { - mc: mountChildren, - pc: patchChildren, - pbc: patchBlockChildren, - o: { insert, querySelector, createText, createComment } - } = internals; - const disabled = isTeleportDisabled(n2.props); - let { shapeFlag, children, dynamicChildren } = n2; - if (isHmrUpdating) { - optimized = false; - dynamicChildren = null; - } - if (n1 == null) { - const placeholder = n2.el = createComment("teleport start") ; - const mainAnchor = n2.anchor = createComment("teleport end") ; - insert(placeholder, container, anchor); - insert(mainAnchor, container, anchor); - const mount = (container2, anchor2) => { - if (shapeFlag & 16) { - if (parentComponent && parentComponent.isCE) { - parentComponent.ce._teleportTarget = container2; - } - mountChildren( - children, - container2, - anchor2, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized - ); - } - }; - const mountToTarget = () => { - const target = n2.target = resolveTarget(n2.props, querySelector); - const targetAnchor = prepareAnchor(target, n2, createText, insert); - if (target) { - if (namespace !== "svg" && isTargetSVG(target)) { - namespace = "svg"; - } else if (namespace !== "mathml" && isTargetMathML(target)) { - namespace = "mathml"; - } - if (!disabled) { - mount(target, targetAnchor); - updateCssVars(n2, false); - } - } else if (!disabled) { - warn$1( - "Invalid Teleport target on mount:", - target, - `(${typeof target})` - ); - } - }; - if (disabled) { - mount(container, mainAnchor); - updateCssVars(n2, true); - } - if (isTeleportDeferred(n2.props)) { - queuePostRenderEffect(() => { - mountToTarget(); - n2.el.__isMounted = true; - }, parentSuspense); - } else { - mountToTarget(); - } - } else { - if (isTeleportDeferred(n2.props) && !n1.el.__isMounted) { - queuePostRenderEffect(() => { - TeleportImpl.process( - n1, - n2, - container, - anchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - optimized, - internals - ); - delete n1.el.__isMounted; - }, parentSuspense); - return; - } - n2.el = n1.el; - n2.targetStart = n1.targetStart; - const mainAnchor = n2.anchor = n1.anchor; - const target = n2.target = n1.target; - const targetAnchor = n2.targetAnchor = n1.targetAnchor; - const wasDisabled = isTeleportDisabled(n1.props); - const currentContainer = wasDisabled ? container : target; - const currentAnchor = wasDisabled ? mainAnchor : targetAnchor; - if (namespace === "svg" || isTargetSVG(target)) { - namespace = "svg"; - } else if (namespace === "mathml" || isTargetMathML(target)) { - namespace = "mathml"; - } - if (dynamicChildren) { - patchBlockChildren( - n1.dynamicChildren, - dynamicChildren, - currentContainer, - parentComponent, - parentSuspense, - namespace, - slotScopeIds - ); - traverseStaticChildren(n1, n2, true); - } else if (!optimized) { - patchChildren( - n1, - n2, - currentContainer, - currentAnchor, - parentComponent, - parentSuspense, - namespace, - slotScopeIds, - false - ); - } - if (disabled) { - if (!wasDisabled) { - moveTeleport( - n2, - container, - mainAnchor, - internals, - 1 - ); - } else { - if (n2.props && n1.props && n2.props.to !== n1.props.to) { - n2.props.to = n1.props.to; - } - } - } else { - if ((n2.props && n2.props.to) !== (n1.props && n1.props.to)) { - const nextTarget = n2.target = resolveTarget( - n2.props, - querySelector - ); - if (nextTarget) { - moveTeleport( - n2, - nextTarget, - null, - internals, - 0 - ); - } else { - warn$1( - "Invalid Teleport target on update:", - target, - `(${typeof target})` - ); - } - } else if (wasDisabled) { - moveTeleport( - n2, - target, - targetAnchor, - internals, - 1 - ); - } - } - updateCssVars(n2, disabled); - } - }, - remove(vnode, parentComponent, parentSuspense, { um: unmount, o: { remove: hostRemove } }, doRemove) { - const { - shapeFlag, - children, - anchor, - targetStart, - targetAnchor, - target, - props - } = vnode; - if (target) { - hostRemove(targetStart); - hostRemove(targetAnchor); - } - doRemove && hostRemove(anchor); - if (shapeFlag & 16) { - const shouldRemove = doRemove || !isTeleportDisabled(props); - for (let i = 0; i < children.length; i++) { - const child = children[i]; - unmount( - child, - parentComponent, - parentSuspense, - shouldRemove, - !!child.dynamicChildren - ); - } - } - }, - move: moveTeleport, - hydrate: hydrateTeleport - }; - function moveTeleport(vnode, container, parentAnchor, { o: { insert }, m: move }, moveType = 2) { - if (moveType === 0) { - insert(vnode.targetAnchor, container, parentAnchor); - } - const { el, anchor, shapeFlag, children, props } = vnode; - const isReorder = moveType === 2; - if (isReorder) { - insert(el, container, parentAnchor); - } - if (!isReorder || isTeleportDisabled(props)) { - if (shapeFlag & 16) { - for (let i = 0; i < children.length; i++) { - move( - children[i], - container, - parentAnchor, - 2 - ); - } - } - } - if (isReorder) { - insert(anchor, container, parentAnchor); - } - } - function hydrateTeleport(node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized, { - o: { nextSibling, parentNode, querySelector, insert, createText } - }, hydrateChildren) { - const target = vnode.target = resolveTarget( - vnode.props, - querySelector - ); - if (target) { - const disabled = isTeleportDisabled(vnode.props); - const targetNode = target._lpa || target.firstChild; - if (vnode.shapeFlag & 16) { - if (disabled) { - vnode.anchor = hydrateChildren( - nextSibling(node), - vnode, - parentNode(node), - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - vnode.targetStart = targetNode; - vnode.targetAnchor = targetNode && nextSibling(targetNode); - } else { - vnode.anchor = nextSibling(node); - let targetAnchor = targetNode; - while (targetAnchor) { - if (targetAnchor && targetAnchor.nodeType === 8) { - if (targetAnchor.data === "teleport start anchor") { - vnode.targetStart = targetAnchor; - } else if (targetAnchor.data === "teleport anchor") { - vnode.targetAnchor = targetAnchor; - target._lpa = vnode.targetAnchor && nextSibling(vnode.targetAnchor); - break; - } - } - targetAnchor = nextSibling(targetAnchor); - } - if (!vnode.targetAnchor) { - prepareAnchor(target, vnode, createText, insert); - } - hydrateChildren( - targetNode && nextSibling(targetNode), - vnode, - target, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } - } - updateCssVars(vnode, disabled); - } - return vnode.anchor && nextSibling(vnode.anchor); - } - const Teleport = TeleportImpl; - function updateCssVars(vnode, isDisabled) { - const ctx = vnode.ctx; - if (ctx && ctx.ut) { - let node, anchor; - if (isDisabled) { - node = vnode.el; - anchor = vnode.anchor; - } else { - node = vnode.targetStart; - anchor = vnode.targetAnchor; - } - while (node && node !== anchor) { - if (node.nodeType === 1) node.setAttribute("data-v-owner", ctx.uid); - node = node.nextSibling; - } - ctx.ut(); - } - } - function prepareAnchor(target, vnode, createText, insert) { - const targetStart = vnode.targetStart = createText(""); - const targetAnchor = vnode.targetAnchor = createText(""); - targetStart[TeleportEndKey] = targetAnchor; - if (target) { - insert(targetStart, target); - insert(targetAnchor, target); - } - return targetAnchor; - } - - const leaveCbKey = Symbol("_leaveCb"); - const enterCbKey$1 = Symbol("_enterCb"); - function useTransitionState() { - const state = { - isMounted: false, - isLeaving: false, - isUnmounting: false, - leavingVNodes: /* @__PURE__ */ new Map() - }; - onMounted(() => { - state.isMounted = true; - }); - onBeforeUnmount(() => { - state.isUnmounting = true; - }); - return state; - } - const TransitionHookValidator = [Function, Array]; - const BaseTransitionPropsValidators = { - mode: String, - appear: Boolean, - persisted: Boolean, - // enter - onBeforeEnter: TransitionHookValidator, - onEnter: TransitionHookValidator, - onAfterEnter: TransitionHookValidator, - onEnterCancelled: TransitionHookValidator, - // leave - onBeforeLeave: TransitionHookValidator, - onLeave: TransitionHookValidator, - onAfterLeave: TransitionHookValidator, - onLeaveCancelled: TransitionHookValidator, - // appear - onBeforeAppear: TransitionHookValidator, - onAppear: TransitionHookValidator, - onAfterAppear: TransitionHookValidator, - onAppearCancelled: TransitionHookValidator - }; - const recursiveGetSubtree = (instance) => { - const subTree = instance.subTree; - return subTree.component ? recursiveGetSubtree(subTree.component) : subTree; - }; - const BaseTransitionImpl = { - name: `BaseTransition`, - props: BaseTransitionPropsValidators, - setup(props, { slots }) { - const instance = getCurrentInstance(); - const state = useTransitionState(); - return () => { - const children = slots.default && getTransitionRawChildren(slots.default(), true); - if (!children || !children.length) { - return; - } - const child = findNonCommentChild(children); - const rawProps = toRaw(props); - const { mode } = rawProps; - if (mode && mode !== "in-out" && mode !== "out-in" && mode !== "default") { - warn$1(`invalid mode: ${mode}`); - } - if (state.isLeaving) { - return emptyPlaceholder(child); - } - const innerChild = getInnerChild$1(child); - if (!innerChild) { - return emptyPlaceholder(child); - } - let enterHooks = resolveTransitionHooks( - innerChild, - rawProps, - state, - instance, - // #11061, ensure enterHooks is fresh after clone - (hooks) => enterHooks = hooks - ); - if (innerChild.type !== Comment) { - setTransitionHooks(innerChild, enterHooks); - } - let oldInnerChild = instance.subTree && getInnerChild$1(instance.subTree); - if (oldInnerChild && oldInnerChild.type !== Comment && !isSameVNodeType(innerChild, oldInnerChild) && recursiveGetSubtree(instance).type !== Comment) { - let leavingHooks = resolveTransitionHooks( - oldInnerChild, - rawProps, - state, - instance - ); - setTransitionHooks(oldInnerChild, leavingHooks); - if (mode === "out-in" && innerChild.type !== Comment) { - state.isLeaving = true; - leavingHooks.afterLeave = () => { - state.isLeaving = false; - if (!(instance.job.flags & 8)) { - instance.update(); - } - delete leavingHooks.afterLeave; - oldInnerChild = void 0; - }; - return emptyPlaceholder(child); - } else if (mode === "in-out" && innerChild.type !== Comment) { - leavingHooks.delayLeave = (el, earlyRemove, delayedLeave) => { - const leavingVNodesCache = getLeavingNodesForType( - state, - oldInnerChild - ); - leavingVNodesCache[String(oldInnerChild.key)] = oldInnerChild; - el[leaveCbKey] = () => { - earlyRemove(); - el[leaveCbKey] = void 0; - delete enterHooks.delayedLeave; - oldInnerChild = void 0; - }; - enterHooks.delayedLeave = () => { - delayedLeave(); - delete enterHooks.delayedLeave; - oldInnerChild = void 0; - }; - }; - } else { - oldInnerChild = void 0; - } - } else if (oldInnerChild) { - oldInnerChild = void 0; - } - return child; - }; - } - }; - function findNonCommentChild(children) { - let child = children[0]; - if (children.length > 1) { - let hasFound = false; - for (const c of children) { - if (c.type !== Comment) { - if (hasFound) { - warn$1( - " can only be used on a single element or component. Use for lists." - ); - break; - } - child = c; - hasFound = true; - } - } - } - return child; - } - const BaseTransition = BaseTransitionImpl; - function getLeavingNodesForType(state, vnode) { - const { leavingVNodes } = state; - let leavingVNodesCache = leavingVNodes.get(vnode.type); - if (!leavingVNodesCache) { - leavingVNodesCache = /* @__PURE__ */ Object.create(null); - leavingVNodes.set(vnode.type, leavingVNodesCache); - } - return leavingVNodesCache; - } - function resolveTransitionHooks(vnode, props, state, instance, postClone) { - const { - appear, - mode, - persisted = false, - onBeforeEnter, - onEnter, - onAfterEnter, - onEnterCancelled, - onBeforeLeave, - onLeave, - onAfterLeave, - onLeaveCancelled, - onBeforeAppear, - onAppear, - onAfterAppear, - onAppearCancelled - } = props; - const key = String(vnode.key); - const leavingVNodesCache = getLeavingNodesForType(state, vnode); - const callHook = (hook, args) => { - hook && callWithAsyncErrorHandling( - hook, - instance, - 9, - args - ); - }; - const callAsyncHook = (hook, args) => { - const done = args[1]; - callHook(hook, args); - if (isArray(hook)) { - if (hook.every((hook2) => hook2.length <= 1)) done(); - } else if (hook.length <= 1) { - done(); - } - }; - const hooks = { - mode, - persisted, - beforeEnter(el) { - let hook = onBeforeEnter; - if (!state.isMounted) { - if (appear) { - hook = onBeforeAppear || onBeforeEnter; - } else { - return; - } - } - if (el[leaveCbKey]) { - el[leaveCbKey]( - true - /* cancelled */ - ); - } - const leavingVNode = leavingVNodesCache[key]; - if (leavingVNode && isSameVNodeType(vnode, leavingVNode) && leavingVNode.el[leaveCbKey]) { - leavingVNode.el[leaveCbKey](); - } - callHook(hook, [el]); - }, - enter(el) { - let hook = onEnter; - let afterHook = onAfterEnter; - let cancelHook = onEnterCancelled; - if (!state.isMounted) { - if (appear) { - hook = onAppear || onEnter; - afterHook = onAfterAppear || onAfterEnter; - cancelHook = onAppearCancelled || onEnterCancelled; - } else { - return; - } - } - let called = false; - const done = el[enterCbKey$1] = (cancelled) => { - if (called) return; - called = true; - if (cancelled) { - callHook(cancelHook, [el]); - } else { - callHook(afterHook, [el]); - } - if (hooks.delayedLeave) { - hooks.delayedLeave(); - } - el[enterCbKey$1] = void 0; - }; - if (hook) { - callAsyncHook(hook, [el, done]); - } else { - done(); - } - }, - leave(el, remove) { - const key2 = String(vnode.key); - if (el[enterCbKey$1]) { - el[enterCbKey$1]( - true - /* cancelled */ - ); - } - if (state.isUnmounting) { - return remove(); - } - callHook(onBeforeLeave, [el]); - let called = false; - const done = el[leaveCbKey] = (cancelled) => { - if (called) return; - called = true; - remove(); - if (cancelled) { - callHook(onLeaveCancelled, [el]); - } else { - callHook(onAfterLeave, [el]); - } - el[leaveCbKey] = void 0; - if (leavingVNodesCache[key2] === vnode) { - delete leavingVNodesCache[key2]; - } - }; - leavingVNodesCache[key2] = vnode; - if (onLeave) { - callAsyncHook(onLeave, [el, done]); - } else { - done(); - } - }, - clone(vnode2) { - const hooks2 = resolveTransitionHooks( - vnode2, - props, - state, - instance, - postClone - ); - if (postClone) postClone(hooks2); - return hooks2; - } - }; - return hooks; - } - function emptyPlaceholder(vnode) { - if (isKeepAlive(vnode)) { - vnode = cloneVNode(vnode); - vnode.children = null; - return vnode; - } - } - function getInnerChild$1(vnode) { - if (!isKeepAlive(vnode)) { - if (isTeleport(vnode.type) && vnode.children) { - return findNonCommentChild(vnode.children); - } - return vnode; - } - if (vnode.component) { - return vnode.component.subTree; - } - const { shapeFlag, children } = vnode; - if (children) { - if (shapeFlag & 16) { - return children[0]; - } - if (shapeFlag & 32 && isFunction(children.default)) { - return children.default(); - } - } - } - function setTransitionHooks(vnode, hooks) { - if (vnode.shapeFlag & 6 && vnode.component) { - vnode.transition = hooks; - setTransitionHooks(vnode.component.subTree, hooks); - } else if (vnode.shapeFlag & 128) { - vnode.ssContent.transition = hooks.clone(vnode.ssContent); - vnode.ssFallback.transition = hooks.clone(vnode.ssFallback); - } else { - vnode.transition = hooks; - } - } - function getTransitionRawChildren(children, keepComment = false, parentKey) { - let ret = []; - let keyedFragmentCount = 0; - for (let i = 0; i < children.length; i++) { - let child = children[i]; - const key = parentKey == null ? child.key : String(parentKey) + String(child.key != null ? child.key : i); - if (child.type === Fragment) { - if (child.patchFlag & 128) keyedFragmentCount++; - ret = ret.concat( - getTransitionRawChildren(child.children, keepComment, key) - ); - } else if (keepComment || child.type !== Comment) { - ret.push(key != null ? cloneVNode(child, { key }) : child); - } - } - if (keyedFragmentCount > 1) { - for (let i = 0; i < ret.length; i++) { - ret[i].patchFlag = -2; - } - } - return ret; - } - - /*! #__NO_SIDE_EFFECTS__ */ - // @__NO_SIDE_EFFECTS__ - function defineComponent(options, extraOptions) { - return isFunction(options) ? ( - // #8236: extend call and options.name access are considered side-effects - // by Rollup, so we have to wrap it in a pure-annotated IIFE. - /* @__PURE__ */ (() => extend({ name: options.name }, extraOptions, { setup: options }))() - ) : options; - } - - function useId() { - const i = getCurrentInstance(); - if (i) { - return (i.appContext.config.idPrefix || "v") + "-" + i.ids[0] + i.ids[1]++; - } else { - warn$1( - `useId() is called when there is no active component instance to be associated with.` - ); - } - return ""; - } - function markAsyncBoundary(instance) { - instance.ids = [instance.ids[0] + instance.ids[2]++ + "-", 0, 0]; - } - - const knownTemplateRefs = /* @__PURE__ */ new WeakSet(); - function useTemplateRef(key) { - const i = getCurrentInstance(); - const r = shallowRef(null); - if (i) { - const refs = i.refs === EMPTY_OBJ ? i.refs = {} : i.refs; - let desc; - if ((desc = Object.getOwnPropertyDescriptor(refs, key)) && !desc.configurable) { - warn$1(`useTemplateRef('${key}') already exists.`); - } else { - Object.defineProperty(refs, key, { - enumerable: true, - get: () => r.value, - set: (val) => r.value = val - }); - } - } else { - warn$1( - `useTemplateRef() is called when there is no active component instance to be associated with.` - ); - } - const ret = readonly(r) ; - { - knownTemplateRefs.add(ret); - } - return ret; - } - - function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) { - if (isArray(rawRef)) { - rawRef.forEach( - (r, i) => setRef( - r, - oldRawRef && (isArray(oldRawRef) ? oldRawRef[i] : oldRawRef), - parentSuspense, - vnode, - isUnmount - ) - ); - return; - } - if (isAsyncWrapper(vnode) && !isUnmount) { - if (vnode.shapeFlag & 512 && vnode.type.__asyncResolved && vnode.component.subTree.component) { - setRef(rawRef, oldRawRef, parentSuspense, vnode.component.subTree); - } - return; - } - const refValue = vnode.shapeFlag & 4 ? getComponentPublicInstance(vnode.component) : vnode.el; - const value = isUnmount ? null : refValue; - const { i: owner, r: ref } = rawRef; - if (!owner) { - warn$1( - `Missing ref owner context. ref cannot be used on hoisted vnodes. A vnode with ref must be created inside the render function.` - ); - return; - } - const oldRef = oldRawRef && oldRawRef.r; - const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs; - const setupState = owner.setupState; - const rawSetupState = toRaw(setupState); - const canSetSetupRef = setupState === EMPTY_OBJ ? () => false : (key) => { - { - if (hasOwn(rawSetupState, key) && !isRef(rawSetupState[key])) { - warn$1( - `Template ref "${key}" used on a non-ref value. It will not work in the production build.` - ); - } - if (knownTemplateRefs.has(rawSetupState[key])) { - return false; - } - } - return hasOwn(rawSetupState, key); - }; - if (oldRef != null && oldRef !== ref) { - if (isString(oldRef)) { - refs[oldRef] = null; - if (canSetSetupRef(oldRef)) { - setupState[oldRef] = null; - } - } else if (isRef(oldRef)) { - oldRef.value = null; - } - } - if (isFunction(ref)) { - callWithErrorHandling(ref, owner, 12, [value, refs]); - } else { - const _isString = isString(ref); - const _isRef = isRef(ref); - if (_isString || _isRef) { - const doSet = () => { - if (rawRef.f) { - const existing = _isString ? canSetSetupRef(ref) ? setupState[ref] : refs[ref] : ref.value; - if (isUnmount) { - isArray(existing) && remove(existing, refValue); - } else { - if (!isArray(existing)) { - if (_isString) { - refs[ref] = [refValue]; - if (canSetSetupRef(ref)) { - setupState[ref] = refs[ref]; - } - } else { - ref.value = [refValue]; - if (rawRef.k) refs[rawRef.k] = ref.value; - } - } else if (!existing.includes(refValue)) { - existing.push(refValue); - } - } - } else if (_isString) { - refs[ref] = value; - if (canSetSetupRef(ref)) { - setupState[ref] = value; - } - } else if (_isRef) { - ref.value = value; - if (rawRef.k) refs[rawRef.k] = value; - } else { - warn$1("Invalid template ref type:", ref, `(${typeof ref})`); - } - }; - if (value) { - doSet.id = -1; - queuePostRenderEffect(doSet, parentSuspense); - } else { - doSet(); - } - } else { - warn$1("Invalid template ref type:", ref, `(${typeof ref})`); - } - } - } - - let hasLoggedMismatchError = false; - const logMismatchError = () => { - if (hasLoggedMismatchError) { - return; - } - console.error("Hydration completed but contains mismatches."); - hasLoggedMismatchError = true; - }; - const isSVGContainer = (container) => container.namespaceURI.includes("svg") && container.tagName !== "foreignObject"; - const isMathMLContainer = (container) => container.namespaceURI.includes("MathML"); - const getContainerType = (container) => { - if (container.nodeType !== 1) return void 0; - if (isSVGContainer(container)) return "svg"; - if (isMathMLContainer(container)) return "mathml"; - return void 0; - }; - const isComment = (node) => node.nodeType === 8; - function createHydrationFunctions(rendererInternals) { - const { - mt: mountComponent, - p: patch, - o: { - patchProp, - createText, - nextSibling, - parentNode, - remove, - insert, - createComment - } - } = rendererInternals; - const hydrate = (vnode, container) => { - if (!container.hasChildNodes()) { - warn$1( - `Attempting to hydrate existing markup but container is empty. Performing full mount instead.` - ); - patch(null, vnode, container); - flushPostFlushCbs(); - container._vnode = vnode; - return; - } - hydrateNode(container.firstChild, vnode, null, null, null); - flushPostFlushCbs(); - container._vnode = vnode; - }; - const hydrateNode = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized = false) => { - optimized = optimized || !!vnode.dynamicChildren; - const isFragmentStart = isComment(node) && node.data === "["; - const onMismatch = () => handleMismatch( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - isFragmentStart - ); - const { type, ref, shapeFlag, patchFlag } = vnode; - let domType = node.nodeType; - vnode.el = node; - { - def(node, "__vnode", vnode, true); - def(node, "__vueParentComponent", parentComponent, true); - } - if (patchFlag === -2) { - optimized = false; - vnode.dynamicChildren = null; - } - let nextNode = null; - switch (type) { - case Text: - if (domType !== 3) { - if (vnode.children === "") { - insert(vnode.el = createText(""), parentNode(node), node); - nextNode = node; - } else { - nextNode = onMismatch(); - } - } else { - if (node.data !== vnode.children) { - warn$1( - `Hydration text mismatch in`, - node.parentNode, - ` - - rendered on server: ${JSON.stringify( - node.data - )} - - expected on client: ${JSON.stringify(vnode.children)}` - ); - logMismatchError(); - node.data = vnode.children; - } - nextNode = nextSibling(node); - } - break; - case Comment: - if (isTemplateNode(node)) { - nextNode = nextSibling(node); - replaceNode( - vnode.el = node.content.firstChild, - node, - parentComponent - ); - } else if (domType !== 8 || isFragmentStart) { - nextNode = onMismatch(); - } else { - nextNode = nextSibling(node); - } - break; - case Static: - if (isFragmentStart) { - node = nextSibling(node); - domType = node.nodeType; - } - if (domType === 1 || domType === 3) { - nextNode = node; - const needToAdoptContent = !vnode.children.length; - for (let i = 0; i < vnode.staticCount; i++) { - if (needToAdoptContent) - vnode.children += nextNode.nodeType === 1 ? nextNode.outerHTML : nextNode.data; - if (i === vnode.staticCount - 1) { - vnode.anchor = nextNode; - } - nextNode = nextSibling(nextNode); - } - return isFragmentStart ? nextSibling(nextNode) : nextNode; - } else { - onMismatch(); - } - break; - case Fragment: - if (!isFragmentStart) { - nextNode = onMismatch(); - } else { - nextNode = hydrateFragment( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } - break; - default: - if (shapeFlag & 1) { - if ((domType !== 1 || vnode.type.toLowerCase() !== node.tagName.toLowerCase()) && !isTemplateNode(node)) { - nextNode = onMismatch(); - } else { - nextNode = hydrateElement( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } - } else if (shapeFlag & 6) { - vnode.slotScopeIds = slotScopeIds; - const container = parentNode(node); - if (isFragmentStart) { - nextNode = locateClosingAnchor(node); - } else if (isComment(node) && node.data === "teleport start") { - nextNode = locateClosingAnchor(node, node.data, "teleport end"); - } else { - nextNode = nextSibling(node); - } - mountComponent( - vnode, - container, - null, - parentComponent, - parentSuspense, - getContainerType(container), - optimized - ); - if (isAsyncWrapper(vnode) && !vnode.type.__asyncResolved) { - let subTree; - if (isFragmentStart) { - subTree = createVNode(Fragment); - subTree.anchor = nextNode ? nextNode.previousSibling : container.lastChild; - } else { - subTree = node.nodeType === 3 ? createTextVNode("") : createVNode("div"); - } - subTree.el = node; - vnode.component.subTree = subTree; - } - } else if (shapeFlag & 64) { - if (domType !== 8) { - nextNode = onMismatch(); - } else { - nextNode = vnode.type.hydrate( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized, - rendererInternals, - hydrateChildren - ); - } - } else if (shapeFlag & 128) { - nextNode = vnode.type.hydrate( - node, - vnode, - parentComponent, - parentSuspense, - getContainerType(parentNode(node)), - slotScopeIds, - optimized, - rendererInternals, - hydrateNode - ); - } else { - warn$1("Invalid HostVNode type:", type, `(${typeof type})`); - } - } - if (ref != null) { - setRef(ref, null, parentSuspense, vnode); - } - return nextNode; - }; - const hydrateElement = (el, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { - optimized = optimized || !!vnode.dynamicChildren; - const { type, props, patchFlag, shapeFlag, dirs, transition } = vnode; - const forcePatch = type === "input" || type === "option"; - { - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "created"); - } - let needCallTransitionHooks = false; - if (isTemplateNode(el)) { - needCallTransitionHooks = needTransition( - null, - // no need check parentSuspense in hydration - transition - ) && parentComponent && parentComponent.vnode.props && parentComponent.vnode.props.appear; - const content = el.content.firstChild; - if (needCallTransitionHooks) { - transition.beforeEnter(content); - } - replaceNode(content, el, parentComponent); - vnode.el = el = content; - } - if (shapeFlag & 16 && // skip if element has innerHTML / textContent - !(props && (props.innerHTML || props.textContent))) { - let next = hydrateChildren( - el.firstChild, - vnode, - el, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - let hasWarned = false; - while (next) { - if (!isMismatchAllowed(el, 1 /* CHILDREN */)) { - if (!hasWarned) { - warn$1( - `Hydration children mismatch on`, - el, - ` -Server rendered element contains more child nodes than client vdom.` - ); - hasWarned = true; - } - logMismatchError(); - } - const cur = next; - next = next.nextSibling; - remove(cur); - } - } else if (shapeFlag & 8) { - let clientText = vnode.children; - if (clientText[0] === "\n" && (el.tagName === "PRE" || el.tagName === "TEXTAREA")) { - clientText = clientText.slice(1); - } - if (el.textContent !== clientText) { - if (!isMismatchAllowed(el, 0 /* TEXT */)) { - warn$1( - `Hydration text content mismatch on`, - el, - ` - - rendered on server: ${el.textContent} - - expected on client: ${vnode.children}` - ); - logMismatchError(); - } - el.textContent = vnode.children; - } - } - if (props) { - { - const isCustomElement = el.tagName.includes("-"); - for (const key in props) { - if (// #11189 skip if this node has directives that have created hooks - // as it could have mutated the DOM in any possible way - !(dirs && dirs.some((d) => d.dir.created)) && propHasMismatch(el, key, props[key], vnode, parentComponent)) { - logMismatchError(); - } - if (forcePatch && (key.endsWith("value") || key === "indeterminate") || isOn(key) && !isReservedProp(key) || // force hydrate v-bind with .prop modifiers - key[0] === "." || isCustomElement) { - patchProp(el, key, null, props[key], void 0, parentComponent); - } - } - } - } - let vnodeHooks; - if (vnodeHooks = props && props.onVnodeBeforeMount) { - invokeVNodeHook(vnodeHooks, parentComponent, vnode); - } - if (dirs) { - invokeDirectiveHook(vnode, null, parentComponent, "beforeMount"); - } - if ((vnodeHooks = props && props.onVnodeMounted) || dirs || needCallTransitionHooks) { - queueEffectWithSuspense(() => { - vnodeHooks && invokeVNodeHook(vnodeHooks, parentComponent, vnode); - needCallTransitionHooks && transition.enter(el); - dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted"); - }, parentSuspense); - } - } - return el.nextSibling; - }; - const hydrateChildren = (node, parentVNode, container, parentComponent, parentSuspense, slotScopeIds, optimized) => { - optimized = optimized || !!parentVNode.dynamicChildren; - const children = parentVNode.children; - const l = children.length; - let hasWarned = false; - for (let i = 0; i < l; i++) { - const vnode = optimized ? children[i] : children[i] = normalizeVNode(children[i]); - const isText = vnode.type === Text; - if (node) { - if (isText && !optimized) { - if (i + 1 < l && normalizeVNode(children[i + 1]).type === Text) { - insert( - createText( - node.data.slice(vnode.children.length) - ), - container, - nextSibling(node) - ); - node.data = vnode.children; - } - } - node = hydrateNode( - node, - vnode, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - } else if (isText && !vnode.children) { - insert(vnode.el = createText(""), container); - } else { - if (!isMismatchAllowed(container, 1 /* CHILDREN */)) { - if (!hasWarned) { - warn$1( - `Hydration children mismatch on`, - container, - ` -Server rendered element contains fewer child nodes than client vdom.` - ); - hasWarned = true; - } - logMismatchError(); - } - patch( - null, - vnode, - container, - null, - parentComponent, - parentSuspense, - getContainerType(container), - slotScopeIds - ); - } - } - return node; - }; - const hydrateFragment = (node, vnode, parentComponent, parentSuspense, slotScopeIds, optimized) => { - const { slotScopeIds: fragmentSlotScopeIds } = vnode; - if (fragmentSlotScopeIds) { - slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds; - } - const container = parentNode(node); - const next = hydrateChildren( - nextSibling(node), - vnode, - container, - parentComponent, - parentSuspense, - slotScopeIds, - optimized - ); - if (next && isComment(next) && next.data === "]") { - return nextSibling(vnode.anchor = next); - } else { - logMismatchError(); - insert(vnode.anchor = createComment(`]`), container, next); - return next; - } - }; - const handleMismatch = (node, vnode, parentComponent, parentSuspense, slotScopeIds, isFragment) => { - if (!isMismatchAllowed(node.parentElement, 1 /* CHILDREN */)) { - warn$1( - `Hydration node mismatch: -- rendered on server:`, - node, - node.nodeType === 3 ? `(text)` : isComment(node) && node.data === "[" ? `(start of fragment)` : ``, - ` -- expected on client:`, - vnode.type - ); - logMismatchError(); - } - vnode.el = null; - if (isFragment) { - const end = locateClosingAnchor(node); - while (true) { - const next2 = nextSibling(node); - if (next2 && next2 !== end) { - remove(next2); - } else { - break; - } - } - } - const next = nextSibling(node); - const container = parentNode(node); - remove(node); - patch( - null, - vnode, - container, - next, - parentComponent, - parentSuspense, - getContainerType(container), - slotScopeIds - ); - if (parentComponent) { - parentComponent.vnode.el = vnode.el; - updateHOCHostEl(parentComponent, vnode.el); - } - return next; - }; - const locateClosingAnchor = (node, open = "[", close = "]") => { - let match = 0; - while (node) { - node = nextSibling(node); - if (node && isComment(node)) { - if (node.data === open) match++; - if (node.data === close) { - if (match === 0) { - return nextSibling(node); - } else { - match--; - } - } - } - } - return node; - }; - const replaceNode = (newNode, oldNode, parentComponent) => { - const parentNode2 = oldNode.parentNode; - if (parentNode2) { - parentNode2.replaceChild(newNode, oldNode); - } - let parent = parentComponent; - while (parent) { - if (parent.vnode.el === oldNode) { - parent.vnode.el = parent.subTree.el = newNode; - } - parent = parent.parent; - } - }; - const isTemplateNode = (node) => { - return node.nodeType === 1 && node.tagName === "TEMPLATE"; - }; - return [hydrate, hydrateNode]; - } - function propHasMismatch(el, key, clientValue, vnode, instance) { - let mismatchType; - let mismatchKey; - let actual; - let expected; - if (key === "class") { - actual = el.getAttribute("class"); - expected = normalizeClass(clientValue); - if (!isSetEqual(toClassSet(actual || ""), toClassSet(expected))) { - mismatchType = 2 /* CLASS */; - mismatchKey = `class`; - } - } else if (key === "style") { - actual = el.getAttribute("style") || ""; - expected = isString(clientValue) ? clientValue : stringifyStyle(normalizeStyle(clientValue)); - const actualMap = toStyleMap(actual); - const expectedMap = toStyleMap(expected); - if (vnode.dirs) { - for (const { dir, value } of vnode.dirs) { - if (dir.name === "show" && !value) { - expectedMap.set("display", "none"); - } - } - } - if (instance) { - resolveCssVars(instance, vnode, expectedMap); - } - if (!isMapEqual(actualMap, expectedMap)) { - mismatchType = 3 /* STYLE */; - mismatchKey = "style"; - } - } else if (el instanceof SVGElement && isKnownSvgAttr(key) || el instanceof HTMLElement && (isBooleanAttr(key) || isKnownHtmlAttr(key))) { - if (isBooleanAttr(key)) { - actual = el.hasAttribute(key); - expected = includeBooleanAttr(clientValue); - } else if (clientValue == null) { - actual = el.hasAttribute(key); - expected = false; - } else { - if (el.hasAttribute(key)) { - actual = el.getAttribute(key); - } else if (key === "value" && el.tagName === "TEXTAREA") { - actual = el.value; - } else { - actual = false; - } - expected = isRenderableAttrValue(clientValue) ? String(clientValue) : false; - } - if (actual !== expected) { - mismatchType = 4 /* ATTRIBUTE */; - mismatchKey = key; - } - } - if (mismatchType != null && !isMismatchAllowed(el, mismatchType)) { - const format = (v) => v === false ? `(not rendered)` : `${mismatchKey}="${v}"`; - const preSegment = `Hydration ${MismatchTypeString[mismatchType]} mismatch on`; - const postSegment = ` - - rendered on server: ${format(actual)} - - expected on client: ${format(expected)} - Note: this mismatch is check-only. The DOM will not be rectified in production due to performance overhead. - You should fix the source of the mismatch.`; - { - warn$1(preSegment, el, postSegment); - } - return true; - } - return false; - } - function toClassSet(str) { - return new Set(str.trim().split(/\s+/)); - } - function isSetEqual(a, b) { - if (a.size !== b.size) { - return false; - } - for (const s of a) { - if (!b.has(s)) { - return false; - } - } - return true; - } - function toStyleMap(str) { - const styleMap = /* @__PURE__ */ new Map(); - for (const item of str.split(";")) { - let [key, value] = item.split(":"); - key = key.trim(); - value = value && value.trim(); - if (key && value) { - styleMap.set(key, value); - } - } - return styleMap; - } - function isMapEqual(a, b) { - if (a.size !== b.size) { - return false; - } - for (const [key, value] of a) { - if (value !== b.get(key)) { - return false; - } - } - return true; - } - function resolveCssVars(instance, vnode, expectedMap) { - const root = instance.subTree; - if (instance.getCssVars && (vnode === root || root && root.type === Fragment && root.children.includes(vnode))) { - const cssVars = instance.getCssVars(); - for (const key in cssVars) { - expectedMap.set( - `--${getEscapedCssVarName(key)}`, - String(cssVars[key]) - ); - } - } - if (vnode === root && instance.parent) { - resolveCssVars(instance.parent, instance.vnode, expectedMap); - } - } - const allowMismatchAttr = "data-allow-mismatch"; - const MismatchTypeString = { - [0 /* TEXT */]: "text", - [1 /* CHILDREN */]: "children", - [2 /* CLASS */]: "class", - [3 /* STYLE */]: "style", - [4 /* ATTRIBUTE */]: "attribute" - }; - function isMismatchAllowed(el, allowedType) { - if (allowedType === 0 /* TEXT */ || allowedType === 1 /* CHILDREN */) { - while (el && !el.hasAttribute(allowMismatchAttr)) { - el = el.parentElement; - } - } - const allowedAttr = el && el.getAttribute(allowMismatchAttr); - if (allowedAttr == null) { - return false; - } else if (allowedAttr === "") { - return true; - } else { - const list = allowedAttr.split(","); - if (allowedType === 0 /* TEXT */ && list.includes("children")) { - return true; - } - return allowedAttr.split(",").includes(MismatchTypeString[allowedType]); - } - } - - const requestIdleCallback = getGlobalThis().requestIdleCallback || ((cb) => setTimeout(cb, 1)); - const cancelIdleCallback = getGlobalThis().cancelIdleCallback || ((id) => clearTimeout(id)); - const hydrateOnIdle = (timeout = 1e4) => (hydrate) => { - const id = requestIdleCallback(hydrate, { timeout }); - return () => cancelIdleCallback(id); - }; - function elementIsVisibleInViewport(el) { - const { top, left, bottom, right } = el.getBoundingClientRect(); - const { innerHeight, innerWidth } = window; - return (top > 0 && top < innerHeight || bottom > 0 && bottom < innerHeight) && (left > 0 && left < innerWidth || right > 0 && right < innerWidth); - } - const hydrateOnVisible = (opts) => (hydrate, forEach) => { - const ob = new IntersectionObserver((entries) => { - for (const e of entries) { - if (!e.isIntersecting) continue; - ob.disconnect(); - hydrate(); - break; - } - }, opts); - forEach((el) => { - if (!(el instanceof Element)) return; - if (elementIsVisibleInViewport(el)) { - hydrate(); - ob.disconnect(); - return false; - } - ob.observe(el); - }); - return () => ob.disconnect(); - }; - const hydrateOnMediaQuery = (query) => (hydrate) => { - if (query) { - const mql = matchMedia(query); - if (mql.matches) { - hydrate(); - } else { - mql.addEventListener("change", hydrate, { once: true }); - return () => mql.removeEventListener("change", hydrate); - } - } - }; - const hydrateOnInteraction = (interactions = []) => (hydrate, forEach) => { - if (isString(interactions)) interactions = [interactions]; - let hasHydrated = false; - const doHydrate = (e) => { - if (!hasHydrated) { - hasHydrated = true; - teardown(); - hydrate(); - e.target.dispatchEvent(new e.constructor(e.type, e)); - } - }; - const teardown = () => { - forEach((el) => { - for (const i of interactions) { - el.removeEventListener(i, doHydrate); - } - }); - }; - forEach((el) => { - for (const i of interactions) { - el.addEventListener(i, doHydrate, { once: true }); - } - }); - return teardown; - }; - function forEachElement(node, cb) { - if (isComment(node) && node.data === "[") { - let depth = 1; - let next = node.nextSibling; - while (next) { - if (next.nodeType === 1) { - const result = cb(next); - if (result === false) { - break; - } - } else if (isComment(next)) { - if (next.data === "]") { - if (--depth === 0) break; - } else if (next.data === "[") { - depth++; - } - } - next = next.nextSibling; - } - } else { - cb(node); - } - } - - const isAsyncWrapper = (i) => !!i.type.__asyncLoader; - /*! #__NO_SIDE_EFFECTS__ */ - // @__NO_SIDE_EFFECTS__ - function defineAsyncComponent(source) { - if (isFunction(source)) { - source = { loader: source }; - } - const { - loader, - loadingComponent, - errorComponent, - delay = 200, - hydrate: hydrateStrategy, - timeout, - // undefined = never times out - suspensible = true, - onError: userOnError - } = source; - let pendingRequest = null; - let resolvedComp; - let retries = 0; - const retry = () => { - retries++; - pendingRequest = null; - return load(); - }; - const load = () => { - let thisRequest; - return pendingRequest || (thisRequest = pendingRequest = loader().catch((err) => { - err = err instanceof Error ? err : new Error(String(err)); - if (userOnError) { - return new Promise((resolve, reject) => { - const userRetry = () => resolve(retry()); - const userFail = () => reject(err); - userOnError(err, userRetry, userFail, retries + 1); - }); - } else { - throw err; - } - }).then((comp) => { - if (thisRequest !== pendingRequest && pendingRequest) { - return pendingRequest; - } - if (!comp) { - warn$1( - `Async component loader resolved to undefined. If you are using retry(), make sure to return its return value.` - ); - } - if (comp && (comp.__esModule || comp[Symbol.toStringTag] === "Module")) { - comp = comp.default; - } - if (comp && !isObject(comp) && !isFunction(comp)) { - throw new Error(`Invalid async component load result: ${comp}`); - } - resolvedComp = comp; - return comp; - })); - }; - return defineComponent({ - name: "AsyncComponentWrapper", - __asyncLoader: load, - __asyncHydrate(el, instance, hydrate) { - const doHydrate = hydrateStrategy ? () => { - const teardown = hydrateStrategy( - hydrate, - (cb) => forEachElement(el, cb) - ); - if (teardown) { - (instance.bum || (instance.bum = [])).push(teardown); - } - } : hydrate; - if (resolvedComp) { - doHydrate(); - } else { - load().then(() => !instance.isUnmounted && doHydrate()); - } - }, - get __asyncResolved() { - return resolvedComp; - }, - setup() { - const instance = currentInstance; - markAsyncBoundary(instance); - if (resolvedComp) { - return () => createInnerComp(resolvedComp, instance); - } - const onError = (err) => { - pendingRequest = null; - handleError( - err, - instance, - 13, - !errorComponent - ); - }; - if (suspensible && instance.suspense || false) { - return load().then((comp) => { - return () => createInnerComp(comp, instance); - }).catch((err) => { - onError(err); - return () => errorComponent ? createVNode(errorComponent, { - error: err - }) : null; - }); - } - const loaded = ref(false); - const error = ref(); - const delayed = ref(!!delay); - if (delay) { - setTimeout(() => { - delayed.value = false; - }, delay); - } - if (timeout != null) { - setTimeout(() => { - if (!loaded.value && !error.value) { - const err = new Error( - `Async component timed out after ${timeout}ms.` - ); - onError(err); - error.value = err; - } - }, timeout); - } - load().then(() => { - loaded.value = true; - if (instance.parent && isKeepAlive(instance.parent.vnode)) { - instance.parent.update(); - } - }).catch((err) => { - onError(err); - error.value = err; - }); - return () => { - if (loaded.value && resolvedComp) { - return createInnerComp(resolvedComp, instance); - } else if (error.value && errorComponent) { - return createVNode(errorComponent, { - error: error.value - }); - } else if (loadingComponent && !delayed.value) { - return createVNode(loadingComponent); - } - }; - } - }); - } - function createInnerComp(comp, parent) { - const { ref: ref2, props, children, ce } = parent.vnode; - const vnode = createVNode(comp, props, children); - vnode.ref = ref2; - vnode.ce = ce; - delete parent.vnode.ce; - return vnode; - } - - const isKeepAlive = (vnode) => vnode.type.__isKeepAlive; - const KeepAliveImpl = { - name: `KeepAlive`, - // Marker for special handling inside the renderer. We are not using a === - // check directly on KeepAlive in the renderer, because importing it directly - // would prevent it from being tree-shaken. - __isKeepAlive: true, - props: { - include: [String, RegExp, Array], - exclude: [String, RegExp, Array], - max: [String, Number] - }, - setup(props, { slots }) { - const instance = getCurrentInstance(); - const sharedContext = instance.ctx; - const cache = /* @__PURE__ */ new Map(); - const keys = /* @__PURE__ */ new Set(); - let current = null; - { - instance.__v_cache = cache; - } - const parentSuspense = instance.suspense; - const { - renderer: { - p: patch, - m: move, - um: _unmount, - o: { createElement } - } - } = sharedContext; - const storageContainer = createElement("div"); - sharedContext.activate = (vnode, container, anchor, namespace, optimized) => { - const instance2 = vnode.component; - move(vnode, container, anchor, 0, parentSuspense); - patch( - instance2.vnode, - vnode, - container, - anchor, - instance2, - parentSuspense, - namespace, - vnode.slotScopeIds, - optimized - ); - queuePostRenderEffect(() => { - instance2.isDeactivated = false; - if (instance2.a) { - invokeArrayFns(instance2.a); - } - const vnodeHook = vnode.props && vnode.props.onVnodeMounted; - if (vnodeHook) { - invokeVNodeHook(vnodeHook, instance2.parent, vnode); - } - }, parentSuspense); - { - devtoolsComponentAdded(instance2); - } - }; - sharedContext.deactivate = (vnode) => { - const instance2 = vnode.component; - invalidateMount(instance2.m); - invalidateMount(instance2.a); - move(vnode, storageContainer, null, 1, parentSuspense); - queuePostRenderEffect(() => { - if (instance2.da) { - invokeArrayFns(instance2.da); - } - const vnodeHook = vnode.props && vnode.props.onVnodeUnmounted; - if (vnodeHook) { - invokeVNodeHook(vnodeHook, instance2.parent, vnode); - } - instance2.isDeactivated = true; - }, parentSuspense); - { - devtoolsComponentAdded(instance2); - } - }; - function unmount(vnode) { - resetShapeFlag(vnode); - _unmount(vnode, instance, parentSuspense, true); - } - function pruneCache(filter) { - cache.forEach((vnode, key) => { - const name = getComponentName(vnode.type); - if (name && !filter(name)) { - pruneCacheEntry(key); - } - }); - } - function pruneCacheEntry(key) { - const cached = cache.get(key); - if (cached && (!current || !isSameVNodeType(cached, current))) { - unmount(cached); - } else if (current) { - resetShapeFlag(current); - } - cache.delete(key); - keys.delete(key); - } - watch( - () => [props.include, props.exclude], - ([include, exclude]) => { - include && pruneCache((name) => matches(include, name)); - exclude && pruneCache((name) => !matches(exclude, name)); - }, - // prune post-render after `current` has been updated - { flush: "post", deep: true } - ); - let pendingCacheKey = null; - const cacheSubtree = () => { - if (pendingCacheKey != null) { - if (isSuspense(instance.subTree.type)) { - queuePostRenderEffect(() => { - cache.set(pendingCacheKey, getInnerChild(instance.subTree)); - }, instance.subTree.suspense); - } else { - cache.set(pendingCacheKey, getInnerChild(instance.subTree)); - } - } - }; - onMounted(cacheSubtree); - onUpdated(cacheSubtree); - onBeforeUnmount(() => { - cache.forEach((cached) => { - const { subTree, suspense } = instance; - const vnode = getInnerChild(subTree); - if (cached.type === vnode.type && cached.key === vnode.key) { - resetShapeFlag(vnode); - const da = vnode.component.da; - da && queuePostRenderEffect(da, suspense); - return; - } - unmount(cached); - }); - }); - return () => { - pendingCacheKey = null; - if (!slots.default) { - return current = null; - } - const children = slots.default(); - const rawVNode = children[0]; - if (children.length > 1) { - { - warn$1(`KeepAlive should contain exactly one component child.`); - } - current = null; - return children; - } else if (!isVNode(rawVNode) || !(rawVNode.shapeFlag & 4) && !(rawVNode.shapeFlag & 128)) { - current = null; - return rawVNode; - } - let vnode = getInnerChild(rawVNode); - if (vnode.type === Comment) { - current = null; - return vnode; - } - const comp = vnode.type; - const name = getComponentName( - isAsyncWrapper(vnode) ? vnode.type.__asyncResolved || {} : comp - ); - const { include, exclude, max } = props; - if (include && (!name || !matches(include, name)) || exclude && name && matches(exclude, name)) { - vnode.shapeFlag &= ~256; - current = vnode; - return rawVNode; - } - const key = vnode.key == null ? comp : vnode.key; - const cachedVNode = cache.get(key); - if (vnode.el) { - vnode = cloneVNode(vnode); - if (rawVNode.shapeFlag & 128) { - rawVNode.ssContent = vnode; - } - } - pendingCacheKey = key; - if (cachedVNode) { - vnode.el = cachedVNode.el; - vnode.component = cachedVNode.component; - if (vnode.transition) { - setTransitionHooks(vnode, vnode.transition); - } - vnode.shapeFlag |= 512; - keys.delete(key); - keys.add(key); - } else { - keys.add(key); - if (max && keys.size > parseInt(max, 10)) { - pruneCacheEntry(keys.values().next().value); - } - } - vnode.shapeFlag |= 256; - current = vnode; - return isSuspense(rawVNode.type) ? rawVNode : vnode; - }; - } - }; - const KeepAlive = KeepAliveImpl; - function matches(pattern, name) { - if (isArray(pattern)) { - return pattern.some((p) => matches(p, name)); - } else if (isString(pattern)) { - return pattern.split(",").includes(name); - } else if (isRegExp(pattern)) { - pattern.lastIndex = 0; - return pattern.test(name); - } - return false; - } - function onActivated(hook, target) { - registerKeepAliveHook(hook, "a", target); - } - function onDeactivated(hook, target) { - registerKeepAliveHook(hook, "da", target); - } - function registerKeepAliveHook(hook, type, target = currentInstance) { - const wrappedHook = hook.__wdc || (hook.__wdc = () => { - let current = target; - while (current) { - if (current.isDeactivated) { - return; - } - current = current.parent; - } - return hook(); - }); - injectHook(type, wrappedHook, target); - if (target) { - let current = target.parent; - while (current && current.parent) { - if (isKeepAlive(current.parent.vnode)) { - injectToKeepAliveRoot(wrappedHook, type, target, current); - } - current = current.parent; - } - } - } - function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) { - const injected = injectHook( - type, - hook, - keepAliveRoot, - true - /* prepend */ - ); - onUnmounted(() => { - remove(keepAliveRoot[type], injected); - }, target); - } - function resetShapeFlag(vnode) { - vnode.shapeFlag &= ~256; - vnode.shapeFlag &= ~512; - } - function getInnerChild(vnode) { - return vnode.shapeFlag & 128 ? vnode.ssContent : vnode; - } - - function injectHook(type, hook, target = currentInstance, prepend = false) { - if (target) { - const hooks = target[type] || (target[type] = []); - const wrappedHook = hook.__weh || (hook.__weh = (...args) => { - pauseTracking(); - const reset = setCurrentInstance(target); - const res = callWithAsyncErrorHandling(hook, target, type, args); - reset(); - resetTracking(); - return res; - }); - if (prepend) { - hooks.unshift(wrappedHook); - } else { - hooks.push(wrappedHook); - } - return wrappedHook; - } else { - const apiName = toHandlerKey(ErrorTypeStrings$1[type].replace(/ hook$/, "")); - warn$1( - `${apiName} is called when there is no active component instance to be associated with. Lifecycle injection APIs can only be used during execution of setup().` + (` If you are using async setup(), make sure to register lifecycle hooks before the first await statement.` ) - ); - } - } - const createHook = (lifecycle) => (hook, target = currentInstance) => { - if (!isInSSRComponentSetup || lifecycle === "sp") { - injectHook(lifecycle, (...args) => hook(...args), target); - } - }; - const onBeforeMount = createHook("bm"); - const onMounted = createHook("m"); - const onBeforeUpdate = createHook( - "bu" - ); - const onUpdated = createHook("u"); - const onBeforeUnmount = createHook( - "bum" - ); - const onUnmounted = createHook("um"); - const onServerPrefetch = createHook( - "sp" - ); - const onRenderTriggered = createHook("rtg"); - const onRenderTracked = createHook("rtc"); - function onErrorCaptured(hook, target = currentInstance) { - injectHook("ec", hook, target); - } - - const COMPONENTS = "components"; - const DIRECTIVES = "directives"; - function resolveComponent(name, maybeSelfReference) { - return resolveAsset(COMPONENTS, name, true, maybeSelfReference) || name; - } - const NULL_DYNAMIC_COMPONENT = Symbol.for("v-ndc"); - function resolveDynamicComponent(component) { - if (isString(component)) { - return resolveAsset(COMPONENTS, component, false) || component; - } else { - return component || NULL_DYNAMIC_COMPONENT; - } - } - function resolveDirective(name) { - return resolveAsset(DIRECTIVES, name); - } - function resolveAsset(type, name, warnMissing = true, maybeSelfReference = false) { - const instance = currentRenderingInstance || currentInstance; - if (instance) { - const Component = instance.type; - if (type === COMPONENTS) { - const selfName = getComponentName( - Component, - false - ); - if (selfName && (selfName === name || selfName === camelize(name) || selfName === capitalize(camelize(name)))) { - return Component; - } - } - const res = ( - // local registration - // check instance[type] first which is resolved for options API - resolve(instance[type] || Component[type], name) || // global registration - resolve(instance.appContext[type], name) - ); - if (!res && maybeSelfReference) { - return Component; - } - if (warnMissing && !res) { - const extra = type === COMPONENTS ? ` -If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement.` : ``; - warn$1(`Failed to resolve ${type.slice(0, -1)}: ${name}${extra}`); - } - return res; - } else { - warn$1( - `resolve${capitalize(type.slice(0, -1))} can only be used in render() or setup().` - ); - } - } - function resolve(registry, name) { - return registry && (registry[name] || registry[camelize(name)] || registry[capitalize(camelize(name))]); - } - - function renderList(source, renderItem, cache, index) { - let ret; - const cached = cache && cache[index]; - const sourceIsArray = isArray(source); - if (sourceIsArray || isString(source)) { - const sourceIsReactiveArray = sourceIsArray && isReactive(source); - let needsWrap = false; - if (sourceIsReactiveArray) { - needsWrap = !isShallow(source); - source = shallowReadArray(source); - } - ret = new Array(source.length); - for (let i = 0, l = source.length; i < l; i++) { - ret[i] = renderItem( - needsWrap ? toReactive(source[i]) : source[i], - i, - void 0, - cached && cached[i] - ); - } - } else if (typeof source === "number") { - if (!Number.isInteger(source)) { - warn$1(`The v-for range expect an integer value but got ${source}.`); - } - ret = new Array(source); - for (let i = 0; i < source; i++) { - ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]); - } - } else if (isObject(source)) { - if (source[Symbol.iterator]) { - ret = Array.from( - source, - (item, i) => renderItem(item, i, void 0, cached && cached[i]) - ); - } else { - const keys = Object.keys(source); - ret = new Array(keys.length); - for (let i = 0, l = keys.length; i < l; i++) { - const key = keys[i]; - ret[i] = renderItem(source[key], key, i, cached && cached[i]); - } - } - } else { - ret = []; - } - if (cache) { - cache[index] = ret; - } - return ret; - } - - function createSlots(slots, dynamicSlots) { - for (let i = 0; i < dynamicSlots.length; i++) { - const slot = dynamicSlots[i]; - if (isArray(slot)) { - for (let j = 0; j < slot.length; j++) { - slots[slot[j].name] = slot[j].fn; - } - } else if (slot) { - slots[slot.name] = slot.key ? (...args) => { - const res = slot.fn(...args); - if (res) res.key = slot.key; - return res; - } : slot.fn; - } - } - return slots; - } - - function renderSlot(slots, name, props = {}, fallback, noSlotted) { - if (currentRenderingInstance.ce || currentRenderingInstance.parent && isAsyncWrapper(currentRenderingInstance.parent) && currentRenderingInstance.parent.ce) { - if (name !== "default") props.name = name; - return openBlock(), createBlock( - Fragment, - null, - [createVNode("slot", props, fallback && fallback())], - 64 - ); - } - let slot = slots[name]; - if (slot && slot.length > 1) { - warn$1( - `SSR-optimized slot function detected in a non-SSR-optimized render function. You need to mark this component with $dynamic-slots in the parent template.` - ); - slot = () => []; - } - if (slot && slot._c) { - slot._d = false; - } - openBlock(); - const validSlotContent = slot && ensureValidVNode(slot(props)); - const slotKey = props.key || // slot content array of a dynamic conditional slot may have a branch - // key attached in the `createSlots` helper, respect that - validSlotContent && validSlotContent.key; - const rendered = createBlock( - Fragment, - { - key: (slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) + // #7256 force differentiate fallback content from actual content - (!validSlotContent && fallback ? "_fb" : "") - }, - validSlotContent || (fallback ? fallback() : []), - validSlotContent && slots._ === 1 ? 64 : -2 - ); - if (!noSlotted && rendered.scopeId) { - rendered.slotScopeIds = [rendered.scopeId + "-s"]; - } - if (slot && slot._c) { - slot._d = true; - } - return rendered; - } - function ensureValidVNode(vnodes) { - return vnodes.some((child) => { - if (!isVNode(child)) return true; - if (child.type === Comment) return false; - if (child.type === Fragment && !ensureValidVNode(child.children)) - return false; - return true; - }) ? vnodes : null; - } - - function toHandlers(obj, preserveCaseIfNecessary) { - const ret = {}; - if (!isObject(obj)) { - warn$1(`v-on with no argument expects an object value.`); - return ret; - } - for (const key in obj) { - ret[preserveCaseIfNecessary && /[A-Z]/.test(key) ? `on:${key}` : toHandlerKey(key)] = obj[key]; - } - return ret; - } - - const getPublicInstance = (i) => { - if (!i) return null; - if (isStatefulComponent(i)) return getComponentPublicInstance(i); - return getPublicInstance(i.parent); - }; - const publicPropertiesMap = ( - // Move PURE marker to new line to workaround compiler discarding it - // due to type annotation - /* @__PURE__ */ extend(/* @__PURE__ */ Object.create(null), { - $: (i) => i, - $el: (i) => i.vnode.el, - $data: (i) => i.data, - $props: (i) => shallowReadonly(i.props) , - $attrs: (i) => shallowReadonly(i.attrs) , - $slots: (i) => shallowReadonly(i.slots) , - $refs: (i) => shallowReadonly(i.refs) , - $parent: (i) => getPublicInstance(i.parent), - $root: (i) => getPublicInstance(i.root), - $host: (i) => i.ce, - $emit: (i) => i.emit, - $options: (i) => resolveMergedOptions(i) , - $forceUpdate: (i) => i.f || (i.f = () => { - queueJob(i.update); - }), - $nextTick: (i) => i.n || (i.n = nextTick.bind(i.proxy)), - $watch: (i) => instanceWatch.bind(i) - }) - ); - const isReservedPrefix = (key) => key === "_" || key === "$"; - const hasSetupBinding = (state, key) => state !== EMPTY_OBJ && !state.__isScriptSetup && hasOwn(state, key); - const PublicInstanceProxyHandlers = { - get({ _: instance }, key) { - if (key === "__v_skip") { - return true; - } - const { ctx, setupState, data, props, accessCache, type, appContext } = instance; - if (key === "__isVue") { - return true; - } - let normalizedProps; - if (key[0] !== "$") { - const n = accessCache[key]; - if (n !== void 0) { - switch (n) { - case 1 /* SETUP */: - return setupState[key]; - case 2 /* DATA */: - return data[key]; - case 4 /* CONTEXT */: - return ctx[key]; - case 3 /* PROPS */: - return props[key]; - } - } else if (hasSetupBinding(setupState, key)) { - accessCache[key] = 1 /* SETUP */; - return setupState[key]; - } else if (data !== EMPTY_OBJ && hasOwn(data, key)) { - accessCache[key] = 2 /* DATA */; - return data[key]; - } else if ( - // only cache other properties when instance has declared (thus stable) - // props - (normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key) - ) { - accessCache[key] = 3 /* PROPS */; - return props[key]; - } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { - accessCache[key] = 4 /* CONTEXT */; - return ctx[key]; - } else if (shouldCacheAccess) { - accessCache[key] = 0 /* OTHER */; - } - } - const publicGetter = publicPropertiesMap[key]; - let cssModule, globalProperties; - if (publicGetter) { - if (key === "$attrs") { - track(instance.attrs, "get", ""); - markAttrsAccessed(); - } else if (key === "$slots") { - track(instance, "get", key); - } - return publicGetter(instance); - } else if ( - // css module (injected by vue-loader) - (cssModule = type.__cssModules) && (cssModule = cssModule[key]) - ) { - return cssModule; - } else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) { - accessCache[key] = 4 /* CONTEXT */; - return ctx[key]; - } else if ( - // global properties - globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key) - ) { - { - return globalProperties[key]; - } - } else if (currentRenderingInstance && (!isString(key) || // #1091 avoid internal isRef/isVNode checks on component instance leading - // to infinite warning loop - key.indexOf("__v") !== 0)) { - if (data !== EMPTY_OBJ && isReservedPrefix(key[0]) && hasOwn(data, key)) { - warn$1( - `Property ${JSON.stringify( - key - )} must be accessed via $data because it starts with a reserved character ("$" or "_") and is not proxied on the render context.` - ); - } else if (instance === currentRenderingInstance) { - warn$1( - `Property ${JSON.stringify(key)} was accessed during render but is not defined on instance.` - ); - } - } - }, - set({ _: instance }, key, value) { - const { data, setupState, ctx } = instance; - if (hasSetupBinding(setupState, key)) { - setupState[key] = value; - return true; - } else if (setupState.__isScriptSetup && hasOwn(setupState, key)) { - warn$1(`Cannot mutate