From f6e83352d764d1c5fe1553db927e56b3695bba0b Mon Sep 17 00:00:00 2001 From: koko Date: Wed, 22 Apr 2026 07:16:04 +0000 Subject: [PATCH 01/18] Document repo structure and ignore local OMX state Add a root README that explains the active runtime layers and onboarding path, and keep local OMX session state out of version control so developer tooling does not interfere with pulls. Constraint: Local OMX state is developer-specific and should not block branch sync or appear in shared history Rejected: Keep onboarding notes untracked | easy to lose and hard to share with the team Confidence: high Scope-risk: narrow Reversibility: clean Directive: Keep the README aligned with the active app/backend-java/frontend-vue execution path; revisit if the runtime architecture changes Tested: git diff review; git status after staging Not-tested: lint, typecheck, unit/integration tests not run (docs and ignore rules only) --- .gitignore | 1 + README.md | 382 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 383 insertions(+) create mode 100644 README.md diff --git a/.gitignore b/.gitignore index 55e3fff..e86ab8b 100644 --- a/.gitignore +++ b/.gitignore @@ -43,3 +43,4 @@ app/assets/ app/new_web_source app/user_data/ OPS_REDIS_MYSQL_OPTIMIZATION_NOTES.md +.omx/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..65ac965 --- /dev/null +++ b/README.md @@ -0,0 +1,382 @@ +# crawler-plugin + +## 这个仓库是什么 + +这个仓库不是一个“单体项目”,而是一个混合工作目录。当前更像是以下三层共同组成的一套系统: + +- `app/`:Python 桌面宿主、Flask 页面承载层、`pywebview` 本地桥接层、自动化任务入口 +- `backend-java/`:Java 业务后端,负责任务模型、文件处理、进度缓存、结果组装、落库、下载 +- `frontend-vue/`:Vue 多页面前端,负责工具页交互和任务发起 + +如果你是第一次接手这个仓库,不要先把它理解成: + +- 纯 Java 后端项目 +- 纯 Python 自动化项目 +- 纯前后端分离 Web 项目 + +它当前的真实形态更接近: + +`Vue 页面 -> Python 桌面桥接/Flask -> Java 任务系统 -> Redis / DB / OSS` + +同时,Python 自动化还会再去驱动本地紫鸟客户端和浏览器。 + +## 先看哪里 + +如果你的目标是理解当前主线,请按这个顺序读: + +1. `app/` +2. `backend-java/` +3. `frontend-vue/` + +原因很简单: + +- `app/` 决定了桌面端怎么承载页面、怎么暴露本地能力、怎么把任务推给 Python 自动化 +- `backend-java/` 决定了任务怎么创建、状态怎么缓存、结果怎么回传、文件怎么生成和下载 +- `frontend-vue/` 决定了用户是怎么触发这些链路的 + +以下目录不要默认当成当前主线: + +- `source_code/` +- `backend/` + +它们和 `app/` 有明显重叠,更像历史版本、迁移残留或中间态副本。阅读时要先带着“可能不是当前生效版本”的假设。 + +## 主线架构怎么分工 + +### Python 层:桌面壳 + 本地桥接 + 自动化执行 + +`app/` 不是单纯的业务后端。它更像一个桌面宿主,负责三件事: + +- 承载 Flask 页面和登录态 +- 通过 `pywebview` 暴露本地文件选择、保存文件、上传文件、任务入队等能力 +- 启动和调度 Python 自动化任务 + +这一层解决的是“本地能力”和“桌面壳”的问题,不是最终任务结果的权威存储。 + +### Java 层:任务系统 + 结果系统 + +`backend-java/` 是当前业务核心后端,负责: + +- 文件上传与临时文件管理 +- 任务创建、历史查询、批量轮询 +- Redis 进度缓存 +- 分片结果接收与聚合 +- 结果文件生成 +- OSS 上传 +- 下载接口输出 + +从模块名看,Java 端已经承接了大部分工具型任务,例如: + +- `brand` +- `dedupe` +- `split` +- `convert` +- `deletebrand` +- `productrisk` +- `shopmatch` +- `pricetrack` + +### Vue 层:多页面工具前端 + +`frontend-vue/` 不是单页应用,而是多入口页面工程。它的作用主要是: + +- 让用户选择文件或参数 +- 调用 Java API 创建任务或查询任务 +- 调用 `pywebview` 桥接拿本地能力 +- 在任务执行过程中轮询状态和下载结果 + +它构建后的产物输出到 `new_web_source/`,再由 Python/Flask 暴露出来供桌面端使用。 + +## 如何理解目录 + +### 当前最值得关注的目录 + +#### `app/` + +这是当前阅读优先级最高的 Python 目录,重点看这些角色: + +- `main.py`:创建 `pywebview` 窗口,暴露本地桥接 API +- `app.py`:Flask 应用入口 +- `blueprints/`:页面、登录、品牌、通信等 HTTP 层 +- `amazon/`:删除品牌、商品风险、匹配、跟价等自动化任务实现 + +#### `backend-java/` + +这是任务系统核心,重点关注: + +- controller:对外 API +- service:任务创建、进度、结果回传、组装 +- model / mapper:任务和结果模型 +- `application.yml`:后端依赖配置 + +#### `frontend-vue/` + +这是当前工具页前端源码,重点关注: + +- `src/shared/bridges/pywebview.ts`:前端如何调 Python 本地桥接 +- `src/shared/api/java-modules.ts`:前端如何调 Java API +- `src/pages/brand/components/`:各个具体工具页 + +### 不要误判成源码主线的目录 + +#### `new_web_source/` + +更像前端构建产物目录,不是首选手改源码位置。 + +#### `source_code/` + +和 `app/` 结构高度相似,但从当前仓库关系看,更像旧线或中间迁移副本。 + +#### `backend/` + +另一套 Python 后端实现,和当前主线职责不完全一致,更像旧后台线。 + +## 用“删除品牌自动化”看懂整个系统 + +“删除品牌”是这个仓库里很有代表性的一条链路,因为它同时经过: + +- 前端 +- Python 桌面桥接 +- Python 自动化执行 +- Java 任务系统 + +下面按真实职责来拆。 + +### 1. 用户在前端选择文件 + +用户打开删除品牌页面后,前端并不会直接访问浏览器文件系统,而是通过 `pywebview` 调 Python 暴露的方法: + +- 选择 Excel 文件 +- 或选择一个文件夹并展开其中的 Excel + +这一阶段文件还在用户本地磁盘上。 + +### 2. Python 先把本地文件上传给 Java + +前端拿到本地路径后,会继续通过 `pywebview` 调 Python 的文件上传桥接。 + +这一步的实际执行者是 Python,不是前端浏览器。Python 会: + +1. 按本地路径读取文件 +2. 调用 Java 的 `/api/files/upload` +3. 以 `multipart/form-data` 上传 +4. 从 Java 换回一个 `fileKey` + +这里要注意: + +- 这是 `Python -> Java` +- 传的是源文件 +- 目的是让 Java 后续能基于 `fileKey` 找到文件 + +### 3. 前端要求 Java 创建“删除品牌任务” + +文件上传完成后,前端调用 Java 的删除品牌运行接口。 + +Java 在这一阶段做的事情不是“真的去删店铺里的 SKU”,而是: + +1. 根据 `fileKey` 找到上传文件 +2. 解析删除品牌 Excel +3. 按国家和 ASIN 组织数据 +4. 尝试匹配对应店铺 +5. 创建 `taskId` 和结果记录 +6. 把可执行项返回给前端 + +这一阶段可以理解成: + +- Java 负责建模和建任务 +- Python 还没有开始自动化执行 + +### 4. 前端把“可执行项”推入 Python 本地队列 + +删除品牌不是由 Java 主动发起 Python 执行的,而是前端把某个任务项再推给 Python。 + +这一步通过 `pywebview` 暴露的 `enqueue_json()` 完成,前端会构造一个类似下面的 payload: + +- `type: delete-brand-run` +- `taskId` +- `items` + +然后交给 Python。 + +重要区分: + +- 这一步不是 Java 队列 +- 这是 Python 本地进程内队列 +- 当前仓库里对应的是 `JSON_TASK_QUEUE` + +### 5. Python 的任务监听器开始消费队列 + +Python 侧有一个任务监听器持续盯着 `JSON_TASK_QUEUE`。 + +当它收到 `delete-brand-run` 后,会把任务交给线程池,然后按下面的层次处理: + +1. 任务 +2. 店铺 +3. 国家 +4. ASIN + +同时,Python 会在本地维护当前任务状态,例如: + +- 当前店铺 +- 当前国家 +- 当前 ASIN +- 已处理数量 +- 成功/失败计数 + +这些状态主要服务于 Python 本地执行期,不是前端最终查询任务状态的权威来源。 + +### 6. Python 自动化驱动紫鸟客户端和浏览器 + +删除品牌的“真正执行动作”发生在这里。 + +Python 不会直接操作普通浏览器,而是先和紫鸟客户端通信,再接管浏览器调试口。大致过程是: + +1. 连接或启动本机紫鸟客户端 +2. 打开指定店铺 +3. 切换国家 +4. 进入库存/目标页面 +5. 搜索 ASIN +6. 删除对应 SKU + +所以这一段实际上又分两层: + +- `Python -> 紫鸟客户端`:本地 HTTP IPC +- `Python -> 浏览器`:通过调试口/自动化驱动执行页面操作 + +### 7. Python 一边执行,一边把结果分片回传给 Java + +这条链路的关键点在这里: + +- Python 不是等整个任务做完再一次性提交结果 +- 而是每处理完一部分,就立刻回传给 Java + +删除品牌这里通常是按 ASIN 逐步回传。 + +回传方式: + +- `Python -> Java` +- `Content-Type: application/json` +- 接口:`/api/delete-brand/tasks/{taskId}/result` + +回传的数据里会包含: + +- 当前文件标识 +- `chunkIndex` +- `chunkTotal` +- 当前国家 +- 当前 ASIN +- 当前累计进度 +- 本次处理结果 + +因此,删除品牌这条线里 Python 到 Java 有两种传输: + +1. 源文件上传:`multipart/form-data` +2. 执行结果回传:`application/json` + +### 8. Java 负责接收分片、缓存进度、判断是否可以完结 + +Java 收到 Python 的结果分片后,不会简单地“收一条写一条最终结果”,而是会先做任务系统层面的处理: + +1. 校验 `taskId` +2. 校验分片对应的文件身份 +3. 过滤重复分片 +4. 将结果分片缓存起来 +5. 更新实时进度 +6. 判断某个文件的分片是否收齐 +7. 判断整个任务是否达到 finalize 条件 + +这一步说明 Java 才是“任务状态和最终结果”的权威系统。 + +### 9. Java 在分片收齐后生成最终结果 + +当 Java 发现所有需要的结果分片都已收齐时,会执行最终组装: + +1. 合并分片 +2. 重建最终结果数据 +3. 生成结果 Excel +4. 上传 OSS +5. 更新任务状态 +6. 写入结果记录 + +如果这一步成功,任务会变成 `SUCCESS`;否则会进入 `FAILED`。 + +### 10. 前端轮询 Java,不轮询 Python + +前端展示任务状态时,查询对象是 Java,而不是 Python 本地队列。 + +前端主要关心的是: + +- 任务详情 +- 批量进度 +- 下载地址 + +也就是说: + +- Python 负责执行 +- Java 负责对前端提供任务状态与结果 + +### 11. 前端最终通过 Java 下载结果,再交给 Python 保存到本地 + +任务成功后,前端拿到 Java 下载地址,然后再通过 `pywebview` 调 Python 的保存能力,把文件落回用户本地磁盘。 + +所以最后一步仍然是混合协作: + +- 下载来源是 Java +- 本地保存能力来自 Python 桌面桥接 + +## 这条例子可以类比到哪些模块 + +删除品牌不是孤例,它更像当前仓库自动化任务的代表模式。 + +同类模式至少还能看到这些任务类型: + +- `delete-brand-run` +- `product-risk-resolve-run` +- `shop-match-run` +- `price-track` + +它们的共性通常是: + +1. 前端先建任务 +2. Python 负责本地自动化执行 +3. Java 负责任务状态、结果缓存和最终输出 + +因此,理解删除品牌这条线之后,再看商品风险、店铺匹配、跟价等模块会容易很多。 + +## 接手时最容易踩的坑 + +### 不要把 `enqueue_json()` 当成 Java 队列 + +它是前端调 Python 的本地桥接,进入的是 Python 进程内队列,不是 Java 消息系统。 + +### 不要把 `new_web_source/` 当成首选源码目录 + +它更像构建产物输出,首选还是看 `frontend-vue/`。 + +### 不要默认 `source_code/` 和 `backend/` 仍是当前主线 + +这两个目录有参考价值,但从当前结构看,不应先于 `app/`、`backend-java/`、`frontend-vue/` 阅读。 + +### 不要把 Python 当成最终任务状态来源 + +Python 负责执行期状态;前端面向用户看到的任务状态、历史、下载结果,当前主权在 Java。 + +## 当前文档的边界 + +这份 README 基于当前仓库的静态分析整理,有几个边界需要明确: + +- 没有运行仓库程序做启动验证 +- 没有确认最终发布时到底启用哪一个入口 +- 对 `source_code/`、`backend/` 的判断是“更像旧线/残留”,不是运行态绝对结论 + +所以这份文档的目标不是提供启动手册,而是帮助接手开发者先建立正确的系统地图。 + +## 一句话结论 + +理解这个仓库最有效的方式不是按语言分开看,而是按职责看: + +- Python 负责桌面壳、本地桥接、自动化执行 +- Java 负责任务系统、结果系统、下载系统 +- Vue 负责工具页交互和任务发起 + +而“删除品牌自动化”正好把这三层的协作关系完整串了起来。 From dc6ecc1edfb68d46b6beb97337b7e4bc052c1e07 Mon Sep 17 00:00:00 2001 From: koko Date: Wed, 22 Apr 2026 08:33:02 +0000 Subject: [PATCH 02/18] Clarify the current automation example in onboarding docs Update the README so new contributors start from the latest patrol-delete automation flow instead of treating delete-brand as the primary example. Keep the older delete-brand path as contrast for the file-driven workflow. Constraint: Recent repository changes made patrol-delete the newest automation module, so the onboarding example needed to match current development reality Rejected: Leave delete-brand as the primary example | would mislead readers about the latest automation entry point Confidence: high Scope-risk: narrow Reversibility: clean Directive: Revisit this section when a newer automation module replaces patrol-delete as the primary example Tested: README diff review Not-tested: lint, typecheck, unit/integration tests not run (documentation-only change) --- README.md | 143 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 85 insertions(+), 58 deletions(-) diff --git a/README.md b/README.md index 65ac965..df7cc03 100644 --- a/README.md +++ b/README.md @@ -131,55 +131,61 @@ 另一套 Python 后端实现,和当前主线职责不完全一致,更像旧后台线。 -## 用“删除品牌自动化”看懂整个系统 +## 用“patrol-delete”看懂最近新增的自动化链路 -“删除品牌”是这个仓库里很有代表性的一条链路,因为它同时经过: +从最近的提交看,`patrol-delete` 是当前最新落地的一条自动化模块。它同样同时经过: - 前端 - Python 桌面桥接 - Python 自动化执行 - Java 任务系统 -下面按真实职责来拆。 +但它和“删除品牌”有一个关键差别: -### 1. 用户在前端选择文件 +- `delete-brand` 更偏“本地 Excel 文件驱动” +- `patrol-delete` 更偏“店铺输入 + 任务模板 + 串行自动化执行” -用户打开删除品牌页面后,前端并不会直接访问浏览器文件系统,而是通过 `pywebview` 调 Python 暴露的方法: +如果你想快速理解当前新增自动化功能的开发方式,优先看这条线更合适。 -- 选择 Excel 文件 -- 或选择一个文件夹并展开其中的 Excel +下面按职责来拆。 -这一阶段文件还在用户本地磁盘上。 +### 1. 用户先在前端输入店铺,并加入备选区 -### 2. Python 先把本地文件上传给 Java +用户打开 `patrol-delete` 页面后,不是先选本地文件,而是: -前端拿到本地路径后,会继续通过 `pywebview` 调 Python 的文件上传桥接。 +- 输入店铺名 +- 将店铺加入备选区 +- 勾选要处理的店铺 +- 点击“匹配店铺” -这一步的实际执行者是 Python,不是前端浏览器。Python 会: +这一阶段前端的核心职责是收集“要处理哪个店铺”。 -1. 按本地路径读取文件 -2. 调用 Java 的 `/api/files/upload` -3. 以 `multipart/form-data` 上传 -4. 从 Java 换回一个 `fileKey` +### 2. 前端先让 Java 做店铺匹配 + +前端不会直接把“店铺名”交给 Python 执行,而是先调用 Java 的匹配接口。 + +Java 在这一阶段负责: + +1. 根据店铺名查索引 +2. 判断是否能命中店铺 +3. 返回 `shopId`、平台、公司、匹配状态等信息 这里要注意: -- 这是 `Python -> Java` -- 传的是源文件 -- 目的是让 Java 后续能基于 `fileKey` 找到文件 +- 这是 `frontend -> Java` +- 目的是先把“可执行店铺”筛出来 +- Python 还没有开始实际自动化 -### 3. 前端要求 Java 创建“删除品牌任务” +### 3. 前端要求 Java 创建“patrol-delete 任务” -文件上传完成后,前端调用 Java 的删除品牌运行接口。 +匹配通过后,前端调用 Java 的建任务接口。 -Java 在这一阶段做的事情不是“真的去删店铺里的 SKU”,而是: +Java 在这一阶段做的事情也不是“立刻去删商品”,而是: -1. 根据 `fileKey` 找到上传文件 -2. 解析删除品牌 Excel -3. 按国家和 ASIN 组织数据 -4. 尝试匹配对应店铺 -5. 创建 `taskId` 和结果记录 -6. 把可执行项返回给前端 +1. 接收店铺与模板结构 +2. 创建 `taskId` +3. 创建结果记录 +4. 返回当前任务项的初始数据给前端 这一阶段可以理解成: @@ -188,13 +194,17 @@ Java 在这一阶段做的事情不是“真的去删店铺里的 SKU”,而 ### 4. 前端把“可执行项”推入 Python 本地队列 -删除品牌不是由 Java 主动发起 Python 执行的,而是前端把某个任务项再推给 Python。 +`patrol-delete` 不是由 Java 主动调用 Python,而是前端把任务 payload 推给 Python。 这一步通过 `pywebview` 暴露的 `enqueue_json()` 完成,前端会构造一个类似下面的 payload: -- `type: delete-brand-run` +- `type: patrol-delete-run` - `taskId` +- `user_id` - `items` +- `template_rows` +- `country_sections` +- `cart_ratios` 然后交给 Python。 @@ -208,35 +218,36 @@ Java 在这一阶段做的事情不是“真的去删店铺里的 SKU”,而 Python 侧有一个任务监听器持续盯着 `JSON_TASK_QUEUE`。 -当它收到 `delete-brand-run` 后,会把任务交给线程池,然后按下面的层次处理: +按 `patrol-delete` 这条链路的设计,Python 拿到任务后会按店铺串行执行,再在店铺内部做页面自动化。 -1. 任务 -2. 店铺 -3. 国家 -4. ASIN +这一层的职责重点是: + +1. 根据 `taskId` 和店铺信息定位当前任务 +2. 串行执行当前店铺,避免多个店铺同时抢本地浏览器环境 +3. 按模板结构产出各国家的删除结果与购物车比例 +4. 在执行过程中持续回传 Java 同时,Python 会在本地维护当前任务状态,例如: - 当前店铺 -- 当前国家 -- 当前 ASIN -- 已处理数量 -- 成功/失败计数 +- 当前步骤 +- 已完成/失败数量 +- 是否需要继续下一个店铺 这些状态主要服务于 Python 本地执行期,不是前端最终查询任务状态的权威来源。 ### 6. Python 自动化驱动紫鸟客户端和浏览器 -删除品牌的“真正执行动作”发生在这里。 +`patrol-delete` 的“真正执行动作”也发生在这里。 Python 不会直接操作普通浏览器,而是先和紫鸟客户端通信,再接管浏览器调试口。大致过程是: 1. 连接或启动本机紫鸟客户端 2. 打开指定店铺 -3. 切换国家 -4. 进入库存/目标页面 -5. 搜索 ASIN -6. 删除对应 SKU +3. 进入需要巡店/删除的目标页面 +4. 根据模板中的国家块、状态和数量条件读取页面数据 +5. 找到符合删除条件的商品 +6. 执行删除并整理结果 所以这一段实际上又分两层: @@ -250,39 +261,49 @@ Python 不会直接操作普通浏览器,而是先和紫鸟客户端通信, - Python 不是等整个任务做完再一次性提交结果 - 而是每处理完一部分,就立刻回传给 Java -删除品牌这里通常是按 ASIN 逐步回传。 +`patrol-delete` 这里是按“店铺结果分片”回传,更强调: + +- `shopName` +- `submissionId` +- `chunkIndex` +- `chunkTotal` +- `shopDone` +- `countrySections` +- `cartRatios` +- `error` 回传方式: - `Python -> Java` - `Content-Type: application/json` -- 接口:`/api/delete-brand/tasks/{taskId}/result` +- 接口:`/api/patrol-delete/tasks/{taskId}/result` 回传的数据里会包含: -- 当前文件标识 +- 当前店铺标识 - `chunkIndex` - `chunkTotal` -- 当前国家 -- 当前 ASIN -- 当前累计进度 -- 本次处理结果 +- 该店铺当前片段的国家结果 +- 购物车比例 +- 当前片段是否已结束 +- 失败时的错误信息 -因此,删除品牌这条线里 Python 到 Java 有两种传输: +因此,`patrol-delete` 这条线里更核心的是一类传输: -1. 源文件上传:`multipart/form-data` -2. 执行结果回传:`application/json` +1. 执行结果回传:`application/json` + +它不依赖“先上传本地 Excel 文件”这个前置动作。 ### 8. Java 负责接收分片、缓存进度、判断是否可以完结 Java 收到 Python 的结果分片后,不会简单地“收一条写一条最终结果”,而是会先做任务系统层面的处理: 1. 校验 `taskId` -2. 校验分片对应的文件身份 +2. 按 `taskId + shopName` 聚合店铺结果 3. 过滤重复分片 4. 将结果分片缓存起来 5. 更新实时进度 -6. 判断某个文件的分片是否收齐 +6. 判断某个店铺是否已 `shopDone` 7. 判断整个任务是否达到 finalize 条件 这一步说明 Java 才是“任务状态和最终结果”的权威系统。 @@ -326,10 +347,11 @@ Java 收到 Python 的结果分片后,不会简单地“收一条写一条最 ## 这条例子可以类比到哪些模块 -删除品牌不是孤例,它更像当前仓库自动化任务的代表模式。 +`patrol-delete` 不是孤例,它更像当前仓库最近新增自动化模块的代表模式。 同类模式至少还能看到这些任务类型: +- `patrol-delete-run` - `delete-brand-run` - `product-risk-resolve-run` - `shop-match-run` @@ -341,7 +363,12 @@ Java 收到 Python 的结果分片后,不会简单地“收一条写一条最 2. Python 负责本地自动化执行 3. Java 负责任务状态、结果缓存和最终输出 -因此,理解删除品牌这条线之后,再看商品风险、店铺匹配、跟价等模块会容易很多。 +其中: + +- `patrol-delete` 更适合理解“店铺驱动 + 模板驱动”的新链路 +- `delete-brand` 更适合理解“本地文件上传 + 文件解析驱动”的旧链路 + +理解这两条线之后,再看商品风险、店铺匹配、跟价等模块会容易很多。 ## 接手时最容易踩的坑 @@ -379,4 +406,4 @@ Python 负责执行期状态;前端面向用户看到的任务状态、历史 - Java 负责任务系统、结果系统、下载系统 - Vue 负责工具页交互和任务发起 -而“删除品牌自动化”正好把这三层的协作关系完整串了起来。 +其中,“删除品牌自动化”更适合帮助你理解旧的文件驱动链路;当前最新落地的 `patrol-delete`,则更适合当作你理解新增自动化功能的第一条例子。 From f9b2d2da25bd4fd43a9c70b0b9bf7b542f815dc7 Mon Sep 17 00:00:00 2001 From: koko Date: Sat, 25 Apr 2026 17:14:23 +0800 Subject: [PATCH 03/18] feat: update driver BaseClass --- .gitignore | 106 ++- app/.env | 5 +- app/.env.example | 18 + app/amazon/base.py | 580 +++++++++++++ app/pyproject.toml | 98 +++ app/tests/conftest.py | 0 app/tests/test_amazon_base.py | 337 ++++++++ app/uv.lock | 1477 +++++++++++++++++++++++++++++++++ 8 files changed, 2595 insertions(+), 26 deletions(-) create mode 100644 app/.env.example create mode 100644 app/amazon/base.py create mode 100644 app/pyproject.toml create mode 100644 app/tests/conftest.py create mode 100644 app/tests/test_amazon_base.py create mode 100644 app/uv.lock diff --git a/.gitignore b/.gitignore index e86ab8b..c264c21 100644 --- a/.gitignore +++ b/.gitignore @@ -1,46 +1,106 @@ -# frontend-vue dependencies +# ===== frontend-vue ===== frontend-vue/node_modules/ - -# frontend-vue build output frontend-vue/dist/ frontend-vue/new_web_source - -# generated type declarations frontend-vue/auto-imports.d.ts frontend-vue/components.d.ts - -# logs frontend-vue/npm-debug.log* frontend-vue/yarn-debug.log* frontend-vue/yarn-error.log* frontend-vue/pnpm-debug.log* -# backend-java build output +# ===== backend-java ===== backend-java/target/ - -# backend-java runtime data backend-java/data/ backend-java/*.log backend-java/logs/ -logs/ -aiimage-backend.log* -backend/tmp/ - -# backend-java local config backend-java/src/main/resources/application-local.yml - -# backend-java IDE files backend-java/.idea/ backend-java/*.iml -# desktop app -desktop/ -ERP-Demo/ -xlsx/ -app/__pycache__ +# ===== backend / app ===== +backend/tmp/ backend/__pycache__ +app/__pycache__ app/assets/ app/new_web_source app/user_data/ -OPS_REDIS_MYSQL_OPTIMIZATION_NOTES.md + +# ===== logs ===== +logs/ +aiimage-backend.log* + +# ===== Python ===== +__pycache__/ +*.py[cod] +*$py.class +*.pyo +.Python +*.egg-info/ +*.egg +MANIFEST +.installed.cfg + +# Build / packaging +build/ +dist/ +develop-eggs/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ + +# Virtual environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ +.python-version + +# Testing +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +htmlcov/ + +# Type checking +.mypy_cache/ +.dmypy.json +dmypy.json +.pyre/ +.pytype/ + +# Jupyter +.ipynb_checkpoints +*.ipynb_checkpoints/ +profile_default/ +ipython_config.py + +# ===== Database ===== +*.db +*.sqlite3 + +# ===== Misc ===== +desktop/ +ERP-Demo/ +xlsx/ .omx/ +.codex +OPS_REDIS_MYSQL_OPTIMIZATION_NOTES.md \ No newline at end of file diff --git a/app/.env b/app/.env index a8104b3..152d342 100644 --- a/app/.env +++ b/app/.env @@ -1,4 +1,3 @@ -base_url=http://8.136.19.173:15124 workflow_id=7608812635877900322 mysql_host=8.136.19.173 mysql_user=aiimage @@ -12,8 +11,8 @@ zn_username=%E8%87%AA%E5%8A%A8%E5%8C%96_Robot client_name=ShuFuAI -# java_api_base=http://47.111.163.154:18080 -java_api_base=http://127.0.0.1:18080 +java_api_base=http://47.111.163.154:18080 +# java_api_base=http://127.0.0.1:18080 # java_api_base=http://8.136.19.173:18080 diff --git a/app/.env.example b/app/.env.example new file mode 100644 index 0000000..3cadbd4 --- /dev/null +++ b/app/.env.example @@ -0,0 +1,18 @@ +workflow_id=7608812635877900322 +mysql_host=8.136.19.173 +mysql_user=aiimage + +proxy_url=https://api.jikip.com/ip-get?num=1&minute=1&format=json&area=all&protocol=1&mode=2&key=t24g6gi44ubufd8 +proxy_mode=2 + +zn_company=rongchuang123 +zn_username=%E8%87%AA%E5%8A%A8%E5%8C%96_Robot + +client_name=ShuFuAI + + +java_api_base=http://47.111.163.154:18080 +# java_api_base=http://127.0.0.1:18080 +# java_api_base=http://8.136.19.173:18080 + + diff --git a/app/amazon/base.py b/app/amazon/base.py new file mode 100644 index 0000000..6dddbe2 --- /dev/null +++ b/app/amazon/base.py @@ -0,0 +1,580 @@ +import json +import logging +import os +import subprocess +import time +import traceback +import uuid +from typing import Literal + +import requests +from DrissionPage import Chromium +from DrissionPage._pages.chromium_tab import ChromiumTab +from DrissionPage.common import By + +try: + import winreg +except ImportError: + winreg = None + + +logger = logging.getLogger(__name__) + + +def kill_process(version: Literal["v5", "v6"]): + """杀紫鸟客户端进程(独立函数版本)""" + logger.info("准备杀紫鸟客户端进程,version=%s", version) + driver = ZiniaoDriver({}) + driver.kill_process(version) + + +class ZiniaoDriver: + """紫鸟浏览器自动化驱动类""" + + def __init__(self, user_info: dict, socket_port: int = 19890): + """ + 初始化紫鸟浏览器驱动 + + Args: + user_info: 用户信息字典,包含 company, username, password + socket_port: 客户端通信端口,默认 19890 + """ + self.user_info = user_info + self.socket_port = socket_port + self.client_path = None + self.browser = None + self.tab: ChromiumTab = None + self.store_id = None + + def get_zinaio_exe(self, protocol_name: str = "superbrowser"): + """ + 获取紫鸟安装目录 + + Args: + protocol_name: 协议名称,默认 "superbrowser" + + Returns: + exe_path: 紫鸟浏览器可执行文件路径 + """ + if winreg is None: + logger.error("当前系统不支持 winreg,无法从注册表获取紫鸟客户端路径") + return None + + key_path = rf"SOFTWARE\Classes\{protocol_name}\shell\open\command" + for root_key, root_name in ( + (winreg.HKEY_CURRENT_USER, "HKEY_CURRENT_USER"), + (winreg.HKEY_LOCAL_MACHINE, "HKEY_LOCAL_MACHINE"), + ): + try: + logger.info("正在从注册表读取紫鸟客户端路径:%s\\%s", root_name, key_path) + key = winreg.OpenKey(root_key, key_path) + command, _ = winreg.QueryValueEx(key, "") + winreg.CloseKey(key) + if isinstance(command, str): + sub = "ziniao.exe" + exe_path = command[0: command.find(sub) + len(sub) + 1] + else: + exe_path = command[0] + logger.info("已获取紫鸟客户端路径:%s", exe_path) + return exe_path + except FileNotFoundError: + logger.warning("注册表中未找到紫鸟客户端路径:%s\\%s", root_name, key_path) + + logger.error("未能获取紫鸟客户端路径,protocol_name=%s", protocol_name) + return None + + def update_core(self): + """ + 下载所有内核,打开店铺前调用,需客户端版本5.285.7以上 + 因为http有超时时间,所以这个action适合循环调用,直到返回成功 + """ + data = { + "action": "updateCore", + "requestId": str(uuid.uuid4()), + } + data.update(self.user_info) + url = f"http://127.0.0.1:{self.socket_port}" + + logger.info("开始更新紫鸟浏览器内核") + while True: + response = requests.post(url, json.dumps(data).encode("utf-8"), timeout=120) + result = response.json() + logger.info("更新内核返回:%s", result) + if result is None: + logger.info("等待客户端启动后继续更新内核") + time.sleep(2) + continue + if result.get("statusCode") is None or result.get("statusCode") == -10003: + logger.error("当前紫鸟客户端版本不支持更新内核接口,请升级客户端") + return + if result.get("statusCode") == 0: + logger.info("紫鸟浏览器内核更新完成") + return + + logger.info("等待更新内核完成:%s", json.dumps(result, ensure_ascii=False)) + time.sleep(2) + + def kill_process(self, version: Literal["v5", "v6"]): + """ + 杀紫鸟客户端进程 + + Args: + version: 客户端版本 + """ + if version == "v5": + process_name = "SuperBrowser.exe" + logger.info("准备结束紫鸟 v5 starter.exe") + os.system("taskkill /f /t /im starter.exe") + else: + process_name = "ziniao.exe" + + logger.info("准备结束紫鸟客户端进程:%s", process_name) + os.system("taskkill /f /t /im " + process_name) + time.sleep(3) + + def get_browser_list(self) -> list: + """ + 获取浏览器列表 + + Returns: + list: 浏览器列表 + """ + request_id = str(uuid.uuid4()) + data = { + "action": "getBrowserList", + "requestId": request_id, + } + data.update(self.user_info) + + logger.info("开始获取紫鸟浏览器列表,requestId=%s", request_id) + url = f"http://127.0.0.1:{self.socket_port}" + response = requests.post(url, json.dumps(data).encode("utf-8"), timeout=120) + result = response.json() + if str(result.get("statusCode")) == "0": + browser_list = result.get("browserList") + logger.info("获取紫鸟浏览器列表成功,数量=%s", len(browser_list or [])) + return browser_list + if str(result.get("statusCode")) == "-10003": + logger.error("获取紫鸟浏览器列表登录失败:%s", json.dumps(result, ensure_ascii=False)) + return None + + logger.error("获取紫鸟浏览器列表失败:%s", json.dumps(result, ensure_ascii=False)) + return None + + def open_store( + self, + store_info, + isWebDriverReadOnlyMode=0, + isprivacy=0, + isHeadless=0, + cookieTypeSave=0, + jsInfo="", + ): + """ + 打开店铺 + + Args: + store_info: 店铺信息(browserId 或 browserOauth) + isWebDriverReadOnlyMode: 是否只读模式,默认 0 + isprivacy: 隐私模式,默认 0 + isHeadless: 无头模式,默认 0 + cookieTypeSave: cookie保存类型,默认 0 + jsInfo: 注入的JS信息,默认 "" + + Returns: + dict: 返回结果 + """ + request_id = str(uuid.uuid4()) + data = { + "action": "startBrowser", + "isWaitPluginUpdate": 0, + "isHeadless": isHeadless, + "requestId": request_id, + "isWebDriverReadOnlyMode": isWebDriverReadOnlyMode, + "cookieTypeLoad": 0, + "cookieTypeSave": cookieTypeSave, + "runMode": "1", + "isLoadUserPlugin": True, + "pluginIdType": 1, + "privacyMode": isprivacy, + } + data.update(self.user_info) + + if store_info.isdigit(): + data["browserId"] = store_info + else: + data["browserOauth"] = store_info + + if len(str(jsInfo)) > 2: + data["injectJsInfo"] = json.dumps(jsInfo) + + logger.info("开始打开紫鸟店铺,store_info=%s,requestId=%s", store_info, request_id) + url = f"http://127.0.0.1:{self.socket_port}" + response = requests.post(url, json.dumps(data).encode("utf-8"), timeout=120) + result = response.json() + if str(result.get("statusCode")) == "0": + logger.info("紫鸟店铺打开成功,debuggingPort=%s", result.get("debuggingPort")) + return result + if str(result.get("statusCode")) == "-10003": + logger.error("打开紫鸟店铺登录失败:%s", json.dumps(result, ensure_ascii=False)) + raise RuntimeError(f"【open_store】登录失败 {json.dumps(result, ensure_ascii=False)}") + + logger.error("打开紫鸟店铺失败:%s", json.dumps(result, ensure_ascii=False)) + raise RuntimeError(f"【open_store】失败 {json.dumps(result, ensure_ascii=False)} ") + + def get_browser(self, port) -> Chromium: + """ + 获取浏览器实例 + + Args: + port: 调试端口 + + Returns: + Chromium: DrissionPage浏览器实例 + """ + logger.info("开始连接 DrissionPage 浏览器,port=%s", port) + browser = Chromium(port) + logger.info("DrissionPage 浏览器连接完成,port=%s", port) + return browser + + def start_client(self): + """启动紫鸟客户端""" + url = f"http://127.0.0.1:{self.socket_port}" + + try: + requests.get(url, timeout=2) + logger.info("端口 %s 已启动,跳过启动紫鸟客户端", self.socket_port) + return + except (requests.exceptions.ConnectionError, requests.exceptions.Timeout): + logger.info("端口 %s 未启动,开始启动紫鸟客户端", self.socket_port) + + self.kill_process("v6") + time.sleep(5) + client_path = self.get_zinaio_exe("superbrowserv6") + if not client_path: + raise RuntimeError("未找到紫鸟客户端路径,无法启动客户端") + + self.client_path = client_path.strip('"') + cmd = [ + self.client_path, + "--run_type=web_driver", + "--ipc_type=http", + "--port=" + str(self.socket_port), + ] + logger.info("紫鸟客户端启动命令:%s", " ".join(cmd)) + + max_retries = 3 + for retry_count in range(max_retries): + logger.info("第 %s/%s 次尝试启动紫鸟客户端", retry_count + 1, max_retries) + subprocess.Popen(cmd) + + start_check_time = time.time() + client_started = False + while time.time() - start_check_time < 10: + try: + requests.get(url, timeout=2) + logger.info("紫鸟客户端启动成功,第 %s 次尝试", retry_count + 1) + client_started = True + break + except (requests.exceptions.ConnectionError, requests.exceptions.Timeout): + time.sleep(0.5) + + if client_started: + time.sleep(5) + self.update_core() + return + + logger.warning("第 %s 次尝试启动失败,10秒内未检测到客户端启动", retry_count + 1) + + logger.error("紫鸟客户端启动失败,已重试 %s 次", max_retries) + raise RuntimeError(f"客户端启动失败:重试 {max_retries} 次后仍未成功启动") + + def open_shop(self, shop_name: str): + """ + 打开指定店铺 + + Args: + shop_name: 店铺名称 + + Returns: + Chromium or str: 成功返回浏览器实例,失败返回错误信息 + """ + logger.info("开始打开店铺:%s", shop_name) + self.start_client() + + shop_ls = self.get_browser_list() + self.store_id = None + for shop in shop_ls or []: + if shop.get("browserName") == shop_name: + self.store_id = shop.get("browserOauth") + break + + if not self.store_id: + logger.warning("店铺不存在:%s", shop_name) + return "店铺不存在" + + ret_json = self.open_store(self.store_id) + self.store_id = ret_json.get("browserOauth") + if self.store_id is None: + self.store_id = ret_json.get("browserId") + + self.browser = self.get_browser(ret_json.get("debuggingPort")) + + ip_check_url = ret_json.get("ipDetectionPage") + if not ip_check_url: + logger.error("ip检测页地址为空,准备关闭店铺:%s", shop_name) + self.close_store(self.store_id) + raise RuntimeError("没有IP检测地址,为了店铺安全不打开店铺") + + ip_usable = self.open_ip_check(self.browser, ip_check_url) + if ip_usable: + logger.info("IP检测通过,打开店铺平台主页:%s", shop_name) + self.open_launcher_page(ret_json.get("launcherPage"), self.browser) + else: + logger.error("IP检测不通过,停止打开店铺:%s", shop_name) + raise RuntimeError("IP检测不通过,可能是因为网络环境变化导致的,为了店铺安全不打开店铺") + return self.browser + + def close_store(self, browser_oauth=None): + """ + 关闭店铺 + + Args: + browser_oauth: 店铺OAuth标识,如果不提供则使用当前打开的店铺 + + Returns: + dict: 返回结果 + """ + if browser_oauth is None: + browser_oauth = self.store_id + + request_id = str(uuid.uuid4()) + data = { + "action": "stopBrowser", + "requestId": request_id, + "duplicate": 0, + "browserOauth": browser_oauth, + } + data.update(self.user_info) + + logger.info("开始关闭紫鸟店铺,browserOauth=%s,requestId=%s", browser_oauth, request_id) + url = f"http://127.0.0.1:{self.socket_port}" + response = requests.post(url, json.dumps(data).encode("utf-8"), timeout=120) + result = response.json() + if str(result.get("statusCode")) == "0": + logger.info("紫鸟店铺关闭成功,browserOauth=%s", browser_oauth) + return result + if str(result.get("statusCode")) == "-10003": + logger.error("关闭紫鸟店铺登录失败:%s", json.dumps(result, ensure_ascii=False)) + raise RuntimeError(f"【close_store】登录失败 {json.dumps(result, ensure_ascii=False)}") + + logger.error("关闭紫鸟店铺失败:%s", json.dumps(result, ensure_ascii=False)) + raise RuntimeError(f"【close_store】失败: {json.dumps(result, ensure_ascii=False)} ") + + def open_launcher_page(self, launcher_page: str, browser: Chromium = None): + """ + 打开启动页面 + + Args: + launcher_page: 要打开的页面URL + browser: 浏览器实例,如果不提供则使用当前浏览器实例 + """ + if browser is None: + browser = self.browser + + logger.info("打开店铺平台启动页:%s", launcher_page) + tab = browser.new_tab(url=launcher_page) + self.tab = tab + return tab + + def open_ip_check(self, browser: Chromium, ip_check_url: str): + """ + 打开ip检测页检测ip是否正常 + :param browser: drissionpage浏览器会话 + :param ip_check_url ip检测页地址 + :return 检测结果 + """ + try: + logger.info("开始打开IP检测页:%s", ip_check_url) + tab = browser.latest_tab + tab.get(ip_check_url) + success_button = tab.ele( + (By.XPATH, '//button[contains(@class, "styles_btn--success")]'), + timeout=60, + ) + if success_button: + logger.info("IP检测成功") + return True + + logger.warning("IP检测超时或未找到成功按钮") + return False + except Exception: + logger.exception("IP检测异常") + return False + + +class AmamzonBase(ZiniaoDriver): + """亚马逊操作基类,包含一些通用方法""" + + def SwitchingCountries(self, country_name: str): + """ + 切换国家 + 操作: + 1、//div[@class="dropdown-account-switcher-header-label"]/span[last()] 获取此元素文本,判断当前国家,如果与目标国家相同则不操作,否则执行下一步 + 2、点击 //div[@class="dropdown-account-switcher-header-label"] 打开下拉框 + 3、点击 //div[@class="dropdown-account-switcher-list-item"] 第一个展开国家列表 + 4、点击 //div[@class="dropdown-account-switcher-list-item dropdown-account-switcher-list-item-indented" and @title="国家名"] 切换到目标国家 + 5、等待页面加载完成,判断国家是否切换成功,成功则返回True,否则返回False + + Args: + country_name: 目标国家名称 + + Returns: + bool: 切换成功返回True,失败返回False + """ + try: + if self.browser is None: + logger.warning("浏览器实例不存在,请先打开店铺") + return False + + tab = self.tab + tab.wait.doc_loaded(timeout=120, raise_err=False) + + logger.info("正在检查当前国家") + current_country_ele = tab.ele( + 'xpath://div[@class="dropdown-account-switcher-header-label"]/span[last()]', + timeout=20, + ) + if current_country_ele: + current_country = current_country_ele.text.strip() + logger.info("当前国家:%s", current_country) + + if current_country == country_name: + logger.info("当前已经是目标国家 %s,无需切换", country_name) + return True + else: + logger.warning("无法获取当前国家信息") + return False + + logger.info("正在打开国家切换下拉框") + dropdown_header = tab.ele('xpath://div[@class="dropdown-account-switcher-header-label"]', timeout=10) + if not dropdown_header: + logger.warning("找不到国家切换下拉框") + return False + dropdown_header.click() + time.sleep(1) + + logger.info("正在展开国家列表") + first_item = tab.ele('xpath://div[@class="dropdown-account-switcher-list-item"]', timeout=10) + if not first_item: + logger.warning("找不到国家列表项") + return False + first_item.click() + time.sleep(1) + + logger.info("正在切换到国家:%s", country_name) + target_country_xpath = f'//div[@class="dropdown-account-switcher-list-item dropdown-account-switcher-list-item-indented" and @title="{country_name}"]' + target_country = tab.ele(f"xpath:{target_country_xpath}", timeout=10) + if not target_country: + logger.warning("找不到目标国家:%s", country_name) + return False + target_country.click() + + logger.info("等待国家切换后页面加载") + self.tab.wait.doc_loaded() + + new_country_ele = tab.ele( + 'xpath://div[@class="dropdown-account-switcher-header-label"]/span[last()]', + timeout=10, + ) + if new_country_ele: + new_country = new_country_ele.text.strip() + if new_country == country_name: + logger.info("国家切换成功:%s", new_country) + return True + + logger.warning("国家切换失败,当前国家:%s,目标国家:%s", new_country, country_name) + return False + + logger.warning("无法验证国家切换结果") + return False + + except Exception: + logger.exception("切换国家时发生异常") + return False + + def need_login(self): + """ + 判断是否需要登录,部分国家可能需要登录后才能切换国家 + """ + time.sleep(3) + self.tab.wait.doc_loaded(timeout=30, raise_err=False) + need_login_ele = self.tab.eles( + 'xpath://h1[@class="a-spacing-small"]|//span[contains(text(),"登录")]', + timeout=5, + ) + if len(need_login_ele) > 0: + logger.info("检测到需要登录元素") + return True + logger.info("未检测到登录元素") + return False + + def login(self, password, username=""): + try: + self.tab.wait.doc_loaded(timeout=30, raise_err=False) + for _ in range(4): + pwd_input = self.tab.eles('xpath://input[@type="password"]', timeout=5) + if len(pwd_input) > 0: + logger.info("检测到密码输入框,准备输入密码") + pwd_input[0].input(password, clear=True) + submit_btn = self.tab.eles('xpath://input[@id="signInSubmit"]', timeout=5) + if len(submit_btn) > 0: + logger.info("点击登录提交按钮") + submit_btn[0].click() + self.tab.wait.doc_loaded(timeout=30, raise_err=False) + + send_code = self.tab.eles( + 'xpath://span[@id="auth-send-code" and contains(string(.),"发送一次性密码")]', + timeout=5, + ) + logger.info("发送一次性密码元素数量:%s", len(send_code)) + if len(send_code) > 0: + logger.info("检测到发送一次性密码按钮,准备点击") + send_code[0].click() + time.sleep(1) + self.tab.wait.doc_loaded(timeout=30, raise_err=False) + else: + for _ in range(5): + opt_code_input = self.tab.eles('xpath://input[@name="otpCode"]', timeout=30) + logger.info("验证码输入框数量:%s", len(opt_code_input)) + if len(opt_code_input) > 0: + opt_code_input[0].wait.displayed(timeout=10, raise_err=False) + for _ in range(30): + if opt_code_input[0].value is not None and opt_code_input[0].value.strip() != "": + logger.info("检测到验证码输入完成") + submit_btn = self.tab.eles('xpath://input[@id="auth-signin-button"]', timeout=10) + if len(submit_btn) > 0: + submit_btn[0].click() + self.tab.wait.doc_loaded(timeout=20, raise_err=False) + error_mes = self.tab.eles( + 'xpath://div[@id="auth-error-message-box"]', + timeout=10, + ) + if len(error_mes) > 0: + logger.warning("验证码输入错误:%s", error_mes[0].text) + self.tab.refresh() + else: + logger.info("登录成功") + return True + + time.sleep(1) + else: + break + + submit_btn = self.tab.eles('xpath://input[@id="auth-signin-button"]', timeout=10) + if len(submit_btn) > 0: + logger.info("点击二次登录提交按钮") + submit_btn[0].click() + except Exception: + logger.exception("登录过程中发生异常:%s", traceback.format_exc()) + return False diff --git a/app/pyproject.toml b/app/pyproject.toml new file mode 100644 index 0000000..54fdfb8 --- /dev/null +++ b/app/pyproject.toml @@ -0,0 +1,98 @@ +[project] +name = "crawler-desktop-app" +version = "0.1.0" +description = "Desktop crawler app backend and pywebview shell." +requires-python = ">=3.9,<3.10" +dependencies = [ + "alibabacloud-oss-v2==1.2.4", + "altgraph==0.17.5", + "annotated-types==0.7.0", + "anyio==4.12.1", + "Authlib==1.6.8", + "blinker==1.9.0", + "bottle==0.13.4", + "certifi==2026.1.4", + "cffi==2.0.0", + "charset-normalizer==3.4.4", + "click==8.1.8", + "clr_loader==0.2.10", + "colorama==0.4.6", + "cozepy==0.20.0", + "crcmod-plus==2.3.1", + "cryptography==41.0.0", + "cssselect==1.3.0", + "DataRecorder==3.6.2", + "distro==1.9.0", + "DownloadKit==2.0.7", + "DrissionPage==4.1.1.2", + "et_xmlfile==2.0.0", + "exceptiongroup==1.3.1", + "filelock==3.19.1", + "Flask==3.1.3", + "flask-cors==6.0.2", + "h11==0.16.0", + "httpcore==1.0.9", + "httpx==0.28.1", + "idna==3.11", + "importlib_metadata==8.7.1", + "itsdangerous==2.2.0", + "Jinja2==3.1.6", + "lxml==6.0.2", + "MarkupSafe==3.0.3", + "MouseInfo==0.1.3", + "Nuitka==2.8.6", + "numpy==1.25.2", + "openpyxl==3.1.5", + "ordered-set==4.1.0", + "packaging==26.0", + "pandas==2.3.3", + "pefile==2024.8.26", + "pillow==11.3.0", + "proxy_tools==0.1.0", + "psutil==7.2.2", + "PyAutoGUI==0.9.54", + "pycparser==2.23", + "pycryptodome==3.23.0", + "pydantic==2.12.5", + "pydantic_core==2.41.5", + "PyGetWindow==0.0.9", + "pyinstaller==6.19.0", + "pyinstaller-hooks-contrib==2026.3", + "PyMsgBox==2.0.1", + "PyMySQL==1.1.2", + "pyperclip==1.11.0", + "PyQt5==5.15.11", + "PyQt5-Qt5==5.15.2", + "PyQt5_sip==12.17.1", + "PyRect==0.2.0", + "PyScreeze==1.0.1", + "python-dateutil==2.9.0.post0", + "python-dotenv==1.2.1", + "pythonnet==3.0.5", + "pytweening==1.2.0", + "pytz==2026.1.post1", + "pywebview==6.1", + "pywin32-ctypes==0.2.3", + "requests==2.32.5", + "requests-file==3.0.1", + "six==1.17.0", + "tldextract==5.3.0", + "typing-inspection==0.4.2", + "typing_extensions==4.15.0", + "tzdata==2025.3", + "urllib3==2.6.3", + "websocket-client==1.9.0", + "websockets==14.2", + "Werkzeug==3.1.6", + "zipp==3.23.0", + "zstandard==0.25.0", +] + +[tool.uv] +package = false + +[dependency-groups] +dev = [ + "pytest>=8.4.2", + "ruff>=0.14.0", +] diff --git a/app/tests/conftest.py b/app/tests/conftest.py new file mode 100644 index 0000000..e69de29 diff --git a/app/tests/test_amazon_base.py b/app/tests/test_amazon_base.py new file mode 100644 index 0000000..45dec55 --- /dev/null +++ b/app/tests/test_amazon_base.py @@ -0,0 +1,337 @@ +import json + +import pytest +from amazon import base + + +class FakeResponse: + def __init__(self, payload): + self.payload = payload + + def json(self): + return self.payload + + +class FakeWait: + def __init__(self, *, raise_on_doc_loaded=False): + self.doc_loaded_calls = [] + self.displayed_calls = [] + self.raise_on_doc_loaded = raise_on_doc_loaded + + def doc_loaded(self, **kwargs): + if self.raise_on_doc_loaded: + raise RuntimeError("doc load failed") + self.doc_loaded_calls.append(kwargs) + + def displayed(self, **kwargs): + self.displayed_calls.append(kwargs) + return True + + +class FakeElement: + def __init__(self, *, text="", value=None): + self.text = text + self.value = value + self.clicks = 0 + self.inputs = [] + self.wait = FakeWait() + + def click(self, *args, **kwargs): + self.clicks += 1 + + def input(self, value, clear=False): + self.inputs.append((value, clear)) + + +class FakeTab: + def __init__(self, *, ele_returns=None, eles_returns=None, raise_on_doc_loaded=False): + self.ele_returns = {key: list(values) for key, values in (ele_returns or {}).items()} + self.eles_returns = {key: list(values) for key, values in (eles_returns or {}).items()} + self.wait = FakeWait(raise_on_doc_loaded=raise_on_doc_loaded) + self.refreshes = 0 + + def ele(self, locator, timeout=None): + values = self.ele_returns.get(locator) + if not values: + return None + return values.pop(0) + + def eles(self, locator, timeout=None): + values = self.eles_returns.get(locator) + if not values: + return [] + return values.pop(0) + + def refresh(self): + self.refreshes += 1 + + +def test_ziniao_driver_initializes_browser_state(): + user_info = { + "company": "test-company", + "username": "test-user", + "password": "test-password", + } + + driver = base.ZiniaoDriver(user_info, socket_port=19999) + + assert driver.user_info is user_info + assert driver.socket_port == 19999 + assert driver.client_path is None + assert driver.browser is None + assert driver.tab is None + assert driver.store_id is None + + +def test_amazon_base_inherits_ziniao_driver(): + driver = base.AmamzonBase({}) + + assert isinstance(driver, base.ZiniaoDriver) + + +def test_kill_process_uses_ziniao_driver(monkeypatch): + calls = [] + + class FakeDriver: + def __init__(self, user_info): + calls.append(("init", user_info)) + + def kill_process(self, version): + calls.append(("kill_process", version)) + + monkeypatch.setattr(base, "ZiniaoDriver", FakeDriver) + + base.kill_process("v6") + + assert calls == [("init", {}), ("kill_process", "v6")] + + +def test_get_zinaio_exe_returns_none_when_winreg_unavailable(monkeypatch, caplog): + driver = base.ZiniaoDriver({}) + monkeypatch.setattr(base, "winreg", None) + + with caplog.at_level("ERROR", logger=base.logger.name): + result = driver.get_zinaio_exe() + + assert result is None + assert any("winreg" in message for message in caplog.messages) + + +@pytest.mark.parametrize( + ("store_info", "expected_key"), + [ + ("12345", "browserId"), + ("oauth-token", "browserOauth"), + ], +) +def test_open_store_payload_uses_id_or_oauth(monkeypatch, store_info, expected_key): + payloads = [] + + def fake_post(url, data, timeout): + payloads.append(json.loads(data.decode("utf-8"))) + return FakeResponse({"statusCode": 0, "debuggingPort": 9222}) + + monkeypatch.setattr(base.requests, "post", fake_post) + + result = base.ZiniaoDriver({"company": "c"}).open_store(store_info) + + assert result["debuggingPort"] == 9222 + assert payloads[0]["action"] == "startBrowser" + assert payloads[0][expected_key] == store_info + + +@pytest.mark.parametrize( + ("payload", "expected"), + [ + ({"statusCode": 0, "browserList": [{"browserName": "shop"}]}, [{"browserName": "shop"}]), + ({"statusCode": -10003}, None), + ({"statusCode": 500, "message": "failed"}, None), + ], +) +def test_get_browser_list_status_handling(monkeypatch, payload, expected): + monkeypatch.setattr(base.requests, "post", lambda *args, **kwargs: FakeResponse(payload)) + + assert base.ZiniaoDriver({}).get_browser_list() == expected + + +def test_close_store_success_uses_current_store(monkeypatch): + payloads = [] + + def fake_post(url, data, timeout): + payloads.append(json.loads(data.decode("utf-8"))) + return FakeResponse({"statusCode": 0, "ok": True}) + + monkeypatch.setattr(base.requests, "post", fake_post) + driver = base.ZiniaoDriver({}) + driver.store_id = "oauth-1" + + result = driver.close_store() + + assert result["ok"] is True + assert payloads[0]["action"] == "stopBrowser" + assert payloads[0]["browserOauth"] == "oauth-1" + + +def test_close_store_login_failure_raises(monkeypatch): + monkeypatch.setattr(base.requests, "post", lambda *args, **kwargs: FakeResponse({"statusCode": -10003})) + + with pytest.raises(RuntimeError, match="【close_store】登录失败"): + base.ZiniaoDriver({}).close_store("oauth-1") + + +def test_open_shop_returns_message_when_shop_missing(monkeypatch): + driver = base.ZiniaoDriver({}) + monkeypatch.setattr(driver, "start_client", lambda: None) + monkeypatch.setattr(driver, "get_browser_list", lambda: [{"browserName": "other"}]) + + assert driver.open_shop("target") == "店铺不存在" + assert driver.store_id is None + + +def test_open_shop_opens_matching_store(monkeypatch): + opened_pages = [] + fake_browser = object() + driver = base.ZiniaoDriver({}) + monkeypatch.setattr(driver, "start_client", lambda: None) + monkeypatch.setattr(driver, "get_browser_list", lambda: [{"browserName": "target", "browserOauth": "oauth-1"}]) + monkeypatch.setattr( + driver, + "open_store", + lambda store_id: { + "browserOauth": "oauth-2", + "debuggingPort": 9222, + "ipDetectionPage": "https://ip-check", + "launcherPage": "https://launcher", + }, + ) + monkeypatch.setattr(driver, "get_browser", lambda port: fake_browser) + monkeypatch.setattr(driver, "open_ip_check", lambda browser, url: True) + monkeypatch.setattr(driver, "open_launcher_page", lambda page, browser: opened_pages.append((page, browser))) + + assert driver.open_shop("target") is fake_browser + assert driver.store_id == "oauth-2" + assert opened_pages == [("https://launcher", fake_browser)] + + +def test_switching_countries_returns_true_when_already_current(): + current_country = FakeElement(text="西班牙") + driver = base.AmamzonBase({}) + driver.browser = object() + driver.tab = FakeTab( + ele_returns={ + 'xpath://div[@class="dropdown-account-switcher-header-label"]/span[last()]': [current_country], + } + ) + + assert driver.SwitchingCountries("西班牙") is True + + +def test_switching_countries_returns_false_when_target_missing(monkeypatch): + monkeypatch.setattr(base.time, "sleep", lambda seconds: None) + driver = base.AmamzonBase({}) + driver.browser = object() + driver.tab = FakeTab( + ele_returns={ + 'xpath://div[@class="dropdown-account-switcher-header-label"]/span[last()]': [FakeElement(text="英国")], + 'xpath://div[@class="dropdown-account-switcher-header-label"]': [FakeElement()], + 'xpath://div[@class="dropdown-account-switcher-list-item"]': [FakeElement()], + 'xpath://div[@class="dropdown-account-switcher-list-item dropdown-account-switcher-list-item-indented" and @title="西班牙"]': [ + None + ], + } + ) + + assert driver.SwitchingCountries("西班牙") is False + + +def test_switching_countries_clicks_and_verifies_target(monkeypatch): + monkeypatch.setattr(base.time, "sleep", lambda seconds: None) + dropdown = FakeElement() + first_item = FakeElement() + target = FakeElement() + driver = base.AmamzonBase({}) + driver.browser = object() + driver.tab = FakeTab( + ele_returns={ + 'xpath://div[@class="dropdown-account-switcher-header-label"]/span[last()]': [ + FakeElement(text="英国"), + FakeElement(text="西班牙"), + ], + 'xpath://div[@class="dropdown-account-switcher-header-label"]': [dropdown], + 'xpath://div[@class="dropdown-account-switcher-list-item"]': [first_item], + 'xpath://div[@class="dropdown-account-switcher-list-item dropdown-account-switcher-list-item-indented" and @title="西班牙"]': [ + target + ], + } + ) + + assert driver.SwitchingCountries("西班牙") is True + assert dropdown.clicks == 1 + assert first_item.clicks == 1 + assert target.clicks == 1 + + +def test_login_returns_true_when_otp_submit_succeeds(monkeypatch): + monkeypatch.setattr(base.time, "sleep", lambda seconds: None) + password_input = FakeElement() + password_submit = FakeElement() + otp_input = FakeElement(value="123456") + otp_submit = FakeElement() + driver = base.AmamzonBase({}) + driver.tab = FakeTab( + eles_returns={ + 'xpath://input[@type="password"]': [[password_input]], + 'xpath://input[@id="signInSubmit"]': [[password_submit]], + 'xpath://span[@id="auth-send-code" and contains(string(.),"发送一次性密码")]': [[]], + 'xpath://input[@name="otpCode"]': [[otp_input]], + 'xpath://input[@id="auth-signin-button"]': [[otp_submit]], + 'xpath://div[@id="auth-error-message-box"]': [[]], + } + ) + + assert driver.login("secret") is True + assert password_input.inputs == [("secret", True)] + assert password_submit.clicks == 1 + assert otp_submit.clicks == 1 + + +def test_login_refreshes_on_otp_error(monkeypatch): + monkeypatch.setattr(base.time, "sleep", lambda seconds: None) + otp_input = FakeElement(value="123456") + driver = base.AmamzonBase({}) + driver.tab = FakeTab( + eles_returns={ + 'xpath://input[@type="password"]': [[]], + 'xpath://input[@id="signInSubmit"]': [[]], + 'xpath://span[@id="auth-send-code" and contains(string(.),"发送一次性密码")]': [[]], + 'xpath://input[@name="otpCode"]': [[otp_input]], + 'xpath://input[@id="auth-signin-button"]': [[FakeElement()]], + 'xpath://div[@id="auth-error-message-box"]': [[FakeElement(text="验证码错误")]], + } + ) + + assert driver.login("secret") is False + assert driver.tab.refreshes == 1 + + +def test_login_returns_false_when_no_otp_input(monkeypatch): + monkeypatch.setattr(base.time, "sleep", lambda seconds: None) + driver = base.AmamzonBase({}) + driver.tab = FakeTab( + eles_returns={ + 'xpath://input[@type="password"]': [[]], + 'xpath://input[@id="signInSubmit"]': [[]], + 'xpath://span[@id="auth-send-code" and contains(string(.),"发送一次性密码")]': [[]], + 'xpath://input[@name="otpCode"]': [[]], + 'xpath://input[@id="auth-signin-button"]': [[]], + } + ) + + assert driver.login("secret") is False + + +def test_login_returns_false_on_exception(): + driver = base.AmamzonBase({}) + driver.tab = FakeTab(raise_on_doc_loaded=True) + + assert driver.login("secret") is False diff --git a/app/uv.lock b/app/uv.lock new file mode 100644 index 0000000..beeb15d --- /dev/null +++ b/app/uv.lock @@ -0,0 +1,1477 @@ +version = 1 +revision = 3 +requires-python = "==3.9.*" + +[[package]] +name = "alibabacloud-oss-v2" +version = "1.2.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "crcmod-plus" }, + { name = "pycryptodome" }, + { name = "requests" }, +] +wheels = [ + { url = "https://files.pythonhosted.org/packages/82/02/d681807d49a8debabb6cfde2b5a1057a27c2cd7caa0c51111127110db423/alibabacloud_oss_v2-1.2.4-py3-none-any.whl", hash = "sha256:c4f1878f3b2bf0b65bb1a1182253502b69b30bcccb7356859e3a9f079c14217c", size = 264323, upload-time = "2026-02-05T09:24:18.263Z" }, +] + +[[package]] +name = "altgraph" +version = "0.17.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/f8/97fdf103f38fed6792a1601dbc16cc8aac56e7459a9fff08c812d8ae177a/altgraph-0.17.5.tar.gz", hash = "sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7", size = 48428, upload-time = "2025-11-21T20:35:50.583Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/ba/000a1996d4308bc65120167c21241a3b205464a2e0b58deda26ae8ac21d1/altgraph-0.17.5-py2.py3-none-any.whl", hash = "sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597", size = 21228, upload-time = "2025-11-21T20:35:49.444Z" }, +] + +[[package]] +name = "annotated-types" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, +] + +[[package]] +name = "anyio" +version = "4.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "exceptiongroup" }, + { name = "idna" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" }, +] + +[[package]] +name = "authlib" +version = "1.6.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6b/6c/c88eac87468c607f88bc24df1f3b31445ee6fc9ba123b09e666adf687cd9/authlib-1.6.8.tar.gz", hash = "sha256:41ae180a17cf672bc784e4a518e5c82687f1fe1e98b0cafaeda80c8e4ab2d1cb", size = 165074, upload-time = "2026-02-14T04:02:17.941Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9b/73/f7084bf12755113cd535ae586782ff3a6e710bfbe6a0d13d1c2f81ffbbfa/authlib-1.6.8-py2.py3-none-any.whl", hash = "sha256:97286fd7a15e6cfefc32771c8ef9c54f0ed58028f1322de6a2a7c969c3817888", size = 244116, upload-time = "2026-02-14T04:02:15.579Z" }, +] + +[[package]] +name = "blinker" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" }, +] + +[[package]] +name = "bottle" +version = "0.13.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/71/cca6167c06d00c81375fd668719df245864076d284f7cb46a694cbeb5454/bottle-0.13.4.tar.gz", hash = "sha256:787e78327e12b227938de02248333d788cfe45987edca735f8f88e03472c3f47", size = 98717, upload-time = "2025-06-15T10:08:59.439Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/83/f6/b55ec74cfe68c6584163faa311503c20b0da4c09883a41e8e00d6726c954/bottle-0.13.4-py2.py3-none-any.whl", hash = "sha256:045684fbd2764eac9cdeb824861d1551d113e8b683d8d26e296898d3dd99a12e", size = 103807, upload-time = "2025-06-15T10:08:57.691Z" }, +] + +[[package]] +name = "certifi" +version = "2026.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/cc/08ed5a43f2996a16b462f64a7055c6e962803534924b9b2f1371d8c00b7b/cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf", size = 184288, upload-time = "2025-09-08T23:23:48.404Z" }, + { url = "https://files.pythonhosted.org/packages/3d/de/38d9726324e127f727b4ecc376bc85e505bfe61ef130eaf3f290c6847dd4/cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7", size = 180509, upload-time = "2025-09-08T23:23:49.73Z" }, + { url = "https://files.pythonhosted.org/packages/9b/13/c92e36358fbcc39cf0962e83223c9522154ee8630e1df7c0b3a39a8124e2/cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c", size = 208813, upload-time = "2025-09-08T23:23:51.263Z" }, + { url = "https://files.pythonhosted.org/packages/15/12/a7a79bd0df4c3bff744b2d7e52cc1b68d5e7e427b384252c42366dc1ecbc/cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165", size = 216498, upload-time = "2025-09-08T23:23:52.494Z" }, + { url = "https://files.pythonhosted.org/packages/a3/ad/5c51c1c7600bdd7ed9a24a203ec255dccdd0ebf4527f7b922a0bde2fb6ed/cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534", size = 203243, upload-time = "2025-09-08T23:23:53.836Z" }, + { url = "https://files.pythonhosted.org/packages/32/f2/81b63e288295928739d715d00952c8c6034cb6c6a516b17d37e0c8be5600/cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f", size = 203158, upload-time = "2025-09-08T23:23:55.169Z" }, + { url = "https://files.pythonhosted.org/packages/1f/74/cc4096ce66f5939042ae094e2e96f53426a979864aa1f96a621ad128be27/cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63", size = 216548, upload-time = "2025-09-08T23:23:56.506Z" }, + { url = "https://files.pythonhosted.org/packages/e8/be/f6424d1dc46b1091ffcc8964fa7c0ab0cd36839dd2761b49c90481a6ba1b/cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2", size = 218897, upload-time = "2025-09-08T23:23:57.825Z" }, + { url = "https://files.pythonhosted.org/packages/f7/e0/dda537c2309817edf60109e39265f24f24aa7f050767e22c98c53fe7f48b/cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65", size = 211249, upload-time = "2025-09-08T23:23:59.139Z" }, + { url = "https://files.pythonhosted.org/packages/2b/e7/7c769804eb75e4c4b35e658dba01de1640a351a9653c3d49ca89d16ccc91/cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322", size = 218041, upload-time = "2025-09-08T23:24:00.496Z" }, + { url = "https://files.pythonhosted.org/packages/aa/d9/6218d78f920dcd7507fc16a766b5ef8f3b913cc7aa938e7fc80b9978d089/cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a", size = 172138, upload-time = "2025-09-08T23:24:01.7Z" }, + { url = "https://files.pythonhosted.org/packages/54/8f/a1e836f82d8e32a97e6b29cc8f641779181ac7363734f12df27db803ebda/cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9", size = 182794, upload-time = "2025-09-08T23:24:02.943Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/7c/0c4760bccf082737ca7ab84a4c2034fcc06b1f21cf3032ea98bd6feb1725/charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9", size = 209609, upload-time = "2025-10-14T04:42:10.922Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a4/69719daef2f3d7f1819de60c9a6be981b8eeead7542d5ec4440f3c80e111/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d", size = 149029, upload-time = "2025-10-14T04:42:12.38Z" }, + { url = "https://files.pythonhosted.org/packages/e6/21/8d4e1d6c1e6070d3672908b8e4533a71b5b53e71d16828cc24d0efec564c/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608", size = 144580, upload-time = "2025-10-14T04:42:13.549Z" }, + { url = "https://files.pythonhosted.org/packages/a7/0a/a616d001b3f25647a9068e0b9199f697ce507ec898cacb06a0d5a1617c99/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc", size = 162340, upload-time = "2025-10-14T04:42:14.892Z" }, + { url = "https://files.pythonhosted.org/packages/85/93/060b52deb249a5450460e0585c88a904a83aec474ab8e7aba787f45e79f2/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e", size = 159619, upload-time = "2025-10-14T04:42:16.676Z" }, + { url = "https://files.pythonhosted.org/packages/dd/21/0274deb1cc0632cd587a9a0ec6b4674d9108e461cb4cd40d457adaeb0564/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1", size = 153980, upload-time = "2025-10-14T04:42:17.917Z" }, + { url = "https://files.pythonhosted.org/packages/28/2b/e3d7d982858dccc11b31906976323d790dded2017a0572f093ff982d692f/charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3", size = 152174, upload-time = "2025-10-14T04:42:19.018Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ff/4a269f8e35f1e58b2df52c131a1fa019acb7ef3f8697b7d464b07e9b492d/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6", size = 151666, upload-time = "2025-10-14T04:42:20.171Z" }, + { url = "https://files.pythonhosted.org/packages/da/c9/ec39870f0b330d58486001dd8e532c6b9a905f5765f58a6f8204926b4a93/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88", size = 145550, upload-time = "2025-10-14T04:42:21.324Z" }, + { url = "https://files.pythonhosted.org/packages/75/8f/d186ab99e40e0ed9f82f033d6e49001701c81244d01905dd4a6924191a30/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1", size = 163721, upload-time = "2025-10-14T04:42:22.46Z" }, + { url = "https://files.pythonhosted.org/packages/96/b1/6047663b9744df26a7e479ac1e77af7134b1fcf9026243bb48ee2d18810f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf", size = 152127, upload-time = "2025-10-14T04:42:23.712Z" }, + { url = "https://files.pythonhosted.org/packages/59/78/e5a6eac9179f24f704d1be67d08704c3c6ab9f00963963524be27c18ed87/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318", size = 161175, upload-time = "2025-10-14T04:42:24.87Z" }, + { url = "https://files.pythonhosted.org/packages/e5/43/0e626e42d54dd2f8dd6fc5e1c5ff00f05fbca17cb699bedead2cae69c62f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c", size = 155375, upload-time = "2025-10-14T04:42:27.246Z" }, + { url = "https://files.pythonhosted.org/packages/e9/91/d9615bf2e06f35e4997616ff31248c3657ed649c5ab9d35ea12fce54e380/charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505", size = 99692, upload-time = "2025-10-14T04:42:28.425Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a9/6c040053909d9d1ef4fcab45fddec083aedc9052c10078339b47c8573ea8/charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966", size = 107192, upload-time = "2025-10-14T04:42:29.482Z" }, + { url = "https://files.pythonhosted.org/packages/f0/c6/4fa536b2c0cd3edfb7ccf8469fa0f363ea67b7213a842b90909ca33dd851/charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50", size = 100220, upload-time = "2025-10-14T04:42:30.632Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, +] + +[[package]] +name = "clr-loader" +version = "0.2.10" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/18/24/c12faf3f61614b3131b5c98d3bf0d376b49c7feaa73edca559aeb2aee080/clr_loader-0.2.10.tar.gz", hash = "sha256:81f114afbc5005bafc5efe5af1341d400e22137e275b042a8979f3feb9fc9446", size = 83605, upload-time = "2026-01-03T23:13:06.984Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/61/cf819f8e8bb4d4c74661acf2498ba8d4a296714be3478d21eaabf64f5b9b/clr_loader-0.2.10-py3-none-any.whl", hash = "sha256:ebbbf9d511a7fe95fa28a95a4e04cd195b097881dfe66158dc2c281d3536f282", size = 56483, upload-time = "2026-01-03T23:13:05.439Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "cozepy" +version = "0.20.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "authlib" }, + { name = "distro" }, + { name = "httpx" }, + { name = "pydantic" }, + { name = "typing-extensions" }, + { name = "websockets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/31/ae/608ca49d2d12941fa33ab588c0b1f54b2260c10a7380059af74448467aa0/cozepy-0.20.0.tar.gz", hash = "sha256:69e359beea826f4a3ecf38d3fbd3efe2dd7558e13006f6444095b74274883dda", size = 88871, upload-time = "2025-10-22T14:03:23.721Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/66/76a9d5e6820d66feee50444b21bf0886273dd55a90c82d4d8ee2b93478fd/cozepy-0.20.0-py3-none-any.whl", hash = "sha256:efcc032fb8ff0b5f41071fb1727a0f242bdfe9d304578d2dcb7837a18d98b181", size = 116218, upload-time = "2025-10-22T14:03:22.378Z" }, +] + +[[package]] +name = "crawler-desktop-app" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "alibabacloud-oss-v2" }, + { name = "altgraph" }, + { name = "annotated-types" }, + { name = "anyio" }, + { name = "authlib" }, + { name = "blinker" }, + { name = "bottle" }, + { name = "certifi" }, + { name = "cffi" }, + { name = "charset-normalizer" }, + { name = "click" }, + { name = "clr-loader" }, + { name = "colorama" }, + { name = "cozepy" }, + { name = "crcmod-plus" }, + { name = "cryptography" }, + { name = "cssselect" }, + { name = "datarecorder" }, + { name = "distro" }, + { name = "downloadkit" }, + { name = "drissionpage" }, + { name = "et-xmlfile" }, + { name = "exceptiongroup" }, + { name = "filelock" }, + { name = "flask" }, + { name = "flask-cors" }, + { name = "h11" }, + { name = "httpcore" }, + { name = "httpx" }, + { name = "idna" }, + { name = "importlib-metadata" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "lxml" }, + { name = "markupsafe" }, + { name = "mouseinfo" }, + { name = "nuitka" }, + { name = "numpy" }, + { name = "openpyxl" }, + { name = "ordered-set" }, + { name = "packaging" }, + { name = "pandas" }, + { name = "pefile" }, + { name = "pillow" }, + { name = "proxy-tools" }, + { name = "psutil" }, + { name = "pyautogui" }, + { name = "pycparser" }, + { name = "pycryptodome" }, + { name = "pydantic" }, + { name = "pydantic-core" }, + { name = "pygetwindow" }, + { name = "pyinstaller" }, + { name = "pyinstaller-hooks-contrib" }, + { name = "pymsgbox" }, + { name = "pymysql" }, + { name = "pyperclip" }, + { name = "pyqt5" }, + { name = "pyqt5-qt5" }, + { name = "pyqt5-sip" }, + { name = "pyrect" }, + { name = "pyscreeze" }, + { name = "python-dateutil" }, + { name = "python-dotenv" }, + { name = "pythonnet" }, + { name = "pytweening" }, + { name = "pytz" }, + { name = "pywebview" }, + { name = "pywin32-ctypes" }, + { name = "requests" }, + { name = "requests-file" }, + { name = "six" }, + { name = "tldextract" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, + { name = "tzdata" }, + { name = "urllib3" }, + { name = "websocket-client" }, + { name = "websockets" }, + { name = "werkzeug" }, + { name = "zipp" }, + { name = "zstandard" }, +] + +[package.dev-dependencies] +dev = [ + { name = "pytest" }, + { name = "ruff" }, +] + +[package.metadata] +requires-dist = [ + { name = "alibabacloud-oss-v2", specifier = "==1.2.4" }, + { name = "altgraph", specifier = "==0.17.5" }, + { name = "annotated-types", specifier = "==0.7.0" }, + { name = "anyio", specifier = "==4.12.1" }, + { name = "authlib", specifier = "==1.6.8" }, + { name = "blinker", specifier = "==1.9.0" }, + { name = "bottle", specifier = "==0.13.4" }, + { name = "certifi", specifier = "==2026.1.4" }, + { name = "cffi", specifier = "==2.0.0" }, + { name = "charset-normalizer", specifier = "==3.4.4" }, + { name = "click", specifier = "==8.1.8" }, + { name = "clr-loader", specifier = "==0.2.10" }, + { name = "colorama", specifier = "==0.4.6" }, + { name = "cozepy", specifier = "==0.20.0" }, + { name = "crcmod-plus", specifier = "==2.3.1" }, + { name = "cryptography", specifier = "==41.0.0" }, + { name = "cssselect", specifier = "==1.3.0" }, + { name = "datarecorder", specifier = "==3.6.2" }, + { name = "distro", specifier = "==1.9.0" }, + { name = "downloadkit", specifier = "==2.0.7" }, + { name = "drissionpage", specifier = "==4.1.1.2" }, + { name = "et-xmlfile", specifier = "==2.0.0" }, + { name = "exceptiongroup", specifier = "==1.3.1" }, + { name = "filelock", specifier = "==3.19.1" }, + { name = "flask", specifier = "==3.1.3" }, + { name = "flask-cors", specifier = "==6.0.2" }, + { name = "h11", specifier = "==0.16.0" }, + { name = "httpcore", specifier = "==1.0.9" }, + { name = "httpx", specifier = "==0.28.1" }, + { name = "idna", specifier = "==3.11" }, + { name = "importlib-metadata", specifier = "==8.7.1" }, + { name = "itsdangerous", specifier = "==2.2.0" }, + { name = "jinja2", specifier = "==3.1.6" }, + { name = "lxml", specifier = "==6.0.2" }, + { name = "markupsafe", specifier = "==3.0.3" }, + { name = "mouseinfo", specifier = "==0.1.3" }, + { name = "nuitka", specifier = "==2.8.6" }, + { name = "numpy", specifier = "==1.25.2" }, + { name = "openpyxl", specifier = "==3.1.5" }, + { name = "ordered-set", specifier = "==4.1.0" }, + { name = "packaging", specifier = "==26.0" }, + { name = "pandas", specifier = "==2.3.3" }, + { name = "pefile", specifier = "==2024.8.26" }, + { name = "pillow", specifier = "==11.3.0" }, + { name = "proxy-tools", specifier = "==0.1.0" }, + { name = "psutil", specifier = "==7.2.2" }, + { name = "pyautogui", specifier = "==0.9.54" }, + { name = "pycparser", specifier = "==2.23" }, + { name = "pycryptodome", specifier = "==3.23.0" }, + { name = "pydantic", specifier = "==2.12.5" }, + { name = "pydantic-core", specifier = "==2.41.5" }, + { name = "pygetwindow", specifier = "==0.0.9" }, + { name = "pyinstaller", specifier = "==6.19.0" }, + { name = "pyinstaller-hooks-contrib", specifier = "==2026.3" }, + { name = "pymsgbox", specifier = "==2.0.1" }, + { name = "pymysql", specifier = "==1.1.2" }, + { name = "pyperclip", specifier = "==1.11.0" }, + { name = "pyqt5", specifier = "==5.15.11" }, + { name = "pyqt5-qt5", specifier = "==5.15.2" }, + { name = "pyqt5-sip", specifier = "==12.17.1" }, + { name = "pyrect", specifier = "==0.2.0" }, + { name = "pyscreeze", specifier = "==1.0.1" }, + { name = "python-dateutil", specifier = "==2.9.0.post0" }, + { name = "python-dotenv", specifier = "==1.2.1" }, + { name = "pythonnet", specifier = "==3.0.5" }, + { name = "pytweening", specifier = "==1.2.0" }, + { name = "pytz", specifier = "==2026.1.post1" }, + { name = "pywebview", specifier = "==6.1" }, + { name = "pywin32-ctypes", specifier = "==0.2.3" }, + { name = "requests", specifier = "==2.32.5" }, + { name = "requests-file", specifier = "==3.0.1" }, + { name = "six", specifier = "==1.17.0" }, + { name = "tldextract", specifier = "==5.3.0" }, + { name = "typing-extensions", specifier = "==4.15.0" }, + { name = "typing-inspection", specifier = "==0.4.2" }, + { name = "tzdata", specifier = "==2025.3" }, + { name = "urllib3", specifier = "==2.6.3" }, + { name = "websocket-client", specifier = "==1.9.0" }, + { name = "websockets", specifier = "==14.2" }, + { name = "werkzeug", specifier = "==3.1.6" }, + { name = "zipp", specifier = "==3.23.0" }, + { name = "zstandard", specifier = "==0.25.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "pytest", specifier = ">=8.4.2" }, + { name = "ruff", specifier = ">=0.14.0" }, +] + +[[package]] +name = "crcmod-plus" +version = "2.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/0c/71733bbaf38e9f1eaecfdf7f8e350993f3dcac208a5297c41503ae66e513/crcmod_plus-2.3.1.tar.gz", hash = "sha256:732ffe3c3ce3ef9b272e1827d8fb894590c4d6ff553f2a2b41ae30f4f94b0f5d", size = 22319, upload-time = "2025-10-10T22:14:21.691Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/47/e0/2dad2e6f0cd4914b4144496d9785780ec820e200816c080df785cfa34da6/crcmod_plus-2.3.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:b7e35e0f7d93d7571c2c9c3d6760e456999ea4c1eae5ead6acac247b5a79e469", size = 23279, upload-time = "2025-10-10T22:13:47.281Z" }, + { url = "https://files.pythonhosted.org/packages/66/76/53c0b65b9679b903f98fc54efa32b0e5a19634712a45200c7a80674aa6f5/crcmod_plus-2.3.1-cp311-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6853243120db84677b94b625112116f0ef69cd581741d20de58dce4c34242654", size = 20185, upload-time = "2025-10-10T22:13:48.06Z" }, + { url = "https://files.pythonhosted.org/packages/98/79/2b4dc9bb26394873d7699737124408b5106264ae33053fdec600e9a9fa65/crcmod_plus-2.3.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:17735bc4e944d552ea18c8609fc6d08a5e64ee9b29cc216ba4d623754029cc3a", size = 26999, upload-time = "2025-10-10T22:13:48.854Z" }, + { url = "https://files.pythonhosted.org/packages/bb/e8/f5d66778b5a1bff915807016561a02b5cebf6b3840fb8a2be40bbb0c8575/crcmod_plus-2.3.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ac755040a2a35f43ab331978c48a9acb4ff64b425f282a296be467a410f00c3", size = 27536, upload-time = "2025-10-10T22:13:49.956Z" }, + { url = "https://files.pythonhosted.org/packages/f3/2c/0113ad30cadad40c22eef08c0f2618f2446dd282f02268fecbcfc9fda3c1/crcmod_plus-2.3.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7bdcfb838ca093ca673a3bbb37f62d1e5ec7182e00cc5ee2d00759f9f9f8ab11", size = 27385, upload-time = "2025-10-10T22:13:50.765Z" }, + { url = "https://files.pythonhosted.org/packages/8e/ba/501ef1b02119402cf1a31c01eb2cb8399660bca863c2f4dd3dc060220284/crcmod_plus-2.3.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9166bc3c9b5e7b07b4e6854cac392b4a451b31d58d3950e48c140ab7b5d05394", size = 27135, upload-time = "2025-10-10T22:13:51.889Z" }, + { url = "https://files.pythonhosted.org/packages/49/90/d4556c9db69c83e726c5b88da3d656fdaac7d60c4d27b43cb939bed80069/crcmod_plus-2.3.1-cp311-abi3-win32.whl", hash = "sha256:cb99b694cce5c862560cf332a8b5e793620e28f0de3726995608bbd6f9b6e09a", size = 22384, upload-time = "2025-10-10T22:13:53.016Z" }, + { url = "https://files.pythonhosted.org/packages/4d/7e/57bb97a8c7b4e19900744f58b67dc83bc9c83aaac670deeede9fb3bfab6a/crcmod_plus-2.3.1-cp311-abi3-win_amd64.whl", hash = "sha256:82b0f7e968c430c5a80fe0fc59e75cb54f2e84df2ed0cee5a3ff9cadfbf8a220", size = 22912, upload-time = "2025-10-10T22:13:53.849Z" }, + { url = "https://files.pythonhosted.org/packages/a4/12/fd9c058b7c2d8c63841038bd9b7a1781881c93ab06d8357a9eecb46c0b74/crcmod_plus-2.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:22600072de422632531e92d7675faf223a5b2548d45c5cd6f77ec4575339900f", size = 23145, upload-time = "2025-10-10T22:14:10.02Z" }, + { url = "https://files.pythonhosted.org/packages/0f/e2/002c5ee72d99bcc382f15d95f539daf0c2de31bc929f0d9e18733b4facde/crcmod_plus-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f940704e359607b47b4a8e98c4d0f453f15bea039eb183cd0ffb14a8268fea78", size = 20120, upload-time = "2025-10-10T22:14:11.124Z" }, + { url = "https://files.pythonhosted.org/packages/1f/0d/9584047c81aceb2e2e655160d10cd3c39cbf1fad52bcd6dd205ada1e077d/crcmod_plus-2.3.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f939fc1f7d143962a8fbed2305ce5931627fea1ea3a7f1865c04dbba9d41bf67", size = 28810, upload-time = "2025-10-10T22:14:12.24Z" }, + { url = "https://files.pythonhosted.org/packages/46/9f/300d48c4fc6bc409af700fa9bde85faab3934768719bdcc1759b6cce974c/crcmod_plus-2.3.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3c6e8c7cf7ef49bcae7d3293996f82edde98e5fa202752ae58bf37a0289d35d", size = 29524, upload-time = "2025-10-10T22:14:13.049Z" }, + { url = "https://files.pythonhosted.org/packages/00/03/58e7f4e1eacd1b1bb2c69aa0763d7aa39ba89c013b16d51522316b972492/crcmod_plus-2.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:728f68d0e3049ba23978aaf277f3eb405dd21e78be6ba96382739ba09bba473c", size = 29297, upload-time = "2025-10-10T22:14:13.916Z" }, + { url = "https://files.pythonhosted.org/packages/97/26/f4e31712287292693071f29369a9404c2013f7b9226a5cb50e3f44f93d90/crcmod_plus-2.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b3829ed0dba48765f9b4139cb70b9bdf6553d2154302d9e3de6377556357892f", size = 29020, upload-time = "2025-10-10T22:14:14.746Z" }, + { url = "https://files.pythonhosted.org/packages/60/5b/5f450f6e5edcfe93f019e2fd0a480103db1e853ae46983273e24e9dd96dd/crcmod_plus-2.3.1-cp39-cp39-win32.whl", hash = "sha256:855fcbd07c3eb9162c701c1c7ed1a8b5a5f7b1e8c2dd3fd8ed2273e2f141ecc9", size = 22369, upload-time = "2025-10-10T22:14:15.529Z" }, + { url = "https://files.pythonhosted.org/packages/6d/50/c6a03607712e51254e3f01b8d4214648e429578074f58f7cf11b83c89c86/crcmod_plus-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:5422081be6403b6fba736c544e79c68410307f7a1a8ac1925b421a5c6f4591d3", size = 22916, upload-time = "2025-10-10T22:14:16.475Z" }, +] + +[[package]] +name = "cryptography" +version = "41.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/92/3301a5d4fb734290a8bca5a9aad61ea61327ed53cb19be110d4f3548df76/cryptography-41.0.0.tar.gz", hash = "sha256:6b71f64beeea341c9b4f963b48ee3b62d62d57ba93eb120e1196b31dc1025e78", size = 628254, upload-time = "2023-05-30T21:47:56.594Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e4/31/06d6c33f93165c0fc80008fdeab4543b1ce7ceebcc2cf66da70e5e1daaad/cryptography-41.0.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:3c5ef25d060c80d6d9f7f9892e1d41bb1c79b78ce74805b8cb4aa373cb7d5ec8", size = 5315010, upload-time = "2023-05-30T21:47:16.76Z" }, + { url = "https://files.pythonhosted.org/packages/4e/60/e02e88f973fcf2366008d1e0b62e9ef6e432e00d6edae0e47371fe624ccb/cryptography-41.0.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8362565b3835ceacf4dc8f3b56471a2289cf51ac80946f9087e66dc283a810e0", size = 2829238, upload-time = "2023-05-30T21:47:38.055Z" }, + { url = "https://files.pythonhosted.org/packages/5b/97/1096bb43ff0f9f40a6a04fc26fe209b2991805257a2c2e32f1076201f2dd/cryptography-41.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3680248309d340fda9611498a5319b0193a8dbdb73586a1acf8109d06f25b92d", size = 4080931, upload-time = "2023-05-30T21:46:53.773Z" }, + { url = "https://files.pythonhosted.org/packages/76/94/e5b948856427b66575e194764e54bb43669e7764396868d015f1e40b5e3a/cryptography-41.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84a165379cb9d411d58ed739e4af3396e544eac190805a54ba2e0322feb55c46", size = 4299395, upload-time = "2023-05-30T21:47:34.892Z" }, + { url = "https://files.pythonhosted.org/packages/a3/90/182588b47bbe52438193d93a9901d0dddfe25b7abdc25196473f896e63e3/cryptography-41.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4ab14d567f7bbe7f1cdff1c53d5324ed4d3fc8bd17c481b395db224fb405c237", size = 4069007, upload-time = "2023-05-30T21:47:29.977Z" }, + { url = "https://files.pythonhosted.org/packages/92/b6/22b9b21fecfb03a90ce9393053f054b2742b00e704c20a595cf4c15f975e/cryptography-41.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9f65e842cb02550fac96536edb1d17f24c0a338fd84eaf582be25926e993dde4", size = 4307626, upload-time = "2023-05-30T21:47:03.438Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a3/83dc953152063db9d7a2d3349d913576fc672b71523581ddb0faa6af22bc/cryptography-41.0.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:b7f2f5c525a642cecad24ee8670443ba27ac1fab81bba4cc24c7b6b41f2d0c75", size = 4178249, upload-time = "2023-05-30T21:47:01.017Z" }, + { url = "https://files.pythonhosted.org/packages/67/da/096e2074dee14fa5793ed60a39efcab0d9851a67859bf468b1862d53e35a/cryptography-41.0.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7d92f0248d38faa411d17f4107fc0bce0c42cae0b0ba5415505df72d751bf62d", size = 4377029, upload-time = "2023-05-30T21:47:06.101Z" }, + { url = "https://files.pythonhosted.org/packages/9b/00/1cb49039236a71b9c8511ec3ba7d5153c22b022d67518499f34dcafc8c2e/cryptography-41.0.0-cp37-abi3-win32.whl", hash = "sha256:34d405ea69a8b34566ba3dfb0521379b210ea5d560fafedf9f800a9a94a41928", size = 2209044, upload-time = "2023-05-30T21:46:56.371Z" }, + { url = "https://files.pythonhosted.org/packages/ab/40/bb01066d306329d3f0e440c5e9863f08d29e783c827ce74a823889d56977/cryptography-41.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:344c6de9f8bda3c425b3a41b319522ba3208551b70c2ae00099c205f0d9fd3be", size = 2640813, upload-time = "2023-05-30T21:47:20.142Z" }, + { url = "https://files.pythonhosted.org/packages/31/50/db80a57bbaa2cd29162449ac7dd5850a8f5e7c547c2842fd6458e2b62c04/cryptography-41.0.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf8fc66012ca857d62f6a347007e166ed59c0bc150cefa49f28376ebe7d992a2", size = 2697330, upload-time = "2023-05-30T21:47:43.059Z" }, + { url = "https://files.pythonhosted.org/packages/70/97/0c178505eb329f0c338888ab3fd058101cb5054fc5cf4b9e2edce3e340f9/cryptography-41.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a4fc68d1c5b951cfb72dfd54702afdbbf0fb7acdc9b7dc4301bbf2225a27714d", size = 3978273, upload-time = "2023-05-30T21:47:40.655Z" }, + { url = "https://files.pythonhosted.org/packages/bf/d5/d68700d996a35c7041c5183aab35572064da0b7ba1dfb7526269a7faeeb8/cryptography-41.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:14754bcdae909d66ff24b7b5f166d69340ccc6cb15731670435efd5719294895", size = 4194143, upload-time = "2023-05-30T21:47:08.775Z" }, + { url = "https://files.pythonhosted.org/packages/38/d9/a8d08aada88bcb8ea4f1a0a34e3d9cf3ce0faea3df69e54c232e88ab8b32/cryptography-41.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0ddaee209d1cf1f180f1efa338a68c4621154de0afaef92b89486f5f96047c55", size = 2516950, upload-time = "2023-05-30T21:47:22.765Z" }, +] + +[[package]] +name = "cssselect" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/0a/c3ea9573b1dc2e151abfe88c7fe0c26d1892fe6ed02d0cdb30f0d57029d5/cssselect-1.3.0.tar.gz", hash = "sha256:57f8a99424cfab289a1b6a816a43075a4b00948c86b4dcf3ef4ee7e15f7ab0c7", size = 42870, upload-time = "2025-03-10T09:30:29.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ee/58/257350f7db99b4ae12b614a36256d9cc870d71d9e451e79c2dc3b23d7c3c/cssselect-1.3.0-py3-none-any.whl", hash = "sha256:56d1bf3e198080cc1667e137bc51de9cadfca259f03c2d4e09037b3e01e30f0d", size = 18786, upload-time = "2025-03-10T09:30:28.048Z" }, +] + +[[package]] +name = "datarecorder" +version = "3.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "openpyxl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b4/a1/43d52eada4e1364f8d1a5da99b855798f945228ffb7dfb199f675c1d2c2b/DataRecorder-3.6.2.tar.gz", hash = "sha256:8c9024736692af68b947fd884589e685c4f27bc29d031b81164457b09c60e1e5", size = 29567, upload-time = "2024-10-15T08:58:36.923Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/05/f0064d93a0b922ea7ad5d40a0dfaac45de37f783a85a2900e6ce8a01dbc3/DataRecorder-3.6.2-py3-none-any.whl", hash = "sha256:41ad022c4c1db58a0f4236f6a4991d1f98cd76ec049484b172bbb3040455e5ff", size = 37539, upload-time = "2024-10-15T08:58:35.419Z" }, +] + +[[package]] +name = "distro" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, +] + +[[package]] +name = "downloadkit" +version = "2.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "datarecorder" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/6b/35/9bbaed54f5d170b1fd8bcfdd3ce5e24ea71f4cac5026a37e6b21ab69726e/DownloadKit-2.0.7.tar.gz", hash = "sha256:601e423d1d4d0bd3e933524d06c913e744577d455990ec20afc3fb1f79aea9a7", size = 17488, upload-time = "2024-11-30T01:24:30.539Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/89/979ad2407eb8e0a2ac67461b7bec7db8627218fe3ba287db49636ca0a60c/DownloadKit-2.0.7-py3-none-any.whl", hash = "sha256:55b142d26b4e7ae01fff2181991c92aca9b895f75e2cd8a54f4a3b48c50b90b4", size = 21706, upload-time = "2024-11-30T01:24:17.599Z" }, +] + +[[package]] +name = "drissionpage" +version = "4.1.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "cssselect" }, + { name = "downloadkit" }, + { name = "lxml" }, + { name = "psutil" }, + { name = "requests" }, + { name = "tldextract" }, + { name = "websocket-client" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/12/b3/26bb358f3c7019bba0a2e27a636382a4226780628c30ab315537524809fb/drissionpage-4.1.1.2.tar.gz", hash = "sha256:e4375d3536519a1d24430270e2871de3015836b301cbdfb96583234e6d6ef4c1", size = 208034, upload-time = "2025-07-31T07:00:36.24Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/78/31/05834b38c12a222012f998d5c2f104f228cf8aaa37747f989c9b29e81d5d/DrissionPage-4.1.1.2-py3-none-any.whl", hash = "sha256:c8b58a8d495550142c10499ce7128655b2baf8f38f46604ba0ce951a148d88e8", size = 257497, upload-time = "2025-07-31T07:00:34.531Z" }, +] + +[[package]] +name = "et-xmlfile" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "filelock" +version = "3.19.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload-time = "2025-08-14T16:56:03.016Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload-time = "2025-08-14T16:56:01.633Z" }, +] + +[[package]] +name = "flask" +version = "3.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blinker" }, + { name = "click" }, + { name = "importlib-metadata" }, + { name = "itsdangerous" }, + { name = "jinja2" }, + { name = "markupsafe" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/26/00/35d85dcce6c57fdc871f3867d465d780f302a175ea360f62533f12b27e2b/flask-3.1.3.tar.gz", hash = "sha256:0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb", size = 759004, upload-time = "2026-02-19T05:00:57.678Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl", hash = "sha256:f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c", size = 103424, upload-time = "2026-02-19T05:00:56.027Z" }, +] + +[[package]] +name = "flask-cors" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "flask" }, + { name = "werkzeug" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/74/0fc0fa68d62f21daef41017dafab19ef4b36551521260987eb3a5394c7ba/flask_cors-6.0.2.tar.gz", hash = "sha256:6e118f3698249ae33e429760db98ce032a8bf9913638d085ca0f4c5534ad2423", size = 13472, upload-time = "2025-12-12T20:31:42.861Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/af/72ad54402e599152de6d067324c46fe6a4f531c7c65baf7e96c63db55eaf/flask_cors-6.0.2-py3-none-any.whl", hash = "sha256:e57544d415dfd7da89a9564e1e3a9e515042df76e12130641ca6f3f2f03b699a", size = 13257, upload-time = "2025-12-12T20:31:41.3Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "httpcore" +version = "1.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, +] + +[[package]] +name = "httpx" +version = "0.28.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "anyio" }, + { name = "certifi" }, + { name = "httpcore" }, + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "importlib-metadata" +version = "8.7.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "zipp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, +] + +[[package]] +name = "itsdangerous" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, +] + +[[package]] +name = "lxml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426, upload-time = "2025-09-22T04:04:59.287Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/38/66/dd13c74fad495957374c8a81c932f4874d3dca5aa0db9e4369f06a399718/lxml-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2c8458c2cdd29589a8367c09c8f030f1d202be673f0ca224ec18590b3b9fb694", size = 8602363, upload-time = "2025-09-22T04:03:58.698Z" }, + { url = "https://files.pythonhosted.org/packages/5e/f4/edb9d47dce464b5dd044d35775ee794364935b93ab6226c95e199118890d/lxml-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fee0851639d06276e6b387f1c190eb9d7f06f7f53514e966b26bae46481ec90", size = 4634995, upload-time = "2025-09-22T04:04:01.122Z" }, + { url = "https://files.pythonhosted.org/packages/66/f2/d80c97b6ed83a99bc24b2b29919d5e618af5322df6d3aa61064093712309/lxml-6.0.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b2142a376b40b6736dfc214fd2902409e9e3857eff554fed2d3c60f097e62a62", size = 5003737, upload-time = "2025-09-22T04:04:02.98Z" }, + { url = "https://files.pythonhosted.org/packages/d5/f1/18b750f79f8889b9109b24749f23ac137870b4f685edc4be54be0ff2c730/lxml-6.0.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a6b5b39cc7e2998f968f05309e666103b53e2edd01df8dc51b90d734c0825444", size = 5160821, upload-time = "2025-09-22T04:04:04.854Z" }, + { url = "https://files.pythonhosted.org/packages/cf/88/2b6a415dbad411c3e9c092128eb7db06054d2d9460aa56676d17ee4f4fd5/lxml-6.0.2-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4aec24d6b72ee457ec665344a29acb2d35937d5192faebe429ea02633151aad", size = 5070959, upload-time = "2025-09-22T04:04:07.042Z" }, + { url = "https://files.pythonhosted.org/packages/7c/d0/5354afaa0f2e53625e5f96f6bd049a4875c3ab79d96d6c4871dd1f4a98c4/lxml-6.0.2-cp39-cp39-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:b42f4d86b451c2f9d06ffb4f8bbc776e04df3ba070b9fe2657804b1b40277c48", size = 5410267, upload-time = "2025-09-22T04:04:10.458Z" }, + { url = "https://files.pythonhosted.org/packages/51/63/10dea35a01291dc529fa9d6ba204ea627a1c77b7fbb180d404f6cc4dd2fd/lxml-6.0.2-cp39-cp39-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cdaefac66e8b8f30e37a9b4768a391e1f8a16a7526d5bc77a7928408ef68e93", size = 5292990, upload-time = "2025-09-22T04:04:12.405Z" }, + { url = "https://files.pythonhosted.org/packages/37/58/51ef422d8bec58db600b3552e5f2d870ec01ffacf11d98689c42ffdcbf7f/lxml-6.0.2-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:b738f7e648735714bbb82bdfd030203360cfeab7f6e8a34772b3c8c8b820568c", size = 4776318, upload-time = "2025-09-22T04:04:14.22Z" }, + { url = "https://files.pythonhosted.org/packages/77/97/3f797820e82e3a58a19bc51068b40f3b9ab7d0934ba6e5ba6b147b618319/lxml-6.0.2-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:daf42de090d59db025af61ce6bdb2521f0f102ea0e6ea310f13c17610a97da4c", size = 5360191, upload-time = "2025-09-22T04:04:16.236Z" }, + { url = "https://files.pythonhosted.org/packages/e2/14/a9306a8ab122e2f5dfbf4f71fb09beeadca26b0c275708432bbc33f40edc/lxml-6.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:66328dabea70b5ba7e53d94aa774b733cf66686535f3bc9250a7aab53a91caaf", size = 5116114, upload-time = "2025-09-22T04:04:18.594Z" }, + { url = "https://files.pythonhosted.org/packages/ea/23/2118a1685277b9fa8726ec7ee903db55aa300dcea3d406a220cbe3710953/lxml-6.0.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:e237b807d68a61fc3b1e845407e27e5eb8ef69bc93fe8505337c1acb4ee300b6", size = 4801704, upload-time = "2025-09-22T04:04:20.466Z" }, + { url = "https://files.pythonhosted.org/packages/4e/e8/d5be34da2059dc9a4ff8643fd6ad3f8234a27b2a44831b7fff58c4dbb3e3/lxml-6.0.2-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:ac02dc29fd397608f8eb15ac1610ae2f2f0154b03f631e6d724d9e2ad4ee2c84", size = 5355451, upload-time = "2025-09-22T04:04:22.417Z" }, + { url = "https://files.pythonhosted.org/packages/61/84/5aebc8e150d5bf488815ea2d8798c7ff509cc37b5725caa3c1f11bdd3245/lxml-6.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:817ef43a0c0b4a77bd166dc9a09a555394105ff3374777ad41f453526e37f9cb", size = 5318630, upload-time = "2025-09-22T04:04:24.301Z" }, + { url = "https://files.pythonhosted.org/packages/35/04/629ae603c1c17fb7adc9df2bc21aa5ac96afb84001700b13c1f038f3118c/lxml-6.0.2-cp39-cp39-win32.whl", hash = "sha256:bc532422ff26b304cfb62b328826bd995c96154ffd2bac4544f37dbb95ecaa8f", size = 3614032, upload-time = "2025-09-22T04:04:26.158Z" }, + { url = "https://files.pythonhosted.org/packages/71/de/07b7b1249acbecbf48f7e42c3ce87a657af6ff38e30f12a1ad81f16010f2/lxml-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:995e783eb0374c120f528f807443ad5a83a656a8624c467ea73781fc5f8a8304", size = 4035311, upload-time = "2025-09-22T04:04:28.413Z" }, + { url = "https://files.pythonhosted.org/packages/60/e3/02c4c55b281606f3c8e118300e16a9fcf5f3462cc46ce740ed0b82fc3f1b/lxml-6.0.2-cp39-cp39-win_arm64.whl", hash = "sha256:08b9d5e803c2e4725ae9e8559ee880e5328ed61aa0935244e0515d7d9dbec0aa", size = 3683462, upload-time = "2025-09-22T04:04:30.399Z" }, +] + +[[package]] +name = "macholib" +version = "1.16.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "altgraph" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/2f/97589876ea967487978071c9042518d28b958d87b17dceb7cdc1d881f963/macholib-1.16.4.tar.gz", hash = "sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362", size = 59427, upload-time = "2025-11-22T08:28:38.373Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/d1/a9f36f8ecdf0fb7c9b1e78c8d7af12b8c8754e74851ac7b94a8305540fc7/macholib-1.16.4-py2.py3-none-any.whl", hash = "sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea", size = 38117, upload-time = "2025-11-22T08:28:36.939Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/23/0d8c13a44bde9154821586520840643467aee574d8ce79a17da539ee7fed/markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26", size = 11623, upload-time = "2025-09-27T18:37:29.296Z" }, + { url = "https://files.pythonhosted.org/packages/fd/23/07a2cb9a8045d5f3f0890a8c3bc0859d7a47bfd9a560b563899bec7b72ed/markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc", size = 12049, upload-time = "2025-09-27T18:37:30.234Z" }, + { url = "https://files.pythonhosted.org/packages/bc/e4/6be85eb81503f8e11b61c0b6369b6e077dcf0a74adbd9ebf6b349937b4e9/markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c", size = 21923, upload-time = "2025-09-27T18:37:31.177Z" }, + { url = "https://files.pythonhosted.org/packages/6f/bc/4dc914ead3fe6ddaef035341fee0fc956949bbd27335b611829292b89ee2/markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42", size = 20543, upload-time = "2025-09-27T18:37:32.168Z" }, + { url = "https://files.pythonhosted.org/packages/89/6e/5fe81fbcfba4aef4093d5f856e5c774ec2057946052d18d168219b7bd9f9/markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b", size = 20585, upload-time = "2025-09-27T18:37:33.166Z" }, + { url = "https://files.pythonhosted.org/packages/f6/f6/e0e5a3d3ae9c4020f696cd055f940ef86b64fe88de26f3a0308b9d3d048c/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758", size = 21387, upload-time = "2025-09-27T18:37:34.185Z" }, + { url = "https://files.pythonhosted.org/packages/c8/25/651753ef4dea08ea790f4fbb65146a9a44a014986996ca40102e237aa49a/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2", size = 20133, upload-time = "2025-09-27T18:37:35.138Z" }, + { url = "https://files.pythonhosted.org/packages/dc/0a/c3cf2b4fef5f0426e8a6d7fce3cb966a17817c568ce59d76b92a233fdbec/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d", size = 20588, upload-time = "2025-09-27T18:37:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/cd/1b/a7782984844bd519ad4ffdbebbba2671ec5d0ebbeac34736c15fb86399e8/markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7", size = 14566, upload-time = "2025-09-27T18:37:37.09Z" }, + { url = "https://files.pythonhosted.org/packages/18/1f/8d9c20e1c9440e215a44be5ab64359e207fcb4f675543f1cf9a2a7f648d0/markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e", size = 15053, upload-time = "2025-09-27T18:37:38.054Z" }, + { url = "https://files.pythonhosted.org/packages/4e/d3/fe08482b5cd995033556d45041a4f4e76e7f0521112a9c9991d40d39825f/markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8", size = 13928, upload-time = "2025-09-27T18:37:39.037Z" }, +] + +[[package]] +name = "mouseinfo" +version = "0.1.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyperclip" }, + { name = "python3-xlib", marker = "sys_platform == 'linux'" }, + { name = "rubicon-objc", marker = "sys_platform == 'darwin'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/fa/b2ba8229b9381e8f6381c1dcae6f4159a7f72349e414ed19cfbbd1817173/MouseInfo-0.1.3.tar.gz", hash = "sha256:2c62fb8885062b8e520a3cce0a297c657adcc08c60952eb05bc8256ef6f7f6e7", size = 10850, upload-time = "2020-03-27T21:20:10.136Z" } + +[[package]] +name = "nuitka" +version = "2.8.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ordered-set" }, + { name = "zstandard" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/10/d9/c202b2e9d91f163417b4c5167df2a71707c57175d0540a4da8b1fc06d4f1/nuitka-2.8.6.tar.gz", hash = "sha256:a648c392d2a041f31c9582a68ef7c1a3a71166eaf2d344a0bb1d03f184ed3a2a", size = 3885843, upload-time = "2025-11-14T15:21:03.472Z" } + +[[package]] +name = "numpy" +version = "1.25.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a0/41/8f53eff8e969dd8576ddfb45e7ed315407d27c7518ae49418be8ed532b07/numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760", size = 10805282, upload-time = "2023-07-31T15:17:43.198Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8b/d9/22c304cd123e0a1b7d89213e50ed6ec4b22f07f1117d64d28f81c08be428/numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3", size = 20847260, upload-time = "2023-07-31T14:57:44.838Z" }, + { url = "https://files.pythonhosted.org/packages/0f/a8/5057b97c395a710999b5697ffedd648caee82c24a29595952d26bd750155/numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926", size = 14022126, upload-time = "2023-07-31T14:58:08.418Z" }, + { url = "https://files.pythonhosted.org/packages/6d/b6/94a587cd64ef090f844ab1d8c8f1af44d07be7387f5f1a40eb729a0ff9c9/numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca", size = 14206441, upload-time = "2023-07-31T14:58:31.007Z" }, + { url = "https://files.pythonhosted.org/packages/69/1f/c95b1108a9972a52d7b1b63ed8ca70466b59b8c1811bd121f1e667cc45d8/numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295", size = 18263142, upload-time = "2023-07-31T14:58:59.337Z" }, + { url = "https://files.pythonhosted.org/packages/d3/76/fe6b9e75883d1f2bd3cd27cbc7307ec99a0cc76fa941937c177f464fd60a/numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f", size = 18102143, upload-time = "2023-07-31T14:59:27.625Z" }, + { url = "https://files.pythonhosted.org/packages/81/e3/f562c2d76af16c1d79e73de04f9d08e5a7fd0e50ae12692acd4dbd2501f7/numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01", size = 12689997, upload-time = "2023-07-31T14:59:48.404Z" }, + { url = "https://files.pythonhosted.org/packages/df/18/181fb40f03090c6fbd061bb8b1f4c32453f7c602b0dc7c08b307baca7cd7/numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380", size = 15581137, upload-time = "2023-07-31T15:00:14.604Z" }, + { url = "https://files.pythonhosted.org/packages/11/58/e921b73d1a181d49fc5a797f5151b7be78cbc5b4483f8f6042e295b85c01/numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55", size = 20168999, upload-time = "2023-07-31T15:00:48.021Z" }, + { url = "https://files.pythonhosted.org/packages/2c/53/9a023f6960ea6c8f66eafae774ba7ab1700fd987158df5aa9dbb28f98f8b/numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901", size = 17618771, upload-time = "2023-07-31T15:01:15.808Z" }, + { url = "https://files.pythonhosted.org/packages/2d/2a/5d85ca5d889363ffdec3e3258c7bacdc655801787d004a55e04cf19eeb4a/numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf", size = 15442128, upload-time = "2023-07-31T15:01:40.62Z" }, +] + +[[package]] +name = "openpyxl" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "et-xmlfile" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload-time = "2024-06-28T14:03:41.161Z" }, +] + +[[package]] +name = "ordered-set" +version = "4.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/ca/bfac8bc689799bcca4157e0e0ced07e70ce125193fc2e166d2e685b7e2fe/ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8", size = 12826, upload-time = "2022-01-26T14:38:56.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/55/af02708f230eb77084a299d7b08175cff006dea4f2721074b92cdb0296c0/ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562", size = 7634, upload-time = "2022-01-26T14:38:48.677Z" }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, +] + +[[package]] +name = "pandas" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "pytz" }, + { name = "tzdata" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/56/b4/52eeb530a99e2a4c55ffcd352772b599ed4473a0f892d127f4147cf0f88e/pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2", size = 11567720, upload-time = "2025-09-29T23:33:06.209Z" }, + { url = "https://files.pythonhosted.org/packages/48/4a/2d8b67632a021bced649ba940455ed441ca854e57d6e7658a6024587b083/pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8", size = 10810302, upload-time = "2025-09-29T23:33:35.846Z" }, + { url = "https://files.pythonhosted.org/packages/13/e6/d2465010ee0569a245c975dc6967b801887068bc893e908239b1f4b6c1ac/pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff", size = 12154874, upload-time = "2025-09-29T23:33:49.939Z" }, + { url = "https://files.pythonhosted.org/packages/1f/18/aae8c0aa69a386a3255940e9317f793808ea79d0a525a97a903366bb2569/pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29", size = 12790141, upload-time = "2025-09-29T23:34:05.655Z" }, + { url = "https://files.pythonhosted.org/packages/f7/26/617f98de789de00c2a444fbe6301bb19e66556ac78cff933d2c98f62f2b4/pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73", size = 13208697, upload-time = "2025-09-29T23:34:21.835Z" }, + { url = "https://files.pythonhosted.org/packages/b9/fb/25709afa4552042bd0e15717c75e9b4a2294c3dc4f7e6ea50f03c5136600/pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9", size = 13879233, upload-time = "2025-09-29T23:34:35.079Z" }, + { url = "https://files.pythonhosted.org/packages/98/af/7be05277859a7bc399da8ba68b88c96b27b48740b6cf49688899c6eb4176/pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa", size = 11359119, upload-time = "2025-09-29T23:34:46.339Z" }, +] + +[[package]] +name = "pefile" +version = "2024.8.26" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/03/4f/2750f7f6f025a1507cd3b7218691671eecfd0bbebebe8b39aa0fe1d360b8/pefile-2024.8.26.tar.gz", hash = "sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632", size = 76008, upload-time = "2024-08-26T20:58:38.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/16/12b82f791c7f50ddec566873d5bdd245baa1491bac11d15ffb98aecc8f8b/pefile-2024.8.26-py3-none-any.whl", hash = "sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f", size = 74766, upload-time = "2024-08-26T21:01:02.632Z" }, +] + +[[package]] +name = "pillow" +version = "11.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/8e/9c089f01677d1264ab8648352dcb7773f37da6ad002542760c80107da816/pillow-11.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:48d254f8a4c776de343051023eb61ffe818299eeac478da55227d96e241de53f", size = 5316478, upload-time = "2025-07-01T09:15:52.209Z" }, + { url = "https://files.pythonhosted.org/packages/b5/a9/5749930caf674695867eb56a581e78eb5f524b7583ff10b01b6e5048acb3/pillow-11.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7aee118e30a4cf54fdd873bd3a29de51e29105ab11f9aad8c32123f58c8f8081", size = 4686522, upload-time = "2025-07-01T09:15:54.162Z" }, + { url = "https://files.pythonhosted.org/packages/43/46/0b85b763eb292b691030795f9f6bb6fcaf8948c39413c81696a01c3577f7/pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4", size = 5853376, upload-time = "2025-07-03T13:11:01.066Z" }, + { url = "https://files.pythonhosted.org/packages/5e/c6/1a230ec0067243cbd60bc2dad5dc3ab46a8a41e21c15f5c9b52b26873069/pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc", size = 7626020, upload-time = "2025-07-03T13:11:06.479Z" }, + { url = "https://files.pythonhosted.org/packages/63/dd/f296c27ffba447bfad76c6a0c44c1ea97a90cb9472b9304c94a732e8dbfb/pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06", size = 5956732, upload-time = "2025-07-01T09:15:56.111Z" }, + { url = "https://files.pythonhosted.org/packages/a5/a0/98a3630f0b57f77bae67716562513d3032ae70414fcaf02750279c389a9e/pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a", size = 6624404, upload-time = "2025-07-01T09:15:58.245Z" }, + { url = "https://files.pythonhosted.org/packages/de/e6/83dfba5646a290edd9a21964da07674409e410579c341fc5b8f7abd81620/pillow-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978", size = 6067760, upload-time = "2025-07-01T09:16:00.003Z" }, + { url = "https://files.pythonhosted.org/packages/bc/41/15ab268fe6ee9a2bc7391e2bbb20a98d3974304ab1a406a992dcb297a370/pillow-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d", size = 6700534, upload-time = "2025-07-01T09:16:02.29Z" }, + { url = "https://files.pythonhosted.org/packages/64/79/6d4f638b288300bed727ff29f2a3cb63db054b33518a95f27724915e3fbc/pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71", size = 6277091, upload-time = "2025-07-01T09:16:04.4Z" }, + { url = "https://files.pythonhosted.org/packages/46/05/4106422f45a05716fd34ed21763f8ec182e8ea00af6e9cb05b93a247361a/pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada", size = 6986091, upload-time = "2025-07-01T09:16:06.342Z" }, + { url = "https://files.pythonhosted.org/packages/63/c6/287fd55c2c12761d0591549d48885187579b7c257bef0c6660755b0b59ae/pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb", size = 2422632, upload-time = "2025-07-01T09:16:08.142Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "proxy-tools" +version = "0.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/cf/77d3e19b7fabd03895caca7857ef51e4c409e0ca6b37ee6e9f7daa50b642/proxy_tools-0.1.0.tar.gz", hash = "sha256:ccb3751f529c047e2d8a58440d86b205303cf0fe8146f784d1cbcd94f0a28010", size = 2978, upload-time = "2014-05-05T21:02:24.606Z" } + +[[package]] +name = "psutil" +version = "7.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, +] + +[[package]] +name = "pyautogui" +version = "0.9.54" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mouseinfo" }, + { name = "pygetwindow" }, + { name = "pymsgbox" }, + { name = "pyobjc-core", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-quartz", marker = "sys_platform == 'darwin'" }, + { name = "pyscreeze" }, + { name = "python3-xlib", marker = "sys_platform == 'linux'" }, + { name = "pytweening" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/65/ff/cdae0a8c2118a0de74b6cf4cbcdcaf8fd25857e6c3f205ce4b1794b27814/PyAutoGUI-0.9.54.tar.gz", hash = "sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2", size = 61236, upload-time = "2023-05-24T20:11:32.972Z" } + +[[package]] +name = "pycparser" +version = "2.23" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, +] + +[[package]] +name = "pycryptodome" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/a6/8452177684d5e906854776276ddd34eca30d1b1e15aa1ee9cefc289a33f5/pycryptodome-3.23.0.tar.gz", hash = "sha256:447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef", size = 4921276, upload-time = "2025-05-17T17:21:45.242Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/db/6c/a1f71542c969912bb0e106f64f60a56cc1f0fabecf9396f45accbe63fa68/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:187058ab80b3281b1de11c2e6842a357a1f71b42cb1e15bce373f3d238135c27", size = 2495627, upload-time = "2025-05-17T17:20:47.139Z" }, + { url = "https://files.pythonhosted.org/packages/6e/4e/a066527e079fc5002390c8acdd3aca431e6ea0a50ffd7201551175b47323/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cfb5cd445280c5b0a4e6187a7ce8de5a07b5f3f897f235caa11f1f435f182843", size = 1640362, upload-time = "2025-05-17T17:20:50.392Z" }, + { url = "https://files.pythonhosted.org/packages/50/52/adaf4c8c100a8c49d2bd058e5b551f73dfd8cb89eb4911e25a0c469b6b4e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67bd81fcbe34f43ad9422ee8fd4843c8e7198dd88dd3d40e6de42ee65fbe1490", size = 2182625, upload-time = "2025-05-17T17:20:52.866Z" }, + { url = "https://files.pythonhosted.org/packages/5f/e9/a09476d436d0ff1402ac3867d933c61805ec2326c6ea557aeeac3825604e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8987bd3307a39bc03df5c8e0e3d8be0c4c3518b7f044b0f4c15d1aa78f52575", size = 2268954, upload-time = "2025-05-17T17:20:55.027Z" }, + { url = "https://files.pythonhosted.org/packages/f9/c5/ffe6474e0c551d54cab931918127c46d70cab8f114e0c2b5a3c071c2f484/pycryptodome-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa0698f65e5b570426fc31b8162ed4603b0c2841cbb9088e2b01641e3065915b", size = 2308534, upload-time = "2025-05-17T17:20:57.279Z" }, + { url = "https://files.pythonhosted.org/packages/18/28/e199677fc15ecf43010f2463fde4c1a53015d1fe95fb03bca2890836603a/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:53ecbafc2b55353edcebd64bf5da94a2a2cdf5090a6915bcca6eca6cc452585a", size = 2181853, upload-time = "2025-05-17T17:20:59.322Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ea/4fdb09f2165ce1365c9eaefef36625583371ee514db58dc9b65d3a255c4c/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:156df9667ad9f2ad26255926524e1c136d6664b741547deb0a86a9acf5ea631f", size = 2342465, upload-time = "2025-05-17T17:21:03.83Z" }, + { url = "https://files.pythonhosted.org/packages/22/82/6edc3fc42fe9284aead511394bac167693fb2b0e0395b28b8bedaa07ef04/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:dea827b4d55ee390dc89b2afe5927d4308a8b538ae91d9c6f7a5090f397af1aa", size = 2267414, upload-time = "2025-05-17T17:21:06.72Z" }, + { url = "https://files.pythonhosted.org/packages/59/fe/aae679b64363eb78326c7fdc9d06ec3de18bac68be4b612fc1fe8902693c/pycryptodome-3.23.0-cp37-abi3-win32.whl", hash = "sha256:507dbead45474b62b2bbe318eb1c4c8ee641077532067fec9c1aa82c31f84886", size = 1768484, upload-time = "2025-05-17T17:21:08.535Z" }, + { url = "https://files.pythonhosted.org/packages/54/2f/e97a1b8294db0daaa87012c24a7bb714147c7ade7656973fd6c736b484ff/pycryptodome-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:c75b52aacc6c0c260f204cbdd834f76edc9fb0d8e0da9fbf8352ef58202564e2", size = 1799636, upload-time = "2025-05-17T17:21:10.393Z" }, + { url = "https://files.pythonhosted.org/packages/18/3d/f9441a0d798bf2b1e645adc3265e55706aead1255ccdad3856dbdcffec14/pycryptodome-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:11eeeb6917903876f134b56ba11abe95c0b0fd5e3330def218083c7d98bbcb3c", size = 1703675, upload-time = "2025-05-17T17:21:13.146Z" }, + { url = "https://files.pythonhosted.org/packages/dc/c4/6925ad41576d3e84f03aaf9a0411667af861f9fa2c87553c7dd5bde01518/pycryptodome-3.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:865d83c906b0fc6a59b510deceee656b6bc1c4fa0d82176e2b77e97a420a996a", size = 1623768, upload-time = "2025-05-17T17:21:33.418Z" }, + { url = "https://files.pythonhosted.org/packages/a8/14/d6c6a3098ddf2624068f041c5639be5092ad4ae1a411842369fd56765994/pycryptodome-3.23.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d4d56153efc4d81defe8b65fd0821ef8b2d5ddf8ed19df31ba2f00872b8002", size = 1672070, upload-time = "2025-05-17T17:21:35.565Z" }, + { url = "https://files.pythonhosted.org/packages/20/89/5d29c8f178fea7c92fd20d22f9ddd532a5e3ac71c574d555d2362aaa832a/pycryptodome-3.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3f2d0aaf8080bda0587d58fc9fe4766e012441e2eed4269a77de6aea981c8be", size = 1664359, upload-time = "2025-05-17T17:21:37.551Z" }, + { url = "https://files.pythonhosted.org/packages/38/bc/a287d41b4421ad50eafb02313137d0276d6aeffab90a91e2b08f64140852/pycryptodome-3.23.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64093fc334c1eccfd3933c134c4457c34eaca235eeae49d69449dc4728079339", size = 1702359, upload-time = "2025-05-17T17:21:39.827Z" }, + { url = "https://files.pythonhosted.org/packages/2b/62/2392b7879f4d2c1bfa20815720b89d464687877851716936b9609959c201/pycryptodome-3.23.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ce64e84a962b63a47a592690bdc16a7eaf709d2c2697ababf24a0def566899a6", size = 1802461, upload-time = "2025-05-17T17:21:41.722Z" }, +] + +[[package]] +name = "pydantic" +version = "2.12.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "annotated-types" }, + { name = "pydantic-core" }, + { name = "typing-extensions" }, + { name = "typing-inspection" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, +] + +[[package]] +name = "pydantic-core" +version = "2.41.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/db/160dffb57ed9a3705c4cbcbff0ac03bdae45f1ca7d58ab74645550df3fbd/pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf", size = 2107999, upload-time = "2025-11-04T13:42:03.885Z" }, + { url = "https://files.pythonhosted.org/packages/a3/7d/88e7de946f60d9263cc84819f32513520b85c0f8322f9b8f6e4afc938383/pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5", size = 1929745, upload-time = "2025-11-04T13:42:06.075Z" }, + { url = "https://files.pythonhosted.org/packages/d5/c2/aef51e5b283780e85e99ff19db0f05842d2d4a8a8cd15e63b0280029b08f/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d", size = 1920220, upload-time = "2025-11-04T13:42:08.457Z" }, + { url = "https://files.pythonhosted.org/packages/c7/97/492ab10f9ac8695cd76b2fdb24e9e61f394051df71594e9bcc891c9f586e/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60", size = 2067296, upload-time = "2025-11-04T13:42:10.817Z" }, + { url = "https://files.pythonhosted.org/packages/ec/23/984149650e5269c59a2a4c41d234a9570adc68ab29981825cfaf4cfad8f4/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82", size = 2231548, upload-time = "2025-11-04T13:42:13.843Z" }, + { url = "https://files.pythonhosted.org/packages/71/0c/85bcbb885b9732c28bec67a222dbed5ed2d77baee1f8bba2002e8cd00c5c/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5", size = 2362571, upload-time = "2025-11-04T13:42:16.208Z" }, + { url = "https://files.pythonhosted.org/packages/c0/4a/412d2048be12c334003e9b823a3fa3d038e46cc2d64dd8aab50b31b65499/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3", size = 2068175, upload-time = "2025-11-04T13:42:18.911Z" }, + { url = "https://files.pythonhosted.org/packages/73/f4/c58b6a776b502d0a5540ad02e232514285513572060f0d78f7832ca3c98b/pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425", size = 2177203, upload-time = "2025-11-04T13:42:22.578Z" }, + { url = "https://files.pythonhosted.org/packages/ed/ae/f06ea4c7e7a9eead3d165e7623cd2ea0cb788e277e4f935af63fc98fa4e6/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504", size = 2148191, upload-time = "2025-11-04T13:42:24.89Z" }, + { url = "https://files.pythonhosted.org/packages/c1/57/25a11dcdc656bf5f8b05902c3c2934ac3ea296257cc4a3f79a6319e61856/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5", size = 2343907, upload-time = "2025-11-04T13:42:27.683Z" }, + { url = "https://files.pythonhosted.org/packages/96/82/e33d5f4933d7a03327c0c43c65d575e5919d4974ffc026bc917a5f7b9f61/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3", size = 2322174, upload-time = "2025-11-04T13:42:30.776Z" }, + { url = "https://files.pythonhosted.org/packages/81/45/4091be67ce9f469e81656f880f3506f6a5624121ec5eb3eab37d7581897d/pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460", size = 1990353, upload-time = "2025-11-04T13:42:33.111Z" }, + { url = "https://files.pythonhosted.org/packages/44/8a/a98aede18db6e9cd5d66bcacd8a409fcf8134204cdede2e7de35c5a2c5ef/pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b", size = 2015698, upload-time = "2025-11-04T13:42:35.484Z" }, +] + +[[package]] +name = "pygetwindow" +version = "0.0.9" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyrect" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/70/c7a4f46dbf06048c6d57d9489b8e0f9c4c3d36b7479f03c5ca97eaa2541d/PyGetWindow-0.0.9.tar.gz", hash = "sha256:17894355e7d2b305cd832d717708384017c1698a90ce24f6f7fbf0242dd0a688", size = 9699, upload-time = "2020-10-04T02:12:50.806Z" } + +[[package]] +name = "pygments" +version = "2.20.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, +] + +[[package]] +name = "pyinstaller" +version = "6.19.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "altgraph" }, + { name = "importlib-metadata" }, + { name = "macholib", marker = "sys_platform == 'darwin'" }, + { name = "packaging" }, + { name = "pefile", marker = "sys_platform == 'win32'" }, + { name = "pyinstaller-hooks-contrib" }, + { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c8/63/fd62472b6371d89dc138d40c36d87a50dc2de18a035803bbdc376b4ffac4/pyinstaller-6.19.0.tar.gz", hash = "sha256:ec73aeb8bd9b7f2f1240d328a4542e90b3c6e6fbc106014778431c616592a865", size = 4036072, upload-time = "2026-02-14T18:06:28.718Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/eb/23374721fecfa72677e79800921cb6aceefa6ba48574dc404f3f6c6c3be7/pyinstaller-6.19.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:4190e76b74f0c4b5c5f11ac360928cd2e36ec8e3194d437bf6b8648c7bc0c134", size = 1040563, upload-time = "2026-02-14T18:05:22.436Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7e/dfd724b0b533f5aaec0ee5df406fe2319987ed6964480a706f85478b12ea/pyinstaller-6.19.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8bd68abd812d8a6ba33b9f1810e91fee0f325969733721b78151f0065319ca11", size = 735477, upload-time = "2026-02-14T18:05:27.143Z" }, + { url = "https://files.pythonhosted.org/packages/88/c9/ee3a4101c31f26344e66896c73c1fd6ed8282bf871473365b7f8674af406/pyinstaller-6.19.0-py3-none-manylinux2014_i686.whl", hash = "sha256:1ec54ef967996ca61dacba676227e2b23219878ccce5ee9d6f3aada7b8ed8abf", size = 747143, upload-time = "2026-02-14T18:05:31.488Z" }, + { url = "https://files.pythonhosted.org/packages/da/0a/fc77e9f861be8cf300ac37155f59cc92aff99b29f2ddd78546f563a5b5a6/pyinstaller-6.19.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:4ab2bb52e58448e14ddf9450601bdedd66800465043501c1d8f1cab87b60b122", size = 744849, upload-time = "2026-02-14T18:05:35.492Z" }, + { url = "https://files.pythonhosted.org/packages/6d/e3/6872e020ee758afe0b821663858492c10745608b07150e5e2c824a5b3e1c/pyinstaller-6.19.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:da6d5c6391ccefe73554b9fa29b86001c8e378e0f20c2a4004f836ba537eff63", size = 741590, upload-time = "2026-02-14T18:05:39.59Z" }, + { url = "https://files.pythonhosted.org/packages/53/60/b8db5f1a4b0fb228175f2ea0aa33f949adcc097fbe981cc524f9faf85777/pyinstaller-6.19.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a0fc5f6b3c55aa54353f0c74ffa59b1115433c1850c6f655d62b461a2ed6cbbe", size = 741448, upload-time = "2026-02-14T18:05:45.636Z" }, + { url = "https://files.pythonhosted.org/packages/6f/4d/63b0600f2694e9141b83129fbc1c488ec84d5a0770b1448ec154dcd0fee9/pyinstaller-6.19.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:e649ba6bd1b0b89b210ad92adb5fbdc8a42dd2c5ca4f72ef3a0bfec83a424b83", size = 740613, upload-time = "2026-02-14T18:05:49.726Z" }, + { url = "https://files.pythonhosted.org/packages/01/d4/e812ad36178093a0e9fd4b8127577748dd85b0cb71de912229dca21fd741/pyinstaller-6.19.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:481a909c8e60c8692fc60fcb1344d984b44b943f8bc9682f2fcdae305ad297e6", size = 740350, upload-time = "2026-02-14T18:05:54.093Z" }, + { url = "https://files.pythonhosted.org/packages/52/03/b2c2ee41fb8e10fd2a45d21f5ec2ef25852cfb978dbf762972eed59e3d63/pyinstaller-6.19.0-py3-none-win32.whl", hash = "sha256:3c5c251054fe4cfaa04c34a363dcfbf811545438cb7198304cd444756bc2edd2", size = 1324317, upload-time = "2026-02-14T18:06:00.085Z" }, + { url = "https://files.pythonhosted.org/packages/9c/d3/6d5e62b8270e2b53a6065e281b3a7785079b00e9019c8019952828dd1669/pyinstaller-6.19.0-py3-none-win_amd64.whl", hash = "sha256:b5bb6536c6560330d364d91522250f254b107cf69129d9cbcd0e6727c570be33", size = 1384894, upload-time = "2026-02-14T18:06:06.425Z" }, + { url = "https://files.pythonhosted.org/packages/81/65/458cd523308a101a22fd2742893405030cc24994cc74b1b767cecf137160/pyinstaller-6.19.0-py3-none-win_arm64.whl", hash = "sha256:c2d5a539b0bfe6159d5522c8c70e1c0e487f22c2badae0f97d45246223b798ea", size = 1325374, upload-time = "2026-02-14T18:06:12.804Z" }, +] + +[[package]] +name = "pyinstaller-hooks-contrib" +version = "2026.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "importlib-metadata" }, + { name = "packaging" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/17/716326f6ba18d0663f7995ae369c23e50efebc22fbb054e9710a45688f61/pyinstaller_hooks_contrib-2026.3.tar.gz", hash = "sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310", size = 172323, upload-time = "2026-03-09T22:44:06.345Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ed/19/781352446af28755f16ce52b2d97f7a6f2d7974ac34c00ca5cd8c40c9098/pyinstaller_hooks_contrib-2026.3-py3-none-any.whl", hash = "sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a", size = 454625, upload-time = "2026-03-09T22:44:04.717Z" }, +] + +[[package]] +name = "pymsgbox" +version = "2.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/6a/e80da7594ee598a776972d09e2813df2b06b3bc29218f440631dfa7c78a8/pymsgbox-2.0.1.tar.gz", hash = "sha256:98d055c49a511dcc10fa08c3043e7102d468f5e4b3a83c6d3c61df722c7d798d", size = 20768, upload-time = "2025-09-09T00:38:56.863Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/3e/08c8cac81b2b2f7502746e6b9c8e5b0ec6432cd882c605560fc409aaf087/pymsgbox-2.0.1-py3-none-any.whl", hash = "sha256:5de8ec19bca2ca7e6c09d39c817c83f17c75cee80275235f43a9931db699f73b", size = 9994, upload-time = "2025-09-09T00:38:55.672Z" }, +] + +[[package]] +name = "pymysql" +version = "1.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/ae/1fe3fcd9f959efa0ebe200b8de88b5a5ce3e767e38c7ac32fb179f16a388/pymysql-1.1.2.tar.gz", hash = "sha256:4961d3e165614ae65014e361811a724e2044ad3ea3739de9903ae7c21f539f03", size = 48258, upload-time = "2025-08-24T12:55:55.146Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/4c/ad33b92b9864cbde84f259d5df035a6447f91891f5be77788e2a3892bce3/pymysql-1.1.2-py3-none-any.whl", hash = "sha256:e6b1d89711dd51f8f74b1631fe08f039e7d76cf67a42a323d3178f0f25762ed9", size = 45300, upload-time = "2025-08-24T12:55:53.394Z" }, +] + +[[package]] +name = "pyobjc-core" +version = "11.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/e9/0b85c81e2b441267bca707b5d89f56c2f02578ef8f3eafddf0e0c0b8848c/pyobjc_core-11.1.tar.gz", hash = "sha256:b63d4d90c5df7e762f34739b39cc55bc63dbcf9fb2fb3f2671e528488c7a87fe", size = 974602, upload-time = "2025-06-14T20:56:34.189Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0b/3c/98f04333e4f958ee0c44ceccaf0342c2502d361608e00f29a5d50e16a569/pyobjc_core-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a99e6558b48b8e47c092051e7b3be05df1c8d0617b62f6fa6a316c01902d157", size = 677089, upload-time = "2025-06-14T20:44:56.15Z" }, +] + +[[package]] +name = "pyobjc-framework-cocoa" +version = "11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyobjc-core" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4b/c5/7a866d24bc026f79239b74d05e2cf3088b03263da66d53d1b4cf5207f5ae/pyobjc_framework_cocoa-11.1.tar.gz", hash = "sha256:87df76b9b73e7ca699a828ff112564b59251bb9bbe72e610e670a4dc9940d038", size = 5565335, upload-time = "2025-06-14T20:56:59.683Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b2/9b/5499d1ed6790b037b12831d7038eb21031ab90a033d4cfa43c9b51085925/pyobjc_framework_cocoa-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bbee71eeb93b1b31ffbac8560b59a0524a8a4b90846a260d2c4f2188f3d4c721", size = 388163, upload-time = "2025-06-14T20:46:58.72Z" }, +] + +[[package]] +name = "pyobjc-framework-quartz" +version = "11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyobjc-core" }, + { name = "pyobjc-framework-cocoa" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/ac/6308fec6c9ffeda9942fef72724f4094c6df4933560f512e63eac37ebd30/pyobjc_framework_quartz-11.1.tar.gz", hash = "sha256:a57f35ccfc22ad48c87c5932818e583777ff7276605fef6afad0ac0741169f75", size = 3953275, upload-time = "2025-06-14T20:58:17.924Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4a/ca/204d08ea73125402f408cf139946b90c0d0ccf19d6b5efac616548fbdbbd/pyobjc_framework_quartz-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b1f451ddb5243d8d6316af55f240a02b0fffbfe165bff325628bf73f3df7f44", size = 215537, upload-time = "2025-06-14T20:53:42.015Z" }, +] + +[[package]] +name = "pyobjc-framework-security" +version = "11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyobjc-core" }, + { name = "pyobjc-framework-cocoa" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/6f/ba50ed2d9c1192c67590a7cfefa44fc5f85c776d1e25beb224dec32081f6/pyobjc_framework_security-11.1.tar.gz", hash = "sha256:dabcee6987c6bae575e2d1ef0fcbe437678c4f49f1c25a4b131a5e960f31a2da", size = 302291, upload-time = "2025-06-14T20:58:28.506Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0d/19d340c7716d8902f6d1aa582b2eff80eca34fcf7d8c474d48e7921ef2ce/pyobjc_framework_security-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5dec8412602256e1d7039e670fb987bf1b233a55086e1204f1e32d7aab798f98", size = 41199, upload-time = "2025-06-14T20:54:40.987Z" }, +] + +[[package]] +name = "pyobjc-framework-uniformtypeidentifiers" +version = "11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyobjc-core" }, + { name = "pyobjc-framework-cocoa" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c5/4f/066ed1c69352ccc29165f45afb302f8c9c2b5c6f33ee3abfa41b873c07e5/pyobjc_framework_uniformtypeidentifiers-11.1.tar.gz", hash = "sha256:86c499bec8953aeb0c95af39b63f2592832384f09f12523405650b5d5f1ed5e9", size = 20599, upload-time = "2025-06-14T20:58:41.945Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3b/b63b8137dd9f455d5abece6702c06c6b613fac6fda1319aaa2f79d00c380/pyobjc_framework_uniformtypeidentifiers-11.1-py2.py3-none-any.whl", hash = "sha256:6e2e8ea89eb8ca03bc2bc8e506fff901e71d916276475c8d81fbf0280059cb4c", size = 4891, upload-time = "2025-06-14T20:55:56.432Z" }, +] + +[[package]] +name = "pyobjc-framework-webkit" +version = "11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyobjc-core" }, + { name = "pyobjc-framework-cocoa" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/92/04/fb3d0b68994f7e657ef00c1ac5fc1c04ae2fc7ea581d647f5ae1f6739b14/pyobjc_framework_webkit-11.1.tar.gz", hash = "sha256:27e701c7aaf4f24fc7e601a128e2ef14f2773f4ab071b9db7438dc5afb5053ae", size = 717102, upload-time = "2025-06-14T20:58:47.461Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/46/ad2016804819cfe89d39fa6756252181dc1b46bc478ef8f091248f3ed143/pyobjc_framework_webkit-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:94534450e4b3c0a4fe8ad4fa9258afc07ebfe36e1b3966f0fb5cd437c89ccfbf", size = 51390, upload-time = "2025-06-14T20:56:31.856Z" }, +] + +[[package]] +name = "pyperclip" +version = "1.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/52/d87eba7cb129b81563019d1679026e7a112ef76855d6159d24754dbd2a51/pyperclip-1.11.0.tar.gz", hash = "sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6", size = 12185, upload-time = "2025-09-26T14:40:37.245Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063, upload-time = "2025-09-26T14:40:36.069Z" }, +] + +[[package]] +name = "pyqt5" +version = "5.15.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyqt5-qt5" }, + { name = "pyqt5-sip" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/0e/07/c9ed0bd428df6f87183fca565a79fee19fa7c88c7f00a7f011ab4379e77a/PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52", size = 3216775, upload-time = "2024-07-19T08:39:57.756Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/11/64/42ec1b0bd72d87f87bde6ceb6869f444d91a2d601f2e67cd05febc0346a1/PyQt5-5.15.11-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c8b03dd9380bb13c804f0bdb0f4956067f281785b5e12303d529f0462f9afdc2", size = 6579776, upload-time = "2024-07-19T08:39:19.775Z" }, + { url = "https://files.pythonhosted.org/packages/49/f5/3fb696f4683ea45d68b7e77302eff173493ac81e43d63adb60fa760b9f91/PyQt5-5.15.11-cp38-abi3-macosx_11_0_x86_64.whl", hash = "sha256:6cd75628f6e732b1ffcfe709ab833a0716c0445d7aec8046a48d5843352becb6", size = 7016415, upload-time = "2024-07-19T08:39:32.977Z" }, + { url = "https://files.pythonhosted.org/packages/b4/8c/4065950f9d013c4b2e588fe33cf04e564c2322842d84dbcbce5ba1dc28b0/PyQt5-5.15.11-cp38-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:cd672a6738d1ae33ef7d9efa8e6cb0a1525ecf53ec86da80a9e1b6ec38c8d0f1", size = 8188103, upload-time = "2024-07-19T08:39:40.561Z" }, + { url = "https://files.pythonhosted.org/packages/f3/f0/ae5a5b4f9b826b29ea4be841b2f2d951bcf5ae1d802f3732b145b57c5355/PyQt5-5.15.11-cp38-abi3-win32.whl", hash = "sha256:76be0322ceda5deecd1708a8d628e698089a1cea80d1a49d242a6d579a40babd", size = 5433308, upload-time = "2024-07-19T08:39:46.932Z" }, + { url = "https://files.pythonhosted.org/packages/56/d5/68eb9f3d19ce65df01b6c7b7a577ad3bbc9ab3a5dd3491a4756e71838ec9/PyQt5-5.15.11-cp38-abi3-win_amd64.whl", hash = "sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517", size = 6865864, upload-time = "2024-07-19T08:39:53.572Z" }, +] + +[[package]] +name = "pyqt5-qt5" +version = "5.15.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/09/99a222b0360616250fb2e6003a54e43a2a06b0774f0f8d5daafb86a2c375/PyQt5_Qt5-5.15.2-py3-none-macosx_10_13_intel.whl", hash = "sha256:76980cd3d7ae87e3c7a33bfebfaee84448fd650bad6840471d6cae199b56e154", size = 40546019, upload-time = "2021-03-10T13:52:47.763Z" }, + { url = "https://files.pythonhosted.org/packages/83/d4/241a6a518d0bcf0a9fcdcbad5edfed18d43e884317eab8d5230a2b27e206/PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a", size = 59921716, upload-time = "2021-03-10T13:57:39.485Z" }, + { url = "https://files.pythonhosted.org/packages/1c/7e/ce7c66a541a105fa98b41d6405fe84940564695e29fc7dccf6d9e8c5f898/PyQt5_Qt5-5.15.2-py3-none-win32.whl", hash = "sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327", size = 43447358, upload-time = "2021-03-10T14:01:17.827Z" }, + { url = "https://files.pythonhosted.org/packages/37/97/5d3b222b924fa2ed4c2488925155cd0b03fd5d09ee1cfcf7c553c11c9f66/PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl", hash = "sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962", size = 50075158, upload-time = "2021-03-10T14:05:20.868Z" }, +] + +[[package]] +name = "pyqt5-sip" +version = "12.17.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/08/88a20c862f40b5c178c517cdc7e93767967dec5ac1b994e226d517991c9b/pyqt5_sip-12.17.1.tar.gz", hash = "sha256:0eab72bcb628f1926bf5b9ac51259d4fa18e8b2a81d199071135458f7d087ea8", size = 104136, upload-time = "2025-10-08T09:04:19.893Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/fd/097af91c0446c4877b2614f3e7e40729c7d0a276c401cef3ff95850cd236/pyqt5_sip-12.17.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6fdc457bd528e5909a5893db0a7dee0066d5f22e08234c9152db0ae6df9a367f", size = 122513, upload-time = "2025-10-08T09:04:18.867Z" }, + { url = "https://files.pythonhosted.org/packages/2c/cf/58143e15d0bfa1d1450071ad9a2d71adca82ebefbd7729d0c543463d4d31/pyqt5_sip-12.17.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:06ea59741c1bffb198d99b00d26594791f45fb11b10f774c8105aea5962e3835", size = 268959, upload-time = "2025-10-08T09:15:38.323Z" }, + { url = "https://files.pythonhosted.org/packages/e6/9b/8e8f1af1b500f0d4fcd48c9f7ee474731db8b046d3629151e382634eaf59/pyqt5_sip-12.17.1-cp39-cp39-win32.whl", hash = "sha256:b9ef23869d35c6740a95fcb1f387f4aea8d8fac80e19096fbaf1a64e18409c4b", size = 49030, upload-time = "2025-10-08T09:11:26.984Z" }, + { url = "https://files.pythonhosted.org/packages/64/1e/08bd86000c8294772c6c4aaaf53babd69b9b37e80d1c87583c1fe8eeab5b/pyqt5_sip-12.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:90eed15f19557dfab22e68c7763e3690053cc8dd30d93ade2523d1b5a04a87be", size = 59011, upload-time = "2025-10-08T09:08:37.924Z" }, +] + +[[package]] +name = "pyrect" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/04/2ba023d5f771b645f7be0c281cdacdcd939fe13d1deb331fc5ed1a6b3a98/PyRect-0.2.0.tar.gz", hash = "sha256:f65155f6df9b929b67caffbd57c0947c5ae5449d3b580d178074bffb47a09b78", size = 17219, upload-time = "2022-03-16T04:45:52.36Z" } + +[[package]] +name = "pyscreeze" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pillow" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ee/f0/cb456ac4f1a73723d5b866933b7986f02bacea27516629c00f8e7da94c2d/pyscreeze-1.0.1.tar.gz", hash = "sha256:cf1662710f1b46aa5ff229ee23f367da9e20af4a78e6e365bee973cad0ead4be", size = 27826, upload-time = "2024-08-20T23:03:07.291Z" } + +[[package]] +name = "pytest" +version = "8.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "pygments" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.9.0.post0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, +] + +[[package]] +name = "python-dotenv" +version = "1.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221, upload-time = "2025-10-26T15:12:10.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230, upload-time = "2025-10-26T15:12:09.109Z" }, +] + +[[package]] +name = "python3-xlib" +version = "0.15" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/c6/2c5999de3bb1533521f1101e8fe56fd9c266732f4d48011c7c69b29d12ae/python3-xlib-0.15.tar.gz", hash = "sha256:dc4245f3ae4aa5949c1d112ee4723901ade37a96721ba9645f2bfa56e5b383f8", size = 132828, upload-time = "2014-05-31T12:28:59.603Z" } + +[[package]] +name = "pythonnet" +version = "3.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "clr-loader" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/9a/d6/1afd75edd932306ae9bd2c2d961d603dc2b52fcec51b04afea464f1f6646/pythonnet-3.0.5.tar.gz", hash = "sha256:48e43ca463941b3608b32b4e236db92d8d40db4c58a75ace902985f76dac21cf", size = 239212, upload-time = "2024-12-13T08:30:44.393Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/f1/bfb6811df4745f92f14c47a29e50e89a36b1533130fcc56452d4660bd2d6/pythonnet-3.0.5-py3-none-any.whl", hash = "sha256:f6702d694d5d5b163c9f3f5cc34e0bed8d6857150237fae411fefb883a656d20", size = 297506, upload-time = "2024-12-13T08:30:40.661Z" }, +] + +[[package]] +name = "pytweening" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/79/0c/c16bc93ac2755bac0066a8ecbd2a2931a1735a6fffd99a2b9681c7e83e90/pytweening-1.2.0.tar.gz", hash = "sha256:243318b7736698066c5f362ec5c2b6434ecf4297c3c8e7caa8abfe6af4cac71b", size = 171241, upload-time = "2024-02-20T03:37:56.809Z" } + +[[package]] +name = "pytz" +version = "2026.1.post1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/db/b8721d71d945e6a8ac63c0fc900b2067181dbb50805958d4d4661cf7d277/pytz-2026.1.post1.tar.gz", hash = "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1", size = 321088, upload-time = "2026-03-03T07:47:50.683Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl", hash = "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a", size = 510489, upload-time = "2026-03-03T07:47:49.167Z" }, +] + +[[package]] +name = "pywebview" +version = "6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "bottle" }, + { name = "proxy-tools" }, + { name = "pyobjc-core", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-cocoa", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-quartz", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-security", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-uniformtypeidentifiers", marker = "sys_platform == 'darwin'" }, + { name = "pyobjc-framework-webkit", marker = "sys_platform == 'darwin'" }, + { name = "pythonnet", marker = "sys_platform == 'win32'" }, + { name = "qtpy", marker = "sys_platform == 'openbsd6'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/64/09/75cf92c4db19350ddb084d841e352ce30e89668815d0494d1dd595c85469/pywebview-6.1.tar.gz", hash = "sha256:f0b95047860caf3d921581f9e16b4edb1a125b23e2ce691c4da2968f8b160ff2", size = 496270, upload-time = "2025-10-21T18:02:44.323Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/74/12/ce9006cdcc1834378826b5c0d4b554d899cd25ac9c665569d060f220b0e1/pywebview-6.1-py3-none-any.whl", hash = "sha256:2b552a340557e76a740b045a25937f72dae751e0985d5f5d9556f697ba622ec5", size = 511255, upload-time = "2025-10-21T18:02:42.377Z" }, +] + +[[package]] +name = "pywin32-ctypes" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, +] + +[[package]] +name = "qtpy" +version = "2.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/70/01/392eba83c8e47b946b929d7c46e0f04b35e9671f8bb6fc36b6f7945b4de8/qtpy-2.4.3.tar.gz", hash = "sha256:db744f7832e6d3da90568ba6ccbca3ee2b3b4a890c3d6fbbc63142f6e4cdf5bb", size = 66982, upload-time = "2025-02-11T15:09:25.759Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/76/37c0ccd5ab968a6a438f9c623aeecc84c202ab2fabc6a8fd927580c15b5a/QtPy-2.4.3-py3-none-any.whl", hash = "sha256:72095afe13673e017946cc258b8d5da43314197b741ed2890e563cf384b51aa1", size = 95045, upload-time = "2025-02-11T15:09:24.162Z" }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "requests-file" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3c/f8/5dc70102e4d337063452c82e1f0d95e39abfe67aa222ed8a5ddeb9df8de8/requests_file-3.0.1.tar.gz", hash = "sha256:f14243d7796c588f3521bd423c5dea2ee4cc730e54a3cac9574d78aca1272576", size = 6967, upload-time = "2025-10-20T18:56:42.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/d5/de8f089119205a09da657ed4784c584ede8381a0ce6821212a6d4ca47054/requests_file-3.0.1-py2.py3-none-any.whl", hash = "sha256:d0f5eb94353986d998f80ac63c7f146a307728be051d4d1cd390dbdb59c10fa2", size = 4514, upload-time = "2025-10-20T18:56:41.184Z" }, +] + +[[package]] +name = "rubicon-objc" +version = "0.5.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/2f/612049b8601e810080f63f4b85acbf2ed0784349088d3c944eb288e1d487/rubicon_objc-0.5.2.tar.gz", hash = "sha256:1180593935f6a8a39c23b5f4b7baa24aedf9f7285e80804a1d9d6b50a50572f5", size = 175710, upload-time = "2025-08-07T06:12:25.194Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9f/a4/11ad29100060af56408ed084dca76a16d2ce8eb31b75081bfc0eec45d755/rubicon_objc-0.5.2-py3-none-any.whl", hash = "sha256:829b253c579e51fc34f4bb6587c34806e78960dcc1eb24e62b38141a1fe02b39", size = 63512, upload-time = "2025-08-07T06:12:23.766Z" }, +] + +[[package]] +name = "ruff" +version = "0.15.12" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/99/43/3291f1cc9106f4c63bdce7a8d0df5047fe8422a75b091c16b5e9355e0b11/ruff-0.15.12.tar.gz", hash = "sha256:ecea26adb26b4232c0c2ca19ccbc0083a68344180bba2a600605538ce51a40a6", size = 4643852, upload-time = "2026-04-24T18:17:14.305Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/6e/e78ffb61d4686f3d96ba3df2c801161843746dcbcbb17a1e927d4829312b/ruff-0.15.12-py3-none-linux_armv6l.whl", hash = "sha256:f86f176e188e94d6bdbc09f09bfd9dc729059ad93d0e7390b5a73efe19f8861c", size = 10640713, upload-time = "2026-04-24T18:17:22.841Z" }, + { url = "https://files.pythonhosted.org/packages/ae/08/a317bc231fb9e7b93e4ef3089501e51922ff88d6936ce5cf870c4fe55419/ruff-0.15.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e3bcd123364c3770b8e1b7baaf343cc99a35f197c5c6e8af79015c666c423a6c", size = 11069267, upload-time = "2026-04-24T18:17:30.105Z" }, + { url = "https://files.pythonhosted.org/packages/aa/a4/f828e9718d3dce1f5f11c39c4f65afd32783c8b2aebb2e3d259e492c47bd/ruff-0.15.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fe87510d000220aa1ed530d4448a7c696a0cae1213e5ec30e5874287b66557b5", size = 10397182, upload-time = "2026-04-24T18:17:07.177Z" }, + { url = "https://files.pythonhosted.org/packages/71/e0/3310fc6d1b5e1fdea22bf3b1b807c7e187b581021b0d7d4514cccdb5fb71/ruff-0.15.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84a1630093121375a3e2a95b4a6dc7b59e2b4ee76216e32d81aae550a832d002", size = 10758012, upload-time = "2026-04-24T18:16:55.759Z" }, + { url = "https://files.pythonhosted.org/packages/11/c1/a606911aee04c324ddaa883ae418f3569792fd3c4a10c50e0dd0a2311e1e/ruff-0.15.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb129f40f114f089ebe0ca56c0d251cf2061b17651d464bb6478dc01e69f11f5", size = 10447479, upload-time = "2026-04-24T18:16:51.677Z" }, + { url = "https://files.pythonhosted.org/packages/9d/68/4201e8444f0894f21ab4aeeaee68aa4f10b51613514a20d80bd628d57e88/ruff-0.15.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0c862b172d695db7598426b8af465e7e9ac00a3ea2a3630ee67eb82e366aaa6", size = 11234040, upload-time = "2026-04-24T18:17:16.529Z" }, + { url = "https://files.pythonhosted.org/packages/34/ff/8a6d6cf4ccc23fd67060874e832c18919d1557a0611ebef03fdb01fff11e/ruff-0.15.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2849ea9f3484c3aca43a82f484210370319e7170df4dfe4843395ddf6c57bc33", size = 12087377, upload-time = "2026-04-24T18:17:04.944Z" }, + { url = "https://files.pythonhosted.org/packages/85/f6/c669cf73f5152f623d34e69866a46d5e6185816b19fcd5b6dd8a2d299922/ruff-0.15.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e77c7e51c07fe396826d5969a5b846d9cd4c402535835fb6e21ce8b28fef847", size = 11367784, upload-time = "2026-04-24T18:17:25.409Z" }, + { url = "https://files.pythonhosted.org/packages/e8/39/c61d193b8a1daaa8977f7dea9e8d8ba866e02ea7b65d32f6861693aa4c12/ruff-0.15.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83b2f4f2f3b1026b5fb449b467d9264bf22067b600f7b6f41fc5958909f449d0", size = 11344088, upload-time = "2026-04-24T18:17:12.258Z" }, + { url = "https://files.pythonhosted.org/packages/c2/8d/49afab3645e31e12c590acb6d3b5b69d7aab5b81926dbaf7461f9441f37a/ruff-0.15.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9ba3b8f1afd7e2e43d8943e55f249e13f9682fde09711644a6e7290eb4f3e339", size = 11271770, upload-time = "2026-04-24T18:17:02.457Z" }, + { url = "https://files.pythonhosted.org/packages/46/06/33f41fe94403e2b755481cdfb9b7ef3e4e0ed031c4581124658d935d52b4/ruff-0.15.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e852ba9fdc890655e1d78f2df1499efbe0e54126bd405362154a75e2bde159c5", size = 10719355, upload-time = "2026-04-24T18:17:27.648Z" }, + { url = "https://files.pythonhosted.org/packages/0d/59/18aa4e014debbf559670e4048e39260a85c7fcee84acfd761ac01e7b8d35/ruff-0.15.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dd8aed930da53780d22fc70bdf84452c843cf64f8cb4eb38984319c24c5cd5fd", size = 10462758, upload-time = "2026-04-24T18:17:32.347Z" }, + { url = "https://files.pythonhosted.org/packages/25/e7/cc9f16fd0f3b5fddcbd7ec3d6ae30c8f3fde1047f32a4093a98d633c6570/ruff-0.15.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:01da3988d225628b709493d7dc67c3b9b12c0210016b08690ef9bd27970b262b", size = 10953498, upload-time = "2026-04-24T18:17:20.674Z" }, + { url = "https://files.pythonhosted.org/packages/72/7a/a9ba7f98c7a575978698f4230c5e8cc54bbc761af34f560818f933dafa0c/ruff-0.15.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:9cae0f92bd5700d1213188b31cd3bdd2b315361296d10b96b8e2337d3d11f53e", size = 11447765, upload-time = "2026-04-24T18:17:09.755Z" }, + { url = "https://files.pythonhosted.org/packages/ea/f9/0ae446942c846b8266059ad8a30702a35afae55f5cdc54c5adf8d7afdc27/ruff-0.15.12-py3-none-win32.whl", hash = "sha256:d0185894e038d7043ba8fd6aee7499ece6462dc0ea9f1e260c7451807c714c20", size = 10657277, upload-time = "2026-04-24T18:17:18.591Z" }, + { url = "https://files.pythonhosted.org/packages/33/f1/9614e03e1cdcbf9437570b5400ced8a720b5db22b28d8e0f1bda429f660d/ruff-0.15.12-py3-none-win_amd64.whl", hash = "sha256:c87a162d61ab3adca47c03f7f717c68672edec7d1b5499e652331780fe74950d", size = 11837758, upload-time = "2026-04-24T18:17:00.113Z" }, + { url = "https://files.pythonhosted.org/packages/c0/98/6beb4b351e472e5f4c4613f7c35a5290b8be2497e183825310c4c3a3984b/ruff-0.15.12-py3-none-win_arm64.whl", hash = "sha256:a538f7a82d061cee7be55542aca1d86d1393d55d81d4fcc314370f4340930d4f", size = 11120821, upload-time = "2026-04-24T18:16:57.979Z" }, +] + +[[package]] +name = "setuptools" +version = "82.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316, upload-time = "2026-03-09T12:47:17.221Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" }, +] + +[[package]] +name = "six" +version = "1.17.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, +] + +[[package]] +name = "tldextract" +version = "5.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "filelock" }, + { name = "idna" }, + { name = "requests" }, + { name = "requests-file" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/97/78/182641ea38e3cfd56e9c7b3c0d48a53d432eea755003aa544af96403d4ac/tldextract-5.3.0.tar.gz", hash = "sha256:b3d2b70a1594a0ecfa6967d57251527d58e00bb5a91a74387baa0d87a0678609", size = 128502, upload-time = "2025-04-22T06:19:37.491Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/67/7c/ea488ef48f2f544566947ced88541bc45fae9e0e422b2edbf165ee07da99/tldextract-5.3.0-py3-none-any.whl", hash = "sha256:f70f31d10b55c83993f55e91ecb7c5d84532a8972f22ec578ecfbe5ea2292db2", size = 107384, upload-time = "2025-04-22T06:19:36.304Z" }, +] + +[[package]] +name = "tomli" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "typing-inspection" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +] + +[[package]] +name = "websocket-client" +version = "1.9.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576, upload-time = "2025-10-07T21:16:36.495Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" }, +] + +[[package]] +name = "websockets" +version = "14.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/54/8359678c726243d19fae38ca14a334e740782336c9f19700858c4eb64a1e/websockets-14.2.tar.gz", hash = "sha256:5059ed9c54945efb321f097084b4c7e52c246f2c869815876a69d1efc4ad6eb5", size = 164394, upload-time = "2025-01-19T21:00:56.431Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/eb/367e0ed7b8a960b4fc12c7c6bf3ebddf06875037de641637994849560d47/websockets-14.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7cd5706caec1686c5d233bc76243ff64b1c0dc445339bd538f30547e787c11fe", size = 163087, upload-time = "2025-01-19T21:00:11.717Z" }, + { url = "https://files.pythonhosted.org/packages/96/f7/1f18d028ec4a2c14598dfec6a73381a915c27464b693873198c1de872095/websockets-14.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec607328ce95a2f12b595f7ae4c5d71bf502212bddcea528290b35c286932b12", size = 160740, upload-time = "2025-01-19T21:00:13.219Z" }, + { url = "https://files.pythonhosted.org/packages/5c/db/b4b353fb9c3f0eaa8138ea4c76e6fa555b6d2821ed2d51d0ac3c320bc57e/websockets-14.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da85651270c6bfb630136423037dd4975199e5d4114cae6d3066641adcc9d1c7", size = 160992, upload-time = "2025-01-19T21:00:15.54Z" }, + { url = "https://files.pythonhosted.org/packages/b9/b1/9149e420c61f375e432654d5c1545e563b90ac1f829ee1a8d1dccaf0869d/websockets-14.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ecadc7ce90accf39903815697917643f5b7cfb73c96702318a096c00aa71f5", size = 169757, upload-time = "2025-01-19T21:00:17.589Z" }, + { url = "https://files.pythonhosted.org/packages/2b/33/0bb58204191e113212360f1392b6b1e9f85f62c7ca5b3b15f52f2f835516/websockets-14.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1979bee04af6a78608024bad6dfcc0cc930ce819f9e10342a29a05b5320355d0", size = 168762, upload-time = "2025-01-19T21:00:19.987Z" }, + { url = "https://files.pythonhosted.org/packages/be/3d/c3c192f16210d7b7535fbf4ee9a299612f4dccff665587617b13fa0a6aa3/websockets-14.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dddacad58e2614a24938a50b85969d56f88e620e3f897b7d80ac0d8a5800258", size = 169060, upload-time = "2025-01-19T21:00:21.414Z" }, + { url = "https://files.pythonhosted.org/packages/a6/73/75efa8d9e4b1b257818a7b7a0b9ac84a07c91120b52148941370ef2c8f16/websockets-14.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:89a71173caaf75fa71a09a5f614f450ba3ec84ad9fca47cb2422a860676716f0", size = 169457, upload-time = "2025-01-19T21:00:22.996Z" }, + { url = "https://files.pythonhosted.org/packages/a4/11/300cf36cfd6990ffb218394862f0513be8c21917c9ff5e362f94599caedd/websockets-14.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6af6a4b26eea4fc06c6818a6b962a952441e0e39548b44773502761ded8cc1d4", size = 168860, upload-time = "2025-01-19T21:00:25.24Z" }, + { url = "https://files.pythonhosted.org/packages/c0/3d/5fd82500714ab7c09f003bde671dad1a3a131ac77b6b11ada72e466de4f6/websockets-14.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:80c8efa38957f20bba0117b48737993643204645e9ec45512579132508477cfc", size = 168825, upload-time = "2025-01-19T21:00:26.799Z" }, + { url = "https://files.pythonhosted.org/packages/88/16/715580eb6caaacc232f303e9619103a42dcd354b0854baa5ed26aacaf828/websockets-14.2-cp39-cp39-win32.whl", hash = "sha256:2e20c5f517e2163d76e2729104abc42639c41cf91f7b1839295be43302713661", size = 163960, upload-time = "2025-01-19T21:00:29.166Z" }, + { url = "https://files.pythonhosted.org/packages/63/a7/a1035cb198eaa12eaa9621aaaa3ec021b0e3bac96e1df9ceb6bfe5e53e5f/websockets-14.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4c8cef610e8d7c70dea92e62b6814a8cd24fbd01d7103cc89308d2bfe1659ef", size = 164424, upload-time = "2025-01-19T21:00:30.614Z" }, + { url = "https://files.pythonhosted.org/packages/f7/c0/8e9325c4987dcf66d4a0d63ec380d4aefe8dcc1e521af71ad17adf2c1ae2/websockets-14.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bbe03eb853e17fd5b15448328b4ec7fb2407d45fb0245036d06a3af251f8e48f", size = 160773, upload-time = "2025-01-19T21:00:42.145Z" }, + { url = "https://files.pythonhosted.org/packages/5a/6e/c9a7f2edd4afddc4f8cccfc4e12468b7f6ec40f28d1b1e966a8d0298b875/websockets-14.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3c4aa3428b904d5404a0ed85f3644d37e2cb25996b7f096d77caeb0e96a3b42", size = 161006, upload-time = "2025-01-19T21:00:43.72Z" }, + { url = "https://files.pythonhosted.org/packages/f3/10/b90ece894828c954e674a81cb0db250e6c324c54db30a8b19e96431f928f/websockets-14.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577a4cebf1ceaf0b65ffc42c54856214165fb8ceeba3935852fc33f6b0c55e7f", size = 162260, upload-time = "2025-01-19T21:00:46.33Z" }, + { url = "https://files.pythonhosted.org/packages/52/93/1147b6b5464a5fb6e8987da3ec7991dcc44f9090f67d9c841d7382fed429/websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad1c1d02357b7665e700eca43a31d52814ad9ad9b89b58118bdabc365454b574", size = 161868, upload-time = "2025-01-19T21:00:48.683Z" }, + { url = "https://files.pythonhosted.org/packages/32/ab/f7d80b4049bff0aa617507330db3a27389d0e70df54e29f7a3d76bbd2086/websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f390024a47d904613577df83ba700bd189eedc09c57af0a904e5c39624621270", size = 161813, upload-time = "2025-01-19T21:00:51.019Z" }, + { url = "https://files.pythonhosted.org/packages/cd/cc/adc9fb85f031b8df8e9f3d96cc004df25d2643e503953af5223c5b6825b7/websockets-14.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3c1426c021c38cf92b453cdf371228d3430acd775edee6bac5a4d577efc72365", size = 164457, upload-time = "2025-01-19T21:00:52.621Z" }, + { url = "https://files.pythonhosted.org/packages/7b/c8/d529f8a32ce40d98309f4470780631e971a5a842b60aec864833b3615786/websockets-14.2-py3-none-any.whl", hash = "sha256:7a6ceec4ea84469f15cf15807a747e9efe57e369c384fa86e022b3bea679b79b", size = 157416, upload-time = "2025-01-19T21:00:54.843Z" }, +] + +[[package]] +name = "werkzeug" +version = "3.1.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/61/f1/ee81806690a87dab5f5653c1f146c92bc066d7f4cebc603ef88eb9e13957/werkzeug-3.1.6.tar.gz", hash = "sha256:210c6bede5a420a913956b4791a7f4d6843a43b6fcee4dfa08a65e93007d0d25", size = 864736, upload-time = "2026-02-19T15:17:18.884Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4d/ec/d58832f89ede95652fd01f4f24236af7d32b70cab2196dfcc2d2fd13c5c2/werkzeug-3.1.6-py3-none-any.whl", hash = "sha256:7ddf3357bb9564e407607f988f683d72038551200c704012bb9a4c523d42f131", size = 225166, upload-time = "2026-02-19T15:17:17.475Z" }, +] + +[[package]] +name = "zipp" +version = "3.23.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, +] + +[[package]] +name = "zstandard" +version = "0.25.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/0d/d0a405dad6ab6f9f759c26d866cca66cb209bff6f8db656074d662a953dd/zstandard-0.25.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b9af1fe743828123e12b41dd8091eca1074d0c1569cc42e6e1eee98027f2bbd0", size = 795263, upload-time = "2025-09-14T22:18:21.683Z" }, + { url = "https://files.pythonhosted.org/packages/ca/aa/ceb8d79cbad6dabd4cb1178ca853f6a4374d791c5e0241a0988173e2a341/zstandard-0.25.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b14abacf83dfb5c25eb4e4a79520de9e7e205f72c9ee7702f91233ae57d33a2", size = 640560, upload-time = "2025-09-14T22:18:22.867Z" }, + { url = "https://files.pythonhosted.org/packages/88/cd/2cf6d476131b509cc122d25d3416a2d0aa17687ddbada7599149f9da620e/zstandard-0.25.0-cp39-cp39-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:a51ff14f8017338e2f2e5dab738ce1ec3b5a851f23b18c1ae1359b1eecbee6df", size = 5344244, upload-time = "2025-09-14T22:18:24.724Z" }, + { url = "https://files.pythonhosted.org/packages/5c/71/e14820b61a1c137966b7667b400b72fa4a45c836257e443f3d77607db268/zstandard-0.25.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3b870ce5a02d4b22286cf4944c628e0f0881b11b3f14667c1d62185a99e04f53", size = 5054550, upload-time = "2025-09-14T22:18:26.445Z" }, + { url = "https://files.pythonhosted.org/packages/f9/ce/26dc5a6fa956be41d0e984909224ed196ee6f91d607f0b3fd84577741a77/zstandard-0.25.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:05353cef599a7b0b98baca9b068dd36810c3ef0f42bf282583f438caf6ddcee3", size = 5401150, upload-time = "2025-09-14T22:18:28.745Z" }, + { url = "https://files.pythonhosted.org/packages/f2/1b/402cab5edcfe867465daf869d5ac2a94930931c0989633bc01d6a7d8bd68/zstandard-0.25.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:19796b39075201d51d5f5f790bf849221e58b48a39a5fc74837675d8bafc7362", size = 5448595, upload-time = "2025-09-14T22:18:30.475Z" }, + { url = "https://files.pythonhosted.org/packages/86/b2/fc50c58271a1ead0e5a0a0e6311f4b221f35954dce438ce62751b3af9b68/zstandard-0.25.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:53e08b2445a6bc241261fea89d065536f00a581f02535f8122eba42db9375530", size = 5555290, upload-time = "2025-09-14T22:18:32.336Z" }, + { url = "https://files.pythonhosted.org/packages/d2/20/5f72d6ba970690df90fdd37195c5caa992e70cb6f203f74cc2bcc0b8cf30/zstandard-0.25.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1f3689581a72eaba9131b1d9bdbfe520ccd169999219b41000ede2fca5c1bfdb", size = 5043898, upload-time = "2025-09-14T22:18:34.215Z" }, + { url = "https://files.pythonhosted.org/packages/e4/f1/131a0382b8b8d11e84690574645f528f5c5b9343e06cefd77f5fd730cd2b/zstandard-0.25.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d8c56bb4e6c795fc77d74d8e8b80846e1fb8292fc0b5060cd8131d522974b751", size = 5571173, upload-time = "2025-09-14T22:18:36.117Z" }, + { url = "https://files.pythonhosted.org/packages/53/f6/2a37931023f737fd849c5c28def57442bbafadb626da60cf9ed58461fe24/zstandard-0.25.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:53f94448fe5b10ee75d246497168e5825135d54325458c4bfffbaafabcc0a577", size = 4958261, upload-time = "2025-09-14T22:18:38.098Z" }, + { url = "https://files.pythonhosted.org/packages/b5/52/ca76ed6dbfd8845a5563d3af4e972da3b9da8a9308ca6b56b0b929d93e23/zstandard-0.25.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c2ba942c94e0691467ab901fc51b6f2085ff48f2eea77b1a48240f011e8247c7", size = 5265680, upload-time = "2025-09-14T22:18:39.834Z" }, + { url = "https://files.pythonhosted.org/packages/7a/59/edd117dedb97a768578b49fb2f1156defb839d1aa5b06200a62be943667f/zstandard-0.25.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:07b527a69c1e1c8b5ab1ab14e2afe0675614a09182213f21a0717b62027b5936", size = 5439747, upload-time = "2025-09-14T22:18:41.647Z" }, + { url = "https://files.pythonhosted.org/packages/75/71/c2e9234643dcfbd6c5e975e9a2b0050e1b2afffda6c3a959e1b87997bc80/zstandard-0.25.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:51526324f1b23229001eb3735bc8c94f9c578b1bd9e867a0a646a3b17109f388", size = 5818805, upload-time = "2025-09-14T22:18:43.602Z" }, + { url = "https://files.pythonhosted.org/packages/f5/93/8ebc19f0a31c44ea0e7348f9b0d4b326ed413b6575a3c6ff4ed50222abb6/zstandard-0.25.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89c4b48479a43f820b749df49cd7ba2dbc2b1b78560ecb5ab52985574fd40b27", size = 5362280, upload-time = "2025-09-14T22:18:45.625Z" }, + { url = "https://files.pythonhosted.org/packages/b8/e9/29cc59d4a9d51b3fd8b477d858d0bd7ab627f700908bf1517f46ddd470ae/zstandard-0.25.0-cp39-cp39-win32.whl", hash = "sha256:1cd5da4d8e8ee0e88be976c294db744773459d51bb32f707a0f166e5ad5c8649", size = 436460, upload-time = "2025-09-14T22:18:49.077Z" }, + { url = "https://files.pythonhosted.org/packages/41/b5/bc7a92c116e2ef32dc8061c209d71e97ff6df37487d7d39adb51a343ee89/zstandard-0.25.0-cp39-cp39-win_amd64.whl", hash = "sha256:37daddd452c0ffb65da00620afb8e17abd4adaae6ce6310702841760c2c26860", size = 506097, upload-time = "2025-09-14T22:18:47.342Z" }, +] From 6f1b8e46f5eb1aac1351b3558a71875f4e9cc61e Mon Sep 17 00:00:00 2001 From: koko Date: Sat, 25 Apr 2026 17:58:28 +0800 Subject: [PATCH 04/18] feat: update amazon driver --- app/.rtk/filters.toml | 13 + app/amazon/base.py | 798 ++++++++++++++++++++-------------- app/amazon/product.py | 11 + app/pyproject.toml | 3 + app/tests/test_amazon_base.py | 27 ++ 5 files changed, 523 insertions(+), 329 deletions(-) create mode 100644 app/.rtk/filters.toml create mode 100644 app/amazon/product.py diff --git a/app/.rtk/filters.toml b/app/.rtk/filters.toml new file mode 100644 index 0000000..d9bd43f --- /dev/null +++ b/app/.rtk/filters.toml @@ -0,0 +1,13 @@ +# Project-local RTK filters — commit this file with your repo. +# Filters here override user-global and built-in filters. +# Docs: https://github.com/rtk-ai/rtk#custom-filters +schema_version = 1 + +# Example: suppress build noise from a custom tool +# [filters.my-tool] +# description = "Compact my-tool output" +# match_command = "^my-tool\\s+build" +# strip_ansi = true +# strip_lines_matching = ["^\\s*$", "^Downloading", "^Installing"] +# max_lines = 30 +# on_empty = "my-tool: ok" diff --git a/app/amazon/base.py b/app/amazon/base.py index 6dddbe2..60327db 100644 --- a/app/amazon/base.py +++ b/app/amazon/base.py @@ -3,9 +3,8 @@ import logging import os import subprocess import time -import traceback import uuid -from typing import Literal +from typing import Any, Dict, List, Literal, Optional, TypedDict import requests from DrissionPage import Chromium @@ -20,44 +19,150 @@ except ImportError: logger = logging.getLogger(__name__) +STATUS_OK = "0" +STATUS_LOGIN_FAILED = "-10003" + +DEFAULT_SOCKET_PORT = 19890 +CLIENT_API_TIMEOUT = 120 +PORT_CHECK_TIMEOUT = 2 +UPDATE_CORE_RETRY_DELAY = 2 +CLIENT_RESTART_DELAY = 5 +CLIENT_START_RETRIES = 3 +CLIENT_READY_TIMEOUT = 10 +CLIENT_READY_INTERVAL = 0.5 +CLIENT_POST_START_DELAY = 5 +PROCESS_KILL_DELAY = 3 + +DOC_LOAD_TIMEOUT = 30 +COUNTRY_INITIAL_LOAD_TIMEOUT = 120 +COUNTRY_LOOKUP_TIMEOUT = 20 +COUNTRY_CLICK_TIMEOUT = 10 +COUNTRY_DROPDOWN_DELAY = 1 +IP_CHECK_TIMEOUT = 60 + +LOGIN_ATTEMPTS = 4 +PASSWORD_INPUT_TIMEOUT = 5 +PASSWORD_SUBMIT_TIMEOUT = 5 +OTP_SEND_TIMEOUT = 5 +OTP_INPUT_LOOKUP_ATTEMPTS = 5 +OTP_INPUT_TIMEOUT = 30 +OTP_INPUT_DISPLAY_TIMEOUT = 10 +OTP_CODE_WAIT_SECONDS = 30 +OTP_SUBMIT_TIMEOUT = 10 +OTP_RESULT_LOAD_TIMEOUT = 20 +OTP_ERROR_TIMEOUT = 10 +OTP_SEND_DELAY = 1 +LOGIN_FINAL_SUBMIT_TIMEOUT = 10 +NEED_LOGIN_DELAY = 3 +NEED_LOGIN_TIMEOUT = 5 + +COUNTRY_LABEL_XPATH = 'xpath://div[@class="dropdown-account-switcher-header-label"]/span[last()]' +COUNTRY_DROPDOWN_XPATH = 'xpath://div[@class="dropdown-account-switcher-header-label"]' +COUNTRY_LIST_ITEM_XPATH = 'xpath://div[@class="dropdown-account-switcher-list-item"]' +NEED_LOGIN_XPATH = 'xpath://h1[@class="a-spacing-small"]|//span[contains(text(),"登录")]' +PASSWORD_INPUT_XPATH = 'xpath://input[@type="password"]' +PASSWORD_SUBMIT_XPATH = 'xpath://input[@id="signInSubmit"]' +OTP_SEND_XPATH = 'xpath://span[@id="auth-send-code" and contains(string(.),"发送一次性密码")]' +OTP_INPUT_XPATH = 'xpath://input[@name="otpCode"]' +OTP_SUBMIT_XPATH = 'xpath://input[@id="auth-signin-button"]' +OTP_ERROR_XPATH = 'xpath://div[@id="auth-error-message-box"]' + + +class UserInfo(TypedDict): + username: str + password: str + company: str + def kill_process(version: Literal["v5", "v6"]): - """杀紫鸟客户端进程(独立函数版本)""" - logger.info("准备杀紫鸟客户端进程,version=%s", version) + """结束指定版本的紫鸟客户端进程.""" + logger.info("准备杀紫鸟客户端进程,version=%s", version) driver = ZiniaoDriver({}) driver.kill_process(version) class ZiniaoDriver: - """紫鸟浏览器自动化驱动类""" + """封装紫鸟客户端启动,店铺浏览器生命周期和客户端 API 调用.""" - def __init__(self, user_info: dict, socket_port: int = 19890): - """ - 初始化紫鸟浏览器驱动 + def __init__(self, user_info: UserInfo, socket_port: int = DEFAULT_SOCKET_PORT): + """初始化紫鸟浏览器驱动. Args: - user_info: 用户信息字典,包含 company, username, password - socket_port: 客户端通信端口,默认 19890 + user_info: 紫鸟账号信息,包含 company, username, password. + socket_port: 客户端 HTTP 通信端口. """ self.user_info = user_info self.socket_port = socket_port self.client_path = None self.browser = None - self.tab: ChromiumTab = None + self.tab: Optional[ChromiumTab] = None self.store_id = None + @property + def client_url(self) -> str: + return f"http://127.0.0.1:{self.socket_port}" + + def _build_payload(self, action: str, extra: Optional[Dict[str, Any]] = None) -> Dict[str, Any]: + payload = { + "action": action, + "requestId": str(uuid.uuid4()), + } + if extra: + payload.update(extra) + payload.update(self.user_info) + return payload + + def _post_client(self, payload: Dict[str, Any]) -> Dict[str, Any]: + response = requests.post( + self.client_url, + json.dumps(payload).encode("utf-8"), + timeout=CLIENT_API_TIMEOUT, + ) + return response.json() + + @staticmethod + def _status_code(result: Optional[Dict[str, Any]]) -> Optional[str]: + if result is None: + return None + return str(result.get("statusCode")) + + @staticmethod + def _result_text(result: Dict[str, Any]) -> str: + return json.dumps(result, ensure_ascii=False) + + @staticmethod + def _find_store_oauth(shop_list: Optional[List[Dict[str, Any]]], shop_name: str): + for shop in shop_list or []: + if shop.get("browserName") == shop_name: + return shop.get("browserOauth") + return None + + def _is_client_ready(self) -> bool: + try: + requests.get(self.client_url, timeout=PORT_CHECK_TIMEOUT) + return True + except (requests.exceptions.ConnectionError, requests.exceptions.Timeout): + return False + + def _wait_until_client_ready(self, timeout: float) -> bool: + start_check_time = time.time() + while time.time() - start_check_time < timeout: + if self._is_client_ready(): + return True + time.sleep(CLIENT_READY_INTERVAL) + return False + def get_zinaio_exe(self, protocol_name: str = "superbrowser"): - """ - 获取紫鸟安装目录 + """从 Windows 注册表读取紫鸟客户端可执行文件路径. Args: - protocol_name: 协议名称,默认 "superbrowser" + protocol_name: 注册表协议名称. Returns: - exe_path: 紫鸟浏览器可执行文件路径 + 紫鸟浏览器可执行文件路径. 未找到时返回 None. """ if winreg is None: - logger.error("当前系统不支持 winreg,无法从注册表获取紫鸟客户端路径") + logger.error("当前系统不支持 winreg,无法从注册表获取紫鸟客户端路径") return None key_path = rf"SOFTWARE\Classes\{protocol_name}\shell\open\command" @@ -66,60 +171,63 @@ class ZiniaoDriver: (winreg.HKEY_LOCAL_MACHINE, "HKEY_LOCAL_MACHINE"), ): try: - logger.info("正在从注册表读取紫鸟客户端路径:%s\\%s", root_name, key_path) + logger.info("正在从注册表读取紫鸟客户端路径:%s\\%s", root_name, key_path) key = winreg.OpenKey(root_key, key_path) command, _ = winreg.QueryValueEx(key, "") winreg.CloseKey(key) if isinstance(command, str): sub = "ziniao.exe" - exe_path = command[0: command.find(sub) + len(sub) + 1] + exe_path = command[0 : command.find(sub) + len(sub) + 1] else: exe_path = command[0] - logger.info("已获取紫鸟客户端路径:%s", exe_path) + logger.info("已获取紫鸟客户端路径:%s", exe_path) return exe_path except FileNotFoundError: - logger.warning("注册表中未找到紫鸟客户端路径:%s\\%s", root_name, key_path) + logger.warning("注册表中未找到紫鸟客户端路径:%s\\%s", root_name, key_path) - logger.error("未能获取紫鸟客户端路径,protocol_name=%s", protocol_name) + logger.error("未能获取紫鸟客户端路径,protocol_name=%s", protocol_name) return None def update_core(self): + """更新紫鸟浏览器内核. + + 打开店铺前调用,要求客户端版本 5.285.7 以上. 接口可能因 HTTP 超时 + 返回未完成状态,因此会循环调用直到成功或判定客户端不支持. """ - 下载所有内核,打开店铺前调用,需客户端版本5.285.7以上 - 因为http有超时时间,所以这个action适合循环调用,直到返回成功 - """ - data = { - "action": "updateCore", - "requestId": str(uuid.uuid4()), - } - data.update(self.user_info) - url = f"http://127.0.0.1:{self.socket_port}" + payload = self._build_payload("updateCore") logger.info("开始更新紫鸟浏览器内核") while True: - response = requests.post(url, json.dumps(data).encode("utf-8"), timeout=120) - result = response.json() - logger.info("更新内核返回:%s", result) + result = self._post_client(payload) + logger.info("更新内核返回:%s", result) + if self._handle_update_core_result(result): + return if result is None: - logger.info("等待客户端启动后继续更新内核") - time.sleep(2) continue - if result.get("statusCode") is None or result.get("statusCode") == -10003: - logger.error("当前紫鸟客户端版本不支持更新内核接口,请升级客户端") - return - if result.get("statusCode") == 0: - logger.info("紫鸟浏览器内核更新完成") - return - logger.info("等待更新内核完成:%s", json.dumps(result, ensure_ascii=False)) - time.sleep(2) + logger.info("等待更新内核完成:%s", self._result_text(result)) + time.sleep(UPDATE_CORE_RETRY_DELAY) + + def _handle_update_core_result(self, result: Optional[Dict[str, Any]]) -> bool: + if result is None: + logger.info("等待客户端启动后继续更新内核") + time.sleep(UPDATE_CORE_RETRY_DELAY) + return False + + status_code = self._status_code(result) + if status_code is None or status_code == STATUS_LOGIN_FAILED: + logger.error("当前紫鸟客户端版本不支持更新内核接口,请升级客户端") + return True + if status_code == STATUS_OK: + logger.info("紫鸟浏览器内核更新完成") + return True + return False def kill_process(self, version: Literal["v5", "v6"]): - """ - 杀紫鸟客户端进程 + """结束指定版本的紫鸟客户端进程. Args: - version: 客户端版本 + version: 客户端主版本. """ if version == "v5": process_name = "SuperBrowser.exe" @@ -128,37 +236,31 @@ class ZiniaoDriver: else: process_name = "ziniao.exe" - logger.info("准备结束紫鸟客户端进程:%s", process_name) + logger.info("准备结束紫鸟客户端进程:%s", process_name) os.system("taskkill /f /t /im " + process_name) - time.sleep(3) + time.sleep(PROCESS_KILL_DELAY) - def get_browser_list(self) -> list: - """ - 获取浏览器列表 + def get_browser_list(self) -> Optional[list[Dict[str, Any]]]: + """获取紫鸟浏览器店铺列表. Returns: - list: 浏览器列表 + 浏览器店铺列表.登录失败或请求失败时返回 None. """ - request_id = str(uuid.uuid4()) - data = { - "action": "getBrowserList", - "requestId": request_id, - } - data.update(self.user_info) + payload = self._build_payload("getBrowserList") + request_id = payload["requestId"] - logger.info("开始获取紫鸟浏览器列表,requestId=%s", request_id) - url = f"http://127.0.0.1:{self.socket_port}" - response = requests.post(url, json.dumps(data).encode("utf-8"), timeout=120) - result = response.json() - if str(result.get("statusCode")) == "0": + logger.info("开始获取紫鸟浏览器列表,requestId=%s", request_id) + result = self._post_client(payload) + status_code = self._status_code(result) + if status_code == STATUS_OK: browser_list = result.get("browserList") - logger.info("获取紫鸟浏览器列表成功,数量=%s", len(browser_list or [])) + logger.info("获取紫鸟浏览器列表成功,数量=%s", len(browser_list or [])) return browser_list - if str(result.get("statusCode")) == "-10003": - logger.error("获取紫鸟浏览器列表登录失败:%s", json.dumps(result, ensure_ascii=False)) + if status_code == STATUS_LOGIN_FAILED: + logger.error("获取紫鸟浏览器列表登录失败:%s", self._result_text(result)) return None - logger.error("获取紫鸟浏览器列表失败:%s", json.dumps(result, ensure_ascii=False)) + logger.error("获取紫鸟浏览器列表失败:%s", self._result_text(result)) return None def open_store( @@ -170,89 +272,103 @@ class ZiniaoDriver: cookieTypeSave=0, jsInfo="", ): - """ - 打开店铺 + """启动紫鸟店铺浏览器. Args: - store_info: 店铺信息(browserId 或 browserOauth) - isWebDriverReadOnlyMode: 是否只读模式,默认 0 - isprivacy: 隐私模式,默认 0 - isHeadless: 无头模式,默认 0 - cookieTypeSave: cookie保存类型,默认 0 - jsInfo: 注入的JS信息,默认 "" + store_info: 店铺 browserId 或 browserOauth. + isWebDriverReadOnlyMode: WebDriver 只读模式开关. + isprivacy: 隐私模式开关. + isHeadless: 无头模式开关. + cookieTypeSave: Cookie 保存类型. + jsInfo: 注入的 JS 信息. Returns: - dict: 返回结果 + 紫鸟客户端返回的启动结果. """ - request_id = str(uuid.uuid4()) - data = { - "action": "startBrowser", - "isWaitPluginUpdate": 0, - "isHeadless": isHeadless, - "requestId": request_id, - "isWebDriverReadOnlyMode": isWebDriverReadOnlyMode, - "cookieTypeLoad": 0, - "cookieTypeSave": cookieTypeSave, - "runMode": "1", - "isLoadUserPlugin": True, - "pluginIdType": 1, - "privacyMode": isprivacy, - } - data.update(self.user_info) + payload = self._build_start_browser_payload( + store_info=store_info, + is_web_driver_read_only_mode=isWebDriverReadOnlyMode, + is_privacy=isprivacy, + is_headless=isHeadless, + cookie_type_save=cookieTypeSave, + js_info=jsInfo, + ) + request_id = payload["requestId"] + + logger.info("开始打开紫鸟店铺,store_info=%s,requestId=%s", store_info, request_id) + result = self._post_client(payload) + status_code = self._status_code(result) + if status_code == STATUS_OK: + logger.info("紫鸟店铺打开成功,debuggingPort=%s", result.get("debuggingPort")) + return result + if status_code == STATUS_LOGIN_FAILED: + logger.error("打开紫鸟店铺登录失败:%s", self._result_text(result)) + raise RuntimeError(f"[open_store]登录失败 {self._result_text(result)}") + + logger.error("打开紫鸟店铺失败:%s", self._result_text(result)) + raise RuntimeError(f"[open_store]失败 {self._result_text(result)} ") + + def _build_start_browser_payload( + self, + *, + store_info, + is_web_driver_read_only_mode=0, + is_privacy=0, + is_headless=0, + cookie_type_save=0, + js_info="", + ) -> Dict[str, Any]: + payload = self._build_payload( + "startBrowser", + { + "isWaitPluginUpdate": 0, + "isHeadless": is_headless, + "isWebDriverReadOnlyMode": is_web_driver_read_only_mode, + "cookieTypeLoad": 0, + "cookieTypeSave": cookie_type_save, + "runMode": "1", + "isLoadUserPlugin": True, + "pluginIdType": 1, + "privacyMode": is_privacy, + }, + ) if store_info.isdigit(): - data["browserId"] = store_info + payload["browserId"] = store_info else: - data["browserOauth"] = store_info + payload["browserOauth"] = store_info - if len(str(jsInfo)) > 2: - data["injectJsInfo"] = json.dumps(jsInfo) + if len(str(js_info)) > 2: + payload["injectJsInfo"] = json.dumps(js_info) - logger.info("开始打开紫鸟店铺,store_info=%s,requestId=%s", store_info, request_id) - url = f"http://127.0.0.1:{self.socket_port}" - response = requests.post(url, json.dumps(data).encode("utf-8"), timeout=120) - result = response.json() - if str(result.get("statusCode")) == "0": - logger.info("紫鸟店铺打开成功,debuggingPort=%s", result.get("debuggingPort")) - return result - if str(result.get("statusCode")) == "-10003": - logger.error("打开紫鸟店铺登录失败:%s", json.dumps(result, ensure_ascii=False)) - raise RuntimeError(f"【open_store】登录失败 {json.dumps(result, ensure_ascii=False)}") - - logger.error("打开紫鸟店铺失败:%s", json.dumps(result, ensure_ascii=False)) - raise RuntimeError(f"【open_store】失败 {json.dumps(result, ensure_ascii=False)} ") + return payload def get_browser(self, port) -> Chromium: - """ - 获取浏览器实例 + """连接 DrissionPage 浏览器实例. Args: - port: 调试端口 + port: Chromium 调试端口. Returns: - Chromium: DrissionPage浏览器实例 + DrissionPage Chromium 实例. """ - logger.info("开始连接 DrissionPage 浏览器,port=%s", port) + logger.info("开始连接 DrissionPage 浏览器,port=%s", port) browser = Chromium(port) - logger.info("DrissionPage 浏览器连接完成,port=%s", port) + logger.info("DrissionPage 浏览器连接完成,port=%s", port) return browser def start_client(self): - """启动紫鸟客户端""" - url = f"http://127.0.0.1:{self.socket_port}" - - try: - requests.get(url, timeout=2) - logger.info("端口 %s 已启动,跳过启动紫鸟客户端", self.socket_port) + """启动紫鸟客户端并更新浏览器内核.""" + if self._is_client_ready(): + logger.info("端口 %s 已启动,跳过启动紫鸟客户端", self.socket_port) return - except (requests.exceptions.ConnectionError, requests.exceptions.Timeout): - logger.info("端口 %s 未启动,开始启动紫鸟客户端", self.socket_port) + logger.info("端口 %s 未启动,开始启动紫鸟客户端", self.socket_port) self.kill_process("v6") - time.sleep(5) + time.sleep(CLIENT_RESTART_DELAY) client_path = self.get_zinaio_exe("superbrowserv6") if not client_path: - raise RuntimeError("未找到紫鸟客户端路径,无法启动客户端") + raise RuntimeError("未找到紫鸟客户端路径,无法启动客户端") self.client_path = client_path.strip('"') cmd = [ @@ -261,56 +377,38 @@ class ZiniaoDriver: "--ipc_type=http", "--port=" + str(self.socket_port), ] - logger.info("紫鸟客户端启动命令:%s", " ".join(cmd)) + logger.info("紫鸟客户端启动命令:%s", " ".join(cmd)) - max_retries = 3 - for retry_count in range(max_retries): - logger.info("第 %s/%s 次尝试启动紫鸟客户端", retry_count + 1, max_retries) + for retry_count in range(CLIENT_START_RETRIES): + logger.info("第 %s/%s 次尝试启动紫鸟客户端", retry_count + 1, CLIENT_START_RETRIES) subprocess.Popen(cmd) - start_check_time = time.time() - client_started = False - while time.time() - start_check_time < 10: - try: - requests.get(url, timeout=2) - logger.info("紫鸟客户端启动成功,第 %s 次尝试", retry_count + 1) - client_started = True - break - except (requests.exceptions.ConnectionError, requests.exceptions.Timeout): - time.sleep(0.5) - - if client_started: - time.sleep(5) + if self._wait_until_client_ready(CLIENT_READY_TIMEOUT): + logger.info("紫鸟客户端启动成功,第 %s 次尝试", retry_count + 1) + time.sleep(CLIENT_POST_START_DELAY) self.update_core() return - logger.warning("第 %s 次尝试启动失败,10秒内未检测到客户端启动", retry_count + 1) + logger.warning("第 %s 次尝试启动失败,10秒内未检测到客户端启动", retry_count + 1) - logger.error("紫鸟客户端启动失败,已重试 %s 次", max_retries) - raise RuntimeError(f"客户端启动失败:重试 {max_retries} 次后仍未成功启动") + logger.error("紫鸟客户端启动失败,已重试 %s 次", CLIENT_START_RETRIES) + raise RuntimeError(f"客户端启动失败:重试 {CLIENT_START_RETRIES} 次后仍未成功启动") def open_shop(self, shop_name: str): - """ - 打开指定店铺 + """打开指定店铺并完成 IP 检测. Args: - shop_name: 店铺名称 + shop_name: 店铺名称. Returns: - Chromium or str: 成功返回浏览器实例,失败返回错误信息 + 成功时返回浏览器实例.店铺不存在时返回错误信息. """ - logger.info("开始打开店铺:%s", shop_name) + logger.info("开始打开店铺:%s", shop_name) self.start_client() - shop_ls = self.get_browser_list() - self.store_id = None - for shop in shop_ls or []: - if shop.get("browserName") == shop_name: - self.store_id = shop.get("browserOauth") - break - + self.store_id = self._find_store_oauth(self.get_browser_list(), shop_name) if not self.store_id: - logger.warning("店铺不存在:%s", shop_name) + logger.warning("店铺不存在:%s", shop_name) return "店铺不存在" ret_json = self.open_store(self.store_id) @@ -319,88 +417,86 @@ class ZiniaoDriver: self.store_id = ret_json.get("browserId") self.browser = self.get_browser(ret_json.get("debuggingPort")) - ip_check_url = ret_json.get("ipDetectionPage") if not ip_check_url: - logger.error("ip检测页地址为空,准备关闭店铺:%s", shop_name) + logger.error("ip检测页地址为空,准备关闭店铺:%s", shop_name) self.close_store(self.store_id) - raise RuntimeError("没有IP检测地址,为了店铺安全不打开店铺") + raise RuntimeError("没有IP检测地址,为了店铺安全不打开店铺") - ip_usable = self.open_ip_check(self.browser, ip_check_url) - if ip_usable: - logger.info("IP检测通过,打开店铺平台主页:%s", shop_name) + if self.open_ip_check(self.browser, ip_check_url): + logger.info("IP检测通过,打开店铺平台主页:%s", shop_name) self.open_launcher_page(ret_json.get("launcherPage"), self.browser) - else: - logger.error("IP检测不通过,停止打开店铺:%s", shop_name) - raise RuntimeError("IP检测不通过,可能是因为网络环境变化导致的,为了店铺安全不打开店铺") - return self.browser + return self.browser + + logger.error("IP检测不通过,停止打开店铺:%s", shop_name) + raise RuntimeError("IP检测不通过,可能是因为网络环境变化导致的,为了店铺安全不打开店铺") def close_store(self, browser_oauth=None): - """ - 关闭店铺 + """关闭紫鸟店铺浏览器. Args: - browser_oauth: 店铺OAuth标识,如果不提供则使用当前打开的店铺 + browser_oauth: 店铺 OAuth 标识. 未提供时使用当前打开的店铺. Returns: - dict: 返回结果 + 紫鸟客户端返回的关闭结果. """ if browser_oauth is None: browser_oauth = self.store_id - request_id = str(uuid.uuid4()) - data = { - "action": "stopBrowser", - "requestId": request_id, - "duplicate": 0, - "browserOauth": browser_oauth, - } - data.update(self.user_info) + payload = self._build_payload( + "stopBrowser", + { + "duplicate": 0, + "browserOauth": browser_oauth, + }, + ) + request_id = payload["requestId"] - logger.info("开始关闭紫鸟店铺,browserOauth=%s,requestId=%s", browser_oauth, request_id) - url = f"http://127.0.0.1:{self.socket_port}" - response = requests.post(url, json.dumps(data).encode("utf-8"), timeout=120) - result = response.json() - if str(result.get("statusCode")) == "0": - logger.info("紫鸟店铺关闭成功,browserOauth=%s", browser_oauth) + logger.info("开始关闭紫鸟店铺,browserOauth=%s,requestId=%s", browser_oauth, request_id) + result = self._post_client(payload) + status_code = self._status_code(result) + if status_code == STATUS_OK: + logger.info("紫鸟店铺关闭成功,browserOauth=%s", browser_oauth) return result - if str(result.get("statusCode")) == "-10003": - logger.error("关闭紫鸟店铺登录失败:%s", json.dumps(result, ensure_ascii=False)) - raise RuntimeError(f"【close_store】登录失败 {json.dumps(result, ensure_ascii=False)}") + if status_code == STATUS_LOGIN_FAILED: + logger.error("关闭紫鸟店铺登录失败:%s", self._result_text(result)) + raise RuntimeError(f"[close_store]登录失败 {self._result_text(result)}") - logger.error("关闭紫鸟店铺失败:%s", json.dumps(result, ensure_ascii=False)) - raise RuntimeError(f"【close_store】失败: {json.dumps(result, ensure_ascii=False)} ") + logger.error("关闭紫鸟店铺失败:%s", self._result_text(result)) + raise RuntimeError(f"[close_store]失败: {self._result_text(result)} ") def open_launcher_page(self, launcher_page: str, browser: Chromium = None): - """ - 打开启动页面 + """打开店铺平台启动页. Args: - launcher_page: 要打开的页面URL - browser: 浏览器实例,如果不提供则使用当前浏览器实例 + launcher_page: 要打开的启动页 URL. + browser: 浏览器实例. 未提供时使用当前浏览器实例. """ if browser is None: browser = self.browser - logger.info("打开店铺平台启动页:%s", launcher_page) + logger.info("打开店铺平台启动页:%s", launcher_page) tab = browser.new_tab(url=launcher_page) self.tab = tab return tab def open_ip_check(self, browser: Chromium, ip_check_url: str): - """ - 打开ip检测页检测ip是否正常 - :param browser: drissionpage浏览器会话 - :param ip_check_url ip检测页地址 - :return 检测结果 + """打开 IP 检测页并判断网络环境是否通过. + + Args: + browser: DrissionPage 浏览器会话. + ip_check_url: IP 检测页地址. + + Returns: + IP 检测通过时返回 True,否则返回 False. """ try: - logger.info("开始打开IP检测页:%s", ip_check_url) + logger.info("开始打开IP检测页:%s", ip_check_url) tab = browser.latest_tab tab.get(ip_check_url) success_button = tab.ele( (By.XPATH, '//button[contains(@class, "styles_btn--success")]'), - timeout=60, + timeout=IP_CHECK_TIMEOUT, ) if success_button: logger.info("IP检测成功") @@ -414,105 +510,108 @@ class ZiniaoDriver: class AmamzonBase(ZiniaoDriver): - """亚马逊操作基类,包含一些通用方法""" + """亚马逊页面操作基类.""" def SwitchingCountries(self, country_name: str): - """ - 切换国家 - 操作: - 1、//div[@class="dropdown-account-switcher-header-label"]/span[last()] 获取此元素文本,判断当前国家,如果与目标国家相同则不操作,否则执行下一步 - 2、点击 //div[@class="dropdown-account-switcher-header-label"] 打开下拉框 - 3、点击 //div[@class="dropdown-account-switcher-list-item"] 第一个展开国家列表 - 4、点击 //div[@class="dropdown-account-switcher-list-item dropdown-account-switcher-list-item-indented" and @title="国家名"] 切换到目标国家 - 5、等待页面加载完成,判断国家是否切换成功,成功则返回True,否则返回False + """切换亚马逊账号国家并验证结果. + + 流程包括读取当前国家,打开国家下拉框,选择目标国家并等待页面加载. Args: - country_name: 目标国家名称 + country_name: 目标国家名称. Returns: - bool: 切换成功返回True,失败返回False + 切换成功返回 True,否则返回 False. """ try: if self.browser is None: - logger.warning("浏览器实例不存在,请先打开店铺") + logger.warning("浏览器实例不存在,请先打开店铺") return False - tab = self.tab - tab.wait.doc_loaded(timeout=120, raise_err=False) - - logger.info("正在检查当前国家") - current_country_ele = tab.ele( - 'xpath://div[@class="dropdown-account-switcher-header-label"]/span[last()]', - timeout=20, - ) - if current_country_ele: - current_country = current_country_ele.text.strip() - logger.info("当前国家:%s", current_country) - - if current_country == country_name: - logger.info("当前已经是目标国家 %s,无需切换", country_name) - return True - else: + self.tab.wait.doc_loaded(timeout=COUNTRY_INITIAL_LOAD_TIMEOUT, raise_err=False) + current_country = self._get_current_country(timeout=COUNTRY_LOOKUP_TIMEOUT) + if current_country is None: logger.warning("无法获取当前国家信息") return False + if current_country == country_name: + logger.info("当前已经是目标国家 %s,无需切换", country_name) + return True - logger.info("正在打开国家切换下拉框") - dropdown_header = tab.ele('xpath://div[@class="dropdown-account-switcher-header-label"]', timeout=10) - if not dropdown_header: - logger.warning("找不到国家切换下拉框") + if not self._open_country_dropdown(): return False - dropdown_header.click() - time.sleep(1) - - logger.info("正在展开国家列表") - first_item = tab.ele('xpath://div[@class="dropdown-account-switcher-list-item"]', timeout=10) - if not first_item: - logger.warning("找不到国家列表项") + if not self._select_country(country_name): return False - first_item.click() - time.sleep(1) - - logger.info("正在切换到国家:%s", country_name) - target_country_xpath = f'//div[@class="dropdown-account-switcher-list-item dropdown-account-switcher-list-item-indented" and @title="{country_name}"]' - target_country = tab.ele(f"xpath:{target_country_xpath}", timeout=10) - if not target_country: - logger.warning("找不到目标国家:%s", country_name) - return False - target_country.click() logger.info("等待国家切换后页面加载") self.tab.wait.doc_loaded() - - new_country_ele = tab.ele( - 'xpath://div[@class="dropdown-account-switcher-header-label"]/span[last()]', - timeout=10, - ) - if new_country_ele: - new_country = new_country_ele.text.strip() - if new_country == country_name: - logger.info("国家切换成功:%s", new_country) - return True - - logger.warning("国家切换失败,当前国家:%s,目标国家:%s", new_country, country_name) - return False - - logger.warning("无法验证国家切换结果") - return False + return self._verify_country(country_name) except Exception: logger.exception("切换国家时发生异常") return False - def need_login(self): - """ - 判断是否需要登录,部分国家可能需要登录后才能切换国家 - """ - time.sleep(3) - self.tab.wait.doc_loaded(timeout=30, raise_err=False) - need_login_ele = self.tab.eles( - 'xpath://h1[@class="a-spacing-small"]|//span[contains(text(),"登录")]', - timeout=5, + def _get_current_country(self, *, timeout: int) -> Optional[str]: + logger.info("正在检查当前国家") + current_country_ele = self.tab.ele(COUNTRY_LABEL_XPATH, timeout=timeout) + if not current_country_ele: + return None + + current_country = current_country_ele.text.strip() + logger.info("当前国家:%s", current_country) + return current_country + + def _open_country_dropdown(self) -> bool: + logger.info("正在打开国家切换下拉框") + dropdown_header = self.tab.ele(COUNTRY_DROPDOWN_XPATH, timeout=COUNTRY_CLICK_TIMEOUT) + if not dropdown_header: + logger.warning("找不到国家切换下拉框") + return False + dropdown_header.click() + time.sleep(COUNTRY_DROPDOWN_DELAY) + + logger.info("正在展开国家列表") + first_item = self.tab.ele(COUNTRY_LIST_ITEM_XPATH, timeout=COUNTRY_CLICK_TIMEOUT) + if not first_item: + logger.warning("找不到国家列表项") + return False + first_item.click() + time.sleep(COUNTRY_DROPDOWN_DELAY) + return True + + def _select_country(self, country_name: str) -> bool: + logger.info("正在切换到国家:%s", country_name) + target_country = self.tab.ele(self._country_option_xpath(country_name), timeout=COUNTRY_CLICK_TIMEOUT) + if not target_country: + logger.warning("找不到目标国家:%s", country_name) + return False + target_country.click() + return True + + @staticmethod + def _country_option_xpath(country_name: str) -> str: + return ( + "xpath://div[@class=" + '"dropdown-account-switcher-list-item dropdown-account-switcher-list-item-indented" ' + f'and @title="{country_name}"]' ) + + def _verify_country(self, country_name: str) -> bool: + new_country = self._get_current_country(timeout=COUNTRY_CLICK_TIMEOUT) + if new_country is None: + logger.warning("无法验证国家切换结果") + return False + if new_country == country_name: + logger.info("国家切换成功:%s", new_country) + return True + + logger.warning("国家切换失败,当前国家:%s,目标国家:%s", new_country, country_name) + return False + + def need_login(self): + """判断当前页面是否需要登录.""" + time.sleep(NEED_LOGIN_DELAY) + self.tab.wait.doc_loaded(timeout=DOC_LOAD_TIMEOUT, raise_err=False) + need_login_ele = self.tab.eles(NEED_LOGIN_XPATH, timeout=NEED_LOGIN_TIMEOUT) if len(need_login_ele) > 0: logger.info("检测到需要登录元素") return True @@ -520,61 +619,102 @@ class AmamzonBase(ZiniaoDriver): return False def login(self, password, username=""): + """登录当前页面,必要时等待并提交一次性验证码. + + Args: + password: 登录密码. + username: 兼容保留参数,当前未使用. + + Returns: + 登录成功返回 True,失败返回 False. + """ try: - self.tab.wait.doc_loaded(timeout=30, raise_err=False) - for _ in range(4): - pwd_input = self.tab.eles('xpath://input[@type="password"]', timeout=5) - if len(pwd_input) > 0: - logger.info("检测到密码输入框,准备输入密码") - pwd_input[0].input(password, clear=True) - submit_btn = self.tab.eles('xpath://input[@id="signInSubmit"]', timeout=5) - if len(submit_btn) > 0: - logger.info("点击登录提交按钮") - submit_btn[0].click() - self.tab.wait.doc_loaded(timeout=30, raise_err=False) + self.tab.wait.doc_loaded(timeout=DOC_LOAD_TIMEOUT, raise_err=False) + for _ in range(LOGIN_ATTEMPTS): + self._submit_password_if_present(password) + self.tab.wait.doc_loaded(timeout=DOC_LOAD_TIMEOUT, raise_err=False) - send_code = self.tab.eles( - 'xpath://span[@id="auth-send-code" and contains(string(.),"发送一次性密码")]', - timeout=5, - ) - logger.info("发送一次性密码元素数量:%s", len(send_code)) - if len(send_code) > 0: - logger.info("检测到发送一次性密码按钮,准备点击") - send_code[0].click() - time.sleep(1) - self.tab.wait.doc_loaded(timeout=30, raise_err=False) - else: - for _ in range(5): - opt_code_input = self.tab.eles('xpath://input[@name="otpCode"]', timeout=30) - logger.info("验证码输入框数量:%s", len(opt_code_input)) - if len(opt_code_input) > 0: - opt_code_input[0].wait.displayed(timeout=10, raise_err=False) - for _ in range(30): - if opt_code_input[0].value is not None and opt_code_input[0].value.strip() != "": - logger.info("检测到验证码输入完成") - submit_btn = self.tab.eles('xpath://input[@id="auth-signin-button"]', timeout=10) - if len(submit_btn) > 0: - submit_btn[0].click() - self.tab.wait.doc_loaded(timeout=20, raise_err=False) - error_mes = self.tab.eles( - 'xpath://div[@id="auth-error-message-box"]', - timeout=10, - ) - if len(error_mes) > 0: - logger.warning("验证码输入错误:%s", error_mes[0].text) - self.tab.refresh() - else: - logger.info("登录成功") - return True + if self._send_otp_if_present(): + continue + if self._submit_ready_otp(): + return True - time.sleep(1) - else: - break - - submit_btn = self.tab.eles('xpath://input[@id="auth-signin-button"]', timeout=10) - if len(submit_btn) > 0: - logger.info("点击二次登录提交按钮") - submit_btn[0].click() + self._click_final_login_submit_if_present() except Exception: - logger.exception("登录过程中发生异常:%s", traceback.format_exc()) + logger.exception("登录过程中发生异常") return False + + def _submit_password_if_present(self, password) -> None: + pwd_input = self.tab.eles(PASSWORD_INPUT_XPATH, timeout=PASSWORD_INPUT_TIMEOUT) + if len(pwd_input) > 0: + logger.info("检测到密码输入框,准备输入密码") + pwd_input[0].input(password, clear=True) + + submit_btn = self.tab.eles(PASSWORD_SUBMIT_XPATH, timeout=PASSWORD_SUBMIT_TIMEOUT) + if len(submit_btn) > 0: + logger.info("点击登录提交按钮") + submit_btn[0].click() + + def _send_otp_if_present(self) -> bool: + send_code = self.tab.eles(OTP_SEND_XPATH, timeout=OTP_SEND_TIMEOUT) + logger.info("发送一次性密码元素数量:%s", len(send_code)) + if len(send_code) == 0: + return False + + logger.info("检测到发送一次性密码按钮,准备点击") + send_code[0].click() + time.sleep(OTP_SEND_DELAY) + self.tab.wait.doc_loaded(timeout=DOC_LOAD_TIMEOUT, raise_err=False) + return True + + def _submit_ready_otp(self) -> bool: + for _ in range(OTP_INPUT_LOOKUP_ATTEMPTS): + otp_input = self._find_otp_input() + if otp_input is None: + return False + if self._wait_for_otp_value(otp_input) and self._submit_otp_if_ready(): + return True + return False + + def _find_otp_input(self): + otp_code_input = self.tab.eles(OTP_INPUT_XPATH, timeout=OTP_INPUT_TIMEOUT) + logger.info("验证码输入框数量:%s", len(otp_code_input)) + if len(otp_code_input) == 0: + return None + + otp_code_input[0].wait.displayed(timeout=OTP_INPUT_DISPLAY_TIMEOUT, raise_err=False) + return otp_code_input[0] + + @staticmethod + def _has_otp_value(otp_input) -> bool: + return otp_input.value is not None and otp_input.value.strip() != "" + + def _wait_for_otp_value(self, otp_input) -> bool: + for _ in range(OTP_CODE_WAIT_SECONDS): + if self._has_otp_value(otp_input): + logger.info("检测到验证码输入完成") + return True + time.sleep(1) + return False + + def _submit_otp_if_ready(self) -> bool: + submit_btn = self.tab.eles(OTP_SUBMIT_XPATH, timeout=OTP_SUBMIT_TIMEOUT) + if len(submit_btn) == 0: + return False + + submit_btn[0].click() + self.tab.wait.doc_loaded(timeout=OTP_RESULT_LOAD_TIMEOUT, raise_err=False) + error_mes = self.tab.eles(OTP_ERROR_XPATH, timeout=OTP_ERROR_TIMEOUT) + if len(error_mes) > 0: + logger.warning("验证码输入错误:%s", error_mes[0].text) + self.tab.refresh() + return False + + logger.info("登录成功") + return True + + def _click_final_login_submit_if_present(self) -> None: + submit_btn = self.tab.eles(OTP_SUBMIT_XPATH, timeout=LOGIN_FINAL_SUBMIT_TIMEOUT) + if len(submit_btn) > 0: + logger.info("点击二次登录提交按钮") + submit_btn[0].click() diff --git a/app/amazon/product.py b/app/amazon/product.py new file mode 100644 index 0000000..21c0d5d --- /dev/null +++ b/app/amazon/product.py @@ -0,0 +1,11 @@ +from .base import AmamzonBase, UserInfo + +if __name__ == "__main__": + user_info: UserInfo = {"company": "rongchuang123", "username": "自动化_Robot", "password": "#20zsg25"} + driver = AmamzonBase(user_info) + + shop_name = "郭亚芳" + country = "德国" + + driver.open_shop(shop_name) + driver.SwitchingCountries(country) diff --git a/app/pyproject.toml b/app/pyproject.toml index 54fdfb8..b6fd8dc 100644 --- a/app/pyproject.toml +++ b/app/pyproject.toml @@ -91,6 +91,9 @@ dependencies = [ [tool.uv] package = false +[tool.pytest.ini_options] +pythonpath = ["."] + [dependency-groups] dev = [ "pytest>=8.4.2", diff --git a/app/tests/test_amazon_base.py b/app/tests/test_amazon_base.py index 45dec55..ce2383f 100644 --- a/app/tests/test_amazon_base.py +++ b/app/tests/test_amazon_base.py @@ -154,6 +154,33 @@ def test_get_browser_list_status_handling(monkeypatch, payload, expected): assert base.ZiniaoDriver({}).get_browser_list() == expected +def test_update_core_retries_none_then_returns_on_success(monkeypatch): + calls = [] + responses = [FakeResponse(None), FakeResponse({"statusCode": 0})] + + def fake_post(url, data, timeout): + calls.append(json.loads(data.decode("utf-8"))) + return responses.pop(0) + + monkeypatch.setattr(base.requests, "post", fake_post) + monkeypatch.setattr(base.time, "sleep", lambda seconds: None) + + base.ZiniaoDriver({}).update_core() + + assert [payload["action"] for payload in calls] == ["updateCore", "updateCore"] + + +def test_wait_until_client_ready_polls_until_available(monkeypatch): + readiness = [False, False, True] + sleeps = [] + driver = base.ZiniaoDriver({}) + monkeypatch.setattr(driver, "_is_client_ready", lambda: readiness.pop(0)) + monkeypatch.setattr(base.time, "sleep", lambda seconds: sleeps.append(seconds)) + + assert driver._wait_until_client_ready(timeout=10) is True + assert sleeps == [base.CLIENT_READY_INTERVAL, base.CLIENT_READY_INTERVAL] + + def test_close_store_success_uses_current_store(monkeypatch): payloads = [] From 5d8ee8fe793fe50de54dd89768a3d1a46592a542 Mon Sep 17 00:00:00 2001 From: koko Date: Sat, 25 Apr 2026 17:59:12 +0800 Subject: [PATCH 05/18] feat: update amazon driver --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index c264c21..16ec542 100644 --- a/.gitignore +++ b/.gitignore @@ -103,4 +103,5 @@ ERP-Demo/ xlsx/ .omx/ .codex +.rtk OPS_REDIS_MYSQL_OPTIMIZATION_NOTES.md \ No newline at end of file From 7f83bceba1901386b52b4a2020f27ce991e2f2a1 Mon Sep 17 00:00:00 2001 From: koko Date: Mon, 27 Apr 2026 00:23:44 +0800 Subject: [PATCH 06/18] feat: patrol delete --- app/amazon/__pycache__/approve.cpython-39.pyc | Bin 32560 -> 32557 bytes .../__pycache__/asin_status.cpython-39.pyc | Bin 18456 -> 18453 bytes .../__pycache__/del_brand.cpython-39.pyc | Bin 18509 -> 18506 bytes app/amazon/__pycache__/main.cpython-39.pyc | Bin 17671 -> 17772 bytes .../__pycache__/match_action.cpython-39.pyc | Bin 19235 -> 19232 bytes .../__pycache__/price_match.cpython-39.pyc | Bin 32199 -> 32196 bytes app/amazon/__pycache__/tool.cpython-39.pyc | Bin 5418 -> 5415 bytes app/amazon/base.py | 124 +- app/amazon/main.py | 31 +- app/amazon/product.py | 1673 ++++++++++++++++- .../complete_draft_quick_view_debug.js | 55 + .../complete_draft_quick_view_diagnostic.js | 73 + .../product/complete_draft_quick_view_tags.js | 121 ++ .../listing_status_click_visible_status.js | 124 ++ .../product/listing_status_dropdown_debug.js | 95 + .../product/listing_status_dropdown_open.js | 225 +++ .../listing_status_dropdown_options.js | 78 + .../scripts/product/listing_status_section.js | 91 + .../product/listing_status_select_option.js | 79 + ...recommended_offer_percentage_diagnostic.js | 94 + .../recommended_offer_percentage_open.js | 132 ++ .../recommended_offer_percentage_rows.js | 279 +++ .../__pycache__/__init__.cpython-39.pyc | Bin 144 -> 141 bytes .../__pycache__/admin.cpython-39.pyc | Bin 11271 -> 11768 bytes .../__pycache__/auth.cpython-39.pyc | Bin 3320 -> 3317 bytes .../__pycache__/brand.cpython-39.pyc | Bin 20960 -> 20957 bytes .../__pycache__/communication.cpython-39.pyc | Bin 2435 -> 2432 bytes .../__pycache__/image.cpython-39.pyc | Bin 12197 -> 12194 bytes .../__pycache__/main.cpython-39.pyc | Bin 4689 -> 6835 bytes .../__pycache__/main.cpython-39.pyc | Bin 13425 -> 13429 bytes .../__pycache__/web_dec.cpython-39.pyc | Bin 4726 -> 4723 bytes app/pyproject.toml | 1 + app/tests/test_amazon_base.py | 16 +- app/tests/test_product.py | 834 ++++++++ app/tool/__pycache__/devices.cpython-39.pyc | Bin 7380 -> 7285 bytes app/uv.lock | 814 ++++---- 36 files changed, 4469 insertions(+), 470 deletions(-) create mode 100644 app/amazon/scripts/product/complete_draft_quick_view_debug.js create mode 100644 app/amazon/scripts/product/complete_draft_quick_view_diagnostic.js create mode 100644 app/amazon/scripts/product/complete_draft_quick_view_tags.js create mode 100644 app/amazon/scripts/product/listing_status_click_visible_status.js create mode 100644 app/amazon/scripts/product/listing_status_dropdown_debug.js create mode 100644 app/amazon/scripts/product/listing_status_dropdown_open.js create mode 100644 app/amazon/scripts/product/listing_status_dropdown_options.js create mode 100644 app/amazon/scripts/product/listing_status_section.js create mode 100644 app/amazon/scripts/product/listing_status_select_option.js create mode 100644 app/amazon/scripts/product/recommended_offer_percentage_diagnostic.js create mode 100644 app/amazon/scripts/product/recommended_offer_percentage_open.js create mode 100644 app/amazon/scripts/product/recommended_offer_percentage_rows.js create mode 100644 app/tests/test_product.py diff --git a/app/amazon/__pycache__/approve.cpython-39.pyc b/app/amazon/__pycache__/approve.cpython-39.pyc index 94b13e42f6532fc35aae33b3a1eda6485f531d88..3eec7a750b85707cdeaca4aad5cc6edf42de72b4 100644 GIT binary patch delta 57 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 LLBVEy)-SFA|H%`F delta 60 zcmZ25jdAfbM(#vjUM>b8sP}rck(-58;j0ml<6;%_e0k&3-l}eL}u?}?y9r`guI$UXEZ)9a$V{&14Y-MsS zaBOvFX>MF$aB#Du2dP#8)3Z%p83F+Vvu9v!3<3AE)oiW>0g$tVauo*wwzHafIspM- Ov(uJ>Bu?}?yAoVc-002ZfT<52O<&Bl(x}@a0 zm|SgPX?SU2Zf9RXNwc5_sa65fvr1kW0s#WEWMFL!0rs=fY_0_XkF$Yt6$b&evzK`~ R0RdmL(t5Q50Y8(7eLT+1EUN$j diff --git a/app/amazon/__pycache__/tool.cpython-39.pyc b/app/amazon/__pycache__/tool.cpython-39.pyc index 0365bcd832b55087ebd16fc0dad736d590bf903c..f8ca4450609f9038cc82ee4add5d20304e35b67e 100644 GIT binary patch delta 403 zcmZ3bwOorkk(ZZ?0SNXKyxGXTi;FR8@-Z&`;3%Hr#I)4-+|=UY#PrlC&gA@@{G#~W z#DXY}r1W?&FN!^@7|2RVy~UWilA%ZhXvQxs7ps^|kXTG|QDS*cYLRY1PHB2(UQA*^ z!DMf4KSr_5v$)ln^(26bizI=>E#}gqoFWAfR}sYJC`v6Z$j>WI1)B#UL?^%JbK+A6 zN^3IRVkt?jC@GSfY|npMQUj!eJvk>eF)uX*MT4?{4x{em009w3sm-YZs?3a9le>kr z8TBS_7dGGqxfEvdCt({#`^owurc&Y{^M#9eKxT4#<`(1^mADoaaYC^AdAYHYuW$+ delta 417 zcmZ3kwMvUSk(ZZ?0SJ~Ida{vw7Z>BL$;Y_#!*1~uC#I#w=cX1HC#I*~;!MuZ$uEk} zO)R*@k(3?}=G|h?Dh9GrQg1P)u4E{Z1e)K{b!I(Tpwc2aAaRSiv?!-Y6~t8oaXE@oiwpAeic`TxLI|nJ zZ}^<}bb!*DOt)A{QY%V|0nRJNlna4O+nG1AfO{=1ku2gTv}9=nwMM| zUtCgDB)>UHK$V$Me{zSgHly+6Ey4!eAh*LTdM|9l=rUPH#57(8q+7U%2V@1eXKq1$ zQHg6&QGQX8CP;(_=<1xzB)x*fBA`>5Kqlye2w@N*4N}1o1oH^U;YA?F6xo9aTM*$g b`GAPDln{`4i@CTo7s>5l*GNtNDq;ixkqmXF diff --git a/app/amazon/base.py b/app/amazon/base.py index 60327db..f5be539 100644 --- a/app/amazon/base.py +++ b/app/amazon/base.py @@ -1,11 +1,11 @@ import json -import logging import os import subprocess import time import uuid from typing import Any, Dict, List, Literal, Optional, TypedDict +from loguru import logger import requests from DrissionPage import Chromium from DrissionPage._pages.chromium_tab import ChromiumTab @@ -17,8 +17,6 @@ except ImportError: winreg = None -logger = logging.getLogger(__name__) - STATUS_OK = "0" STATUS_LOGIN_FAILED = "-10003" @@ -76,7 +74,7 @@ class UserInfo(TypedDict): def kill_process(version: Literal["v5", "v6"]): """结束指定版本的紫鸟客户端进程.""" - logger.info("准备杀紫鸟客户端进程,version=%s", version) + logger.info("准备杀紫鸟客户端进程,version={}", version) driver = ZiniaoDriver({}) driver.kill_process(version) @@ -171,7 +169,7 @@ class ZiniaoDriver: (winreg.HKEY_LOCAL_MACHINE, "HKEY_LOCAL_MACHINE"), ): try: - logger.info("正在从注册表读取紫鸟客户端路径:%s\\%s", root_name, key_path) + logger.info("正在从注册表读取紫鸟客户端路径:{}\\{}", root_name, key_path) key = winreg.OpenKey(root_key, key_path) command, _ = winreg.QueryValueEx(key, "") winreg.CloseKey(key) @@ -180,12 +178,12 @@ class ZiniaoDriver: exe_path = command[0 : command.find(sub) + len(sub) + 1] else: exe_path = command[0] - logger.info("已获取紫鸟客户端路径:%s", exe_path) + logger.info("已获取紫鸟客户端路径:{}", exe_path) return exe_path except FileNotFoundError: - logger.warning("注册表中未找到紫鸟客户端路径:%s\\%s", root_name, key_path) + logger.warning("注册表中未找到紫鸟客户端路径:{}\\{}", root_name, key_path) - logger.error("未能获取紫鸟客户端路径,protocol_name=%s", protocol_name) + logger.error("未能获取紫鸟客户端路径,protocol_name={}", protocol_name) return None def update_core(self): @@ -199,13 +197,13 @@ class ZiniaoDriver: logger.info("开始更新紫鸟浏览器内核") while True: result = self._post_client(payload) - logger.info("更新内核返回:%s", result) + logger.info("更新内核返回:{}", result) if self._handle_update_core_result(result): return if result is None: continue - logger.info("等待更新内核完成:%s", self._result_text(result)) + logger.info("等待更新内核完成:{}", self._result_text(result)) time.sleep(UPDATE_CORE_RETRY_DELAY) def _handle_update_core_result(self, result: Optional[Dict[str, Any]]) -> bool: @@ -232,14 +230,35 @@ class ZiniaoDriver: if version == "v5": process_name = "SuperBrowser.exe" logger.info("准备结束紫鸟 v5 starter.exe") - os.system("taskkill /f /t /im starter.exe") + self._kill_process_by_name("starter.exe") else: process_name = "ziniao.exe" - logger.info("准备结束紫鸟客户端进程:%s", process_name) - os.system("taskkill /f /t /im " + process_name) + logger.info("准备结束紫鸟客户端进程:{}", process_name) + self._kill_process_by_name(process_name) time.sleep(PROCESS_KILL_DELAY) + def _kill_process_by_name(self, process_name: str) -> None: + result = subprocess.run( + ["taskkill", "/f", "/t", "/im", process_name], + capture_output=True, + text=True, + encoding="utf-8", + errors="ignore", + check=False, + ) + output = (result.stdout or result.stderr or "").strip() + if result.returncode == 0: + if output: + logger.info("结束进程返回:{}", output) + return + + if "没有找到进程" in output or "not found" in output.lower(): + logger.info("进程未运行,跳过结束:{}", process_name) + return + + logger.warning("结束进程失败:{} | {}", process_name, output or f"returncode={result.returncode}") + def get_browser_list(self) -> Optional[list[Dict[str, Any]]]: """获取紫鸟浏览器店铺列表. @@ -249,18 +268,18 @@ class ZiniaoDriver: payload = self._build_payload("getBrowserList") request_id = payload["requestId"] - logger.info("开始获取紫鸟浏览器列表,requestId=%s", request_id) + logger.info("开始获取紫鸟浏览器列表,requestId={}", request_id) result = self._post_client(payload) status_code = self._status_code(result) if status_code == STATUS_OK: browser_list = result.get("browserList") - logger.info("获取紫鸟浏览器列表成功,数量=%s", len(browser_list or [])) + logger.info("获取紫鸟浏览器列表成功,数量={}", len(browser_list or [])) return browser_list if status_code == STATUS_LOGIN_FAILED: - logger.error("获取紫鸟浏览器列表登录失败:%s", self._result_text(result)) + logger.error("获取紫鸟浏览器列表登录失败:{}", self._result_text(result)) return None - logger.error("获取紫鸟浏览器列表失败:%s", self._result_text(result)) + logger.error("获取紫鸟浏览器列表失败:{}", self._result_text(result)) return None def open_store( @@ -295,17 +314,17 @@ class ZiniaoDriver: ) request_id = payload["requestId"] - logger.info("开始打开紫鸟店铺,store_info=%s,requestId=%s", store_info, request_id) + logger.info("开始打开紫鸟店铺,store_info={},requestId={}", store_info, request_id) result = self._post_client(payload) status_code = self._status_code(result) if status_code == STATUS_OK: - logger.info("紫鸟店铺打开成功,debuggingPort=%s", result.get("debuggingPort")) + logger.info("紫鸟店铺打开成功,debuggingPort={}", result.get("debuggingPort")) return result if status_code == STATUS_LOGIN_FAILED: - logger.error("打开紫鸟店铺登录失败:%s", self._result_text(result)) + logger.error("打开紫鸟店铺登录失败:{}", self._result_text(result)) raise RuntimeError(f"[open_store]登录失败 {self._result_text(result)}") - logger.error("打开紫鸟店铺失败:%s", self._result_text(result)) + logger.error("打开紫鸟店铺失败:{}", self._result_text(result)) raise RuntimeError(f"[open_store]失败 {self._result_text(result)} ") def _build_start_browser_payload( @@ -352,18 +371,18 @@ class ZiniaoDriver: Returns: DrissionPage Chromium 实例. """ - logger.info("开始连接 DrissionPage 浏览器,port=%s", port) + logger.info("开始连接 DrissionPage 浏览器,port={}", port) browser = Chromium(port) - logger.info("DrissionPage 浏览器连接完成,port=%s", port) + logger.info("DrissionPage 浏览器连接完成,port={}", port) return browser def start_client(self): """启动紫鸟客户端并更新浏览器内核.""" if self._is_client_ready(): - logger.info("端口 %s 已启动,跳过启动紫鸟客户端", self.socket_port) + logger.info("端口 {} 已启动,跳过启动紫鸟客户端", self.socket_port) return - logger.info("端口 %s 未启动,开始启动紫鸟客户端", self.socket_port) + logger.info("端口 {} 未启动,开始启动紫鸟客户端", self.socket_port) self.kill_process("v6") time.sleep(CLIENT_RESTART_DELAY) client_path = self.get_zinaio_exe("superbrowserv6") @@ -377,21 +396,21 @@ class ZiniaoDriver: "--ipc_type=http", "--port=" + str(self.socket_port), ] - logger.info("紫鸟客户端启动命令:%s", " ".join(cmd)) + logger.info("紫鸟客户端启动命令:{}", " ".join(cmd)) for retry_count in range(CLIENT_START_RETRIES): - logger.info("第 %s/%s 次尝试启动紫鸟客户端", retry_count + 1, CLIENT_START_RETRIES) + logger.info("第 {}/{} 次尝试启动紫鸟客户端", retry_count + 1, CLIENT_START_RETRIES) subprocess.Popen(cmd) if self._wait_until_client_ready(CLIENT_READY_TIMEOUT): - logger.info("紫鸟客户端启动成功,第 %s 次尝试", retry_count + 1) + logger.info("紫鸟客户端启动成功,第 {} 次尝试", retry_count + 1) time.sleep(CLIENT_POST_START_DELAY) self.update_core() return - logger.warning("第 %s 次尝试启动失败,10秒内未检测到客户端启动", retry_count + 1) + logger.warning("第 {} 次尝试启动失败,10秒内未检测到客户端启动", retry_count + 1) - logger.error("紫鸟客户端启动失败,已重试 %s 次", CLIENT_START_RETRIES) + logger.error("紫鸟客户端启动失败,已重试 {} 次", CLIENT_START_RETRIES) raise RuntimeError(f"客户端启动失败:重试 {CLIENT_START_RETRIES} 次后仍未成功启动") def open_shop(self, shop_name: str): @@ -403,12 +422,12 @@ class ZiniaoDriver: Returns: 成功时返回浏览器实例.店铺不存在时返回错误信息. """ - logger.info("开始打开店铺:%s", shop_name) + logger.info("开始打开店铺:{}", shop_name) self.start_client() self.store_id = self._find_store_oauth(self.get_browser_list(), shop_name) if not self.store_id: - logger.warning("店铺不存在:%s", shop_name) + logger.warning("店铺不存在:{}", shop_name) return "店铺不存在" ret_json = self.open_store(self.store_id) @@ -419,16 +438,16 @@ class ZiniaoDriver: self.browser = self.get_browser(ret_json.get("debuggingPort")) ip_check_url = ret_json.get("ipDetectionPage") if not ip_check_url: - logger.error("ip检测页地址为空,准备关闭店铺:%s", shop_name) + logger.error("ip检测页地址为空,准备关闭店铺:{}", shop_name) self.close_store(self.store_id) raise RuntimeError("没有IP检测地址,为了店铺安全不打开店铺") if self.open_ip_check(self.browser, ip_check_url): - logger.info("IP检测通过,打开店铺平台主页:%s", shop_name) + logger.info("IP检测通过,打开店铺平台主页:{}", shop_name) self.open_launcher_page(ret_json.get("launcherPage"), self.browser) return self.browser - logger.error("IP检测不通过,停止打开店铺:%s", shop_name) + logger.error("IP检测不通过,停止打开店铺:{}", shop_name) raise RuntimeError("IP检测不通过,可能是因为网络环境变化导致的,为了店铺安全不打开店铺") def close_store(self, browser_oauth=None): @@ -452,17 +471,17 @@ class ZiniaoDriver: ) request_id = payload["requestId"] - logger.info("开始关闭紫鸟店铺,browserOauth=%s,requestId=%s", browser_oauth, request_id) + logger.info("开始关闭紫鸟店铺,browserOauth={},requestId={}", browser_oauth, request_id) result = self._post_client(payload) status_code = self._status_code(result) if status_code == STATUS_OK: - logger.info("紫鸟店铺关闭成功,browserOauth=%s", browser_oauth) + logger.info("紫鸟店铺关闭成功,browserOauth={}", browser_oauth) return result if status_code == STATUS_LOGIN_FAILED: - logger.error("关闭紫鸟店铺登录失败:%s", self._result_text(result)) - raise RuntimeError(f"[close_store]登录失败 {self._result_text(result)}") + logger.error("关闭紫鸟店铺登录失败:{}", self._result_text(result)) + raise RuntimeError(f"【close_store】登录失败 {self._result_text(result)}") - logger.error("关闭紫鸟店铺失败:%s", self._result_text(result)) + logger.error("关闭紫鸟店铺失败:{}", self._result_text(result)) raise RuntimeError(f"[close_store]失败: {self._result_text(result)} ") def open_launcher_page(self, launcher_page: str, browser: Chromium = None): @@ -475,7 +494,7 @@ class ZiniaoDriver: if browser is None: browser = self.browser - logger.info("打开店铺平台启动页:%s", launcher_page) + logger.info("打开店铺平台启动页:{}", launcher_page) tab = browser.new_tab(url=launcher_page) self.tab = tab return tab @@ -491,7 +510,7 @@ class ZiniaoDriver: IP 检测通过时返回 True,否则返回 False. """ try: - logger.info("开始打开IP检测页:%s", ip_check_url) + logger.info("开始打开IP检测页:{}", ip_check_url) tab = browser.latest_tab tab.get(ip_check_url) success_button = tab.ele( @@ -512,7 +531,7 @@ class ZiniaoDriver: class AmamzonBase(ZiniaoDriver): """亚马逊页面操作基类.""" - def SwitchingCountries(self, country_name: str): + def switch_to_country(self, country_name: str): """切换亚马逊账号国家并验证结果. 流程包括读取当前国家,打开国家下拉框,选择目标国家并等待页面加载. @@ -534,7 +553,7 @@ class AmamzonBase(ZiniaoDriver): logger.warning("无法获取当前国家信息") return False if current_country == country_name: - logger.info("当前已经是目标国家 %s,无需切换", country_name) + logger.info("当前已经是目标国家 {},无需切换", country_name) return True if not self._open_country_dropdown(): @@ -557,7 +576,7 @@ class AmamzonBase(ZiniaoDriver): return None current_country = current_country_ele.text.strip() - logger.info("当前国家:%s", current_country) + logger.info("当前国家:{}", current_country) return current_country def _open_country_dropdown(self) -> bool: @@ -579,10 +598,10 @@ class AmamzonBase(ZiniaoDriver): return True def _select_country(self, country_name: str) -> bool: - logger.info("正在切换到国家:%s", country_name) + logger.info("正在切换到国家:{}", country_name) target_country = self.tab.ele(self._country_option_xpath(country_name), timeout=COUNTRY_CLICK_TIMEOUT) if not target_country: - logger.warning("找不到目标国家:%s", country_name) + logger.warning("找不到目标国家:{}", country_name) return False target_country.click() return True @@ -601,10 +620,10 @@ class AmamzonBase(ZiniaoDriver): logger.warning("无法验证国家切换结果") return False if new_country == country_name: - logger.info("国家切换成功:%s", new_country) + logger.info("国家切换成功:{}", new_country) return True - logger.warning("国家切换失败,当前国家:%s,目标国家:%s", new_country, country_name) + logger.warning("国家切换失败,当前国家:{},目标国家:{}", new_country, country_name) return False def need_login(self): @@ -657,7 +676,7 @@ class AmamzonBase(ZiniaoDriver): def _send_otp_if_present(self) -> bool: send_code = self.tab.eles(OTP_SEND_XPATH, timeout=OTP_SEND_TIMEOUT) - logger.info("发送一次性密码元素数量:%s", len(send_code)) + logger.info("发送一次性密码元素数量:{}", len(send_code)) if len(send_code) == 0: return False @@ -678,7 +697,7 @@ class AmamzonBase(ZiniaoDriver): def _find_otp_input(self): otp_code_input = self.tab.eles(OTP_INPUT_XPATH, timeout=OTP_INPUT_TIMEOUT) - logger.info("验证码输入框数量:%s", len(otp_code_input)) + logger.info("验证码输入框数量:{}", len(otp_code_input)) if len(otp_code_input) == 0: return None @@ -706,7 +725,7 @@ class AmamzonBase(ZiniaoDriver): self.tab.wait.doc_loaded(timeout=OTP_RESULT_LOAD_TIMEOUT, raise_err=False) error_mes = self.tab.eles(OTP_ERROR_XPATH, timeout=OTP_ERROR_TIMEOUT) if len(error_mes) > 0: - logger.warning("验证码输入错误:%s", error_mes[0].text) + logger.warning("验证码输入错误:{}", error_mes[0].text) self.tab.refresh() return False @@ -718,3 +737,4 @@ class AmamzonBase(ZiniaoDriver): if len(submit_btn) > 0: logger.info("点击二次登录提交按钮") submit_btn[0].click() + diff --git a/app/amazon/main.py b/app/amazon/main.py index 36136d7..3dc86fe 100644 --- a/app/amazon/main.py +++ b/app/amazon/main.py @@ -6,10 +6,11 @@ from typing import Dict, Any, List from concurrent.futures import ThreadPoolExecutor, as_completed from config import JSON_TASK_QUEUE, runing_task, runing_shop, DELETE_BRAND_API_BASE, ZN_COMPANY, ZN_USERNAME, ZN_PASSWORD from amazon.del_brand import AmazoneDriver, kill_process -from amazon.approve import ApproveTask -from amazon.match_action import MatchTak -from amazon.price_match import PriceTask -from amazon.asin_status import StatusTask +from amazon.approve import ApproveTask +from amazon.match_action import MatchTak +from amazon.price_match import PriceTask +from amazon.asin_status import StatusTask +from amazon.product import ProductTask from amazon.tool import get_shop_info,show_notification @@ -53,12 +54,13 @@ class TaskMonitor: self.executor = ThreadPoolExecutor(max_workers=self.max_workers) futures = [] # 保存所有提交的任务Future对象 - task_type_info = { - "product-risk-resolve-run" : "产品风险审批", - "shop-match-run" : "匹配价格", - "price-track-run" : "跟价", - "query-asin-run" : "状态查询" - } + task_type_info = { + "product-risk-resolve-run" : "产品风险审批", + "shop-match-run" : "匹配价格", + "price-track-run" : "跟价", + "query-asin-run" : "状态查询", + "patrol-delete-run" : "巡店删除" + } try: while self.running: try: @@ -123,10 +125,11 @@ class TaskMonitor: try: TASK_INFO = { "产品风险审批" : ApproveTask, - "匹配价格" : MatchTak, - "跟价" : PriceTask, - "状态查询" : StatusTask - } + "匹配价格" : MatchTak, + "跟价" : PriceTask, + "状态查询" : StatusTask, + "巡店删除" : ProductTask + } self.log(f"线程 {id(task_data)} 开始处理产品风险审批任务...") # 创建ApproveTask实例并处理任务 TASK_CLS = TASK_INFO[TASK_TYPE] # 根据任务类型选择处理类,默认为ApproveTask diff --git a/app/amazon/product.py b/app/amazon/product.py index 21c0d5d..b598357 100644 --- a/app/amazon/product.py +++ b/app/amazon/product.py @@ -1,11 +1,1678 @@ -from .base import AmamzonBase, UserInfo +import json +import re +import time +from copy import deepcopy +from datetime import datetime +from pathlib import Path +from typing import Any, Dict, Iterable, List, Optional + +import requests +from loguru import logger + +from amazon.base import AmamzonBase, UserInfo, kill_process +from amazon.tool import get_shop_info, show_notification + + +DROPDOWN_OPEN_DELAY = 0.8 +DROPDOWN_OPTIONS_TIMEOUT = 6 +QUICK_VIEW_OPEN_DELAY = 1 +QUICK_VIEW_TAGS_TIMEOUT = 8 +QUICK_VIEW_ENTRY_TIMEOUT = 15 +COMPLETE_DRAFT_PAGE_URL = "https://sellercentral.amazon.co.uk/myinventory/inventory/views/drafts?subview=unsubmitted-drafts" +RECOMMENDED_OFFER_HOME_URL = "https://sellercentral.amazon.co.uk/home" +RECOMMENDED_OFFER_OPEN_DELAY = 1 +RECOMMENDED_OFFER_ROWS_TIMEOUT = 10 +RECOMMENDED_OFFER_COUNTRIES = ["欧洲", "英国", "德国", "法国", "西班牙", "意大利"] +RECOMMENDED_OFFER_EXPAND_XPATHS = [ + 'xpath://div[@data-key="KPI_CARD_BUYBOX"]//casino-button[@data-actionname="expand"]', + 'xpath://casino-card[@id="KPI_CARD_BUYBOX"]//casino-button[@data-actionname="expand"]', + 'xpath://div[@data-key="KPI_CARD_BUYBOX"]//*[@aria-label="chevron-down"]', +] + + +SCRIPT_DIR = Path(__file__).with_name("scripts") / "product" + + +def _load_product_script(name: str) -> str: + return (SCRIPT_DIR / name).read_text(encoding="utf-8") + + +LISTING_STATUS_DROPDOWN_DEBUG_SCRIPT = _load_product_script("listing_status_dropdown_debug.js") +LISTING_STATUS_DROPDOWN_OPEN_SCRIPT = _load_product_script("listing_status_dropdown_open.js") +LISTING_STATUS_DROPDOWN_OPTIONS_SCRIPT = _load_product_script("listing_status_dropdown_options.js") +LISTING_STATUS_CLICK_VISIBLE_STATUS_SCRIPT = _load_product_script("listing_status_click_visible_status.js") +LISTING_STATUS_SELECT_OPTION_SCRIPT = _load_product_script("listing_status_select_option.js") +LISTING_STATUS_SECTION_SCRIPT = _load_product_script("listing_status_section.js") +COMPLETE_DRAFT_QUICK_VIEW_DEBUG_SCRIPT = _load_product_script("complete_draft_quick_view_debug.js") +COMPLETE_DRAFT_QUICK_VIEW_TAGS_SCRIPT = _load_product_script("complete_draft_quick_view_tags.js") +COMPLETE_DRAFT_QUICK_VIEW_DIAGNOSTIC_SCRIPT = _load_product_script("complete_draft_quick_view_diagnostic.js") +RECOMMENDED_OFFER_PERCENTAGE_OPEN_SCRIPT = _load_product_script("recommended_offer_percentage_open.js") +RECOMMENDED_OFFER_PERCENTAGE_ROWS_SCRIPT = _load_product_script("recommended_offer_percentage_rows.js") +RECOMMENDED_OFFER_PERCENTAGE_DIAGNOSTIC_SCRIPT = _load_product_script("recommended_offer_percentage_diagnostic.js") + +LISTING_STATUS_SELECT_DELAY = 0.8 +INVENTORY_ROW_TIMEOUT = 10 +INVENTORY_LOADER_TIMEOUT = 5 +DELETE_SUCCESS_TIMEOUT = 8 +PRODUCT_TASK_MAX_RETRIES = 3 +PRODUCT_TASK_RETRY_DELAY = 2 +PRODUCT_TASK_OPEN_SHOP_DELAY = 3 +PRODUCT_TASK_BROWSER_RESET_DELAY = 2 +PRODUCT_TASK_MAX_UNCHANGED_CANDIDATE_ROUNDS = 3 +DELETE_SUCCESS_MESSAGE_PARTS = ( + re.compile(r"\d+\s*个商品(?:已删除|已经删除)"), + re.compile(r"所[作做]更改需要\s*15\s*分钟才会显示在商品详情页面上"), +) +LISTING_STATUS_DELETE_WHITELIST = { + "全部", + "定价问题", + "需要批准", + "在搜索结果中禁止显示", + "配送问题", + "缺少报价", + "已停售", + "不可售", + "在售", +} +LISTING_STATUS_COMPATIBILITY_MAP = { + "搜尋結果中禁止顯示": "在搜索结果中禁止显示", + "搜索结果中禁止显示": "在搜索结果中禁止显示", + "在搜索中禁止显示结果": "在搜索结果中禁止显示", + "配送問題": "配送问题", + "缺少報價": "缺少报价", + "订单页面已删除": "详情页面已删除", +} + + +class InventoryManage(AmamzonBase): + mark_name = "管理所有库存" + + def switch_to_manage_inventory(self): + """ + 切换至管理所有库存页面 + 1、等待 //navigation-favorites-bar[@class="hydrated"] 出现 + """ + navigation = self.tab.ele('xpath://navigation-favorites-bar[@class="hydrated"]') + navigation.wait.displayed(raise_err=False) + page_btn = navigation.sr('xpath://internal-fav-bar-links[@data-internal="navigation"]').sr( + 'xpath://a[@data-page-id="ezdpc-gui-inventory-mons"]' + ) + page_btn.wait.displayed(raise_err=False) + page_btn.click(timeout=5) + + self.tab.wait.doc_loaded() + search_region = self.tab.ele('xpath://div[@id="searchBoxContainer"]//kat-input-group') + search_region.wait.displayed(raise_err=False) + + def debug_dump_listing_status_dropdown(self) -> List[Dict[str, Any]]: + """打印商品状态下拉框候选 DOM,供现场确认真实页面结构。""" + self.tab.wait.doc_loaded(raise_err=False) + candidates = self._run_js(LISTING_STATUS_DROPDOWN_DEBUG_SCRIPT) or [] + logger.info("商品状态下拉框候选 DOM:\n{}", json.dumps(candidates, ensure_ascii=False, indent=2)) + return candidates + + def open_listing_status_dropdown(self) -> Dict[str, Any]: + """只打开实测识别出的商品状态下拉框,不点击任何选项。""" + self.tab.wait.doc_loaded(raise_err=False) + result = self._run_js(LISTING_STATUS_DROPDOWN_OPEN_SCRIPT) or {} + if not result.get("ok"): + raise RuntimeError(f"未找到商品状态下拉框: {result}") + time.sleep(DROPDOWN_OPEN_DELAY) + return result + + def get_listing_status_dropdown_options(self, shop_name: str, country: str) -> List[Dict[str, Any]]: + """读取商品状态下拉框展开区域中的选项。""" + open_result = self.open_listing_status_dropdown() + option_rows = self._wait_listing_status_option_rows() + parsed_rows = self._parse_status_option_rows(option_rows, shop_name, country) + if not parsed_rows: + raise RuntimeError(f"商品状态下拉框已打开但未读取到选项: {open_result}") + return parsed_rows + + def print_listing_status_json(self, shop_name: str, country: str) -> List[Dict[str, Any]]: + data = {"countrySections": self.get_listing_status_country_sections(shop_name, country)} + logger.info("商品状态 JSON:\n{}", json.dumps(data, ensure_ascii=False, indent=2)) + return data["countrySections"] + + def debug_dump_complete_draft_quick_view(self) -> List[Dict[str, Any]]: + """打印补全草稿快速查看候选 DOM,供现场确认真实页面结构。""" + self.tab.wait.doc_loaded(raise_err=False) + candidates = self._run_js(COMPLETE_DRAFT_QUICK_VIEW_DEBUG_SCRIPT) or [] + logger.info("补全草稿快速查看候选 DOM:\n{}", json.dumps(candidates, ensure_ascii=False, indent=2)) + return candidates + + def debug_dump_complete_draft_diagnostics(self) -> Dict[str, Any]: + """打印补全草稿相关 DOM 和资源 URL,避免输出整页商品列表。""" + self.tab.wait.doc_loaded(raise_err=False) + diagnostics = self._run_js(COMPLETE_DRAFT_QUICK_VIEW_DIAGNOSTIC_SCRIPT) or {} + logger.info("补全草稿快速查看诊断信息:\n{}", json.dumps(diagnostics, ensure_ascii=False, indent=2)) + return diagnostics + + def open_complete_draft_quick_view(self) -> Dict[str, Any]: + """直接打开补全草稿页面。""" + if self.tab is None: + raise RuntimeError("浏览器页面不存在,请先打开店铺") + self.tab.get(COMPLETE_DRAFT_PAGE_URL) + self.tab.wait.doc_loaded(raise_err=False) + time.sleep(QUICK_VIEW_OPEN_DELAY) + return {"ok": True, "url": COMPLETE_DRAFT_PAGE_URL, "title": getattr(self.tab, "title", "")} + + def get_complete_draft_quick_view_tags(self, shop_name: str, country: str) -> List[Dict[str, Any]]: + """读取补全草稿快速查看区域中的全部“标签 + 数量”项。""" + open_result = self.open_complete_draft_quick_view() + tag_rows = self._wait_complete_draft_quick_view_tag_rows() + parsed_rows = self._parse_quick_view_tag_rows(tag_rows, shop_name, country) + if not parsed_rows: + raise RuntimeError(f"补全草稿快速查看已打开但未读取到标签: {open_result}") + return parsed_rows + + def print_complete_draft_quick_view_json(self, shop_name: str, country: str) -> List[Dict[str, Any]]: + data = self.get_complete_draft_quick_view_tags(shop_name, country) + logger.info("补全草稿快速查看标签 JSON:\n{}", json.dumps(data, ensure_ascii=False, indent=2)) + return data + + def open_recommended_offer_percentage_detail(self) -> Dict[str, Any]: + """打开 Seller Central 首页中的推荐报价百分比明细。""" + if self.tab is None: + raise RuntimeError("浏览器页面不存在,请先打开店铺") + self.tab.get(RECOMMENDED_OFFER_HOME_URL) + self.tab.wait.doc_loaded(raise_err=False) + result = self._open_recommended_offer_percentage_detail_with_driver() + if not result.get("ok"): + result = self._run_js(RECOMMENDED_OFFER_PERCENTAGE_OPEN_SCRIPT) or {} + if not result.get("ok"): + raise RuntimeError(f"未找到推荐报价百分比入口: {result}") + time.sleep(RECOMMENDED_OFFER_OPEN_DELAY) + return result + + def get_recommended_offer_cart_ratios(self) -> Dict[str, List[Dict[str, str]]]: + """打开一次推荐报价百分比下拉,读取全部目标商城的明细。""" + open_result = self.open_recommended_offer_percentage_detail() + rows = self._wait_recommended_offer_percentage_rows() + cart_ratios = self._parse_all_cart_ratio_rows(rows) + + incomplete = [item["country"] for item in cart_ratios if not item["ratio2DaysAgo"] or not item["ratio30DaysAgo"]] + if incomplete: + logger.info( + "推荐报价百分比未完整读取: countries={}, open_result={}, rows={}", + ",".join(incomplete), + json.dumps(open_result, ensure_ascii=False), + json.dumps(rows, ensure_ascii=False), + ) + + return {"cartRatios": cart_ratios} + + def print_recommended_offer_cart_ratios_json(self) -> Dict[str, List[Dict[str, str]]]: + data = self.get_recommended_offer_cart_ratios() + logger.info("推荐报价百分比明细 JSON:\n{}", json.dumps(data, ensure_ascii=False, indent=2)) + return data + + def debug_dump_recommended_offer_percentage_diagnostics(self) -> Dict[str, Any]: + diagnostics = self._run_js(RECOMMENDED_OFFER_PERCENTAGE_DIAGNOSTIC_SCRIPT) or {} + compact = { + "url": diagnostics.get("url"), + "title": diagnostics.get("title"), + "buyBoxFound": diagnostics.get("buyBoxFound"), + "buyBoxLeafMatches": diagnostics.get("buyBoxLeafMatches") or [], + } + logger.info("推荐报价百分比诊断信息:\n{}", json.dumps(compact, ensure_ascii=False, indent=2)) + return diagnostics + + def _wait_listing_status_option_rows(self) -> List[Dict[str, Any]]: + deadline = time.time() + DROPDOWN_OPTIONS_TIMEOUT + rows = [] + while time.time() < deadline: + rows = self._run_js(LISTING_STATUS_DROPDOWN_OPTIONS_SCRIPT) or [] + if rows: + return rows + time.sleep(0.3) + return rows + + def get_listing_status_country_sections(self, shop_name: str, country: str) -> List[Dict[str, Any]]: + rows = self._wait_listing_status_section_rows() + parsed_rows = self._parse_listing_status_section_rows(rows) + if not parsed_rows: + raise RuntimeError(f"未读取到商品状态统计标签: {rows}") + return [{"country": country, "rows": self._build_country_section_rows(parsed_rows)}] + + def delete_one_listing_from_non_whitelisted_statuses( + self, shop_name: str, country: str, max_delete_count: int = 1 + ) -> Dict[str, Any]: + country_sections = self.get_listing_status_country_sections(shop_name, country) + status_rows = country_sections[0].get("rows") if country_sections else [] + delete_candidates = self._build_deletable_status_rows(status_rows) + if not delete_candidates: + raise RuntimeError(f"商品状态中未找到可删除分类: {json.dumps(status_rows, ensure_ascii=False)}") + + delete_plan = self._limit_delete_candidates(delete_candidates, max_delete_count=max_delete_count) + if not delete_plan: + raise RuntimeError(f"删除计划为空: max_delete_count={max_delete_count}") + + results = [] + for candidate in delete_plan: + self.select_listing_status(candidate["status"]) + row = self._get_first_inventory_row(candidate["status"]) + target = self._summarize_inventory_row(row) + success_message = self._delete_inventory_row(row, candidate["status"]) + results.append( + { + "status": candidate["status"], + "canonicalStatus": candidate["canonicalStatus"], + "statusQuantity": candidate["quantity"], + "target": target, + "successMessage": success_message, + } + ) + + return { + "shopName": shop_name, + "country": country, + "statusRows": status_rows, + "deleteCandidates": delete_candidates, + "deletePlan": delete_plan, + "results": results, + } + + def delete_all_listings_from_non_whitelisted_statuses( + self, + shop_name: str, + country: str, + max_delete_operations: Optional[int] = None, + ) -> Dict[str, Any]: + """循环删除非白名单分类商品,直到当前国家没有可删项。""" + all_results: List[Dict[str, Any]] = [] + delete_counts: Dict[str, int] = {} + latest_status_rows: List[Dict[str, str]] = [] + latest_delete_candidates: List[Dict[str, Any]] = [] + previous_signature: Optional[tuple] = None + unchanged_candidate_rounds = 0 + total_deleted = 0 + stop_reason = "no-candidates" + + while True: + country_sections = self.get_listing_status_country_sections(shop_name, country) + latest_status_rows = deepcopy(country_sections[0].get("rows") if country_sections else []) + latest_delete_candidates = self._build_deletable_status_rows(latest_status_rows) + if not latest_delete_candidates: + stop_reason = "no-candidates" + break + + candidate_signature = tuple( + (item["canonicalStatus"], item["quantity"]) for item in latest_delete_candidates + ) + if candidate_signature == previous_signature: + unchanged_candidate_rounds += 1 + if unchanged_candidate_rounds >= PRODUCT_TASK_MAX_UNCHANGED_CANDIDATE_ROUNDS: + raise RuntimeError( + f"国家[{country}]删除后商品状态统计未变化,停止重试: " + f"{json.dumps(latest_delete_candidates, ensure_ascii=False)}" + ) + else: + unchanged_candidate_rounds = 0 + previous_signature = candidate_signature + + candidate = latest_delete_candidates[0] + self.select_listing_status(candidate["status"]) + row = self._get_first_inventory_row(candidate["status"]) + target = self._summarize_inventory_row(row) + success_message = self._delete_inventory_row(row, candidate["status"]) + + result = { + "status": candidate["status"], + "canonicalStatus": candidate["canonicalStatus"], + "statusQuantity": candidate["quantity"], + "target": target, + "successMessage": success_message, + } + all_results.append(result) + delete_counts[candidate["canonicalStatus"]] = delete_counts.get(candidate["canonicalStatus"], 0) + 1 + total_deleted += 1 + + if max_delete_operations is not None and total_deleted >= max_delete_operations: + stop_reason = "max-delete-operations" + break + + self._wait_inventory_loader() + + final_country_sections = self.get_listing_status_country_sections(shop_name, country) + final_status_rows = deepcopy(final_country_sections[0].get("rows") if final_country_sections else latest_status_rows) + + return { + "shopName": shop_name, + "country": country, + "statusRows": final_status_rows, + "deleteCandidates": latest_delete_candidates, + "results": all_results, + "deleteCounts": delete_counts, + "totalDeleted": total_deleted, + "stopReason": stop_reason, + } + + def select_listing_status(self, status: str) -> Dict[str, Any]: + normalized_status = self._normalize_option_text(status) + if not normalized_status: + raise RuntimeError("商品状态为空,无法执行筛选") + + direct_result = self._click_visible_listing_status(normalized_status) + if direct_result.get("ok"): + time.sleep(LISTING_STATUS_SELECT_DELAY) + self._wait_inventory_loader() + return {"mode": "visible-status", **direct_result} + + self.open_listing_status_dropdown() + script = f"const __crawlerPayload = {json.dumps({'status': normalized_status}, ensure_ascii=False)};\n{LISTING_STATUS_SELECT_OPTION_SCRIPT}" + result = self._run_js(script) or {} + if not result.get("ok"): + raise RuntimeError(f"未找到商品状态选项[{normalized_status}]: {result}") + time.sleep(LISTING_STATUS_SELECT_DELAY) + self._wait_inventory_loader() + return {"mode": "dropdown-option", **result} + + def _click_visible_listing_status(self, status: str) -> Dict[str, Any]: + script = ( + f"const __crawlerPayload = {json.dumps({'status': status}, ensure_ascii=False)};\n" + f"{LISTING_STATUS_CLICK_VISIBLE_STATUS_SCRIPT}" + ) + return self._run_js(script) or {} + + def _wait_inventory_loader(self, timeout: int = INVENTORY_LOADER_TIMEOUT) -> None: + try: + loader = self.tab.ele("xpath://div[contains(@class,'Loader-module__loader')]", timeout=1) + except Exception: + loader = None + if loader: + loader.wait.deleted(timeout=timeout, raise_err=False) + time.sleep(0.5) + + def _get_first_inventory_row(self, status: str): + deadline = time.time() + INVENTORY_ROW_TIMEOUT + while time.time() < deadline: + self._wait_inventory_loader(timeout=2) + rows = self.tab.eles("xpath://div[@data-sku]", timeout=2) + if rows: + return rows[0] + time.sleep(0.4) + raise RuntimeError(f"状态[{status}]筛选后未找到商品行") + + @classmethod + def _summarize_inventory_row(cls, row) -> Dict[str, str]: + sku = "" + text = "" + try: + sku = row.attr("data-sku") or "" + except Exception: + sku = "" + try: + text = cls._normalize_option_text(getattr(row, "text", "") or "") + except Exception: + text = "" + return {"sku": sku, "rawText": text[:400]} + + def _delete_inventory_row(self, row, status: str) -> str: + try: + dropdown = row.ele('xpath:.//kat-dropdown-button[@variant="secondary"]', timeout=5) + except Exception: + dropdown = None + if not dropdown: + raise RuntimeError(f"状态[{status}]商品行缺少三点菜单") + + dropdown.click() + time.sleep(1) + + try: + delete_button = dropdown.sr("xpath:.//button[@role='menuitem' and @data-action='DeleteListing']") + except Exception: + delete_button = None + if not delete_button: + raise RuntimeError(f"状态[{status}]三点菜单中未找到“删除商品信息”按钮") + + delete_button.wait.displayed(raise_err=False) + delete_button.click() + + confirm_button = self.tab.ele( + 'xpath://kat-modal[@data-testid="action-modal"]//kat-button[@variant="primary"]', + timeout=5, + ) + if not confirm_button: + raise RuntimeError(f"状态[{status}]未出现删除确认弹窗") + + confirm_button.wait.displayed(raise_err=False) + confirm_button.wait.enabled() + confirm_button.click() + return self._wait_delete_success_message(status) + + def _wait_delete_success_message(self, status: str) -> str: + deadline = time.time() + DELETE_SUCCESS_TIMEOUT + seen_messages = [] + while time.time() < deadline: + alerts = self.tab.eles("xpath://kat-alert[@variant='success' and not(@dismissed)]", timeout=2) + for alert in alerts: + text = self._extract_alert_text(alert) + if not text: + continue + if text not in seen_messages: + seen_messages.append(text) + if self._is_delete_success_message(text): + return text + time.sleep(0.3) + raise RuntimeError(f"状态[{status}]删除后未读取到成功提示: {seen_messages}") + + @classmethod + def _extract_alert_text(cls, alert) -> str: + parts = [] + try: + text = cls._normalize_option_text(getattr(alert, "text", "") or "") + if text: + parts.append(text) + except Exception: + pass + + for attr_name in ("description", "text", "label", "header"): + try: + value = cls._normalize_option_text(alert.attr(attr_name) or "") + except Exception: + value = "" + if value and value not in parts: + parts.append(value) + + return " ".join(parts).strip() + + @staticmethod + def _is_delete_success_message(text: str) -> bool: + normalized = re.sub(r"\s+", "", text or "") + return all(pattern.search(normalized) for pattern in DELETE_SUCCESS_MESSAGE_PARTS) + + def _wait_complete_draft_quick_view_tag_rows(self) -> List[Dict[str, Any]]: + deadline = time.time() + QUICK_VIEW_TAGS_TIMEOUT + rows = [] + last_result: Dict[str, Any] = {} + while time.time() < deadline: + result = self._run_js(COMPLETE_DRAFT_QUICK_VIEW_TAGS_SCRIPT) or {} + last_result = result + rows = result.get("rows") or [] + if rows: + return rows + time.sleep(0.3) + diagnostics = self._run_js(COMPLETE_DRAFT_QUICK_VIEW_DIAGNOSTIC_SCRIPT) or {} + logger.info("补全草稿快速查看未读取到标签,最后一次 DOM 探测:\n{}", json.dumps(last_result, ensure_ascii=False, indent=2)) + logger.info("补全草稿快速查看诊断信息:\n{}", json.dumps(diagnostics, ensure_ascii=False, indent=2)) + return rows + + def _wait_recommended_offer_percentage_rows(self) -> List[Dict[str, Any]]: + deadline = time.time() + RECOMMENDED_OFFER_ROWS_TIMEOUT + rows = [] + last_result: Dict[str, Any] = {} + while time.time() < deadline: + result = self._run_js(RECOMMENDED_OFFER_PERCENTAGE_ROWS_SCRIPT) or {} + last_result = result + rows = list(result.get("rows") or []) + if self._has_complete_cart_ratio_rows(rows): + return rows + time.sleep(0.3) + logger.info("推荐报价百分比明细未读取到目标日期,最后一次 DOM 探测:\n{}", json.dumps(last_result, ensure_ascii=False, indent=2)) + diagnostics = self._run_js(RECOMMENDED_OFFER_PERCENTAGE_DIAGNOSTIC_SCRIPT) or {} + compact = { + "url": diagnostics.get("url"), + "title": diagnostics.get("title"), + "buyBoxFound": diagnostics.get("buyBoxFound"), + "buyBoxLeafMatches": diagnostics.get("buyBoxLeafMatches") or [], + } + logger.info("推荐报价百分比诊断信息:\n{}", json.dumps(compact, ensure_ascii=False, indent=2)) + return rows + + def _run_js(self, script: str): + if self.tab is None: + raise RuntimeError("浏览器页面不存在,请先打开店铺并进入管理所有库存页面") + if hasattr(self.tab, "run_js"): + return self.tab.run_js(script) + if hasattr(self.tab, "run_js_loaded"): + return self.tab.run_js_loaded(script) + raise RuntimeError("当前页面对象不支持执行 JavaScript,无法探测 Shadow DOM") + + def _open_recommended_offer_percentage_detail_with_driver(self) -> Dict[str, Any]: + if self.tab is None: + return {"ok": False, "reason": "tab missing"} + + for xpath in RECOMMENDED_OFFER_EXPAND_XPATHS: + try: + button = self.tab.ele(xpath, timeout=3) + except Exception as exc: + logger.info("定位推荐报价展开按钮失败: xpath={}, error={}", xpath, exc) + button = None + if not button: + continue + + try: + button.click() + return {"ok": True, "source": "driver", "xpath": xpath} + except Exception as exc: + logger.info("点击推荐报价展开按钮失败: xpath={}, error={}", xpath, exc) + + return {"ok": False, "reason": "expand button not found by driver"} + + def _wait_listing_status_section_rows(self) -> List[Dict[str, Any]]: + deadline = time.time() + DROPDOWN_OPTIONS_TIMEOUT + rows = [] + while time.time() < deadline: + result = self._run_js(LISTING_STATUS_SECTION_SCRIPT) or {} + rows = result.get("rows") or [] + if self._has_listing_status_rows(rows): + return rows + time.sleep(0.3) + return rows + + @staticmethod + def _has_listing_status_rows(rows: Iterable[Dict[str, Any]]) -> bool: + parsed_rows = [row for row in rows if (row.get("status") or "").strip()] + quantity_count = sum(1 for row in parsed_rows if str(row.get("quantity") or "").strip()) + return len(parsed_rows) >= 3 and quantity_count >= 2 + + @classmethod + def _parse_status_option_rows( + cls, option_rows: Iterable[Dict[str, Any]], shop_name: str, country: str + ) -> List[Dict[str, Any]]: + rows = [] + for option in option_rows: + raw_text = cls._normalize_option_text(option.get("raw_text") or "") + value = option.get("value") + if not raw_text and not value: + continue + + status, quantity = cls._parse_status_text(raw_text or str(value)) + if not status: + continue + + rows.append( + { + "shop_name": shop_name, + "country": country, + "status": status, + "quantity": quantity, + "value": value, + "raw_text": raw_text, + } + ) + return rows + + @classmethod + def _parse_listing_status_section_rows(cls, rows: Iterable[Dict[str, Any]]) -> List[Dict[str, Any]]: + parsed_rows = [] + seen = set() + + for row in rows: + status = cls._normalize_option_text(row.get("status") or "") + quantity = cls._normalize_quantity_text(row.get("quantity")) + raw_text = cls._normalize_option_text(row.get("raw_text") or "") + + if not status and raw_text: + for item in cls._extract_listing_status_rows_from_text(raw_text): + key = (item["status"], item["quantity"]) + if key in seen: + continue + seen.add(key) + parsed_rows.append(item) + continue + + if not status: + continue + + key = (status, quantity) + if key in seen: + continue + seen.add(key) + parsed_rows.append({"status": status, "quantity": quantity, "raw_text": raw_text or status}) + + return parsed_rows + + @classmethod + def _extract_listing_status_rows_from_text(cls, raw_text: str) -> List[Dict[str, Any]]: + text = cls._normalize_option_text(raw_text) + if not text: + return [] + + pattern = re.compile( + r"(全部|在搜索结果中禁止显示|配送问题|缺少报价|已停售|详情页面已删除|订单页面已删除|商品信息草稿|缺少的信息|定价问题|需要批准|不可售|在售)" + r"\s*(?:[((]\s*([\d,]+)\s*[))])?" + ) + rows = [] + for match in pattern.finditer(text): + rows.append( + { + "status": match.group(1).strip(), + "quantity": cls._normalize_quantity_text(match.group(2)), + "raw_text": cls._normalize_option_text(match.group(0)), + } + ) + return rows + + @staticmethod + def _normalize_quantity_text(quantity: Any) -> str: + if quantity is None: + return "" + text = re.sub(r"[^\d,]", "", str(quantity)) + return text.replace(",", "") + + @classmethod + def _build_country_section_rows(cls, rows: Iterable[Dict[str, Any]]) -> List[Dict[str, str]]: + return [ + { + "status": cls._normalize_option_text(row.get("status") or ""), + "quantity": cls._normalize_quantity_text(row.get("quantity")), + "deleteQuantity": "", + "processStatus": "", + } + for row in rows + if cls._normalize_option_text(row.get("status") or "") + ] + + @classmethod + def _build_deletable_status_rows(cls, rows: Iterable[Dict[str, Any]]) -> List[Dict[str, Any]]: + candidates = [] + for row in rows: + status = cls._normalize_option_text(row.get("status") or "") + if not status: + continue + + quantity_text = cls._normalize_quantity_text(row.get("quantity")) + quantity = int(quantity_text) if quantity_text else 0 + canonical_status = cls._canonical_listing_status(status) + if quantity <= 0 or canonical_status in LISTING_STATUS_DELETE_WHITELIST: + continue + + candidates.append( + { + "status": status, + "canonicalStatus": canonical_status, + "quantity": quantity, + } + ) + return candidates + + @staticmethod + def _limit_delete_candidates(candidates: Iterable[Dict[str, Any]], max_delete_count: int = 1) -> List[Dict[str, Any]]: + if max_delete_count <= 0: + return [] + return list(candidates)[:max_delete_count] + + @classmethod + def _canonical_listing_status(cls, status: str) -> str: + normalized = cls._normalize_option_text(status) + return LISTING_STATUS_COMPATIBILITY_MAP.get(normalized, normalized) + + @staticmethod + def _normalize_option_text(text: str) -> str: + return re.sub(r"\s+", " ", text).strip() + + @staticmethod + def _parse_status_text(raw_text: str) -> tuple[str, Optional[int]]: + text = re.sub(r"\s+", " ", raw_text).strip() + if not text: + return "", None + + match = re.search(r"^(.*?)\s*[((]\s*([\d,]+)\s*[))]\s*$", text) + if match: + return match.group(1).strip(), int(match.group(2).replace(",", "")) + + match = re.search(r"^(.*?)\s+([\d,]+)\s*$", text) + if match and not re.search(r"\d", match.group(1)): + return match.group(1).strip(), int(match.group(2).replace(",", "")) + + return text, None + + @classmethod + def _parse_quick_view_tag_rows( + cls, rows: Iterable[Dict[str, Any]], shop_name: str, country: str + ) -> List[Dict[str, Any]]: + parsed_rows = [] + seen = set() + + for row in rows: + raw_text = cls._normalize_option_text(row.get("raw_text") or "") + label_text = cls._normalize_option_text(row.get("label_text") or "") + quantity_text = cls._normalize_option_text(str(row.get("quantity_text") or "")) + + parsed = cls._parse_label_quantity_text(raw_text) + if parsed is None and label_text and quantity_text: + parsed = cls._parse_label_quantity_text(f"{label_text} ({quantity_text})") + if parsed is None: + continue + + tag, quantity = parsed + if not cls._is_complete_draft_tag_candidate(tag): + continue + key = (tag, quantity) + if key in seen: + continue + seen.add(key) + + parsed_rows.append( + { + "shop_name": shop_name, + "country": country, + "tag": tag, + "quantity": quantity, + "raw_text": raw_text or f"{label_text} ({quantity_text})", + } + ) + + return parsed_rows + + @staticmethod + def _is_complete_draft_tag_candidate(tag: str) -> bool: + normalized_tag = re.sub(r"\s+", " ", tag).strip() + if not normalized_tag: + return False + if normalized_tag == "补全草稿": + return False + if "/" in normalized_tag: + return False + if re.search(r"\b页面\b", normalized_tag): + return False + return True + + @staticmethod + def _parse_label_quantity_text(raw_text: str) -> Optional[tuple[str, int]]: + text = re.sub(r"\s+", " ", raw_text).strip() + if not text: + return None + + match = re.search(r"^(.*?)\s*[((]\s*([\d,]+)\s*[))]\s*$", text) + if not match: + return None + + tag = match.group(1).strip() + if not tag or re.fullmatch(r"[\d,]+", tag): + return None + if re.search(r"[((]\s*[\d,]+\s*[))]", tag): + return None + + return tag, int(match.group(2).replace(",", "")) + + @classmethod + def _parse_cart_ratio_rows(cls, rows: Iterable[Dict[str, Any]], country: str) -> Dict[str, str]: + ratio = cls._empty_cart_ratio(country) + texts = cls._cart_ratio_texts(rows) + + for text in texts: + if not ratio["ratio2DaysAgo"]: + ratio["ratio2DaysAgo"] = cls._extract_ratio_for_days(text, 2) + if not ratio["ratio30DaysAgo"]: + ratio["ratio30DaysAgo"] = cls._extract_ratio_for_days(text, 30) + if ratio["ratio2DaysAgo"] and ratio["ratio30DaysAgo"]: + return ratio + + combined_text = " ".join(texts) + if not ratio["ratio2DaysAgo"]: + ratio["ratio2DaysAgo"] = cls._extract_ratio_for_days(combined_text, 2) + if not ratio["ratio30DaysAgo"]: + ratio["ratio30DaysAgo"] = cls._extract_ratio_for_days(combined_text, 30) + return ratio + + @classmethod + def _parse_all_cart_ratio_rows(cls, rows: Iterable[Dict[str, Any]]) -> List[Dict[str, str]]: + rect_rows = cls._parse_rect_based_cart_ratio_rows(rows) + if rect_rows: + return rect_rows + + direct_rows = cls._parse_direct_cart_ratio_rows(rows) + if direct_rows: + return direct_rows + + texts = cls._cart_ratio_texts(rows) + combined_text = cls._normalize_option_text(" ".join(texts)) + return [cls._parse_country_cart_ratio(texts, combined_text, country) for country in RECOMMENDED_OFFER_COUNTRIES] + + @classmethod + def _parse_rect_based_cart_ratio_rows(cls, rows: Iterable[Dict[str, Any]]) -> List[Dict[str, str]]: + countries = [] + percentages = [] + + for row in rows: + attrs = row.get("attrs") or {} + candidate = str( + attrs.get("title") + or row.get("label_text") + or row.get("raw_text") + or "" + ).strip() + if not candidate or len(candidate) > 20: + continue + + left = row.get("rect_left") + top = row.get("rect_top") + width = row.get("rect_width") + height = row.get("rect_height") + if not all(isinstance(value, (int, float)) for value in (left, top, width, height)): + continue + if width <= 0 or height <= 0: + continue + + country_match = next( + ( + target + for target in RECOMMENDED_OFFER_COUNTRIES + if any(candidate.lower() == alias.lower() for alias in cls._country_aliases(target)) + ), + None, + ) + if country_match: + countries.append( + { + "country": country_match, + "x": float(left), + "y": float(top) + float(height) / 2, + "h": float(height), + "area": float(width) * float(height), + } + ) + continue + + if re.fullmatch(r"\d+(?:\.\d+)?\s*%", candidate): + percentages.append( + { + "value": cls._normalize_ratio_text(candidate), + "x": float(left), + "y": float(top) + float(height) / 2, + "area": float(width) * float(height), + } + ) + + if not countries or not percentages: + return [] + + deduped_countries = [] + for item in sorted(countries, key=lambda row: (row["y"], row["x"], row["area"])): + exists = any( + row["country"] == item["country"] and abs(row["y"] - item["y"]) < 8 + for row in deduped_countries + ) + if not exists: + deduped_countries.append(item) + + parsed = [] + for row in deduped_countries: + row_y_tolerance = max(12.0, min(24.0, row["h"] / 2 + 4.0)) + same_row = sorted( + ( + item + for item in percentages + if item["x"] > row["x"] + 20 and abs(item["y"] - row["y"]) <= row_y_tolerance + ), + key=lambda item: (item["x"], item["y"], item["area"]), + ) + + unique = [] + for item in same_row: + if not any(abs(existing["x"] - item["x"]) < 24 for existing in unique): + unique.append(item) + + parsed.append( + { + "country": row["country"], + "ratio2DaysAgo": unique[0]["value"] if len(unique) >= 1 else "", + "ratio30DaysAgo": unique[1]["value"] if len(unique) >= 2 else "", + } + ) + + if not any(item["ratio2DaysAgo"] or item["ratio30DaysAgo"] for item in parsed): + return [] + + by_country = {item["country"]: item for item in parsed} + return [by_country.get(country, cls._empty_cart_ratio(country)) for country in RECOMMENDED_OFFER_COUNTRIES] + + @classmethod + def _parse_direct_cart_ratio_rows(cls, rows: Iterable[Dict[str, Any]]) -> List[Dict[str, str]]: + by_country: Dict[str, Dict[str, str]] = {} + for row in rows: + country = str(row.get("country") or "").strip() + if country not in RECOMMENDED_OFFER_COUNTRIES: + continue + + ratio = by_country.setdefault(country, cls._empty_cart_ratio(country)) + ratio2 = cls._normalize_ratio_text(str(row.get("ratio2DaysAgo") or "")) if row.get("ratio2DaysAgo") else "" + ratio30 = cls._normalize_ratio_text(str(row.get("ratio30DaysAgo") or "")) if row.get("ratio30DaysAgo") else "" + if ratio2 and not ratio["ratio2DaysAgo"]: + ratio["ratio2DaysAgo"] = ratio2 + if ratio30 and not ratio["ratio30DaysAgo"]: + ratio["ratio30DaysAgo"] = ratio30 + + if not by_country: + return [] + return [by_country.get(country, cls._empty_cart_ratio(country)) for country in RECOMMENDED_OFFER_COUNTRIES] + + @classmethod + def _parse_country_cart_ratio(cls, texts: List[str], combined_text: str, country: str) -> Dict[str, str]: + ratio = cls._empty_cart_ratio(country) + + for text in texts: + segment = cls._extract_country_segment(text, country) + if not segment: + continue + if not ratio["ratio2DaysAgo"]: + ratio["ratio2DaysAgo"] = cls._extract_ratio_for_days(segment, 2) + if not ratio["ratio30DaysAgo"]: + ratio["ratio30DaysAgo"] = cls._extract_ratio_for_days(segment, 30) + if ratio["ratio2DaysAgo"] and ratio["ratio30DaysAgo"]: + return ratio + + segment = cls._extract_country_segment(combined_text, country) + if segment: + if not ratio["ratio2DaysAgo"]: + ratio["ratio2DaysAgo"] = cls._extract_ratio_for_days(segment, 2) + if not ratio["ratio30DaysAgo"]: + ratio["ratio30DaysAgo"] = cls._extract_ratio_for_days(segment, 30) + if not ratio["ratio2DaysAgo"] or not ratio["ratio30DaysAgo"]: + header_ratio = cls._extract_ratio_pair_from_country_table(segment, combined_text) + if not ratio["ratio2DaysAgo"]: + ratio["ratio2DaysAgo"] = header_ratio["ratio2DaysAgo"] + if not ratio["ratio30DaysAgo"]: + ratio["ratio30DaysAgo"] = header_ratio["ratio30DaysAgo"] + return ratio + + @classmethod + def _extract_country_segment(cls, text: str, country: str) -> str: + normalized = cls._normalize_option_text(text) + if not normalized: + return "" + + matches = sorted( + ( + (alias, match.start(), match.end()) + for alias in cls._country_aliases(country) + for match in re.finditer(re.escape(alias), normalized, flags=re.IGNORECASE) + ), + key=lambda item: item[1], + ) + if not matches: + return "" + + all_boundaries = sorted( + ( + (match.start(), match.end()) + for target_country in RECOMMENDED_OFFER_COUNTRIES + for alias in cls._country_aliases(target_country) + for match in re.finditer(re.escape(alias), normalized, flags=re.IGNORECASE) + ), + key=lambda item: item[0], + ) + + for _, start, end in matches: + next_boundary = next((boundary_start for boundary_start, _ in all_boundaries if boundary_start > start), len(normalized)) + segment = normalized[start:next_boundary].strip() + if cls._extract_ratio_for_days(segment, 2) or cls._extract_ratio_for_days(segment, 30): + return segment + trailing_segment = normalized[end:next_boundary].strip() + if cls._extract_ratio_for_days(trailing_segment, 2) or cls._extract_ratio_for_days(trailing_segment, 30): + return trailing_segment + if re.search(r"\d+(?:\.\d+)?\s*%", segment): + return segment + if re.search(r"\d+(?:\.\d+)?\s*%", trailing_segment): + return trailing_segment + return "" + + @staticmethod + def _country_aliases(country: str) -> List[str]: + aliases = { + "欧洲": ["欧洲", "Europe"], + "英国": ["英国", "UK", "United Kingdom"], + "德国": ["德国", "Germany"], + "法国": ["法国", "France"], + "西班牙": ["西班牙", "Spain"], + "意大利": ["意大利", "Italy"], + } + return aliases.get(country, [country]) + + @classmethod + def _has_any_cart_ratio(cls, rows: Iterable[Dict[str, Any]]) -> bool: + return any( + item["ratio2DaysAgo"] or item["ratio30DaysAgo"] for item in cls._parse_all_cart_ratio_rows(rows) + ) + + @classmethod + def _has_complete_cart_ratio_rows(cls, rows: Iterable[Dict[str, Any]]) -> bool: + return all( + item["ratio2DaysAgo"] and item["ratio30DaysAgo"] + for item in cls._parse_all_cart_ratio_rows(rows) + ) + + @classmethod + def _extract_ratio_pair_from_country_table(cls, segment: str, full_text: str) -> Dict[str, str]: + ratio = {"ratio2DaysAgo": "", "ratio30DaysAgo": ""} + if not cls._looks_like_cart_ratio_table(full_text): + return ratio + + percentages = [cls._normalize_ratio_text(match.group(0)) for match in re.finditer(r"\d+(?:\.\d+)?\s*%", segment)] + if len(percentages) >= 1: + ratio["ratio2DaysAgo"] = percentages[0] + if len(percentages) >= 2: + ratio["ratio30DaysAgo"] = percentages[1] + return ratio + + @classmethod + def _looks_like_cart_ratio_table(cls, text: str) -> bool: + normalized = cls._normalize_option_text(text) + if not normalized: + return False + + if cls._extract_ratio_for_days(normalized, 2) and cls._extract_ratio_for_days(normalized, 30): + return True + + if not re.search(r"推荐报价|featured offer|buy box", normalized, flags=re.IGNORECASE): + return False + + country_hits = sum( + 1 + for country in RECOMMENDED_OFFER_COUNTRIES + if any(alias.lower() in normalized.lower() for alias in cls._country_aliases(country)) + ) + if country_hits >= 2: + return True + + date_patterns = [ + r"\b\d{1,2}\s+[A-Za-z]{3,9}\b", + r"\b[A-Za-z]{3,9}\s+\d{1,2}\b", + r"\b\d{1,2}[/-]\d{1,2}(?:[/-]\d{2,4})?\b", + r"\b\d{4}[/-]\d{1,2}[/-]\d{1,2}\b", + ] + return any(re.search(pattern, normalized, flags=re.IGNORECASE) for pattern in date_patterns) + + @staticmethod + def _empty_cart_ratio(country: str) -> Dict[str, str]: + return {"country": country, "ratio2DaysAgo": "", "ratio30DaysAgo": ""} + + @classmethod + def _cart_ratio_texts(cls, rows: Iterable[Dict[str, Any]]) -> List[str]: + texts = [] + seen = set() + for row in rows: + parts = [ + str(row.get("raw_text") or ""), + str(row.get("label_text") or ""), + str(row.get("percentage_text") or ""), + ] + text = cls._normalize_option_text(" ".join(part for part in parts if part)) + if not text or text in seen: + continue + seen.add(text) + texts.append(text) + return texts + + @classmethod + def _extract_ratio_for_days(cls, raw_text: str, days: int) -> str: + text = cls._normalize_option_text(raw_text) + if not text: + return "" + + day_matches = list(cls._iter_day_matches(text, days)) + if not day_matches: + return "" + + percent_matches = list(re.finditer(r"\d+(?:\.\d+)?\s*%", text)) + if not percent_matches: + return "" + + all_day_matches = sorted( + [match for target_days in (2, 30) for match in cls._iter_day_matches(text, target_days)], + key=lambda match: match.start(), + ) + prefer_before = percent_matches[0].start() < all_day_matches[0].start() if all_day_matches else False + + for day_match in day_matches: + next_day_start = next( + (match.start() for match in all_day_matches if match.start() > day_match.start()), + len(text), + ) + previous_day_end = max( + [match.end() for match in all_day_matches if match.end() < day_match.start()], + default=0, + ) + before = [match for match in percent_matches if previous_day_end <= match.end() <= day_match.start()] + after = [match for match in percent_matches if day_match.end() <= match.start() < next_day_start] + nearest_before = before[-1] if before else None + nearest_after = after[0] if after else None + if nearest_before and nearest_after: + if prefer_before: + return cls._normalize_ratio_text(nearest_before.group(0)) + return cls._normalize_ratio_text(nearest_after.group(0)) + if nearest_before: + return cls._normalize_ratio_text(nearest_before.group(0)) + if nearest_after: + return cls._normalize_ratio_text(nearest_after.group(0)) + + return "" + + @staticmethod + def _iter_day_matches(text: str, days: int) -> Iterable[re.Match[str]]: + patterns = [ + rf"(? str: + return re.sub(r"\s+", "", text) + + +class ProductTask: + """巡店删除任务处理类。""" + + mark_name = "巡店删除" + + def __init__(self, user_info: dict = None): + self.user_info = user_info or {} + self.running = True + + def log(self, message: str, level: str = "INFO"): + timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + print(f"[{timestamp}] [ProductTask] [{level}] {message}") + + def process_task(self, task_data: dict): + """处理巡店删除任务主入口。""" + task_id = None + try: + data = task_data.get("data", {}) + task_id = data.get("taskId") + items = data.get("items", []) + country_sections = data.get("country_sections", []) + cart_ratios = data.get("cart_ratios", []) + + if not task_id: + self.log("任务ID为空,跳过", "WARNING") + return + if not items: + self.log("店铺列表为空,跳过", "WARNING") + return + + from config import runing_task + + total_countries = sum(len(self._resolve_country_sections(item, country_sections)) for item in items) + runing_task[task_id] = { + "status": "running", + "start_time": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + "total_shops": len(items), + "total_countries": total_countries, + "processed_shops": 0, + "processed_countries": 0, + "success_count": 0, + "failed_count": 0, + "failed_countries": 0, + "deleted_listings_count": 0, + "stop_requested": False, + } + + self.log(f"开始处理巡店删除任务 {task_id},共 {len(items)} 个店铺") + for index, shop_item in enumerate(items, 1): + if runing_task[task_id].get("stop_requested", False): + self.log(f"检测到任务 {task_id} 的暂停请求,停止处理", "WARNING") + runing_task[task_id]["status"] = "stopped" + return + + shop_name = shop_item.get("shopName", "未知店铺") + self.log(f"[{index}/{len(items)}] 开始处理店铺: {shop_name}") + self.process_shop(task_id, shop_item, country_sections, cart_ratios) + runing_task[task_id]["processed_shops"] += 1 + + if runing_task[task_id].get("stop_requested", False): + runing_task[task_id]["status"] = "stopped" + self.log(f"任务 {task_id} 已被暂停!") + else: + runing_task[task_id]["status"] = "completed" + self.log(f"任务 {task_id} 处理完成!") + except Exception as exc: + import traceback + + self.log(f"任务处理失败: {traceback.format_exc()}", "ERROR") + if task_id: + from config import runing_task + + if task_id in runing_task: + runing_task[task_id]["status"] = "failed" + runing_task[task_id]["error"] = str(exc) + + def process_shop( + self, + task_id: int, + shop_item: Dict[str, Any], + country_sections: List[Dict[str, Any]], + cart_ratios: List[Dict[str, Any]], + ): + """处理单个店铺。""" + from config import runing_shop, runing_task + + shop_name = shop_item.get("shopName", "") + company_name = shop_item.get("companyName", "") + if not shop_name: + self.log("店铺名称为空,跳过", "WARNING") + return + if not company_name: + raise RuntimeError(f"店铺 {shop_name} 的公司名称为空") + + runing_task[task_id]["current_shop"] = shop_name + runing_shop[shop_name] = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + self.log(f"店铺 {shop_name} 已添加到执行列表") + + try: + payload_country_sections = self._resolve_country_sections(shop_item, country_sections) + payload_cart_ratios = self._resolve_cart_ratios(shop_item, cart_ratios) + if not payload_country_sections: + raise RuntimeError(f"店铺 {shop_name} 缺少国家模板,无法执行巡店删除") + + country_names = self._ordered_countries(payload_country_sections) + aggregated_sections = self._build_country_section_templates(payload_country_sections) + aggregated_cart_ratios = self._build_cart_ratio_templates(country_names, payload_cart_ratios) + + driver: Optional[InventoryManage] = None + requires_browser_reset = False + country_results = [] + for country_name in country_names: + if runing_task[task_id].get("stop_requested", False): + self.log(f"检测到任务 {task_id} 的暂停请求,停止处理店铺 {shop_name}", "WARNING") + break + + if driver is None or requires_browser_reset: + if driver is not None: + self._safe_close_store(driver) + driver = self.open_shop( + max_retries=PRODUCT_TASK_MAX_RETRIES, + company_name=company_name, + shop_name=shop_name, + iskill=requires_browser_reset, + ) + requires_browser_reset = False + if driver is None: + raise RuntimeError(f"店铺 {shop_name} 打开失败") + + country_result = self.process_country( + driver=driver, + task_id=task_id, + shop_name=shop_name, + country_name=country_name, + ) + country_results.append(country_result) + aggregated_sections[country_name] = country_result["countrySection"] + aggregated_cart_ratios[country_name] = country_result["cartRatio"] + runing_task[task_id]["processed_countries"] += 1 + runing_task[task_id]["deleted_listings_count"] += country_result["deletedCount"] + if not country_result["success"]: + runing_task[task_id]["failed_countries"] += 1 + requires_browser_reset = country_result["reopenRequired"] + + if driver is not None: + self._safe_close_store(driver) + + self.post_result( + task_id=task_id, + shop_name=shop_name, + country_sections=[aggregated_sections[country] for country in country_names], + cart_ratios=[aggregated_cart_ratios[country] for country in country_names], + shop_done=True, + ) + if any(result["success"] for result in country_results): + runing_task[task_id]["success_count"] += 1 + else: + runing_task[task_id]["failed_count"] += 1 + except Exception as exc: + self.log(f"处理店铺 {shop_name} 失败: {str(exc)}", "ERROR") + runing_task[task_id]["failed_count"] += 1 + try: + self.post_result(task_id=task_id, shop_name=shop_name, error=str(exc), shop_done=True) + except Exception as post_exc: + self.log(f"回传店铺失败结果失败: {str(post_exc)}", "ERROR") + finally: + if shop_name in runing_shop: + del runing_shop[shop_name] + self.log(f"店铺 {shop_name} 已从执行列表中移除") + + def open_shop(self, max_retries: int, company_name: str, shop_name: str, iskill: bool = False) -> Optional[InventoryManage]: + error_info = "" + driver: Optional[InventoryManage] = None + browser = None + for retry in range(max_retries): + try: + self.log(f"尝试打开店铺 {shop_name} (第 {retry + 1}/{max_retries} 次)") + + if iskill: + self.log("重试前先杀掉浏览器进程...") + kill_process("v6") + kill_process("v5") + time.sleep(PRODUCT_TASK_BROWSER_RESET_DELAY) + + user_info = {**self.user_info, "company": company_name} + driver = InventoryManage(user_info) + browser = driver.open_shop(shop_name) + + if not browser or browser == "店铺不存在": + self.log(f"打开店铺失败: {browser}", "WARNING") + driver = None + continue + + if driver.need_login(): + self.log(f"店铺 {shop_name} 需要登录,正在登录...") + response = get_shop_info(shop_name) + credential_payload = response.json() if response is not None else {} + password = str(((credential_payload.get("data") or {}).get("password") or "")).strip() + if not password: + message = f"获取店铺 {shop_name} 凭证失败" + self.log(message, "ERROR") + show_notification(message, "error") + driver = None + continue + + if not driver.login(password): + self.log(f"店铺 {shop_name} 登录失败", "WARNING") + driver = None + continue + + browser = driver.open_shop(shop_name) + if not browser or browser == "店铺不存在": + self.log(f"登录后打开店铺失败: {browser}", "WARNING") + driver = None + continue + + self.log(f"成功打开店铺 {shop_name}") + return driver + except Exception as exc: + error_info = str(exc) + self.log(f"打开店铺异常: {error_info}", "ERROR") + driver = None + if retry < max_retries - 1: + time.sleep(PRODUCT_TASK_RETRY_DELAY) + + if retry < max_retries - 1: + time.sleep(PRODUCT_TASK_OPEN_SHOP_DELAY) + + self.log(f"店铺 {shop_name} 打开失败,已重试 {max_retries} 次,错误: {error_info}", "ERROR") + return driver + + def process_country( + self, + driver: InventoryManage, + task_id: int, + shop_name: str, + country_name: str, + ) -> Dict[str, Any]: + from config import runing_task + + self.log(f"开始处理国家: {country_name}") + show_notification(f"开始处理巡店删除国家: {country_name}", "info") + if task_id in runing_task: + runing_task[task_id]["current_country"] = country_name + + latest_status_rows: List[Dict[str, Any]] = [] + try: + self._switch_country_with_retry(driver, country_name) + driver.switch_to_manage_inventory() + + delete_result = driver.delete_all_listings_from_non_whitelisted_statuses(shop_name, country_name) + latest_status_rows = delete_result.get("statusRows") or [] + country_section = self._build_country_section_result( + country_name=country_name, + status_rows=latest_status_rows, + delete_counts=delete_result.get("deleteCounts") or {}, + default_process_status="无可删商品" if delete_result.get("totalDeleted", 0) == 0 else "", + ) + + cart_ratio = self._empty_cart_ratio(country_name) + try: + cart_ratio = self._extract_country_cart_ratio( + driver.get_recommended_offer_cart_ratios().get("cartRatios") or [], + country_name, + ) + except Exception as cart_exc: + self.log(f"读取国家 {country_name} 购物车比例失败: {str(cart_exc)}", "WARNING") + + return { + "success": True, + "countrySection": country_section, + "cartRatio": cart_ratio, + "deletedCount": delete_result.get("totalDeleted", 0), + "reopenRequired": False, + } + except Exception as exc: + self.log(f"处理国家 {country_name} 失败: {str(exc)}", "ERROR") + failure_rows = latest_status_rows or [{"status": "全部", "quantity": "", "deleteQuantity": "", "processStatus": ""}] + country_section = self._build_country_section_result( + country_name=country_name, + status_rows=failure_rows, + delete_counts={}, + default_process_status=f"处理失败: {self._short_error(str(exc))}", + ) + return { + "success": False, + "countrySection": country_section, + "cartRatio": self._empty_cart_ratio(country_name), + "deletedCount": 0, + "reopenRequired": self._should_reopen_browser(str(exc)), + } + + def _switch_country_with_retry(self, driver: InventoryManage, country_name: str) -> None: + for retry in range(PRODUCT_TASK_MAX_RETRIES): + try: + self.log(f"尝试切换到国家 {country_name} (第 {retry + 1}/{PRODUCT_TASK_MAX_RETRIES} 次)") + if driver.switch_to_country(country_name): + return + if retry < PRODUCT_TASK_MAX_RETRIES - 1: + try: + driver.tab.refresh() + except Exception: + pass + time.sleep(PRODUCT_TASK_RETRY_DELAY) + except Exception as exc: + if retry >= PRODUCT_TASK_MAX_RETRIES - 1: + raise RuntimeError(f"切换国家 {country_name} 失败: {exc}") from exc + time.sleep(PRODUCT_TASK_RETRY_DELAY) + raise RuntimeError(f"切换国家 {country_name} 失败") + + def post_result( + self, + task_id: int, + shop_name: str, + country_sections: Optional[List[Dict[str, Any]]] = None, + cart_ratios: Optional[List[Dict[str, Any]]] = None, + error: str = "", + shop_done: bool = False, + ): + """回传巡店删除结果到 Java API。""" + from config import DELETE_BRAND_API_BASE + + shop_payload: Dict[str, Any] = { + "shopName": shop_name, + "shopDone": shop_done, + "submissionId": self._build_submission_id(task_id, shop_name), + "chunkIndex": 1, + "chunkTotal": 1, + } + if error: + shop_payload["error"] = error + else: + shop_payload["countrySections"] = country_sections or [] + shop_payload["cartRatios"] = cart_ratios or [] + + payload = {"shops": [shop_payload]} + url = f"{DELETE_BRAND_API_BASE}/api/patrol-delete/tasks/{task_id}/result" + + max_retries = 3 + for retry in range(max_retries): + try: + self.log(f"尝试回传巡店删除结果 (第 {retry + 1}/{max_retries} 次)") + self.log(f"回传URL: {url}") + self.log(f"回传数据: {payload}") + response = requests.post( + url, + json=payload, + headers={"Content-Type": "application/json"}, + timeout=30, + verify=False, + ) + self.log(f"回传结果: {response.text}") + if response.status_code == 200: + self.log(f"巡店删除结果回传成功: {shop_name}") + return + self.log(f"巡店删除结果回传失败,状态码: {response.status_code}", "WARNING") + except Exception as exc: + self.log(f"调用巡店删除结果API异常: {str(exc)}", "ERROR") + + if retry < max_retries - 1: + time.sleep(2) + + raise RuntimeError("巡店删除结果回传最终失败") + + @staticmethod + def _resolve_country_sections( + shop_item: Dict[str, Any], country_sections: List[Dict[str, Any]] + ) -> List[Dict[str, Any]]: + return deepcopy(country_sections or shop_item.get("countrySections") or []) + + @staticmethod + def _resolve_cart_ratios(shop_item: Dict[str, Any], cart_ratios: List[Dict[str, Any]]) -> List[Dict[str, Any]]: + return deepcopy(cart_ratios or shop_item.get("cartRatios") or []) + + @staticmethod + def _build_submission_id(task_id: int, shop_name: str) -> str: + return f"patrol-delete:{task_id}:{shop_name}:{int(time.time() * 1000)}" + + @staticmethod + def _ordered_countries(country_sections: List[Dict[str, Any]]) -> List[str]: + ordered = [] + for section in country_sections: + country = str(section.get("country") or "").strip() + if country and country not in ordered: + ordered.append(country) + return ordered + + @classmethod + def _build_country_section_templates(cls, country_sections: List[Dict[str, Any]]) -> Dict[str, Dict[str, Any]]: + templates = {} + for section in country_sections: + country = str(section.get("country") or "").strip() + if not country: + continue + rows = section.get("rows") or [] + templates[country] = { + "country": country, + "rows": [ + { + "status": str(row.get("status") or ""), + "quantity": str(row.get("quantity") or ""), + "deleteQuantity": str(row.get("deleteQuantity") or ""), + "processStatus": str(row.get("processStatus") or ""), + } + for row in rows + ], + } + if not templates[country]["rows"]: + templates[country]["rows"] = [{"status": "全部", "quantity": "", "deleteQuantity": "", "processStatus": ""}] + return templates + + @classmethod + def _build_cart_ratio_templates( + cls, + country_names: List[str], + cart_ratios: List[Dict[str, Any]], + ) -> Dict[str, Dict[str, str]]: + ratios_by_country: Dict[str, Dict[str, str]] = {} + for item in cart_ratios: + country = str(item.get("country") or "").strip() + if not country: + continue + ratios_by_country[country] = { + "country": country, + "ratio": str(item.get("ratio") or ""), + } + for country in country_names: + ratios_by_country.setdefault(country, cls._empty_cart_ratio(country)) + return ratios_by_country + + @classmethod + def _build_country_section_result( + cls, + country_name: str, + status_rows: List[Dict[str, Any]], + delete_counts: Dict[str, int], + default_process_status: str = "", + ) -> Dict[str, Any]: + rows = [] + default_status_applied = False + for row in status_rows: + status = InventoryManage._normalize_option_text(str(row.get("status") or "")) + if not status: + continue + canonical_status = InventoryManage._canonical_listing_status(status) + delete_count = delete_counts.get(canonical_status, 0) + process_status = "已完成" if delete_count > 0 else "" + if not process_status and default_process_status and not default_status_applied: + process_status = default_process_status + default_status_applied = True + rows.append( + { + "status": status, + "quantity": InventoryManage._normalize_quantity_text(row.get("quantity")), + "deleteQuantity": str(delete_count) if delete_count > 0 else "", + "processStatus": process_status, + } + ) + + if not rows: + rows = [ + { + "status": "全部", + "quantity": "", + "deleteQuantity": "", + "processStatus": default_process_status, + } + ] + elif default_process_status and not default_status_applied and not any(row["processStatus"] for row in rows): + rows[0]["processStatus"] = default_process_status + + return {"country": country_name, "rows": rows} + + @classmethod + def _extract_country_cart_ratio( + cls, + cart_ratios: List[Dict[str, Any]], + country_name: str, + ) -> Dict[str, str]: + for item in cart_ratios: + if str(item.get("country") or "").strip() != country_name: + continue + ratio = str(item.get("ratio2DaysAgo") or item.get("ratio") or "").strip() + return {"country": country_name, "ratio": ratio} + return cls._empty_cart_ratio(country_name) + + @staticmethod + def _empty_cart_ratio(country_name: str) -> Dict[str, str]: + return {"country": country_name, "ratio": ""} + + @staticmethod + def _short_error(message: str, limit: int = 80) -> str: + compact = re.sub(r"\s+", " ", message or "").strip() + if len(compact) <= limit: + return compact + return compact[: limit - 3] + "..." + + @staticmethod + def _should_reopen_browser(message: str) -> bool: + return any(keyword in (message or "") for keyword in ("与页面的连接已断开", "浏览器", "target frame detached")) + + @staticmethod + def _safe_close_store(driver: InventoryManage) -> None: + try: + driver.close_store() + except Exception: + pass + if __name__ == "__main__": user_info: UserInfo = {"company": "rongchuang123", "username": "自动化_Robot", "password": "#20zsg25"} - driver = AmamzonBase(user_info) + driver = InventoryManage(user_info) shop_name = "郭亚芳" country = "德国" driver.open_shop(shop_name) - driver.SwitchingCountries(country) + driver.switch_to_country(country) + driver.print_recommended_offer_cart_ratios_json() diff --git a/app/amazon/scripts/product/complete_draft_quick_view_debug.js b/app/amazon/scripts/product/complete_draft_quick_view_debug.js new file mode 100644 index 0000000..f3df1e5 --- /dev/null +++ b/app/amazon/scripts/product/complete_draft_quick_view_debug.js @@ -0,0 +1,55 @@ +function textOf(node) { + return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); +} + +function attrsOf(el) { + const attrs = {}; + if (!el || !el.attributes) return attrs; + for (const attr of el.attributes) attrs[attr.name] = attr.value; + return attrs; +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function rowOf(el, index) { + const attrs = attrsOf(el); + return { + index, + tag: el.tagName.toLowerCase(), + visible: isVisible(el), + text: textOf(el), + attrs, + outerHTML: (el.outerHTML || '').slice(0, 2500), + }; +} + +const candidates = allElements() + .map((el, index) => rowOf(el, index)) + .filter((row) => row.visible && /补全草稿|快速查看|quick view|draft/i.test(`${row.tag} ${row.text} ${Object.values(row.attrs).join(' ')}`)) + .slice(0, 120); + +return candidates; diff --git a/app/amazon/scripts/product/complete_draft_quick_view_diagnostic.js b/app/amazon/scripts/product/complete_draft_quick_view_diagnostic.js new file mode 100644 index 0000000..5f61ef9 --- /dev/null +++ b/app/amazon/scripts/product/complete_draft_quick_view_diagnostic.js @@ -0,0 +1,73 @@ +function textOf(node) { + return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); +} + +function attrsOf(el) { + const attrs = {}; + if (!el || !el.attributes) return attrs; + for (const attr of el.attributes) attrs[attr.name] = attr.value; + return attrs; +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function attrsText(attrs) { + return Object.entries(attrs).map(([key, value]) => `${key}=${value}`).join(' '); +} + +const pattern = /快速查看|quick|draft|草稿|提交|submitted|missing|inventory|myinventory/i; +const elements = allElements() + .map((el, index) => { + const attrs = attrsOf(el); + const text = textOf(el); + return { + index, + tag: el.tagName.toLowerCase(), + visible: isVisible(el), + text: text.slice(0, 500), + attrs, + outerHTML: (el.outerHTML || '').slice(0, 1000), + haystack: `${el.tagName} ${text} ${attrsText(attrs)}`, + }; + }) + .filter((row) => pattern.test(row.haystack)) + .map(({ haystack, ...row }) => row) + .slice(0, 80); + +const resources = performance + .getEntriesByType('resource') + .map((entry) => entry.name) + .filter((url) => pattern.test(url)) + .slice(-120); + +return { + location: window.location.href, + readyState: document.readyState, + capturedResponses: (window.__crawlerCompleteDraftResponses || []).slice(-10), + elements, + resources, +}; diff --git a/app/amazon/scripts/product/complete_draft_quick_view_tags.js b/app/amazon/scripts/product/complete_draft_quick_view_tags.js new file mode 100644 index 0000000..496d01b --- /dev/null +++ b/app/amazon/scripts/product/complete_draft_quick_view_tags.js @@ -0,0 +1,121 @@ +function textOf(node) { + return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); +} + +function attrsOf(el) { + const attrs = {}; + if (!el || !el.attributes) return attrs; + for (const attr of el.attributes) attrs[attr.name] = attr.value; + return attrs; +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function hasCountText(text) { + return /[((]\s*[\d,]+\s*[))]/.test(text); +} + +function insideListingRow(el) { + return Boolean(el.closest('[data-sku], tr, [role="row"], [data-testid*="row"]')); +} + +function rowOf(el, index) { + const attrs = attrsOf(el); + const text = textOf(el); + const labelText = attrs.label || attrs.title || attrs['aria-label'] || ''; + const valueText = attrs.value || attrs.count || attrs['data-count'] || attrs['data-value'] || ''; + return { + index, + raw_text: text, + label_text: labelText, + quantity_text: valueText, + attrs, + visible: isVisible(el), + outerHTML: (el.outerHTML || '').slice(0, 1200), + }; +} + +function splitCountRow(el, index) { + const countText = textOf(el); + if (!/^\s*[\d,]+\s*$/.test(countText)) return null; + + let parent = el.parentElement; + for (let depth = 0; parent && depth < 4; depth += 1, parent = parent.parentElement) { + const parentText = textOf(parent); + const labelText = parentText + .replace(new RegExp(`(^|\\s)${countText.replace(/,/g, '\\,')}(\\s|$)`), ' ') + .replace(/[((]\s*[\d,]+\s*[))]/g, ' ') + .replace(/\s+/g, ' ') + .trim(); + if (labelText && labelText !== parentText && !/^\s*[\d,]+\s*$/.test(labelText)) { + return { + index, + raw_text: '', + label_text: labelText, + quantity_text: countText, + attrs: attrsOf(parent), + visible: isVisible(parent), + outerHTML: (parent.outerHTML || '').slice(0, 1200), + }; + } + } + + return null; +} + +const regionRows = allElements().filter((el) => isVisible(el) && !insideListingRow(el)); + +const byText = new Map(); +regionRows + .forEach((el, index) => { + const row = rowOf(el, index); + const combined = `${row.raw_text} ${row.label_text} ${row.quantity_text}`; + if (row.raw_text.length > 200) return; + if (/[((]\s*[\d,]+\s*[))]/.test(combined)) { + const key = combined; + if (!byText.has(key)) byText.set(key, row); + return; + } + + const splitRow = splitCountRow(el, index); + if (splitRow) { + const key = `${splitRow.label_text} ${splitRow.quantity_text}`; + if (!byText.has(key)) byText.set(key, splitRow); + } + }); + +return { + region: { + url: window.location.href, + title: document.title, + }, + rows: Array.from(byText.values()).filter((row) => { + const combined = `${row.raw_text} ${row.label_text}`.toLowerCase(); + return !/所有商品|启售商品|改善商品信息/.test(combined); + }), + candidates: Array.from(byText.values()).slice(0, 80), +}; diff --git a/app/amazon/scripts/product/listing_status_click_visible_status.js b/app/amazon/scripts/product/listing_status_click_visible_status.js new file mode 100644 index 0000000..bf9601b --- /dev/null +++ b/app/amazon/scripts/product/listing_status_click_visible_status.js @@ -0,0 +1,124 @@ +function textOf(node) { + return ((node && (node.innerText || node.textContent || '')) || '').replace(/\s+/g, ' ').trim(); +} + +function normalize(text) { + return String(text || '').replace(/\s+/g, ' ').trim(); +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function parseStatus(rawText) { + const text = normalize(rawText); + if (!text) return ''; + const match = text.match(/^(.*?)\s*[((]\s*[\d,]+\s*[))]\s*$/); + return normalize(match ? match[1] : text); +} + +function collectStatusTargets() { + const pattern = /(全部|在搜索结果中禁止显示|配送问题|缺少报价|已停售|详情页面已删除|订单页面已删除|商品信息草稿|缺少的信息|定价问题|需要批准|不可售|在售)\s*[((]?\s*[\d,]*\s*[))]?/g; + const hits = []; + + for (const el of allElements()) { + if (!isVisible(el)) continue; + const text = normalize(textOf(el)); + if (!text) continue; + const match = text.match(pattern); + if (!match) continue; + const parsed = parseStatus(match[0]); + hits.push({ + el, + text, + parsed, + tag: el.tagName, + clickable: Boolean(el.onclick) || el.matches('button,[role="button"],kat-option,kat-label,a,[tabindex]'), + }); + } + + return hits; +} + +const targetStatus = normalize((__crawlerPayload || {}).status); +const candidates = collectStatusTargets() + .filter((item) => item.parsed === targetStatus || item.text.includes(targetStatus)) + .map((item) => ({ + ...item, + score: + (item.parsed === targetStatus ? 300 : 0) + + (item.clickable ? 120 : 0) + + (/^[^ ]+\s*[((]\s*[\d,]+\s*[))]$/.test(item.text) ? 80 : 0) + + (/button|option|label/i.test(item.tag) ? 30 : 0), + })) + .sort((a, b) => b.score - a.score); + +if (!candidates.length) { + return { ok: false, reason: 'visible status target not found', targetStatus }; +} + +for (const candidate of candidates) { + const chain = [candidate.el]; + let node = candidate.el.parentElement; + for (let depth = 0; node && depth < 5; depth += 1, node = node.parentElement) { + chain.push(node); + } + + for (const el of chain) { + try { + el.scrollIntoView({ block: 'center', inline: 'nearest' }); + el.click(); + return { + ok: true, + targetStatus, + clicked: { + tag: el.tagName, + text: normalize(textOf(el)).slice(0, 300), + }, + matched: { + tag: candidate.tag, + text: candidate.text.slice(0, 300), + parsed: candidate.parsed, + score: candidate.score, + }, + }; + } catch (error) { + // try parent + } + } +} + +return { + ok: false, + reason: 'visible status target click failed', + targetStatus, + candidates: candidates.slice(0, 10).map((item) => ({ + tag: item.tag, + text: item.text.slice(0, 300), + parsed: item.parsed, + score: item.score, + clickable: item.clickable, + })), +}; diff --git a/app/amazon/scripts/product/listing_status_dropdown_debug.js b/app/amazon/scripts/product/listing_status_dropdown_debug.js new file mode 100644 index 0000000..ca21698 --- /dev/null +++ b/app/amazon/scripts/product/listing_status_dropdown_debug.js @@ -0,0 +1,95 @@ +const keywords = ['ListingStatus', 'listing status', '商品状态', '商品狀態', 'status', 'filter', '库存']; + +function textOf(node) { + return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); +} + +function attrsOf(el) { + const attrs = {}; + if (!el || !el.attributes) return attrs; + for (const attr of el.attributes) attrs[attr.name] = attr.value; + return attrs; +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function nearestLabel(el) { + const parts = []; + let node = el; + for (let depth = 0; node && depth < 6; depth += 1, node = node.parentElement) { + const text = textOf(node); + if (text) parts.push(text.slice(0, 400)); + } + const id = el.getAttribute('id'); + if (id) { + document.querySelectorAll(`label[for="${CSS.escape(id)}"]`).forEach((label) => { + const text = textOf(label); + if (text) parts.unshift(text); + }); + } + return [...new Set(parts)].join(' | '); +} + +function hasKeyword(text) { + return keywords.some((keyword) => text.toLowerCase().includes(keyword.toLowerCase())); +} + +function candidateRow(el, index) { + const attrs = attrsOf(el); + const attrText = Object.entries(attrs).map(([k, v]) => `${k}=${v}`).join(' '); + const label = nearestLabel(el); + const text = textOf(el); + const haystack = `${el.tagName} ${attrText} ${text} ${label}`; + let score = 0; + if (/商品状态|商品狀態|ListingStatus|listing status/i.test(haystack)) score += 100; + if (/status/i.test(haystack)) score += 25; + if (/filter|库存/i.test(haystack)) score += 10; + if (isVisible(el)) score += 5; + if (el.closest('[data-sku], tr, [role="row"]')) score -= 50; + return { + index, + score, + tag: el.tagName.toLowerCase(), + visible: isVisible(el), + text, + label, + attrs, + outerHTML: (el.outerHTML || '').slice(0, 2000), + }; +} + +const rows = allElements(); +const candidates = []; +rows.forEach((el, index) => { + const tag = (el.tagName || '').toLowerCase(); + const haystack = `${tag} ${textOf(el)} ${Object.values(attrsOf(el)).join(' ')} ${nearestLabel(el)}`; + if (tag === 'kat-dropdown' || tag === 'kat-option' || hasKeyword(haystack)) { + candidates.push(candidateRow(el, index)); + } +}); + +return candidates.sort((a, b) => b.score - a.score).slice(0, 80); diff --git a/app/amazon/scripts/product/listing_status_dropdown_open.js b/app/amazon/scripts/product/listing_status_dropdown_open.js new file mode 100644 index 0000000..f1e466c --- /dev/null +++ b/app/amazon/scripts/product/listing_status_dropdown_open.js @@ -0,0 +1,225 @@ +function textOf(node) { + return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); +} + +function attrsText(el) { + if (!el || !el.attributes) return ''; + return Array.from(el.attributes).map((attr) => `${attr.name}=${attr.value}`).join(' '); +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function nearestLabel(el) { + const parts = []; + let node = el; + for (let depth = 0; node && depth < 7; depth += 1, node = node.parentElement) { + const text = textOf(node); + if (text) parts.push(text.slice(0, 500)); + } + const id = el.getAttribute('id'); + if (id) { + document.querySelectorAll(`label[for="${CSS.escape(id)}"]`).forEach((label) => { + const text = textOf(label); + if (text) parts.unshift(text); + }); + } + return [...new Set(parts)].join(' | '); +} + +function statusHitCount(text) { + const matches = normalize(text).match( + /(全部\s*[((]\s*[\d,]+\s*[))]|在售\s*[((]\s*[\d,]+\s*[))]|不可售\s*[((]\s*[\d,]+\s*[))]|详情页面已删除\s*[((]\s*[\d,]+\s*[))]|订单页面已删除\s*[((]\s*[\d,]+\s*[))]|定价问题\s*[((]\s*[\d,]+\s*[))]|需要批准\s*[((]\s*[\d,]+\s*[))]|在搜索结果中禁止显示\s*[((]\s*[\d,]+\s*[))])/g + ); + return matches ? matches.length : 0; +} + +function scoreDropdown(el) { + const text = textOf(el); + const label = nearestLabel(el); + const haystack = `${el.tagName} ${attrsText(el)} ${text} ${label}`; + const statusHits = statusHitCount(`${text} ${label}`); + let score = 0; + if (/商品状态|商品狀態|ListingStatus|listing status/i.test(haystack)) score += 120; + if (/\bstatus\b|状态/i.test(haystack)) score += 25; + if (/filter|筛选|筛選|库存/i.test(haystack)) score += 10; + if (/全部\s*[((]\s*[\d,]+\s*[))]/.test(`${text} ${label}`)) score += 300; + if (statusHits >= 2) score += statusHits * 180; + if (/SKUS?|ASIN|FNSKU|UPC\/EAN|TITLE_KEYWORD|商品名称\/关键字/i.test(`${text} ${label}`)) score -= 300; + if (isVisible(el)) score += 10; + if (el.closest('[data-sku], tr, [role="row"], [data-testid*="row"]')) score -= 80; + return { score, text, label, haystack, statusHits }; +} + +function candidateTriggers(dropdown) { + const selectors = [ + 'kat-dropdown-button', + 'kat-button', + 'button', + '[role="button"]', + '[aria-haspopup]', + '[part="trigger"]', + '[part="button"]', + '.header', + '.trigger', + '.button', + 'span', + 'div', + ]; + + const seen = new Set(); + const triggers = []; + const roots = [dropdown]; + if (dropdown.shadowRoot) roots.push(dropdown.shadowRoot); + + for (const root of roots) { + for (const selector of selectors) { + for (const el of Array.from(root.querySelectorAll(selector))) { + if (!el || seen.has(el)) continue; + seen.add(el); + const text = textOf(el); + const attrs = attrsText(el); + const score = + (isVisible(el) ? 20 : 0) + + (/全部\s*[((]\s*[\d,]+\s*[))]/.test(text) ? 200 : 0) + + (/商品状态|商品狀態|ListingStatus|listing status/i.test(`${text} ${attrs}`) ? 120 : 0) + + (/button|trigger|toggle|dropdown|expand/i.test(`${el.tagName} ${attrs}`) ? 40 : 0); + triggers.push({ el, text, attrs, score }); + } + } + } + + return triggers + .filter((item) => item.score > 0) + .sort((a, b) => b.score - a.score); +} + +function clickTrigger(dropdown) { + const triggers = candidateTriggers(dropdown); + for (const trigger of triggers) { + try { + trigger.el.scrollIntoView({ block: 'center', inline: 'nearest' }); + trigger.el.click(); + return { + ok: true, + trigger: { + tag: trigger.el.tagName, + text: trigger.text, + attrs: trigger.attrs, + score: trigger.score, + }, + }; + } catch (error) { + // continue + } + } + + try { + dropdown.scrollIntoView({ block: 'center', inline: 'nearest' }); + dropdown.click(); + return { + ok: true, + trigger: { + tag: dropdown.tagName, + text: textOf(dropdown), + attrs: attrsText(dropdown), + score: -1, + }, + }; + } catch (error) { + return { + ok: false, + reason: String(error), + tried: triggers.slice(0, 10).map((item) => ({ + tag: item.el.tagName, + text: item.text, + attrs: item.attrs, + score: item.score, + })), + }; + } +} + +const dropdowns = allElements().filter((el) => el.tagName.toLowerCase() === 'kat-dropdown'); +const ranked = dropdowns + .map((el, index) => ({ el, index, ...scoreDropdown(el) })) + .filter((row) => row.score > 0) + .sort((a, b) => b.score - a.score); + +if (!ranked.length) { + return { ok: false, reason: 'listing status kat-dropdown not found', candidates: [] }; +} + +const selected = ranked[0]; +selected.el.setAttribute('data-crawler-listing-status-dropdown', 'true'); +const clickResult = clickTrigger(selected.el); + +if (!clickResult.ok) { + return { + ok: false, + reason: 'listing status dropdown trigger click failed', + selected: { + index: selected.index, + score: selected.score, + text: selected.text, + label: selected.label, + attrs: attrsText(selected.el), + outerHTML: (selected.el.outerHTML || '').slice(0, 2000), + }, + clickResult, + candidates: ranked.slice(0, 10).map((row) => ({ + index: row.index, + score: row.score, + text: row.text, + label: row.label, + attrs: attrsText(row.el), + outerHTML: (row.el.outerHTML || '').slice(0, 1000), + })), + }; +} + +return { + ok: true, + selected: { + index: selected.index, + score: selected.score, + statusHits: selected.statusHits, + text: selected.text, + label: selected.label, + attrs: attrsText(selected.el), + outerHTML: (selected.el.outerHTML || '').slice(0, 2000), + }, + trigger: clickResult.trigger, + candidates: ranked.slice(0, 10).map((row) => ({ + index: row.index, + score: row.score, + statusHits: row.statusHits, + text: row.text, + label: row.label, + attrs: attrsText(row.el), + outerHTML: (row.el.outerHTML || '').slice(0, 1000), + })), +}; diff --git a/app/amazon/scripts/product/listing_status_dropdown_options.js b/app/amazon/scripts/product/listing_status_dropdown_options.js new file mode 100644 index 0000000..0f9c250 --- /dev/null +++ b/app/amazon/scripts/product/listing_status_dropdown_options.js @@ -0,0 +1,78 @@ +function textOf(node) { + return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); +} + +function attrsOf(el) { + const attrs = {}; + if (!el || !el.attributes) return attrs; + for (const attr of el.attributes) attrs[attr.name] = attr.value; + return attrs; +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function insideListingRow(el) { + return Boolean(el.closest('[data-sku], tr, [role="row"], [data-testid*="row"]')); +} + +function optionRow(el, index) { + const attrs = attrsOf(el); + const rawText = textOf(el) || attrs.label || attrs.text || attrs.value || ''; + return { + index, + raw_text: rawText, + value: attrs.value || attrs['data-value'] || attrs.name || null, + attrs, + visible: isVisible(el), + outerHTML: (el.outerHTML || '').slice(0, 1200), + }; +} + +const markedDropdown = document.querySelector('[data-crawler-listing-status-dropdown="true"]'); +let scoped = []; +if (markedDropdown) { + const roots = [markedDropdown]; + if (markedDropdown.shadowRoot) roots.push(markedDropdown.shadowRoot); + for (const root of roots) { + scoped = scoped.concat(Array.from(root.querySelectorAll('kat-option, [role="option"]'))); + } +} + +const allOptions = allElements().filter((el) => { + const tag = el.tagName.toLowerCase(); + const role = el.getAttribute('role'); + if (tag !== 'kat-option' && role !== 'option') return false; + if (insideListingRow(el)) return false; + return isVisible(el); +}); + +const byNode = new Map(); +scoped.concat(allOptions).forEach((el, index) => { + if (!byNode.has(el)) byNode.set(el, optionRow(el, index)); +}); + +return Array.from(byNode.values()).filter((row) => row.raw_text); diff --git a/app/amazon/scripts/product/listing_status_section.js b/app/amazon/scripts/product/listing_status_section.js new file mode 100644 index 0000000..b38cb39 --- /dev/null +++ b/app/amazon/scripts/product/listing_status_section.js @@ -0,0 +1,91 @@ +function textOf(node) { + return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function extractStatuses(text) { + const pattern = /(全部|在搜索结果中禁止显示|配送问题|缺少报价|已停售|详情页面已删除|订单页面已删除|商品信息草稿|缺少的信息|定价问题|需要批准|不可售|在售)\s*(?:[((]\s*([\d,]+)\s*[))])?/g; + const rows = []; + let match; + while ((match = pattern.exec(text)) !== null) { + rows.push({ + status: match[1], + quantity: match[2] || '', + raw_text: match[0].trim(), + }); + } + return rows; +} + +function parseDropdown(dropdown, index) { + const nodes = Array.from(dropdown.querySelectorAll('kat-option, kat-label, [class*="parentKatOptionStyle"]')); + const seen = new Set(); + const rows = nodes + .flatMap((node) => { + const rawText = textOf(node); + return extractStatuses(rawText).map((parsed) => ({ + ...parsed, + value: node.getAttribute('value') || '', + })); + }) + .filter((row) => { + const key = `${row.status}::${row.quantity}`; + if (seen.has(key)) return false; + seen.add(key); + return true; + }); + + const quantityCount = rows.filter((row) => row.quantity).length; + const rawText = textOf(dropdown); + const className = String(dropdown.className || ''); + const isStatusDropdown = /statusDropdown/i.test(className); + const score = + rows.length * 100 + + quantityCount * 50 + + (isStatusDropdown ? 500 : 0) + + (/在搜索结果中禁止显示|需要批准|详情页面已删除/.test(rawText) ? 200 : 0); + + return { + index, + tag: (dropdown.tagName || '').toLowerCase(), + raw_text: rawText, + rows, + rowCount: rows.length, + quantityCount, + score, + className, + outerHTML: (dropdown.outerHTML || '').slice(0, 1200), + }; +} + +const ranked = allElements() + .map((el, index) => ({ el, index })) + .filter(({ el }) => (el.tagName || '').toLowerCase() === 'kat-dropdown') + .map(({ el, index }) => parseDropdown(el, index)) + .filter((row) => row.rowCount >= 3) + .sort((a, b) => b.score - a.score); + +const best = ranked[0]; +return { + rows: best ? best.rows : [], + selected: best || null, + candidates: ranked.slice(0, 10), +}; diff --git a/app/amazon/scripts/product/listing_status_select_option.js b/app/amazon/scripts/product/listing_status_select_option.js new file mode 100644 index 0000000..ad8ea14 --- /dev/null +++ b/app/amazon/scripts/product/listing_status_select_option.js @@ -0,0 +1,79 @@ +function textOf(node) { + return ((node && (node.innerText || node.textContent || '')) || '').replace(/\s+/g, ' ').trim(); +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function normalize(text) { + return String(text || '').replace(/\s+/g, ' ').trim(); +} + +function parseStatus(rawText) { + const text = normalize(rawText); + if (!text) return ''; + const match = text.match(/^(.*?)\s*[((]\s*[\d,]+\s*[))]\s*$/); + return normalize(match ? match[1] : text); +} + +function optionMeta(el, index) { + const rawText = textOf(el) || el.getAttribute('label') || el.getAttribute('text') || el.getAttribute('value') || ''; + return { + index, + rawText: normalize(rawText), + parsedStatus: parseStatus(rawText), + value: el.getAttribute('value') || el.getAttribute('data-value') || '', + visible: isVisible(el), + }; +} + +const targetStatus = normalize((__crawlerPayload || {}).status); +const dropdown = document.querySelector('[data-crawler-listing-status-dropdown="true"]'); +if (!dropdown) { + return { ok: false, reason: 'marked dropdown missing', targetStatus }; +} + +const roots = [dropdown]; +if (dropdown.shadowRoot) roots.push(dropdown.shadowRoot); + +const options = []; +for (const root of roots) { + for (const el of Array.from(root.querySelectorAll('kat-option, [role="option"]'))) { + if (!isVisible(el)) continue; + options.push(el); + } +} + +const metas = options.map((el, index) => ({ el, ...optionMeta(el, index) })); +const matched = metas.find((item) => item.parsedStatus === targetStatus || item.rawText === targetStatus); +if (!matched) { + return { + ok: false, + reason: 'status option not found', + targetStatus, + options: metas.map(({ index, rawText, parsedStatus, value, visible }) => ({ + index, + rawText, + parsedStatus, + value, + visible, + })), + }; +} + +matched.el.scrollIntoView({ block: 'center', inline: 'nearest' }); +matched.el.click(); +return { + ok: true, + targetStatus, + selected: { + index: matched.index, + rawText: matched.rawText, + parsedStatus: matched.parsedStatus, + value: matched.value, + }, +}; diff --git a/app/amazon/scripts/product/recommended_offer_percentage_diagnostic.js b/app/amazon/scripts/product/recommended_offer_percentage_diagnostic.js new file mode 100644 index 0000000..768f363 --- /dev/null +++ b/app/amazon/scripts/product/recommended_offer_percentage_diagnostic.js @@ -0,0 +1,94 @@ +function textOf(node) { + return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); +} + +function attrsOf(el) { + const attrs = {}; + if (!el || !el.attributes) return attrs; + for (const attr of el.attributes) attrs[attr.name] = attr.value; + return attrs; +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function snapshot(el, index) { + return { + index, + tag: el.tagName.toLowerCase(), + text: textOf(el), + attrs: attrsOf(el), + outerHTML: (el.outerHTML || '').slice(0, 2000), + }; +} + +const KEYWORD_RE = /推荐报价|featured offer|buy box|商城|marketplace|欧洲|英国|德国|法国|西班牙|意大利|2\s*天前|30\s*天前|2\s*days?\s*ago|30\s*days?\s*ago/i; +const visible = allElements().filter((el) => isVisible(el)); + +const keywordMatches = visible + .map((el, index) => ({ el, index, text: textOf(el) })) + .filter((row) => KEYWORD_RE.test(`${row.el.tagName} ${row.text} ${Object.values(attrsOf(row.el)).join(' ')}`)) + .slice(0, 120) + .map(({ el, index }) => snapshot(el, index)); + +const buyBoxCard = visible.find((el) => (el.getAttribute('data-key') || '') === 'KPI_CARD_BUYBOX') + || visible.find((el) => (el.id || '') === 'KPI_CARD_BUYBOX'); + +const buyBoxNeighborhood = []; +if (buyBoxCard) { + let node = buyBoxCard; + for (let depth = 0; node && depth < 6; depth += 1, node = node.parentElement) { + buyBoxNeighborhood.push({ + depth, + tag: node.tagName.toLowerCase(), + text: textOf(node), + attrs: attrsOf(node), + outerHTML: (node.outerHTML || '').slice(0, 2500), + }); + } +} + +const buyBoxLeafMatches = []; +if (buyBoxCard) { + const scoped = []; + walkRoots(buyBoxCard, scoped, new Set()); + scoped + .filter((el) => isVisible(el)) + .map((el, index) => ({ el, index, text: textOf(el) })) + .filter((row) => row.text && row.text.length <= 200) + .filter((row) => /推荐报价|商城|marketplace|欧洲|英国|德国|法国|西班牙|意大利|\d+(?:\.\d+)?\s*%|2\s*天前|30\s*天前|2\s*days?\s*ago|30\s*days?\s*ago/i.test(row.text)) + .slice(0, 120) + .forEach(({ el, index }) => buyBoxLeafMatches.push(snapshot(el, index))); +} + +return { + url: window.location.href, + title: document.title, + buyBoxFound: !!buyBoxCard, + buyBoxNeighborhood, + buyBoxLeafMatches, + keywordMatches, +}; diff --git a/app/amazon/scripts/product/recommended_offer_percentage_open.js b/app/amazon/scripts/product/recommended_offer_percentage_open.js new file mode 100644 index 0000000..7c9f41e --- /dev/null +++ b/app/amazon/scripts/product/recommended_offer_percentage_open.js @@ -0,0 +1,132 @@ +function textOf(node) { + return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); +} + +function attrsOf(el) { + const attrs = {}; + if (!el || !el.attributes) return attrs; + for (const attr of el.attributes) attrs[attr.name] = attr.value; + return attrs; +} + +function attrsText(el) { + return Object.entries(attrsOf(el)).map(([key, value]) => `${key}=${value}`).join(' '); +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function clickableFor(el) { + if (el && el.querySelector) { + const preferred = el.querySelector( + 'casino-button[data-actionname="expand"], [data-actionname="expand"], casino-button[aria-label="chevron-down"], [aria-label="chevron-down"]' + ); + if (preferred) return preferred; + } + + let node = el; + for (let depth = 0; node && depth < 7; depth += 1, node = node.parentElement) { + if (node.querySelector) { + const preferred = node.querySelector( + 'casino-button[data-actionname="expand"], [data-actionname="expand"], casino-button[aria-label="chevron-down"], [aria-label="chevron-down"]' + ); + if (preferred) return preferred; + } + const tag = node.tagName.toLowerCase(); + const role = node.getAttribute('role'); + if (tag === 'button' || tag === 'a' || tag === 'kat-button' || role === 'button' || node.onclick) { + return node; + } + } + return el; +} + +function scoreEntry(el) { + const text = textOf(el); + const haystack = `${el.tagName} ${attrsText(el)} ${text}`; + let score = 0; + if (/推荐报价百分比|推荐报价.*百分比|featured offer percentage|featured offer.*%|featured offer/i.test(haystack)) { + score += 120; + } + if (/buy box|购物车|报价/i.test(haystack)) score += 20; + if (/%/.test(haystack)) score += 15; + if (/button|link|href|click|card|metric/i.test(haystack)) score += 10; + if (isVisible(el)) score += 10; + if (text.length > 800) score -= 30; + return { score, text, haystack }; +} + +const ranked = allElements() + .filter((el) => isVisible(el)) + .map((el, index) => ({ el, index, ...scoreEntry(el) })) + .filter((row) => row.score > 0) + .sort((a, b) => { + if (b.score !== a.score) return b.score - a.score; + return a.text.length - b.text.length; + }); + +if (!ranked.length) { + return { + ok: false, + reason: 'recommended offer percentage entry not found', + url: window.location.href, + title: document.title, + candidates: allElements() + .filter((el) => isVisible(el)) + .map((el, index) => ({ index, tag: el.tagName.toLowerCase(), text: textOf(el), attrs: attrsOf(el) })) + .filter((row) => /推荐报价|featured offer|buy box|百分比|percentage/i.test(`${row.tag} ${row.text} ${Object.values(row.attrs).join(' ')}`)) + .slice(0, 80), + }; +} + +const selected = ranked[0]; +const clickable = clickableFor(selected.el); +clickable.setAttribute('data-crawler-recommended-offer-entry', 'true'); +clickable.scrollIntoView({ block: 'center', inline: 'nearest' }); +['pointerdown', 'mousedown', 'mouseup', 'click'].forEach((eventName) => { + clickable.dispatchEvent(new MouseEvent(eventName, { bubbles: true, cancelable: true, composed: true })); +}); +if (typeof clickable.click === 'function') clickable.click(); + +return { + ok: true, + selected: { + index: selected.index, + score: selected.score, + text: selected.text, + attrs: attrsText(selected.el), + clickableTag: clickable.tagName.toLowerCase(), + clickableText: textOf(clickable), + outerHTML: (selected.el.outerHTML || '').slice(0, 2000), + }, + candidates: ranked.slice(0, 12).map((row) => ({ + index: row.index, + score: row.score, + text: row.text, + attrs: attrsText(row.el), + outerHTML: (row.el.outerHTML || '').slice(0, 1000), + })), +}; diff --git a/app/amazon/scripts/product/recommended_offer_percentage_rows.js b/app/amazon/scripts/product/recommended_offer_percentage_rows.js new file mode 100644 index 0000000..e273a0f --- /dev/null +++ b/app/amazon/scripts/product/recommended_offer_percentage_rows.js @@ -0,0 +1,279 @@ +function textOf(node) { + return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); +} + +function attrsOf(el) { + const attrs = {}; + if (!el || !el.attributes) return attrs; + for (const attr of el.attributes) attrs[attr.name] = attr.value; + return attrs; +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function rowOf(el, index) { + const attrs = attrsOf(el); + const rect = el.getBoundingClientRect(); + return { + index, + tag: el.tagName.toLowerCase(), + raw_text: textOf(el), + label_text: attrs.label || attrs.title || attrs['aria-label'] || '', + percentage_text: attrs.value || attrs['data-value'] || '', + attrs, + visible: isVisible(el), + rect_left: rect.left, + rect_top: rect.top, + rect_width: rect.width, + rect_height: rect.height, + outerHTML: (el.outerHTML || '').slice(0, 1200), + }; +} + +const COUNTRIES = [ + { country: '欧洲', aliases: ['欧洲', 'Europe'] }, + { country: '英国', aliases: ['英国', 'UK', 'United Kingdom'] }, + { country: '德国', aliases: ['德国', 'Germany'] }, + { country: '法国', aliases: ['法国', 'France'] }, + { country: '西班牙', aliases: ['西班牙', 'Spain'] }, + { country: '意大利', aliases: ['意大利', 'Italy'] }, +]; + +function percentagesOf(text) { + return (text.match(/\d+(?:\.\d+)?\s*%/g) || []).map((item) => item.replace(/\s+/g, '')); +} + +function parentOrHost(el) { + if (!el) return null; + if (el.parentElement) return el.parentElement; + const root = el.getRootNode && el.getRootNode(); + return root && root.host ? root.host : null; +} + +function countryOfText(text) { + const normalized = (text || '').trim().toLowerCase(); + return COUNTRIES.find(({ aliases }) => aliases.some((alias) => normalized === alias.toLowerCase())) || null; +} + +function countCountries(text) { + return COUNTRIES.filter(({ aliases }) => aliases.some((alias) => new RegExp(`(^|\\s)${alias.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}(\\s|$)`, 'i').test(text))).length; +} + +function bestCountryRowText(el) { + const visited = new Set(); + let node = el; + for (let depth = 0; node && depth < 7; depth += 1, node = parentOrHost(node)) { + if (visited.has(node)) break; + visited.add(node); + const text = textOf(node); + if (!text || text.length > 500) continue; + const percentages = percentagesOf(text); + if (percentages.length >= 2 && countCountries(text) <= 1) return text; + } + + const parent = parentOrHost(el); + if (!parent || !parent.children) return ''; + + const children = Array.from(parent.children).filter((child) => isVisible(child) && textOf(child)); + const index = children.indexOf(el); + if (index < 0) return ''; + + const nearby = children.slice(Math.max(0, index - 1), Math.min(children.length, index + 5)).map((child) => textOf(child)); + const joined = nearby.join(' '); + return percentagesOf(joined).length >= 2 ? joined : ''; +} + +function directCountryRows(elements) { + const results = new Map(); + elements.forEach((el) => { + const match = countryOfText(textOf(el)); + if (!match || results.has(match.country)) return; + const text = bestCountryRowText(el); + const percentages = percentagesOf(text); + if (percentages.length < 2) return; + results.set(match.country, { + country: match.country, + ratio2DaysAgo: percentages[0], + ratio30DaysAgo: percentages[1], + raw_text: text, + source: 'rendered-country-row', + }); + }); + return Array.from(results.values()); +} + +function expandedCardOf(elements) { + return elements.find((el) => el.tagName && el.tagName.toLowerCase() === 'casino-card' && /\bcasino-expanded-card\b/.test(el.className || '')); +} + +function directRowsFromExpandedCard(expandedCard) { + if (!expandedCard) return []; + + const scoped = []; + walkRoots(expandedCard, scoped, new Set()); + + const countries = []; + const percentages = []; + const seen = new Set(); + + scoped + .filter((el) => isVisible(el)) + .forEach((el) => { + const text = textOf(el); + const title = (el.getAttribute && el.getAttribute('title')) || ''; + const aria = (el.getAttribute && (el.getAttribute('aria-label') || el.getAttribute('arialabel'))) || ''; + const candidate = (title || aria || text || '').replace(/\s+/g, ' ').trim(); + if (!candidate || candidate.length > 20) return; + + const rect = el.getBoundingClientRect(); + const area = rect.width * rect.height; + if (area <= 0 || area > 20000) return; + + const key = `${candidate}|${Math.round(rect.left)}|${Math.round(rect.top)}|${Math.round(rect.width)}|${Math.round(rect.height)}`; + if (seen.has(key)) return; + seen.add(key); + + const countryMatch = countryOfText(candidate); + if (countryMatch) { + countries.push({ + country: countryMatch.country, + x: rect.left, + y: rect.top + rect.height / 2, + h: rect.height, + area, + }); + return; + } + + if (/^\d+(?:\.\d+)?\s*%$/.test(candidate)) { + percentages.push({ + value: candidate.replace(/\s+/g, ''), + x: rect.left + rect.width / 2, + y: rect.top + rect.height / 2, + area, + }); + } + }); + + const dedupedCountries = []; + countries + .sort((a, b) => a.y - b.y || a.x - b.x || a.area - b.area) + .forEach((item) => { + const exists = dedupedCountries.some((row) => row.country === item.country && Math.abs(row.y - item.y) < 8); + if (!exists) dedupedCountries.push(item); + }); + + const results = dedupedCountries.map((row) => { + const sameRow = percentages + .filter((item) => item.x > row.x + 20 && Math.abs(item.y - row.y) <= Math.max(14, row.h)) + .sort((a, b) => a.x - b.x || a.y - b.y || a.area - b.area); + + const unique = []; + sameRow.forEach((item) => { + if (!unique.some((existing) => existing.value === item.value && Math.abs(existing.x - item.x) < 8)) { + unique.push(item); + } + }); + + return { + country: row.country, + ratio2DaysAgo: unique[0] ? unique[0].value : '', + ratio30DaysAgo: unique[1] ? unique[1].value : '', + source: 'expanded-card-geometry', + }; + }); + + return results.filter((item) => item.ratio2DaysAgo || item.ratio30DaysAgo); +} + +function scoreRegion(el) { + const text = textOf(el); + if (!/%/.test(text)) return 0; + + let score = 0; + if (/推荐报价百分比|推荐报价|featured offer percentage|featured offer|buy box/i.test(text)) score += 80; + if (/2\s*天前|30\s*天前|2\s*日前|30\s*日前|2\s*days?\s*ago|30\s*days?\s*ago/i.test(text)) score += 80; + if (/欧洲|英国|德国|法国|西班牙|意大利|Europe|UK|United Kingdom|Germany|France|Spain|Italy/i.test(text)) score += 40; + if (/%/.test(text)) score += 20; + if (isVisible(el)) score += 10; + if (text.length > 2500) score -= 40; + return score; +} + +const visible = allElements().filter((el) => isVisible(el)); +const expandedCard = expandedCardOf(visible); +const expandedDirectRows = directRowsFromExpandedCard(expandedCard); +const directRows = expandedDirectRows.length ? expandedDirectRows : directCountryRows(visible); +const regions = visible + .map((el, index) => { + const rect = el.getBoundingClientRect(); + return { el, index, score: scoreRegion(el), text: textOf(el), area: rect.width * rect.height }; + }) + .filter((row) => row.score > 0) + .sort((a, b) => { + if (b.score !== a.score) return b.score - a.score; + if (a.text.length !== b.text.length) return a.text.length - b.text.length; + return a.area - b.area; + }); + +const sourceElements = expandedCard ? [expandedCard] : (regions.length ? [regions[0].el] : visible); +const scoped = []; +sourceElements.forEach((root) => walkRoots(root, scoped, new Set())); + +const byText = new Map(); +scoped + .filter((el) => isVisible(el)) + .forEach((el, index) => { + const row = rowOf(el, index); + const combined = `${row.raw_text} ${row.label_text} ${row.percentage_text}`; + const hasDayLabels = /2\s*天前|30\s*天前|2\s*日前|30\s*日前|2\s*days?\s*ago|30\s*days?\s*ago/i.test(combined); + const hasCountries = /欧洲|英国|德国|法国|西班牙|意大利|Europe|UK|United Kingdom|Germany|France|Spain|Italy/i.test(combined); + if (!/%|2\s*天前|30\s*天前|2\s*日前|30\s*日前|2\s*days?\s*ago|30\s*days?\s*ago/i.test(combined) && !hasCountries) return; + if (row.raw_text.length > 800 && !hasDayLabels && !hasCountries) return; + const key = `${combined}|${Math.round(row.rect_left)}|${Math.round(row.rect_top)}|${Math.round(row.rect_width)}|${Math.round(row.rect_height)}`; + if (!byText.has(key)) byText.set(key, row); + }); + +return { + directRows, + region: regions.length + ? { + score: regions[0].score, + text: regions[0].text.slice(0, 2000), + outerHTML: (regions[0].el.outerHTML || '').slice(0, 3000), + } + : { + url: window.location.href, + title: document.title, + }, + rows: Array.from(byText.values()), + candidates: regions.slice(0, 20).map((row) => ({ + index: row.index, + score: row.score, + text: row.text.slice(0, 1000), + })), +}; diff --git a/app/blueprints/__pycache__/__init__.cpython-39.pyc b/app/blueprints/__pycache__/__init__.cpython-39.pyc index ac962fa4aa39f51be1b14b47bedf7ea75beeeb22..d087a162dc75d2e5c81020dd63d04b0f35e591e9 100644 GIT binary patch delta 52 zcmbQh*vrVB$ji&c00g(PpG@Somi=YqVil8_oS%{!lU$Too|9UnTaZ(lo|zYuSWqxA GO$z{=?-88< delta 55 zcmeBWoWRJP$ji&c00d4i4^HH^R`_ZJWV=|!JYU}Uw0G*0T}z(qo)MFqm|2mTn3o>! J=s7W23jp*O6x09! diff --git a/app/blueprints/__pycache__/admin.cpython-39.pyc b/app/blueprints/__pycache__/admin.cpython-39.pyc index 3e017f55a09402f5a7b2ad3f6a88b04b5aca6f9c..0421db99c1082b0dbf289d3df7f16bbc940a2ac4 100644 GIT binary patch delta 1353 zcmaJ>&u<$=6rR~#uXop8$8np`1lnvHN^$C>0YMQFEu?W!)mA~oRYTHLmh0ID6aUJ1 z-4HX21Fk4Yk=kl|LOtxBIaH|EO65=B>_hJ$4xCVnMBDe)l@o!)jOLp+Z{B;~%$v7+ z^Rp+H69v;W2(*XwKT74fpA&=f!M{&rXI4wa8nai6ys%le`DDG^Tq{*q3-$Vg59QxR z+X?VMw>cOMpAzB_pE4RympalHGRRUu>j#+ZD*^E%0dXZk1zDH*IY;e~RmqiIMaYeF zPLwGu!qj_GhqCB3DMxP8*07^>h#L_RUk}KwUtLwGzQHs>uF*iEM5t{)1|g$DV)}K$ zw}n)dnCxmI${&j;kQ+dLw@1!m>k@y=;;z0%TtjI5q0pK69&vSH_;H~H6awlj5o&-& z=#D9j&PyUc0X(tlM{EG>$r=qKJQHo5CI1s*@c%+A5tdSjLOL=f)zn*X%f>s?gob?? z5bin&X^?Ux{ff6dcGv9c6}#HZJ6m;|AM<`6yE2lNx-z^hH{mh)NrVZ2 z)*ZtuX#2g2b#T1zk+FEK>Dc*t!TCI6HEP_+*Eq9z#`6BLj$bgWf3?<-wRCoVao*}j zuufS=8!gNFWHCFxXq{Q!6U3U$&1I|-!?|$C`^7qSwC|R&ic@>3i&MMg-c#$*RbZN3 z$bwbhrN{L8F4JD09#?Uy$F@*}67Dw%q!^4GjK)=fH6qBB74P}s*V^?rm?Ef8SOiM! zZKj5D6y(!TpQzUZ$}b7Z^b!0bpb()nRTjG!y(4WX@Cb2!0wQ*mYN29xjbg3btW@*s z_7>j+HUAR#jNOa!W1*sd*GbOtr2Kt^8Gv*&jK{Z7(LxC0e1($mDn}+?eHR=WDOjt9 z^hBlD<6$3t>fJvwdpO18X#4?!jBo}a3($>}YnwLr;v-}2v#30eZ~qXw8Pr^SrjXGH|_6F0p+7y}EK^qs%es{360> zgi8p+#M>D$y>G_H7w{ZJG3WuRQG+Tp1w#cX0qZ0krHZ0}2KR7nNQ$cNS-%NdNW))h zJPEse`$2cS92xo!Ic_3^>Eju#v+ JL}oN9(HD?ZPyGM@ delta 887 zcmZuv%}*0S6rZ=d-EOzE78FIIuqa5XpcNyDh#H_6N%)BE0YOaDbP6fZ0<+ry%`S*F z=*6fRO+0vD6B83nB+5;^c=qPWa5KRe{s0p{IQXU*VvMtSznS;j_nY^z`~CWzYr$k7 zpc7o3TkkX5mtF_UW#ii^^rLMfU!O01x%YVU?X%7GCnMQpW-gP=jU_sI*4pK*>P4Xv z)`e!)03jAx0SYcSV1rF2WY%IyMKU5ek|W!a*<#65qB2#UN=2ZaQ7KLeuPmiV9K}{v zJTAFE?s#m^ib_?RjDjlxLC@*xo29f}>%{du)w{M9G6B zj%v&Q0OqTJIA?r73N@l9tIYOcN2R_7iAshrk>gwN#sBOP62ViPgv$P#3nad`Gup0VywjmDjyV| zS8*XHQ4dw0Di5U@1)K6R@waR!xnwrIq3=|im`KmFb4ar`0iw^aQi@}-wSkLJ$I0So_d0>8ZSlQnn;O%!%C+P~^QQR#itF7dSM{z*%lKWnr0rZhEN}1ij4P O$yNMCbB`yiVY=TnVabL7 diff --git a/app/blueprints/__pycache__/auth.cpython-39.pyc b/app/blueprints/__pycache__/auth.cpython-39.pyc index 1f33b09c7a0a34af1f82ad517390056ef9c1dbf3..394673d05c1af2a85dae99942af40c79c24a6be3 100644 GIT binary patch delta 55 zcmew%`BjoTk(ZZ?0SInoKiSB=ja~Mao{LpXW^#T?YD{ubVtGz#k#0dwX?kW}OkzR7 J=7;R!tN;`@6VU(w delta 58 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⋙gfeZg0X#lM#509^X!c9 zP;j4c@9CtNlIEdXD%XPf8WyOc#(&hH)%@?$((XET11 zjp6eK`BHbCI4b|s-QoW?6dv3QUb%WrO+U`2l{v4Ux!C&*_#Bu9z5vPqJ`4{sALb$G z9tAj*03@F9G$cQeJ=Jg0?(l?9T3K9AA+Gl(%Sa!(ab$$Jf5c$7L4AORh-zS_CP6rZW qdudSp8KEbz&u{R3klqGxDG}}j`V=@0d=Iz~3xcO2?v}MZ6aNQv*TI?q diff --git a/app/blueprints/__pycache__/communication.cpython-39.pyc b/app/blueprints/__pycache__/communication.cpython-39.pyc index 5e777ba257047121286f5df3092bac78b3d39ebf..6ea5037f3cd9adb1f36163461758ea2fbddbd665 100644 GIT binary patch delta 299 zcmZn`ZV={9zwMe%hr!+k?FD9{|V6q>RFQfS8IZUsZ*rb7qi)1JFu-;@8pPa_Ff*Yh8Y($aR zWJ&fgMy<&O?AwFofTC`t{6O-_?%hwj7Czb0`*iJ$r*l^L6-faFHCc+pLHbxh1P6%V z1Bo&fX#lBPoF$3H+3}fqY55R?!B&V(uHw)Z)&VIK2dc;@N=;13%u6p)nY@D|(m@fV rkHsfHIlD*!$ShI@5vm{pWX~Ci!xJgu_WcERIX$w5&_D5H3t$dRx!_)H$Ls1 z`efIVC%b3FB6x%$L=@k>36i{iA%;Zkin~Y+Uli5~qgA4$h zQY1QAj6IA|b8;^G_F!3{s9PyNkbJUx_tUP0Pj>V^T|49HoE3gWl0ZRCmLf5bK2{LH z0V4Q7qD)2VKv6H_wt(u(| tPyp#;@ySolE|Lc_i{I)}fxLAfpa^p|AHwpYH|qjrZci@89!0 z-}~L~xl`&#YOv7N)p?tI+_@WPgE!k^w+8kO&gjKjNt-E(!n~o0tZCS@dUd8?nohTG zy^UPH+VM2GPO`H~^q8|8%n?mF7q^@v+QatN6)HO0ZvUZ`#+*O4?Ig-`DD;JYR-Pfo zcq7z*M;T@s7y+hvYdD`7g{c5Nz#iZLFf8HvN_NGpiy~X$B<KNnd=>Bqn)s3c1az&XXSSdJRbXzcD5zb7ltM!dJ#vKpU=|3|9uTZZosOT5F{25Z7=JFRxMOCvC4x< zgRVHMNu7e|fye`wxi^&wuE9JDe9EJ#e)^o}Q^RzDze?q3o&QQ@1}`F+0(Jo30WR&F z)_%XRAew4e&peyjjV;CjuXi4H!F^a_nxydv|C%}YzLgka1dI&1!94h`-W-5ar??Gbb=r64@E0T<|SU-V%IgH>ZQb^i5+!u*s1ov zO?P5y-L{fmw3?$m%3b%KJX*yfZ(QeKL5va*55fKg@HYLQqDjTql)oQUKLXc*?QZZB(A@le4q#0!Y+GSKNTl8v12T3SE A{{R30 delta 1271 zcmZvcUuauZ9LGIvbJHf9+iX+Qbu}%?vfXO3;)8QVODnA-i>rf{t;CMYrMYSEmZb4_ zZ=g<8)+%Z>!uX*K*^{=4V0GhC!OjiQ;vP1}I);v`Py2%t^ih1&^F2WYF%KVp|IRtT z^F6%-;BaIxc>tykv;%{{5n#WBAIMir6^BfIKGGvbm?O#9B$C+5 z*T{0JMVAVy(m3YKmT8)AMvjOVxUc;?vEcpD{xwgx;*)fYuTCmJcRUVqU&llsVBau6b7zBt({nk}<7* zE*Fwx@yAj844{Nm=!3gYA}6HL&p#!Pj;~60TyG%AsK#SdzVd%G{CC`xkYgxSbEvv& zs;id$djp#1+OCY)@P61;Xh^>$!+uLezK!A7C#+xEP<9-EUMDtH9g7S*-~D9wPKRc^ zl#`Qq`c85{*J#Zbk zA@MXpGF^=7t$t(4oTCY3)b+2x!U)NPU8YzHei$I28Ni1}j)WWx%bl7ri$!t~8{z$_ zSl2(tsNQ^Swoq^^mtI1}%e;_Ew5o1=_-M`-a?Ioh6y@tFW8ZBV(I57MhLNA0GK~7j zzK_}r&;j%SJAkKvPk=LgEIlIsfzGB6^{J;aWz-MQY}K`B0Tnd>6Hk|bYrqC@oBQ_A EU#?_8d;kCd diff --git a/app/blueprints/__pycache__/main.cpython-39.pyc b/app/blueprints/__pycache__/main.cpython-39.pyc index 2026e60e54e528a752a5801d6cc3091dd5395804..eabc04dff562cbdf22c66e13172ac8568cc32f11 100644 GIT binary patch literal 6835 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 H-mCl{CgKN( delta 2256 zcma)7O>7%Q6y8~{?e)fXocK41lQeDG64EAx(zKMc4N+TK1g%ijgsv)w3Pv28*%+VPRJPV|1DiZs4WSd1oU5;;b`M!Do)v-`hpBu+8ae7eBxYU?V$-!nR_9gQ3t}#_sWDfrG5?JGkMBpEW)kuq zgeuJA5wLh1Apx)>@m{nM9*+TBJbU}kA3pqJ`f3oa+LW!}Y8M?#a*D(WFM_oe9-ntCRz_BOG!s<`DfotZwA2q{K8R2N(4!^O zWjA?^XJB-BB+eCh29fe2cO4!?*$OK!dW?$z)H&vr=N+2`;d0G!84shI9$cW59H++9 zIL`QgsYBVPVevjOkB1rZ2V#9>#6KIGI=w?$tM_!m5@LC|G!Bbg89)m0QNXpxc!`@f z^)JOnCxtaO?^!keBFycjuw@A!nh+Uvv%*e+=83Okem=QL9{UfI7n(aVAAqUq=L90( zAwj})4b$_?^1Q`tZzLATjvFX-)0+=e+u@e5lm(}1^BAlPqGrhzoaTBa_uS6~ym>P-km*K%rBD{itk@F6O353%KXAtmo{8fa#{O{k@bY14TS3vOm zu6UNU!Eu`{8_TR@xXvQ?cT$7?RI(Ey}krtA))Bh^d-%Kr$O~MBn z;YMshX(*G@Cb>J%h|NkjB-ksqkXq>4B&(cA_=Wwt#F^u?i+0n_4LKs++EaFe@|&m1 zbXy7i`5C1Os@--3Ck}wiY$N)$^sU^M=e%?yx=xUxc{t?F?4VM(#`FG4w)BYPawN0Y zEz}CL88)cscr7(7903<0Wi z!ZZRN?76Z4E>I^ehc4FG#q-c@CHE|V5>iP@enHES0#W6Rtif1|V5IT5Kt&)hn%4ex JB#EY^$iGCr5!(O& diff --git a/app/brand_spider/__pycache__/main.cpython-39.pyc b/app/brand_spider/__pycache__/main.cpython-39.pyc index 05fe062850419a5ed85dcabeba5c6137c208c1c2..4b1ab7271fca3fe63d7910c2a0c621e749408f7d 100644 GIT binary patch delta 1747 zcmX|>NpBoQ6o9*G_UTzYsr4}?Q=;gCh396-PY35oaGQMy&%d-ayqtLj(v z=gdDde%0^yO7NI-57KL^{#x>2b^D7;bl#b9DXxrLaT94V$|Po+_hh_^obf4sBAt-3 zal51i7P3Ubmk~u~cEx{6%F-^0In*E{YKS?NutwI)m}`S55$0x|Wl4!LFOxx*GavJV zjIl}OS8PfZt6~ur1y@|FX618~|H@)YjTYBxSj82p)M|BF z?PeK?liGi~`u9$zQ#qzhrnq`(UgPcg`QmgsJE`XLVwg6P8j+<3i7CFOUBOCNZ^4eM zrasD};%_=cqGG@8aIpTFhqwuki}!4Ak!q2!H$mozy@qTPv-Xiwbr8iph#EuyV3w!2 zrs`S}Ye-IOS&gfDjz15sf)gMSAMrVOBWNib&YwOJkTQ%u7==GX$e}G2vMgY@E=t!3 zf1#tMx=JA^vc?EuiLBNLfsH~rLS>4%SxbX9aL-(=9s8k`T#GopL_Uy7tI+VKb zJCRCd(84h&<~i|;vyn7y{^#`3$YOXRmunbNvkMJl+J&N4&r9^Wuh7K_9rTU zClmDnlaBT%w$Yvug^u=_VkL1D96wuZZr$!N>G%K5>WsY@hm*L`pv_YH~9h@rx3>x3St&<7Lh^B0g8Cg9(;dp z`SG219=-h~KZTCh(BT6-TK)9l&9#R&-hV7U;pfn$Bhml>KzF(6?x z9p|~4Wu_~YD`s`R!0&*0A`!EWJx_?c?d28282&PX0!+tzPGtq&FP^mTJkW#Y_*3&G zjho(dA)PJgYBr_uPIQ)`(^k;*L<7HzhMQ=RAw(}0lIiSJ&J?MRm3pgZt?nI!0L9I; zR8rS2>wE~4?g>|COXN1D62`wp6IRN<6TO{hNNIDu^Dj#7i?yAf)s2BYQO^??OS#7J zg5<9t_5j38clXkMoH-D^08>7c$>+F!fb$&Zd(pfPffpQZOeUX(+c}1&C<2$ewLjL* q^y3r{3crsS1(=>GNJ-{Zea5tLt+2Iw*7b`J@m*E+-Kgx@wflcn7s9dt delta 1715 zcmX|>TTGNk6oCJky|DLXSzuY#-G!REECP$SYHfM}K}EcR*D1QL%nz*Wt+PK0=HF5) zJ~dj%RBLNZpr!T_lakQHL{po#4}JBeiP^`7iza<(8ef_|^qe2#Zq7Gn&*k4U=RY&g zNB$mhr`&Fb0-w;WU(=H_?lAdlX5(v9eGwt&>yz~$o5kYy~^f9TI5%c;8s~F6Wn#1I&v{=;1X(E<18*-Xl z>e9^T?V1f+agCO2nu%BHw)562lqi~m`$j3mb?UZR=bTcq>-JeYuSzR(6juKnDJ%>t zC5P@1k8}sG4#G>|O3A4^jT|S$)Xb5ROGm91G`FEm20--~Y8_}^-DQNk4SEcE*Yw*8 z59(fEz3wt}_ig1)MX3^s4C$3vB44Lhf{ngh!(Y%6H3~PuGsbZ%)1+{mM`kNv13uk1 zO(J3(!hJ8&)>b1;$GtAd>()>rs#oCSb&KZW4b@6ONfDii9d-_s)7-% zg<=}z6Kf-RW$|CDi!KK3n+U0sy^d`pCNDcS)->X)X+bmr%BC@q5gX($j<>_iF_acX zEt%HTtZ2iC1Oi7&Y?5K;7Lt%hoNc69e&FmRJ@Pl_@BV$@oB%Oq$VSXW>|4C!+F1|d z^<+agFcLfAW^~tXkUb!Knfx%e-NI;B7n6@-0}v5vx&{2PX-_Mo`*(r#Fzf!F{?0=O zLGJ}Q4AKYEU#9zy!g>tkIFn8B7~~y}2Y@5-sE5&m9n5sF;{YhTn7k1`42~6p+nYDq z8SOs=(#PazGba=BadTl(!>ye`Fhm}qB9aJ>$RUm*(ulK&QN$@k0WgMhy>jjT^3{*T z1vCyK`Vl7(!-#hg=Mf`-F+3VeKcAgi{pr({n?H!-=om+b3$QZt-SWaG%k!VF%Ddt; zy52(!AySAj#5sgO977ZleTWPqi#RExE$eG9qIv|dR_NlF&mPW*0eP~em)w-|E$z^y zKUz+bfNX0`kZyUVb#L=!Oql`1O=ZhDk;?HGXI@N*ufcpYUMr#)6O)fyYXUu}?nF>P z*^~;mr>UrF@doiN8a@LsCxmEY z#bi1+lxMQob~S3utTDa2F~G*v!K9{+Yho`Z-IIYtlm9DF%Y=)0G-0LUuIx*kChspU zB>th~ft=rbujvrj;lE-SONA=J821KZJDO}frKwsvtIFJ#Et7Ad-GX=roz9+YAuqIU zA@V}(K=bQ}4)npbm@T9;s;EJeAAuWR>y*)>PW*{SMm#|D0?PIwNJ$n_+DO?X)Z$tn VaXyUuQ#Nc3TCue@BH!G)<9~x@vZ??8 diff --git a/app/brand_spider/__pycache__/web_dec.cpython-39.pyc b/app/brand_spider/__pycache__/web_dec.cpython-39.pyc index db0f7cdcdbe74591102c267d59ab5ce6efe3d8d6..555e8bc922cb9877dbf8431f06ec6e6f3eb2bd9e 100644 GIT binary patch delta 55 zcmeyS@>zvDk(ZZ?0SInoKiSB=h)wpFv5QqqW^#T?YD{ubVtGz#k#0dwX?kW}OkzR7 J=Cf=oxd9eo6jlHL delta 58 zcmeyY@=b+1k(ZZ?0SHV!Z diff --git a/app/pyproject.toml b/app/pyproject.toml index b6fd8dc..f5f2534 100644 --- a/app/pyproject.toml +++ b/app/pyproject.toml @@ -37,6 +37,7 @@ dependencies = [ "importlib_metadata==8.7.1", "itsdangerous==2.2.0", "Jinja2==3.1.6", + "loguru>=0.7.3", "lxml==6.0.2", "MarkupSafe==3.0.3", "MouseInfo==0.1.3", diff --git a/app/tests/test_amazon_base.py b/app/tests/test_amazon_base.py index ce2383f..92f47a1 100644 --- a/app/tests/test_amazon_base.py +++ b/app/tests/test_amazon_base.py @@ -106,15 +106,19 @@ def test_kill_process_uses_ziniao_driver(monkeypatch): assert calls == [("init", {}), ("kill_process", "v6")] -def test_get_zinaio_exe_returns_none_when_winreg_unavailable(monkeypatch, caplog): +def test_get_zinaio_exe_returns_none_when_winreg_unavailable(monkeypatch): driver = base.ZiniaoDriver({}) monkeypatch.setattr(base, "winreg", None) + messages = [] + sink_id = base.logger.add(messages.append, level="ERROR", format="{message}") - with caplog.at_level("ERROR", logger=base.logger.name): + try: result = driver.get_zinaio_exe() + finally: + base.logger.remove(sink_id) assert result is None - assert any("winreg" in message for message in caplog.messages) + assert any("winreg" in message for message in messages) @pytest.mark.parametrize( @@ -250,7 +254,7 @@ def test_switching_countries_returns_true_when_already_current(): } ) - assert driver.SwitchingCountries("西班牙") is True + assert driver.switch_to_country("西班牙") is True def test_switching_countries_returns_false_when_target_missing(monkeypatch): @@ -268,7 +272,7 @@ def test_switching_countries_returns_false_when_target_missing(monkeypatch): } ) - assert driver.SwitchingCountries("西班牙") is False + assert driver.switch_to_country("西班牙") is False def test_switching_countries_clicks_and_verifies_target(monkeypatch): @@ -292,7 +296,7 @@ def test_switching_countries_clicks_and_verifies_target(monkeypatch): } ) - assert driver.SwitchingCountries("西班牙") is True + assert driver.switch_to_country("西班牙") is True assert dropdown.clicks == 1 assert first_item.clicks == 1 assert target.clicks == 1 diff --git a/app/tests/test_product.py b/app/tests/test_product.py new file mode 100644 index 0000000..280effc --- /dev/null +++ b/app/tests/test_product.py @@ -0,0 +1,834 @@ +from amazon.product import InventoryManage, ProductTask + + +def test_product_task_post_result_builds_patrol_delete_payload(monkeypatch): + captured = {} + + class Response: + status_code = 200 + text = '{"success":true}' + + def fake_post(url, **kwargs): + captured["url"] = url + captured["kwargs"] = kwargs + return Response() + + monkeypatch.setattr("config.DELETE_BRAND_API_BASE", "http://java.example") + monkeypatch.setattr("amazon.product.requests.post", fake_post) + + country_sections = [ + { + "country": "德国", + "rows": [{"status": "正常", "quantity": "12", "deleteQuantity": "3", "processStatus": "处理中"}], + } + ] + cart_ratios = [{"country": "德国", "ratio": "25%"}] + + ProductTask().post_result( + task_id=3089, + shop_name="郭亚芳", + country_sections=country_sections, + cart_ratios=cart_ratios, + shop_done=True, + ) + + assert captured["url"] == "http://java.example/api/patrol-delete/tasks/3089/result" + assert captured["kwargs"]["headers"] == {"Content-Type": "application/json"} + assert captured["kwargs"]["timeout"] == 30 + assert captured["kwargs"]["verify"] is False + assert captured["kwargs"]["json"]["shops"] == [ + { + "shopName": "郭亚芳", + "shopDone": True, + "submissionId": captured["kwargs"]["json"]["shops"][0]["submissionId"], + "chunkIndex": 1, + "chunkTotal": 1, + "countrySections": country_sections, + "cartRatios": cart_ratios, + } + ] + assert captured["kwargs"]["json"]["shops"][0]["submissionId"].startswith("patrol-delete:3089:郭亚芳:") + + +def test_product_task_process_task_aggregates_country_results(monkeypatch): + from config import runing_shop, runing_task + + runing_task.clear() + runing_shop.clear() + calls = [] + + class Driver: + def close_store(self): + return None + + def fake_post_result(self, **kwargs): + calls.append(kwargs) + + def fake_open_shop(self, **kwargs): + return Driver() + + def fake_process_country(self, driver, task_id, shop_name, country_name): + if country_name == "德国": + return { + "success": True, + "countrySection": { + "country": "德国", + "rows": [ + { + "status": "商品信息草稿", + "quantity": "0", + "deleteQuantity": "2", + "processStatus": "已完成", + } + ], + }, + "cartRatio": {"country": "德国", "ratio": "25%"}, + "deletedCount": 2, + "reopenRequired": False, + } + return { + "success": False, + "countrySection": { + "country": "英国", + "rows": [ + { + "status": "全部", + "quantity": "", + "deleteQuantity": "", + "processStatus": "处理失败: 切换国家失败", + } + ], + }, + "cartRatio": {"country": "英国", "ratio": ""}, + "deletedCount": 0, + "reopenRequired": True, + } + + monkeypatch.setattr(ProductTask, "open_shop", fake_open_shop) + monkeypatch.setattr(ProductTask, "process_country", fake_process_country) + monkeypatch.setattr(ProductTask, "post_result", fake_post_result) + + country_sections = [ + {"country": "德国", "rows": [{"status": "全部", "quantity": "", "deleteQuantity": "", "processStatus": ""}]}, + {"country": "英国", "rows": [{"status": "全部", "quantity": "", "deleteQuantity": "", "processStatus": ""}]}, + ] + cart_ratios = [{"country": "德国", "ratio": ""}, {"country": "英国", "ratio": ""}] + ProductTask().process_task( + { + "type": "patrol-delete-run", + "data": { + "taskId": 1, + "items": [{"shopName": "郭亚芳", "companyName": "rongchuang123"}], + "country_sections": country_sections, + "cart_ratios": cart_ratios, + }, + } + ) + + assert runing_task[1]["status"] == "completed" + assert runing_task[1]["processed_shops"] == 1 + assert runing_task[1]["processed_countries"] == 2 + assert runing_task[1]["success_count"] == 1 + assert runing_task[1]["failed_count"] == 0 + assert runing_task[1]["failed_countries"] == 1 + assert runing_task[1]["deleted_listings_count"] == 2 + assert "郭亚芳" not in runing_shop + assert calls == [ + { + "task_id": 1, + "shop_name": "郭亚芳", + "country_sections": [ + { + "country": "德国", + "rows": [ + { + "status": "商品信息草稿", + "quantity": "0", + "deleteQuantity": "2", + "processStatus": "已完成", + } + ], + }, + { + "country": "英国", + "rows": [ + { + "status": "全部", + "quantity": "", + "deleteQuantity": "", + "processStatus": "处理失败: 切换国家失败", + } + ], + }, + ], + "cart_ratios": [{"country": "德国", "ratio": "25%"}, {"country": "英国", "ratio": ""}], + "shop_done": True, + } + ] + + +def test_product_task_process_task_skips_missing_required_data(monkeypatch): + calls = [] + + def fake_post_result(self, **kwargs): + calls.append(kwargs) + + monkeypatch.setattr(ProductTask, "post_result", fake_post_result) + + ProductTask().process_task({"type": "patrol-delete-run", "data": {"items": [{"shopName": "郭亚芳"}]}}) + ProductTask().process_task({"type": "patrol-delete-run", "data": {"taskId": 1, "items": []}}) + + assert calls == [] + + +def test_product_task_reports_shop_error(monkeypatch): + from config import runing_shop, runing_task + + runing_task.clear() + runing_shop.clear() + calls = [] + + def fake_post_result(self, **kwargs): + calls.append(kwargs) + + def fake_open_shop(self, **kwargs): + return None + + monkeypatch.setattr(ProductTask, "open_shop", fake_open_shop) + monkeypatch.setattr(ProductTask, "post_result", fake_post_result) + + ProductTask().process_task( + { + "type": "patrol-delete-run", + "data": { + "taskId": 2, + "items": [{"shopName": "郭亚芳", "companyName": "rongchuang123"}], + "country_sections": [{"country": "德国", "rows": [{"status": "全部"}]}], + }, + } + ) + + assert runing_task[2]["status"] == "completed" + assert runing_task[2]["processed_shops"] == 1 + assert runing_task[2]["success_count"] == 0 + assert runing_task[2]["failed_count"] == 1 + assert "郭亚芳" not in runing_shop + assert calls == [{"task_id": 2, "shop_name": "郭亚芳", "error": "店铺 郭亚芳 打开失败", "shop_done": True}] + + +def test_delete_all_listings_from_non_whitelisted_statuses_loops_until_no_candidates(monkeypatch): + driver = InventoryManage({}) + sections = [ + [ + { + "country": "德国", + "rows": [ + {"status": "商品信息草稿", "quantity": "2", "deleteQuantity": "", "processStatus": ""}, + {"status": "全部", "quantity": "9", "deleteQuantity": "", "processStatus": ""}, + ], + } + ], + [ + { + "country": "德国", + "rows": [ + {"status": "商品信息草稿", "quantity": "1", "deleteQuantity": "", "processStatus": ""}, + {"status": "全部", "quantity": "8", "deleteQuantity": "", "processStatus": ""}, + ], + } + ], + [ + { + "country": "德国", + "rows": [ + {"status": "全部", "quantity": "7", "deleteQuantity": "", "processStatus": ""}, + ], + } + ], + [ + { + "country": "德国", + "rows": [ + {"status": "全部", "quantity": "7", "deleteQuantity": "", "processStatus": ""}, + ], + } + ], + ] + state = {"index": 0, "selected": [], "deleted": 0} + + def fake_get_listing_status_country_sections(shop_name, country): + current = sections[state["index"]] + state["index"] += 1 + return current + + def fake_select_listing_status(status): + state["selected"].append(status) + + def fake_get_first_inventory_row(status): + return {"sku": f"sku-{state['deleted'] + 1}"} + + def fake_summarize_inventory_row(row): + return {"sku": row["sku"], "rawText": row["sku"]} + + def fake_delete_inventory_row(row, status): + state["deleted"] += 1 + return f"{status} 删除成功" + + monkeypatch.setattr(driver, "get_listing_status_country_sections", fake_get_listing_status_country_sections) + monkeypatch.setattr(driver, "select_listing_status", fake_select_listing_status) + monkeypatch.setattr(driver, "_get_first_inventory_row", fake_get_first_inventory_row) + monkeypatch.setattr(driver, "_summarize_inventory_row", fake_summarize_inventory_row) + monkeypatch.setattr(driver, "_delete_inventory_row", fake_delete_inventory_row) + monkeypatch.setattr(driver, "_wait_inventory_loader", lambda timeout=5: None) + + result = driver.delete_all_listings_from_non_whitelisted_statuses("郭亚芳", "德国") + + assert state["selected"] == ["商品信息草稿", "商品信息草稿"] + assert state["deleted"] == 2 + assert result["deleteCounts"] == {"商品信息草稿": 2} + assert result["totalDeleted"] == 2 + assert result["stopReason"] == "no-candidates" + assert result["statusRows"] == [{"status": "全部", "quantity": "7", "deleteQuantity": "", "processStatus": ""}] + assert [item["target"]["sku"] for item in result["results"]] == ["sku-1", "sku-2"] + + +def test_extract_country_cart_ratio_prefers_ratio2daysago_only(): + ratio = ProductTask._extract_country_cart_ratio( + [ + {"country": "德国", "ratio2DaysAgo": "25%", "ratio30DaysAgo": "19%"}, + {"country": "英国", "ratio30DaysAgo": "40%"}, + ], + "德国", + ) + missing_ratio2 = ProductTask._extract_country_cart_ratio( + [{"country": "英国", "ratio30DaysAgo": "40%"}], + "英国", + ) + + assert ratio == {"country": "德国", "ratio": "25%"} + assert missing_ratio2 == {"country": "英国", "ratio": ""} + + +def test_parse_status_option_rows_keeps_value_and_raw_text(): + rows = InventoryManage._parse_status_option_rows( + [ + {"raw_text": "在售 (1,234)", "value": "Active"}, + {"raw_text": "禁止显示", "value": "SearchSuppressed"}, + ], + "郭亚芳", + "德国", + ) + + assert rows == [ + { + "shop_name": "郭亚芳", + "country": "德国", + "status": "在售", + "quantity": 1234, + "value": "Active", + "raw_text": "在售 (1,234)", + }, + { + "shop_name": "郭亚芳", + "country": "德国", + "status": "禁止显示", + "quantity": None, + "value": "SearchSuppressed", + "raw_text": "禁止显示", + }, + ] + + +def test_parse_status_text_accepts_chinese_parentheses(): + assert InventoryManage._parse_status_text("不可售(42)") == ("不可售", 42) + + +def test_parse_status_text_preserves_status_without_quantity(): + assert InventoryManage._parse_status_text("非在售") == ("非在售", None) + + +def test_parse_listing_status_section_rows_extracts_rendered_status_tabs(): + rows = InventoryManage._parse_listing_status_section_rows( + [ + { + "raw_text": ( + "全部(6182) 在售(4097) 在搜索结果中禁止显示(2) 不可售(2083) " + "详情页面已删除(2) 定价问题(1) 需要批准(2080) 商品信息草稿 缺少的信息(1)" + ) + } + ] + ) + + assert rows == [ + {"status": "全部", "quantity": "6182", "raw_text": "全部(6182)"}, + {"status": "在售", "quantity": "4097", "raw_text": "在售(4097)"}, + {"status": "在搜索结果中禁止显示", "quantity": "2", "raw_text": "在搜索结果中禁止显示(2)"}, + {"status": "不可售", "quantity": "2083", "raw_text": "不可售(2083)"}, + {"status": "详情页面已删除", "quantity": "2", "raw_text": "详情页面已删除(2)"}, + {"status": "定价问题", "quantity": "1", "raw_text": "定价问题(1)"}, + {"status": "需要批准", "quantity": "2080", "raw_text": "需要批准(2080)"}, + {"status": "商品信息草稿", "quantity": "", "raw_text": "商品信息草稿"}, + {"status": "缺少的信息", "quantity": "1", "raw_text": "缺少的信息(1)"}, + ] + + +def test_parse_listing_status_section_rows_supports_order_page_deleted_alias(): + rows = InventoryManage._parse_listing_status_section_rows( + [ + { + "raw_text": "不可售(2083) 订单页面已删除(2) 定价问题(1) 需要批准(2080)" + } + ] + ) + + assert rows == [ + {"status": "不可售", "quantity": "2083", "raw_text": "不可售(2083)"}, + {"status": "订单页面已删除", "quantity": "2", "raw_text": "订单页面已删除(2)"}, + {"status": "定价问题", "quantity": "1", "raw_text": "定价问题(1)"}, + {"status": "需要批准", "quantity": "2080", "raw_text": "需要批准(2080)"}, + ] + + +def test_build_country_section_rows_adds_required_placeholder_fields(): + rows = InventoryManage._build_country_section_rows( + [ + {"status": "正常", "quantity": "12"}, + {"status": "需要批准", "quantity": "2080"}, + ] + ) + + assert rows == [ + {"status": "正常", "quantity": "12", "deleteQuantity": "", "processStatus": ""}, + {"status": "需要批准", "quantity": "2080", "deleteQuantity": "", "processStatus": ""}, + ] + + +def test_parse_listing_status_section_rows_supports_latest_status_labels(): + rows = InventoryManage._parse_listing_status_section_rows( + [ + { + "raw_text": ( + "全部(10) 在售(4) 配送问题(1) 缺少报价(2) 已停售(3) " + "在搜索结果中禁止显示(0) 需要批准(0)" + ) + } + ] + ) + + assert rows == [ + {"status": "全部", "quantity": "10", "raw_text": "全部(10)"}, + {"status": "在售", "quantity": "4", "raw_text": "在售(4)"}, + {"status": "配送问题", "quantity": "1", "raw_text": "配送问题(1)"}, + {"status": "缺少报价", "quantity": "2", "raw_text": "缺少报价(2)"}, + {"status": "已停售", "quantity": "3", "raw_text": "已停售(3)"}, + {"status": "在搜索结果中禁止显示", "quantity": "0", "raw_text": "在搜索结果中禁止显示(0)"}, + {"status": "需要批准", "quantity": "0", "raw_text": "需要批准(0)"}, + ] + + +def test_build_deletable_status_rows_skips_whitelisted_statuses(): + rows = [ + {"status": "全部", "quantity": "12"}, + {"status": "定价问题", "quantity": "2"}, + {"status": "需要批准", "quantity": "3"}, + {"status": "在搜索结果中禁止显示", "quantity": "1"}, + {"status": "配送问题", "quantity": "5"}, + {"status": "缺少报价", "quantity": "4"}, + {"status": "已停售", "quantity": "6"}, + {"status": "不可售", "quantity": "8"}, + {"status": "在售", "quantity": "7"}, + ] + + assert InventoryManage._build_deletable_status_rows(rows) == [] + + +def test_build_deletable_status_rows_keeps_non_whitelisted_statuses(): + rows = [ + {"status": "商品信息草稿", "quantity": "2"}, + {"status": "自定义异常状态", "quantity": "5"}, + {"status": "全部", "quantity": "9"}, + ] + + assert InventoryManage._build_deletable_status_rows(rows) == [ + {"status": "商品信息草稿", "canonicalStatus": "商品信息草稿", "quantity": 2}, + {"status": "自定义异常状态", "canonicalStatus": "自定义异常状态", "quantity": 5}, + ] + + +def test_build_deletable_status_rows_compatibility_map_prevents_whitelist_misdelete(): + rows = [ + {"status": "搜尋結果中禁止顯示", "quantity": "4"}, + {"status": "在搜索中禁止显示结果", "quantity": "1"}, + {"status": "配送問題", "quantity": "2"}, + {"status": "缺少報價", "quantity": "3"}, + ] + + assert InventoryManage._build_deletable_status_rows(rows) == [] + + +def test_build_deletable_status_rows_keeps_legacy_non_whitelist_statuses_deletable(): + rows = [ + {"status": "详情页面已删除", "quantity": "1"}, + {"status": "缺少的信息", "quantity": "2"}, + {"status": "订单页面已删除", "quantity": "3"}, + ] + + assert InventoryManage._build_deletable_status_rows(rows) == [ + {"status": "详情页面已删除", "canonicalStatus": "详情页面已删除", "quantity": 1}, + {"status": "缺少的信息", "canonicalStatus": "缺少的信息", "quantity": 2}, + {"status": "订单页面已删除", "canonicalStatus": "详情页面已删除", "quantity": 3}, + ] + + +def test_limit_delete_candidates_enforces_single_delete_cap(): + candidates = [ + {"status": "商品信息草稿", "canonicalStatus": "商品信息草稿", "quantity": 2}, + {"status": "自定义异常状态", "canonicalStatus": "自定义异常状态", "quantity": 5}, + ] + + assert InventoryManage._limit_delete_candidates(candidates, max_delete_count=1) == [candidates[0]] + + +def test_is_delete_success_message_accepts_both_copy_variants(): + assert InventoryManage._is_delete_success_message("1 个商品已经删除。所作更改需要15分钟才会显示在商品详情页面上") + assert InventoryManage._is_delete_success_message("所做更改需要 15 分钟才会显示在商品详情页面上。 1 个商品已删除。") + + +def test_parse_label_quantity_text_accepts_complete_draft_sample(): + assert InventoryManage._parse_label_quantity_text("未提交的草稿 (0)") == ("未提交的草稿", 0) + + +def test_parse_label_quantity_text_preserves_long_colon_label(): + assert InventoryManage._parse_label_quantity_text("已提交:提供缺少的信息 (1)") == ( + "已提交:提供缺少的信息", + 1, + ) + + +def test_parse_label_quantity_text_accepts_chinese_parentheses(): + assert InventoryManage._parse_label_quantity_text("已提交:查看限制(0)") == ("已提交:查看限制", 0) + + +def test_parse_label_quantity_text_accepts_dynamic_text_and_thousands(): + assert InventoryManage._parse_label_quantity_text("Some dynamic label (1,234)") == ( + "Some dynamic label", + 1234, + ) + + +def test_parse_label_quantity_text_rejects_empty_missing_quantity_and_numeric_label(): + assert InventoryManage._parse_label_quantity_text("") is None + assert InventoryManage._parse_label_quantity_text("没有数量") is None + assert InventoryManage._parse_label_quantity_text("123 (4)") is None + assert InventoryManage._parse_label_quantity_text("未提交的草稿 (0) 已提交:提供缺少的信息 (1)") is None + + +def test_parse_quick_view_tag_rows_supports_raw_and_split_dom_rows(): + rows = InventoryManage._parse_quick_view_tag_rows( + [ + {"raw_text": "未提交的草稿 (0)"}, + {"raw_text": "未提交的草稿 (0)"}, + {"label_text": "已提交:提供缺少的信息", "quantity_text": "1"}, + {"raw_text": "没有数量"}, + ], + "郭亚芳", + "德国", + ) + + assert rows == [ + { + "shop_name": "郭亚芳", + "country": "德国", + "tag": "未提交的草稿", + "quantity": 0, + "raw_text": "未提交的草稿 (0)", + }, + { + "shop_name": "郭亚芳", + "country": "德国", + "tag": "已提交:提供缺少的信息", + "quantity": 1, + "raw_text": "已提交:提供缺少的信息 (1)", + }, + ] + + +def test_parse_quick_view_tag_rows_filters_navigation_and_pagination_noise(): + rows = InventoryManage._parse_quick_view_tag_rows( + [ + {"raw_text": "补全草稿 (1)"}, + {"raw_text": "未提交的草稿 (0)"}, + {"raw_text": "已提交:提供缺少的信息 (1)"}, + {"raw_text": "已提交:查看限制 (0)"}, + {"raw_text": "商品信息草稿 至 0 / 0 (0)"}, + {"raw_text": "页面 / 0 (0)"}, + ], + "郭亚芳", + "德国", + ) + + assert rows == [ + { + "shop_name": "郭亚芳", + "country": "德国", + "tag": "未提交的草稿", + "quantity": 0, + "raw_text": "未提交的草稿 (0)", + }, + { + "shop_name": "郭亚芳", + "country": "德国", + "tag": "已提交:提供缺少的信息", + "quantity": 1, + "raw_text": "已提交:提供缺少的信息 (1)", + }, + { + "shop_name": "郭亚芳", + "country": "德国", + "tag": "已提交:查看限制", + "quantity": 0, + "raw_text": "已提交:查看限制 (0)", + }, + ] + + +def test_parse_cart_ratio_rows_extracts_chinese_day_ratios(): + rows = InventoryManage._parse_cart_ratio_rows( + [{"raw_text": "推荐报价百分比 2 天前 25% 30 天前 30%"}], + "德国", + ) + + assert rows == {"country": "德国", "ratio2DaysAgo": "25%", "ratio30DaysAgo": "30%"} + + +def test_parse_cart_ratio_rows_extracts_english_day_ratios(): + rows = InventoryManage._parse_cart_ratio_rows( + [{"raw_text": "Featured Offer Percentage 2 days ago 25.5% 30 days ago 30%"}], + "英国", + ) + + assert rows == {"country": "英国", "ratio2DaysAgo": "25.5%", "ratio30DaysAgo": "30%"} + + +def test_parse_cart_ratio_rows_supports_percent_before_day_label(): + rows = InventoryManage._parse_cart_ratio_rows( + [{"raw_text": "25% 2 天前 30% 30 天前"}], + "法国", + ) + + assert rows == {"country": "法国", "ratio2DaysAgo": "25%", "ratio30DaysAgo": "30%"} + + +def test_parse_cart_ratio_rows_returns_empty_for_missing_day(): + rows = InventoryManage._parse_cart_ratio_rows( + [{"raw_text": "推荐报价百分比 2 天前 25%"}], + "意大利", + ) + + assert rows == {"country": "意大利", "ratio2DaysAgo": "25%", "ratio30DaysAgo": ""} + + +def test_parse_all_cart_ratio_rows_extracts_all_target_countries_without_switching(): + rows = InventoryManage._parse_all_cart_ratio_rows( + [ + { + "raw_text": ( + "推荐报价百分比 商城 2 天前 30 天前 " + "欧洲 60% 64% " + "英国 50% 61% " + "德国 57% 65% " + "法国 81% 77% " + "西班牙 70% 70% " + "意大利 70% 62%" + ) + } + ] + ) + + assert rows == [ + {"country": "欧洲", "ratio2DaysAgo": "60%", "ratio30DaysAgo": "64%"}, + {"country": "英国", "ratio2DaysAgo": "50%", "ratio30DaysAgo": "61%"}, + {"country": "德国", "ratio2DaysAgo": "57%", "ratio30DaysAgo": "65%"}, + {"country": "法国", "ratio2DaysAgo": "81%", "ratio30DaysAgo": "77%"}, + {"country": "西班牙", "ratio2DaysAgo": "70%", "ratio30DaysAgo": "70%"}, + {"country": "意大利", "ratio2DaysAgo": "70%", "ratio30DaysAgo": "62%"}, + ] + + +def test_parse_all_cart_ratio_rows_prefers_direct_rendered_country_rows(): + rows = InventoryManage._parse_all_cart_ratio_rows( + [ + {"country": "欧洲", "ratio2DaysAgo": "60 %", "ratio30DaysAgo": "64%", "source": "rendered-country-row"}, + {"country": "英国", "ratio2DaysAgo": "50%", "ratio30DaysAgo": "61%", "source": "rendered-country-row"}, + {"country": "德国", "ratio2DaysAgo": "57%", "ratio30DaysAgo": "65%", "source": "rendered-country-row"}, + ] + ) + + assert rows == [ + {"country": "欧洲", "ratio2DaysAgo": "60%", "ratio30DaysAgo": "64%"}, + {"country": "英国", "ratio2DaysAgo": "50%", "ratio30DaysAgo": "61%"}, + {"country": "德国", "ratio2DaysAgo": "57%", "ratio30DaysAgo": "65%"}, + {"country": "法国", "ratio2DaysAgo": "", "ratio30DaysAgo": ""}, + {"country": "西班牙", "ratio2DaysAgo": "", "ratio30DaysAgo": ""}, + {"country": "意大利", "ratio2DaysAgo": "", "ratio30DaysAgo": ""}, + ] + + +def test_parse_all_cart_ratio_rows_supports_date_headers_without_day_labels(): + rows = InventoryManage._parse_all_cart_ratio_rows( + [ + { + "raw_text": ( + "推荐报价百分比 商城 24 Apr 27 Mar " + "欧洲 60% 64% " + "英国 50% 61% " + "德国 57% 65% " + "法国 81% 77% " + "西班牙 70% 70% " + "意大利 70% 62%" + ) + } + ] + ) + + assert rows == [ + {"country": "欧洲", "ratio2DaysAgo": "60%", "ratio30DaysAgo": "64%"}, + {"country": "英国", "ratio2DaysAgo": "50%", "ratio30DaysAgo": "61%"}, + {"country": "德国", "ratio2DaysAgo": "57%", "ratio30DaysAgo": "65%"}, + {"country": "法国", "ratio2DaysAgo": "81%", "ratio30DaysAgo": "77%"}, + {"country": "西班牙", "ratio2DaysAgo": "70%", "ratio30DaysAgo": "70%"}, + {"country": "意大利", "ratio2DaysAgo": "70%", "ratio30DaysAgo": "62%"}, + ] + + +def test_parse_all_cart_ratio_rows_supports_rendered_geometry_rows(): + rows = InventoryManage._parse_all_cart_ratio_rows( + [ + {"attrs": {"title": "欧洲"}, "rect_left": 1315.0, "rect_top": 346.5, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "60%", "rect_left": 1510.0, "rect_top": 357.6, "rect_width": 32.0, "rect_height": 20.0}, + {"label_text": "64%", "rect_left": 1693.3, "rect_top": 357.6, "rect_width": 32.0, "rect_height": 20.0}, + {"attrs": {"title": "英国"}, "rect_left": 1315.0, "rect_top": 390.6, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "50%", "rect_left": 1510.1, "rect_top": 401.7, "rect_width": 32.0, "rect_height": 20.0}, + {"label_text": "61%", "rect_left": 1693.3, "rect_top": 401.6, "rect_width": 32.0, "rect_height": 20.0}, + {"attrs": {"title": "德国"}, "rect_left": 1315.0, "rect_top": 433.8, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "57%", "rect_left": 1510.1, "rect_top": 444.9, "rect_width": 32.0, "rect_height": 20.0}, + {"label_text": "65%", "rect_left": 1693.3, "rect_top": 444.9, "rect_width": 32.0, "rect_height": 20.0}, + {"attrs": {"title": "法国"}, "rect_left": 1315.0, "rect_top": 477.0, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "81%", "rect_left": 1510.1, "rect_top": 488.1, "rect_width": 32.0, "rect_height": 20.0}, + {"label_text": "77%", "rect_left": 1693.3, "rect_top": 488.1, "rect_width": 32.0, "rect_height": 20.0}, + {"attrs": {"title": "西班牙"}, "rect_left": 1315.0, "rect_top": 520.2, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "70%", "rect_left": 1510.1, "rect_top": 531.3, "rect_width": 32.0, "rect_height": 20.0}, + {"label_text": "70%", "rect_left": 1693.3, "rect_top": 531.3, "rect_width": 32.0, "rect_height": 20.0}, + {"attrs": {"title": "意大利"}, "rect_left": 1315.0, "rect_top": 563.4, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "70%", "rect_left": 1510.1, "rect_top": 574.5, "rect_width": 32.0, "rect_height": 20.0}, + {"label_text": "62%", "rect_left": 1693.3, "rect_top": 574.5, "rect_width": 32.0, "rect_height": 20.0}, + ] + ) + + assert rows == [ + {"country": "欧洲", "ratio2DaysAgo": "60%", "ratio30DaysAgo": "64%"}, + {"country": "英国", "ratio2DaysAgo": "50%", "ratio30DaysAgo": "61%"}, + {"country": "德国", "ratio2DaysAgo": "57%", "ratio30DaysAgo": "65%"}, + {"country": "法国", "ratio2DaysAgo": "81%", "ratio30DaysAgo": "77%"}, + {"country": "西班牙", "ratio2DaysAgo": "70%", "ratio30DaysAgo": "70%"}, + {"country": "意大利", "ratio2DaysAgo": "70%", "ratio30DaysAgo": "62%"}, + ] + + +def test_parse_all_cart_ratio_rows_dedupes_nested_rendered_percentage_nodes(): + rows = InventoryManage._parse_all_cart_ratio_rows( + [ + {"attrs": {"title": "欧洲"}, "rect_left": 1315.0, "rect_top": 346.5, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "60%", "rect_left": 1510.1, "rect_top": 357.6, "rect_width": 160.0, "rect_height": 20.0}, + {"label_text": "60%", "rect_left": 1510.1, "rect_top": 357.6, "rect_width": 29.6, "rect_height": 20.0}, + {"raw_text": "64%", "rect_left": 1681.7, "rect_top": 346.5, "rect_width": 183.2, "rect_height": 43.2}, + {"label_text": "64%", "rect_left": 1693.3, "rect_top": 357.6, "rect_width": 160.0, "rect_height": 20.0}, + {"attrs": {"title": "英国"}, "rect_left": 1315.0, "rect_top": 390.6, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "50%", "rect_left": 1510.1, "rect_top": 401.7, "rect_width": 160.0, "rect_height": 18.2}, + {"label_text": "50%", "rect_left": 1510.1, "rect_top": 401.7, "rect_width": 27.6, "rect_height": 18.2}, + {"label_text": "61%", "rect_left": 1693.3, "rect_top": 401.6, "rect_width": 27.6, "rect_height": 18.2}, + {"attrs": {"title": "德国"}, "rect_left": 1315.0, "rect_top": 433.8, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "57%", "rect_left": 1510.1, "rect_top": 444.9, "rect_width": 160.0, "rect_height": 18.2}, + {"label_text": "57%", "rect_left": 1510.1, "rect_top": 444.9, "rect_width": 27.6, "rect_height": 18.2}, + {"label_text": "65%", "rect_left": 1693.3, "rect_top": 444.9, "rect_width": 27.6, "rect_height": 18.2}, + {"attrs": {"title": "法国"}, "rect_left": 1315.0, "rect_top": 477.0, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "81%", "rect_left": 1510.1, "rect_top": 488.1, "rect_width": 160.0, "rect_height": 18.2}, + {"label_text": "81%", "rect_left": 1510.1, "rect_top": 488.1, "rect_width": 27.6, "rect_height": 18.2}, + {"label_text": "77%", "rect_left": 1693.3, "rect_top": 488.1, "rect_width": 27.6, "rect_height": 18.2}, + {"attrs": {"title": "西班牙"}, "rect_left": 1315.0, "rect_top": 520.2, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "70%", "rect_left": 1510.1, "rect_top": 531.3, "rect_width": 160.0, "rect_height": 18.2}, + {"label_text": "70%", "rect_left": 1510.1, "rect_top": 531.3, "rect_width": 27.6, "rect_height": 18.2}, + {"label_text": "70%", "rect_left": 1693.3, "rect_top": 531.3, "rect_width": 27.6, "rect_height": 18.2}, + {"attrs": {"title": "意大利"}, "rect_left": 1315.0, "rect_top": 563.4, "rect_width": 550.0, "rect_height": 43.0}, + {"raw_text": "70%", "rect_left": 1510.1, "rect_top": 574.5, "rect_width": 160.0, "rect_height": 18.2}, + {"label_text": "70%", "rect_left": 1510.1, "rect_top": 574.5, "rect_width": 27.6, "rect_height": 18.2}, + {"raw_text": "62%", "rect_left": 1681.7, "rect_top": 563.4, "rect_width": 183.2, "rect_height": 43.2}, + {"label_text": "62%", "rect_left": 1693.3, "rect_top": 574.5, "rect_width": 27.6, "rect_height": 18.2}, + ] + ) + + assert rows == [ + {"country": "欧洲", "ratio2DaysAgo": "60%", "ratio30DaysAgo": "64%"}, + {"country": "英国", "ratio2DaysAgo": "50%", "ratio30DaysAgo": "61%"}, + {"country": "德国", "ratio2DaysAgo": "57%", "ratio30DaysAgo": "65%"}, + {"country": "法国", "ratio2DaysAgo": "81%", "ratio30DaysAgo": "77%"}, + {"country": "西班牙", "ratio2DaysAgo": "70%", "ratio30DaysAgo": "70%"}, + {"country": "意大利", "ratio2DaysAgo": "70%", "ratio30DaysAgo": "62%"}, + ] + + +def test_has_any_cart_ratio_detects_country_table_rows(): + assert InventoryManage._has_any_cart_ratio( + [ + { + "raw_text": ( + "推荐报价百分比 商城 2 天前 30 天前 " + "欧洲 60% 64% 英国 50% 61% 德国 57% 65%" + ) + } + ] + ) + + +def test_has_any_cart_ratio_detects_date_header_country_table_rows(): + assert InventoryManage._has_any_cart_ratio( + [ + { + "raw_text": ( + "推荐报价百分比 商城 24 Apr 27 Mar " + "欧洲 60% 64% 英国 50% 61% 德国 57% 65%" + ) + } + ] + ) + + +def test_has_complete_cart_ratio_rows_requires_all_target_countries(): + assert not InventoryManage._has_complete_cart_ratio_rows( + [ + { + "raw_text": ( + "推荐报价百分比 商城 2 天前 30 天前 " + "欧洲 60% 64% 英国 50% 61% 德国 57% 65%" + ) + } + ] + ) + + +def test_has_complete_cart_ratio_rows_detects_full_country_table(): + assert InventoryManage._has_complete_cart_ratio_rows( + [ + { + "raw_text": ( + "推荐报价百分比 商城 2 天前 30 天前 " + "欧洲 60% 64% " + "英国 50% 61% " + "德国 57% 65% " + "法国 81% 77% " + "西班牙 70% 70% " + "意大利 70% 62%" + ) + } + ] + ) diff --git a/app/tool/__pycache__/devices.cpython-39.pyc b/app/tool/__pycache__/devices.cpython-39.pyc index efea90f067651fec9fd8be9b6418b0ac6df937f4..bf9671389b82119db94bfc0404d4bc6c70b7749c 100644 GIT binary patch delta 200 zcmca&`PG6ik(ZZ?0SInoKgleX+sNm^#OO9ToGFZP^5k_)>XQovq$mGiDwh4F?P3*^ znVg@J8k1a<{Dg$@jz| g_G?H;fkks9_A#bU)|NB`^O_{98QnJjlf1?R0L(B%i2wiq delta 301 zcmexramA7^k(ZZ?0SJn|p2=7&zmd;_i7{kyI8zwo?8)nx)HxKOU~(0U^yCjr#R^}w zfr?$MVxBK=eA+wp$*v_&cF%~(P0XywOw3D!^oI3`4x{mLOn=Yo%byh&>T?#U4%Hu4Y2}B7-mhLD{voZRIT7c z7NAk_Vv2Arn;XQW7#UYjo-M9ESyzGs?2EhNQkW))O6+6IpL|8a5Uv&E$jQo*)r=vV J=SyB=0stsvReb;e diff --git a/app/uv.lock b/app/uv.lock index beeb15d..4fa57a5 100644 --- a/app/uv.lock +++ b/app/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 1 requires-python = "==3.9.*" [[package]] @@ -12,25 +12,25 @@ dependencies = [ { name = "requests" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/82/02/d681807d49a8debabb6cfde2b5a1057a27c2cd7caa0c51111127110db423/alibabacloud_oss_v2-1.2.4-py3-none-any.whl", hash = "sha256:c4f1878f3b2bf0b65bb1a1182253502b69b30bcccb7356859e3a9f079c14217c", size = 264323, upload-time = "2026-02-05T09:24:18.263Z" }, + { url = "https://files.pythonhosted.org/packages/82/02/d681807d49a8debabb6cfde2b5a1057a27c2cd7caa0c51111127110db423/alibabacloud_oss_v2-1.2.4-py3-none-any.whl", hash = "sha256:c4f1878f3b2bf0b65bb1a1182253502b69b30bcccb7356859e3a9f079c14217c", size = 264323 }, ] [[package]] name = "altgraph" version = "0.17.5" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7e/f8/97fdf103f38fed6792a1601dbc16cc8aac56e7459a9fff08c812d8ae177a/altgraph-0.17.5.tar.gz", hash = "sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7", size = 48428, upload-time = "2025-11-21T20:35:50.583Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/f8/97fdf103f38fed6792a1601dbc16cc8aac56e7459a9fff08c812d8ae177a/altgraph-0.17.5.tar.gz", hash = "sha256:c87b395dd12fabde9c99573a9749d67da8d29ef9de0125c7f536699b4a9bc9e7", size = 48428 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a9/ba/000a1996d4308bc65120167c21241a3b205464a2e0b58deda26ae8ac21d1/altgraph-0.17.5-py2.py3-none-any.whl", hash = "sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597", size = 21228, upload-time = "2025-11-21T20:35:49.444Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ba/000a1996d4308bc65120167c21241a3b205464a2e0b58deda26ae8ac21d1/altgraph-0.17.5-py2.py3-none-any.whl", hash = "sha256:f3a22400bce1b0c701683820ac4f3b159cd301acab067c51c653e06961600597", size = 21228 }, ] [[package]] name = "annotated-types" version = "0.7.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081, upload-time = "2024-05-20T21:33:25.928Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/67/531ea369ba64dcff5ec9c3402f9f51bf748cec26dde048a2f973a4eea7f5/annotated_types-0.7.0.tar.gz", hash = "sha256:aff07c09a53a08bc8cfccb9c85b05f1aa9a2a6f23728d790723543408344ce89", size = 16081 } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643, upload-time = "2024-05-20T21:33:24.1Z" }, + { url = "https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl", hash = "sha256:1f02e8b43a8fbbc3f3e0d4f0f4bfc8131bcb4eebe8849b8e5c773f3a1c582a53", size = 13643 }, ] [[package]] @@ -42,9 +42,9 @@ dependencies = [ { name = "idna" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685, upload-time = "2026-01-06T11:45:21.246Z" } +sdist = { url = "https://files.pythonhosted.org/packages/96/f0/5eb65b2bb0d09ac6776f2eb54adee6abe8228ea05b20a5ad0e4945de8aac/anyio-4.12.1.tar.gz", hash = "sha256:41cfcc3a4c85d3f05c932da7c26d0201ac36f72abd4435ba90d0464a3ffed703", size = 228685 } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592, upload-time = "2026-01-06T11:45:19.497Z" }, + { url = "https://files.pythonhosted.org/packages/38/0e/27be9fdef66e72d64c0cdc3cc2823101b80585f8119b5c112c2e8f5f7dab/anyio-4.12.1-py3-none-any.whl", hash = "sha256:d405828884fc140aa80a3c667b8beed277f1dfedec42ba031bd6ac3db606ab6c", size = 113592 }, ] [[package]] @@ -54,36 +54,36 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cryptography" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6b/6c/c88eac87468c607f88bc24df1f3b31445ee6fc9ba123b09e666adf687cd9/authlib-1.6.8.tar.gz", hash = "sha256:41ae180a17cf672bc784e4a518e5c82687f1fe1e98b0cafaeda80c8e4ab2d1cb", size = 165074, upload-time = "2026-02-14T04:02:17.941Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/6c/c88eac87468c607f88bc24df1f3b31445ee6fc9ba123b09e666adf687cd9/authlib-1.6.8.tar.gz", hash = "sha256:41ae180a17cf672bc784e4a518e5c82687f1fe1e98b0cafaeda80c8e4ab2d1cb", size = 165074 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9b/73/f7084bf12755113cd535ae586782ff3a6e710bfbe6a0d13d1c2f81ffbbfa/authlib-1.6.8-py2.py3-none-any.whl", hash = "sha256:97286fd7a15e6cfefc32771c8ef9c54f0ed58028f1322de6a2a7c969c3817888", size = 244116, upload-time = "2026-02-14T04:02:15.579Z" }, + { url = "https://files.pythonhosted.org/packages/9b/73/f7084bf12755113cd535ae586782ff3a6e710bfbe6a0d13d1c2f81ffbbfa/authlib-1.6.8-py2.py3-none-any.whl", hash = "sha256:97286fd7a15e6cfefc32771c8ef9c54f0ed58028f1322de6a2a7c969c3817888", size = 244116 }, ] [[package]] name = "blinker" version = "1.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460, upload-time = "2024-11-08T17:25:47.436Z" } +sdist = { url = "https://files.pythonhosted.org/packages/21/28/9b3f50ce0e048515135495f198351908d99540d69bfdc8c1d15b73dc55ce/blinker-1.9.0.tar.gz", hash = "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", size = 22460 } wheels = [ - { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458, upload-time = "2024-11-08T17:25:46.184Z" }, + { url = "https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc", size = 8458 }, ] [[package]] name = "bottle" version = "0.13.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7a/71/cca6167c06d00c81375fd668719df245864076d284f7cb46a694cbeb5454/bottle-0.13.4.tar.gz", hash = "sha256:787e78327e12b227938de02248333d788cfe45987edca735f8f88e03472c3f47", size = 98717, upload-time = "2025-06-15T10:08:59.439Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/71/cca6167c06d00c81375fd668719df245864076d284f7cb46a694cbeb5454/bottle-0.13.4.tar.gz", hash = "sha256:787e78327e12b227938de02248333d788cfe45987edca735f8f88e03472c3f47", size = 98717 } wheels = [ - { url = "https://files.pythonhosted.org/packages/83/f6/b55ec74cfe68c6584163faa311503c20b0da4c09883a41e8e00d6726c954/bottle-0.13.4-py2.py3-none-any.whl", hash = "sha256:045684fbd2764eac9cdeb824861d1551d113e8b683d8d26e296898d3dd99a12e", size = 103807, upload-time = "2025-06-15T10:08:57.691Z" }, + { url = "https://files.pythonhosted.org/packages/83/f6/b55ec74cfe68c6584163faa311503c20b0da4c09883a41e8e00d6726c954/bottle-0.13.4-py2.py3-none-any.whl", hash = "sha256:045684fbd2764eac9cdeb824861d1551d113e8b683d8d26e296898d3dd99a12e", size = 103807 }, ] [[package]] name = "certifi" version = "2026.1.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900 }, ] [[package]] @@ -93,45 +93,45 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pycparser", marker = "implementation_name != 'PyPy'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/cc/08ed5a43f2996a16b462f64a7055c6e962803534924b9b2f1371d8c00b7b/cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf", size = 184288, upload-time = "2025-09-08T23:23:48.404Z" }, - { url = "https://files.pythonhosted.org/packages/3d/de/38d9726324e127f727b4ecc376bc85e505bfe61ef130eaf3f290c6847dd4/cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7", size = 180509, upload-time = "2025-09-08T23:23:49.73Z" }, - { url = "https://files.pythonhosted.org/packages/9b/13/c92e36358fbcc39cf0962e83223c9522154ee8630e1df7c0b3a39a8124e2/cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c", size = 208813, upload-time = "2025-09-08T23:23:51.263Z" }, - { url = "https://files.pythonhosted.org/packages/15/12/a7a79bd0df4c3bff744b2d7e52cc1b68d5e7e427b384252c42366dc1ecbc/cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165", size = 216498, upload-time = "2025-09-08T23:23:52.494Z" }, - { url = "https://files.pythonhosted.org/packages/a3/ad/5c51c1c7600bdd7ed9a24a203ec255dccdd0ebf4527f7b922a0bde2fb6ed/cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534", size = 203243, upload-time = "2025-09-08T23:23:53.836Z" }, - { url = "https://files.pythonhosted.org/packages/32/f2/81b63e288295928739d715d00952c8c6034cb6c6a516b17d37e0c8be5600/cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f", size = 203158, upload-time = "2025-09-08T23:23:55.169Z" }, - { url = "https://files.pythonhosted.org/packages/1f/74/cc4096ce66f5939042ae094e2e96f53426a979864aa1f96a621ad128be27/cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63", size = 216548, upload-time = "2025-09-08T23:23:56.506Z" }, - { url = "https://files.pythonhosted.org/packages/e8/be/f6424d1dc46b1091ffcc8964fa7c0ab0cd36839dd2761b49c90481a6ba1b/cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2", size = 218897, upload-time = "2025-09-08T23:23:57.825Z" }, - { url = "https://files.pythonhosted.org/packages/f7/e0/dda537c2309817edf60109e39265f24f24aa7f050767e22c98c53fe7f48b/cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65", size = 211249, upload-time = "2025-09-08T23:23:59.139Z" }, - { url = "https://files.pythonhosted.org/packages/2b/e7/7c769804eb75e4c4b35e658dba01de1640a351a9653c3d49ca89d16ccc91/cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322", size = 218041, upload-time = "2025-09-08T23:24:00.496Z" }, - { url = "https://files.pythonhosted.org/packages/aa/d9/6218d78f920dcd7507fc16a766b5ef8f3b913cc7aa938e7fc80b9978d089/cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a", size = 172138, upload-time = "2025-09-08T23:24:01.7Z" }, - { url = "https://files.pythonhosted.org/packages/54/8f/a1e836f82d8e32a97e6b29cc8f641779181ac7363734f12df27db803ebda/cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9", size = 182794, upload-time = "2025-09-08T23:24:02.943Z" }, + { url = "https://files.pythonhosted.org/packages/c0/cc/08ed5a43f2996a16b462f64a7055c6e962803534924b9b2f1371d8c00b7b/cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf", size = 184288 }, + { url = "https://files.pythonhosted.org/packages/3d/de/38d9726324e127f727b4ecc376bc85e505bfe61ef130eaf3f290c6847dd4/cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7", size = 180509 }, + { url = "https://files.pythonhosted.org/packages/9b/13/c92e36358fbcc39cf0962e83223c9522154ee8630e1df7c0b3a39a8124e2/cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c", size = 208813 }, + { url = "https://files.pythonhosted.org/packages/15/12/a7a79bd0df4c3bff744b2d7e52cc1b68d5e7e427b384252c42366dc1ecbc/cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165", size = 216498 }, + { url = "https://files.pythonhosted.org/packages/a3/ad/5c51c1c7600bdd7ed9a24a203ec255dccdd0ebf4527f7b922a0bde2fb6ed/cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534", size = 203243 }, + { url = "https://files.pythonhosted.org/packages/32/f2/81b63e288295928739d715d00952c8c6034cb6c6a516b17d37e0c8be5600/cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f", size = 203158 }, + { url = "https://files.pythonhosted.org/packages/1f/74/cc4096ce66f5939042ae094e2e96f53426a979864aa1f96a621ad128be27/cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63", size = 216548 }, + { url = "https://files.pythonhosted.org/packages/e8/be/f6424d1dc46b1091ffcc8964fa7c0ab0cd36839dd2761b49c90481a6ba1b/cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2", size = 218897 }, + { url = "https://files.pythonhosted.org/packages/f7/e0/dda537c2309817edf60109e39265f24f24aa7f050767e22c98c53fe7f48b/cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65", size = 211249 }, + { url = "https://files.pythonhosted.org/packages/2b/e7/7c769804eb75e4c4b35e658dba01de1640a351a9653c3d49ca89d16ccc91/cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322", size = 218041 }, + { url = "https://files.pythonhosted.org/packages/aa/d9/6218d78f920dcd7507fc16a766b5ef8f3b913cc7aa938e7fc80b9978d089/cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a", size = 172138 }, + { url = "https://files.pythonhosted.org/packages/54/8f/a1e836f82d8e32a97e6b29cc8f641779181ac7363734f12df27db803ebda/cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9", size = 182794 }, ] [[package]] name = "charset-normalizer" version = "3.4.4" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418 } wheels = [ - { url = "https://files.pythonhosted.org/packages/46/7c/0c4760bccf082737ca7ab84a4c2034fcc06b1f21cf3032ea98bd6feb1725/charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9", size = 209609, upload-time = "2025-10-14T04:42:10.922Z" }, - { url = "https://files.pythonhosted.org/packages/bb/a4/69719daef2f3d7f1819de60c9a6be981b8eeead7542d5ec4440f3c80e111/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d", size = 149029, upload-time = "2025-10-14T04:42:12.38Z" }, - { url = "https://files.pythonhosted.org/packages/e6/21/8d4e1d6c1e6070d3672908b8e4533a71b5b53e71d16828cc24d0efec564c/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608", size = 144580, upload-time = "2025-10-14T04:42:13.549Z" }, - { url = "https://files.pythonhosted.org/packages/a7/0a/a616d001b3f25647a9068e0b9199f697ce507ec898cacb06a0d5a1617c99/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc", size = 162340, upload-time = "2025-10-14T04:42:14.892Z" }, - { url = "https://files.pythonhosted.org/packages/85/93/060b52deb249a5450460e0585c88a904a83aec474ab8e7aba787f45e79f2/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e", size = 159619, upload-time = "2025-10-14T04:42:16.676Z" }, - { url = "https://files.pythonhosted.org/packages/dd/21/0274deb1cc0632cd587a9a0ec6b4674d9108e461cb4cd40d457adaeb0564/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1", size = 153980, upload-time = "2025-10-14T04:42:17.917Z" }, - { url = "https://files.pythonhosted.org/packages/28/2b/e3d7d982858dccc11b31906976323d790dded2017a0572f093ff982d692f/charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3", size = 152174, upload-time = "2025-10-14T04:42:19.018Z" }, - { url = "https://files.pythonhosted.org/packages/6e/ff/4a269f8e35f1e58b2df52c131a1fa019acb7ef3f8697b7d464b07e9b492d/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6", size = 151666, upload-time = "2025-10-14T04:42:20.171Z" }, - { url = "https://files.pythonhosted.org/packages/da/c9/ec39870f0b330d58486001dd8e532c6b9a905f5765f58a6f8204926b4a93/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88", size = 145550, upload-time = "2025-10-14T04:42:21.324Z" }, - { url = "https://files.pythonhosted.org/packages/75/8f/d186ab99e40e0ed9f82f033d6e49001701c81244d01905dd4a6924191a30/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1", size = 163721, upload-time = "2025-10-14T04:42:22.46Z" }, - { url = "https://files.pythonhosted.org/packages/96/b1/6047663b9744df26a7e479ac1e77af7134b1fcf9026243bb48ee2d18810f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf", size = 152127, upload-time = "2025-10-14T04:42:23.712Z" }, - { url = "https://files.pythonhosted.org/packages/59/78/e5a6eac9179f24f704d1be67d08704c3c6ab9f00963963524be27c18ed87/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318", size = 161175, upload-time = "2025-10-14T04:42:24.87Z" }, - { url = "https://files.pythonhosted.org/packages/e5/43/0e626e42d54dd2f8dd6fc5e1c5ff00f05fbca17cb699bedead2cae69c62f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c", size = 155375, upload-time = "2025-10-14T04:42:27.246Z" }, - { url = "https://files.pythonhosted.org/packages/e9/91/d9615bf2e06f35e4997616ff31248c3657ed649c5ab9d35ea12fce54e380/charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505", size = 99692, upload-time = "2025-10-14T04:42:28.425Z" }, - { url = "https://files.pythonhosted.org/packages/d1/a9/6c040053909d9d1ef4fcab45fddec083aedc9052c10078339b47c8573ea8/charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966", size = 107192, upload-time = "2025-10-14T04:42:29.482Z" }, - { url = "https://files.pythonhosted.org/packages/f0/c6/4fa536b2c0cd3edfb7ccf8469fa0f363ea67b7213a842b90909ca33dd851/charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50", size = 100220, upload-time = "2025-10-14T04:42:30.632Z" }, - { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, + { url = "https://files.pythonhosted.org/packages/46/7c/0c4760bccf082737ca7ab84a4c2034fcc06b1f21cf3032ea98bd6feb1725/charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9", size = 209609 }, + { url = "https://files.pythonhosted.org/packages/bb/a4/69719daef2f3d7f1819de60c9a6be981b8eeead7542d5ec4440f3c80e111/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d", size = 149029 }, + { url = "https://files.pythonhosted.org/packages/e6/21/8d4e1d6c1e6070d3672908b8e4533a71b5b53e71d16828cc24d0efec564c/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608", size = 144580 }, + { url = "https://files.pythonhosted.org/packages/a7/0a/a616d001b3f25647a9068e0b9199f697ce507ec898cacb06a0d5a1617c99/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc", size = 162340 }, + { url = "https://files.pythonhosted.org/packages/85/93/060b52deb249a5450460e0585c88a904a83aec474ab8e7aba787f45e79f2/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e", size = 159619 }, + { url = "https://files.pythonhosted.org/packages/dd/21/0274deb1cc0632cd587a9a0ec6b4674d9108e461cb4cd40d457adaeb0564/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1", size = 153980 }, + { url = "https://files.pythonhosted.org/packages/28/2b/e3d7d982858dccc11b31906976323d790dded2017a0572f093ff982d692f/charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3", size = 152174 }, + { url = "https://files.pythonhosted.org/packages/6e/ff/4a269f8e35f1e58b2df52c131a1fa019acb7ef3f8697b7d464b07e9b492d/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6", size = 151666 }, + { url = "https://files.pythonhosted.org/packages/da/c9/ec39870f0b330d58486001dd8e532c6b9a905f5765f58a6f8204926b4a93/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88", size = 145550 }, + { url = "https://files.pythonhosted.org/packages/75/8f/d186ab99e40e0ed9f82f033d6e49001701c81244d01905dd4a6924191a30/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1", size = 163721 }, + { url = "https://files.pythonhosted.org/packages/96/b1/6047663b9744df26a7e479ac1e77af7134b1fcf9026243bb48ee2d18810f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf", size = 152127 }, + { url = "https://files.pythonhosted.org/packages/59/78/e5a6eac9179f24f704d1be67d08704c3c6ab9f00963963524be27c18ed87/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318", size = 161175 }, + { url = "https://files.pythonhosted.org/packages/e5/43/0e626e42d54dd2f8dd6fc5e1c5ff00f05fbca17cb699bedead2cae69c62f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c", size = 155375 }, + { url = "https://files.pythonhosted.org/packages/e9/91/d9615bf2e06f35e4997616ff31248c3657ed649c5ab9d35ea12fce54e380/charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505", size = 99692 }, + { url = "https://files.pythonhosted.org/packages/d1/a9/6c040053909d9d1ef4fcab45fddec083aedc9052c10078339b47c8573ea8/charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966", size = 107192 }, + { url = "https://files.pythonhosted.org/packages/f0/c6/4fa536b2c0cd3edfb7ccf8469fa0f363ea67b7213a842b90909ca33dd851/charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50", size = 100220 }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402 }, ] [[package]] @@ -141,9 +141,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188 }, ] [[package]] @@ -153,18 +153,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/24/c12faf3f61614b3131b5c98d3bf0d376b49c7feaa73edca559aeb2aee080/clr_loader-0.2.10.tar.gz", hash = "sha256:81f114afbc5005bafc5efe5af1341d400e22137e275b042a8979f3feb9fc9446", size = 83605, upload-time = "2026-01-03T23:13:06.984Z" } +sdist = { url = "https://files.pythonhosted.org/packages/18/24/c12faf3f61614b3131b5c98d3bf0d376b49c7feaa73edca559aeb2aee080/clr_loader-0.2.10.tar.gz", hash = "sha256:81f114afbc5005bafc5efe5af1341d400e22137e275b042a8979f3feb9fc9446", size = 83605 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c8/61/cf819f8e8bb4d4c74661acf2498ba8d4a296714be3478d21eaabf64f5b9b/clr_loader-0.2.10-py3-none-any.whl", hash = "sha256:ebbbf9d511a7fe95fa28a95a4e04cd195b097881dfe66158dc2c281d3536f282", size = 56483, upload-time = "2026-01-03T23:13:05.439Z" }, + { url = "https://files.pythonhosted.org/packages/c8/61/cf819f8e8bb4d4c74661acf2498ba8d4a296714be3478d21eaabf64f5b9b/clr_loader-0.2.10-py3-none-any.whl", hash = "sha256:ebbbf9d511a7fe95fa28a95a4e04cd195b097881dfe66158dc2c281d3536f282", size = 56483 }, ] [[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] [[package]] @@ -179,9 +179,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "websockets" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/31/ae/608ca49d2d12941fa33ab588c0b1f54b2260c10a7380059af74448467aa0/cozepy-0.20.0.tar.gz", hash = "sha256:69e359beea826f4a3ecf38d3fbd3efe2dd7558e13006f6444095b74274883dda", size = 88871, upload-time = "2025-10-22T14:03:23.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/31/ae/608ca49d2d12941fa33ab588c0b1f54b2260c10a7380059af74448467aa0/cozepy-0.20.0.tar.gz", hash = "sha256:69e359beea826f4a3ecf38d3fbd3efe2dd7558e13006f6444095b74274883dda", size = 88871 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/66/76a9d5e6820d66feee50444b21bf0886273dd55a90c82d4d8ee2b93478fd/cozepy-0.20.0-py3-none-any.whl", hash = "sha256:efcc032fb8ff0b5f41071fb1727a0f242bdfe9d304578d2dcb7837a18d98b181", size = 116218, upload-time = "2025-10-22T14:03:22.378Z" }, + { url = "https://files.pythonhosted.org/packages/4d/66/76a9d5e6820d66feee50444b21bf0886273dd55a90c82d4d8ee2b93478fd/cozepy-0.20.0-py3-none-any.whl", hash = "sha256:efcc032fb8ff0b5f41071fb1727a0f242bdfe9d304578d2dcb7837a18d98b181", size = 116218 }, ] [[package]] @@ -222,6 +222,7 @@ dependencies = [ { name = "importlib-metadata" }, { name = "itsdangerous" }, { name = "jinja2" }, + { name = "loguru" }, { name = "lxml" }, { name = "markupsafe" }, { name = "mouseinfo" }, @@ -314,6 +315,7 @@ requires-dist = [ { name = "importlib-metadata", specifier = "==8.7.1" }, { name = "itsdangerous", specifier = "==2.2.0" }, { name = "jinja2", specifier = "==3.1.6" }, + { name = "loguru", specifier = ">=0.7.3" }, { name = "lxml", specifier = "==6.0.2" }, { name = "markupsafe", specifier = "==3.0.3" }, { name = "mouseinfo", specifier = "==0.1.3" }, @@ -375,24 +377,24 @@ dev = [ name = "crcmod-plus" version = "2.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/0b/0c/71733bbaf38e9f1eaecfdf7f8e350993f3dcac208a5297c41503ae66e513/crcmod_plus-2.3.1.tar.gz", hash = "sha256:732ffe3c3ce3ef9b272e1827d8fb894590c4d6ff553f2a2b41ae30f4f94b0f5d", size = 22319, upload-time = "2025-10-10T22:14:21.691Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/0c/71733bbaf38e9f1eaecfdf7f8e350993f3dcac208a5297c41503ae66e513/crcmod_plus-2.3.1.tar.gz", hash = "sha256:732ffe3c3ce3ef9b272e1827d8fb894590c4d6ff553f2a2b41ae30f4f94b0f5d", size = 22319 } wheels = [ - { url = "https://files.pythonhosted.org/packages/47/e0/2dad2e6f0cd4914b4144496d9785780ec820e200816c080df785cfa34da6/crcmod_plus-2.3.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:b7e35e0f7d93d7571c2c9c3d6760e456999ea4c1eae5ead6acac247b5a79e469", size = 23279, upload-time = "2025-10-10T22:13:47.281Z" }, - { url = "https://files.pythonhosted.org/packages/66/76/53c0b65b9679b903f98fc54efa32b0e5a19634712a45200c7a80674aa6f5/crcmod_plus-2.3.1-cp311-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6853243120db84677b94b625112116f0ef69cd581741d20de58dce4c34242654", size = 20185, upload-time = "2025-10-10T22:13:48.06Z" }, - { url = "https://files.pythonhosted.org/packages/98/79/2b4dc9bb26394873d7699737124408b5106264ae33053fdec600e9a9fa65/crcmod_plus-2.3.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:17735bc4e944d552ea18c8609fc6d08a5e64ee9b29cc216ba4d623754029cc3a", size = 26999, upload-time = "2025-10-10T22:13:48.854Z" }, - { url = "https://files.pythonhosted.org/packages/bb/e8/f5d66778b5a1bff915807016561a02b5cebf6b3840fb8a2be40bbb0c8575/crcmod_plus-2.3.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ac755040a2a35f43ab331978c48a9acb4ff64b425f282a296be467a410f00c3", size = 27536, upload-time = "2025-10-10T22:13:49.956Z" }, - { url = "https://files.pythonhosted.org/packages/f3/2c/0113ad30cadad40c22eef08c0f2618f2446dd282f02268fecbcfc9fda3c1/crcmod_plus-2.3.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7bdcfb838ca093ca673a3bbb37f62d1e5ec7182e00cc5ee2d00759f9f9f8ab11", size = 27385, upload-time = "2025-10-10T22:13:50.765Z" }, - { url = "https://files.pythonhosted.org/packages/8e/ba/501ef1b02119402cf1a31c01eb2cb8399660bca863c2f4dd3dc060220284/crcmod_plus-2.3.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9166bc3c9b5e7b07b4e6854cac392b4a451b31d58d3950e48c140ab7b5d05394", size = 27135, upload-time = "2025-10-10T22:13:51.889Z" }, - { url = "https://files.pythonhosted.org/packages/49/90/d4556c9db69c83e726c5b88da3d656fdaac7d60c4d27b43cb939bed80069/crcmod_plus-2.3.1-cp311-abi3-win32.whl", hash = "sha256:cb99b694cce5c862560cf332a8b5e793620e28f0de3726995608bbd6f9b6e09a", size = 22384, upload-time = "2025-10-10T22:13:53.016Z" }, - { url = "https://files.pythonhosted.org/packages/4d/7e/57bb97a8c7b4e19900744f58b67dc83bc9c83aaac670deeede9fb3bfab6a/crcmod_plus-2.3.1-cp311-abi3-win_amd64.whl", hash = "sha256:82b0f7e968c430c5a80fe0fc59e75cb54f2e84df2ed0cee5a3ff9cadfbf8a220", size = 22912, upload-time = "2025-10-10T22:13:53.849Z" }, - { url = "https://files.pythonhosted.org/packages/a4/12/fd9c058b7c2d8c63841038bd9b7a1781881c93ab06d8357a9eecb46c0b74/crcmod_plus-2.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:22600072de422632531e92d7675faf223a5b2548d45c5cd6f77ec4575339900f", size = 23145, upload-time = "2025-10-10T22:14:10.02Z" }, - { url = "https://files.pythonhosted.org/packages/0f/e2/002c5ee72d99bcc382f15d95f539daf0c2de31bc929f0d9e18733b4facde/crcmod_plus-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f940704e359607b47b4a8e98c4d0f453f15bea039eb183cd0ffb14a8268fea78", size = 20120, upload-time = "2025-10-10T22:14:11.124Z" }, - { url = "https://files.pythonhosted.org/packages/1f/0d/9584047c81aceb2e2e655160d10cd3c39cbf1fad52bcd6dd205ada1e077d/crcmod_plus-2.3.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f939fc1f7d143962a8fbed2305ce5931627fea1ea3a7f1865c04dbba9d41bf67", size = 28810, upload-time = "2025-10-10T22:14:12.24Z" }, - { url = "https://files.pythonhosted.org/packages/46/9f/300d48c4fc6bc409af700fa9bde85faab3934768719bdcc1759b6cce974c/crcmod_plus-2.3.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3c6e8c7cf7ef49bcae7d3293996f82edde98e5fa202752ae58bf37a0289d35d", size = 29524, upload-time = "2025-10-10T22:14:13.049Z" }, - { url = "https://files.pythonhosted.org/packages/00/03/58e7f4e1eacd1b1bb2c69aa0763d7aa39ba89c013b16d51522316b972492/crcmod_plus-2.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:728f68d0e3049ba23978aaf277f3eb405dd21e78be6ba96382739ba09bba473c", size = 29297, upload-time = "2025-10-10T22:14:13.916Z" }, - { url = "https://files.pythonhosted.org/packages/97/26/f4e31712287292693071f29369a9404c2013f7b9226a5cb50e3f44f93d90/crcmod_plus-2.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b3829ed0dba48765f9b4139cb70b9bdf6553d2154302d9e3de6377556357892f", size = 29020, upload-time = "2025-10-10T22:14:14.746Z" }, - { url = "https://files.pythonhosted.org/packages/60/5b/5f450f6e5edcfe93f019e2fd0a480103db1e853ae46983273e24e9dd96dd/crcmod_plus-2.3.1-cp39-cp39-win32.whl", hash = "sha256:855fcbd07c3eb9162c701c1c7ed1a8b5a5f7b1e8c2dd3fd8ed2273e2f141ecc9", size = 22369, upload-time = "2025-10-10T22:14:15.529Z" }, - { url = "https://files.pythonhosted.org/packages/6d/50/c6a03607712e51254e3f01b8d4214648e429578074f58f7cf11b83c89c86/crcmod_plus-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:5422081be6403b6fba736c544e79c68410307f7a1a8ac1925b421a5c6f4591d3", size = 22916, upload-time = "2025-10-10T22:14:16.475Z" }, + { url = "https://files.pythonhosted.org/packages/47/e0/2dad2e6f0cd4914b4144496d9785780ec820e200816c080df785cfa34da6/crcmod_plus-2.3.1-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:b7e35e0f7d93d7571c2c9c3d6760e456999ea4c1eae5ead6acac247b5a79e469", size = 23279 }, + { url = "https://files.pythonhosted.org/packages/66/76/53c0b65b9679b903f98fc54efa32b0e5a19634712a45200c7a80674aa6f5/crcmod_plus-2.3.1-cp311-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6853243120db84677b94b625112116f0ef69cd581741d20de58dce4c34242654", size = 20185 }, + { url = "https://files.pythonhosted.org/packages/98/79/2b4dc9bb26394873d7699737124408b5106264ae33053fdec600e9a9fa65/crcmod_plus-2.3.1-cp311-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:17735bc4e944d552ea18c8609fc6d08a5e64ee9b29cc216ba4d623754029cc3a", size = 26999 }, + { url = "https://files.pythonhosted.org/packages/bb/e8/f5d66778b5a1bff915807016561a02b5cebf6b3840fb8a2be40bbb0c8575/crcmod_plus-2.3.1-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8ac755040a2a35f43ab331978c48a9acb4ff64b425f282a296be467a410f00c3", size = 27536 }, + { url = "https://files.pythonhosted.org/packages/f3/2c/0113ad30cadad40c22eef08c0f2618f2446dd282f02268fecbcfc9fda3c1/crcmod_plus-2.3.1-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:7bdcfb838ca093ca673a3bbb37f62d1e5ec7182e00cc5ee2d00759f9f9f8ab11", size = 27385 }, + { url = "https://files.pythonhosted.org/packages/8e/ba/501ef1b02119402cf1a31c01eb2cb8399660bca863c2f4dd3dc060220284/crcmod_plus-2.3.1-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:9166bc3c9b5e7b07b4e6854cac392b4a451b31d58d3950e48c140ab7b5d05394", size = 27135 }, + { url = "https://files.pythonhosted.org/packages/49/90/d4556c9db69c83e726c5b88da3d656fdaac7d60c4d27b43cb939bed80069/crcmod_plus-2.3.1-cp311-abi3-win32.whl", hash = "sha256:cb99b694cce5c862560cf332a8b5e793620e28f0de3726995608bbd6f9b6e09a", size = 22384 }, + { url = "https://files.pythonhosted.org/packages/4d/7e/57bb97a8c7b4e19900744f58b67dc83bc9c83aaac670deeede9fb3bfab6a/crcmod_plus-2.3.1-cp311-abi3-win_amd64.whl", hash = "sha256:82b0f7e968c430c5a80fe0fc59e75cb54f2e84df2ed0cee5a3ff9cadfbf8a220", size = 22912 }, + { url = "https://files.pythonhosted.org/packages/a4/12/fd9c058b7c2d8c63841038bd9b7a1781881c93ab06d8357a9eecb46c0b74/crcmod_plus-2.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:22600072de422632531e92d7675faf223a5b2548d45c5cd6f77ec4575339900f", size = 23145 }, + { url = "https://files.pythonhosted.org/packages/0f/e2/002c5ee72d99bcc382f15d95f539daf0c2de31bc929f0d9e18733b4facde/crcmod_plus-2.3.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f940704e359607b47b4a8e98c4d0f453f15bea039eb183cd0ffb14a8268fea78", size = 20120 }, + { url = "https://files.pythonhosted.org/packages/1f/0d/9584047c81aceb2e2e655160d10cd3c39cbf1fad52bcd6dd205ada1e077d/crcmod_plus-2.3.1-cp39-cp39-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f939fc1f7d143962a8fbed2305ce5931627fea1ea3a7f1865c04dbba9d41bf67", size = 28810 }, + { url = "https://files.pythonhosted.org/packages/46/9f/300d48c4fc6bc409af700fa9bde85faab3934768719bdcc1759b6cce974c/crcmod_plus-2.3.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c3c6e8c7cf7ef49bcae7d3293996f82edde98e5fa202752ae58bf37a0289d35d", size = 29524 }, + { url = "https://files.pythonhosted.org/packages/00/03/58e7f4e1eacd1b1bb2c69aa0763d7aa39ba89c013b16d51522316b972492/crcmod_plus-2.3.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:728f68d0e3049ba23978aaf277f3eb405dd21e78be6ba96382739ba09bba473c", size = 29297 }, + { url = "https://files.pythonhosted.org/packages/97/26/f4e31712287292693071f29369a9404c2013f7b9226a5cb50e3f44f93d90/crcmod_plus-2.3.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b3829ed0dba48765f9b4139cb70b9bdf6553d2154302d9e3de6377556357892f", size = 29020 }, + { url = "https://files.pythonhosted.org/packages/60/5b/5f450f6e5edcfe93f019e2fd0a480103db1e853ae46983273e24e9dd96dd/crcmod_plus-2.3.1-cp39-cp39-win32.whl", hash = "sha256:855fcbd07c3eb9162c701c1c7ed1a8b5a5f7b1e8c2dd3fd8ed2273e2f141ecc9", size = 22369 }, + { url = "https://files.pythonhosted.org/packages/6d/50/c6a03607712e51254e3f01b8d4214648e429578074f58f7cf11b83c89c86/crcmod_plus-2.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:5422081be6403b6fba736c544e79c68410307f7a1a8ac1925b421a5c6f4591d3", size = 22916 }, ] [[package]] @@ -402,31 +404,31 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "cffi" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/bf/92/3301a5d4fb734290a8bca5a9aad61ea61327ed53cb19be110d4f3548df76/cryptography-41.0.0.tar.gz", hash = "sha256:6b71f64beeea341c9b4f963b48ee3b62d62d57ba93eb120e1196b31dc1025e78", size = 628254, upload-time = "2023-05-30T21:47:56.594Z" } +sdist = { url = "https://files.pythonhosted.org/packages/bf/92/3301a5d4fb734290a8bca5a9aad61ea61327ed53cb19be110d4f3548df76/cryptography-41.0.0.tar.gz", hash = "sha256:6b71f64beeea341c9b4f963b48ee3b62d62d57ba93eb120e1196b31dc1025e78", size = 628254 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/31/06d6c33f93165c0fc80008fdeab4543b1ce7ceebcc2cf66da70e5e1daaad/cryptography-41.0.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:3c5ef25d060c80d6d9f7f9892e1d41bb1c79b78ce74805b8cb4aa373cb7d5ec8", size = 5315010, upload-time = "2023-05-30T21:47:16.76Z" }, - { url = "https://files.pythonhosted.org/packages/4e/60/e02e88f973fcf2366008d1e0b62e9ef6e432e00d6edae0e47371fe624ccb/cryptography-41.0.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8362565b3835ceacf4dc8f3b56471a2289cf51ac80946f9087e66dc283a810e0", size = 2829238, upload-time = "2023-05-30T21:47:38.055Z" }, - { url = "https://files.pythonhosted.org/packages/5b/97/1096bb43ff0f9f40a6a04fc26fe209b2991805257a2c2e32f1076201f2dd/cryptography-41.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3680248309d340fda9611498a5319b0193a8dbdb73586a1acf8109d06f25b92d", size = 4080931, upload-time = "2023-05-30T21:46:53.773Z" }, - { url = "https://files.pythonhosted.org/packages/76/94/e5b948856427b66575e194764e54bb43669e7764396868d015f1e40b5e3a/cryptography-41.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84a165379cb9d411d58ed739e4af3396e544eac190805a54ba2e0322feb55c46", size = 4299395, upload-time = "2023-05-30T21:47:34.892Z" }, - { url = "https://files.pythonhosted.org/packages/a3/90/182588b47bbe52438193d93a9901d0dddfe25b7abdc25196473f896e63e3/cryptography-41.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4ab14d567f7bbe7f1cdff1c53d5324ed4d3fc8bd17c481b395db224fb405c237", size = 4069007, upload-time = "2023-05-30T21:47:29.977Z" }, - { url = "https://files.pythonhosted.org/packages/92/b6/22b9b21fecfb03a90ce9393053f054b2742b00e704c20a595cf4c15f975e/cryptography-41.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9f65e842cb02550fac96536edb1d17f24c0a338fd84eaf582be25926e993dde4", size = 4307626, upload-time = "2023-05-30T21:47:03.438Z" }, - { url = "https://files.pythonhosted.org/packages/f7/a3/83dc953152063db9d7a2d3349d913576fc672b71523581ddb0faa6af22bc/cryptography-41.0.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:b7f2f5c525a642cecad24ee8670443ba27ac1fab81bba4cc24c7b6b41f2d0c75", size = 4178249, upload-time = "2023-05-30T21:47:01.017Z" }, - { url = "https://files.pythonhosted.org/packages/67/da/096e2074dee14fa5793ed60a39efcab0d9851a67859bf468b1862d53e35a/cryptography-41.0.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7d92f0248d38faa411d17f4107fc0bce0c42cae0b0ba5415505df72d751bf62d", size = 4377029, upload-time = "2023-05-30T21:47:06.101Z" }, - { url = "https://files.pythonhosted.org/packages/9b/00/1cb49039236a71b9c8511ec3ba7d5153c22b022d67518499f34dcafc8c2e/cryptography-41.0.0-cp37-abi3-win32.whl", hash = "sha256:34d405ea69a8b34566ba3dfb0521379b210ea5d560fafedf9f800a9a94a41928", size = 2209044, upload-time = "2023-05-30T21:46:56.371Z" }, - { url = "https://files.pythonhosted.org/packages/ab/40/bb01066d306329d3f0e440c5e9863f08d29e783c827ce74a823889d56977/cryptography-41.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:344c6de9f8bda3c425b3a41b319522ba3208551b70c2ae00099c205f0d9fd3be", size = 2640813, upload-time = "2023-05-30T21:47:20.142Z" }, - { url = "https://files.pythonhosted.org/packages/31/50/db80a57bbaa2cd29162449ac7dd5850a8f5e7c547c2842fd6458e2b62c04/cryptography-41.0.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf8fc66012ca857d62f6a347007e166ed59c0bc150cefa49f28376ebe7d992a2", size = 2697330, upload-time = "2023-05-30T21:47:43.059Z" }, - { url = "https://files.pythonhosted.org/packages/70/97/0c178505eb329f0c338888ab3fd058101cb5054fc5cf4b9e2edce3e340f9/cryptography-41.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a4fc68d1c5b951cfb72dfd54702afdbbf0fb7acdc9b7dc4301bbf2225a27714d", size = 3978273, upload-time = "2023-05-30T21:47:40.655Z" }, - { url = "https://files.pythonhosted.org/packages/bf/d5/d68700d996a35c7041c5183aab35572064da0b7ba1dfb7526269a7faeeb8/cryptography-41.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:14754bcdae909d66ff24b7b5f166d69340ccc6cb15731670435efd5719294895", size = 4194143, upload-time = "2023-05-30T21:47:08.775Z" }, - { url = "https://files.pythonhosted.org/packages/38/d9/a8d08aada88bcb8ea4f1a0a34e3d9cf3ce0faea3df69e54c232e88ab8b32/cryptography-41.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0ddaee209d1cf1f180f1efa338a68c4621154de0afaef92b89486f5f96047c55", size = 2516950, upload-time = "2023-05-30T21:47:22.765Z" }, + { url = "https://files.pythonhosted.org/packages/e4/31/06d6c33f93165c0fc80008fdeab4543b1ce7ceebcc2cf66da70e5e1daaad/cryptography-41.0.0-cp37-abi3-macosx_10_12_universal2.whl", hash = "sha256:3c5ef25d060c80d6d9f7f9892e1d41bb1c79b78ce74805b8cb4aa373cb7d5ec8", size = 5315010 }, + { url = "https://files.pythonhosted.org/packages/4e/60/e02e88f973fcf2366008d1e0b62e9ef6e432e00d6edae0e47371fe624ccb/cryptography-41.0.0-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:8362565b3835ceacf4dc8f3b56471a2289cf51ac80946f9087e66dc283a810e0", size = 2829238 }, + { url = "https://files.pythonhosted.org/packages/5b/97/1096bb43ff0f9f40a6a04fc26fe209b2991805257a2c2e32f1076201f2dd/cryptography-41.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3680248309d340fda9611498a5319b0193a8dbdb73586a1acf8109d06f25b92d", size = 4080931 }, + { url = "https://files.pythonhosted.org/packages/76/94/e5b948856427b66575e194764e54bb43669e7764396868d015f1e40b5e3a/cryptography-41.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84a165379cb9d411d58ed739e4af3396e544eac190805a54ba2e0322feb55c46", size = 4299395 }, + { url = "https://files.pythonhosted.org/packages/a3/90/182588b47bbe52438193d93a9901d0dddfe25b7abdc25196473f896e63e3/cryptography-41.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:4ab14d567f7bbe7f1cdff1c53d5324ed4d3fc8bd17c481b395db224fb405c237", size = 4069007 }, + { url = "https://files.pythonhosted.org/packages/92/b6/22b9b21fecfb03a90ce9393053f054b2742b00e704c20a595cf4c15f975e/cryptography-41.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9f65e842cb02550fac96536edb1d17f24c0a338fd84eaf582be25926e993dde4", size = 4307626 }, + { url = "https://files.pythonhosted.org/packages/f7/a3/83dc953152063db9d7a2d3349d913576fc672b71523581ddb0faa6af22bc/cryptography-41.0.0-cp37-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:b7f2f5c525a642cecad24ee8670443ba27ac1fab81bba4cc24c7b6b41f2d0c75", size = 4178249 }, + { url = "https://files.pythonhosted.org/packages/67/da/096e2074dee14fa5793ed60a39efcab0d9851a67859bf468b1862d53e35a/cryptography-41.0.0-cp37-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:7d92f0248d38faa411d17f4107fc0bce0c42cae0b0ba5415505df72d751bf62d", size = 4377029 }, + { url = "https://files.pythonhosted.org/packages/9b/00/1cb49039236a71b9c8511ec3ba7d5153c22b022d67518499f34dcafc8c2e/cryptography-41.0.0-cp37-abi3-win32.whl", hash = "sha256:34d405ea69a8b34566ba3dfb0521379b210ea5d560fafedf9f800a9a94a41928", size = 2209044 }, + { url = "https://files.pythonhosted.org/packages/ab/40/bb01066d306329d3f0e440c5e9863f08d29e783c827ce74a823889d56977/cryptography-41.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:344c6de9f8bda3c425b3a41b319522ba3208551b70c2ae00099c205f0d9fd3be", size = 2640813 }, + { url = "https://files.pythonhosted.org/packages/31/50/db80a57bbaa2cd29162449ac7dd5850a8f5e7c547c2842fd6458e2b62c04/cryptography-41.0.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bf8fc66012ca857d62f6a347007e166ed59c0bc150cefa49f28376ebe7d992a2", size = 2697330 }, + { url = "https://files.pythonhosted.org/packages/70/97/0c178505eb329f0c338888ab3fd058101cb5054fc5cf4b9e2edce3e340f9/cryptography-41.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:a4fc68d1c5b951cfb72dfd54702afdbbf0fb7acdc9b7dc4301bbf2225a27714d", size = 3978273 }, + { url = "https://files.pythonhosted.org/packages/bf/d5/d68700d996a35c7041c5183aab35572064da0b7ba1dfb7526269a7faeeb8/cryptography-41.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:14754bcdae909d66ff24b7b5f166d69340ccc6cb15731670435efd5719294895", size = 4194143 }, + { url = "https://files.pythonhosted.org/packages/38/d9/a8d08aada88bcb8ea4f1a0a34e3d9cf3ce0faea3df69e54c232e88ab8b32/cryptography-41.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:0ddaee209d1cf1f180f1efa338a68c4621154de0afaef92b89486f5f96047c55", size = 2516950 }, ] [[package]] name = "cssselect" version = "1.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/0a/c3ea9573b1dc2e151abfe88c7fe0c26d1892fe6ed02d0cdb30f0d57029d5/cssselect-1.3.0.tar.gz", hash = "sha256:57f8a99424cfab289a1b6a816a43075a4b00948c86b4dcf3ef4ee7e15f7ab0c7", size = 42870, upload-time = "2025-03-10T09:30:29.638Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/0a/c3ea9573b1dc2e151abfe88c7fe0c26d1892fe6ed02d0cdb30f0d57029d5/cssselect-1.3.0.tar.gz", hash = "sha256:57f8a99424cfab289a1b6a816a43075a4b00948c86b4dcf3ef4ee7e15f7ab0c7", size = 42870 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ee/58/257350f7db99b4ae12b614a36256d9cc870d71d9e451e79c2dc3b23d7c3c/cssselect-1.3.0-py3-none-any.whl", hash = "sha256:56d1bf3e198080cc1667e137bc51de9cadfca259f03c2d4e09037b3e01e30f0d", size = 18786, upload-time = "2025-03-10T09:30:28.048Z" }, + { url = "https://files.pythonhosted.org/packages/ee/58/257350f7db99b4ae12b614a36256d9cc870d71d9e451e79c2dc3b23d7c3c/cssselect-1.3.0-py3-none-any.whl", hash = "sha256:56d1bf3e198080cc1667e137bc51de9cadfca259f03c2d4e09037b3e01e30f0d", size = 18786 }, ] [[package]] @@ -436,18 +438,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "openpyxl" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b4/a1/43d52eada4e1364f8d1a5da99b855798f945228ffb7dfb199f675c1d2c2b/DataRecorder-3.6.2.tar.gz", hash = "sha256:8c9024736692af68b947fd884589e685c4f27bc29d031b81164457b09c60e1e5", size = 29567, upload-time = "2024-10-15T08:58:36.923Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b4/a1/43d52eada4e1364f8d1a5da99b855798f945228ffb7dfb199f675c1d2c2b/DataRecorder-3.6.2.tar.gz", hash = "sha256:8c9024736692af68b947fd884589e685c4f27bc29d031b81164457b09c60e1e5", size = 29567 } wheels = [ - { url = "https://files.pythonhosted.org/packages/33/05/f0064d93a0b922ea7ad5d40a0dfaac45de37f783a85a2900e6ce8a01dbc3/DataRecorder-3.6.2-py3-none-any.whl", hash = "sha256:41ad022c4c1db58a0f4236f6a4991d1f98cd76ec049484b172bbb3040455e5ff", size = 37539, upload-time = "2024-10-15T08:58:35.419Z" }, + { url = "https://files.pythonhosted.org/packages/33/05/f0064d93a0b922ea7ad5d40a0dfaac45de37f783a85a2900e6ce8a01dbc3/DataRecorder-3.6.2-py3-none-any.whl", hash = "sha256:41ad022c4c1db58a0f4236f6a4991d1f98cd76ec049484b172bbb3040455e5ff", size = 37539 }, ] [[package]] name = "distro" version = "1.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722, upload-time = "2023-12-24T09:54:32.31Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fc/f8/98eea607f65de6527f8a2e8885fc8015d3e6f5775df186e443e0964a11c3/distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed", size = 60722 } wheels = [ - { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" }, + { url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277 }, ] [[package]] @@ -458,9 +460,9 @@ dependencies = [ { name = "datarecorder" }, { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/6b/35/9bbaed54f5d170b1fd8bcfdd3ce5e24ea71f4cac5026a37e6b21ab69726e/DownloadKit-2.0.7.tar.gz", hash = "sha256:601e423d1d4d0bd3e933524d06c913e744577d455990ec20afc3fb1f79aea9a7", size = 17488, upload-time = "2024-11-30T01:24:30.539Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/35/9bbaed54f5d170b1fd8bcfdd3ce5e24ea71f4cac5026a37e6b21ab69726e/DownloadKit-2.0.7.tar.gz", hash = "sha256:601e423d1d4d0bd3e933524d06c913e744577d455990ec20afc3fb1f79aea9a7", size = 17488 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1b/89/979ad2407eb8e0a2ac67461b7bec7db8627218fe3ba287db49636ca0a60c/DownloadKit-2.0.7-py3-none-any.whl", hash = "sha256:55b142d26b4e7ae01fff2181991c92aca9b895f75e2cd8a54f4a3b48c50b90b4", size = 21706, upload-time = "2024-11-30T01:24:17.599Z" }, + { url = "https://files.pythonhosted.org/packages/1b/89/979ad2407eb8e0a2ac67461b7bec7db8627218fe3ba287db49636ca0a60c/DownloadKit-2.0.7-py3-none-any.whl", hash = "sha256:55b142d26b4e7ae01fff2181991c92aca9b895f75e2cd8a54f4a3b48c50b90b4", size = 21706 }, ] [[package]] @@ -477,18 +479,18 @@ dependencies = [ { name = "tldextract" }, { name = "websocket-client" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/12/b3/26bb358f3c7019bba0a2e27a636382a4226780628c30ab315537524809fb/drissionpage-4.1.1.2.tar.gz", hash = "sha256:e4375d3536519a1d24430270e2871de3015836b301cbdfb96583234e6d6ef4c1", size = 208034, upload-time = "2025-07-31T07:00:36.24Z" } +sdist = { url = "https://files.pythonhosted.org/packages/12/b3/26bb358f3c7019bba0a2e27a636382a4226780628c30ab315537524809fb/drissionpage-4.1.1.2.tar.gz", hash = "sha256:e4375d3536519a1d24430270e2871de3015836b301cbdfb96583234e6d6ef4c1", size = 208034 } wheels = [ - { url = "https://files.pythonhosted.org/packages/78/31/05834b38c12a222012f998d5c2f104f228cf8aaa37747f989c9b29e81d5d/DrissionPage-4.1.1.2-py3-none-any.whl", hash = "sha256:c8b58a8d495550142c10499ce7128655b2baf8f38f46604ba0ce951a148d88e8", size = 257497, upload-time = "2025-07-31T07:00:34.531Z" }, + { url = "https://files.pythonhosted.org/packages/78/31/05834b38c12a222012f998d5c2f104f228cf8aaa37747f989c9b29e81d5d/DrissionPage-4.1.1.2-py3-none-any.whl", hash = "sha256:c8b58a8d495550142c10499ce7128655b2baf8f38f46604ba0ce951a148d88e8", size = 257497 }, ] [[package]] name = "et-xmlfile" version = "2.0.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234, upload-time = "2024-10-25T17:25:40.039Z" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/38/af70d7ab1ae9d4da450eeec1fa3918940a5fafb9055e934af8d6eb0c2313/et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54", size = 17234 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059, upload-time = "2024-10-25T17:25:39.051Z" }, + { url = "https://files.pythonhosted.org/packages/c1/8b/5fe2cc11fee489817272089c4203e679c63b570a5aaeb18d852ae3cbba6a/et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa", size = 18059 }, ] [[package]] @@ -498,18 +500,18 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740 }, ] [[package]] name = "filelock" version = "3.19.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687, upload-time = "2025-08-14T16:56:03.016Z" } +sdist = { url = "https://files.pythonhosted.org/packages/40/bb/0ab3e58d22305b6f5440629d20683af28959bf793d98d11950e305c1c326/filelock-3.19.1.tar.gz", hash = "sha256:66eda1888b0171c998b35be2bcc0f6d75c388a7ce20c3f3f37aa8e96c2dddf58", size = 17687 } wheels = [ - { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988, upload-time = "2025-08-14T16:56:01.633Z" }, + { url = "https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl", hash = "sha256:d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d", size = 15988 }, ] [[package]] @@ -525,9 +527,9 @@ dependencies = [ { name = "markupsafe" }, { name = "werkzeug" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/26/00/35d85dcce6c57fdc871f3867d465d780f302a175ea360f62533f12b27e2b/flask-3.1.3.tar.gz", hash = "sha256:0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb", size = 759004, upload-time = "2026-02-19T05:00:57.678Z" } +sdist = { url = "https://files.pythonhosted.org/packages/26/00/35d85dcce6c57fdc871f3867d465d780f302a175ea360f62533f12b27e2b/flask-3.1.3.tar.gz", hash = "sha256:0ef0e52b8a9cd932855379197dd8f94047b359ca0a78695144304cb45f87c9eb", size = 759004 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl", hash = "sha256:f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c", size = 103424, upload-time = "2026-02-19T05:00:56.027Z" }, + { url = "https://files.pythonhosted.org/packages/7f/9c/34f6962f9b9e9c71f6e5ed806e0d0ff03c9d1b0b2340088a0cf4bce09b18/flask-3.1.3-py3-none-any.whl", hash = "sha256:f4bcbefc124291925f1a26446da31a5178f9483862233b23c0c96a20701f670c", size = 103424 }, ] [[package]] @@ -538,18 +540,18 @@ dependencies = [ { name = "flask" }, { name = "werkzeug" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/70/74/0fc0fa68d62f21daef41017dafab19ef4b36551521260987eb3a5394c7ba/flask_cors-6.0.2.tar.gz", hash = "sha256:6e118f3698249ae33e429760db98ce032a8bf9913638d085ca0f4c5534ad2423", size = 13472, upload-time = "2025-12-12T20:31:42.861Z" } +sdist = { url = "https://files.pythonhosted.org/packages/70/74/0fc0fa68d62f21daef41017dafab19ef4b36551521260987eb3a5394c7ba/flask_cors-6.0.2.tar.gz", hash = "sha256:6e118f3698249ae33e429760db98ce032a8bf9913638d085ca0f4c5534ad2423", size = 13472 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4f/af/72ad54402e599152de6d067324c46fe6a4f531c7c65baf7e96c63db55eaf/flask_cors-6.0.2-py3-none-any.whl", hash = "sha256:e57544d415dfd7da89a9564e1e3a9e515042df76e12130641ca6f3f2f03b699a", size = 13257, upload-time = "2025-12-12T20:31:41.3Z" }, + { url = "https://files.pythonhosted.org/packages/4f/af/72ad54402e599152de6d067324c46fe6a4f531c7c65baf7e96c63db55eaf/flask_cors-6.0.2-py3-none-any.whl", hash = "sha256:e57544d415dfd7da89a9564e1e3a9e515042df76e12130641ca6f3f2f03b699a", size = 13257 }, ] [[package]] name = "h11" version = "0.16.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515 }, ] [[package]] @@ -560,9 +562,9 @@ dependencies = [ { name = "certifi" }, { name = "h11" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484, upload-time = "2025-04-24T22:06:22.219Z" } +sdist = { url = "https://files.pythonhosted.org/packages/06/94/82699a10bca87a5556c9c59b5963f2d039dbd239f25bc2a63907a05a14cb/httpcore-1.0.9.tar.gz", hash = "sha256:6e34463af53fd2ab5d807f399a9b45ea31c3dfa2276f15a2c3f00afff6e176e8", size = 85484 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784, upload-time = "2025-04-24T22:06:20.566Z" }, + { url = "https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl", hash = "sha256:2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55", size = 78784 }, ] [[package]] @@ -575,18 +577,18 @@ dependencies = [ { name = "httpcore" }, { name = "idna" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406, upload-time = "2024-12-06T15:37:23.222Z" } +sdist = { url = "https://files.pythonhosted.org/packages/b1/df/48c586a5fe32a0f01324ee087459e112ebb7224f646c0b5023f5e79e9956/httpx-0.28.1.tar.gz", hash = "sha256:75e98c5f16b0f35b567856f597f06ff2270a374470a5c2392242528e3e3e42fc", size = 141406 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" }, + { url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517 }, ] [[package]] name = "idna" version = "3.11" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008 }, ] [[package]] @@ -596,27 +598,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "zipp" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107, upload-time = "2025-12-21T10:00:19.278Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/49/3b30cad09e7771a4982d9975a8cbf64f00d4a1ececb53297f1d9a7be1b10/importlib_metadata-8.7.1.tar.gz", hash = "sha256:49fef1ae6440c182052f407c8d34a68f72efc36db9ca90dc0113398f2fdde8bb", size = 57107 } wheels = [ - { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865, upload-time = "2025-12-21T10:00:18.329Z" }, + { url = "https://files.pythonhosted.org/packages/fa/5e/f8e9a1d23b9c20a551a8a02ea3637b4642e22c2626e3a13a9a29cdea99eb/importlib_metadata-8.7.1-py3-none-any.whl", hash = "sha256:5a1f80bf1daa489495071efbb095d75a634cf28a8bc299581244063b53176151", size = 27865 }, ] [[package]] name = "iniconfig" version = "2.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793, upload-time = "2025-03-19T20:09:59.721Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/97/ebf4da567aa6827c909642694d71c9fcf53e5b504f2d96afea02718862f3/iniconfig-2.1.0.tar.gz", hash = "sha256:3abbd2e30b36733fee78f9c7f7308f2d0050e88f0087fd25c2645f63c773e1c7", size = 4793 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050, upload-time = "2025-03-19T20:10:01.071Z" }, + { url = "https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl", hash = "sha256:9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760", size = 6050 }, ] [[package]] name = "itsdangerous" version = "2.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410, upload-time = "2024-04-16T21:28:15.614Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9c/cb/8ac0172223afbccb63986cc25049b154ecfb5e85932587206f42317be31d/itsdangerous-2.2.0.tar.gz", hash = "sha256:e0050c0b7da1eea53ffaf149c0cfbb5c6e2e2b69c4bef22c81fa6eb73e5f6173", size = 54410 } wheels = [ - { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234, upload-time = "2024-04-16T21:28:14.499Z" }, + { url = "https://files.pythonhosted.org/packages/04/96/92447566d16df59b2a776c0fb82dbc4d9e07cd95062562af01e408583fc4/itsdangerous-2.2.0-py3-none-any.whl", hash = "sha256:c6242fc49e35958c8b15141343aa660db5fc54d4f13a1db01a3f5891b98700ef", size = 16234 }, ] [[package]] @@ -626,33 +628,46 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" } +sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115 } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" }, + { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899 }, +] + +[[package]] +name = "loguru" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "win32-setctime", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595 }, ] [[package]] name = "lxml" version = "6.0.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426, upload-time = "2025-09-22T04:04:59.287Z" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/88/262177de60548e5a2bfc46ad28232c9e9cbde697bd94132aeb80364675cb/lxml-6.0.2.tar.gz", hash = "sha256:cd79f3367bd74b317dda655dc8fcfa304d9eb6e4fb06b7168c5cf27f96e0cd62", size = 4073426 } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/66/dd13c74fad495957374c8a81c932f4874d3dca5aa0db9e4369f06a399718/lxml-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2c8458c2cdd29589a8367c09c8f030f1d202be673f0ca224ec18590b3b9fb694", size = 8602363, upload-time = "2025-09-22T04:03:58.698Z" }, - { url = "https://files.pythonhosted.org/packages/5e/f4/edb9d47dce464b5dd044d35775ee794364935b93ab6226c95e199118890d/lxml-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fee0851639d06276e6b387f1c190eb9d7f06f7f53514e966b26bae46481ec90", size = 4634995, upload-time = "2025-09-22T04:04:01.122Z" }, - { url = "https://files.pythonhosted.org/packages/66/f2/d80c97b6ed83a99bc24b2b29919d5e618af5322df6d3aa61064093712309/lxml-6.0.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b2142a376b40b6736dfc214fd2902409e9e3857eff554fed2d3c60f097e62a62", size = 5003737, upload-time = "2025-09-22T04:04:02.98Z" }, - { url = "https://files.pythonhosted.org/packages/d5/f1/18b750f79f8889b9109b24749f23ac137870b4f685edc4be54be0ff2c730/lxml-6.0.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a6b5b39cc7e2998f968f05309e666103b53e2edd01df8dc51b90d734c0825444", size = 5160821, upload-time = "2025-09-22T04:04:04.854Z" }, - { url = "https://files.pythonhosted.org/packages/cf/88/2b6a415dbad411c3e9c092128eb7db06054d2d9460aa56676d17ee4f4fd5/lxml-6.0.2-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4aec24d6b72ee457ec665344a29acb2d35937d5192faebe429ea02633151aad", size = 5070959, upload-time = "2025-09-22T04:04:07.042Z" }, - { url = "https://files.pythonhosted.org/packages/7c/d0/5354afaa0f2e53625e5f96f6bd049a4875c3ab79d96d6c4871dd1f4a98c4/lxml-6.0.2-cp39-cp39-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:b42f4d86b451c2f9d06ffb4f8bbc776e04df3ba070b9fe2657804b1b40277c48", size = 5410267, upload-time = "2025-09-22T04:04:10.458Z" }, - { url = "https://files.pythonhosted.org/packages/51/63/10dea35a01291dc529fa9d6ba204ea627a1c77b7fbb180d404f6cc4dd2fd/lxml-6.0.2-cp39-cp39-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cdaefac66e8b8f30e37a9b4768a391e1f8a16a7526d5bc77a7928408ef68e93", size = 5292990, upload-time = "2025-09-22T04:04:12.405Z" }, - { url = "https://files.pythonhosted.org/packages/37/58/51ef422d8bec58db600b3552e5f2d870ec01ffacf11d98689c42ffdcbf7f/lxml-6.0.2-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:b738f7e648735714bbb82bdfd030203360cfeab7f6e8a34772b3c8c8b820568c", size = 4776318, upload-time = "2025-09-22T04:04:14.22Z" }, - { url = "https://files.pythonhosted.org/packages/77/97/3f797820e82e3a58a19bc51068b40f3b9ab7d0934ba6e5ba6b147b618319/lxml-6.0.2-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:daf42de090d59db025af61ce6bdb2521f0f102ea0e6ea310f13c17610a97da4c", size = 5360191, upload-time = "2025-09-22T04:04:16.236Z" }, - { url = "https://files.pythonhosted.org/packages/e2/14/a9306a8ab122e2f5dfbf4f71fb09beeadca26b0c275708432bbc33f40edc/lxml-6.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:66328dabea70b5ba7e53d94aa774b733cf66686535f3bc9250a7aab53a91caaf", size = 5116114, upload-time = "2025-09-22T04:04:18.594Z" }, - { url = "https://files.pythonhosted.org/packages/ea/23/2118a1685277b9fa8726ec7ee903db55aa300dcea3d406a220cbe3710953/lxml-6.0.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:e237b807d68a61fc3b1e845407e27e5eb8ef69bc93fe8505337c1acb4ee300b6", size = 4801704, upload-time = "2025-09-22T04:04:20.466Z" }, - { url = "https://files.pythonhosted.org/packages/4e/e8/d5be34da2059dc9a4ff8643fd6ad3f8234a27b2a44831b7fff58c4dbb3e3/lxml-6.0.2-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:ac02dc29fd397608f8eb15ac1610ae2f2f0154b03f631e6d724d9e2ad4ee2c84", size = 5355451, upload-time = "2025-09-22T04:04:22.417Z" }, - { url = "https://files.pythonhosted.org/packages/61/84/5aebc8e150d5bf488815ea2d8798c7ff509cc37b5725caa3c1f11bdd3245/lxml-6.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:817ef43a0c0b4a77bd166dc9a09a555394105ff3374777ad41f453526e37f9cb", size = 5318630, upload-time = "2025-09-22T04:04:24.301Z" }, - { url = "https://files.pythonhosted.org/packages/35/04/629ae603c1c17fb7adc9df2bc21aa5ac96afb84001700b13c1f038f3118c/lxml-6.0.2-cp39-cp39-win32.whl", hash = "sha256:bc532422ff26b304cfb62b328826bd995c96154ffd2bac4544f37dbb95ecaa8f", size = 3614032, upload-time = "2025-09-22T04:04:26.158Z" }, - { url = "https://files.pythonhosted.org/packages/71/de/07b7b1249acbecbf48f7e42c3ce87a657af6ff38e30f12a1ad81f16010f2/lxml-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:995e783eb0374c120f528f807443ad5a83a656a8624c467ea73781fc5f8a8304", size = 4035311, upload-time = "2025-09-22T04:04:28.413Z" }, - { url = "https://files.pythonhosted.org/packages/60/e3/02c4c55b281606f3c8e118300e16a9fcf5f3462cc46ce740ed0b82fc3f1b/lxml-6.0.2-cp39-cp39-win_arm64.whl", hash = "sha256:08b9d5e803c2e4725ae9e8559ee880e5328ed61aa0935244e0515d7d9dbec0aa", size = 3683462, upload-time = "2025-09-22T04:04:30.399Z" }, + { url = "https://files.pythonhosted.org/packages/38/66/dd13c74fad495957374c8a81c932f4874d3dca5aa0db9e4369f06a399718/lxml-6.0.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2c8458c2cdd29589a8367c09c8f030f1d202be673f0ca224ec18590b3b9fb694", size = 8602363 }, + { url = "https://files.pythonhosted.org/packages/5e/f4/edb9d47dce464b5dd044d35775ee794364935b93ab6226c95e199118890d/lxml-6.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3fee0851639d06276e6b387f1c190eb9d7f06f7f53514e966b26bae46481ec90", size = 4634995 }, + { url = "https://files.pythonhosted.org/packages/66/f2/d80c97b6ed83a99bc24b2b29919d5e618af5322df6d3aa61064093712309/lxml-6.0.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b2142a376b40b6736dfc214fd2902409e9e3857eff554fed2d3c60f097e62a62", size = 5003737 }, + { url = "https://files.pythonhosted.org/packages/d5/f1/18b750f79f8889b9109b24749f23ac137870b4f685edc4be54be0ff2c730/lxml-6.0.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:a6b5b39cc7e2998f968f05309e666103b53e2edd01df8dc51b90d734c0825444", size = 5160821 }, + { url = "https://files.pythonhosted.org/packages/cf/88/2b6a415dbad411c3e9c092128eb7db06054d2d9460aa56676d17ee4f4fd5/lxml-6.0.2-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d4aec24d6b72ee457ec665344a29acb2d35937d5192faebe429ea02633151aad", size = 5070959 }, + { url = "https://files.pythonhosted.org/packages/7c/d0/5354afaa0f2e53625e5f96f6bd049a4875c3ab79d96d6c4871dd1f4a98c4/lxml-6.0.2-cp39-cp39-manylinux_2_26_i686.manylinux_2_28_i686.whl", hash = "sha256:b42f4d86b451c2f9d06ffb4f8bbc776e04df3ba070b9fe2657804b1b40277c48", size = 5410267 }, + { url = "https://files.pythonhosted.org/packages/51/63/10dea35a01291dc529fa9d6ba204ea627a1c77b7fbb180d404f6cc4dd2fd/lxml-6.0.2-cp39-cp39-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6cdaefac66e8b8f30e37a9b4768a391e1f8a16a7526d5bc77a7928408ef68e93", size = 5292990 }, + { url = "https://files.pythonhosted.org/packages/37/58/51ef422d8bec58db600b3552e5f2d870ec01ffacf11d98689c42ffdcbf7f/lxml-6.0.2-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:b738f7e648735714bbb82bdfd030203360cfeab7f6e8a34772b3c8c8b820568c", size = 4776318 }, + { url = "https://files.pythonhosted.org/packages/77/97/3f797820e82e3a58a19bc51068b40f3b9ab7d0934ba6e5ba6b147b618319/lxml-6.0.2-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:daf42de090d59db025af61ce6bdb2521f0f102ea0e6ea310f13c17610a97da4c", size = 5360191 }, + { url = "https://files.pythonhosted.org/packages/e2/14/a9306a8ab122e2f5dfbf4f71fb09beeadca26b0c275708432bbc33f40edc/lxml-6.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:66328dabea70b5ba7e53d94aa774b733cf66686535f3bc9250a7aab53a91caaf", size = 5116114 }, + { url = "https://files.pythonhosted.org/packages/ea/23/2118a1685277b9fa8726ec7ee903db55aa300dcea3d406a220cbe3710953/lxml-6.0.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:e237b807d68a61fc3b1e845407e27e5eb8ef69bc93fe8505337c1acb4ee300b6", size = 4801704 }, + { url = "https://files.pythonhosted.org/packages/4e/e8/d5be34da2059dc9a4ff8643fd6ad3f8234a27b2a44831b7fff58c4dbb3e3/lxml-6.0.2-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:ac02dc29fd397608f8eb15ac1610ae2f2f0154b03f631e6d724d9e2ad4ee2c84", size = 5355451 }, + { url = "https://files.pythonhosted.org/packages/61/84/5aebc8e150d5bf488815ea2d8798c7ff509cc37b5725caa3c1f11bdd3245/lxml-6.0.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:817ef43a0c0b4a77bd166dc9a09a555394105ff3374777ad41f453526e37f9cb", size = 5318630 }, + { url = "https://files.pythonhosted.org/packages/35/04/629ae603c1c17fb7adc9df2bc21aa5ac96afb84001700b13c1f038f3118c/lxml-6.0.2-cp39-cp39-win32.whl", hash = "sha256:bc532422ff26b304cfb62b328826bd995c96154ffd2bac4544f37dbb95ecaa8f", size = 3614032 }, + { url = "https://files.pythonhosted.org/packages/71/de/07b7b1249acbecbf48f7e42c3ce87a657af6ff38e30f12a1ad81f16010f2/lxml-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:995e783eb0374c120f528f807443ad5a83a656a8624c467ea73781fc5f8a8304", size = 4035311 }, + { url = "https://files.pythonhosted.org/packages/60/e3/02c4c55b281606f3c8e118300e16a9fcf5f3462cc46ce740ed0b82fc3f1b/lxml-6.0.2-cp39-cp39-win_arm64.whl", hash = "sha256:08b9d5e803c2e4725ae9e8559ee880e5328ed61aa0935244e0515d7d9dbec0aa", size = 3683462 }, ] [[package]] @@ -662,28 +677,28 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "altgraph" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/10/2f/97589876ea967487978071c9042518d28b958d87b17dceb7cdc1d881f963/macholib-1.16.4.tar.gz", hash = "sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362", size = 59427, upload-time = "2025-11-22T08:28:38.373Z" } +sdist = { url = "https://files.pythonhosted.org/packages/10/2f/97589876ea967487978071c9042518d28b958d87b17dceb7cdc1d881f963/macholib-1.16.4.tar.gz", hash = "sha256:f408c93ab2e995cd2c46e34fe328b130404be143469e41bc366c807448979362", size = 59427 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/d1/a9f36f8ecdf0fb7c9b1e78c8d7af12b8c8754e74851ac7b94a8305540fc7/macholib-1.16.4-py2.py3-none-any.whl", hash = "sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea", size = 38117, upload-time = "2025-11-22T08:28:36.939Z" }, + { url = "https://files.pythonhosted.org/packages/c7/d1/a9f36f8ecdf0fb7c9b1e78c8d7af12b8c8754e74851ac7b94a8305540fc7/macholib-1.16.4-py2.py3-none-any.whl", hash = "sha256:da1a3fa8266e30f0ce7e97c6a54eefaae8edd1e5f86f3eb8b95457cae90265ea", size = 38117 }, ] [[package]] name = "markupsafe" version = "3.0.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313 } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/23/0d8c13a44bde9154821586520840643467aee574d8ce79a17da539ee7fed/markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26", size = 11623, upload-time = "2025-09-27T18:37:29.296Z" }, - { url = "https://files.pythonhosted.org/packages/fd/23/07a2cb9a8045d5f3f0890a8c3bc0859d7a47bfd9a560b563899bec7b72ed/markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc", size = 12049, upload-time = "2025-09-27T18:37:30.234Z" }, - { url = "https://files.pythonhosted.org/packages/bc/e4/6be85eb81503f8e11b61c0b6369b6e077dcf0a74adbd9ebf6b349937b4e9/markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c", size = 21923, upload-time = "2025-09-27T18:37:31.177Z" }, - { url = "https://files.pythonhosted.org/packages/6f/bc/4dc914ead3fe6ddaef035341fee0fc956949bbd27335b611829292b89ee2/markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42", size = 20543, upload-time = "2025-09-27T18:37:32.168Z" }, - { url = "https://files.pythonhosted.org/packages/89/6e/5fe81fbcfba4aef4093d5f856e5c774ec2057946052d18d168219b7bd9f9/markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b", size = 20585, upload-time = "2025-09-27T18:37:33.166Z" }, - { url = "https://files.pythonhosted.org/packages/f6/f6/e0e5a3d3ae9c4020f696cd055f940ef86b64fe88de26f3a0308b9d3d048c/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758", size = 21387, upload-time = "2025-09-27T18:37:34.185Z" }, - { url = "https://files.pythonhosted.org/packages/c8/25/651753ef4dea08ea790f4fbb65146a9a44a014986996ca40102e237aa49a/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2", size = 20133, upload-time = "2025-09-27T18:37:35.138Z" }, - { url = "https://files.pythonhosted.org/packages/dc/0a/c3cf2b4fef5f0426e8a6d7fce3cb966a17817c568ce59d76b92a233fdbec/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d", size = 20588, upload-time = "2025-09-27T18:37:36.096Z" }, - { url = "https://files.pythonhosted.org/packages/cd/1b/a7782984844bd519ad4ffdbebbba2671ec5d0ebbeac34736c15fb86399e8/markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7", size = 14566, upload-time = "2025-09-27T18:37:37.09Z" }, - { url = "https://files.pythonhosted.org/packages/18/1f/8d9c20e1c9440e215a44be5ab64359e207fcb4f675543f1cf9a2a7f648d0/markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e", size = 15053, upload-time = "2025-09-27T18:37:38.054Z" }, - { url = "https://files.pythonhosted.org/packages/4e/d3/fe08482b5cd995033556d45041a4f4e76e7f0521112a9c9991d40d39825f/markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8", size = 13928, upload-time = "2025-09-27T18:37:39.037Z" }, + { url = "https://files.pythonhosted.org/packages/56/23/0d8c13a44bde9154821586520840643467aee574d8ce79a17da539ee7fed/markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26", size = 11623 }, + { url = "https://files.pythonhosted.org/packages/fd/23/07a2cb9a8045d5f3f0890a8c3bc0859d7a47bfd9a560b563899bec7b72ed/markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc", size = 12049 }, + { url = "https://files.pythonhosted.org/packages/bc/e4/6be85eb81503f8e11b61c0b6369b6e077dcf0a74adbd9ebf6b349937b4e9/markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c", size = 21923 }, + { url = "https://files.pythonhosted.org/packages/6f/bc/4dc914ead3fe6ddaef035341fee0fc956949bbd27335b611829292b89ee2/markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42", size = 20543 }, + { url = "https://files.pythonhosted.org/packages/89/6e/5fe81fbcfba4aef4093d5f856e5c774ec2057946052d18d168219b7bd9f9/markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b", size = 20585 }, + { url = "https://files.pythonhosted.org/packages/f6/f6/e0e5a3d3ae9c4020f696cd055f940ef86b64fe88de26f3a0308b9d3d048c/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758", size = 21387 }, + { url = "https://files.pythonhosted.org/packages/c8/25/651753ef4dea08ea790f4fbb65146a9a44a014986996ca40102e237aa49a/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2", size = 20133 }, + { url = "https://files.pythonhosted.org/packages/dc/0a/c3cf2b4fef5f0426e8a6d7fce3cb966a17817c568ce59d76b92a233fdbec/markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d", size = 20588 }, + { url = "https://files.pythonhosted.org/packages/cd/1b/a7782984844bd519ad4ffdbebbba2671ec5d0ebbeac34736c15fb86399e8/markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7", size = 14566 }, + { url = "https://files.pythonhosted.org/packages/18/1f/8d9c20e1c9440e215a44be5ab64359e207fcb4f675543f1cf9a2a7f648d0/markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e", size = 15053 }, + { url = "https://files.pythonhosted.org/packages/4e/d3/fe08482b5cd995033556d45041a4f4e76e7f0521112a9c9991d40d39825f/markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8", size = 13928 }, ] [[package]] @@ -695,7 +710,7 @@ dependencies = [ { name = "python3-xlib", marker = "sys_platform == 'linux'" }, { name = "rubicon-objc", marker = "sys_platform == 'darwin'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/28/fa/b2ba8229b9381e8f6381c1dcae6f4159a7f72349e414ed19cfbbd1817173/MouseInfo-0.1.3.tar.gz", hash = "sha256:2c62fb8885062b8e520a3cce0a297c657adcc08c60952eb05bc8256ef6f7f6e7", size = 10850, upload-time = "2020-03-27T21:20:10.136Z" } +sdist = { url = "https://files.pythonhosted.org/packages/28/fa/b2ba8229b9381e8f6381c1dcae6f4159a7f72349e414ed19cfbbd1817173/MouseInfo-0.1.3.tar.gz", hash = "sha256:2c62fb8885062b8e520a3cce0a297c657adcc08c60952eb05bc8256ef6f7f6e7", size = 10850 } [[package]] name = "nuitka" @@ -705,24 +720,24 @@ dependencies = [ { name = "ordered-set" }, { name = "zstandard" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/10/d9/c202b2e9d91f163417b4c5167df2a71707c57175d0540a4da8b1fc06d4f1/nuitka-2.8.6.tar.gz", hash = "sha256:a648c392d2a041f31c9582a68ef7c1a3a71166eaf2d344a0bb1d03f184ed3a2a", size = 3885843, upload-time = "2025-11-14T15:21:03.472Z" } +sdist = { url = "https://files.pythonhosted.org/packages/10/d9/c202b2e9d91f163417b4c5167df2a71707c57175d0540a4da8b1fc06d4f1/nuitka-2.8.6.tar.gz", hash = "sha256:a648c392d2a041f31c9582a68ef7c1a3a71166eaf2d344a0bb1d03f184ed3a2a", size = 3885843 } [[package]] name = "numpy" version = "1.25.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a0/41/8f53eff8e969dd8576ddfb45e7ed315407d27c7518ae49418be8ed532b07/numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760", size = 10805282, upload-time = "2023-07-31T15:17:43.198Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a0/41/8f53eff8e969dd8576ddfb45e7ed315407d27c7518ae49418be8ed532b07/numpy-1.25.2.tar.gz", hash = "sha256:fd608e19c8d7c55021dffd43bfe5492fab8cc105cc8986f813f8c3c048b38760", size = 10805282 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8b/d9/22c304cd123e0a1b7d89213e50ed6ec4b22f07f1117d64d28f81c08be428/numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3", size = 20847260, upload-time = "2023-07-31T14:57:44.838Z" }, - { url = "https://files.pythonhosted.org/packages/0f/a8/5057b97c395a710999b5697ffedd648caee82c24a29595952d26bd750155/numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926", size = 14022126, upload-time = "2023-07-31T14:58:08.418Z" }, - { url = "https://files.pythonhosted.org/packages/6d/b6/94a587cd64ef090f844ab1d8c8f1af44d07be7387f5f1a40eb729a0ff9c9/numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca", size = 14206441, upload-time = "2023-07-31T14:58:31.007Z" }, - { url = "https://files.pythonhosted.org/packages/69/1f/c95b1108a9972a52d7b1b63ed8ca70466b59b8c1811bd121f1e667cc45d8/numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295", size = 18263142, upload-time = "2023-07-31T14:58:59.337Z" }, - { url = "https://files.pythonhosted.org/packages/d3/76/fe6b9e75883d1f2bd3cd27cbc7307ec99a0cc76fa941937c177f464fd60a/numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f", size = 18102143, upload-time = "2023-07-31T14:59:27.625Z" }, - { url = "https://files.pythonhosted.org/packages/81/e3/f562c2d76af16c1d79e73de04f9d08e5a7fd0e50ae12692acd4dbd2501f7/numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01", size = 12689997, upload-time = "2023-07-31T14:59:48.404Z" }, - { url = "https://files.pythonhosted.org/packages/df/18/181fb40f03090c6fbd061bb8b1f4c32453f7c602b0dc7c08b307baca7cd7/numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380", size = 15581137, upload-time = "2023-07-31T15:00:14.604Z" }, - { url = "https://files.pythonhosted.org/packages/11/58/e921b73d1a181d49fc5a797f5151b7be78cbc5b4483f8f6042e295b85c01/numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55", size = 20168999, upload-time = "2023-07-31T15:00:48.021Z" }, - { url = "https://files.pythonhosted.org/packages/2c/53/9a023f6960ea6c8f66eafae774ba7ab1700fd987158df5aa9dbb28f98f8b/numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901", size = 17618771, upload-time = "2023-07-31T15:01:15.808Z" }, - { url = "https://files.pythonhosted.org/packages/2d/2a/5d85ca5d889363ffdec3e3258c7bacdc655801787d004a55e04cf19eeb4a/numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf", size = 15442128, upload-time = "2023-07-31T15:01:40.62Z" }, + { url = "https://files.pythonhosted.org/packages/8b/d9/22c304cd123e0a1b7d89213e50ed6ec4b22f07f1117d64d28f81c08be428/numpy-1.25.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b79e513d7aac42ae918db3ad1341a015488530d0bb2a6abcbdd10a3a829ccfd3", size = 20847260 }, + { url = "https://files.pythonhosted.org/packages/0f/a8/5057b97c395a710999b5697ffedd648caee82c24a29595952d26bd750155/numpy-1.25.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb942bfb6f84df5ce05dbf4b46673ffed0d3da59f13635ea9b926af3deb76926", size = 14022126 }, + { url = "https://files.pythonhosted.org/packages/6d/b6/94a587cd64ef090f844ab1d8c8f1af44d07be7387f5f1a40eb729a0ff9c9/numpy-1.25.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0746410e73384e70d286f93abf2520035250aad8c5714240b0492a7302fdca", size = 14206441 }, + { url = "https://files.pythonhosted.org/packages/69/1f/c95b1108a9972a52d7b1b63ed8ca70466b59b8c1811bd121f1e667cc45d8/numpy-1.25.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d7806500e4f5bdd04095e849265e55de20d8cc4b661b038957354327f6d9b295", size = 18263142 }, + { url = "https://files.pythonhosted.org/packages/d3/76/fe6b9e75883d1f2bd3cd27cbc7307ec99a0cc76fa941937c177f464fd60a/numpy-1.25.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8b77775f4b7df768967a7c8b3567e309f617dd5e99aeb886fa14dc1a0791141f", size = 18102143 }, + { url = "https://files.pythonhosted.org/packages/81/e3/f562c2d76af16c1d79e73de04f9d08e5a7fd0e50ae12692acd4dbd2501f7/numpy-1.25.2-cp39-cp39-win32.whl", hash = "sha256:2792d23d62ec51e50ce4d4b7d73de8f67a2fd3ea710dcbc8563a51a03fb07b01", size = 12689997 }, + { url = "https://files.pythonhosted.org/packages/df/18/181fb40f03090c6fbd061bb8b1f4c32453f7c602b0dc7c08b307baca7cd7/numpy-1.25.2-cp39-cp39-win_amd64.whl", hash = "sha256:76b4115d42a7dfc5d485d358728cdd8719be33cc5ec6ec08632a5d6fca2ed380", size = 15581137 }, + { url = "https://files.pythonhosted.org/packages/11/58/e921b73d1a181d49fc5a797f5151b7be78cbc5b4483f8f6042e295b85c01/numpy-1.25.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:1a1329e26f46230bf77b02cc19e900db9b52f398d6722ca853349a782d4cff55", size = 20168999 }, + { url = "https://files.pythonhosted.org/packages/2c/53/9a023f6960ea6c8f66eafae774ba7ab1700fd987158df5aa9dbb28f98f8b/numpy-1.25.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c3abc71e8b6edba80a01a52e66d83c5d14433cbcd26a40c329ec7ed09f37901", size = 17618771 }, + { url = "https://files.pythonhosted.org/packages/2d/2a/5d85ca5d889363ffdec3e3258c7bacdc655801787d004a55e04cf19eeb4a/numpy-1.25.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:1b9735c27cea5d995496f46a8b1cd7b408b3f34b6d50459d9ac8fe3a20cc17bf", size = 15442128 }, ] [[package]] @@ -732,27 +747,27 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "et-xmlfile" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464, upload-time = "2024-06-28T14:03:44.161Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3d/f9/88d94a75de065ea32619465d2f77b29a0469500e99012523b91cc4141cd1/openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050", size = 186464 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910, upload-time = "2024-06-28T14:03:41.161Z" }, + { url = "https://files.pythonhosted.org/packages/c0/da/977ded879c29cbd04de313843e76868e6e13408a94ed6b987245dc7c8506/openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2", size = 250910 }, ] [[package]] name = "ordered-set" version = "4.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4c/ca/bfac8bc689799bcca4157e0e0ced07e70ce125193fc2e166d2e685b7e2fe/ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8", size = 12826, upload-time = "2022-01-26T14:38:56.6Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4c/ca/bfac8bc689799bcca4157e0e0ced07e70ce125193fc2e166d2e685b7e2fe/ordered-set-4.1.0.tar.gz", hash = "sha256:694a8e44c87657c59292ede72891eb91d34131f6531463aab3009191c77364a8", size = 12826 } wheels = [ - { url = "https://files.pythonhosted.org/packages/33/55/af02708f230eb77084a299d7b08175cff006dea4f2721074b92cdb0296c0/ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562", size = 7634, upload-time = "2022-01-26T14:38:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/33/55/af02708f230eb77084a299d7b08175cff006dea4f2721074b92cdb0296c0/ordered_set-4.1.0-py3-none-any.whl", hash = "sha256:046e1132c71fcf3330438a539928932caf51ddbc582496833e23de611de14562", size = 7634 }, ] [[package]] name = "packaging" version = "26.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366 }, ] [[package]] @@ -765,74 +780,74 @@ dependencies = [ { name = "pytz" }, { name = "tzdata" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223, upload-time = "2025-09-29T23:34:51.853Z" } +sdist = { url = "https://files.pythonhosted.org/packages/33/01/d40b85317f86cf08d853a4f495195c73815fdf205eef3993821720274518/pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b", size = 4495223 } wheels = [ - { url = "https://files.pythonhosted.org/packages/56/b4/52eeb530a99e2a4c55ffcd352772b599ed4473a0f892d127f4147cf0f88e/pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2", size = 11567720, upload-time = "2025-09-29T23:33:06.209Z" }, - { url = "https://files.pythonhosted.org/packages/48/4a/2d8b67632a021bced649ba940455ed441ca854e57d6e7658a6024587b083/pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8", size = 10810302, upload-time = "2025-09-29T23:33:35.846Z" }, - { url = "https://files.pythonhosted.org/packages/13/e6/d2465010ee0569a245c975dc6967b801887068bc893e908239b1f4b6c1ac/pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff", size = 12154874, upload-time = "2025-09-29T23:33:49.939Z" }, - { url = "https://files.pythonhosted.org/packages/1f/18/aae8c0aa69a386a3255940e9317f793808ea79d0a525a97a903366bb2569/pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29", size = 12790141, upload-time = "2025-09-29T23:34:05.655Z" }, - { url = "https://files.pythonhosted.org/packages/f7/26/617f98de789de00c2a444fbe6301bb19e66556ac78cff933d2c98f62f2b4/pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73", size = 13208697, upload-time = "2025-09-29T23:34:21.835Z" }, - { url = "https://files.pythonhosted.org/packages/b9/fb/25709afa4552042bd0e15717c75e9b4a2294c3dc4f7e6ea50f03c5136600/pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9", size = 13879233, upload-time = "2025-09-29T23:34:35.079Z" }, - { url = "https://files.pythonhosted.org/packages/98/af/7be05277859a7bc399da8ba68b88c96b27b48740b6cf49688899c6eb4176/pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa", size = 11359119, upload-time = "2025-09-29T23:34:46.339Z" }, + { url = "https://files.pythonhosted.org/packages/56/b4/52eeb530a99e2a4c55ffcd352772b599ed4473a0f892d127f4147cf0f88e/pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2", size = 11567720 }, + { url = "https://files.pythonhosted.org/packages/48/4a/2d8b67632a021bced649ba940455ed441ca854e57d6e7658a6024587b083/pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8", size = 10810302 }, + { url = "https://files.pythonhosted.org/packages/13/e6/d2465010ee0569a245c975dc6967b801887068bc893e908239b1f4b6c1ac/pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff", size = 12154874 }, + { url = "https://files.pythonhosted.org/packages/1f/18/aae8c0aa69a386a3255940e9317f793808ea79d0a525a97a903366bb2569/pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29", size = 12790141 }, + { url = "https://files.pythonhosted.org/packages/f7/26/617f98de789de00c2a444fbe6301bb19e66556ac78cff933d2c98f62f2b4/pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73", size = 13208697 }, + { url = "https://files.pythonhosted.org/packages/b9/fb/25709afa4552042bd0e15717c75e9b4a2294c3dc4f7e6ea50f03c5136600/pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9", size = 13879233 }, + { url = "https://files.pythonhosted.org/packages/98/af/7be05277859a7bc399da8ba68b88c96b27b48740b6cf49688899c6eb4176/pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa", size = 11359119 }, ] [[package]] name = "pefile" version = "2024.8.26" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/03/4f/2750f7f6f025a1507cd3b7218691671eecfd0bbebebe8b39aa0fe1d360b8/pefile-2024.8.26.tar.gz", hash = "sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632", size = 76008, upload-time = "2024-08-26T20:58:38.155Z" } +sdist = { url = "https://files.pythonhosted.org/packages/03/4f/2750f7f6f025a1507cd3b7218691671eecfd0bbebebe8b39aa0fe1d360b8/pefile-2024.8.26.tar.gz", hash = "sha256:3ff6c5d8b43e8c37bb6e6dd5085658d658a7a0bdcd20b6a07b1fcfc1c4e9d632", size = 76008 } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/16/12b82f791c7f50ddec566873d5bdd245baa1491bac11d15ffb98aecc8f8b/pefile-2024.8.26-py3-none-any.whl", hash = "sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f", size = 74766, upload-time = "2024-08-26T21:01:02.632Z" }, + { url = "https://files.pythonhosted.org/packages/54/16/12b82f791c7f50ddec566873d5bdd245baa1491bac11d15ffb98aecc8f8b/pefile-2024.8.26-py3-none-any.whl", hash = "sha256:76f8b485dcd3b1bb8166f1128d395fa3d87af26360c2358fb75b80019b957c6f", size = 74766 }, ] [[package]] name = "pillow" version = "11.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069, upload-time = "2025-07-01T09:16:30.666Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f3/0d/d0d6dea55cd152ce3d6767bb38a8fc10e33796ba4ba210cbab9354b6d238/pillow-11.3.0.tar.gz", hash = "sha256:3828ee7586cd0b2091b6209e5ad53e20d0649bbe87164a459d0676e035e8f523", size = 47113069 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9e/8e/9c089f01677d1264ab8648352dcb7773f37da6ad002542760c80107da816/pillow-11.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:48d254f8a4c776de343051023eb61ffe818299eeac478da55227d96e241de53f", size = 5316478, upload-time = "2025-07-01T09:15:52.209Z" }, - { url = "https://files.pythonhosted.org/packages/b5/a9/5749930caf674695867eb56a581e78eb5f524b7583ff10b01b6e5048acb3/pillow-11.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7aee118e30a4cf54fdd873bd3a29de51e29105ab11f9aad8c32123f58c8f8081", size = 4686522, upload-time = "2025-07-01T09:15:54.162Z" }, - { url = "https://files.pythonhosted.org/packages/43/46/0b85b763eb292b691030795f9f6bb6fcaf8948c39413c81696a01c3577f7/pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4", size = 5853376, upload-time = "2025-07-03T13:11:01.066Z" }, - { url = "https://files.pythonhosted.org/packages/5e/c6/1a230ec0067243cbd60bc2dad5dc3ab46a8a41e21c15f5c9b52b26873069/pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc", size = 7626020, upload-time = "2025-07-03T13:11:06.479Z" }, - { url = "https://files.pythonhosted.org/packages/63/dd/f296c27ffba447bfad76c6a0c44c1ea97a90cb9472b9304c94a732e8dbfb/pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06", size = 5956732, upload-time = "2025-07-01T09:15:56.111Z" }, - { url = "https://files.pythonhosted.org/packages/a5/a0/98a3630f0b57f77bae67716562513d3032ae70414fcaf02750279c389a9e/pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a", size = 6624404, upload-time = "2025-07-01T09:15:58.245Z" }, - { url = "https://files.pythonhosted.org/packages/de/e6/83dfba5646a290edd9a21964da07674409e410579c341fc5b8f7abd81620/pillow-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978", size = 6067760, upload-time = "2025-07-01T09:16:00.003Z" }, - { url = "https://files.pythonhosted.org/packages/bc/41/15ab268fe6ee9a2bc7391e2bbb20a98d3974304ab1a406a992dcb297a370/pillow-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d", size = 6700534, upload-time = "2025-07-01T09:16:02.29Z" }, - { url = "https://files.pythonhosted.org/packages/64/79/6d4f638b288300bed727ff29f2a3cb63db054b33518a95f27724915e3fbc/pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71", size = 6277091, upload-time = "2025-07-01T09:16:04.4Z" }, - { url = "https://files.pythonhosted.org/packages/46/05/4106422f45a05716fd34ed21763f8ec182e8ea00af6e9cb05b93a247361a/pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada", size = 6986091, upload-time = "2025-07-01T09:16:06.342Z" }, - { url = "https://files.pythonhosted.org/packages/63/c6/287fd55c2c12761d0591549d48885187579b7c257bef0c6660755b0b59ae/pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb", size = 2422632, upload-time = "2025-07-01T09:16:08.142Z" }, + { url = "https://files.pythonhosted.org/packages/9e/8e/9c089f01677d1264ab8648352dcb7773f37da6ad002542760c80107da816/pillow-11.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:48d254f8a4c776de343051023eb61ffe818299eeac478da55227d96e241de53f", size = 5316478 }, + { url = "https://files.pythonhosted.org/packages/b5/a9/5749930caf674695867eb56a581e78eb5f524b7583ff10b01b6e5048acb3/pillow-11.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7aee118e30a4cf54fdd873bd3a29de51e29105ab11f9aad8c32123f58c8f8081", size = 4686522 }, + { url = "https://files.pythonhosted.org/packages/43/46/0b85b763eb292b691030795f9f6bb6fcaf8948c39413c81696a01c3577f7/pillow-11.3.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:23cff760a9049c502721bdb743a7cb3e03365fafcdfc2ef9784610714166e5a4", size = 5853376 }, + { url = "https://files.pythonhosted.org/packages/5e/c6/1a230ec0067243cbd60bc2dad5dc3ab46a8a41e21c15f5c9b52b26873069/pillow-11.3.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6359a3bc43f57d5b375d1ad54a0074318a0844d11b76abccf478c37c986d3cfc", size = 7626020 }, + { url = "https://files.pythonhosted.org/packages/63/dd/f296c27ffba447bfad76c6a0c44c1ea97a90cb9472b9304c94a732e8dbfb/pillow-11.3.0-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:092c80c76635f5ecb10f3f83d76716165c96f5229addbd1ec2bdbbda7d496e06", size = 5956732 }, + { url = "https://files.pythonhosted.org/packages/a5/a0/98a3630f0b57f77bae67716562513d3032ae70414fcaf02750279c389a9e/pillow-11.3.0-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cadc9e0ea0a2431124cde7e1697106471fc4c1da01530e679b2391c37d3fbb3a", size = 6624404 }, + { url = "https://files.pythonhosted.org/packages/de/e6/83dfba5646a290edd9a21964da07674409e410579c341fc5b8f7abd81620/pillow-11.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:6a418691000f2a418c9135a7cf0d797c1bb7d9a485e61fe8e7722845b95ef978", size = 6067760 }, + { url = "https://files.pythonhosted.org/packages/bc/41/15ab268fe6ee9a2bc7391e2bbb20a98d3974304ab1a406a992dcb297a370/pillow-11.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:97afb3a00b65cc0804d1c7abddbf090a81eaac02768af58cbdcaaa0a931e0b6d", size = 6700534 }, + { url = "https://files.pythonhosted.org/packages/64/79/6d4f638b288300bed727ff29f2a3cb63db054b33518a95f27724915e3fbc/pillow-11.3.0-cp39-cp39-win32.whl", hash = "sha256:ea944117a7974ae78059fcc1800e5d3295172bb97035c0c1d9345fca1419da71", size = 6277091 }, + { url = "https://files.pythonhosted.org/packages/46/05/4106422f45a05716fd34ed21763f8ec182e8ea00af6e9cb05b93a247361a/pillow-11.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:e5c5858ad8ec655450a7c7df532e9842cf8df7cc349df7225c60d5d348c8aada", size = 6986091 }, + { url = "https://files.pythonhosted.org/packages/63/c6/287fd55c2c12761d0591549d48885187579b7c257bef0c6660755b0b59ae/pillow-11.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:6abdbfd3aea42be05702a8dd98832329c167ee84400a1d1f61ab11437f1717eb", size = 2422632 }, ] [[package]] name = "pluggy" version = "1.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412 } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538 }, ] [[package]] name = "proxy-tools" version = "0.1.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f2/cf/77d3e19b7fabd03895caca7857ef51e4c409e0ca6b37ee6e9f7daa50b642/proxy_tools-0.1.0.tar.gz", hash = "sha256:ccb3751f529c047e2d8a58440d86b205303cf0fe8146f784d1cbcd94f0a28010", size = 2978, upload-time = "2014-05-05T21:02:24.606Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f2/cf/77d3e19b7fabd03895caca7857ef51e4c409e0ca6b37ee6e9f7daa50b642/proxy_tools-0.1.0.tar.gz", hash = "sha256:ccb3751f529c047e2d8a58440d86b205303cf0fe8146f784d1cbcd94f0a28010", size = 2978 } [[package]] name = "psutil" version = "7.2.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740, upload-time = "2026-01-28T18:14:54.428Z" } +sdist = { url = "https://files.pythonhosted.org/packages/aa/c6/d1ddf4abb55e93cebc4f2ed8b5d6dbad109ecb8d63748dd2b20ab5e57ebe/psutil-7.2.2.tar.gz", hash = "sha256:0746f5f8d406af344fd547f1c8daa5f5c33dbc293bb8d6a16d80b4bb88f59372", size = 493740 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090, upload-time = "2026-01-28T18:15:22.168Z" }, - { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859, upload-time = "2026-01-28T18:15:23.795Z" }, - { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560, upload-time = "2026-01-28T18:15:25.976Z" }, - { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997, upload-time = "2026-01-28T18:15:27.794Z" }, - { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972, upload-time = "2026-01-28T18:15:29.342Z" }, - { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266, upload-time = "2026-01-28T18:15:31.597Z" }, - { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737, upload-time = "2026-01-28T18:15:33.849Z" }, - { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617, upload-time = "2026-01-28T18:15:36.514Z" }, + { url = "https://files.pythonhosted.org/packages/e7/36/5ee6e05c9bd427237b11b3937ad82bb8ad2752d72c6969314590dd0c2f6e/psutil-7.2.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:ed0cace939114f62738d808fdcecd4c869222507e266e574799e9c0faa17d486", size = 129090 }, + { url = "https://files.pythonhosted.org/packages/80/c4/f5af4c1ca8c1eeb2e92ccca14ce8effdeec651d5ab6053c589b074eda6e1/psutil-7.2.2-cp36-abi3-macosx_11_0_arm64.whl", hash = "sha256:1a7b04c10f32cc88ab39cbf606e117fd74721c831c98a27dc04578deb0c16979", size = 129859 }, + { url = "https://files.pythonhosted.org/packages/b5/70/5d8df3b09e25bce090399cf48e452d25c935ab72dad19406c77f4e828045/psutil-7.2.2-cp36-abi3-manylinux2010_x86_64.manylinux_2_12_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:076a2d2f923fd4821644f5ba89f059523da90dc9014e85f8e45a5774ca5bc6f9", size = 155560 }, + { url = "https://files.pythonhosted.org/packages/63/65/37648c0c158dc222aba51c089eb3bdfa238e621674dc42d48706e639204f/psutil-7.2.2-cp36-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b0726cecd84f9474419d67252add4ac0cd9811b04d61123054b9fb6f57df6e9e", size = 156997 }, + { url = "https://files.pythonhosted.org/packages/8e/13/125093eadae863ce03c6ffdbae9929430d116a246ef69866dad94da3bfbc/psutil-7.2.2-cp36-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fd04ef36b4a6d599bbdb225dd1d3f51e00105f6d48a28f006da7f9822f2606d8", size = 148972 }, + { url = "https://files.pythonhosted.org/packages/04/78/0acd37ca84ce3ddffaa92ef0f571e073faa6d8ff1f0559ab1272188ea2be/psutil-7.2.2-cp36-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:b58fabe35e80b264a4e3bb23e6b96f9e45a3df7fb7eed419ac0e5947c61e47cc", size = 148266 }, + { url = "https://files.pythonhosted.org/packages/b4/90/e2159492b5426be0c1fef7acba807a03511f97c5f86b3caeda6ad92351a7/psutil-7.2.2-cp37-abi3-win_amd64.whl", hash = "sha256:eb7e81434c8d223ec4a219b5fc1c47d0417b12be7ea866e24fb5ad6e84b3d988", size = 137737 }, + { url = "https://files.pythonhosted.org/packages/8c/c7/7bb2e321574b10df20cbde462a94e2b71d05f9bbda251ef27d104668306a/psutil-7.2.2-cp37-abi3-win_arm64.whl", hash = "sha256:8c233660f575a5a89e6d4cb65d9f938126312bca76d8fe087b947b3a1aaac9ee", size = 134617 }, ] [[package]] @@ -849,39 +864,39 @@ dependencies = [ { name = "python3-xlib", marker = "sys_platform == 'linux'" }, { name = "pytweening" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/65/ff/cdae0a8c2118a0de74b6cf4cbcdcaf8fd25857e6c3f205ce4b1794b27814/PyAutoGUI-0.9.54.tar.gz", hash = "sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2", size = 61236, upload-time = "2023-05-24T20:11:32.972Z" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ff/cdae0a8c2118a0de74b6cf4cbcdcaf8fd25857e6c3f205ce4b1794b27814/PyAutoGUI-0.9.54.tar.gz", hash = "sha256:dd1d29e8fd118941cb193f74df57e5c6ff8e9253b99c7b04f39cfc69f3ae04b2", size = 61236 } [[package]] name = "pycparser" version = "2.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734, upload-time = "2025-09-09T13:23:47.91Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fe/cf/d2d3b9f5699fb1e4615c8e32ff220203e43b248e1dfcc6736ad9057731ca/pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2", size = 173734 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140, upload-time = "2025-09-09T13:23:46.651Z" }, + { url = "https://files.pythonhosted.org/packages/a0/e3/59cd50310fc9b59512193629e1984c1f95e5c8ae6e5d8c69532ccc65a7fe/pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934", size = 118140 }, ] [[package]] name = "pycryptodome" version = "3.23.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8e/a6/8452177684d5e906854776276ddd34eca30d1b1e15aa1ee9cefc289a33f5/pycryptodome-3.23.0.tar.gz", hash = "sha256:447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef", size = 4921276, upload-time = "2025-05-17T17:21:45.242Z" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/a6/8452177684d5e906854776276ddd34eca30d1b1e15aa1ee9cefc289a33f5/pycryptodome-3.23.0.tar.gz", hash = "sha256:447700a657182d60338bab09fdb27518f8856aecd80ae4c6bdddb67ff5da44ef", size = 4921276 } wheels = [ - { url = "https://files.pythonhosted.org/packages/db/6c/a1f71542c969912bb0e106f64f60a56cc1f0fabecf9396f45accbe63fa68/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:187058ab80b3281b1de11c2e6842a357a1f71b42cb1e15bce373f3d238135c27", size = 2495627, upload-time = "2025-05-17T17:20:47.139Z" }, - { url = "https://files.pythonhosted.org/packages/6e/4e/a066527e079fc5002390c8acdd3aca431e6ea0a50ffd7201551175b47323/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cfb5cd445280c5b0a4e6187a7ce8de5a07b5f3f897f235caa11f1f435f182843", size = 1640362, upload-time = "2025-05-17T17:20:50.392Z" }, - { url = "https://files.pythonhosted.org/packages/50/52/adaf4c8c100a8c49d2bd058e5b551f73dfd8cb89eb4911e25a0c469b6b4e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67bd81fcbe34f43ad9422ee8fd4843c8e7198dd88dd3d40e6de42ee65fbe1490", size = 2182625, upload-time = "2025-05-17T17:20:52.866Z" }, - { url = "https://files.pythonhosted.org/packages/5f/e9/a09476d436d0ff1402ac3867d933c61805ec2326c6ea557aeeac3825604e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8987bd3307a39bc03df5c8e0e3d8be0c4c3518b7f044b0f4c15d1aa78f52575", size = 2268954, upload-time = "2025-05-17T17:20:55.027Z" }, - { url = "https://files.pythonhosted.org/packages/f9/c5/ffe6474e0c551d54cab931918127c46d70cab8f114e0c2b5a3c071c2f484/pycryptodome-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa0698f65e5b570426fc31b8162ed4603b0c2841cbb9088e2b01641e3065915b", size = 2308534, upload-time = "2025-05-17T17:20:57.279Z" }, - { url = "https://files.pythonhosted.org/packages/18/28/e199677fc15ecf43010f2463fde4c1a53015d1fe95fb03bca2890836603a/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:53ecbafc2b55353edcebd64bf5da94a2a2cdf5090a6915bcca6eca6cc452585a", size = 2181853, upload-time = "2025-05-17T17:20:59.322Z" }, - { url = "https://files.pythonhosted.org/packages/ce/ea/4fdb09f2165ce1365c9eaefef36625583371ee514db58dc9b65d3a255c4c/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:156df9667ad9f2ad26255926524e1c136d6664b741547deb0a86a9acf5ea631f", size = 2342465, upload-time = "2025-05-17T17:21:03.83Z" }, - { url = "https://files.pythonhosted.org/packages/22/82/6edc3fc42fe9284aead511394bac167693fb2b0e0395b28b8bedaa07ef04/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:dea827b4d55ee390dc89b2afe5927d4308a8b538ae91d9c6f7a5090f397af1aa", size = 2267414, upload-time = "2025-05-17T17:21:06.72Z" }, - { url = "https://files.pythonhosted.org/packages/59/fe/aae679b64363eb78326c7fdc9d06ec3de18bac68be4b612fc1fe8902693c/pycryptodome-3.23.0-cp37-abi3-win32.whl", hash = "sha256:507dbead45474b62b2bbe318eb1c4c8ee641077532067fec9c1aa82c31f84886", size = 1768484, upload-time = "2025-05-17T17:21:08.535Z" }, - { url = "https://files.pythonhosted.org/packages/54/2f/e97a1b8294db0daaa87012c24a7bb714147c7ade7656973fd6c736b484ff/pycryptodome-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:c75b52aacc6c0c260f204cbdd834f76edc9fb0d8e0da9fbf8352ef58202564e2", size = 1799636, upload-time = "2025-05-17T17:21:10.393Z" }, - { url = "https://files.pythonhosted.org/packages/18/3d/f9441a0d798bf2b1e645adc3265e55706aead1255ccdad3856dbdcffec14/pycryptodome-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:11eeeb6917903876f134b56ba11abe95c0b0fd5e3330def218083c7d98bbcb3c", size = 1703675, upload-time = "2025-05-17T17:21:13.146Z" }, - { url = "https://files.pythonhosted.org/packages/dc/c4/6925ad41576d3e84f03aaf9a0411667af861f9fa2c87553c7dd5bde01518/pycryptodome-3.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:865d83c906b0fc6a59b510deceee656b6bc1c4fa0d82176e2b77e97a420a996a", size = 1623768, upload-time = "2025-05-17T17:21:33.418Z" }, - { url = "https://files.pythonhosted.org/packages/a8/14/d6c6a3098ddf2624068f041c5639be5092ad4ae1a411842369fd56765994/pycryptodome-3.23.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d4d56153efc4d81defe8b65fd0821ef8b2d5ddf8ed19df31ba2f00872b8002", size = 1672070, upload-time = "2025-05-17T17:21:35.565Z" }, - { url = "https://files.pythonhosted.org/packages/20/89/5d29c8f178fea7c92fd20d22f9ddd532a5e3ac71c574d555d2362aaa832a/pycryptodome-3.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3f2d0aaf8080bda0587d58fc9fe4766e012441e2eed4269a77de6aea981c8be", size = 1664359, upload-time = "2025-05-17T17:21:37.551Z" }, - { url = "https://files.pythonhosted.org/packages/38/bc/a287d41b4421ad50eafb02313137d0276d6aeffab90a91e2b08f64140852/pycryptodome-3.23.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64093fc334c1eccfd3933c134c4457c34eaca235eeae49d69449dc4728079339", size = 1702359, upload-time = "2025-05-17T17:21:39.827Z" }, - { url = "https://files.pythonhosted.org/packages/2b/62/2392b7879f4d2c1bfa20815720b89d464687877851716936b9609959c201/pycryptodome-3.23.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ce64e84a962b63a47a592690bdc16a7eaf709d2c2697ababf24a0def566899a6", size = 1802461, upload-time = "2025-05-17T17:21:41.722Z" }, + { url = "https://files.pythonhosted.org/packages/db/6c/a1f71542c969912bb0e106f64f60a56cc1f0fabecf9396f45accbe63fa68/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:187058ab80b3281b1de11c2e6842a357a1f71b42cb1e15bce373f3d238135c27", size = 2495627 }, + { url = "https://files.pythonhosted.org/packages/6e/4e/a066527e079fc5002390c8acdd3aca431e6ea0a50ffd7201551175b47323/pycryptodome-3.23.0-cp37-abi3-macosx_10_9_x86_64.whl", hash = "sha256:cfb5cd445280c5b0a4e6187a7ce8de5a07b5f3f897f235caa11f1f435f182843", size = 1640362 }, + { url = "https://files.pythonhosted.org/packages/50/52/adaf4c8c100a8c49d2bd058e5b551f73dfd8cb89eb4911e25a0c469b6b4e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:67bd81fcbe34f43ad9422ee8fd4843c8e7198dd88dd3d40e6de42ee65fbe1490", size = 2182625 }, + { url = "https://files.pythonhosted.org/packages/5f/e9/a09476d436d0ff1402ac3867d933c61805ec2326c6ea557aeeac3825604e/pycryptodome-3.23.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c8987bd3307a39bc03df5c8e0e3d8be0c4c3518b7f044b0f4c15d1aa78f52575", size = 2268954 }, + { url = "https://files.pythonhosted.org/packages/f9/c5/ffe6474e0c551d54cab931918127c46d70cab8f114e0c2b5a3c071c2f484/pycryptodome-3.23.0-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa0698f65e5b570426fc31b8162ed4603b0c2841cbb9088e2b01641e3065915b", size = 2308534 }, + { url = "https://files.pythonhosted.org/packages/18/28/e199677fc15ecf43010f2463fde4c1a53015d1fe95fb03bca2890836603a/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:53ecbafc2b55353edcebd64bf5da94a2a2cdf5090a6915bcca6eca6cc452585a", size = 2181853 }, + { url = "https://files.pythonhosted.org/packages/ce/ea/4fdb09f2165ce1365c9eaefef36625583371ee514db58dc9b65d3a255c4c/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:156df9667ad9f2ad26255926524e1c136d6664b741547deb0a86a9acf5ea631f", size = 2342465 }, + { url = "https://files.pythonhosted.org/packages/22/82/6edc3fc42fe9284aead511394bac167693fb2b0e0395b28b8bedaa07ef04/pycryptodome-3.23.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:dea827b4d55ee390dc89b2afe5927d4308a8b538ae91d9c6f7a5090f397af1aa", size = 2267414 }, + { url = "https://files.pythonhosted.org/packages/59/fe/aae679b64363eb78326c7fdc9d06ec3de18bac68be4b612fc1fe8902693c/pycryptodome-3.23.0-cp37-abi3-win32.whl", hash = "sha256:507dbead45474b62b2bbe318eb1c4c8ee641077532067fec9c1aa82c31f84886", size = 1768484 }, + { url = "https://files.pythonhosted.org/packages/54/2f/e97a1b8294db0daaa87012c24a7bb714147c7ade7656973fd6c736b484ff/pycryptodome-3.23.0-cp37-abi3-win_amd64.whl", hash = "sha256:c75b52aacc6c0c260f204cbdd834f76edc9fb0d8e0da9fbf8352ef58202564e2", size = 1799636 }, + { url = "https://files.pythonhosted.org/packages/18/3d/f9441a0d798bf2b1e645adc3265e55706aead1255ccdad3856dbdcffec14/pycryptodome-3.23.0-cp37-abi3-win_arm64.whl", hash = "sha256:11eeeb6917903876f134b56ba11abe95c0b0fd5e3330def218083c7d98bbcb3c", size = 1703675 }, + { url = "https://files.pythonhosted.org/packages/dc/c4/6925ad41576d3e84f03aaf9a0411667af861f9fa2c87553c7dd5bde01518/pycryptodome-3.23.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:865d83c906b0fc6a59b510deceee656b6bc1c4fa0d82176e2b77e97a420a996a", size = 1623768 }, + { url = "https://files.pythonhosted.org/packages/a8/14/d6c6a3098ddf2624068f041c5639be5092ad4ae1a411842369fd56765994/pycryptodome-3.23.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:89d4d56153efc4d81defe8b65fd0821ef8b2d5ddf8ed19df31ba2f00872b8002", size = 1672070 }, + { url = "https://files.pythonhosted.org/packages/20/89/5d29c8f178fea7c92fd20d22f9ddd532a5e3ac71c574d555d2362aaa832a/pycryptodome-3.23.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3f2d0aaf8080bda0587d58fc9fe4766e012441e2eed4269a77de6aea981c8be", size = 1664359 }, + { url = "https://files.pythonhosted.org/packages/38/bc/a287d41b4421ad50eafb02313137d0276d6aeffab90a91e2b08f64140852/pycryptodome-3.23.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:64093fc334c1eccfd3933c134c4457c34eaca235eeae49d69449dc4728079339", size = 1702359 }, + { url = "https://files.pythonhosted.org/packages/2b/62/2392b7879f4d2c1bfa20815720b89d464687877851716936b9609959c201/pycryptodome-3.23.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ce64e84a962b63a47a592690bdc16a7eaf709d2c2697ababf24a0def566899a6", size = 1802461 }, ] [[package]] @@ -894,9 +909,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591, upload-time = "2025-11-26T15:11:46.471Z" } +sdist = { url = "https://files.pythonhosted.org/packages/69/44/36f1a6e523abc58ae5f928898e4aca2e0ea509b5aa6f6f392a5d882be928/pydantic-2.12.5.tar.gz", hash = "sha256:4d351024c75c0f085a9febbb665ce8c0c6ec5d30e903bdb6394b7ede26aebb49", size = 821591 } wheels = [ - { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580, upload-time = "2025-11-26T15:11:44.605Z" }, + { url = "https://files.pythonhosted.org/packages/5a/87/b70ad306ebb6f9b585f114d0ac2137d792b48be34d732d60e597c2f8465a/pydantic-2.12.5-py3-none-any.whl", hash = "sha256:e561593fccf61e8a20fc46dfc2dfe075b8be7d0188df33f221ad1f0139180f9d", size = 463580 }, ] [[package]] @@ -906,21 +921,21 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952, upload-time = "2025-11-04T13:43:49.098Z" } +sdist = { url = "https://files.pythonhosted.org/packages/71/70/23b021c950c2addd24ec408e9ab05d59b035b39d97cdc1130e1bce647bb6/pydantic_core-2.41.5.tar.gz", hash = "sha256:08daa51ea16ad373ffd5e7606252cc32f07bc72b28284b6bc9c6df804816476e", size = 460952 } wheels = [ - { url = "https://files.pythonhosted.org/packages/54/db/160dffb57ed9a3705c4cbcbff0ac03bdae45f1ca7d58ab74645550df3fbd/pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf", size = 2107999, upload-time = "2025-11-04T13:42:03.885Z" }, - { url = "https://files.pythonhosted.org/packages/a3/7d/88e7de946f60d9263cc84819f32513520b85c0f8322f9b8f6e4afc938383/pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5", size = 1929745, upload-time = "2025-11-04T13:42:06.075Z" }, - { url = "https://files.pythonhosted.org/packages/d5/c2/aef51e5b283780e85e99ff19db0f05842d2d4a8a8cd15e63b0280029b08f/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d", size = 1920220, upload-time = "2025-11-04T13:42:08.457Z" }, - { url = "https://files.pythonhosted.org/packages/c7/97/492ab10f9ac8695cd76b2fdb24e9e61f394051df71594e9bcc891c9f586e/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60", size = 2067296, upload-time = "2025-11-04T13:42:10.817Z" }, - { url = "https://files.pythonhosted.org/packages/ec/23/984149650e5269c59a2a4c41d234a9570adc68ab29981825cfaf4cfad8f4/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82", size = 2231548, upload-time = "2025-11-04T13:42:13.843Z" }, - { url = "https://files.pythonhosted.org/packages/71/0c/85bcbb885b9732c28bec67a222dbed5ed2d77baee1f8bba2002e8cd00c5c/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5", size = 2362571, upload-time = "2025-11-04T13:42:16.208Z" }, - { url = "https://files.pythonhosted.org/packages/c0/4a/412d2048be12c334003e9b823a3fa3d038e46cc2d64dd8aab50b31b65499/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3", size = 2068175, upload-time = "2025-11-04T13:42:18.911Z" }, - { url = "https://files.pythonhosted.org/packages/73/f4/c58b6a776b502d0a5540ad02e232514285513572060f0d78f7832ca3c98b/pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425", size = 2177203, upload-time = "2025-11-04T13:42:22.578Z" }, - { url = "https://files.pythonhosted.org/packages/ed/ae/f06ea4c7e7a9eead3d165e7623cd2ea0cb788e277e4f935af63fc98fa4e6/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504", size = 2148191, upload-time = "2025-11-04T13:42:24.89Z" }, - { url = "https://files.pythonhosted.org/packages/c1/57/25a11dcdc656bf5f8b05902c3c2934ac3ea296257cc4a3f79a6319e61856/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5", size = 2343907, upload-time = "2025-11-04T13:42:27.683Z" }, - { url = "https://files.pythonhosted.org/packages/96/82/e33d5f4933d7a03327c0c43c65d575e5919d4974ffc026bc917a5f7b9f61/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3", size = 2322174, upload-time = "2025-11-04T13:42:30.776Z" }, - { url = "https://files.pythonhosted.org/packages/81/45/4091be67ce9f469e81656f880f3506f6a5624121ec5eb3eab37d7581897d/pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460", size = 1990353, upload-time = "2025-11-04T13:42:33.111Z" }, - { url = "https://files.pythonhosted.org/packages/44/8a/a98aede18db6e9cd5d66bcacd8a409fcf8134204cdede2e7de35c5a2c5ef/pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b", size = 2015698, upload-time = "2025-11-04T13:42:35.484Z" }, + { url = "https://files.pythonhosted.org/packages/54/db/160dffb57ed9a3705c4cbcbff0ac03bdae45f1ca7d58ab74645550df3fbd/pydantic_core-2.41.5-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:8bfeaf8735be79f225f3fefab7f941c712aaca36f1128c9d7e2352ee1aa87bdf", size = 2107999 }, + { url = "https://files.pythonhosted.org/packages/a3/7d/88e7de946f60d9263cc84819f32513520b85c0f8322f9b8f6e4afc938383/pydantic_core-2.41.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:346285d28e4c8017da95144c7f3acd42740d637ff41946af5ce6e5e420502dd5", size = 1929745 }, + { url = "https://files.pythonhosted.org/packages/d5/c2/aef51e5b283780e85e99ff19db0f05842d2d4a8a8cd15e63b0280029b08f/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a75dafbf87d6276ddc5b2bf6fae5254e3d0876b626eb24969a574fff9149ee5d", size = 1920220 }, + { url = "https://files.pythonhosted.org/packages/c7/97/492ab10f9ac8695cd76b2fdb24e9e61f394051df71594e9bcc891c9f586e/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7b93a4d08587e2b7e7882de461e82b6ed76d9026ce91ca7915e740ecc7855f60", size = 2067296 }, + { url = "https://files.pythonhosted.org/packages/ec/23/984149650e5269c59a2a4c41d234a9570adc68ab29981825cfaf4cfad8f4/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8465ab91a4bd96d36dde3263f06caa6a8a6019e4113f24dc753d79a8b3a3f82", size = 2231548 }, + { url = "https://files.pythonhosted.org/packages/71/0c/85bcbb885b9732c28bec67a222dbed5ed2d77baee1f8bba2002e8cd00c5c/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:299e0a22e7ae2b85c1a57f104538b2656e8ab1873511fd718a1c1c6f149b77b5", size = 2362571 }, + { url = "https://files.pythonhosted.org/packages/c0/4a/412d2048be12c334003e9b823a3fa3d038e46cc2d64dd8aab50b31b65499/pydantic_core-2.41.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:707625ef0983fcfb461acfaf14de2067c5942c6bb0f3b4c99158bed6fedd3cf3", size = 2068175 }, + { url = "https://files.pythonhosted.org/packages/73/f4/c58b6a776b502d0a5540ad02e232514285513572060f0d78f7832ca3c98b/pydantic_core-2.41.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f41eb9797986d6ebac5e8edff36d5cef9de40def462311b3eb3eeded1431e425", size = 2177203 }, + { url = "https://files.pythonhosted.org/packages/ed/ae/f06ea4c7e7a9eead3d165e7623cd2ea0cb788e277e4f935af63fc98fa4e6/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0384e2e1021894b1ff5a786dbf94771e2986ebe2869533874d7e43bc79c6f504", size = 2148191 }, + { url = "https://files.pythonhosted.org/packages/c1/57/25a11dcdc656bf5f8b05902c3c2934ac3ea296257cc4a3f79a6319e61856/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:f0cd744688278965817fd0839c4a4116add48d23890d468bc436f78beb28abf5", size = 2343907 }, + { url = "https://files.pythonhosted.org/packages/96/82/e33d5f4933d7a03327c0c43c65d575e5919d4974ffc026bc917a5f7b9f61/pydantic_core-2.41.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:753e230374206729bf0a807954bcc6c150d3743928a73faffee51ac6557a03c3", size = 2322174 }, + { url = "https://files.pythonhosted.org/packages/81/45/4091be67ce9f469e81656f880f3506f6a5624121ec5eb3eab37d7581897d/pydantic_core-2.41.5-cp39-cp39-win32.whl", hash = "sha256:873e0d5b4fb9b89ef7c2d2a963ea7d02879d9da0da8d9d4933dee8ee86a8b460", size = 1990353 }, + { url = "https://files.pythonhosted.org/packages/44/8a/a98aede18db6e9cd5d66bcacd8a409fcf8134204cdede2e7de35c5a2c5ef/pydantic_core-2.41.5-cp39-cp39-win_amd64.whl", hash = "sha256:e4f4a984405e91527a0d62649ee21138f8e3d0ef103be488c1dc11a80d7f184b", size = 2015698 }, ] [[package]] @@ -930,15 +945,15 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyrect" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/e1/70/c7a4f46dbf06048c6d57d9489b8e0f9c4c3d36b7479f03c5ca97eaa2541d/PyGetWindow-0.0.9.tar.gz", hash = "sha256:17894355e7d2b305cd832d717708384017c1698a90ce24f6f7fbf0242dd0a688", size = 9699, upload-time = "2020-10-04T02:12:50.806Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/70/c7a4f46dbf06048c6d57d9489b8e0f9c4c3d36b7479f03c5ca97eaa2541d/PyGetWindow-0.0.9.tar.gz", hash = "sha256:17894355e7d2b305cd832d717708384017c1698a90ce24f6f7fbf0242dd0a688", size = 9699 } [[package]] name = "pygments" version = "2.20.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991 } wheels = [ - { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" }, + { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151 }, ] [[package]] @@ -955,19 +970,19 @@ dependencies = [ { name = "pywin32-ctypes", marker = "sys_platform == 'win32'" }, { name = "setuptools" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c8/63/fd62472b6371d89dc138d40c36d87a50dc2de18a035803bbdc376b4ffac4/pyinstaller-6.19.0.tar.gz", hash = "sha256:ec73aeb8bd9b7f2f1240d328a4542e90b3c6e6fbc106014778431c616592a865", size = 4036072, upload-time = "2026-02-14T18:06:28.718Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c8/63/fd62472b6371d89dc138d40c36d87a50dc2de18a035803bbdc376b4ffac4/pyinstaller-6.19.0.tar.gz", hash = "sha256:ec73aeb8bd9b7f2f1240d328a4542e90b3c6e6fbc106014778431c616592a865", size = 4036072 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e3/eb/23374721fecfa72677e79800921cb6aceefa6ba48574dc404f3f6c6c3be7/pyinstaller-6.19.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:4190e76b74f0c4b5c5f11ac360928cd2e36ec8e3194d437bf6b8648c7bc0c134", size = 1040563, upload-time = "2026-02-14T18:05:22.436Z" }, - { url = "https://files.pythonhosted.org/packages/cd/7e/dfd724b0b533f5aaec0ee5df406fe2319987ed6964480a706f85478b12ea/pyinstaller-6.19.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8bd68abd812d8a6ba33b9f1810e91fee0f325969733721b78151f0065319ca11", size = 735477, upload-time = "2026-02-14T18:05:27.143Z" }, - { url = "https://files.pythonhosted.org/packages/88/c9/ee3a4101c31f26344e66896c73c1fd6ed8282bf871473365b7f8674af406/pyinstaller-6.19.0-py3-none-manylinux2014_i686.whl", hash = "sha256:1ec54ef967996ca61dacba676227e2b23219878ccce5ee9d6f3aada7b8ed8abf", size = 747143, upload-time = "2026-02-14T18:05:31.488Z" }, - { url = "https://files.pythonhosted.org/packages/da/0a/fc77e9f861be8cf300ac37155f59cc92aff99b29f2ddd78546f563a5b5a6/pyinstaller-6.19.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:4ab2bb52e58448e14ddf9450601bdedd66800465043501c1d8f1cab87b60b122", size = 744849, upload-time = "2026-02-14T18:05:35.492Z" }, - { url = "https://files.pythonhosted.org/packages/6d/e3/6872e020ee758afe0b821663858492c10745608b07150e5e2c824a5b3e1c/pyinstaller-6.19.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:da6d5c6391ccefe73554b9fa29b86001c8e378e0f20c2a4004f836ba537eff63", size = 741590, upload-time = "2026-02-14T18:05:39.59Z" }, - { url = "https://files.pythonhosted.org/packages/53/60/b8db5f1a4b0fb228175f2ea0aa33f949adcc097fbe981cc524f9faf85777/pyinstaller-6.19.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a0fc5f6b3c55aa54353f0c74ffa59b1115433c1850c6f655d62b461a2ed6cbbe", size = 741448, upload-time = "2026-02-14T18:05:45.636Z" }, - { url = "https://files.pythonhosted.org/packages/6f/4d/63b0600f2694e9141b83129fbc1c488ec84d5a0770b1448ec154dcd0fee9/pyinstaller-6.19.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:e649ba6bd1b0b89b210ad92adb5fbdc8a42dd2c5ca4f72ef3a0bfec83a424b83", size = 740613, upload-time = "2026-02-14T18:05:49.726Z" }, - { url = "https://files.pythonhosted.org/packages/01/d4/e812ad36178093a0e9fd4b8127577748dd85b0cb71de912229dca21fd741/pyinstaller-6.19.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:481a909c8e60c8692fc60fcb1344d984b44b943f8bc9682f2fcdae305ad297e6", size = 740350, upload-time = "2026-02-14T18:05:54.093Z" }, - { url = "https://files.pythonhosted.org/packages/52/03/b2c2ee41fb8e10fd2a45d21f5ec2ef25852cfb978dbf762972eed59e3d63/pyinstaller-6.19.0-py3-none-win32.whl", hash = "sha256:3c5c251054fe4cfaa04c34a363dcfbf811545438cb7198304cd444756bc2edd2", size = 1324317, upload-time = "2026-02-14T18:06:00.085Z" }, - { url = "https://files.pythonhosted.org/packages/9c/d3/6d5e62b8270e2b53a6065e281b3a7785079b00e9019c8019952828dd1669/pyinstaller-6.19.0-py3-none-win_amd64.whl", hash = "sha256:b5bb6536c6560330d364d91522250f254b107cf69129d9cbcd0e6727c570be33", size = 1384894, upload-time = "2026-02-14T18:06:06.425Z" }, - { url = "https://files.pythonhosted.org/packages/81/65/458cd523308a101a22fd2742893405030cc24994cc74b1b767cecf137160/pyinstaller-6.19.0-py3-none-win_arm64.whl", hash = "sha256:c2d5a539b0bfe6159d5522c8c70e1c0e487f22c2badae0f97d45246223b798ea", size = 1325374, upload-time = "2026-02-14T18:06:12.804Z" }, + { url = "https://files.pythonhosted.org/packages/e3/eb/23374721fecfa72677e79800921cb6aceefa6ba48574dc404f3f6c6c3be7/pyinstaller-6.19.0-py3-none-macosx_10_13_universal2.whl", hash = "sha256:4190e76b74f0c4b5c5f11ac360928cd2e36ec8e3194d437bf6b8648c7bc0c134", size = 1040563 }, + { url = "https://files.pythonhosted.org/packages/cd/7e/dfd724b0b533f5aaec0ee5df406fe2319987ed6964480a706f85478b12ea/pyinstaller-6.19.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:8bd68abd812d8a6ba33b9f1810e91fee0f325969733721b78151f0065319ca11", size = 735477 }, + { url = "https://files.pythonhosted.org/packages/88/c9/ee3a4101c31f26344e66896c73c1fd6ed8282bf871473365b7f8674af406/pyinstaller-6.19.0-py3-none-manylinux2014_i686.whl", hash = "sha256:1ec54ef967996ca61dacba676227e2b23219878ccce5ee9d6f3aada7b8ed8abf", size = 747143 }, + { url = "https://files.pythonhosted.org/packages/da/0a/fc77e9f861be8cf300ac37155f59cc92aff99b29f2ddd78546f563a5b5a6/pyinstaller-6.19.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:4ab2bb52e58448e14ddf9450601bdedd66800465043501c1d8f1cab87b60b122", size = 744849 }, + { url = "https://files.pythonhosted.org/packages/6d/e3/6872e020ee758afe0b821663858492c10745608b07150e5e2c824a5b3e1c/pyinstaller-6.19.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:da6d5c6391ccefe73554b9fa29b86001c8e378e0f20c2a4004f836ba537eff63", size = 741590 }, + { url = "https://files.pythonhosted.org/packages/53/60/b8db5f1a4b0fb228175f2ea0aa33f949adcc097fbe981cc524f9faf85777/pyinstaller-6.19.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:a0fc5f6b3c55aa54353f0c74ffa59b1115433c1850c6f655d62b461a2ed6cbbe", size = 741448 }, + { url = "https://files.pythonhosted.org/packages/6f/4d/63b0600f2694e9141b83129fbc1c488ec84d5a0770b1448ec154dcd0fee9/pyinstaller-6.19.0-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:e649ba6bd1b0b89b210ad92adb5fbdc8a42dd2c5ca4f72ef3a0bfec83a424b83", size = 740613 }, + { url = "https://files.pythonhosted.org/packages/01/d4/e812ad36178093a0e9fd4b8127577748dd85b0cb71de912229dca21fd741/pyinstaller-6.19.0-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:481a909c8e60c8692fc60fcb1344d984b44b943f8bc9682f2fcdae305ad297e6", size = 740350 }, + { url = "https://files.pythonhosted.org/packages/52/03/b2c2ee41fb8e10fd2a45d21f5ec2ef25852cfb978dbf762972eed59e3d63/pyinstaller-6.19.0-py3-none-win32.whl", hash = "sha256:3c5c251054fe4cfaa04c34a363dcfbf811545438cb7198304cd444756bc2edd2", size = 1324317 }, + { url = "https://files.pythonhosted.org/packages/9c/d3/6d5e62b8270e2b53a6065e281b3a7785079b00e9019c8019952828dd1669/pyinstaller-6.19.0-py3-none-win_amd64.whl", hash = "sha256:b5bb6536c6560330d364d91522250f254b107cf69129d9cbcd0e6727c570be33", size = 1384894 }, + { url = "https://files.pythonhosted.org/packages/81/65/458cd523308a101a22fd2742893405030cc24994cc74b1b767cecf137160/pyinstaller-6.19.0-py3-none-win_arm64.whl", hash = "sha256:c2d5a539b0bfe6159d5522c8c70e1c0e487f22c2badae0f97d45246223b798ea", size = 1325374 }, ] [[package]] @@ -979,36 +994,36 @@ dependencies = [ { name = "packaging" }, { name = "setuptools" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/80/17/716326f6ba18d0663f7995ae369c23e50efebc22fbb054e9710a45688f61/pyinstaller_hooks_contrib-2026.3.tar.gz", hash = "sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310", size = 172323, upload-time = "2026-03-09T22:44:06.345Z" } +sdist = { url = "https://files.pythonhosted.org/packages/80/17/716326f6ba18d0663f7995ae369c23e50efebc22fbb054e9710a45688f61/pyinstaller_hooks_contrib-2026.3.tar.gz", hash = "sha256:800d3a198a49a6cd0de2d7fb795005fdca7a0222ed9cb47c0691abd1c27b9310", size = 172323 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ed/19/781352446af28755f16ce52b2d97f7a6f2d7974ac34c00ca5cd8c40c9098/pyinstaller_hooks_contrib-2026.3-py3-none-any.whl", hash = "sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a", size = 454625, upload-time = "2026-03-09T22:44:04.717Z" }, + { url = "https://files.pythonhosted.org/packages/ed/19/781352446af28755f16ce52b2d97f7a6f2d7974ac34c00ca5cd8c40c9098/pyinstaller_hooks_contrib-2026.3-py3-none-any.whl", hash = "sha256:5ecd1068ad262afecadf07556279d2be52ca93a88b049fae17f1a2eb2969254a", size = 454625 }, ] [[package]] name = "pymsgbox" version = "2.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ae/6a/e80da7594ee598a776972d09e2813df2b06b3bc29218f440631dfa7c78a8/pymsgbox-2.0.1.tar.gz", hash = "sha256:98d055c49a511dcc10fa08c3043e7102d468f5e4b3a83c6d3c61df722c7d798d", size = 20768, upload-time = "2025-09-09T00:38:56.863Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ae/6a/e80da7594ee598a776972d09e2813df2b06b3bc29218f440631dfa7c78a8/pymsgbox-2.0.1.tar.gz", hash = "sha256:98d055c49a511dcc10fa08c3043e7102d468f5e4b3a83c6d3c61df722c7d798d", size = 20768 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/3e/08c8cac81b2b2f7502746e6b9c8e5b0ec6432cd882c605560fc409aaf087/pymsgbox-2.0.1-py3-none-any.whl", hash = "sha256:5de8ec19bca2ca7e6c09d39c817c83f17c75cee80275235f43a9931db699f73b", size = 9994, upload-time = "2025-09-09T00:38:55.672Z" }, + { url = "https://files.pythonhosted.org/packages/6f/3e/08c8cac81b2b2f7502746e6b9c8e5b0ec6432cd882c605560fc409aaf087/pymsgbox-2.0.1-py3-none-any.whl", hash = "sha256:5de8ec19bca2ca7e6c09d39c817c83f17c75cee80275235f43a9931db699f73b", size = 9994 }, ] [[package]] name = "pymysql" version = "1.1.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f5/ae/1fe3fcd9f959efa0ebe200b8de88b5a5ce3e767e38c7ac32fb179f16a388/pymysql-1.1.2.tar.gz", hash = "sha256:4961d3e165614ae65014e361811a724e2044ad3ea3739de9903ae7c21f539f03", size = 48258, upload-time = "2025-08-24T12:55:55.146Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/ae/1fe3fcd9f959efa0ebe200b8de88b5a5ce3e767e38c7ac32fb179f16a388/pymysql-1.1.2.tar.gz", hash = "sha256:4961d3e165614ae65014e361811a724e2044ad3ea3739de9903ae7c21f539f03", size = 48258 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7c/4c/ad33b92b9864cbde84f259d5df035a6447f91891f5be77788e2a3892bce3/pymysql-1.1.2-py3-none-any.whl", hash = "sha256:e6b1d89711dd51f8f74b1631fe08f039e7d76cf67a42a323d3178f0f25762ed9", size = 45300, upload-time = "2025-08-24T12:55:53.394Z" }, + { url = "https://files.pythonhosted.org/packages/7c/4c/ad33b92b9864cbde84f259d5df035a6447f91891f5be77788e2a3892bce3/pymysql-1.1.2-py3-none-any.whl", hash = "sha256:e6b1d89711dd51f8f74b1631fe08f039e7d76cf67a42a323d3178f0f25762ed9", size = 45300 }, ] [[package]] name = "pyobjc-core" version = "11.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/e9/0b85c81e2b441267bca707b5d89f56c2f02578ef8f3eafddf0e0c0b8848c/pyobjc_core-11.1.tar.gz", hash = "sha256:b63d4d90c5df7e762f34739b39cc55bc63dbcf9fb2fb3f2671e528488c7a87fe", size = 974602, upload-time = "2025-06-14T20:56:34.189Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/e9/0b85c81e2b441267bca707b5d89f56c2f02578ef8f3eafddf0e0c0b8848c/pyobjc_core-11.1.tar.gz", hash = "sha256:b63d4d90c5df7e762f34739b39cc55bc63dbcf9fb2fb3f2671e528488c7a87fe", size = 974602 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/3c/98f04333e4f958ee0c44ceccaf0342c2502d361608e00f29a5d50e16a569/pyobjc_core-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a99e6558b48b8e47c092051e7b3be05df1c8d0617b62f6fa6a316c01902d157", size = 677089, upload-time = "2025-06-14T20:44:56.15Z" }, + { url = "https://files.pythonhosted.org/packages/0b/3c/98f04333e4f958ee0c44ceccaf0342c2502d361608e00f29a5d50e16a569/pyobjc_core-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:4a99e6558b48b8e47c092051e7b3be05df1c8d0617b62f6fa6a316c01902d157", size = 677089 }, ] [[package]] @@ -1018,9 +1033,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pyobjc-core" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/4b/c5/7a866d24bc026f79239b74d05e2cf3088b03263da66d53d1b4cf5207f5ae/pyobjc_framework_cocoa-11.1.tar.gz", hash = "sha256:87df76b9b73e7ca699a828ff112564b59251bb9bbe72e610e670a4dc9940d038", size = 5565335, upload-time = "2025-06-14T20:56:59.683Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4b/c5/7a866d24bc026f79239b74d05e2cf3088b03263da66d53d1b4cf5207f5ae/pyobjc_framework_cocoa-11.1.tar.gz", hash = "sha256:87df76b9b73e7ca699a828ff112564b59251bb9bbe72e610e670a4dc9940d038", size = 5565335 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b2/9b/5499d1ed6790b037b12831d7038eb21031ab90a033d4cfa43c9b51085925/pyobjc_framework_cocoa-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bbee71eeb93b1b31ffbac8560b59a0524a8a4b90846a260d2c4f2188f3d4c721", size = 388163, upload-time = "2025-06-14T20:46:58.72Z" }, + { url = "https://files.pythonhosted.org/packages/b2/9b/5499d1ed6790b037b12831d7038eb21031ab90a033d4cfa43c9b51085925/pyobjc_framework_cocoa-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bbee71eeb93b1b31ffbac8560b59a0524a8a4b90846a260d2c4f2188f3d4c721", size = 388163 }, ] [[package]] @@ -1031,9 +1046,9 @@ dependencies = [ { name = "pyobjc-core" }, { name = "pyobjc-framework-cocoa" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c7/ac/6308fec6c9ffeda9942fef72724f4094c6df4933560f512e63eac37ebd30/pyobjc_framework_quartz-11.1.tar.gz", hash = "sha256:a57f35ccfc22ad48c87c5932818e583777ff7276605fef6afad0ac0741169f75", size = 3953275, upload-time = "2025-06-14T20:58:17.924Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/ac/6308fec6c9ffeda9942fef72724f4094c6df4933560f512e63eac37ebd30/pyobjc_framework_quartz-11.1.tar.gz", hash = "sha256:a57f35ccfc22ad48c87c5932818e583777ff7276605fef6afad0ac0741169f75", size = 3953275 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4a/ca/204d08ea73125402f408cf139946b90c0d0ccf19d6b5efac616548fbdbbd/pyobjc_framework_quartz-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b1f451ddb5243d8d6316af55f240a02b0fffbfe165bff325628bf73f3df7f44", size = 215537, upload-time = "2025-06-14T20:53:42.015Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ca/204d08ea73125402f408cf139946b90c0d0ccf19d6b5efac616548fbdbbd/pyobjc_framework_quartz-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:9b1f451ddb5243d8d6316af55f240a02b0fffbfe165bff325628bf73f3df7f44", size = 215537 }, ] [[package]] @@ -1044,9 +1059,9 @@ dependencies = [ { name = "pyobjc-core" }, { name = "pyobjc-framework-cocoa" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ee/6f/ba50ed2d9c1192c67590a7cfefa44fc5f85c776d1e25beb224dec32081f6/pyobjc_framework_security-11.1.tar.gz", hash = "sha256:dabcee6987c6bae575e2d1ef0fcbe437678c4f49f1c25a4b131a5e960f31a2da", size = 302291, upload-time = "2025-06-14T20:58:28.506Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/6f/ba50ed2d9c1192c67590a7cfefa44fc5f85c776d1e25beb224dec32081f6/pyobjc_framework_security-11.1.tar.gz", hash = "sha256:dabcee6987c6bae575e2d1ef0fcbe437678c4f49f1c25a4b131a5e960f31a2da", size = 302291 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8a/0d/19d340c7716d8902f6d1aa582b2eff80eca34fcf7d8c474d48e7921ef2ce/pyobjc_framework_security-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5dec8412602256e1d7039e670fb987bf1b233a55086e1204f1e32d7aab798f98", size = 41199, upload-time = "2025-06-14T20:54:40.987Z" }, + { url = "https://files.pythonhosted.org/packages/8a/0d/19d340c7716d8902f6d1aa582b2eff80eca34fcf7d8c474d48e7921ef2ce/pyobjc_framework_security-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5dec8412602256e1d7039e670fb987bf1b233a55086e1204f1e32d7aab798f98", size = 41199 }, ] [[package]] @@ -1057,9 +1072,9 @@ dependencies = [ { name = "pyobjc-core" }, { name = "pyobjc-framework-cocoa" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c5/4f/066ed1c69352ccc29165f45afb302f8c9c2b5c6f33ee3abfa41b873c07e5/pyobjc_framework_uniformtypeidentifiers-11.1.tar.gz", hash = "sha256:86c499bec8953aeb0c95af39b63f2592832384f09f12523405650b5d5f1ed5e9", size = 20599, upload-time = "2025-06-14T20:58:41.945Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c5/4f/066ed1c69352ccc29165f45afb302f8c9c2b5c6f33ee3abfa41b873c07e5/pyobjc_framework_uniformtypeidentifiers-11.1.tar.gz", hash = "sha256:86c499bec8953aeb0c95af39b63f2592832384f09f12523405650b5d5f1ed5e9", size = 20599 } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/3b/b63b8137dd9f455d5abece6702c06c6b613fac6fda1319aaa2f79d00c380/pyobjc_framework_uniformtypeidentifiers-11.1-py2.py3-none-any.whl", hash = "sha256:6e2e8ea89eb8ca03bc2bc8e506fff901e71d916276475c8d81fbf0280059cb4c", size = 4891, upload-time = "2025-06-14T20:55:56.432Z" }, + { url = "https://files.pythonhosted.org/packages/de/3b/b63b8137dd9f455d5abece6702c06c6b613fac6fda1319aaa2f79d00c380/pyobjc_framework_uniformtypeidentifiers-11.1-py2.py3-none-any.whl", hash = "sha256:6e2e8ea89eb8ca03bc2bc8e506fff901e71d916276475c8d81fbf0280059cb4c", size = 4891 }, ] [[package]] @@ -1070,18 +1085,18 @@ dependencies = [ { name = "pyobjc-core" }, { name = "pyobjc-framework-cocoa" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/92/04/fb3d0b68994f7e657ef00c1ac5fc1c04ae2fc7ea581d647f5ae1f6739b14/pyobjc_framework_webkit-11.1.tar.gz", hash = "sha256:27e701c7aaf4f24fc7e601a128e2ef14f2773f4ab071b9db7438dc5afb5053ae", size = 717102, upload-time = "2025-06-14T20:58:47.461Z" } +sdist = { url = "https://files.pythonhosted.org/packages/92/04/fb3d0b68994f7e657ef00c1ac5fc1c04ae2fc7ea581d647f5ae1f6739b14/pyobjc_framework_webkit-11.1.tar.gz", hash = "sha256:27e701c7aaf4f24fc7e601a128e2ef14f2773f4ab071b9db7438dc5afb5053ae", size = 717102 } wheels = [ - { url = "https://files.pythonhosted.org/packages/13/46/ad2016804819cfe89d39fa6756252181dc1b46bc478ef8f091248f3ed143/pyobjc_framework_webkit-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:94534450e4b3c0a4fe8ad4fa9258afc07ebfe36e1b3966f0fb5cd437c89ccfbf", size = 51390, upload-time = "2025-06-14T20:56:31.856Z" }, + { url = "https://files.pythonhosted.org/packages/13/46/ad2016804819cfe89d39fa6756252181dc1b46bc478ef8f091248f3ed143/pyobjc_framework_webkit-11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:94534450e4b3c0a4fe8ad4fa9258afc07ebfe36e1b3966f0fb5cd437c89ccfbf", size = 51390 }, ] [[package]] name = "pyperclip" version = "1.11.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e8/52/d87eba7cb129b81563019d1679026e7a112ef76855d6159d24754dbd2a51/pyperclip-1.11.0.tar.gz", hash = "sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6", size = 12185, upload-time = "2025-09-26T14:40:37.245Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e8/52/d87eba7cb129b81563019d1679026e7a112ef76855d6159d24754dbd2a51/pyperclip-1.11.0.tar.gz", hash = "sha256:244035963e4428530d9e3a6101a1ef97209c6825edab1567beac148ccc1db1b6", size = 12185 } wheels = [ - { url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063, upload-time = "2025-09-26T14:40:36.069Z" }, + { url = "https://files.pythonhosted.org/packages/df/80/fc9d01d5ed37ba4c42ca2b55b4339ae6e200b456be3a1aaddf4a9fa99b8c/pyperclip-1.11.0-py3-none-any.whl", hash = "sha256:299403e9ff44581cb9ba2ffeed69c7aa96a008622ad0c46cb575ca75b5b84273", size = 11063 }, ] [[package]] @@ -1092,13 +1107,13 @@ dependencies = [ { name = "pyqt5-qt5" }, { name = "pyqt5-sip" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/0e/07/c9ed0bd428df6f87183fca565a79fee19fa7c88c7f00a7f011ab4379e77a/PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52", size = 3216775, upload-time = "2024-07-19T08:39:57.756Z" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/07/c9ed0bd428df6f87183fca565a79fee19fa7c88c7f00a7f011ab4379e77a/PyQt5-5.15.11.tar.gz", hash = "sha256:fda45743ebb4a27b4b1a51c6d8ef455c4c1b5d610c90d2934c7802b5c1557c52", size = 3216775 } wheels = [ - { url = "https://files.pythonhosted.org/packages/11/64/42ec1b0bd72d87f87bde6ceb6869f444d91a2d601f2e67cd05febc0346a1/PyQt5-5.15.11-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c8b03dd9380bb13c804f0bdb0f4956067f281785b5e12303d529f0462f9afdc2", size = 6579776, upload-time = "2024-07-19T08:39:19.775Z" }, - { url = "https://files.pythonhosted.org/packages/49/f5/3fb696f4683ea45d68b7e77302eff173493ac81e43d63adb60fa760b9f91/PyQt5-5.15.11-cp38-abi3-macosx_11_0_x86_64.whl", hash = "sha256:6cd75628f6e732b1ffcfe709ab833a0716c0445d7aec8046a48d5843352becb6", size = 7016415, upload-time = "2024-07-19T08:39:32.977Z" }, - { url = "https://files.pythonhosted.org/packages/b4/8c/4065950f9d013c4b2e588fe33cf04e564c2322842d84dbcbce5ba1dc28b0/PyQt5-5.15.11-cp38-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:cd672a6738d1ae33ef7d9efa8e6cb0a1525ecf53ec86da80a9e1b6ec38c8d0f1", size = 8188103, upload-time = "2024-07-19T08:39:40.561Z" }, - { url = "https://files.pythonhosted.org/packages/f3/f0/ae5a5b4f9b826b29ea4be841b2f2d951bcf5ae1d802f3732b145b57c5355/PyQt5-5.15.11-cp38-abi3-win32.whl", hash = "sha256:76be0322ceda5deecd1708a8d628e698089a1cea80d1a49d242a6d579a40babd", size = 5433308, upload-time = "2024-07-19T08:39:46.932Z" }, - { url = "https://files.pythonhosted.org/packages/56/d5/68eb9f3d19ce65df01b6c7b7a577ad3bbc9ab3a5dd3491a4756e71838ec9/PyQt5-5.15.11-cp38-abi3-win_amd64.whl", hash = "sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517", size = 6865864, upload-time = "2024-07-19T08:39:53.572Z" }, + { url = "https://files.pythonhosted.org/packages/11/64/42ec1b0bd72d87f87bde6ceb6869f444d91a2d601f2e67cd05febc0346a1/PyQt5-5.15.11-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:c8b03dd9380bb13c804f0bdb0f4956067f281785b5e12303d529f0462f9afdc2", size = 6579776 }, + { url = "https://files.pythonhosted.org/packages/49/f5/3fb696f4683ea45d68b7e77302eff173493ac81e43d63adb60fa760b9f91/PyQt5-5.15.11-cp38-abi3-macosx_11_0_x86_64.whl", hash = "sha256:6cd75628f6e732b1ffcfe709ab833a0716c0445d7aec8046a48d5843352becb6", size = 7016415 }, + { url = "https://files.pythonhosted.org/packages/b4/8c/4065950f9d013c4b2e588fe33cf04e564c2322842d84dbcbce5ba1dc28b0/PyQt5-5.15.11-cp38-abi3-manylinux_2_17_x86_64.whl", hash = "sha256:cd672a6738d1ae33ef7d9efa8e6cb0a1525ecf53ec86da80a9e1b6ec38c8d0f1", size = 8188103 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/ae5a5b4f9b826b29ea4be841b2f2d951bcf5ae1d802f3732b145b57c5355/PyQt5-5.15.11-cp38-abi3-win32.whl", hash = "sha256:76be0322ceda5deecd1708a8d628e698089a1cea80d1a49d242a6d579a40babd", size = 5433308 }, + { url = "https://files.pythonhosted.org/packages/56/d5/68eb9f3d19ce65df01b6c7b7a577ad3bbc9ab3a5dd3491a4756e71838ec9/PyQt5-5.15.11-cp38-abi3-win_amd64.whl", hash = "sha256:bdde598a3bb95022131a5c9ea62e0a96bd6fb28932cc1619fd7ba211531b7517", size = 6865864 }, ] [[package]] @@ -1106,29 +1121,29 @@ name = "pyqt5-qt5" version = "5.15.2" source = { registry = "https://pypi.org/simple" } wheels = [ - { url = "https://files.pythonhosted.org/packages/62/09/99a222b0360616250fb2e6003a54e43a2a06b0774f0f8d5daafb86a2c375/PyQt5_Qt5-5.15.2-py3-none-macosx_10_13_intel.whl", hash = "sha256:76980cd3d7ae87e3c7a33bfebfaee84448fd650bad6840471d6cae199b56e154", size = 40546019, upload-time = "2021-03-10T13:52:47.763Z" }, - { url = "https://files.pythonhosted.org/packages/83/d4/241a6a518d0bcf0a9fcdcbad5edfed18d43e884317eab8d5230a2b27e206/PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a", size = 59921716, upload-time = "2021-03-10T13:57:39.485Z" }, - { url = "https://files.pythonhosted.org/packages/1c/7e/ce7c66a541a105fa98b41d6405fe84940564695e29fc7dccf6d9e8c5f898/PyQt5_Qt5-5.15.2-py3-none-win32.whl", hash = "sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327", size = 43447358, upload-time = "2021-03-10T14:01:17.827Z" }, - { url = "https://files.pythonhosted.org/packages/37/97/5d3b222b924fa2ed4c2488925155cd0b03fd5d09ee1cfcf7c553c11c9f66/PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl", hash = "sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962", size = 50075158, upload-time = "2021-03-10T14:05:20.868Z" }, + { url = "https://files.pythonhosted.org/packages/62/09/99a222b0360616250fb2e6003a54e43a2a06b0774f0f8d5daafb86a2c375/PyQt5_Qt5-5.15.2-py3-none-macosx_10_13_intel.whl", hash = "sha256:76980cd3d7ae87e3c7a33bfebfaee84448fd650bad6840471d6cae199b56e154", size = 40546019 }, + { url = "https://files.pythonhosted.org/packages/83/d4/241a6a518d0bcf0a9fcdcbad5edfed18d43e884317eab8d5230a2b27e206/PyQt5_Qt5-5.15.2-py3-none-manylinux2014_x86_64.whl", hash = "sha256:1988f364ec8caf87a6ee5d5a3a5210d57539988bf8e84714c7d60972692e2f4a", size = 59921716 }, + { url = "https://files.pythonhosted.org/packages/1c/7e/ce7c66a541a105fa98b41d6405fe84940564695e29fc7dccf6d9e8c5f898/PyQt5_Qt5-5.15.2-py3-none-win32.whl", hash = "sha256:9cc7a768b1921f4b982ebc00a318ccb38578e44e45316c7a4a850e953e1dd327", size = 43447358 }, + { url = "https://files.pythonhosted.org/packages/37/97/5d3b222b924fa2ed4c2488925155cd0b03fd5d09ee1cfcf7c553c11c9f66/PyQt5_Qt5-5.15.2-py3-none-win_amd64.whl", hash = "sha256:750b78e4dba6bdf1607febedc08738e318ea09e9b10aea9ff0d73073f11f6962", size = 50075158 }, ] [[package]] name = "pyqt5-sip" version = "12.17.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ea/08/88a20c862f40b5c178c517cdc7e93767967dec5ac1b994e226d517991c9b/pyqt5_sip-12.17.1.tar.gz", hash = "sha256:0eab72bcb628f1926bf5b9ac51259d4fa18e8b2a81d199071135458f7d087ea8", size = 104136, upload-time = "2025-10-08T09:04:19.893Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ea/08/88a20c862f40b5c178c517cdc7e93767967dec5ac1b994e226d517991c9b/pyqt5_sip-12.17.1.tar.gz", hash = "sha256:0eab72bcb628f1926bf5b9ac51259d4fa18e8b2a81d199071135458f7d087ea8", size = 104136 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1d/fd/097af91c0446c4877b2614f3e7e40729c7d0a276c401cef3ff95850cd236/pyqt5_sip-12.17.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6fdc457bd528e5909a5893db0a7dee0066d5f22e08234c9152db0ae6df9a367f", size = 122513, upload-time = "2025-10-08T09:04:18.867Z" }, - { url = "https://files.pythonhosted.org/packages/2c/cf/58143e15d0bfa1d1450071ad9a2d71adca82ebefbd7729d0c543463d4d31/pyqt5_sip-12.17.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:06ea59741c1bffb198d99b00d26594791f45fb11b10f774c8105aea5962e3835", size = 268959, upload-time = "2025-10-08T09:15:38.323Z" }, - { url = "https://files.pythonhosted.org/packages/e6/9b/8e8f1af1b500f0d4fcd48c9f7ee474731db8b046d3629151e382634eaf59/pyqt5_sip-12.17.1-cp39-cp39-win32.whl", hash = "sha256:b9ef23869d35c6740a95fcb1f387f4aea8d8fac80e19096fbaf1a64e18409c4b", size = 49030, upload-time = "2025-10-08T09:11:26.984Z" }, - { url = "https://files.pythonhosted.org/packages/64/1e/08bd86000c8294772c6c4aaaf53babd69b9b37e80d1c87583c1fe8eeab5b/pyqt5_sip-12.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:90eed15f19557dfab22e68c7763e3690053cc8dd30d93ade2523d1b5a04a87be", size = 59011, upload-time = "2025-10-08T09:08:37.924Z" }, + { url = "https://files.pythonhosted.org/packages/1d/fd/097af91c0446c4877b2614f3e7e40729c7d0a276c401cef3ff95850cd236/pyqt5_sip-12.17.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6fdc457bd528e5909a5893db0a7dee0066d5f22e08234c9152db0ae6df9a367f", size = 122513 }, + { url = "https://files.pythonhosted.org/packages/2c/cf/58143e15d0bfa1d1450071ad9a2d71adca82ebefbd7729d0c543463d4d31/pyqt5_sip-12.17.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:06ea59741c1bffb198d99b00d26594791f45fb11b10f774c8105aea5962e3835", size = 268959 }, + { url = "https://files.pythonhosted.org/packages/e6/9b/8e8f1af1b500f0d4fcd48c9f7ee474731db8b046d3629151e382634eaf59/pyqt5_sip-12.17.1-cp39-cp39-win32.whl", hash = "sha256:b9ef23869d35c6740a95fcb1f387f4aea8d8fac80e19096fbaf1a64e18409c4b", size = 49030 }, + { url = "https://files.pythonhosted.org/packages/64/1e/08bd86000c8294772c6c4aaaf53babd69b9b37e80d1c87583c1fe8eeab5b/pyqt5_sip-12.17.1-cp39-cp39-win_amd64.whl", hash = "sha256:90eed15f19557dfab22e68c7763e3690053cc8dd30d93ade2523d1b5a04a87be", size = 59011 }, ] [[package]] name = "pyrect" version = "0.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cb/04/2ba023d5f771b645f7be0c281cdacdcd939fe13d1deb331fc5ed1a6b3a98/PyRect-0.2.0.tar.gz", hash = "sha256:f65155f6df9b929b67caffbd57c0947c5ae5449d3b580d178074bffb47a09b78", size = 17219, upload-time = "2022-03-16T04:45:52.36Z" } +sdist = { url = "https://files.pythonhosted.org/packages/cb/04/2ba023d5f771b645f7be0c281cdacdcd939fe13d1deb331fc5ed1a6b3a98/PyRect-0.2.0.tar.gz", hash = "sha256:f65155f6df9b929b67caffbd57c0947c5ae5449d3b580d178074bffb47a09b78", size = 17219 } [[package]] name = "pyscreeze" @@ -1137,7 +1152,7 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pillow" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/ee/f0/cb456ac4f1a73723d5b866933b7986f02bacea27516629c00f8e7da94c2d/pyscreeze-1.0.1.tar.gz", hash = "sha256:cf1662710f1b46aa5ff229ee23f367da9e20af4a78e6e365bee973cad0ead4be", size = 27826, upload-time = "2024-08-20T23:03:07.291Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ee/f0/cb456ac4f1a73723d5b866933b7986f02bacea27516629c00f8e7da94c2d/pyscreeze-1.0.1.tar.gz", hash = "sha256:cf1662710f1b46aa5ff229ee23f367da9e20af4a78e6e365bee973cad0ead4be", size = 27826 } [[package]] name = "pytest" @@ -1152,9 +1167,9 @@ dependencies = [ { name = "pygments" }, { name = "tomli" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618, upload-time = "2025-09-04T14:34:22.711Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a3/5c/00a0e072241553e1a7496d638deababa67c5058571567b92a7eaa258397c/pytest-8.4.2.tar.gz", hash = "sha256:86c0d0b93306b961d58d62a4db4879f27fe25513d4b969df351abdddb3c30e01", size = 1519618 } wheels = [ - { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750, upload-time = "2025-09-04T14:34:20.226Z" }, + { url = "https://files.pythonhosted.org/packages/a8/a4/20da314d277121d6534b3a980b29035dcd51e6744bd79075a6ce8fa4eb8d/pytest-8.4.2-py3-none-any.whl", hash = "sha256:872f880de3fc3a5bdc88a11b39c9710c3497a547cfa9320bc3c5e62fbf272e79", size = 365750 }, ] [[package]] @@ -1164,25 +1179,25 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "six" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" } +sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" }, + { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, ] [[package]] name = "python-dotenv" version = "1.2.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221, upload-time = "2025-10-26T15:12:10.434Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f0/26/19cadc79a718c5edbec86fd4919a6b6d3f681039a2f6d66d14be94e75fb9/python_dotenv-1.2.1.tar.gz", hash = "sha256:42667e897e16ab0d66954af0e60a9caa94f0fd4ecf3aaf6d2d260eec1aa36ad6", size = 44221 } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230, upload-time = "2025-10-26T15:12:09.109Z" }, + { url = "https://files.pythonhosted.org/packages/14/1b/a298b06749107c305e1fe0f814c6c74aea7b2f1e10989cb30f544a1b3253/python_dotenv-1.2.1-py3-none-any.whl", hash = "sha256:b81ee9561e9ca4004139c6cbba3a238c32b03e4894671e181b671e8cb8425d61", size = 21230 }, ] [[package]] name = "python3-xlib" version = "0.15" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/ef/c6/2c5999de3bb1533521f1101e8fe56fd9c266732f4d48011c7c69b29d12ae/python3-xlib-0.15.tar.gz", hash = "sha256:dc4245f3ae4aa5949c1d112ee4723901ade37a96721ba9645f2bfa56e5b383f8", size = 132828, upload-time = "2014-05-31T12:28:59.603Z" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/c6/2c5999de3bb1533521f1101e8fe56fd9c266732f4d48011c7c69b29d12ae/python3-xlib-0.15.tar.gz", hash = "sha256:dc4245f3ae4aa5949c1d112ee4723901ade37a96721ba9645f2bfa56e5b383f8", size = 132828 } [[package]] name = "pythonnet" @@ -1191,24 +1206,24 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "clr-loader" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9a/d6/1afd75edd932306ae9bd2c2d961d603dc2b52fcec51b04afea464f1f6646/pythonnet-3.0.5.tar.gz", hash = "sha256:48e43ca463941b3608b32b4e236db92d8d40db4c58a75ace902985f76dac21cf", size = 239212, upload-time = "2024-12-13T08:30:44.393Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9a/d6/1afd75edd932306ae9bd2c2d961d603dc2b52fcec51b04afea464f1f6646/pythonnet-3.0.5.tar.gz", hash = "sha256:48e43ca463941b3608b32b4e236db92d8d40db4c58a75ace902985f76dac21cf", size = 239212 } wheels = [ - { url = "https://files.pythonhosted.org/packages/cd/f1/bfb6811df4745f92f14c47a29e50e89a36b1533130fcc56452d4660bd2d6/pythonnet-3.0.5-py3-none-any.whl", hash = "sha256:f6702d694d5d5b163c9f3f5cc34e0bed8d6857150237fae411fefb883a656d20", size = 297506, upload-time = "2024-12-13T08:30:40.661Z" }, + { url = "https://files.pythonhosted.org/packages/cd/f1/bfb6811df4745f92f14c47a29e50e89a36b1533130fcc56452d4660bd2d6/pythonnet-3.0.5-py3-none-any.whl", hash = "sha256:f6702d694d5d5b163c9f3f5cc34e0bed8d6857150237fae411fefb883a656d20", size = 297506 }, ] [[package]] name = "pytweening" version = "1.2.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/79/0c/c16bc93ac2755bac0066a8ecbd2a2931a1735a6fffd99a2b9681c7e83e90/pytweening-1.2.0.tar.gz", hash = "sha256:243318b7736698066c5f362ec5c2b6434ecf4297c3c8e7caa8abfe6af4cac71b", size = 171241, upload-time = "2024-02-20T03:37:56.809Z" } +sdist = { url = "https://files.pythonhosted.org/packages/79/0c/c16bc93ac2755bac0066a8ecbd2a2931a1735a6fffd99a2b9681c7e83e90/pytweening-1.2.0.tar.gz", hash = "sha256:243318b7736698066c5f362ec5c2b6434ecf4297c3c8e7caa8abfe6af4cac71b", size = 171241 } [[package]] name = "pytz" version = "2026.1.post1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/56/db/b8721d71d945e6a8ac63c0fc900b2067181dbb50805958d4d4661cf7d277/pytz-2026.1.post1.tar.gz", hash = "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1", size = 321088, upload-time = "2026-03-03T07:47:50.683Z" } +sdist = { url = "https://files.pythonhosted.org/packages/56/db/b8721d71d945e6a8ac63c0fc900b2067181dbb50805958d4d4661cf7d277/pytz-2026.1.post1.tar.gz", hash = "sha256:3378dde6a0c3d26719182142c56e60c7f9af7e968076f31aae569d72a0358ee1", size = 321088 } wheels = [ - { url = "https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl", hash = "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a", size = 510489, upload-time = "2026-03-03T07:47:49.167Z" }, + { url = "https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl", hash = "sha256:f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a", size = 510489 }, ] [[package]] @@ -1228,18 +1243,18 @@ dependencies = [ { name = "qtpy", marker = "sys_platform == 'openbsd6'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/64/09/75cf92c4db19350ddb084d841e352ce30e89668815d0494d1dd595c85469/pywebview-6.1.tar.gz", hash = "sha256:f0b95047860caf3d921581f9e16b4edb1a125b23e2ce691c4da2968f8b160ff2", size = 496270, upload-time = "2025-10-21T18:02:44.323Z" } +sdist = { url = "https://files.pythonhosted.org/packages/64/09/75cf92c4db19350ddb084d841e352ce30e89668815d0494d1dd595c85469/pywebview-6.1.tar.gz", hash = "sha256:f0b95047860caf3d921581f9e16b4edb1a125b23e2ce691c4da2968f8b160ff2", size = 496270 } wheels = [ - { url = "https://files.pythonhosted.org/packages/74/12/ce9006cdcc1834378826b5c0d4b554d899cd25ac9c665569d060f220b0e1/pywebview-6.1-py3-none-any.whl", hash = "sha256:2b552a340557e76a740b045a25937f72dae751e0985d5f5d9556f697ba622ec5", size = 511255, upload-time = "2025-10-21T18:02:42.377Z" }, + { url = "https://files.pythonhosted.org/packages/74/12/ce9006cdcc1834378826b5c0d4b554d899cd25ac9c665569d060f220b0e1/pywebview-6.1-py3-none-any.whl", hash = "sha256:2b552a340557e76a740b045a25937f72dae751e0985d5f5d9556f697ba622ec5", size = 511255 }, ] [[package]] name = "pywin32-ctypes" version = "0.2.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471, upload-time = "2024-08-14T10:15:34.626Z" } +sdist = { url = "https://files.pythonhosted.org/packages/85/9f/01a1a99704853cb63f253eea009390c88e7131c67e66a0a02099a8c917cb/pywin32-ctypes-0.2.3.tar.gz", hash = "sha256:d162dc04946d704503b2edc4d55f3dba5c1d539ead017afa00142c38b9885755", size = 29471 } wheels = [ - { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756, upload-time = "2024-08-14T10:15:33.187Z" }, + { url = "https://files.pythonhosted.org/packages/de/3d/8161f7711c017e01ac9f008dfddd9410dff3674334c233bde66e7ba65bbf/pywin32_ctypes-0.2.3-py3-none-any.whl", hash = "sha256:8a1513379d709975552d202d942d9837758905c8d01eb82b8bcc30918929e7b8", size = 30756 }, ] [[package]] @@ -1249,9 +1264,9 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "packaging" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/70/01/392eba83c8e47b946b929d7c46e0f04b35e9671f8bb6fc36b6f7945b4de8/qtpy-2.4.3.tar.gz", hash = "sha256:db744f7832e6d3da90568ba6ccbca3ee2b3b4a890c3d6fbbc63142f6e4cdf5bb", size = 66982, upload-time = "2025-02-11T15:09:25.759Z" } +sdist = { url = "https://files.pythonhosted.org/packages/70/01/392eba83c8e47b946b929d7c46e0f04b35e9671f8bb6fc36b6f7945b4de8/qtpy-2.4.3.tar.gz", hash = "sha256:db744f7832e6d3da90568ba6ccbca3ee2b3b4a890c3d6fbbc63142f6e4cdf5bb", size = 66982 } wheels = [ - { url = "https://files.pythonhosted.org/packages/69/76/37c0ccd5ab968a6a438f9c623aeecc84c202ab2fabc6a8fd927580c15b5a/QtPy-2.4.3-py3-none-any.whl", hash = "sha256:72095afe13673e017946cc258b8d5da43314197b741ed2890e563cf384b51aa1", size = 95045, upload-time = "2025-02-11T15:09:24.162Z" }, + { url = "https://files.pythonhosted.org/packages/69/76/37c0ccd5ab968a6a438f9c623aeecc84c202ab2fabc6a8fd927580c15b5a/QtPy-2.4.3-py3-none-any.whl", hash = "sha256:72095afe13673e017946cc258b8d5da43314197b741ed2890e563cf384b51aa1", size = 95045 }, ] [[package]] @@ -1264,9 +1279,9 @@ dependencies = [ { name = "idna" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738 }, ] [[package]] @@ -1276,61 +1291,61 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "requests" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/3c/f8/5dc70102e4d337063452c82e1f0d95e39abfe67aa222ed8a5ddeb9df8de8/requests_file-3.0.1.tar.gz", hash = "sha256:f14243d7796c588f3521bd423c5dea2ee4cc730e54a3cac9574d78aca1272576", size = 6967, upload-time = "2025-10-20T18:56:42.279Z" } +sdist = { url = "https://files.pythonhosted.org/packages/3c/f8/5dc70102e4d337063452c82e1f0d95e39abfe67aa222ed8a5ddeb9df8de8/requests_file-3.0.1.tar.gz", hash = "sha256:f14243d7796c588f3521bd423c5dea2ee4cc730e54a3cac9574d78aca1272576", size = 6967 } wheels = [ - { url = "https://files.pythonhosted.org/packages/e1/d5/de8f089119205a09da657ed4784c584ede8381a0ce6821212a6d4ca47054/requests_file-3.0.1-py2.py3-none-any.whl", hash = "sha256:d0f5eb94353986d998f80ac63c7f146a307728be051d4d1cd390dbdb59c10fa2", size = 4514, upload-time = "2025-10-20T18:56:41.184Z" }, + { url = "https://files.pythonhosted.org/packages/e1/d5/de8f089119205a09da657ed4784c584ede8381a0ce6821212a6d4ca47054/requests_file-3.0.1-py2.py3-none-any.whl", hash = "sha256:d0f5eb94353986d998f80ac63c7f146a307728be051d4d1cd390dbdb59c10fa2", size = 4514 }, ] [[package]] name = "rubicon-objc" version = "0.5.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a7/2f/612049b8601e810080f63f4b85acbf2ed0784349088d3c944eb288e1d487/rubicon_objc-0.5.2.tar.gz", hash = "sha256:1180593935f6a8a39c23b5f4b7baa24aedf9f7285e80804a1d9d6b50a50572f5", size = 175710, upload-time = "2025-08-07T06:12:25.194Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a7/2f/612049b8601e810080f63f4b85acbf2ed0784349088d3c944eb288e1d487/rubicon_objc-0.5.2.tar.gz", hash = "sha256:1180593935f6a8a39c23b5f4b7baa24aedf9f7285e80804a1d9d6b50a50572f5", size = 175710 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9f/a4/11ad29100060af56408ed084dca76a16d2ce8eb31b75081bfc0eec45d755/rubicon_objc-0.5.2-py3-none-any.whl", hash = "sha256:829b253c579e51fc34f4bb6587c34806e78960dcc1eb24e62b38141a1fe02b39", size = 63512, upload-time = "2025-08-07T06:12:23.766Z" }, + { url = "https://files.pythonhosted.org/packages/9f/a4/11ad29100060af56408ed084dca76a16d2ce8eb31b75081bfc0eec45d755/rubicon_objc-0.5.2-py3-none-any.whl", hash = "sha256:829b253c579e51fc34f4bb6587c34806e78960dcc1eb24e62b38141a1fe02b39", size = 63512 }, ] [[package]] name = "ruff" version = "0.15.12" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/99/43/3291f1cc9106f4c63bdce7a8d0df5047fe8422a75b091c16b5e9355e0b11/ruff-0.15.12.tar.gz", hash = "sha256:ecea26adb26b4232c0c2ca19ccbc0083a68344180bba2a600605538ce51a40a6", size = 4643852, upload-time = "2026-04-24T18:17:14.305Z" } +sdist = { url = "https://files.pythonhosted.org/packages/99/43/3291f1cc9106f4c63bdce7a8d0df5047fe8422a75b091c16b5e9355e0b11/ruff-0.15.12.tar.gz", hash = "sha256:ecea26adb26b4232c0c2ca19ccbc0083a68344180bba2a600605538ce51a40a6", size = 4643852 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c3/6e/e78ffb61d4686f3d96ba3df2c801161843746dcbcbb17a1e927d4829312b/ruff-0.15.12-py3-none-linux_armv6l.whl", hash = "sha256:f86f176e188e94d6bdbc09f09bfd9dc729059ad93d0e7390b5a73efe19f8861c", size = 10640713, upload-time = "2026-04-24T18:17:22.841Z" }, - { url = "https://files.pythonhosted.org/packages/ae/08/a317bc231fb9e7b93e4ef3089501e51922ff88d6936ce5cf870c4fe55419/ruff-0.15.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e3bcd123364c3770b8e1b7baaf343cc99a35f197c5c6e8af79015c666c423a6c", size = 11069267, upload-time = "2026-04-24T18:17:30.105Z" }, - { url = "https://files.pythonhosted.org/packages/aa/a4/f828e9718d3dce1f5f11c39c4f65afd32783c8b2aebb2e3d259e492c47bd/ruff-0.15.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fe87510d000220aa1ed530d4448a7c696a0cae1213e5ec30e5874287b66557b5", size = 10397182, upload-time = "2026-04-24T18:17:07.177Z" }, - { url = "https://files.pythonhosted.org/packages/71/e0/3310fc6d1b5e1fdea22bf3b1b807c7e187b581021b0d7d4514cccdb5fb71/ruff-0.15.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84a1630093121375a3e2a95b4a6dc7b59e2b4ee76216e32d81aae550a832d002", size = 10758012, upload-time = "2026-04-24T18:16:55.759Z" }, - { url = "https://files.pythonhosted.org/packages/11/c1/a606911aee04c324ddaa883ae418f3569792fd3c4a10c50e0dd0a2311e1e/ruff-0.15.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb129f40f114f089ebe0ca56c0d251cf2061b17651d464bb6478dc01e69f11f5", size = 10447479, upload-time = "2026-04-24T18:16:51.677Z" }, - { url = "https://files.pythonhosted.org/packages/9d/68/4201e8444f0894f21ab4aeeaee68aa4f10b51613514a20d80bd628d57e88/ruff-0.15.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0c862b172d695db7598426b8af465e7e9ac00a3ea2a3630ee67eb82e366aaa6", size = 11234040, upload-time = "2026-04-24T18:17:16.529Z" }, - { url = "https://files.pythonhosted.org/packages/34/ff/8a6d6cf4ccc23fd67060874e832c18919d1557a0611ebef03fdb01fff11e/ruff-0.15.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2849ea9f3484c3aca43a82f484210370319e7170df4dfe4843395ddf6c57bc33", size = 12087377, upload-time = "2026-04-24T18:17:04.944Z" }, - { url = "https://files.pythonhosted.org/packages/85/f6/c669cf73f5152f623d34e69866a46d5e6185816b19fcd5b6dd8a2d299922/ruff-0.15.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e77c7e51c07fe396826d5969a5b846d9cd4c402535835fb6e21ce8b28fef847", size = 11367784, upload-time = "2026-04-24T18:17:25.409Z" }, - { url = "https://files.pythonhosted.org/packages/e8/39/c61d193b8a1daaa8977f7dea9e8d8ba866e02ea7b65d32f6861693aa4c12/ruff-0.15.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83b2f4f2f3b1026b5fb449b467d9264bf22067b600f7b6f41fc5958909f449d0", size = 11344088, upload-time = "2026-04-24T18:17:12.258Z" }, - { url = "https://files.pythonhosted.org/packages/c2/8d/49afab3645e31e12c590acb6d3b5b69d7aab5b81926dbaf7461f9441f37a/ruff-0.15.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9ba3b8f1afd7e2e43d8943e55f249e13f9682fde09711644a6e7290eb4f3e339", size = 11271770, upload-time = "2026-04-24T18:17:02.457Z" }, - { url = "https://files.pythonhosted.org/packages/46/06/33f41fe94403e2b755481cdfb9b7ef3e4e0ed031c4581124658d935d52b4/ruff-0.15.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e852ba9fdc890655e1d78f2df1499efbe0e54126bd405362154a75e2bde159c5", size = 10719355, upload-time = "2026-04-24T18:17:27.648Z" }, - { url = "https://files.pythonhosted.org/packages/0d/59/18aa4e014debbf559670e4048e39260a85c7fcee84acfd761ac01e7b8d35/ruff-0.15.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dd8aed930da53780d22fc70bdf84452c843cf64f8cb4eb38984319c24c5cd5fd", size = 10462758, upload-time = "2026-04-24T18:17:32.347Z" }, - { url = "https://files.pythonhosted.org/packages/25/e7/cc9f16fd0f3b5fddcbd7ec3d6ae30c8f3fde1047f32a4093a98d633c6570/ruff-0.15.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:01da3988d225628b709493d7dc67c3b9b12c0210016b08690ef9bd27970b262b", size = 10953498, upload-time = "2026-04-24T18:17:20.674Z" }, - { url = "https://files.pythonhosted.org/packages/72/7a/a9ba7f98c7a575978698f4230c5e8cc54bbc761af34f560818f933dafa0c/ruff-0.15.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:9cae0f92bd5700d1213188b31cd3bdd2b315361296d10b96b8e2337d3d11f53e", size = 11447765, upload-time = "2026-04-24T18:17:09.755Z" }, - { url = "https://files.pythonhosted.org/packages/ea/f9/0ae446942c846b8266059ad8a30702a35afae55f5cdc54c5adf8d7afdc27/ruff-0.15.12-py3-none-win32.whl", hash = "sha256:d0185894e038d7043ba8fd6aee7499ece6462dc0ea9f1e260c7451807c714c20", size = 10657277, upload-time = "2026-04-24T18:17:18.591Z" }, - { url = "https://files.pythonhosted.org/packages/33/f1/9614e03e1cdcbf9437570b5400ced8a720b5db22b28d8e0f1bda429f660d/ruff-0.15.12-py3-none-win_amd64.whl", hash = "sha256:c87a162d61ab3adca47c03f7f717c68672edec7d1b5499e652331780fe74950d", size = 11837758, upload-time = "2026-04-24T18:17:00.113Z" }, - { url = "https://files.pythonhosted.org/packages/c0/98/6beb4b351e472e5f4c4613f7c35a5290b8be2497e183825310c4c3a3984b/ruff-0.15.12-py3-none-win_arm64.whl", hash = "sha256:a538f7a82d061cee7be55542aca1d86d1393d55d81d4fcc314370f4340930d4f", size = 11120821, upload-time = "2026-04-24T18:16:57.979Z" }, + { url = "https://files.pythonhosted.org/packages/c3/6e/e78ffb61d4686f3d96ba3df2c801161843746dcbcbb17a1e927d4829312b/ruff-0.15.12-py3-none-linux_armv6l.whl", hash = "sha256:f86f176e188e94d6bdbc09f09bfd9dc729059ad93d0e7390b5a73efe19f8861c", size = 10640713 }, + { url = "https://files.pythonhosted.org/packages/ae/08/a317bc231fb9e7b93e4ef3089501e51922ff88d6936ce5cf870c4fe55419/ruff-0.15.12-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:e3bcd123364c3770b8e1b7baaf343cc99a35f197c5c6e8af79015c666c423a6c", size = 11069267 }, + { url = "https://files.pythonhosted.org/packages/aa/a4/f828e9718d3dce1f5f11c39c4f65afd32783c8b2aebb2e3d259e492c47bd/ruff-0.15.12-py3-none-macosx_11_0_arm64.whl", hash = "sha256:fe87510d000220aa1ed530d4448a7c696a0cae1213e5ec30e5874287b66557b5", size = 10397182 }, + { url = "https://files.pythonhosted.org/packages/71/e0/3310fc6d1b5e1fdea22bf3b1b807c7e187b581021b0d7d4514cccdb5fb71/ruff-0.15.12-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:84a1630093121375a3e2a95b4a6dc7b59e2b4ee76216e32d81aae550a832d002", size = 10758012 }, + { url = "https://files.pythonhosted.org/packages/11/c1/a606911aee04c324ddaa883ae418f3569792fd3c4a10c50e0dd0a2311e1e/ruff-0.15.12-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fb129f40f114f089ebe0ca56c0d251cf2061b17651d464bb6478dc01e69f11f5", size = 10447479 }, + { url = "https://files.pythonhosted.org/packages/9d/68/4201e8444f0894f21ab4aeeaee68aa4f10b51613514a20d80bd628d57e88/ruff-0.15.12-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0c862b172d695db7598426b8af465e7e9ac00a3ea2a3630ee67eb82e366aaa6", size = 11234040 }, + { url = "https://files.pythonhosted.org/packages/34/ff/8a6d6cf4ccc23fd67060874e832c18919d1557a0611ebef03fdb01fff11e/ruff-0.15.12-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2849ea9f3484c3aca43a82f484210370319e7170df4dfe4843395ddf6c57bc33", size = 12087377 }, + { url = "https://files.pythonhosted.org/packages/85/f6/c669cf73f5152f623d34e69866a46d5e6185816b19fcd5b6dd8a2d299922/ruff-0.15.12-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9e77c7e51c07fe396826d5969a5b846d9cd4c402535835fb6e21ce8b28fef847", size = 11367784 }, + { url = "https://files.pythonhosted.org/packages/e8/39/c61d193b8a1daaa8977f7dea9e8d8ba866e02ea7b65d32f6861693aa4c12/ruff-0.15.12-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:83b2f4f2f3b1026b5fb449b467d9264bf22067b600f7b6f41fc5958909f449d0", size = 11344088 }, + { url = "https://files.pythonhosted.org/packages/c2/8d/49afab3645e31e12c590acb6d3b5b69d7aab5b81926dbaf7461f9441f37a/ruff-0.15.12-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:9ba3b8f1afd7e2e43d8943e55f249e13f9682fde09711644a6e7290eb4f3e339", size = 11271770 }, + { url = "https://files.pythonhosted.org/packages/46/06/33f41fe94403e2b755481cdfb9b7ef3e4e0ed031c4581124658d935d52b4/ruff-0.15.12-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:e852ba9fdc890655e1d78f2df1499efbe0e54126bd405362154a75e2bde159c5", size = 10719355 }, + { url = "https://files.pythonhosted.org/packages/0d/59/18aa4e014debbf559670e4048e39260a85c7fcee84acfd761ac01e7b8d35/ruff-0.15.12-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:dd8aed930da53780d22fc70bdf84452c843cf64f8cb4eb38984319c24c5cd5fd", size = 10462758 }, + { url = "https://files.pythonhosted.org/packages/25/e7/cc9f16fd0f3b5fddcbd7ec3d6ae30c8f3fde1047f32a4093a98d633c6570/ruff-0.15.12-py3-none-musllinux_1_2_i686.whl", hash = "sha256:01da3988d225628b709493d7dc67c3b9b12c0210016b08690ef9bd27970b262b", size = 10953498 }, + { url = "https://files.pythonhosted.org/packages/72/7a/a9ba7f98c7a575978698f4230c5e8cc54bbc761af34f560818f933dafa0c/ruff-0.15.12-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:9cae0f92bd5700d1213188b31cd3bdd2b315361296d10b96b8e2337d3d11f53e", size = 11447765 }, + { url = "https://files.pythonhosted.org/packages/ea/f9/0ae446942c846b8266059ad8a30702a35afae55f5cdc54c5adf8d7afdc27/ruff-0.15.12-py3-none-win32.whl", hash = "sha256:d0185894e038d7043ba8fd6aee7499ece6462dc0ea9f1e260c7451807c714c20", size = 10657277 }, + { url = "https://files.pythonhosted.org/packages/33/f1/9614e03e1cdcbf9437570b5400ced8a720b5db22b28d8e0f1bda429f660d/ruff-0.15.12-py3-none-win_amd64.whl", hash = "sha256:c87a162d61ab3adca47c03f7f717c68672edec7d1b5499e652331780fe74950d", size = 11837758 }, + { url = "https://files.pythonhosted.org/packages/c0/98/6beb4b351e472e5f4c4613f7c35a5290b8be2497e183825310c4c3a3984b/ruff-0.15.12-py3-none-win_arm64.whl", hash = "sha256:a538f7a82d061cee7be55542aca1d86d1393d55d81d4fcc314370f4340930d4f", size = 11120821 }, ] [[package]] name = "setuptools" version = "82.0.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316, upload-time = "2026-03-09T12:47:17.221Z" } +sdist = { url = "https://files.pythonhosted.org/packages/4f/db/cfac1baf10650ab4d1c111714410d2fbb77ac5a616db26775db562c8fab2/setuptools-82.0.1.tar.gz", hash = "sha256:7d872682c5d01cfde07da7bccc7b65469d3dca203318515ada1de5eda35efbf9", size = 1152316 } wheels = [ - { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223, upload-time = "2026-03-09T12:47:15.026Z" }, + { url = "https://files.pythonhosted.org/packages/9d/76/f789f7a86709c6b087c5a2f52f911838cad707cc613162401badc665acfe/setuptools-82.0.1-py3-none-any.whl", hash = "sha256:a59e362652f08dcd477c78bb6e7bd9d80a7995bc73ce773050228a348ce2e5bb", size = 1006223 }, ] [[package]] name = "six" version = "1.17.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031 } wheels = [ - { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" }, + { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050 }, ] [[package]] @@ -1343,27 +1358,27 @@ dependencies = [ { name = "requests" }, { name = "requests-file" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/97/78/182641ea38e3cfd56e9c7b3c0d48a53d432eea755003aa544af96403d4ac/tldextract-5.3.0.tar.gz", hash = "sha256:b3d2b70a1594a0ecfa6967d57251527d58e00bb5a91a74387baa0d87a0678609", size = 128502, upload-time = "2025-04-22T06:19:37.491Z" } +sdist = { url = "https://files.pythonhosted.org/packages/97/78/182641ea38e3cfd56e9c7b3c0d48a53d432eea755003aa544af96403d4ac/tldextract-5.3.0.tar.gz", hash = "sha256:b3d2b70a1594a0ecfa6967d57251527d58e00bb5a91a74387baa0d87a0678609", size = 128502 } wheels = [ - { url = "https://files.pythonhosted.org/packages/67/7c/ea488ef48f2f544566947ced88541bc45fae9e0e422b2edbf165ee07da99/tldextract-5.3.0-py3-none-any.whl", hash = "sha256:f70f31d10b55c83993f55e91ecb7c5d84532a8972f22ec578ecfbe5ea2292db2", size = 107384, upload-time = "2025-04-22T06:19:36.304Z" }, + { url = "https://files.pythonhosted.org/packages/67/7c/ea488ef48f2f544566947ced88541bc45fae9e0e422b2edbf165ee07da99/tldextract-5.3.0-py3-none-any.whl", hash = "sha256:f70f31d10b55c83993f55e91ecb7c5d84532a8972f22ec578ecfbe5ea2292db2", size = 107384 }, ] [[package]] name = "tomli" version = "2.4.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543, upload-time = "2026-03-25T20:22:03.828Z" } +sdist = { url = "https://files.pythonhosted.org/packages/22/de/48c59722572767841493b26183a0d1cc411d54fd759c5607c4590b6563a6/tomli-2.4.1.tar.gz", hash = "sha256:7c7e1a961a0b2f2472c1ac5b69affa0ae1132c39adcb67aba98568702b9cc23f", size = 17543 } wheels = [ - { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583, upload-time = "2026-03-25T20:22:03.012Z" }, + { url = "https://files.pythonhosted.org/packages/7b/61/cceae43728b7de99d9b847560c262873a1f6c98202171fd5ed62640b494b/tomli-2.4.1-py3-none-any.whl", hash = "sha256:0d85819802132122da43cb86656f8d1f8c6587d54ae7dcaf30e90533028b49fe", size = 14583 }, ] [[package]] name = "typing-extensions" version = "4.15.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391 } wheels = [ - { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614 }, ] [[package]] @@ -1373,62 +1388,62 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949, upload-time = "2025-10-01T02:14:41.687Z" } +sdist = { url = "https://files.pythonhosted.org/packages/55/e3/70399cb7dd41c10ac53367ae42139cf4b1ca5f36bb3dc6c9d33acdb43655/typing_inspection-0.4.2.tar.gz", hash = "sha256:ba561c48a67c5958007083d386c3295464928b01faa735ab8547c5692e87f464", size = 75949 } wheels = [ - { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611, upload-time = "2025-10-01T02:14:40.154Z" }, + { url = "https://files.pythonhosted.org/packages/dc/9b/47798a6c91d8bdb567fe2698fe81e0c6b7cb7ef4d13da4114b41d239f65d/typing_inspection-0.4.2-py3-none-any.whl", hash = "sha256:4ed1cacbdc298c220f1bd249ed5287caa16f34d44ef4e9c3d0cbad5b521545e7", size = 14611 }, ] [[package]] name = "tzdata" version = "2025.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, + { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521 }, ] [[package]] name = "urllib3" version = "2.6.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556 } wheels = [ - { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584 }, ] [[package]] name = "websocket-client" version = "1.9.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576, upload-time = "2025-10-07T21:16:36.495Z" } +sdist = { url = "https://files.pythonhosted.org/packages/2c/41/aa4bf9664e4cda14c3b39865b12251e8e7d239f4cd0e3cc1b6c2ccde25c1/websocket_client-1.9.0.tar.gz", hash = "sha256:9e813624b6eb619999a97dc7958469217c3176312b3a16a4bd1bc7e08a46ec98", size = 70576 } wheels = [ - { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616, upload-time = "2025-10-07T21:16:34.951Z" }, + { url = "https://files.pythonhosted.org/packages/34/db/b10e48aa8fff7407e67470363eac595018441cf32d5e1001567a7aeba5d2/websocket_client-1.9.0-py3-none-any.whl", hash = "sha256:af248a825037ef591efbf6ed20cc5faa03d3b47b9e5a2230a529eeee1c1fc3ef", size = 82616 }, ] [[package]] name = "websockets" version = "14.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/94/54/8359678c726243d19fae38ca14a334e740782336c9f19700858c4eb64a1e/websockets-14.2.tar.gz", hash = "sha256:5059ed9c54945efb321f097084b4c7e52c246f2c869815876a69d1efc4ad6eb5", size = 164394, upload-time = "2025-01-19T21:00:56.431Z" } +sdist = { url = "https://files.pythonhosted.org/packages/94/54/8359678c726243d19fae38ca14a334e740782336c9f19700858c4eb64a1e/websockets-14.2.tar.gz", hash = "sha256:5059ed9c54945efb321f097084b4c7e52c246f2c869815876a69d1efc4ad6eb5", size = 164394 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6f/eb/367e0ed7b8a960b4fc12c7c6bf3ebddf06875037de641637994849560d47/websockets-14.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7cd5706caec1686c5d233bc76243ff64b1c0dc445339bd538f30547e787c11fe", size = 163087, upload-time = "2025-01-19T21:00:11.717Z" }, - { url = "https://files.pythonhosted.org/packages/96/f7/1f18d028ec4a2c14598dfec6a73381a915c27464b693873198c1de872095/websockets-14.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec607328ce95a2f12b595f7ae4c5d71bf502212bddcea528290b35c286932b12", size = 160740, upload-time = "2025-01-19T21:00:13.219Z" }, - { url = "https://files.pythonhosted.org/packages/5c/db/b4b353fb9c3f0eaa8138ea4c76e6fa555b6d2821ed2d51d0ac3c320bc57e/websockets-14.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da85651270c6bfb630136423037dd4975199e5d4114cae6d3066641adcc9d1c7", size = 160992, upload-time = "2025-01-19T21:00:15.54Z" }, - { url = "https://files.pythonhosted.org/packages/b9/b1/9149e420c61f375e432654d5c1545e563b90ac1f829ee1a8d1dccaf0869d/websockets-14.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ecadc7ce90accf39903815697917643f5b7cfb73c96702318a096c00aa71f5", size = 169757, upload-time = "2025-01-19T21:00:17.589Z" }, - { url = "https://files.pythonhosted.org/packages/2b/33/0bb58204191e113212360f1392b6b1e9f85f62c7ca5b3b15f52f2f835516/websockets-14.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1979bee04af6a78608024bad6dfcc0cc930ce819f9e10342a29a05b5320355d0", size = 168762, upload-time = "2025-01-19T21:00:19.987Z" }, - { url = "https://files.pythonhosted.org/packages/be/3d/c3c192f16210d7b7535fbf4ee9a299612f4dccff665587617b13fa0a6aa3/websockets-14.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dddacad58e2614a24938a50b85969d56f88e620e3f897b7d80ac0d8a5800258", size = 169060, upload-time = "2025-01-19T21:00:21.414Z" }, - { url = "https://files.pythonhosted.org/packages/a6/73/75efa8d9e4b1b257818a7b7a0b9ac84a07c91120b52148941370ef2c8f16/websockets-14.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:89a71173caaf75fa71a09a5f614f450ba3ec84ad9fca47cb2422a860676716f0", size = 169457, upload-time = "2025-01-19T21:00:22.996Z" }, - { url = "https://files.pythonhosted.org/packages/a4/11/300cf36cfd6990ffb218394862f0513be8c21917c9ff5e362f94599caedd/websockets-14.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6af6a4b26eea4fc06c6818a6b962a952441e0e39548b44773502761ded8cc1d4", size = 168860, upload-time = "2025-01-19T21:00:25.24Z" }, - { url = "https://files.pythonhosted.org/packages/c0/3d/5fd82500714ab7c09f003bde671dad1a3a131ac77b6b11ada72e466de4f6/websockets-14.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:80c8efa38957f20bba0117b48737993643204645e9ec45512579132508477cfc", size = 168825, upload-time = "2025-01-19T21:00:26.799Z" }, - { url = "https://files.pythonhosted.org/packages/88/16/715580eb6caaacc232f303e9619103a42dcd354b0854baa5ed26aacaf828/websockets-14.2-cp39-cp39-win32.whl", hash = "sha256:2e20c5f517e2163d76e2729104abc42639c41cf91f7b1839295be43302713661", size = 163960, upload-time = "2025-01-19T21:00:29.166Z" }, - { url = "https://files.pythonhosted.org/packages/63/a7/a1035cb198eaa12eaa9621aaaa3ec021b0e3bac96e1df9ceb6bfe5e53e5f/websockets-14.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4c8cef610e8d7c70dea92e62b6814a8cd24fbd01d7103cc89308d2bfe1659ef", size = 164424, upload-time = "2025-01-19T21:00:30.614Z" }, - { url = "https://files.pythonhosted.org/packages/f7/c0/8e9325c4987dcf66d4a0d63ec380d4aefe8dcc1e521af71ad17adf2c1ae2/websockets-14.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bbe03eb853e17fd5b15448328b4ec7fb2407d45fb0245036d06a3af251f8e48f", size = 160773, upload-time = "2025-01-19T21:00:42.145Z" }, - { url = "https://files.pythonhosted.org/packages/5a/6e/c9a7f2edd4afddc4f8cccfc4e12468b7f6ec40f28d1b1e966a8d0298b875/websockets-14.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3c4aa3428b904d5404a0ed85f3644d37e2cb25996b7f096d77caeb0e96a3b42", size = 161006, upload-time = "2025-01-19T21:00:43.72Z" }, - { url = "https://files.pythonhosted.org/packages/f3/10/b90ece894828c954e674a81cb0db250e6c324c54db30a8b19e96431f928f/websockets-14.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577a4cebf1ceaf0b65ffc42c54856214165fb8ceeba3935852fc33f6b0c55e7f", size = 162260, upload-time = "2025-01-19T21:00:46.33Z" }, - { url = "https://files.pythonhosted.org/packages/52/93/1147b6b5464a5fb6e8987da3ec7991dcc44f9090f67d9c841d7382fed429/websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad1c1d02357b7665e700eca43a31d52814ad9ad9b89b58118bdabc365454b574", size = 161868, upload-time = "2025-01-19T21:00:48.683Z" }, - { url = "https://files.pythonhosted.org/packages/32/ab/f7d80b4049bff0aa617507330db3a27389d0e70df54e29f7a3d76bbd2086/websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f390024a47d904613577df83ba700bd189eedc09c57af0a904e5c39624621270", size = 161813, upload-time = "2025-01-19T21:00:51.019Z" }, - { url = "https://files.pythonhosted.org/packages/cd/cc/adc9fb85f031b8df8e9f3d96cc004df25d2643e503953af5223c5b6825b7/websockets-14.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3c1426c021c38cf92b453cdf371228d3430acd775edee6bac5a4d577efc72365", size = 164457, upload-time = "2025-01-19T21:00:52.621Z" }, - { url = "https://files.pythonhosted.org/packages/7b/c8/d529f8a32ce40d98309f4470780631e971a5a842b60aec864833b3615786/websockets-14.2-py3-none-any.whl", hash = "sha256:7a6ceec4ea84469f15cf15807a747e9efe57e369c384fa86e022b3bea679b79b", size = 157416, upload-time = "2025-01-19T21:00:54.843Z" }, + { url = "https://files.pythonhosted.org/packages/6f/eb/367e0ed7b8a960b4fc12c7c6bf3ebddf06875037de641637994849560d47/websockets-14.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7cd5706caec1686c5d233bc76243ff64b1c0dc445339bd538f30547e787c11fe", size = 163087 }, + { url = "https://files.pythonhosted.org/packages/96/f7/1f18d028ec4a2c14598dfec6a73381a915c27464b693873198c1de872095/websockets-14.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ec607328ce95a2f12b595f7ae4c5d71bf502212bddcea528290b35c286932b12", size = 160740 }, + { url = "https://files.pythonhosted.org/packages/5c/db/b4b353fb9c3f0eaa8138ea4c76e6fa555b6d2821ed2d51d0ac3c320bc57e/websockets-14.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:da85651270c6bfb630136423037dd4975199e5d4114cae6d3066641adcc9d1c7", size = 160992 }, + { url = "https://files.pythonhosted.org/packages/b9/b1/9149e420c61f375e432654d5c1545e563b90ac1f829ee1a8d1dccaf0869d/websockets-14.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c3ecadc7ce90accf39903815697917643f5b7cfb73c96702318a096c00aa71f5", size = 169757 }, + { url = "https://files.pythonhosted.org/packages/2b/33/0bb58204191e113212360f1392b6b1e9f85f62c7ca5b3b15f52f2f835516/websockets-14.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1979bee04af6a78608024bad6dfcc0cc930ce819f9e10342a29a05b5320355d0", size = 168762 }, + { url = "https://files.pythonhosted.org/packages/be/3d/c3c192f16210d7b7535fbf4ee9a299612f4dccff665587617b13fa0a6aa3/websockets-14.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2dddacad58e2614a24938a50b85969d56f88e620e3f897b7d80ac0d8a5800258", size = 169060 }, + { url = "https://files.pythonhosted.org/packages/a6/73/75efa8d9e4b1b257818a7b7a0b9ac84a07c91120b52148941370ef2c8f16/websockets-14.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:89a71173caaf75fa71a09a5f614f450ba3ec84ad9fca47cb2422a860676716f0", size = 169457 }, + { url = "https://files.pythonhosted.org/packages/a4/11/300cf36cfd6990ffb218394862f0513be8c21917c9ff5e362f94599caedd/websockets-14.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6af6a4b26eea4fc06c6818a6b962a952441e0e39548b44773502761ded8cc1d4", size = 168860 }, + { url = "https://files.pythonhosted.org/packages/c0/3d/5fd82500714ab7c09f003bde671dad1a3a131ac77b6b11ada72e466de4f6/websockets-14.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:80c8efa38957f20bba0117b48737993643204645e9ec45512579132508477cfc", size = 168825 }, + { url = "https://files.pythonhosted.org/packages/88/16/715580eb6caaacc232f303e9619103a42dcd354b0854baa5ed26aacaf828/websockets-14.2-cp39-cp39-win32.whl", hash = "sha256:2e20c5f517e2163d76e2729104abc42639c41cf91f7b1839295be43302713661", size = 163960 }, + { url = "https://files.pythonhosted.org/packages/63/a7/a1035cb198eaa12eaa9621aaaa3ec021b0e3bac96e1df9ceb6bfe5e53e5f/websockets-14.2-cp39-cp39-win_amd64.whl", hash = "sha256:b4c8cef610e8d7c70dea92e62b6814a8cd24fbd01d7103cc89308d2bfe1659ef", size = 164424 }, + { url = "https://files.pythonhosted.org/packages/f7/c0/8e9325c4987dcf66d4a0d63ec380d4aefe8dcc1e521af71ad17adf2c1ae2/websockets-14.2-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bbe03eb853e17fd5b15448328b4ec7fb2407d45fb0245036d06a3af251f8e48f", size = 160773 }, + { url = "https://files.pythonhosted.org/packages/5a/6e/c9a7f2edd4afddc4f8cccfc4e12468b7f6ec40f28d1b1e966a8d0298b875/websockets-14.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a3c4aa3428b904d5404a0ed85f3644d37e2cb25996b7f096d77caeb0e96a3b42", size = 161006 }, + { url = "https://files.pythonhosted.org/packages/f3/10/b90ece894828c954e674a81cb0db250e6c324c54db30a8b19e96431f928f/websockets-14.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:577a4cebf1ceaf0b65ffc42c54856214165fb8ceeba3935852fc33f6b0c55e7f", size = 162260 }, + { url = "https://files.pythonhosted.org/packages/52/93/1147b6b5464a5fb6e8987da3ec7991dcc44f9090f67d9c841d7382fed429/websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ad1c1d02357b7665e700eca43a31d52814ad9ad9b89b58118bdabc365454b574", size = 161868 }, + { url = "https://files.pythonhosted.org/packages/32/ab/f7d80b4049bff0aa617507330db3a27389d0e70df54e29f7a3d76bbd2086/websockets-14.2-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f390024a47d904613577df83ba700bd189eedc09c57af0a904e5c39624621270", size = 161813 }, + { url = "https://files.pythonhosted.org/packages/cd/cc/adc9fb85f031b8df8e9f3d96cc004df25d2643e503953af5223c5b6825b7/websockets-14.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:3c1426c021c38cf92b453cdf371228d3430acd775edee6bac5a4d577efc72365", size = 164457 }, + { url = "https://files.pythonhosted.org/packages/7b/c8/d529f8a32ce40d98309f4470780631e971a5a842b60aec864833b3615786/websockets-14.2-py3-none-any.whl", hash = "sha256:7a6ceec4ea84469f15cf15807a747e9efe57e369c384fa86e022b3bea679b79b", size = 157416 }, ] [[package]] @@ -1438,40 +1453,49 @@ source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "markupsafe" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/61/f1/ee81806690a87dab5f5653c1f146c92bc066d7f4cebc603ef88eb9e13957/werkzeug-3.1.6.tar.gz", hash = "sha256:210c6bede5a420a913956b4791a7f4d6843a43b6fcee4dfa08a65e93007d0d25", size = 864736, upload-time = "2026-02-19T15:17:18.884Z" } +sdist = { url = "https://files.pythonhosted.org/packages/61/f1/ee81806690a87dab5f5653c1f146c92bc066d7f4cebc603ef88eb9e13957/werkzeug-3.1.6.tar.gz", hash = "sha256:210c6bede5a420a913956b4791a7f4d6843a43b6fcee4dfa08a65e93007d0d25", size = 864736 } wheels = [ - { url = "https://files.pythonhosted.org/packages/4d/ec/d58832f89ede95652fd01f4f24236af7d32b70cab2196dfcc2d2fd13c5c2/werkzeug-3.1.6-py3-none-any.whl", hash = "sha256:7ddf3357bb9564e407607f988f683d72038551200c704012bb9a4c523d42f131", size = 225166, upload-time = "2026-02-19T15:17:17.475Z" }, + { url = "https://files.pythonhosted.org/packages/4d/ec/d58832f89ede95652fd01f4f24236af7d32b70cab2196dfcc2d2fd13c5c2/werkzeug-3.1.6-py3-none-any.whl", hash = "sha256:7ddf3357bb9564e407607f988f683d72038551200c704012bb9a4c523d42f131", size = 225166 }, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083 }, ] [[package]] name = "zipp" version = "3.23.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547, upload-time = "2025-06-08T17:06:39.4Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/02/0f2892c661036d50ede074e376733dca2ae7c6eb617489437771209d4180/zipp-3.23.0.tar.gz", hash = "sha256:a07157588a12518c9d4034df3fbbee09c814741a33ff63c05fa29d26a2404166", size = 25547 } wheels = [ - { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276, upload-time = "2025-06-08T17:06:38.034Z" }, + { url = "https://files.pythonhosted.org/packages/2e/54/647ade08bf0db230bfea292f893923872fd20be6ac6f53b2b936ba839d75/zipp-3.23.0-py3-none-any.whl", hash = "sha256:071652d6115ed432f5ce1d34c336c0adfd6a884660d1e9712a256d3d3bd4b14e", size = 10276 }, ] [[package]] name = "zstandard" version = "0.25.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513, upload-time = "2025-09-14T22:15:54.002Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/aa/3e0508d5a5dd96529cdc5a97011299056e14c6505b678fd58938792794b1/zstandard-0.25.0.tar.gz", hash = "sha256:7713e1179d162cf5c7906da876ec2ccb9c3a9dcbdffef0cc7f70c3667a205f0b", size = 711513 } wheels = [ - { url = "https://files.pythonhosted.org/packages/14/0d/d0a405dad6ab6f9f759c26d866cca66cb209bff6f8db656074d662a953dd/zstandard-0.25.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b9af1fe743828123e12b41dd8091eca1074d0c1569cc42e6e1eee98027f2bbd0", size = 795263, upload-time = "2025-09-14T22:18:21.683Z" }, - { url = "https://files.pythonhosted.org/packages/ca/aa/ceb8d79cbad6dabd4cb1178ca853f6a4374d791c5e0241a0988173e2a341/zstandard-0.25.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b14abacf83dfb5c25eb4e4a79520de9e7e205f72c9ee7702f91233ae57d33a2", size = 640560, upload-time = "2025-09-14T22:18:22.867Z" }, - { url = "https://files.pythonhosted.org/packages/88/cd/2cf6d476131b509cc122d25d3416a2d0aa17687ddbada7599149f9da620e/zstandard-0.25.0-cp39-cp39-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:a51ff14f8017338e2f2e5dab738ce1ec3b5a851f23b18c1ae1359b1eecbee6df", size = 5344244, upload-time = "2025-09-14T22:18:24.724Z" }, - { url = "https://files.pythonhosted.org/packages/5c/71/e14820b61a1c137966b7667b400b72fa4a45c836257e443f3d77607db268/zstandard-0.25.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3b870ce5a02d4b22286cf4944c628e0f0881b11b3f14667c1d62185a99e04f53", size = 5054550, upload-time = "2025-09-14T22:18:26.445Z" }, - { url = "https://files.pythonhosted.org/packages/f9/ce/26dc5a6fa956be41d0e984909224ed196ee6f91d607f0b3fd84577741a77/zstandard-0.25.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:05353cef599a7b0b98baca9b068dd36810c3ef0f42bf282583f438caf6ddcee3", size = 5401150, upload-time = "2025-09-14T22:18:28.745Z" }, - { url = "https://files.pythonhosted.org/packages/f2/1b/402cab5edcfe867465daf869d5ac2a94930931c0989633bc01d6a7d8bd68/zstandard-0.25.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:19796b39075201d51d5f5f790bf849221e58b48a39a5fc74837675d8bafc7362", size = 5448595, upload-time = "2025-09-14T22:18:30.475Z" }, - { url = "https://files.pythonhosted.org/packages/86/b2/fc50c58271a1ead0e5a0a0e6311f4b221f35954dce438ce62751b3af9b68/zstandard-0.25.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:53e08b2445a6bc241261fea89d065536f00a581f02535f8122eba42db9375530", size = 5555290, upload-time = "2025-09-14T22:18:32.336Z" }, - { url = "https://files.pythonhosted.org/packages/d2/20/5f72d6ba970690df90fdd37195c5caa992e70cb6f203f74cc2bcc0b8cf30/zstandard-0.25.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1f3689581a72eaba9131b1d9bdbfe520ccd169999219b41000ede2fca5c1bfdb", size = 5043898, upload-time = "2025-09-14T22:18:34.215Z" }, - { url = "https://files.pythonhosted.org/packages/e4/f1/131a0382b8b8d11e84690574645f528f5c5b9343e06cefd77f5fd730cd2b/zstandard-0.25.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d8c56bb4e6c795fc77d74d8e8b80846e1fb8292fc0b5060cd8131d522974b751", size = 5571173, upload-time = "2025-09-14T22:18:36.117Z" }, - { url = "https://files.pythonhosted.org/packages/53/f6/2a37931023f737fd849c5c28def57442bbafadb626da60cf9ed58461fe24/zstandard-0.25.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:53f94448fe5b10ee75d246497168e5825135d54325458c4bfffbaafabcc0a577", size = 4958261, upload-time = "2025-09-14T22:18:38.098Z" }, - { url = "https://files.pythonhosted.org/packages/b5/52/ca76ed6dbfd8845a5563d3af4e972da3b9da8a9308ca6b56b0b929d93e23/zstandard-0.25.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c2ba942c94e0691467ab901fc51b6f2085ff48f2eea77b1a48240f011e8247c7", size = 5265680, upload-time = "2025-09-14T22:18:39.834Z" }, - { url = "https://files.pythonhosted.org/packages/7a/59/edd117dedb97a768578b49fb2f1156defb839d1aa5b06200a62be943667f/zstandard-0.25.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:07b527a69c1e1c8b5ab1ab14e2afe0675614a09182213f21a0717b62027b5936", size = 5439747, upload-time = "2025-09-14T22:18:41.647Z" }, - { url = "https://files.pythonhosted.org/packages/75/71/c2e9234643dcfbd6c5e975e9a2b0050e1b2afffda6c3a959e1b87997bc80/zstandard-0.25.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:51526324f1b23229001eb3735bc8c94f9c578b1bd9e867a0a646a3b17109f388", size = 5818805, upload-time = "2025-09-14T22:18:43.602Z" }, - { url = "https://files.pythonhosted.org/packages/f5/93/8ebc19f0a31c44ea0e7348f9b0d4b326ed413b6575a3c6ff4ed50222abb6/zstandard-0.25.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89c4b48479a43f820b749df49cd7ba2dbc2b1b78560ecb5ab52985574fd40b27", size = 5362280, upload-time = "2025-09-14T22:18:45.625Z" }, - { url = "https://files.pythonhosted.org/packages/b8/e9/29cc59d4a9d51b3fd8b477d858d0bd7ab627f700908bf1517f46ddd470ae/zstandard-0.25.0-cp39-cp39-win32.whl", hash = "sha256:1cd5da4d8e8ee0e88be976c294db744773459d51bb32f707a0f166e5ad5c8649", size = 436460, upload-time = "2025-09-14T22:18:49.077Z" }, - { url = "https://files.pythonhosted.org/packages/41/b5/bc7a92c116e2ef32dc8061c209d71e97ff6df37487d7d39adb51a343ee89/zstandard-0.25.0-cp39-cp39-win_amd64.whl", hash = "sha256:37daddd452c0ffb65da00620afb8e17abd4adaae6ce6310702841760c2c26860", size = 506097, upload-time = "2025-09-14T22:18:47.342Z" }, + { url = "https://files.pythonhosted.org/packages/14/0d/d0a405dad6ab6f9f759c26d866cca66cb209bff6f8db656074d662a953dd/zstandard-0.25.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b9af1fe743828123e12b41dd8091eca1074d0c1569cc42e6e1eee98027f2bbd0", size = 795263 }, + { url = "https://files.pythonhosted.org/packages/ca/aa/ceb8d79cbad6dabd4cb1178ca853f6a4374d791c5e0241a0988173e2a341/zstandard-0.25.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4b14abacf83dfb5c25eb4e4a79520de9e7e205f72c9ee7702f91233ae57d33a2", size = 640560 }, + { url = "https://files.pythonhosted.org/packages/88/cd/2cf6d476131b509cc122d25d3416a2d0aa17687ddbada7599149f9da620e/zstandard-0.25.0-cp39-cp39-manylinux2010_i686.manylinux2014_i686.manylinux_2_12_i686.manylinux_2_17_i686.whl", hash = "sha256:a51ff14f8017338e2f2e5dab738ce1ec3b5a851f23b18c1ae1359b1eecbee6df", size = 5344244 }, + { url = "https://files.pythonhosted.org/packages/5c/71/e14820b61a1c137966b7667b400b72fa4a45c836257e443f3d77607db268/zstandard-0.25.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3b870ce5a02d4b22286cf4944c628e0f0881b11b3f14667c1d62185a99e04f53", size = 5054550 }, + { url = "https://files.pythonhosted.org/packages/f9/ce/26dc5a6fa956be41d0e984909224ed196ee6f91d607f0b3fd84577741a77/zstandard-0.25.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:05353cef599a7b0b98baca9b068dd36810c3ef0f42bf282583f438caf6ddcee3", size = 5401150 }, + { url = "https://files.pythonhosted.org/packages/f2/1b/402cab5edcfe867465daf869d5ac2a94930931c0989633bc01d6a7d8bd68/zstandard-0.25.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:19796b39075201d51d5f5f790bf849221e58b48a39a5fc74837675d8bafc7362", size = 5448595 }, + { url = "https://files.pythonhosted.org/packages/86/b2/fc50c58271a1ead0e5a0a0e6311f4b221f35954dce438ce62751b3af9b68/zstandard-0.25.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:53e08b2445a6bc241261fea89d065536f00a581f02535f8122eba42db9375530", size = 5555290 }, + { url = "https://files.pythonhosted.org/packages/d2/20/5f72d6ba970690df90fdd37195c5caa992e70cb6f203f74cc2bcc0b8cf30/zstandard-0.25.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:1f3689581a72eaba9131b1d9bdbfe520ccd169999219b41000ede2fca5c1bfdb", size = 5043898 }, + { url = "https://files.pythonhosted.org/packages/e4/f1/131a0382b8b8d11e84690574645f528f5c5b9343e06cefd77f5fd730cd2b/zstandard-0.25.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d8c56bb4e6c795fc77d74d8e8b80846e1fb8292fc0b5060cd8131d522974b751", size = 5571173 }, + { url = "https://files.pythonhosted.org/packages/53/f6/2a37931023f737fd849c5c28def57442bbafadb626da60cf9ed58461fe24/zstandard-0.25.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:53f94448fe5b10ee75d246497168e5825135d54325458c4bfffbaafabcc0a577", size = 4958261 }, + { url = "https://files.pythonhosted.org/packages/b5/52/ca76ed6dbfd8845a5563d3af4e972da3b9da8a9308ca6b56b0b929d93e23/zstandard-0.25.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c2ba942c94e0691467ab901fc51b6f2085ff48f2eea77b1a48240f011e8247c7", size = 5265680 }, + { url = "https://files.pythonhosted.org/packages/7a/59/edd117dedb97a768578b49fb2f1156defb839d1aa5b06200a62be943667f/zstandard-0.25.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:07b527a69c1e1c8b5ab1ab14e2afe0675614a09182213f21a0717b62027b5936", size = 5439747 }, + { url = "https://files.pythonhosted.org/packages/75/71/c2e9234643dcfbd6c5e975e9a2b0050e1b2afffda6c3a959e1b87997bc80/zstandard-0.25.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:51526324f1b23229001eb3735bc8c94f9c578b1bd9e867a0a646a3b17109f388", size = 5818805 }, + { url = "https://files.pythonhosted.org/packages/f5/93/8ebc19f0a31c44ea0e7348f9b0d4b326ed413b6575a3c6ff4ed50222abb6/zstandard-0.25.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89c4b48479a43f820b749df49cd7ba2dbc2b1b78560ecb5ab52985574fd40b27", size = 5362280 }, + { url = "https://files.pythonhosted.org/packages/b8/e9/29cc59d4a9d51b3fd8b477d858d0bd7ab627f700908bf1517f46ddd470ae/zstandard-0.25.0-cp39-cp39-win32.whl", hash = "sha256:1cd5da4d8e8ee0e88be976c294db744773459d51bb32f707a0f166e5ad5c8649", size = 436460 }, + { url = "https://files.pythonhosted.org/packages/41/b5/bc7a92c116e2ef32dc8061c209d71e97ff6df37487d7d39adb51a343ee89/zstandard-0.25.0-cp39-cp39-win_amd64.whl", hash = "sha256:37daddd452c0ffb65da00620afb8e17abd4adaae6ce6310702841760c2c26860", size = 506097 }, ] From 8defef904fd06f24d0150582b8ae3012e1922cf8 Mon Sep 17 00:00:00 2001 From: koko Date: Mon, 27 Apr 2026 17:58:40 +0800 Subject: [PATCH 07/18] Align patrol delete module naming Rename the patrol deletion implementation and browser helper scripts away from the generic product name so the filesystem matches the queued patrol-delete task domain. Update imports, script loading, and tests to use the patrol_delete module path. Constraint: Existing task class remains ProductTask to avoid broad API churn beyond the requested file and script naming Rejected: Rename ProductTask class now | would expand the change into a larger API update across tests and task dispatch Confidence: high Scope-risk: narrow Directive: Keep patrol-delete script paths under app/amazon/scripts/patrol_delete when adding new helper scripts Tested: uv run pytest tests/test_product.py Not-tested: Remote push before this commit due previous SSH publickey failure --- app/amazon/main.py | 2 +- app/amazon/{product.py => patrol_delete.py} | 28 +++++++++---------- .../complete_draft_quick_view_debug.js | 0 .../complete_draft_quick_view_diagnostic.js | 0 .../complete_draft_quick_view_tags.js | 0 .../listing_status_click_visible_status.js | 0 .../listing_status_dropdown_debug.js | 0 .../listing_status_dropdown_open.js | 0 .../listing_status_dropdown_options.js | 0 .../listing_status_section.js | 0 .../listing_status_select_option.js | 0 ...recommended_offer_percentage_diagnostic.js | 0 .../recommended_offer_percentage_open.js | 0 .../recommended_offer_percentage_rows.js | 0 app/tests/test_product.py | 4 +-- 15 files changed, 17 insertions(+), 17 deletions(-) rename app/amazon/{product.py => patrol_delete.py} (98%) rename app/amazon/scripts/{product => patrol_delete}/complete_draft_quick_view_debug.js (100%) rename app/amazon/scripts/{product => patrol_delete}/complete_draft_quick_view_diagnostic.js (100%) rename app/amazon/scripts/{product => patrol_delete}/complete_draft_quick_view_tags.js (100%) rename app/amazon/scripts/{product => patrol_delete}/listing_status_click_visible_status.js (100%) rename app/amazon/scripts/{product => patrol_delete}/listing_status_dropdown_debug.js (100%) rename app/amazon/scripts/{product => patrol_delete}/listing_status_dropdown_open.js (100%) rename app/amazon/scripts/{product => patrol_delete}/listing_status_dropdown_options.js (100%) rename app/amazon/scripts/{product => patrol_delete}/listing_status_section.js (100%) rename app/amazon/scripts/{product => patrol_delete}/listing_status_select_option.js (100%) rename app/amazon/scripts/{product => patrol_delete}/recommended_offer_percentage_diagnostic.js (100%) rename app/amazon/scripts/{product => patrol_delete}/recommended_offer_percentage_open.js (100%) rename app/amazon/scripts/{product => patrol_delete}/recommended_offer_percentage_rows.js (100%) diff --git a/app/amazon/main.py b/app/amazon/main.py index 3adb62b..238e771 100644 --- a/app/amazon/main.py +++ b/app/amazon/main.py @@ -10,7 +10,7 @@ from amazon.approve import ApproveTask from amazon.match_action import MatchTak from amazon.price_match import PriceTask from amazon.asin_status import StatusTask -from amazon.product import ProductTask +from amazon.patrol_delete import ProductTask from amazon.detail_spider import SpiderTask diff --git a/app/amazon/product.py b/app/amazon/patrol_delete.py similarity index 98% rename from app/amazon/product.py rename to app/amazon/patrol_delete.py index b598357..3cdfc9a 100644 --- a/app/amazon/product.py +++ b/app/amazon/patrol_delete.py @@ -30,25 +30,25 @@ RECOMMENDED_OFFER_EXPAND_XPATHS = [ ] -SCRIPT_DIR = Path(__file__).with_name("scripts") / "product" +SCRIPT_DIR = Path(__file__).with_name("scripts") / "patrol_delete" -def _load_product_script(name: str) -> str: +def _load_patrol_delete_script(name: str) -> str: return (SCRIPT_DIR / name).read_text(encoding="utf-8") -LISTING_STATUS_DROPDOWN_DEBUG_SCRIPT = _load_product_script("listing_status_dropdown_debug.js") -LISTING_STATUS_DROPDOWN_OPEN_SCRIPT = _load_product_script("listing_status_dropdown_open.js") -LISTING_STATUS_DROPDOWN_OPTIONS_SCRIPT = _load_product_script("listing_status_dropdown_options.js") -LISTING_STATUS_CLICK_VISIBLE_STATUS_SCRIPT = _load_product_script("listing_status_click_visible_status.js") -LISTING_STATUS_SELECT_OPTION_SCRIPT = _load_product_script("listing_status_select_option.js") -LISTING_STATUS_SECTION_SCRIPT = _load_product_script("listing_status_section.js") -COMPLETE_DRAFT_QUICK_VIEW_DEBUG_SCRIPT = _load_product_script("complete_draft_quick_view_debug.js") -COMPLETE_DRAFT_QUICK_VIEW_TAGS_SCRIPT = _load_product_script("complete_draft_quick_view_tags.js") -COMPLETE_DRAFT_QUICK_VIEW_DIAGNOSTIC_SCRIPT = _load_product_script("complete_draft_quick_view_diagnostic.js") -RECOMMENDED_OFFER_PERCENTAGE_OPEN_SCRIPT = _load_product_script("recommended_offer_percentage_open.js") -RECOMMENDED_OFFER_PERCENTAGE_ROWS_SCRIPT = _load_product_script("recommended_offer_percentage_rows.js") -RECOMMENDED_OFFER_PERCENTAGE_DIAGNOSTIC_SCRIPT = _load_product_script("recommended_offer_percentage_diagnostic.js") +LISTING_STATUS_DROPDOWN_DEBUG_SCRIPT = _load_patrol_delete_script("listing_status_dropdown_debug.js") +LISTING_STATUS_DROPDOWN_OPEN_SCRIPT = _load_patrol_delete_script("listing_status_dropdown_open.js") +LISTING_STATUS_DROPDOWN_OPTIONS_SCRIPT = _load_patrol_delete_script("listing_status_dropdown_options.js") +LISTING_STATUS_CLICK_VISIBLE_STATUS_SCRIPT = _load_patrol_delete_script("listing_status_click_visible_status.js") +LISTING_STATUS_SELECT_OPTION_SCRIPT = _load_patrol_delete_script("listing_status_select_option.js") +LISTING_STATUS_SECTION_SCRIPT = _load_patrol_delete_script("listing_status_section.js") +COMPLETE_DRAFT_QUICK_VIEW_DEBUG_SCRIPT = _load_patrol_delete_script("complete_draft_quick_view_debug.js") +COMPLETE_DRAFT_QUICK_VIEW_TAGS_SCRIPT = _load_patrol_delete_script("complete_draft_quick_view_tags.js") +COMPLETE_DRAFT_QUICK_VIEW_DIAGNOSTIC_SCRIPT = _load_patrol_delete_script("complete_draft_quick_view_diagnostic.js") +RECOMMENDED_OFFER_PERCENTAGE_OPEN_SCRIPT = _load_patrol_delete_script("recommended_offer_percentage_open.js") +RECOMMENDED_OFFER_PERCENTAGE_ROWS_SCRIPT = _load_patrol_delete_script("recommended_offer_percentage_rows.js") +RECOMMENDED_OFFER_PERCENTAGE_DIAGNOSTIC_SCRIPT = _load_patrol_delete_script("recommended_offer_percentage_diagnostic.js") LISTING_STATUS_SELECT_DELAY = 0.8 INVENTORY_ROW_TIMEOUT = 10 diff --git a/app/amazon/scripts/product/complete_draft_quick_view_debug.js b/app/amazon/scripts/patrol_delete/complete_draft_quick_view_debug.js similarity index 100% rename from app/amazon/scripts/product/complete_draft_quick_view_debug.js rename to app/amazon/scripts/patrol_delete/complete_draft_quick_view_debug.js diff --git a/app/amazon/scripts/product/complete_draft_quick_view_diagnostic.js b/app/amazon/scripts/patrol_delete/complete_draft_quick_view_diagnostic.js similarity index 100% rename from app/amazon/scripts/product/complete_draft_quick_view_diagnostic.js rename to app/amazon/scripts/patrol_delete/complete_draft_quick_view_diagnostic.js diff --git a/app/amazon/scripts/product/complete_draft_quick_view_tags.js b/app/amazon/scripts/patrol_delete/complete_draft_quick_view_tags.js similarity index 100% rename from app/amazon/scripts/product/complete_draft_quick_view_tags.js rename to app/amazon/scripts/patrol_delete/complete_draft_quick_view_tags.js diff --git a/app/amazon/scripts/product/listing_status_click_visible_status.js b/app/amazon/scripts/patrol_delete/listing_status_click_visible_status.js similarity index 100% rename from app/amazon/scripts/product/listing_status_click_visible_status.js rename to app/amazon/scripts/patrol_delete/listing_status_click_visible_status.js diff --git a/app/amazon/scripts/product/listing_status_dropdown_debug.js b/app/amazon/scripts/patrol_delete/listing_status_dropdown_debug.js similarity index 100% rename from app/amazon/scripts/product/listing_status_dropdown_debug.js rename to app/amazon/scripts/patrol_delete/listing_status_dropdown_debug.js diff --git a/app/amazon/scripts/product/listing_status_dropdown_open.js b/app/amazon/scripts/patrol_delete/listing_status_dropdown_open.js similarity index 100% rename from app/amazon/scripts/product/listing_status_dropdown_open.js rename to app/amazon/scripts/patrol_delete/listing_status_dropdown_open.js diff --git a/app/amazon/scripts/product/listing_status_dropdown_options.js b/app/amazon/scripts/patrol_delete/listing_status_dropdown_options.js similarity index 100% rename from app/amazon/scripts/product/listing_status_dropdown_options.js rename to app/amazon/scripts/patrol_delete/listing_status_dropdown_options.js diff --git a/app/amazon/scripts/product/listing_status_section.js b/app/amazon/scripts/patrol_delete/listing_status_section.js similarity index 100% rename from app/amazon/scripts/product/listing_status_section.js rename to app/amazon/scripts/patrol_delete/listing_status_section.js diff --git a/app/amazon/scripts/product/listing_status_select_option.js b/app/amazon/scripts/patrol_delete/listing_status_select_option.js similarity index 100% rename from app/amazon/scripts/product/listing_status_select_option.js rename to app/amazon/scripts/patrol_delete/listing_status_select_option.js diff --git a/app/amazon/scripts/product/recommended_offer_percentage_diagnostic.js b/app/amazon/scripts/patrol_delete/recommended_offer_percentage_diagnostic.js similarity index 100% rename from app/amazon/scripts/product/recommended_offer_percentage_diagnostic.js rename to app/amazon/scripts/patrol_delete/recommended_offer_percentage_diagnostic.js diff --git a/app/amazon/scripts/product/recommended_offer_percentage_open.js b/app/amazon/scripts/patrol_delete/recommended_offer_percentage_open.js similarity index 100% rename from app/amazon/scripts/product/recommended_offer_percentage_open.js rename to app/amazon/scripts/patrol_delete/recommended_offer_percentage_open.js diff --git a/app/amazon/scripts/product/recommended_offer_percentage_rows.js b/app/amazon/scripts/patrol_delete/recommended_offer_percentage_rows.js similarity index 100% rename from app/amazon/scripts/product/recommended_offer_percentage_rows.js rename to app/amazon/scripts/patrol_delete/recommended_offer_percentage_rows.js diff --git a/app/tests/test_product.py b/app/tests/test_product.py index 280effc..273f0ef 100644 --- a/app/tests/test_product.py +++ b/app/tests/test_product.py @@ -1,4 +1,4 @@ -from amazon.product import InventoryManage, ProductTask +from amazon.patrol_delete import InventoryManage, ProductTask def test_product_task_post_result_builds_patrol_delete_payload(monkeypatch): @@ -14,7 +14,7 @@ def test_product_task_post_result_builds_patrol_delete_payload(monkeypatch): return Response() monkeypatch.setattr("config.DELETE_BRAND_API_BASE", "http://java.example") - monkeypatch.setattr("amazon.product.requests.post", fake_post) + monkeypatch.setattr("amazon.patrol_delete.requests.post", fake_post) country_sections = [ { From 02ddfc7a76385ba6a37f186254bd51122f8338dc Mon Sep 17 00:00:00 2001 From: koko Date: Mon, 27 Apr 2026 17:59:46 +0800 Subject: [PATCH 08/18] Rename patrol delete tests Keep the patrol deletion test module aligned with the renamed patrol_delete implementation and update test function names so future searches no longer point at the old product module name. Constraint: This is a naming-only follow-up to the patrol_delete module rename Confidence: high Scope-risk: narrow Tested: uv run pytest tests/test_patrol_delete.py --- app/tests/{test_product.py => test_patrol_delete.py} | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename app/tests/{test_product.py => test_patrol_delete.py} (99%) diff --git a/app/tests/test_product.py b/app/tests/test_patrol_delete.py similarity index 99% rename from app/tests/test_product.py rename to app/tests/test_patrol_delete.py index 273f0ef..4afd51a 100644 --- a/app/tests/test_product.py +++ b/app/tests/test_patrol_delete.py @@ -1,7 +1,7 @@ from amazon.patrol_delete import InventoryManage, ProductTask -def test_product_task_post_result_builds_patrol_delete_payload(monkeypatch): +def test_patrol_delete_task_post_result_builds_patrol_delete_payload(monkeypatch): captured = {} class Response: @@ -50,7 +50,7 @@ def test_product_task_post_result_builds_patrol_delete_payload(monkeypatch): assert captured["kwargs"]["json"]["shops"][0]["submissionId"].startswith("patrol-delete:3089:郭亚芳:") -def test_product_task_process_task_aggregates_country_results(monkeypatch): +def test_patrol_delete_task_process_task_aggregates_country_results(monkeypatch): from config import runing_shop, runing_task runing_task.clear() @@ -167,7 +167,7 @@ def test_product_task_process_task_aggregates_country_results(monkeypatch): ] -def test_product_task_process_task_skips_missing_required_data(monkeypatch): +def test_patrol_delete_task_process_task_skips_missing_required_data(monkeypatch): calls = [] def fake_post_result(self, **kwargs): @@ -181,7 +181,7 @@ def test_product_task_process_task_skips_missing_required_data(monkeypatch): assert calls == [] -def test_product_task_reports_shop_error(monkeypatch): +def test_patrol_delete_task_reports_shop_error(monkeypatch): from config import runing_shop, runing_task runing_task.clear() From 4ff4d8cfdcf6bf4a18436d726235dc61ae2e7ebc Mon Sep 17 00:00:00 2001 From: koko Date: Tue, 28 Apr 2026 01:23:58 +0800 Subject: [PATCH 09/18] Expose patrol delete progress in logs Patrol delete can spend a long time switching countries, reading listing states, and confirming deletes, so the flow now emits concise progress logs around each high-value step. The logs avoid full DOM dumps outside existing diagnostics and focus on task, shop, country, status, deletion counts, and callback boundaries. Constraint: Existing patrol delete runs are browser-driven and need observable progress without changing deletion behavior Rejected: Log every DOM probe | too noisy for routine task monitoring Confidence: high Scope-risk: narrow Tested: uv run --group dev pytest tests\\test_patrol_delete.py Tested: uv run --group dev ruff check amazon\\patrol_delete.py Tested: uv run python -m py_compile amazon\\patrol_delete.py Not-tested: Live Seller Central browser run --- app/amazon/patrol_delete.py | 638 ++++++++++++++++++++++++------------ 1 file changed, 421 insertions(+), 217 deletions(-) diff --git a/app/amazon/patrol_delete.py b/app/amazon/patrol_delete.py index 3cdfc9a..2c72d4a 100644 --- a/app/amazon/patrol_delete.py +++ b/app/amazon/patrol_delete.py @@ -9,12 +9,13 @@ from typing import Any, Dict, Iterable, List, Optional import requests from loguru import logger -from amazon.base import AmamzonBase, UserInfo, kill_process +from amazon.base import AmamzonBase, kill_process from amazon.tool import get_shop_info, show_notification DROPDOWN_OPEN_DELAY = 0.8 DROPDOWN_OPTIONS_TIMEOUT = 6 +LISTING_STATUS_DROPDOWN_READY_TIMEOUT = 20 QUICK_VIEW_OPEN_DELAY = 1 QUICK_VIEW_TAGS_TIMEOUT = 8 QUICK_VIEW_ENTRY_TIMEOUT = 15 @@ -37,13 +38,15 @@ def _load_patrol_delete_script(name: str) -> str: return (SCRIPT_DIR / name).read_text(encoding="utf-8") -LISTING_STATUS_DROPDOWN_DEBUG_SCRIPT = _load_patrol_delete_script("listing_status_dropdown_debug.js") LISTING_STATUS_DROPDOWN_OPEN_SCRIPT = _load_patrol_delete_script("listing_status_dropdown_open.js") LISTING_STATUS_DROPDOWN_OPTIONS_SCRIPT = _load_patrol_delete_script("listing_status_dropdown_options.js") -LISTING_STATUS_CLICK_VISIBLE_STATUS_SCRIPT = _load_patrol_delete_script("listing_status_click_visible_status.js") +LISTING_STATUS_DROPDOWN_CLOSE_SCRIPT = _load_patrol_delete_script("listing_status_dropdown_close.js") LISTING_STATUS_SELECT_OPTION_SCRIPT = _load_patrol_delete_script("listing_status_select_option.js") LISTING_STATUS_SECTION_SCRIPT = _load_patrol_delete_script("listing_status_section.js") -COMPLETE_DRAFT_QUICK_VIEW_DEBUG_SCRIPT = _load_patrol_delete_script("complete_draft_quick_view_debug.js") +INVENTORY_SELECT_ALL_SCRIPT = _load_patrol_delete_script("inventory_select_all.js") +INVENTORY_DELETE_SELECTED_SCRIPT = _load_patrol_delete_script("inventory_delete_selected.js") +DELETE_CONFIRM_MODAL_CLICK_SCRIPT = _load_patrol_delete_script("delete_confirm_modal_click.js") +DELETE_SUCCESS_MESSAGES_SCRIPT = _load_patrol_delete_script("delete_success_messages.js") COMPLETE_DRAFT_QUICK_VIEW_TAGS_SCRIPT = _load_patrol_delete_script("complete_draft_quick_view_tags.js") COMPLETE_DRAFT_QUICK_VIEW_DIAGNOSTIC_SCRIPT = _load_patrol_delete_script("complete_draft_quick_view_diagnostic.js") RECOMMENDED_OFFER_PERCENTAGE_OPEN_SCRIPT = _load_patrol_delete_script("recommended_offer_percentage_open.js") @@ -53,12 +56,11 @@ RECOMMENDED_OFFER_PERCENTAGE_DIAGNOSTIC_SCRIPT = _load_patrol_delete_script("rec LISTING_STATUS_SELECT_DELAY = 0.8 INVENTORY_ROW_TIMEOUT = 10 INVENTORY_LOADER_TIMEOUT = 5 -DELETE_SUCCESS_TIMEOUT = 8 +DELETE_SUCCESS_TIMEOUT = 20 PRODUCT_TASK_MAX_RETRIES = 3 PRODUCT_TASK_RETRY_DELAY = 2 PRODUCT_TASK_OPEN_SHOP_DELAY = 3 PRODUCT_TASK_BROWSER_RESET_DELAY = 2 -PRODUCT_TASK_MAX_UNCHANGED_CANDIDATE_ROUNDS = 3 DELETE_SUCCESS_MESSAGE_PARTS = ( re.compile(r"\d+\s*个商品(?:已删除|已经删除)"), re.compile(r"所[作做]更改需要\s*15\s*分钟才会显示在商品详情页面上"), @@ -92,6 +94,7 @@ class InventoryManage(AmamzonBase): 切换至管理所有库存页面 1、等待 //navigation-favorites-bar[@class="hydrated"] 出现 """ + logger.info("开始切换到管理所有库存页面") navigation = self.tab.ele('xpath://navigation-favorites-bar[@class="hydrated"]') navigation.wait.displayed(raise_err=False) page_btn = navigation.sr('xpath://internal-fav-bar-links[@data-internal="navigation"]').sr( @@ -103,51 +106,35 @@ class InventoryManage(AmamzonBase): self.tab.wait.doc_loaded() search_region = self.tab.ele('xpath://div[@id="searchBoxContainer"]//kat-input-group') search_region.wait.displayed(raise_err=False) - - def debug_dump_listing_status_dropdown(self) -> List[Dict[str, Any]]: - """打印商品状态下拉框候选 DOM,供现场确认真实页面结构。""" - self.tab.wait.doc_loaded(raise_err=False) - candidates = self._run_js(LISTING_STATUS_DROPDOWN_DEBUG_SCRIPT) or [] - logger.info("商品状态下拉框候选 DOM:\n{}", json.dumps(candidates, ensure_ascii=False, indent=2)) - return candidates + self._wait_inventory_loader(timeout=INVENTORY_LOADER_TIMEOUT) + logger.info("已进入管理所有库存页面") def open_listing_status_dropdown(self) -> Dict[str, Any]: """只打开实测识别出的商品状态下拉框,不点击任何选项。""" - self.tab.wait.doc_loaded(raise_err=False) - result = self._run_js(LISTING_STATUS_DROPDOWN_OPEN_SCRIPT) or {} - if not result.get("ok"): - raise RuntimeError(f"未找到商品状态下拉框: {result}") - time.sleep(DROPDOWN_OPEN_DELAY) - return result + deadline = time.time() + LISTING_STATUS_DROPDOWN_READY_TIMEOUT + result: Dict[str, Any] = {} + while time.time() < deadline: + self.tab.wait.doc_loaded(raise_err=False) + self._wait_inventory_loader(timeout=2) + result = self._run_js(LISTING_STATUS_DROPDOWN_OPEN_SCRIPT) or {} + if result.get("ok"): + time.sleep(DROPDOWN_OPEN_DELAY) + return result + if result.get("reason") != "listing status dropdown disabled/loading": + logger.info("商品状态下拉框暂不可用,继续等待: {}", json.dumps(result, ensure_ascii=False)) + time.sleep(0.5) + raise RuntimeError(f"未找到可用商品状态下拉框: {result}") def get_listing_status_dropdown_options(self, shop_name: str, country: str) -> List[Dict[str, Any]]: """读取商品状态下拉框展开区域中的选项。""" open_result = self.open_listing_status_dropdown() option_rows = self._wait_listing_status_option_rows() parsed_rows = self._parse_status_option_rows(option_rows, shop_name, country) + self._close_listing_status_dropdown() if not parsed_rows: raise RuntimeError(f"商品状态下拉框已打开但未读取到选项: {open_result}") return parsed_rows - def print_listing_status_json(self, shop_name: str, country: str) -> List[Dict[str, Any]]: - data = {"countrySections": self.get_listing_status_country_sections(shop_name, country)} - logger.info("商品状态 JSON:\n{}", json.dumps(data, ensure_ascii=False, indent=2)) - return data["countrySections"] - - def debug_dump_complete_draft_quick_view(self) -> List[Dict[str, Any]]: - """打印补全草稿快速查看候选 DOM,供现场确认真实页面结构。""" - self.tab.wait.doc_loaded(raise_err=False) - candidates = self._run_js(COMPLETE_DRAFT_QUICK_VIEW_DEBUG_SCRIPT) or [] - logger.info("补全草稿快速查看候选 DOM:\n{}", json.dumps(candidates, ensure_ascii=False, indent=2)) - return candidates - - def debug_dump_complete_draft_diagnostics(self) -> Dict[str, Any]: - """打印补全草稿相关 DOM 和资源 URL,避免输出整页商品列表。""" - self.tab.wait.doc_loaded(raise_err=False) - diagnostics = self._run_js(COMPLETE_DRAFT_QUICK_VIEW_DIAGNOSTIC_SCRIPT) or {} - logger.info("补全草稿快速查看诊断信息:\n{}", json.dumps(diagnostics, ensure_ascii=False, indent=2)) - return diagnostics - def open_complete_draft_quick_view(self) -> Dict[str, Any]: """直接打开补全草稿页面。""" if self.tab is None: @@ -166,11 +153,6 @@ class InventoryManage(AmamzonBase): raise RuntimeError(f"补全草稿快速查看已打开但未读取到标签: {open_result}") return parsed_rows - def print_complete_draft_quick_view_json(self, shop_name: str, country: str) -> List[Dict[str, Any]]: - data = self.get_complete_draft_quick_view_tags(shop_name, country) - logger.info("补全草稿快速查看标签 JSON:\n{}", json.dumps(data, ensure_ascii=False, indent=2)) - return data - def open_recommended_offer_percentage_detail(self) -> Dict[str, Any]: """打开 Seller Central 首页中的推荐报价百分比明细。""" if self.tab is None: @@ -202,22 +184,6 @@ class InventoryManage(AmamzonBase): return {"cartRatios": cart_ratios} - def print_recommended_offer_cart_ratios_json(self) -> Dict[str, List[Dict[str, str]]]: - data = self.get_recommended_offer_cart_ratios() - logger.info("推荐报价百分比明细 JSON:\n{}", json.dumps(data, ensure_ascii=False, indent=2)) - return data - - def debug_dump_recommended_offer_percentage_diagnostics(self) -> Dict[str, Any]: - diagnostics = self._run_js(RECOMMENDED_OFFER_PERCENTAGE_DIAGNOSTIC_SCRIPT) or {} - compact = { - "url": diagnostics.get("url"), - "title": diagnostics.get("title"), - "buyBoxFound": diagnostics.get("buyBoxFound"), - "buyBoxLeafMatches": diagnostics.get("buyBoxLeafMatches") or [], - } - logger.info("推荐报价百分比诊断信息:\n{}", json.dumps(compact, ensure_ascii=False, indent=2)) - return diagnostics - def _wait_listing_status_option_rows(self) -> List[Dict[str, Any]]: deadline = time.time() + DROPDOWN_OPTIONS_TIMEOUT rows = [] @@ -235,44 +201,6 @@ class InventoryManage(AmamzonBase): raise RuntimeError(f"未读取到商品状态统计标签: {rows}") return [{"country": country, "rows": self._build_country_section_rows(parsed_rows)}] - def delete_one_listing_from_non_whitelisted_statuses( - self, shop_name: str, country: str, max_delete_count: int = 1 - ) -> Dict[str, Any]: - country_sections = self.get_listing_status_country_sections(shop_name, country) - status_rows = country_sections[0].get("rows") if country_sections else [] - delete_candidates = self._build_deletable_status_rows(status_rows) - if not delete_candidates: - raise RuntimeError(f"商品状态中未找到可删除分类: {json.dumps(status_rows, ensure_ascii=False)}") - - delete_plan = self._limit_delete_candidates(delete_candidates, max_delete_count=max_delete_count) - if not delete_plan: - raise RuntimeError(f"删除计划为空: max_delete_count={max_delete_count}") - - results = [] - for candidate in delete_plan: - self.select_listing_status(candidate["status"]) - row = self._get_first_inventory_row(candidate["status"]) - target = self._summarize_inventory_row(row) - success_message = self._delete_inventory_row(row, candidate["status"]) - results.append( - { - "status": candidate["status"], - "canonicalStatus": candidate["canonicalStatus"], - "statusQuantity": candidate["quantity"], - "target": target, - "successMessage": success_message, - } - ) - - return { - "shopName": shop_name, - "country": country, - "statusRows": status_rows, - "deleteCandidates": delete_candidates, - "deletePlan": delete_plan, - "results": results, - } - def delete_all_listings_from_non_whitelisted_statuses( self, shop_name: str, @@ -280,62 +208,121 @@ class InventoryManage(AmamzonBase): max_delete_operations: Optional[int] = None, ) -> Dict[str, Any]: """循环删除非白名单分类商品,直到当前国家没有可删项。""" + logger.info( + "开始批量删除非白名单商品: shop={}, country={}, max_delete_operations={}", + shop_name, + country, + max_delete_operations, + ) all_results: List[Dict[str, Any]] = [] delete_counts: Dict[str, int] = {} latest_status_rows: List[Dict[str, str]] = [] latest_delete_candidates: List[Dict[str, Any]] = [] - previous_signature: Optional[tuple] = None - unchanged_candidate_rounds = 0 total_deleted = 0 stop_reason = "no-candidates" - while True: - country_sections = self.get_listing_status_country_sections(shop_name, country) - latest_status_rows = deepcopy(country_sections[0].get("rows") if country_sections else []) - latest_delete_candidates = self._build_deletable_status_rows(latest_status_rows) - if not latest_delete_candidates: - stop_reason = "no-candidates" - break - - candidate_signature = tuple( - (item["canonicalStatus"], item["quantity"]) for item in latest_delete_candidates - ) - if candidate_signature == previous_signature: - unchanged_candidate_rounds += 1 - if unchanged_candidate_rounds >= PRODUCT_TASK_MAX_UNCHANGED_CANDIDATE_ROUNDS: - raise RuntimeError( - f"国家[{country}]删除后商品状态统计未变化,停止重试: " - f"{json.dumps(latest_delete_candidates, ensure_ascii=False)}" - ) - else: - unchanged_candidate_rounds = 0 - previous_signature = candidate_signature - - candidate = latest_delete_candidates[0] - self.select_listing_status(candidate["status"]) - row = self._get_first_inventory_row(candidate["status"]) - target = self._summarize_inventory_row(row) - success_message = self._delete_inventory_row(row, candidate["status"]) - - result = { - "status": candidate["status"], - "canonicalStatus": candidate["canonicalStatus"], - "statusQuantity": candidate["quantity"], - "target": target, - "successMessage": success_message, + latest_status_rows = self._read_listing_status_rows_for_delete(shop_name, country) + latest_delete_candidates = self._build_deletable_status_rows(latest_status_rows) + if not latest_delete_candidates: + logger.info("未找到可删除商品分类: shop={}, country={}", shop_name, country) + final_status_rows = latest_status_rows + return { + "shopName": shop_name, + "country": country, + "statusRows": final_status_rows, + "deleteCandidates": latest_delete_candidates, + "results": all_results, + "deleteCounts": delete_counts, + "totalDeleted": total_deleted, + "stopReason": stop_reason, } - all_results.append(result) - delete_counts[candidate["canonicalStatus"]] = delete_counts.get(candidate["canonicalStatus"], 0) + 1 - total_deleted += 1 - if max_delete_operations is not None and total_deleted >= max_delete_operations: - stop_reason = "max-delete-operations" + logger.info( + "可删除商品分类已生成: shop={}, country={}, candidates={}", + shop_name, + country, + self._format_deletable_candidates(latest_delete_candidates), + ) + stop_reason = "processed-candidates" + for candidate in latest_delete_candidates: + logger.info( + "开始处理可删除分类: shop={}, country={}, status={}, quantity={}", + shop_name, + country, + candidate["status"], + candidate["quantity"], + ) + self.select_listing_status(candidate["status"]) + deleted_for_status = 0 + status_quantity = candidate["quantity"] + + while status_quantity <= 0 or deleted_for_status < status_quantity: + bulk_result = self._delete_selected_filtered_inventory_rows(candidate["status"]) + deleted_count = int(bulk_result.get("deletedCount") or 0) + if deleted_count <= 0: + logger.info( + "当前分类未删除到商品,结束分类处理: shop={}, country={}, status={}, deleted_for_status={}", + shop_name, + country, + candidate["status"], + deleted_for_status, + ) + break + + result = { + "status": candidate["status"], + "canonicalStatus": candidate["canonicalStatus"], + "statusQuantity": candidate["quantity"], + "target": bulk_result.get("target") or {}, + "successMessage": bulk_result.get("successMessage", ""), + } + all_results.append(result) + delete_counts[candidate["canonicalStatus"]] = ( + delete_counts.get(candidate["canonicalStatus"], 0) + deleted_count + ) + total_deleted += deleted_count + deleted_for_status += deleted_count + logger.info( + "批量删除成功: shop={}, country={}, status={}, deleted_count={}, status_deleted={}, total_deleted={}", + shop_name, + country, + candidate["status"], + deleted_count, + deleted_for_status, + total_deleted, + ) + + if max_delete_operations is not None and total_deleted >= max_delete_operations: + stop_reason = "max-delete-operations" + logger.info( + "达到最大删除次数,准备停止: shop={}, country={}, total_deleted={}, limit={}", + shop_name, + country, + total_deleted, + max_delete_operations, + ) + break + + self._wait_inventory_loader() + + if stop_reason == "max-delete-operations": break + logger.info( + "可删除分类处理完成: shop={}, country={}, status={}, deleted_for_status={}", + shop_name, + country, + candidate["status"], + deleted_for_status, + ) - self._wait_inventory_loader() - - final_country_sections = self.get_listing_status_country_sections(shop_name, country) - final_status_rows = deepcopy(final_country_sections[0].get("rows") if final_country_sections else latest_status_rows) + final_status_rows = self._read_listing_status_rows_for_delete(shop_name, country) + logger.info( + "批量删除非白名单商品完成: shop={}, country={}, total_deleted={}, stop_reason={}", + shop_name, + country, + total_deleted, + stop_reason, + ) return { "shopName": shop_name, @@ -348,32 +335,38 @@ class InventoryManage(AmamzonBase): "stopReason": stop_reason, } + def _read_listing_status_rows_for_delete(self, shop_name: str, country: str) -> List[Dict[str, str]]: + logger.info("开始读取商品状态行: shop={}, country={}", shop_name, country) + option_rows = self.get_listing_status_dropdown_options(shop_name, country) + rows = self._build_country_section_rows(option_rows) + logger.info("商品状态行读取完成: shop={}, country={}, row_count={}", shop_name, country, len(rows)) + return rows + def select_listing_status(self, status: str) -> Dict[str, Any]: normalized_status = self._normalize_option_text(status) if not normalized_status: raise RuntimeError("商品状态为空,无法执行筛选") - direct_result = self._click_visible_listing_status(normalized_status) - if direct_result.get("ok"): - time.sleep(LISTING_STATUS_SELECT_DELAY) - self._wait_inventory_loader() - return {"mode": "visible-status", **direct_result} + logger.info("开始筛选商品状态: status={}", normalized_status) + open_result = self.open_listing_status_dropdown() + option_rows = self._wait_listing_status_option_rows() + if not option_rows: + raise RuntimeError(f"商品状态下拉框已打开但未读取到选项: {open_result}") - self.open_listing_status_dropdown() - script = f"const __crawlerPayload = {json.dumps({'status': normalized_status}, ensure_ascii=False)};\n{LISTING_STATUS_SELECT_OPTION_SCRIPT}" - result = self._run_js(script) or {} + result = self._run_js(LISTING_STATUS_SELECT_OPTION_SCRIPT, {"status": normalized_status}) or {} if not result.get("ok"): raise RuntimeError(f"未找到商品状态选项[{normalized_status}]: {result}") time.sleep(LISTING_STATUS_SELECT_DELAY) self._wait_inventory_loader() + logger.info("商品状态筛选完成: status={}, result={}", normalized_status, result) return {"mode": "dropdown-option", **result} - def _click_visible_listing_status(self, status: str) -> Dict[str, Any]: - script = ( - f"const __crawlerPayload = {json.dumps({'status': status}, ensure_ascii=False)};\n" - f"{LISTING_STATUS_CLICK_VISIBLE_STATUS_SCRIPT}" - ) - return self._run_js(script) or {} + def _close_listing_status_dropdown(self) -> None: + try: + self._run_js(LISTING_STATUS_DROPDOWN_CLOSE_SCRIPT) + except Exception as exc: + logger.info("关闭商品状态下拉框失败,继续执行: {}", exc) + time.sleep(0.2) def _wait_inventory_loader(self, timeout: int = INVENTORY_LOADER_TIMEOUT) -> None: try: @@ -394,6 +387,61 @@ class InventoryManage(AmamzonBase): time.sleep(0.4) raise RuntimeError(f"状态[{status}]筛选后未找到商品行") + def _get_first_inventory_row_or_none(self, status: str): + try: + return self._get_first_inventory_row(status) + except RuntimeError as exc: + logger.info("状态[{}]未找到可删除商品行: {}", status, exc) + return None + + def _delete_selected_filtered_inventory_rows(self, status: str) -> Dict[str, Any]: + logger.info("开始批量删除当前筛选结果: status={}", status) + row = self._get_first_inventory_row_or_none(status) + if row is None: + logger.info("当前筛选结果没有可删除商品: status={}", status) + return {"deletedCount": 0, "target": {}, "successMessage": ""} + + target = self._summarize_inventory_row(row) + select_result = self._run_js(INVENTORY_SELECT_ALL_SCRIPT) or {} + if not select_result.get("ok"): + raise RuntimeError(f"状态[{status}]全选商品失败: {select_result}") + logger.info( + "当前筛选结果已全选: status={}, row_count={}, first_sku={}", + status, + select_result.get("rowCount"), + target.get("sku", ""), + ) + + delete_result: Dict[str, Any] = {} + for attempt in range(8): + time.sleep(0.8 if attempt else 0.3) + delete_result = self._run_js(INVENTORY_DELETE_SELECTED_SCRIPT) or {} + if delete_result.get("ok"): + break + if delete_result.get("menuOpened"): + logger.info("状态[{}]已点击选择组操作,等待删除菜单展开: {}", status, delete_result) + time.sleep(1) + continue + logger.info("状态[{}]第{}次点击批量删除未命中: {}", status, attempt + 1, delete_result) + if not delete_result.get("ok"): + raise RuntimeError(f"状态[{status}]点击批量删除失败: {delete_result}") + logger.info("批量删除按钮点击成功: status={}, result={}", status, delete_result) + + self._confirm_delete_modal(status) + success_message = self._wait_delete_success_message(status) + deleted_count = self._extract_delete_success_count(success_message) or int(select_result.get("rowCount") or 1) + logger.info("批量删除确认完成: status={}, deleted_count={}, success_message={}", status, deleted_count, success_message) + return { + "deletedCount": deleted_count, + "target": { + **target, + "selectedRows": select_result.get("rowCount"), + "selectResult": select_result, + "deleteResult": delete_result, + }, + "successMessage": success_message, + } + @classmethod def _summarize_inventory_row(cls, row) -> Dict[str, str]: sku = "" @@ -408,27 +456,13 @@ class InventoryManage(AmamzonBase): text = "" return {"sku": sku, "rawText": text[:400]} - def _delete_inventory_row(self, row, status: str) -> str: - try: - dropdown = row.ele('xpath:.//kat-dropdown-button[@variant="secondary"]', timeout=5) - except Exception: - dropdown = None - if not dropdown: - raise RuntimeError(f"状态[{status}]商品行缺少三点菜单") - - dropdown.click() - time.sleep(1) - - try: - delete_button = dropdown.sr("xpath:.//button[@role='menuitem' and @data-action='DeleteListing']") - except Exception: - delete_button = None - if not delete_button: - raise RuntimeError(f"状态[{status}]三点菜单中未找到“删除商品信息”按钮") - - delete_button.wait.displayed(raise_err=False) - delete_button.click() + def _confirm_delete_modal(self, status: str) -> None: + js_result = self._click_confirm_delete_modal_with_js() + if js_result.get("ok"): + logger.info("已通过 JS 确认删除弹窗: status={}, result={}", status, js_result) + return + logger.info("JS 确认删除弹窗未命中,尝试驱动点击: status={}, result={}", status, js_result) confirm_button = self.tab.ele( 'xpath://kat-modal[@data-testid="action-modal"]//kat-button[@variant="primary"]', timeout=5, @@ -439,24 +473,52 @@ class InventoryManage(AmamzonBase): confirm_button.wait.displayed(raise_err=False) confirm_button.wait.enabled() confirm_button.click() - return self._wait_delete_success_message(status) + logger.info("已通过驱动确认删除弹窗: status={}", status) + + def _click_confirm_delete_modal_with_js(self) -> Dict[str, Any]: + try: + return self._run_js(DELETE_CONFIRM_MODAL_CLICK_SCRIPT) or {} + except Exception as exc: + logger.info("JS 点击删除确认按钮失败,回退到驱动点击: {}", exc) + return {"ok": False, "reason": str(exc)} def _wait_delete_success_message(self, status: str) -> str: deadline = time.time() + DELETE_SUCCESS_TIMEOUT seen_messages = [] while time.time() < deadline: - alerts = self.tab.eles("xpath://kat-alert[@variant='success' and not(@dismissed)]", timeout=2) - for alert in alerts: - text = self._extract_alert_text(alert) + for text in self._collect_delete_success_messages(): if not text: continue if text not in seen_messages: seen_messages.append(text) if self._is_delete_success_message(text): + logger.info("读取到删除成功提示: status={}, message={}", status, text) return text time.sleep(0.3) raise RuntimeError(f"状态[{status}]删除后未读取到成功提示: {seen_messages}") + def _collect_delete_success_messages(self) -> List[str]: + messages: List[str] = [] + try: + alerts = self.tab.eles("xpath://kat-alert[not(@dismissed)]", timeout=1) + for alert in alerts: + text = self._extract_alert_text(alert) + if text and text not in messages: + messages.append(text) + except Exception: + pass + + try: + js_messages = self._run_js(DELETE_SUCCESS_MESSAGES_SCRIPT) or [] + for text in js_messages: + normalized = self._normalize_option_text(str(text or "")) + if normalized and normalized not in messages: + messages.append(normalized) + except Exception as exc: + logger.info("JS 读取删除提示失败,继续等待: {}", exc) + + return messages + @classmethod def _extract_alert_text(cls, alert) -> str: parts = [] @@ -482,6 +544,11 @@ class InventoryManage(AmamzonBase): normalized = re.sub(r"\s+", "", text or "") return all(pattern.search(normalized) for pattern in DELETE_SUCCESS_MESSAGE_PARTS) + @staticmethod + def _extract_delete_success_count(text: str) -> int: + match = re.search(r"(\d+)\s*个商品(?:已删除|已经删除)", text or "") + return int(match.group(1)) if match else 0 + def _wait_complete_draft_quick_view_tag_rows(self) -> List[Dict[str, Any]]: deadline = time.time() + QUICK_VIEW_TAGS_TIMEOUT rows = [] @@ -520,13 +587,13 @@ class InventoryManage(AmamzonBase): logger.info("推荐报价百分比诊断信息:\n{}", json.dumps(compact, ensure_ascii=False, indent=2)) return rows - def _run_js(self, script: str): + def _run_js(self, script: str, *args): if self.tab is None: raise RuntimeError("浏览器页面不存在,请先打开店铺并进入管理所有库存页面") if hasattr(self.tab, "run_js"): - return self.tab.run_js(script) + return self.tab.run_js(script, *args) if hasattr(self.tab, "run_js_loaded"): - return self.tab.run_js_loaded(script) + return self.tab.run_js_loaded(script, *args) raise RuntimeError("当前页面对象不支持执行 JavaScript,无法探测 Shadow DOM") def _open_recommended_offer_percentage_detail_with_driver(self) -> Dict[str, Any]: @@ -676,7 +743,7 @@ class InventoryManage(AmamzonBase): quantity_text = cls._normalize_quantity_text(row.get("quantity")) quantity = int(quantity_text) if quantity_text else 0 canonical_status = cls._canonical_listing_status(status) - if quantity <= 0 or canonical_status in LISTING_STATUS_DELETE_WHITELIST: + if not quantity_text or quantity <= 0 or canonical_status in LISTING_STATUS_DELETE_WHITELIST: continue candidates.append( @@ -689,10 +756,13 @@ class InventoryManage(AmamzonBase): return candidates @staticmethod - def _limit_delete_candidates(candidates: Iterable[Dict[str, Any]], max_delete_count: int = 1) -> List[Dict[str, Any]]: - if max_delete_count <= 0: - return [] - return list(candidates)[:max_delete_count] + def _format_deletable_candidates(candidates: Iterable[Dict[str, Any]]) -> str: + summary = [] + for candidate in candidates: + status = str(candidate.get("status") or "") + quantity = candidate.get("quantity") + summary.append(f"{status}({quantity})") + return ", ".join(summary) if summary else "无" @classmethod def _canonical_listing_status(cls, status: str) -> str: @@ -1157,7 +1227,7 @@ class InventoryManage(AmamzonBase): return re.sub(r"\s+", "", text) -class ProductTask: +class PatrolDeleteTask: """巡店删除任务处理类。""" mark_name = "巡店删除" @@ -1204,7 +1274,7 @@ class ProductTask: "stop_requested": False, } - self.log(f"开始处理巡店删除任务 {task_id},共 {len(items)} 个店铺") + self.log(f"开始处理巡店删除任务 {task_id},共 {len(items)} 个店铺,{total_countries} 个国家") for index, shop_item in enumerate(items, 1): if runing_task[task_id].get("stop_requested", False): self.log(f"检测到任务 {task_id} 的暂停请求,停止处理", "WARNING") @@ -1264,6 +1334,7 @@ class ProductTask: country_names = self._ordered_countries(payload_country_sections) aggregated_sections = self._build_country_section_templates(payload_country_sections) aggregated_cart_ratios = self._build_cart_ratio_templates(country_names, payload_cart_ratios) + self.log(f"店铺 {shop_name} 待处理国家: {', '.join(country_names)}") driver: Optional[InventoryManage] = None requires_browser_reset = False @@ -1300,10 +1371,16 @@ class ProductTask: if not country_result["success"]: runing_task[task_id]["failed_countries"] += 1 requires_browser_reset = country_result["reopenRequired"] + self.log( + f"国家 {country_name} 处理结束,success={country_result['success']}," + f"deleted={country_result['deletedCount']},reopenRequired={requires_browser_reset}" + ) if driver is not None: + self.log(f"店铺 {shop_name} 国家处理完成,正在关闭店铺") self._safe_close_store(driver) + self.log(f"店铺 {shop_name} 处理结果已汇总,准备回传") self.post_result( task_id=task_id, shop_name=shop_name, @@ -1315,6 +1392,7 @@ class ProductTask: runing_task[task_id]["success_count"] += 1 else: runing_task[task_id]["failed_count"] += 1 + self.log(f"店铺 {shop_name} 处理完成,成功国家数: {sum(1 for result in country_results if result['success'])}/{len(country_names)}") except Exception as exc: self.log(f"处理店铺 {shop_name} 失败: {str(exc)}", "ERROR") runing_task[task_id]["failed_count"] += 1 @@ -1405,25 +1483,27 @@ class ProductTask: latest_status_rows: List[Dict[str, Any]] = [] try: self._switch_country_with_retry(driver, country_name) + self.log(f"国家 {country_name} 切换完成,准备进入管理所有库存页面") driver.switch_to_manage_inventory() + self.log(f"国家 {country_name} 已进入管理所有库存页面,开始删除非白名单商品") delete_result = driver.delete_all_listings_from_non_whitelisted_statuses(shop_name, country_name) latest_status_rows = delete_result.get("statusRows") or [] + self.log( + f"国家 {country_name} 删除步骤完成,deleted={delete_result.get('totalDeleted', 0)}," + f"stopReason={delete_result.get('stopReason', '')}" + ) country_section = self._build_country_section_result( country_name=country_name, status_rows=latest_status_rows, delete_counts=delete_result.get("deleteCounts") or {}, default_process_status="无可删商品" if delete_result.get("totalDeleted", 0) == 0 else "", ) + complete_draft_section = self._read_complete_draft_country_section_safe(driver, shop_name, country_name) + country_section = self._replace_complete_draft_rows(country_section, complete_draft_section) - cart_ratio = self._empty_cart_ratio(country_name) - try: - cart_ratio = self._extract_country_cart_ratio( - driver.get_recommended_offer_cart_ratios().get("cartRatios") or [], - country_name, - ) - except Exception as cart_exc: - self.log(f"读取国家 {country_name} 购物车比例失败: {str(cart_exc)}", "WARNING") + cart_ratio = self._read_country_cart_ratio_safe(driver, country_name) + self.log(f"国家 {country_name} 购物车比例读取完成: {cart_ratio.get('ratio', '')}") return { "success": True, @@ -1434,6 +1514,7 @@ class ProductTask: } except Exception as exc: self.log(f"处理国家 {country_name} 失败: {str(exc)}", "ERROR") + cart_ratio = self._read_country_cart_ratio_safe(driver, country_name) failure_rows = latest_status_rows or [{"status": "全部", "quantity": "", "deleteQuantity": "", "processStatus": ""}] country_section = self._build_country_section_result( country_name=country_name, @@ -1444,16 +1525,53 @@ class ProductTask: return { "success": False, "countrySection": country_section, - "cartRatio": self._empty_cart_ratio(country_name), + "cartRatio": cart_ratio, "deletedCount": 0, "reopenRequired": self._should_reopen_browser(str(exc)), } + def _read_country_cart_ratio_safe(self, driver: InventoryManage, country_name: str) -> Dict[str, str]: + try: + self.log(f"开始读取国家 {country_name} 购物车比例") + return self._extract_country_cart_ratio( + driver.get_recommended_offer_cart_ratios().get("cartRatios") or [], + country_name, + ) + except Exception as cart_exc: + self.log(f"读取国家 {country_name} 购物车比例失败: {str(cart_exc)}", "WARNING") + return self._empty_cart_ratio(country_name) + + def _read_complete_draft_country_section_safe( + self, + driver: InventoryManage, + shop_name: str, + country_name: str, + ) -> Optional[Dict[str, Any]]: + try: + self.log(f"开始读取国家 {country_name} 补全草稿") + tags = driver.get_complete_draft_quick_view_tags(shop_name, country_name) + rows = [] + for item in tags: + quantity = InventoryManage._normalize_quantity_text(item.get("quantity")) + rows.append( + { + "type": "completeDraft", + "quantity": quantity, + "deleteQuantity": quantity, + } + ) + self.log(f"国家 {country_name} 补全草稿读取完成: rows={rows}") + return {"country": country_name, "rows": rows} if rows else None + except Exception as draft_exc: + self.log(f"读取国家 {country_name} 补全草稿失败: {str(draft_exc)}", "WARNING") + return None + def _switch_country_with_retry(self, driver: InventoryManage, country_name: str) -> None: for retry in range(PRODUCT_TASK_MAX_RETRIES): try: self.log(f"尝试切换到国家 {country_name} (第 {retry + 1}/{PRODUCT_TASK_MAX_RETRIES} 次)") if driver.switch_to_country(country_name): + self.log(f"成功切换到国家 {country_name}") return if retry < PRODUCT_TASK_MAX_RETRIES - 1: try: @@ -1489,8 +1607,9 @@ class ProductTask: if error: shop_payload["error"] = error else: - shop_payload["countrySections"] = country_sections or [] - shop_payload["cartRatios"] = cart_ratios or [] + shop_payload["countrySections"] = self._normalize_country_sections_for_result(country_sections) + shop_payload["cartRatios"] = self._normalize_cart_ratios_for_result(cart_ratios) + self._validate_success_result_payload(shop_payload) payload = {"shops": [shop_payload]} url = f"{DELETE_BRAND_API_BASE}/api/patrol-delete/tasks/{task_id}/result" @@ -1509,10 +1628,18 @@ class ProductTask: verify=False, ) self.log(f"回传结果: {response.text}") - if response.status_code == 200: + try: + response_data = response.json() + except (AttributeError, ValueError): + response_data = None + api_success = not (isinstance(response_data, dict) and response_data.get("success") is False) + if response.status_code == 200 and api_success: self.log(f"巡店删除结果回传成功: {shop_name}") return - self.log(f"巡店删除结果回传失败,状态码: {response.status_code}", "WARNING") + self.log( + f"巡店删除结果回传失败,状态码: {response.status_code}, 响应: {response.text}", + "WARNING", + ) except Exception as exc: self.log(f"调用巡店删除结果API异常: {str(exc)}", "ERROR") @@ -1521,6 +1648,92 @@ class ProductTask: raise RuntimeError("巡店删除结果回传最终失败") + @classmethod + def _normalize_country_sections_for_result( + cls, country_sections: Optional[List[Dict[str, Any]]] + ) -> List[Dict[str, Any]]: + normalized = [] + for section in country_sections or []: + country = str(section.get("country") or "").strip() + rows = [] + for row in section.get("rows") or []: + normalized_row = { + "quantity": cls._string_result_field(row.get("quantity")), + "deleteQuantity": cls._string_result_field(row.get("deleteQuantity")), + } + if not cls._is_complete_draft_result_row(row): + normalized_row = { + "status": cls._string_result_field(row.get("status")), + **normalized_row, + "processStatus": cls._string_result_field(row.get("processStatus")), + } + rows.append(normalized_row) + if country and rows: + normalized.append({"country": country, "rows": rows}) + return normalized + + @staticmethod + def _normalize_cart_ratios_for_result( + cart_ratios: Optional[List[Dict[str, Any]]] + ) -> List[Dict[str, str]]: + normalized = [] + for item in cart_ratios or []: + country = str(item.get("country") or "").strip() + if country: + normalized.append({"country": country, "ratio": PatrolDeleteTask._string_result_field(item.get("ratio"))}) + return normalized + + @staticmethod + def _string_result_field(value: Any) -> str: + return "" if value is None else str(value) + + @staticmethod + def _is_complete_draft_result_row(row: Dict[str, Any]) -> bool: + status = InventoryManage._normalize_option_text(str(row.get("status") or "")) + tag = InventoryManage._normalize_option_text(str(row.get("tag") or "")) + row_type = str(row.get("type") or row.get("kind") or row.get("_kind") or "").strip() + return status in {"补全草稿", "商品信息草稿"} or tag == "补全草稿" or row_type == "completeDraft" + + @classmethod + def _replace_complete_draft_rows( + cls, + country_section: Dict[str, Any], + complete_draft_section: Optional[Dict[str, Any]], + ) -> Dict[str, Any]: + draft_rows = list((complete_draft_section or {}).get("rows") or []) + if not draft_rows: + return country_section + + rows = [] + replaced = False + for row in country_section.get("rows") or []: + if cls._is_complete_draft_result_row(row): + if not replaced: + rows.extend(draft_rows) + replaced = True + continue + rows.append(row) + + if not replaced: + rows.extend(draft_rows) + return {**country_section, "rows": rows} + + @staticmethod + def _validate_success_result_payload(shop_payload: Dict[str, Any]) -> None: + country_sections = shop_payload.get("countrySections") or [] + cart_ratios = shop_payload.get("cartRatios") or [] + if not country_sections: + raise RuntimeError("巡店删除成功结果缺少国家状态数据,已阻止空回传") + empty_sections = [ + str(section.get("country") or "") + for section in country_sections + if not section.get("rows") + ] + if empty_sections: + raise RuntimeError(f"巡店删除成功结果存在空国家状态行: {', '.join(empty_sections)}") + if not cart_ratios: + raise RuntimeError("巡店删除成功结果缺少购物车比例数据,已阻止空回传") + @staticmethod def _resolve_country_sections( shop_item: Dict[str, Any], country_sections: List[Dict[str, Any]] @@ -1607,11 +1820,14 @@ class ProductTask: if not process_status and default_process_status and not default_status_applied: process_status = default_process_status default_status_applied = True + delete_quantity = str(delete_count) if delete_count > 0 else "" + if default_process_status == "无可删商品": + delete_quantity = "0" rows.append( { "status": status, "quantity": InventoryManage._normalize_quantity_text(row.get("quantity")), - "deleteQuantity": str(delete_count) if delete_count > 0 else "", + "deleteQuantity": delete_quantity, "processStatus": process_status, } ) @@ -1621,7 +1837,7 @@ class ProductTask: { "status": "全部", "quantity": "", - "deleteQuantity": "", + "deleteQuantity": "0" if default_process_status == "无可删商品" else "", "processStatus": default_process_status, } ] @@ -1664,15 +1880,3 @@ class ProductTask: driver.close_store() except Exception: pass - - -if __name__ == "__main__": - user_info: UserInfo = {"company": "rongchuang123", "username": "自动化_Robot", "password": "#20zsg25"} - driver = InventoryManage(user_info) - - shop_name = "郭亚芳" - country = "德国" - - driver.open_shop(shop_name) - driver.switch_to_country(country) - driver.print_recommended_offer_cart_ratios_json() From 1be28f10e90fe9aada717e075a904c75d6702981 Mon Sep 17 00:00:00 2001 From: koko Date: Tue, 28 Apr 2026 20:46:50 +0800 Subject: [PATCH 10/18] Stabilize patrol delete automation against delayed Amazon UI The patrol-delete flow now waits for country and listing-status controls before acting, uses the dedicated PatrolDeleteTask entry point, and includes the browser helper scripts required by the bulk-delete path. Tests cover delayed dropdown readiness, payload rejection/retry behavior, complete-draft normalization, filtered bulk deletion, and asset fallback lookup. Constraint: Amazon listing UI exposes status controls through dynamic KAT components and delayed option rendering Rejected: Keep row-by-row delete flow | bulk selection is the current implemented path and is covered by the added helper scripts Confidence: high Scope-risk: moderate Directive: Do not remove the patrol_delete JS helper files without checking app/amazon/patrol_delete.py script loading Tested: uv run --group dev pytest tests\\test_amazon_base.py tests\\test_patrol_delete.py Tested: uv run python -m py_compile amazon\\base.py amazon\\main.py blueprints\\main.py Not-tested: Real Amazon Seller Central browser session --- app/amazon/base.py | 28 +- app/amazon/main.py | 56 +-- .../delete_confirm_modal_click.js | 89 +++++ .../patrol_delete/delete_success_messages.js | 46 +++ .../inventory_delete_selected.js | 187 ++++++++++ .../patrol_delete/inventory_select_all.js | 71 ++++ .../listing_status_dropdown_close.js | 3 + .../listing_status_dropdown_open.js | 82 ++++- .../listing_status_dropdown_options.js | 65 +++- .../listing_status_select_option.js | 95 ++++- .../recommended_offer_percentage_rows.js | 69 +++- app/blueprints/main.py | 84 +++-- app/tests/test_amazon_base.py | 17 + app/tests/test_patrol_delete.py | 340 ++++++++++++++---- 14 files changed, 1062 insertions(+), 170 deletions(-) create mode 100644 app/amazon/scripts/patrol_delete/delete_confirm_modal_click.js create mode 100644 app/amazon/scripts/patrol_delete/delete_success_messages.js create mode 100644 app/amazon/scripts/patrol_delete/inventory_delete_selected.js create mode 100644 app/amazon/scripts/patrol_delete/inventory_select_all.js create mode 100644 app/amazon/scripts/patrol_delete/listing_status_dropdown_close.js diff --git a/app/amazon/base.py b/app/amazon/base.py index f5be539..107f2cf 100644 --- a/app/amazon/base.py +++ b/app/amazon/base.py @@ -36,6 +36,8 @@ COUNTRY_INITIAL_LOAD_TIMEOUT = 120 COUNTRY_LOOKUP_TIMEOUT = 20 COUNTRY_CLICK_TIMEOUT = 10 COUNTRY_DROPDOWN_DELAY = 1 +COUNTRY_DROPDOWN_READY_TIMEOUT = 20 +COUNTRY_DROPDOWN_RETRY_INTERVAL = 0.5 IP_CHECK_TIMEOUT = 60 LOGIN_ATTEMPTS = 4 @@ -585,18 +587,36 @@ class AmamzonBase(ZiniaoDriver): if not dropdown_header: logger.warning("找不到国家切换下拉框") return False - dropdown_header.click() - time.sleep(COUNTRY_DROPDOWN_DELAY) logger.info("正在展开国家列表") - first_item = self.tab.ele(COUNTRY_LIST_ITEM_XPATH, timeout=COUNTRY_CLICK_TIMEOUT) - if not first_item: + first_item = self._wait_country_list_item(dropdown_header) + if first_item is None: logger.warning("找不到国家列表项") return False + first_item.click() time.sleep(COUNTRY_DROPDOWN_DELAY) return True + def _wait_country_list_item(self, dropdown_header): + deadline = time.time() + COUNTRY_DROPDOWN_READY_TIMEOUT + attempt = 0 + while time.time() < deadline: + attempt += 1 + try: + dropdown_header.click() + except Exception as exc: + logger.info("点击国家切换下拉框失败, attempt={}, error={}", attempt, exc) + + time.sleep(COUNTRY_DROPDOWN_DELAY) + first_item = self.tab.ele(COUNTRY_LIST_ITEM_XPATH, timeout=COUNTRY_DROPDOWN_RETRY_INTERVAL) + if first_item: + return first_item + + self.tab.wait.doc_loaded(timeout=COUNTRY_CLICK_TIMEOUT, raise_err=False) + time.sleep(COUNTRY_DROPDOWN_RETRY_INTERVAL) + return None + def _select_country(self, country_name: str) -> bool: logger.info("正在切换到国家:{}", country_name) target_country = self.tab.ele(self._country_option_xpath(country_name), timeout=COUNTRY_CLICK_TIMEOUT) diff --git a/app/amazon/main.py b/app/amazon/main.py index 238e771..a5e7111 100644 --- a/app/amazon/main.py +++ b/app/amazon/main.py @@ -4,17 +4,17 @@ import requests from datetime import datetime from typing import Dict, Any, List from concurrent.futures import ThreadPoolExecutor, as_completed -from config import JSON_TASK_QUEUE, runing_task, runing_shop, DELETE_BRAND_API_BASE, ZN_COMPANY, ZN_USERNAME, ZN_PASSWORD -from amazon.del_brand import AmazoneDriver, kill_process -from amazon.approve import ApproveTask -from amazon.match_action import MatchTak -from amazon.price_match import PriceTask -from amazon.asin_status import StatusTask -from amazon.patrol_delete import ProductTask -from amazon.detail_spider import SpiderTask - - -from amazon.tool import get_shop_info,show_notification +from config import JSON_TASK_QUEUE, runing_task, runing_shop, DELETE_BRAND_API_BASE, ZN_COMPANY, ZN_USERNAME, ZN_PASSWORD +from amazon.del_brand import AmazoneDriver, kill_process +from amazon.approve import ApproveTask +from amazon.match_action import MatchTak +from amazon.price_match import PriceTask +from amazon.asin_status import StatusTask +from amazon.patrol_delete import PatrolDeleteTask +from amazon.detail_spider import SpiderTask + + +from amazon.tool import get_shop_info,show_notification class TaskMonitor: @@ -55,15 +55,15 @@ class TaskMonitor: self.executor = ThreadPoolExecutor(max_workers=self.max_workers) futures = [] # 保存所有提交的任务Future对象 - task_type_info = { - "product-risk-resolve-run" : "产品风险审批", - "shop-match-run" : "匹配价格", - "price-track-run" : "跟价", - "query-asin-run" : "状态查询", - "patrol-delete-run" : "巡店删除", - "appearance-patent-run" : "亚马逊采集", - } - try: + task_type_info = { + "product-risk-resolve-run" : "产品风险审批", + "shop-match-run" : "匹配价格", + "price-track-run" : "跟价", + "query-asin-run" : "状态查询", + "patrol-delete-run" : "巡店删除", + "appearance-patent-run" : "亚马逊采集", + } + try: while self.running: try: # 使用较长超时时间等待任务,减少空等待异常 @@ -125,14 +125,14 @@ class TaskMonitor: task_data: 任务数据 """ try: - TASK_INFO = { - "产品风险审批" : ApproveTask, - "匹配价格" : MatchTak, - "跟价" : PriceTask, - "状态查询" : StatusTask, - "巡店删除" : ProductTask, - "亚马逊采集" : SpiderTask, - } + TASK_INFO = { + "产品风险审批" : ApproveTask, + "匹配价格" : MatchTak, + "跟价" : PriceTask, + "状态查询" : StatusTask, + "巡店删除" : PatrolDeleteTask, + "亚马逊采集" : SpiderTask, + } self.log(f"线程 {id(task_data)} 开始处理产品风险审批任务...") # 创建ApproveTask实例并处理任务 TASK_CLS = TASK_INFO[TASK_TYPE] # 根据任务类型选择处理类,默认为ApproveTask diff --git a/app/amazon/scripts/patrol_delete/delete_confirm_modal_click.js b/app/amazon/scripts/patrol_delete/delete_confirm_modal_click.js new file mode 100644 index 0000000..601f3da --- /dev/null +++ b/app/amazon/scripts/patrol_delete/delete_confirm_modal_click.js @@ -0,0 +1,89 @@ +function textOf(node) { + return ((node && (node.innerText || node.textContent || '')) || '').replace(/\s+/g, ' ').trim(); +} + +function attrsText(el) { + if (!el || !el.attributes) return ''; + return Array.from(el.attributes).map((attr) => `${attr.name}=${attr.value}`).join(' '); +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + if ((node.tagName || '').toLowerCase() === 'slot' && node.assignedElements) { + for (const assigned of node.assignedElements({ flatten: true })) { + walkRoots(assigned, rows, seen); + } + } + node = walker.nextNode(); + } +} + +function allElements(root) { + const rows = []; + walkRoots(root || document, rows, new Set()); + return rows; +} + +function clickElement(el) { + el.scrollIntoView({ block: 'center', inline: 'nearest' }); + if (el.focus) el.focus(); + for (const eventName of ['pointerdown', 'mousedown', 'pointerup', 'mouseup']) { + el.dispatchEvent(new MouseEvent(eventName, { bubbles: true, cancelable: true, view: window })); + } + el.click(); +} + +function clickTargetFor(el) { + if (el && el.shadowRoot) { + const button = el.shadowRoot.querySelector('button:not([disabled]), [role="button"]:not([disabled])'); + if (button) return button; + } + return el; +} + +const modal = document.querySelector('kat-modal[data-testid="action-modal"]') || + allElements(document).find((el) => /删除|Delete/i.test(textOf(el)) && (el.tagName || '').toLowerCase() === 'kat-modal'); + +if (!modal) return { ok: false, reason: 'delete modal not found' }; + +const buttons = allElements(modal).filter((el) => { + const haystack = `${el.tagName || ''} ${attrsText(el)} ${textOf(el)}`; + return isVisible(el) && /kat-button|button/i.test(el.tagName || '') && /variant=primary|删除|确认|Delete|Confirm/i.test(haystack); +}); +const button = buttons[0]; + +if (!button) { + return { + ok: false, + reason: 'confirm button not found', + modalText: textOf(modal), + modalHTML: (modal.outerHTML || '').slice(0, 2000), + }; +} + +const target = clickTargetFor(button); +clickElement(target); + +return { + ok: true, + clicked: { + tag: button.tagName, + text: textOf(button), + attrs: attrsText(button), + targetTag: target.tagName, + }, +}; diff --git a/app/amazon/scripts/patrol_delete/delete_success_messages.js b/app/amazon/scripts/patrol_delete/delete_success_messages.js new file mode 100644 index 0000000..5ee52fe --- /dev/null +++ b/app/amazon/scripts/patrol_delete/delete_success_messages.js @@ -0,0 +1,46 @@ +function textOf(node) { + return ((node && (node.innerText || node.textContent || '')) || '').replace(/\s+/g, ' ').trim(); +} + +function attrsText(el) { + if (!el || !el.attributes) return ''; + return Array.from(el.attributes).map((attr) => `${attr.name}=${attr.value}`).join(' '); +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + if ((node.tagName || '').toLowerCase() === 'slot' && node.assignedElements) { + for (const assigned of node.assignedElements({ flatten: true })) { + walkRoots(assigned, rows, seen); + } + } + node = walker.nextNode(); + } +} + +const rows = []; +walkRoots(document, rows, new Set()); + +const seen = new Set(); +return rows + .filter((el) => { + const haystack = `${el.tagName || ''} ${attrsText(el)} ${textOf(el)}`; + return isVisible(el) && /kat-alert|alert|toast|notification|已删除|已经删除|15\s*分钟|success/i.test(haystack); + }) + .map((el) => textOf(el) || attrsText(el)) + .filter((text) => text && !seen.has(text) && seen.add(text)) + .slice(0, 30); diff --git a/app/amazon/scripts/patrol_delete/inventory_delete_selected.js b/app/amazon/scripts/patrol_delete/inventory_delete_selected.js new file mode 100644 index 0000000..6a48275 --- /dev/null +++ b/app/amazon/scripts/patrol_delete/inventory_delete_selected.js @@ -0,0 +1,187 @@ +function textOf(node) { + return ((node && (node.innerText || node.textContent || '')) || '').replace(/\s+/g, ' ').trim(); +} + +function attrsText(el) { + if (!el || !el.attributes) return ''; + return Array.from(el.attributes).map((attr) => `${attr.name}=${attr.value}`).join(' '); +} + +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + if ((node.tagName || '').toLowerCase() === 'slot' && node.assignedElements) { + for (const assigned of node.assignedElements({ flatten: true })) { + walkRoots(assigned, rows, seen); + } + } + node = walker.nextNode(); + } +} + +function allElements(root) { + const rows = []; + walkRoots(root || document, rows, new Set()); + return rows; +} + +function closestDeep(el, selector) { + let node = el; + while (node) { + if (node.closest) { + const found = node.closest(selector); + if (found) return found; + } + const root = node.getRootNode && node.getRootNode(); + node = root && root.host ? root.host : null; + } + return null; +} + +function insideInventoryRow(el) { + return Boolean(closestDeep(el, 'div[data-sku]')); +} + +function isDeleteAction(el) { + const haystack = `${el.tagName || ''} ${attrsText(el)} ${textOf(el)}`; + return /data-action=DeleteListing|action=DeleteListing|删除商品信息|删除商品和报价|DeleteListing|delete\s+listing/i.test(haystack); +} + +function clickElement(el) { + el.scrollIntoView({ block: 'center', inline: 'nearest' }); + if (el.focus) el.focus(); + for (const eventName of ['pointerdown', 'mousedown', 'pointerup', 'mouseup']) { + el.dispatchEvent(new MouseEvent(eventName, { bubbles: true, cancelable: true, view: window })); + } + el.click(); +} + +function hostDropdownOf(el) { + const host = closestDeep(el, 'kat-dropdown-button'); + return host || ((el.tagName || '').toLowerCase() === 'kat-dropdown-button' ? el : null); +} + +function dropdownToggleOf(dropdown, fallback) { + if (!dropdown) return fallback; + if (fallback && textOf(fallback)) return fallback; + return fallback || dropdown; +} + +function openBulkActionMenu(candidate) { + const dropdown = hostDropdownOf(candidate); + const toggle = dropdownToggleOf(dropdown, candidate); + clickElement(toggle); + return { dropdown, toggle }; +} + +function summarize(el) { + return { + tag: el.tagName, + text: textOf(el), + attrs: attrsText(el), + visible: isVisible(el), + outerHTML: (el.outerHTML || '').slice(0, 1000), + }; +} + +function findVisibleBulkDeleteAction() { + return allElements(document).find((el) => isDeleteAction(el) && isVisible(el) && !insideInventoryRow(el)); +} + +function findDeleteActionAfterMenuOpen(candidate) { + const dropdown = hostDropdownOf(candidate) || candidate; + const exactMenuButton = allElements(dropdown).find((child) => { + const tag = (child.tagName || '').toLowerCase(); + const role = child.getAttribute && child.getAttribute('role'); + return tag === 'button' && role === 'menuitem' && isDeleteAction(child); + }); + if (exactMenuButton) return { mode: 'bulk-action-menuitem-delete', el: exactMenuButton }; + + const nestedDeleteAction = allElements(dropdown).find((child) => isDeleteAction(child) && isVisible(child)); + if (nestedDeleteAction) return { mode: 'bulk-action-nested-delete', el: nestedDeleteAction }; + + const deleteAction = findVisibleBulkDeleteAction(); + if (deleteAction) return { mode: 'bulk-action-visible-delete', el: deleteAction }; + + return null; +} + +function isBulkActionCandidate(el) { + const tag = (el.tagName || '').toLowerCase(); + if (!/^(button|kat-button|kat-dropdown-button|kat-select|kat-popover|kat-menu-button)$/.test(tag)) return false; + if (!isVisible(el) || insideInventoryRow(el)) return false; + const haystack = `${tag} ${attrsText(el)} ${textOf(el)}`; + return /DeleteListing|删除商品信息|删除|操作|更多|Action|Actions|selected|选定|已选择|批量/i.test(haystack); +} + +const directDelete = findVisibleBulkDeleteAction(); +if (directDelete) { + clickElement(directDelete); + return { ok: true, mode: 'direct-delete-button', clicked: summarize(directDelete) }; +} + +const rows = allElements(document); +const candidates = rows.filter(isBulkActionCandidate); + +for (const candidate of candidates) { + try { + const openResult = openBulkActionMenu(candidate); + const deleteAction = findDeleteActionAfterMenuOpen(candidate); + if (deleteAction) { + clickElement(deleteAction.el); + return { + ok: true, + mode: deleteAction.mode, + candidate: summarize(candidate), + opened: { + dropdown: openResult.dropdown ? summarize(openResult.dropdown) : null, + toggle: openResult.toggle ? summarize(openResult.toggle) : null, + }, + clicked: summarize(deleteAction.el), + }; + } + return { + ok: false, + reason: 'bulk action menu opened; delete action not visible yet', + menuOpened: true, + candidate: summarize(candidate), + opened: { + dropdown: openResult.dropdown ? summarize(openResult.dropdown) : null, + toggle: openResult.toggle ? summarize(openResult.toggle) : null, + }, + deleteLikeElements: allElements(document) + .filter((el) => /DeleteListing|删除商品信息|删除商品和报价|delete\s+listing/i.test(`${el.tagName || ''} ${attrsText(el)} ${textOf(el)}`) && !insideInventoryRow(el)) + .slice(0, 20) + .map(summarize), + }; + } catch (error) { + // Try the next non-row bulk action control. + } +} + +return { + ok: false, + reason: 'bulk delete action not found', + candidates: candidates.slice(0, 20).map(summarize), + deleteLikeElements: rows + .filter((el) => /DeleteListing|删除商品信息|删除商品和报价|delete\s+listing/i.test(`${el.tagName || ''} ${attrsText(el)} ${textOf(el)}`) && !insideInventoryRow(el)) + .slice(0, 20) + .map(summarize), + visibleButtons: rows + .filter((el) => /^(button|kat-button|kat-dropdown-button)$/i.test(el.tagName || '') && isVisible(el)) + .slice(0, 20) + .map(summarize), +}; diff --git a/app/amazon/scripts/patrol_delete/inventory_select_all.js b/app/amazon/scripts/patrol_delete/inventory_select_all.js new file mode 100644 index 0000000..151c4cd --- /dev/null +++ b/app/amazon/scripts/patrol_delete/inventory_select_all.js @@ -0,0 +1,71 @@ +function isVisible(el) { + if (!el || !el.getBoundingClientRect) return false; + const rect = el.getBoundingClientRect(); + const style = window.getComputedStyle(el); + return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; +} + +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function insideInventoryRow(el) { + return Boolean(el && el.closest && el.closest('div[data-sku]')); +} + +function clickTargetFor(checkbox) { + if (!checkbox) return null; + if (checkbox.shadowRoot) { + const shadowTarget = checkbox.shadowRoot.querySelector('[role="checkbox"], .checkbox'); + if (shadowTarget) return shadowTarget; + } + return checkbox; +} + +const rowCount = document.querySelectorAll('div[data-sku]').length; +if (rowCount <= 0) { + return { ok: false, reason: 'no inventory rows after status filter', rowCount }; +} + +const checkboxes = allElements() + .filter((el) => (el.tagName || '').toLowerCase() === 'kat-checkbox' && isVisible(el)) + .sort((a, b) => { + const rectA = a.getBoundingClientRect(); + const rectB = b.getBoundingClientRect(); + return rectA.top - rectB.top || rectA.left - rectB.left; + }); + +const headerCheckbox = checkboxes.find((el) => !insideInventoryRow(el)) || checkboxes[0]; +if (!headerCheckbox) { + return { ok: false, reason: 'select-all checkbox not found', rowCount, checkboxCount: checkboxes.length }; +} + +const target = clickTargetFor(headerCheckbox); +target.scrollIntoView({ block: 'center', inline: 'nearest' }); +target.click(); + +return { + ok: true, + rowCount, + checkboxCount: checkboxes.length, + clicked: { + tag: headerCheckbox.tagName, + insideInventoryRow: insideInventoryRow(headerCheckbox), + outerHTML: (headerCheckbox.outerHTML || '').slice(0, 1000), + }, +}; diff --git a/app/amazon/scripts/patrol_delete/listing_status_dropdown_close.js b/app/amazon/scripts/patrol_delete/listing_status_dropdown_close.js new file mode 100644 index 0000000..cb9be2c --- /dev/null +++ b/app/amazon/scripts/patrol_delete/listing_status_dropdown_close.js @@ -0,0 +1,3 @@ +document.dispatchEvent(new KeyboardEvent('keydown', { key: 'Escape', code: 'Escape', bubbles: true })); +document.body.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window })); +return true; diff --git a/app/amazon/scripts/patrol_delete/listing_status_dropdown_open.js b/app/amazon/scripts/patrol_delete/listing_status_dropdown_open.js index f1e466c..ba21550 100644 --- a/app/amazon/scripts/patrol_delete/listing_status_dropdown_open.js +++ b/app/amazon/scripts/patrol_delete/listing_status_dropdown_open.js @@ -2,11 +2,32 @@ function textOf(node) { return (node && (node.innerText || node.textContent || '') || '').replace(/\s+/g, ' ').trim(); } +function normalize(text) { + return String(text || '').replace(/\s+/g, ' ').trim(); +} + function attrsText(el) { if (!el || !el.attributes) return ''; return Array.from(el.attributes).map((attr) => `${attr.name}=${attr.value}`).join(' '); } +function attrsOf(el) { + const attrs = {}; + if (!el || !el.attributes) return attrs; + for (const attr of el.attributes) attrs[attr.name] = attr.value; + return attrs; +} + +function isDisabled(el) { + if (!el) return false; + return ( + el.hasAttribute('disabled') || + el.disabled === true || + el.getAttribute('aria-disabled') === 'true' || + /\bdisabled\b/i.test(el.getAttribute('class') || '') + ); +} + function isVisible(el) { if (!el || !el.getBoundingClientRect) return false; const rect = el.getBoundingClientRect(); @@ -50,9 +71,25 @@ function nearestLabel(el) { return [...new Set(parts)].join(' | '); } +function optionTextOf(dropdown) { + const roots = [dropdown]; + if (dropdown.shadowRoot) roots.push(dropdown.shadowRoot); + const texts = []; + for (const root of roots) { + for (const option of Array.from(root.querySelectorAll('kat-option, kat-label, [role="option"], [class*="parentKatOptionStyle"]'))) { + texts.push(`${textOf(option)} ${attrsText(option)}`); + } + } + return normalize(texts.join(' ')); +} + +function isSearchFieldDropdown(text) { + return /(^|\s)(SKUS?|ASIN|FNSKU|UPC\/EAN|TITLE_KEYWORD|GTIN)(\s|$)|商品名称\/关键字|data-value=(SKU|ASIN|FNSKU|TITLE_KEYWORD|GTIN)|value=(SKU|ASIN|FNSKU|TITLE_KEYWORD|GTIN)/i.test(text); +} + function statusHitCount(text) { const matches = normalize(text).match( - /(全部\s*[((]\s*[\d,]+\s*[))]|在售\s*[((]\s*[\d,]+\s*[))]|不可售\s*[((]\s*[\d,]+\s*[))]|详情页面已删除\s*[((]\s*[\d,]+\s*[))]|订单页面已删除\s*[((]\s*[\d,]+\s*[))]|定价问题\s*[((]\s*[\d,]+\s*[))]|需要批准\s*[((]\s*[\d,]+\s*[))]|在搜索结果中禁止显示\s*[((]\s*[\d,]+\s*[))])/g + /(全部|在售|不可售|详情页面已删除|订单页面已删除|商品信息草稿|缺少的信息|定价问题|需要批准|配送问题|缺少报价|已停售|在搜索结果中禁止显示)\s*(?:[((]\s*[\d,]+\s*[))])?/g ); return matches ? matches.length : 0; } @@ -60,18 +97,24 @@ function statusHitCount(text) { function scoreDropdown(el) { const text = textOf(el); const label = nearestLabel(el); - const haystack = `${el.tagName} ${attrsText(el)} ${text} ${label}`; - const statusHits = statusHitCount(`${text} ${label}`); + const attrs = attrsText(el); + const optionText = optionTextOf(el); + const haystack = `${el.tagName} ${attrs} ${text} ${label} ${optionText}`; + const statusHits = statusHitCount(`${text} ${label} ${optionText}`); + const isStatusDropdown = /statusDropdown|商品状态|商品狀態|ListingStatus|listing status/i.test(haystack); let score = 0; + if (isSearchFieldDropdown(haystack)) score -= 1000; + if (isStatusDropdown) score += 500; if (/商品状态|商品狀態|ListingStatus|listing status/i.test(haystack)) score += 120; if (/\bstatus\b|状态/i.test(haystack)) score += 25; if (/filter|筛选|筛選|库存/i.test(haystack)) score += 10; - if (/全部\s*[((]\s*[\d,]+\s*[))]/.test(`${text} ${label}`)) score += 300; + if (/全部\s*[((]\s*[\d,]+\s*[))]/.test(`${text} ${label} ${optionText}`)) score += 300; if (statusHits >= 2) score += statusHits * 180; - if (/SKUS?|ASIN|FNSKU|UPC\/EAN|TITLE_KEYWORD|商品名称\/关键字/i.test(`${text} ${label}`)) score -= 300; + if (!isStatusDropdown && statusHits === 0) score -= 200; if (isVisible(el)) score += 10; if (el.closest('[data-sku], tr, [role="row"], [data-testid*="row"]')) score -= 80; - return { score, text, label, haystack, statusHits }; + if (isDisabled(el)) score -= 20; + return { score, text, label, haystack, statusHits, disabled: isDisabled(el) }; } function candidateTriggers(dropdown) { @@ -174,6 +217,32 @@ if (!ranked.length) { } const selected = ranked[0]; +if (selected.disabled) { + return { + ok: false, + reason: 'listing status dropdown disabled/loading', + selected: { + index: selected.index, + score: selected.score, + statusHits: selected.statusHits, + text: selected.text, + label: selected.label, + attrs: attrsOf(selected.el), + outerHTML: (selected.el.outerHTML || '').slice(0, 2000), + }, + candidates: ranked.slice(0, 10).map((row) => ({ + index: row.index, + score: row.score, + statusHits: row.statusHits, + disabled: row.disabled, + text: row.text, + label: row.label, + attrs: attrsText(row.el), + outerHTML: (row.el.outerHTML || '').slice(0, 1000), + })), + }; +} + selected.el.setAttribute('data-crawler-listing-status-dropdown', 'true'); const clickResult = clickTrigger(selected.el); @@ -217,6 +286,7 @@ return { index: row.index, score: row.score, statusHits: row.statusHits, + disabled: row.disabled, text: row.text, label: row.label, attrs: attrsText(row.el), diff --git a/app/amazon/scripts/patrol_delete/listing_status_dropdown_options.js b/app/amazon/scripts/patrol_delete/listing_status_dropdown_options.js index 0f9c250..9c71294 100644 --- a/app/amazon/scripts/patrol_delete/listing_status_dropdown_options.js +++ b/app/amazon/scripts/patrol_delete/listing_status_dropdown_options.js @@ -35,10 +35,48 @@ function allElements() { return rows; } +function findMarkedDropdown() { + return allElements().find((el) => el.getAttribute('data-crawler-listing-status-dropdown') === 'true') || null; +} + function insideListingRow(el) { return Boolean(el.closest('[data-sku], tr, [role="row"], [data-testid*="row"]')); } +function normalize(text) { + return String(text || '').replace(/\s+/g, ' ').trim(); +} + +function isOptionLike(el) { + if (!el || !el.tagName) return false; + const tag = el.tagName.toLowerCase(); + const role = el.getAttribute('role'); + const className = el.getAttribute('class') || ''; + return ( + tag === 'kat-option' || + tag === 'kat-label' || + role === 'option' || + /parentKatOptionStyle/i.test(className) + ); +} + +function parseStatus(rawText) { + const text = normalize(rawText); + if (!text) return ''; + const match = text.match(/^(.*?)\s*[((]\s*[\d,]+\s*[))]\s*$/); + return normalize(match ? match[1] : text); +} + +function isListingStatusOption(row) { + const text = normalize(`${row.raw_text} ${row.value || ''}`); + const parsed = parseStatus(row.raw_text); + const haystack = normalize(`${text} ${parsed}`); + if (/^(所有|SKUS?|ASIN|FNSKU|UPC\/EAN|商品名称\/关键字)$|^(ALL|SKU|ASIN|FNSKU|TITLE_KEYWORD|GTIN)$/i.test(haystack)) { + return false; + } + return /^(全部|在售|不可售|详情页面已删除|订单页面已删除|商品信息草稿|缺少的信息|定价问题|需要批准|配送问题|缺少报价|已停售|在搜索结果中禁止显示)$/.test(parsed); +} + function optionRow(el, index) { const attrs = attrsOf(el); const rawText = textOf(el) || attrs.label || attrs.text || attrs.value || ''; @@ -46,33 +84,46 @@ function optionRow(el, index) { index, raw_text: rawText, value: attrs.value || attrs['data-value'] || attrs.name || null, + tag: (el.tagName || '').toLowerCase(), attrs, visible: isVisible(el), outerHTML: (el.outerHTML || '').slice(0, 1200), }; } -const markedDropdown = document.querySelector('[data-crawler-listing-status-dropdown="true"]'); +const markedDropdown = findMarkedDropdown(); let scoped = []; if (markedDropdown) { const roots = [markedDropdown]; if (markedDropdown.shadowRoot) roots.push(markedDropdown.shadowRoot); for (const root of roots) { - scoped = scoped.concat(Array.from(root.querySelectorAll('kat-option, [role="option"]'))); + scoped = scoped.concat(Array.from(root.querySelectorAll('kat-option, kat-label, [role="option"], [class*="parentKatOptionStyle"]'))); } } const allOptions = allElements().filter((el) => { - const tag = el.tagName.toLowerCase(); - const role = el.getAttribute('role'); - if (tag !== 'kat-option' && role !== 'option') return false; + if (!isOptionLike(el)) return false; if (insideListingRow(el)) return false; return isVisible(el); }); const byNode = new Map(); +const byStatus = new Map(); scoped.concat(allOptions).forEach((el, index) => { - if (!byNode.has(el)) byNode.set(el, optionRow(el, index)); + if (!byNode.has(el)) { + const row = optionRow(el, index); + if (isListingStatusOption(row)) { + byNode.set(el, row); + const parsed = parseStatus(row.raw_text); + const hasValue = Boolean(row.value); + const hasQuantity = /[((]\s*[\d,]+\s*[))]/.test(row.raw_text); + const quality = (hasValue ? 2 : 0) + (hasQuantity ? 1 : 0); + const existing = byStatus.get(parsed); + if (!existing || quality > existing.quality) { + byStatus.set(parsed, { row, quality }); + } + } + } }); -return Array.from(byNode.values()).filter((row) => row.raw_text); +return Array.from(byStatus.values()).map((item) => item.row).filter((row) => row.raw_text); diff --git a/app/amazon/scripts/patrol_delete/listing_status_select_option.js b/app/amazon/scripts/patrol_delete/listing_status_select_option.js index ad8ea14..fe01096 100644 --- a/app/amazon/scripts/patrol_delete/listing_status_select_option.js +++ b/app/amazon/scripts/patrol_delete/listing_status_select_option.js @@ -1,3 +1,5 @@ +const __crawlerPayload = arguments[0] || {}; + function textOf(node) { return ((node && (node.innerText || node.textContent || '')) || '').replace(/\s+/g, ' ').trim(); } @@ -9,6 +11,59 @@ function isVisible(el) { return rect.width > 0 && rect.height > 0 && style.display !== 'none' && style.visibility !== 'hidden'; } +function walkRoots(root, rows, seen) { + if (!root || seen.has(root)) return; + seen.add(root); + + const walker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT); + let node = walker.currentNode; + while (node) { + if (node.nodeType === Node.ELEMENT_NODE && node.tagName) rows.push(node); + if (node.shadowRoot) walkRoots(node.shadowRoot, rows, seen); + node = walker.nextNode(); + } +} + +function allElements() { + const rows = []; + walkRoots(document, rows, new Set()); + return rows; +} + +function findMarkedDropdown() { + return allElements().find((el) => el.getAttribute('data-crawler-listing-status-dropdown') === 'true') || null; +} + +function insideListingRow(el) { + return Boolean(el.closest('[data-sku], tr, [role="row"], [data-testid*="row"]')); +} + +function isOptionLike(el) { + if (!el || !el.tagName) return false; + const tag = el.tagName.toLowerCase(); + const role = el.getAttribute('role'); + const className = el.getAttribute('class') || ''; + return ( + tag === 'kat-option' || + tag === 'kat-label' || + role === 'option' || + /parentKatOptionStyle/i.test(className) + ); +} + +function isSearchFieldOption(meta) { + return /^(所有|SKUS?|ASIN|FNSKU|UPC\/EAN|商品名称\/关键字)$|^(ALL|SKU|ASIN|FNSKU|TITLE_KEYWORD|GTIN)$/i.test( + `${meta.rawText} ${meta.parsedStatus} ${meta.value}` + ); +} + +function isListingStatusOption(meta) { + if (isSearchFieldOption(meta)) return false; + return /^(全部|在售|不可售|详情页面已删除|订单页面已删除|商品信息草稿|缺少的信息|定价问题|需要批准|配送问题|缺少报价|已停售|在搜索结果中禁止显示)$/.test( + meta.parsedStatus + ); +} + function normalize(text) { return String(text || '').replace(/\s+/g, ' ').trim(); } @@ -31,24 +86,36 @@ function optionMeta(el, index) { }; } -const targetStatus = normalize((__crawlerPayload || {}).status); -const dropdown = document.querySelector('[data-crawler-listing-status-dropdown="true"]'); -if (!dropdown) { - return { ok: false, reason: 'marked dropdown missing', targetStatus }; +function clickTargetFor(el) { + if (!el) return el; + return el.closest('[class*="parentKatOptionStyle"], kat-option, [role="option"]') || el; } -const roots = [dropdown]; -if (dropdown.shadowRoot) roots.push(dropdown.shadowRoot); - +const targetStatus = normalize((__crawlerPayload || {}).status); +const dropdown = findMarkedDropdown(); const options = []; -for (const root of roots) { - for (const el of Array.from(root.querySelectorAll('kat-option, [role="option"]'))) { - if (!isVisible(el)) continue; + +if (dropdown) { + const roots = [dropdown]; + if (dropdown.shadowRoot) roots.push(dropdown.shadowRoot); + for (const root of roots) { + for (const el of Array.from(root.querySelectorAll('kat-option, kat-label, [role="option"], [class*="parentKatOptionStyle"]'))) { + options.push(el); + } + } +} + +if (!options.length) { + for (const el of allElements()) { + if (!isOptionLike(el)) continue; + if (!isVisible(el) || insideListingRow(el)) continue; options.push(el); } } -const metas = options.map((el, index) => ({ el, ...optionMeta(el, index) })); +const metas = options + .map((el, index) => ({ el, ...optionMeta(el, index) })) + .filter((item) => isListingStatusOption(item)); const matched = metas.find((item) => item.parsedStatus === targetStatus || item.rawText === targetStatus); if (!matched) { return { @@ -65,8 +132,9 @@ if (!matched) { }; } -matched.el.scrollIntoView({ block: 'center', inline: 'nearest' }); -matched.el.click(); +const clickTarget = clickTargetFor(matched.el); +clickTarget.scrollIntoView({ block: 'center', inline: 'nearest' }); +clickTarget.click(); return { ok: true, targetStatus, @@ -75,5 +143,6 @@ return { rawText: matched.rawText, parsedStatus: matched.parsedStatus, value: matched.value, + clickedTag: clickTarget.tagName, }, }; diff --git a/app/amazon/scripts/patrol_delete/recommended_offer_percentage_rows.js b/app/amazon/scripts/patrol_delete/recommended_offer_percentage_rows.js index e273a0f..32ec558 100644 --- a/app/amazon/scripts/patrol_delete/recommended_offer_percentage_rows.js +++ b/app/amazon/scripts/patrol_delete/recommended_offer_percentage_rows.js @@ -224,6 +224,64 @@ function scoreRegion(el) { return score; } +function isRelevantRatioRow(row) { + const combined = `${row.raw_text} ${row.label_text} ${row.percentage_text}`; + const hasDayLabels = /2\s*天前|30\s*天前|2\s*日前|30\s*日前|2\s*days?\s*ago|30\s*days?\s*ago/i.test(combined); + const hasCountries = /欧洲|英国|德国|法国|西班牙|意大利|Europe|UK|United Kingdom|Germany|France|Spain|Italy/i.test(combined); + if (!/%|2\s*天前|30\s*天前|2\s*日前|30\s*日前|2\s*days?\s*ago|30\s*days?\s*ago/i.test(combined) && !hasCountries) return false; + if (row.raw_text.length > 800 && !hasDayLabels && !hasCountries) return false; + return true; +} + +function collectRelevantRows(sourceElements) { + const byText = new Map(); + const scoped = []; + sourceElements.forEach((root) => walkRoots(root, scoped, new Set())); + scoped + .filter((el) => isVisible(el)) + .forEach((el, index) => { + const row = rowOf(el, index); + if (!isRelevantRatioRow(row)) return; + const combined = `${row.raw_text} ${row.label_text} ${row.percentage_text}`; + const key = `${combined}|${Math.round(row.rect_left)}|${Math.round(row.rect_top)}|${Math.round(row.rect_width)}|${Math.round(row.rect_height)}`; + if (!byText.has(key)) byText.set(key, row); + }); + return Array.from(byText.values()); +} + +function scrollableElements(elements) { + return elements.filter((el) => { + if (!el || !el.getBoundingClientRect || !isVisible(el)) return false; + const style = window.getComputedStyle(el); + if (!/(auto|scroll)/i.test(`${style.overflowY} ${style.overflow}`)) return false; + return el.scrollHeight > el.clientHeight + 20; + }); +} + +function collectRowsAcrossScroll(sourceElements, visibleElements) { + const targets = scrollableElements(visibleElements); + if (document.scrollingElement) targets.push(document.scrollingElement); + + const byKey = new Map(); + const originals = targets.map((target) => ({ target, top: target.scrollTop })); + for (const target of targets) { + const maxTop = Math.max(0, target.scrollHeight - target.clientHeight); + const positions = [...new Set([0, Math.floor(maxTop / 2), maxTop])]; + for (const position of positions) { + target.scrollTop = position; + collectRelevantRows(sourceElements).forEach((row) => { + const combined = `${row.raw_text} ${row.label_text} ${row.percentage_text}`; + const key = `${combined}|${Math.round(row.rect_left)}|${Math.round(row.rect_top)}|${Math.round(row.rect_width)}|${Math.round(row.rect_height)}`; + if (!byKey.has(key)) byKey.set(key, row); + }); + } + } + originals.forEach(({ target, top }) => { + target.scrollTop = top; + }); + return Array.from(byKey.values()); +} + const visible = allElements().filter((el) => isVisible(el)); const expandedCard = expandedCardOf(visible); const expandedDirectRows = directRowsFromExpandedCard(expandedCard); @@ -245,15 +303,10 @@ const scoped = []; sourceElements.forEach((root) => walkRoots(root, scoped, new Set())); const byText = new Map(); -scoped - .filter((el) => isVisible(el)) - .forEach((el, index) => { - const row = rowOf(el, index); +collectRelevantRows(sourceElements) + .concat(collectRowsAcrossScroll(sourceElements, visible)) + .forEach((row) => { const combined = `${row.raw_text} ${row.label_text} ${row.percentage_text}`; - const hasDayLabels = /2\s*天前|30\s*天前|2\s*日前|30\s*日前|2\s*days?\s*ago|30\s*days?\s*ago/i.test(combined); - const hasCountries = /欧洲|英国|德国|法国|西班牙|意大利|Europe|UK|United Kingdom|Germany|France|Spain|Italy/i.test(combined); - if (!/%|2\s*天前|30\s*天前|2\s*日前|30\s*日前|2\s*days?\s*ago|30\s*days?\s*ago/i.test(combined) && !hasCountries) return; - if (row.raw_text.length > 800 && !hasDayLabels && !hasCountries) return; const key = `${combined}|${Math.round(row.rect_left)}|${Math.round(row.rect_top)}|${Math.round(row.rect_width)}|${Math.round(row.rect_height)}`; if (!byText.has(key)) byText.set(key, row); }); diff --git a/app/blueprints/main.py b/app/blueprints/main.py index 8b3d19e..85cfd05 100644 --- a/app/blueprints/main.py +++ b/app/blueprints/main.py @@ -26,9 +26,15 @@ main_bp = Blueprint('main', __name__) def _resolve_asset_filename(filename): """Resolve hashed Vite assets without maintaining hardcoded alias tables.""" safe_name = os.path.basename(filename) - exact_path = os.path.join(ASSETS_DIR, safe_name) - if os.path.isfile(exact_path): - return safe_name + asset_dirs = [ + ASSETS_DIR, + os.path.abspath(os.path.join(BASE_DIR, 'new_web_source', 'assets')), + os.path.abspath(os.path.join(BASE_DIR, '..', 'new_web_source', 'assets')), + ] + for asset_dir in asset_dirs: + exact_path = os.path.join(asset_dir, safe_name) + if os.path.isfile(exact_path): + return safe_name base_name, ext = os.path.splitext(safe_name) if not base_name or not ext: @@ -38,9 +44,13 @@ def _resolve_asset_filename(filename): if len(parts) < 2: return safe_name - try: - asset_names = os.listdir(ASSETS_DIR) - except OSError: + asset_names = [] + for asset_dir in asset_dirs: + try: + asset_names.extend(os.listdir(asset_dir)) + except OSError: + continue + if not asset_names: return safe_name for prefix_length in range(len(parts) - 1, 0, -1): @@ -82,25 +92,30 @@ def wb(): return _render_html('index.html') -@main_bp.route('/brand') -@login_required -def brand_page(): - repo_brand_path = os.path.abspath(os.path.join(BASE_DIR, '..', 'web_source', 'brand.html')) - if os.path.isfile(repo_brand_path): - try: - with open(repo_brand_path, 'rb') as f: - raw = f.read() - try: - from html_crypto import decrypt - content = decrypt(raw).decode('utf-8') - except Exception: - if raw[:7] == b'gAAAAAB': - raise - content = raw.decode('utf-8', errors='replace') - return render_template_string(content, user_id=session.get('user_id')) - except Exception: - pass - return _render_html('brand.html', user_id=session.get('user_id')) +@main_bp.route('/brand') +@login_required +def brand_page(): + candidate_paths = [ + os.path.join(BASE_DIR, 'web_source', 'brand.html'), + os.path.abspath(os.path.join(BASE_DIR, '..', 'web_source', 'brand.html')), + ] + for candidate_path in candidate_paths: + if not os.path.isfile(candidate_path): + continue + try: + with open(candidate_path, 'rb') as f: + raw = f.read() + try: + from html_crypto import decrypt + content = decrypt(raw).decode('utf-8') + except Exception: + if raw[:7] == b'gAAAAAB': + raise + content = raw.decode('utf-8', errors='replace') + return render_template_string(content, user_id=session.get('user_id')) + except Exception: + continue + return _render_html('brand.html', user_id=session.get('user_id')) @main_bp.route('/brand/legacy') @@ -137,12 +152,19 @@ def serve_static(filename): def serve_assets(filename): """提供 static 目录及子目录下的静态文件访问。""" filename = _resolve_asset_filename(filename) - filepath = os.path.normpath(os.path.join(ASSETS_DIR, filename)) - static_abs = os.path.abspath(ASSETS_DIR) - file_abs = os.path.abspath(filepath) - if not file_abs.startswith(static_abs) or not os.path.isfile(file_abs): - return '', 404 - return send_file(file_abs, as_attachment=False) + candidate_dirs = [ + os.path.abspath(ASSETS_DIR), + os.path.abspath(os.path.join(BASE_DIR, 'new_web_source', 'assets')), + os.path.abspath(os.path.join(BASE_DIR, '..', 'new_web_source', 'assets')), + ] + for static_abs in candidate_dirs: + filepath = os.path.normpath(os.path.join(static_abs, filename)) + file_abs = os.path.abspath(filepath) + if not file_abs.startswith(static_abs): + continue + if os.path.isfile(file_abs): + return send_file(file_abs, as_attachment=False) + return '', 404 @main_bp.route('/new_web_source/') diff --git a/app/tests/test_amazon_base.py b/app/tests/test_amazon_base.py index 92f47a1..9c2a754 100644 --- a/app/tests/test_amazon_base.py +++ b/app/tests/test_amazon_base.py @@ -302,6 +302,23 @@ def test_switching_countries_clicks_and_verifies_target(monkeypatch): assert target.clicks == 1 +def test_open_country_dropdown_waits_for_delayed_country_list(monkeypatch): + monkeypatch.setattr(base.time, "sleep", lambda seconds: None) + dropdown = FakeElement() + first_item = FakeElement() + driver = base.AmamzonBase({}) + driver.tab = FakeTab( + ele_returns={ + 'xpath://div[@class="dropdown-account-switcher-header-label"]': [dropdown], + 'xpath://div[@class="dropdown-account-switcher-list-item"]': [None, first_item], + } + ) + + assert driver._open_country_dropdown() is True + assert dropdown.clicks == 2 + assert first_item.clicks == 1 + + def test_login_returns_true_when_otp_submit_succeeds(monkeypatch): monkeypatch.setattr(base.time, "sleep", lambda seconds: None) password_input = FakeElement() diff --git a/app/tests/test_patrol_delete.py b/app/tests/test_patrol_delete.py index 4afd51a..b59b617 100644 --- a/app/tests/test_patrol_delete.py +++ b/app/tests/test_patrol_delete.py @@ -1,4 +1,4 @@ -from amazon.patrol_delete import InventoryManage, ProductTask +from amazon.patrol_delete import InventoryManage, PatrolDeleteTask def test_patrol_delete_task_post_result_builds_patrol_delete_payload(monkeypatch): @@ -8,6 +8,9 @@ def test_patrol_delete_task_post_result_builds_patrol_delete_payload(monkeypatch status_code = 200 text = '{"success":true}' + def json(self): + return {"success": True} + def fake_post(url, **kwargs): captured["url"] = url captured["kwargs"] = kwargs @@ -24,7 +27,7 @@ def test_patrol_delete_task_post_result_builds_patrol_delete_payload(monkeypatch ] cart_ratios = [{"country": "德国", "ratio": "25%"}] - ProductTask().post_result( + PatrolDeleteTask().post_result( task_id=3089, shop_name="郭亚芳", country_sections=country_sections, @@ -50,6 +53,130 @@ def test_patrol_delete_task_post_result_builds_patrol_delete_payload(monkeypatch assert captured["kwargs"]["json"]["shops"][0]["submissionId"].startswith("patrol-delete:3089:郭亚芳:") +def test_patrol_delete_task_post_result_rejects_empty_success_payload(monkeypatch): + calls = [] + + def fake_post(url, **kwargs): + calls.append((url, kwargs)) + raise AssertionError("empty success payload must not be posted") + + monkeypatch.setattr("amazon.patrol_delete.requests.post", fake_post) + + try: + PatrolDeleteTask().post_result(task_id=3089, shop_name="郭亚芳", country_sections=[], cart_ratios=[]) + except RuntimeError as exc: + assert "缺少国家状态数据" in str(exc) + else: + raise AssertionError("expected empty success payload to fail") + + assert calls == [] + + +def test_patrol_delete_task_post_result_retries_business_failure(monkeypatch): + calls = [] + + class Response: + status_code = 200 + text = '{"success":false,"message":"bad payload"}' + + def json(self): + return {"success": False, "message": "bad payload"} + + def fake_post(url, **kwargs): + calls.append((url, kwargs)) + return Response() + + monkeypatch.setattr("config.DELETE_BRAND_API_BASE", "http://java.example") + monkeypatch.setattr("amazon.patrol_delete.requests.post", fake_post) + monkeypatch.setattr("amazon.patrol_delete.time.sleep", lambda seconds: None) + + try: + PatrolDeleteTask().post_result( + task_id=3089, + shop_name="郭亚芳", + country_sections=[{"country": "德国", "rows": [{"status": "全部", "quantity": "1"}]}], + cart_ratios=[{"country": "德国", "ratio": ""}], + ) + except RuntimeError as exc: + assert "最终失败" in str(exc) + else: + raise AssertionError("expected Java business failure to fail") + + assert len(calls) == 3 + + +def test_normalize_country_sections_omits_status_fields_for_complete_draft_rows(): + rows = PatrolDeleteTask._normalize_country_sections_for_result( + [ + { + "country": "意大利", + "rows": [ + { + "status": "商品信息草稿", + "quantity": "12", + "deleteQuantity": "3", + "processStatus": "已完成", + }, + { + "status": "缺少的信息", + "quantity": "1", + "deleteQuantity": "1", + "processStatus": "已完成", + }, + ], + } + ] + ) + + assert rows == [ + { + "country": "意大利", + "rows": [ + {"quantity": "12", "deleteQuantity": "3"}, + {"status": "缺少的信息", "quantity": "1", "deleteQuantity": "1", "processStatus": "已完成"}, + ], + } + ] + + +def test_replace_complete_draft_rows_uses_quick_view_rows(): + country_section = { + "country": "西班牙", + "rows": [ + {"status": "全部", "quantity": "6230", "deleteQuantity": "0", "processStatus": "无可删商品"}, + {"status": "商品信息草稿", "quantity": "", "deleteQuantity": "0", "processStatus": ""}, + ], + } + complete_draft_section = { + "country": "西班牙", + "rows": [ + {"type": "completeDraft", "quantity": "1", "deleteQuantity": "1"}, + {"type": "completeDraft", "quantity": "0", "deleteQuantity": "0"}, + ], + } + + merged = PatrolDeleteTask._replace_complete_draft_rows(country_section, complete_draft_section) + + assert merged == { + "country": "西班牙", + "rows": [ + {"status": "全部", "quantity": "6230", "deleteQuantity": "0", "processStatus": "无可删商品"}, + {"type": "completeDraft", "quantity": "1", "deleteQuantity": "1"}, + {"type": "completeDraft", "quantity": "0", "deleteQuantity": "0"}, + ], + } + assert PatrolDeleteTask._normalize_country_sections_for_result([merged]) == [ + { + "country": "西班牙", + "rows": [ + {"status": "全部", "quantity": "6230", "deleteQuantity": "0", "processStatus": "无可删商品"}, + {"quantity": "1", "deleteQuantity": "1"}, + {"quantity": "0", "deleteQuantity": "0"}, + ], + } + ] + + def test_patrol_delete_task_process_task_aggregates_country_results(monkeypatch): from config import runing_shop, runing_task @@ -104,16 +231,16 @@ def test_patrol_delete_task_process_task_aggregates_country_results(monkeypatch) "reopenRequired": True, } - monkeypatch.setattr(ProductTask, "open_shop", fake_open_shop) - monkeypatch.setattr(ProductTask, "process_country", fake_process_country) - monkeypatch.setattr(ProductTask, "post_result", fake_post_result) + monkeypatch.setattr(PatrolDeleteTask, "open_shop", fake_open_shop) + monkeypatch.setattr(PatrolDeleteTask, "process_country", fake_process_country) + monkeypatch.setattr(PatrolDeleteTask, "post_result", fake_post_result) country_sections = [ {"country": "德国", "rows": [{"status": "全部", "quantity": "", "deleteQuantity": "", "processStatus": ""}]}, {"country": "英国", "rows": [{"status": "全部", "quantity": "", "deleteQuantity": "", "processStatus": ""}]}, ] cart_ratios = [{"country": "德国", "ratio": ""}, {"country": "英国", "ratio": ""}] - ProductTask().process_task( + PatrolDeleteTask().process_task( { "type": "patrol-delete-run", "data": { @@ -173,10 +300,10 @@ def test_patrol_delete_task_process_task_skips_missing_required_data(monkeypatch def fake_post_result(self, **kwargs): calls.append(kwargs) - monkeypatch.setattr(ProductTask, "post_result", fake_post_result) + monkeypatch.setattr(PatrolDeleteTask, "post_result", fake_post_result) - ProductTask().process_task({"type": "patrol-delete-run", "data": {"items": [{"shopName": "郭亚芳"}]}}) - ProductTask().process_task({"type": "patrol-delete-run", "data": {"taskId": 1, "items": []}}) + PatrolDeleteTask().process_task({"type": "patrol-delete-run", "data": {"items": [{"shopName": "郭亚芳"}]}}) + PatrolDeleteTask().process_task({"type": "patrol-delete-run", "data": {"taskId": 1, "items": []}}) assert calls == [] @@ -194,10 +321,10 @@ def test_patrol_delete_task_reports_shop_error(monkeypatch): def fake_open_shop(self, **kwargs): return None - monkeypatch.setattr(ProductTask, "open_shop", fake_open_shop) - monkeypatch.setattr(ProductTask, "post_result", fake_post_result) + monkeypatch.setattr(PatrolDeleteTask, "open_shop", fake_open_shop) + monkeypatch.setattr(PatrolDeleteTask, "post_result", fake_post_result) - ProductTask().process_task( + PatrolDeleteTask().process_task( { "type": "patrol-delete-run", "data": { @@ -216,91 +343,121 @@ def test_patrol_delete_task_reports_shop_error(monkeypatch): assert calls == [{"task_id": 2, "shop_name": "郭亚芳", "error": "店铺 郭亚芳 打开失败", "shop_done": True}] -def test_delete_all_listings_from_non_whitelisted_statuses_loops_until_no_candidates(monkeypatch): +def test_delete_all_listings_from_non_whitelisted_statuses_deletes_each_row_in_status(monkeypatch): driver = InventoryManage({}) - sections = [ + status_rows = [ [ - { - "country": "德国", - "rows": [ - {"status": "商品信息草稿", "quantity": "2", "deleteQuantity": "", "processStatus": ""}, - {"status": "全部", "quantity": "9", "deleteQuantity": "", "processStatus": ""}, - ], - } + {"status": "商品信息草稿", "quantity": "2", "deleteQuantity": "", "processStatus": ""}, + {"status": "全部", "quantity": "9", "deleteQuantity": "", "processStatus": ""}, ], [ - { - "country": "德国", - "rows": [ - {"status": "商品信息草稿", "quantity": "1", "deleteQuantity": "", "processStatus": ""}, - {"status": "全部", "quantity": "8", "deleteQuantity": "", "processStatus": ""}, - ], - } - ], - [ - { - "country": "德国", - "rows": [ - {"status": "全部", "quantity": "7", "deleteQuantity": "", "processStatus": ""}, - ], - } - ], - [ - { - "country": "德国", - "rows": [ - {"status": "全部", "quantity": "7", "deleteQuantity": "", "processStatus": ""}, - ], - } + {"status": "全部", "quantity": "7", "deleteQuantity": "", "processStatus": ""}, ], ] state = {"index": 0, "selected": [], "deleted": 0} - def fake_get_listing_status_country_sections(shop_name, country): - current = sections[state["index"]] + def fake_read_listing_status_rows_for_delete(shop_name, country): + current = status_rows[min(state["index"], len(status_rows) - 1)] state["index"] += 1 return current def fake_select_listing_status(status): state["selected"].append(status) - def fake_get_first_inventory_row(status): - return {"sku": f"sku-{state['deleted'] + 1}"} + def fake_delete_selected_filtered_inventory_rows(status): + state["deleted"] += 2 + return { + "deletedCount": 2, + "target": {"sku": "bulk-selected", "rawText": "bulk-selected"}, + "successMessage": f"{status} 删除成功", + } - def fake_summarize_inventory_row(row): - return {"sku": row["sku"], "rawText": row["sku"]} - - def fake_delete_inventory_row(row, status): - state["deleted"] += 1 - return f"{status} 删除成功" - - monkeypatch.setattr(driver, "get_listing_status_country_sections", fake_get_listing_status_country_sections) + monkeypatch.setattr(driver, "_read_listing_status_rows_for_delete", fake_read_listing_status_rows_for_delete) monkeypatch.setattr(driver, "select_listing_status", fake_select_listing_status) - monkeypatch.setattr(driver, "_get_first_inventory_row", fake_get_first_inventory_row) - monkeypatch.setattr(driver, "_summarize_inventory_row", fake_summarize_inventory_row) - monkeypatch.setattr(driver, "_delete_inventory_row", fake_delete_inventory_row) + monkeypatch.setattr(driver, "_delete_selected_filtered_inventory_rows", fake_delete_selected_filtered_inventory_rows) monkeypatch.setattr(driver, "_wait_inventory_loader", lambda timeout=5: None) result = driver.delete_all_listings_from_non_whitelisted_statuses("郭亚芳", "德国") - assert state["selected"] == ["商品信息草稿", "商品信息草稿"] + assert state["selected"] == ["商品信息草稿"] assert state["deleted"] == 2 assert result["deleteCounts"] == {"商品信息草稿": 2} assert result["totalDeleted"] == 2 - assert result["stopReason"] == "no-candidates" + assert result["stopReason"] == "processed-candidates" assert result["statusRows"] == [{"status": "全部", "quantity": "7", "deleteQuantity": "", "processStatus": ""}] - assert [item["target"]["sku"] for item in result["results"]] == ["sku-1", "sku-2"] + assert [item["target"]["sku"] for item in result["results"]] == ["bulk-selected"] + + +def test_select_listing_status_uses_dropdown_option_not_visible_status(monkeypatch): + driver = InventoryManage({}) + calls = [] + + monkeypatch.setattr(driver, "open_listing_status_dropdown", lambda: calls.append("open") or {"ok": True}) + monkeypatch.setattr(driver, "_wait_inventory_loader", lambda timeout=5: None) + monkeypatch.setattr(driver, "_run_js", lambda script, *args: calls.append((script, args)) or {"ok": True}) + monkeypatch.setattr("amazon.patrol_delete.time.sleep", lambda seconds: None) + + result = driver.select_listing_status("商品信息草稿") + + assert result["mode"] == "dropdown-option" + assert calls[0] == "open" + assert calls[-1][1] == ({"status": "商品信息草稿"},) + + +def test_get_listing_status_dropdown_options_closes_dropdown_after_read(monkeypatch): + driver = InventoryManage({}) + calls = [] + + monkeypatch.setattr(driver, "open_listing_status_dropdown", lambda: calls.append("open") or {"ok": True}) + monkeypatch.setattr( + driver, + "_wait_listing_status_option_rows", + lambda: calls.append("read") or [{"raw_text": "详情页面已删除 (1)", "value": "DetailPageRemoved"}], + ) + monkeypatch.setattr(driver, "_close_listing_status_dropdown", lambda: calls.append("close")) + + rows = driver.get_listing_status_dropdown_options("郭亚芳", "德国") + + assert calls == ["open", "read", "close"] + assert rows[0]["status"] == "详情页面已删除" + + +def test_open_listing_status_dropdown_waits_until_component_enabled(monkeypatch): + driver = InventoryManage({}) + calls = [] + + class Wait: + def doc_loaded(self, raise_err=False): + calls.append("doc_loaded") + + class Tab: + wait = Wait() + + responses = [ + {"ok": False, "reason": "listing status dropdown disabled/loading"}, + {"ok": True, "selected": {"text": "全部在售不可售商品信息草稿"}}, + ] + + driver.tab = Tab() + monkeypatch.setattr(driver, "_wait_inventory_loader", lambda timeout=5: calls.append(("loader", timeout))) + monkeypatch.setattr(driver, "_run_js", lambda script: calls.append("js") or responses.pop(0)) + monkeypatch.setattr("amazon.patrol_delete.time.sleep", lambda seconds: calls.append(("sleep", seconds))) + + result = driver.open_listing_status_dropdown() + + assert result["ok"] is True + assert calls.count("js") == 2 def test_extract_country_cart_ratio_prefers_ratio2daysago_only(): - ratio = ProductTask._extract_country_cart_ratio( + ratio = PatrolDeleteTask._extract_country_cart_ratio( [ {"country": "德国", "ratio2DaysAgo": "25%", "ratio30DaysAgo": "19%"}, {"country": "英国", "ratio30DaysAgo": "40%"}, ], "德国", ) - missing_ratio2 = ProductTask._extract_country_cart_ratio( + missing_ratio2 = PatrolDeleteTask._extract_country_cart_ratio( [{"country": "英国", "ratio30DaysAgo": "40%"}], "英国", ) @@ -455,6 +612,20 @@ def test_build_deletable_status_rows_keeps_non_whitelisted_statuses(): ] +def test_build_deletable_status_rows_skips_group_labels_without_quantity(): + rows = [ + {"status": "商品信息草稿", "quantity": ""}, + {"status": "详情页面已删除", "quantity": None}, + {"status": "自定义异常状态", "quantity": "0"}, + {"status": "缺少的信息", "quantity": "1"}, + {"status": "全部", "quantity": ""}, + ] + + assert InventoryManage._build_deletable_status_rows(rows) == [ + {"status": "缺少的信息", "canonicalStatus": "缺少的信息", "quantity": 1}, + ] + + def test_build_deletable_status_rows_compatibility_map_prevents_whitelist_misdelete(): rows = [ {"status": "搜尋結果中禁止顯示", "quantity": "4"}, @@ -480,20 +651,43 @@ def test_build_deletable_status_rows_keeps_legacy_non_whitelist_statuses_deletab ] -def test_limit_delete_candidates_enforces_single_delete_cap(): - candidates = [ - {"status": "商品信息草稿", "canonicalStatus": "商品信息草稿", "quantity": 2}, - {"status": "自定义异常状态", "canonicalStatus": "自定义异常状态", "quantity": 5}, - ] - - assert InventoryManage._limit_delete_candidates(candidates, max_delete_count=1) == [candidates[0]] - - def test_is_delete_success_message_accepts_both_copy_variants(): assert InventoryManage._is_delete_success_message("1 个商品已经删除。所作更改需要15分钟才会显示在商品详情页面上") assert InventoryManage._is_delete_success_message("所做更改需要 15 分钟才会显示在商品详情页面上。 1 个商品已删除。") +def test_extract_delete_success_count_accepts_success_message(): + assert InventoryManage._extract_delete_success_count("所做更改需要 15 分钟才会显示在商品详情页面上。 3 个商品已删除。") == 3 + + +def test_build_country_section_result_sets_zero_delete_quantity_when_no_deletable_products(): + section = PatrolDeleteTask._build_country_section_result( + country_name="德国", + status_rows=[{"status": "全部", "quantity": "12"}], + delete_counts={}, + default_process_status="无可删商品", + ) + + assert section == { + "country": "德国", + "rows": [{"status": "全部", "quantity": "12", "deleteQuantity": "0", "processStatus": "无可删商品"}], + } + + +def test_build_country_section_result_sets_zero_delete_quantity_for_empty_no_deletable_result(): + section = PatrolDeleteTask._build_country_section_result( + country_name="德国", + status_rows=[], + delete_counts={}, + default_process_status="无可删商品", + ) + + assert section == { + "country": "德国", + "rows": [{"status": "全部", "quantity": "", "deleteQuantity": "0", "processStatus": "无可删商品"}], + } + + def test_parse_label_quantity_text_accepts_complete_draft_sample(): assert InventoryManage._parse_label_quantity_text("未提交的草稿 (0)") == ("未提交的草稿", 0) From 46e55fa6237588bd9adbc9a60f285dda472399bc Mon Sep 17 00:00:00 2001 From: koko Date: Tue, 28 Apr 2026 20:57:53 +0800 Subject: [PATCH 11/18] Stop tracking generated Python bytecode Generated __pycache__ files were already ignored in some paths but remained tracked in the repository, which caused merge noise and binary conflicts. This removes the tracked bytecode from the index and adds an explicit recursive ignore rule so future Python runs do not reintroduce them. Constraint: Existing repository history already tracked pycache files across app, backend, and source_code Rejected: Delete local pycache directories from disk | only repository tracking needed to be removed Confidence: high Scope-risk: narrow Directive: Do not force-add __pycache__ or *.pyc files unless there is a documented runtime packaging reason Tested: git ls-files shows no remaining paths containing __pycache__/ Not-tested: Application runtime; change only affects tracked generated artifacts and ignore rules --- .gitignore | 1 + app/__pycache__/ali_oss.cpython-312.pyc | Bin 3864 -> 0 bytes app/__pycache__/app.cpython-312.pyc | Bin 2765 -> 0 bytes app/__pycache__/app_common.cpython-312.pyc | Bin 16450 -> 0 bytes app/__pycache__/config.cpython-312.pyc | Bin 3047 -> 0 bytes app/__pycache__/html_crypto.cpython-312.pyc | Bin 3452 -> 0 bytes app/__pycache__/main.cpython-312.pyc | Bin 23695 -> 0 bytes .../__pycache__/approve - 副本.cpython-312.pyc | Bin 45174 -> 0 bytes app/amazon/__pycache__/approve.cpython-312.pyc | Bin 56379 -> 0 bytes app/amazon/__pycache__/approve.cpython-39.pyc | Bin 32692 -> 0 bytes .../__pycache__/asin_status.cpython-312.pyc | Bin 32106 -> 0 bytes .../__pycache__/asin_status.cpython-39.pyc | Bin 18497 -> 0 bytes .../__pycache__/backend_api.cpython-312.pyc | Bin 122 -> 0 bytes .../__pycache__/del_brand.cpython-312.pyc | Bin 30776 -> 0 bytes .../__pycache__/del_brand.cpython-39.pyc | Bin 18506 -> 0 bytes .../__pycache__/detail_spider.cpython-312.pyc | Bin 20988 -> 0 bytes .../__pycache__/detail_spider.cpython-39.pyc | Bin 52967 -> 0 bytes app/amazon/__pycache__/main.cpython-312.pyc | Bin 30167 -> 0 bytes app/amazon/__pycache__/main.cpython-39.pyc | Bin 17787 -> 0 bytes .../__pycache__/match_action.cpython-312.pyc | Bin 33840 -> 0 bytes .../__pycache__/match_action.cpython-39.pyc | Bin 19276 -> 0 bytes .../__pycache__/price_match.cpython-312.pyc | Bin 61295 -> 0 bytes .../__pycache__/price_match.cpython-39.pyc | Bin 34250 -> 0 bytes app/amazon/__pycache__/tool.cpython-312.pyc | Bin 6536 -> 0 bytes app/amazon/__pycache__/tool.cpython-39.pyc | Bin 5415 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 162 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 149 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 141 -> 0 bytes .../__pycache__/admin.cpython-311.pyc | Bin 21814 -> 0 bytes .../__pycache__/admin.cpython-312.pyc | Bin 21082 -> 0 bytes .../__pycache__/admin.cpython-39.pyc | Bin 11771 -> 0 bytes .../__pycache__/auth.cpython-311.pyc | Bin 7498 -> 0 bytes .../__pycache__/auth.cpython-312.pyc | Bin 6264 -> 0 bytes app/blueprints/__pycache__/auth.cpython-39.pyc | Bin 3317 -> 0 bytes .../__pycache__/brand.cpython-311.pyc | Bin 45865 -> 0 bytes .../__pycache__/brand.cpython-312.pyc | Bin 35720 -> 0 bytes .../__pycache__/brand.cpython-39.pyc | Bin 20960 -> 0 bytes .../__pycache__/brand_备份.cpython-312.pyc | Bin 35533 -> 0 bytes .../__pycache__/communication.cpython-312.pyc | Bin 4092 -> 0 bytes .../__pycache__/communication.cpython-39.pyc | Bin 2432 -> 0 bytes .../__pycache__/image.cpython-311.pyc | Bin 20393 -> 0 bytes .../__pycache__/image.cpython-312.pyc | Bin 22268 -> 0 bytes .../__pycache__/image.cpython-39.pyc | Bin 12194 -> 0 bytes .../__pycache__/main.cpython-311.pyc | Bin 4528 -> 0 bytes .../__pycache__/main.cpython-312.pyc | Bin 8810 -> 0 bytes app/blueprints/__pycache__/main.cpython-39.pyc | Bin 4776 -> 0 bytes .../__pycache__/main.cpython-311.pyc | Bin 23102 -> 0 bytes .../__pycache__/main.cpython-312.pyc | Bin 21707 -> 0 bytes .../__pycache__/main.cpython-39.pyc | Bin 13427 -> 0 bytes .../__pycache__/web_dec.cpython-311.pyc | Bin 6427 -> 0 bytes .../__pycache__/web_dec.cpython-312.pyc | Bin 5890 -> 0 bytes .../__pycache__/web_dec.cpython-39.pyc | Bin 4723 -> 0 bytes app/tool/__pycache__/devices.cpython-311.pyc | Bin 12348 -> 0 bytes app/tool/__pycache__/devices.cpython-312.pyc | Bin 10550 -> 0 bytes app/tool/__pycache__/devices.cpython-39.pyc | Bin 7283 -> 0 bytes backend/__pycache__/ali_oss.cpython-311.pyc | Bin 1764 -> 0 bytes backend/__pycache__/ali_oss.cpython-312.pyc | Bin 1514 -> 0 bytes backend/__pycache__/ali_oss.cpython-39.pyc | Bin 988 -> 0 bytes backend/__pycache__/app.cpython-311.pyc | Bin 2119 -> 0 bytes backend/__pycache__/config.cpython-311.pyc | Bin 1262 -> 0 bytes backend/__pycache__/config.cpython-312.pyc | Bin 1517 -> 0 bytes backend/__pycache__/config.cpython-39.pyc | Bin 1043 -> 0 bytes backend/__pycache__/db.cpython-311.pyc | Bin 7450 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 159 -> 0 bytes .../__pycache__/__init__.cpython-312.pyc | Bin 153 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 127 -> 0 bytes .../__pycache__/admin_api.cpython-311.pyc | Bin 26163 -> 0 bytes .../__pycache__/admin_api.cpython-312.pyc | Bin 108369 -> 0 bytes .../__pycache__/admin_api.cpython-39.pyc | Bin 16876 -> 0 bytes .../__pycache__/admin_history.cpython-311.pyc | Bin 5445 -> 0 bytes .../__pycache__/admin_users.cpython-311.pyc | Bin 16921 -> 0 bytes .../__pycache__/admin_versions.cpython-311.pyc | Bin 5607 -> 0 bytes .../__pycache__/auth.cpython-311.pyc | Bin 5312 -> 0 bytes .../__pycache__/auth.cpython-312.pyc | Bin 5554 -> 0 bytes .../blueprints/__pycache__/auth.cpython-39.pyc | Bin 2461 -> 0 bytes .../__pycache__/main.cpython-311.pyc | Bin 2820 -> 0 bytes .../__pycache__/main.cpython-312.pyc | Bin 2434 -> 0 bytes .../blueprints/__pycache__/main.cpython-39.pyc | Bin 1448 -> 0 bytes .../__pycache__/version.cpython-312.pyc | Bin 2059 -> 0 bytes .../__pycache__/version.cpython-39.pyc | Bin 1333 -> 0 bytes .../tool/__pycache__/devices.cpython-39.pyc | Bin 7380 -> 0 bytes .../utils/__pycache__/__init__.cpython-311.pyc | Bin 154 -> 0 bytes .../utils/__pycache__/__init__.cpython-312.pyc | Bin 148 -> 0 bytes .../utils/__pycache__/__init__.cpython-39.pyc | Bin 122 -> 0 bytes backend/utils/__pycache__/auth.cpython-311.pyc | Bin 5806 -> 0 bytes backend/utils/__pycache__/auth.cpython-312.pyc | Bin 5017 -> 0 bytes backend/utils/__pycache__/auth.cpython-39.pyc | Bin 2788 -> 0 bytes backend/utils/__pycache__/db.cpython-311.pyc | Bin 7457 -> 0 bytes backend/utils/__pycache__/db.cpython-312.pyc | Bin 8671 -> 0 bytes backend/utils/__pycache__/db.cpython-39.pyc | Bin 5172 -> 0 bytes .../utils/__pycache__/helpers.cpython-311.pyc | Bin 1955 -> 0 bytes .../utils/__pycache__/render.cpython-311.pyc | Bin 1851 -> 0 bytes .../utils/__pycache__/render.cpython-312.pyc | Bin 1608 -> 0 bytes .../utils/__pycache__/render.cpython-39.pyc | Bin 977 -> 0 bytes source_code/__pycache__/app.cpython-314.pyc | Bin 2046 -> 0 bytes source_code/__pycache__/config.cpython-314.pyc | Bin 1939 -> 0 bytes source_code/__pycache__/main.cpython-314.pyc | Bin 17624 -> 0 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 162 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 144 -> 0 bytes .../__pycache__/admin.cpython-311.pyc | Bin 21814 -> 0 bytes .../__pycache__/admin.cpython-39.pyc | Bin 11271 -> 0 bytes .../__pycache__/auth.cpython-311.pyc | Bin 7498 -> 0 bytes .../blueprints/__pycache__/auth.cpython-39.pyc | Bin 3320 -> 0 bytes .../__pycache__/brand.cpython-311.pyc | Bin 24298 -> 0 bytes .../__pycache__/brand.cpython-39.pyc | Bin 25387 -> 0 bytes .../__pycache__/image.cpython-311.pyc | Bin 20393 -> 0 bytes .../__pycache__/image.cpython-39.pyc | Bin 12197 -> 0 bytes .../__pycache__/main.cpython-311.pyc | Bin 4528 -> 0 bytes .../blueprints/__pycache__/main.cpython-39.pyc | Bin 2360 -> 0 bytes .../__pycache__/main.cpython-39.pyc | Bin 15429 -> 0 bytes .../__pycache__/web_dec.cpython-39.pyc | Bin 4726 -> 0 bytes .../tool/__pycache__/devices.cpython-311.pyc | Bin 12348 -> 0 bytes .../tool/__pycache__/devices.cpython-39.pyc | Bin 7288 -> 0 bytes 113 files changed, 1 insertion(+) delete mode 100644 app/__pycache__/ali_oss.cpython-312.pyc delete mode 100644 app/__pycache__/app.cpython-312.pyc delete mode 100644 app/__pycache__/app_common.cpython-312.pyc delete mode 100644 app/__pycache__/config.cpython-312.pyc delete mode 100644 app/__pycache__/html_crypto.cpython-312.pyc delete mode 100644 app/__pycache__/main.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/approve - 副本.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/approve.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/approve.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/asin_status.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/asin_status.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/backend_api.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/del_brand.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/del_brand.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/detail_spider.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/detail_spider.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/main.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/main.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/match_action.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/match_action.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/price_match.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/price_match.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/tool.cpython-312.pyc delete mode 100644 app/amazon/__pycache__/tool.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/__init__.cpython-311.pyc delete mode 100644 app/blueprints/__pycache__/__init__.cpython-312.pyc delete mode 100644 app/blueprints/__pycache__/__init__.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/admin.cpython-311.pyc delete mode 100644 app/blueprints/__pycache__/admin.cpython-312.pyc delete mode 100644 app/blueprints/__pycache__/admin.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/auth.cpython-311.pyc delete mode 100644 app/blueprints/__pycache__/auth.cpython-312.pyc delete mode 100644 app/blueprints/__pycache__/auth.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/brand.cpython-311.pyc delete mode 100644 app/blueprints/__pycache__/brand.cpython-312.pyc delete mode 100644 app/blueprints/__pycache__/brand.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/brand_备份.cpython-312.pyc delete mode 100644 app/blueprints/__pycache__/communication.cpython-312.pyc delete mode 100644 app/blueprints/__pycache__/communication.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/image.cpython-311.pyc delete mode 100644 app/blueprints/__pycache__/image.cpython-312.pyc delete mode 100644 app/blueprints/__pycache__/image.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/main.cpython-311.pyc delete mode 100644 app/blueprints/__pycache__/main.cpython-312.pyc delete mode 100644 app/blueprints/__pycache__/main.cpython-39.pyc delete mode 100644 app/brand_spider/__pycache__/main.cpython-311.pyc delete mode 100644 app/brand_spider/__pycache__/main.cpython-312.pyc delete mode 100644 app/brand_spider/__pycache__/main.cpython-39.pyc delete mode 100644 app/brand_spider/__pycache__/web_dec.cpython-311.pyc delete mode 100644 app/brand_spider/__pycache__/web_dec.cpython-312.pyc delete mode 100644 app/brand_spider/__pycache__/web_dec.cpython-39.pyc delete mode 100644 app/tool/__pycache__/devices.cpython-311.pyc delete mode 100644 app/tool/__pycache__/devices.cpython-312.pyc delete mode 100644 app/tool/__pycache__/devices.cpython-39.pyc delete mode 100644 backend/__pycache__/ali_oss.cpython-311.pyc delete mode 100644 backend/__pycache__/ali_oss.cpython-312.pyc delete mode 100644 backend/__pycache__/ali_oss.cpython-39.pyc delete mode 100644 backend/__pycache__/app.cpython-311.pyc delete mode 100644 backend/__pycache__/config.cpython-311.pyc delete mode 100644 backend/__pycache__/config.cpython-312.pyc delete mode 100644 backend/__pycache__/config.cpython-39.pyc delete mode 100644 backend/__pycache__/db.cpython-311.pyc delete mode 100644 backend/blueprints/__pycache__/__init__.cpython-311.pyc delete mode 100644 backend/blueprints/__pycache__/__init__.cpython-312.pyc delete mode 100644 backend/blueprints/__pycache__/__init__.cpython-39.pyc delete mode 100644 backend/blueprints/__pycache__/admin_api.cpython-311.pyc delete mode 100644 backend/blueprints/__pycache__/admin_api.cpython-312.pyc delete mode 100644 backend/blueprints/__pycache__/admin_api.cpython-39.pyc delete mode 100644 backend/blueprints/__pycache__/admin_history.cpython-311.pyc delete mode 100644 backend/blueprints/__pycache__/admin_users.cpython-311.pyc delete mode 100644 backend/blueprints/__pycache__/admin_versions.cpython-311.pyc delete mode 100644 backend/blueprints/__pycache__/auth.cpython-311.pyc delete mode 100644 backend/blueprints/__pycache__/auth.cpython-312.pyc delete mode 100644 backend/blueprints/__pycache__/auth.cpython-39.pyc delete mode 100644 backend/blueprints/__pycache__/main.cpython-311.pyc delete mode 100644 backend/blueprints/__pycache__/main.cpython-312.pyc delete mode 100644 backend/blueprints/__pycache__/main.cpython-39.pyc delete mode 100644 backend/blueprints/__pycache__/version.cpython-312.pyc delete mode 100644 backend/blueprints/__pycache__/version.cpython-39.pyc delete mode 100644 backend/tool/__pycache__/devices.cpython-39.pyc delete mode 100644 backend/utils/__pycache__/__init__.cpython-311.pyc delete mode 100644 backend/utils/__pycache__/__init__.cpython-312.pyc delete mode 100644 backend/utils/__pycache__/__init__.cpython-39.pyc delete mode 100644 backend/utils/__pycache__/auth.cpython-311.pyc delete mode 100644 backend/utils/__pycache__/auth.cpython-312.pyc delete mode 100644 backend/utils/__pycache__/auth.cpython-39.pyc delete mode 100644 backend/utils/__pycache__/db.cpython-311.pyc delete mode 100644 backend/utils/__pycache__/db.cpython-312.pyc delete mode 100644 backend/utils/__pycache__/db.cpython-39.pyc delete mode 100644 backend/utils/__pycache__/helpers.cpython-311.pyc delete mode 100644 backend/utils/__pycache__/render.cpython-311.pyc delete mode 100644 backend/utils/__pycache__/render.cpython-312.pyc delete mode 100644 backend/utils/__pycache__/render.cpython-39.pyc delete mode 100644 source_code/__pycache__/app.cpython-314.pyc delete mode 100644 source_code/__pycache__/config.cpython-314.pyc delete mode 100644 source_code/__pycache__/main.cpython-314.pyc delete mode 100644 source_code/blueprints/__pycache__/__init__.cpython-311.pyc delete mode 100644 source_code/blueprints/__pycache__/__init__.cpython-39.pyc delete mode 100644 source_code/blueprints/__pycache__/admin.cpython-311.pyc delete mode 100644 source_code/blueprints/__pycache__/admin.cpython-39.pyc delete mode 100644 source_code/blueprints/__pycache__/auth.cpython-311.pyc delete mode 100644 source_code/blueprints/__pycache__/auth.cpython-39.pyc delete mode 100644 source_code/blueprints/__pycache__/brand.cpython-311.pyc delete mode 100644 source_code/blueprints/__pycache__/brand.cpython-39.pyc delete mode 100644 source_code/blueprints/__pycache__/image.cpython-311.pyc delete mode 100644 source_code/blueprints/__pycache__/image.cpython-39.pyc delete mode 100644 source_code/blueprints/__pycache__/main.cpython-311.pyc delete mode 100644 source_code/blueprints/__pycache__/main.cpython-39.pyc delete mode 100644 source_code/brand_spider/__pycache__/main.cpython-39.pyc delete mode 100644 source_code/brand_spider/__pycache__/web_dec.cpython-39.pyc delete mode 100644 source_code/tool/__pycache__/devices.cpython-311.pyc delete mode 100644 source_code/tool/__pycache__/devices.cpython-39.pyc diff --git a/.gitignore b/.gitignore index 0eb1730..ff4665c 100644 --- a/.gitignore +++ b/.gitignore @@ -32,6 +32,7 @@ aiimage-backend.log* # ===== Python ===== __pycache__/ +**/__pycache__/ *.py[cod] *$py.class *.pyo diff --git a/app/__pycache__/ali_oss.cpython-312.pyc b/app/__pycache__/ali_oss.cpython-312.pyc deleted file mode 100644 index eba58bb52565164f8f39c42028e9ede1ea3c6024..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3864 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 Dk+PfQ diff --git a/app/__pycache__/app_common.cpython-312.pyc b/app/__pycache__/app_common.cpython-312.pyc deleted file mode 100644 index 5b2db77d3382ad07497a5b760daeb9c289c37b0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16450 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 diff --git a/app/__pycache__/config.cpython-312.pyc b/app/__pycache__/config.cpython-312.pyc deleted file mode 100644 index 0e592c6a727d1a35d1caebaad4ef4006c23006c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3047 zcmaJ@&u}jjPjlHWOjp%x>>Z`B5 z_v%%5|I=o(5cq0>bN(OL`bBlL%XDGjo*1f&arVSmfvp?WU{91CIJ&5zo~VKDde<;!xF^mD z1~sL|F^V{}d(?WyxV znAdcEZNCn7G%c5{wwJ(rOfYl6$J~b&9EtzEo|%XDd#It?k<9lP4P0m?HEzbs6O0f4 z{T1VEP#(#aN=4~`&&L&cZ@M5uZ(8sj(`Z%VN-P}^b{G8dMB(|Hs3@*}o7!8*C07b% zkUBbC-`h?XvnxwWPc{N@f43sP$xDX|M-h5=_1hqncQZ#!2n~f7{gDVASPX_D;qa2* z9}EPv&R`@QT!;jNe*cm`{HvOT#HhG%vIIqB@AMZrNqSun0UFrdek!IymBnmg zO~$v1h5%fNQ&&R$9M9*u3`FLlSa?%WS4NhOnJ)nNtNNTmR655)p~MPY9wI_Ec;Oo; zTRNSpjcfvMOmO)vEMB*z3nX`T-sBNBlU-{<3gX#vvn%EU@W9zQ_p`L}6Q% z-=Dx)EoeM3XU@^7_=7tQwC@rG@z{CuHPo zp)8LVBx(LihnLIom9mhQ@ZRTThrkIUKhN>=?dT=sTHB7sL#0HqaxA}0$V>YH@Qf3s zd<0FTHj|9-^w~lv#79bUWjzDA?DPDN{5qel2(oPLP_=n{GO1OWJmLMC0v~d&CzEV+ zWhI827qLAyzKVwbuPYf_*@|tWTLA3ur^9I)_yf2Mz)~o*0KzGp(NrKr)2T&d=^#}e zWCSo(&LHDHmy_VE0qJODD2ceV`YKRD`hp;vXuKz(MR`a)3ch0~N_;`^<+u{WBBHnf=4yyF31WJ;COhY%;1OQ)eEy?~WCK#s1HglSP7?Vvg&)^@O1 z6I&GVF~v#ZMa*f$nTDcxOI@@7V(Y{i)pI;gt|!>-Xz~TSxf9#LBE_=63mLY=NrzoW z$`*=$Cw{{di2uwyeeen&^#hnLy-JJR>l_s4i@9=!7hZA2;;VE)*yl6eVg->8@w1?u zgO9}oo~J$%q%i(KI`7lzbS=tLC0n*+)zY$is#I(EUV|9?g)sj_O#DP#|3XlIwzaIo zCr{4er}5fBWAc$=eOxuSDBD^1G<>#vx?B%@2)_$|Sbn$sF`|quC{(CQo|_2!^^>i$ zz0R;#vun+V!0?DwkF7yEGS zP_a*8mMdejVh>a)9I|_=uK!?uXKqX_{rE_6#T&%1nusy1&pc8!wWwK~Y4a$y>~}H6 zV4&(~*|DUbo$mT{-PM>}ZaDr}wVsoN$6M9^#qyn{K}|G?o2}`P=1w&UPiyQ^$31!2 zBwTm}^Wcg8%zSFD&D6sR>G@2~Hpy9qocm1DO_El~U?aTQAUCVVmSwQo-@10A_J_s< y-EanQe#bo*T#uTByLEG3TWG9FjQ@)yhFpK0sXES0dWRl|ND>a`ca*q>3+TTtNC|8J diff --git a/app/__pycache__/html_crypto.cpython-312.pyc b/app/__pycache__/html_crypto.cpython-312.pyc deleted file mode 100644 index 0f65febf6f7e8e1c0c1854f7b94464e858669ecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3452 zcmd^BU2Gf25#IYHkCdn%Oa77Db=jWj}1yAKkK9*(@DM42Ml zy<=ns63V8oBE_;qRkletNv-@CaqCuci!@Ct*+!oGqCf$vULBx7b(Hi{v!wwSe(LNU zkCq%aed|k);LhyK-0tnnH?#A{>S_;yM~_^OHnB1kfYd7Cmdwbk| z+5C0heD%uhh4HnUSr8U-AKI&#*@?nOzb#yv_N)`8$VOp`Vii6bAb@;p8FCLek@8}i_AKX|ycS*FJ3!xfW z|LJ8Ck29AGZ~k&^_QvYXM>HKp88*kNb&$Ujq zPPZ-B)Gb%~oPu@MBdiTs6 zUGfGN*+2<)L53$8lOYI-tjpmt)QH?l87pnNU;=4V(K)~#rgWmWo*~Ks-7q~wKP-uc zkYfR`q*717Yvt^pxMaS6rf~jR;q0tc1J0Rm{G8O13$NW?7`6O+dtuDaSl+>8M-ouW ziy-_enKR%#gNis|z)c{;k2(WkwB0ZekM3CV?93d#<@SwgXS|uVjv+WT!DeHZk&`~L>e}%O+qGJfICZ||Fg{)#%K?#_ap9+R(#ripKP)M&7;2%~B z*)Ve-eXu^`SeMtY6l7<0D5i{qHn!Bo9btA3+!iw(BQ26G=vH$ zH5PPGZA1&_MpaoMMWRq{0-$S!zt#-{0A8pbRkF{0ChW++v|L-4r2tbVpGxShFPA8ckm+0F%b zxjt#;f~~IqYm^)Xx7a8tXYpo~I8|-D(%-DiU#>vsL7?Ehuv!;>97X_y9|+z@1}lxf zW=ktD!6fLIRMiLJQLYU(JobY@J283)JQ^Bvol~9DM@9u39#vbiN0+J|$#gsnAKbX_ zKf?pJ!4?Mlg)4;s*Sb;;0Fy%k^gN`uYJ!wL3CBE!_H5|Rnh|D5f~MI)R8B)KMI5|3 zn=#LxH?wo30a=)Y9K7GRSZR4#4DIa=l4q|-`jq!RAQy>sr;Do#7glF}1f3<^DP8NN za%g0*%@1`#J1KOW3ad%dM))aAK2#$&pOb7+&1q&-1rtwxn^=&zWKfZ1xW?t0E!jia zmqt(J4}MzHvgmI4*DY_uKM}<>{<)^1$N;^kRe|}dE)RNL*vg!zwle;D!zD>dA}mR` z5pUiYvew;6aAq)?j;*4C33LoLlt{#^bN>QaSA$)H+}|947A~fK3lnz`e`zBy zz;P++A2dU;B@d!}e?fwY9{U{a{~SGAgcN-&)spWZ xqLvwzh+2w1p4yq!iU>$vFA-9#=c#SBXqzqCR;=f!#%!vHfXp=9A;kL5e*+p8s{{Z5 diff --git a/app/__pycache__/main.cpython-312.pyc b/app/__pycache__/main.cpython-312.pyc deleted file mode 100644 index c6b2c4d839af55b7a7a57728cf4747979df63a9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23695 zcmeHvdw3L8+GkaFRbQ(w=}yR z92gTt2`ic~qQo8i3_}#=8+Sy(D>&=!%sx-I36rMHJnOFM1a|)r!5LlWdG^`&J=Im! zX_}xje&6mNdjfBrI_K1>Q>V{)FTeAi^9Pg3KtXuvg$eI}uBNCj@J0⪼wn&RTR}r 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 B>M;NS diff --git a/app/amazon/__pycache__/approve - 副本.cpython-312.pyc b/app/amazon/__pycache__/approve - 副本.cpython-312.pyc deleted file mode 100644 index 51270b4a835038ed5539382bc3b003ab9926d7d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45174 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 diff --git a/app/amazon/__pycache__/approve.cpython-312.pyc b/app/amazon/__pycache__/approve.cpython-312.pyc deleted file mode 100644 index 1859b0c740d192271df36821287cd0e5bc230a9f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 56379 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 diff --git a/app/amazon/__pycache__/approve.cpython-39.pyc b/app/amazon/__pycache__/approve.cpython-39.pyc deleted file mode 100644 index d86cdd4d3588961fa0d2ae31faf533a61d37655c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32692 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

0xM5gxHlr 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 diff --git a/app/amazon/__pycache__/del_brand.cpython-39.pyc b/app/amazon/__pycache__/del_brand.cpython-39.pyc deleted file mode 100644 index 4689693dae52049378d6e21eaf9631dffd24bad3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18506 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 diff --git a/app/amazon/__pycache__/main.cpython-312.pyc b/app/amazon/__pycache__/main.cpython-312.pyc deleted file mode 100644 index d1560d000b31018d94d80262297ab0ecafd9a67e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30167 zcmc(I34Bx6neV;YWy`i~%ljrT*p@dIvzpZy3}!KV00-h4UjYU$a3uvy<&>mZOyeYG zvS1q0h%AjVA&Jtai2_Muk~DRjOnZfuTBvk}dBp~P@6D@H$eT2I?>F!J&Ruk6q>y&{ zo4Md~&+^@~FW>h+-#PjuAt8=}=R5EG?~ea;7iz2 z%p~1UwUk(=Fvk7m6vgTkl(pm)q4+e_OZU>22ew$MQx(`L8YJG!hEWl*)Oqum}< z)_3;?RcktIc8emIvUx9SZDZE=^mHyiY;AYgd)T0%&DPr9({-TJYPT{LZ7^xorghD& zo9j2NZr!kD`IhCuc-GO~(Y>eD-e%h`Ic$4-4g}MdEnl;I^YYfE8|#~wwbrk1YF%2t zX?ZZNrMb0X-P-l_&D(?VVBfN7`Nrn@wGb0H*4J;^v~}IaWssYM`mVMkJ>Ax2Y{%VJ z$jJVV&d$~YY)`w@W`nZC*B=1K-PX;JE*5QVo4tMS<~FqJ*Rvh%VnEy`dz;;16UgE= z9q3@JEO9{+d#v_W%xh~$_wJrxGFT6_cK6sjc6YS5**ki=+l87WuN1*?qlNS;D}_A? zdJ)~CWE9W}DyEQ8TGfoos@|<))c31fG>iuPwT#xPv#PE7-HI%TVz+|P-LGnii}Ypm z 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 diff --git a/app/amazon/__pycache__/match_action.cpython-312.pyc b/app/amazon/__pycache__/match_action.cpython-312.pyc deleted file mode 100644 index da45664a79b29d434b58f3052f098f72ea68ed85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33840 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 C3^JDh diff --git a/app/amazon/__pycache__/match_action.cpython-39.pyc b/app/amazon/__pycache__/match_action.cpython-39.pyc deleted file mode 100644 index 39ebc21a10a2fa5abc6602bc077b64564ac018fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19276 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 diff --git a/app/amazon/__pycache__/price_match.cpython-312.pyc b/app/amazon/__pycache__/price_match.cpython-312.pyc deleted file mode 100644 index a6434213717a68d180e14889fa2a3d789ed940e5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61295 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%0Dp`uk$^9qyf2xqa%W`)#Gx`##9#CgfU}P#c3*Hq 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 vAN>sJo!6mtc;z25%=Yr8rc diff --git a/app/amazon/__pycache__/tool.cpython-312.pyc b/app/amazon/__pycache__/tool.cpython-312.pyc deleted file mode 100644 index 9e0d13e3c215be3898c730dfb26bb63b70cc40a2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6536 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 a8epqklw`ka-3yPPHG#)|><9Aw?0*2yMb5ea diff --git a/app/blueprints/__pycache__/__init__.cpython-311.pyc b/app/blueprints/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 42f3b4ca982f394fc9225a5f0fad7f755e9bfcb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmZ3^%ge<81g{&{X7U2*#~=<2FhUuh*?^4c3@Hr344RC7D;bKIfc(!O$*)F0!o@1) z`SQl6y;Gm;TJmJ~jF{ZS%!Y%)FA~nE3e2yv&mLc)fzkUmP~M h`6;D2sdh!IKm$Pb6!Qa#56p~=j2{?aL=iJk3;>aYDa8N) diff --git a/app/blueprints/__pycache__/__init__.cpython-312.pyc b/app/blueprints/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index df3d62af2a992f05b2f3fa5d159388abe232da25..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 149 zcmX@j%ge<81n*MzX7U2*#~=g`kf?L^7GI@dYV-N=!FakLaKwQiMBvKfH88jLFRx%WUgb~CqBNwZf%;fx( z)R^R=#PXcfBHetX(=JS diff --git a/app/blueprints/__pycache__/admin.cpython-311.pyc b/app/blueprints/__pycache__/admin.cpython-311.pyc deleted file mode 100644 index 23ca2bf98f11a575bbc76570887052a7909c3bb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21814 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 BJ&ynY diff --git a/app/blueprints/__pycache__/admin.cpython-312.pyc b/app/blueprints/__pycache__/admin.cpython-312.pyc deleted file mode 100644 index b883687198b5e56ba1c5a244fd37cbdda52c157d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21082 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

9^U{pO_T^+EL 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 diff --git a/app/blueprints/__pycache__/admin.cpython-39.pyc b/app/blueprints/__pycache__/admin.cpython-39.pyc deleted file mode 100644 index 4dbaa565281bd5c383c786b8a49783a28e4518c9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11771 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 diff --git a/app/blueprints/__pycache__/brand.cpython-311.pyc b/app/blueprints/__pycache__/brand.cpython-311.pyc deleted file mode 100644 index d6c2ef1bd6e7f11f8de8f5719ffb7eae4e36024a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 45865 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 W)+W|eyuBCUxw;ysI2M&nX8%844+)9@ diff --git a/app/blueprints/__pycache__/brand.cpython-312.pyc b/app/blueprints/__pycache__/brand.cpython-312.pyc deleted file mode 100644 index 406fa564102af5abb321eb10829ea4556ef7b6a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35720 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 diff --git a/app/blueprints/__pycache__/brand.cpython-39.pyc b/app/blueprints/__pycache__/brand.cpython-39.pyc deleted file mode 100644 index c155f6a491abc74eca3c18aba2d29fbbfeeef093..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20960 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 aqJ_SQ_xl1`s0BwSjvJ7-ke|*Y+Wfy*m`tVs diff --git a/app/blueprints/__pycache__/brand_备份.cpython-312.pyc b/app/blueprints/__pycache__/brand_备份.cpython-312.pyc deleted file mode 100644 index 8401a0d5f2bc8ed1a22e3587143e1f6cf7f8e549..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35533 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 diff --git a/app/blueprints/__pycache__/communication.cpython-39.pyc b/app/blueprints/__pycache__/communication.cpython-39.pyc deleted file mode 100644 index 6ea5037f3cd9adb1f36163461758ea2fbddbd665..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2432 zcma)7?QaxC7@yg@{Yx{|>#!o)8OUqHJaW^}=GtbLD&+mEWH(Dwc zM{u#;Ipby$p;s2aj_V27(ASQ7(Mr9EQ1I3YM4?Eh#5qzAl=wrQ{SVl8ac; zTr^md%$OC=#jQjxfsw8dSx;7kT*^SXw2rDxHI&N`tgRu6ww6RlbP(m%>8WGQBu3&S zQ4mOSSRg5q9z+$KYY8Mx4U!C56G&PK?m*eKix4Mj&k9U#vr29slMZ;MnH5=VpXuo( zYS=D|9CM1c(bLBwRR7%59T&8lKI%Bwu6DlP@v-{Zp|(S9EI~cnunVfIIlZ}5zGzu6 z&ugwxv zB`S#5z}f6#f{8#xB29=DOynK`uop%~F-TqUIHFw~-4_6NS0YLom2pMH2&^JyOrjG) z1s_HNbh(5i#3f)2b%V-Yca^GALvCaPBC%dRm$|1s2>issx4h&B^jGzBxWTKP*@c|x zod^f_5g7ZEZnPS!L0pHCy;VYPyzj423jPxn9K?u8Vkt8P9f8<(^4zX27TC5|5<%JbJ-sqf|V@> z*|PZ6uz!7c;nv;yZ>K^t|L*VeGZ*}+aWD(@md)Ps&z@O4f5ks@dTx3cWZc2ry(^(z zePUqY(O9TEJ8KAW=cKf8rB952O>yE=4(Q&kb&LpC_ngI=k zyv<-UJ22{>tuFp>-M{eV{JEjofw3?if9xS7(>W>77eR}@1jFJNFnF)6YV;)7`J0#g zk!zu?2Xu{=V7Wg(dEeW&s%fYKK-3@99?uNbFIDS*T=XBFUwAYg;#L3VoImnC$MwMj z|LfYngzewEyJ zlepV};KHGm+r*ZGe(3g1mB=6c%WjuL|@Hc(E8iKUKr-DXs)K{cQFJK-=M#NaQG| z0Wk^A1G)`Xvg^UmQL1YMPGriPkI8U~czRG?%1g@R9uxjVCHM~7Ej;a%e9`VP3PE24 z!Lg{S+M1=SD$6``N~zr?`Z9MUeF9xcw{SnN@PTj0AVVh8qUY*C9fPnMGUBHr4f-a! l$0`!f)b|1dAZHT{yje0rvyc(v0&fKgOJXz$N8Rfg{0|8v?}PvV diff --git a/app/blueprints/__pycache__/image.cpython-311.pyc b/app/blueprints/__pycache__/image.cpython-311.pyc deleted file mode 100644 index 510cc6b6c8c316f4dee8a679e4adf03de300bdb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20393 zcmdsfX>b(RxoG$F?2BeJqZMr}jf5DG1QKEsvanV*Az_g1ST}NXzQNln(7_&Ua1i~coqU6TcTpPzL4mXLDZdKn)SJzb)RY3yk)vL(Q_A4rX-uq7X z>}VYOUHi{#wN9Vz^PO|Pvwi2=&RjMav>04t&%fqm*J9XT(M$A_M0^CORs;Od~W{7FU=qO z4Mc8T`Qe>+--XD+53er#_!2~JAMr1oeN}rGb!eAOCaA~h;W0byb_j~6#z#F4n^MrU z439g;Xs62~sA$Ji;|@1O_Pa-2&Vi=|^&W?NY}5ttD!0S!c8+PA$;P&iSx z{@6$Zb_)0>;Q#ZmxMsWDev=`H0UM!RV17$@nN|xOF^a~zU zG!4V{M^`IG5m1XVAqC+iUOxxSeuc0TFCXs3r8+%^=r<@QR;CvZspH?{F-o3{M@SP- zi^q~@X>tyq%#$65+^>tqJ^9fX;1R>go6_!-vIy5m+8$FR!_tp+mXgiD+aUShvF3QwsIh+{`*dx?-G`Ze)M zsZ&ew5_>T#=2;PkD#vI!jy(nxcrSJcJ4`%=9l~vz@iu_C_0EsUA&+Nlh1*6xyr+{~ z@c)#g>>j)LGJiA#i}Kc$x5?exJ4tc9{O#)0{Ka42`R%1U?@iC2`R`=csLRncp+H$0 zCJM!exIk7v{!g3tt=jyg-R)RkU$vrUmF+HC5;oa{3RTyzdi8`FMcfd(iv|Ujo66%H zag2_81Y*zD7F)KUb-JA{x5w`4cL;>rLkn7Xp*`+HPS21aqk#~N*ggG2g0ii|C=iri>PlIZ$!HN@H)p16Jax%nTRy!H0QTkiy)7_mDKJMFH) zzUJ*uJQ*cx?kB{~tQmV+DC`>^wNriKd*1*(I?|U=9gRxNfq!>1^ztNjQPkbEtZpTzTe*noGMsJOmDt}ea7OmroVio#ZZ(4E# z^}H@)YGYu0R#(XA3VCz(sZ}Rd1s$xpoHLh0ix1d-vRk zYdEu^oxncGYSqEx0089`&1;m^#OuqqmVniFm24u+u zNFvRY3>YV3MDD{!6h0Y_4Prh5{^e+!Xv6m1^(hjGw>O30`IKJeBtDhpiIF-WtTCca z$zM%@e*!ihpUS7!V4eg5vtMKppGPL%9`xP8()(&kV(Q?}kTC8xB3E(OB7bQ?63D!zA7>UcaE zHyoQ1fE*Xb@dt8DAaXpl5GBT5!d(rcD~Hjo^l4K@A~ud*?R_QZr75{QS~4Q}lm;=y zUZO39xpm?`9rU}*L&kCQ>L}f-`V^+&n~a0BU44hGNk78Ly)%Y8F`wRJjkhhnt$Ovz zus*$4pJqN7QXmap16}1cd>3Q27fXvpMlu#-IA!!@cr)m?VXiFQ!jv37qt}?Gg(fO9 znF{$#Y069ya(tQI%rs@HD051g<}_ud2tPiH*OI2pB}U@A8HJ_SluI66Q{UZ6y|3mP zL?^zBRwlB7*6*Z-Xm8mp<3E5kI6w2!{KeDrS3{CODDjss`fpu1dh2TF&X3=kKlW1+ zNoIXc3h|gP{piljf4e;$CJ&9$2L^^m5B1UGE>aQ>@1A^56eFi1JSbwgYDOINpd-p3 z0c-TPt7q4&23XuAA<6|O2h3XXaiM33~YsOrIz>g~3;{yZE!-8C7CFLSt zCv#GQQe?v1Nh|=`)Y10&IpV@j!ItgC_9=Zh1>2evKQ5b6fkX@(Zls03Kp4ns)(FIa zlX4@BNRqCB$KSP$!%nxSe{^K5X`&X`PbVh_cEomu`izk0M-HMsGaUUyZdQZzhFx3K0yhL_!#iwn4s(y zV-vFP`zBDPY9h1ud$pZ_Mr)atru4U4=@L4N!s{eWI(;D?TP@L7QM7ad;fGn_dUs z=m$}PR%$nNJuN68?w|#Y)8%p?SpdF>Q9+I7g7`rzrJ;9s7UT!^{=Q2bS)u4FN0aV@ z%xDI<{{T}7aqvcwM?EgJ7^liT=A%jAwlS&br_ z&&*!L3>qo$H_w@C!cVd0TFzW6vBTfzO?h*^0vPFp? zXg;o=)(7;w$#P14LLJOHo-v&f$ly)OZkS4EO{Jl7)>O%vDj8EHpIga5S#mbFn#-*Y z$azcdsf{N#20K`bm9tnwPt96ZFqReJo;SYt%kRw$TzQhMZsw|+Z&bI>R=2-TvDG`d z>YV_JsJht)Z#y|(FE8uhm!KY?*B%>n{YE|DZ zYO63)*0IA!4+oX3v4k_0Fvf~donJm@v`kF|%cXCCPeIA~ji)y<(4PexxPlFgI*->C zpzbQ?E!M@dZw;qXEN9uN@16KwaEQ&WjD}HViTKJ&E-`CL;-nz)9Fp2N5Va9K^<367f{a? zm4cM1W{YaMqS}C#w^mBPz zpRB}DxTcwagx_z>+GdbnH)yvlQ(e!;QCOT0->+|MZrWLj{b6&~PLuqPChg85)gKFS z6qagt))0SOg=+p|HICvnsGvV?$m-O~{-oD-<}3b`hoi7qyDNwI(+Yf7KK7@YtX+ic zQ$oATr1;c`qc9tX)K7B=Nc}Wl(WM|hEy>zdul#f^j^g#&E?o0zlMLd2#&C%L8J9ym ziDy7UG!mCS-whl9*jjKO5?N$k42dowNVxw>)o0eqiE6yOQaT@o=d7@snD2`_#S zqc?g`4Ux+$PgFi6Gw5_qqGs8fqVM&}yu=yMGM|$*LRnLdUO6qJEP^m84fe zWgm0)9dJA?DEs<#RVgxTppA7L?jIfpJuCrr3its5KNwf8O3YSapWE(odYr%~ zN|{7$?htUSqx91>4fPDbzq?7&mS$|8+{$b9ldXJaZlEw&cf(XZYXX*LIcHkFh#3{N zpP}H0+>iTfd7VC>IojlJ;`N|I)dy7mMt|d+F+W&(u7@?2amKPmj4;&Al~;!GS2`|s z1c<;>fll7B z3uoA}h^aKSe0Gk%HGm)K@OMbi^{j#93?$N_)`m012cMmr28PhoUh18}XG(u7f7AVL z>$U7p<;?nBY(*DW(FIs16@Rm0Ig`ESoA|%s|?`Jec=Tw{{gW*0i6Dy zUiH!nVG5us=h&4tX^92lZ=B;1FCSXS3|dfB5>&*O;MB5tC7Mcl+aso zjJ%*4jpLL&M|@hB8G1RvgFxz6RDWW>rkxup^Jol*oI06Rw+jMh^Ye@n)|Ekk|asfeeis;0e$1L8`i>%7{f z?Ur6G^n;etC-y_CS{CfAU!#thIR%uMSkB>1L!MZ9ivF#^hGQoIw)( zeOKD?PEn7d@lKvm=}PphidT|K)4pB_-V}B3SFAf_ax2lg+mAM0@rtf$TIL0+<@!z9 ze#}g_uKz#n-*o%R5^FqV#E5~VdOSDU<30s&bMTisDlVNBtHs>%Lo&%;j}*Z;`~js- zps3MOz^??NzlyzzaPg%T`+h&1%XA-&6OB{xeZ#AGPT>VUpHiU}=0U2m$d&4)A^II8 z)5{j0QQQX$d?v3cR2a>f_)Nt-u?EUKh-rL?oj@ey~;XcGcrJ<#>-D7T<}#16h6Vw^@IvY_lAr`?bMGLNGlX`_)?2&!%e z*ag7#hVDkCtUv)$%8RlTJ%nPN5C{rtd}Pcm$~)lXGI~f9#{|u=9dy~Fhma`)EDa-0 z4~;}c8o4nD8V_yncRXqDKOksC*SbECwnWLymPwBwFw_J=DfKIT7`-UOmeNn7I57mp zf;qtD5(vN@ykJHT2?obu5WSqR5JUyO+T}PT#Z-|PNPW~{!5pzdB#fDWJLoAW*NtSz zC*t{LplBzaEFuFqIwUm*oMz#=5d*&Y^IgVv@)5t5bam;Y8#V$ z^O^a9yx?*+vlL(fK$m%};b=p^$?8Z>M}CHF$2E1KM=tkX=$%or6&tvU4bnHh$a=o_ zbT6}FBU`kIE867m;w#trI~a?V)tB>nl8N4Yevu#4@-3jI=5q>9?LV&y|b;LX`9b2 zI(~TiFlgMf^G`i~;_>7AruQvk>oeDe`uW^t$Da+aoyq*=hF@&p^9s)EPV4x>f8vYC zOO;_8S60syuKP?u3*ZT()zxEYwTjzbaQLELxzyy-kh}x5HDIA5BN28C?#Y7 z?2FbSmA%z=x#2=XctCO^Vyv65n1gD*b`w+98d?#qy|^m0>WU|*;)~1A??1giTymw9 zEpFtB8=(VaM1J{PSw*P-l@%9P1Y3ix_vT33YYj{ZvXItj@-hN);Y2=tl`MIMT4rS_%oFbjWq<|^aVj4R#I#oMZaJMP_-rU^o=1^*IoTOsD>$>rZFj*+$! zo~%iO>vG%0eL?Nw2o7^woZw>c8Jg-}pdkKjsThpwdrXUk_dd!(0d4tZ^%6+{&m^Z)noJMHMOWEFz>q{^~YrubwFg84m;L;Ux$tr)!g zS*C|l|C}N3GOPY%P?~(RBd$)Ik|7~r}nwm8dAC-X; zBwnu%JbFQGtBUlQAg3Jeeu02J*d`ZudwM%y0=$LmppzbTNqk8Id=j;K(&nl|n`@*1 z`U0f=2mHGczc7gbSGM~~DlaE2Clg0s)GQVm`mIl3YD$A>M;;&{Ww@j2v z6ZC)aa|WQ%Tjf(Fk5l4#fmG+$C3-q%KqktZxjxl1;N?S!&jgt>Z~Ou1^;_@!>~`QK z>6A-U@|?PJ`DgPl{qvo-!t>|PlOjt`E}RN2{PRf(4i^61Q?K8>5Trv;g0#9tCl?pE ztxRYnFCcJL>KI4N@$IW`&(9nuVR4g^!R8k-NjjN?#Jd4d$AQn09QoV}3eod^yZ{ow z?6WZa#=_Kd;wgaDVgh;hC%=O;ICqgG-(!=}$gc^Up**z1J~E+im0aPgk$7Amw8Uc6t&7wya!gl2Y5BGFbZ>+3zVk97f3)=pnao2%9H&|#UEYTv{ zoN!{t4Q3ngr-uVSBXAr5Nu`2n$YG}t-T&XviY}W`60ziVdeAM=EQF~<&=6qFO{ zAWM{?&*dn19R(l{U^Ln*1U;CaXfRGmPW`4m(%GSyGruJ6sHJYdh%zA4liNW_zC-#* zMp0x&)D!uKQG$+&qffsKx!kC(sLYZeszgZ~{T8I(M1Vhpb^$q6V>Cm3H?*r}wX0ZdHK(nfYz59>%6r3DGHWaeX~W=VvXL`x1cx782Jo$lE?nds zn6euUkyPnByfSWaL=8T)K>}8A(GV0V@#wa!55xc++0A>9O z{-q0@<${xDXm5;MUOdqbolIR}H%i!L&=CVle&24SK)Vs8d;x50sm|i!$+6TjRO!k{ zvR*r=B%Nt3!aQd-bL>Qb>zrS2k4Cz4y6=vUxP(HJgWvq;nRKH?cTO+|^% z1e$IbM~a(;BR`x!8kT%gfrSH-xiI}N5^p#0*MquBaqY!PGI1G(5;6e=Kn8cV`fxcavb3zx~b&^d(54(Jr0jUxK&> z(I@pmh(vr+3(z>eAy2fq!mLS{Z^^UfjeIZiUM<{<(TFdE%|KK$A$tMDkz$tafgsU^ zl}6j$gcY%k5%*QJIKWBuK5tdfGh^;5fCg_>W21Bj?4eqSy|!$o`As)#+sxTE!)pMK z0f@Y!*cA)Ed1c}35pa{kupq4ABmA=ebmW9Td4P8t@ zH{7gcH)q++?0J~6Jk01H=Ec4Y)Oe+F+vPHs^9 zS7!k^wf;&Ile+_M$>otz?~Ib@%(4tx_7lm;Y+*x6a|z(}y|58~kEAfuOo=Ynnm zd@I1uB8|^Os#Oc*9Yq@d2EA7~0eDdc6na(QkwOg0P&~O`#S+kryYEVF19(@Yt0_aO z3FHx=)o}%bSaO1=NW6mNk||@{80gbbCiItDQd)~+8sCZJ8o=MA7=HBt_i05h2Q?gJ z`vrJ4=$7^?@#-ma93yzM#NX(G$ABm6bfN!HYr-`4W!gq4@}2LR$Em9WNbh z@<}}yfyjwNq#hKEK;*_DQpMYBZ{00Q%4dkc;rIp*zGf~-+t{3=)6Ri zL3CbY&~XOknViF`D07D&(R^UXIXey0c8O5ZD z=OY$ZCsjrEgFx$nGedUIf7Oz>lp! e1LN?B3JXzK3jiECB_wt$lAR*|~k!_8w>g z+1=5BOtTg4iMj~Jt=$iI^{iNFBkgX|GwQJqr?(WtsT>5*)ekd0b^)c8xWS7ML5Gwl zm0tWgnHP6~p9<)pfIEp^$-h{UxF@7~ZGoQ%|jDqWJCoW^8JK^{KyPD zK_b2^!U@Eg(FBMU&;f3wS)9bsG4b#7Wj3a4UEomQ(3LvI^Z;`4v|f^5qJm!5Sj8EU zMaxhCmbHKu9Vuy=1G#r1WIg`u^s|g5TIE3_i_y&rS*espMsCcZpVx+o)A}h8vRP3Uk1pvt=`+XEcJgrS7W}~m8590b* z0;tEPkhtJM1oZ(5uA<;Q2s$KT;vtbZ4Gg#)9{M-} zIf3$O4-GkJIQIq44}xAY@ArwH;P(|q54ojw{2qa$W(hbgvFAwdhuHJ@m7v&;ObB`w zfHKeo$OINo)WqnG{-;h_PYzBG-^f`$o3lK05YA2I)N(nsthtUe*Ri^_oNn!8+nmV~ zXgNm&TP_iowqESKQC>e=UO)3Vn6b*+x$<`DfDoIvmCM`8nznJKZIj#Q%=yz*H_T70XB0Bm$_wf2cKaMJal9zXk!i5$&N*tO#yDk*+&jf z9R_~hka_I!qmLt14m#Xb73}BpEB!m>3az2-Twx7Uu-f0r8}k=2nPCka(qfA1SyMfn zjWHG8Fj;3!*3b^tw3;)mW=yMjz46%2qdURQm$`8=nQ;acTyUn~HmMa;$EGt`DJP!RvNR1Dd$t4F_Sf<6V5D&v?G;p*I0{C4Eede*wqn&(CZcsiw$an6#KK!R{rno<759!a2 z-Y8x_TfCmxu$3*|#uaa4;I{Yk#U&_>DPB8c=1Z$W1>uLn&vMmU-Z!(QZCq&^zpNs- zDr66}aC@6X4M1>aK+C z7zjR&FUn-N92O@8N(|RdYS15#=_bWL9uwcumsrFwDgN=8aZ>zCh^%0+CGMNpPUf53 zJeJKQ-#4*pW~rOUDwyQ^rY_6BDex#9^wU*xy2?rQqB0wYUss6*Yu4d#dMy@=;aND$ z<5*CG$+SNxe!e(h3@;DoO%}6w9f#NP03++cabz|ZADo|O!nAa%gMPWkT^^m$K7n91P6-E#fGp)v9DMFBtMMO~^O%PMXiS&N~`cm38 diff --git a/app/blueprints/__pycache__/image.cpython-312.pyc b/app/blueprints/__pycache__/image.cpython-312.pyc deleted file mode 100644 index b5847a3c2e2f4254374ec7827842a1d7018ae183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22268 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 diff --git a/app/blueprints/__pycache__/image.cpython-39.pyc b/app/blueprints/__pycache__/image.cpython-39.pyc deleted file mode 100644 index acf19a2947b4b92ffea44a08a37cc6a07b06a0d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12194 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 Wf$y;-umo2T7K;E$w{`ey6^ diff --git a/app/blueprints/__pycache__/main.cpython-311.pyc b/app/blueprints/__pycache__/main.cpython-311.pyc deleted file mode 100644 index ebd595bafd78f545a4016997241e3fb0ec3fab90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4528 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 MfdgejQ9cR&7aX@T0ssI2 diff --git a/app/blueprints/__pycache__/main.cpython-39.pyc b/app/blueprints/__pycache__/main.cpython-39.pyc deleted file mode 100644 index dce162a08c3b827134aed72167ad596da1a4d4c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4776 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 diff --git a/app/brand_spider/__pycache__/main.cpython-311.pyc b/app/brand_spider/__pycache__/main.cpython-311.pyc deleted file mode 100644 index 7305183f0f5b78eda72ad4d07b5fbf98893c7e7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23102 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 diff --git a/app/brand_spider/__pycache__/main.cpython-312.pyc b/app/brand_spider/__pycache__/main.cpython-312.pyc deleted file mode 100644 index 9c07e7be21b6c81c1cbbb3d18314059bc7b6acbe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21707 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%0Dad2ZBH%Dv*bkIFYe*AgelSe- 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 diff --git a/app/brand_spider/__pycache__/web_dec.cpython-311.pyc b/app/brand_spider/__pycache__/web_dec.cpython-311.pyc deleted file mode 100644 index f9ca09435b2aca05db1fc993e79794db2460e0b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6427 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 YgvkzfzfTw4X7nc?gwP^WEZ?X91>ap%1poj5 diff --git a/app/tool/__pycache__/devices.cpython-39.pyc b/app/tool/__pycache__/devices.cpython-39.pyc deleted file mode 100644 index 26634528e0cd3f93da2e2fa13edced48208ce7ea..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7283 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 diff --git a/backend/__pycache__/ali_oss.cpython-311.pyc b/backend/__pycache__/ali_oss.cpython-311.pyc deleted file mode 100644 index 26cc96a2657e3b9a1394689288ccb23631edaacb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1764 zcma(QT}vES^v=%g?Ch7Wu4yzIjbt}M7*SP+WZyscPs0)jmK#F3P2<=)Y0sgQH;k?#Q@H1t;_sq+9Ea{A4i>!EjN7nJ zbI*W}70+oqjT?o`M^VK4oV{@?;-n(M2|b;n5>9EEw4So47|q5eutj}w-M~tg7)pj< z>a9tYjB0)M@+y{2Sr`oX2|OKZWCwm-uzA?~ckF6gz}8_LBsEw(Zc!Jallk9woUmm+ zZCHf<{ufT!@;OJ2SDbY{%U9}!pdmJ zOj?)&J{C{F+chsRh$g&hGSzMyUW9>t|Lw7Xo6n#AvHN6oYtWa zx&jIJW~Qk(o3R6D14}x<$P3$?1C&RVP}fiIZH8`dgl-o@qovSjL1?dd{BxH#Jv|$q zo}wpQ@`Uq)2vC0LMF9EQ7s5qvXF=%Phj+1}etbi@*4KZ%cX;Fmb&%+cWI-8wGpR&`vuhVQ zLnW0YGAc1K{H&^p``!daOa)6%Vj6_PMAfJoGtya&RY;kQvMKigJly0X?*boZ6qeO1IcyMON~pKX6U`NQP*Q$J44`XF>? zw|!xwJ*INN(2?v_+~MKjtHfJEbN<75-(u*QTkZ=wnGh3l_ U>)e@vi~RaUVc?Q$J;DM07qd^O;{X5v diff --git a/backend/__pycache__/ali_oss.cpython-312.pyc b/backend/__pycache__/ali_oss.cpython-312.pyc deleted file mode 100644 index 1053f3e31380b6625af7a8b7092fc0f9457267c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1514 zcmYjQUu@e%7{9X}$8q8&Sqf{Hwp&#VNHsbbESnHwnkq6e!PYSeX;vl6i7&yaV~4Zd zE>(u|Fo{(I4TPo@@c@sTI>BBh@iHWyd1=_7zr+EQG{T0o!F5hQ4%B^U zU-|i7Q3JZsWz|swvac5b0nHIdqbO!XR;kZjd0?r*8k_+y0~fAv5L^O~ejkrr<}ZO2 zn2G+&GM>wXh=@_ibZjCa+o(FG?GZ8W7nYDmVnx$JnvX55iV=x+v|3g7-tU?Uj_n~D zz%QX%p?im*&@kP3`nPkCb<+!!Y%33Yb+zSC-`r<<_r1am#r81jd(nK6A)(9mWBEE) z=e2%zFV^#=+I}u?WJt^E4wgsj?yPd6#|>zm-{{(}2z8;H8d!SVQ2c05H=y3LJ-!a> z;4a)?y`rn1HRO$TGyv2g!}TJ_aOW~SW|zV2&P2#NMlGWd-f>+LEns9&Buw3M$#ZYo z%O-a03RS$PV^hytXntT{z|OL1AWTFGU(qa)nC0k(W}u?(TOJu5N=0$+_+nNdrf&ui zao#c+=5p2dG$&t11&<^aeD8d~zKcHak?VEpWIfJ^SYolPW}IXR_(HKn&+cTQ!{^dd zUFLcySWl1SUR$K+vc!u8tgl!IzgV^Wl4&pIbvl=}v8Y?7Mz1|rt&yl-4a#SuipOb| zDE-|J>DBm~7Ju0FgAUqMNp+`3I@Ed;j`B-`@QD%kLkreYAV?-tH&g z9DVDZGupB2$>Vcp7tRn4=T{|_oc>9|zYv5V-#)LoQ)l{z9KcxDBW z6m3Obr+u*;-(Wq_mXBdJ=S0FCC|n$;;sC$_G?-003FT|_NWxRlg8s3ZZM}jtjR;N^ z*#s7efRSzlINkyH087WllSr>u9K*NJ8+ewA>_xbkZhJh0a0kS9fU*N3J0Q9Prm6TC zXzX&Jy!az9iTO_*~$v$-%=ns;o5A#194xOG0{|}sOXA1xT diff --git a/backend/__pycache__/ali_oss.cpython-39.pyc b/backend/__pycache__/ali_oss.cpython-39.pyc deleted file mode 100644 index 573a87fbab1a58a00d3cea77c5257abc0e58f407..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 988 zcmYjQ&ui2`6rP#PX0u7wu5E35D0nOErE1Y4BBE3&6>N)w;!p_5&g_~tznn}8E89~A z5iOp2(!=&5=s~^o>K`&!vFg7dh`wY?>pbSYc{4BXee=DE-)!0l#u_;cDMjd8>HI$| zaBjlPKZ4?j;|Q^l#SB+IVWhGKGb&42t+FOF!IG#RTg-|ZtP$JHjveO2E^{#wO>u@B z?+B;7_MEaY(cUgy>>c{9Vt#rSaI0I|tOP?sW#b`6Y@)+Lm`zKC!ok3owu zF)3W$m`2>*BN$>Iptkc1@S@drO`B5m!ZgvANO+cpiPC0Jbhd=jZa0jCSIEfAq|nZ2 z*UNnMq)md}3^geutDPkB14i4s!`+z6wgAO*|wAXotYc7*bdn12QnYnleF~ zst&rY(9jwf2Y81L=&%8iwsHn|0GRj6-I{U-cp3qIvf4HzGz7`A1DXaY@3))UNb_7f z9Vs}V3jHW&b9a*MP^L)?8xMUM`avX?PS4k6x*c*MwFy`0hCSv+sn0zwx_%KUJ^5cM zU||$1%Zo~*tZObsAtYvYRwyqGHbqCV)_S4Vs^xw0v=F%(;jBS?+mt0K6=vBi6BwOt z4{BFg%2wo1^#hXQaQ1uV_O*>$D;t3i-AMR`AB7%VZ$9g5r^qUpWrG|D&1XR&Y=fAU z*o0z=NhyEmUuwxoIM?fkBBUJs>m9t fi86(CJx+NMi5nQadPlU`Gttkt;cn<#qk6i?Z diff --git a/backend/__pycache__/app.cpython-311.pyc b/backend/__pycache__/app.cpython-311.pyc deleted file mode 100644 index d267e739ea63cd567af3ad1b193e26b38b4a9abb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2119 zcma)6TTdHD6rR1{%i3H+AcmA0UW$uqH4zbQg^DP4Tq_NUFfU!9t`>H{8+L7Lb{&-{ zQkRydBuyK7Q4{5&kgB3oAkvpg^r}Ae2dpDYwN{FRlsMprs+OX@svOVR*sb_fKkv7(N2ymE_y!w$l}5FRZ?Z9`G^;Iq z3k4u`YG2iy<<=^yogEVUYj>&`wyjVAtl?g1&K2KI1L%SWU^{GI_pRVNSi`;2_yFGX zz<^W3wyL8lv)oxlwX@{Mn)IoIRi0GuJYxml=o;>o1_Qz~RgCpmsbRg*DGvjux~dXV z(;$X0u>5S5Q#(VyQxjYJUy=<^E!p(ck}Xe4O8cdK3ltxO2c*_n+hauTCb)u)UfVMq zN1aaCJ=B(c2eY~2M_+7T+Z>JuUkDymL~S-$T>5x>?Kbz|;`!o*n>+9Q{NTfL#l>^? zH-Fgq>_+k0FMs}Yb!X$No!j%hVpdOv?iusI^7yr{D+!GIk(F_yry zTTaQkAWagM{aZZSKf{WT&!;SI_h4Z%6QZp~9jX~c)S)n)RwRh5dQBH~d8)eP648;d z=(un!`erGJ?I^kNKz<>KbDGt0GCFpAcr-dXE+nFfMEu04@J9S-bUc1M`pA3e@Id%Q z{2eMWxLT(6G7KL;s+nZ=!?*Bo8R&cU0Kk*6&};OTYcN*aZD+w*`wduUR#+TI+$#;o z5hOr}9UVU!Vl6hA)^v-_q>*lU^dy3!1SQL#)u4c&lEy0(Vh}ORV#G|wVo){}q7kWL z)P@I*{5u%@izIsFm5Jea>DKq#*ES|_Dikk$TZ!fbRt#t6EH~E0(aa!Hb3xp-K0FxU zF6*0*FT{=bUDo|U?A_Q>>y^lA|0XnIIX04KBW9HzVsT)31c3xl5U?FBn1RUi6Y93y zf*_@*1i_-yn&sBu6oR^Dc_bV~k|BuPtW`HnG8K{Aus9nFQ)#53I>PW|by?BE(qzTq z#z`d$Ge}P9T9~8`B0;ulxx^0SA>7tl*=pJ%FWG9T+1gDqL|$}!>!O~t+>(q^q6#gy zIH}nj?BKMlKyL+}ki;rw20`T}%>V!Z diff --git a/backend/__pycache__/config.cpython-311.pyc b/backend/__pycache__/config.cpython-311.pyc deleted file mode 100644 index e65d9f5df9246f1fdcf05414feb64ee811093828..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1262 zcmaJ=O-$oP6n0?ApA(0Kg|a}|ib%9n!m*Q>BrCSsGzlULO(+S?GD5N(&m?h4>|i^v z@yUm(>Z#pZE3JCiL)G@O>b3W(XSi8&LaJ71Z%C^i+Ed3#sY(wWkKfGqy?Ni8nWyXE&uSH^2a1a{pNz3M)0V;`IQV`Q;-4_^Z*Z>026Q$Ou{?h4x9p0&E z{4f9lFbIN>1~d$T5DbGbWB>yrh<;AN>2D`N1V&-3I}N5$2u*(){W}K*XEwP|p zT@KFP;^s!&TObDK!3?|y?xLAn{)LgwZEkTC6RS~cOV(V+H2cPbL_+E-tgKmxmDR*4 zkBf$6ihNRSq`7iMd;B!7>%}L{!*sV+&<3!1a$G&E%l%Fvm-}!piCT@J^|WUkr%$qc zqxd9+tVa6;2zVy5!DX|2aw8>VGnpL6rIN`TGL_Aw(%Dps<8oZa3iCpa%?K=?BOL?J@7D8W!L0O$r`AUmE7wZGZAmwJS-jl*xCYd% z?X(~$S<@O;+eqp>?j2ZXz0Odztk76$q?54xH+N|*v;Vh)#A~eQ_%p5<5$ zQ<%>0?TMe1_G{&81v4%<*emAiCGlW?cWoB?o05UVf!@VIxAdZ^9U~RfXPSQ8>S|}A z0&%QXFV_p(Vxzjhv$b1oxSI_2hQ>)(>}ZC0Gj|JtnK9p&41-9(8|>D{O+=DNatDch z$?RaSj@pW*Vn0%0UsF^Qdz%CK7@3%sWEmO84jPsrj{E~^NY-8Nc-2@W)Ka>m{fm7a z;R(&aKBS&1I?;32>93o+M|9*@VN6B+#)&T2%(a(d7VY3=V9xeB^co2ZERY%V9tn#j?TEuH+4N=P z(KoB-kw@chhc2mrJ^GxLb$jBo;5of~LEU#&g)vyUpyJNrLl=Cpc|pyS9D%SsOK%!i6dwHGF~h^yfnei0t*ttBBL;?t0V_#^0n4v~YjB81Zb!r13k-%CJTur~ zR&>?=gC?q~tgHN#Zg8{c=ynq+Ql;)JW!F{jfQhTB?p>VMcg}aty=OGPxLhQG&+on~ zF+EKX?@VWWrml_m`xb)ufdB+c01ImY6YK<-WGBHCI|ZiMX<%ioSlfV&wF5ir01lP} zBufE`bpj{r0xs4K+>rW_0G^*FSr3>2-qs8|1817c<5oAi`RR>4w!kcydp$Aon)k=i z8x8Kf#uJ){y#t;9%?o@FF%Dg~pnektcW*%hLv)_?fd$qNg6v)Bza?{V*yT3#BNOd; z*OqjDL(@9yMmWrOL|Tw_NDETr$2A2r}48CQ^`GxLA_ExV-sjDxgJTSnCN;ekxC}hkw`2W9S38n zWGtSF#Uhb(B&j=7G!t8=nKaELW5~vfVwws}Qur_fUMs}d`1ZO0P{F{SCfVjc30-S&}w(Qfo4U3ZSChCE^2K7K)ciT=L{ z!hhm7Ckn{7naS?u3ps8#^EAV4W=eVP=x|>TnlyM1@g&VK49%>^XeJTgU{aA(1X;q! zTP&5hOg5XxYA=7x?c|W}U!hVydzdeyj{&IFgrvZLNR){(Ae~6WL9&W@s?h|)RM!zX z$~1Y(`ZPmF=m;VZl{q-zp5_lrJH-NWo6gZeE>j+kw-!M5Dz8GWtF#blekYtJpF#;y z7qW6%YsnX!2+(Y)yi?9@bCu%Z-qwDxVh%~Rd+J$>YsjiLw$1$^_bA@sRTWc!v2U)` zY=oQeLIZLgUTYw$0_&nIAv=^nM;0XwS*u;)6l#d#1p%t+9_;M^y&%}Fkr++=z+BoSbauW*LiJpbC#bQt^eY@c*^-06M(x(jH=L2H)%1*c!am3}v!n@LU8{UP!`^rkV zgMIR?!{4_W)EX{xEMUw187`ZR_B{r!q27AuU#z|e3_kf{;Ca$_z9SsCY(Dskd`Z4? zzjP1oKOQ{!`c2@Q-vaP500%YkO`tg-e8zI9Kk*&;Ejgf;E{S`_YGUjzUlJ=u@X^Tq r{^2DNz=RH0f7&3ueVgH(!_zIUT*HqpiFxDR>bN%eE3v3Nz*qen2CcId diff --git a/backend/__pycache__/config.cpython-39.pyc b/backend/__pycache__/config.cpython-39.pyc deleted file mode 100644 index 81cae7a70a27fb3215eb3070531f1ed694b87a4b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1043 zcmaJC~Q*5#-waUk*sIW1G|9j_?cw= zK1Q!qKR~aQ`el6WsUM)1p85=%YSlyE$n)nnqu-3*JW?vjk~qI*es})LNYWok@c9v# z^sV^VPeP#t5~d)9X-H!RGMI%dZow9A!#3t1hk3~34(y-|G8UkKMJQqkO1KNVxJL^= zOIZFT1ADlS2a7V4X_1zH+{eRHiI&#hvr`F=*4}gBy?_IJ35WOvJfnwe^h;5>@xBuI z16_Laia)o*&}VO}RpL7p%j2|Sxzz_1dW?jIs=1T8G8lUAK6Zkj_rbiaFZ8arLi2t; zx*c1--EFtOyVB@%67i2qHm~2e)Jg9{jq=It9vX1iJW*OLRXeFQTFqu#QEHm@1lC&3 zTD?`PDN0*u@*P!cRumyBopIl|xxRdJ6z5ICsIdwbASY`#LT^r8 zC_H+>e7f)+4F};s9}mXeb7L~PzBs!aO~jC~yo}iW!mvFSKKaQa;@u7I6UGDuKE=s? zl18y?5zD5APeL2E13Gg&H_lTRea~^jc-vfAa~eW{SQcgMf<^;`y?+CpT0xTCRBcF# zQ)jWB-|zz(r#%+usQcgqf_Dq4xthhf2O2QZC&-E$|5Xb1g;}e=U-aJIbq04P5lvmZ wvpjd|%qo5q=TDa&t`_v0l&EEjP}$U4vY%`woBre_c)FO*r{qL38&ppH12*V1fdBvi diff --git a/backend/__pycache__/db.cpython-311.pyc b/backend/__pycache__/db.cpython-311.pyc deleted file mode 100644 index 9216b0d2a6a8e4f35b28eb0b6f6a8e2fc8e65ac1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7450 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 diff --git a/backend/blueprints/__pycache__/__init__.cpython-311.pyc b/backend/blueprints/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 936e378c64f5061980fc71983a8462ff0ebfb95c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 159 zcmZ3^%ge<81njNrGKGNjV-N=h7@>^MY(U0zh7^Wi22Do4l?+8pK>lZttlay1MT2PdkS5h1kAD@|*SrQ+wS5SG2!zMRB br8Fniu80+A5F-#5gBTx~85tRin1L(+FS#X| diff --git a/backend/blueprints/__pycache__/__init__.cpython-39.pyc b/backend/blueprints/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index b7806be6aab64fba1e5cd1d3477df030fbb9020b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 127 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 akszc7P>%SGuAU^`Cw=v0>i0`Yp#KLl?kcDN diff --git a/backend/blueprints/__pycache__/admin_api.cpython-312.pyc b/backend/blueprints/__pycache__/admin_api.cpython-312.pyc deleted file mode 100644 index e207bee874a8e42f49fe6b60e20cd249f6deb65a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 108369 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

>@`5q*@+G#=I66wolbEsvvD4U?*fp!e$ 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 diff --git a/backend/blueprints/__pycache__/admin_api.cpython-39.pyc b/backend/blueprints/__pycache__/admin_api.cpython-39.pyc deleted file mode 100644 index 4a2a7bb95d30a7fd96257e6b74f9ffb7ea4b4e6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16876 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 diff --git a/backend/blueprints/__pycache__/admin_users.cpython-311.pyc b/backend/blueprints/__pycache__/admin_users.cpython-311.pyc deleted file mode 100644 index 5c88c41b2e7fab76ee369733583673f35c94dfc0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16921 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 diff --git a/backend/blueprints/__pycache__/auth.cpython-311.pyc b/backend/blueprints/__pycache__/auth.cpython-311.pyc deleted file mode 100644 index f5f820223f6bdcbe91be617f8f1a91506b0ca870..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5312 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 diff --git a/backend/blueprints/__pycache__/auth.cpython-39.pyc b/backend/blueprints/__pycache__/auth.cpython-39.pyc deleted file mode 100644 index 3f8fdc11ae4bfd67c346de9b6fa4ba4887c88ac4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2461 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 diff --git a/backend/blueprints/__pycache__/main.cpython-39.pyc b/backend/blueprints/__pycache__/main.cpython-39.pyc deleted file mode 100644 index a407705321a393b4f11c7e645d01accd5d23127c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1448 zcmZWp&1>976xZlurPY4eiNBJ@EvBdHVqZfVLY=s!zPM2PBn(2{8QXHC-ObD>P0a=p z5?W|UZD^a)7=zVAA%~hmNeQG)p?}6)gx8x7xp z^_lr3`NKAh7ibJG7mSbK75{>uMrcq%&6I=$ey!BZtkBBr(9WFD$tqzbb3>P4jGcN} zHLPZS=x4RCrhQIY&l+Ka7|fy-)}$`=9$4WBBU_^fXNKfiHdYXP!g1}LVB@q}nBgQF zIhdk;L1>NE?;H0>cusp71z}a@(Z^wQ01Tq)fSj36XT#fu)*hXCrAxoZZMF zo~mX{vtfH85z%RMlnchAn{k@Z$3)dQqyu|XW~s8XIB6>*Aj-$iw^T*QSSGF4 zWUhrJ4lfIgYw(H>KuF^NhF1_iEzNrdNK4w(#HKA9TDM9)u$KT17Lm~H5xjD?thO6( zux&ri<>su06F9sAd6l)nB(H+T@jec0G9DXz40RN*XBIB4&M&U6#jWcAW_9gN`^2hF z-u+TJ34pvc3c&(18s;de6Fvdjc4baq{y%6YY-(s8C=!^5FamQ43dGjVV#7F6{B0qn zHV!^j21STy3T%Pd44Y4a+@6{%8#;Hn8_Ug0ILdaMu`4ZtL8l8rVyU`>6;PzHMGj0Y zp|3roFbi^LHL3LgNo(g9A@%Xj z?$PtTnX;;xlfA?K-#_+uzUlwATk1zozdd<$f0(Q<5C0kbbQqYt0mqXcpzu$CG>uq9 zv6OLZGh=NTRF&Bg%0`gNYj=32HG8WA9P^h~=2sT4MGK3cD>q&fddr6jxD;O`aG;V1 zYz%kcg1}bZn=X|ahKCpqyo}&@sP|DDnuZ=k9e8$=MP=xFkWAD;7}g{ZpiU-2K@Oj0q6Waao*#*rqPq^e$Sl^+(bVKy&{ zaKw-tZ|CRH=fanbPX6v`1VW4=FJSC6?mE1aOQs2{IizbIf~vm-jn})J jb!eWlD@Z1RfNjeo)8;s-n@w|?G{N#K9x>r*+8+522?dyx diff --git a/backend/blueprints/__pycache__/version.cpython-312.pyc b/backend/blueprints/__pycache__/version.cpython-312.pyc deleted file mode 100644 index e7f2ea862e580148407ba50126e2b24e5e657834..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2059 zcmbVNZ%k8H6uQa0!Tcf%hJ+we&Ujz1q?M ztBXtMWLCmrnV`YAB`%oA2i?qun(@^yC|kx}NR~xg;ge;MnCO??*Y;sG+n3#!o_o$c zf9}2Kckb!Ek`fERqk*{TyGH@=P#26r7ntQsm`MQr{a5X4)7C2q2LnEwLhVjh!I#G1^R$$?r4*znDeS1k6jK`81d)DB3LlVQpEpwia1i zdkB{;T!)=4j}rr#v1{osuBE5q+}_4|ZejRhdi2hdsSD}b!|B9VdHuuqsmxeBbAB=} zKDu>g;r8vt;X9eL-&q#*GaPmin%NTwOCjV7sv7H8#DMwV1@g3IlA;dFQ&+?xEeO z+M(L-7>o%_pL;oJ=gT2siJjfy|5gOP*fGz%|R*V>Z zgqZsb+_63In~OpfSi>HI&j_VdwHg*VZ*q(<_G<<&biIT~y@m~=P$6(Lps~yp%i>FZ zo4^jBzzDW%1rUFO-YD4$B5)H>byRX=Ge8^r$QL_^tZFxOy{q-=TfMz#>LLW96^KM1 z*-thX<_L^{d~BCFT#x-f^tNydXMap5&leXhuHoVy@MLNrGnhyZjHZA7DUd!`%L+hC^IL>f{AE*yTIUH8kz>HgTR- zPCyc_4w3IrxqaT|I__Zoq52kX2W~d`cVIF?k)eMoS3E$hU&)$7Mo#6=;kQ zMv9E^D~U=%Sd}zWm!t}x%0Wq^g@CL``G;ioMg=LP;zp&Bii%v6M&VOo0lRA?k|P?F z6#dC@cp$w&Yh^_*h0m8W+K3hUNt7Fy#6gy^)7A6#b!Vaj)Le-pc{Fi!@YskjXR{{{ zBo552Il4j;C8b#gILlL8hqey82kM@hL1|Ui0?Z{zOTsc}`@>!~?_58w-dcOVs&>}7 zXU4W?-d;Xev3{gxsQ*F5J6Fr*Dyv35`o{jCa@*B+muRxmvJA*I)+`{+)~5~}Y~a}Q zl}cb+_cwt0Vai9?Z=K^GUn!rd*fMK(UEMijcmHN`KhKg_{Yv4y4gtfez&a z(qC*o&!({I3n*@}Gmnmm=Yt*H63=UvLVfU^A&o{dMk?2Rav4Pq-Cu7Y`OKR>=$6HB zK&nM9yr%y>D4m$#8$h^35Rh7C0JQuGHm5<=UnS+|dd9a*p8U0>Hg3VGCTzb$$9?EH o_x3D&eTiToyG#ONLssXqWvl9$vQ4va^Ah2J)w=$T9G5%8KS4Mj3;+NC diff --git a/backend/blueprints/__pycache__/version.cpython-39.pyc b/backend/blueprints/__pycache__/version.cpython-39.pyc deleted file mode 100644 index 6da875c1ba7bd39649b0c5177bcbe12e41ec735a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1333 zcmY*Y&ube;6rS1Hl~ya+aeFBAP*~bh5ENU!l~CF`wps*EY$T__!eo(lM(H{$t(aXU zwvdW~Qm~pPKDZHZWg2x^Z}LaJ2O_xb=&61Yyv* zv?LN|>;|iItLBOLs_WFO%6b}$*d^u}v@GIR72DgnmXBBI$sZI@7 z%`n*Lh=UO(>V62qLmpn0c1Z|JU!r7a$&`Sl?2s;o!eWijVQcVnCwO=x*xrMrp_s#G zKll=kxPv!o!vcnKIWD1PV&aoP-|9aYdZfu2|fu2?7xOiugDzMB>#4bEj8kax3MM zd70JdO8EpgcV!5}WPM#E0VZQ;r{Jg?afe7ah2j63Pk^s^>IAqcyW}y~djmh97zz(X z_&pA{w>;EEZPY@$xQ{m9Z{rr;l_>6Gj6frO)RrzFD#=JjU4l_xhrfAyv}Mr2QAQr`Zv;Q|{Ecn@ z$>ZS8??-p`{@?%NQ75?9Ki=;(bA{}Dc6Lc00{pRFv212Q2lX%W3upDKtZbN0tzuo$ z7xHu2ynbd`H#q~0sZsLuxolxppU<7mE$P!h{Q(QqlMs=~L+0|gKnR6#?r`fbj8IzT zVOK=VY;f1%z>zg(HasTO3iHfwoEj5~X*(_(&?u2zGg;k(XCsK~@w6;t$O;TNE(mw7 z3d~;fik}KYzdgbmW59}c!0+lH5YQ)vH7sN4UzvP_RnR7YP8!z!(d2Q=--A8rl!zM! zbxgzHNw9@du}kh{E`dHsOKo_T?M~A2pcvIKYNaYO451C-G|F|Ma0d#DXc~nb$uoKh fQL^f%Rfjfg_8DM<+>p{TQSpS7lEz`y5-R==>OY(C diff --git a/backend/tool/__pycache__/devices.cpython-39.pyc b/backend/tool/__pycache__/devices.cpython-39.pyc deleted file mode 100644 index efea90f067651fec9fd8be9b6418b0ac6df937f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7380 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 Z6{rzpelb6g_`uA_$oPQ)Miemv#Q=ppD02V+ diff --git a/backend/utils/__pycache__/__init__.cpython-312.pyc b/backend/utils/__pycache__/__init__.cpython-312.pyc deleted file mode 100644 index ac66fbc4fefa2c2f0049a351d426018e5b41e0f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 148 zcmX@j%ge<81pZ80Gi`zNV-N=&d}aZPOlPQM&}8&m$xy@utQ(BUlQydc?pP83g5+AQuPg`k0)M8hnYKXsF^Gc<7=auIATDMB5-AM944RC7D;bJF!U*D*yo*(gqi0M~ sVsdtBUP?@9NoG!QOniK1US>&ryk0@&Ee@O9{FKt1R6CHy&p^xo0Cl(+r2qf` diff --git a/backend/utils/__pycache__/auth.cpython-311.pyc b/backend/utils/__pycache__/auth.cpython-311.pyc deleted file mode 100644 index 3b0f64994ae3d8e752b3fc0b87abb2db08dab640..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5806 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 al{c}Lrb;GE1}bwR+dw%cv+a~a)%y<*C`xPq diff --git a/backend/utils/__pycache__/auth.cpython-39.pyc b/backend/utils/__pycache__/auth.cpython-39.pyc deleted file mode 100644 index f652ac1861c040f9c017ea8c329b8de8b49c4e59..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2788 zcmb`I-)|IE6vywKnVp^8wo9!AC7>=K)kUaaHGA+Nd8xbi9KVqU(DdF8eVP0kXS5erXMGX1{P!nyc=1Fh2h=A8dxK|Bdn>L#3JrGSRy=k=la~; zV{_l1nE&BkdE(~dsnbzm31R1R(V1dt{?@nQc^F0}sTVlHQv)Iv@Pgd>)U|};8Qfwv zw@k+ix;&Fi=eZYLoa_Y;i+s*b55}mc_gPMo^_u9X@@P;n;J*X@VjPS^ij>h39VSCW zv@oTc6quuokYPGRi)x9SX&Y9Cl%mGeA(Eyghz8UGB{Hn;Crs0bMn+Uha?P8Gh<6Yw ze+R+BY`uhURd84%h-H`o{=o*iVV+|Qp7Y07`VY$f4)6Jxp;5p)SdEg=V8F(2dB!n$Dwgy`tswc#d3LcVrJ^Z{KWOD ztMaeE%sskLzI-j(mC6VULg_p0Dy;49+|{{bUlbPT+Pi1BTunsx@9f;$iEZyj*NgbR zScnHQUrppDU!a8c1u48#d+H%Z8`JCki%uF7ZfR~lxUa0e^X$?4#>X_!K zuFX8n%;$2R3JyG#=Z{Phz5+ZxS@pr&J@0+k)0;B;tsLud9Xlg>Qm%8TePGaAZj0n% z(vx!QpQSQ3L&`-I3{k>VgP%fm8m1B2Mh&PLP}6B6y!neTrVb4i8meeqhf3iahX4ow zMv(#t8zd46qmIgyl@%ChQ3DthNUB-~!}dBD2qJ^%@J|3AooOX1(mn{Xu9xV*aajtM z;IO%bf60uT!a_qz8hlG!f`iw5TmTaQ2ry9rld$_SY<2GR{qmXb$`8+%PoA2ccu;PXy_r) zROcblP_subAeV|6k}=*0K6n!vgpWtiEJFjDM)-4JVk&^8%E-6{re8 z8n<$e{~bx(#LLhpR)Zmmj|`$?{Ho;ypFcY#8+_QE;-Q`BHoPhBepr}VGUXoHSCW4SG(~HQ5L;%gl4cXETfz@{&@TX)|qsa2M9d6_cp@p!ckO zYbI}kSZ!;s&f*xyNrk_T3&zmMbialrneIrviw@`zxG@4Ljp+OhDE&VPMW?uZnb7wk zXqB5qyyYl|)tXdpbhLk^GT`WyR2D8cL69B1bqpyx>X2Ftv5*7za8-8HVi;sc0|^2A zYVM$;b+V%r8>H-Le0&ID3WMzYzGOGkayJc&U^V)3Jt_4sM}j zI6z5ZSG|`p%3IKn(=-$SJbg$b=u0OcS1{*ukgQs-we5a?2T0lyjFo~=YHVUmm5Fn{HXxf{o-k~ed8WPW1IJ`c$&EX$_sT)PyX z1w4>HCl}pqv0Qb1;PUW diff --git a/backend/utils/__pycache__/db.cpython-311.pyc b/backend/utils/__pycache__/db.cpython-311.pyc deleted file mode 100644 index 2115e3924e0c35fb3b256e8d2232f546983a25fc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7457 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 bAi$Ruha5hOIi+8N&RH9Fm&t!vP5}HLywb6K diff --git a/backend/utils/__pycache__/db.cpython-312.pyc b/backend/utils/__pycache__/db.cpython-312.pyc deleted file mode 100644 index 7b0e8ace4856a93b43747b263bab1ed37729d453..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8671 zcmb^$ZEzFE^*;1%$(FzZV-vWf5KE~8*w`^-0vW{?v5YN)Bq!j62w8X7GWu}tq<}Rh zb<-p@jfru-Y$l|HPSVgOO=xG@G9jHdK&G)f(@_U^>Rjpc3mf=VH+Y5&`O~+1x|3wf z*rc4Ty?5{H-oD*^`}W-*OeO;XSO4jMhQ3!y5dTIG@}*7#*SC=bF-)*T8^Mw+6(-wA ze5cwdxYJ=eqH0r-gdR~Rc7tmb`6dTP_$hMbnwDRSD|kkhjUMNW4cas{kWk<;%c z2EKcMI7sg%4v=AF`o5z282$#N;E`zgr~#)&X^FF;e^2PVxfeW+2v<85D&Bm z1Wq(G@AmF&@;9`2eWE@b3kJfH3JKlnb$UbG5IPtNL_7R}P*55Ysnx-ahTrvmXoiV6%pK|KN{^iUjP7xj{1n$H5Ym9JIG&pb zWXZUMg0{=3fC|u6sDKLa0rh@br5sLgCT7cr7$Q#6p5-s1F6>b@<^Y z#C0GMHgjTKL(Y(qT2xJf*h?{u%>a&L8eITLh z5YbC?A)Z;6Os^phk-cP>90;)-TpnlJ~WF34dyhA^W2#+!y2M&sbKY7WJ zL=Tl2`nvnpA`p>HCe6ZMuj2TJ%jq?*Sc`d+G6wJ)m=s7Kj- z0xv9;b!P4vFD&FG6f!FbfjmHw#BPFwzk&OtpzbkV+$Z52b`0L!u3+S6_N} z>K7-cjvu~!_Uz@~ynf}wlUI(uI5{-(pHBuR`;Sfbzd3pK<7;O}u73E=)nC1E<>U9V z82YdM_>HL#PEH>EXz~ZAriOn7BA3s;aQRH%{ZqeYVZ+5x;IPj=3Q7n{DO61XD zbY<1Xq^Y}oKfAB$L7_8HRr3JEM@@u_cgEP{9+w*;mydC|eJ$yi+mH>>K!mGcY%|k3uyT<=;Bu)eO7;v=g_VYiiYB$Kv?PzUk$XC@DnaT(??9JENauG zBI`>B`&APr%it4-pBUIP5}Ys=4Q@ZYJyo)E+~}DoS~A#sxOd>$33KtVVaV{Bal*Xp zhMp)a>)$hDAWB!BC_PqsV%4!#r;MjNF0R05}hYd%J zH_GtazMff07_DCtq}ud_&NxlO{iaX@9eJ*_ZXI!aW8FRUr$ssdKP_?G4G-rw+u-5+ zJ?gq|YtNT!5xh=c_aJ?KGYM_}FnAjL`2X!kED3uGiuiCHf_w*-Y=QKY-O5Wk9Xw6h zGzn(uxUyfpNwBK7=$v4hPePp|p;?54c0rxG3{ka9`eGAZ^T!7xT0Dad2 z^v4#U`{tqJ)MMa}8S1Qr<)WOhEHoOj2K&my{osG)aFjVWoje6;2qZO^&m5Wj*~sMa zQ%V-Yqtwl=;+MdUN3)zq*%6PR( zZI0F^A5+)h@OYg*CVgy3sv%8b_KM`*z|)ZW8t{&s)uc7U@uYR9%QKPfoePMiMzF_iD`AacD6e6 zOXlQ5ia5%s6#4vua^}SNT<+aqv#rvu_-aFb5h+n&{ed|0xYOrq2G`5(ZS{DdtA2#^ z`W($W=JeB^g9+H-{FsA5?z@H8LyS=Y&K!zL1)53`zl# z%i)EJrIj11vTU8-PcC=8a~CXzgE$XPXSghb^LX%d1(Q9MoZh#DK9&xy+@gq@X|o-ZN{ksT)Q96CHq1hcXqiv1Lr|F_9&AgJ67eNl>0(q z4$U}4M4Cr;aIMXWB)Rh^F>;%}3&z5UNL0A9jzcHdj0>tZWkNJe;AXs2lux}qc;(Fx zCyySPCk{x4`S)`@il%J;&sH?`_V=%T^x}NF@WFGD@jU;?N?Q}!*qFqAm~F^w*f?7T z&K-)mi#zcw?B&@DLUw-kisYh++@Oipl{|qm(KFE9U7qp5)xqPFM_#}3^RtsbeCa_3 zXzTHTyqs}tL(wE-Vxn(h6ZjaE37~cx?^HZrRa2ACh&dKq{q;vzUijsrH#?)=otuS|YCDEBzihorl82inBbP7oNB z8!4us8V`1*RQAc>U0%F9GA*85=JI579(`HXZb7M$q%8}Zr7jD*h1n2z<2Dy8isAD7 zgW6OiB;Xj8KTp8Si`(#}8NDdptSm2kr;|0<^RJ+7Egq-qQ8!*f^8RRNJkD)UZ*$i{ zEer2Xwh(J)THG+vo18Fcbq;Txqkf*0Fh^s0jwA6bo#_>pU+V&~G#N^dw6txac_Wtv z)7x8moNXALHN-Moxt(#i>lvGpg2I5K8Kpd@W$ej~=~^U|6|t=jFB5^Wm{XTjB)2e? zA`L9bjq@6rQ@fOAB&gg1<-+8{^9rToMw&fcbOfPF+!K($8!Pb5QINZrBc@rUR5>Cc zhvYKLUU1tB`4R{XJUX1u{zP#v!j+>2747+TsIj4@0yXHg#oJMX>WOfQLZ2e|4bX@* zA3MO;0wkak7>deLJyMJ6km&QpWE=(?r8c`#uJ%+(aNNkItBE6P-ziM3UVrN8R7vHyu_}$7CUh&zGlb4$nO;Je%&4q6 zO&Af%2&hupWSuZC9WEFuNUaQyn(LGHNckQ8O;7iU^RJJ~Z_hbCtIrv90z99#n&+7f-=5Urpnb#YX&Z5^eV0A7^ z=|Aep#IhB`;i2%W(WCSiOP7soJW+eB_U)SETPI5I8sU!JceHMzc=_=5q3tQAHMQ%B z)Z=@`i=R?ZffU=33WmmuyA;$jsh-}{!Dq*dzjNa|6sqpl(@J^wA5wXDz<5cu;?JtG zuVz{)qWCT-@0zTlxfsg3ChONTx^IfQ@0$uP?u|BC{TFFdZ{BdwQk8nT0rwGCu5SuY z!jAKvc{@$~+F@<1rO%lx4JFjM)s_Yub*|FVu!%ZPTU zP-by$qAuKTY1B~{9=0@=P@kDC!1LKXkI;=a>i26)KK(pKd;1aHHqLF3~$oA)ap?Z!J{e?!D` z{;@SAg0cQFo4&DHJyuD9onsqG1Xm+_#%k5u3GLWJTIl;9=q1~&wB0Of{eCtU^!xey zAgOppp(n&aEHIh7PunakOw(=KF0IkMyhbIL*H9* zoWr4uM_*6yXH+S!=^l#2*hHAy%5Mb%j5Q$)Lj$vyB>ziMr0TkcAPs*d3jan_PpdSf zll;4?`J$@%OS6vDe7S5XX}Vq!CCQavP46TL-O?`!6|hWLmJXK=l@6~OTJ^T^)c%W> z2m2axar-V>Y5-?lKHN6cHvH7kQ>iu8r`s=DH}|<`AtM*9_0PGd^+@kc!3?&&Vzd#b O95s(H^tsg}wEqMD;@3I= diff --git a/backend/utils/__pycache__/db.cpython-39.pyc b/backend/utils/__pycache__/db.cpython-39.pyc deleted file mode 100644 index d80fda937e89c5caf9c710e2c3b8155d2433a753..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5172 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 W)geP#dj!54mC^uF zkm0bQ6qYoWv`YCuJxY65rU0^O0Rpf@ex3en<~B>5Z1FLY;Uec2B&HA8jgfW|XUQ$j z=dS&dTl*n*{p+U>uH-JSo}lb47fkZd!x6~8^N?8QfJW334VV3rOvzR$ zwTgq4U=%EnhAoj_rxSDW2&w)X6y$cZUpER zYIS?LqQ=UzvYR6cS=(N@pPio7;iTh@AZ`2en~&Fi){&N*{p|7md)fFm*-zs--kv^~ z%#MGdL+;VoC%LP)i=Oe>A|P+v-Tv`rZth-g@=`7_MKY9~v1LRa6jddHyfS9c;8{f5 zV~3cRWG}i9);=;sG~cTZ%p;i~*DI4Hql}P(RJ#>3ii)|gM;pT2u;LG4Q_rcsUeR^t zeQflrK7T+)6l9oF!g2_6NcKor7}A0Pv5;CpX1Z!5J1LTk&Ap>uIjs4W5Td}d^N2nS znD;6nO&-+{#S(@-%p%W-9;q*dG?hZAL8rf8A-e00fm3Im%>T6Y?eYM*joIndt>yWx znel;$<`1X?`rT^_U%*1~8q%UrJ&B~SP}|9M8UtCuI@vkhHPLm=lx$tKriJc|&^_kb zESS3|x)V)l;b=xUng`HuaQKX9+w+ruG|u6dLWEa30EK%cCIUYW diff --git a/backend/utils/__pycache__/render.cpython-312.pyc b/backend/utils/__pycache__/render.cpython-312.pyc deleted file mode 100644 index 71c8de0fd3fd4921f51e213811cfe9b8525cb4e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1608 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 IRP*uw2Y+Yw+yDRo diff --git a/source_code/__pycache__/main.cpython-314.pyc b/source_code/__pycache__/main.cpython-314.pyc deleted file mode 100644 index 62ec52e4422e693f8d8263e02efba6e91c18caf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17624 zcmeHvYj6`+nrOGwl3EX2lHXt(%b1q{8!!YDAP|FX-bQIVVkTopDU zC!0y^JTUBJ0?s6{vq|pQn+KlRY=#8#m^BtCDXBjAP|8V)7Ut3L4U*L!A*ks_^A5;|8O>vY! z-Ai%w4tl#vP;FNW>g|lclwq7|heps4Un^*duM>2{X9c#Eb>zrZru=fMRmG_}rUvRp zS4Op}7fV5^{QyOkP^}sV>02@~={fSJf8*C0IjwMZ8mC!9OR<8fH49p09VN4KIm%|o zwW?Z8CW_NmtJWm@$m#B-IkrYE4ms31S8h-Cg<>vSDB;XPDQ799gn9WC^w3&JaXIqL3T0d_ zq}aGTfaP31!1-JOzzVJq;DXkLT+zB8QIr>U1ni6j<;u+9m@3Ghjao)2I|x>+gz~G( zs8ZNj_}hJGgSwRR)Al)$tB6{&eoiFQ4m9{H$lH|7_yjUravpcB1d}#JlfLJw0Twt3`vy?K$9ch1|jc zQRDUPkF<-rLq0z24|X;-57Q#+JM0e&uHeC=?7|ECXc<6=z9tK)9&l^@ovFqSBWM$>~e?vya_6S zNNvc?yF0?WZ( zN(nTeFV(#Z1a$!w1SBRfoC-FUhEoI7atuHnrvb=vT7Y`a%IONJ04*3G#FCJa(?g1h zGXTuui~zH_9L_}2%v=_HTexh1R@mq{PD;q-EHJsbqJE#h(;Munb?k^Nf&NTB`{tL= z{buTHzip@ckh{sl`$K{aXZs&d!VFIy`&FXnEgNL^$fLkfG4Kb=$zJ;a0yrWk-9&Xl zSaKW%U&``3X$R(?;Wp3??Tje+bW*Enj)pO?%d=9c5mhH{AmVOXn@k?$jNp^nU|wg{ zru2tX!<;Y;)Ap(cO6I~J*{d7rZmLBYN)s#_N6YvM_o|rX@`qg=?!*2L|52Y8Pnj<4 z6WoHp535AlB{E@OpiSC%-Mks971@mecgKFOdy}|8S&Ax`%irl2T&}8(fuP472ycRb zlxr!J31ozFca%(XJ77t}e2fNNu9lcgWW%ghjnF9U{y7!a|VudF?8`7%CIBQUTIj z+oI%z$b%PiW={yB(C{VzF#LF7X%F+HDPB6ihZ$$*#@Xz?tlq2`TXvBx8?U(QBNqOZ zDY5e|vh&90V{D9_H+#BpN0B|;1_4-PfRb~h@APC`Id!i>z5r!WnRc{8C)bejWmW*l z0*%|{OWaD0c1Bc(kAy`A@Ug%ntrvA(m?%DYWSA!N6vlkX>Ct!s!LUy>r{;!4Ao&gB zB6U-jSYsdiID6dsq%qE#`b@p17+W&RmVBIP+&DTi?)9WBj0OCe&Y_&QR7%=ds0wPB zZiF=@eP=sh@8b67$$m+7onHy1(-&3Fhy?u_a$&Hha)(Pt+0u{Mve^suKh$A<1+N1XUT9=aY3rD&-zWu-FoN2 zYDt4<$T>}Jxa7&?$-rhToM;w;?d<`dg4o14soggtsRlY6My?Om(rAtuOW|MCSQTjz zR(Nr_4v8alg7mR`uAGaa_R!6mkhU1eqys6-49DqY?nkKwcuUwMOeX1qW1Y0jr-pP+ zom{4!Y^)YV=73yDx>ZJ{VmW;(HaSu~j?}4kAQ_n9oH_?$?HMkG3gx;&?4H$Row7rE zr#_SP;-v4L#~EblDr9gP9OW~rh0oMxhxGZg(?e{_LOIr{<&5$?%$86>MyJssPmNpz zd?zdS8BsF+WNHrIYR<%EImya@2lrkeaql*&1$ijqw3HWCyo3swq3Iz?pY!$d4}x+ihR|{5{~2Cwrc;Vd{FDZNEG0 zTf3$an3Alp`;gDo<`4Kf-5oyBfFYM~B;*SN>k{#JeBp3|sPXZ9kpCK)XyCpldw!ef zduH;jo^Lgzx^L$akFdilTDq2PkZNDPq-vS{YsBl5CkH2g(F1HGY2J1>w;LHF!QbHv zMg&pSwZB_ly{m3V?e4wXM1w!PLEGy z0w5WQ8X*!2z?48FFNC}NC`Wa;1rK;3kc$Kmk=Cy9`cOI$HSK&b5<(8={s_?Su&8eL z38IB}`@_&UEDKa3L|{%m!A=4AB9RG(e4V1Ei}wpYQD1-9;|mEOnE@*x@b)Z;Ju;>( zsmRJ}#P5JP;&%cNwScxG0fFC!F&xG)xD>pT1R*gb(rqH`3nS)Qv}ln{aT2d(Ad62H zPRvW;^i=E}P%gX;Fh@7_1)KjVYmHm;PnMi0iCI^UT322&<;F~9qo%U>-1+fB?uw4e zS#^zKatuA%8wSc!5YH<;6&Y+FdN7*1DQenusbtaMp*NW~eM3KumE3W$laMzif;}47#ZamJ!EqO7^!coh@am(U(VKJs2XD(Uuk9$wm#jNGy*7Cu- z;uh;k-3i?(=IN{(YAR>`=P)W^&^go`&8?1_s&8l@4)Xr_x|XucxlYkA5NX`6g-2Gs zdMKK^_9N5UKVMNp!na{uyWcGARn)B6J5WYYe>n-{V zMi#@l#`+rdg?ZWa)#?k&X$)6u0D96%pbly#1XD;Sm`svjYFd=MnItWT9!k$}`zmCF znj}`n85!Uc)HO-6B4bzY7DB8v4ux2zN^$C&5G&|AkXk}$IUONDj02^k84d`LqOwXQ z-GTt=2?5HWlp_R)okoBZQkklG8UZRw#mgZeK&e?xBk*!Ms4`TjK9k!4(hFo+a^Hhs zWl;Owl3+2=mgz4fST?yoX#|U`LraC6^1TUGR^)CdlNfnaLf{g$O7x6OKKWSUjb|lH zop|}}zl>BRDHUG}Rr9d7C?3VX27WUJw<4$m(99#V%r_uFWN6Px!;-3Cm_&-qeL;UG ze-~y#WXU%pz&;a%$?wAu@LClAV*n!C;Xdf|`uQ+_561lj0a9eX6+jY2^Y=nnWFZ&P zv+*uWSMYNRFY|6pK(x&7N8mx=1t4SQ6l#_*b6yGuyM!Q6kbu|6i}Nz!=u|rPF8rSW zWNdxOZ0+mn?dp4=_kmN}$IL4b(OSMIqWvr2Ra17~uE%$sVu#jzWLo*x#Im?ghF8|* zQooz4L1^1Tf%l;;r;gHmSe*so^OUj9qCanBF`R3xt5Khymt9w_KEIsCaJ2^DG<^!H zrvSaO*Ces-)(V2@{C*}uF0DM)Ji`Ge3il6+R6;vx1-%j-GoY_&5{0B=wliO1Jq;oS zd|kFX5D0d;I)FX!BNwBGJqjAmAb(_-;deteV1tOZCd}``udIf>yX)$?BsVlHDQNh= zfuy9KRN9wWpumD^k zyr2l#h8me|Fj1uy$QC?xB+4!wQURDPVJDZubnQP#18GyKf`}Pz`b7Ppr2uVgYAIS2 zN|{d0P;o6UQ9Ept5~>R1>=uP$I_VZf57c_}q{~~d&`|{~mrhfSbTuOnAI!OdI8?ND>&h<9% zA!w7oAAx{i*3#!rTlysBE4|6GOUb=Z(GNm5hMS-pIA)5|K?uH0*Pa9P0t!9lpnJ)| z1uagJ1y)KxKxQ44Lk_h7i%al2#}F3xdn^4~6bj)`bXlpkhz3ieASksnbyJ<*rli42 zAtZGQA*FO#H`QQ)-fe~kOC4g0@#apqgGH@bCQa6@XXf6+9LwpIeruiDO!_T(9@Di} zPKGnch%tk%M+Y@!&|Z-{?Bq&WsD^nI6=I#NvOWZ{?gF7Dvz9BJ@!n;lC_P;HaXS2^ zX^i0h9W+K{b-%a9s6<{#g#p(~yQD>7|C<#pT~cGD3+XrOf#wr`n#Ks((VJ>g)70=g{04~T?*!0@6r~;lq879oK6eLU(ESueQ*c>p@EnMA9(0BA zs$d&r0__jdoO^aSY>8t}Or0A}Joz&uEYNn6u2@73)Z-5k)efO75~0}x#b#0z!fWrt z1j5lH3on{L*TTbXF44fuWatf&&P5ILBU-$^HaBoiie8K`LJ~VaorxDUWE2uF54>5L zmPKNiauofVtBntKxUl+?G-M`g-;~t9hf2a_uu;3IDRa)LiUE7SePG$M%aTfk=!&h; z+`6c#?q-^prAe~(gEcV*ea)w);&^WH$&DvA4yu2pe^LLEair;kyyF|kavOT;K$jmg zA^SFNs+h^dmzKv$t42$!&Mb_UR()K0=ka<_*_?>Pi{=dI`gMbv7qY+7Q1fc(8>mRR z!czJ3rm0f&vML3%N8hPRK`!O@x>`fsV(LR{ab2F~!&UhJ&ug;q3FT0jOSv4}g=A2mr0yy*Sv>(IF{Lbs;Esh+up`WlqM#u+ z1TA<}iE}b71#-AWQIg!0l7K>L1|?xa8gdts;cj8yZ8Dw*eLP@&&gj%2?F3ExY`h7E z5_nUShBvkH+$oxN?Pe{}w1c09H?zJ*k^UBV6LlJd#Ril)`Ql5HgXa?G`X+~7oP7R$ z!q?aoU5BI|SNLX0R}W~jF#-f9$!eun;*x41+%sZHx8V1rq1dl+nx!lfww^fi6kGu$ zo*PPG*=7kZ{Vn7iwm=;RB7#4_AAnCO0q`xTD7Mr#p{kn`wf-<_lD`KI1>6=49jQ(! zJ%)7zNAf4I#w@|t5elGgom?EGK2ejOhA+L4IgF<(sp3dSi%J#99L_?E(^CHttN9E7 z(QU+w*7amv0`)Lpl>t+~>E#~{9X?Y!R8pXkMS+5?{Jn>h3M z#JNFaqWEKwJq@?;efX^~YZ4j(CJebcWWuD1rg32WaV+u+0JBfDl`uNWnS}<$;u(BS zdg2FIN!oed^w&AhTd(|gE~Wn4=b3*Nh6zkCQb>Yv8}0N_J-KkhYfbntf%RQyAn5iI zJ~vNfT?C)HT%y6{>Iixxa2@LsO)l5{5qAJFEqs|>z?kx3A>i-ybp|0q=W=<29+!(> zfbA?tuo3}EPy9LrJ_G>-hY|b~K{tZO5u8Hs8~`!jMQ$qn9v2#|`S(WzUl`&MM;G4$)aeu;8Uu75#M_)CmG-X#= zT4TGaC4kW^xNa)d)Lh?`uc^6O#cGya%`<3P>8nLL&9dt`1rWJ1S5tFiIe;q^0HSaq zO?aSo#o;XgNOH`zi@>wFjc!vnMWj@E2Ng5|Pp8@ecBVlS*oD&}>fSqnzf*@)O~#CT zog#HBwNoKAS_eCgPSa`?nq>x9P6MSgNaeCr7-Aqj6JMuXoPqSrq%4L*V4?2Rb}DU? zFQlHtL0wikobsL62RyYioXk5xeJGg_$AO&Psq|+bytEOS8J%Q}|I@hN|Uq8pOh1+EoF1KcVeN#a1t2Ob&h zLJTb{E|b3d=xYQlf6F&u^KF=ZN9@k8>s9i-X6I8ckfQV{!-%18Hoc1%^q-> z6Yo8L`JbP$2?xQ@!N-H*4ltL(QZBQY<_8cAB6tyi$ZX%&SSPX`*P)=_>k5f_kE_dbzzx@yB6IhS#%58w+fmEa z?g5@3Y>x#XLv4Ovz#De)FF|pzY}QKqjQ0(~(tz2RHXME!Qa{HWs965yQR;JR zN&kU?j{c6QWqI6M-0vK4^}C{$%DA=s#kH}D)uR=wqn0&s$ki5`S2a4XDr#8~x6bX~ zKCq{MPt>wBZY}ID7%1y6i(2e)>zw{|1DpFdM=i@Rymnw?|Hi0g$rY=*?f~dHL6u-+X1gy@-DYDkGzotd#=+ zu!}kXBye@LsBaSZh)0O`IZfNQ@WHOIuOY}ckZa$4qGtaQ-q$APHErMK6C5C4HGnE&YSKoX$*SNQF_m3NzKpbom zb1=5CexGCp)ztjs-Sr~7r}jrKM{Vq4J! z%=`t+??s@@8@b|E43BKKJ0&JT%*%92_FC_0*YV>@0aY?T zR$Mb$TyusUE3S>QMW199J<-~uiWe63sKA1}pb$J`yk!2suKr!oCF{;Ciml%{x_;+a z$*vyNI6Eg^SVQvV+ds)B^zz~5BmCIX^<(A@ zJ;s`TX0C{uD+Y6-Y{fU1jCt27l_uvBn-$Hj8llJ8>d(y9 zKVQ*6+_zyQP>*aasAs4TOP2sVue%-K1zLrWG1f0qUoe~M%heakH4vVL&5=?9HKwj* z!z#E{Znc|HY;dJFb;w7-3ns9`MV@PhleP9iripQ+aTszoIlYX6beVFvWLB&32~20Dvf(Icsc%M~D zVJK;rspEr?7s(+pmXwSNkFu3QFw_wY3(d1861m}Py8&!ecf(tlOxH#Dkfa8t8eNcX zQhkTTJ*dF!YW^H#hF)j{qzqtxFPh-|E7$xYbAQAyK(l^>$UO)Lyzs(GG^B(JQR8j{1_P~a{2&JfLp*LUe&)puL(ZBNv6*Tot3u{{s%d1NmJ z_CB=t_|8FQoLP87tJdUQF;J##Da+1>cJ_piZyjfflmb^&YE4%1k;0SNSG1JL(!J}O zD;k=_g2j9Hu5ZK0uKcdjQoEV@-DcGmX8OrOT{5fya}7m8cxaMb^wf*91_#@ zkqY5bu49#3Sh#UXynb@(wf{A7<~MMOKlSoEl5sAuY@l~k$Q$AN2-7!t@~w$;r|{Vz zJftK1BEIOdefiM)iJv_sGkkDG^pw;AsKic_Ipu!?y^_`#PmLr=qBvQJlZ{8Mo4RhI zOr>MSc~K_$$Od8+hf7DWN)-fTd;;(O;Dk9ruHsZFb2_koNow6u^NWTK~K#&NiHc9Xaw=7xU=3xOS`2c*Obj!WQ`liBr;?{PgeW|NP? z5oO_$7I!sq4iIx@I#^4Vpq*|BSqL~q(^WDsd!HPZKzE_E3XM-BxUlVnwi%s<$aqdmLU z>-Kd7J0rL+6HlF-Jo!rP4*y{|*8WG}NF3Ewta9V8!LH}WAPfH(0I+fQd%<*Gd%)*! zKLAGaV3zJb>fR5+3_cYj_rIcLzuR*VP3Xbc#}f<$c~Rd6at)Z2h2aIE&mBJE0>aS_ z)C`ZFXu@ZNAn!KG{ z&C95M!|DINIygXIw7^$j2LX-w3B3mPSwdV4l1ZKhY_$O~mJ7~M@$4e7(Tiv2#LYSJoB|Nf;&bN5a|$7RJ=c(}?QXbUKpFGk zjkBS+duyCAAT>Q+angRmeyVAprN3op_34en8_(p%Zr?q6`|f`UMqT@3u8vVxM>NRa z0K*ITPa3|Gyeky7Q?*A0kvmmC!ASHVvQ_mr7}=^ijFIR;qtxh5E8+(AM z`iNTiN1Z8d%8QvwM@^-Y*}#~oB4%1XYFa*Y&zNalcl{^u++zR9_7m+V11AE5>qqiO zbR)u0=UBlVXTpEDYuviGd+Q@RBb5G30;1^W(r<4Vn`$|h`4Ly~o)PwtCn#zwf zl_Pn`s3F@X^c{Wt=&9QW_eJMcj+v{*nH6Ahpsgaz9XTqSdpDn|9;oTBL50H5y0PLl zW5(OM*|?#+TNl?EyP2z6HC=MU6jaeQUr`9JdNoVwoU0Gg`LyNgN-bS>HAh9;uNvmi v+AHfQ#?*6kTs`L#hJCc*D>cQ;y|K*z4MM*pe(?937t~ud7p%tma{Ye+(;ZZ< diff --git a/source_code/blueprints/__pycache__/__init__.cpython-311.pyc b/source_code/blueprints/__pycache__/__init__.cpython-311.pyc deleted file mode 100644 index 42f3b4ca982f394fc9225a5f0fad7f755e9bfcb7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 162 zcmZ3^%ge<81g{&{X7U2*#~=<2FhUuh*?^4c3@Hr344RC7D;bKIfc(!O$*)F0!o@1) z`SQl6y;Gm;TJmJ~jF{ZS%!Y%)FA~nE3e2yv&mLc)fzkUmP~M h`6;D2sdh!IKm$Pb6!Qa#56p~=j2{?aL=iJk3;>aYDa8N) diff --git a/source_code/blueprints/__pycache__/__init__.cpython-39.pyc b/source_code/blueprints/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index 237128e589c5f15033fb10b1dd7c421702764914..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 144 zcmYe~<>g`kg8yrGWby*(#~=+t!6j?} diff --git a/source_code/blueprints/__pycache__/admin.cpython-311.pyc b/source_code/blueprints/__pycache__/admin.cpython-311.pyc deleted file mode 100644 index 23ca2bf98f11a575bbc76570887052a7909c3bb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21814 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 BJ&ynY diff --git a/source_code/blueprints/__pycache__/admin.cpython-39.pyc b/source_code/blueprints/__pycache__/admin.cpython-39.pyc deleted file mode 100644 index 2d77d4f19971838c9e30d34851d5be0489c1df08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11271 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 diff --git a/source_code/blueprints/__pycache__/brand.cpython-311.pyc b/source_code/blueprints/__pycache__/brand.cpython-311.pyc deleted file mode 100644 index 8731fea1cc2b1607ae4bcabf76ac35ed485ae17f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24298 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

=GUKf5 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 Bf-nF8 diff --git a/source_code/blueprints/__pycache__/brand.cpython-39.pyc b/source_code/blueprints/__pycache__/brand.cpython-39.pyc deleted file mode 100644 index 22d046a921bc1f844932e1689031a04575453313..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25387 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 diff --git a/source_code/blueprints/__pycache__/image.cpython-311.pyc b/source_code/blueprints/__pycache__/image.cpython-311.pyc deleted file mode 100644 index 510cc6b6c8c316f4dee8a679e4adf03de300bdb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20393 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 e1LN?B3JXzK3jiECB_wt$lAR*|~k!_8w>g z+1=5BOtTg4iMj~Jt=$iI^{iNFBkgX|GwQJqr?(WtsT>5*)ekd0b^)c8xWS7ML5Gwl zm0tWgnHP6~p9<)pfIEp^$-h{UxF@7~ZGoQ%|jDqWJCoW^8JK^{KyPD zK_b2^!U@Eg(FBMU&;f3wS)9bsG4b#7Wj3a4UEomQ(3LvI^Z;`4v|f^5qJm!5Sj8EU zMaxhCmbHKu9Vuy=1G#r1WIg`u^s|g5TIE3_i_y&rS*espMsCcZpVx+o)A}h8vRP3Uk1pvt=`+XEcJgrS7W}~m8590b* z0;tEPkhtJM1oZ(5uA<;Q2s$KT;vtbZ4Gg#)9{M-} zIf3$O4-GkJIQIq44}xAY@ArwH;P(|q54ojw{2qa$W(hbgvFAwdhuHJ@m7v&;ObB`w zfHKeo$OINo)WqnG{-;h_PYzBG-^f`$o3lK05YA2I)N(nsthtUe*Ri^_oNn!8+nmV~ zXgNm&TP_iowqESKQC>e=UO)3Vn6b*+x$<`DfDoIvmCM`8nznJKZIj#Q%=yz*H_T70XB0Bm$_wf2cKaMJal9zXk!i5$&N*tO#yDk*+&jf z9R_~hka_I!qmLt14m#Xb73}BpEB!m>3az2-Twx7Uu-f0r8}k=2nPCka(qfA1SyMfn zjWHG8Fj;3!*3b^tw3;)mW=yMjz46%2qdURQm$`8=nQ;acTyUn~HmMa;$EGt`DJP!RvNR1Dd$t4F_Sf<6V5D&v?G;p*I0{C4Eede*wqn&(CZcsiw$an6#KK!R{rno<759!a2 z-Y8x_TfCmxu$3*|#uaa4;I{Yk#U&_>DPB8c=1Z$W1>uLn&vMmU-Z!(QZCq&^zpNs- zDr66}aC@6X4M1>aK+C z7zjR&FUn-N92O@8N(|RdYS15#=_bWL9uwcumsrFwDgN=8aZ>zCh^%0+CGMNpPUf53 zJeJKQ-#4*pW~rOUDwyQ^rY_6BDex#9^wU*xy2?rQqB0wYUss6*Yu4d#dMy@=;aND$ z<5*CG$+SNxe!e(h3@;DoO%}6w9f#NP03++cabz|ZADo|O!nAa%gMPWkT^^m$K7n91P6-E#fGp)v9DMFBtMMO~^O%PMXiS&N~`cm38 diff --git a/source_code/blueprints/__pycache__/image.cpython-39.pyc b/source_code/blueprints/__pycache__/image.cpython-39.pyc deleted file mode 100644 index 1f9361d30a14c45601025db40b4311b3546b7ff2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12197 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 diff --git a/source_code/blueprints/__pycache__/main.cpython-311.pyc b/source_code/blueprints/__pycache__/main.cpython-311.pyc deleted file mode 100644 index ebd595bafd78f545a4016997241e3fb0ec3fab90..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4528 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 diff --git a/source_code/brand_spider/__pycache__/web_dec.cpython-39.pyc b/source_code/brand_spider/__pycache__/web_dec.cpython-39.pyc deleted file mode 100644 index db0f7cdcdbe74591102c267d59ab5ce6efe3d8d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4726 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 AWdHyG diff --git a/source_code/tool/__pycache__/devices.cpython-311.pyc b/source_code/tool/__pycache__/devices.cpython-311.pyc deleted file mode 100644 index 33cf70855cc86b0cd261e74c4e590086a1230437..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12348 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 qnBdC}9joZecT%pw$-9wmUn>WeIn$o~Zt&hhgA From 735234f7bc219985510f16fdfdb42234baa65bc4 Mon Sep 17 00:00:00 2001 From: koko Date: Tue, 28 Apr 2026 21:42:30 +0800 Subject: [PATCH 12/18] fix: update frontend --- __pycache__/ts.cpython-39.pyc | Bin 0 -> 8873 bytes app/amazon/__pycache__/approve.cpython-39.pyc | Bin 0 -> 32689 bytes .../__pycache__/asin_status.cpython-39.pyc | Bin 0 -> 18494 bytes app/amazon/__pycache__/base.cpython-39.pyc | Bin 0 -> 24711 bytes .../__pycache__/del_brand.cpython-39.pyc | Bin 0 -> 18506 bytes .../__pycache__/detail_spider.cpython-39.pyc | Bin 0 -> 12895 bytes app/amazon/__pycache__/main.cpython-39.pyc | Bin 0 -> 17784 bytes .../__pycache__/match_action.cpython-39.pyc | Bin 0 -> 19273 bytes .../__pycache__/patrol_delete.cpython-314.pyc | Bin 0 -> 139850 bytes .../__pycache__/patrol_delete.cpython-39.pyc | Bin 0 -> 61838 bytes .../__pycache__/price_match.cpython-39.pyc | Bin 0 -> 34586 bytes app/amazon/__pycache__/tool.cpython-39.pyc | Bin 0 -> 5415 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 0 -> 141 bytes .../__pycache__/admin.cpython-39.pyc | Bin 0 -> 11768 bytes .../__pycache__/auth.cpython-39.pyc | Bin 0 -> 3317 bytes .../__pycache__/brand.cpython-39.pyc | Bin 0 -> 20957 bytes .../__pycache__/communication.cpython-39.pyc | Bin 0 -> 2432 bytes .../__pycache__/image.cpython-39.pyc | Bin 0 -> 12194 bytes .../__pycache__/main.cpython-39.pyc | Bin 0 -> 4773 bytes .../__pycache__/main.cpython-39.pyc | Bin 0 -> 13429 bytes .../__pycache__/web_dec.cpython-39.pyc | Bin 0 -> 4723 bytes .../conftest.cpython-39-pytest-8.4.2.pyc | Bin 0 -> 136 bytes ...st_amazon_base.cpython-39-pytest-8.4.2.pyc | Bin 0 -> 25106 bytes ..._patrol_delete.cpython-39-pytest-8.4.2.pyc | Bin 0 -> 44141 bytes .../test_patrol_delete.cpython-39.pyc | Bin 0 -> 29305 bytes app/tool/__pycache__/devices.cpython-39.pyc | Bin 0 -> 7285 bytes new_web_source/appearance-patent.html | 17 + .../assets/appearance-patent-BPCrG75P.css | 1 + new_web_source/assets/appearance-patent.js | 6 + new_web_source/assets/brand-BZije8D7.js | 1 + new_web_source/assets/convert-BKSNvX8i.css | 1 + new_web_source/assets/convert.js | 1 + new_web_source/assets/dedupe-DNlVfFj-.css | 1 + new_web_source/assets/dedupe.js | 1 + .../assets/delete-brand-BP3XWKAC.css | 1 + new_web_source/assets/delete-brand.js | 1 + new_web_source/assets/el-input-xaztPnzw.css | 1 + .../assets/el-table-column-Cy4YJvw0.css | 1 + .../assets/listingFilters-BpGOU_pJ.js | 1 + .../assets/listingFilters-CK58rX4v.css | 1 + .../assets/patrol-delete-CSekhzSS.css | 1 + new_web_source/assets/patrol-delete.js | 1 + .../assets/price-track-z8RU_FlW.css | 1 + new_web_source/assets/price-track.js | 1 + .../assets/product-risk-eXMv239F.css | 1 + new_web_source/assets/product-risk.js | 1 + new_web_source/assets/pywebview-C66x_2Dh.js | 55 +++ new_web_source/assets/pywebview-Dp5dN8OO.css | 1 + new_web_source/assets/query-asin-Bv7Jtgqa.css | 1 + new_web_source/assets/query-asin.js | 1 + new_web_source/assets/shop-match-BiZP8IGM.css | 1 + new_web_source/assets/shop-match.js | 1 + new_web_source/assets/split-BoBVrLdC.css | 1 + new_web_source/assets/split.js | 1 + new_web_source/assets/zh-cn-CuE9Zzgz.js | 1 + new_web_source/shop-match.html | 2 +- ts.py | 321 ++++++++++++++++++ 57 files changed, 426 insertions(+), 1 deletion(-) create mode 100644 __pycache__/ts.cpython-39.pyc create mode 100644 app/amazon/__pycache__/approve.cpython-39.pyc create mode 100644 app/amazon/__pycache__/asin_status.cpython-39.pyc create mode 100644 app/amazon/__pycache__/base.cpython-39.pyc create mode 100644 app/amazon/__pycache__/del_brand.cpython-39.pyc create mode 100644 app/amazon/__pycache__/detail_spider.cpython-39.pyc create mode 100644 app/amazon/__pycache__/main.cpython-39.pyc create mode 100644 app/amazon/__pycache__/match_action.cpython-39.pyc create mode 100644 app/amazon/__pycache__/patrol_delete.cpython-314.pyc create mode 100644 app/amazon/__pycache__/patrol_delete.cpython-39.pyc create mode 100644 app/amazon/__pycache__/price_match.cpython-39.pyc create mode 100644 app/amazon/__pycache__/tool.cpython-39.pyc create mode 100644 app/blueprints/__pycache__/__init__.cpython-39.pyc create mode 100644 app/blueprints/__pycache__/admin.cpython-39.pyc create mode 100644 app/blueprints/__pycache__/auth.cpython-39.pyc create mode 100644 app/blueprints/__pycache__/brand.cpython-39.pyc create mode 100644 app/blueprints/__pycache__/communication.cpython-39.pyc create mode 100644 app/blueprints/__pycache__/image.cpython-39.pyc create mode 100644 app/blueprints/__pycache__/main.cpython-39.pyc create mode 100644 app/brand_spider/__pycache__/main.cpython-39.pyc create mode 100644 app/brand_spider/__pycache__/web_dec.cpython-39.pyc create mode 100644 app/tests/__pycache__/conftest.cpython-39-pytest-8.4.2.pyc create mode 100644 app/tests/__pycache__/test_amazon_base.cpython-39-pytest-8.4.2.pyc create mode 100644 app/tests/__pycache__/test_patrol_delete.cpython-39-pytest-8.4.2.pyc create mode 100644 app/tests/__pycache__/test_patrol_delete.cpython-39.pyc create mode 100644 app/tool/__pycache__/devices.cpython-39.pyc create mode 100644 new_web_source/appearance-patent.html create mode 100644 new_web_source/assets/appearance-patent-BPCrG75P.css create mode 100644 new_web_source/assets/appearance-patent.js create mode 100644 new_web_source/assets/brand-BZije8D7.js create mode 100644 new_web_source/assets/convert-BKSNvX8i.css create mode 100644 new_web_source/assets/convert.js create mode 100644 new_web_source/assets/dedupe-DNlVfFj-.css create mode 100644 new_web_source/assets/dedupe.js create mode 100644 new_web_source/assets/delete-brand-BP3XWKAC.css create mode 100644 new_web_source/assets/delete-brand.js create mode 100644 new_web_source/assets/el-input-xaztPnzw.css create mode 100644 new_web_source/assets/el-table-column-Cy4YJvw0.css create mode 100644 new_web_source/assets/listingFilters-BpGOU_pJ.js create mode 100644 new_web_source/assets/listingFilters-CK58rX4v.css create mode 100644 new_web_source/assets/patrol-delete-CSekhzSS.css create mode 100644 new_web_source/assets/patrol-delete.js create mode 100644 new_web_source/assets/price-track-z8RU_FlW.css create mode 100644 new_web_source/assets/price-track.js create mode 100644 new_web_source/assets/product-risk-eXMv239F.css create mode 100644 new_web_source/assets/product-risk.js create mode 100644 new_web_source/assets/pywebview-C66x_2Dh.js create mode 100644 new_web_source/assets/pywebview-Dp5dN8OO.css create mode 100644 new_web_source/assets/query-asin-Bv7Jtgqa.css create mode 100644 new_web_source/assets/query-asin.js create mode 100644 new_web_source/assets/shop-match-BiZP8IGM.css create mode 100644 new_web_source/assets/shop-match.js create mode 100644 new_web_source/assets/split-BoBVrLdC.css create mode 100644 new_web_source/assets/split.js create mode 100644 new_web_source/assets/zh-cn-CuE9Zzgz.js create mode 100644 ts.py diff --git a/__pycache__/ts.cpython-39.pyc b/__pycache__/ts.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..85a8c25b80ed3f91a0c59feff351ad6b271b5ac9 GIT binary patch literal 8873 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 ZD#BP@+_lUR43A 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 literal 0 HcmV?d00001 diff --git a/app/amazon/__pycache__/asin_status.cpython-39.pyc b/app/amazon/__pycache__/asin_status.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..67ab5f0014b0b7885ba2c4e1b6ab17e91ade0103 GIT binary patch literal 18494 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 t{KQ9pPLy`HrvKkyfX)(7N;)$~Z?7HoWY`R| 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 literal 0 HcmV?d00001 diff --git a/app/amazon/__pycache__/del_brand.cpython-39.pyc b/app/amazon/__pycache__/del_brand.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..65e983960e5c4ff8556b1430a447c525cf767b63 GIT binary patch literal 18506 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 literal 0 HcmV?d00001 diff --git a/app/amazon/__pycache__/patrol_delete.cpython-314.pyc b/app/amazon/__pycache__/patrol_delete.cpython-314.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1c98aeb97eaa205019af919cce2ad82332f9614 GIT binary patch literal 139850 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μ537qh$z8i{kku6mo?2Ef)r5iX}`_5_Z=J@#Z0wMu2y z?uk;TEWfan7TW8z$?6fwa|IwzHS=v;j$T>#Q8lAE=Ebo|gF;W@-h_dio zW<>F2%fIa!VZ0JP|9G`)B=%NGFEK#{y7}wRN=yRqv+{Hjdx;Udj7BCppB+npj#cNe zE*My=g}#`QQ`P_V+b<7I<5ao+H%QG|;P@gx%gz`A#9g@g_;70$8ux?FHx zz*sAc8`FzMGQPmA*CAGQgGq7g?8|p9JkGPldJE|7?KgjRbLdH!Xaqy!*5HL(-+Bwo zid*O0w|@MrkXRv}?ZwWE4FC4aLd)4#tL&~1K{8ajOoV|)An2vtYaSj5&+4$}1^L6_ zl@M$iC|!X=gv0o(dw9LLgUH7p+zx4RM+eW2xpnqw;)XC*1=wR3P_T=k|17C=l%I6& z{E<9M=~NxhLIgtuyebEI<#B~jRl_Oxn2HDyI8LrGMEN6KZ7^$j+yTx}JItK${m+_e z?~P|2z{{uKc>312UO;aNAFt^pTo}Ive$*P)TlgKA-I`uf*|76HF7%_olX?8stKYr( z{NT+m|M;VGuksz#OIU`TPj(vxe*1Z_d2U_$>a8#Mo+kwAodAr9IZUw(wt^H4C+GPpWC%>f{g5L)J@?% z^ziQTx8FYSPY-yTjtggxE$P~GVd+|)H;AzkArRvU+L;|y^a9Vub6HRtmWVtjqN#d| z5cJyVQ#Nb(S;l`O%rD{lUf=`h)7O9W;Tzvjf{hP{U%mbE8_?CrOLSQ&$21BUl-q+Z zT*M%BHPRD}lY%FxMLNGtW_Av4*_D45$y5JZ^Wb!gdU~g*aZSN3WiQ;Grzlx!x zd#tMiJjHH*l9)ouNq*`20SbrqW_R-;@YOpyyW61NNoQq3X=yVM>5t#x*uH7k#`>oE z^1AA#n)2OEj*5E6mWn!wPc3rfna5Q)M(xCr88GX~AsCqv;aQ)=>trlVo_86`^Db3* z5{jNWNL`aj9TMNwe5#|fc}6?C{Z{FX)IOLe5nvjFk4V#e_^_+(FuDUAbwN_%k5xp< zXU4l3u=K|gLmXhOyQu|!SV<2C&uu+^vzRg8zHV1G)lLMVVyj!J-o#jimOOO^IJRu1 zX455cR>cQiWj=;7nyEq~@>K~4Fow%#m@hbjZPA1-g_BC=zA}FhJkuh0W{tC-d*sPS z-1~<%c;lA$ncg?Yj|+^n7~+tc*1l_se&3vQJv!ALH<&OO&XsK8(zbe|t2tBkjlvcE zo5zgF0|z|DMc32wUQYf_@^@2x=_@?xE4Y>0yy-Q4;T~h^xY6{4@vO0b`M}D7gwjQ!&!+&1vCGnd2GRzKk+YM%nNdZ$=$wN_*eB@Oo^9 zyJ2w8U^TbAjazWY8+(|u9KMlk_a&Ejl1sRy+q}s&u$oO@ZuVqs=Bn=VW;El|@vJ;w zR)r_4V&s@NtDQ4t2yN>>F>q?&D3@0@yy>kim$%^U>Uyqh7Z>9kH8tE=vJ}48vhpc; zsvW*V?Tg{`=H581FrOSu}CHy)qti!boR z7Ysf)8oz8jCH;j1=MP-ZTs@vuG@h|=JgsyBaBtD1#*iA@UkTO7f)cpM#ivhw;d*L5 zbVc?IRS!SHEv)gT)^hQ+H`23w>7}0Z(($D9@#F>LsX626i;+XdGUSjE-5-e@qU=6P zw#Sm~{=%qb+4#~8+{U`GrS+U;fqNS~u8%LT7&$t&+`%Ei!ye00k(0a1XDJ(gV9c`K zYbg`s*7z)IM+&%|O=BDG8?)T!wX7YF%W}8lDAQ=%l5txa_{!)~pKbMscFb1pwXGh{ zTh6Vh8q3>)+yx%*cx=i*$G`#bWk+hcy2i0h`?-w=aFn4*n>L=dc<}gG+8Qo(Ew>g2 z&JJ@sj!fvaG52f9^KbOsa;+x4fRth_u~*GtqBA}|OunpiFXR^Q;u4&rmIlU~X03g2 z6wF@1Sb{LxwOq{hQPU300iP+^1L;6~+IZrEcWd`~(;MG8HnN<{C>=WN%UH{0tbOO0 zC%y6AZF{`Qd*7)UiQ`gAhBo_BR&yz<->LB=?}c1p0?PeFVNEfdM%+9*p}n+!WUT zYB$&1##t~g4|yzyet+GX{E0@(r(>d-q%ye3HNH_ZypBt#zS7{c>>9J|`VUM6r1?K^ zY>cY>2h^?SZp)aZdV<>WhwiTfvi@Dp#*FQ2H2)A*QH0yC%A&WIn0_4*jOSllqqnb! z{B@RxX8{7pn6g}LSVxc#;yjKVeHj%+<=Tp}b}WBCbllVVg|S0_#gfis%~R>9n{o0*Fj1gOrs*<3 z?;#j}A+l$#i7jyWCX%en)w+R* zSFktK@>H-U8U za)zt1`eltcHBDjFFD&91&HO^vVO0|gh&Agn$)++6gHZ?_qA1q(=wf{r2^>^ro-@K> zmHWL>VwfV{CdbowfED`$8xbPgrd>{xSa)$uc;>QtnGSwLz?yeV8*`NLHY?+gooCP@ znspw;s?Rf&`5!1#wRaqG)PKd2l`$}tgL$JKL_*H;4d1#11`86M27Di^>|-Ym$AYPr zA$B1ch4obHu1I-K)kli`*<}E$O=a91@%5CmPMI@}(w;{Fl?dhu7nxY$P3_JLD>B7z z#IhM1P}>!`F0#gmym6OVa%$xWW<+$=--Wmkket8NPGrN$RkrwEF0DdWJ%SA+iSgWO zd#y-ubLd-lUIR~y@s9+8nR2%0-hSm3J0qzfQpfLGuUyDu+G`(u_3QWoCyH-=x$oAu z&fNOO*;_w-;?B!`H_s2=dF#2`gI_BsDDdkZT!z0=e~7@i>II`j&_4Tc`0F=c9RNdz zsoE$@mS}Wh@VU}4D7@OxN6(+R^SwuJpMT@#&z}W*hi3=zKT#I1D2L<8-Q6cZFEfVN zoo~E;^NGI^m}xwV?B-Wrz4O|md=ZQZ;3C4Gf5+#=zw0Hjpb*gy5?}5Zv3jiEcs7di zwS8uL-u&Xt;bABx(N=92(lR~*F{xhv5#N(`);H9@i2dl9^LJi*ZIwOG<|4P&JllZ8 z!7e8SdlC5U0R;L6$M%N03I~Yvx{CUyO%>b9_ps9r3?Xo>L>v8K$J;;%L%+TKxQoWY zwS@wPKQP_|^X-i-89GCJBBqHH$Oj-Ez#cw(e{w(tw(qE@ZK|uHn+JMc_`>-waLJnoPYo~fBya8yy`GRenBYw)=?@-HwEN(9 zH8Fp1B~+jKLvF{VLSJX`+R==)Vi{>5YKB&FDQkvLjoP+=7VWQm*Om-=6%0X-HPdI! z_FA(=C94zeQ|_Z&(GD(U=cvtbJ#Eq89&g(6{;KiSo35_jF&O_^%KzWqmq5jJooT+> zpnw7jDAr;rc92*s5CS8#um}k)NG>5j76KzcfVH7l!j{ywgX8HKJ8^;&yN%LLjM7<9 z+6$UaCOCGwk)6c2GdaHHDqJP(jOB?X+kNJo0V79_bI$a9|9!7sRY3vj^i2B9Ir9$O zy6?XG?z`)M|NUM{c|MIbw=&c>ErVs3gXXnoZ=9@mWY@Z~8(4P3l<3N8v}ZL=pLb;4 z?aI1`;jjH3N7@lrTAw|w&yjZT$d32TneME06ZsS7$vrG%=V&kp=I8Vm^k6>ZIulCX zOTY>16Xni?jqdd9(V*D`%QbWQb5$3r#`P}qy0^{iJlV^~?;Kw{ahRpoP91b6>{W87 zX1P*}?5P+BN9vs;+ut{5jP6w}>4O;c<32_t_S4ZRLSLy@` z&B+v2w2rrK#~I0Cy2gj4faLK;mu0XOY+oPP|Qx2ZJAV(eo;xpXJ2%+ ztoO7J+E&2<%~%v-XDJF!?Om}gq05vB^8wFy(PG0gxnO|f&E;!~2J|lgGTfwX3RA=ZS|Yi~`oCJ~nc2)4;H{6MgO$Pw&N^ktyBnVV=XCbubCUrovp z(^xZFYl>%NV7w8q{Rfr#J`mCrJ`uwucQ ziKhyQ>1hej>Hu~0Akdr~@EI$s$(m%1YeL^Oq3@uRn20h17^Hki$DG3JKr0u`L|p+?e^3?|k>83%`Jj{`wP7Uw`^5*T40!=t4Q%=oz&jd*>T3{NR%xe_yGK zM{+EJAu0?KHjE<4R>0cRX*+dtlQ@qg$-UwKMC>yH-jLN_|HexwPWl8Sek8dOKct+W zA((}I#L-TOtU45l3+$E$ZBjKp{s|6Zy!7!eet6@hr#}40uYUZ}D@0Ckc{I8*jK~v` z^EQdORA?RrBrzA)AXd+53SU(Ki&#oINb<;yMED7i*Z+F_lSjryMz6h1sJ;UMZ=C$9 zEO2au+CLX4a#w`dw(C8{E^j|3;{C+mYBN6mBq>-gp zcr5n#NZP!zF)k+b%JAU12U01BCpi{B8%KA85JgIYe2?G^r^s^rKhU<%oA3v!R}~uT z6|TuLy4g_gw~Zdf~B?=)0q;%Qrxs5bCXYB$t6547 znD9|`s+$^3cm!OVq-DBNx7t&;x>NGq$wl7m5suU?uGDQTb=y>lyQ;xewZ~qyXZj>- z?{HMz!@7H%RXz6H3U=%SL{(|kD#)tRB8K+@kxfcPO`ZO z3o=E_k<8}vo4}eO)-dt`;2yOf9BUhEoXCghLG#Lv$x0SmKOIccqQn&cI++WhN03}g zk`;s#6_c$~=h^-PtfiOrA7dvTK>C+d)%3WuhQg9s_3&Vg z=ql*o-iph6$$e0TeSfp`d#J;HPnW%?kKNNZbEuzZkuY?ubmbzf829=G+MS0aJ$A$v zUvLva4hZ1G&$Ekj9K*LH`4wQt0dN=E8|ezD+pVxIeJ~P~OlQ0n(JAr(H*|4qiH3w< zz?L>~Y)J!bAyADqO;lr_BkY=#x^rwv=P8%BBmf@Xq|}S!7C{4=Ef_>A|MkHwf+YqZ z-#ar5K@4&!c@5i)oy z+h>J=862S!oC1*j9L`V)PN|i0M>w2fC6EqJpZ(3I>0%apH*4#08jkWW7#DWII1HQw(A5G7!?ClfSN1!C*3Ouu{2!rMnHc+mxs07Mni<>@_m z6h-fmIDy11UZI^eh(k>un!is4ijNR5egTGI@e!O$5q4L3^nVxS*u|lowrTnHz6uTq zgb=WoQpAPUAP)V4iDL9x;52Fb)PGLvKw051&@EbspzsAL?gIfsxZL0tYJ?nI2|lyxU1N=eDtC?Wh(ssuqf!q2UyWyQn%Fo~aENriG~7$u|cXHI!A zc(E9L3(rM8N5KH^lkjeZ>n~dA%{JtK{NEoUip}(hbHix?aFsI&HNFQAX4ftSiOW(B zeDRt9fZ+fqHpyu&eJ6H3vB4w4fyGF+x8`*d1rw>0_f7RocmAq>>JZy^m(zMLyXzP` zHoy{3JB^~7n9yX^I=q zDei>S=Rz-px)Rpd6V^Br3T_4ov57L<^c_>he3*bBT!<^XX%QmLqlXDfPX;sdR!2lN z(^r3fGg3&-hC)hg%GHEq(mzW16N(^ytp+W?_mbC7oSsRpaK==;my|P}GV#E~$*G3v zuIU3TcfTX4iQRpenGP$Q*itC?K)2^lbHRB13mYL*PgO_N#;UL6MN_yjsaC6gEj9`9 z*R^4_(Yn_o)fA6XQ9N2h@z}7sHM-X=o9nW5zs%Ml?gy!9MPZPHg&!mMHy~Ep zkk0K)CEHWlp+r(%S$#t(qYcG|{Cq>%q^re-LLoOg<+m8&__<&ng{f)g#r2o8m-b)I z9B+LgVkWbECaGdBgg=D2Y3hY;Jl0&=Kd%45=9$!znb^{~F#eE^eVYsC(FoYE&PP&I z+M0+j?YZQw$*|B20O(_g8VukLUsupt34)eNKsH!Qve|tn?W$rO7=F53x$JIq z3YfvI*5DkZ?18VpfSZtl41#H=r<}+afJNM_F!_)#M9vq0{oCxL?P3jW))%RYp`XGH zMZ>s+-B6+(2yNFuBSS$oy+%LW6mlmvU<2QPiSx4Pf-Zt#$<`au9EL47vP9?Ih|r2a zZyUL%9R;D~OzJ@SqMAeeH`_L43*4t{d)}(ykXIP3TBEHo#j5sHF!EwOCSY8TBhVM( zn#1=gEKhGq{$E8egs-IA0v!a!?6f(ejU4^)%QG{)ghV&KMH?)RLP_`J^8Q*AJUwSM z?G!vSXpI0f!SH<<-h7@|`!r`dTc}JQ)6oQeAGqfe1E4SQKwkpqP73^8jIw#ze$!f$ zJ?(~Xq~9z>hLmGdK!vpt4$7~6YdkUUZ@Pd3kO5BU;zo^oWR#{*O2g)#=6TLh8MIuw z+6X-Ht5glNhOa@a<@kXJpf)Za)F#W554nKfLZ8G40xr-@Non&8h|r|y9ML?nDu*s} z&5!s2;}+xY2k|ZZ`k*D2L3&@dMDXF|%9aSj6PBHw_jOvT_cf4Vm1;H?QvYpD+d68j z)s1x>Nbabq-oK4|QGuU4D3aH~%mr?#2alZSx7pw}2o8lpyZQ!C9&6w(LZo;Txu}t# zw}{VkdT&-ouiMTi7IzNx7Y}eATcN~`Ehf(&w&L@_#gb~go(#wichN7!73*`;&S;&SH2w@5#9U#C*D5BcqL3|r|&Y2Bu z?mRx&!{cH)dP=-b0cTi;kJ3MA^9K|MCA!kDST6Re2b`=$nyae6$v5(=n zOeNYmBz$HPLdczTc>HLH+Ym=V(rBG4xy+snO?F3egBwTFrt<*Y!91K+3te?XlshYb zH2!Tv`n94GSJ6Rx(Lr|iy^f+|!@F7H8Ze^W`Gv0hz4rXQY~LYAe%tWwQ7FsjfUV&& ztg{<{x;qV9;6`P%ZM2a^uN@9{N98bMF3aV56Vvf5;;v!MwYd1 zw=ARoB4-%gIA$B`VTlD!W1%N$^LXxfB1P;>@$N*6I|a)BTUhc| zcXF!RY`Ga0lpH;x2P-)$mcBK*c|7l>!b^qYX)N(hr?Co z*=H4vpLn&&ky+!)JkBzYPd(_`-fG{DL#mHBws*1K<81qJXX=TOFn5gE6_aZRv%l0C zQ}nZq3PrMI3Yt7DWtY>mnR*N$wERpq_lmRfd&M|Y^^)WuS2EqCUHg(wQg|nvcabBT z)rkqB$!%45lM@rsx}2l^}+eF?A?K62*FlCw3;K>Ie;g5AcS$aV; zQt`yenUIuu9TFv~0IOKJ2-ifP=@-uOwGCAUbs!JMMFPi{fsDgbu8ge!f7b-mKNURq ziWevB#Wx5iw5mMMR$^HXz~?G_qy{cs!IqYmPPMH6KI$0MqzgoWSbggr6tM0Jjk2_K zZ{5M-_Vz*Gaugb7#d373mZQ)aE0za|i(a9UuRUfNGd z#rCp{qat{%1%;_ARz{BFxxhrZrZk;C9L!JRmIUF?V@66I2^qx{3G*fGV#Uwj<2hdC zC$e!Wz6YZM+i%HkQYw;{_AxRpJ(c$%%*omEC7YfvR^cypw)vnIXJ|Qw<9p!0>xH-k zsA0zEy5b92JRQp$Ux-tF;u1%5pIduj?O4Af=?+)Y29~q|=8kdYuDDJ1xJ{0@E$}55 z6ASlp@u|=J)sufUw!sm<23Bn>{*Lh@Z^z#;q9LFj_GH+#1Pk0acKxXLV()mLBd6Sz zvx((wnk;cZr!pbq`?cemmx3<^PlP)1HoEevSzh&|=*WU%VczqZIM=uLQZM|aIf}Ns ziuSOgJ<}zQHI43s+~;G)_rKI~sb!+WQMk=jxQi9;nvQnl@5V_*v2lOU1jF(TrxC5Y z1>>#w$M1h`{kI|KOp+b2-8tSnao^+_mQm+2Zksm?2}N)wXG~)HLS<`_`ZH2 zj?W}OJynyibcJ%bb|2uH+Gm}s1H!L=KkS94>|D8e64c(c1^OZZ#R^uTNn>5TPRhDp z+A=Rp^@R?*&dRVs#dpzeR7ZjhTz};oG-6t52x-NOFVb_$BzsczobB}`THqxsF7SY4 z!(%kq528Hp+BT)ROxetoJy!CzDSNn%)^-;6@d!2NLRV5LODdg+cEqiB#Z}tlDjjiE z!`tEc@3H&+7tQ^@)J)aAvE#~)=@v)b0ax82hQEV{99!GqlJy;9`+Tqvn*(sN%v#c- zN@$X>P>JAn@Ed>jDmj(oYe1HXe+6Z6ebz>C9|~N35j;)(LUV(oAmO@W;Ac{J`OM3; zS7Ii2{PZC@%;%VD8b>A2@6!3M$IJMte&NS_zJnvF3c@#e1J37%5BQC_mJD;fMAMVPnD zyUH%Rw5C>NzlUq68fg^_Xi*Er?|U~mZ+^88vIYmjb-Y|uUp^mNsQ8%fUEB`}KebO~ z4N=?}Y5D~m!K*M<2DhQpd>H}~(?Q}=_&T4F*b5RngcRvuH8T1NT;{^Zv&1P8`QEH7 z?!l533YP3{_^agDMk*VgZ@{Y{Up0d}R(Myc)FP#T73xLDHE?-;8w!fx~WBh%nGfu$XFME5d7FLcV23l?*en<4Z%y2JI z2&4IrpGM++ex%`*h{Rf>_DVrA!q-B=5c<(?L>JMjT=+VIKL@^nCL@SLD${OZ)>Qdx_@=DOwm$sv+i2l?skRP8R!HYZiQFwq@oLe8*mT(1p0_R!C z&>MJ_ibIG?aDk3*@#Ta4MCmQx18hX@H)hS!B?10bK(FcFr`}r2n?QOg2`nMcm0)EF z*71gy_FUS-Dt9>wc1tNxWN}39XZro#t;e&${J%1}UZDQtnCai5D_7r?|DJk>_HRCy zRJxs*OB8w~iF9P=PSusBH?!Wf*_&FX&;GV(W*aQzDb?P7#NO3w?>lBcF~Ir;X1Y$# zv_mPG9{oqpr*Z0t??`>XCld9H-$YuEhqKu$Oe8OM_hafMa4)b7K8%bX4Ra;zUH-DHfgO&##(-#$gk5t!V!&74QaP)t?EhFANZx4ThNIC+kN6GhgUbx6 zm3ylXh$*8ok;L&sAs`31B^F;Mex?autr~IGizp{2(J5#yav0)D@Yh;mo znSSrmp_Rd;u+WC0RvKE*wnAIS3R?@Y6=@6dvy39dTl^Z@CT^8lPu3PG;y5P;K{b=mfE?Znxi7R?k^L#bF7f2I4)(qBQ>6j5*6Pz=B1 zX{%rOHExHp-c-B zPBt4X`y3MqFAGEumeJJ8TnaCi_$vF))cIE4W7nch!@=*y=iVMahtqtc}UDu>OXn^tyA+=>K&T7 zd}_w(66Xa3SG3q+GT*dK=l!aEW^26wGrWAJ?G7DI;p7$yC} z5NAijodyUu&U!8;V$2JvKw2T+;%g<+(aUOBnf2@?wd5JPby-HYLO3oZSubfXU?@pJFYD-)E#155LGk#p;$U+Phn_{7`s5_?jzE1xdRT zT9bgURt*kN(^_#PD*oZthivN>mqFzsH)u}}Gg|iE8w9df?*nN#vHBKrFEV@*I|$lL zU^V-)qH!9E$E~3k97zQ4$0%bdGkOETrT}!}Dn1imp|x0sk7Elo#o?5{+lEvzNmq>t z3M~kedsj>Wivi^~TzAcwI9d*c@%aeBlC==2PmJcVQ4PG0C8q!7c+m^Qi-yg!C2O84 zF{ca5h!}3L8&YvluPJ3FCVT9tE2a>C?&9*vgsIADk?rqdJ+O#5%g#T*iXLQz4~>M( z7&FE;IE`!Ovk404K(QU9^B+G=M2R-iV!D!>QMb|XT4*MPMHIds&BF}_#Qg|VS%vQQ z2vq;M>cI(Qpu7_PKx8T55WYZsk!i~!0PbVxvV~@&LPLO)L71P!#K2S$ZqrEJNz+Op zP>s6uc>%!(@#YJ)PoJC9Q9{t-6ENn2DOoRBsIT|Xu`D8eCM07%1kWUB?+djRtdvff zAAT=f~6z{Ph)JzYio+x0Dft*>%i= zzo2!QXdMYRX*?EPE&Bp0L@G={uhQABY`H{?z4#O=5B3ySSLK{5?iZyMTd2q_QG!G+ zBU9$aY?S1uwd2S+MTOhTL=QrxxGJ{H!YW7Uvjt1hCK)s-M3&cCtAnP`Qz!-ubc0Y) z3CYmArnK8+n{&V zcpSk>7?__10HOG|vy3UERl*8IOd_peJV%R@fkh64S+(dVPidI25CM35L-9$#%QryWuJiHK5CrFM zxUkeTch;DAKbO9~8+p>~6`JR$s$Z19`J!vsxLcLc&BIj-Sp z5CNo8{4bDLMDb^i5nAleJg`4^Kman!m;AYlml2h?EHX^zj@+x4h3Wo!53<5#0MG7` zAYN?*gt%w-#xwR)Hr98H?LXq$+x7O|F2^a`AH{V9ueyM>s_v`EewALS{zlaj@X04_3y_d0#AQ0t;m(O z!=AQdI?j={kB%5L=ef)Uc5?wM+%$RGVXlU;cR|JEI%h%Eg+o&r!;SC9q`PveT-y%0 z)5}L9pj=7LkW05rr8`S&pY0keaHbYdM-T6HM`pA9N@rxHJ0p7}l8i`qJ+|wbDS7m$ z+m!nKNS9@Y-Lhjk=B@ZQYz$qH-P_Eu+M>%}g3-NIWedn12sP7`d3c&rZY!6UL<1vPJ#{-)H< zCy=A@%v+^zmHxB$*0t-*+q=%Vb2p7dJ+XacuicPE=t0$Z+=PimZeaQiOSg2)OKD5* zLu92b-3QNJX)`B$9O84I+>3-uzO3FCXae$S%lY_Qal8749E&R3HX|$Ns)Xv`g&DyI zv59`i%+2ZONf0@N3Z|HhZc7fKLXaYL1pyDwMd%#v^$YM}jhRU7l=>&I+5QEXDb4DN z`#qcAt}1M3kIOVK(iyGN7g@6@ni)gx?Z~85n1SpEVW0LIwH#^lbw;<2(FmoN44D1U790d zohxBCOV~Zp^t0B>t&_cuvU(|DI>TYw<1+2HoAx_Q2ZpyniFot@IEC+FF;#CHsyO~V z7YZXZS7eqwGHa~O5n00YB}*5jJQIZlOobH}rGjS@W{eZ+eYab_!OEJo-Zl0tZ5V2C z6{dOybyX%l&exbqw}HeZ8!o|XG=45?FYkXjbE5U9@W_T+Z}pL%Us{BGAraCs1Uj*q zFd4O6p>8Bf{&i^A=ck51C`vW7(X7vrhL>i;Y{t@kS5hMAQfR4kswpY#gRjG3UHn7_ zi-h}@GH<;+i%IF$0_0x_*7=C01YdYXJ}Kcqv;Rc@8AX?#Yx6sSa7Ib_qygTR6(E4n(6W*pFZ^e|m3u5q>3rJZ*T zH>)ZtJq7N!N+>e zk!N5&iKMAx8Iq&KlkA1 zgU|trDO?Z)BuS?gJrbU(dJ_Ll_4yip(%FZTUzgme;rz0X|LMCozWxKyIXC|11^7(k zRFC3a`Ft!+mGA92V>v3~94||E&za7yzMgKtM~>*Lr1qi3!cnPpL@&?g-e&6xs42Ut zDMP|XkN*P`^N(vAkm; zj}RZ$7?Oh@1unxrlrtQ-jVGRYY)Hj(Xab#s=X3B9w{Am&sCB+OTm=nXfE~`Z=-{S1 zJQEPakyaBD#l4NCg1P^W!6F^7tqO^nH5g%Q6cY6X_n`J=qe*xwEK~D6Ri*}g_%Z4& zIgIAjQ_X4{8teDwt6*8#*vLV1J?cjwI$!n4KKjWJXXu@GC~#5WMlc)P(b0XXtD{4_ zN=ctkz@62Z(GoG10`kZ#lD9UIT=j_eP(UVgBJr_AvLg`Rr5Gt3i$fHUj+01RlSuju zB1xV_67h({OcjZk6baMg>{*ev0gNS!CXM@9XPg8znq_w80`SzMz;3jPJdWcwL< z{_{sM&{ws2*Nmw{4Y#yvUGk>_f?Iku{M1miMs-WSNw;YZjt4f~dPv0&sh*S0zP`0v zgTpdDr4uu5omat`>>PQbz4d?!9<8`Lt6Op8?MCu>b1R3u3Vh1_7t8_p1V!Ca!=PwE zgV-F!=JJG~=v!*2xl>v+oDw0;#M4L@SWcwqTq;i`oi#a?qQD^OebPLVQz;5+QcB(D zP2J~7g~o%N6){lQR3}K4DGhZ(Y_5o>LG~c0AvTxA(}-h998dWHVsm#(tpX7xCn5$( zll1)!l!jITGnDJ(L3rc`xCO6U%3P;bas!@7O~AtCiGNTd#@8+%$yt3z$BEAVlbC*c zF!-?IJaw`c7S5d~d)Jke&gutoq8A;0$X%^}{OFIbKR$l_Yk$*WJ$2;N8SYX1ygsw! zj`OzOk}?i+KY8SZ4}bpck01XBzE5F>@Joga!opVEf(C@mdBuP7;68V$`fzSVyAKXV zdsH`sU0^a|vPsuQwN*vv0mKde9f^Pj<__>wPImW`Ni*D>cb+^6J8ZhKp)tfp!RjLz z#%FMbG=sT*3k6g&8%2hMN5dWtyERa)5_Bh3Z);C{?W|pU;?vW(R~dLe1m=G;L4$zCpIlyqYO<^@Rz zi3tV#m?n7;ob?ZigCfZTV5oee^ZcokMMpX@)v1zv?ubNWDbLQFI(1w+0KiBY4pHzL z1uYbOm4YWQqh=HCI?zzNtE0JLTT92bM)LdL)UapU-UChItdZgUEyCp|#%lzJv4xzj96NOq@ZG9h&~^&TdeKUHfp)l5i(Zb3x!NZwc5 zUE$gGaGdPs2)|=u%S?F9Q0QktD%D2txbon0t)|VACwYUU=kxy_Mzm>I=SbKsAd4BPAyV<j&e8C*TGPlur#8(^cgc2b@@R`wo6YY^?b_0Jv}N-#Fcsi1`+o!FTDj){ literal 0 HcmV?d00001 diff --git a/app/amazon/__pycache__/patrol_delete.cpython-39.pyc b/app/amazon/__pycache__/patrol_delete.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0aad1c82102e397699c10ba494c226a9035469c6 GIT binary patch literal 61838 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 qnHMM2`Q^T@zI-o�|g5aBW}eBl}OG8-$6zS4!pHr!wu|C;tbwmB}Cg literal 0 HcmV?d00001 diff --git a/app/amazon/__pycache__/price_match.cpython-39.pyc b/app/amazon/__pycache__/price_match.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..fac78452fcf3593761ef72eaa8ec720354e4f34f GIT binary patch literal 34586 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 Xt6h|3ziZu#kDxVy$DZ&5`+oL6Ie*bY literal 0 HcmV?d00001 diff --git a/app/blueprints/__pycache__/__init__.cpython-39.pyc b/app/blueprints/__pycache__/__init__.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..dcd9ce286b12a3403926ba299da4cd357ce104c1 GIT binary patch literal 141 zcmYe~<>g`k0?DNJnY=*yF^Gc<7=auIATDMB5-AM944RC7D;bJF!U*D*k&9JKW^#T? zYD{ubVtGz#k#0dwX?kW}OkzPnOj1s1YC%zEUP*CGe0*kJW=VX!UP0w84x8Nkl+v73 LJCIqQftUdR1>qq6 literal 0 HcmV?d00001 diff --git a/app/blueprints/__pycache__/admin.cpython-39.pyc b/app/blueprints/__pycache__/admin.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1c1362aff9e1964aacf64a852955dbbee2619f0b GIT binary patch literal 11768 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 literal 0 HcmV?d00001 diff --git a/app/tests/__pycache__/conftest.cpython-39-pytest-8.4.2.pyc b/app/tests/__pycache__/conftest.cpython-39-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a909f63340abae776534d67a9ae3b3b2437c36f0 GIT binary patch literal 136 zcmYe~<>g`kf>|3rWP<3&AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUTD7ps`e znB=0w@|@Hn-GZFb^vt}N#DapDlGNgo;+W+8yfhF?ub}c4hfQvNN@-529mtr^K+FID Dx%nU6 literal 0 HcmV?d00001 diff --git a/app/tests/__pycache__/test_amazon_base.cpython-39-pytest-8.4.2.pyc b/app/tests/__pycache__/test_amazon_base.cpython-39-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a1c8b9b96988403b335942f9141553f735b7db9e GIT binary patch literal 25106 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 NyBhawuvS|m{|`*0nHm59 literal 0 HcmV?d00001 diff --git a/app/tests/__pycache__/test_patrol_delete.cpython-39-pytest-8.4.2.pyc b/app/tests/__pycache__/test_patrol_delete.cpython-39-pytest-8.4.2.pyc new file mode 100644 index 0000000000000000000000000000000000000000..23cddc00578fb886ee76c87081ea89e32dfb16c7 GIT binary patch literal 44141 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 literal 0 HcmV?d00001 diff --git a/app/tool/__pycache__/devices.cpython-39.pyc b/app/tool/__pycache__/devices.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0eb1bc7ac6059c3974579b56383be22366fb15b3 GIT binary patch literal 7285 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 literal 0 HcmV?d00001 diff --git a/new_web_source/appearance-patent.html b/new_web_source/appearance-patent.html new file mode 100644 index 0000000..e965eb2 --- /dev/null +++ b/new_web_source/appearance-patent.html @@ -0,0 +1,17 @@ + + + + + + 外观专利检测 + + + + + + + + +
+ + diff --git a/new_web_source/assets/appearance-patent-BPCrG75P.css b/new_web_source/assets/appearance-patent-BPCrG75P.css new file mode 100644 index 0000000..51eab5d --- /dev/null +++ b/new_web_source/assets/appearance-patent-BPCrG75P.css @@ -0,0 +1 @@ +.module-page[data-v-d71413c4]{min-height:100vh;background:#1a1a1a}.main-content[data-v-d71413c4]{display:flex;height:calc(100vh - 56px);min-height:calc(100vh - 56px)}.left-panel[data-v-d71413c4]{width:400px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-d71413c4]{flex:1;min-width:0;background:#1a1a1a;display:flex;flex-direction:column}.section-title[data-v-d71413c4],.subsection-title[data-v-d71413c4]{font-size:13px;color:#bbb;margin-bottom:10px}.upload-zone[data-v-d71413c4]{border:1px dashed #3a3a3a;border-radius:10px;padding:18px;background:#252525;margin-bottom:18px}.hint[data-v-d71413c4],.loading-msg[data-v-d71413c4],.files[data-v-d71413c4],.muted[data-v-d71413c4]{color:#888;font-size:12px;line-height:1.5}.link[data-v-d71413c4]{color:#6ea8fe;text-decoration:none}.link[data-v-d71413c4]:hover{color:#9fc5ff}.btns[data-v-d71413c4],.run-row[data-v-d71413c4]{display:flex;gap:10px;flex-wrap:wrap}.opt-btn[data-v-d71413c4],.btn-run[data-v-d71413c4],.btn-delete[data-v-d71413c4],.download[data-v-d71413c4]{border:none;cursor:pointer;border-radius:7px}.opt-btn[data-v-d71413c4]{padding:8px 14px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a}.btn-run[data-v-d71413c4]{padding:10px 18px;color:#fff;background:#3498db;font-weight:600}.btn-queue[data-v-d71413c4]{background:#27ae60}.btn-run[data-v-d71413c4]:disabled{opacity:.55;cursor:not-allowed}.selected-files[data-v-d71413c4]{margin-top:14px;color:#999;font-size:12px;word-break:break-all}.selected-files span[data-v-d71413c4]{display:block;margin:4px 0}.prompt-card[data-v-d71413c4]{margin-bottom:18px}.prompt-input[data-v-d71413c4]{width:100%;box-sizing:border-box;resize:vertical;min-height:180px;padding:10px 12px;border:1px solid #333;border-radius:8px;background:#202020;color:#d8d8d8;font-size:12px;line-height:1.6;outline:none}.prompt-input[data-v-d71413c4]:focus{border-color:#3498db}.prompt-default-label[data-v-d71413c4]{margin-top:10px;color:#8d8d8d;font-size:12px}.prompt-preview[data-v-d71413c4]{margin-top:10px;padding:12px;border:1px solid #2a2a2a;border-radius:8px;background:#202020;color:#9ea7b3;font-size:12px;line-height:1.6;white-space:pre-wrap}.parse-card[data-v-d71413c4],.queue-payload[data-v-d71413c4]{margin-top:14px;padding:12px;border:1px solid #2a2a2a;border-radius:8px;background:#202020;color:#b8c1cc;font-size:12px}.queue-payload[data-v-d71413c4]{max-height:220px;overflow:auto;color:#8fd3ff;white-space:pre-wrap}.panel-header[data-v-d71413c4]{padding:16px 20px;border-bottom:1px solid #2a2a2a;font-size:15px;font-weight:600;color:#ddd}.task-list-wrap[data-v-d71413c4]{flex:1;padding:16px 20px;overflow:auto}.clean-result-summary[data-v-d71413c4]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.summary-card[data-v-d71413c4]{padding:14px 16px;border:1px solid #2a2a2a;border-radius:8px;background:#1e1e1e}.summary-card strong[data-v-d71413c4]{display:block;margin-top:8px;color:#eaf4ff;font-size:22px}.summary-label[data-v-d71413c4]{color:#8d8d8d;font-size:12px}.result-list-wrap[data-v-d71413c4]{border:1px solid #2a2a2a;border-radius:8px;background:#1e1e1e;min-height:180px;margin:0 0 16px}.result-list-header[data-v-d71413c4]{display:flex;justify-content:space-between;padding:12px 16px;border-bottom:1px solid #2a2a2a;color:#ddd;font-size:14px}.empty-tasks[data-v-d71413c4]{color:#666;font-size:13px;padding:18px;text-align:center}.result-table[data-v-d71413c4]{--el-table-bg-color: #222;--el-table-tr-bg-color: #222;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.task-list[data-v-d71413c4]{list-style:none;margin:0;padding:12px}.task-item[data-v-d71413c4]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:8px;background:#222}.left[data-v-d71413c4]{flex:1;min-width:0}.id[data-v-d71413c4]{color:#e0e0e0;font-size:13px;font-weight:600}.task-right[data-v-d71413c4]{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.status[data-v-d71413c4]{padding:4px 10px;border-radius:6px;font-size:12px}.status.success[data-v-d71413c4]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-d71413c4]{background:#e74c3c2e;color:#ff6b6b}.status.running[data-v-d71413c4]{background:#3498db2e;color:#3498db}.result-hint[data-v-d71413c4]{margin-top:6px;color:#e0b96d}.download[data-v-d71413c4]{padding:6px 10px;color:#d6ecff;background:#3498db2e}.btn-delete[data-v-d71413c4]{padding:6px 10px;color:#ff8f8f;background:#e74c3c1f}@media(max-width:1100px){.main-content[data-v-d71413c4]{flex-direction:column;height:auto}.left-panel[data-v-d71413c4]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.clean-result-summary[data-v-d71413c4]{grid-template-columns:repeat(2,minmax(0,1fr))}} diff --git a/new_web_source/assets/appearance-patent.js b/new_web_source/assets/appearance-patent.js new file mode 100644 index 0000000..0239a47 --- /dev/null +++ b/new_web_source/assets/appearance-patent.js @@ -0,0 +1,6 @@ +import{d as ce,o as de,L as pe,a as r,c as i,b as k,B as ve,e as t,F as B,r as G,t as n,w as fe,G as ye,f as y,U as _e,V as he,W as ge,X as ke,n as we,g as p,h as E,i as P,E as u,Y as me,Z as be,T as Q,$ as Ie,a0 as Ce,a1 as Pe,a2 as Fe,a3 as Te,a4 as Se,_ as Ee,q as Ne,s as Ae}from"./pywebview-C66x_2Dh.js";/* empty css */import{e as xe}from"./brand-BZije8D7.js";const Re={class:"page-shell module-page"},Ke={class:"main-content"},Ue={class:"left-panel"},De={class:"upload-zone"},$e={class:"selected-files"},Be={key:0},Ge={class:"prompt-card"},Le={class:"run-row"},qe=["disabled"],je=["disabled"],Me={key:0,class:"parse-card"},Ve={key:1,class:"queue-payload"},ze={class:"right-panel"},He={class:"task-list-wrap"},Je={class:"clean-result-summary"},Oe={class:"summary-card"},Xe={class:"summary-card"},Qe={class:"summary-card"},We={class:"summary-card"},Ye={class:"result-list-wrap preview-wrap"},Ze={class:"result-list-header"},es={key:0,class:"muted"},ss={key:0,class:"empty-tasks"},ts={class:"result-list-wrap"},as={key:0,class:"empty-tasks"},ls={key:1,class:"task-list clean-result-list"},ns={class:"left"},os={class:"id"},rs={class:"files"},is={class:"files"},us={class:"task-right"},cs={class:"status running"},ds=["onClick"],ps={class:"result-list-wrap"},vs={key:0,class:"empty-tasks"},fs={key:1,class:"task-list clean-result-list"},ys={class:"left"},_s={class:"id"},hs={class:"files"},gs={key:0,class:"files"},ks={key:1,class:"files result-hint"},ws={key:2,class:"files"},ms={class:"task-right"},bs=["onClick"],Is=["onClick"],W=`请帮我排查以下亚马逊商品在英国及欧洲地区是否存在知识产权侵权风险。 +请直接给出明确结论(有侵权风险 或 未发现明显侵权风险),并严格按照以下三个维度提供精简的排查理由: +外观维度: 评估产品外形、图案设计是否与欧洲/英国常见外观专利雷同。 +专利维度: 评估产品的核心技术或物理结构是否存在侵权可能。 +标题维度: 排查标题中是否包含大牌商标、敏感词或版权保护词汇。 +结论:XX`,Cs=ce({__name:"BrandAppearancePatentTab",setup(Fs){const F=p([]),w=p([]),v=p(null),_=p([]),N=p(""),T=p(!1),S=p(!1),h=p(""),c=p([]),f=p(null),A=p(!1),m=p({pendingTaskCount:0,processedTaskCount:0,successTaskCount:0,failedTaskCount:0}),x=p([]),g=E(()=>_.value.flatMap(s=>s.items||[])),L=E(()=>_.value[0]?.items||[]),q=E(()=>x.value.filter(s=>s.taskId!=null&&c.value.includes(s.taskId))),j=E(()=>x.value.filter(s=>(s.taskStatus||"")!=="RUNNING"));function M(){return N.value.trim()||W}function Y(){return typeof window<"u"&&window.localStorage.getItem("uid")||"0"}function V(){return`appearance-patent:tasks:${Y()}`}function R(){typeof window>"u"||(c.value.length?window.localStorage.setItem(V(),JSON.stringify(c.value)):window.localStorage.removeItem(V()))}function Z(){c.value=[],R(),U()}async function z(s){const e=P();if(!e?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传能力");const l=[];for(const o of s){const a=typeof o=="string"?o:o.absolutePath,d=typeof o=="string"?void 0:o.relativePath,C=await e.upload_file_to_java(a,d);if(!C?.success||!C.data)throw new Error(C?.error||C?.message||`上传失败:${a}`);l.push(C.data)}return l}async function ee(){const s=P();if(!s?.select_brand_xlsx_files||!s.upload_file_to_java){u.warning("当前环境不支持文件选择或上传");return}const e=await s.select_brand_xlsx_files();if(!e?.length)return;const l=await z(e);w.value=l,F.value=l.map(o=>o.relativePath||o.originalFilename||o.fileKey),v.value=null,_.value=[],h.value=""}async function se(){const s=P();if(!s?.select_brand_folder){u.warning("当前环境不支持文件夹选择,请在本地客户端中打开");return}try{const e=await s.select_brand_folder();if(!e)return;const l=await xe(e);if(!l.success||!l.items?.length){u.warning(l.error||"该文件夹下没有可用的 xlsx 文件");return}const o=await z(l.items);w.value=o,F.value=l.items.map(a=>a.relativePath||a.absolutePath),v.value=null,_.value=[],h.value="",u.success(`已选择文件夹内 ${l.items.length} 个 Excel 文件`)}catch(e){u.error(e instanceof Error?e.message:"选择失败")}}async function te(){if(!w.value.length){u.warning("请先选择 Excel");return}T.value=!0;try{const s=w.value.map(l=>({fileKey:l.fileKey,originalFilename:l.originalFilename,relativePath:l.relativePath})),e=await me(s,M());v.value=e,_.value=e.groups?.length?e.groups:e.items?.length?[{sourceFileKey:e.items[0]?.sourceFileKey,sourceFilename:e.items[0]?.sourceFilename,groupKey:e.items[0]?.groupKey,baseId:"",displayId:e.items[0]?.displayId,itemCount:e.items.length,items:e.items}]:[],h.value="",await b(),await I(),u.success(`解析完成,共 ${e.groupCount||0} 组 / ${e.acceptedRows} 条`)}catch(s){u.error(s instanceof Error?s.message:"解析失败")}finally{T.value=!1}}async function ae(){const s=P(),e=v.value?.taskId;if(!e||!g.value.length){u.warning("请先解析文件");return}if(!s?.enqueue_json){u.error("当前环境未启用 pywebview enqueue_json");return}S.value=!0;try{const l={type:"appearance-patent-run",ts:Date.now(),data:{taskId:e,prompt:v.value?.aiPrompt||M(),groups:_.value.map(a=>({sourceFileKey:a.sourceFileKey||"",sourceFilename:a.sourceFilename||"",groupKey:a.groupKey||"",baseId:a.baseId||"",displayId:a.displayId||"",items:(a.items||[]).map(d=>({sourceFileKey:d.sourceFileKey||"",sourceFilename:d.sourceFilename||"",rowToken:d.rowToken||"",groupKey:d.groupKey||"",id:d.displayId,asin:d.asin,country:d.country,url:d.url||"",title:d.title||""}))})),rows:g.value.map(a=>({sourceFileKey:a.sourceFileKey||"",sourceFilename:a.sourceFilename||"",rowToken:a.rowToken||"",groupKey:a.groupKey||"",id:a.displayId,asin:a.asin,country:a.country,url:a.url||"",title:a.title||""}))}};h.value=JSON.stringify(l,null,2);const o=await s.enqueue_json(l);if(!o?.success){u.error(o?.error||"推送失败");return}await be(e),le(e),await b(),await I(),u.success("已推送到 Python 队列")}finally{S.value=!1}}function le(s){c.value.includes(s)||(c.value=[...c.value,s],R()),ne()}function K(s){c.value=c.value.filter(e=>e!==s),R()}function ne(){f.value==null&&oe(!0)}function U(){f.value!=null&&(window.clearTimeout(f.value),f.value=null)}function oe(s=!1){if(f.value!=null){if(!s)return;window.clearTimeout(f.value),f.value=null}const e=async()=>{f.value=null,c.value.length&&(await re(),c.value.length&&(f.value=window.setTimeout(e,Q())))};s?e():f.value=window.setTimeout(e,Q())}async function re(){if(A.value||!c.value.length){c.value.length||U();return}A.value=!0;try{const s=await Se(c.value);let e=!1;for(const l of s.items||[]){const o=l.task;o?.id&&(o.status==="SUCCESS"||o.status==="FAILED")&&(K(o.id),e=!0)}s.missingTaskIds?.length&&s.missingTaskIds.forEach(l=>K(l)),e&&(await b(),await I())}finally{A.value=!1}}async function b(){m.value=await Ie()}async function I(){const s=await Ce();x.value=s.items||[]}function H(s){const e=s.taskStatus||"";return e==="RUNNING"?"执行中":D(s)?"结果生成中":$(s)?"结果生成失败":e==="SUCCESS"||s.success?"已完成":e==="FAILED"?"失败":"等待中"}function ie(s){const e=s.taskStatus||"";return e==="RUNNING"||D(s)?"running":$(s)||e==="FAILED"?"failed":e==="SUCCESS"||s.success?"success":"running"}function D(s){const e=s.taskStatus||"",l=(s.fileStatus||"").toUpperCase();return!(!(e==="SUCCESS"||s.success)||O(s)||l==="FAILED"||l==="SUCCESS")}function $(s){return(s.fileStatus||"").toUpperCase()==="FAILED"}function J(s){if($(s))return s.fileError||"结果文件生成失败,请稍后重试或检查后端日志";if(!D(s))return"";const e=(s.fileStatus||"").toUpperCase();return e==="RUNNING"?"任务已完成,正在请求 Coze 或组装结果文件,下载按钮稍后出现":e==="PENDING"?"任务已完成,结果文件已入队,正在等待后端生成":"任务已完成,正在生成结果文件,下载按钮稍后出现"}function O(s){return!!(s.resultId&&(s.fileReady||s.downloadUrl))}async function ue(s){if(!s.resultId)return;const e=P();if(!e?.save_file_from_url_new){u.error("当前客户端未提供下载能力");return}const l=s.downloadUrl||Pe(s.resultId),o=s.resultFilename||`${s.sourceFilename||"appearance-patent"}.xlsx`,a=await e.save_file_from_url_new(l,o);a.success?u.success(`已保存: ${a.path||o}`):a.error&&a.error!=="用户取消"&&u.error(a.error)}async function X(s){try{s.taskStatus==="RUNNING"&&s.taskId?(await Fe(s.taskId),K(s.taskId)):s.resultId&&await Te(s.resultId),await b(),await I(),u.success("已删除")}catch(e){u.error(e instanceof Error?e.message:"删除失败")}}return de(async()=>{Z(),await Promise.all([b().catch(()=>{}),I().catch(()=>{})])}),pe(()=>U()),(s,e)=>{const l=ge,o=ke;return r(),i("div",Re,[k(ve,{active:"appearance-patent"}),t("div",Ke,[t("aside",Ue,[e[4]||(e[4]=t("div",{class:"section-title"},"上传文件",-1)),t("div",De,[e[1]||(e[1]=t("div",{class:"hint"},"选择 Excel 后点击解析,后端会提取 id、ASIN、国家,并保留整数 id 与子数据的第一条。",-1)),t("div",{class:"btns"},[t("button",{type:"button",class:"opt-btn",onClick:ee},"选择 Excel"),t("button",{type:"button",class:"opt-btn",onClick:se},"选择文件夹")]),t("div",$e,[F.value.length?(r(!0),i(B,{key:1},G(F.value,a=>(r(),i("span",{key:a},n(a),1))),128)):(r(),i("span",Be,"暂未选择文件"))])]),t("div",Ge,[e[2]||(e[2]=t("div",{class:"section-title"},"AI 提示词",-1)),fe(t("textarea",{"onUpdate:modelValue":e[0]||(e[0]=a=>N.value=a),class:"prompt-input",rows:"8",placeholder:"可选,留空时使用下方默认提示词"},null,512),[[ye,N.value]]),e[3]||(e[3]=t("div",{class:"prompt-default-label"},"留空时默认使用以下提示词",-1)),t("div",{class:"prompt-preview"},n(W))]),t("div",Le,[t("button",{type:"button",class:"btn-run",disabled:T.value||!w.value.length,onClick:te},n(T.value?"解析中...":"解析并创建任务"),9,qe),t("button",{type:"button",class:"btn-run btn-queue",disabled:S.value||!g.value.length,onClick:ae},n(S.value?"推送中...":"推送到 Python 队列"),9,je)]),e[5]||(e[5]=t("p",{class:"loading-msg"},"Python 回传字段按 asin、国家、url、标题提交;后端接收分片后按 10 条一批调用 Coze。",-1)),v.value?(r(),i("div",Me,[t("div",null,"任务 ID:"+n(v.value.taskId),1),t("div",null,"总行数:"+n(v.value.totalRows)+",有效:"+n(v.value.acceptedRows)+",分组:"+n(v.value.groupCount||0)+",过滤:"+n(v.value.droppedRows),1)])):y("",!0),h.value?(r(),i("pre",Ve,n(h.value),1)):y("",!0)]),t("section",ze,[e[14]||(e[14]=t("div",{class:"panel-header"},"外观专利检测",-1)),t("div",He,[t("div",Je,[t("div",Oe,[e[6]||(e[6]=t("span",{class:"summary-label"},"运行中任务",-1)),t("strong",null,n(m.value.pendingTaskCount),1)]),t("div",Xe,[e[7]||(e[7]=t("span",{class:"summary-label"},"已结束任务",-1)),t("strong",null,n(m.value.processedTaskCount),1)]),t("div",Qe,[e[8]||(e[8]=t("span",{class:"summary-label"},"成功任务",-1)),t("strong",null,n(m.value.successTaskCount),1)]),t("div",We,[e[9]||(e[9]=t("span",{class:"summary-label"},"失败任务",-1)),t("strong",null,n(m.value.failedTaskCount),1)])]),e[13]||(e[13]=t("div",{class:"subsection-title"},"匹配任务",-1)),t("div",Ye,[t("div",Ze,[e[10]||(e[10]=t("span",null,"解析结果",-1)),g.value.length?(r(),i("span",es,"显示首组 "+n(L.value.length)+" 条 / 共 "+n(v.value?.groupCount||_.value.length)+" 组,"+n(g.value.length)+" 条",1)):y("",!0)]),g.value.length?(r(),_e(o,{key:1,data:L.value,height:"120",class:"result-table"},{default:he(()=>[k(l,{prop:"displayId",label:"ID",width:"90"}),k(l,{prop:"asin",label:"ASIN",width:"130"}),k(l,{prop:"country",label:"国家",width:"100"}),k(l,{prop:"title",label:"标题","min-width":"160","show-overflow-tooltip":""}),k(l,{prop:"url",label:"URL","min-width":"160","show-overflow-tooltip":""})]),_:1},8,["data"])):(r(),i("div",ss,"暂无解析结果"))]),t("div",ts,[e[11]||(e[11]=t("div",{class:"result-list-header"},[t("span",null,"当前任务")],-1)),q.value.length?(r(),i("ul",ls,[(r(!0),i(B,null,G(q.value,a=>(r(),i("li",{key:`cur-${a.taskId}`,class:"task-item"},[t("div",ns,[t("span",os,n(a.sourceFilename||"外观专利检测"),1),t("div",rs,"任务 ID:"+n(a.taskId),1),t("div",is,"行数:"+n(a.rowCount??"-"),1)]),t("div",us,[t("span",cs,n(H(a)),1),t("button",{type:"button",class:"btn-delete",onClick:d=>X(a)},"删除",8,ds)])]))),128))])):(r(),i("div",as,"暂无当前任务"))]),t("div",ps,[e[12]||(e[12]=t("div",{class:"result-list-header"},[t("span",null,"历史记录")],-1)),j.value.length?(r(),i("ul",fs,[(r(!0),i(B,null,G(j.value,a=>(r(),i("li",{key:`his-${a.resultId}-${a.taskId}`,class:"task-item"},[t("div",ys,[t("span",_s,n(a.sourceFilename||"外观专利检测"),1),t("div",hs,"任务 ID:"+n(a.taskId??"-"),1),a.resultFilename?(r(),i("div",gs,n(a.resultFilename||"下载结果"),1)):y("",!0),J(a)?(r(),i("div",ks,n(J(a)),1)):y("",!0),a.error?(r(),i("div",ws,"错误:"+n(a.error),1)):y("",!0)]),t("div",ms,[t("span",{class:we(["status",ie(a)])},n(H(a)),3),O(a)?(r(),i("button",{key:0,type:"button",class:"download",onClick:d=>ue(a)},"下载",8,bs)):y("",!0),a.resultId?(r(),i("button",{key:1,type:"button",class:"btn-delete",onClick:d=>X(a)},"删除",8,Is)):y("",!0)])]))),128))])):(r(),i("div",vs,"暂无历史记录"))])])])])])}}}),Ps=Ee(Cs,[["__scopeId","data-v-d71413c4"]]);Ne(Ps).use(Ae).mount("#app"); diff --git a/new_web_source/assets/brand-BZije8D7.js b/new_web_source/assets/brand-BZije8D7.js new file mode 100644 index 0000000..6444c73 --- /dev/null +++ b/new_web_source/assets/brand-BZije8D7.js @@ -0,0 +1 @@ +import{aZ as r}from"./pywebview-C66x_2Dh.js";const n="";function a(e){return r(`${n}/api/brand/expand-folder-recursive`,{folder:e})}export{a as e}; diff --git a/new_web_source/assets/convert-BKSNvX8i.css b/new_web_source/assets/convert-BKSNvX8i.css new file mode 100644 index 0000000..b9d860f --- /dev/null +++ b/new_web_source/assets/convert-BKSNvX8i.css @@ -0,0 +1 @@ +.module-page[data-v-0e58908e]{min-height:100vh;background:#1a1a1a}.main-content[data-v-0e58908e]{display:flex;min-height:calc(100vh - 56px);height:calc(100vh - 56px)}.left-panel[data-v-0e58908e]{width:380px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-0e58908e]{flex:1;display:flex;flex-direction:column;min-width:0;background:#1a1a1a}.section-title[data-v-0e58908e]{font-size:13px;color:#bbb;margin-bottom:10px}.upload-zone[data-v-0e58908e]{border:1px dashed #3a3a3a;border-radius:10px;padding:24px;text-align:center;background:#252525;margin-bottom:20px;transition:all .2s ease}.upload-zone[data-v-0e58908e]:hover{border-color:#3498db;background:#2a2a2a}.hint[data-v-0e58908e]{color:#888;font-size:13px;margin-bottom:12px;line-height:1.5}.btns[data-v-0e58908e]{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.opt-btn[data-v-0e58908e],.btn-run[data-v-0e58908e],.download[data-v-0e58908e],.btn-delete[data-v-0e58908e],.template-download-row[data-v-0e58908e]{border:none;cursor:pointer;transition:all .2s ease}.opt-btn[data-v-0e58908e]{padding:8px 16px;font-size:13px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px}.opt-btn.small[data-v-0e58908e]{padding:6px 10px;font-size:12px}.opt-btn[data-v-0e58908e]:hover{color:#3498db;background:#333;border-color:#3498db}.opt-btn.danger[data-v-0e58908e]:hover{color:#ff9f9f;border-color:#e74c3c80}.opt-btn[data-v-0e58908e]:disabled{cursor:not-allowed;opacity:.55}.selected-files[data-v-0e58908e]{margin-top:14px;font-size:12px;color:#888;max-height:112px;overflow-y:auto;text-align:left}.selected-files span[data-v-0e58908e]{display:block;margin:4px 0;word-break:break-all}.more-line[data-v-0e58908e]{color:#b8c1cc}.option-group[data-v-0e58908e]{margin-bottom:20px}.radio-item[data-v-0e58908e]{display:flex;align-items:flex-start;gap:10px;cursor:pointer;padding:10px 12px;border-radius:8px;background:#252525;border:1px solid #2a2a2a;margin-bottom:8px;transition:all .2s ease}.template-item-content[data-v-0e58908e]{display:flex;align-items:center;justify-content:space-between;gap:12px;width:100%}.radio-item[data-v-0e58908e]:hover,.radio-item.active[data-v-0e58908e]{background:#2a2a2a;border-color:#3a3a3a}.radio-item input[data-v-0e58908e]{margin-top:3px}.label[data-v-0e58908e]{font-weight:500;color:#e0e0e0;font-size:13px}.desc[data-v-0e58908e]{font-size:12px;color:#888;margin-top:2px;line-height:1.5;font-weight:400}.template-tag[data-v-0e58908e]{margin-left:8px;padding:2px 8px;border-radius:999px;font-size:11px;color:#8fd0ff;background:#3498db24}.template-tag.muted[data-v-0e58908e]{color:#b8b8b8;background:#ffffff14}.template-tag.custom[data-v-0e58908e]{color:#90f0b3;background:#2ecc7124}.empty-option[data-v-0e58908e]{padding:12px;border:1px dashed #3a3a3a;border-radius:8px;color:#777;font-size:12px}.template-actions[data-v-0e58908e]{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:20px}.template-actions-hint[data-v-0e58908e]{grid-column:1 / -1;font-size:12px;color:#888;line-height:1.5}.hidden-file-input[data-v-0e58908e]{display:none}.template-download-list[data-v-0e58908e]{display:grid;gap:10px;margin-bottom:20px}.template-download-row[data-v-0e58908e]{width:100%;padding:14px 16px;background:linear-gradient(135deg,#252525,#1f2b1f);border:1px solid #2a3a2a;border-radius:10px;display:flex;align-items:center;gap:14px;text-align:left}.template-download-row[data-v-0e58908e]:hover{border-color:#2e7d32;background:linear-gradient(135deg,#2a2a2a,#243324);box-shadow:0 4px 12px #2e7d3226}.template-download-icon[data-v-0e58908e]{width:48px;height:48px;flex-shrink:0;border-radius:10px;background:linear-gradient(145deg,#1b5e20,#2e7d32,#388e3c);display:flex;align-items:center;justify-content:center;color:#fff;font-size:11px;font-weight:700;letter-spacing:.08em}.template-download-text[data-v-0e58908e]{display:flex;flex-direction:column;min-width:0}.template-download-text .title[data-v-0e58908e]{font-size:14px;color:#e0e0e0;font-weight:600}.template-download-text .hint[data-v-0e58908e]{margin:2px 0 0;font-size:12px;color:#888}.run-row[data-v-0e58908e]{display:flex;align-items:center;flex-wrap:wrap;gap:10px 12px;margin-top:16px}.btn-run[data-v-0e58908e]{padding:10px 22px;background:#3498db;color:#fff;border-radius:8px;font-size:14px}.btn-run[data-v-0e58908e]:hover{background:#2980b9}.btn-run[data-v-0e58908e]:disabled{background:#555;color:#999;cursor:not-allowed}.loading-msg[data-v-0e58908e]{color:#3498db;font-size:13px}.panel-header[data-v-0e58908e]{padding:16px 20px;border-bottom:1px solid #2a2a2a;font-size:15px;font-weight:600;color:#ddd}.task-list-wrap[data-v-0e58908e]{flex:1;overflow-y:auto;padding:16px}.task-list[data-v-0e58908e]{list-style:none;margin:0;padding:0}.task-item[data-v-0e58908e]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:10px;background:#1e1e1e}.left[data-v-0e58908e]{flex:1;min-width:0}.id[data-v-0e58908e]{display:inline-block;font-weight:600;color:#e0e0e0;font-size:13px}.files[data-v-0e58908e]{font-size:12px;color:#888;margin-top:4px}.task-right[data-v-0e58908e]{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end}.status[data-v-0e58908e]{padding:4px 10px;border-radius:6px;font-size:12px;white-space:nowrap}.status.success[data-v-0e58908e]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-0e58908e]{background:#e74c3c2e;color:#ff6b6b}.download[data-v-0e58908e]{padding:6px 10px;border-radius:6px;font-size:12px;background:#3498db2e;color:#69b6ff}.download[data-v-0e58908e]:hover{background:#3498db47}.btn-delete[data-v-0e58908e]{padding:6px 10px;border-radius:6px;font-size:12px;background:#e74c3c1f;color:#ff8f8f}.btn-delete[data-v-0e58908e]:hover{background:#e74c3c38}.empty-tasks[data-v-0e58908e]{color:#666;font-size:13px;padding:24px 8px}.clean-placeholder[data-v-0e58908e]{max-height:none}.clean-result-summary[data-v-0e58908e]{display:grid;grid-template-columns:repeat(3,minmax(0,220px));gap:16px;margin-bottom:18px}.summary-card[data-v-0e58908e]{padding:16px 18px;border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e}.summary-card strong[data-v-0e58908e]{display:block;margin-top:8px;font-size:24px;color:#eaf4ff}.summary-label[data-v-0e58908e]{font-size:12px;color:#8d8d8d}.result-list-wrap[data-v-0e58908e]{border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e;min-height:260px}.result-list-header[data-v-0e58908e]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border-bottom:1px solid #2a2a2a;font-size:14px;color:#ddd}@media(max-width:1100px){.main-content[data-v-0e58908e]{flex-direction:column;height:auto}.left-panel[data-v-0e58908e]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.right-panel[data-v-0e58908e]{min-height:420px}.task-item[data-v-0e58908e]{flex-direction:column;align-items:flex-start}.task-right[data-v-0e58908e]{width:100%;justify-content:flex-start}.clean-result-summary[data-v-0e58908e]{grid-template-columns:1fr}} diff --git a/new_web_source/assets/convert.js b/new_web_source/assets/convert.js new file mode 100644 index 0000000..bec17e0 --- /dev/null +++ b/new_web_source/assets/convert.js @@ -0,0 +1 @@ +import{d as A,o as H,a as l,c as n,b as z,B as K,e as s,F as w,r as F,t as i,f as _,n as P,w as M,u as j,x as q,g as d,h as E,y as J,i as k,E as r,z as L,A as O,C as G,D as Q,_ as W,q as X,s as Y}from"./pywebview-C66x_2Dh.js";import{e as Z}from"./brand-BZije8D7.js";const ee={class:"page-shell module-page"},se={class:"main-content"},te={class:"left-panel"},ae={class:"upload-zone"},le={class:"selected-files clean-placeholder"},ne={key:0,class:"more-line"},oe={key:1},re={class:"option-group"},ie=["value"],ce={class:"template-item-content"},ue={class:"label"},de={key:0,class:"template-tag"},ve={key:1,class:"template-tag muted"},pe={key:2,class:"template-tag custom"},_e={class:"desc"},fe={key:0,class:"empty-option"},me={class:"option-group"},he={class:"radio-item active"},ye={class:"desc"},ge={class:"run-row"},be=["disabled"],we={class:"loading-msg"},ke={class:"right-panel"},Ce={class:"task-list-wrap"},xe={class:"clean-result-summary"},Fe={class:"summary-card"},Ie={class:"summary-card"},Pe={class:"summary-card"},Ee={class:"result-list-wrap"},Te={key:0,class:"empty-tasks"},Be={key:1,class:"task-list clean-result-list"},De={class:"left"},Ne=["title"],Re={key:0,class:"files"},$e={key:1,class:"files"},Se={class:"task-right"},Ue=["onClick"],Ve=["onClick"],Ae=A({__name:"BrandConvertTab",setup(ze){const p=d([]),g=d(""),f=d([]),m=d(!1),b=d([]),h=d({total:0,successCount:0,failedCount:0,items:[]}),v=d([]),u=d(""),C=E(()=>p.value.slice(0,8)),T=E(()=>v.value.find(a=>a.id===u.value)||null);async function I(a){const e=k();if(!e?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const o of a){const c=typeof o=="string"?o:o.absolutePath,V=typeof o=="string"?void 0:o.relativePath,y=await e.upload_file_to_java(c,V);if(!y?.success||!y.data)throw new Error(y?.error||y?.message||`上传失败:${c}`);t.push(y.data)}return t}async function B(a){const e=await J();v.value=e||[];const t=v.value.find(c=>c.id===u.value);if(t){u.value=t.id;return}const o=v.value.find(c=>c.isDefault);if(o){u.value=o.id;return}u.value=v.value[0]?.id||""}async function D(a,e){p.value=a,g.value="",f.value=await I(a),r.success(e)}async function N(){const a=k();if(!a?.select_brand_xlsx_files){r.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const e=await a.select_brand_xlsx_files();if(!e?.length)return;await D(e,`已选择 ${e.length} 个待转换文件`)}catch(e){r.error(e instanceof Error?e.message:"选择失败")}}async function R(){const a=k();if(!a?.select_brand_folder){r.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const e=await a.select_brand_folder();if(!e)return;g.value=e.split(/[/\\]/).filter(Boolean).pop()||"";const t=await Z(e);if(t.success&&t.items?.length){p.value=t.items.map(o=>o.relativePath),f.value=await I(t.items),r.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`);return}r.warning(t.error||"该文件夹下没有 xlsx 文件")}catch(e){r.error(e instanceof Error?e.message:"选择失败")}}async function $(){if(!f.value.length){r.warning("请先选择待转换 Excel 文件或文件夹");return}if(!u.value){r.warning("请先选择模板");return}try{m.value=!0;const a=await L({files:f.value.map(e=>({fileKey:e.fileKey,originalFilename:e.originalFilename,relativePath:e.relativePath})),templateId:u.value,archiveName:f.value.some(e=>!!e.relativePath)&&g.value?g.value:void 0});h.value=a,b.value=a.items||[],await x(),r.success("格式转换完成")}catch(a){r.error(a instanceof Error?a.message:"格式转换失败")}finally{m.value=!1}}async function x(){try{const a=await O();b.value=a.items||[],h.value={total:a.items?.length||0,successCount:a.items?.filter(e=>e.success).length||0,failedCount:a.items?.filter(e=>!e.success).length||0,items:a.items||[]}}catch{}}async function S(a){try{await G(a),await x(),r.success("已删除")}catch(e){r.error(e instanceof Error?e.message:"删除失败")}}async function U(a){const e=k(),t=a.downloadUrl||(a.resultId?Q(a.resultId):"");if(!t){r.warning("当前结果没有下载地址");return}const o=a.outputFilename||`${new Date().toISOString().slice(0,10).replace(/-/g,"")}.txt`;if(e?.save_file_from_url_new){const c=await e.save_file_from_url_new(t,o);c.success?r.success(`已保存:${c.path||o}`):c.error&&c.error!=="用户取消"&&r.error(c.error);return}}return H(()=>{B().catch(()=>{}),x().catch(()=>{})}),(a,e)=>(l(),n("div",ee,[z(K,{active:"convert"}),s("div",se,[s("aside",te,[e[5]||(e[5]=s("div",{class:"section-title"},"选择文件",-1)),s("div",ae,[e[1]||(e[1]=s("div",{class:"hint"},"选择需要转换的 Excel 文件或文件夹,将按所选模板生成 txt 文件。",-1)),s("div",{class:"btns"},[s("button",{type:"button",class:"opt-btn",onClick:N},"选择 Excel 文件"),s("button",{type:"button",class:"opt-btn",onClick:R},"选择文件夹")]),s("div",le,[p.value.length?(l(),n(w,{key:0},[(l(!0),n(w,null,F(C.value,t=>(l(),n("span",{key:t},i(t),1))),128)),p.value.length>C.value.length?(l(),n("span",ne," 还有 "+i(p.value.length-C.value.length)+" 个文件未展开显示 ",1)):_("",!0)],64)):(l(),n("span",oe,"暂未选择待转换文件"))])]),e[6]||(e[6]=s("div",{class:"section-title"},"模板选择",-1)),s("div",re,[(l(!0),n(w,null,F(v.value,t=>(l(),n("label",{key:t.id,class:P(["radio-item",{active:u.value===t.id}])},[M(s("input",{"onUpdate:modelValue":e[0]||(e[0]=o=>u.value=o),type:"radio",value:t.id,name:"convert-template"},null,8,ie),[[j,u.value]]),s("div",ce,[s("div",null,[s("span",ue,[q(i(t.templateName)+" ",1),t.isDefault?(l(),n("span",de,"默认")):t.builtIn?(l(),n("span",ve,"内置")):(l(),n("span",pe,"自定义"))]),s("div",_e,"输出文件:"+i(t.outputFilename),1)])])],2))),128)),v.value.length?_("",!0):(l(),n("div",fe,"暂无可用模板"))]),e[7]||(e[7]=s("div",{class:"section-title"},"转换说明",-1)),s("div",me,[s("label",he,[e[3]||(e[3]=s("input",{type:"checkbox",checked:"",disabled:""},null,-1)),s("div",null,[e[2]||(e[2]=s("span",{class:"label"},"按当前模板输出",-1)),s("div",ye,"当前模板:"+i(T.value?.templateName||"未加载模板"),1)])]),e[4]||(e[4]=s("label",{class:"radio-item active"},[s("input",{type:"checkbox",checked:"",disabled:""}),s("div",null,[s("span",{class:"label"},"SKU 使用雪花ID-序号"),s("div",{class:"desc"},"例如 1773816146796-1")])],-1))]),s("div",ge,[s("button",{type:"button",class:"btn-run",disabled:m.value,onClick:$},i(m.value?"转换中...":"开始转换"),9,be),s("span",we,i(m.value?"正在生成并上传结果,请稍候…":"选择文件后即可执行格式转换,结果会显示在右侧供下载"),1)])]),s("section",ke,[e[12]||(e[12]=s("div",{class:"panel-header"},"转换结果",-1)),s("div",Ce,[s("div",xe,[s("div",Fe,[e[8]||(e[8]=s("span",{class:"summary-label"},"已处理文件",-1)),s("strong",null,i(h.value.total),1)]),s("div",Ie,[e[9]||(e[9]=s("span",{class:"summary-label"},"成功结果",-1)),s("strong",null,i(h.value.successCount),1)]),s("div",Pe,[e[10]||(e[10]=s("span",{class:"summary-label"},"失败文件",-1)),s("strong",null,i(h.value.failedCount),1)])]),s("div",Ee,[e[11]||(e[11]=s("div",{class:"result-list-header"},[s("span",null,"生成的结果压缩包列表")],-1)),b.value.length===0?(l(),n("div",Te," 暂无转换结果,完成格式转换后会在这里展示结果压缩包 ")):(l(),n("ul",Be,[(l(!0),n(w,null,F(b.value,t=>(l(),n("li",{key:`${t.resultId||t.outputFilename||t.sourceFilename}`,class:"task-item"},[s("div",De,[s("span",{class:"id",title:t.sourceFilename},i(t.sourceFilename||"-"),9,Ne),t.outputFilename?(l(),n("div",Re,"压缩包文件:"+i(t.outputFilename),1)):_("",!0),t.error?(l(),n("div",$e,"错误信息:"+i(t.error),1)):_("",!0)]),s("div",Se,[s("span",{class:P(["status",t.success?"success":"failed"])},i(t.success?"已完成":"失败"),3),t.success&&(t.downloadUrl||t.resultId)?(l(),n("button",{key:0,type:"button",class:"download",onClick:o=>U(t)}," 下载压缩包 ",8,Ue)):_("",!0),t.resultId?(l(),n("button",{key:1,type:"button",class:"btn-delete",onClick:o=>S(t.resultId)}," 删除 ",8,Ve)):_("",!0)])]))),128))]))])])])])]))}}),He=W(Ae,[["__scopeId","data-v-0e58908e"]]);X(He).use(Y).mount("#app"); diff --git a/new_web_source/assets/dedupe-DNlVfFj-.css b/new_web_source/assets/dedupe-DNlVfFj-.css new file mode 100644 index 0000000..fa16a4e --- /dev/null +++ b/new_web_source/assets/dedupe-DNlVfFj-.css @@ -0,0 +1 @@ +.module-page[data-v-c7e8afd4]{min-height:100vh;background:#1a1a1a}.main-content[data-v-c7e8afd4]{display:flex;min-height:calc(100vh - 56px);height:calc(100vh - 56px)}.left-panel[data-v-c7e8afd4]{width:380px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-c7e8afd4]{flex:1;display:flex;flex-direction:column;min-width:0;background:#1a1a1a}.section-title[data-v-c7e8afd4]{font-size:13px;color:#bbb;margin-bottom:10px}.upload-zone[data-v-c7e8afd4]{border:1px dashed #3a3a3a;border-radius:10px;padding:24px;text-align:center;background:#252525;margin-bottom:20px;transition:all .2s ease}.upload-zone[data-v-c7e8afd4]:hover{border-color:#3498db;background:#2a2a2a}.hint[data-v-c7e8afd4]{color:#888;font-size:13px;margin-bottom:12px;line-height:1.5}.btns[data-v-c7e8afd4]{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.opt-btn[data-v-c7e8afd4],.btn-run[data-v-c7e8afd4],.download[data-v-c7e8afd4],.btn-delete[data-v-c7e8afd4]{border:none;cursor:pointer;transition:all .2s ease}.opt-btn[data-v-c7e8afd4]{padding:8px 16px;font-size:13px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px}.opt-btn.small[data-v-c7e8afd4]{padding:6px 10px;font-size:12px}.opt-btn[data-v-c7e8afd4]:hover{color:#3498db;background:#333;border-color:#3498db}.selected-files[data-v-c7e8afd4]{margin-top:14px;font-size:12px;color:#888;max-height:112px;overflow-y:auto;text-align:left}.selected-files span[data-v-c7e8afd4]{display:block;margin:4px 0;word-break:break-all}.more-line[data-v-c7e8afd4]{color:#b8c1cc}.option-group[data-v-c7e8afd4]{margin-bottom:20px}.column-option-group[data-v-c7e8afd4]{padding:14px;border-radius:10px;background:#252525;border:1px solid #2a2a2a}.column-toolbar[data-v-c7e8afd4]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.column-count[data-v-c7e8afd4]{font-size:12px;color:#a9b4bf}.column-actions[data-v-c7e8afd4]{display:flex;gap:8px}.column-grid[data-v-c7e8afd4]{display:grid;grid-template-columns:1fr;gap:8px;max-height:280px;overflow-y:auto}.empty-column-state[data-v-c7e8afd4]{padding:16px 12px;border-radius:8px;border:1px dashed #3a3a3a;background:#202020;color:#7f8790;font-size:12px;line-height:1.6}.column-item[data-v-c7e8afd4]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;border:1px solid #2f2f2f;background:#202020;cursor:pointer;transition:all .2s ease;font-size:13px;color:#d7d7d7}.column-item[data-v-c7e8afd4]:hover,.column-item.active[data-v-c7e8afd4]{border-color:#3b6f98;background:#26313a}.column-item input[data-v-c7e8afd4]{margin:0}.column-item span[data-v-c7e8afd4]{word-break:break-all}.radio-item[data-v-c7e8afd4]{display:flex;align-items:flex-start;gap:10px;cursor:pointer;padding:10px 12px;border-radius:8px;background:#252525;border:1px solid #2a2a2a;margin-bottom:8px;transition:all .2s ease}.radio-item[data-v-c7e8afd4]:hover,.radio-item.active[data-v-c7e8afd4]{background:#2a2a2a;border-color:#3a3a3a}.radio-item input[data-v-c7e8afd4]{margin-top:3px}.label[data-v-c7e8afd4]{font-weight:500;color:#e0e0e0;font-size:13px}.desc[data-v-c7e8afd4]{font-size:12px;color:#888;margin-top:2px;line-height:1.5;font-weight:400}.run-row[data-v-c7e8afd4]{display:flex;align-items:center;flex-wrap:wrap;gap:10px 12px;margin-top:16px}.btn-run[data-v-c7e8afd4]{padding:10px 22px;background:#3498db;color:#fff;border-radius:8px;font-size:14px}.btn-run[data-v-c7e8afd4]:hover{background:#2980b9}.btn-run[data-v-c7e8afd4]:disabled{background:#555;color:#999;cursor:not-allowed}.loading-msg[data-v-c7e8afd4]{color:#3498db;font-size:13px}.panel-header[data-v-c7e8afd4]{padding:16px 20px;border-bottom:1px solid #2a2a2a;font-size:15px;font-weight:600;color:#ddd}.task-list-wrap[data-v-c7e8afd4]{flex:1;overflow-y:auto;padding:16px}.task-list[data-v-c7e8afd4]{list-style:none;margin:0;padding:0}.task-item[data-v-c7e8afd4]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:10px;background:#1e1e1e}.left[data-v-c7e8afd4]{flex:1;min-width:0}.id[data-v-c7e8afd4]{display:inline-block;font-weight:600;color:#e0e0e0;font-size:13px}.files[data-v-c7e8afd4]{font-size:12px;color:#888;margin-top:4px}.task-right[data-v-c7e8afd4]{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end}.status[data-v-c7e8afd4]{padding:4px 10px;border-radius:6px;font-size:12px;white-space:nowrap}.status.success[data-v-c7e8afd4]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-c7e8afd4]{background:#e74c3c2e;color:#ff6b6b}.download[data-v-c7e8afd4]{padding:6px 10px;border-radius:6px;font-size:12px;background:#3498db2e;color:#69b6ff}.download[data-v-c7e8afd4]:hover{background:#3498db47}.btn-delete[data-v-c7e8afd4]{padding:6px 10px;border-radius:6px;font-size:12px;background:#e74c3c1f;color:#ff8f8f}.btn-delete[data-v-c7e8afd4]:hover{background:#e74c3c38}.empty-tasks[data-v-c7e8afd4]{color:#666;font-size:13px;padding:24px 8px}.clean-placeholder[data-v-c7e8afd4]{max-height:none}.clean-result-summary[data-v-c7e8afd4]{display:grid;grid-template-columns:repeat(3,minmax(0,220px));gap:16px;margin-bottom:18px}.summary-card[data-v-c7e8afd4]{padding:16px 18px;border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e}.summary-card strong[data-v-c7e8afd4]{display:block;margin-top:8px;font-size:24px;color:#eaf4ff}.summary-label[data-v-c7e8afd4]{font-size:12px;color:#8d8d8d}.result-list-wrap[data-v-c7e8afd4]{border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e;min-height:260px}.result-list-header[data-v-c7e8afd4]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border-bottom:1px solid #2a2a2a;font-size:14px;color:#ddd}@media(max-width:1100px){.main-content[data-v-c7e8afd4]{flex-direction:column;height:auto}.left-panel[data-v-c7e8afd4]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.right-panel[data-v-c7e8afd4]{min-height:420px}.task-item[data-v-c7e8afd4]{flex-direction:column;align-items:flex-start}.task-right[data-v-c7e8afd4]{width:100%;justify-content:flex-start}.clean-result-summary[data-v-c7e8afd4]{grid-template-columns:1fr}} diff --git a/new_web_source/assets/dedupe.js b/new_web_source/assets/dedupe.js new file mode 100644 index 0000000..4aebb8b --- /dev/null +++ b/new_web_source/assets/dedupe.js @@ -0,0 +1 @@ +import{d as z,o as W,a,c as n,b as q,B as J,e as s,F as C,r as F,t as u,f as b,n as I,w as P,v as B,g as c,h as L,i as x,E as o,j as O,k as G,l as Q,m as X,p as Y,_ as Z,q as ee,s as se}from"./pywebview-C66x_2Dh.js";import{e as te}from"./brand-BZije8D7.js";const le={class:"page-shell module-page"},ae={class:"main-content"},ne={class:"left-panel"},oe={class:"upload-zone"},re={class:"selected-files clean-placeholder"},ie={key:0,class:"more-line"},ue={key:1},ce={class:"option-group column-option-group"},de={class:"column-toolbar"},ve={class:"column-count"},pe={key:0,class:"column-grid"},fe=["value"],_e={key:1,class:"empty-column-state"},me={class:"option-group"},he={class:"run-row"},ge=["disabled"],ye={class:"loading-msg"},be={class:"right-panel"},we={class:"task-list-wrap"},ke={class:"clean-result-summary"},Ce={class:"summary-card"},Ie={class:"summary-card"},xe={class:"summary-card"},De={class:"result-list-wrap"},Ee={key:0,class:"empty-tasks"},Fe={key:1,class:"task-list clean-result-list"},Pe={class:"left"},Be=["title"],Se={key:0,class:"files"},Ue={key:1,class:"files"},Ne={class:"task-right"},$e=["onClick"],Ae=["onClick"],He=z({__name:"BrandDedupeTab",setup(Re){const p=c([]),d=c([]),f=c([]),w=c(""),v=c([]),S=c(!1),_=c(!0),m=c(!0),h=c(!1),k=c([]),g=c({total:0,successCount:0,failedCount:0,items:[]}),D=L(()=>f.value.slice(0,8));function $(){d.value=[...p.value]}function A(){d.value=[]}async function U(l){const e=x();if(!e?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const r of l){const i=typeof r=="string"?r:r.absolutePath,j=typeof r=="string"?void 0:r.relativePath,y=await e.upload_file_to_java(i,j);if(!y?.success||!y.data)throw new Error(y?.error||y?.message||`上传失败:${i}`);t.push(y.data)}return t}async function N(l){const e=await Y(l);if(!e.headers?.length){o.error("读取 Excel 表头失败"),p.value=[],d.value=[];return}const t=["id","ASIN","国家","价格","卖家名称"],r=[...t.filter(i=>e.headers?.includes(i)),...(e.headers||[]).filter(i=>!t.includes(i))];p.value=r,d.value=t.filter(i=>r.includes(i))}async function H(l,e){f.value=l,w.value="",v.value=await U(l),v.value.length>0&&await N(v.value[0].fileKey),o.success(e)}async function K(){const l=x();if(!l?.select_brand_xlsx_files){o.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const e=await l.select_brand_xlsx_files();if(!e?.length)return;await H(e,`已选择 ${e.length} 个待清洗文件`)}catch(e){o.error(e instanceof Error?e.message:"选择失败")}}async function R(){const l=x();if(!l?.select_brand_folder){o.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const e=await l.select_brand_folder();if(!e)return;w.value=e.split(/[/\\]/).filter(Boolean).pop()||"";const t=await te(e);if(t.success&&t.items?.length){f.value=t.items.map(r=>r.relativePath),v.value=await U(t.items),v.value.length>0&&await N(v.value[0].fileKey),o.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`);return}o.warning(t.error||"该文件夹下没有 xlsx 文件")}catch(e){o.error(e instanceof Error?e.message:"选择失败")}}async function V(){if(!v.value.length){o.warning("请先选择待清洗 Excel 文件或文件夹");return}if(!d.value.length){o.warning("请至少选择一列保留列");return}if(!S.value&&!_.value&&!m.value){o.warning("请至少选择一种 ID 保留规则");return}try{h.value=!0;const l=await O({files:v.value.map(e=>({fileKey:e.fileKey,originalFilename:e.originalFilename,relativePath:e.relativePath})),selectedColumns:d.value,keepIntegerIds:S.value,keepUnderscoreIds:_.value,keepIntegerMainIdsWhenNoSubIds:m.value,archiveName:v.value.some(e=>!!e.relativePath)&&w.value?w.value:void 0});g.value=l,k.value=l.items||[],await E(),o.success("数据去重完成")}catch(l){o.error(l instanceof Error?l.message:"去重失败")}finally{h.value=!1}}async function E(){try{const l=await G();k.value=l.items||[],g.value={total:l.items?.length||0,successCount:l.items?.filter(e=>e.success).length||0,failedCount:l.items?.filter(e=>!e.success).length||0,items:l.items||[]}}catch{}}async function M(l){try{await Q(l),await E(),o.success("已删除")}catch(e){o.error(e instanceof Error?e.message:"删除失败")}}async function T(l){const e=x(),t=l.downloadUrl||(l.resultId?X(l.resultId):"");if(!t){o.warning("当前结果没有下载地址");return}const r=l.outputFilename||`${new Date().toISOString().slice(0,10).replace(/-/g,"")}_cleaned.xlsx`;if(e?.save_file_from_url_new){const i=await e.save_file_from_url_new(t,r);i.success?o.success(`已保存:${i.path||r}`):i.error&&i.error!=="用户取消"&&o.error(i.error);return}}return W(()=>{E().catch(()=>{})}),(l,e)=>(a(),n("div",le,[q(J,{active:"dedupe"}),s("div",ae,[s("aside",ne,[e[7]||(e[7]=s("div",{class:"section-title"},"选择文件",-1)),s("div",oe,[e[3]||(e[3]=s("div",{class:"hint"},"选择需要清洗的 Excel 文件或文件夹,后续将按所选规则输出处理结果。",-1)),s("div",{class:"btns"},[s("button",{type:"button",class:"opt-btn",onClick:K},"选择 Excel 文件"),s("button",{type:"button",class:"opt-btn",onClick:R},"选择文件夹")]),s("div",re,[f.value.length?(a(),n(C,{key:0},[(a(!0),n(C,null,F(D.value,t=>(a(),n("span",{key:t},u(t),1))),128)),f.value.length>D.value.length?(a(),n("span",ie," 还有 "+u(f.value.length-D.value.length)+" 个文件未展开显示 ",1)):b("",!0)],64)):(a(),n("span",ue,"暂未选择待清洗文件"))])]),e[8]||(e[8]=s("div",{class:"section-title"},"保留列设置",-1)),s("div",ce,[s("div",de,[s("span",ve,"已选择 "+u(d.value.length)+" / "+u(p.value.length)+" 列",1),s("div",{class:"column-actions"},[s("button",{type:"button",class:"opt-btn small",onClick:$},"全选"),s("button",{type:"button",class:"opt-btn small",onClick:A},"清空")])]),p.value.length?(a(),n("div",pe,[(a(!0),n(C,null,F(p.value,t=>(a(),n("label",{key:t,class:I(["column-item",{active:d.value.includes(t)}])},[P(s("input",{"onUpdate:modelValue":e[0]||(e[0]=r=>d.value=r),type:"checkbox",value:t},null,8,fe),[[B,d.value]]),s("span",null,u(t),1)],2))),128))])):(a(),n("div",_e,"请选择 Excel 文件后读取表头并填充可保留列")),e[4]||(e[4]=s("div",{class:"desc"},"读取首个 Excel 文件的第一行作为表头,用于动态选择需要保留的列。",-1))]),e[9]||(e[9]=s("div",{class:"section-title"},"ID 保留规则",-1)),s("div",me,[s("label",{class:I(["radio-item",{active:_.value}])},[P(s("input",{"onUpdate:modelValue":e[1]||(e[1]=t=>_.value=t),type:"checkbox"},null,512),[[B,_.value]]),e[5]||(e[5]=s("div",null,[s("span",{class:"label"},"保留子链接"),s("div",{class:"desc"},"例如 1_1、2_3 这种带下划线的子项 ID")],-1))],2),s("label",{class:I(["radio-item",{active:m.value}])},[P(s("input",{"onUpdate:modelValue":e[2]||(e[2]=t=>m.value=t),type:"checkbox"},null,512),[[B,m.value]]),e[6]||(e[6]=s("div",null,[s("span",{class:"label"},"仅剩主链接无子链接"),s("div",{class:"desc"},"当某个主链接只有 13 这类主 ID、没有 13_1 这类对应子 ID 时,自动保留该主 ID")],-1))],2)]),s("div",he,[s("button",{type:"button",class:"btn-run",disabled:h.value,onClick:V},u(h.value?"清洗中...":"开始清洗"),9,ge),s("span",ye,u(h.value?"正在处理文件并上传结果,请稍候…":"选择文件、列和 ID 规则后即可执行清洗,结果会显示在右侧供下载"),1)])]),s("section",be,[e[14]||(e[14]=s("div",{class:"panel-header"},"去重结果",-1)),s("div",we,[s("div",ke,[s("div",Ce,[e[10]||(e[10]=s("span",{class:"summary-label"},"已处理文件",-1)),s("strong",null,u(g.value.total),1)]),s("div",Ie,[e[11]||(e[11]=s("span",{class:"summary-label"},"成功结果",-1)),s("strong",null,u(g.value.successCount),1)]),s("div",xe,[e[12]||(e[12]=s("span",{class:"summary-label"},"失败文件",-1)),s("strong",null,u(g.value.failedCount),1)])]),s("div",De,[e[13]||(e[13]=s("div",{class:"result-list-header"},[s("span",null,"处理后的 Excel 列表")],-1)),k.value.length===0?(a(),n("div",Ee," 暂无去重结果,完成数据去重后会在这里展示输出文件 ")):(a(),n("ul",Fe,[(a(!0),n(C,null,F(k.value,t=>(a(),n("li",{key:`${t.resultId||t.outputFilename||t.sourceFilename}`,class:"task-item"},[s("div",Pe,[s("span",{class:"id",title:t.sourceFilename},u(t.sourceFilename||"-"),9,Be),t.outputFilename?(a(),n("div",Se,"输出文件:"+u(t.outputFilename),1)):b("",!0),t.error?(a(),n("div",Ue,"错误信息:"+u(t.error),1)):b("",!0)]),s("div",Ne,[s("span",{class:I(["status",t.success?"success":"failed"])},u(t.success?"已完成":"失败"),3),t.success&&(t.downloadUrl||t.resultId)?(a(),n("button",{key:0,type:"button",class:"download",onClick:r=>T(t)}," 下载文件 ",8,$e)):b("",!0),t.resultId?(a(),n("button",{key:1,type:"button",class:"btn-delete",onClick:r=>M(t.resultId)}," 删除 ",8,Ae)):b("",!0)])]))),128))]))])])])])]))}}),Ke=Z(He,[["__scopeId","data-v-c7e8afd4"]]);ee(Ke).use(se).mount("#app"); diff --git a/new_web_source/assets/delete-brand-BP3XWKAC.css b/new_web_source/assets/delete-brand-BP3XWKAC.css new file mode 100644 index 0000000..351ac66 --- /dev/null +++ b/new_web_source/assets/delete-brand-BP3XWKAC.css @@ -0,0 +1 @@ +.queue-debug-card[data-v-248c8db1]{margin-top:18px;padding:14px;border:1px solid #2a2a2a;border-radius:10px;background:#202020}.queue-debug-title[data-v-248c8db1]{margin-bottom:8px}.queue-debug-line[data-v-248c8db1]{color:#b8c1cc;font-size:12px;line-height:1.6;margin-bottom:8px}.queue-debug-payload[data-v-248c8db1]{margin:0;max-height:220px;overflow:auto;padding:10px;border-radius:8px;background:#141414;color:#8fd3ff;font-size:12px;line-height:1.5;white-space:pre-wrap;word-break:break-all}.module-page[data-v-248c8db1]{min-height:100vh;background:#1a1a1a}.main-content[data-v-248c8db1]{display:flex;min-height:calc(100vh - 56px);height:calc(100vh - 56px)}.left-panel[data-v-248c8db1]{width:380px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-248c8db1]{flex:1;display:flex;flex-direction:column;min-width:0;background:#1a1a1a}.section-title[data-v-248c8db1]{font-size:13px;color:#bbb;margin-bottom:10px}.upload-zone[data-v-248c8db1]{border:1px dashed #3a3a3a;border-radius:10px;padding:24px;text-align:center;background:#252525;margin-bottom:20px;transition:all .2s ease}.upload-zone[data-v-248c8db1]:hover{border-color:#3498db;background:#2a2a2a}.hint[data-v-248c8db1]{color:#888;font-size:13px;margin-bottom:12px;line-height:1.5}.btns[data-v-248c8db1]{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.opt-btn[data-v-248c8db1],.btn-run[data-v-248c8db1],.download[data-v-248c8db1],.btn-delete[data-v-248c8db1]{border:none;cursor:pointer;transition:all .2s ease}.opt-btn[data-v-248c8db1]{padding:8px 16px;font-size:13px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px}.opt-btn[data-v-248c8db1]:hover{color:#3498db;background:#333;border-color:#3498db}.selected-files[data-v-248c8db1]{margin-top:14px;font-size:12px;color:#888;max-height:112px;overflow-y:auto;text-align:left}.selected-files span[data-v-248c8db1]{display:block;margin:4px 0;word-break:break-all}.more-line[data-v-248c8db1]{color:#b8c1cc}.split-selected-files[data-v-248c8db1]{max-height:120px;min-height:72px;padding-right:4px}.option-group[data-v-248c8db1]{margin-bottom:20px}.radio-item[data-v-248c8db1]{display:flex;align-items:flex-start;gap:10px;cursor:pointer;padding:10px 12px;border-radius:8px;background:#252525;border:1px solid #2a2a2a;margin-bottom:8px;transition:all .2s ease}.radio-item[data-v-248c8db1]:hover,.radio-item.active[data-v-248c8db1]{background:#2a2a2a;border-color:#3a3a3a}.radio-item input[data-v-248c8db1]{margin-top:3px}.label[data-v-248c8db1]{font-weight:500;color:#e0e0e0;font-size:13px}.desc[data-v-248c8db1]{font-size:12px;color:#888;margin-top:2px;line-height:1.5;font-weight:400}.run-row[data-v-248c8db1]{display:flex;align-items:center;flex-wrap:wrap;gap:10px 12px;margin-top:16px}.btn-run[data-v-248c8db1]{padding:10px 22px;background:#3498db;color:#fff;border-radius:8px;font-size:14px}.btn-run[data-v-248c8db1]:hover{background:#2980b9}.btn-run[data-v-248c8db1]:disabled{background:#555;color:#999;cursor:not-allowed}.loading-msg[data-v-248c8db1]{color:#3498db;font-size:13px}.panel-header[data-v-248c8db1]{padding:16px 20px;border-bottom:1px solid #2a2a2a;font-size:15px;font-weight:600;color:#ddd}.task-list-wrap[data-v-248c8db1]{flex:1;overflow-y:auto;padding:16px}.task-list[data-v-248c8db1]{list-style:none;margin:0;padding:0}.task-item[data-v-248c8db1]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:10px;background:#1e1e1e}.split-result-item[data-v-248c8db1]{align-items:flex-start}.left[data-v-248c8db1]{flex:1;min-width:0}.split-result-main[data-v-248c8db1]{display:flex;flex-direction:column;gap:4px}.id[data-v-248c8db1]{display:inline-block;font-weight:600;color:#e0e0e0;font-size:13px}.files[data-v-248c8db1]{font-size:12px;color:#888;margin-top:4px}.time[data-v-248c8db1]{font-size:12px;color:#666;margin-top:2px}.split-entry-list[data-v-248c8db1]{line-height:1.6;word-break:break-all;max-width:100%}.delete-brand-preview[data-v-248c8db1]{white-space:normal}.delete-brand-progress-block[data-v-248c8db1]{margin-top:8px}.delete-brand-progress-header[data-v-248c8db1]{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;font-size:12px;color:#8fbfff}.delete-brand-progress-bar[data-v-248c8db1]{width:100%;height:8px;border-radius:999px;background:#ffffff14;overflow:hidden}.delete-brand-progress-bar-fill[data-v-248c8db1]{height:100%;border-radius:inherit;background:linear-gradient(90deg,#2d8cf0,#4db3ff);transition:width .3s ease}.delete-brand-progress[data-v-248c8db1]{color:#69b6ff;line-height:1.6;white-space:normal;margin-top:6px}.task-right[data-v-248c8db1]{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end}.split-result-actions[data-v-248c8db1]{flex-shrink:0;min-width:180px;justify-content:flex-end;align-self:center}.status[data-v-248c8db1]{padding:4px 10px;border-radius:6px;font-size:12px;white-space:nowrap}.status.success[data-v-248c8db1]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-248c8db1]{background:#e74c3c2e;color:#ff6b6b}.status.running[data-v-248c8db1]{background:#3498db2e;color:#3498db}.download[data-v-248c8db1]{padding:6px 10px;border-radius:6px;font-size:12px;background:#3498db2e;color:#69b6ff}.download[data-v-248c8db1]:hover{background:#3498db47}.btn-delete[data-v-248c8db1]{padding:6px 10px;border-radius:6px;font-size:12px;background:#e74c3c1f;color:#ff8f8f}.btn-delete[data-v-248c8db1]:hover{background:#e74c3c38}.empty-tasks[data-v-248c8db1]{color:#666;font-size:13px;padding:24px 8px}.clean-placeholder[data-v-248c8db1]{max-height:112px}.clean-result-summary[data-v-248c8db1]{display:grid;grid-template-columns:repeat(3,minmax(0,220px));gap:16px;margin-bottom:18px}.summary-card[data-v-248c8db1]{padding:16px 18px;border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e}.summary-card strong[data-v-248c8db1]{display:block;margin-top:8px;font-size:24px;color:#eaf4ff}.summary-label[data-v-248c8db1]{font-size:12px;color:#8d8d8d}.result-list-wrap[data-v-248c8db1]{border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e;min-height:260px}.result-list-header[data-v-248c8db1]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border-bottom:1px solid #2a2a2a;font-size:14px;color:#ddd}@media(max-width:1100px){.main-content[data-v-248c8db1]{flex-direction:column;height:auto}.left-panel[data-v-248c8db1]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.right-panel[data-v-248c8db1]{min-height:420px}.task-item[data-v-248c8db1]{flex-direction:column;align-items:flex-start}.task-right[data-v-248c8db1]{width:100%;justify-content:flex-start}.split-result-actions[data-v-248c8db1]{min-width:0;align-self:flex-start}.clean-result-summary[data-v-248c8db1]{grid-template-columns:1fr}} diff --git a/new_web_source/assets/delete-brand.js b/new_web_source/assets/delete-brand.js new file mode 100644 index 0000000..d0ceee6 --- /dev/null +++ b/new_web_source/assets/delete-brand.js @@ -0,0 +1 @@ +import{d as Ye,o as Ze,L as es,a as d,c as f,b as ss,B as ts,e as r,F as H,r as fe,t as v,f as h,M as as,N as De,n as Me,g as y,h as G,O as ns,i as J,E as p,P as ls,Q as rs,R as os,S as us,T as is,_ as cs,q as ds,s as fs}from"./pywebview-C66x_2Dh.js";import{e as vs}from"./brand-BZije8D7.js";const hs={class:"page-shell module-page"},ps={class:"main-content"},_s={class:"left-panel"},ys={class:"upload-zone"},gs={class:"selected-files clean-placeholder split-selected-files"},ms={key:0,class:"more-line"},ks={key:1},ws={class:"run-row"},Is=["disabled"],bs=["disabled"],Ss={class:"loading-msg"},Ts={key:0,class:"queue-debug-card"},Es={key:0,class:"queue-debug-line"},Cs={key:1,class:"queue-debug-payload"},Fs={class:"right-panel"},Rs={class:"task-list-wrap"},Ns={class:"clean-result-summary"},Ps={class:"summary-card"},xs={class:"summary-card"},$s={class:"summary-card"},As={class:"result-list-wrap"},Ds={key:0,class:"empty-tasks"},Ms={key:0,class:"result-subsection"},Ls={class:"task-list clean-result-list"},Bs={class:"left split-result-main"},qs=["title"],Us={class:"files"},Os={class:"files"},Ks={key:0,class:"files"},Hs={key:1,class:"files"},Gs={key:2,class:"files"},Js={key:3,class:"time"},js={key:4,class:"delete-brand-progress-block"},zs={class:"delete-brand-progress-header"},Vs={class:"delete-brand-progress-bar"},Xs={class:"files delete-brand-progress"},Qs={key:5,class:"files split-entry-list delete-brand-preview"},Ws={key:6,class:"files"},Ys={class:"task-right split-result-actions"},Zs=["onClick"],et=["onClick"],st={key:1,class:"result-subsection"},tt={class:"task-list clean-result-list"},at={class:"left split-result-main"},nt=["title"],lt={class:"files"},rt={class:"files"},ot={key:0,class:"files"},ut={key:1,class:"files"},it={key:2,class:"time"},ct={key:3,class:"delete-brand-progress-block"},dt={class:"delete-brand-progress-header"},ft={class:"delete-brand-progress-bar"},vt={class:"files delete-brand-progress"},ht={key:4,class:"files split-entry-list delete-brand-preview"},pt={key:5,class:"files"},_t={class:"task-right split-result-actions"},yt=["onClick"],gt=["onClick"],mt=Ye({__name:"BrandDeleteBrandTab",setup(wt){function $(){return`delete-brand:current-tasks:${typeof window<"u"&&window.localStorage.getItem("uid")||"0"}`}const A=y([]),j=y([]),L=y(!1),ve=y([]),i=y([]),B=y([]),z=y({total:0,successCount:0,failedCount:0,items:[]}),b=y(""),S=y(""),m=y({}),T=y(null),ee=y(!1),V=y(!1),C=y(!1),D=y(""),X=y(!1),q=y(null),se=y(!1),te=G(()=>A.value.slice(0,10)),F=G(()=>{const e=[];return i.value.forEach(s=>{e.push(...s.items)}),e});function Le(){try{const e=typeof window<"u"?window.localStorage.getItem($()):null;if(e){if(i.value=JSON.parse(e),i.value.length>0){const s=i.value[i.value.length-1];b.value=s.queuePushResult||"",S.value=s.queuePayloadText||""}}else i.value=[]}catch{i.value=[]}}function ae(e,s,t,a){if(!s?.length)return;const l=i.value.findIndex(c=>c.taskId===e),n=l>=0?i.value[l]:null,o=s.map(c=>{const _=n?.items.find(We=>M(We,c)),k=Array.isArray(c.countries)?c.countries:void 0,g=Array.isArray(_?.countries)?_?.countries:void 0,w=k&&k.length>0?k:g&&g.length>0?g:k??g,I=Array.isArray(c.previewRows)?c.previewRows:void 0,E=Array.isArray(_?.previewRows)?_?.previewRows:void 0,de=I&&I.length>0?I:E&&E.length>0?E:I??E;return{...c,countries:w,previewRows:de,_pushed:_?._pushed??c._pushed??!1,_completed:_?._completed??c._completed??!1}}),u={taskId:e,items:o,createdAt:n?.createdAt||Date.now(),queuePushResult:t??n?.queuePushResult,queuePayloadText:a??n?.queuePayloadText};l>=0?i.value[l]=u:i.value.push(u),typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value))}function he(e){const s=i.value.length;i.value=i.value.filter(t=>t.taskId!==e),i.value.length!==s&&typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value))}function pe(e){return e==="SUCCESS"||e==="FAILED"||e==="COMPLETED"}function Be(e){if(!e?.length)return!1;const s=new Set;if(e.forEach(a=>{a.taskId&&pe(a.taskStatus)&&s.add(a.taskId)}),!s.size)return!1;const t=i.value.length;return i.value=i.value.filter(a=>!s.has(a.taskId)),i.value.length!==t?(ne(),!0):!1}const Q=G(()=>B.value.filter(e=>!F.value.some(s=>M(s,e)))),qe=G(()=>F.value.length>0||Q.value.length>0),Ue=G(()=>F.value.filter(e=>Pe(e)&&R(e)==="未入队"));function ne(){typeof window<"u"&&(i.value.length===0?window.localStorage.removeItem($()):window.localStorage.setItem($(),JSON.stringify(i.value)))}function N(e){return e?(i.value.find(t=>t.taskId===e)?.items.length||0)>1:!1}function le(e){return e&&i.value.find(s=>s.taskId===e)||null}function M(e,s){return!e||!s?!1:e.resultId!=null&&s.resultId!=null?e.resultId===s.resultId:e.fileKey&&s.fileKey?e.fileKey===s.fileKey:e.sourceFilename===s.sourceFilename}function P(e,s){const t=le(e);return t&&t.items.find(a=>M(a,s))||null}function _e(e){if(!e)return!1;const s=le(e);if(!s)return!1;let t=!1;const a=m.value[e]?.line_progress?.info,l=N(e);if(a?.file_name&&a.current_line!=null&&a.total_lines!=null&&a.total_lines>0&&a.current_line>=a.total_lines){const n=s.items.find(o=>o.sourceFilename===a.file_name);n&&!n._completed&&(n._completed=!0,t=!0)}if(!l){const n=m.value[e]?.task?.status;if((n==="SUCCESS"||n==="FAILED")&&s.items.length===1){const o=s.items[0];o&&!o._completed&&(o._completed=!0,t=!0)}}return t&&ne(),t}function ye(e){return e&&m.value[e]?.task?.status||""}function W(e){if(e.error)return e.error;if(e.matchStatus&&e.matchStatus!=="MATCHED")return e.matchMessage||"";const s=e.taskId;return s&&m.value[s]?.task?.errorMessage||""}function ge(e){const s=e.taskId;if(!s)return!1;const t=m.value[s]?.line_progress,a=ye(s),l=N(s),n=R(e);if(l){const o=P(s,e),u=K(e)===D.value,c=!!(t?.has_progress&&t?.info?.file_name===e.sourceFilename);return u||c||o?._pushed||(a==="RUNNING"||a==="PENDING"||!a)&&o?._completed?!0:{success:!1,retryable:!0}}return n==="本文件解析完毕"||n==="已被全局判定为终态"?!1:t?.has_progress||t?.info?!0:n==="已入队"||n==="处理中"}function me(e){return e.map(s=>s.matched||s.matchStatus==="MATCHED"||s.matchStatus==="INDEX_STALE"?{...s,_pushed:!1,_completed:!1}:{...s,matched:!1,openStoreUrl:void 0,error:s.error||void 0,_pushed:!1,_completed:!1})}function ke(e){return e.matched&&e.matchStatus==="INDEX_STALE"?e.matchMessage||`已匹配 ${e.shopId||""}(索引过期)`.trim():e.matchStatus==="MATCHED"?`已匹配 ${e.shopId||""}`.trim():e.matchMessage?e.matchMessage:e.matchStatus==="CONFLICT"?"存在多个同名店铺,请人工确认":e.matchStatus==="PENDING"?"店铺索引暂未就绪":e.matchStatus?e.matchStatus:e.matched?`已匹配 ${e.shopId||""}`.trim():"待匹配"}function Oe(){ve.value=[...F.value,...Q.value]}function x(){Oe(),Ke(ve.value)}function Ke(e){z.value={total:e.length,successCount:e.filter(s=>s.success).length,failedCount:e.filter(s=>!s.success).length,items:e}}function re(e){const s=e.taskId;return s&&(m.value[s]?.fileProgress||[]).find(l=>l.fileKey&&e.fileKey?l.fileKey===e.fileKey:l.sourceFilename&&e.sourceFilename?l.sourceFilename===e.sourceFilename:!1)||null}function we(e){const s=e.taskId;if(!s)return"";const t=m.value[s],a=t?.line_progress?.info,l=re(e);if(N(s)){const u=P(s,e),c=t?.task?.status,_=!!(a?.file_name&&a.file_name===e.sourceFilename);let k=u?._completed?"COMPLETED":(u?._pushed,"PENDING"),g=0,w=Math.max(0,e.totalRows??l?.totalRows??0);c==="SUCCESS"||c==="FAILED"&&u?._completed?(k="COMPLETED",g=w):_?(k="RUNNING",g=Math.max(0,Math.min(w||Number.MAX_SAFE_INTEGER,a?.current_line??0)),!w&&a?.total_lines&&a.total_lines>0&&(w=a.total_lines)):u?._completed?(k="COMPLETED",g=w):u?._pushed&&(k="PENDING",g=0);const I=[];if(I.push(`文件状态:${k}`),I.push(`文件进度:${g}/${w}`),a?.finished_files!=null){const E=a.file_total&&a.file_total>0?`/${a.file_total}`:"";I.push(`已完成文件:${a.finished_files}${E}`)}return a?.phase&&I.push(`阶段:${a.phase}`),I.join("|")}if(l){const u=[],c=l.processedRows??0,_=l.totalRows??0;if(l.status&&u.push(`文件状态:${l.status}`),u.push(`文件进度:${c}/${_}`),a?.finished_files!=null){const k=a.file_total&&a.file_total>0?`/${a.file_total}`:"";u.push(`已完成文件:${a.finished_files}${k}`)}return a?.phase&&u.push(`阶段:${a.phase}`),u.join("|")}if(!t?.line_progress?.has_progress||!a){const u=t?.task?.status;return u?`任务状态:${u}`:""}const o=[];if(a.phase&&o.push(`阶段:${a.phase}`),a.file_index&&a.file_total&&o.push(`文件:${a.file_index}/${a.file_total}`),a.file_name&&o.push(`当前文件:${a.file_name}`),a.current_line!=null&&a.total_lines!=null&&o.push(`${N(s)?"当前文件进度":"进度"}:${a.current_line}/${a.total_lines}`),a.current_country&&o.push(`国家:${a.current_country}`),a.current_asin&&o.push(`ASIN:${a.current_asin}`),a.finished_files!=null){const u=a.file_total&&a.file_total>0?`/${a.file_total}`:"";o.push(`已完成文件:${a.finished_files}${u}`)}return o.join("|")}function Y(e){const s=e.taskId;if(!s)return 0;const t=m.value[s]?.line_progress?.info;if(N(s)){const o=P(s,e);if(m.value[s]?.task?.status==="SUCCESS"||o?._completed)return 100;const c=Math.max(0,e.totalRows??re(e)?.totalRows??0);if(!!(t?.file_name&&t.file_name===e.sourceFilename)){if(t?.current_line!=null&&t?.total_lines&&t.total_lines>0)return Math.max(0,Math.min(100,Math.round(t.current_line/t.total_lines*100)));if(t?.current_line!=null&&c>0)return Math.max(0,Math.min(100,Math.round(t.current_line/c*100)))}return 0}const l=re(e);return l?Math.max(0,Math.min(100,l.percent??0)):t?t.current_line!=null&&t.total_lines&&t.total_lines>0?Math.max(0,Math.min(100,Math.round(t.current_line/t.total_lines*100))):t.finished_files!=null&&t.file_total&&t.file_total>0?Math.max(0,Math.min(100,Math.round(t.finished_files/t.file_total*100))):m.value[s]?.task?.status==="SUCCESS"?100:0:0}function Ie(e){const s=m.value[e]?.task?.status;return pe(s)}function U(){const e=new Set;return i.value.forEach(s=>{s.items.some(t=>t._pushed)&&e.add(s.taskId)}),Array.from(e)}function R(e){const s=e.taskId;if(!s||!le(s))return"";const a=P(s,e),l=ye(s),n=m.value[s]?.line_progress,o=N(s);if(!o&&(l==="SUCCESS"||l==="FAILED"||e.taskStatus==="SUCCESS"||e.taskStatus==="FAILED"))return"已被全局判定为终态";if(a?._completed)return"本文件解析完毕";if(l==="RUNNING"&&n?.has_progress&&n?.info?.file_name===e.sourceFilename)return"处理中";if(o&&!a?._pushed&&!a?._completed)return"未入队";if(o&&l==="SUCCESS")return"本文件解析完毕";if(!o){const u=m.value[s];if(u?.items&&u.items.find(_=>M(_,e))&&l==="SUCCESS")return"本文件解析完毕"}return a?._pushed?"已入队":"未入队"}function be(e){return!!(e.downloadUrl||e.fileReady)}function He(e){const s=e?.task?.id;if(!s)return!1;const t=i.value.find(o=>o.taskId===s);if(!t)return{success:!1,retryable:!1};const a=e?.items||[];let l=!1;const n=t.items.map(o=>{const u=a.find(de=>M(de,o));if(!u)return o;const c=Array.isArray(u.countries)?u.countries:void 0,_=Array.isArray(o.countries)?o.countries:void 0,k=c&&c.length>0?c:_&&_.length>0?_:c??_,g=Array.isArray(u.previewRows)?u.previewRows:void 0,w=Array.isArray(o.previewRows)?o.previewRows:void 0,I=g&&g.length>0?g:w&&w.length>0?w:g??w,E={...o,...u,countries:k,previewRows:I,_pushed:o._pushed,_completed:o._completed};return JSON.stringify(E)!==JSON.stringify(o)&&(l=!0),E});for(const o of a)n.some(u=>M(u,o))||(n.push({...o,_pushed:!1,_completed:!1}),l=!0);return JSON.stringify(n)!==JSON.stringify(t.items)&&(t.items=n,l=!0),l&&ne(),l}async function oe(e){const s=e||U();if(s.length)try{const t=await ns(s);se.value&&C.value&&(b.value="后端已恢复,继续执行当前任务并自动衔接后续任务..."),se.value=!1;let a=!1;for(const l of t.items||[]){const n=l?.task?.id;typeof n=="number"&&n>0&&(m.value[n]=l,He(l)&&(a=!0),_e(n)&&(a=!0))}a&&x()}catch(t){const a=(t instanceof Error?t.message:String(t||"")).toLowerCase();["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(n=>a.includes(n.toLowerCase()))&&C.value&&(se.value=!0,b.value="当前任务运行中,正在等待后端服务恢复...")}}function Ge(){return is()}function ue(e=!1){if(T.value){if(!e)return;clearTimeout(T.value),T.value=null}const s=async()=>{if(T.value=null,ee.value){ue();return}const t=U();if(!t.length)return;ee.value=!0;let a=!1,l=!1;try{await oe(t),await Ae();for(const n of t)Ie(n)&&(he(n),a=!0,l=!0)}finally{ee.value=!1}l?await O():a&&x(),U().length>0&&ue()};e?s():T.value=window.setTimeout(s,Ge())}function ie(e=!1){T.value&&!e||ue(e)}function Z(e){const s=e.taskId?m.value[e.taskId]?.task?.status:null;return s==="SUCCESS"?{className:"success",text:"已完成"}:s==="FAILED"?{className:"failed",text:"失败"}:s==="RUNNING"?{className:"running",text:"执行中"}:e.taskStatus==="SUCCESS"?{className:"success",text:"已完成"}:e.taskStatus==="FAILED"?{className:"failed",text:"失败"}:e.taskStatus==="RUNNING"?{className:"running",text:"执行中"}:e.success?{className:"success",text:"已完成"}:{className:"failed",text:"失败"}}function Se(){T.value&&(window.clearTimeout(T.value),T.value=null),ce()}async function Te(e){const s=J();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const a of e){const l=typeof a=="string"?a:a.absolutePath,n=typeof a=="string"?void 0:a.relativePath,o=await s.upload_file_to_java(l,n);if(!o?.success||!o.data)throw new Error(o?.error||o?.message||`上传失败:${l}`);t.push(o.data)}return t}async function Je(){const e=J();if(!e?.select_brand_xlsx_files){p.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const s=await e.select_brand_xlsx_files();if(!s?.length)return;A.value=s,j.value=await Te(s),p.success(`已选择 ${s.length} 个删除品牌文件`)}catch(s){p.error(s instanceof Error?s.message:"选择失败")}}async function je(){const e=J();if(!e?.select_brand_folder){p.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const s=await e.select_brand_folder();if(!s)return;const t=await vs(s);if(!t.success||!t.items?.length){p.warning(t.error||"该文件夹下没有 xlsx 文件");return}A.value=t.items.map(a=>a.relativePath||a.absolutePath),j.value=await Te(t.items),p.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`)}catch(s){p.error(s instanceof Error?s.message:"选择失败")}}async function ze(){if(!j.value.length){p.warning("请先选择待处理文件");return}try{L.value=!0;const e=await ls({files:j.value.map(n=>({fileKey:n.fileKey,originalFilename:n.originalFilename,relativePath:n.relativePath}))}),s=me(e.items||[]),t=s.some(n=>n.matchStatus==="MATCHED"||n.matchStatus==="INDEX_STALE"||n.matched),a=s.some(n=>n.matchStatus==="INDEX_STALE"&&n.matched),l=s.some(n=>!n.matched&&n.matchStatus!=="MATCHED"&&n.matchStatus!=="INDEX_STALE");b.value=t?"解析完成,可在左侧点击“推送到 Python 队列”开始串行处理":"解析完成,当前没有可推送的文件",S.value="",s.length&&s[0].taskId&&ae(s[0].taskId,s,b.value,S.value),x(),l?p.warning("部分文件尚未命中可用店铺索引,已保留状态信息,请等待后台刷新后重试。"):a?p.warning("部分文件命中的是过期索引,仍可推送到 Python 队列;后台刷新后会自动重新匹配。"):t?p.success("删除品牌解析完成,请在左侧推送到 Python 队列"):p.warning("当前没有可推送的文件,请先等待店铺索引刷新。"),await O()}catch(e){p.error(e instanceof Error?e.message:"执行失败")}finally{L.value=!1}}async function Ee(e){const s=e.taskId;if(!s){p.warning("未找到任务ID");return}const t=J(),a=rs(s),l=e.outputFilename||e.sourceFilename||`delete-brand_${s}.xlsx`;if(t?.save_file_from_url_new){const n=await t.save_file_from_url_new(a,l);n.success?p.success(`已保存:${n.path||l}`):n.error&&n.error!=="用户取消"&&p.error(n.error);return}}async function O(){try{const e=await os();B.value=me(e.items||[]),Be(B.value),x(),await oe(),ie(!0)}catch(e){const s=(e instanceof Error?e.message:String(e||"")).toLowerCase();["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(a=>s.includes(a.toLowerCase()))||console.error("loadHistory error:",e)}}function Ce(e){i.value.forEach(t=>{t.items=t.items.filter(a=>a.resultId!==e)});const s=i.value.length;i.value=i.value.filter(t=>t.items.length>0),i.value.length!==s&&typeof window<"u"&&window.localStorage.setItem($(),JSON.stringify(i.value)),B.value=B.value.filter(t=>t.resultId!==e),x(),U().length===0&&Se()}async function Fe(e){try{await us(e),Ce(e),await O(),p.success("已删除")}catch(s){const t=s instanceof Error?s.message:"删除失败";if(typeof t=="string"&&t.includes("记录不存在")){Ce(e),p.success("已删除");return}p.error(t)}}function Re(e){const s=e.slice(0,5).map(a=>`${a.country}:${a.asin}${a.status?`(${a.status})`:""}`);return e.length-s.length>0?`${s.join("、")} 等 ${e.length} 条`:s.join("、")}function It(e,s){}function ce(){q.value&&(window.clearTimeout(q.value),q.value=null)}function Ve(e=3e3){ce(),q.value=window.setTimeout(()=>{q.value=null,Ae().catch(()=>{})},e)}function Xe(e){return e.includes("当前店铺正在执行中")}function Ne(){for(const e of i.value)for(const s of e.items){const t=R(s);if(t==="已入队"||t==="处理中")return!0}return!1}function K(e){return e.resultId!=null?`result:${e.resultId}`:`task:${e.taskId||0}:${e.sourceFilename||""}`}function Pe(e){return!!(e.taskId&&(e.matchStatus==="MATCHED"||e.matchStatus==="INDEX_STALE"||e.matched))}function xe(){return F.value.find(e=>!Pe(e)||K(e)===D.value||P(e.taskId,e)?._completed?!1:R(e)==="未入队")}async function $e(e,s){if(s?.auto&&Ne())return e.taskId,e.sourceFilename,{success:!1,retryable:!0};const t=J(),a=e.taskId;if(!a)return{success:!1,retryable:!1};const l=i.value.find(c=>c.taskId===a);if(!l)return{success:!1,retryable:!1};if(!t?.enqueue_json)return p.error("当前环境未启用 pywebview enqueue_json(浏览器环境不会推送)"),{success:!1,retryable:!1};const n={type:"delete-brand-run",ts:Date.now(),data:{taskId:a,items:[e]}};S.value=JSON.stringify(n,null,2);const o=await t.enqueue_json(n);let u="";if(o?.success){u=`已推送文件 ${e.sourceFilename},当前队列长度:${o.queue_size??"-"}`;const c=P(a,e);return c&&(c._pushed=!0,c._completed=!1),D.value=K(e),ae(a,l.items,u,S.value),ie(!0),b.value=u,{success:!0,retryable:!1}}else{const c=o?.error||"未知错误";if(u=`推送到 Python 队列失败:${c}`,b.value=u,ae(a,l.items,u,S.value),s?.auto&&Xe(c))return{success:!1,retryable:!0}}return b.value=u,{success:!1,retryable:!1}}async function Qe(){const e=xe();if(!e){p.warning("当前没有可推送的文件");return}V.value=!0,C.value=!0,ce();const s=await $e(e);if(V.value=!1,!s.success){C.value=!1,D.value="";return}p.success("已开始按顺序推送到 Python 队列")}async function Ae(){if(!C.value||X.value){C.value,X.value;return}if(Ne())return;const e=D.value;if(e){const t=F.value.find(a=>K(a)===e);if(t){const a=t.taskId,l=N(a);l&&(_e(a),R(t),void 0);const n=R(t);if(n==="已入队"||n==="处理中"){t.sourceFilename;return}if(l){const o=P(a,t);if(o&&!o._completed){t.sourceFilename,o._pushed,o._completed;return}}}}const s=xe();if(!s){D.value="",C.value=!1;return}X.value=!0;try{s.taskId,s.sourceFilename,K(s);const t=await $e(s,{auto:!0});if(!t.success){if(t.retryable){s.taskId,s.sourceFilename,Ve();return}s.taskId,s.sourceFilename,C.value=!1}}finally{X.value=!1}}return Ze(()=>{Le();const e=U();e.length>0?oe(e).then(async()=>{let s=!1,t=!1;for(const a of e)Ie(a)&&(he(a),s=!0,t=!0);t?await O():s&&x(),ie(!0)}):x(),O().catch(()=>{})}),es(()=>{Se()}),(e,s)=>(d(),f("div",hs,[ss(ts,{active:"delete-brand"}),r("div",ps,[r("aside",_s,[s[2]||(s[2]=r("div",{class:"section-title"},"选择文件",-1)),r("div",ys,[s[0]||(s[0]=r("div",{class:"hint"},"上传删除品牌 Excel;无论是直接上传文件还是上传文件夹批量导入,都会按每个 Excel 文件名作为店铺名。",-1)),r("div",{class:"btns"},[r("button",{type:"button",class:"opt-btn",onClick:Je},"选择 Excel 文件"),r("button",{type:"button",class:"opt-btn",onClick:je},"选择文件夹")]),r("div",gs,[A.value.length?(d(),f(H,{key:0},[(d(!0),f(H,null,fe(te.value,t=>(d(),f("span",{key:t},v(t),1))),128)),A.value.length>te.value.length?(d(),f("span",ms," 还有 "+v(A.value.length-te.value.length)+" 个文件未展开显示 ",1)):h("",!0)],64)):(d(),f("span",ks,"暂未选择删除品牌文件"))])]),s[3]||(s[3]=as('
执行说明
',2)),r("div",ws,[r("button",{type:"button",class:"btn-run",disabled:L.value,onClick:ze},v(L.value?"解析中...":"开始解析"),9,Is),r("button",{type:"button",class:"btn-run btn-queue",disabled:V.value||!Ue.value.length,onClick:Qe},v(V.value?"推送中...":"推送到 Python 队列"),9,bs),r("span",Ss,v(L.value?"正在读取删除品牌数据,请稍候…":"解析后会在右侧展示按国家分组的去重结果"),1)]),b.value||S.value?(d(),f("div",Ts,[s[1]||(s[1]=r("div",{class:"section-title queue-debug-title"},"Python 队列推送结果",-1)),b.value?(d(),f("div",Es,v(b.value),1)):h("",!0),S.value?(d(),f("pre",Cs,v(S.value),1)):h("",!0)])):h("",!0)]),r("section",Fs,[s[12]||(s[12]=r("div",{class:"panel-header"},"删除品牌结果",-1)),r("div",Rs,[r("div",Ns,[r("div",Ps,[s[4]||(s[4]=r("span",{class:"summary-label"},"已处理文件",-1)),r("strong",null,v(z.value.total),1)]),r("div",xs,[s[5]||(s[5]=r("span",{class:"summary-label"},"成功结果",-1)),r("strong",null,v(z.value.successCount),1)]),r("div",$s,[s[6]||(s[6]=r("span",{class:"summary-label"},"失败文件",-1)),r("strong",null,v(z.value.failedCount),1)])]),r("div",As,[s[11]||(s[11]=r("div",{class:"result-list-header"},[r("span",null,"删除品牌结果列表")],-1)),qe.value?(d(),f(H,{key:1},[F.value.length?(d(),f("div",Ms,[s[8]||(s[8]=r("div",{class:"result-subsection-title"},"当前任务",-1)),r("ul",Ls,[(d(!0),f(H,null,fe(F.value,t=>(d(),f("li",{key:`current-${t.taskId||t.resultId||t.sourceFilename}`,class:"task-item split-result-item"},[r("div",Bs,[r("span",{class:"id",title:t.sourceFilename},v(t.sourceFilename||"-"),9,qs),r("div",Us,"店铺名:"+v(t.shopName||"-"),1),r("div",Os,"匹配结果:"+v(ke(t)),1),t.platform?(d(),f("div",Ks,"平台:"+v(t.platform),1)):h("",!0),R(t)?(d(),f("div",Hs,"队列状态:"+v(R(t)),1)):h("",!0),t.countryCount!==void 0&&t.matched?(d(),f("div",Gs,"国家数:"+v(t.countryCount),1)):h("",!0),t.totalRows!==void 0&&t.matched?(d(),f("div",Js,"去重后 "+v(t.totalRows)+" 条 ",1)):h("",!0),ge(t)?(d(),f("div",js,[r("div",zs,[s[7]||(s[7]=r("span",null,"任务进度",-1)),r("span",null,v(Y(t))+"%",1)]),r("div",Vs,[r("div",{class:"delete-brand-progress-bar-fill",style:De({width:`${Y(t)}%`})},null,4)]),r("div",Xs,v(we(t)),1)])):h("",!0),t.previewRows?.length?(d(),f("div",Qs,v(Re(t.previewRows)),1)):h("",!0),W(t)?(d(),f("div",Ws,"错误信息:"+v(W(t)),1)):h("",!0)]),r("div",Ys,[r("span",{class:Me(["status",Z(t).className])},v(Z(t).text),3),be(t)?(d(),f("button",{key:0,type:"button",class:"download",onClick:a=>Ee(t)}," 下载 ",8,Zs)):h("",!0),t.resultId?(d(),f("button",{key:1,type:"button",class:"btn-delete",onClick:a=>Fe(t.resultId)}," 删除 ",8,et)):h("",!0)])]))),128))])])):h("",!0),Q.value.length?(d(),f("div",st,[s[10]||(s[10]=r("div",{class:"result-subsection-title"},"历史记录",-1)),r("ul",tt,[(d(!0),f(H,null,fe(Q.value,t=>(d(),f("li",{key:`history-${t.taskId||t.resultId||t.sourceFilename}`,class:"task-item split-result-item"},[r("div",at,[r("span",{class:"id",title:t.sourceFilename},v(t.sourceFilename||"-"),9,nt),r("div",lt,"店铺名:"+v(t.shopName||"-"),1),r("div",rt,"匹配结果:"+v(ke(t)),1),t.platform?(d(),f("div",ot,"平台:"+v(t.platform),1)):h("",!0),t.countryCount!==void 0&&t.matched?(d(),f("div",ut,"国家数:"+v(t.countryCount),1)):h("",!0),t.totalRows!==void 0&&t.matched?(d(),f("div",it,"去重后 "+v(t.totalRows)+" 条 ",1)):h("",!0),ge(t)?(d(),f("div",ct,[r("div",dt,[s[9]||(s[9]=r("span",null,"任务进度",-1)),r("span",null,v(Y(t))+"%",1)]),r("div",ft,[r("div",{class:"delete-brand-progress-bar-fill",style:De({width:`${Y(t)}%`})},null,4)]),r("div",vt,v(we(t)),1)])):h("",!0),t.previewRows?.length?(d(),f("div",ht,v(Re(t.previewRows)),1)):h("",!0),W(t)?(d(),f("div",pt,"错误信息:"+v(W(t)),1)):h("",!0)]),r("div",_t,[r("span",{class:Me(["status",Z(t).className])},v(Z(t).text),3),be(t)?(d(),f("button",{key:0,type:"button",class:"download",onClick:a=>Ee(t)}," 下载 ",8,yt)):h("",!0),t.resultId?(d(),f("button",{key:1,type:"button",class:"btn-delete",onClick:a=>Fe(t.resultId)}," 删除 ",8,gt)):h("",!0)])]))),128))])])):h("",!0)],64)):(d(),f("div",Ds," 暂无删除品牌结果,完成解析后会在这里展示按国家分组的去重结果 "))])])])])]))}}),kt=cs(mt,[["__scopeId","data-v-248c8db1"]]);ds(kt).use(fs).mount("#app"); diff --git a/new_web_source/assets/el-input-xaztPnzw.css b/new_web_source/assets/el-input-xaztPnzw.css new file mode 100644 index 0000000..20791b7 --- /dev/null +++ b/new_web_source/assets/el-input-xaztPnzw.css @@ -0,0 +1 @@ +.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%;vertical-align:bottom;width:100%;font-size:var(--el-font-size-base);display:inline-block;position:relative}.el-textarea__inner{resize:vertical;box-sizing:border-box;width:100%;line-height:1.5;font-size:inherit;color:var(--el-input-text-color,var(--el-text-color-regular));background-color:var(--el-input-bg-color,var(--el-fill-color-blank));-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);background-image:none;border:none;padding:5px 11px;font-family:inherit;display:block;position:relative}.el-textarea__inner.is-clearable{padding:5px 26px 5px 11px}.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__clear{color:var(--el-input-icon-color);cursor:pointer;font-size:14px;position:absolute;top:15px;right:11px;transform:translateY(-50%)}.el-textarea__clear:hover{color:var(--el-input-clear-hover-color)}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);font-size:12px;line-height:14px;position:absolute;bottom:5px;right:10px}.el-textarea .el-input__count.is-outside{top:100%;right:0;bottom:unset;background:0 0;padding-top:2px;line-height:1;position:absolute}.el-textarea.is-disabled .el-textarea__inner{box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.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);font-size:var(--el-font-size-base);width:var(--el-input-width);line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle;display:inline-flex;position:relative}.el-input::-webkit-scrollbar{z-index:11;width:6px}.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{background:var(--el-fill-color-blank)}.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{height:100%;color:var(--el-color-info);align-items:center;font-size:12px;display:inline-flex}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;padding-left:8px;display:inline-block}.el-input .el-input__count.is-outside{height:unset;padding-top:2px;position:absolute;top:100%;right:0}.el-input .el-input__count.is-outside .el-input__count-inner{background:0 0;padding-left:0;line-height:1}.el-input__wrapper{background-color:var(--el-input-bg-color,var(--el-fill-color-blank));border-radius:var(--el-input-border-radius,var(--el-border-radius-base));cursor:text;transition:var(--el-transition-box-shadow);box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;background-image:none;flex-grow:1;justify-content:center;align-items:center;padding:1px 11px;display:inline-flex;transform:translate(0)}.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;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);box-sizing:border-box;background:0 0;border:none;outline:none;flex-grow:1;padding:0}.el-input__inner:focus{outline:none}.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{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__prefix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.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{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__suffix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;transition:all var(--el-transition-duration);justify-content:center;align-items:center;margin-left:8px;display:flex}.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);cursor:not-allowed;box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.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::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-disabled .el-input__prefix-inner,.el-input.is-disabled .el-input__suffix-inner{pointer-events:none}.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;width:100%;display:inline-flex}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);border-radius:var(--el-input-border-radius);white-space:nowrap;justify-content:center;align-items:center;min-height:100%;padding:0 20px;display:inline-flex;position:relative}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-select,.el-input-group__append .el-button,.el-input-group__prepend .el-select,.el-input-group__prepend .el-button{flex:1;margin:0 -20px;display:inline-block}.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{color:inherit;background-color:#0000;border-color:#0000}.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{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;border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{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;border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{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;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{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;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-hidden{display:none!important} diff --git a/new_web_source/assets/el-table-column-Cy4YJvw0.css b/new_web_source/assets/el-table-column-Cy4YJvw0.css new file mode 100644 index 0000000..f784b5e --- /dev/null +++ b/new_web_source/assets/el-table-column-Cy4YJvw0.css @@ -0,0 +1 @@ +:root{--el-color-white:#fff;--el-color-black:#000;--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:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier:cubic-bezier(.23, 1, .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;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#fff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#fff;--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:#fff;--el-box-shadow:0px 12px 32px 4px #0000000a, 0px 8px 20px #00000014;--el-box-shadow-light:0px 0px 12px #0000001f;--el-box-shadow-lighter:0px 0px 6px #0000001f;--el-box-shadow-dark:0px 16px 48px 16px #00000014, 0px 12px 32px #0000001f, 0px 8px 16px -8px #00000029;--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:#000c;--el-overlay-color-light:#000000b3;--el-overlay-color-lighter:#00000080;--el-mask-color:#ffffffe6;--el-mask-color-extra-light:#ffffff4d;--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;transition:var(--el-transition-md-fade);transform-origin:top;transform:scaleY(1)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin: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;transition:var(--el-transition-md-fade);transform-origin:bottom;transform:scaleY(1)}.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;transition:var(--el-transition-md-fade);transform-origin:0 0;transform:scale(1)}.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-leave-active,.el-collapse-transition-enter-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--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color:inherit;fill:currentColor;width:1em;height:1em;color:var(--color);line-height:1em;font-size:inherit;justify-content:center;align-items:center;display:inline-flex;position:relative}.el-icon.is-loading{animation:2s linear infinite rotating}.el-icon svg{width:1em;height:1em}.el-scrollbar{--el-scrollbar-opacity:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;position:relative;overflow:hidden}.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{cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));width:0;height:0;transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity,.3);display:block;position:relative}.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{z-index:1;border-radius:4px;position:absolute;bottom:2px;right:2px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.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-popper{--el-popper-border-radius:var(--el-popover-border-radius,4px);--el-popper-bg-color-light:var(--el-bg-color-overlay);--el-popper-bg-color-dark:var(--el-text-color-primary);border-radius:var(--el-popper-border-radius);z-index:2000;overflow-wrap:break-word;word-break:normal;visibility:visible;min-width:10px;padding:5px 11px;font-size:12px;line-height:20px;position:absolute}.el-popper.is-dark{--el-fill-color-blank:var(--el-popper-bg-color-dark);color:var(--el-bg-color);background:var(--el-popper-bg-color-dark);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-popper-bg-color-dark);right:0}.el-popper.is-light{--el-fill-color-blank:var(--el-popper-bg-color-light);background:var(--el-popper-bg-color-light);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-popper-bg-color-light);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{z-index:-1;width:10px;height:10px;position:absolute}.el-popper__arrow:before{z-index:-1;content:" ";background:var(--el-text-color-primary);box-sizing:border-box;width:10px;height:10px;position:absolute;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-top-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-right-color:#0000!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-top-color:#0000!important;border-right-color:#0000!important}.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);color:var(--el-checkbox-text-color);font-weight:var(--el-checkbox-font-weight);font-size:var(--el-font-size-base);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;height:var(--el-checkbox-height,32px);align-items:center;margin-right:30px;display:inline-flex;position:relative}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border-radius:var(--el-border-radius-base);border:var(--el-border);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{width:14px;height: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{width:12px;height:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox input:focus-visible+.el-checkbox__inner{outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px;border-radius:var(--el-checkbox-border-radius)}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-flex;position:relative}.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{cursor:not-allowed;border-color:var(--el-checkbox-disabled-icon-color);will-change:transform}.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:translate(-45%,-60%)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{content:"";background-color:var(--el-checkbox-checked-icon-color);height:2px;display:block;position:absolute;top:5px;left:0;right:0;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;width:var(--el-checkbox-input-width);height:var(--el-checkbox-input-height);background-color:var(--el-checkbox-bg-color);z-index:var(--el-index-normal);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);display:inline-block;position:relative}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{box-sizing:content-box;content:"";transform-origin:50%;border:1px solid #0000;border-top:0;border-left:0;width:3px;height:7px;transition:transform .15s ease-in 50ms;position:absolute;top:50%;left:50%;transform:translate(-45%,-60%)rotate(45deg)scaleY(0)}.el-checkbox__original{opacity:0;z-index:-1;outline:none;width:0;height:0;margin:0;position:absolute}.el-checkbox__label{line-height:1;font-size:var(--el-checkbox-font-size);padding-left:8px;display:inline-block}.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{width:14px;height: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{width:12px;height: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{width:2px;height:6px}.el-checkbox:last-of-type{margin-right: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-fill-color-blank);--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-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px #00000026;--el-table-fixed-right-column:inset -10px 0 10px -10px #00000026;--el-table-index:var(--el-index-normal);box-sizing:border-box;background-color:var(--el-table-bg-color);width:100%;max-width:100%;height:-moz-fit-content;height:fit-content;font-size:var(--el-font-size-base);color:var(--el-table-text-color);position:relative;overflow:hidden}.el-table__inner-wrapper{flex-direction:column;height:100%;display:flex;position:relative}.el-table__inner-wrapper:before{height:1px;bottom:0;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell,.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell{border-bottom-color:#0000}.el-table__empty-block{text-align:center;justify-content:center;align-items:center;width:100%;min-height:60px;display:flex;position:sticky;left:0}.el-table__empty-text{width:50%;color:var(--el-text-color-secondary);line-height:60px}.el-table__expand-column .cell{text-align:center;-webkit-user-select:none;user-select:none;padding:0}.el-table__expand-icon{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.el-table__expand-icon{color:var(--el-text-color-regular);width:min(23px,100%);height:23px;font-size:12px;line-height:12px}.el-table__expand-icon.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.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:#0000!important}.el-table__placeholder{width:20px;display:inline-block}.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;text-overflow:ellipsis;vertical-align:middle;text-align:left;min-width:0;z-index:var(--el-table-index);padding:8px 0;position:relative}.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;width:15px;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;text-overflow:ellipsis;white-space:normal;overflow-wrap:break-word;padding:0 12px;line-height:23px;overflow:hidden}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.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 th.el-table__cell.is-leaf,.el-table td.el-table__cell{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{content:"";vertical-align:middle;background:#ff4d51;border-radius:50%;width:8px;height:8px;margin-right:5px;display:inline-block}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border:after,.el-table--border:before,.el-table--border .el-table__inner-wrapper:after,.el-table__inner-wrapper:before{content:"";background-color:var(--el-table-border-color);z-index:calc(var(--el-table-index) + 2);position:absolute}.el-table--border .el-table__inner-wrapper:after{width:100%;height:1px;z-index:calc(var(--el-table-index) + 2);top:0;left:0}.el-table--border:before{width:1px;height:100%;top:-1px;left:0}.el-table--border:after{width:1px;height:100%;top:-1px;right:0}.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__header-wrapper,.el-table__body-wrapper,.el-table__footer-wrapper{width:100%}.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,.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{background:inherit;z-index:calc(var(--el-table-index) + 1);position:sticky!important}.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--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-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-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--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.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--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-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-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--right.is-last-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-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--right.is-last-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-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--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before{content:"";width:10px;box-shadow:none;touch-action:none;pointer-events:none;position:absolute;top:0;bottom:0;overflow:hidden}.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,.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{left:-10px}.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,.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{right:-10px}.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch,.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{z-index:calc(var(--el-table-index) + 1);background:#fff;right:0;position:sticky!important}.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__header,.el-table__body,.el-table__footer{table-layout:fixed;border-collapse:separate}.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__header-wrapper .el-table-column--selection>.cell,.el-table__body-wrapper .el-table-column--selection>.cell{align-items:center;height:23px;display:inline-flex}.el-table__header-wrapper .el-table-column--selection .el-checkbox,.el-table__body-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;position:relative;overflow:hidden}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table .caret-wrapper:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table .caret-wrapper{vertical-align:middle;width:24px;height:14px;overflow:initial;flex-direction:column;align-items:center;display:inline-flex;position:relative}.el-table .sort-caret{border:5px solid #0000;width:0;height:0;position:absolute;left:7px}.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{visibility:hidden;z-index:-1;position:absolute}.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>td.el-table__cell,.el-table__body tr.hover-row.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.el-table__row--striped.current-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{z-index:calc(var(--el-table-index) + 2);position:sticky;top:0}.el-table.el-table--scrollable-y .el-table__body-footer{z-index:calc(var(--el-table-index) + 2);position:sticky;bottom:0}.el-table__column-resize-proxy{border-left:var(--el-table-border);width:0;z-index:calc(var(--el-table-index) + 9);position:absolute;top:0;bottom:0;left:200px}.el-table__column-filter-trigger{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table__column-filter-trigger:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table__column-filter-trigger{display:inline-block}.el-table__column-filter-trigger i{color:var(--el-color-info);vertical-align:middle;font-size:14px}.el-table__border-left-patch{width:1px;height:100%;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;top:0;left:0}.el-table__border-bottom-patch{height:1px;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;left:0}.el-table__border-right-patch{width:1px;height:100%;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;top:0}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s}.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{text-align:center;width:20px;display:inline-block}.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-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);vertical-align:middle;height:24px;font-size:var(--el-tag-font-size);border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size:14px;--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);border-style:solid;border-width:1px;justify-content:center;align-items:center;padding:0 9px;line-height:1;display:inline-flex}.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{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.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{cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size);border-radius:50%;display:flex}.el-tag .el-tag__close{background-color:#0000;border:none;border-radius:50%;outline:none;margin-left:6px;padding:0;overflow:hidden}.el-tag .el-tag__close:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-tag--dark{--el-tag-text-color:var(--el-color-white);--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--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--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--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{--el-icon-size:16px;height:32px;padding:0 11px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{--el-icon-size:12px;height:20px;padding:0 7px}.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-table-column--selection .cell{padding-left:14px;padding-right:14px}.el-table-filter{border:solid 1px var(--el-border-color-lighter);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;background-color:#fff;border-radius:2px}.el-table-filter__list{outline:none;min-width:100px;margin:0;padding:5px 0;list-style:none}.el-table-filter__list-item{cursor:pointer;line-height:36px;font-size:var(--el-font-size-base);outline:none;padding:0 10px}.el-table-filter__list-item:hover,.el-table-filter__list-item:focus{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:#fff}.el-table-filter__multiple{outline:none}.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{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table-filter__bottom button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-filter__bottom button{color:var(--el-text-color-regular);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.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{height:unset;align-items:center;margin-bottom:12px;margin-left:5px;margin-right:5px;display:flex}.el-table-filter__checkbox-group .el-checkbox:last-child{margin-bottom:0} diff --git a/new_web_source/assets/listingFilters-BpGOU_pJ.js b/new_web_source/assets/listingFilters-BpGOU_pJ.js new file mode 100644 index 0000000..c303fe5 --- /dev/null +++ b/new_web_source/assets/listingFilters-BpGOU_pJ.js @@ -0,0 +1 @@ +const e=[{value:"SearchSuppressed",label:"在搜索结果中禁止显示"},{value:"ApprovalRequired",label:"需要批准"},{value:"Active",label:"在售"},{value:"DetailPageRemoved",label:"详情页面已删除"}];export{e as L}; diff --git a/new_web_source/assets/listingFilters-CK58rX4v.css b/new_web_source/assets/listingFilters-CK58rX4v.css new file mode 100644 index 0000000..ee76fbe --- /dev/null +++ b/new_web_source/assets/listingFilters-CK58rX4v.css @@ -0,0 +1 @@ +.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{content:"";background-position:50%;background-repeat:no-repeat;background-color:var(--el-color-primary);-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") 0 0/100% 100% no-repeat;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") 0 0/100% 100% no-repeat;border-top:none;border-right:none;width:12px;height:12px;position:absolute;top:50%;right:20px;transform:translateY(-50%);-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") 0 0/100% 100% no-repeat}.el-select-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__loading,.el-select-dropdown__empty{text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;margin:0;padding:6px 0;list-style:none}.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{font-size:var(--el-font-size-base);white-space:nowrap;text-overflow:ellipsis;color:var(--el-text-color-regular);box-sizing:border-box;cursor:pointer;height:34px;padding:0 32px 0 20px;line-height:34px;position:relative;overflow:hidden}.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:700}.el-select-dropdown__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed;background-color:unset}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{content:"";background-position:50%;background-repeat:no-repeat;background-color:var(--el-color-primary);-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") 0 0/100% 100% no-repeat;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") 0 0/100% 100% no-repeat;border-top:none;border-right:none;width:12px;height:12px;position:absolute;top:50%;right:20px;transform:translateY(-50%);-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") 0 0/100% 100% no-repeat}.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{margin:0;padding:0;list-style:none;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);text-overflow:ellipsis;white-space:nowrap;padding:0 20px;font-size:12px;line-height:34px;overflow:hidden}.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%;vertical-align:middle;width:var(--el-select-width);display:inline-block;position:relative}.el-select__wrapper{box-sizing:border-box;cursor:pointer;text-align:left;border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);min-height:32px;transition:var(--el-transition-duration);box-shadow:0 0 0 1px var(--el-border-color) inset;align-items:center;gap:6px;padding:4px 12px;font-size:14px;line-height:24px;display:flex;position:relative;transform:translate(0)}.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{cursor:not-allowed;background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.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,.el-select__wrapper.is-disabled input{cursor:not-allowed}.el-select__wrapper.is-disabled .el-select__prefix,.el-select__wrapper.is-disabled .el-select__suffix{pointer-events:none}.el-select__prefix,.el-select__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;gap:6px;display:flex}.el-select__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:var(--el-transition-duration);cursor:pointer;transform:rotate(0)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__clear{cursor:pointer}.el-select__clear:hover{color:var(--el-select-close-hover-color)}.el-select__selection{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{cursor:pointer;border-color:#0000}.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{-webkit-user-select:none;user-select:none;flex-wrap:wrap;display:flex}.el-select__tags-text{text-overflow:ellipsis;white-space:nowrap;line-height:normal;display:block;overflow:hidden}.el-select__placeholder{z-index:-1;text-overflow:ellipsis;white-space:nowrap;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;position:absolute;top:50%;overflow:hidden;transform:translateY(-50%)}.el-select__placeholder.is-transparent{-webkit-user-select:none;user-select:none;color:var(--el-text-color-placeholder)}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.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-top-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;z-index:-1;position:absolute}.el-select__input{color:var(--el-select-multiple-input-color);font-size:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;outline:none;width:100%;height:24px;padding:0;font-family:inherit}.el-select__input-calculator{visibility:hidden;white-space:pre;max-width:100%;position:absolute;top:0;left:0;overflow:hidden}.el-select--large .el-select__wrapper{gap:6px;min-height:40px;padding:8px 16px;font-size:14px;line-height:24px}.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{gap:4px;min-height:24px;padding:2px 8px;font-size:12px;line-height:20px}.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} diff --git a/new_web_source/assets/patrol-delete-CSekhzSS.css b/new_web_source/assets/patrol-delete-CSekhzSS.css new file mode 100644 index 0000000..5f53c4b --- /dev/null +++ b/new_web_source/assets/patrol-delete-CSekhzSS.css @@ -0,0 +1 @@ +.module-page[data-v-52605d65]{min-height:100vh;background:#1a1a1a}.main-content[data-v-52605d65]{display:flex;min-height:calc(100vh - 56px);height:calc(100vh - 56px)}.left-panel[data-v-52605d65]{width:400px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-52605d65]{flex:1;display:flex;flex-direction:column;min-width:0;background:#1a1a1a}.section-title[data-v-52605d65]{font-size:13px;color:#bbb;margin-bottom:10px}.input-zone[data-v-52605d65]{border:1px dashed #3a3a3a;border-radius:10px;padding:16px;background:#252525;margin-bottom:20px}.hint[data-v-52605d65]{color:#888;font-size:12px;margin-bottom:12px;line-height:1.5;text-align:left}.input-row[data-v-52605d65]{display:flex;gap:10px;align-items:center}.input-row[data-v-52605d65] .el-input{flex:1}.opt-btn[data-v-52605d65]{padding:8px 12px;font-size:12px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px;cursor:pointer;white-space:nowrap}.opt-btn[data-v-52605d65]:hover:not(:disabled){color:#3498db;border-color:#3498db}.opt-btn[data-v-52605d65]:disabled{opacity:.6;cursor:not-allowed}.empty-candidates[data-v-52605d65]{color:#666;font-size:13px;padding:16px;border:1px dashed #333;border-radius:8px;margin-bottom:16px}.candidate-table-scroll[data-v-52605d65]{max-height:320px;overflow:auto;margin-bottom:18px;border-radius:8px;border:1px solid #2a2a2a}.candidate-table[data-v-52605d65]{--el-table-bg-color: #252525;--el-table-tr-bg-color: #252525;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.link-danger[data-v-52605d65]{background:none;border:none;color:#e74c3c;cursor:pointer;font-size:12px;padding:0}.link-danger[data-v-52605d65]:hover{text-decoration:underline}.run-row[data-v-52605d65]{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}.btn-run[data-v-52605d65]{padding:10px 18px;font-size:14px;font-weight:600;color:#fff;background:#3498db;border:none;border-radius:8px;cursor:pointer}.btn-run[data-v-52605d65]:hover:not(:disabled){background:#2980b9}.btn-run[data-v-52605d65]:disabled{opacity:.55;cursor:not-allowed}.btn-queue[data-v-52605d65]{background:#27ae60}.btn-queue[data-v-52605d65]:hover:not(:disabled){background:#219a52}.loading-msg[data-v-52605d65]{margin-top:12px;font-size:12px;color:#777;line-height:1.5}.queue-debug-card[data-v-52605d65]{margin-top:18px;padding:14px;border:1px solid #2a2a2a;border-radius:10px;background:#202020}.queue-debug-title[data-v-52605d65]{margin-bottom:8px}.queue-debug-line[data-v-52605d65]{color:#b8c1cc;font-size:12px;line-height:1.6;margin-bottom:8px}.queue-debug-payload[data-v-52605d65]{margin:0;max-height:220px;overflow:auto;padding:10px;border-radius:8px;background:#141414;color:#8fd3ff;font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-all}.panel-header[data-v-52605d65]{padding:16px 20px;font-size:15px;font-weight:600;color:#e0e0e0;border-bottom:1px solid #2a2a2a}.task-list-wrap[data-v-52605d65]{flex:1;padding:16px 20px;overflow:auto}.clean-result-summary[data-v-52605d65]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.summary-card[data-v-52605d65]{padding:14px 16px;border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e}.summary-card strong[data-v-52605d65]{display:block;margin-top:8px;font-size:22px;color:#eaf4ff}.summary-label[data-v-52605d65]{font-size:12px;color:#8d8d8d}.subsection-title[data-v-52605d65]{font-size:13px;color:#999;margin:8px 0 10px}.empty-tasks[data-v-52605d65]{color:#666;font-size:13px;padding:16px;text-align:center}.empty-tasks.narrow[data-v-52605d65]{padding:12px 8px}.match-table[data-v-52605d65]{margin-bottom:18px}.match-table[data-v-52605d65] .el-table__body tr:hover>td.el-table__cell,.match-table[data-v-52605d65] .el-table__body tr.hover-row>td.el-table__cell,.match-table[data-v-52605d65] .el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-tr-bg-color, #222)!important}.result-table[data-v-52605d65]{--el-table-bg-color: #222;--el-table-tr-bg-color: #222;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.ok[data-v-52605d65]{color:#27ae60}.fail[data-v-52605d65]{color:#e67e22}.result-list-wrap[data-v-52605d65]{border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e;min-height:220px;margin-top:8px}.result-list-header[data-v-52605d65]{padding:12px 16px;border-bottom:1px solid #2a2a2a;font-size:14px;color:#ddd}.result-subsection[data-v-52605d65]{padding:12px 12px 4px}.result-subsection-title[data-v-52605d65]{font-size:12px;color:#888;margin-bottom:8px}.task-list[data-v-52605d65]{list-style:none;margin:0;padding:0}.task-item[data-v-52605d65]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:8px;background:#222}.left[data-v-52605d65]{flex:1;min-width:0}.split-result-main[data-v-52605d65]{display:flex;flex-direction:column;gap:4px}.id[data-v-52605d65]{font-weight:600;color:#e0e0e0;font-size:13px}.files[data-v-52605d65]{font-size:12px;color:#888}.task-right[data-v-52605d65]{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.status[data-v-52605d65]{padding:4px 10px;border-radius:6px;font-size:12px;white-space:nowrap}.status.success[data-v-52605d65]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-52605d65]{background:#e74c3c2e;color:#ff6b6b}.status.running[data-v-52605d65]{background:#3498db2e;color:#3498db}.archive[data-v-52605d65]{padding:6px 10px;border-radius:6px;font-size:12px;background:#3498db2e;color:#69b6ff;border:none;cursor:pointer}.archive[data-v-52605d65]:hover{background:#3498db47}.btn-delete[data-v-52605d65]{padding:6px 10px;border-radius:6px;font-size:12px;background:#e74c3c1f;color:#ff8f8f;border:none;cursor:pointer}.btn-delete[data-v-52605d65]:hover{background:#e74c3c38}@media(max-width:1100px){.main-content[data-v-52605d65]{flex-direction:column;height:auto}.left-panel[data-v-52605d65]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.clean-result-summary[data-v-52605d65]{grid-template-columns:repeat(2,minmax(0,1fr))}} diff --git a/new_web_source/assets/patrol-delete.js b/new_web_source/assets/patrol-delete.js new file mode 100644 index 0000000..d89b165 --- /dev/null +++ b/new_web_source/assets/patrol-delete.js @@ -0,0 +1 @@ +import{d as Vt,o as Kt,L as zt,a as u,c as i,b as p,B as Jt,e as n,a5 as jt,a6 as Wt,t as l,V as b,W as Xt,X as Yt,f as m,U as Gt,n as Z,x as mt,F as tt,r as yt,g as v,h as O,a_ as Zt,a$ as te,b0 as ee,E as c,b1 as se,b2 as ae,b3 as ne,i as wt,b4 as oe,b5 as le,b6 as re,b7 as ue,b8 as ie,T as U,b9 as ce,_ as de,aE as fe,q as he,s as ve}from"./pywebview-C66x_2Dh.js";import{z as pe}from"./zh-cn-CuE9Zzgz.js";/* empty css *//* empty css */const me={class:"page-shell module-page"},ye={class:"main-content"},we={class:"left-panel"},_e={class:"input-zone"},ge={class:"input-row"},ke=["disabled"],be={key:0,class:"empty-candidates"},Ie={key:1,class:"candidate-table-scroll"},Se=["onClick"],Te={class:"run-row"},Ce=["disabled"],$e=["disabled"],Ee={key:2,class:"queue-debug-card"},De={class:"queue-debug-line"},Ne={key:0,class:"queue-debug-payload"},Pe={class:"right-panel"},Me={class:"task-list-wrap"},Re={class:"clean-result-summary"},Ae={class:"summary-card"},Qe={class:"summary-card"},qe={class:"summary-card"},Le={class:"summary-card"},Be={key:0,class:"empty-tasks narrow"},Fe=["onClick"],Oe={class:"result-list-wrap"},Ue={key:0,class:"empty-tasks"},He={key:0,class:"result-subsection"},xe={class:"task-list"},Ve={class:"left split-result-main"},Ke=["title"],ze={class:"files"},Je={key:0,class:"files"},je={key:1,class:"files"},We={key:2,class:"files"},Xe={class:"files"},Ye={class:"files"},Ge={key:3,class:"files"},Ze={class:"task-right"},ts=["onClick"],es={key:1,class:"result-subsection"},ss={class:"task-list"},as={class:"left split-result-main"},ns=["title"],os={class:"files"},ls={key:0,class:"files"},rs={key:1,class:"files"},us={key:2,class:"files"},is={class:"files"},cs={key:3,class:"files"},ds={class:"files"},fs={key:4,class:"files"},hs={class:"task-right"},vs=["onClick"],ps=["onClick"],_t=30,ms=Vt({__name:"BrandPatrolDeleteTab",setup(ws){const et=["德国","英国","法国","意大利","西班牙"],N=v(""),H=v([]),P=v([]),y=v([]),g=v([]),T=v({candidateCount:0,processedTaskCount:0,successTaskCount:0,failedTaskCount:0}),M=v(!1),R=v(!1),A=v(!1),w=v(""),x=v(""),f=v([]),h=v(null),C=v(null),Q=v(!1),V=v(!1);let I=null;const K=O(()=>y.value.filter(t=>t.matched)),q=O(()=>g.value.filter(t=>!ut(t.taskStatus))),z=O(()=>g.value.filter(t=>ut(t.taskStatus))),$=O(()=>Q.value||!!h.value||f.value.length>0);function J(){return typeof window<"u"&&window.localStorage.getItem("uid")||"0"}function st(){return`patrol-delete:matched:${J()}`}function at(){return`patrol-delete:queue-state:${J()}`}function _(t){return`${(t.shopName||"").trim()}::${t.shopId||""}`}function L(t){return`${t.taskId??0}:${t.resultId??0}`}function nt(t){return new Promise(e=>window.setTimeout(e,t))}function ot(t){const e=t instanceof Error?t.message.toLowerCase():String(t||"").toLowerCase();return e.includes("network error")||e.includes("failed to fetch")||e.includes("timeout")||e.includes("503")||e.includes("502")||e.includes("504")||e.includes("500")||e.includes("load failed")}async function gt(t,e,o=20){let a=0;for(;;)try{return await t()}catch(r){if(!ot(r)||a>=o-1)throw r;a+=1,e?.(a,o),await nt(U())}}function kt(t,e){return`patrol-delete:${t}:${e||"shop"}:${Date.now()}`}function j(t){if(!t)return"-";const e=new Date(t);if(Number.isNaN(e.getTime()))return t;const o=e.getFullYear(),a=String(e.getMonth()+1).padStart(2,"0"),r=String(e.getDate()).padStart(2,"0"),s=String(e.getHours()).padStart(2,"0"),d=String(e.getMinutes()).padStart(2,"0"),k=String(e.getSeconds()).padStart(2,"0");return`${o}-${a}-${r} ${s}:${d}:${k}`}function bt(t){const e=(t||"").trim();return{MATCHED:"已匹配",PENDING:"待匹配",CONFLICT:"需人工确认",INDEX_STALE:"索引过期"}[e]||e||"-"}function It(t){const e=(t.matchMessage||"").trim();return e||(t.matched&&t.matchStatus==="MATCHED"?"索引已命中,可推送到 Python 队列":t.matched?"已命中索引,请结合状态列确认":"未命中或未就绪,请检查店铺名")}function St(){return et.map(t=>({country:t,rows:[{status:"全部",quantity:"",deleteQuantity:"",processStatus:""}]}))}function Tt(){return et.map(t=>({country:t,ratio:""}))}function lt(t){const e=t.countrySections||[],o=t.cartRatios||[],a=Math.max(...e.map(r=>r.rows.length),1);return Array.from({length:a},(r,s)=>({shopName:s===0?t.shopName:"",countries:e.map(d=>{const k=d.rows[s];return{country:d.country,status:k?.status||"",quantity:k?.quantity||"",deleteQuantity:k?.deleteQuantity||"",processStatus:k?.processStatus||""}}),cartRatios:s===0?o.map(d=>({country:d.country,ratio:d.ratio})):[]}))}function rt(t){return`${lt(t).length} 行状态数据,首行含 ${t.cartRatios?.length||0} 个购物车比例列`}function ut(t){return t==="SUCCESS"||t==="FAILED"||t==="COMPLETED"}function it(t){return t==="SUCCESS"||t==="COMPLETED"?"已完成":t==="FAILED"?"失败":"执行中"}function ct(t){return t==="SUCCESS"||t==="COMPLETED"?"success":t==="FAILED"?"failed":"running"}function Ct(t){return!!(t.resultId&&(t.fileReady||t.downloadUrl))}function W(){typeof window>"u"||window.localStorage.setItem(st(),JSON.stringify(y.value))}function $t(){try{const t=typeof window<"u"?window.localStorage.getItem(st()):null;y.value=t?JSON.parse(t):[]}catch{y.value=[]}}function S(){if(typeof window>"u")return;const t={pendingQueue:f.value,activeTaskId:h.value,activeQueueItem:C.value};window.localStorage.setItem(at(),JSON.stringify(t))}function Et(){try{const t=typeof window<"u"?window.localStorage.getItem(at()):null;if(!t)return;const e=JSON.parse(t);f.value=e.pendingQueue||[],h.value=e.activeTaskId??null,C.value=e.activeQueueItem??null}catch{f.value=[],h.value=null,C.value=null}}function B(){h.value=null,C.value=null,S()}function Dt(t){const e=t instanceof Error?t.message:String(t||"");return/记录不存在|任务不存在|不存在|已删除|not\s*found|404/i.test(e)}function dt(t){y.value=y.value.filter(e=>_(e)!==_(t)),W()}function Nt(t){g.value=g.value.filter(e=>!(t.resultId!=null&&e.resultId===t.resultId||t.taskId!=null&&e.taskId===t.taskId))}function ft(t,e){const o=new Map;for(const a of t)o.set(_(a),a);for(const a of e)o.set(_(a),a);return Array.from(o.values())}async function E(){H.value=await Zt()}async function F(){T.value=await te()}async function X(){const t=await ee();g.value=t.items||[]}async function D(){await Promise.all([F(),X()])}function Pt(t){if(!t.length)return;const e=new Map(t.map(a=>[L(a),a])),o=g.value.map(a=>{const r=e.get(L(a));return r?{...a,...r,countrySections:r.countrySections||a.countrySections||[],cartRatios:r.cartRatios||a.cartRatios||[]}:a});for(const a of t){const r=L(a);o.some(s=>L(s)===r)||o.push(a)}g.value=o}async function ht(t){const e=Array.from(new Set((t&&t.length?t:q.value.map(a=>a.taskId??0)).filter(a=>Number.isFinite(a)&&a>0)));if(!e.length)return;const o=await ce(e);Pt(o.items||[]),(o.missingTaskIds||[]).length&&await X()}function Mt(){if(Y(),!$.value)return;const t=async()=>{I=null,$.value&&(await ht(),$.value&&(I=window.setTimeout(t,U()*2)))};I=window.setTimeout(t,U()*2)}function Y(){I&&(window.clearTimeout(I),I=null)}function Rt(t){P.value=t}async function vt(){const t=N.value.trim();if(!t){c.warning("请输入店铺名");return}M.value=!0;try{await se(t),N.value="",await Promise.all([E(),F()]),c.success("已加入备选区")}catch(e){c.error(e instanceof Error?e.message:"添加失败")}finally{M.value=!1}}async function At(t){try{await ae(t),P.value=P.value.filter(e=>e.id!==t),await Promise.all([E(),F()]),c.success("已删除")}catch(e){c.error(e instanceof Error?e.message:"删除失败")}}function Qt(t,e){const o=new Map;for(const a of t)o.set(_(a),a);for(const a of e)o.set(_(a),a);return Array.from(o.values())}async function qt(){const t=P.value.map(e=>e.shop_name).filter(Boolean);if(!t.length){c.warning("请先勾选备选区店铺");return}R.value=!0;try{const e=await ne(t);y.value=Qt(y.value,e.items||[]),W(),V.value&&(f.value=ft(f.value,K.value),S(),G()),c.success(`本次返回 ${e.items?.length||0} 条匹配结果`)}catch(e){c.error(e instanceof Error?e.message:"匹配失败")}finally{R.value=!1}}function Lt(t){if($.value){c.warning("队列执行中,请等待当前串行任务结束后再调整");return}y.value=y.value.filter(e=>_(e)!==_(t)),W()}function Bt(t){return{shopName:t.shopName,matched:t.matched,shopId:t.shopId,platform:t.platform,companyName:t.companyName,matchStatus:t.matchStatus,matchMessage:t.matchMessage,countrySections:St(),cartRatios:Tt()}}function Ft(t,e){return{type:"patrol-delete-run",ts:Date.now(),data:{taskId:t,user_id:Number(J())||0,source:"frontend-vue-patrol-delete",items:[{shopName:e.shopName,shopId:e.shopId,platform:e.platform,companyName:e.companyName,matched:e.matched,matchStatus:e.matchStatus,matchMessage:e.matchMessage}],template_rows:lt(e),country_sections:e.countrySections||[],cart_ratios:e.cartRatios||[]}}}function Ot(t){return g.value.find(e=>e.taskId===t)}async function Ut(t){let e=0;for(;;){try{await ht([t]),e>0&&(w.value=`任务 ${t} 后端已恢复,继续等待执行结果...`),e=0;const a=Ot(t)?.taskStatus||"";if(a==="SUCCESS"||a==="FAILED"||a==="COMPLETED")return a}catch(o){if(!ot(o))throw o;if(e+=1,e>=_t)throw new Error(`任务 ${t} 等待后端恢复超时,请稍后刷新查看状态`);w.value=`任务 ${t} 执行中,正在等待后端服务恢复(${e}/${_t})...`}await nt(U())}}async function G(){if(!Q.value){Q.value=!0,A.value=!0,Mt();try{const t=wt();if(!t?.enqueue_json)throw new Error("当前客户端未提供 enqueue_json");for(;h.value||f.value.length;){if(h.value){const d=await Ut(h.value);w.value=f.value.length>0?`任务 ${h.value} ${d==="SUCCESS"?"已完成":"执行失败"},自动继续下一个(剩余 ${f.value.length} 条)`:`任务 ${h.value} ${d==="SUCCESS"?"已完成":"执行失败"}`,B();continue}const e=f.value.shift();if(S(),!e)break;const o=await gt(()=>oe([Bt(e)]),(d,k)=>{w.value=`后端服务暂时不可用,正在重试创建任务(${d}/${k})...`}),a=o.items?.[0];if(!a?.taskId||!a.resultId)throw new Error("后端未返回有效任务标识");h.value=o.taskId,C.value=e,S(),await D();const r=Ft(o.taskId,a);x.value=JSON.stringify(r,null,2);const s=await t.enqueue_json(r);if(!s?.success){await le(o.taskId,{shops:[{shopName:a.shopName||e.shopName||"",error:s?.error||`任务 ${o.taskId} 推送失败`,countrySections:a.countrySections||[],cartRatios:a.cartRatios||[],shopDone:!0,submissionId:kt(o.taskId,a.shopName||e.shopName),chunkIndex:1,chunkTotal:1}]}),dt(e),await D(),w.value=`任务 ${o.taskId} 推送失败,已自动继续下一个任务`,B();continue}dt(e),w.value=f.value.length>0?`任务 ${o.taskId} 已入队,等待完成后自动继续下一个(剩余 ${f.value.length} 条)`:`任务 ${o.taskId} 已入队,等待执行完成`}w.value="串行队列已执行完成",await D(),c.success("巡店删除队列已按顺序执行完成")}catch(t){const e=t instanceof Error?t.message:"队列执行失败";w.value=e,c.error(e),await D()}finally{Q.value=!1,A.value=!1,Y(),S()}}}async function Ht(){V.value=!0;const t=K.value;if(!t.length){c.warning("请先匹配可用店铺");return}f.value=ft(f.value,t),S(),w.value=`已加入 ${t.length} 条店铺,开始串行执行`,await G()}async function xt(t){if(!t.resultId)return;const e=wt();if(!e?.save_file_from_url_new){c.error("当前客户端未提供下载能力");return}const o=re(t.resultId),a=t.outputFilename||`${t.shopName||"result"}.xlsx`,r=await e.save_file_from_url_new(o,a);r.success?c.success(`已保存: ${r.path||a}`):r.error&&r.error!=="用户取消"&&c.error(r.error)}async function pt(t){try{if(t.taskId)await ue(t.taskId),h.value===t.taskId&&B();else if(t.resultId)await ie(t.resultId);else throw new Error("缺少可删除的任务标识");await Promise.all([E(),D()]),c.success("已删除")}catch(e){if(Dt(e)){t.taskId&&h.value===t.taskId&&B(),Nt(t),await E(),c.success("后端记录已不存在,已同步移除本地记录");return}c.error(e instanceof Error?e.message:"删除失败")}}return Kt(async()=>{$t(),Et(),await Promise.all([E(),F(),X()]),(h.value||f.value.length)&&(V.value=!0,w.value=h.value!=null?`检测到未完成队列,继续等待任务 ${h.value} 完成并自动接续后续店铺`:`检测到未完成队列,继续执行剩余 ${f.value.length} 条店铺`,G())}),zt(()=>{Y()}),(t,e)=>{const o=Wt,a=Xt,r=Yt;return u(),i("div",me,[p(Jt,{active:"patrol-delete"}),n("div",ye,[n("aside",we,[e[3]||(e[3]=n("div",{class:"section-title"},"店铺输入",-1)),n("div",_e,[e[1]||(e[1]=n("div",{class:"hint"}," 左侧负责录入店铺并加入备选区,确认命中后推送到 Python 队列。巡店删除按店铺串行执行:上一个任务完成后会自动开始下一个,失败也会继续下一个。 ",-1)),n("div",ge,[p(o,{modelValue:N.value,"onUpdate:modelValue":e[0]||(e[0]=s=>N.value=s),clearable:"",placeholder:"请输入店铺名后回车或点击添加",onKeyup:jt(vt,["enter"])},null,8,["modelValue"]),n("button",{type:"button",class:"opt-btn",disabled:M.value,onClick:vt},l(M.value?"添加中...":"添加"),9,ke)])]),e[4]||(e[4]=n("div",{class:"section-title"},"备选区",-1)),H.value.length?(u(),i("div",Ie,[p(r,{data:H.value,"row-key":"id",height:"260",class:"candidate-table",onSelectionChange:Rt},{default:b(()=>[p(a,{type:"selection",width:"42"}),p(a,{prop:"shop_name",label:"店铺名","min-width":"140","show-overflow-tooltip":""}),p(a,{label:"操作",width:"72",align:"center"},{default:b(({row:s})=>[n("button",{type:"button",class:"link-danger",onClick:d=>At(s.id)}," 删除 ",8,Se)]),_:1})]),_:1},8,["data"])])):(u(),i("div",be," 暂无备选店铺,请先输入并添加 ")),n("div",Te,[n("button",{type:"button",class:"btn-run",disabled:R.value||$.value,onClick:qt},l(R.value?"匹配中...":"匹配店铺"),9,Ce),n("button",{type:"button",class:"btn-run btn-queue",disabled:A.value||!K.value.length,onClick:Ht},l(A.value?"串行执行中...":"推送到 Python 队列"),9,$e)]),e[5]||(e[5]=n("p",{class:"loading-msg"}," 当前页面会按店铺串行推送任务,并在任务成功或失败后自动接续下一个任务。服务端临时重启时会自动重试查询状态,恢复后继续后续店铺。 ",-1)),w.value?(u(),i("div",Ee,[e[2]||(e[2]=n("div",{class:"section-title queue-debug-title"},"队列状态",-1)),n("div",De,l(w.value),1),x.value?(u(),i("pre",Ne,l(x.value),1)):m("",!0)])):m("",!0)]),n("section",Pe,[e[14]||(e[14]=n("div",{class:"panel-header"},"匹配与任务",-1)),n("div",Me,[n("div",Re,[n("div",Ae,[e[6]||(e[6]=n("span",{class:"summary-label"},"备选店铺",-1)),n("strong",null,l(T.value.candidateCount),1)]),n("div",Qe,[e[7]||(e[7]=n("span",{class:"summary-label"},"已处理任务",-1)),n("strong",null,l(T.value.processedTaskCount),1)]),n("div",qe,[e[8]||(e[8]=n("span",{class:"summary-label"},"成功任务",-1)),n("strong",null,l(T.value.successTaskCount),1)]),n("div",Le,[e[9]||(e[9]=n("span",{class:"summary-label"},"失败任务",-1)),n("strong",null,l(T.value.failedTaskCount),1)])]),e[13]||(e[13]=n("div",{class:"subsection-title"},"匹配结果",-1)),y.value.length?(u(),Gt(r,{key:1,data:y.value,"row-key":_,"highlight-current-row":!1,class:"result-table match-table"},{default:b(()=>[p(a,{prop:"shopName",label:"店铺名","min-width":"120"}),p(a,{label:"匹配",width:"72",align:"center"},{default:b(({row:s})=>[n("span",{class:Z(s.matched?"ok":"fail")},l(s.matched?"是":"否"),3)]),_:1}),p(a,{prop:"shopId",label:"店铺 ID","min-width":"120","show-overflow-tooltip":""}),p(a,{prop:"platform",label:"平台",width:"88","show-overflow-tooltip":""}),p(a,{prop:"companyName",label:"公司","min-width":"120","show-overflow-tooltip":""}),p(a,{label:"状态",width:"110","show-overflow-tooltip":""},{default:b(({row:s})=>[mt(l(bt(s.matchStatus)),1)]),_:1}),p(a,{label:"说明","min-width":"180","show-overflow-tooltip":""},{default:b(({row:s})=>[mt(l(It(s)),1)]),_:1}),p(a,{label:"操作",width:"72",align:"center"},{default:b(({row:s})=>[n("button",{type:"button",class:"link-danger",onClick:d=>Lt(s)}," 删除 ",8,Fe)]),_:1})]),_:1},8,["data"])):(u(),i("div",Be," 完成“匹配店铺”后,这里会展示匹配结果。 ")),n("div",Oe,[e[12]||(e[12]=n("div",{class:"result-list-header"},[n("span",null,"任务记录")],-1)),!q.value.length&&!z.value.length?(u(),i("div",Ue," 暂无任务记录。推送到 Python 队列后,这里会展示当前任务和历史任务。 ")):(u(),i(tt,{key:1},[q.value.length?(u(),i("div",He,[e[10]||(e[10]=n("div",{class:"result-subsection-title"},"当前任务",-1)),n("ul",xe,[(u(!0),i(tt,null,yt(q.value,s=>(u(),i("li",{key:`${s.resultId}-${s.taskId}`,class:"task-item"},[n("div",Ve,[n("span",{class:"id",title:s.shopName||""},l(s.shopName||"-"),9,Ke),n("div",ze,"任务 ID: "+l(s.taskId??"-"),1),s.resultId?(u(),i("div",Je," 结果 ID: "+l(s.resultId),1)):m("",!0),s.shopId?(u(),i("div",je," 店铺 ID: "+l(s.shopId),1)):m("",!0),s.platform?(u(),i("div",We," 平台: "+l(s.platform),1)):m("",!0),n("div",Xe," 创建时间: "+l(j(s.createdAt)),1),n("div",Ye," 模板结构: "+l(rt(s)),1),s.error?(u(),i("div",Ge," 错误: "+l(s.error),1)):m("",!0)]),n("div",Ze,[n("span",{class:Z(["status",ct(s.taskStatus)])},l(it(s.taskStatus)),3),n("button",{type:"button",class:"btn-delete",onClick:d=>pt(s)}," 删除 ",8,ts)])]))),128))])])):m("",!0),z.value.length?(u(),i("div",es,[e[11]||(e[11]=n("div",{class:"result-subsection-title"},"历史任务",-1)),n("ul",ss,[(u(!0),i(tt,null,yt(z.value,s=>(u(),i("li",{key:`${s.resultId}-${s.taskId}`,class:"task-item"},[n("div",as,[n("span",{class:"id",title:s.shopName||""},l(s.shopName||"-"),9,ns),n("div",os,"任务 ID: "+l(s.taskId??"-"),1),s.resultId?(u(),i("div",ls," 结果 ID: "+l(s.resultId),1)):m("",!0),s.shopId?(u(),i("div",rs," 店铺 ID: "+l(s.shopId),1)):m("",!0),s.platform?(u(),i("div",us," 平台: "+l(s.platform),1)):m("",!0),n("div",is," 创建时间: "+l(j(s.createdAt)),1),s.finishedAt?(u(),i("div",cs," 完成时间: "+l(j(s.finishedAt)),1)):m("",!0),n("div",ds," 模板结构: "+l(rt(s)),1),s.error?(u(),i("div",fs," 错误: "+l(s.error),1)):m("",!0)]),n("div",hs,[n("span",{class:Z(["status",ct(s.taskStatus)])},l(it(s.taskStatus)),3),Ct(s)?(u(),i("button",{key:0,type:"button",class:"archive",onClick:d=>xt(s)}," 下载结果 ",8,vs)):m("",!0),n("button",{type:"button",class:"btn-delete",onClick:d=>pt(s)}," 删除 ",8,ps)])]))),128))])])):m("",!0)],64))])])])])])}}}),ys=de(ms,[["__scopeId","data-v-52605d65"]]);fe.locale("zh-cn");he(ys).use(ve,{locale:pe}).mount("#app"); diff --git a/new_web_source/assets/price-track-z8RU_FlW.css b/new_web_source/assets/price-track-z8RU_FlW.css new file mode 100644 index 0000000..5d21dec --- /dev/null +++ b/new_web_source/assets/price-track-z8RU_FlW.css @@ -0,0 +1 @@ +.el-input-number{vertical-align:middle;width:150px;line-height:30px;display:inline-flex;position:relative}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.el-input-number .el-input__inner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__increase,.el-input-number__decrease{z-index:1;background:var(--el-fill-color-light);width:32px;height:auto;color:var(--el-text-color-regular);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;font-size:13px;display:flex;position:absolute;top:1px;bottom:1px}.el-input-number__increase:hover,.el-input-number__decrease:hover{color:var(--el-color-primary)}.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__decrease: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__increase.is-disabled,.el-input-number__decrease.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;border-left:var(--el-border);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__increase,.el-input-number.is-disabled .el-input-number__decrease{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__increase:hover,.el-input-number.is-disabled .el-input-number__decrease:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{width:180px;line-height:38px}.el-input-number--large .el-input-number__increase,.el-input-number--large .el-input-number__decrease{width:40px;font-size:14px}.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{width:120px;line-height:22px}.el-input-number--small .el-input-number__increase,.el-input-number--small .el-input-number__decrease{width:24px;font-size:12px}.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__increase [class*=el-icon],.el-input-number--small .el-input-number__decrease [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__increase,.el-input-number.is-controls-right .el-input-number__decrease{--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__increase [class*=el-icon],.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 var(--el-border-radius-base) 0 0;border-bottom:var(--el-border);bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-right:none;border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;top:auto;left:auto;right:1px}.el-input-number.is-controls-right[class*=large] [class*=increase],.el-input-number.is-controls-right[class*=large] [class*=decrease]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=increase],.el-input-number.is-controls-right[class*=small] [class*=decrease]{--el-input-number-controls-height:11px}.module-page[data-v-7b4e9859]{min-height:100vh;background:#1a1a1a}.main-content[data-v-7b4e9859]{display:flex;min-height:calc(100vh - 56px);height:calc(100vh - 56px)}.left-panel[data-v-7b4e9859]{width:400px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-7b4e9859]{flex:1;display:flex;flex-direction:column;min-width:0;background:#1a1a1a}.section-title[data-v-7b4e9859]{font-size:13px;color:#bbb;margin-bottom:10px}.upload-zone[data-v-7b4e9859]{border:1px dashed #3a3a3a;border-radius:10px;padding:16px;background:#252525;margin-bottom:20px}.hint[data-v-7b4e9859]{color:#888;font-size:12px;margin-bottom:12px;line-height:1.5;text-align:left}.btns[data-v-7b4e9859]{display:flex;gap:10px;margin-bottom:10px}.selected-files[data-v-7b4e9859]{margin-top:8px;font-size:12px;display:flex;flex-direction:column;gap:4px}.clean-placeholder[data-v-7b4e9859]{color:#666;font-size:12px;display:flex;flex-direction:column;gap:4px}.selected-files span[data-v-7b4e9859]:not(.more-line){color:#aaa}.more-line[data-v-7b4e9859],.text-muted[data-v-7b4e9859]{color:#777;font-style:italic}.mode-zone[data-v-7b4e9859]{border:1px dashed #3a3a3a;border-radius:10px;padding:14px 16px;background:#252525;margin-bottom:20px;display:flex;flex-direction:column;gap:10px}.mode-check-row[data-v-7b4e9859]{display:flex;align-items:flex-start;gap:10px;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:13px}.mode-check-input[data-v-7b4e9859]{width:18px;height:18px;accent-color:#409eff;cursor:pointer;flex-shrink:0;margin-top:2px}.mode-check-text[data-v-7b4e9859]{color:#ddd;font-weight:600}.mode-hint-inline[data-v-7b4e9859]{color:#888;font-size:12px}.loop-round-input[data-v-7b4e9859]{display:flex;align-items:center;gap:10px;margin-top:4px}.loop-round-input[data-v-7b4e9859] .el-input-number{width:160px}.loop-round-input[data-v-7b4e9859] .el-input__wrapper{background-color:#2a2a2a;box-shadow:0 0 0 1px #3a3a3a inset}.tag-badge[data-v-7b4e9859]{display:inline-block;padding:2px 8px;border-radius:4px;font-size:11px;font-weight:500;margin-left:6px;vertical-align:middle;background:#3498db33;color:#69b6ff}.mode-status-bar[data-v-7b4e9859]{display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:8px;background:#2ecc7114;border:1px solid rgba(46,204,113,.2);margin-bottom:14px}.mode-status-dot[data-v-7b4e9859]{width:8px;height:8px;border-radius:50%;flex-shrink:0}.mode-status-dot.active[data-v-7b4e9859]{background:#27ae60;box-shadow:0 0 6px #2ecc7180}.mode-status-text[data-v-7b4e9859]{font-size:12px;color:#aaa}.input-zone[data-v-7b4e9859]{border:1px dashed #3a3a3a;border-radius:10px;padding:16px;background:#252525;margin-bottom:20px}.input-row[data-v-7b4e9859]{display:flex;gap:10px;align-items:center}.input-row[data-v-7b4e9859] .el-input{flex:1}.opt-btn[data-v-7b4e9859]{padding:8px 14px;font-size:13px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px;cursor:pointer;white-space:nowrap}.opt-btn[data-v-7b4e9859]:hover:not(:disabled){color:#3498db;border-color:#3498db}.opt-btn[data-v-7b4e9859]:disabled{opacity:.6;cursor:not-allowed}.country-pref-hint[data-v-7b4e9859]{margin-top:-4px}.country-pref-checks[data-v-7b4e9859]{display:flex;flex-wrap:wrap;gap:10px 16px;margin-bottom:12px}.country-check-row[data-v-7b4e9859]{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px;color:#ccc}.country-check-input[data-v-7b4e9859]{width:16px;height:16px;accent-color:#409eff;cursor:pointer;flex-shrink:0}.country-check-text[data-v-7b4e9859]{line-height:1.3}.country-order-panel[data-v-7b4e9859]{border:1px solid #333;border-radius:8px;padding:10px 12px;background:#252525;margin-bottom:14px}.country-order-caption[data-v-7b4e9859]{font-size:11px;color:#777;margin-bottom:8px}.country-order-list[data-v-7b4e9859]{display:flex;flex-direction:column;gap:6px}.country-drag-row[data-v-7b4e9859]{display:flex;align-items:center;gap:10px;padding:8px 10px;background:#2c2c2c;border-radius:6px;border:1px solid #3a3a3a;cursor:grab;-webkit-user-select:none;user-select:none}.country-drag-row.dragging[data-v-7b4e9859]{opacity:.55;border-color:#3498db}.drag-handle[data-v-7b4e9859]{color:#666;font-size:12px;letter-spacing:-2px}.country-drag-label[data-v-7b4e9859]{font-size:12px;color:#ccc}.country-pref-status[data-v-7b4e9859]{font-size:11px;color:#888;margin-bottom:10px}.listing-filter-hint[data-v-7b4e9859]{margin-top:-4px}.listing-filter-row[data-v-7b4e9859]{margin-bottom:16px}.listing-filter-select[data-v-7b4e9859]{width:100%}.listing-filter-row[data-v-7b4e9859] .el-select__wrapper{background-color:#2a2a2a;box-shadow:0 0 0 1px #3a3a3a inset}.listing-filter-row[data-v-7b4e9859] .el-select__placeholder,.listing-filter-row[data-v-7b4e9859] .el-select__selected-item{color:#ccc}.empty-candidates[data-v-7b4e9859]{color:#666;font-size:13px;padding:16px;border:1px dashed #333;border-radius:8px;margin-bottom:16px}.candidate-table-scroll[data-v-7b4e9859]{max-height:240px;overflow:auto;margin-bottom:16px;border-radius:8px;border:1px solid #2a2a2a}.candidate-table[data-v-7b4e9859]{--el-table-bg-color: #252525;--el-table-tr-bg-color: #252525;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.link-danger[data-v-7b4e9859]{background:none;border:none;color:#e74c3c;cursor:pointer;font-size:12px;padding:0}.link-danger[data-v-7b4e9859]:hover{text-decoration:underline}.run-row[data-v-7b4e9859]{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}.btn-run[data-v-7b4e9859]{padding:10px 18px;font-size:14px;font-weight:600;color:#fff;background:#3498db;border:none;border-radius:8px;cursor:pointer}.btn-run[data-v-7b4e9859]:hover:not(:disabled){background:#2980b9}.btn-run[data-v-7b4e9859]:disabled{opacity:.55;cursor:not-allowed}.btn-queue[data-v-7b4e9859]{background:#27ae60}.btn-queue[data-v-7b4e9859]:hover:not(:disabled){background:#219a52}.loading-msg[data-v-7b4e9859]{margin-top:12px;font-size:12px;color:#777;line-height:1.5}.loop-status-card[data-v-7b4e9859]{margin-top:14px;padding:12px 14px;border-radius:10px;border:1px solid #2f3d2f;background:#27ae6014}.loop-status-line[data-v-7b4e9859]{font-size:12px;color:#d6e6d8;line-height:1.6}.loop-error[data-v-7b4e9859]{color:#ff8a80}.loop-stop-btn[data-v-7b4e9859]{margin-top:10px}.loading-msg code[data-v-7b4e9859]{font-size:11px;color:#8fd3ff}.queue-debug-card[data-v-7b4e9859]{margin-top:18px;padding:14px;border:1px solid #2a2a2a;border-radius:10px;background:#202020}.queue-debug-title[data-v-7b4e9859]{margin-bottom:8px}.queue-debug-line[data-v-7b4e9859]{color:#b8c1cc;font-size:12px;line-height:1.6;margin-bottom:8px}.queue-debug-payload[data-v-7b4e9859]{margin:0;max-height:220px;overflow:auto;padding:10px;border-radius:8px;background:#141414;color:#8fd3ff;font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-all}.panel-header[data-v-7b4e9859]{padding:16px 20px;font-size:15px;font-weight:600;color:#e0e0e0;border-bottom:1px solid #2a2a2a}.task-list-wrap[data-v-7b4e9859]{flex:1;padding:16px 20px;overflow:auto}.pr-summary[data-v-7b4e9859]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.summary-card[data-v-7b4e9859]{padding:14px 16px;border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e}.summary-card strong[data-v-7b4e9859]{display:block;margin-top:8px;font-size:22px;color:#eaf4ff}.summary-label[data-v-7b4e9859]{font-size:12px;color:#8d8d8d}.subsection-title[data-v-7b4e9859]{font-size:13px;color:#999;margin:8px 0 10px}.empty-tasks[data-v-7b4e9859]{color:#666;font-size:13px;padding:16px;text-align:center}.empty-tasks.narrow[data-v-7b4e9859]{padding:12px 8px}.match-table[data-v-7b4e9859]{margin-bottom:18px}.result-table[data-v-7b4e9859]{--el-table-bg-color: #222;--el-table-tr-bg-color: #222;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.ok[data-v-7b4e9859]{color:#27ae60}.fail[data-v-7b4e9859]{color:#e67e22}.result-list-wrap[data-v-7b4e9859]{border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e;min-height:200px;margin-top:8px}.result-list-header[data-v-7b4e9859]{padding:12px 16px;border-bottom:1px solid #2a2a2a;font-size:14px;color:#ddd}.result-subsection[data-v-7b4e9859]{padding:12px 12px 4px}.result-subsection-title[data-v-7b4e9859]{font-size:12px;color:#888;margin-bottom:8px}.task-list[data-v-7b4e9859]{list-style:none;margin:0;padding:0}.task-item[data-v-7b4e9859]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:8px;background:#222}.split-result-main[data-v-7b4e9859]{display:flex;flex-direction:column;gap:4px}.id[data-v-7b4e9859]{font-weight:600;color:#e0e0e0;font-size:13px}.files[data-v-7b4e9859]{font-size:12px;color:#888}.task-right[data-v-7b4e9859]{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.status[data-v-7b4e9859]{padding:4px 10px;border-radius:6px;font-size:12px;white-space:nowrap}.status.success[data-v-7b4e9859]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-7b4e9859]{background:#e74c3c2e;color:#ff6b6b}.status.running[data-v-7b4e9859]{background:#3498db2e;color:#3498db}.download[data-v-7b4e9859]{padding:6px 10px;border-radius:6px;font-size:12px;background:#3498db2e;color:#69b6ff;border:none;cursor:pointer}.download[data-v-7b4e9859]:hover{background:#3498db47}.btn-delete[data-v-7b4e9859]{padding:6px 10px;border-radius:6px;font-size:12px;background:#e74c3c1f;color:#ff8f8f;border:none;cursor:pointer}.btn-delete[data-v-7b4e9859]:hover{background:#e74c3c38}@media(max-width:1100px){.main-content[data-v-7b4e9859]{flex-direction:column;height:auto}.left-panel[data-v-7b4e9859]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.pr-summary[data-v-7b4e9859]{grid-template-columns:repeat(2,minmax(0,1fr))}} diff --git a/new_web_source/assets/price-track.js b/new_web_source/assets/price-track.js new file mode 100644 index 0000000..f8e4fbe --- /dev/null +++ b/new_web_source/assets/price-track.js @@ -0,0 +1 @@ +import{d as Qt,o as Xt,L as Yt,a as i,c,b as C,B as Zt,e as n,w as ut,u as it,aF as es,f as y,F as M,x as ce,r as de,t as v,a5 as ts,a6 as ss,V as W,W as as,X as ns,a7 as ct,n as we,U as os,g as f,h as B,i as Y,E as r,aG as ls,aH as rs,aI as us,aJ as is,aK as cs,aL as ds,aM as vs,aN as fs,aO as ps,aP as dt,aQ as ms,aR as hs,aS as ys,aT as ws,aU as ks,T as gs,aV as _s,aW as Is,aX as bs,aY as vt,_ as Ss,q as Cs,s as Ts}from"./pywebview-C66x_2Dh.js";/* empty css *//* empty css */import{e as Ns}from"./brand-BZije8D7.js";const Es={class:"page-shell module-page"},Ps={class:"main-content"},As={class:"left-panel"},Rs={class:"mode-zone"},xs={class:"mode-check-row"},Ls=["checked"],Ms={class:"mode-check-row"},Ds=["checked"],$s={class:"mode-zone"},Fs={class:"mode-check-row"},Us={class:"mode-check-row"},Bs={key:0,class:"loop-round-input"},Os={class:"upload-zone"},qs={class:"selected-files clean-placeholder"},js={key:1,class:"text-muted"},Js={class:"input-zone"},Ks={class:"input-row"},Vs=["disabled"],Ws={key:0,class:"empty-candidates"},Hs={key:1,class:"candidate-table-scroll"},Gs=["onClick"],zs={class:"country-pref-checks"},Qs=["checked","disabled","onChange"],Xs={class:"country-check-text"},Ys={key:0,class:"country-order-panel"},Zs={class:"country-order-list"},ea=["onDragstart","onDrop"],ta={class:"country-drag-label"},sa={key:1,class:"country-pref-status"},aa={key:3,class:"mode-status-bar"},na={class:"run-row"},oa=["disabled"],la=["disabled"],ra={key:4,class:"loop-status-card"},ua={class:"loop-status-line"},ia={class:"loop-status-line"},ca={class:"loop-status-line"},da={class:"loop-status-line"},va={key:0,class:"loop-status-line loop-error"},fa=["disabled"],pa={key:5,class:"queue-debug-card"},ma={class:"queue-debug-line"},ha={key:0,class:"queue-debug-payload"},ya={class:"right-panel"},wa={class:"task-list-wrap"},ka={class:"clean-result-summary pr-summary"},ga={class:"summary-card"},_a={class:"summary-card"},Ia={class:"summary-card"},ba={class:"summary-card"},Sa={key:0,class:"empty-tasks narrow"},Ca=["onClick"],Ta={class:"result-list-wrap"},Na={key:0,class:"empty-tasks"},Ea={key:0,class:"result-subsection"},Pa={class:"task-list clean-result-list"},Aa={class:"left split-result-main"},Ra={key:0,class:"files"},xa=["title"],La={class:"files"},Ma={key:1,class:"files"},Da={key:2,class:"files"},$a={class:"task-right split-result-actions"},Fa=["onClick"],Ua=["onClick"],Ba={key:1,class:"result-subsection"},Oa={class:"task-list clean-result-list"},qa={class:"left split-result-main"},ja={key:0,class:"files"},Ja=["title"],Ka={class:"files"},Va={key:1,class:"files"},Wa={key:2,class:"files"},Ha={class:"task-right split-result-actions"},Ga=["onClick"],za=["onClick"],Qa=Qt({__name:"BrandPriceTrackTab",setup(Ya){const ke=[{code:"DE",label:"德国"},{code:"UK",label:"英国"},{code:"FR",label:"法国"},{code:"IT",label:"意大利"},{code:"ES",label:"西班牙"}],Z=f(""),ge=f([]),Be=f([]),b=f([]),ve=f(!1),fe=f(!1),O=f(!1),_e=f(!1),Oe=f(!1),p=f(""),H=f(""),Ie=f({}),q=f("FINITE"),pe=f(1),m=f(null),w=f(null),be=f(!1),ee=f(!1),P=f(!0),S=f(!1),A=f([]),te=f([]),Se=B(()=>P.value||S.value),ft=B(()=>{const e=w.value?.status||"";return e==="SUCCESS"||e==="FAILED"||e==="STOPPED"}),Ce=B(()=>!!m.value&&!ft.value),pt=B(()=>{const e=w.value;if(!e)return"";const t=e.currentRound||1;if(e.executionMode==="INFINITE")return`第 ${t} 轮(无限)`;const s=Math.max(1,e.targetRounds||pe.value||1);return`第 ${t}/${s} 轮`}),k=f(["DE","UK","FR","IT","ES"]),se=f(null),Te=f(!1),qe=f(!1);let G=null;const ae=f({candidateCount:0,processedTaskCount:0,successTaskCount:0,failedTaskCount:0}),j=f([]),g=f([]),N=f({}),_=f({}),R=f(null),Ne=f(!1);function ne(){return typeof window<"u"&&window.localStorage.getItem("uid")||"0"}function je(){return`price-track:tasks:${ne()}`}function Je(){return`price-track:task-status:${ne()}`}function Ke(){return`price-track:tasks-batch-snapshot:${ne()}`}function Ve(){return`price-track:matched-items:${ne()}`}function We(){return`price-track:active-loop:${ne()}`}function oe(e,t,s){if(!(typeof window>"u"))try{s?window.localStorage.removeItem(e):window.localStorage.setItem(e,JSON.stringify(t))}catch{}}function mt(){try{const e=typeof window<"u"?window.localStorage.getItem(je()):null;if(!e){g.value=[];return}const t=JSON.parse(e);g.value=Array.isArray(t)?t.filter(s=>typeof s=="number"&&s>0):[]}catch{g.value=[]}}function He(){oe(je(),g.value,g.value.length===0)}function ht(){try{const e=typeof window<"u"?window.localStorage.getItem(Je()):null;if(!e)return;const t=JSON.parse(e),s={};for(const[l,o]of Object.entries(t)){const u=Number(l);u>0&&typeof o=="string"&&(s[u]=o)}N.value=s}catch{}}function le(){oe(Je(),N.value,Object.keys(N.value).length===0)}function yt(){try{const e=typeof window<"u"?window.localStorage.getItem(Ke()):null;if(!e)return;const t=JSON.parse(e),s={};for(const[l,o]of Object.entries(t)){const u=Number(l);u>0&&o&&typeof o=="object"&&(s[u]=o)}_.value=s}catch{}}function re(){oe(Ke(),_.value,Object.keys(_.value).length===0)}function wt(){try{const e=typeof window<"u"?window.localStorage.getItem(Ve()):null;if(!e)return;const t=JSON.parse(e);Array.isArray(t)&&(b.value=t)}catch{}}function me(){oe(Ve(),b.value,b.value.length===0)}function kt(){try{const e=typeof window<"u"?window.localStorage.getItem(We()):null;if(!e){m.value=null;return}const t=Number(JSON.parse(e));m.value=Number.isFinite(t)&&t>0?t:null}catch{m.value=null}}function z(){oe(We(),m.value,!m.value)}async function gt(){const e=Y();if(e?.select_files){const t=await e.select_files({filters:[{name:"Excel/CSV",extensions:"xlsx,xls,csv"}],multiple:!0});t?.paths?.length&&(A.value=t.paths,te.value=await Ee(t.paths),r.success(`已选择 ${t.paths.length} 个ASIN文件`));return}if(e?.select_brand_xlsx_files){const t=await e.select_brand_xlsx_files();if(!t?.length)return;A.value=t,te.value=await Ee(t),r.success(`已选择 ${t.length} 个ASIN文件`);return}r.warning("当前环境不支持文件选择,请在本地客户端中打开")}async function _t(){const e=Y();if(!e?.select_brand_folder){r.warning("当前环境不支持文件夹选择,请在本地客户端中打开");return}try{const t=await e.select_brand_folder();if(!t)return;const s=await Ns(t);if(!s.success||!s.items?.length){r.warning(s.error||"该文件夹下没有可用的 xlsx 文件");return}A.value=s.items.map(l=>l.relativePath||l.absolutePath),te.value=await Ee(s.items),r.success(`已选择文件夹内 ${s.items.length} 个ASIN文件`)}catch(t){r.error(t instanceof Error?t.message:"选择失败")}}async function Ee(e){const t=Y();if(!t?.upload_file_to_java)return[];const s=[];for(const l of e){const o=typeof l=="string"?l:l.absolutePath,u=typeof l=="string"?void 0:l.relativePath,a=await t.upload_file_to_java(o,u);if(!a?.success||!a.data)throw new Error(a?.error||a?.message||`上传失败:${o}`);s.push(a.data)}return s}function Pe(){return te.value.length?te.value.map(e=>e.localPath).filter(e=>!!e):A.value}function he(){return S.value?ke.map(e=>e.code):[...k.value]}function Ae(e){P.value=e==="status",S.value=e==="asin"}function Ge(e){return ke.find(s=>s.code===e)?.label??e}const It=B(()=>{const e=k.value,t=new Set(e),s=e.map(o=>({code:o,label:Ge(o)})),l=ke.filter(o=>!t.has(o.code)).map(o=>({code:o.code,label:o.label}));return[...s,...l]});function bt(e){return k.value.includes(e)}function ze(e){return k.value.length===1&&k.value[0]===e}function St(e,t){const s=t.target;if(s){if(!s.checked&&ze(e)){s.checked=!0,r.warning("至少保留 1 个国家");return}Ct(e,s.checked)}}function Ct(e,t){if(qe.value=!0,t)k.value.includes(e)||(k.value=[...k.value,e]);else{if(k.value.length<=1){r.warning("至少保留 1 个国家");return}k.value=k.value.filter(s=>s!==e)}Qe()}function Tt(e){se.value=e}function Nt(){se.value=null}function Et(e){const t=se.value;if(se.value=null,t==null||t===e)return;qe.value=!0;const s=[...k.value],[l]=s.splice(t,1);s.splice(e,0,l),k.value=s,Qe()}function Qe(){G&&clearTimeout(G),G=setTimeout(()=>{G=null,Pt()},450)}async function Pt(){if(!(k.value.length<1)){Te.value=!0;try{await ls(k.value)}catch(e){r.error(e instanceof Error?e.message:"保存国家顺序失败")}finally{Te.value=!1}}}async function At(){try{const e=await rs();e?.countryCodes?.length&&(k.value=[...e.countryCodes])}catch{}}async function Re(){try{ge.value=await us()}catch(e){r.error(e instanceof Error?e.message:"加载备选失败")}}async function x(){try{ae.value=await is()}catch{}}async function D(){try{const e=await cs();j.value=e.items||[]}catch{j.value=[]}}function $(){for(const e of[...g.value])!j.value.some(s=>s.taskId===e)&&!_.value[e]&&K(e)}function Rt(e){Be.value=e||[]}async function Xe(){const e=Z.value.trim();if(!e){r.warning("请输入店铺名称");return}ve.value=!0;try{await ds(e),Z.value="",await Re(),r.success("已加入备选")}catch(t){r.error(t instanceof Error?t.message:"保存失败")}finally{ve.value=!1}}async function xt(e){try{await vs(e.id),await Re(),b.value=[],me(),r.success("已删除")}catch(t){r.error(t instanceof Error?t.message:"删除失败")}}function Lt(){const e=new Set,t=Z.value.trim();t&&e.add(t);for(const s of Be.value)s?.shopName?.trim()&&e.add(s.shopName.trim());if(S.value)for(const s of A.value){const l=(s||"").trim();if(!l)continue;const u=(l.split(/[/\\]/).filter(Boolean).pop()||"").replace(/\.[^.]+$/,"").trim();u&&e.add(u)}return[...e]}async function Mt(){const e=Lt();if(!e.length){r.warning("请勾选备选店铺,或在输入框中填写店名");return}if(S.value&&!A.value.length){r.warning("请先选择 ASIN 文件");return}fe.value=!0;try{const t=await fs(e,{asinFiles:S.value?Pe():[],countryCodes:he()}),s=t.items||[];Ie.value=t.asinRowsByCountry||{};const l=new Map(b.value.map(o=>[(o.shopName||"").trim(),o]));for(const o of s)l.set((o.shopName||"").trim(),o);b.value=[...l.values()],me(),Oe.value&&qt(),r.success(`匹配 ${s.length} 个店铺`)}catch(t){r.error(t instanceof Error?t.message:"匹配失败")}finally{fe.value=!1}}function Dt(e){const t=(e||"").trim();return{MATCHED:"已匹配",PENDING:"待匹配",CONFLICT:"需人工确认",INDEX_STALE:"索引过期"}[t]||t||"—"}function $t(e){const t=(e.matchMessage||"").trim();return t||(e.matched&&e.matchStatus==="MATCHED"?"紫鸟索引已命中,可推送队列":e.matched?"已关联索引,请结合状态列查看是否可推送":"未命中或未就绪,请检查店铺名与索引刷新")}function xe(e){return`${(e.shopName||"").trim()}${e.shopId??""}`}function Ye(e){const t=e instanceof Error?e.message:String(e||"");return/记录不存在|不存在|已删除|not\s*found|404/i.test(t)}function Ft(){const e=P.value&&!S.value;return{enabled:e,mode:e?"DELETE_WHEN_PRICE_BELOW_MINIMUM":"NONE",deleteWhenPriceBelowMinimum:e,compareField:"price",thresholdField:"minimumPrice",target:"skip_asin",source:"frontend-price-track"}}function J(e){if(!e.length)return;const t=new Set(e.map(l=>xe(l))),s=new Set(e.map(l=>(l.shopName||"").trim()).filter(l=>!!l));b.value=b.value.filter(l=>{const o=xe(l),u=(l.shopName||"").trim();return!t.has(o)&&(!u||!s.has(u))}),me()}function Ut(e){j.value=j.value.filter(t=>!(e.resultId!=null&&t.resultId===e.resultId||e.taskId!=null&&t.taskId===e.taskId))}async function Bt(e){const t=[...b.value];J([e]);const s=(e.shopName||"").trim();if(!s){r.success("已从匹配结果中移除");return}try{(await ps(s))?.removed&&(await D(),await x(),$()),r.success("已从匹配结果中移除")}catch(l){if(Ye(l)){await D(),await x(),$(),r.success("后端记录已不存在,已同步移除本地记录");return}b.value=t,me(),r.error(l instanceof Error?l.message:"同步后端失败")}}function Ze(e,t){const s=e.items?.[0],l=(t.shopName||"").trim(),o=t.skipAsins||e.skipAsinsByCountry||{},u=e.skipAsinDetailsByCountry||{},a=e.minimumPriceByCountryAndAsin||{},d=Ft(),T=s?.resultId??null,U=s?.loopRunId??null,X=s?.roundIndex??null,h=s?.taskStatus||"RUNNING",L=s?.success??!1,E=s?.error||null,I=s?.outputFilename||null,V=s?.downloadUrl||null;return{type:"price-track-run",ts:Date.now(),data:{task_id:e.taskId,result_id:T,shop_name:l,shop_id:t.shopId??null,platform:t.platform||"",company_name:t.companyName||"",shop_mall_name:t.shopMallName||"",matched:!!t.matched,match_status:t.matchStatus||"",match_message:t.matchMessage||null,success:L,error:E,output_filename:I,download_url:V,task_status:h,loop_run_id:U,round_index:X,country_codes:he(),mode:P.value?"status":"asin",skip_asins:o,skip_asins_by_country:o,skip_asin_details_by_country:u,minimum_price_by_country_and_asin:a,skip_asin_delete_policy:d,delete_skip_asin_when_price_below_minimum:d.deleteWhenPriceBelowMinimum,deleteSkipAsinWhenPriceBelowMinimum:d.deleteWhenPriceBelowMinimum,asin_rows_by_country:Object.keys(Ie.value).length?Ie.value:e.asinRowsByCountry||{},taskId:e.taskId,resultId:T,shopName:l,shopId:t.shopId??null,platformName:t.platform||"",companyName:t.companyName||"",shopMallName:t.shopMallName||"",matchStatus:t.matchStatus||"",matchMessage:t.matchMessage||null,outputFilename:I,downloadUrl:V,taskStatus:h,loopRunId:U,roundIndex:X}}}async function et(e){let t=0;const s=30;for(;;){try{const l=await vt([e]);if(t>0&&(p.value=`任务 ${e} 后端已恢复,继续等待执行结果...`),t=0,(l.missingTaskIds||[]).includes(e))return K(e),await D(),await x(),$(),"FAILED";const o=(l.items||[]).find(a=>a.task?.id===e),u=o?.task?.status||"";if(o){const a=_.value[e];_.value={..._.value,[e]:a?{...a,task:{...a.task||{},...o.task||{}}}:o},re()}if(u&&(N.value={...N.value,[e]:u},le()),u==="SUCCESS"||u==="FAILED")return K(e),await D(),await x(),$(),u}catch(l){const o=(l instanceof Error?l.message:String(l||"")).toLowerCase();if(!["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(a=>o.includes(a.toLowerCase())))throw l;if(t+=1,t>=s)throw new Error(`任务 ${e} 等待后端恢复超时,请稍后手动刷新查看状态`);p.value=`任务 ${e} 运行中,正在等待后端服务恢复(${t}/${s})...`,(t===1||t%5===0)&&r.warning(`任务 ${e} 运行中,后端服务暂时不可用,正在自动重试`),await new Promise(a=>{window.setTimeout(()=>a(),F())});continue}await new Promise(l=>{window.setTimeout(()=>l(),F())})}}function Ot(){return b.value.find(e=>e.matched)}async function qt(){if(_e.value)return;if(!Se.value){r.warning("请至少选择一个跟价模式");return}if(S.value&&!A.value.length){r.warning("请先选择 ASIN 文件");return}const e=Y();if(!e?.enqueue_json){r.error("当前环境未启用 pywebview enqueue_json");return}if(!b.value.filter(o=>o.matched).length){r.warning("无可用匹配店铺");return}_e.value=!0,O.value=!0,H.value="";let s=0,l=0;try{let o=0;for(;Oe.value;){const u=Ot();if(!u)break;o+=1;try{let a=0;const d=await(async()=>{for(;;)try{return await dt({userId:0,statusMode:P.value,asinMode:S.value,items:[u],asinFiles:Pe(),countryCodes:he()})}catch(h){const L=(h instanceof Error?h.message:String(h||"")).toLowerCase(),E=["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(I=>L.includes(I.toLowerCase()));if(a+=1,!E||a>=10)throw h;p.value="后端服务暂时不可用,正在重试创建任务("+a+"/10)...",await new Promise(I=>{window.setTimeout(()=>I(),F())})}})();_.value={..._.value,[d.taskId]:{task:{id:d.taskId,status:"RUNNING"},items:d.items}},N.value={...N.value,[d.taskId]:"RUNNING"},re(),le();const T=Ze(d,u);H.value=JSON.stringify(T,null,2);const U=await e.enqueue_json(T);if(!U?.success){l+=1,p.value="任务 "+d.taskId+" 推送失败,已自动继续下一条:"+(U?.error||"未知错误"),r.error(p.value),J([u]);continue}if(ye(d.taskId),Q(!0),J([u]),p.value="任务 "+d.taskId+" 已入队,等待执行完成",await et(d.taskId)!=="SUCCESS"){l+=1,p.value="任务 "+d.taskId+" 执行失败,已自动继续下一条",r.error(p.value);continue}s+=1,p.value="任务 "+d.taskId+" 已完成"}catch(a){l+=1,p.value="第 "+o+" 条任务处理失败,已自动继续下一条:"+(a instanceof Error?a.message:"未知错误"),r.error(p.value),J([u]);continue}}(s>0||l>0)&&r.success("店铺任务推送已完成:成功 "+s+" 条,失败 "+l+" 条")}catch(o){p.value=o instanceof Error?o.message:"推送异常",r.error(p.value)}finally{_e.value=!1,O.value=!1}}function ue(e){w.value=e,m.value=e?.id??null,z()}function ie(){if(!w.value)return;const e=w.value.status||"";(e==="SUCCESS"||e==="FAILED"||e==="STOPPED")&&(w.value=null,m.value=null,z())}async function Le(){if(!m.value)return null;try{const e=await ms(m.value);return ue(e),ie(),w.value}catch(e){const t=(e instanceof Error?e.message:String(e||"")).toLowerCase();return["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(l=>t.includes(l.toLowerCase()))?w.value:(w.value=null,m.value=null,z(),null)}}function jt(e){_.value={..._.value,[e.taskId]:{task:{id:e.taskId,status:"RUNNING"},items:e.items}},N.value={...N.value,[e.taskId]:"RUNNING"},re(),le()}async function Jt(){if(!(!m.value||ee.value)){ee.value=!0;try{const e=await hs(m.value);ue(e),ie(),r.success(e.status==="STOPPED"?"循环已停止":"已请求停止,当前子任务完成后将收尾")}catch(e){r.error(e instanceof Error?e.message:"停止循环失败")}finally{ee.value=!1}}}async function Me(e){if(be.value||(e&&m.value!==e&&(m.value=e,z()),!m.value))return;const t=Y();if(!t?.enqueue_json)throw new Error("当前环境未启用 pywebview enqueue_json");be.value=!0;try{for(;m.value;){const s=await Le();if(!s||s.status==="SUCCESS"||s.status==="FAILED"||s.status==="STOPPED")break;if(s.activeTaskId){const h=s.activeTaskId;ye(h),Q(!0);const L=await et(h);let E=0;const I=await(async()=>{for(;;)try{return await ys(s.id,h)}catch(V){const Gt=(V instanceof Error?V.message:String(V||"")).toLowerCase(),zt=["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(Ue=>Gt.includes(Ue.toLowerCase()));if(E+=1,!zt||E>=10)throw V;p.value=`循环任务 ${s.id} 等待后端恢复后确认子任务完成(${E}/10)...`,await new Promise(Ue=>{window.setTimeout(()=>Ue(),F())})}})();if(ue(I),await D(),await x(),$(),ie(),L!=="SUCCESS")throw new Error(I.errorMessage||`任务 ${s.activeTaskId} 执行失败`);continue}let l=0;const o=await(async()=>{for(;;)try{return await ws(s.id)}catch(h){const L=(h instanceof Error?h.message:String(h||"")).toLowerCase(),E=["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(I=>L.includes(I.toLowerCase()));if(l+=1,!E||l>=10)throw h;p.value=`循环任务 ${s.id} 等待后端恢复后继续派发(${l}/10)...`,await new Promise(I=>{window.setTimeout(()=>I(),F())})}})();if(ue(o.loopRun||s),!o.childTaskRequest){ie();break}const u=o.childTaskRequest,a=u.items?.[0];if(!a)throw new Error("循环任务缺少待执行店铺");let d=0;const T=await(async()=>{for(;;)try{return await dt(u)}catch(h){const L=(h instanceof Error?h.message:String(h||"")).toLowerCase(),E=["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"].some(I=>L.includes(I.toLowerCase()));if(d+=1,!E||d>=10)throw h;p.value=`循环任务 ${s.id} 等待后端恢复后重试创建子任务(${d}/10)...`,await new Promise(I=>{window.setTimeout(()=>I(),F())})}})();jt(T);const U=Ze(T,a);H.value=JSON.stringify(U,null,2);const X=await t.enqueue_json(U);if(!X?.success)throw new Error(X?.error||`任务 ${T.taskId} 推送失败`);ye(T.taskId),Q(!0),J([a]),p.value=`循环任务 ${s.id} 第 ${o.childTaskRequest.roundIndex||1} 轮已推送:${a.shopName||T.taskId}`}}finally{be.value=!1}}async function Kt(){if(Ce.value){try{await Me(m.value||void 0)}catch(t){t instanceof Error&&/子任务不存在|循环任务不存在|404/.test(t.message)&&(w.value=null,m.value=null,z());const s=t instanceof Error?t.message:"循环执行失败";p.value=s,r.error(s)}return}if(!Se.value){r.warning("请至少选择一个跟价模式");return}if(S.value&&!A.value.length){r.warning("请先选择 ASIN 文件");return}const e=b.value.filter(t=>t.matched);if(!e.length){r.warning("请先匹配可用店铺");return}O.value=!0,H.value="";try{const t=await ks({userId:0,statusMode:P.value,asinMode:S.value,items:e,asinFiles:Pe(),countryCodes:he(),executionMode:q.value,targetRounds:q.value==="FINITE"?Math.max(1,Number(pe.value)||1):void 0});ue(t),p.value=`循环任务 ${t.id} 已创建`,await Me(t.id),ie(),m.value||r.success("跟价循环已启动")}catch(t){const s=t instanceof Error?t.message:"启动循环失败";p.value=s,r.error(s)}finally{O.value=!1}}function F(){return gs()}async function Vt(){const e=g.value.filter(t=>t>0);if(e.length)try{const t=await vt(e);let s=!1;const l={..._.value};for(const o of t.missingTaskIds||[])K(o),delete l[o];for(const o of t.items||[]){const u=o.task?.id,a=o.task?.status;if(typeof u!="number"||u<=0)continue;const d=l[u];l[u]=d?{...d,task:{...d.task||{},...o.task||{}}}:o,a&&(N.value[u]=a,(a==="SUCCESS"||a==="FAILED")&&(K(u),s=!0))}_.value=l,re(),le(),await D(),$(),s&&await x()}catch{}}function Q(e=!1){if(R.value){if(!e)return;window.clearTimeout(R.value),R.value=null}const t=async()=>{if(R.value=null,Ne.value){Q();return}if(g.value.length){Ne.value=!0;try{await Vt()}finally{Ne.value=!1}g.value.length>0&&(R.value=window.setTimeout(t,F()))}};e?t():R.value=window.setTimeout(t,F())}function Wt(){R.value&&(window.clearTimeout(R.value),R.value=null)}function ye(e){g.value.includes(e)||(g.value=[...g.value,e],He())}function K(e){if(g.value=g.value.filter(t=>t!==e),He(),delete N.value[e],le(),_.value[e]){const t={..._.value};delete t[e],_.value=t,re()}}const De=B(()=>{const e=j.value.filter(s=>s.taskId&&g.value.includes(s.taskId)&&!st(s.taskId)),t=new Set(e.map(s=>s.taskId).filter(s=>typeof s=="number"));for(const s of g.value){if(t.has(s))continue;const l=_.value[s]?.items?.[0];l&&e.push(l)}return e}),$e=B(()=>j.value.filter(e=>!e.taskId||!g.value.includes(e.taskId)||st(e.taskId))),Ht=B(()=>De.value.length>0||$e.value.length>0);function tt(e){return e&&(N.value[e]||_.value[e]?.task?.status)||""}function st(e){const t=tt(e);return t==="SUCCESS"||t==="FAILED"}function Fe(e){const t=e.taskId;return t?tt(t)||e.taskStatus||"":e.taskStatus||""}function at(e){const t=Fe(e);return t==="SUCCESS"?"已完成":t==="FAILED"?"失败":t==="RUNNING"?"执行中":e.success?"已完成":"等待中"}function nt(e){const t=Fe(e);return t==="SUCCESS"||e.success?"success":t==="FAILED"?"failed":"running"}function ot(e){return!e.resultId||!e.fileReady&&!e.downloadUrl?!1:Fe(e)==="SUCCESS"||e.success===!0}async function lt(e){if(!e.resultId)return;const t=Y(),s=e.outputFilename||`${e.shopName||"result"}.xlsx`;if(!t?.save_file_from_url_new){r.error("当前客户端未提供 save_file_from_url_new,无法下载文件");return}const l=_s(e.resultId),o=await t.save_file_from_url_new(l,s);o.success?r.success(`已保存:${o.path||s}`):o.error&&o.error!=="用户取消"&&r.error(o.error)}async function rt(e){try{e.resultId!=null?await Is(e.resultId):e.taskId!=null&&await bs(e.taskId),w.value&&(e.loopRunId!=null&&e.loopRunId===w.value.id||e.taskId!=null&&e.taskId===w.value.activeTaskId)&&await Le(),e.taskId!=null&&K(e.taskId),J([e]),await D(),await x(),$(),r.success("已删除")}catch(t){if(Ye(t)){e.taskId!=null&&K(e.taskId),J([e]),Ut(e),await x(),$(),r.success("后端记录已不存在,已同步移除本地记录");return}r.error(t instanceof Error?t.message:"删除失败")}}return Xt(()=>{!P.value&&!S.value&&Ae("status"),mt(),ht(),yt(),wt(),kt(),Re().catch(()=>{}),At().catch(()=>{}),D().catch(()=>{}),x().catch(()=>{}),g.value.length&&Q(!0),m.value&&Le().then(e=>{e?.activeTaskId&&(ye(e.activeTaskId),Q(!0)),e&&e.status!=="SUCCESS"&&e.status!=="FAILED"&&e.status!=="STOPPED"&&Me(e.id)}).catch(()=>{m.value=null,z()})}),Yt(()=>{Wt(),G&&clearTimeout(G)}),(e,t)=>{const s=es,l=ss,o=as,u=ns;return i(),c("div",Es,[C(Zt,{active:"pricing"}),n("div",Ps,[n("aside",As,[t[27]||(t[27]=n("div",{class:"section-title"},"跟价模式",-1)),n("div",Rs,[n("label",xs,[n("input",{type:"radio",name:"price-track-mode",class:"mode-check-input",checked:P.value,onChange:t[0]||(t[0]=a=>Ae("status"))},null,40,Ls),t[7]||(t[7]=n("span",{class:"mode-check-text"},"按商品状态(全量)",-1)),t[8]||(t[8]=n("span",{class:"mode-hint-inline"},"— 获取店铺所有在售ASIN跑跟价",-1))]),n("label",Ms,[n("input",{type:"radio",name:"price-track-mode",class:"mode-check-input",checked:S.value,onChange:t[1]||(t[1]=a=>Ae("asin"))},null,40,Ds),t[9]||(t[9]=n("span",{class:"mode-check-text"},"按指定ASIN文档(自定义)",-1)),t[10]||(t[10]=n("span",{class:"mode-hint-inline"},"— 上传ASIN表格,按文档内ASIN跑跟价",-1))])]),t[28]||(t[28]=n("div",{class:"section-title"},"执行配置",-1)),n("div",$s,[n("label",Fs,[ut(n("input",{"onUpdate:modelValue":t[2]||(t[2]=a=>q.value=a),type:"radio",class:"mode-check-input",value:"FINITE"},null,512),[[it,q.value]]),t[11]||(t[11]=n("span",{class:"mode-check-text"},"执行固定轮次",-1)),t[12]||(t[12]=n("span",{class:"mode-hint-inline"},"按整批店铺重复执行指定次数",-1))]),n("label",Us,[ut(n("input",{"onUpdate:modelValue":t[3]||(t[3]=a=>q.value=a),type:"radio",class:"mode-check-input",value:"INFINITE"},null,512),[[it,q.value]]),t[13]||(t[13]=n("span",{class:"mode-check-text"},"无限执行",-1)),t[14]||(t[14]=n("span",{class:"mode-hint-inline"},"上一轮全部成功后立即开始下一轮",-1))]),q.value==="FINITE"?(i(),c("div",Bs,[t[15]||(t[15]=n("span",{class:"hint"},"轮次",-1)),C(s,{modelValue:pe.value,"onUpdate:modelValue":t[4]||(t[4]=a=>pe.value=a),min:1,max:9999,disabled:Ce.value||O.value},null,8,["modelValue","disabled"])])):y("",!0)]),S.value?(i(),c(M,{key:0},[t[17]||(t[17]=n("div",{class:"section-title"},[ce("ASIN文档 "),n("span",{class:"tag-badge"},"自定义模式")],-1)),n("div",Os,[t[16]||(t[16]=n("div",{class:"hint"},"上传包含ASIN的表格文件,按文档内的ASIN进行跟价。",-1)),n("div",{class:"btns"},[n("button",{type:"button",class:"opt-btn",onClick:gt},"选择ASIN文件"),n("button",{type:"button",class:"opt-btn",onClick:_t},"选择文件夹")]),n("div",qs,[A.value.length?(i(!0),c(M,{key:0},de(A.value,(a,d)=>(i(),c("span",{key:d},v(a),1))),128)):(i(),c("span",js,"暂未选择"))])])],64)):y("",!0),P.value?(i(),c(M,{key:1},[t[19]||(t[19]=n("div",{class:"section-title"},"店铺名称",-1)),n("div",Js,[t[18]||(t[18]=n("div",{class:"hint"},"输入店铺名后点「确认」加入下方备选区。可同时配合上方模式使用。",-1)),n("div",Ks,[C(l,{modelValue:Z.value,"onUpdate:modelValue":t[5]||(t[5]=a=>Z.value=a),clearable:"",placeholder:"请输入店铺名称",onKeyup:ts(Xe,["enter"])},null,8,["modelValue"]),n("button",{type:"button",class:"opt-btn",disabled:ve.value,onClick:Xe},v(ve.value?"保存中…":"确认"),9,Vs)])]),t[20]||(t[20]=n("div",{class:"section-title"},"备选店铺",-1)),ge.value.length?(i(),c("div",Hs,[C(u,{data:ge.value,"row-key":"id",height:"160",class:"candidate-table",onSelectionChange:Rt},{default:W(()=>[C(o,{type:"selection",width:"42"}),C(o,{prop:"shopName",label:"店铺名","min-width":"120","show-overflow-tooltip":""}),C(o,{label:"操作",width:"72",align:"center"},{default:W(({row:a})=>[n("button",{type:"button",class:"link-danger",onClick:d=>xt(a)},"删除",8,Gs)]),_:1})]),_:1},8,["data"])])):(i(),c("div",Ws,"暂无备选店铺,请先输入并确认"))],64)):y("",!0),S.value?y("",!0):(i(),c(M,{key:2},[t[23]||(t[23]=n("div",{class:"section-title"},"处理国家与顺序",-1)),t[24]||(t[24]=n("p",{class:"hint country-pref-hint"}," 勾选需要处理的站点;拖拽调整顺序。设置会按当前登录用户保存。 ",-1)),n("div",zs,[(i(!0),c(M,null,de(It.value,a=>(i(),c("label",{key:a.code,class:"country-check-row"},[n("input",{type:"checkbox",class:"country-check-input",checked:bt(a.code),disabled:ze(a.code),onChange:d=>St(a.code,d)},null,40,Qs),n("span",Xs,v(a.label)+"("+v(a.code)+")",1)]))),128))]),k.value.length?(i(),c("div",Ys,[t[22]||(t[22]=n("div",{class:"country-order-caption"},"已选顺序(拖拽 ⋮⋮ 调整)",-1)),n("div",Zs,[(i(!0),c(M,null,de(k.value,(a,d)=>(i(),c("div",{key:a,class:we(["country-drag-row",{dragging:se.value===d}]),draggable:"true",onDragstart:T=>Tt(d),onDragend:Nt,onDragover:t[6]||(t[6]=ct(()=>{},["prevent"])),onDrop:ct(T=>Et(d),["prevent"])},[t[21]||(t[21]=n("span",{class:"drag-handle",title:"拖动排序"},"⋮⋮",-1)),n("span",ta,v(Ge(a))+"("+v(a)+")",1)],42,ea))),128))])])):y("",!0),Te.value?(i(),c("div",sa,"保存中…")):y("",!0)],64)),P.value?(i(),c("div",aa,[...t[25]||(t[25]=[n("span",{class:"mode-status-dot active"},null,-1),n("span",{class:"mode-status-text"},"商品状态模式:将在售(Active)ASIN纳入跟价,跳过ASIN由后台配置的店铺维度数据提供",-1)])])):y("",!0),n("div",na,[n("button",{type:"button",class:"btn-run",disabled:fe.value,onClick:Mt},v(fe.value?"匹配中…":"匹配店铺"),9,oa),n("button",{type:"button",class:"btn-run btn-queue",disabled:O.value||!Se.value,onClick:Kt},v(O.value?"推送中…":"推送到 Python 队列"),9,la)]),t[29]||(t[29]=n("p",{class:"loading-msg"},[ce("上传ASIN文档和多选店铺"),n("strong",null,"可同时生效"),ce(",跟价结果合并输出。全量和自定义的区别仅在于ASIN来源不同。")],-1)),w.value?(i(),c("div",ra,[n("div",ua,"循环任务 ID:"+v(w.value.id),1),n("div",ia,"状态:"+v(w.value.status||"-"),1),n("div",ca,"进度:"+v(pt.value),1),n("div",da,"当前店铺:"+v((w.value.currentShopIndex||0)+1)+"/"+v(w.value.totalShopCount||0),1),w.value.errorMessage?(i(),c("div",va,v(w.value.errorMessage),1)):y("",!0),n("button",{type:"button",class:"opt-btn loop-stop-btn",disabled:!Ce.value||ee.value,onClick:Jt},v(ee.value?"停止中...":"停止循环"),9,fa)])):y("",!0),p.value?(i(),c("div",pa,[t[26]||(t[26]=n("div",{class:"section-title queue-debug-title"},"推送结果",-1)),n("div",ma,v(p.value),1),H.value?(i(),c("pre",ha,v(H.value),1)):y("",!0)])):y("",!0)]),n("section",ya,[t[38]||(t[38]=n("div",{class:"panel-header"},"匹配与任务",-1)),n("div",wa,[n("div",ka,[n("div",ga,[t[30]||(t[30]=n("span",{class:"summary-label"},"备选店铺数",-1)),n("strong",null,v(ae.value.candidateCount),1)]),n("div",_a,[t[31]||(t[31]=n("span",{class:"summary-label"},"已结束任务",-1)),n("strong",null,v(ae.value.processedTaskCount),1)]),n("div",Ia,[t[32]||(t[32]=n("span",{class:"summary-label"},"成功任务",-1)),n("strong",null,v(ae.value.successTaskCount),1)]),n("div",ba,[t[33]||(t[33]=n("span",{class:"summary-label"},"失败任务",-1)),n("strong",null,v(ae.value.failedTaskCount),1)])]),t[37]||(t[37]=n("div",{class:"subsection-title"},"匹配结果",-1)),b.value.length?(i(),os(u,{key:1,data:b.value,"row-key":xe,"highlight-current-row":!1,class:"result-table match-table"},{default:W(()=>[C(o,{prop:"shopName",label:"店铺名","min-width":"100"}),C(o,{label:"匹配",width:"72",align:"center"},{default:W(({row:a})=>[n("span",{class:we(a.matched?"ok":"fail")},v(a.matched?"是":"否"),3)]),_:1}),C(o,{prop:"shopId",label:"店铺ID","min-width":"120","show-overflow-tooltip":""}),C(o,{prop:"platform",label:"平台",width:"88","show-overflow-tooltip":""}),C(o,{prop:"companyName",label:"公司","min-width":"100","show-overflow-tooltip":""}),C(o,{label:"状态",width:"100","show-overflow-tooltip":""},{default:W(({row:a})=>[ce(v(Dt(a.matchStatus)),1)]),_:1}),C(o,{label:"说明","min-width":"140","show-overflow-tooltip":""},{default:W(({row:a})=>[ce(v($t(a)),1)]),_:1}),C(o,{label:"操作",width:"72",align:"center"},{default:W(({row:a})=>[n("button",{type:"button",class:"link-danger",onClick:d=>Bt(a)},"删除",8,Ca)]),_:1})]),_:1},8,["data"])):(i(),c("div",Sa,"完成「匹配店铺」后,在此展示紫鸟索引匹配结果,供核对后再推送队列。")),n("div",Ta,[t[36]||(t[36]=n("div",{class:"result-list-header"},[n("span",null,"处理记录")],-1)),Ht.value?(i(),c(M,{key:1},[De.value.length?(i(),c("div",Ea,[t[34]||(t[34]=n("div",{class:"result-subsection-title"},"当前任务",-1)),n("ul",Pa,[(i(!0),c(M,null,de(De.value,a=>(i(),c("li",{key:`cur-${a.resultId}-${a.taskId}`,class:"task-item split-result-item"},[n("div",Aa,[a.roundIndex?(i(),c("div",Ra,"轮次:第 "+v(a.roundIndex)+" 轮",1)):y("",!0),n("span",{class:"id",title:a.shopName||""},v(a.shopName||"-"),9,xa),n("div",La,"任务 ID:"+v(a.taskId??"-"),1),a.platform?(i(),c("div",Ma,"平台:"+v(a.platform),1)):y("",!0),a.error?(i(),c("div",Da,"错误:"+v(a.error),1)):y("",!0)]),n("div",$a,[n("span",{class:we(["status",nt(a)])},v(at(a)),3),ot(a)?(i(),c("button",{key:0,type:"button",class:"download",onClick:d=>lt(a)}," 下载 ",8,Fa)):y("",!0),n("button",{type:"button",class:"btn-delete",onClick:d=>rt(a)},"删除",8,Ua)])]))),128))])])):y("",!0),$e.value.length?(i(),c("div",Ba,[t[35]||(t[35]=n("div",{class:"result-subsection-title"},"历史记录",-1)),n("ul",Oa,[(i(!0),c(M,null,de($e.value,a=>(i(),c("li",{key:`his-${a.resultId}-${a.taskId}`,class:"task-item split-result-item"},[n("div",qa,[a.roundIndex?(i(),c("div",ja,"轮次:第 "+v(a.roundIndex)+" 轮",1)):y("",!0),n("span",{class:"id",title:a.shopName||""},v(a.shopName||"-"),9,Ja),n("div",Ka,"任务 ID:"+v(a.taskId??"-"),1),a.outputFilename?(i(),c("div",Va,"文件:"+v(a.outputFilename),1)):y("",!0),a.error?(i(),c("div",Wa,"错误:"+v(a.error),1)):y("",!0)]),n("div",Ha,[n("span",{class:we(["status",nt(a)])},v(at(a)),3),ot(a)?(i(),c("button",{key:0,type:"button",class:"download",onClick:d=>lt(a)}," 下载 ",8,Ga)):y("",!0),n("button",{type:"button",class:"btn-delete",onClick:d=>rt(a)},"删除",8,za)])]))),128))])])):y("",!0)],64)):(i(),c("div",Na,"暂无处理记录。推送队列并等待 Python 回传后,将在此显示下载链接。"))])])])])])}}}),Xa=Ss(Qa,[["__scopeId","data-v-7b4e9859"]]);Cs(Xa).use(Ts).mount("#app"); diff --git a/new_web_source/assets/product-risk-eXMv239F.css b/new_web_source/assets/product-risk-eXMv239F.css new file mode 100644 index 0000000..be8ddff --- /dev/null +++ b/new_web_source/assets/product-risk-eXMv239F.css @@ -0,0 +1 @@ +.module-page[data-v-466a311b]{min-height:100vh;background:#1a1a1a}.main-content[data-v-466a311b]{display:flex;min-height:calc(100vh - 56px);height:calc(100vh - 56px)}.left-panel[data-v-466a311b]{width:400px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-466a311b]{flex:1;display:flex;flex-direction:column;min-width:0;background:#1a1a1a}.section-title[data-v-466a311b]{font-size:13px;color:#bbb;margin-bottom:10px}.input-zone[data-v-466a311b]{border:1px dashed #3a3a3a;border-radius:10px;padding:16px;background:#252525;margin-bottom:20px}.hint[data-v-466a311b]{color:#888;font-size:12px;margin-bottom:12px;line-height:1.5;text-align:left}.country-pref-hint[data-v-466a311b]{margin-top:-4px}.country-pref-checks[data-v-466a311b]{display:flex;flex-wrap:wrap;gap:10px 16px;margin-bottom:12px}.country-check-row[data-v-466a311b]{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px;color:#ccc}.country-check-input[data-v-466a311b]{width:16px;height:16px;accent-color:#409eff;cursor:pointer;flex-shrink:0}.country-check-text[data-v-466a311b]{line-height:1.3}.country-order-panel[data-v-466a311b]{border:1px solid #333;border-radius:8px;padding:10px 12px;background:#252525;margin-bottom:14px}.country-order-caption[data-v-466a311b]{font-size:11px;color:#777;margin-bottom:8px}.country-order-list[data-v-466a311b]{display:flex;flex-direction:column;gap:6px}.country-drag-row[data-v-466a311b]{display:flex;align-items:center;gap:10px;padding:8px 10px;background:#2c2c2c;border-radius:6px;border:1px solid #3a3a3a;cursor:grab;-webkit-user-select:none;user-select:none}.country-drag-row.dragging[data-v-466a311b]{opacity:.55;border-color:#3498db}.drag-handle[data-v-466a311b]{color:#666;font-size:12px;letter-spacing:-2px}.country-drag-label[data-v-466a311b]{font-size:12px;color:#ccc}.country-pref-status[data-v-466a311b]{font-size:11px;color:#888;margin-bottom:10px}.listing-filter-hint[data-v-466a311b]{margin-top:-4px}.listing-filter-row[data-v-466a311b]{margin-bottom:16px}.listing-filter-select[data-v-466a311b]{width:100%}.listing-filter-row[data-v-466a311b] .el-select__wrapper{background-color:#2a2a2a;box-shadow:0 0 0 1px #3a3a3a inset}.listing-filter-row[data-v-466a311b] .el-select__placeholder,.listing-filter-row[data-v-466a311b] .el-select__selected-item{color:#ccc}.input-row[data-v-466a311b]{display:flex;gap:10px;align-items:center}.input-row[data-v-466a311b] .el-input{flex:1}.opt-btn[data-v-466a311b]{padding:8px 14px;font-size:13px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px;cursor:pointer;white-space:nowrap}.opt-btn[data-v-466a311b]:hover:not(:disabled){color:#3498db;border-color:#3498db}.opt-btn[data-v-466a311b]:disabled{opacity:.6;cursor:not-allowed}.empty-candidates[data-v-466a311b]{color:#666;font-size:13px;padding:16px;border:1px dashed #333;border-radius:8px;margin-bottom:16px}.candidate-table-scroll[data-v-466a311b]{max-height:280px;overflow:auto;margin-bottom:16px;border-radius:8px;border:1px solid #2a2a2a}.candidate-table[data-v-466a311b]{--el-table-bg-color: #252525;--el-table-tr-bg-color: #252525;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.link-danger[data-v-466a311b]{background:none;border:none;color:#e74c3c;cursor:pointer;font-size:12px;padding:0}.link-danger[data-v-466a311b]:hover{text-decoration:underline}.run-row[data-v-466a311b]{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}.btn-run[data-v-466a311b]{padding:10px 18px;font-size:14px;font-weight:600;color:#fff;background:#3498db;border:none;border-radius:8px;cursor:pointer}.btn-run[data-v-466a311b]:hover:not(:disabled){background:#2980b9}.btn-run[data-v-466a311b]:disabled{opacity:.55;cursor:not-allowed}.btn-queue[data-v-466a311b]{background:#27ae60}.btn-queue[data-v-466a311b]:hover:not(:disabled){background:#219a52}.loading-msg[data-v-466a311b]{margin-top:12px;font-size:12px;color:#777;line-height:1.5}.loading-msg code[data-v-466a311b]{font-size:11px;color:#8fd3ff}.queue-debug-card[data-v-466a311b]{margin-top:18px;padding:14px;border:1px solid #2a2a2a;border-radius:10px;background:#202020}.queue-debug-title[data-v-466a311b]{margin-bottom:8px}.queue-debug-line[data-v-466a311b]{color:#b8c1cc;font-size:12px;line-height:1.6;margin-bottom:8px}.queue-debug-payload[data-v-466a311b]{margin:0;max-height:220px;overflow:auto;padding:10px;border-radius:8px;background:#141414;color:#8fd3ff;font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-all}.panel-header[data-v-466a311b]{padding:16px 20px;font-size:15px;font-weight:600;color:#e0e0e0;border-bottom:1px solid #2a2a2a}.task-list-wrap[data-v-466a311b]{flex:1;padding:16px 20px;overflow:auto}.clean-result-summary[data-v-466a311b]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.summary-card[data-v-466a311b]{padding:14px 16px;border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e}.summary-card strong[data-v-466a311b]{display:block;margin-top:8px;font-size:22px;color:#eaf4ff}.summary-label[data-v-466a311b]{font-size:12px;color:#8d8d8d}.subsection-title[data-v-466a311b]{font-size:13px;color:#999;margin:8px 0 10px}.empty-tasks[data-v-466a311b]{color:#666;font-size:13px;padding:16px;text-align:center}.empty-tasks.narrow[data-v-466a311b]{padding:12px 8px}.match-table[data-v-466a311b]{margin-bottom:18px}.match-table[data-v-466a311b] .el-table__body tr:hover>td.el-table__cell,.match-table[data-v-466a311b] .el-table__body tr.hover-row>td.el-table__cell,.match-table[data-v-466a311b] .el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-tr-bg-color, #222)!important}.result-table[data-v-466a311b]{--el-table-bg-color: #222;--el-table-tr-bg-color: #222;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.ok[data-v-466a311b]{color:#27ae60}.fail[data-v-466a311b]{color:#e67e22}.result-list-wrap[data-v-466a311b]{border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e;min-height:200px;margin-top:8px}.result-list-header[data-v-466a311b]{padding:12px 16px;border-bottom:1px solid #2a2a2a;font-size:14px;color:#ddd}.result-subsection[data-v-466a311b]{padding:12px 12px 4px}.result-subsection-title[data-v-466a311b]{font-size:12px;color:#888;margin-bottom:8px}.task-list[data-v-466a311b]{list-style:none;margin:0;padding:0}.task-item[data-v-466a311b]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:8px;background:#222}.left[data-v-466a311b]{flex:1;min-width:0}.split-result-main[data-v-466a311b]{display:flex;flex-direction:column;gap:4px}.id[data-v-466a311b]{font-weight:600;color:#e0e0e0;font-size:13px}.files[data-v-466a311b]{font-size:12px;color:#888}.task-right[data-v-466a311b]{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.status[data-v-466a311b]{padding:4px 10px;border-radius:6px;font-size:12px;white-space:nowrap}.status.success[data-v-466a311b]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-466a311b]{background:#e74c3c2e;color:#ff6b6b}.status.running[data-v-466a311b]{background:#3498db2e;color:#3498db}.download[data-v-466a311b]{padding:6px 10px;border-radius:6px;font-size:12px;background:#3498db2e;color:#69b6ff;border:none;cursor:pointer}.download[data-v-466a311b]:hover{background:#3498db47}.btn-delete[data-v-466a311b]{padding:6px 10px;border-radius:6px;font-size:12px;background:#e74c3c1f;color:#ff8f8f;border:none;cursor:pointer}.btn-delete[data-v-466a311b]:hover{background:#e74c3c38}@media(max-width:1100px){.main-content[data-v-466a311b]{flex-direction:column;height:auto}.left-panel[data-v-466a311b]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.clean-result-summary[data-v-466a311b]{grid-template-columns:repeat(2,minmax(0,1fr))}} diff --git a/new_web_source/assets/product-risk.js b/new_web_source/assets/product-risk.js new file mode 100644 index 0000000..18d820c --- /dev/null +++ b/new_web_source/assets/product-risk.js @@ -0,0 +1 @@ +import{d as he,o as pe,L as ye,a as c,c as d,b as k,B as ge,e as n,a5 as ke,a6 as me,t as f,V as I,W as we,X as _e,x as C,F as D,r as B,a7 as Mt,n as W,f as _,a8 as be,U as Lt,a9 as Se,aa as Ie,g as v,h as z,E as u,ab as Ce,ac as Te,ad as Pe,ae as Ee,af as Ne,ag as Re,ah as De,ai as $e,aj as Ot,ak as Fe,al as Me,am as Le,i as Ut,an as Oe,ao as Ue,T as Ae,_ as xe,q as Be,s as qe}from"./pywebview-C66x_2Dh.js";/* empty css */import{L as Ve}from"./listingFilters-BpGOU_pJ.js";/* empty css */const Ke={class:"page-shell module-page"},je={class:"main-content"},He={class:"left-panel"},Je={class:"input-zone"},Ge={class:"input-row"},Qe=["disabled"],We={key:0,class:"empty-candidates"},ze={key:1,class:"candidate-table-scroll"},Xe=["onClick"],Ye={class:"country-pref-checks"},Ze=["checked","disabled","onChange"],ts={class:"country-check-text"},es={key:2,class:"country-order-panel"},ss={class:"country-order-list"},as=["onDragstart","onDrop"],ns={class:"country-drag-label"},os={key:3,class:"country-pref-status"},ls={class:"listing-filter-row"},rs={class:"run-row"},us=["disabled"],is=["disabled"],cs={key:4,class:"queue-debug-card"},ds={class:"queue-debug-line"},fs={key:0,class:"queue-debug-payload"},vs={class:"right-panel"},hs={class:"task-list-wrap"},ps={class:"clean-result-summary pr-summary"},ys={class:"summary-card"},gs={class:"summary-card"},ks={class:"summary-card"},ms={class:"summary-card"},ws={key:0,class:"empty-tasks narrow"},_s=["onClick"],bs={class:"result-list-wrap"},Ss={key:0,class:"empty-tasks"},Is={key:0,class:"result-subsection"},Cs={class:"task-list clean-result-list"},Ts={class:"left split-result-main"},Ps=["title"],Es={class:"files"},Ns={key:0,class:"files"},Rs={key:1,class:"files"},Ds={class:"task-right split-result-actions"},$s=["onClick"],Fs=["onClick"],Ms={key:1,class:"result-subsection"},Ls={class:"task-list clean-result-list"},Os={class:"left split-result-main"},Us=["title"],As={class:"files"},xs={key:0,class:"files"},Bs={key:1,class:"files"},qs={class:"task-right split-result-actions"},Vs=["onClick"],Ks=["onClick"],js=he({__name:"BrandProductRiskTab",setup(Js){const $=v(""),X=v([]),dt=v([]),h=v([]),q=v(!1),V=v(!1),K=v(!1),Y=v(!1),Z=v(!1),g=v(""),j=v(""),ft=[{code:"DE",label:"德国"},{code:"UK",label:"英国"},{code:"FR",label:"法国"},{code:"IT",label:"意大利"},{code:"ES",label:"西班牙"}],p=v(["DE","UK","FR","IT","ES"]),tt=v("SearchSuppressed"),F=v(null),et=v(!1),st=v(!1);let N=null;function vt(t){return ft.find(s=>s.code===t)?.label??t}const At=z(()=>{const t=p.value,e=new Set(t),s=t.map(o=>({code:o,label:vt(o)})),l=ft.filter(o=>!e.has(o.code)).map(o=>({code:o.code,label:o.label}));return[...s,...l]});function xt(t){return p.value.includes(t)}function ht(t){return p.value.length===1&&p.value[0]===t}function Bt(t,e){const s=e.target;if(s){if(!s.checked&&ht(t)){s.checked=!0,u.warning("至少保留 1 个国家");return}qt(t,s.checked)}}function qt(t,e){if(st.value=!0,e)p.value.includes(t)||(p.value=[...p.value,t]);else{if(p.value.length<=1){u.warning("至少保留 1 个国家");return}p.value=p.value.filter(s=>s!==t)}pt()}function Vt(t){F.value=t}function Kt(){F.value=null}function jt(t){const e=F.value;if(F.value=null,e==null||e===t)return;st.value=!0;const s=[...p.value],[l]=s.splice(e,1);s.splice(t,0,l),p.value=s,pt()}function pt(){N&&clearTimeout(N),N=setTimeout(()=>{N=null,Ht()},450)}async function Ht(){if(!(p.value.length<1)){et.value=!0;try{await Ce(p.value)}catch(t){u.error(t instanceof Error?t.message:"保存国家顺序失败")}finally{et.value=!1}}}async function Jt(){try{const t=await Te();if(st.value)return;t?.country_codes?.length&&(p.value=[...t.country_codes])}catch{}}const M=v({candidateCount:0,processedTaskCount:0,successTaskCount:0,failedTaskCount:0}),T=v([]),y=v([]),P=v({}),m=v({}),b=v(null),at=v(!1);function H(){return typeof window<"u"&&window.localStorage.getItem("uid")||"0"}function yt(){return`product-risk:tasks:${H()}`}function gt(){return`product-risk:task-status:${H()}`}function kt(){return`product-risk:tasks-batch-snapshot:${H()}`}function mt(){return`product-risk:matched-items:${H()}`}function J(t,e,s){if(!(typeof window>"u"))try{s?window.localStorage.removeItem(t):window.localStorage.setItem(t,JSON.stringify(e))}catch{}}function Gt(){try{const t=typeof window<"u"?window.localStorage.getItem(gt()):null;if(!t)return;const e=JSON.parse(t),s={};for(const[l,o]of Object.entries(e)){const r=Number(l);r>0&&typeof o=="string"&&(s[r]=o)}P.value=s}catch{}}function nt(){J(gt(),P.value,Object.keys(P.value).length===0)}function Qt(){try{const t=typeof window<"u"?window.localStorage.getItem(kt()):null;if(!t)return;const e=JSON.parse(t),s={};for(const[l,o]of Object.entries(e)){const r=Number(l);r>0&&o&&typeof o=="object"&&(s[r]=o)}m.value=s}catch{}}function G(){J(kt(),m.value,Object.keys(m.value).length===0)}function Wt(){try{const t=typeof window<"u"?window.localStorage.getItem(mt()):null;if(!t)return;const e=JSON.parse(t);Array.isArray(e)&&(h.value=e)}catch{}}function L(){J(mt(),h.value,h.value.length===0)}function O(t){const e=(t.shopName||"").trim(),s=t.shopId??"";return`${e}${s}`}function wt(t){const e=t instanceof Error?t.message:String(t||"");return/记录不存在|任务不存在|不存在|已删除|not\s*found|404/i.test(e)}function U(t){if(!t.length)return;const e=new Set(t.map(s=>O(s)));h.value=h.value.filter(s=>!e.has(O(s))),L()}function zt(t){T.value=T.value.filter(e=>!(t.resultId!=null&&e.resultId===t.resultId||t.taskId!=null&&e.taskId===t.taskId))}async function Xt(t){const e=O(t),s=[...h.value];h.value=h.value.filter(o=>O(o)!==e),L();const l=(t.shopName||"").trim();if(!l){u.success("已从匹配结果中移除");return}try{(await Pe(l))?.removed&&(await E(),await S(),A()),u.success("已从匹配结果中移除")}catch(o){if(wt(o)){await E(),await S(),A(),u.success("后端记录已不存在,已同步移除本地记录");return}h.value=s,L(),u.error(o instanceof Error?o.message:"同步后端失败")}}function A(){for(const t of[...y.value])T.value.some(s=>s.taskId===t)||R(t)}async function _t(t){try{if(t.resultId!=null&&t.resultId>0)await Ee(t.resultId);else if(t.taskId!=null&&t.taskId>0)await Ne(t.taskId);else{u.warning("无法删除:缺少记录标识");return}t.taskId!=null&&t.taskId>0&&R(t.taskId),U([t]),await E(),await S(),A(),u.success("已删除")}catch(e){if(wt(e)){t.taskId!=null&&t.taskId>0&&R(t.taskId),U([t]),zt(t),await S(),A(),u.success("后端记录已不存在,已同步移除本地记录");return}u.error(e instanceof Error?e.message:"删除失败")}}function Yt(){try{const t=typeof window<"u"?window.localStorage.getItem(yt()):null;if(!t){y.value=[];return}const e=JSON.parse(t);y.value=Array.isArray(e)?e.filter(s=>typeof s=="number"):[]}catch{y.value=[]}}function bt(){J(yt(),y.value,y.value.length===0)}function Zt(t){y.value.includes(t)||(y.value=[...y.value,t],bt())}function R(t){if(y.value=y.value.filter(e=>e!==t),bt(),delete P.value[t],nt(),m.value[t]){const e={...m.value};delete e[t],m.value=e,G()}}function te(t){dt.value=t||[]}async function S(){try{M.value=await Re()}catch{}}async function ot(){try{X.value=await De(),await S()}catch(t){u.error(t instanceof Error?t.message:"加载备选失败")}}async function E(){try{T.value=(await $e()).items||[]}catch{T.value=[]}}function St(t){return t&&P.value[t]||""}function It(t){const e=St(t);return e==="SUCCESS"||e==="FAILED"}const lt=z(()=>{const t=T.value.filter(s=>s.taskId&&y.value.includes(s.taskId)&&!It(s.taskId)),e=new Set(t.map(s=>s.taskId).filter(s=>typeof s=="number"));for(const s of y.value){if(e.has(s))continue;const r=(m.value[s]?.items||[])[0];r&&t.push(r)}return t}),rt=z(()=>T.value.filter(t=>!t.taskId||!y.value.includes(t.taskId)||It(t.taskId))),ee=z(()=>lt.value.length>0||rt.value.length>0),se=["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"];function ut(t){return new Promise(e=>{window.setTimeout(()=>e(),t)})}function Ct(t){const e=(t instanceof Error?t.message:String(t||"")).toLowerCase();return se.some(s=>e.includes(s.toLowerCase()))}async function ae(t,e=10){let s=0;for(;;)try{return await Ue(t)}catch(l){if(s+=1,!Ct(l)||s>=e)throw l;g.value=`后端服务暂时不可用,正在重试创建任务(${s}/${e})...`,await ut(x())}}async function Tt(){const t=y.value.filter(e=>e>0);if(t.length)try{const e=await Ot(t);let s=!1;const l={...m.value};for(const o of e.items||[]){const r=o.task?.id,i=o.task?.status;if(typeof r=="number"&&r>0){const a=l[r];l[r]=a?{...a,task:{...a.task||{},...o.task||{}}}:o,i&&(P.value[r]=i,(i==="SUCCESS"||i==="FAILED")&&(R(r),s=!0))}}m.value=l,G(),nt(),s&&(await E(),await S())}catch{}}function x(){return Ae()}function Pt(t=!1){if(b.value){if(!t)return;window.clearTimeout(b.value),b.value=null}const e=async()=>{if(b.value=null,at.value){Pt();return}if(y.value.length){at.value=!0;try{await Tt()}finally{at.value=!1}y.value.length>0&&(b.value=window.setTimeout(e,x()))}};t?e():b.value=window.setTimeout(e,x())}function it(t=!1){b.value&&!t||Pt(t)}function ne(){b.value&&(window.clearTimeout(b.value),b.value=null)}async function oe(t){let e=0;const s=30;for(;;){try{const l=await Ot([t]);e>0&&(g.value=`任务 ${t} 后端已恢复,继续等待执行结果...`),e=0;const o=(l.items||[]).find(i=>i.task?.id===t),r=o?.task?.status||"";if(o){const i=m.value[t];m.value={...m.value,[t]:i?{...i,task:{...i.task||{},...o.task||{}}}:o},G()}if(r&&(P.value[t]=r,nt()),r==="SUCCESS"||r==="FAILED")return R(t),await E(),await S(),r}catch(l){if(!Ct(l))throw l;if(e+=1,e>=s)throw new Error(`任务 ${t} 等待后端恢复超时,请稍后手动刷新查看状态`);g.value=`任务 ${t} 运行中,正在等待后端服务恢复(${e}/${s})...`,(e===1||e%5===0)&&u.warning(`任务 ${t} 运行中,后端服务暂时不可用,正在自动重试`),await ut(x());continue}await ut(x())}}async function Et(){const t=$.value.trim();if(!t){u.warning("请输入店铺名称");return}q.value=!0;try{await Fe(t),$.value="",await ot(),u.success("已加入备选")}catch(e){u.error(e instanceof Error?e.message:"保存失败")}finally{q.value=!1}}async function le(t){try{await Me(t.id),await ot(),h.value=[],L(),u.success("已删除")}catch(e){u.error(e instanceof Error?e.message:"删除失败")}}function re(){const t=new Set,e=$.value.trim();e&&t.add(e);for(const s of dt.value)s?.shop_name?.trim()&&t.add(s.shop_name.trim());return[...t]}function ue(t,e){const s=new Map;for(const r of e){const i=(r.shopName||"").trim();i&&s.set(i,r)}const l=new Set,o=[];for(const r of t){const i=(r.shopName||"").trim();i&&s.has(i)?(o.push(s.get(i)),l.add(i)):o.push(r)}for(const r of e){const i=(r.shopName||"").trim();if(!i){o.push(r);continue}l.has(i)||(o.push(r),l.add(i))}return o}async function ie(){const t=re();if(!t.length){u.warning("请勾选备选店铺,或在输入框中填写店名(可与勾选合并)");return}V.value=!0;try{const s=(await Le(t)).items||[];h.value=ue(h.value,s),L(),Z.value&&Ft(),s.length?u.success(`本次匹配 ${s.length} 个店铺名,表格共 ${h.value.length} 条`):u.warning("未返回匹配结果")}catch(e){u.error(e instanceof Error?e.message:"匹配失败")}finally{V.value=!1}}function ct(t){const e=t.taskId;return e?St(e)||t.taskStatus||"":t.taskStatus||""}function Nt(t){const e=ct(t);return e==="SUCCESS"?"已完成":e==="FAILED"?"失败":e==="RUNNING"?"执行中":t.success?"已完成":"等待中"}function Rt(t){const e=ct(t);return e==="SUCCESS"||t.success?"success":e==="FAILED"?"failed":"running"}function Dt(t){return!t.resultId||!t.fileReady&&!t.downloadUrl?!1:ct(t)==="SUCCESS"||t.success===!0}async function $t(t){if(!t.resultId)return;const e=Ut(),s=Oe(t.resultId),l=t.outputFilename||`${t.shopName||"result"}.zip`;if(!e?.save_file_from_url_new){u.error("当前客户端未提供 save_file_from_url_new,无法下载文件");return}const o=await e.save_file_from_url_new(s,l);o.success?u.success(`已保存:${o.path||l}`):o.error&&o.error!=="用户取消"&&u.error(o.error)}function ce(t){const e=(t||"").trim();return{MATCHED:"已匹配",PENDING:"待匹配",CONFLICT:"需人工确认",INDEX_STALE:"索引过期"}[e]||e||"—"}function de(t){const e=(t.matchMessage||"").trim();return e||(t.matched&&t.matchStatus==="MATCHED"?"紫鸟索引已命中,可推送队列;打开店铺地址由 Python 侧处理":t.matched?"已关联索引,请结合状态列查看是否可推送":"未命中或未就绪,请检查店铺名与索引刷新")}async function fe(){Z.value=!0,await Ft()}function ve(){return h.value.find(t=>t.matched)}async function Ft(){if(Y.value)return;if(!h.value.length){u.warning("请先匹配店铺");return}const t=Ut();if(!t?.enqueue_json){u.error("当前环境未启用 pywebview enqueue_json");return}if(!h.value.filter(o=>o.matched).length){u.warning("没有已匹配的店铺可推送");return}Y.value=!0,K.value=!0,j.value="";let s=0,l=0;try{let o=0;for(;Z.value;){const r=ve();if(!r)break;o+=1;try{const i=await ae([r]),a=i.taskId;m.value={...m.value,[a]:{task:{id:a,status:"RUNNING"},items:i.items}},G(),Zt(a),it(!0);const w={type:"product-risk-resolve-run",ts:Date.now(),data:{taskId:a,items:[r],country_codes:[...p.value],risk_listing_filter:tt.value}};j.value=JSON.stringify(w,null,2);const Q=await t.enqueue_json(w);if(!Q?.success){R(a),l+=1,g.value="第 "+o+" 条推送失败:"+(Q?.error||"未知错误")+",已自动继续下一条",u.error(g.value),U([r]);continue}if(U([r]),g.value="任务 "+a+" 已入队,等待执行完成...",await oe(a)!=="SUCCESS"){l+=1,g.value="任务 "+a+" 执行失败,已自动继续下一条",u.error(g.value);continue}s+=1,g.value="任务 "+a+" 已完成"}catch(i){l+=1,g.value="第 "+o+" 条任务处理失败,已自动继续下一条:"+(i instanceof Error?i.message:"未知错误"),u.error(g.value),U([r]);continue}}(s>0||l>0)&&u.success("店铺推送已完成:成功 "+s+" 条,失败 "+l+" 条"),await E(),it(!0)}catch(o){g.value=o instanceof Error?o.message:"推送异常",u.error(g.value)}finally{Y.value=!1,K.value=!1}}return pe(()=>{Yt(),Gt(),Qt(),Wt(),ot().catch(()=>{}),Jt().catch(()=>{}),E().then(()=>(A(),Tt())).catch(()=>{}),S().catch(()=>{}),y.value.length&&it(!0)}),ye(()=>{ne(),N&&clearTimeout(N)}),(t,e)=>{const s=me,l=we,o=_e,r=Se,i=Ie;return c(),d("div",Ke,[k(ge,{active:"product-risk"}),n("div",je,[n("aside",He,[e[7]||(e[7]=n("div",{class:"section-title"},"店铺名称",-1)),n("div",Je,[e[3]||(e[3]=n("div",{class:"hint"},"输入店铺名后点「确认」加入下方备选区(按当前登录用户保存)。仅索引可命中的店铺可入库。勾选备选后点「匹配店铺」,再「推送到 Python 队列」。",-1)),n("div",Ge,[k(s,{modelValue:$.value,"onUpdate:modelValue":e[0]||(e[0]=a=>$.value=a),clearable:"",placeholder:"请输入店铺名称",onKeyup:ke(Et,["enter"])},null,8,["modelValue"]),n("button",{type:"button",class:"opt-btn",disabled:q.value,onClick:Et},f(q.value?"保存中…":"确认"),9,Qe)])]),e[8]||(e[8]=n("div",{class:"section-title"},"备选区域",-1)),X.value.length?(c(),d("div",ze,[k(o,{data:X.value,"row-key":"id",height:"240",class:"candidate-table",onSelectionChange:te},{default:I(()=>[k(l,{type:"selection",width:"42"}),k(l,{prop:"shop_name",label:"店铺名","min-width":"120","show-overflow-tooltip":""}),k(l,{label:"操作",width:"72",align:"center"},{default:I(({row:a})=>[n("button",{type:"button",class:"link-danger",onClick:w=>le(a)},"删除",8,Xe)]),_:1})]),_:1},8,["data"])])):(c(),d("div",We,"暂无备选店铺,请先输入并确认")),e[9]||(e[9]=n("div",{class:"section-title"},"处理国家与顺序",-1)),e[10]||(e[10]=n("p",{class:"hint country-pref-hint"},[C(" 勾选需要处理的站点(可只选 2~3 国);上方勾选区"),n("strong",null,"先按已选顺序"),C("排列,其余未选国家排在后面。拖拽下方列表调整顺序后会与上方同步。设置会按当前登录用户保存。 ")],-1)),n("div",Ye,[(c(!0),d(D,null,B(At.value,a=>(c(),d("label",{key:a.code,class:"country-check-row"},[n("input",{type:"checkbox",class:"country-check-input",checked:xt(a.code),disabled:ht(a.code),onChange:w=>Bt(a.code,w)},null,40,Ze),n("span",ts,f(a.label)+"("+f(a.code)+")",1)]))),128))]),p.value.length?(c(),d("div",es,[e[5]||(e[5]=n("div",{class:"country-order-caption"},"已选顺序(拖拽 ⋮⋮ 调整)",-1)),n("div",ss,[(c(!0),d(D,null,B(p.value,(a,w)=>(c(),d("div",{key:a,class:W(["country-drag-row",{dragging:F.value===w}]),draggable:"true",onDragstart:Q=>Vt(w),onDragend:Kt,onDragover:e[1]||(e[1]=Mt(()=>{},["prevent"])),onDrop:Mt(Q=>jt(w),["prevent"])},[e[4]||(e[4]=n("span",{class:"drag-handle",title:"拖动排序"},"⋮⋮",-1)),n("span",ns,f(vt(a))+"("+f(a)+")",1)],42,as))),128))])])):_("",!0),et.value?(c(),d("div",os,"保存中…")):_("",!0),e[11]||(e[11]=n("div",{class:"section-title"},"商品列表筛选",-1)),e[12]||(e[12]=n("p",{class:"hint listing-filter-hint"},"与「推送到 Python 队列」一并下发,供 Python 区分处理场景。",-1)),n("div",ls,[k(i,{modelValue:tt.value,"onUpdate:modelValue":e[2]||(e[2]=a=>tt.value=a),class:"listing-filter-select",teleported:"",placeholder:"选择筛选类型"},{default:I(()=>[(c(!0),d(D,null,B(be(Ve),a=>(c(),Lt(r,{key:a.value,label:a.label,value:a.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),n("div",rs,[n("button",{type:"button",class:"btn-run",disabled:V.value,onClick:ie},f(V.value?"匹配中…":"匹配店铺"),9,us),n("button",{type:"button",class:"btn-run btn-queue",disabled:K.value||!h.value.length,onClick:fe},f(K.value?"推送中…":"推送到 Python 队列"),9,is)]),e[13]||(e[13]=n("p",{class:"loading-msg"},[C("与删除 ASIN 品牌相同:先创建任务,再按店铺"),n("strong",null,"逐条"),C("入队(每条 "),n("code",null,"data.items"),C(" 仅含一个店铺)。队列串行执行;Python 每处理完一店可 POST "),n("code",null,"/api/product-risk-resolve/tasks/{taskId}/result"),C("(可多次,每次可只含已完成的店铺);全部完成后任务结束。前端轮询任务状态。 ")],-1)),g.value?(c(),d("div",cs,[e[6]||(e[6]=n("div",{class:"section-title queue-debug-title"},"推送结果",-1)),n("div",ds,f(g.value),1),j.value?(c(),d("pre",fs,f(j.value),1)):_("",!0)])):_("",!0)]),n("section",vs,[e[22]||(e[22]=n("div",{class:"panel-header"},"匹配与任务",-1)),n("div",hs,[n("div",ps,[n("div",ys,[e[14]||(e[14]=n("span",{class:"summary-label"},"备选店铺数",-1)),n("strong",null,f(M.value.candidateCount),1)]),n("div",gs,[e[15]||(e[15]=n("span",{class:"summary-label"},"已结束任务",-1)),n("strong",null,f(M.value.processedTaskCount),1)]),n("div",ks,[e[16]||(e[16]=n("span",{class:"summary-label"},"成功任务",-1)),n("strong",null,f(M.value.successTaskCount),1)]),n("div",ms,[e[17]||(e[17]=n("span",{class:"summary-label"},"失败任务",-1)),n("strong",null,f(M.value.failedTaskCount),1)])]),e[21]||(e[21]=n("div",{class:"subsection-title"},"匹配结果",-1)),h.value.length?(c(),Lt(o,{key:1,data:h.value,"row-key":O,"highlight-current-row":!1,class:"result-table match-table"},{default:I(()=>[k(l,{prop:"shopName",label:"店铺名","min-width":"100"}),k(l,{label:"匹配",width:"72",align:"center"},{default:I(({row:a})=>[n("span",{class:W(a.matched?"ok":"fail")},f(a.matched?"是":"否"),3)]),_:1}),k(l,{prop:"shopId",label:"店铺ID","min-width":"120","show-overflow-tooltip":""}),k(l,{prop:"platform",label:"平台",width:"88","show-overflow-tooltip":""}),k(l,{prop:"companyName",label:"公司","min-width":"100","show-overflow-tooltip":""}),k(l,{label:"状态",width:"100","show-overflow-tooltip":""},{default:I(({row:a})=>[C(f(ce(a.matchStatus)),1)]),_:1}),k(l,{label:"说明","min-width":"140","show-overflow-tooltip":""},{default:I(({row:a})=>[C(f(de(a)),1)]),_:1}),k(l,{label:"操作",width:"72",align:"center"},{default:I(({row:a})=>[n("button",{type:"button",class:"link-danger",onClick:w=>Xt(a)},"删除",8,_s)]),_:1})]),_:1},8,["data"])):(c(),d("div",ws,"完成「匹配店铺」后,在此展示紫鸟索引匹配结果,供核对后再推送队列。")),n("div",bs,[e[20]||(e[20]=n("div",{class:"result-list-header"},[n("span",null,"处理记录")],-1)),ee.value?(c(),d(D,{key:1},[lt.value.length?(c(),d("div",Is,[e[18]||(e[18]=n("div",{class:"result-subsection-title"},"当前任务",-1)),n("ul",Cs,[(c(!0),d(D,null,B(lt.value,a=>(c(),d("li",{key:`cur-${a.resultId}-${a.taskId}`,class:"task-item split-result-item"},[n("div",Ts,[n("span",{class:"id",title:a.shopName||""},f(a.shopName||"-"),9,Ps),n("div",Es,"任务 ID:"+f(a.taskId??"-"),1),a.platform?(c(),d("div",Ns,"平台:"+f(a.platform),1)):_("",!0),a.error?(c(),d("div",Rs,"错误:"+f(a.error),1)):_("",!0)]),n("div",Ds,[n("span",{class:W(["status",Rt(a)])},f(Nt(a)),3),Dt(a)?(c(),d("button",{key:0,type:"button",class:"download",onClick:w=>$t(a)}," 下载 ",8,$s)):_("",!0),n("button",{type:"button",class:"btn-delete",onClick:w=>_t(a)},"删除",8,Fs)])]))),128))])])):_("",!0),rt.value.length?(c(),d("div",Ms,[e[19]||(e[19]=n("div",{class:"result-subsection-title"},"历史记录",-1)),n("ul",Ls,[(c(!0),d(D,null,B(rt.value,a=>(c(),d("li",{key:`his-${a.resultId}-${a.taskId}`,class:"task-item split-result-item"},[n("div",Os,[n("span",{class:"id",title:a.shopName||""},f(a.shopName||"-"),9,Us),n("div",As,"任务 ID:"+f(a.taskId??"-"),1),a.outputFilename?(c(),d("div",xs,"文件:"+f(a.outputFilename),1)):_("",!0),a.error?(c(),d("div",Bs,"错误:"+f(a.error),1)):_("",!0)]),n("div",qs,[n("span",{class:W(["status",Rt(a)])},f(Nt(a)),3),Dt(a)?(c(),d("button",{key:0,type:"button",class:"download",onClick:w=>$t(a)}," 下载 ",8,Vs)):_("",!0),n("button",{type:"button",class:"btn-delete",onClick:w=>_t(a)},"删除",8,Ks)])]))),128))])])):_("",!0)],64)):(c(),d("div",Ss,"暂无处理记录。推送队列并等待 Python 回传后,将在此显示下载链接。"))])])])])])}}}),Hs=xe(js,[["__scopeId","data-v-466a311b"]]);Be(Hs).use(qe).mount("#app"); diff --git a/new_web_source/assets/pywebview-C66x_2Dh.js b/new_web_source/assets/pywebview-C66x_2Dh.js new file mode 100644 index 0000000..627e92f --- /dev/null +++ b/new_web_source/assets/pywebview-C66x_2Dh.js @@ -0,0 +1,55 @@ +(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const o of document.querySelectorAll('link[rel="modulepreload"]'))a(o);new MutationObserver(o=>{for(const s of o)if(s.type==="childList")for(const r of s.addedNodes)r.tagName==="LINK"&&r.rel==="modulepreload"&&a(r)}).observe(document,{childList:!0,subtree:!0});function n(o){const s={};return o.integrity&&(s.integrity=o.integrity),o.referrerPolicy&&(s.referrerPolicy=o.referrerPolicy),o.crossOrigin==="use-credentials"?s.credentials="include":o.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function a(o){if(o.ep)return;o.ep=!0;const s=n(o);fetch(o.href,s)}})();function Kh(e){const t=Object.create(null);for(const n of e.split(","))t[n]=1;return n=>n in t}const cn={},Xr=[],Dt=()=>{},bw=()=>!1,Cd=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&(e.charCodeAt(2)>122||e.charCodeAt(2)<97),Wh=e=>e.startsWith("onUpdate:"),Pn=Object.assign,jh=(e,t)=>{const n=e.indexOf(t);n>-1&&e.splice(n,1)},Ax=Object.prototype.hasOwnProperty,Rt=(e,t)=>Ax.call(e,t),ye=Array.isArray,Jr=e=>Ui(e)==="[object Map]",kd=e=>Ui(e)==="[object Set]",As=e=>Ui(e)==="[object Date]",Ve=e=>typeof e=="function",Le=e=>typeof e=="string",Xa=e=>typeof e=="symbol",nt=e=>e!==null&&typeof e=="object",vr=e=>(nt(e)||Ve(e))&&Ve(e.then)&&Ve(e.catch),yw=Object.prototype.toString,Ui=e=>yw.call(e),Lx=e=>Ui(e).slice(8,-1),mi=e=>Ui(e)==="[object Object]",Ed=e=>Le(e)&&e!=="NaN"&&e[0]!=="-"&&""+parseInt(e,10)===e,ei=Kh(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted"),xd=e=>{const t=Object.create(null);return(n=>t[n]||(t[n]=e(n)))},Dx=/-\w/g,Fn=xd(e=>e.replace(Dx,t=>t.slice(1).toUpperCase())),Bx=/\B([A-Z])/g,cs=xd(e=>e.replace(Bx,"-$1").toLowerCase()),qi=xd(e=>e.charAt(0).toUpperCase()+e.slice(1)),ti=xd(e=>e?`on${qi(e)}`:""),So=(e,t)=>!Object.is(e,t),ac=(e,...t)=>{for(let n=0;n{Object.defineProperty(e,t,{configurable:!0,enumerable:!1,writable:a,value:n})},Uh=e=>{const t=parseFloat(e);return isNaN(t)?e:t},Fx=e=>{const t=Le(e)?Number(e):NaN;return isNaN(t)?e:t};let ig;const Td=()=>ig||(ig=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{});function Ke(e){if(ye(e)){const t={};for(let n=0;n{if(n){const a=n.split(zx);a.length>1&&(t[a[0].trim()]=a[1].trim())}}),t}function T(e){let t="";if(Le(e))t=e;else if(ye(e))for(let n=0;nmr(n,t))}const kw=e=>!!(e&&e.__v_isRef===!0),Se=e=>Le(e)?e:e==null?"":ye(e)||nt(e)&&(e.toString===yw||!Ve(e.toString))?kw(e)?Se(e.value):JSON.stringify(e,Ew,2):String(e),Ew=(e,t)=>kw(t)?Ew(e,t.value):Jr(t)?{[`Map(${t.size})`]:[...t.entries()].reduce((n,[a,o],s)=>(n[xf(a,s)+" =>"]=o,n),{})}:kd(t)?{[`Set(${t.size})`]:[...t.values()].map(n=>xf(n))}:Xa(t)?xf(t):nt(t)&&!ye(t)&&!mi(t)?String(t):t,xf=(e,t="")=>{var n;return Xa(e)?`Symbol(${(n=e.description)!=null?n:t})`:e};let Yn;class xw{constructor(t=!1){this.detached=t,this._active=!0,this._on=0,this.effects=[],this.cleanups=[],this._isPaused=!1,this.__v_skip=!0,this.parent=Yn,!t&&Yn&&(this.index=(Yn.scopes||(Yn.scopes=[])).push(this)-1)}get active(){return this._active}pause(){if(this._active){this._isPaused=!0;let t,n;if(this.scopes)for(t=0,n=this.scopes.length;t0&&--this._on===0&&(Yn=this.prevScope,this.prevScope=void 0)}stop(t){if(this._active){this._active=!1;let n,a;for(n=0,a=this.effects.length;n0)return;if(ai){let t=ai;for(ai=void 0;t;){const n=t.next;t.next=void 0,t.flags&=-9,t=n}}let e;for(;ni;){let t=ni;for(ni=void 0;t;){const n=t.next;if(t.next=void 0,t.flags&=-9,t.flags&1)try{t.trigger()}catch(a){e||(e=a)}t=n}}if(e)throw e}function Iw(e){for(let t=e.deps;t;t=t.nextDep)t.version=-1,t.prevActiveLink=t.dep.activeLink,t.dep.activeLink=t}function Pw(e){let t,n=e.depsTail,a=n;for(;a;){const o=a.prevDep;a.version===-1?(a===n&&(n=o),Gh(a),Yx(a)):t=a,a.dep.activeLink=a.prevActiveLink,a.prevActiveLink=void 0,a=o}e.deps=t,e.depsTail=n}function yp(e){for(let t=e.deps;t;t=t.nextDep)if(t.dep.version!==t.version||t.dep.computed&&(Mw(t.dep.computed)||t.dep.version!==t.version))return!0;return!!e._dirty}function Mw(e){if(e.flags&4&&!(e.flags&16)||(e.flags&=-17,e.globalVersion===gi)||(e.globalVersion=gi,!e.isSSR&&e.flags&128&&(!e.deps&&!e._dirty||!yp(e))))return;e.flags|=2;const t=e.dep,n=pn,a=Ua;pn=e,Ua=!0;try{Iw(e);const o=e.fn(e._value);(t.version===0||So(o,e._value))&&(e.flags|=128,e._value=o,t.version++)}catch(o){throw t.version++,o}finally{pn=n,Ua=a,Pw(e),e.flags&=-3}}function Gh(e,t=!1){const{dep:n,prevSub:a,nextSub:o}=e;if(a&&(a.nextSub=o,e.prevSub=void 0),o&&(o.prevSub=a,e.nextSub=void 0),n.subs===e&&(n.subs=a,!a&&n.computed)){n.computed.flags&=-5;for(let s=n.computed.deps;s;s=s.nextDep)Gh(s,!0)}!t&&!--n.sc&&n.map&&n.map.delete(n.key)}function Yx(e){const{prevDep:t,nextDep:n}=e;t&&(t.nextDep=n,e.prevDep=void 0),n&&(n.prevDep=t,e.nextDep=void 0)}let Ua=!0;const _w=[];function ns(){_w.push(Ua),Ua=!1}function as(){const e=_w.pop();Ua=e===void 0?!0:e}function ug(e){const{cleanup:t}=e;if(e.cleanup=void 0,t){const n=pn;pn=void 0;try{t()}finally{pn=n}}}let gi=0;class Gx{constructor(t,n){this.sub=t,this.dep=n,this.version=n.version,this.nextDep=this.prevDep=this.nextSub=this.prevSub=this.prevActiveLink=void 0}}class Xh{constructor(t){this.computed=t,this.version=0,this.activeLink=void 0,this.subs=void 0,this.map=void 0,this.key=void 0,this.sc=0,this.__v_skip=!0}track(t){if(!pn||!Ua||pn===this.computed)return;let n=this.activeLink;if(n===void 0||n.sub!==pn)n=this.activeLink=new Gx(pn,this),pn.deps?(n.prevDep=pn.depsTail,pn.depsTail.nextDep=n,pn.depsTail=n):pn.deps=pn.depsTail=n,Aw(n);else if(n.version===-1&&(n.version=this.version,n.nextDep)){const a=n.nextDep;a.prevDep=n.prevDep,n.prevDep&&(n.prevDep.nextDep=a),n.prevDep=pn.depsTail,n.nextDep=void 0,pn.depsTail.nextDep=n,pn.depsTail=n,pn.deps===n&&(pn.deps=a)}return n}trigger(t){this.version++,gi++,this.notify(t)}notify(t){qh();try{for(let n=this.subs;n;n=n.prevSub)n.sub.notify()&&n.sub.dep.notify()}finally{Yh()}}}function Aw(e){if(e.dep.sc++,e.sub.flags&4){const t=e.dep.computed;if(t&&!e.dep.subs){t.flags|=20;for(let a=t.deps;a;a=a.nextDep)Aw(a)}const n=e.dep.subs;n!==e&&(e.prevSub=n,n&&(n.nextSub=e)),e.dep.subs=e}}const Dc=new WeakMap,ur=Symbol(""),wp=Symbol(""),bi=Symbol("");function Xn(e,t,n){if(Ua&&pn){let a=Dc.get(e);a||Dc.set(e,a=new Map);let o=a.get(n);o||(a.set(n,o=new Xh),o.map=a,o.key=n),o.track()}}function Uo(e,t,n,a,o,s){const r=Dc.get(e);if(!r){gi++;return}const l=u=>{u&&u.trigger()};if(qh(),t==="clear")r.forEach(l);else{const u=ye(e),c=u&&Ed(n);if(u&&n==="length"){const d=Number(a);r.forEach((f,v)=>{(v==="length"||v===bi||!Xa(v)&&v>=d)&&l(f)})}else switch((n!==void 0||r.has(void 0))&&l(r.get(n)),c&&l(r.get(bi)),t){case"add":u?c&&l(r.get("length")):(l(r.get(ur)),Jr(e)&&l(r.get(wp)));break;case"delete":u||(l(r.get(ur)),Jr(e)&&l(r.get(wp)));break;case"set":Jr(e)&&l(r.get(ur));break}}Yh()}function Xx(e,t){const n=Dc.get(e);return n&&n.get(t)}function Lr(e){const t=qt(e);return t===e?t:(Xn(t,"iterate",bi),Oa(e)?t:t.map(Ja))}function $d(e){return Xn(e=qt(e),"iterate",bi),e}function yo(e,t){return os(e)?il(cr(e)?Ja(t):t):Ja(t)}const Jx={__proto__:null,[Symbol.iterator](){return $f(this,Symbol.iterator,e=>yo(this,e))},concat(...e){return Lr(this).concat(...e.map(t=>ye(t)?Lr(t):t))},entries(){return $f(this,"entries",e=>(e[1]=yo(this,e[1]),e))},every(e,t){return Ho(this,"every",e,t,void 0,arguments)},filter(e,t){return Ho(this,"filter",e,t,n=>n.map(a=>yo(this,a)),arguments)},find(e,t){return Ho(this,"find",e,t,n=>yo(this,n),arguments)},findIndex(e,t){return Ho(this,"findIndex",e,t,void 0,arguments)},findLast(e,t){return Ho(this,"findLast",e,t,n=>yo(this,n),arguments)},findLastIndex(e,t){return Ho(this,"findLastIndex",e,t,void 0,arguments)},forEach(e,t){return Ho(this,"forEach",e,t,void 0,arguments)},includes(...e){return Of(this,"includes",e)},indexOf(...e){return Of(this,"indexOf",e)},join(e){return Lr(this).join(e)},lastIndexOf(...e){return Of(this,"lastIndexOf",e)},map(e,t){return Ho(this,"map",e,t,void 0,arguments)},pop(){return Fl(this,"pop")},push(...e){return Fl(this,"push",e)},reduce(e,...t){return cg(this,"reduce",e,t)},reduceRight(e,...t){return cg(this,"reduceRight",e,t)},shift(){return Fl(this,"shift")},some(e,t){return Ho(this,"some",e,t,void 0,arguments)},splice(...e){return Fl(this,"splice",e)},toReversed(){return Lr(this).toReversed()},toSorted(e){return Lr(this).toSorted(e)},toSpliced(...e){return Lr(this).toSpliced(...e)},unshift(...e){return Fl(this,"unshift",e)},values(){return $f(this,"values",e=>yo(this,e))}};function $f(e,t,n){const a=$d(e),o=a[t]();return a!==e&&!Oa(e)&&(o._next=o.next,o.next=()=>{const s=o._next();return s.done||(s.value=n(s.value)),s}),o}const Zx=Array.prototype;function Ho(e,t,n,a,o,s){const r=$d(e),l=r!==e&&!Oa(e),u=r[t];if(u!==Zx[t]){const f=u.apply(e,s);return l?Ja(f):f}let c=n;r!==e&&(l?c=function(f,v){return n.call(this,yo(e,f),v,e)}:n.length>2&&(c=function(f,v){return n.call(this,f,v,e)}));const d=u.call(r,c,a);return l&&o?o(d):d}function cg(e,t,n,a){const o=$d(e),s=o!==e&&!Oa(e);let r=n,l=!1;o!==e&&(s?(l=a.length===0,r=function(c,d,f){return l&&(l=!1,c=yo(e,c)),n.call(this,c,yo(e,d),f,e)}):n.length>3&&(r=function(c,d,f){return n.call(this,c,d,f,e)}));const u=o[t](r,...a);return l?yo(e,u):u}function Of(e,t,n){const a=qt(e);Xn(a,"iterate",bi);const o=a[t](...n);return(o===-1||o===!1)&&Od(n[0])?(n[0]=qt(n[0]),a[t](...n)):o}function Fl(e,t,n=[]){ns(),qh();const a=qt(e)[t].apply(e,n);return Yh(),as(),a}const Qx=Kh("__proto__,__v_isRef,__isVue"),Lw=new Set(Object.getOwnPropertyNames(Symbol).filter(e=>e!=="arguments"&&e!=="caller").map(e=>Symbol[e]).filter(Xa));function eT(e){Xa(e)||(e=String(e));const t=qt(this);return Xn(t,"has",e),t.hasOwnProperty(e)}class Dw{constructor(t=!1,n=!1){this._isReadonly=t,this._isShallow=n}get(t,n,a){if(n==="__v_skip")return t.__v_skip;const o=this._isReadonly,s=this._isShallow;if(n==="__v_isReactive")return!o;if(n==="__v_isReadonly")return o;if(n==="__v_isShallow")return s;if(n==="__v_raw")return a===(o?s?cT:zw:s?Vw:Fw).get(t)||Object.getPrototypeOf(t)===Object.getPrototypeOf(a)?t:void 0;const r=ye(t);if(!o){let u;if(r&&(u=Jx[n]))return u;if(n==="hasOwnProperty")return eT}const l=Reflect.get(t,n,Jt(t)?t:a);if((Xa(n)?Lw.has(n):Qx(n))||(o||Xn(t,"get",n),s))return l;if(Jt(l)){const u=r&&Ed(n)?l:l.value;return o&&nt(u)?gr(u):u}return nt(l)?o?gr(l):At(l):l}}class Bw extends Dw{constructor(t=!1){super(!1,t)}set(t,n,a,o){let s=t[n];const r=ye(t)&&Ed(n);if(!this._isShallow){const c=os(s);if(!Oa(a)&&!os(a)&&(s=qt(s),a=qt(a)),!r&&Jt(s)&&!Jt(a))return c||(s.value=a),!0}const l=r?Number(n)e,Pu=e=>Reflect.getPrototypeOf(e);function sT(e,t,n){return function(...a){const o=this.__v_raw,s=qt(o),r=Jr(s),l=e==="entries"||e===Symbol.iterator&&r,u=e==="keys"&&r,c=o[e](...a),d=n?Sp:t?il:Ja;return!t&&Xn(s,"iterate",u?wp:ur),Pn(Object.create(c),{next(){const{value:f,done:v}=c.next();return v?{value:f,done:v}:{value:l?[d(f[0]),d(f[1])]:d(f),done:v}}})}}function Mu(e){return function(...t){return e==="delete"?!1:e==="clear"?void 0:this}}function rT(e,t){const n={get(o){const s=this.__v_raw,r=qt(s),l=qt(o);e||(So(o,l)&&Xn(r,"get",o),Xn(r,"get",l));const{has:u}=Pu(r),c=t?Sp:e?il:Ja;if(u.call(r,o))return c(s.get(o));if(u.call(r,l))return c(s.get(l));s!==r&&s.get(o)},get size(){const o=this.__v_raw;return!e&&Xn(qt(o),"iterate",ur),o.size},has(o){const s=this.__v_raw,r=qt(s),l=qt(o);return e||(So(o,l)&&Xn(r,"has",o),Xn(r,"has",l)),o===l?s.has(o):s.has(o)||s.has(l)},forEach(o,s){const r=this,l=r.__v_raw,u=qt(l),c=t?Sp:e?il:Ja;return!e&&Xn(u,"iterate",ur),l.forEach((d,f)=>o.call(s,c(d),c(f),r))}};return Pn(n,e?{add:Mu("add"),set:Mu("set"),delete:Mu("delete"),clear:Mu("clear")}:{add(o){const s=qt(this),r=Pu(s),l=qt(o),u=!t&&!Oa(o)&&!os(o)?l:o;return r.has.call(s,u)||So(o,u)&&r.has.call(s,o)||So(l,u)&&r.has.call(s,l)||(s.add(u),Uo(s,"add",u,u)),this},set(o,s){!t&&!Oa(s)&&!os(s)&&(s=qt(s));const r=qt(this),{has:l,get:u}=Pu(r);let c=l.call(r,o);c||(o=qt(o),c=l.call(r,o));const d=u.call(r,o);return r.set(o,s),c?So(s,d)&&Uo(r,"set",o,s):Uo(r,"add",o,s),this},delete(o){const s=qt(this),{has:r,get:l}=Pu(s);let u=r.call(s,o);u||(o=qt(o),u=r.call(s,o)),l&&l.call(s,o);const c=s.delete(o);return u&&Uo(s,"delete",o,void 0),c},clear(){const o=qt(this),s=o.size!==0,r=o.clear();return s&&Uo(o,"clear",void 0,void 0),r}}),["keys","values","entries",Symbol.iterator].forEach(o=>{n[o]=sT(o,e,t)}),n}function Jh(e,t){const n=rT(e,t);return(a,o,s)=>o==="__v_isReactive"?!e:o==="__v_isReadonly"?e:o==="__v_raw"?a:Reflect.get(Rt(n,o)&&o in a?n:a,o,s)}const lT={get:Jh(!1,!1)},iT={get:Jh(!1,!0)},uT={get:Jh(!0,!1)};const Fw=new WeakMap,Vw=new WeakMap,zw=new WeakMap,cT=new WeakMap;function dT(e){switch(e){case"Object":case"Array":return 1;case"Map":case"Set":case"WeakMap":case"WeakSet":return 2;default:return 0}}function fT(e){return e.__v_skip||!Object.isExtensible(e)?0:dT(Lx(e))}function At(e){return os(e)?e:Qh(e,!1,nT,lT,Fw)}function Zh(e){return Qh(e,!1,oT,iT,Vw)}function gr(e){return Qh(e,!0,aT,uT,zw)}function Qh(e,t,n,a,o){if(!nt(e)||e.__v_raw&&!(t&&e.__v_isReactive))return e;const s=fT(e);if(s===0)return e;const r=o.get(e);if(r)return r;const l=new Proxy(e,s===2?a:n);return o.set(e,l),l}function cr(e){return os(e)?cr(e.__v_raw):!!(e&&e.__v_isReactive)}function os(e){return!!(e&&e.__v_isReadonly)}function Oa(e){return!!(e&&e.__v_isShallow)}function Od(e){return e?!!e.__v_raw:!1}function qt(e){const t=e&&e.__v_raw;return t?qt(t):e}function Eo(e){return!Rt(e,"__v_skip")&&Object.isExtensible(e)&&ww(e,"__v_skip",!0),e}const Ja=e=>nt(e)?At(e):e,il=e=>nt(e)?gr(e):e;function Jt(e){return e?e.__v_isRef===!0:!1}function M(e){return Hw(e,!1)}function Xt(e){return Hw(e,!0)}function Hw(e,t){return Jt(e)?e:new pT(e,t)}class pT{constructor(t,n){this.dep=new Xh,this.__v_isRef=!0,this.__v_isShallow=!1,this._rawValue=n?t:qt(t),this._value=n?t:Ja(t),this.__v_isShallow=n}get value(){return this.dep.track(),this._value}set value(t){const n=this._rawValue,a=this.__v_isShallow||Oa(t)||os(t);t=a?t:qt(t),So(t,n)&&(this._rawValue=t,this._value=a?t:Ja(t),this.dep.trigger())}}function oc(e){e.dep&&e.dep.trigger()}function i(e){return Jt(e)?e.value:e}function dg(e){return Ve(e)?e():i(e)}const hT={get:(e,t,n)=>t==="__v_raw"?e:i(Reflect.get(e,t,n)),set:(e,t,n,a)=>{const o=e[t];return Jt(o)&&!Jt(n)?(o.value=n,!0):Reflect.set(e,t,n,a)}};function Kw(e){return cr(e)?e:new Proxy(e,hT)}function Mn(e){const t=ye(e)?new Array(e.length):{};for(const n in e)t[n]=Ww(e,n);return t}class vT{constructor(t,n,a){this._object=t,this._key=n,this._defaultValue=a,this.__v_isRef=!0,this._value=void 0,this._raw=qt(t);let o=!0,s=t;if(!ye(t)||!Ed(String(n)))do o=!Od(s)||Oa(s);while(o&&(s=s.__v_raw));this._shallow=o}get value(){let t=this._object[this._key];return this._shallow&&(t=i(t)),this._value=t===void 0?this._defaultValue:t}set value(t){if(this._shallow&&Jt(this._raw[this._key])){const n=this._object[this._key];if(Jt(n)){n.value=t;return}}this._object[this._key]=t}get dep(){return Xx(this._raw,this._key)}}class mT{constructor(t){this._getter=t,this.__v_isRef=!0,this.__v_isReadonly=!0,this._value=void 0}get value(){return this._value=this._getter()}}function Vt(e,t,n){return Jt(e)?e:Ve(e)?new mT(e):nt(e)&&arguments.length>1?Ww(e,t,n):M(e)}function Ww(e,t,n){return new vT(e,t,n)}class gT{constructor(t,n,a){this.fn=t,this.setter=n,this._value=void 0,this.dep=new Xh(this),this.__v_isRef=!0,this.deps=void 0,this.depsTail=void 0,this.flags=16,this.globalVersion=gi-1,this.next=void 0,this.effect=this,this.__v_isReadonly=!n,this.isSSR=a}notify(){if(this.flags|=16,!(this.flags&8)&&pn!==this)return Rw(this,!0),!0}get value(){const t=this.dep.track();return Mw(this),t&&(t.version=this.dep.version),this._value}set value(t){this.setter&&this.setter(t)}}function bT(e,t,n=!1){let a,o;return Ve(e)?a=e:(a=e.get,o=e.set),new gT(a,o,n)}const _u={},Bc=new WeakMap;let Xs;function yT(e,t=!1,n=Xs){if(n){let a=Bc.get(n);a||Bc.set(n,a=[]),a.push(e)}}function wT(e,t,n=cn){const{immediate:a,deep:o,once:s,scheduler:r,augmentJob:l,call:u}=n,c=S=>o?S:Oa(S)||o===!1||o===0?qo(S,1):qo(S);let d,f,v,g,p=!1,h=!1;if(Jt(e)?(f=()=>e.value,p=Oa(e)):cr(e)?(f=()=>c(e),p=!0):ye(e)?(h=!0,p=e.some(S=>cr(S)||Oa(S)),f=()=>e.map(S=>{if(Jt(S))return S.value;if(cr(S))return c(S);if(Ve(S))return u?u(S,2):S()})):Ve(e)?t?f=u?()=>u(e,2):e:f=()=>{if(v){ns();try{v()}finally{as()}}const S=Xs;Xs=d;try{return u?u(e,3,[g]):e(g)}finally{Xs=S}}:f=Dt,t&&o){const S=f,C=o===!0?1/0:o;f=()=>qo(S(),C)}const m=Tw(),b=()=>{d.stop(),m&&m.active&&jh(m.effects,d)};if(s&&t){const S=t;t=(...C)=>{S(...C),b()}}let k=h?new Array(e.length).fill(_u):_u;const y=S=>{if(!(!(d.flags&1)||!d.dirty&&!S))if(t){const C=d.run();if(o||p||(h?C.some((E,$)=>So(E,k[$])):So(C,k))){v&&v();const E=Xs;Xs=d;try{const $=[C,k===_u?void 0:h&&k[0]===_u?[]:k,g];k=C,u?u(t,3,$):t(...$)}finally{Xs=E}}}else d.run()};return l&&l(y),d=new Ow(f),d.scheduler=r?()=>r(y,!1):y,g=S=>yT(S,!1,d),v=d.onStop=()=>{const S=Bc.get(d);if(S){if(u)u(S,4);else for(const C of S)C();Bc.delete(d)}},t?a?y(!0):k=d.run():r?r(y.bind(null,!0),!0):d.run(),b.pause=d.pause.bind(d),b.resume=d.resume.bind(d),b.stop=b,b}function qo(e,t=1/0,n){if(t<=0||!nt(e)||e.__v_skip||(n=n||new Map,(n.get(e)||0)>=t))return e;if(n.set(e,t),t--,Jt(e))qo(e.value,t,n);else if(ye(e))for(let a=0;a{qo(a,t,n)});else if(mi(e)){for(const a in e)qo(e[a],t,n);for(const a of Object.getOwnPropertySymbols(e))Object.prototype.propertyIsEnumerable.call(e,a)&&qo(e[a],t,n)}return e}function Yi(e,t,n,a){try{return a?e(...a):e()}catch(o){Nd(o,t,n)}}function Za(e,t,n,a){if(Ve(e)){const o=Yi(e,t,n,a);return o&&vr(o)&&o.catch(s=>{Nd(s,t,n)}),o}if(ye(e)){const o=[];for(let s=0;s>>1,o=la[a],s=yi(o);s=yi(n)?la.push(e):la.splice(CT(t),0,e),e.flags|=1,Uw()}}function Uw(){Fc||(Fc=jw.then(Yw))}function kT(e){ye(e)?Zr.push(...e):xs&&e.id===-1?xs.splice(Wr+1,0,e):e.flags&1||(Zr.push(e),e.flags|=1),Uw()}function fg(e,t,n=go+1){for(;nyi(n)-yi(a));if(Zr.length=0,xs){xs.push(...t);return}for(xs=t,Wr=0;Wre.id==null?e.flags&2?-1:1/0:e.id;function Yw(e){try{for(go=0;go{a._d&&Kc(-1);const s=Vc(t);let r;try{r=e(...o)}finally{Vc(s),a._d&&Kc(1)}return r};return a._n=!0,a._c=!0,a._d=!0,a}function ct(e,t){if(Kn===null)return e;const n=_d(Kn),a=e.dirs||(e.dirs=[]);for(let o=0;o1)return n&&Ve(t)?t.call(a&&a.proxy):t}}const ET=Symbol.for("v-scx"),xT=()=>_e(ET);function wa(e,t){return tv(e,null,t)}function le(e,t,n){return tv(e,t,n)}function tv(e,t,n=cn){const{immediate:a,deep:o,flush:s,once:r}=n,l=Pn({},n),u=t&&a||!t&&s!=="post";let c;if(Ci){if(s==="sync"){const g=xT();c=g.__watcherHandles||(g.__watcherHandles=[])}else if(!u){const g=()=>{};return g.stop=Dt,g.resume=Dt,g.pause=Dt,g}}const d=Jn;l.call=(g,p,h)=>Za(g,d,p,h);let f=!1;s==="post"?l.scheduler=g=>{qn(g,d&&d.suspense)}:s!=="sync"&&(f=!0,l.scheduler=(g,p)=>{p?g():ev(g)}),l.augmentJob=g=>{t&&(g.flags|=4),f&&(g.flags|=2,d&&(g.id=d.uid,g.i=d))};const v=wT(e,t,l);return Ci&&(c?c.push(v):u&&v()),v}function TT(e,t,n){const a=this.proxy,o=Le(e)?e.includes(".")?Xw(a,e):()=>a[e]:e.bind(a,a);let s;Ve(t)?s=t:(s=t.handler,n=t);const r=Xi(this),l=tv(o,s.bind(a),n);return r(),l}function Xw(e,t){const n=t.split(".");return()=>{let a=e;for(let o=0;oe.__isTeleport,oi=e=>e&&(e.disabled||e.disabled===""),pg=e=>e&&(e.defer||e.defer===""),hg=e=>typeof SVGElement<"u"&&e instanceof SVGElement,vg=e=>typeof MathMLElement=="function"&&e instanceof MathMLElement,Cp=(e,t)=>{const n=e&&e.to;return Le(n)?t?t(n):null:n},Qw={name:"Teleport",__isTeleport:!0,process(e,t,n,a,o,s,r,l,u,c){const{mc:d,pc:f,pbc:v,o:{insert:g,querySelector:p,createText:h,createComment:m}}=c,b=oi(t.props);let{shapeFlag:k,children:y,dynamicChildren:S}=t;if(e==null){const C=t.el=h(""),E=t.anchor=h("");g(C,n,a),g(E,n,a);const $=(R,N)=>{k&16&&d(y,R,N,o,s,r,l,u)},O=()=>{const R=t.target=Cp(t.props,p),N=kp(R,t,h,g);R&&(r!=="svg"&&hg(R)?r="svg":r!=="mathml"&&vg(R)&&(r="mathml"),o&&o.isCE&&(o.ce._teleportTargets||(o.ce._teleportTargets=new Set)).add(R),b||($(R,N),sc(t,!1)))};b&&($(n,E),sc(t,!0)),pg(t.props)?(t.el.__isMounted=!1,qn(()=>{O(),delete t.el.__isMounted},s)):O()}else{if(pg(t.props)&&e.el.__isMounted===!1){qn(()=>{Qw.process(e,t,n,a,o,s,r,l,u,c)},s);return}t.el=e.el,t.targetStart=e.targetStart;const C=t.anchor=e.anchor,E=t.target=e.target,$=t.targetAnchor=e.targetAnchor,O=oi(e.props),R=O?n:E,N=O?C:$;if(r==="svg"||hg(E)?r="svg":(r==="mathml"||vg(E))&&(r="mathml"),S?(v(e.dynamicChildren,S,R,o,s,r,l),cv(e,t,!0)):u||f(e,t,R,N,o,s,r,l,!1),b)O?t.props&&e.props&&t.props.to!==e.props.to&&(t.props.to=e.props.to):Au(t,n,C,c,1);else if((t.props&&t.props.to)!==(e.props&&e.props.to)){const A=t.target=Cp(t.props,p);A&&Au(t,A,null,c,0)}else O&&Au(t,E,$,c,1);sc(t,b)}},remove(e,t,n,{um:a,o:{remove:o}},s){const{shapeFlag:r,children:l,anchor:u,targetStart:c,targetAnchor:d,target:f,props:v}=e;if(f&&(o(c),o(d)),s&&o(u),r&16){const g=s||!oi(v);for(let p=0;p{e.isMounted=!0}),Bt(()=>{e.isUnmounting=!0}),e}const Pa=[Function,Array],t1={mode:String,appear:Boolean,persisted:Boolean,onBeforeEnter:Pa,onEnter:Pa,onAfterEnter:Pa,onEnterCancelled:Pa,onBeforeLeave:Pa,onLeave:Pa,onAfterLeave:Pa,onLeaveCancelled:Pa,onBeforeAppear:Pa,onAppear:Pa,onAfterAppear:Pa,onAppearCancelled:Pa},n1=e=>{const t=e.subTree;return t.component?n1(t.component):t},NT={name:"BaseTransition",props:t1,setup(e,{slots:t}){const n=ft(),a=e1();return()=>{const o=t.default&&nv(t.default(),!0);if(!o||!o.length)return;const s=a1(o),r=qt(e),{mode:l}=r;if(a.isLeaving)return Nf(s);const u=mg(s);if(!u)return Nf(s);let c=wi(u,r,a,n,f=>c=f);u.type!==mn&&br(u,c);let d=n.subTree&&mg(n.subTree);if(d&&d.type!==mn&&!Zs(d,u)&&n1(n).type!==mn){let f=wi(d,r,a,n);if(br(d,f),l==="out-in"&&u.type!==mn)return a.isLeaving=!0,f.afterLeave=()=>{a.isLeaving=!1,n.job.flags&8||n.update(),delete f.afterLeave,d=void 0},Nf(s);l==="in-out"&&u.type!==mn?f.delayLeave=(v,g,p)=>{const h=o1(a,d);h[String(d.key)]=d,v[bo]=()=>{g(),v[bo]=void 0,delete c.delayedLeave,d=void 0},c.delayedLeave=()=>{p(),delete c.delayedLeave,d=void 0}}:d=void 0}else d&&(d=void 0);return s}}};function a1(e){let t=e[0];if(e.length>1){for(const n of e)if(n.type!==mn){t=n;break}}return t}const RT=NT;function o1(e,t){const{leavingVNodes:n}=e;let a=n.get(t.type);return a||(a=Object.create(null),n.set(t.type,a)),a}function wi(e,t,n,a,o){const{appear:s,mode:r,persisted:l=!1,onBeforeEnter:u,onEnter:c,onAfterEnter:d,onEnterCancelled:f,onBeforeLeave:v,onLeave:g,onAfterLeave:p,onLeaveCancelled:h,onBeforeAppear:m,onAppear:b,onAfterAppear:k,onAppearCancelled:y}=t,S=String(e.key),C=o1(n,e),E=(R,N)=>{R&&Za(R,a,9,N)},$=(R,N)=>{const A=N[1];E(R,N),ye(R)?R.every(_=>_.length<=1)&&A():R.length<=1&&A()},O={mode:r,persisted:l,beforeEnter(R){let N=u;if(!n.isMounted)if(s)N=m||u;else return;R[bo]&&R[bo](!0);const A=C[S];A&&Zs(e,A)&&A.el[bo]&&A.el[bo](),E(N,[R])},enter(R){if(C[S]===e)return;let N=c,A=d,_=f;if(!n.isMounted)if(s)N=b||c,A=k||d,_=y||f;else return;let V=!1;R[Vl]=U=>{V||(V=!0,U?E(_,[R]):E(A,[R]),O.delayedLeave&&O.delayedLeave(),R[Vl]=void 0)};const z=R[Vl].bind(null,!1);N?$(N,[R,z]):z()},leave(R,N){const A=String(e.key);if(R[Vl]&&R[Vl](!0),n.isUnmounting)return N();E(v,[R]);let _=!1;R[bo]=z=>{_||(_=!0,N(),z?E(h,[R]):E(p,[R]),R[bo]=void 0,C[A]===e&&delete C[A])};const V=R[bo].bind(null,!1);C[A]=e,g?$(g,[R,V]):V()},clone(R){const N=wi(R,t,n,a,o);return o&&o(N),N}};return O}function Nf(e){if(Rd(e))return e=Ro(e),e.children=null,e}function mg(e){if(!Rd(e))return Zw(e.type)&&e.children?a1(e.children):e;if(e.component)return e.component.subTree;const{shapeFlag:t,children:n}=e;if(n){if(t&16)return n[0];if(t&32&&Ve(n.default))return n.default()}}function br(e,t){e.shapeFlag&6&&e.component?(e.transition=t,br(e.component.subTree,t)):e.shapeFlag&128?(e.ssContent.transition=t.clone(e.ssContent),e.ssFallback.transition=t.clone(e.ssFallback)):e.transition=t}function nv(e,t=!1,n){let a=[],o=0;for(let s=0;s1)for(let s=0;ssi(h,t&&(ye(t)?t[m]:t),n,a,o));return}if(Qr(a)&&!o){a.shapeFlag&512&&a.type.__asyncResolved&&a.component.subTree.component&&si(e,t,n,a.component.subTree);return}const s=a.shapeFlag&4?_d(a.component):a.el,r=o?null:s,{i:l,r:u}=e,c=t&&t.r,d=l.refs===cn?l.refs={}:l.refs,f=l.setupState,v=qt(f),g=f===cn?bw:h=>gg(d,h)?!1:Rt(v,h),p=(h,m)=>!(m&&gg(d,m));if(c!=null&&c!==u){if(bg(t),Le(c))d[c]=null,g(c)&&(f[c]=null);else if(Jt(c)){const h=t;p(c,h.k)&&(c.value=null),h.k&&(d[h.k]=null)}}if(Ve(u))Yi(u,l,12,[r,d]);else{const h=Le(u),m=Jt(u);if(h||m){const b=()=>{if(e.f){const k=h?g(u)?f[u]:d[u]:p()||!e.k?u.value:d[e.k];if(o)ye(k)&&jh(k,s);else if(ye(k))k.includes(s)||k.push(s);else if(h)d[u]=[s],g(u)&&(f[u]=d[u]);else{const y=[s];p(u,e.k)&&(u.value=y),e.k&&(d[e.k]=y)}}else h?(d[u]=r,g(u)&&(f[u]=r)):m&&(p(u,e.k)&&(u.value=r),e.k&&(d[e.k]=r))};if(r){const k=()=>{b(),zc.delete(e)};k.id=-1,zc.set(e,k),qn(k,n)}else bg(e),b()}}}function bg(e){const t=zc.get(e);t&&(t.flags|=8,zc.delete(e))}Td().requestIdleCallback;Td().cancelIdleCallback;const Qr=e=>!!e.type.__asyncLoader,Rd=e=>e.type.__isKeepAlive;function Gi(e,t){r1(e,"a",t)}function av(e,t){r1(e,"da",t)}function r1(e,t,n=Jn){const a=e.__wdc||(e.__wdc=()=>{let o=n;for(;o;){if(o.isDeactivated)return;o=o.parent}return e()});if(Id(t,a,n),n){let o=n.parent;for(;o&&o.parent;)Rd(o.parent.vnode)&&IT(a,t,n,o),o=o.parent}}function IT(e,t,n,a){const o=Id(t,e,a,!0);$l(()=>{jh(a[t],o)},n)}function Id(e,t,n=Jn,a=!1){if(n){const o=n[e]||(n[e]=[]),s=t.__weh||(t.__weh=(...r)=>{ns();const l=Xi(n),u=Za(t,n,e,r);return l(),as(),u});return a?o.unshift(s):o.push(s),s}}const ds=e=>(t,n=Jn)=>{(!Ci||e==="sp")&&Id(e,(...a)=>t(...a),n)},Pd=ds("bm"),ht=ds("m"),ov=ds("bu"),so=ds("u"),Bt=ds("bum"),$l=ds("um"),PT=ds("sp"),MT=ds("rtg"),_T=ds("rtc");function AT(e,t=Jn){Id("ec",e,t)}const sv="components",LT="directives";function It(e,t){return lv(sv,e,!0,t)||e}const l1=Symbol.for("v-ndc");function it(e){return Le(e)?lv(sv,e,!1)||e:e||l1}function rv(e){return lv(LT,e)}function lv(e,t,n=!0,a=!1){const o=Kn||Jn;if(o){const s=o.type;if(e===sv){const l=b$(s,!1);if(l&&(l===t||l===Fn(t)||l===qi(Fn(t))))return s}const r=yg(o[e]||s[e],t)||yg(o.appContext[e],t);return!r&&a?s:r}}function yg(e,t){return e&&(e[t]||e[Fn(t)]||e[qi(Fn(t))])}function yt(e,t,n,a){let o;const s=n,r=ye(e);if(r||Le(e)){const l=r&&cr(e);let u=!1,c=!1;l&&(u=!Oa(e),c=os(e),e=$d(e)),o=new Array(e.length);for(let d=0,f=e.length;dt(l,u,void 0,s));else{const l=Object.keys(e);o=new Array(l.length);for(let u=0,c=l.length;u{const s=a.fn(...o);return s&&(s.key=a.key),s}:a.fn)}return e}function ee(e,t,n={},a,o){if(Kn.ce||Kn.parent&&Qr(Kn.parent)&&Kn.parent.ce){const c=Object.keys(n).length>0;return t!=="default"&&(n.name=t),x(),oe(Fe,null,[Y("slot",n,a&&a())],c?-2:64)}let s=e[t];s&&s._c&&(s._d=!1),x();const r=s&&i1(s(n)),l=n.key||r&&r.key,u=oe(Fe,{key:(l&&!Xa(l)?l:`_${t}`)+(!r&&a?"_fb":"")},r||(a?a():[]),r&&e._===1?64:-2);return u.scopeId&&(u.slotScopeIds=[u.scopeId+"-s"]),s&&s._c&&(s._d=!0),u}function i1(e){return e.some(t=>Ut(t)?!(t.type===mn||t.type===Fe&&!i1(t.children)):!0)?e:null}function DT(e,t){const n={};for(const a in e)n[ti(a)]=e[a];return n}const Ep=e=>e?O1(e)?_d(e):Ep(e.parent):null,ri=Pn(Object.create(null),{$:e=>e,$el:e=>e.vnode.el,$data:e=>e.data,$props:e=>e.props,$attrs:e=>e.attrs,$slots:e=>e.slots,$refs:e=>e.refs,$parent:e=>Ep(e.parent),$root:e=>Ep(e.root),$host:e=>e.ce,$emit:e=>e.emit,$options:e=>d1(e),$forceUpdate:e=>e.f||(e.f=()=>{ev(e.update)}),$nextTick:e=>e.n||(e.n=Ne.bind(e.proxy)),$watch:e=>TT.bind(e)}),Rf=(e,t)=>e!==cn&&!e.__isScriptSetup&&Rt(e,t),BT={get({_:e},t){if(t==="__v_skip")return!0;const{ctx:n,setupState:a,data:o,props:s,accessCache:r,type:l,appContext:u}=e;if(t[0]!=="$"){const v=r[t];if(v!==void 0)switch(v){case 1:return a[t];case 2:return o[t];case 4:return n[t];case 3:return s[t]}else{if(Rf(a,t))return r[t]=1,a[t];if(o!==cn&&Rt(o,t))return r[t]=2,o[t];if(Rt(s,t))return r[t]=3,s[t];if(n!==cn&&Rt(n,t))return r[t]=4,n[t];xp&&(r[t]=0)}}const c=ri[t];let d,f;if(c)return t==="$attrs"&&Xn(e.attrs,"get",""),c(e);if((d=l.__cssModules)&&(d=d[t]))return d;if(n!==cn&&Rt(n,t))return r[t]=4,n[t];if(f=u.config.globalProperties,Rt(f,t))return f[t]},set({_:e},t,n){const{data:a,setupState:o,ctx:s}=e;return Rf(o,t)?(o[t]=n,!0):a!==cn&&Rt(a,t)?(a[t]=n,!0):Rt(e.props,t)||t[0]==="$"&&t.slice(1)in e?!1:(s[t]=n,!0)},has({_:{data:e,setupState:t,accessCache:n,ctx:a,appContext:o,props:s,type:r}},l){let u;return!!(n[l]||e!==cn&&l[0]!=="$"&&Rt(e,l)||Rf(t,l)||Rt(s,l)||Rt(a,l)||Rt(ri,l)||Rt(o.config.globalProperties,l)||(u=r.__cssModules)&&u[l])},defineProperty(e,t,n){return n.get!=null?e._.accessCache[t]=0:Rt(n,"value")&&this.set(e,t,n.value,null),Reflect.defineProperty(e,t,n)}};function hn(){return u1().slots}function fs(){return u1().attrs}function u1(e){const t=ft();return t.setupContext||(t.setupContext=R1(t))}function wg(e){return ye(e)?e.reduce((t,n)=>(t[n]=null,t),{}):e}let xp=!0;function FT(e){const t=d1(e),n=e.proxy,a=e.ctx;xp=!1,t.beforeCreate&&Sg(t.beforeCreate,e,"bc");const{data:o,computed:s,methods:r,watch:l,provide:u,inject:c,created:d,beforeMount:f,mounted:v,beforeUpdate:g,updated:p,activated:h,deactivated:m,beforeDestroy:b,beforeUnmount:k,destroyed:y,unmounted:S,render:C,renderTracked:E,renderTriggered:$,errorCaptured:O,serverPrefetch:R,expose:N,inheritAttrs:A,components:_,directives:V,filters:z}=t;if(c&&VT(c,a,null),r)for(const P in r){const I=r[P];Ve(I)&&(a[P]=I.bind(n))}if(o){const P=o.call(n,n);nt(P)&&(e.data=At(P))}if(xp=!0,s)for(const P in s){const I=s[P],L=Ve(I)?I.bind(n,n):Ve(I.get)?I.get.bind(n,n):Dt,D=!Ve(I)&&Ve(I.set)?I.set.bind(n):Dt,F=w({get:L,set:D});Object.defineProperty(a,P,{enumerable:!0,configurable:!0,get:()=>F.value,set:q=>F.value=q})}if(l)for(const P in l)c1(l[P],a,n,P);if(u){const P=Ve(u)?u.call(n):u;Reflect.ownKeys(P).forEach(I=>{St(I,P[I])})}d&&Sg(d,e,"c");function W(P,I){ye(I)?I.forEach(L=>P(L.bind(n))):I&&P(I.bind(n))}if(W(Pd,f),W(ht,v),W(ov,g),W(so,p),W(Gi,h),W(av,m),W(AT,O),W(_T,E),W(MT,$),W(Bt,k),W($l,S),W(PT,R),ye(N))if(N.length){const P=e.exposed||(e.exposed={});N.forEach(I=>{Object.defineProperty(P,I,{get:()=>n[I],set:L=>n[I]=L,enumerable:!0})})}else e.exposed||(e.exposed={});C&&e.render===Dt&&(e.render=C),A!=null&&(e.inheritAttrs=A),_&&(e.components=_),V&&(e.directives=V),R&&s1(e)}function VT(e,t,n=Dt){ye(e)&&(e=Tp(e));for(const a in e){const o=e[a];let s;nt(o)?"default"in o?s=_e(o.from||a,o.default,!0):s=_e(o.from||a):s=_e(o),Jt(s)?Object.defineProperty(t,a,{enumerable:!0,configurable:!0,get:()=>s.value,set:r=>s.value=r}):t[a]=s}}function Sg(e,t,n){Za(ye(e)?e.map(a=>a.bind(t.proxy)):e.bind(t.proxy),t,n)}function c1(e,t,n,a){let o=a.includes(".")?Xw(n,a):()=>n[a];if(Le(e)){const s=t[e];Ve(s)&&le(o,s)}else if(Ve(e))le(o,e.bind(n));else if(nt(e))if(ye(e))e.forEach(s=>c1(s,t,n,a));else{const s=Ve(e.handler)?e.handler.bind(n):t[e.handler];Ve(s)&&le(o,s,e)}}function d1(e){const t=e.type,{mixins:n,extends:a}=t,{mixins:o,optionsCache:s,config:{optionMergeStrategies:r}}=e.appContext,l=s.get(t);let u;return l?u=l:!o.length&&!n&&!a?u=t:(u={},o.length&&o.forEach(c=>Hc(u,c,r,!0)),Hc(u,t,r)),nt(t)&&s.set(t,u),u}function Hc(e,t,n,a=!1){const{mixins:o,extends:s}=t;s&&Hc(e,s,n,!0),o&&o.forEach(r=>Hc(e,r,n,!0));for(const r in t)if(!(a&&r==="expose")){const l=zT[r]||n&&n[r];e[r]=l?l(e[r],t[r]):t[r]}return e}const zT={data:Cg,props:kg,emits:kg,methods:Xl,computed:Xl,beforeCreate:ra,created:ra,beforeMount:ra,mounted:ra,beforeUpdate:ra,updated:ra,beforeDestroy:ra,beforeUnmount:ra,destroyed:ra,unmounted:ra,activated:ra,deactivated:ra,errorCaptured:ra,serverPrefetch:ra,components:Xl,directives:Xl,watch:KT,provide:Cg,inject:HT};function Cg(e,t){return t?e?function(){return Pn(Ve(e)?e.call(this,this):e,Ve(t)?t.call(this,this):t)}:t:e}function HT(e,t){return Xl(Tp(e),Tp(t))}function Tp(e){if(ye(e)){const t={};for(let n=0;nt==="modelValue"||t==="model-value"?e.modelModifiers:e[`${t}Modifiers`]||e[`${Fn(t)}Modifiers`]||e[`${cs(t)}Modifiers`];function qT(e,t,...n){if(e.isUnmounted)return;const a=e.vnode.props||cn;let o=n;const s=t.startsWith("update:"),r=s&&UT(a,t.slice(7));r&&(r.trim&&(o=n.map(d=>Le(d)?d.trim():d)),r.number&&(o=n.map(Uh)));let l,u=a[l=ti(t)]||a[l=ti(Fn(t))];!u&&s&&(u=a[l=ti(cs(t))]),u&&Za(u,e,6,o);const c=a[l+"Once"];if(c){if(!e.emitted)e.emitted={};else if(e.emitted[l])return;e.emitted[l]=!0,Za(c,e,6,o)}}const YT=new WeakMap;function p1(e,t,n=!1){const a=n?YT:t.emitsCache,o=a.get(e);if(o!==void 0)return o;const s=e.emits;let r={},l=!1;if(!Ve(e)){const u=c=>{const d=p1(c,t,!0);d&&(l=!0,Pn(r,d))};!n&&t.mixins.length&&t.mixins.forEach(u),e.extends&&u(e.extends),e.mixins&&e.mixins.forEach(u)}return!s&&!l?(nt(e)&&a.set(e,null),null):(ye(s)?s.forEach(u=>r[u]=null):Pn(r,s),nt(e)&&a.set(e,r),r)}function Md(e,t){return!e||!Cd(t)?!1:(t=t.slice(2).replace(/Once$/,""),Rt(e,t[0].toLowerCase()+t.slice(1))||Rt(e,cs(t))||Rt(e,t))}function Eg(e){const{type:t,vnode:n,proxy:a,withProxy:o,propsOptions:[s],slots:r,attrs:l,emit:u,render:c,renderCache:d,props:f,data:v,setupState:g,ctx:p,inheritAttrs:h}=e,m=Vc(e);let b,k;try{if(n.shapeFlag&4){const S=o||a,C=S;b=wo(c.call(C,S,d,f,g,v,p)),k=l}else{const S=t;b=wo(S.length>1?S(f,{attrs:l,slots:r,emit:u}):S(f,null)),k=t.props?l:GT(l)}}catch(S){li.length=0,Nd(S,e,1),b=Y(mn)}let y=b;if(k&&h!==!1){const S=Object.keys(k),{shapeFlag:C}=y;S.length&&C&7&&(s&&S.some(Wh)&&(k=XT(k,s)),y=Ro(y,k,!1,!0))}return n.dirs&&(y=Ro(y,null,!1,!0),y.dirs=y.dirs?y.dirs.concat(n.dirs):n.dirs),n.transition&&br(y,n.transition),b=y,Vc(m),b}const GT=e=>{let t;for(const n in e)(n==="class"||n==="style"||Cd(n))&&((t||(t={}))[n]=e[n]);return t},XT=(e,t)=>{const n={};for(const a in e)(!Wh(a)||!(a.slice(9)in t))&&(n[a]=e[a]);return n};function JT(e,t,n){const{props:a,children:o,component:s}=e,{props:r,children:l,patchFlag:u}=t,c=s.emitsOptions;if(t.dirs||t.transition)return!0;if(n&&u>=0){if(u&1024)return!0;if(u&16)return a?xg(a,r,c):!!r;if(u&8){const d=t.dynamicProps;for(let f=0;fObject.create(v1),g1=e=>Object.getPrototypeOf(e)===v1;function QT(e,t,n,a=!1){const o={},s=m1();e.propsDefaults=Object.create(null),b1(e,t,o,s);for(const r in e.propsOptions[0])r in o||(o[r]=void 0);n?e.props=a?o:Zh(o):e.type.props?e.props=o:e.props=s,e.attrs=s}function e$(e,t,n,a){const{props:o,attrs:s,vnode:{patchFlag:r}}=e,l=qt(o),[u]=e.propsOptions;let c=!1;if((a||r>0)&&!(r&16)){if(r&8){const d=e.vnode.dynamicProps;for(let f=0;f{u=!0;const[v,g]=y1(f,t,!0);Pn(r,v),g&&l.push(...g)};!n&&t.mixins.length&&t.mixins.forEach(d),e.extends&&d(e.extends),e.mixins&&e.mixins.forEach(d)}if(!s&&!u)return nt(e)&&a.set(e,Xr),Xr;if(ye(s))for(let d=0;de==="_"||e==="_ctx"||e==="$stable",uv=e=>ye(e)?e.map(wo):[wo(e)],n$=(e,t,n)=>{if(t._n)return t;const a=J((...o)=>uv(t(...o)),n);return a._c=!1,a},w1=(e,t,n)=>{const a=e._ctx;for(const o in e){if(iv(o))continue;const s=e[o];if(Ve(s))t[o]=n$(o,s,a);else if(s!=null){const r=uv(s);t[o]=()=>r}}},S1=(e,t)=>{const n=uv(t);e.slots.default=()=>n},C1=(e,t,n)=>{for(const a in t)(n||!iv(a))&&(e[a]=t[a])},a$=(e,t,n)=>{const a=e.slots=m1();if(e.vnode.shapeFlag&32){const o=t._;o?(C1(a,t,n),n&&ww(a,"_",o,!0)):w1(t,a)}else t&&S1(e,t)},o$=(e,t,n)=>{const{vnode:a,slots:o}=e;let s=!0,r=cn;if(a.shapeFlag&32){const l=t._;l?n&&l===1?s=!1:C1(o,t,n):(s=!t.$stable,w1(t,o)),r=t}else t&&(S1(e,t),r={default:1});if(s)for(const l in o)!iv(l)&&r[l]==null&&delete o[l]},qn=u$;function s$(e){return r$(e)}function r$(e,t){const n=Td();n.__VUE__=!0;const{insert:a,remove:o,patchProp:s,createElement:r,createText:l,createComment:u,setText:c,setElementText:d,parentNode:f,nextSibling:v,setScopeId:g=Dt,insertStaticContent:p}=e,h=(K,Z,re,ce=null,ve=null,ke=null,Re=void 0,Ie=null,$e=!!Z.dynamicChildren)=>{if(K===Z)return;K&&!Zs(K,Z)&&(ce=ue(K),q(K,ve,ke,!0),K=null),Z.patchFlag===-2&&($e=!1,Z.dynamicChildren=null);const{type:pe,ref:Ee,shapeFlag:me}=Z;switch(pe){case Ol:m(K,Z,re,ce);break;case mn:b(K,Z,re,ce);break;case rc:K==null&&k(Z,re,ce,Re);break;case Fe:_(K,Z,re,ce,ve,ke,Re,Ie,$e);break;default:me&1?C(K,Z,re,ce,ve,ke,Re,Ie,$e):me&6?V(K,Z,re,ce,ve,ke,Re,Ie,$e):(me&64||me&128)&&pe.process(K,Z,re,ce,ve,ke,Re,Ie,$e,ae)}Ee!=null&&ve?si(Ee,K&&K.ref,ke,Z||K,!Z):Ee==null&&K&&K.ref!=null&&si(K.ref,null,ke,K,!0)},m=(K,Z,re,ce)=>{if(K==null)a(Z.el=l(Z.children),re,ce);else{const ve=Z.el=K.el;Z.children!==K.children&&c(ve,Z.children)}},b=(K,Z,re,ce)=>{K==null?a(Z.el=u(Z.children||""),re,ce):Z.el=K.el},k=(K,Z,re,ce)=>{[K.el,K.anchor]=p(K.children,Z,re,ce,K.el,K.anchor)},y=({el:K,anchor:Z},re,ce)=>{let ve;for(;K&&K!==Z;)ve=v(K),a(K,re,ce),K=ve;a(Z,re,ce)},S=({el:K,anchor:Z})=>{let re;for(;K&&K!==Z;)re=v(K),o(K),K=re;o(Z)},C=(K,Z,re,ce,ve,ke,Re,Ie,$e)=>{if(Z.type==="svg"?Re="svg":Z.type==="math"&&(Re="mathml"),K==null)E(Z,re,ce,ve,ke,Re,Ie,$e);else{const pe=K.el&&K.el._isVueCE?K.el:null;try{pe&&pe._beginPatch(),R(K,Z,ve,ke,Re,Ie,$e)}finally{pe&&pe._endPatch()}}},E=(K,Z,re,ce,ve,ke,Re,Ie)=>{let $e,pe;const{props:Ee,shapeFlag:me,transition:Me,dirs:We}=K;if($e=K.el=r(K.type,ke,Ee&&Ee.is,Ee),me&8?d($e,K.children):me&16&&O(K.children,$e,null,ce,ve,If(K,ke),Re,Ie),We&&js(K,null,ce,"created"),$($e,K,K.scopeId,Re,ce),Ee){for(const Pe in Ee)Pe!=="value"&&!ei(Pe)&&s($e,Pe,null,Ee[Pe],ke,ce);"value"in Ee&&s($e,"value",null,Ee.value,ke),(pe=Ee.onVnodeBeforeMount)&&vo(pe,ce,K)}We&&js(K,null,ce,"beforeMount");const Xe=l$(ve,Me);Xe&&Me.beforeEnter($e),a($e,Z,re),((pe=Ee&&Ee.onVnodeMounted)||Xe||We)&&qn(()=>{pe&&vo(pe,ce,K),Xe&&Me.enter($e),We&&js(K,null,ce,"mounted")},ve)},$=(K,Z,re,ce,ve)=>{if(re&&g(K,re),ce)for(let ke=0;ke{for(let pe=$e;pe{const Ie=Z.el=K.el;let{patchFlag:$e,dynamicChildren:pe,dirs:Ee}=Z;$e|=K.patchFlag&16;const me=K.props||cn,Me=Z.props||cn;let We;if(re&&Us(re,!1),(We=Me.onVnodeBeforeUpdate)&&vo(We,re,Z,K),Ee&&js(Z,K,re,"beforeUpdate"),re&&Us(re,!0),(me.innerHTML&&Me.innerHTML==null||me.textContent&&Me.textContent==null)&&d(Ie,""),pe?N(K.dynamicChildren,pe,Ie,re,ce,If(Z,ve),ke):Re||I(K,Z,Ie,null,re,ce,If(Z,ve),ke,!1),$e>0){if($e&16)A(Ie,me,Me,re,ve);else if($e&2&&me.class!==Me.class&&s(Ie,"class",null,Me.class,ve),$e&4&&s(Ie,"style",me.style,Me.style,ve),$e&8){const Xe=Z.dynamicProps;for(let Pe=0;Pe{We&&vo(We,re,Z,K),Ee&&js(Z,K,re,"updated")},ce)},N=(K,Z,re,ce,ve,ke,Re)=>{for(let Ie=0;Ie{if(Z!==re){if(Z!==cn)for(const ke in Z)!ei(ke)&&!(ke in re)&&s(K,ke,Z[ke],null,ve,ce);for(const ke in re){if(ei(ke))continue;const Re=re[ke],Ie=Z[ke];Re!==Ie&&ke!=="value"&&s(K,ke,Ie,Re,ve,ce)}"value"in re&&s(K,"value",Z.value,re.value,ve)}},_=(K,Z,re,ce,ve,ke,Re,Ie,$e)=>{const pe=Z.el=K?K.el:l(""),Ee=Z.anchor=K?K.anchor:l("");let{patchFlag:me,dynamicChildren:Me,slotScopeIds:We}=Z;We&&(Ie=Ie?Ie.concat(We):We),K==null?(a(pe,re,ce),a(Ee,re,ce),O(Z.children||[],re,Ee,ve,ke,Re,Ie,$e)):me>0&&me&64&&Me&&K.dynamicChildren&&K.dynamicChildren.length===Me.length?(N(K.dynamicChildren,Me,re,ve,ke,Re,Ie),(Z.key!=null||ve&&Z===ve.subTree)&&cv(K,Z,!0)):I(K,Z,re,Ee,ve,ke,Re,Ie,$e)},V=(K,Z,re,ce,ve,ke,Re,Ie,$e)=>{Z.slotScopeIds=Ie,K==null?Z.shapeFlag&512?ve.ctx.activate(Z,re,ce,Re,$e):z(Z,re,ce,ve,ke,Re,$e):U(K,Z,$e)},z=(K,Z,re,ce,ve,ke,Re)=>{const Ie=K.component=h$(K,ce,ve);if(Rd(K)&&(Ie.ctx.renderer=ae),v$(Ie,!1,Re),Ie.asyncDep){if(ve&&ve.registerDep(Ie,W,Re),!K.el){const $e=Ie.subTree=Y(mn);b(null,$e,Z,re),K.placeholder=$e.el}}else W(Ie,K,Z,re,ve,ke,Re)},U=(K,Z,re)=>{const ce=Z.component=K.component;if(JT(K,Z,re))if(ce.asyncDep&&!ce.asyncResolved){P(ce,Z,re);return}else ce.next=Z,ce.update();else Z.el=K.el,ce.vnode=Z},W=(K,Z,re,ce,ve,ke,Re)=>{const Ie=()=>{if(K.isMounted){let{next:me,bu:Me,u:We,parent:Xe,vnode:Pe}=K;{const rt=k1(K);if(rt){me&&(me.el=Pe.el,P(K,me,Re)),rt.asyncDep.then(()=>{qn(()=>{K.isUnmounted||pe()},ve)});return}}let Ae=me,je;Us(K,!1),me?(me.el=Pe.el,P(K,me,Re)):me=Pe,Me&&ac(Me),(je=me.props&&me.props.onVnodeBeforeUpdate)&&vo(je,Xe,me,Pe),Us(K,!0);const Nt=Eg(K),Ue=K.subTree;K.subTree=Nt,h(Ue,Nt,f(Ue.el),ue(Ue),K,ve,ke),me.el=Nt.el,Ae===null&&ZT(K,Nt.el),We&&qn(We,ve),(je=me.props&&me.props.onVnodeUpdated)&&qn(()=>vo(je,Xe,me,Pe),ve)}else{let me;const{el:Me,props:We}=Z,{bm:Xe,m:Pe,parent:Ae,root:je,type:Nt}=K,Ue=Qr(Z);Us(K,!1),Xe&&ac(Xe),!Ue&&(me=We&&We.onVnodeBeforeMount)&&vo(me,Ae,Z),Us(K,!0);{je.ce&&je.ce._hasShadowRoot()&&je.ce._injectChildStyle(Nt,K.parent?K.parent.type:void 0);const rt=K.subTree=Eg(K);h(null,rt,re,ce,K,ve,ke),Z.el=rt.el}if(Pe&&qn(Pe,ve),!Ue&&(me=We&&We.onVnodeMounted)){const rt=Z;qn(()=>vo(me,Ae,rt),ve)}(Z.shapeFlag&256||Ae&&Qr(Ae.vnode)&&Ae.vnode.shapeFlag&256)&&K.a&&qn(K.a,ve),K.isMounted=!0,Z=re=ce=null}};K.scope.on();const $e=K.effect=new Ow(Ie);K.scope.off();const pe=K.update=$e.run.bind($e),Ee=K.job=$e.runIfDirty.bind($e);Ee.i=K,Ee.id=K.uid,$e.scheduler=()=>ev(Ee),Us(K,!0),pe()},P=(K,Z,re)=>{Z.component=K;const ce=K.vnode.props;K.vnode=Z,K.next=null,e$(K,Z.props,ce,re),o$(K,Z.children,re),ns(),fg(K),as()},I=(K,Z,re,ce,ve,ke,Re,Ie,$e=!1)=>{const pe=K&&K.children,Ee=K?K.shapeFlag:0,me=Z.children,{patchFlag:Me,shapeFlag:We}=Z;if(Me>0){if(Me&128){D(pe,me,re,ce,ve,ke,Re,Ie,$e);return}else if(Me&256){L(pe,me,re,ce,ve,ke,Re,Ie,$e);return}}We&8?(Ee&16&&he(pe,ve,ke),me!==pe&&d(re,me)):Ee&16?We&16?D(pe,me,re,ce,ve,ke,Re,Ie,$e):he(pe,ve,ke,!0):(Ee&8&&d(re,""),We&16&&O(me,re,ce,ve,ke,Re,Ie,$e))},L=(K,Z,re,ce,ve,ke,Re,Ie,$e)=>{K=K||Xr,Z=Z||Xr;const pe=K.length,Ee=Z.length,me=Math.min(pe,Ee);let Me;for(Me=0;MeEe?he(K,ve,ke,!0,!1,me):O(Z,re,ce,ve,ke,Re,Ie,$e,me)},D=(K,Z,re,ce,ve,ke,Re,Ie,$e)=>{let pe=0;const Ee=Z.length;let me=K.length-1,Me=Ee-1;for(;pe<=me&&pe<=Me;){const We=K[pe],Xe=Z[pe]=$e?Wo(Z[pe]):wo(Z[pe]);if(Zs(We,Xe))h(We,Xe,re,null,ve,ke,Re,Ie,$e);else break;pe++}for(;pe<=me&&pe<=Me;){const We=K[me],Xe=Z[Me]=$e?Wo(Z[Me]):wo(Z[Me]);if(Zs(We,Xe))h(We,Xe,re,null,ve,ke,Re,Ie,$e);else break;me--,Me--}if(pe>me){if(pe<=Me){const We=Me+1,Xe=WeMe)for(;pe<=me;)q(K[pe],ve,ke,!0),pe++;else{const We=pe,Xe=pe,Pe=new Map;for(pe=Xe;pe<=Me;pe++){const be=Z[pe]=$e?Wo(Z[pe]):wo(Z[pe]);be.key!=null&&Pe.set(be.key,pe)}let Ae,je=0;const Nt=Me-Xe+1;let Ue=!1,rt=0;const mt=new Array(Nt);for(pe=0;pe=Nt){q(be,ve,ke,!0);continue}let ze;if(be.key!=null)ze=Pe.get(be.key);else for(Ae=Xe;Ae<=Me;Ae++)if(mt[Ae-Xe]===0&&Zs(be,Z[Ae])){ze=Ae;break}ze===void 0?q(be,ve,ke,!0):(mt[ze-Xe]=pe+1,ze>=rt?rt=ze:Ue=!0,h(be,Z[ze],re,null,ve,ke,Re,Ie,$e),je++)}const kt=Ue?i$(mt):Xr;for(Ae=kt.length-1,pe=Nt-1;pe>=0;pe--){const be=Xe+pe,ze=Z[be],de=Z[be+1],Ye=be+1{const{el:ke,type:Re,transition:Ie,children:$e,shapeFlag:pe}=K;if(pe&6){F(K.component.subTree,Z,re,ce);return}if(pe&128){K.suspense.move(Z,re,ce);return}if(pe&64){Re.move(K,Z,re,ae);return}if(Re===Fe){a(ke,Z,re);for(let me=0;me<$e.length;me++)F($e[me],Z,re,ce);a(K.anchor,Z,re);return}if(Re===rc){y(K,Z,re);return}if(ce!==2&&pe&1&&Ie)if(ce===0)Ie.beforeEnter(ke),a(ke,Z,re),qn(()=>Ie.enter(ke),ve);else{const{leave:me,delayLeave:Me,afterLeave:We}=Ie,Xe=()=>{K.ctx.isUnmounted?o(ke):a(ke,Z,re)},Pe=()=>{ke._isLeaving&&ke[bo](!0),me(ke,()=>{Xe(),We&&We()})};Me?Me(ke,Xe,Pe):Pe()}else a(ke,Z,re)},q=(K,Z,re,ce=!1,ve=!1)=>{const{type:ke,props:Re,ref:Ie,children:$e,dynamicChildren:pe,shapeFlag:Ee,patchFlag:me,dirs:Me,cacheIndex:We}=K;if(me===-2&&(ve=!1),Ie!=null&&(ns(),si(Ie,null,re,K,!0),as()),We!=null&&(Z.renderCache[We]=void 0),Ee&256){Z.ctx.deactivate(K);return}const Xe=Ee&1&&Me,Pe=!Qr(K);let Ae;if(Pe&&(Ae=Re&&Re.onVnodeBeforeUnmount)&&vo(Ae,Z,K),Ee&6)Q(K.component,re,ce);else{if(Ee&128){K.suspense.unmount(re,ce);return}Xe&&js(K,null,Z,"beforeUnmount"),Ee&64?K.type.remove(K,Z,re,ae,ce):pe&&!pe.hasOnce&&(ke!==Fe||me>0&&me&64)?he(pe,Z,re,!1,!0):(ke===Fe&&me&384||!ve&&Ee&16)&&he($e,Z,re),ce&&j(K)}(Pe&&(Ae=Re&&Re.onVnodeUnmounted)||Xe)&&qn(()=>{Ae&&vo(Ae,Z,K),Xe&&js(K,null,Z,"unmounted")},re)},j=K=>{const{type:Z,el:re,anchor:ce,transition:ve}=K;if(Z===Fe){X(re,ce);return}if(Z===rc){S(K);return}const ke=()=>{o(re),ve&&!ve.persisted&&ve.afterLeave&&ve.afterLeave()};if(K.shapeFlag&1&&ve&&!ve.persisted){const{leave:Re,delayLeave:Ie}=ve,$e=()=>Re(re,ke);Ie?Ie(K.el,ke,$e):$e()}else ke()},X=(K,Z)=>{let re;for(;K!==Z;)re=v(K),o(K),K=re;o(Z)},Q=(K,Z,re)=>{const{bum:ce,scope:ve,job:ke,subTree:Re,um:Ie,m:$e,a:pe}=K;$g($e),$g(pe),ce&&ac(ce),ve.stop(),ke&&(ke.flags|=8,q(Re,K,Z,re)),Ie&&qn(Ie,Z),qn(()=>{K.isUnmounted=!0},Z)},he=(K,Z,re,ce=!1,ve=!1,ke=0)=>{for(let Re=ke;Re{if(K.shapeFlag&6)return ue(K.component.subTree);if(K.shapeFlag&128)return K.suspense.next();const Z=v(K.anchor||K.el),re=Z&&Z[Jw];return re?v(re):Z};let ge=!1;const ie=(K,Z,re)=>{let ce;K==null?Z._vnode&&(q(Z._vnode,null,null,!0),ce=Z._vnode.component):h(Z._vnode||null,K,Z,null,null,null,re),Z._vnode=K,ge||(ge=!0,fg(ce),qw(),ge=!1)},ae={p:h,um:q,m:F,r:j,mt:z,mc:O,pc:I,pbc:N,n:ue,o:e};return{render:ie,hydrate:void 0,createApp:jT(ie)}}function If({type:e,props:t},n){return n==="svg"&&e==="foreignObject"||n==="mathml"&&e==="annotation-xml"&&t&&t.encoding&&t.encoding.includes("html")?void 0:n}function Us({effect:e,job:t},n){n?(e.flags|=32,t.flags|=4):(e.flags&=-33,t.flags&=-5)}function l$(e,t){return(!e||e&&!e.pendingBranch)&&t&&!t.persisted}function cv(e,t,n=!1){const a=e.children,o=t.children;if(ye(a)&&ye(o))for(let s=0;s>1,e[n[l]]0&&(t[a]=n[s-1]),n[s]=a)}}for(s=n.length,r=n[s-1];s-- >0;)n[s]=r,r=t[r];return n}function k1(e){const t=e.subTree.component;if(t)return t.asyncDep&&!t.asyncResolved?t:k1(t)}function $g(e){if(e)for(let t=0;te.__isSuspense;function u$(e,t){t&&t.pendingBranch?ye(e)?t.effects.push(...e):t.effects.push(e):kT(e)}const Fe=Symbol.for("v-fgt"),Ol=Symbol.for("v-txt"),mn=Symbol.for("v-cmt"),rc=Symbol.for("v-stc"),li=[];let xa=null;function x(e=!1){li.push(xa=e?null:[])}function c$(){li.pop(),xa=li[li.length-1]||null}let Si=1;function Kc(e,t=!1){Si+=e,e<0&&xa&&t&&(xa.hasOnce=!0)}function T1(e){return e.dynamicChildren=Si>0?xa||Xr:null,c$(),Si>0&&xa&&xa.push(e),e}function B(e,t,n,a,o,s){return T1(H(e,t,n,a,o,s,!0))}function oe(e,t,n,a,o){return T1(Y(e,t,n,a,o,!0))}function Ut(e){return e?e.__v_isVNode===!0:!1}function Zs(e,t){return e.type===t.type&&e.key===t.key}const $1=({key:e})=>e??null,lc=({ref:e,ref_key:t,ref_for:n})=>(typeof e=="number"&&(e=""+e),e!=null?Le(e)||Jt(e)||Ve(e)?{i:Kn,r:e,k:t,f:!!n}:e:null);function H(e,t=null,n=null,a=0,o=null,s=e===Fe?0:1,r=!1,l=!1){const u={__v_isVNode:!0,__v_skip:!0,type:e,props:t,key:t&&$1(t),ref:t&&lc(t),scopeId:Gw,slotScopeIds:null,children:n,component:null,suspense:null,ssContent:null,ssFallback:null,dirs:null,transition:null,el:null,anchor:null,target:null,targetStart:null,targetAnchor:null,staticCount:0,shapeFlag:s,patchFlag:a,dynamicProps:o,dynamicChildren:null,appContext:null,ctx:Kn};return l?(dv(u,n),s&128&&e.normalize(u)):n&&(u.shapeFlag|=Le(n)?8:16),Si>0&&!r&&xa&&(u.patchFlag>0||s&6)&&u.patchFlag!==32&&xa.push(u),u}const Y=d$;function d$(e,t=null,n=null,a=0,o=null,s=!1){if((!e||e===l1)&&(e=mn),Ut(e)){const l=Ro(e,t,!0);return n&&dv(l,n),Si>0&&!s&&xa&&(l.shapeFlag&6?xa[xa.indexOf(e)]=l:xa.push(l)),l.patchFlag=-2,l}if(y$(e)&&(e=e.__vccOpts),t){t=Zo(t);let{class:l,style:u}=t;l&&!Le(l)&&(t.class=T(l)),nt(u)&&(Od(u)&&!ye(u)&&(u=Pn({},u)),t.style=Ke(u))}const r=Le(e)?1:x1(e)?128:Zw(e)?64:nt(e)?4:Ve(e)?2:0;return H(e,t,n,a,o,r,s,!0)}function Zo(e){return e?Od(e)||g1(e)?Pn({},e):e:null}function Ro(e,t,n=!1,a=!1){const{props:o,ref:s,patchFlag:r,children:l,transition:u}=e,c=t?dt(o||{},t):o,d={__v_isVNode:!0,__v_skip:!0,type:e.type,props:c,key:c&&$1(c),ref:t&&t.ref?n&&s?ye(s)?s.concat(lc(t)):[s,lc(t)]:lc(t):s,scopeId:e.scopeId,slotScopeIds:e.slotScopeIds,children:l,target:e.target,targetStart:e.targetStart,targetAnchor:e.targetAnchor,staticCount:e.staticCount,shapeFlag:e.shapeFlag,patchFlag:t&&e.type!==Fe?r===-1?16:r|16:r,dynamicProps:e.dynamicProps,dynamicChildren:e.dynamicChildren,appContext:e.appContext,dirs:e.dirs,transition:u,component:e.component,suspense:e.suspense,ssContent:e.ssContent&&Ro(e.ssContent),ssFallback:e.ssFallback&&Ro(e.ssFallback),placeholder:e.placeholder,el:e.el,anchor:e.anchor,ctx:e.ctx,ce:e.ce};return u&&a&&br(d,u.clone(d)),d}function wt(e=" ",t=0){return Y(Ol,null,e,t)}function _ee(e,t){const n=Y(rc,null,e);return n.staticCount=t,n}function te(e="",t=!1){return t?(x(),oe(mn,null,e)):Y(mn,null,e)}function wo(e){return e==null||typeof e=="boolean"?Y(mn):ye(e)?Y(Fe,null,e.slice()):Ut(e)?Wo(e):Y(Ol,null,String(e))}function Wo(e){return e.el===null&&e.patchFlag!==-1||e.memo?e:Ro(e)}function dv(e,t){let n=0;const{shapeFlag:a}=e;if(t==null)t=null;else if(ye(t))n=16;else if(typeof t=="object")if(a&65){const o=t.default;o&&(o._c&&(o._d=!1),dv(e,o()),o._c&&(o._d=!0));return}else{n=32;const o=t._;!o&&!g1(t)?t._ctx=Kn:o===3&&Kn&&(Kn.slots._===1?t._=1:(t._=2,e.patchFlag|=1024))}else Ve(t)?(t={default:t,_ctx:Kn},n=32):(t=String(t),a&64?(n=16,t=[wt(t)]):n=8);e.children=t,e.shapeFlag|=n}function dt(...e){const t={};for(let n=0;nJn||Kn;let Wc,Op;{const e=Td(),t=(n,a)=>{let o;return(o=e[n])||(o=e[n]=[]),o.push(a),s=>{o.length>1?o.forEach(r=>r(s)):o[0](s)}};Wc=t("__VUE_INSTANCE_SETTERS__",n=>Jn=n),Op=t("__VUE_SSR_SETTERS__",n=>Ci=n)}const Xi=e=>{const t=Jn;return Wc(e),e.scope.on(),()=>{e.scope.off(),Wc(t)}},Og=()=>{Jn&&Jn.scope.off(),Wc(null)};function O1(e){return e.vnode.shapeFlag&4}let Ci=!1;function v$(e,t=!1,n=!1){t&&Op(t);const{props:a,children:o}=e.vnode,s=O1(e);QT(e,a,s,t),a$(e,o,n||t);const r=s?m$(e,t):void 0;return t&&Op(!1),r}function m$(e,t){const n=e.type;e.accessCache=Object.create(null),e.proxy=new Proxy(e.ctx,BT);const{setup:a}=n;if(a){ns();const o=e.setupContext=a.length>1?R1(e):null,s=Xi(e),r=Yi(a,e,0,[e.props,o]),l=vr(r);if(as(),s(),(l||e.sp)&&!Qr(e)&&s1(e),l){if(r.then(Og,Og),t)return r.then(u=>{Ng(e,u)}).catch(u=>{Nd(u,e,0)});e.asyncDep=r}else Ng(e,r)}else N1(e)}function Ng(e,t,n){Ve(t)?e.type.__ssrInlineRender?e.ssrRender=t:e.render=t:nt(t)&&(e.setupState=Kw(t)),N1(e)}function N1(e,t,n){const a=e.type;e.render||(e.render=a.render||Dt);{const o=Xi(e);ns();try{FT(e)}finally{as(),o()}}}const g$={get(e,t){return Xn(e,"get",""),e[t]}};function R1(e){const t=n=>{e.exposed=n||{}};return{attrs:new Proxy(e.attrs,g$),slots:e.slots,emit:e.emit,expose:t}}function _d(e){return e.exposed?e.exposeProxy||(e.exposeProxy=new Proxy(Kw(Eo(e.exposed)),{get(t,n){if(n in t)return t[n];if(n in ri)return ri[n](e)},has(t,n){return n in t||n in ri}})):e.proxy}function b$(e,t=!0){return Ve(e)?e.displayName||e.name:e.name||t&&e.__name}function y$(e){return Ve(e)&&"__vccOpts"in e}const w=(e,t)=>bT(e,t,Ci);function qe(e,t,n){try{Kc(-1);const a=arguments.length;return a===2?nt(t)&&!ye(t)?Ut(t)?Y(e,null,[t]):Y(e,t):Y(e,null,t):(a>3?n=Array.prototype.slice.call(arguments,2):a===3&&Ut(n)&&(n=[n]),Y(e,t,n))}finally{Kc(1)}}const w$="3.5.30",S$=Dt;let Np;const Rg=typeof window<"u"&&window.trustedTypes;if(Rg)try{Np=Rg.createPolicy("vue",{createHTML:e=>e})}catch{}const I1=Np?e=>Np.createHTML(e):e=>e,C$="http://www.w3.org/2000/svg",k$="http://www.w3.org/1998/Math/MathML",Ko=typeof document<"u"?document:null,Ig=Ko&&Ko.createElement("template"),E$={insert:(e,t,n)=>{t.insertBefore(e,n||null)},remove:e=>{const t=e.parentNode;t&&t.removeChild(e)},createElement:(e,t,n,a)=>{const o=t==="svg"?Ko.createElementNS(C$,e):t==="mathml"?Ko.createElementNS(k$,e):n?Ko.createElement(e,{is:n}):Ko.createElement(e);return e==="select"&&a&&a.multiple!=null&&o.setAttribute("multiple",a.multiple),o},createText:e=>Ko.createTextNode(e),createComment:e=>Ko.createComment(e),setText:(e,t)=>{e.nodeValue=t},setElementText:(e,t)=>{e.textContent=t},parentNode:e=>e.parentNode,nextSibling:e=>e.nextSibling,querySelector:e=>Ko.querySelector(e),setScopeId(e,t){e.setAttribute(t,"")},insertStaticContent(e,t,n,a,o,s){const r=n?n.previousSibling:t.lastChild;if(o&&(o===s||o.nextSibling))for(;t.insertBefore(o.cloneNode(!0),n),!(o===s||!(o=o.nextSibling)););else{Ig.innerHTML=I1(a==="svg"?`${e}`:a==="mathml"?`${e}`:e);const l=Ig.content;if(a==="svg"||a==="mathml"){const u=l.firstChild;for(;u.firstChild;)l.appendChild(u.firstChild);l.removeChild(u)}t.insertBefore(l,n)}return[r?r.nextSibling:t.firstChild,n?n.previousSibling:t.lastChild]}},ys="transition",zl="animation",ul=Symbol("_vtc"),P1={name:String,type:String,css:{type:Boolean,default:!0},duration:[String,Number,Object],enterFromClass:String,enterActiveClass:String,enterToClass:String,appearFromClass:String,appearActiveClass:String,appearToClass:String,leaveFromClass:String,leaveActiveClass:String,leaveToClass:String},M1=Pn({},t1,P1),x$=e=>(e.displayName="Transition",e.props=M1,e),Vn=x$((e,{slots:t})=>qe(RT,_1(e),t)),qs=(e,t=[])=>{ye(e)?e.forEach(n=>n(...t)):e&&e(...t)},Pg=e=>e?ye(e)?e.some(t=>t.length>1):e.length>1:!1;function _1(e){const t={};for(const _ in e)_ in P1||(t[_]=e[_]);if(e.css===!1)return t;const{name:n="v",type:a,duration:o,enterFromClass:s=`${n}-enter-from`,enterActiveClass:r=`${n}-enter-active`,enterToClass:l=`${n}-enter-to`,appearFromClass:u=s,appearActiveClass:c=r,appearToClass:d=l,leaveFromClass:f=`${n}-leave-from`,leaveActiveClass:v=`${n}-leave-active`,leaveToClass:g=`${n}-leave-to`}=e,p=T$(o),h=p&&p[0],m=p&&p[1],{onBeforeEnter:b,onEnter:k,onEnterCancelled:y,onLeave:S,onLeaveCancelled:C,onBeforeAppear:E=b,onAppear:$=k,onAppearCancelled:O=y}=t,R=(_,V,z,U)=>{_._enterCancelled=U,Ss(_,V?d:l),Ss(_,V?c:r),z&&z()},N=(_,V)=>{_._isLeaving=!1,Ss(_,f),Ss(_,g),Ss(_,v),V&&V()},A=_=>(V,z)=>{const U=_?$:k,W=()=>R(V,_,z);qs(U,[V,W]),Mg(()=>{Ss(V,_?u:s),mo(V,_?d:l),Pg(U)||_g(V,a,h,W)})};return Pn(t,{onBeforeEnter(_){qs(b,[_]),mo(_,s),mo(_,r)},onBeforeAppear(_){qs(E,[_]),mo(_,u),mo(_,c)},onEnter:A(!1),onAppear:A(!0),onLeave(_,V){_._isLeaving=!0;const z=()=>N(_,V);mo(_,f),_._enterCancelled?(mo(_,v),Rp(_)):(Rp(_),mo(_,v)),Mg(()=>{_._isLeaving&&(Ss(_,f),mo(_,g),Pg(S)||_g(_,a,m,z))}),qs(S,[_,z])},onEnterCancelled(_){R(_,!1,void 0,!0),qs(y,[_])},onAppearCancelled(_){R(_,!0,void 0,!0),qs(O,[_])},onLeaveCancelled(_){N(_),qs(C,[_])}})}function T$(e){if(e==null)return null;if(nt(e))return[Pf(e.enter),Pf(e.leave)];{const t=Pf(e);return[t,t]}}function Pf(e){return Fx(e)}function mo(e,t){t.split(/\s+/).forEach(n=>n&&e.classList.add(n)),(e[ul]||(e[ul]=new Set)).add(t)}function Ss(e,t){t.split(/\s+/).forEach(a=>a&&e.classList.remove(a));const n=e[ul];n&&(n.delete(t),n.size||(e[ul]=void 0))}function Mg(e){requestAnimationFrame(()=>{requestAnimationFrame(e)})}let $$=0;function _g(e,t,n,a){const o=e._endId=++$$,s=()=>{o===e._endId&&a()};if(n!=null)return setTimeout(s,n);const{type:r,timeout:l,propCount:u}=A1(e,t);if(!r)return a();const c=r+"end";let d=0;const f=()=>{e.removeEventListener(c,v),s()},v=g=>{g.target===e&&++d>=u&&f()};setTimeout(()=>{d(n[p]||"").split(", "),o=a(`${ys}Delay`),s=a(`${ys}Duration`),r=Ag(o,s),l=a(`${zl}Delay`),u=a(`${zl}Duration`),c=Ag(l,u);let d=null,f=0,v=0;t===ys?r>0&&(d=ys,f=r,v=s.length):t===zl?c>0&&(d=zl,f=c,v=u.length):(f=Math.max(r,c),d=f>0?r>c?ys:zl:null,v=d?d===ys?s.length:u.length:0);const g=d===ys&&/\b(?:transform|all)(?:,|$)/.test(a(`${ys}Property`).toString());return{type:d,timeout:f,propCount:v,hasTransform:g}}function Ag(e,t){for(;e.lengthLg(n)+Lg(e[a])))}function Lg(e){return e==="auto"?0:Number(e.slice(0,-1).replace(",","."))*1e3}function Rp(e){return(e?e.ownerDocument:document).body.offsetHeight}function O$(e,t,n){const a=e[ul];a&&(t=(t?[t,...a]:[...a]).join(" ")),t==null?e.removeAttribute("class"):n?e.setAttribute("class",t):e.className=t}const jc=Symbol("_vod"),L1=Symbol("_vsh"),Pt={name:"show",beforeMount(e,{value:t},{transition:n}){e[jc]=e.style.display==="none"?"":e.style.display,n&&t?n.beforeEnter(e):Hl(e,t)},mounted(e,{value:t},{transition:n}){n&&t&&n.enter(e)},updated(e,{value:t,oldValue:n},{transition:a}){!t!=!n&&(a?t?(a.beforeEnter(e),Hl(e,!0),a.enter(e)):a.leave(e,()=>{Hl(e,!1)}):Hl(e,t))},beforeUnmount(e,{value:t}){Hl(e,t)}};function Hl(e,t){e.style.display=t?e[jc]:"none",e[L1]=!t}const N$=Symbol(""),R$=/(?:^|;)\s*display\s*:/;function I$(e,t,n){const a=e.style,o=Le(n);let s=!1;if(n&&!o){if(t)if(Le(t))for(const r of t.split(";")){const l=r.slice(0,r.indexOf(":")).trim();n[l]==null&&ic(a,l,"")}else for(const r in t)n[r]==null&&ic(a,r,"");for(const r in n)r==="display"&&(s=!0),ic(a,r,n[r])}else if(o){if(t!==n){const r=a[N$];r&&(n+=";"+r),a.cssText=n,s=R$.test(n)}}else t&&e.removeAttribute("style");jc in e&&(e[jc]=s?a.display:"",e[L1]&&(a.display="none"))}const Dg=/\s*!important$/;function ic(e,t,n){if(ye(n))n.forEach(a=>ic(e,t,a));else if(n==null&&(n=""),t.startsWith("--"))e.setProperty(t,n);else{const a=P$(e,t);Dg.test(n)?e.setProperty(cs(a),n.replace(Dg,""),"important"):e[a]=n}}const Bg=["Webkit","Moz","ms"],Mf={};function P$(e,t){const n=Mf[t];if(n)return n;let a=Fn(t);if(a!=="filter"&&a in e)return Mf[t]=a;a=qi(a);for(let o=0;o_f||(L$.then(()=>_f=0),_f=Date.now());function B$(e,t){const n=a=>{if(!a._vts)a._vts=Date.now();else if(a._vts<=n.attached)return;Za(F$(a,n.value),t,5,[a])};return n.value=e,n.attached=D$(),n}function F$(e,t){if(ye(t)){const n=e.stopImmediatePropagation;return e.stopImmediatePropagation=()=>{n.call(e),e._stopped=!0},t.map(a=>o=>!o._stopped&&a&&a(o))}else return t}const Wg=e=>e.charCodeAt(0)===111&&e.charCodeAt(1)===110&&e.charCodeAt(2)>96&&e.charCodeAt(2)<123,V$=(e,t,n,a,o,s)=>{const r=o==="svg";t==="class"?O$(e,a,r):t==="style"?I$(e,n,a):Cd(t)?Wh(t)||_$(e,t,n,a,s):(t[0]==="."?(t=t.slice(1),!0):t[0]==="^"?(t=t.slice(1),!1):z$(e,t,a,r))?(zg(e,t,a),!e.tagName.includes("-")&&(t==="value"||t==="checked"||t==="selected")&&Vg(e,t,a,r,s,t!=="value")):e._isVueCE&&(H$(e,t)||e._def.__asyncLoader&&(/[A-Z]/.test(t)||!Le(a)))?zg(e,Fn(t),a,s,t):(t==="true-value"?e._trueValue=a:t==="false-value"&&(e._falseValue=a),Vg(e,t,a,r))};function z$(e,t,n,a){if(a)return!!(t==="innerHTML"||t==="textContent"||t in e&&Wg(t)&&Ve(n));if(t==="spellcheck"||t==="draggable"||t==="translate"||t==="autocorrect"||t==="sandbox"&&e.tagName==="IFRAME"||t==="form"||t==="list"&&e.tagName==="INPUT"||t==="type"&&e.tagName==="TEXTAREA")return!1;if(t==="width"||t==="height"){const o=e.tagName;if(o==="IMG"||o==="VIDEO"||o==="CANVAS"||o==="SOURCE")return!1}return Wg(t)&&Le(n)?!1:t in e}function H$(e,t){const n=e._def.props;if(!n)return!1;const a=Fn(t);return Array.isArray(n)?n.some(o=>Fn(o)===a):Object.keys(n).some(o=>Fn(o)===a)}const D1=new WeakMap,B1=new WeakMap,Uc=Symbol("_moveCb"),jg=Symbol("_enterCb"),K$=e=>(delete e.props.mode,e),W$=K$({name:"TransitionGroup",props:Pn({},M1,{tag:String,moveClass:String}),setup(e,{slots:t}){const n=ft(),a=e1();let o,s;return so(()=>{if(!o.length)return;const r=e.moveClass||`${e.name||"v"}-move`;if(!Y$(o[0].el,n.vnode.el,r)){o=[];return}o.forEach(j$),o.forEach(U$);const l=o.filter(q$);Rp(n.vnode.el),l.forEach(u=>{const c=u.el,d=c.style;mo(c,r),d.transform=d.webkitTransform=d.transitionDuration="";const f=c[Uc]=v=>{v&&v.target!==c||(!v||v.propertyName.endsWith("transform"))&&(c.removeEventListener("transitionend",f),c[Uc]=null,Ss(c,r))};c.addEventListener("transitionend",f)}),o=[]}),()=>{const r=qt(e),l=_1(r);let u=r.tag||Fe;if(o=[],s)for(let c=0;c{l.split(/\s+/).forEach(u=>u&&a.classList.remove(u))}),n.split(/\s+/).forEach(l=>l&&a.classList.add(l)),a.style.display="none";const s=t.nodeType===1?t:t.parentNode;s.appendChild(a);const{hasTransform:r}=A1(a);return s.removeChild(a),r}const cl=e=>{const t=e.props["onUpdate:modelValue"]||!1;return ye(t)?n=>ac(t,n):t};function G$(e){e.target.composing=!0}function Ug(e){const t=e.target;t.composing&&(t.composing=!1,t.dispatchEvent(new Event("input")))}const Qo=Symbol("_assign");function qg(e,t,n){return t&&(e=e.trim()),n&&(e=Uh(e)),e}const z1={created(e,{modifiers:{lazy:t,trim:n,number:a}},o){e[Qo]=cl(o);const s=a||o.props&&o.props.type==="number";Ts(e,t?"change":"input",r=>{r.target.composing||e[Qo](qg(e.value,n,s))}),(n||s)&&Ts(e,"change",()=>{e.value=qg(e.value,n,s)}),t||(Ts(e,"compositionstart",G$),Ts(e,"compositionend",Ug),Ts(e,"change",Ug))},mounted(e,{value:t}){e.value=t??""},beforeUpdate(e,{value:t,oldValue:n,modifiers:{lazy:a,trim:o,number:s}},r){if(e[Qo]=cl(r),e.composing)return;const l=(s||e.type==="number")&&!/^0\d/.test(e.value)?Uh(e.value):e.value,u=t??"";l!==u&&(document.activeElement===e&&e.type!=="range"&&(a&&t===n||o&&e.value.trim()===u)||(e.value=u))}},H1={deep:!0,created(e,t,n){e[Qo]=cl(n),Ts(e,"change",()=>{const a=e._modelValue,o=W1(e),s=e.checked,r=e[Qo];if(ye(a)){const l=Cw(a,o),u=l!==-1;if(s&&!u)r(a.concat(o));else if(!s&&u){const c=[...a];c.splice(l,1),r(c)}}else if(kd(a)){const l=new Set(a);s?l.add(o):l.delete(o),r(l)}else r(j1(e,s))})},mounted:Yg,beforeUpdate(e,t,n){e[Qo]=cl(n),Yg(e,t,n)}};function Yg(e,{value:t,oldValue:n},a){e._modelValue=t;let o;if(ye(t))o=Cw(t,a.props.value)>-1;else if(kd(t))o=t.has(a.props.value);else{if(t===n)return;o=mr(t,j1(e,!0))}e.checked!==o&&(e.checked=o)}const K1={created(e,{value:t},n){e.checked=mr(t,n.props.value),e[Qo]=cl(n),Ts(e,"change",()=>{e[Qo](W1(e))})},beforeUpdate(e,{value:t,oldValue:n},a){e[Qo]=cl(a),t!==n&&(e.checked=mr(t,a.props.value))}};function W1(e){return"_value"in e?e._value:e.value}function j1(e,t){const n=t?"_trueValue":"_falseValue";return n in e?e[n]:t}const X$=["ctrl","shift","alt","meta"],J$={stop:e=>e.stopPropagation(),prevent:e=>e.preventDefault(),self:e=>e.target!==e.currentTarget,ctrl:e=>!e.ctrlKey,shift:e=>!e.shiftKey,alt:e=>!e.altKey,meta:e=>!e.metaKey,left:e=>"button"in e&&e.button!==0,middle:e=>"button"in e&&e.button!==1,right:e=>"button"in e&&e.button!==2,exact:(e,t)=>X$.some(n=>e[`${n}Key`]&&!t.includes(n))},Ge=(e,t)=>{if(!e)return e;const n=e._withMods||(e._withMods={}),a=t.join(".");return n[a]||(n[a]=((o,...s)=>{for(let r=0;r{const n=e._withKeys||(e._withKeys={}),a=t.join(".");return n[a]||(n[a]=(o=>{if(!("key"in o))return;const s=cs(o.key);if(t.some(r=>r===s||Z$[r]===s))return e(o)}))},Q$=Pn({patchProp:V$},E$);let Gg;function U1(){return Gg||(Gg=s$(Q$))}const Ls=((...e)=>{U1().render(...e)}),eO=((...e)=>{const t=U1().createApp(...e),{mount:n}=t;return t.mount=a=>{const o=nO(a);if(!o)return;const s=t._component;!Ve(s)&&!s.render&&!s.template&&(s.template=o.innerHTML),o.nodeType===1&&(o.textContent="");const r=n(o,!1,tO(o));return o instanceof Element&&(o.removeAttribute("v-cloak"),o.setAttribute("data-v-app","")),r},t});function tO(e){if(e instanceof SVGElement)return"svg";if(typeof MathMLElement=="function"&&e instanceof MathMLElement)return"mathml"}function nO(e){return Le(e)?document.querySelector(e):e}const we={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"},aO=["year","years","month","months","date","dates","week","datetime","datetimerange","daterange","monthrange","yearrange"],Af=["sun","mon","tue","wed","thu","fri","sat"],tt="update:modelValue",bt="change",wn="input",Xg=Symbol("INSTALLED_KEY"),ro=["","default","small","large"],Jg=["left","center","right"],Ad=11,q1=2;var Y1=typeof global=="object"&&global&&global.Object===Object&&global,oO=typeof self=="object"&&self&&self.Object===Object&&self,lo=Y1||oO||Function("return this")(),Fa=lo.Symbol,G1=Object.prototype,sO=G1.hasOwnProperty,rO=G1.toString,Kl=Fa?Fa.toStringTag:void 0;function lO(e){var t=sO.call(e,Kl),n=e[Kl];try{e[Kl]=void 0;var a=!0}catch{}var o=rO.call(e);return a&&(t?e[Kl]=n:delete e[Kl]),o}var iO=Object.prototype,uO=iO.toString;function cO(e){return uO.call(e)}var dO="[object Null]",fO="[object Undefined]",Zg=Fa?Fa.toStringTag:void 0;function $r(e){return e==null?e===void 0?fO:dO:Zg&&Zg in Object(e)?lO(e):cO(e)}function Io(e){return e!=null&&typeof e=="object"}var pO="[object Symbol]";function Ld(e){return typeof e=="symbol"||Io(e)&&$r(e)==pO}function fv(e,t){for(var n=-1,a=e==null?0:e.length,o=Array(a);++n0){if(++t>=zO)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}function jO(e){return function(){return e}}var qc=(function(){try{var e=Nr(Object,"defineProperty");return e({},"",{}),e}catch{}})(),UO=qc?function(e,t){return qc(e,"toString",{configurable:!0,enumerable:!1,value:jO(t),writable:!0})}:pv,Z1=WO(UO);function qO(e,t){for(var n=-1,a=e==null?0:e.length;++n-1}var ZO=9007199254740991,QO=/^(?:0|[1-9]\d*)$/;function Dd(e,t){var n=typeof e;return t=t??ZO,!!t&&(n=="number"||n!="symbol"&&QO.test(e))&&e>-1&&e%1==0&&e-1&&e%1==0&&e<=nN}function Rl(e){return e!=null&&gv(e.length)&&!hv(e)}function aN(e,t,n){if(!da(n))return!1;var a=typeof t;return(a=="number"?Rl(n)&&Dd(t,n.length):a=="string"&&t in n)?Ji(n[t],e):!1}function oN(e){return tS(function(t,n){var a=-1,o=n.length,s=o>1?n[o-1]:void 0,r=o>2?n[2]:void 0;for(s=e.length>3&&typeof s=="function"?(o--,s):void 0,r&&aN(n[0],n[1],r)&&(s=o<3?void 0:s,o=1),t=Object(t);++a-1}function hR(e,t){var n=this.__data__,a=Bd(n,e);return a<0?(++this.size,n.push([e,t])):n[a][1]=t,this}function ps(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t0&&n(l)?t>1?eu(l,t-1,n,a,o):Cv(o,l):a||(o[o.length]=l)}return o}function Yc(e){var t=e==null?0:e.length;return t?eu(e,1):[]}function lS(e){return Z1(eS(e,void 0,Yc),e+"")}var kv=rS(Object.getPrototypeOf,Object),NR="[object Object]",RR=Function.prototype,IR=Object.prototype,iS=RR.toString,PR=IR.hasOwnProperty,MR=iS.call(Object);function Ev(e){if(!Io(e)||$r(e)!=NR)return!1;var t=kv(e);if(t===null)return!0;var n=PR.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&iS.call(n)==MR}function _R(e,t,n){var a=-1,o=e.length;t<0&&(t=-t>o?0:o+t),n=n>o?o:n,n<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var s=Array(o);++a=t?e:t)),e}function nr(e,t,n){return n===void 0&&(n=t,t=void 0),n!==void 0&&(n=ii(n),n=n===n?n:0),t!==void 0&&(t=ii(t),t=t===t?t:0),AR(ii(e),t,n)}function LR(){this.__data__=new ps,this.size=0}function DR(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}function BR(e){return this.__data__.get(e)}function FR(e){return this.__data__.has(e)}var VR=200;function zR(e,t){var n=this.__data__;if(n instanceof ps){var a=n.__data__;if(!Ti||a.lengthl))return!1;var c=s.get(e),d=s.get(t);if(c&&d)return c==t&&d==e;var f=-1,v=!0,g=n&vP?new $i:void 0;for(s.set(e,t),s.set(t,e);++f=t||$<0||f&&O>=s}function b(){var E=Ff();if(m(E))return k(E);l=setTimeout(b,h(E))}function k(E){return l=void 0,v&&a?g(E):(a=o=void 0,r)}function y(){l!==void 0&&clearTimeout(l),c=0,a=u=o=l=void 0}function S(){return l===void 0?r:k(Ff())}function C(){var E=Ff(),$=m(E);if(a=arguments,o=this,u=E,$){if(l===void 0)return p(u);if(f)return clearTimeout(l),l=setTimeout(b,t),g(u)}return l===void 0&&(l=setTimeout(b,t)),r}return C.cancel=y,C.flush=S,C}function Ap(e,t,n){(n!==void 0&&!Ji(e[t],n)||n===void 0&&!(t in e))&&vv(e,t,n)}function $S(e){return Io(e)&&Rl(e)}function Lp(e,t){if(!(t==="constructor"&&typeof e[t]=="function")&&t!="__proto__")return e[t]}function oM(e){return Nl(e,Qi(e))}function sM(e,t,n,a,o,s,r){var l=Lp(e,n),u=Lp(t,n),c=r.get(u);if(c){Ap(e,n,c);return}var d=s?s(l,u,n+"",e,t,r):void 0,f=d===void 0;if(f){var v=ca(u),g=!v&&Ei(u),p=!v&&!g&&wv(u);d=u,v||g||p?ca(l)?d=l:$S(l)?d=J1(l):g?(f=!1,d=cS(u,!0)):p?(f=!1,d=vS(u,!0)):d=[]:Ev(u)||ki(u)?(d=l,ki(l)?d=oM(l):(!da(l)||hv(l))&&(d=mS(u))):f=!1}f&&(r.set(u,d),o(d,u,a,s,r),r.delete(u)),Ap(e,n,d)}function OS(e,t,n,a,o){e!==t&&TS(t,function(s,r){if(o||(o=new qa),da(s))sM(e,t,r,n,OS,a,o);else{var l=a?a(Lp(e,r),s,r+"",e,t,o):void 0;l===void 0&&(l=s),Ap(e,r,l)}},Qi)}function rM(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}function NS(e,t,n){var a=e==null?0:e.length;if(!a)return-1;var o=a-1;return Q1(e,xS(t),o,!0)}function lM(e,t){var n=-1,a=Rl(e)?Array(e.length):[];return eM(e,function(o,s,r){a[++n]=t(o,s,r)}),a}function iM(e,t){var n=ca(e)?fv:lM;return n(e,xS(t))}function RS(e,t){return eu(iM(e,t),1)}var uM=1/0;function cM(e){var t=e==null?0:e.length;return t?eu(e,uM):[]}function fl(e){for(var t=-1,n=e==null?0:e.length,a={};++t1),s}),Nl(e,hS(e),n),a&&(n=ci(n,gM|bM|yM,mM));for(var o=t.length;o--;)vM(n,t[o]);return n});function PS(e,t,n,a){if(!da(e))return e;t=Il(t,e);for(var o=-1,s=t.length,r=s-1,l=e;l!=null&&++o=TM){var c=xM(e);if(c)return $v(c);r=!1,o=wS,u=new $i}else u=l;e:for(;++ae===void 0,Ht=e=>typeof e=="boolean",He=e=>typeof e=="number",ia=e=>!e&&e!==0||ye(e)&&e.length===0||nt(e)&&!Object.keys(e).length,ha=e=>typeof Element>"u"?!1:e instanceof Element,va=e=>gn(e),OM=e=>Le(e)?!Number.isNaN(Number(e)):!1,nu=e=>e===window,Oi=e=>Object.keys(e),MS=e=>Object.entries(e),Ms=(e,t,n)=>({get value(){return yn(e,t,n)},set value(a){CM(e,t,a)}}),_S="__epPropKey",G=e=>e,NM=e=>nt(e)&&!!e[_S],io=(e,t)=>{if(!nt(e)||NM(e))return e;const{values:n,required:a,default:o,type:s,validator:r}=e,l={type:s,required:!!a,validator:n||r?u=>{let c=!1,d=[];if(n&&(d=Array.from(n),Rt(e,"default")&&d.push(o),c||=d.includes(u)),r&&(c||=r(u)),!c&&d.length>0){const f=[...new Set(d)].map(v=>JSON.stringify(v)).join(", ");S$(`Invalid prop: validation failed${t?` for prop "${t}"`:""}. Expected one of [${f}], got value ${JSON.stringify(u)}.`)}return c}:void 0,[_S]:!0};return Rt(e,"default")&&(l.default=o),l},Ce=e=>fl(Object.entries(e).map(([t,n])=>[t,io(n,t)])),au=Ce({to:{type:G([String,Object]),required:!0},disabled:Boolean}),RM=Ce({zIndex:{type:G([Number,String]),default:100},target:{type:String,default:""},offset:{type:Number,default:0},position:{type:String,values:["top","bottom"],default:"top"},teleported:Boolean,appendTo:{type:au.to.type,default:"body"}}),IM={scroll:({scrollTop:e,fixed:t})=>He(e)&&Ht(t),[bt]:e=>Ht(e)};var AS=class extends Error{constructor(e){super(e),this.name="ElementPlusError"}};function en(e,t){throw new AS(`[${e}] ${t}`)}function pt(e,t){{const n=Le(e)?new AS(`[${e}] ${t}`):e;console.warn(n)}}const PM=["class","style"],MM=/^on[A-Z]/,Wd=(e={})=>{const{excludeListeners:t=!1,excludeKeys:n}=e,a=w(()=>(n?.value||[]).concat(PM)),o=ft();return o?w(()=>fl(Object.entries(o.proxy?.$attrs).filter(([s])=>!a.value.includes(s)&&!(t&&MM.test(s))))):(pt("use-attrs","getCurrentInstance() returned null. useAttrs() must be called at the top of a setup function"),w(()=>({})))};function LS(e,t){var n;const a=Xt();return wa(()=>{a.value=e()},{...t,flush:(n=void 0)!=null?n:"sync"}),gr(a)}function Rr(e){return Tw()?($w(e),!0):!1}function Wn(e){return typeof e=="function"?e():i(e)}function _M(e){if(!Jt(e))return At(e);const t=new Proxy({},{get(n,a,o){return i(Reflect.get(e.value,a,o))},set(n,a,o){return Jt(e.value[a])&&!Jt(o)?e.value[a].value=o:e.value[a]=o,!0},deleteProperty(n,a){return Reflect.deleteProperty(e.value,a)},has(n,a){return Reflect.has(e.value,a)},ownKeys(){return Object.keys(e.value)},getOwnPropertyDescriptor(){return{enumerable:!0,configurable:!0}}});return At(t)}function AM(e){return _M(w(e))}const Mt=typeof window<"u"&&typeof document<"u";typeof WorkerGlobalScope<"u"&&globalThis instanceof WorkerGlobalScope;const LM=e=>typeof e<"u",DS=e=>e!=null,DM=Object.prototype.toString,BM=e=>DM.call(e)==="[object Object]",BS=(e,t,n)=>Math.min(n,Math.max(t,e)),Ya=()=>{},Xc=FM();function FM(){var e,t;return Mt&&((e=window?.navigator)==null?void 0:e.userAgent)&&(/iP(?:ad|hone|od)/.test(window.navigator.userAgent)||((t=window?.navigator)==null?void 0:t.maxTouchPoints)>2&&/iPad|Macintosh/.test(window?.navigator.userAgent))}function FS(e,t){function n(...a){return new Promise((o,s)=>{Promise.resolve(e(()=>t.apply(this,a),{fn:t,thisArg:this,args:a})).then(o).catch(s)})}return n}function VM(e,t={}){let n,a,o=Ya;const s=l=>{clearTimeout(l),o(),o=Ya};return l=>{const u=Wn(e),c=Wn(t.maxWait);return n&&s(n),u<=0||c!==void 0&&c<=0?(a&&(s(a),a=null),Promise.resolve(l())):new Promise((d,f)=>{o=t.rejectOnCancel?f:d,c&&!a&&(a=setTimeout(()=>{n&&s(n),a=null,d(l())},c)),n=setTimeout(()=>{a&&s(a),a=null,d(l())},u)})}}function zM(...e){let t=0,n,a=!0,o=Ya,s,r,l,u,c;!Jt(e[0])&&typeof e[0]=="object"?{delay:r,trailing:l=!0,leading:u=!0,rejectOnCancel:c=!1}=e[0]:[r,l=!0,u=!0,c=!1]=e;const d=()=>{n&&(clearTimeout(n),n=void 0,o(),o=Ya)};return v=>{const g=Wn(r),p=Date.now()-t,h=()=>s=v();return d(),g<=0?(t=Date.now(),h()):(p>g&&(u||!a)?(t=Date.now(),h()):l&&(s=new Promise((m,b)=>{o=c?b:m,n=setTimeout(()=>{t=Date.now(),a=!0,m(h()),d()},Math.max(0,g-p))})),!u&&!n&&(n=setTimeout(()=>a=!0,g)),a=!1,s)}}function HM(e){return ft()}function ou(e,t=200,n={}){return FS(VM(t,n),e)}function KM(e,t=200,n={}){const a=M(e.value),o=ou(()=>{a.value=e.value},t,n);return le(e,()=>o()),a}function VS(e,t=200,n=!1,a=!0,o=!1){return FS(zM(t,n,a,o),e)}function Ov(e,t=!0,n){HM()?ht(e,n):t?e():Ne(e)}function pl(e,t,n={}){const{immediate:a=!0}=n,o=M(!1);let s=null;function r(){s&&(clearTimeout(s),s=null)}function l(){o.value=!1,r()}function u(...c){r(),o.value=!0,s=setTimeout(()=>{o.value=!1,s=null,e(...c)},Wn(t))}return a&&(o.value=!0,Mt&&u()),Rr(l),{isPending:gr(o),start:u,stop:l}}const uo=Mt?window:void 0,WM=Mt?window.document:void 0;function xn(e){var t;const n=Wn(e);return(t=n?.$el)!=null?t:n}function Ft(...e){let t,n,a,o;if(typeof e[0]=="string"||Array.isArray(e[0])?([n,a,o]=e,t=uo):[t,n,a,o]=e,!t)return Ya;Array.isArray(n)||(n=[n]),Array.isArray(a)||(a=[a]);const s=[],r=()=>{s.forEach(d=>d()),s.length=0},l=(d,f,v,g)=>(d.addEventListener(f,v,g),()=>d.removeEventListener(f,v,g)),u=le(()=>[xn(t),Wn(o)],([d,f])=>{if(r(),!d)return;const v=BM(f)?{...f}:f;s.push(...n.flatMap(g=>a.map(p=>l(d,g,p,v))))},{immediate:!0,flush:"post"}),c=()=>{u(),r()};return Rr(c),c}let $b=!1;function Nv(e,t,n={}){const{window:a=uo,ignore:o=[],capture:s=!0,detectIframe:r=!1}=n;if(!a)return Ya;Xc&&!$b&&($b=!0,Array.from(a.document.body.children).forEach(h=>h.addEventListener("click",Ya)),a.document.documentElement.addEventListener("click",Ya));let l=!0;const u=h=>Wn(o).some(m=>{if(typeof m=="string")return Array.from(a.document.querySelectorAll(m)).some(b=>b===h.target||h.composedPath().includes(b));{const b=xn(m);return b&&(h.target===b||h.composedPath().includes(b))}});function c(h){const m=Wn(h);return m&&m.$.subTree.shapeFlag===16}function d(h,m){const b=Wn(h),k=b.$.subTree&&b.$.subTree.children;return k==null||!Array.isArray(k)?!1:k.some(y=>y.el===m.target||m.composedPath().includes(y.el))}const f=h=>{const m=xn(e);if(h.target!=null&&!(!(m instanceof Element)&&c(e)&&d(e,h))&&!(!m||m===h.target||h.composedPath().includes(m))){if(h.detail===0&&(l=!u(h)),!l){l=!0;return}t(h)}};let v=!1;const g=[Ft(a,"click",h=>{v||(v=!0,setTimeout(()=>{v=!1},0),f(h))},{passive:!0,capture:s}),Ft(a,"pointerdown",h=>{const m=xn(e);l=!u(h)&&!!(m&&!h.composedPath().includes(m))},{passive:!0}),r&&Ft(a,"blur",h=>{setTimeout(()=>{var m;const b=xn(e);((m=a.document.activeElement)==null?void 0:m.tagName)==="IFRAME"&&!b?.contains(a.document.activeElement)&&t(h)},0)})].filter(Boolean);return()=>g.forEach(h=>h())}function jM(){const e=M(!1),t=ft();return t&&ht(()=>{e.value=!0},t),e}function jd(e){const t=jM();return w(()=>(t.value,!!e()))}function su(e,t,n={}){const{window:a=uo,...o}=n;let s;const r=jd(()=>a&&"MutationObserver"in a),l=()=>{s&&(s.disconnect(),s=void 0)},u=w(()=>{const v=Wn(e),g=(Array.isArray(v)?v:[v]).map(xn).filter(DS);return new Set(g)}),c=le(()=>u.value,v=>{l(),r.value&&v.size&&(s=new MutationObserver(t),v.forEach(g=>s.observe(g,o)))},{immediate:!0,flush:"post"}),d=()=>s?.takeRecords(),f=()=>{c(),l()};return Rr(f),{isSupported:r,stop:f,takeRecords:d}}function UM(e={}){var t;const{window:n=uo,deep:a=!0,triggerOnRemoval:o=!1}=e,s=(t=e.document)!=null?t:n?.document,r=()=>{var c;let d=s?.activeElement;if(a)for(;d?.shadowRoot;)d=(c=d?.shadowRoot)==null?void 0:c.activeElement;return d},l=M(),u=()=>{l.value=r()};return n&&(Ft(n,"blur",c=>{c.relatedTarget===null&&u()},!0),Ft(n,"focus",u,!0)),o&&su(s,c=>{c.filter(d=>d.removedNodes.length).map(d=>Array.from(d.removedNodes)).flat().forEach(d=>{d===l.value&&u()})},{childList:!0,subtree:!0}),u(),l}function qM(e,t={}){const{window:n=uo}=t,a=jd(()=>n&&"matchMedia"in n&&typeof n.matchMedia=="function");let o;const s=M(!1),r=c=>{s.value=c.matches},l=()=>{o&&("removeEventListener"in o?o.removeEventListener("change",r):o.removeListener(r))},u=wa(()=>{a.value&&(l(),o=n.matchMedia(Wn(e)),"addEventListener"in o?o.addEventListener("change",r):o.addListener(r),s.value=o.matches)});return Rr(()=>{u(),l(),o=void 0}),s}function YM(e){return JSON.parse(JSON.stringify(e))}function GM(e,t,n={}){const{window:a=uo,initialValue:o,observe:s=!1}=n,r=M(o),l=w(()=>{var c;return xn(t)||((c=a?.document)==null?void 0:c.documentElement)});function u(){var c;const d=Wn(e),f=Wn(l);if(f&&a&&d){const v=(c=a.getComputedStyle(f).getPropertyValue(d))==null?void 0:c.trim();r.value=v||o}}return s&&su(l,u,{attributeFilter:["style","class"],window:a}),le([l,()=>Wn(e)],(c,d)=>{d[0]&&d[1]&&d[0].style.removeProperty(d[1]),u()},{immediate:!0}),le(r,c=>{var d;const f=Wn(e);(d=l.value)!=null&&d.style&&f&&(c==null?l.value.style.removeProperty(f):l.value.style.setProperty(f,c))}),r}function XM(e={}){const{document:t=WM}=e;if(!t)return M("visible");const n=M(t.visibilityState);return Ft(t,"visibilitychange",()=>{n.value=t.visibilityState}),n}function Zt(e,t,n={}){const{window:a=uo,...o}=n;let s;const r=jd(()=>a&&"ResizeObserver"in a),l=()=>{s&&(s.disconnect(),s=void 0)},u=w(()=>{const f=Wn(e);return Array.isArray(f)?f.map(v=>xn(v)):[xn(f)]}),c=le(u,f=>{if(l(),r.value&&a){s=new ResizeObserver(t);for(const v of f)v&&s.observe(v,o)}},{immediate:!0,flush:"post"}),d=()=>{l(),c()};return Rr(d),{isSupported:r,stop:d}}function Ob(e,t={}){const{reset:n=!0,windowResize:a=!0,windowScroll:o=!0,immediate:s=!0,updateTiming:r="sync"}=t,l=M(0),u=M(0),c=M(0),d=M(0),f=M(0),v=M(0),g=M(0),p=M(0);function h(){const b=xn(e);if(!b){n&&(l.value=0,u.value=0,c.value=0,d.value=0,f.value=0,v.value=0,g.value=0,p.value=0);return}const k=b.getBoundingClientRect();l.value=k.height,u.value=k.bottom,c.value=k.left,d.value=k.right,f.value=k.top,v.value=k.width,g.value=k.x,p.value=k.y}function m(){r==="sync"?h():r==="next-frame"&&requestAnimationFrame(()=>h())}return Zt(e,m),le(()=>xn(e),b=>!b&&m()),su(e,m,{attributeFilter:["style","class"]}),o&&Ft("scroll",m,{capture:!0,passive:!0}),a&&Ft("resize",m,{passive:!0}),Ov(()=>{s&&m()}),{height:l,bottom:u,left:c,right:d,top:f,width:v,x:g,y:p,update:m}}function Dp(e,t={width:0,height:0},n={}){const{window:a=uo,box:o="content-box"}=n,s=w(()=>{var f,v;return(v=(f=xn(e))==null?void 0:f.namespaceURI)==null?void 0:v.includes("svg")}),r=M(t.width),l=M(t.height),{stop:u}=Zt(e,([f])=>{const v=o==="border-box"?f.borderBoxSize:o==="content-box"?f.contentBoxSize:f.devicePixelContentBoxSize;if(a&&s.value){const g=xn(e);if(g){const p=g.getBoundingClientRect();r.value=p.width,l.value=p.height}}else if(v){const g=Array.isArray(v)?v:[v];r.value=g.reduce((p,{inlineSize:h})=>p+h,0),l.value=g.reduce((p,{blockSize:h})=>p+h,0)}else r.value=f.contentRect.width,l.value=f.contentRect.height},n);Ov(()=>{const f=xn(e);f&&(r.value="offsetWidth"in f?f.offsetWidth:t.width,l.value="offsetHeight"in f?f.offsetHeight:t.height)});const c=le(()=>xn(e),f=>{r.value=f?t.width:0,l.value=f?t.height:0});function d(){u(),c()}return{width:r,height:l,stop:d}}function JM(e,t,n={}){const{root:a,rootMargin:o="0px",threshold:s=0,window:r=uo,immediate:l=!0}=n,u=jd(()=>r&&"IntersectionObserver"in r),c=w(()=>{const p=Wn(e);return(Array.isArray(p)?p:[p]).map(xn).filter(DS)});let d=Ya;const f=M(l),v=u.value?le(()=>[c.value,xn(a),f.value],([p,h])=>{if(d(),!f.value||!p.length)return;const m=new IntersectionObserver(t,{root:xn(h),rootMargin:o,threshold:s});p.forEach(b=>b&&m.observe(b)),d=()=>{m.disconnect(),d=Ya}},{immediate:l,flush:"post"}):Ya,g=()=>{d(),v(),f.value=!1};return Rr(g),{isSupported:u,isActive:f,pause(){d(),f.value=!1},resume(){f.value=!0},stop:g}}function zS(e,t,n,a={}){var o,s,r;const{clone:l=!1,passive:u=!1,eventName:c,deep:d=!1,defaultValue:f,shouldEmit:v}=a,g=ft(),p=n||g?.emit||((o=g?.$emit)==null?void 0:o.bind(g))||((r=(s=g?.proxy)==null?void 0:s.$emit)==null?void 0:r.bind(g?.proxy));let h=c;t||(t="modelValue"),h=h||`update:${t.toString()}`;const m=y=>l?typeof l=="function"?l(y):YM(y):y,b=()=>LM(e[t])?m(e[t]):f,k=y=>{v?v(y)&&p(h,y):p(h,y)};if(u){const y=b(),S=M(y);let C=!1;return le(()=>e[t],E=>{C||(C=!0,S.value=m(E),Ne(()=>C=!1))}),le(S,E=>{!C&&(E!==e[t]||d)&&k(E)},{deep:d}),S}else return w({get(){return b()},set(y){k(y)}})}function ZM(e={}){const{window:t=uo}=e;if(!t)return M(!1);const n=M(t.document.hasFocus());return Ft(t,"blur",()=>{n.value=!1}),Ft(t,"focus",()=>{n.value=!0}),n}function Rv(e={}){const{window:t=uo,initialWidth:n=Number.POSITIVE_INFINITY,initialHeight:a=Number.POSITIVE_INFINITY,listenOrientation:o=!0,includeScrollbar:s=!0,type:r="inner"}=e,l=M(n),u=M(a),c=()=>{t&&(r==="outer"?(l.value=t.outerWidth,u.value=t.outerHeight):s?(l.value=t.innerWidth,u.value=t.innerHeight):(l.value=t.document.documentElement.clientWidth,u.value=t.document.documentElement.clientHeight))};if(c(),Ov(c),Ft("resize",c,{passive:!0}),o){const d=qM("(orientation: portrait)");le(d,()=>c())}return{width:l,height:u}}function Iv(){const e=Xt(),t=M(0),n=w(()=>({minWidth:`${Math.max(t.value,Ad)}px`}));return Zt(e,()=>{t.value=e.value?.getBoundingClientRect().width??0}),{calculatorRef:e,calculatorWidth:t,inputStyle:n}}const xo=({from:e,replacement:t,scope:n,version:a,ref:o,type:s="API"},r)=>{le(()=>i(r),l=>{l&&pt(n,`[${s}] ${e} is about to be deprecated in version ${a}, please use ${t} instead. +For more detail, please visit: ${o} +`)},{immediate:!0})},QM='a[href],button:not([disabled]),button:not([hidden]),:not([tabindex="-1"]),input:not([disabled]),input:not([type="hidden"]),select:not([disabled]),textarea:not([disabled])',HS=e=>typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot,Nb=e=>typeof Element>"u"?!1:e instanceof Element,e_=e=>getComputedStyle(e).position==="fixed"?!1:e.offsetParent!==null,Rb=e=>Array.from(e.querySelectorAll(QM)).filter(t=>Ni(t)&&e_(t)),Ni=e=>{if(e.tabIndex>0||e.tabIndex===0&&e.getAttribute("tabIndex")!==null)return!0;if(e.tabIndex<0||e.hasAttribute("disabled")||e.getAttribute("aria-disabled")==="true")return!1;switch(e.nodeName){case"A":return!!e.href&&e.rel!=="ignore";case"INPUT":return!(e.type==="hidden"||e.type==="file");case"BUTTON":case"SELECT":case"TEXTAREA":return!0;default:return!1}},uc=function(e,t,...n){let a;t.includes("mouse")||t.includes("click")?a="MouseEvents":t.includes("key")?a="KeyboardEvent":a="HTMLEvents";const o=document.createEvent(a);return o.initEvent(t,...n),e.dispatchEvent(o),e},KS=e=>!e.getAttribute("aria-owns"),WS=(e,t,n)=>{const{parentNode:a}=e;if(!a)return null;const o=a.querySelectorAll(n);return o[Array.prototype.indexOf.call(o,e)+t]||null},ru=(e,t)=>{if(!e||!e.focus)return;let n=!1;Nb(e)&&!Ni(e)&&!e.getAttribute("tabindex")&&(e.setAttribute("tabindex","-1"),n=!0),e.focus(t),Nb(e)&&n&&e.removeAttribute("tabindex")},cc=e=>{e&&(ru(e),!KS(e)&&e.click())},Ud=()=>Mt&&/firefox/i.test(window.navigator.userAgent),jS=()=>Mt&&/android/i.test(window.navigator.userAgent),Pv=(e="")=>e.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d"),$s=e=>qi(e),t_="utils/dom/style",US=(e="")=>e.split(" ").filter(t=>!!t.trim()),To=(e,t)=>{if(!e||!t)return!1;if(t.includes(" "))throw new Error("className should not contain space.");return e.classList.contains(t)},La=(e,t)=>{!e||!t.trim()||e.classList.add(...US(t))},ta=(e,t)=>{!e||!t.trim()||e.classList.remove(...US(t))},Yo=(e,t)=>{if(!Mt||!e||!t||HS(e))return"";let n=Fn(t);n==="float"&&(n="cssFloat");try{const a=e.style[n];if(a)return a;const o=document.defaultView?.getComputedStyle(e,"");return o?o[n]:""}catch{return e.style[n]}},qS=(e,t,n)=>{if(!(!e||!t))if(nt(t))MS(t).forEach(([a,o])=>qS(e,a,o));else{const a=Fn(t);e.style[a]=n}};function rn(e,t="px"){if(!e&&e!==0)return"";if(He(e)||OM(e))return`${e}${t}`;if(Le(e))return e;pt(t_,"binding value must be a string or number")}const YS=(e,t,n,a)=>{const o={offsetX:0,offsetY:0},s=M(!1),r=(v,g)=>{if(e.value){const{offsetX:p,offsetY:h}=o,m=e.value.getBoundingClientRect(),b=m.left,k=m.top,y=m.width,S=m.height,C=document.documentElement.clientWidth,E=document.documentElement.clientHeight,$=-b+p,O=-k+h,R=C-b-y+p,N=E-k-(S{const g=v.clientX,p=v.clientY,{offsetX:h,offsetY:m}=o,b=y=>{s.value||(s.value=!0),r(h+y.clientX-g,m+y.clientY-p)},k=()=>{s.value=!1,document.removeEventListener("mousemove",b),document.removeEventListener("mouseup",k)};document.addEventListener("mousemove",b),document.addEventListener("mouseup",k)},u=()=>{t.value&&e.value&&(t.value.addEventListener("mousedown",l),window.addEventListener("resize",f))},c=()=>{t.value&&e.value&&(t.value.removeEventListener("mousedown",l),window.removeEventListener("resize",f))},d=()=>{o.offsetX=0,o.offsetY=0,e.value&&(e.value.style.transform="")},f=()=>{const{offsetX:v,offsetY:g}=o;r(v,g)};return ht(()=>{wa(()=>{n.value?u():c()})}),Bt(()=>{c()}),{isDragging:s,resetPosition:d,updatePosition:f}};var n_={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",alphaDescription:"alpha {alpha}, current color is {color}",hueLabel:"pick hue value",hueDescription:"hue {hue}, current color is {color}",svLabel:"pick saturation and brightness value",svDescription:"saturation {saturation}, brightness {brightness}, current color is {color}",predefineDescription:"select {value} as the color"},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",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",selectAllLabel:"Select all rows",selectRowLabel:"Select this row",expandRowLabel:"Expand this row",collapseRowLabel:"Collapse this row",sortLabel:"Sort by {column}",filterLabel:"Filter by {column}"},tag:{close:"Close this tag"},tour:{next:"Next",previous:"Previous",finish:"Finish",close:"Close this dialog"},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 a_=e=>(t,n)=>o_(t,n,i(e)),o_=(e,t,n)=>yn(n,e,e).replace(/\{(\w+)\}/g,(a,o)=>`${t?.[o]??`{${o}}`}`),s_=e=>({lang:w(()=>i(e).name),locale:Jt(e)?e:M(e),t:a_(e)}),GS=Symbol("localeContextKey"),Ct=e=>{const t=e||_e(GS,M());return s_(w(()=>t.value||n_))},di="el",r_="is-",Ys=(e,t,n,a,o)=>{let s=`${e}-${t}`;return n&&(s+=`-${n}`),a&&(s+=`__${a}`),o&&(s+=`--${o}`),s},XS=Symbol("namespaceContextKey"),Mv=e=>{const t=e||(ft()?_e(XS,M(di)):M(di));return w(()=>i(t)||di)},fe=(e,t)=>{const n=Mv(t);return{namespace:n,b:(h="")=>Ys(n.value,e,h,"",""),e:h=>h?Ys(n.value,e,"",h,""):"",m:h=>h?Ys(n.value,e,"","",h):"",be:(h,m)=>h&&m?Ys(n.value,e,h,m,""):"",em:(h,m)=>h&&m?Ys(n.value,e,"",h,m):"",bm:(h,m)=>h&&m?Ys(n.value,e,h,"",m):"",bem:(h,m,b)=>h&&m&&b?Ys(n.value,e,h,m,b):"",is:(h,...m)=>{const b=m.length>=1?m[0]:!0;return h&&b?`${r_}${h}`:""},cssVar:h=>{const m={};for(const b in h)h[b]&&(m[`--${n.value}-${b}`]=h[b]);return m},cssVarName:h=>`--${n.value}-${h}`,cssVarBlock:h=>{const m={};for(const b in h)h[b]&&(m[`--${n.value}-${e}-${b}`]=h[b]);return m},cssVarBlockName:h=>`--${n.value}-${e}-${h}`}};function l_(e,t,n,a){const o=n-t;return e/=a/2,e<1?o/2*e*e*e+t:o/2*((e-=2)*e*e+2)+t}const Qa=e=>Mt?window.requestAnimationFrame(e):setTimeout(e,16),rs=e=>Mt?window.cancelAnimationFrame(e):clearTimeout(e),i_=(e,t)=>{if(!Mt)return!1;const n={undefined:"overflow",true:"overflow-y",false:"overflow-x"}[String(t)],a=Yo(e,n);return["scroll","auto","overlay"].some(o=>a.includes(o))},_v=(e,t)=>{if(!Mt)return;let n=e;for(;n;){if([window,document,document.documentElement].includes(n))return window;if(i_(n,t))return n;HS(n)?n=n.host:n=n.parentNode}return n};let Du;const JS=e=>{if(!Mt)return 0;if(Du!==void 0)return Du;const t=document.createElement("div");t.className=`${e}-scrollbar__wrap`,t.style.visibility="hidden",t.style.width="100px",t.style.position="absolute",t.style.top="-9999px",document.body.appendChild(t);const n=t.offsetWidth;t.style.overflow="scroll";const a=document.createElement("div");a.style.width="100%",t.appendChild(a);const o=a.offsetWidth;return t.parentNode?.removeChild(t),Du=n-o,Du};function Av(e,t){if(!Mt)return;if(!t){e.scrollTop=0;return}const n=[];let a=t.offsetParent;for(;a!==null&&e!==a&&e.contains(a);)n.push(a),a=a.offsetParent;const o=t.offsetTop+n.reduce((u,c)=>u+c.offsetTop,0),s=o+t.offsetHeight,r=e.scrollTop,l=r+e.clientHeight;ol&&(e.scrollTop=s-e.clientHeight)}function u_(e,t,n,a,o){const s=Date.now();let r;const l=()=>{const u=Date.now()-s,c=l_(u>a?a:u,t,n,a);nu(e)?e.scrollTo(window.pageXOffset,c):e.scrollTop=c,u{r&&rs(r)}}const Ib=(e,t)=>nu(t)?e.ownerDocument.documentElement:t,Pb=e=>nu(e)?window.scrollY:e.scrollTop,qd=(e,t={})=>{Jt(e)||en("[useLockscreen]","You need to pass a ref param to this function");const n=t.ns||fe("popup"),a=w(()=>n.bm("parent","hidden"));let o=0,s=!1,r="0",l=!1;const u=()=>{l||(l=!0,setTimeout(()=>{typeof document>"u"||s&&document&&(document.body.style.width=r,ta(document.body,a.value))},200))};le(e,c=>{if(!c){u();return}l=!1,s=!To(document.body,a.value),s&&(r=document.body.style.width,La(document.body,a.value)),o=JS(n.namespace.value);const d=document.documentElement.clientHeight0&&(d||f==="scroll")&&s&&(document.body.style.width=`calc(100% - ${o}px)`)}),$w(()=>u())},Nn=(e,t,{checkForDefaultPrevented:n=!0}={})=>o=>{const s=e?.(o);if(n===!1||!s)return t?.(o)},Mb=e=>t=>t.pointerType==="mouse"?e(t):void 0,jt=e=>{if(e.code&&e.code!=="Unidentified")return e.code;const t=ZS(e);return t?Object.values(we).includes(t)?t:t===" "?we.space:"":""},ZS=e=>{let t=e.key&&e.key!=="Unidentified"?e.key:"";if(!t&&e.type==="keyup"&&jS()){const n=e.target;t=n.value.charAt(n.selectionStart-1)}return t},c_=io({type:G(Boolean),default:null}),d_=io({type:G(Function)}),f_=e=>{const t=`update:${e}`,n=`onUpdate:${e}`,a=[t],o={[e]:c_,[n]:d_};return{useModelToggle:({indicator:r,toggleReason:l,shouldHideWhenRouteChanges:u,shouldProceed:c,onShow:d,onHide:f})=>{const v=ft(),{emit:g}=v,p=v.props,h=w(()=>Ve(p[n])),m=w(()=>p[e]===null),b=$=>{r.value!==!0&&(r.value=!0,l&&(l.value=$),Ve(d)&&d($))},k=$=>{r.value!==!1&&(r.value=!1,l&&(l.value=$),Ve(f)&&f($))},y=$=>{if(p.disabled===!0||Ve(c)&&!c())return;const O=h.value&&Mt;O&&g(t,!0),(m.value||!O)&&b($)},S=$=>{if(p.disabled===!0||!Mt)return;const O=h.value&&Mt;O&&g(t,!1),(m.value||!O)&&k($)},C=$=>{Ht($)&&(p.disabled&&$?h.value&&g(t,!1):r.value!==$&&($?b():k()))},E=()=>{r.value?S():y()};return le(()=>p[e],C),u&&v.appContext.config.globalProperties.$route!==void 0&&le(()=>({...v.proxy.$route}),()=>{u.value&&r.value&&S()}),ht(()=>{C(p[e])}),{hide:S,show:y,toggle:E,hasUpdateHandler:h}},useModelToggleProps:o,useModelToggleEmits:a}},QS=e=>{const t=ft();return w(()=>t?.proxy?.$props?.[e])};var ma="top",Va="bottom",za="right",ga="left",Lv="auto",lu=[ma,Va,za,ga],hl="start",Ri="end",p_="clippingParents",eC="viewport",Wl="popper",h_="reference",_b=lu.reduce(function(e,t){return e.concat([t+"-"+hl,t+"-"+Ri])},[]),Lo=[].concat(lu,[Lv]).reduce(function(e,t){return e.concat([t,t+"-"+hl,t+"-"+Ri])},[]),v_="beforeRead",m_="read",g_="afterRead",b_="beforeMain",y_="main",w_="afterMain",S_="beforeWrite",C_="write",k_="afterWrite",E_=[v_,m_,g_,b_,y_,w_,S_,C_,k_];function Mo(e){return e?(e.nodeName||"").toLowerCase():null}function Ra(e){if(e==null)return window;if(e.toString()!=="[object Window]"){var t=e.ownerDocument;return t&&t.defaultView||window}return e}function wr(e){var t=Ra(e).Element;return e instanceof t||e instanceof Element}function Ba(e){var t=Ra(e).HTMLElement;return e instanceof t||e instanceof HTMLElement}function Dv(e){if(typeof ShadowRoot>"u")return!1;var t=Ra(e).ShadowRoot;return e instanceof t||e instanceof ShadowRoot}function x_(e){var t=e.state;Object.keys(t.elements).forEach(function(n){var a=t.styles[n]||{},o=t.attributes[n]||{},s=t.elements[n];!Ba(s)||!Mo(s)||(Object.assign(s.style,a),Object.keys(o).forEach(function(r){var l=o[r];l===!1?s.removeAttribute(r):s.setAttribute(r,l===!0?"":l)}))})}function T_(e){var t=e.state,n={popper:{position:t.options.strategy,left:"0",top:"0",margin:"0"},arrow:{position:"absolute"},reference:{}};return Object.assign(t.elements.popper.style,n.popper),t.styles=n,t.elements.arrow&&Object.assign(t.elements.arrow.style,n.arrow),function(){Object.keys(t.elements).forEach(function(a){var o=t.elements[a],s=t.attributes[a]||{},r=Object.keys(t.styles.hasOwnProperty(a)?t.styles[a]:n[a]),l=r.reduce(function(u,c){return u[c]="",u},{});!Ba(o)||!Mo(o)||(Object.assign(o.style,l),Object.keys(s).forEach(function(u){o.removeAttribute(u)}))})}}var tC={name:"applyStyles",enabled:!0,phase:"write",fn:x_,effect:T_,requires:["computeStyles"]};function $o(e){return e.split("-")[0]}var dr=Math.max,Jc=Math.min,vl=Math.round;function Bp(){var e=navigator.userAgentData;return e!=null&&e.brands&&Array.isArray(e.brands)?e.brands.map(function(t){return t.brand+"/"+t.version}).join(" "):navigator.userAgent}function nC(){return!/^((?!chrome|android).)*safari/i.test(Bp())}function ml(e,t,n){t===void 0&&(t=!1),n===void 0&&(n=!1);var a=e.getBoundingClientRect(),o=1,s=1;t&&Ba(e)&&(o=e.offsetWidth>0&&vl(a.width)/e.offsetWidth||1,s=e.offsetHeight>0&&vl(a.height)/e.offsetHeight||1);var r=wr(e)?Ra(e):window,l=r.visualViewport,u=!nC()&&n,c=(a.left+(u&&l?l.offsetLeft:0))/o,d=(a.top+(u&&l?l.offsetTop:0))/s,f=a.width/o,v=a.height/s;return{width:f,height:v,top:d,right:c+f,bottom:d+v,left:c,x:c,y:d}}function Bv(e){var t=ml(e),n=e.offsetWidth,a=e.offsetHeight;return Math.abs(t.width-n)<=1&&(n=t.width),Math.abs(t.height-a)<=1&&(a=t.height),{x:e.offsetLeft,y:e.offsetTop,width:n,height:a}}function aC(e,t){var n=t.getRootNode&&t.getRootNode();if(e.contains(t))return!0;if(n&&Dv(n)){var a=t;do{if(a&&e.isSameNode(a))return!0;a=a.parentNode||a.host}while(a)}return!1}function ls(e){return Ra(e).getComputedStyle(e)}function $_(e){return["table","td","th"].indexOf(Mo(e))>=0}function Ks(e){return((wr(e)?e.ownerDocument:e.document)||window.document).documentElement}function Yd(e){return Mo(e)==="html"?e:e.assignedSlot||e.parentNode||(Dv(e)?e.host:null)||Ks(e)}function Ab(e){return!Ba(e)||ls(e).position==="fixed"?null:e.offsetParent}function O_(e){var t=/firefox/i.test(Bp()),n=/Trident/i.test(Bp());if(n&&Ba(e)){var a=ls(e);if(a.position==="fixed")return null}var o=Yd(e);for(Dv(o)&&(o=o.host);Ba(o)&&["html","body"].indexOf(Mo(o))<0;){var s=ls(o);if(s.transform!=="none"||s.perspective!=="none"||s.contain==="paint"||["transform","perspective"].indexOf(s.willChange)!==-1||t&&s.willChange==="filter"||t&&s.filter&&s.filter!=="none")return o;o=o.parentNode}return null}function iu(e){for(var t=Ra(e),n=Ab(e);n&&$_(n)&&ls(n).position==="static";)n=Ab(n);return n&&(Mo(n)==="html"||Mo(n)==="body"&&ls(n).position==="static")?t:n||O_(e)||t}function Fv(e){return["top","bottom"].indexOf(e)>=0?"x":"y"}function fi(e,t,n){return dr(e,Jc(t,n))}function N_(e,t,n){var a=fi(e,t,n);return a>n?n:a}function oC(){return{top:0,right:0,bottom:0,left:0}}function sC(e){return Object.assign({},oC(),e)}function rC(e,t){return t.reduce(function(n,a){return n[a]=e,n},{})}var R_=function(e,t){return e=typeof e=="function"?e(Object.assign({},t.rects,{placement:t.placement})):e,sC(typeof e!="number"?e:rC(e,lu))};function I_(e){var t,n=e.state,a=e.name,o=e.options,s=n.elements.arrow,r=n.modifiersData.popperOffsets,l=$o(n.placement),u=Fv(l),c=[ga,za].indexOf(l)>=0,d=c?"height":"width";if(!(!s||!r)){var f=R_(o.padding,n),v=Bv(s),g=u==="y"?ma:ga,p=u==="y"?Va:za,h=n.rects.reference[d]+n.rects.reference[u]-r[u]-n.rects.popper[d],m=r[u]-n.rects.reference[u],b=iu(s),k=b?u==="y"?b.clientHeight||0:b.clientWidth||0:0,y=h/2-m/2,S=f[g],C=k-v[d]-f[p],E=k/2-v[d]/2+y,$=fi(S,E,C),O=u;n.modifiersData[a]=(t={},t[O]=$,t.centerOffset=$-E,t)}}function P_(e){var t=e.state,n=e.options,a=n.element,o=a===void 0?"[data-popper-arrow]":a;o!=null&&(typeof o=="string"&&(o=t.elements.popper.querySelector(o),!o)||aC(t.elements.popper,o)&&(t.elements.arrow=o))}var M_={name:"arrow",enabled:!0,phase:"main",fn:I_,effect:P_,requires:["popperOffsets"],requiresIfExists:["preventOverflow"]};function gl(e){return e.split("-")[1]}var __={top:"auto",right:"auto",bottom:"auto",left:"auto"};function A_(e,t){var n=e.x,a=e.y,o=t.devicePixelRatio||1;return{x:vl(n*o)/o||0,y:vl(a*o)/o||0}}function Lb(e){var t,n=e.popper,a=e.popperRect,o=e.placement,s=e.variation,r=e.offsets,l=e.position,u=e.gpuAcceleration,c=e.adaptive,d=e.roundOffsets,f=e.isFixed,v=r.x,g=v===void 0?0:v,p=r.y,h=p===void 0?0:p,m=typeof d=="function"?d({x:g,y:h}):{x:g,y:h};g=m.x,h=m.y;var b=r.hasOwnProperty("x"),k=r.hasOwnProperty("y"),y=ga,S=ma,C=window;if(c){var E=iu(n),$="clientHeight",O="clientWidth";if(E===Ra(n)&&(E=Ks(n),ls(E).position!=="static"&&l==="absolute"&&($="scrollHeight",O="scrollWidth")),E=E,o===ma||(o===ga||o===za)&&s===Ri){S=Va;var R=f&&E===C&&C.visualViewport?C.visualViewport.height:E[$];h-=R-a.height,h*=u?1:-1}if(o===ga||(o===ma||o===Va)&&s===Ri){y=za;var N=f&&E===C&&C.visualViewport?C.visualViewport.width:E[O];g-=N-a.width,g*=u?1:-1}}var A=Object.assign({position:l},c&&__),_=d===!0?A_({x:g,y:h},Ra(n)):{x:g,y:h};if(g=_.x,h=_.y,u){var V;return Object.assign({},A,(V={},V[S]=k?"0":"",V[y]=b?"0":"",V.transform=(C.devicePixelRatio||1)<=1?"translate("+g+"px, "+h+"px)":"translate3d("+g+"px, "+h+"px, 0)",V))}return Object.assign({},A,(t={},t[S]=k?h+"px":"",t[y]=b?g+"px":"",t.transform="",t))}function L_(e){var t=e.state,n=e.options,a=n.gpuAcceleration,o=a===void 0?!0:a,s=n.adaptive,r=s===void 0?!0:s,l=n.roundOffsets,u=l===void 0?!0:l,c={placement:$o(t.placement),variation:gl(t.placement),popper:t.elements.popper,popperRect:t.rects.popper,gpuAcceleration:o,isFixed:t.options.strategy==="fixed"};t.modifiersData.popperOffsets!=null&&(t.styles.popper=Object.assign({},t.styles.popper,Lb(Object.assign({},c,{offsets:t.modifiersData.popperOffsets,position:t.options.strategy,adaptive:r,roundOffsets:u})))),t.modifiersData.arrow!=null&&(t.styles.arrow=Object.assign({},t.styles.arrow,Lb(Object.assign({},c,{offsets:t.modifiersData.arrow,position:"absolute",adaptive:!1,roundOffsets:u})))),t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-placement":t.placement})}var lC={name:"computeStyles",enabled:!0,phase:"beforeWrite",fn:L_,data:{}},Bu={passive:!0};function D_(e){var t=e.state,n=e.instance,a=e.options,o=a.scroll,s=o===void 0?!0:o,r=a.resize,l=r===void 0?!0:r,u=Ra(t.elements.popper),c=[].concat(t.scrollParents.reference,t.scrollParents.popper);return s&&c.forEach(function(d){d.addEventListener("scroll",n.update,Bu)}),l&&u.addEventListener("resize",n.update,Bu),function(){s&&c.forEach(function(d){d.removeEventListener("scroll",n.update,Bu)}),l&&u.removeEventListener("resize",n.update,Bu)}}var iC={name:"eventListeners",enabled:!0,phase:"write",fn:function(){},effect:D_,data:{}},B_={left:"right",right:"left",bottom:"top",top:"bottom"};function dc(e){return e.replace(/left|right|bottom|top/g,function(t){return B_[t]})}var F_={start:"end",end:"start"};function Db(e){return e.replace(/start|end/g,function(t){return F_[t]})}function Vv(e){var t=Ra(e),n=t.pageXOffset,a=t.pageYOffset;return{scrollLeft:n,scrollTop:a}}function zv(e){return ml(Ks(e)).left+Vv(e).scrollLeft}function V_(e,t){var n=Ra(e),a=Ks(e),o=n.visualViewport,s=a.clientWidth,r=a.clientHeight,l=0,u=0;if(o){s=o.width,r=o.height;var c=nC();(c||!c&&t==="fixed")&&(l=o.offsetLeft,u=o.offsetTop)}return{width:s,height:r,x:l+zv(e),y:u}}function z_(e){var t,n=Ks(e),a=Vv(e),o=(t=e.ownerDocument)==null?void 0:t.body,s=dr(n.scrollWidth,n.clientWidth,o?o.scrollWidth:0,o?o.clientWidth:0),r=dr(n.scrollHeight,n.clientHeight,o?o.scrollHeight:0,o?o.clientHeight:0),l=-a.scrollLeft+zv(e),u=-a.scrollTop;return ls(o||n).direction==="rtl"&&(l+=dr(n.clientWidth,o?o.clientWidth:0)-s),{width:s,height:r,x:l,y:u}}function Hv(e){var t=ls(e),n=t.overflow,a=t.overflowX,o=t.overflowY;return/auto|scroll|overlay|hidden/.test(n+o+a)}function uC(e){return["html","body","#document"].indexOf(Mo(e))>=0?e.ownerDocument.body:Ba(e)&&Hv(e)?e:uC(Yd(e))}function pi(e,t){var n;t===void 0&&(t=[]);var a=uC(e),o=a===((n=e.ownerDocument)==null?void 0:n.body),s=Ra(a),r=o?[s].concat(s.visualViewport||[],Hv(a)?a:[]):a,l=t.concat(r);return o?l:l.concat(pi(Yd(r)))}function Fp(e){return Object.assign({},e,{left:e.x,top:e.y,right:e.x+e.width,bottom:e.y+e.height})}function H_(e,t){var n=ml(e,!1,t==="fixed");return n.top=n.top+e.clientTop,n.left=n.left+e.clientLeft,n.bottom=n.top+e.clientHeight,n.right=n.left+e.clientWidth,n.width=e.clientWidth,n.height=e.clientHeight,n.x=n.left,n.y=n.top,n}function Bb(e,t,n){return t===eC?Fp(V_(e,n)):wr(t)?H_(t,n):Fp(z_(Ks(e)))}function K_(e){var t=pi(Yd(e)),n=["absolute","fixed"].indexOf(ls(e).position)>=0,a=n&&Ba(e)?iu(e):e;return wr(a)?t.filter(function(o){return wr(o)&&aC(o,a)&&Mo(o)!=="body"}):[]}function W_(e,t,n,a){var o=t==="clippingParents"?K_(e):[].concat(t),s=[].concat(o,[n]),r=s[0],l=s.reduce(function(u,c){var d=Bb(e,c,a);return u.top=dr(d.top,u.top),u.right=Jc(d.right,u.right),u.bottom=Jc(d.bottom,u.bottom),u.left=dr(d.left,u.left),u},Bb(e,r,a));return l.width=l.right-l.left,l.height=l.bottom-l.top,l.x=l.left,l.y=l.top,l}function cC(e){var t=e.reference,n=e.element,a=e.placement,o=a?$o(a):null,s=a?gl(a):null,r=t.x+t.width/2-n.width/2,l=t.y+t.height/2-n.height/2,u;switch(o){case ma:u={x:r,y:t.y-n.height};break;case Va:u={x:r,y:t.y+t.height};break;case za:u={x:t.x+t.width,y:l};break;case ga:u={x:t.x-n.width,y:l};break;default:u={x:t.x,y:t.y}}var c=o?Fv(o):null;if(c!=null){var d=c==="y"?"height":"width";switch(s){case hl:u[c]=u[c]-(t[d]/2-n[d]/2);break;case Ri:u[c]=u[c]+(t[d]/2-n[d]/2);break}}return u}function Ii(e,t){t===void 0&&(t={});var n=t,a=n.placement,o=a===void 0?e.placement:a,s=n.strategy,r=s===void 0?e.strategy:s,l=n.boundary,u=l===void 0?p_:l,c=n.rootBoundary,d=c===void 0?eC:c,f=n.elementContext,v=f===void 0?Wl:f,g=n.altBoundary,p=g===void 0?!1:g,h=n.padding,m=h===void 0?0:h,b=sC(typeof m!="number"?m:rC(m,lu)),k=v===Wl?h_:Wl,y=e.rects.popper,S=e.elements[p?k:v],C=W_(wr(S)?S:S.contextElement||Ks(e.elements.popper),u,d,r),E=ml(e.elements.reference),$=cC({reference:E,element:y,placement:o}),O=Fp(Object.assign({},y,$)),R=v===Wl?O:E,N={top:C.top-R.top+b.top,bottom:R.bottom-C.bottom+b.bottom,left:C.left-R.left+b.left,right:R.right-C.right+b.right},A=e.modifiersData.offset;if(v===Wl&&A){var _=A[o];Object.keys(N).forEach(function(V){var z=[za,Va].indexOf(V)>=0?1:-1,U=[ma,Va].indexOf(V)>=0?"y":"x";N[V]+=_[U]*z})}return N}function j_(e,t){t===void 0&&(t={});var n=t,a=n.placement,o=n.boundary,s=n.rootBoundary,r=n.padding,l=n.flipVariations,u=n.allowedAutoPlacements,c=u===void 0?Lo:u,d=gl(a),f=d?l?_b:_b.filter(function(p){return gl(p)===d}):lu,v=f.filter(function(p){return c.indexOf(p)>=0});v.length===0&&(v=f);var g=v.reduce(function(p,h){return p[h]=Ii(e,{placement:h,boundary:o,rootBoundary:s,padding:r})[$o(h)],p},{});return Object.keys(g).sort(function(p,h){return g[p]-g[h]})}function U_(e){if($o(e)===Lv)return[];var t=dc(e);return[Db(e),t,Db(t)]}function q_(e){var t=e.state,n=e.options,a=e.name;if(!t.modifiersData[a]._skip){for(var o=n.mainAxis,s=o===void 0?!0:o,r=n.altAxis,l=r===void 0?!0:r,u=n.fallbackPlacements,c=n.padding,d=n.boundary,f=n.rootBoundary,v=n.altBoundary,g=n.flipVariations,p=g===void 0?!0:g,h=n.allowedAutoPlacements,m=t.options.placement,b=$o(m),k=b===m,y=u||(k||!p?[dc(m)]:U_(m)),S=[m].concat(y).reduce(function(X,Q){return X.concat($o(Q)===Lv?j_(t,{placement:Q,boundary:d,rootBoundary:f,padding:c,flipVariations:p,allowedAutoPlacements:h}):Q)},[]),C=t.rects.reference,E=t.rects.popper,$=new Map,O=!0,R=S[0],N=0;N=0,U=z?"width":"height",W=Ii(t,{placement:A,boundary:d,rootBoundary:f,altBoundary:v,padding:c}),P=z?V?za:ga:V?Va:ma;C[U]>E[U]&&(P=dc(P));var I=dc(P),L=[];if(s&&L.push(W[_]<=0),l&&L.push(W[P]<=0,W[I]<=0),L.every(function(X){return X})){R=A,O=!1;break}$.set(A,L)}if(O)for(var D=p?3:1,F=function(X){var Q=S.find(function(he){var ue=$.get(he);if(ue)return ue.slice(0,X).every(function(ge){return ge})});if(Q)return R=Q,"break"},q=D;q>0;q--){var j=F(q);if(j==="break")break}t.placement!==R&&(t.modifiersData[a]._skip=!0,t.placement=R,t.reset=!0)}}var Y_={name:"flip",enabled:!0,phase:"main",fn:q_,requiresIfExists:["offset"],data:{_skip:!1}};function Fb(e,t,n){return n===void 0&&(n={x:0,y:0}),{top:e.top-t.height-n.y,right:e.right-t.width+n.x,bottom:e.bottom-t.height+n.y,left:e.left-t.width-n.x}}function Vb(e){return[ma,za,Va,ga].some(function(t){return e[t]>=0})}function G_(e){var t=e.state,n=e.name,a=t.rects.reference,o=t.rects.popper,s=t.modifiersData.preventOverflow,r=Ii(t,{elementContext:"reference"}),l=Ii(t,{altBoundary:!0}),u=Fb(r,a),c=Fb(l,o,s),d=Vb(u),f=Vb(c);t.modifiersData[n]={referenceClippingOffsets:u,popperEscapeOffsets:c,isReferenceHidden:d,hasPopperEscaped:f},t.attributes.popper=Object.assign({},t.attributes.popper,{"data-popper-reference-hidden":d,"data-popper-escaped":f})}var X_={name:"hide",enabled:!0,phase:"main",requiresIfExists:["preventOverflow"],fn:G_};function J_(e,t,n){var a=$o(e),o=[ga,ma].indexOf(a)>=0?-1:1,s=typeof n=="function"?n(Object.assign({},t,{placement:e})):n,r=s[0],l=s[1];return r=r||0,l=(l||0)*o,[ga,za].indexOf(a)>=0?{x:l,y:r}:{x:r,y:l}}function Z_(e){var t=e.state,n=e.options,a=e.name,o=n.offset,s=o===void 0?[0,0]:o,r=Lo.reduce(function(d,f){return d[f]=J_(f,t.rects,s),d},{}),l=r[t.placement],u=l.x,c=l.y;t.modifiersData.popperOffsets!=null&&(t.modifiersData.popperOffsets.x+=u,t.modifiersData.popperOffsets.y+=c),t.modifiersData[a]=r}var Q_={name:"offset",enabled:!0,phase:"main",requires:["popperOffsets"],fn:Z_};function eA(e){var t=e.state,n=e.name;t.modifiersData[n]=cC({reference:t.rects.reference,element:t.rects.popper,placement:t.placement})}var dC={name:"popperOffsets",enabled:!0,phase:"read",fn:eA,data:{}};function tA(e){return e==="x"?"y":"x"}function nA(e){var t=e.state,n=e.options,a=e.name,o=n.mainAxis,s=o===void 0?!0:o,r=n.altAxis,l=r===void 0?!1:r,u=n.boundary,c=n.rootBoundary,d=n.altBoundary,f=n.padding,v=n.tether,g=v===void 0?!0:v,p=n.tetherOffset,h=p===void 0?0:p,m=Ii(t,{boundary:u,rootBoundary:c,padding:f,altBoundary:d}),b=$o(t.placement),k=gl(t.placement),y=!k,S=Fv(b),C=tA(S),E=t.modifiersData.popperOffsets,$=t.rects.reference,O=t.rects.popper,R=typeof h=="function"?h(Object.assign({},t.rects,{placement:t.placement})):h,N=typeof R=="number"?{mainAxis:R,altAxis:R}:Object.assign({mainAxis:0,altAxis:0},R),A=t.modifiersData.offset?t.modifiersData.offset[t.placement]:null,_={x:0,y:0};if(E){if(s){var V,z=S==="y"?ma:ga,U=S==="y"?Va:za,W=S==="y"?"height":"width",P=E[S],I=P+m[z],L=P-m[U],D=g?-O[W]/2:0,F=k===hl?$[W]:O[W],q=k===hl?-O[W]:-$[W],j=t.elements.arrow,X=g&&j?Bv(j):{width:0,height:0},Q=t.modifiersData["arrow#persistent"]?t.modifiersData["arrow#persistent"].padding:oC(),he=Q[z],ue=Q[U],ge=fi(0,$[W],X[W]),ie=y?$[W]/2-D-ge-he-N.mainAxis:F-ge-he-N.mainAxis,ae=y?-$[W]/2+D+ge+ue+N.mainAxis:q+ge+ue+N.mainAxis,ne=t.elements.arrow&&iu(t.elements.arrow),K=ne?S==="y"?ne.clientTop||0:ne.clientLeft||0:0,Z=(V=A?.[S])!=null?V:0,re=P+ie-Z-K,ce=P+ae-Z,ve=fi(g?Jc(I,re):I,P,g?dr(L,ce):L);E[S]=ve,_[S]=ve-P}if(l){var ke,Re=S==="x"?ma:ga,Ie=S==="x"?Va:za,$e=E[C],pe=C==="y"?"height":"width",Ee=$e+m[Re],me=$e-m[Ie],Me=[ma,ga].indexOf(b)!==-1,We=(ke=A?.[C])!=null?ke:0,Xe=Me?Ee:$e-$[pe]-O[pe]-We+N.altAxis,Pe=Me?$e+$[pe]+O[pe]-We-N.altAxis:me,Ae=g&&Me?N_(Xe,$e,Pe):fi(g?Xe:Ee,$e,g?Pe:me);E[C]=Ae,_[C]=Ae-$e}t.modifiersData[a]=_}}var aA={name:"preventOverflow",enabled:!0,phase:"main",fn:nA,requiresIfExists:["offset"]};function oA(e){return{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}}function sA(e){return e===Ra(e)||!Ba(e)?Vv(e):oA(e)}function rA(e){var t=e.getBoundingClientRect(),n=vl(t.width)/e.offsetWidth||1,a=vl(t.height)/e.offsetHeight||1;return n!==1||a!==1}function lA(e,t,n){n===void 0&&(n=!1);var a=Ba(t),o=Ba(t)&&rA(t),s=Ks(t),r=ml(e,o,n),l={scrollLeft:0,scrollTop:0},u={x:0,y:0};return(a||!a&&!n)&&((Mo(t)!=="body"||Hv(s))&&(l=sA(t)),Ba(t)?(u=ml(t,!0),u.x+=t.clientLeft,u.y+=t.clientTop):s&&(u.x=zv(s))),{x:r.left+l.scrollLeft-u.x,y:r.top+l.scrollTop-u.y,width:r.width,height:r.height}}function iA(e){var t=new Map,n=new Set,a=[];e.forEach(function(s){t.set(s.name,s)});function o(s){n.add(s.name);var r=[].concat(s.requires||[],s.requiresIfExists||[]);r.forEach(function(l){if(!n.has(l)){var u=t.get(l);u&&o(u)}}),a.push(s)}return e.forEach(function(s){n.has(s.name)||o(s)}),a}function uA(e){var t=iA(e);return E_.reduce(function(n,a){return n.concat(t.filter(function(o){return o.phase===a}))},[])}function cA(e){var t;return function(){return t||(t=new Promise(function(n){Promise.resolve().then(function(){t=void 0,n(e())})})),t}}function dA(e){var t=e.reduce(function(n,a){var o=n[a.name];return n[a.name]=o?Object.assign({},o,a,{options:Object.assign({},o.options,a.options),data:Object.assign({},o.data,a.data)}):a,n},{});return Object.keys(t).map(function(n){return t[n]})}var zb={placement:"bottom",modifiers:[],strategy:"absolute"};function Hb(){for(var e=arguments.length,t=new Array(e),n=0;n{const a={name:"updateState",enabled:!0,phase:"write",fn:({state:u})=>{const c=mA(u);Object.assign(r.value,c)},requires:["computeStyles"]},o=w(()=>{const{onFirstUpdate:u,placement:c,strategy:d,modifiers:f}=i(n);return{onFirstUpdate:u,placement:c||"bottom",strategy:d||"absolute",modifiers:[...f||[],a,{name:"applyStyles",enabled:!1}]}}),s=Xt(),r=M({styles:{popper:{position:i(o).strategy,left:"0",top:"0"},arrow:{position:"absolute"}},attributes:{}}),l=()=>{s.value&&(s.value.destroy(),s.value=void 0)};return le(o,u=>{const c=i(s);c&&c.setOptions(u)},{deep:!0}),le([e,t],([u,c])=>{l(),!(!u||!c)&&(s.value=hA(u,c,i(o)))}),Bt(()=>{l()}),{state:w(()=>({...i(s)?.state||{}})),styles:w(()=>i(r).styles),attributes:w(()=>i(r).attributes),update:()=>i(s)?.update(),forceUpdate:()=>i(s)?.forceUpdate(),instanceRef:w(()=>i(s))}};function mA(e){const t=Object.keys(e.elements);return{styles:fl(t.map(n=>[n,e.styles[n]||{}])),attributes:fl(t.map(n=>[n,e.attributes[n]]))}}const Wv=e=>{if(!e)return{onClick:Dt,onMousedown:Dt,onMouseup:Dt};let t=!1,n=!1;return{onClick:r=>{t&&n&&e(r),t=n=!1},onMousedown:r=>{t=r.target===r.currentTarget},onMouseup:r=>{n=r.target===r.currentTarget}}},gA=(e,t=0)=>{if(t===0)return e;const n=M(nt(t)&&!!t.initVal);let a=null;const o=r=>{if(Tt(r)){n.value=e.value;return}a&&clearTimeout(a),a=setTimeout(()=>{n.value=e.value},r)},s=r=>{r==="leading"?He(t)?o(t):o(t.leading):nt(t)?o(t.trailing):n.value=!1};return ht(()=>s("leading")),le(()=>e.value,r=>{s(r?"leading":"trailing")}),n};function Kb(){let e;const t=(a,o)=>{n(),e=window.setTimeout(a,o)},n=()=>window.clearTimeout(e);return Rr(()=>n()),{registerTimeout:t,cancelTimeout:n}}const Vp={prefix:Math.floor(Math.random()*1e4),current:0},bA=Symbol("elIdInjection"),jv=()=>ft()?_e(bA,Vp):Vp,zn=e=>{const t=jv();!Mt&&t===Vp&&pt("IdInjection",`Looks like you are using server rendering, you must provide a id provider to ensure the hydration process to be succeed +usage: app.provide(ID_INJECTION_KEY, { + prefix: number, + current: number, +})`);const n=Mv();return LS(()=>i(e)||`${n.value}-id-${t.prefix}-${t.current++}`)};let jr=[];const Wb=e=>{jt(e)===we.esc&&jr.forEach(t=>t(e))},yA=e=>{ht(()=>{jr.length===0&&document.addEventListener("keydown",Wb),Mt&&jr.push(e)}),Bt(()=>{jr=jr.filter(t=>t!==e),jr.length===0&&Mt&&document.removeEventListener("keydown",Wb)})},fC=()=>{const e=Mv(),t=jv(),n=w(()=>`${e.value}-popper-container-${t.prefix}`);return{id:n,selector:w(()=>`#${n.value}`)}},wA=e=>{const t=document.createElement("div");return t.id=e,document.body.appendChild(t),t},SA=()=>{const{id:e,selector:t}=fC();return Pd(()=>{Mt&&(document.body.querySelector(t.value)||wA(e.value))}),{id:e,selector:t}},CA=Ce({showAfter:{type:Number,default:0},hideAfter:{type:Number,default:200},autoClose:{type:Number,default:0}}),kA=({showAfter:e,hideAfter:t,autoClose:n,open:a,close:o})=>{const{registerTimeout:s}=Kb(),{registerTimeout:r,cancelTimeout:l}=Kb();return{onOpen:(d,f=i(e))=>{s(()=>{a(d);const v=i(n);He(v)&&v>0&&r(()=>{o(d)},v)},f)},onClose:(d,f=i(t))=>{l(),s(()=>{o(d)},f)}}},pC=Symbol("elForwardRef"),EA=e=>{St(pC,{setForwardRef:(n=>{e.value=n})})},xA=e=>({mounted(t){e(t)},updated(t){e(t)},unmounted(){e(null)}}),jb={current:0},Ub=M(0),hC=2e3,qb=Symbol("elZIndexContextKey"),vC=Symbol("zIndexContextKey"),uu=e=>{const t=ft()?_e(qb,jb):jb,n=e||(ft()?_e(vC,void 0):void 0),a=w(()=>{const r=i(n);return He(r)?r:hC}),o=w(()=>a.value+Ub.value),s=()=>(t.current++,Ub.value=t.current,o.value);return!Mt&&!_e(qb)&&pt("ZIndexInjection",`Looks like you are using server rendering, you must provide a z-index provider to ensure the hydration process to be succeed +usage: app.provide(ZINDEX_INJECTION_KEY, { current: 0 })`),{initialZIndex:a,currentZIndex:o,nextZIndex:s}},bl=Math.min,fr=Math.max,Zc=Math.round,Fu=Math.floor,Oo=e=>({x:e,y:e}),TA={left:"right",right:"left",bottom:"top",top:"bottom"};function zp(e,t,n){return fr(e,bl(t,n))}function cu(e,t){return typeof e=="function"?e(t):e}function Sr(e){return e.split("-")[0]}function du(e){return e.split("-")[1]}function mC(e){return e==="x"?"y":"x"}function Uv(e){return e==="y"?"height":"width"}function Rs(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function qv(e){return mC(Rs(e))}function $A(e,t,n){n===void 0&&(n=!1);const a=du(e),o=qv(e),s=Uv(o);let r=o==="x"?a===(n?"end":"start")?"right":"left":a==="start"?"bottom":"top";return t.reference[s]>t.floating[s]&&(r=Qc(r)),[r,Qc(r)]}function OA(e){const t=Qc(e);return[Hp(e),t,Hp(t)]}function Hp(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const Yb=["left","right"],Gb=["right","left"],NA=["top","bottom"],RA=["bottom","top"];function IA(e,t,n){switch(e){case"top":case"bottom":return n?t?Gb:Yb:t?Yb:Gb;case"left":case"right":return t?NA:RA;default:return[]}}function PA(e,t,n,a){const o=du(e);let s=IA(Sr(e),n==="start",a);return o&&(s=s.map(r=>r+"-"+o),t&&(s=s.concat(s.map(Hp)))),s}function Qc(e){const t=Sr(e);return TA[t]+e.slice(t.length)}function MA(e){return{top:0,right:0,bottom:0,left:0,...e}}function gC(e){return typeof e!="number"?MA(e):{top:e,right:e,bottom:e,left:e}}function ed(e){const{x:t,y:n,width:a,height:o}=e;return{width:a,height:o,top:n,left:t,right:t+a,bottom:n+o,x:t,y:n}}function Xb(e,t,n){let{reference:a,floating:o}=e;const s=Rs(t),r=qv(t),l=Uv(r),u=Sr(t),c=s==="y",d=a.x+a.width/2-o.width/2,f=a.y+a.height/2-o.height/2,v=a[l]/2-o[l]/2;let g;switch(u){case"top":g={x:d,y:a.y-o.height};break;case"bottom":g={x:d,y:a.y+a.height};break;case"right":g={x:a.x+a.width,y:f};break;case"left":g={x:a.x-o.width,y:f};break;default:g={x:a.x,y:a.y}}switch(du(t)){case"start":g[r]-=v*(n&&c?-1:1);break;case"end":g[r]+=v*(n&&c?-1:1);break}return g}async function bC(e,t){var n;t===void 0&&(t={});const{x:a,y:o,platform:s,rects:r,elements:l,strategy:u}=e,{boundary:c="clippingAncestors",rootBoundary:d="viewport",elementContext:f="floating",altBoundary:v=!1,padding:g=0}=cu(t,e),p=gC(g),m=l[v?f==="floating"?"reference":"floating":f],b=ed(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(m)))==null||n?m:m.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(l.floating)),boundary:c,rootBoundary:d,strategy:u})),k=f==="floating"?{x:a,y:o,width:r.floating.width,height:r.floating.height}:r.reference,y=await(s.getOffsetParent==null?void 0:s.getOffsetParent(l.floating)),S=await(s.isElement==null?void 0:s.isElement(y))?await(s.getScale==null?void 0:s.getScale(y))||{x:1,y:1}:{x:1,y:1},C=ed(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:k,offsetParent:y,strategy:u}):k);return{top:(b.top-C.top+p.top)/S.y,bottom:(C.bottom-b.bottom+p.bottom)/S.y,left:(b.left-C.left+p.left)/S.x,right:(C.right-b.right+p.right)/S.x}}const _A=50,AA=async(e,t,n)=>{const{placement:a="bottom",strategy:o="absolute",middleware:s=[],platform:r}=n,l=r.detectOverflow?r:{...r,detectOverflow:bC},u=await(r.isRTL==null?void 0:r.isRTL(t));let c=await r.getElementRects({reference:e,floating:t,strategy:o}),{x:d,y:f}=Xb(c,a,u),v=a,g=0;const p={};for(let h=0;h({name:"arrow",options:e,async fn(t){const{x:n,y:a,placement:o,rects:s,platform:r,elements:l,middlewareData:u}=t,{element:c,padding:d=0}=cu(e,t)||{};if(c==null)return{};const f=gC(d),v={x:n,y:a},g=qv(o),p=Uv(g),h=await r.getDimensions(c),m=g==="y",b=m?"top":"left",k=m?"bottom":"right",y=m?"clientHeight":"clientWidth",S=s.reference[p]+s.reference[g]-v[g]-s.floating[p],C=v[g]-s.reference[g],E=await(r.getOffsetParent==null?void 0:r.getOffsetParent(c));let $=E?E[y]:0;(!$||!await(r.isElement==null?void 0:r.isElement(E)))&&($=l.floating[y]||s.floating[p]);const O=S/2-C/2,R=$/2-h[p]/2-1,N=bl(f[b],R),A=bl(f[k],R),_=N,V=$-h[p]-A,z=$/2-h[p]/2+O,U=zp(_,z,V),W=!u.arrow&&du(o)!=null&&z!==U&&s.reference[p]/2-(z<_?N:A)-h[p]/2<0,P=W?z<_?z-_:z-V:0;return{[g]:v[g]+P,data:{[g]:U,centerOffset:z-U-P,...W&&{alignmentOffset:P}},reset:W}}}),DA=function(e){return e===void 0&&(e={}),{name:"flip",options:e,async fn(t){var n,a;const{placement:o,middlewareData:s,rects:r,initialPlacement:l,platform:u,elements:c}=t,{mainAxis:d=!0,crossAxis:f=!0,fallbackPlacements:v,fallbackStrategy:g="bestFit",fallbackAxisSideDirection:p="none",flipAlignment:h=!0,...m}=cu(e,t);if((n=s.arrow)!=null&&n.alignmentOffset)return{};const b=Sr(o),k=Rs(l),y=Sr(l)===l,S=await(u.isRTL==null?void 0:u.isRTL(c.floating)),C=v||(y||!h?[Qc(l)]:OA(l)),E=p!=="none";!v&&E&&C.push(...PA(l,h,p,S));const $=[l,...C],O=await u.detectOverflow(t,m),R=[];let N=((a=s.flip)==null?void 0:a.overflows)||[];if(d&&R.push(O[b]),f){const z=$A(o,r,S);R.push(O[z[0]],O[z[1]])}if(N=[...N,{placement:o,overflows:R}],!R.every(z=>z<=0)){var A,_;const z=(((A=s.flip)==null?void 0:A.index)||0)+1,U=$[z];if(U&&(!(f==="alignment"?k!==Rs(U):!1)||N.every(I=>Rs(I.placement)===k?I.overflows[0]>0:!0)))return{data:{index:z,overflows:N},reset:{placement:U}};let W=(_=N.filter(P=>P.overflows[0]<=0).sort((P,I)=>P.overflows[1]-I.overflows[1])[0])==null?void 0:_.placement;if(!W)switch(g){case"bestFit":{var V;const P=(V=N.filter(I=>{if(E){const L=Rs(I.placement);return L===k||L==="y"}return!0}).map(I=>[I.placement,I.overflows.filter(L=>L>0).reduce((L,D)=>L+D,0)]).sort((I,L)=>I[1]-L[1])[0])==null?void 0:V[0];P&&(W=P);break}case"initialPlacement":W=l;break}if(o!==W)return{reset:{placement:W}}}return{}}}},BA=new Set(["left","top"]);async function FA(e,t){const{placement:n,platform:a,elements:o}=e,s=await(a.isRTL==null?void 0:a.isRTL(o.floating)),r=Sr(n),l=du(n),u=Rs(n)==="y",c=BA.has(r)?-1:1,d=s&&u?-1:1,f=cu(t,e);let{mainAxis:v,crossAxis:g,alignmentAxis:p}=typeof f=="number"?{mainAxis:f,crossAxis:0,alignmentAxis:null}:{mainAxis:f.mainAxis||0,crossAxis:f.crossAxis||0,alignmentAxis:f.alignmentAxis};return l&&typeof p=="number"&&(g=l==="end"?p*-1:p),u?{x:g*d,y:v*c}:{x:v*c,y:g*d}}const VA=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,a;const{x:o,y:s,placement:r,middlewareData:l}=t,u=await FA(t,e);return r===((n=l.offset)==null?void 0:n.placement)&&(a=l.arrow)!=null&&a.alignmentOffset?{}:{x:o+u.x,y:s+u.y,data:{...u,placement:r}}}}},zA=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:a,placement:o,platform:s}=t,{mainAxis:r=!0,crossAxis:l=!1,limiter:u={fn:b=>{let{x:k,y}=b;return{x:k,y}}},...c}=cu(e,t),d={x:n,y:a},f=await s.detectOverflow(t,c),v=Rs(Sr(o)),g=mC(v);let p=d[g],h=d[v];if(r){const b=g==="y"?"top":"left",k=g==="y"?"bottom":"right",y=p+f[b],S=p-f[k];p=zp(y,p,S)}if(l){const b=v==="y"?"top":"left",k=v==="y"?"bottom":"right",y=h+f[b],S=h-f[k];h=zp(y,h,S)}const m=u.fn({...t,[g]:p,[v]:h});return{...m,data:{x:m.x-n,y:m.y-a,enabled:{[g]:r,[v]:l}}}}}};function Gd(){return typeof window<"u"}function Ml(e){return yC(e)?(e.nodeName||"").toLowerCase():"#document"}function Na(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Do(e){var t;return(t=(yC(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function yC(e){return Gd()?e instanceof Node||e instanceof Na(e).Node:!1}function eo(e){return Gd()?e instanceof Element||e instanceof Na(e).Element:!1}function vs(e){return Gd()?e instanceof HTMLElement||e instanceof Na(e).HTMLElement:!1}function Jb(e){return!Gd()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof Na(e).ShadowRoot}function fu(e){const{overflow:t,overflowX:n,overflowY:a,display:o}=to(e);return/auto|scroll|overlay|hidden|clip/.test(t+a+n)&&o!=="inline"&&o!=="contents"}function HA(e){return/^(table|td|th)$/.test(Ml(e))}function Xd(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const KA=/transform|translate|scale|rotate|perspective|filter/,WA=/paint|layout|strict|content/,Gs=e=>!!e&&e!=="none";let zf;function Yv(e){const t=eo(e)?to(e):e;return Gs(t.transform)||Gs(t.translate)||Gs(t.scale)||Gs(t.rotate)||Gs(t.perspective)||!Gv()&&(Gs(t.backdropFilter)||Gs(t.filter))||KA.test(t.willChange||"")||WA.test(t.contain||"")}function jA(e){let t=Ds(e);for(;vs(t)&&!yl(t);){if(Yv(t))return t;if(Xd(t))return null;t=Ds(t)}return null}function Gv(){return zf==null&&(zf=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),zf}function yl(e){return/^(html|body|#document)$/.test(Ml(e))}function to(e){return Na(e).getComputedStyle(e)}function Jd(e){return eo(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ds(e){if(Ml(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Jb(e)&&e.host||Do(e);return Jb(t)?t.host:t}function wC(e){const t=Ds(e);return yl(t)?e.ownerDocument?e.ownerDocument.body:e.body:vs(t)&&fu(t)?t:wC(t)}function Pi(e,t,n){var a;t===void 0&&(t=[]),n===void 0&&(n=!0);const o=wC(e),s=o===((a=e.ownerDocument)==null?void 0:a.body),r=Na(o);if(s){const l=Kp(r);return t.concat(r,r.visualViewport||[],fu(o)?o:[],l&&n?Pi(l):[])}else return t.concat(o,Pi(o,[],n))}function Kp(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function SC(e){const t=to(e);let n=parseFloat(t.width)||0,a=parseFloat(t.height)||0;const o=vs(e),s=o?e.offsetWidth:n,r=o?e.offsetHeight:a,l=Zc(n)!==s||Zc(a)!==r;return l&&(n=s,a=r),{width:n,height:a,$:l}}function Xv(e){return eo(e)?e:e.contextElement}function nl(e){const t=Xv(e);if(!vs(t))return Oo(1);const n=t.getBoundingClientRect(),{width:a,height:o,$:s}=SC(t);let r=(s?Zc(n.width):n.width)/a,l=(s?Zc(n.height):n.height)/o;return(!r||!Number.isFinite(r))&&(r=1),(!l||!Number.isFinite(l))&&(l=1),{x:r,y:l}}const UA=Oo(0);function CC(e){const t=Na(e);return!Gv()||!t.visualViewport?UA:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function qA(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==Na(e)?!1:t}function Cr(e,t,n,a){t===void 0&&(t=!1),n===void 0&&(n=!1);const o=e.getBoundingClientRect(),s=Xv(e);let r=Oo(1);t&&(a?eo(a)&&(r=nl(a)):r=nl(e));const l=qA(s,n,a)?CC(s):Oo(0);let u=(o.left+l.x)/r.x,c=(o.top+l.y)/r.y,d=o.width/r.x,f=o.height/r.y;if(s){const v=Na(s),g=a&&eo(a)?Na(a):a;let p=v,h=Kp(p);for(;h&&a&&g!==p;){const m=nl(h),b=h.getBoundingClientRect(),k=to(h),y=b.left+(h.clientLeft+parseFloat(k.paddingLeft))*m.x,S=b.top+(h.clientTop+parseFloat(k.paddingTop))*m.y;u*=m.x,c*=m.y,d*=m.x,f*=m.y,u+=y,c+=S,p=Na(h),h=Kp(p)}}return ed({width:d,height:f,x:u,y:c})}function Zd(e,t){const n=Jd(e).scrollLeft;return t?t.left+n:Cr(Do(e)).left+n}function kC(e,t){const n=e.getBoundingClientRect(),a=n.left+t.scrollLeft-Zd(e,n),o=n.top+t.scrollTop;return{x:a,y:o}}function YA(e){let{elements:t,rect:n,offsetParent:a,strategy:o}=e;const s=o==="fixed",r=Do(a),l=t?Xd(t.floating):!1;if(a===r||l&&s)return n;let u={scrollLeft:0,scrollTop:0},c=Oo(1);const d=Oo(0),f=vs(a);if((f||!f&&!s)&&((Ml(a)!=="body"||fu(r))&&(u=Jd(a)),f)){const g=Cr(a);c=nl(a),d.x=g.x+a.clientLeft,d.y=g.y+a.clientTop}const v=r&&!f&&!s?kC(r,u):Oo(0);return{width:n.width*c.x,height:n.height*c.y,x:n.x*c.x-u.scrollLeft*c.x+d.x+v.x,y:n.y*c.y-u.scrollTop*c.y+d.y+v.y}}function GA(e){return Array.from(e.getClientRects())}function XA(e){const t=Do(e),n=Jd(e),a=e.ownerDocument.body,o=fr(t.scrollWidth,t.clientWidth,a.scrollWidth,a.clientWidth),s=fr(t.scrollHeight,t.clientHeight,a.scrollHeight,a.clientHeight);let r=-n.scrollLeft+Zd(e);const l=-n.scrollTop;return to(a).direction==="rtl"&&(r+=fr(t.clientWidth,a.clientWidth)-o),{width:o,height:s,x:r,y:l}}const Zb=25;function JA(e,t){const n=Na(e),a=Do(e),o=n.visualViewport;let s=a.clientWidth,r=a.clientHeight,l=0,u=0;if(o){s=o.width,r=o.height;const d=Gv();(!d||d&&t==="fixed")&&(l=o.offsetLeft,u=o.offsetTop)}const c=Zd(a);if(c<=0){const d=a.ownerDocument,f=d.body,v=getComputedStyle(f),g=d.compatMode==="CSS1Compat"&&parseFloat(v.marginLeft)+parseFloat(v.marginRight)||0,p=Math.abs(a.clientWidth-f.clientWidth-g);p<=Zb&&(s-=p)}else c<=Zb&&(s+=c);return{width:s,height:r,x:l,y:u}}function ZA(e,t){const n=Cr(e,!0,t==="fixed"),a=n.top+e.clientTop,o=n.left+e.clientLeft,s=vs(e)?nl(e):Oo(1),r=e.clientWidth*s.x,l=e.clientHeight*s.y,u=o*s.x,c=a*s.y;return{width:r,height:l,x:u,y:c}}function Qb(e,t,n){let a;if(t==="viewport")a=JA(e,n);else if(t==="document")a=XA(Do(e));else if(eo(t))a=ZA(t,n);else{const o=CC(e);a={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return ed(a)}function EC(e,t){const n=Ds(e);return n===t||!eo(n)||yl(n)?!1:to(n).position==="fixed"||EC(n,t)}function QA(e,t){const n=t.get(e);if(n)return n;let a=Pi(e,[],!1).filter(l=>eo(l)&&Ml(l)!=="body"),o=null;const s=to(e).position==="fixed";let r=s?Ds(e):e;for(;eo(r)&&!yl(r);){const l=to(r),u=Yv(r);!u&&l.position==="fixed"&&(o=null),(s?!u&&!o:!u&&l.position==="static"&&!!o&&(o.position==="absolute"||o.position==="fixed")||fu(r)&&!u&&EC(e,r))?a=a.filter(d=>d!==r):o=l,r=Ds(r)}return t.set(e,a),a}function e4(e){let{element:t,boundary:n,rootBoundary:a,strategy:o}=e;const r=[...n==="clippingAncestors"?Xd(t)?[]:QA(t,this._c):[].concat(n),a],l=Qb(t,r[0],o);let u=l.top,c=l.right,d=l.bottom,f=l.left;for(let v=1;v{r(!1,1e-7)},1e3)}$===1&&!TC(c,e.getBoundingClientRect())&&r(),S=!1}try{n=new IntersectionObserver(C,{...y,root:o.ownerDocument})}catch{n=new IntersectionObserver(C,y)}n.observe(e)}return r(!0),s}function l4(e,t,n,a){a===void 0&&(a={});const{ancestorScroll:o=!0,ancestorResize:s=!0,elementResize:r=typeof ResizeObserver=="function",layoutShift:l=typeof IntersectionObserver=="function",animationFrame:u=!1}=a,c=Xv(e),d=o||s?[...c?Pi(c):[],...t?Pi(t):[]]:[];d.forEach(b=>{o&&b.addEventListener("scroll",n,{passive:!0}),s&&b.addEventListener("resize",n)});const f=c&&l?r4(c,n):null;let v=-1,g=null;r&&(g=new ResizeObserver(b=>{let[k]=b;k&&k.target===c&&g&&t&&(g.unobserve(t),cancelAnimationFrame(v),v=requestAnimationFrame(()=>{var y;(y=g)==null||y.observe(t)})),n()}),c&&!u&&g.observe(c),t&&g.observe(t));let p,h=u?Cr(e):null;u&&m();function m(){const b=Cr(e);h&&!TC(h,b)&&n(),h=b,p=requestAnimationFrame(m)}return n(),()=>{var b;d.forEach(k=>{o&&k.removeEventListener("scroll",n),s&&k.removeEventListener("resize",n)}),f?.(),(b=g)==null||b.disconnect(),g=null,u&&cancelAnimationFrame(p)}}const i4=bC,u4=VA,c4=zA,d4=DA,f4=LA,p4=(e,t,n)=>{const a=new Map,o={platform:s4,...n},s={...o.platform,_c:a};return AA(e,t,{...o,platform:s})};function h4(e){let t;function n(){if(e.value==null)return;const{selectionStart:o,selectionEnd:s,value:r}=e.value;o==null||s==null||(t={selectionStart:o,selectionEnd:s,value:r,beforeTxt:r.slice(0,Math.max(0,o)),afterTxt:r.slice(Math.max(0,s))})}function a(){if(e.value==null||t==null)return;const{value:o}=e.value,{beforeTxt:s,afterTxt:r,selectionStart:l}=t;if(s==null||r==null||l==null)return;let u=o.length;if(o.endsWith(r))u=o.length-r.length;else if(o.startsWith(s))u=s.length;else{const c=s[l-1],d=o.indexOf(c,l-1);d!==-1&&(u=d+1)}e.value.setSelectionRange(u,u)}return[n,a]}const v4="utils/vue/vnode";let Wa=(function(e){return e[e.TEXT=1]="TEXT",e[e.CLASS=2]="CLASS",e[e.STYLE=4]="STYLE",e[e.PROPS=8]="PROPS",e[e.FULL_PROPS=16]="FULL_PROPS",e[e.HYDRATE_EVENTS=32]="HYDRATE_EVENTS",e[e.STABLE_FRAGMENT=64]="STABLE_FRAGMENT",e[e.KEYED_FRAGMENT=128]="KEYED_FRAGMENT",e[e.UNKEYED_FRAGMENT=256]="UNKEYED_FRAGMENT",e[e.NEED_PATCH=512]="NEED_PATCH",e[e.DYNAMIC_SLOTS=1024]="DYNAMIC_SLOTS",e[e.HOISTED=-1]="HOISTED",e[e.BAIL=-2]="BAIL",e})({});function Wp(e){return Ut(e)&&e.type===Fe}function $C(e){return Ut(e)&&e.type===mn}function m4(e){return Ut(e)&&!Wp(e)&&!$C(e)}const g4=e=>{if(!Ut(e))return pt(v4,"[getNormalizedProps] must be a VNode"),{};const t=e.props||{},n=(Ut(e.type)?e.type.props:void 0)||{},a={};return Object.keys(n).forEach(o=>{Rt(n[o],"default")&&(a[o]=n[o].default)}),Object.keys(t).forEach(o=>{a[Fn(o)]=t[o]}),a},Ta=e=>{const t=ye(e)?e:[e],n=[];return t.forEach(a=>{ye(a)?n.push(...Ta(a)):Ut(a)&&a.component?.subTree?n.push(a,...Ta(a.component.subTree)):Ut(a)&&ye(a.children)?n.push(...Ta(a.children)):Ut(a)&&a.shapeFlag===2?n.push(...Ta(a.type())):n.push(a)}),n},b4=(e,t,n)=>Ta(e.subTree).filter(a=>Ut(a)&&a.type?.name===t&&!!a.component).map(a=>a.component.uid).map(a=>n[a]).filter(a=>!!a),Qd=(e,t)=>{const n=Xt({}),a=Xt([]),o=new WeakMap,s=c=>{n.value[c.uid]=c,oc(n),ht(()=>{const d=c.getVnode().el,f=d.parentNode;if(!o.has(f)){o.set(f,[]);const v=f.insertBefore.bind(f);f.insertBefore=(g,p)=>(o.get(f).some(h=>g===h||p===h)&&oc(n),v(g,p))}o.get(f).push(d)})},r=c=>{delete n.value[c.uid],oc(n);const d=c.getVnode().el,f=d.parentNode,v=o.get(f),g=v.indexOf(d);v.splice(g,1)},l=()=>{a.value=b4(e,t,n.value)},u=c=>c.render();return{children:a,addChild:s,removeChild:r,ChildrenSorter:se({setup(c,{slots:d}){return()=>(l(),d.default?qe(u,{render:d.default}):null)}})}},Tn=io({type:String,values:ro,required:!1}),OC=Symbol("size"),NC=()=>{const e=_e(OC,{});return w(()=>i(e.size)||"")};function ms(e,{disabled:t,beforeFocus:n,afterFocus:a,beforeBlur:o,afterBlur:s}={}){const{emit:r}=ft(),l=Xt(),u=M(!1),c=v=>{const g=Ve(n)?n(v):!1;i(t)||u.value||g||(u.value=!0,r("focus",v),a?.())},d=v=>{const g=Ve(o)?o(v):!1;i(t)||v.relatedTarget&&l.value?.contains(v.relatedTarget)||g||(u.value=!1,r("blur",v),s?.())},f=v=>{i(t)||Ni(v.target)||l.value?.contains(document.activeElement)&&l.value!==document.activeElement||e.value?.focus()};return le([l,()=>i(t)],([v,g])=>{v&&(g?v.removeAttribute("tabindex"):v.setAttribute("tabindex","-1"))}),Ft(l,"focus",c,!0),Ft(l,"blur",d,!0),Ft(l,"click",f,!0),{isFocused:u,wrapperRef:l,handleFocus:c,handleBlur:d}}const y4=e=>/([\uAC00-\uD7AF\u3130-\u318F])+/gi.test(e);function pu({afterComposition:e,emit:t}){const n=M(!1),a=l=>{t?.("compositionstart",l),n.value=!0},o=l=>{t?.("compositionupdate",l);const u=l.target?.value;n.value=!y4(u[u.length-1]||"")},s=l=>{t?.("compositionend",l),n.value&&(n.value=!1,Ne(()=>e(l)))};return{isComposing:n,handleComposition:l=>{l.type==="compositionend"?s(l):o(l)},handleCompositionStart:a,handleCompositionUpdate:o,handleCompositionEnd:s}}const RC=Symbol("emptyValuesContextKey"),w4="use-empty-values",S4=["",void 0,null],C4=void 0,Ir=Ce({emptyValues:Array,valueOnClear:{type:G([String,Number,Boolean,Function]),default:void 0,validator:e=>(e=Ve(e)?e():e,ye(e)?e.every(t=>!t):!e)}}),hu=(e,t)=>{const n=ft()?_e(RC,M({})):M({}),a=w(()=>e.emptyValues||n.value.emptyValues||S4),o=w(()=>Ve(e.valueOnClear)?e.valueOnClear():e.valueOnClear!==void 0?e.valueOnClear:Ve(n.value.valueOnClear)?n.value.valueOnClear():n.value.valueOnClear!==void 0?n.value.valueOnClear:t!==void 0?t:C4),s=r=>{let l=!0;return ye(r)?l=a.value.some(u=>on(r,u)):l=a.value.includes(r),l};return s(o.value)||pt(w4,"value-on-clear should be a value of empty-values"),{emptyValues:a,valueOnClear:o,isEmptyValue:s}},k4=Ce({ariaLabel:String,ariaOrientation:{type:String,values:["horizontal","vertical","undefined"]},ariaControls:String}),aa=e=>ss(k4,e),IC=e=>{const t=e.props,n=ye(t)?fl(t.map(a=>[a,{}])):t;e.setPropsDefaults=a=>{if(n){for(const[o,s]of Object.entries(a)){const r=n[o];if(Rt(n,o)){if(Ev(r)){n[o]={...r,default:s};continue}n[o]={type:r,default:s}}}e.props=n}}},st=(e,t)=>{if(e.install=n=>{for(const a of[e,...Object.values(t??{})])n.component(a.name,a)},t)for(const[n,a]of Object.entries(t))e[n]=a;return IC(e),e},PC=(e,t)=>(e.install=n=>{e._context=n._context,n.config.globalProperties[t]=e},e),E4=(e,t)=>(e.install=n=>{n.directive(t,e)},e),tn=e=>(e.install=Dt,IC(e),e);var x4=se({__name:"teleport",props:au,setup(e){return(t,n)=>t.disabled?ee(t.$slots,"default",{key:0}):(x(),oe(OT,{key:1,to:t.to},[ee(t.$slots,"default")],8,["to"]))}}),T4=x4;const _l=st(T4),ty="ElAffix";var $4=se({name:ty,__name:"affix",props:RM,emits:IM,setup(e,{expose:t,emit:n}){const a=e,o=n,s=fe("affix"),r=Xt(),l=Xt(),u=Xt(),{height:c}=Rv(),{height:d,width:f,top:v,bottom:g,left:p,update:h}=Ob(l,{windowScroll:!1}),m=Ob(r),b=M(!1),k=M(0),y=M(0),S=w(()=>!a.teleported||!b.value),C=w(()=>({display:"flow-root",height:b.value?`${d.value}px`:"",width:b.value?`${f.value}px`:""})),E=w(()=>{if(!b.value)return{};const N=rn(a.offset);return{height:`${d.value}px`,width:`${f.value}px`,top:a.position==="top"?N:"",bottom:a.position==="bottom"?N:"",left:a.teleported?`${p.value}px`:"",transform:y.value?`translateY(${y.value}px)`:"",zIndex:a.zIndex}}),$=()=>{if(!u.value)return;k.value=u.value instanceof Window?document.documentElement.scrollTop:u.value.scrollTop||0;const{position:N,target:A,offset:_}=a,V=_+d.value;if(N==="top")if(A){const z=m.bottom.value-V;b.value=_>v.value&&m.bottom.value>0,y.value=z<0?z:0}else b.value=_>v.value;else if(A){const z=c.value-m.top.value-V;b.value=c.value-_m.top.value,y.value=z<0?-z:0}else b.value=c.value-_{if(!b.value){h();return}b.value=!1,await Ne(),h(),b.value=!0},R=async()=>{h(),await Ne(),o("scroll",{scrollTop:k.value,fixed:b.value})};return le(b,N=>o(bt,N)),ht(()=>{a.target?(r.value=document.querySelector(a.target)??void 0,r.value||en(ty,`Target does not exist: ${a.target}`)):r.value=document.documentElement,u.value=_v(l.value,!0),h()}),Gi(()=>{Ne(O)}),av(()=>{b.value=!1}),Ft(u,"scroll",R),wa($),t({update:$,updateRoot:O}),(N,A)=>(x(),B("div",{ref_key:"root",ref:l,class:T(i(s).b()),style:Ke(C.value)},[Y(i(_l),{disabled:S.value,to:e.appendTo},{default:J(()=>[H("div",{class:T({[i(s).m("fixed")]:b.value}),style:Ke(E.value)},[ee(N.$slots,"default")],6)]),_:3},8,["disabled","to"])],6))}}),O4=$4;const N4=st(O4);var R4=se({name:"ArrowDown",__name:"arrow-down",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("path",{fill:"currentColor",d:"M831.872 340.864 512 652.672 192.128 340.864a30.59 30.59 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.59 30.59 0 0 0-42.752 0z"})]))}}),Bo=R4,I4=se({name:"ArrowLeft",__name:"arrow-left",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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.59 30.59 0 0 0 0-42.752L339.264 511.936l311.872-319.872a30.59 30.59 0 0 0 0-42.688 29.12 29.12 0 0 0-41.728 0"})]))}}),is=I4,P4=se({name:"ArrowRight",__name:"arrow-right",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("path",{fill:"currentColor",d:"M340.864 149.312a30.59 30.59 0 0 0 0 42.752L652.736 512 340.864 831.872a30.59 30.59 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"})]))}}),na=P4,M4=se({name:"ArrowUp",__name:"arrow-up",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),ef=M4,_4=se({name:"Back",__name:"back",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("path",{fill:"currentColor",d:"M224 480h640a32 32 0 1 1 0 64H224a32 32 0 0 1 0-64"}),H("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"})]))}}),A4=_4,L4=se({name:"Calendar",__name:"calendar",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),D4=L4,B4=se({name:"CaretRight",__name:"caret-right",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("path",{fill:"currentColor",d:"M384 192v640l384-320.064z"})]))}}),MC=B4,F4=se({name:"CaretTop",__name:"caret-top",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("path",{fill:"currentColor",d:"M512 320 192 704h639.936z"})]))}}),V4=F4,z4=se({name:"Check",__name:"check",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),vu=z4,H4=se({name:"CircleCheckFilled",__name:"circle-check-filled",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),K4=H4,W4=se({name:"CircleCheck",__name:"circle-check",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"}),H("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.752z"})]))}}),Jv=W4,j4=se({name:"CircleCloseFilled",__name:"circle-close-filled",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),Zv=j4,U4=se({name:"CircleClose",__name:"circle-close",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"}),H("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"})]))}}),Fo=U4,q4=se({name:"Clock",__name:"clock",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"}),H("path",{fill:"currentColor",d:"M480 256a32 32 0 0 1 32 32v256a32 32 0 0 1-64 0V288a32 32 0 0 1 32-32"}),H("path",{fill:"currentColor",d:"M480 512h256q32 0 32 32t-32 32H480q-32 0-32-32t32-32"})]))}}),_C=q4,Y4=se({name:"Close",__name:"close",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),Ha=Y4,G4=se({name:"DArrowLeft",__name:"d-arrow-left",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("path",{fill:"currentColor",d:"M529.408 149.376a29.12 29.12 0 0 1 41.728 0 30.59 30.59 0 0 1 0 42.688L259.264 511.936l311.872 319.936a30.59 30.59 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.672zm256 0a29.12 29.12 0 0 1 41.728 0 30.59 30.59 0 0 1 0 42.688L515.264 511.936l311.872 319.936a30.59 30.59 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.672z"})]))}}),Bs=G4,X4=se({name:"DArrowRight",__name:"d-arrow-right",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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.59 30.59 0 0 1 0-42.752L764.736 512 452.864 192a30.59 30.59 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.59 30.59 0 0 1 0-42.752L508.736 512 196.864 192a30.59 30.59 0 0 1 0-42.688"})]))}}),Fs=X4,J4=se({name:"Delete",__name:"delete",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),Z4=J4,Q4=se({name:"Document",__name:"document",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),e3=Q4,t3=se({name:"FullScreen",__name:"full-screen",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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-64zm0 831.872-192-.192a32 32 0 0 1 0-64l192 .192V672a32 32 0 1 1 64 0v256h-64z"})]))}}),n3=t3,a3=se({name:"Hide",__name:"hide",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("path",{fill:"currentColor",d:"M876.8 156.8c0-9.6-3.2-16-9.6-22.4s-12.8-9.6-22.4-9.6-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 176S0 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.4s3.2 16 9.6 22.4 12.8 9.6 22.4 9.6 16-3.2 22.4-9.6l704-710.4c3.2-6.4 6.4-12.8 6.4-22.4m-646.4 528Q115.2 579.2 76.8 512q43.2-72 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.4m140.8-96Q352 555.2 352 512c0-44.8 16-83.2 48-112s67.2-48 112-48c28.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.6q-43.2 72-153.6 172.8c-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-176S1024 528 1024 512s-48.001-73.6-134.401-176"}),H("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 112s-67.2 48-112 48"})]))}}),o3=a3,s3=se({name:"InfoFilled",__name:"info-filled",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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.99 12.99 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"})]))}}),Mi=s3,r3=se({name:"Loading",__name:"loading",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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.248m452.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.248M828.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 0"})]))}}),_o=r3,l3=se({name:"Minus",__name:"minus",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("path",{fill:"currentColor",d:"M128 544h768a32 32 0 1 0 0-64H128a32 32 0 0 0 0 64"})]))}}),i3=l3,u3=se({name:"MoreFilled",__name:"more-filled",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),ny=u3,c3=se({name:"More",__name:"more",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),d3=c3,f3=se({name:"PictureFilled",__name:"picture-filled",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),p3=f3,h3=se({name:"Plus",__name:"plus",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),AC=h3,v3=se({name:"QuestionFilled",__name:"question-filled",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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.592q0-64.416-42.24-101.376c-28.16-25.344-65.472-37.312-111.232-37.312m-12.672 406.208a54.27 54.27 0 0 0-38.72 14.784 49.4 49.4 0 0 0-15.488 38.016c0 15.488 4.928 28.16 15.488 38.016A54.85 54.85 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.97 51.97 0 0 0-15.488-38.016 55.94 55.94 0 0 0-39.424-14.784"})]))}}),m3=v3,g3=se({name:"RefreshLeft",__name:"refresh-left",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),b3=g3,y3=se({name:"RefreshRight",__name:"refresh-right",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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.88"})]))}}),w3=y3,S3=se({name:"ScaleToOriginal",__name:"scale-to-original",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 0 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118m-361.412 0a30.12 30.12 0 0 0-30.118 30.118v301.177a30.118 30.118 0 1 0 60.236 0V331.294a30.12 30.12 0 0 0-30.118-30.118M512 361.412a30.12 30.12 0 0 0-30.118 30.117v30.118a30.118 30.118 0 0 0 60.236 0V391.53A30.12 30.12 0 0 0 512 361.412M512 512a30.12 30.12 0 0 0-30.118 30.118v30.117a30.118 30.118 0 0 0 60.236 0v-30.117A30.12 30.12 0 0 0 512 512"})]))}}),C3=S3,k3=se({name:"Search",__name:"search",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),E3=k3,x3=se({name:"SortDown",__name:"sort-down",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),T3=x3,$3=se({name:"SortUp",__name:"sort-up",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),O3=$3,N3=se({name:"StarFilled",__name:"star-filled",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("path",{fill:"currentColor",d:"M313.6 924.48a70.4 70.4 0 0 1-74.152-5.365 70.4 70.4 0 0 1-27.992-68.875l37.888-220.928L88.96 472.96a70.4 70.4 0 0 1 3.788-104.225A70.4 70.4 0 0 1 128 352.896l221.76-32.256 99.2-200.96a70.4 70.4 0 0 1 100.246-28.595 70.4 70.4 0 0 1 25.962 28.595l99.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"})]))}}),Vu=N3,R3=se({name:"Star",__name:"star",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),I3=R3,P3=se({name:"SuccessFilled",__name:"success-filled",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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.27 38.27 0 0 0 54.336 0l262.4-262.464a38.4 38.4 0 1 0-54.272-54.336z"})]))}}),LC=P3,M3=se({name:"View",__name:"view",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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-288m0 64a224 224 0 1 1 0 448 224 224 0 0 1 0-448m0 64a160.19 160.19 0 0 0-160 160c0 88.192 71.744 160 160 160s160-71.808 160-160-71.744-160-160-160"})]))}}),_3=M3,A3=se({name:"WarningFilled",__name:"warning-filled",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("path",{fill:"currentColor",d:"M512 64a448 448 0 1 1 0 896 448 448 0 0 1 0-896m0 192a58.43 58.43 0 0 0-58.24 63.744l23.36 256.384a35.072 35.072 0 0 0 69.76 0l23.296-256.384A58.43 58.43 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"})]))}}),tf=A3,L3=se({name:"ZoomIn",__name:"zoom-in",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),DC=L3,D3=se({name:"ZoomOut",__name:"zoom-out",setup(e){return(t,n)=>(x(),B("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 1024 1024"},[H("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"})]))}}),B3=D3;const Kt=G([String,Object,Function]),BC={Close:Ha},Qv={Close:Ha,SuccessFilled:LC,InfoFilled:Mi,WarningFilled:tf,CircleCloseFilled:Zv},Vs={primary:Mi,success:LC,warning:tf,error:Zv,info:Mi},nf={validating:_o,success:Jv,error:Fo},F3=["light","dark"],V3=Ce({title:{type:String,default:""},description:{type:String,default:""},type:{type:String,values:Oi(Vs),default:"info"},closable:{type:Boolean,default:!0},closeText:{type:String,default:""},showIcon:Boolean,center:Boolean,effect:{type:String,values:F3,default:"light"}}),z3={close:e=>e instanceof MouseEvent},H3=Ce({size:{type:G([Number,String])},color:{type:String}});var K3=se({name:"ElIcon",inheritAttrs:!1,__name:"icon",props:H3,setup(e){const t=e,n=fe("icon"),a=w(()=>{const{size:o,color:s}=t,r=rn(o);return!r&&!s?{}:{fontSize:r,"--color":s}});return(o,s)=>(x(),B("i",dt({class:i(n).b(),style:a.value},o.$attrs),[ee(o.$slots,"default")],16))}}),W3=K3;const De=st(W3);var j3=se({name:"ElAlert",__name:"alert",props:V3,emits:z3,setup(e,{emit:t}){const{Close:n}=Qv,a=e,o=t,s=hn(),r=fe("alert"),l=M(!0),u=w(()=>Vs[a.type]),c=w(()=>{if(a.description)return!0;const f=s.default?.();return f?Ta(f).some(v=>!$C(v)):!1}),d=f=>{l.value=!1,o("close",f)};return(f,v)=>(x(),oe(Vn,{name:i(r).b("fade"),persisted:""},{default:J(()=>[ct(H("div",{class:T([i(r).b(),i(r).m(e.type),i(r).is("center",e.center),i(r).is(e.effect)]),role:"alert"},[e.showIcon&&(f.$slots.icon||u.value)?(x(),oe(i(De),{key:0,class:T([i(r).e("icon"),i(r).is("big",c.value)])},{default:J(()=>[ee(f.$slots,"icon",{},()=>[(x(),oe(it(u.value)))])]),_:3},8,["class"])):te("v-if",!0),H("div",{class:T(i(r).e("content"))},[e.title||f.$slots.title?(x(),B("span",{key:0,class:T([i(r).e("title"),{"with-description":c.value}])},[ee(f.$slots,"title",{},()=>[wt(Se(e.title),1)])],2)):te("v-if",!0),c.value?(x(),B("p",{key:1,class:T(i(r).e("description"))},[ee(f.$slots,"default",{},()=>[wt(Se(e.description),1)])],2)):te("v-if",!0),e.closable?(x(),B(Fe,{key:2},[e.closeText?(x(),B("div",{key:0,class:T([i(r).e("close-btn"),i(r).is("customed")]),onClick:d},Se(e.closeText),3)):(x(),oe(i(De),{key:1,class:T(i(r).e("close-btn")),onClick:d},{default:J(()=>[Y(i(n))]),_:1},8,["class"]))],64)):te("v-if",!0)],2)],2),[[Pt,l.value]])]),_:3},8,["name"]))}}),U3=j3;const q3=st(U3),FC=["dialog","grid","group","listbox","menu","navigation","tooltip","tree"],VC=Ce({role:{type:String,values:FC,default:"tooltip"}}),em=Symbol("popper"),zC=Symbol("popperContent");var Y3=se({name:"ElPopperArrow",inheritAttrs:!1,__name:"arrow",setup(e,{expose:t}){const n=fe("popper"),{arrowRef:a,arrowStyle:o}=_e(zC,void 0);return Bt(()=>{a.value=void 0}),t({arrowRef:a}),(s,r)=>(x(),B("span",{ref_key:"arrowRef",ref:a,class:T(i(n).e("arrow")),style:Ke(i(o)),"data-popper-arrow":""},null,6))}}),G3=Y3;const HC=Ce({virtualRef:{type:G(Object)},virtualTriggering:Boolean,onMouseenter:{type:G(Function)},onMouseleave:{type:G(Function)},onClick:{type:G(Function)},onKeydown:{type:G(Function)},onFocus:{type:G(Function)},onBlur:{type:G(Function)},onContextmenu:{type:G(Function)},id:String,open:Boolean}),Kf="ElOnlyChild",KC=se({name:Kf,setup(e,{slots:t,attrs:n}){const a=xA(_e(pC)?.setForwardRef??Dt);return()=>{const o=t.default?.(n);if(!o)return null;const[s,r]=WC(o);return s?(r>1&&pt(Kf,"requires exact only one valid child."),ct(Ro(s,n),[[a]])):(pt(Kf,"no valid child node found"),null)}}});function WC(e){if(!e)return[null,0];const t=e,n=t.filter(a=>a.type!==mn).length;for(const a of t){if(nt(a))switch(a.type){case mn:continue;case Ol:case"svg":return[ay(a),n];case Fe:return WC(a.children);default:return[a,n]}return[ay(a),n]}return[null,0]}function ay(e){const t=fe("only-child");return Y("span",{class:t.e("content")},[e])}var X3=se({name:"ElPopperTrigger",inheritAttrs:!1,__name:"trigger",props:HC,setup(e,{expose:t}){const n=e,{role:a,triggerRef:o}=_e(em,void 0);EA(o);const s=w(()=>l.value?n.id:void 0),r=w(()=>{if(a&&a.value==="tooltip")return n.open&&n.id?n.id:void 0}),l=w(()=>{if(a&&a.value!=="tooltip")return a.value}),u=w(()=>l.value?`${n.open}`:void 0);let c;const d=["onMouseenter","onMouseleave","onClick","onKeydown","onFocus","onBlur","onContextmenu"];return ht(()=>{le(()=>n.virtualRef,f=>{f&&(o.value=xn(f))},{immediate:!0}),le(o,(f,v)=>{c?.(),c=void 0,ha(v)&&d.forEach(g=>{const p=n[g];p&&v.removeEventListener(g.slice(2).toLowerCase(),p,["onFocus","onBlur"].includes(g))}),ha(f)&&(d.forEach(g=>{const p=n[g];p&&f.addEventListener(g.slice(2).toLowerCase(),p,["onFocus","onBlur"].includes(g))}),Ni(f)&&(c=le([s,r,l,u],g=>{["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach((p,h)=>{gn(g[h])?f.removeAttribute(p):f.setAttribute(p,g[h])})},{immediate:!0}))),ha(v)&&Ni(v)&&["aria-controls","aria-describedby","aria-haspopup","aria-expanded"].forEach(g=>v.removeAttribute(g))},{immediate:!0})}),Bt(()=>{if(c?.(),c=void 0,o.value&&ha(o.value)){const f=o.value;d.forEach(v=>{const g=n[v];g&&f.removeEventListener(v.slice(2).toLowerCase(),g,["onFocus","onBlur"].includes(v))}),o.value=void 0}}),t({triggerRef:o}),(f,v)=>e.virtualTriggering?te("v-if",!0):(x(),oe(i(KC),dt({key:0},f.$attrs,{"aria-controls":s.value,"aria-describedby":r.value,"aria-expanded":u.value,"aria-haspopup":l.value}),{default:J(()=>[ee(f.$slots,"default")]),_:3},16,["aria-controls","aria-describedby","aria-expanded","aria-haspopup"]))}}),J3=X3;const jC=Ce({arrowOffset:{type:Number,default:5}}),Z3=["fixed","absolute"],Q3=Ce({boundariesPadding:{type:Number,default:0},fallbackPlacements:{type:G(Array),default:void 0},gpuAcceleration:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:String,values:Lo,default:"bottom"},popperOptions:{type:G(Object),default:()=>({})},strategy:{type:String,values:Z3,default:"absolute"}}),UC=Ce({...Q3,...jC,id:String,style:{type:G([String,Array,Object])},className:{type:G([String,Array,Object])},effect:{type:G(String),default:"dark"},visible:Boolean,enterable:{type:Boolean,default:!0},pure:Boolean,focusOnShow:Boolean,trapping:Boolean,popperClass:{type:G([String,Array,Object])},popperStyle:{type:G([String,Array,Object])},referenceEl:{type:G(Object)},triggerTargetEl:{type:G(Object)},stopPopperMouseEvent:{type:Boolean,default:!0},virtualTriggering:Boolean,zIndex:Number,...aa(["ariaLabel"]),loop:Boolean}),eL={mouseenter:e=>e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,focus:()=>!0,blur:()=>!0,close:()=>!0},tL=Ce({size:{type:String,values:ro},disabled:Boolean}),nL=Ce({...tL,model:Object,rules:{type:G(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:!0},validateOnRuleChange:{type:Boolean,default:!0},hideRequiredAsterisk:Boolean,scrollToError:Boolean,scrollIntoViewOptions:{type:G([Object,Boolean]),default:!0}}),aL={validate:(e,t,n)=>(ye(e)||Le(e))&&Ht(t)&&Le(n)},Pr=Symbol("formContextKey"),Ao=Symbol("formItemContextKey"),Sn=(e,t={})=>{const n=M(void 0),a=t.prop?n:QS("size"),o=t.global?n:NC(),s=t.form?{size:void 0}:_e(Pr,void 0),r=t.formItem?{size:void 0}:_e(Ao,void 0);return w(()=>a.value||i(e)||r?.size||s?.size||o.value||"")},ln=e=>{const t=QS("disabled"),n=_e(Pr,void 0);return w(()=>t.value??i(e)??n?.disabled??!1)},Dn=()=>({form:_e(Pr,void 0),formItem:_e(Ao,void 0)}),Ia=(e,{formItemContext:t,disableIdGeneration:n,disableIdManagement:a})=>{n||(n=M(!1)),a||(a=M(!1));const o=ft(),s=()=>{let c=o?.parent;for(;c;){if(c.type.name==="ElFormItem")return!1;if(c.type.name==="ElLabelWrap")return!0;c=c.parent}return!1},r=M();let l;const u=w(()=>!!(!(e.label||e.ariaLabel)&&t&&t.inputIds&&t.inputIds?.length<=1));return ht(()=>{l=le([Vt(e,"id"),n],([c,d])=>{const f=c??(d?void 0:zn().value);f!==r.value&&(t?.removeInputId&&!s()&&(r.value&&t.removeInputId(r.value),!a?.value&&!d&&f&&t.addInputId(f)),r.value=f)},{immediate:!0})}),$l(()=>{l&&l(),t?.removeInputId&&r.value&&t.removeInputId(r.value)}),{isLabeledByFormItem:u,inputId:r}},oL=["","error","validating","success"],sL=Ce({label:String,labelWidth:{type:[String,Number]},labelPosition:{type:String,values:["left","right","top",""],default:""},prop:{type:G([String,Array])},required:{type:Boolean,default:void 0},rules:{type:G([Object,Array])},error:String,validateStatus:{type:String,values:oL},for:String,inlineMessage:{type:Boolean,default:void 0},showMessage:{type:Boolean,default:!0},size:{type:String,values:ro}}),oy=e=>[...new Set(e)],jl=e=>ye(e)?e[0]:e,Zn=e=>!e&&e!==0?[]:ye(e)?e:[e],rL="ElForm";function lL(){const e=M([]),t=w(()=>{if(!e.value.length)return"0";const s=Math.max(...e.value);return s?`${s}px`:""});function n(s){const r=e.value.indexOf(s);return r===-1&&t.value==="0"&&pt(rL,`unexpected width ${s}`),r}function a(s,r){if(s&&r){const l=n(r);e.value.splice(l,1,s)}else s&&e.value.push(s)}function o(s){const r=n(s);r>-1&&e.value.splice(r,1)}return{autoLabelWidth:t,registerLabelWidth:a,deregisterLabelWidth:o}}const zu=(e,t)=>{const n=Rn(t).map(a=>ye(a)?a.join("."):a);return n.length>0?e.filter(a=>a.propString&&n.includes(a.propString)):e},Dr="ElForm";var iL=se({name:Dr,__name:"form",props:nL,emits:aL,setup(e,{expose:t,emit:n}){const a=e,o=n,s=M(),r=At([]),l=new Map,u=Sn(),c=fe("form"),d=w(()=>{const{labelPosition:$,inline:O}=a;return[c.b(),c.m(u.value||"default"),{[c.m(`label-${$}`)]:$,[c.m("inline")]:O}]}),f=$=>zu(r,[$])[0],v=$=>{r.push($),$.propString&&(l.has($.propString)?$.setInitialValue(l.get($.propString)):l.set($.propString,es($.fieldValue)))},g=$=>{$.prop&&r.splice(r.indexOf($),1)},p=$=>{if(!a.model){pt(Dr,"model is required for setInitialValues to work.");return}if(!$){pt(Dr,"initModel is required for setInitialValues to work.");return}for(const O of l.keys())l.set(O,es(Ms($,O).value));r.forEach(O=>{O.prop&&O.setInitialValue(Ms($,O.prop).value)})},h=($=[])=>{if(!a.model){pt(Dr,"model is required for resetFields to work.");return}zu(r,$).forEach(N=>N.resetField());const O=new Set(r.map(N=>N.propString).filter(Boolean)),R=$.length>0?Rn($).map(N=>ye(N)?N.join("."):N):[...l.keys()];for(const N of R)!O.has(N)&&l.has(N)&&(Ms(a.model,N).value=es(l.get(N)))},m=($=[])=>{zu(r,$).forEach(O=>O.clearValidate())},b=w(()=>{const $=!!a.model;return $||pt(Dr,"model is required for validate to work."),$}),k=$=>{if(r.length===0)return[];const O=zu(r,$);return O.length?O:(pt(Dr,"please pass correct props!"),[])},y=async $=>C(void 0,$),S=async($=[])=>{if(!b.value)return!1;const O=k($);if(O.length===0)return!0;let R={};for(const N of O)try{await N.validate(""),N.validateState==="error"&&!N.error&&N.resetField()}catch(A){R={...R,...A}}return Object.keys(R).length===0?!0:Promise.reject(R)},C=async($=[],O)=>{let R=!1;const N=!Ve(O);try{return R=await S($),R===!0&&await O?.(R),R}catch(A){if(A instanceof Error)throw A;const _=A;return a.scrollToError&&s.value&&s.value.querySelector(`.${c.b()}-item.is-error`)?.scrollIntoView(a.scrollIntoViewOptions),!R&&await O?.(!1,_),N&&Promise.reject(_)}},E=$=>{const O=f($);O&&O.$el?.scrollIntoView(a.scrollIntoViewOptions)};return le(()=>a.rules,()=>{a.validateOnRuleChange&&y().catch($=>pt($))},{deep:!0,flush:"post"}),St(Pr,At({...Mn(a),emit:o,resetFields:h,clearValidate:m,validateField:C,getField:f,addField:v,removeField:g,setInitialValues:p,...lL()})),t({validate:y,validateField:C,resetFields:h,clearValidate:m,scrollToField:E,getField:f,fields:r,setInitialValues:p}),($,O)=>(x(),B("form",{ref_key:"formRef",ref:s,class:T(d.value)},[ee($.$slots,"default")],2))}}),uL=iL;const sy="ElLabelWrap";var cL=se({name:sy,props:{isAutoWidth:Boolean,updateAll:Boolean},setup(e,{slots:t}){const n=_e(Pr,void 0),a=_e(Ao);a||en(sy,"usage: ");const o=fe("form"),s=M(),r=M(0),l=()=>{if(s.value?.firstElementChild){const d=window.getComputedStyle(s.value.firstElementChild).width;return Math.ceil(Number.parseFloat(d))}else return 0},u=(d="update")=>{Ne(()=>{t.default&&e.isAutoWidth&&(d==="update"?r.value=l():d==="remove"&&n?.deregisterLabelWidth(r.value))})},c=()=>u("update");return ht(()=>{c()}),Bt(()=>{u("remove")}),so(()=>c()),le(r,(d,f)=>{e.updateAll&&n?.registerLabelWidth(d,f)}),Zt(w(()=>s.value?.firstElementChild??null),c),()=>{if(!t)return null;const{isAutoWidth:d}=e;if(d){const f=n?.autoLabelWidth,v=a?.hasLabel,g={};if(v&&f&&f!=="auto"){const p=Math.max(0,Number.parseInt(f,10)-r.value),h=(a.labelPosition||n.labelPosition)==="left"?"marginRight":"marginLeft";p&&(g[h]=`${p}px`)}return Y("div",{ref:s,class:[o.be("item","label-wrap")],style:g},[t.default?.()])}else return Y(Fe,{ref:s},[t.default?.()])}}});function ar(){return ar=Object.assign?Object.assign.bind():function(e){for(var t=1;t"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function fc(e,t,n){return fL()?fc=Reflect.construct.bind():fc=function(o,s,r){var l=[null];l.push.apply(l,s);var u=Function.bind.apply(o,l),c=new u;return r&&_i(c,r.prototype),c},fc.apply(null,arguments)}function pL(e){return Function.toString.call(e).indexOf("[native code]")!==-1}function Up(e){var t=typeof Map=="function"?new Map:void 0;return Up=function(a){if(a===null||!pL(a))return a;if(typeof a!="function")throw new TypeError("Super expression must either be null or a function");if(typeof t<"u"){if(t.has(a))return t.get(a);t.set(a,o)}function o(){return fc(a,arguments,jp(this).constructor)}return o.prototype=Object.create(a.prototype,{constructor:{value:o,enumerable:!1,writable:!0,configurable:!0}}),_i(o,a)},Up(e)}var hL=/%[sdj%]/g,vL=function(){};function qp(e){if(!e||!e.length)return null;var t={};return e.forEach(function(n){var a=n.field;t[a]=t[a]||[],t[a].push(n)}),t}function $a(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),a=1;a=s)return l;switch(l){case"%s":return String(n[o++]);case"%d":return Number(n[o++]);case"%j":try{return JSON.stringify(n[o++])}catch{return"[Circular]"}break;default:return l}});return r}return e}function mL(e){return e==="string"||e==="url"||e==="hex"||e==="email"||e==="date"||e==="pattern"}function An(e,t){return!!(e==null||t==="array"&&Array.isArray(e)&&!e.length||mL(t)&&typeof e=="string"&&!e)}function gL(e,t,n){var a=[],o=0,s=e.length;function r(l){a.push.apply(a,l||[]),o++,o===s&&n(a)}e.forEach(function(l){t(l,r)})}function ry(e,t,n){var a=0,o=e.length;function s(r){if(r&&r.length){n(r);return}var l=a;a=a+1,l()\[\]\\.,;:\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},Jl={integer:function(t){return Jl.number(t)&&parseInt(t,10)===t},float:function(t){return Jl.number(t)&&!Jl.integer(t)},array:function(t){return Array.isArray(t)},regexp:function(t){if(t instanceof RegExp)return!0;try{return!!new RegExp(t)}catch{return!1}},date:function(t){return typeof t.getTime=="function"&&typeof t.getMonth=="function"&&typeof t.getYear=="function"&&!isNaN(t.getTime())},number:function(t){return isNaN(t)?!1:typeof t=="number"},object:function(t){return typeof t=="object"&&!Jl.array(t)},method:function(t){return typeof t=="function"},email:function(t){return typeof t=="string"&&t.length<=320&&!!t.match(cy.email)},url:function(t){return typeof t=="string"&&t.length<=2048&&!!t.match(kL())},hex:function(t){return typeof t=="string"&&!!t.match(cy.hex)}},EL=function(t,n,a,o,s){if(t.required&&n===void 0){qC(t,n,a,o,s);return}var r=["integer","float","array","regexp","object","method","email","number","date","url","hex"],l=t.type;r.indexOf(l)>-1?Jl[l](n)||o.push($a(s.messages.types[l],t.fullField,t.type)):l&&typeof n!==t.type&&o.push($a(s.messages.types[l],t.fullField,t.type))},xL=function(t,n,a,o,s){var r=typeof t.len=="number",l=typeof t.min=="number",u=typeof t.max=="number",c=/[\uD800-\uDBFF][\uDC00-\uDFFF]/g,d=n,f=null,v=typeof n=="number",g=typeof n=="string",p=Array.isArray(n);if(v?f="number":g?f="string":p&&(f="array"),!f)return!1;p&&(d=n.length),g&&(d=n.replace(c,"_").length),r?d!==t.len&&o.push($a(s.messages[f].len,t.fullField,t.len)):l&&!u&&dt.max?o.push($a(s.messages[f].max,t.fullField,t.max)):l&&u&&(dt.max)&&o.push($a(s.messages[f].range,t.fullField,t.min,t.max))},Br="enum",TL=function(t,n,a,o,s){t[Br]=Array.isArray(t[Br])?t[Br]:[],t[Br].indexOf(n)===-1&&o.push($a(s.messages[Br],t.fullField,t[Br].join(", ")))},$L=function(t,n,a,o,s){if(t.pattern){if(t.pattern instanceof RegExp)t.pattern.lastIndex=0,t.pattern.test(n)||o.push($a(s.messages.pattern.mismatch,t.fullField,n,t.pattern));else if(typeof t.pattern=="string"){var r=new RegExp(t.pattern);r.test(n)||o.push($a(s.messages.pattern.mismatch,t.fullField,n,t.pattern))}}},Gt={required:qC,whitespace:CL,type:EL,range:xL,enum:TL,pattern:$L},OL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n,"string")&&!t.required)return a();Gt.required(t,n,o,r,s,"string"),An(n,"string")||(Gt.type(t,n,o,r,s),Gt.range(t,n,o,r,s),Gt.pattern(t,n,o,r,s),t.whitespace===!0&&Gt.whitespace(t,n,o,r,s))}a(r)},NL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n)&&!t.required)return a();Gt.required(t,n,o,r,s),n!==void 0&&Gt.type(t,n,o,r,s)}a(r)},RL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(n===""&&(n=void 0),An(n)&&!t.required)return a();Gt.required(t,n,o,r,s),n!==void 0&&(Gt.type(t,n,o,r,s),Gt.range(t,n,o,r,s))}a(r)},IL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n)&&!t.required)return a();Gt.required(t,n,o,r,s),n!==void 0&&Gt.type(t,n,o,r,s)}a(r)},PL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n)&&!t.required)return a();Gt.required(t,n,o,r,s),An(n)||Gt.type(t,n,o,r,s)}a(r)},ML=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n)&&!t.required)return a();Gt.required(t,n,o,r,s),n!==void 0&&(Gt.type(t,n,o,r,s),Gt.range(t,n,o,r,s))}a(r)},_L=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n)&&!t.required)return a();Gt.required(t,n,o,r,s),n!==void 0&&(Gt.type(t,n,o,r,s),Gt.range(t,n,o,r,s))}a(r)},AL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(n==null&&!t.required)return a();Gt.required(t,n,o,r,s,"array"),n!=null&&(Gt.type(t,n,o,r,s),Gt.range(t,n,o,r,s))}a(r)},LL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n)&&!t.required)return a();Gt.required(t,n,o,r,s),n!==void 0&&Gt.type(t,n,o,r,s)}a(r)},DL="enum",BL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n)&&!t.required)return a();Gt.required(t,n,o,r,s),n!==void 0&&Gt[DL](t,n,o,r,s)}a(r)},FL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n,"string")&&!t.required)return a();Gt.required(t,n,o,r,s),An(n,"string")||Gt.pattern(t,n,o,r,s)}a(r)},VL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n,"date")&&!t.required)return a();if(Gt.required(t,n,o,r,s),!An(n,"date")){var u;n instanceof Date?u=n:u=new Date(n),Gt.type(t,u,o,r,s),u&&Gt.range(t,u.getTime(),o,r,s)}}a(r)},zL=function(t,n,a,o,s){var r=[],l=Array.isArray(n)?"array":typeof n;Gt.required(t,n,o,r,s,l),a(r)},Wf=function(t,n,a,o,s){var r=t.type,l=[],u=t.required||!t.required&&o.hasOwnProperty(t.field);if(u){if(An(n,r)&&!t.required)return a();Gt.required(t,n,o,l,s,r),An(n,r)||Gt.type(t,n,o,l,s)}a(l)},HL=function(t,n,a,o,s){var r=[],l=t.required||!t.required&&o.hasOwnProperty(t.field);if(l){if(An(n)&&!t.required)return a();Gt.required(t,n,o,r,s)}a(r)},hi={string:OL,method:NL,number:RL,boolean:IL,regexp:PL,integer:ML,float:_L,array:AL,object:LL,enum:BL,pattern:FL,date:VL,url:Wf,hex:Wf,email:Wf,required:zL,any:HL};function Yp(){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(){var t=JSON.parse(JSON.stringify(this));return t.clone=this.clone,t}}}var Gp=Yp(),mu=(function(){function e(n){this.rules=null,this._messages=Gp,this.define(n)}var t=e.prototype;return t.define=function(a){var o=this;if(!a)throw new Error("Cannot configure a schema with no rules");if(typeof a!="object"||Array.isArray(a))throw new Error("Rules must be an object");this.rules={},Object.keys(a).forEach(function(s){var r=a[s];o.rules[s]=Array.isArray(r)?r:[r]})},t.messages=function(a){return a&&(this._messages=uy(Yp(),a)),this._messages},t.validate=function(a,o,s){var r=this;o===void 0&&(o={}),s===void 0&&(s=function(){});var l=a,u=o,c=s;if(typeof u=="function"&&(c=u,u={}),!this.rules||Object.keys(this.rules).length===0)return c&&c(null,l),Promise.resolve(l);function d(h){var m=[],b={};function k(S){if(Array.isArray(S)){var C;m=(C=m).concat.apply(C,S)}else m.push(S)}for(var y=0;yn.labelPosition||o?.labelPosition),b=w(()=>m.value==="top"?{}:{width:rn(n.labelWidth??o?.labelWidth)}),k=w(()=>{if(m.value==="top"||o?.inline)return{};if(!n.label&&!n.labelWidth&&N)return{};const ie=rn(n.labelWidth??o?.labelWidth);return!n.label&&!a.label?{marginLeft:ie}:{}}),y=w(()=>[l.b(),l.m(r.value),l.is("error",d.value==="error"),l.is("validating",d.value==="validating"),l.is("success",d.value==="success"),l.is("required",U.value||n.required),l.is("no-asterisk",o?.hideRequiredAsterisk),o?.requireAsteriskPosition==="right"?"asterisk-right":"asterisk-left",{[l.m("feedback")]:o?.statusIcon,[l.m(`label-${m.value}`)]:m.value}]),S=w(()=>Ht(n.inlineMessage)?n.inlineMessage:o?.inlineMessage||!1),C=w(()=>[l.e("error"),{[l.em("error","inline")]:S.value}]),E=w(()=>n.prop?ye(n.prop)?n.prop.join("."):n.prop:""),$=w(()=>!!(n.label||a.label)),O=w(()=>n.for??(c.value.length===1?c.value[0]:void 0)),R=w(()=>!O.value&&$.value),N=!!s,A=w(()=>{const ie=o?.model;if(!(!ie||!n.prop))return Ms(ie,n.prop).value}),_=w(()=>{const{required:ie}=n,ae=[];n.rules&&ae.push(...Rn(n.rules));const ne=o?.rules;if(ne&&n.prop){const K=Ms(ne,n.prop).value;K&&ae.push(...Rn(K))}if(ie!==void 0){const K=ae.map((Z,re)=>[Z,re]).filter(([Z])=>"required"in Z);if(K.length>0)for(const[Z,re]of K)Z.required!==ie&&(ae[re]={...Z,required:ie});else ae.push({required:ie})}return ae}),V=w(()=>_.value.length>0),z=ie=>_.value.filter(ae=>!ae.trigger||!ie?!0:ye(ae.trigger)?ae.trigger.includes(ie):ae.trigger===ie).map(({trigger:ae,...ne})=>ne),U=w(()=>_.value.some(ie=>ie.required)),W=w(()=>f.value==="error"&&n.showMessage&&(o?.showMessage??!0)),P=w(()=>`${n.label||""}${o?.labelSuffix||""}`),I=ie=>{d.value=ie},L=ie=>{const{errors:ae,fields:ne}=ie;(!ae||!ne)&&console.error(ie),I("error"),v.value=ae?ae?.[0]?.message??`${n.prop} is required`:"",o?.emit("validate",n.prop,!1,v.value)},D=()=>{I("success"),o?.emit("validate",n.prop,!0,"")},F=async ie=>{const ae=E.value;return new mu({[ae]:ie}).validate({[ae]:A.value},{firstFields:!0}).then(()=>(D(),!0)).catch(ne=>(L(ne),Promise.reject(ne)))},q=async(ie,ae)=>{if(h||!n.prop)return!1;const ne=Ve(ae);if(!V.value)return ae?.(!1),!1;const K=z(ie);return K.length===0?(ae?.(!0),!0):(I("validating"),F(K).then(()=>(ae?.(!0),!0)).catch(Z=>{const{fields:re}=Z;return ae?.(!1,re),ne?!1:Promise.reject(re)}))},j=()=>{I(""),v.value="",h=!1},X=async()=>{const ie=o?.model;if(!ie||!n.prop)return;const ae=Ms(ie,n.prop);h=!0,ae.value=es(p),await Ne(),j(),h=!1},Q=ie=>{c.value.includes(ie)||c.value.push(ie)},he=ie=>{c.value=c.value.filter(ae=>ae!==ie)},ue=ie=>{p=es(ie)};le(()=>n.error,ie=>{v.value=ie||"",I(ie?"error":"")},{immediate:!0}),le(()=>n.validateStatus,ie=>I(ie||""));const ge=At({...Mn(n),$el:g,size:r,validateMessage:v,validateState:d,labelId:u,inputIds:c,isGroup:R,hasLabel:$,fieldValue:A,addInputId:Q,removeInputId:he,resetField:X,clearValidate:j,validate:q,propString:E,setInitialValue:ue});return St(Ao,ge),ht(()=>{n.prop&&(ue(A.value),o?.addField(ge))}),Bt(()=>{o?.removeField(ge)}),t({size:r,validateMessage:v,validateState:d,validate:q,clearValidate:j,resetField:X,setInitialValue:ue}),(ie,ae)=>(x(),B("div",{ref_key:"formItemRef",ref:g,class:T(y.value),role:R.value?"group":void 0,"aria-labelledby":R.value?i(u):void 0},[Y(i(cL),{"is-auto-width":b.value.width==="auto","update-all":i(o)?.labelWidth==="auto"},{default:J(()=>[e.label||ie.$slots.label?(x(),oe(it(O.value?"label":"div"),{key:0,id:i(u),for:O.value,class:T(i(l).e("label")),style:Ke(b.value)},{default:J(()=>[ee(ie.$slots,"label",{label:P.value},()=>[wt(Se(P.value),1)])]),_:3},8,["id","for","class","style"])):te("v-if",!0)]),_:3},8,["is-auto-width","update-all"]),H("div",{class:T(i(l).e("content")),style:Ke(k.value)},[ee(ie.$slots,"default"),Y(F1,{name:`${i(l).namespace.value}-zoom-in-top`},{default:J(()=>[W.value?ee(ie.$slots,"error",{key:0,error:v.value},()=>[H("div",{class:T(C.value)},Se(v.value),3)]):te("v-if",!0)]),_:3},8,["name"])],6)],10,KL))}}),YC=WL;const jL=st(uL,{FormItem:YC}),UL=tn(YC),jf="focus-trap.focus-after-trapped",Uf="focus-trap.focus-after-released",qL="focus-trap.focusout-prevented",dy={cancelable:!0,bubbles:!1},YL={cancelable:!0,bubbles:!1},fy="focusAfterTrapped",py="focusAfterReleased",GC=Symbol("elFocusTrap"),tm=M(),af=M(0),nm=M(0);let Ku=0;const XC=e=>{const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:a=>{const o=a.tagName==="INPUT"&&a.type==="hidden";return a.disabled||a.hidden||o?NodeFilter.FILTER_SKIP:a.tabIndex>=0||a===document.activeElement?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t},hy=(e,t)=>{for(const n of e)if(!GL(n,t))return n},GL=(e,t)=>{if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1},XL=e=>{const t=XC(e);return[hy(t,e),hy(t.reverse(),e)]},JL=e=>e instanceof HTMLInputElement&&"select"in e,Cs=(e,t)=>{if(e){const n=document.activeElement;ru(e,{preventScroll:!0}),nm.value=window.performance.now(),e!==n&&JL(e)&&t&&e.select()}};function vy(e,t){const n=[...e],a=e.indexOf(t);return a!==-1&&n.splice(a,1),n}const ZL=()=>{let e=[];return{push:a=>{const o=e[0];o&&a!==o&&o.pause(),e=vy(e,a),e.unshift(a)},remove:a=>{e=vy(e,a),e[0]?.resume?.()}}},QL=(e,t=!1)=>{const n=document.activeElement;for(const a of e)if(Cs(a,t),document.activeElement!==n)return},my=ZL(),eD=()=>af.value>nm.value,Wu=()=>{tm.value="pointer",af.value=window.performance.now()},gy=()=>{tm.value="keyboard",af.value=window.performance.now()},tD=()=>(ht(()=>{Ku===0&&(document.addEventListener("mousedown",Wu),document.addEventListener("touchstart",Wu),document.addEventListener("keydown",gy)),Ku++}),Bt(()=>{Ku--,Ku<=0&&(document.removeEventListener("mousedown",Wu),document.removeEventListener("touchstart",Wu),document.removeEventListener("keydown",gy))}),{focusReason:tm,lastUserFocusTimestamp:af,lastAutomatedFocusTimestamp:nm}),ju=e=>new CustomEvent(qL,{...YL,detail:e});var nD=se({name:"ElFocusTrap",inheritAttrs:!1,props:{loop:Boolean,trapped:Boolean,focusTrapEl:Object,focusStartEl:{type:[Object,String],default:"first"}},emits:[fy,py,"focusin","focusout","focusout-prevented","release-requested"],setup(e,{emit:t}){const n=M();let a,o;const{focusReason:s}=tD();yA(p=>{e.trapped&&!r.paused&&t("release-requested",p)});const r={paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}},l=p=>{if(!e.loop&&!e.trapped||r.paused)return;const{altKey:h,ctrlKey:m,metaKey:b,currentTarget:k,shiftKey:y}=p,{loop:S}=e,C=jt(p)===we.tab&&!h&&!m&&!b,E=document.activeElement;if(C&&E){const $=k,[O,R]=XL($);if(O&&R){if(!y&&E===R){const N=ju({focusReason:s.value});t("focusout-prevented",N),N.defaultPrevented||(p.preventDefault(),S&&Cs(O,!0))}else if(y&&[O,$].includes(E)){const N=ju({focusReason:s.value});t("focusout-prevented",N),N.defaultPrevented||(p.preventDefault(),S&&Cs(R,!0))}}else if(E===$){const N=ju({focusReason:s.value});t("focusout-prevented",N),N.defaultPrevented||p.preventDefault()}}};St(GC,{focusTrapRef:n,onKeydown:l}),le(()=>e.focusTrapEl,p=>{p&&(n.value=p)},{immediate:!0}),le([n],([p],[h])=>{p&&(p.addEventListener("keydown",l),p.addEventListener("focusin",d),p.addEventListener("focusout",f)),h&&(h.removeEventListener("keydown",l),h.removeEventListener("focusin",d),h.removeEventListener("focusout",f))});const u=p=>{t(fy,p)},c=p=>t(py,p),d=p=>{const h=i(n);if(!h)return;const m=p.target,b=p.relatedTarget,k=m&&h.contains(m);e.trapped||b&&h.contains(b)||(a=b),k&&t("focusin",p),!r.paused&&e.trapped&&(k?o=m:Cs(o,!0))},f=p=>{const h=i(n);if(!(r.paused||!h))if(e.trapped){const m=p.relatedTarget;!gn(m)&&!h.contains(m)&&setTimeout(()=>{if(!r.paused&&e.trapped){const b=ju({focusReason:s.value});t("focusout-prevented",b),b.defaultPrevented||Cs(o,!0)}},0)}else{const m=p.target;m&&h.contains(m)||t("focusout",p)}};async function v(){await Ne();const p=i(n);if(p){my.push(r);const h=p.contains(document.activeElement)?a:document.activeElement;if(a=h,!p.contains(h)){const m=new Event(jf,dy);p.addEventListener(jf,u),p.dispatchEvent(m),m.defaultPrevented||Ne(()=>{let b=e.focusStartEl;Le(b)||(Cs(b),document.activeElement!==b&&(b="first")),b==="first"&&QL(XC(p),!0),(document.activeElement===h||b==="container")&&Cs(p)})}}}function g(){const p=i(n);if(p){p.removeEventListener(jf,u);const h=new CustomEvent(Uf,{...dy,detail:{focusReason:s.value}});p.addEventListener(Uf,c),p.dispatchEvent(h),!h.defaultPrevented&&(s.value=="keyboard"||!eD()||p.contains(document.activeElement))&&Cs(a??document.body),p.removeEventListener(Uf,c),my.remove(r),a=null,o=null}}return ht(()=>{e.trapped&&v(),le(()=>e.trapped,p=>{p?v():g()})}),Bt(()=>{e.trapped&&g(),n.value&&(n.value.removeEventListener("keydown",l),n.value.removeEventListener("focusin",d),n.value.removeEventListener("focusout",f),n.value=void 0),a=null,o=null}),{onKeydown:l}}}),$n=(e,t)=>{const n=e.__vccOpts||e;for(const[a,o]of t)n[a]=o;return n};function aD(e,t,n,a,o,s){return ee(e.$slots,"default",{handleKeydown:e.onKeydown})}var oD=$n(nD,[["render",aD]]),Al=oD;const sD=(e,t=[])=>{const{placement:n,strategy:a,popperOptions:o}=e,s={placement:n,strategy:a,...o,modifiers:[...lD(e),...t]};return iD(s,o?.modifiers),s},rD=e=>{if(Mt)return xn(e)};function lD(e){const{offset:t,gpuAcceleration:n,fallbackPlacements:a}=e;return[{name:"offset",options:{offset:[0,t??12]}},{name:"preventOverflow",options:{padding:{top:0,bottom:0,left:0,right:0}}},{name:"flip",options:{padding:5,fallbackPlacements:a}},{name:"computeStyles",options:{gpuAcceleration:n}}]}function iD(e,t){t&&(e.modifiers=[...e.modifiers,...t??[]])}const uD=0,cD=e=>{const{popperInstanceRef:t,contentRef:n,triggerRef:a,role:o}=_e(em,void 0),s=M(),r=w(()=>e.arrowOffset),l=w(()=>({name:"eventListeners",enabled:!!e.visible})),u=w(()=>{const b=i(s),k=i(r)??uD;return{name:"arrow",enabled:!fM(b),options:{element:b,padding:k}}}),c=w(()=>({onFirstUpdate:()=>{p()},...sD(e,[i(u),i(l)])})),d=w(()=>rD(e.referenceEl)||i(a)),{attributes:f,state:v,styles:g,update:p,forceUpdate:h,instanceRef:m}=vA(d,n,c);return le(m,b=>t.value=b,{flush:"sync"}),ht(()=>{le(()=>i(d)?.getBoundingClientRect?.(),()=>{p()})}),Bt(()=>{t.value=void 0}),{attributes:f,arrowRef:s,contentRef:n,instanceRef:m,state:v,styles:g,role:o,forceUpdate:h,update:p}},dD=(e,{attributes:t,styles:n,role:a})=>{const{nextZIndex:o}=uu(),s=fe("popper"),r=w(()=>i(t).popper),l=M(He(e.zIndex)?e.zIndex:o()),u=w(()=>[s.b(),s.is("pure",e.pure),s.is(e.effect),e.popperClass]),c=w(()=>[{zIndex:i(l)},i(n).popper,e.popperStyle||{}]),d=w(()=>a.value==="dialog"?"false":void 0),f=w(()=>i(n).arrow||{});return{ariaModal:d,arrowStyle:f,contentAttrs:r,contentClass:u,contentStyle:c,contentZIndex:l,updateZIndex:()=>{l.value=He(e.zIndex)?e.zIndex:o()}}},fD=(e,t)=>{const n=M(!1),a=M(),o=()=>{t("focus")},s=c=>{c.detail?.focusReason!=="pointer"&&(a.value="first",t("blur"))},r=c=>{e.visible&&!n.value&&(c.target&&(a.value=c.target),n.value=!0)},l=c=>{e.trapping||(c.detail.focusReason==="pointer"&&c.preventDefault(),n.value=!1)},u=()=>{n.value=!1,t("close")};return Bt(()=>{a.value=void 0}),{focusStartRef:a,trapped:n,onFocusAfterReleased:s,onFocusAfterTrapped:o,onFocusInTrap:r,onFocusoutPrevented:l,onReleaseRequested:u}};var pD=se({name:"ElPopperContent",__name:"content",props:UC,emits:eL,setup(e,{expose:t,emit:n}){const a=n,o=e,{focusStartRef:s,trapped:r,onFocusAfterReleased:l,onFocusAfterTrapped:u,onFocusInTrap:c,onFocusoutPrevented:d,onReleaseRequested:f}=fD(o,a),{attributes:v,arrowRef:g,contentRef:p,styles:h,instanceRef:m,role:b,update:k}=cD(o),{ariaModal:y,arrowStyle:S,contentAttrs:C,contentClass:E,contentStyle:$,updateZIndex:O}=dD(o,{styles:h,attributes:v,role:b}),R=_e(Ao,void 0);St(zC,{arrowStyle:S,arrowRef:g}),R&&St(Ao,{...R,addInputId:Dt,removeInputId:Dt});let N;const A=(V=!0)=>{k(),V&&O()},_=()=>{A(!1),o.visible&&o.focusOnShow?r.value=!0:o.visible===!1&&(r.value=!1)};return ht(()=>{le(()=>o.triggerTargetEl,(V,z)=>{N?.(),N=void 0;const U=i(V||p.value),W=i(z||p.value);ha(U)&&(N=le([b,()=>o.ariaLabel,y,()=>o.id],P=>{["role","aria-label","aria-modal","id"].forEach((I,L)=>{gn(P[L])?U.removeAttribute(I):U.setAttribute(I,P[L])})},{immediate:!0})),W!==U&&ha(W)&&["role","aria-label","aria-modal","id"].forEach(P=>{W.removeAttribute(P)})},{immediate:!0}),le(()=>o.visible,_,{immediate:!0})}),Bt(()=>{N?.(),N=void 0,p.value=void 0}),t({popperContentRef:p,popperInstanceRef:m,updatePopper:A,contentStyle:$}),(V,z)=>(x(),B("div",dt({ref_key:"contentRef",ref:p},i(C),{style:i($),class:i(E),tabindex:"-1",onMouseenter:z[0]||(z[0]=U=>V.$emit("mouseenter",U)),onMouseleave:z[1]||(z[1]=U=>V.$emit("mouseleave",U))}),[Y(i(Al),{loop:e.loop,trapped:i(r),"trap-on-focus-in":!0,"focus-trap-el":i(p),"focus-start-el":i(s),onFocusAfterTrapped:i(u),onFocusAfterReleased:i(l),onFocusin:i(c),onFocusoutPrevented:i(d),onReleaseRequested:i(f)},{default:J(()=>[ee(V.$slots,"default")]),_:3},8,["loop","trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusin","onFocusoutPrevented","onReleaseRequested"])],16))}}),hD=pD,vD=se({name:"ElPopper",inheritAttrs:!1,__name:"popper",props:VC,setup(e,{expose:t}){const n=e,a={triggerRef:M(),popperInstanceRef:M(),contentRef:M(),referenceRef:M(),role:w(()=>n.role)};return t(a),St(em,a),(o,s)=>ee(o.$slots,"default")}}),mD=vD;const JC=st(mD),zt=Ce({...CA,...UC,appendTo:{type:au.to.type},content:{type:String,default:""},rawContent:Boolean,persistent:Boolean,visible:{type:G(Boolean),default:null},transition:String,teleported:{type:Boolean,default:!0},disabled:Boolean,...aa(["ariaLabel"])}),No=Ce({...HC,disabled:Boolean,trigger:{type:G([String,Array]),default:"hover"},triggerKeys:{type:G(Array),default:()=>[we.enter,we.numpadEnter,we.space]},focusOnTarget:Boolean}),{useModelToggleProps:gD,useModelToggleEmits:bD,useModelToggle:yD}=f_("visible"),wD=Ce({...VC,...gD,...zt,...No,...jC,showArrow:{type:Boolean,default:!0}}),SD=[...bD,"before-show","before-hide","show","hide","open","close"],am=Symbol("elTooltip"),Xp=(e,t)=>ye(e)?e.includes(t):e===t,Fr=(e,t,n)=>a=>{Xp(i(e),t)&&n(a)};var CD=se({name:"ElTooltipTrigger",__name:"trigger",props:No,setup(e,{expose:t}){const n=e,a=fe("tooltip"),{controlled:o,id:s,open:r,onOpen:l,onClose:u,onToggle:c}=_e(am,void 0),d=M(null),f=()=>{if(i(o)||n.disabled)return!0},v=Vt(n,"trigger"),g=Nn(f,Fr(v,"hover",S=>{l(S),n.focusOnTarget&&S.target&&Ne(()=>{ru(S.target,{preventScroll:!0})})})),p=Nn(f,Fr(v,"hover",u)),h=Nn(f,Fr(v,"click",S=>{S.button===0&&c(S)})),m=Nn(f,Fr(v,"focus",l)),b=Nn(f,Fr(v,"focus",u)),k=Nn(f,Fr(v,"contextmenu",S=>{S.preventDefault(),c(S)})),y=Nn(f,S=>{const C=jt(S);n.triggerKeys.includes(C)&&(S.preventDefault(),c(S))});return t({triggerRef:d}),(S,C)=>(x(),oe(i(J3),{id:i(s),"virtual-ref":e.virtualRef,open:i(r),"virtual-triggering":e.virtualTriggering,class:T(i(a).e("trigger")),onBlur:i(b),onClick:i(h),onContextmenu:i(k),onFocus:i(m),onMouseenter:i(g),onMouseleave:i(p),onKeydown:i(y)},{default:J(()=>[ee(S.$slots,"default")]),_:3},8,["id","virtual-ref","open","virtual-triggering","class","onBlur","onClick","onContextmenu","onFocus","onMouseenter","onMouseleave","onKeydown"]))}}),kD=CD,ED=se({name:"ElTooltipContent",inheritAttrs:!1,__name:"content",props:zt,setup(e,{expose:t}){const n=e,{selector:a}=fC(),o=fe("tooltip"),s=M(),r=LS(()=>s.value?.popperContentRef);let l;const{controlled:u,id:c,open:d,trigger:f,onClose:v,onOpen:g,onShow:p,onHide:h,onBeforeShow:m,onBeforeHide:b}=_e(am,void 0),k=w(()=>n.transition||`${o.namespace.value}-fade-in-linear`),y=w(()=>n.persistent);Bt(()=>{l?.()});const S=w(()=>i(y)?!0:i(d)),C=w(()=>n.disabled?!1:i(d)),E=w(()=>n.appendTo||a.value),$=w(()=>n.style??{}),O=M(!0),R=()=>{h(),P()&&ru(document.body,{preventScroll:!0}),O.value=!0},N=()=>{if(i(u))return!0},A=Nn(N,()=>{n.enterable&&Xp(i(f),"hover")&&g()}),_=Nn(N,()=>{Xp(i(f),"hover")&&v()}),V=()=>{s.value?.updatePopper?.(),m?.()},z=()=>{b?.()},U=()=>{p()},W=()=>{n.virtualTriggering||v()},P=I=>{const L=s.value?.popperContentRef,D=I?.relatedTarget||document.activeElement;return L?.contains(D)};return le(()=>i(d),I=>{I?(O.value=!1,l=Nv(r,()=>{i(u)||Zn(i(f)).every(L=>L!=="hover"&&L!=="focus")&&v()},{detectIframe:!0})):l?.()},{flush:"post"}),le(()=>n.content,()=>{s.value?.updatePopper?.()}),t({contentRef:s,isFocusInsideContent:P}),(I,L)=>(x(),oe(i(_l),{disabled:!e.teleported,to:E.value},{default:J(()=>[S.value||!O.value?(x(),oe(Vn,{key:0,name:k.value,appear:!y.value,onAfterLeave:R,onBeforeEnter:V,onAfterEnter:U,onBeforeLeave:z,persisted:""},{default:J(()=>[ct(Y(i(hD),dt({id:i(c),ref_key:"contentRef",ref:s},I.$attrs,{"aria-label":e.ariaLabel,"aria-hidden":O.value,"boundaries-padding":e.boundariesPadding,"fallback-placements":e.fallbackPlacements,"gpu-acceleration":e.gpuAcceleration,offset:e.offset,placement:e.placement,"popper-options":e.popperOptions,"arrow-offset":e.arrowOffset,strategy:e.strategy,effect:e.effect,enterable:e.enterable,pure:e.pure,"popper-class":e.popperClass,"popper-style":[e.popperStyle,$.value],"reference-el":e.referenceEl,"trigger-target-el":e.triggerTargetEl,visible:C.value,"z-index":e.zIndex,loop:e.loop,onMouseenter:i(A),onMouseleave:i(_),onBlur:W,onClose:i(v)}),{default:J(()=>[ee(I.$slots,"default")]),_:3},16,["id","aria-label","aria-hidden","boundaries-padding","fallback-placements","gpu-acceleration","offset","placement","popper-options","arrow-offset","strategy","effect","enterable","pure","popper-class","popper-style","reference-el","trigger-target-el","visible","z-index","loop","onMouseenter","onMouseleave","onClose"]),[[Pt,C.value]])]),_:3},8,["name","appear"])):te("v-if",!0)]),_:3},8,["disabled","to"]))}}),xD=ED;const TD=["innerHTML"],$D={key:1};var OD=se({name:"ElTooltip",__name:"tooltip",props:wD,emits:SD,setup(e,{expose:t,emit:n}){const a=e,o=n;SA();const s=fe("tooltip"),r=zn(),l=M(),u=M(),c=()=>{const S=i(l);S&&S.popperInstanceRef?.update()},d=M(!1),f=M(),{show:v,hide:g,hasUpdateHandler:p}=yD({indicator:d,toggleReason:f}),{onOpen:h,onClose:m}=kA({showAfter:Vt(a,"showAfter"),hideAfter:Vt(a,"hideAfter"),autoClose:Vt(a,"autoClose"),open:v,close:g}),b=w(()=>Ht(a.visible)&&!p.value),k=w(()=>[s.b(),a.popperClass]);St(am,{controlled:b,id:r,open:gr(d),trigger:Vt(a,"trigger"),onOpen:h,onClose:m,onToggle:S=>{i(d)?m(S):h(S)},onShow:()=>{o("show",f.value)},onHide:()=>{o("hide",f.value)},onBeforeShow:()=>{o("before-show",f.value)},onBeforeHide:()=>{o("before-hide",f.value)},updatePopper:c}),le(()=>a.disabled,S=>{S&&d.value&&(d.value=!1)});const y=S=>u.value?.isFocusInsideContent(S);return av(()=>d.value&&g()),Bt(()=>{f.value=void 0}),t({popperRef:l,contentRef:u,isFocusInsideContent:y,updatePopper:c,onOpen:h,onClose:m,hide:g}),(S,C)=>(x(),oe(i(JC),{ref_key:"popperRef",ref:l,role:e.role},{default:J(()=>[Y(kD,{disabled:e.disabled,trigger:e.trigger,"trigger-keys":e.triggerKeys,"virtual-ref":e.virtualRef,"virtual-triggering":e.virtualTriggering,"focus-on-target":e.focusOnTarget},{default:J(()=>[S.$slots.default?ee(S.$slots,"default",{key:0}):te("v-if",!0)]),_:3},8,["disabled","trigger","trigger-keys","virtual-ref","virtual-triggering","focus-on-target"]),Y(xD,{ref_key:"contentRef",ref:u,"aria-label":e.ariaLabel,"boundaries-padding":e.boundariesPadding,content:e.content,disabled:e.disabled,effect:e.effect,enterable:e.enterable,"fallback-placements":e.fallbackPlacements,"hide-after":e.hideAfter,"gpu-acceleration":e.gpuAcceleration,offset:e.offset,persistent:e.persistent,"popper-class":k.value,"popper-style":e.popperStyle,placement:e.placement,"popper-options":e.popperOptions,"arrow-offset":e.arrowOffset,pure:e.pure,"raw-content":e.rawContent,"reference-el":e.referenceEl,"trigger-target-el":e.triggerTargetEl,"show-after":e.showAfter,strategy:e.strategy,teleported:e.teleported,transition:e.transition,"virtual-triggering":e.virtualTriggering,"z-index":e.zIndex,"append-to":e.appendTo,loop:e.loop},{default:J(()=>[ee(S.$slots,"content",{},()=>[e.rawContent?(x(),B("span",{key:0,innerHTML:e.content},null,8,TD)):(x(),B("span",$D,Se(e.content),1))]),e.showArrow?(x(),oe(i(G3),{key:0})):te("v-if",!0)]),_: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","arrow-offset","pure","raw-content","reference-el","trigger-target-el","show-after","strategy","teleported","transition","virtual-triggering","z-index","append-to","loop"])]),_:3},8,["role"]))}}),ND=OD;const Ln=st(ND),sn=e=>e,gu=Ce({id:{type:String,default:void 0},size:Tn,disabled:{type:Boolean,default:void 0},modelValue:{type:G([String,Number,Object]),default:""},modelModifiers:{type:G(Object),default:()=>({})},maxlength:{type:[String,Number]},minlength:{type:[String,Number]},type:{type:G(String),default:"text"},resize:{type:String,values:["none","both","horizontal","vertical"]},autosize:{type:G([Boolean,Object]),default:!1},autocomplete:{type:G(String),default:"off"},formatter:{type:Function},parser:{type:Function},placeholder:{type:String},form:{type:String},readonly:Boolean,clearable:Boolean,clearIcon:{type:Kt,default:Fo},showPassword:Boolean,showWordLimit:Boolean,wordLimitPosition:{type:String,values:["inside","outside"],default:"inside"},suffixIcon:{type:Kt},prefixIcon:{type:Kt},containerRole:{type:String,default:void 0},tabindex:{type:[String,Number],default:0},validateEvent:{type:Boolean,default:!0},inputStyle:{type:G([Object,Array,String]),default:()=>sn({})},autofocus:Boolean,rows:{type:Number,default:2},...aa(["ariaLabel"]),inputmode:{type:G(String),default:void 0},name:String}),RD={[tt]:e=>Le(e),input:e=>Le(e),change:(e,t)=>Le(e)&&(t instanceof Event||t===void 0),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:e=>e===void 0||e instanceof MouseEvent,mouseleave:e=>e instanceof MouseEvent,mouseenter:e=>e instanceof MouseEvent,keydown:e=>e instanceof Event,compositionstart:e=>e instanceof CompositionEvent,compositionupdate:e=>e instanceof CompositionEvent,compositionend:e=>e instanceof CompositionEvent};Eo(Fo);let Ma;const ID={height:"0",visibility:"hidden",overflow:Ud()?"":"hidden",position:"absolute","z-index":"-1000",top:"0",right:"0"},PD=["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","word-break"],by=e=>{const t=Number.parseFloat(e);return Number.isNaN(t)?e:t};function MD(e){const t=window.getComputedStyle(e),n=t.getPropertyValue("box-sizing"),a=Number.parseFloat(t.getPropertyValue("padding-bottom"))+Number.parseFloat(t.getPropertyValue("padding-top")),o=Number.parseFloat(t.getPropertyValue("border-bottom-width"))+Number.parseFloat(t.getPropertyValue("border-top-width"));return{contextStyle:PD.map(s=>[s,t.getPropertyValue(s)]),paddingSize:a,borderSize:o,boxSizing:n}}function yy(e,t=1,n){if(!Ma){Ma=document.createElement("textarea");let d=document.body;!Ud()&&e.parentNode&&(d=e.parentNode),d.appendChild(Ma)}const{paddingSize:a,borderSize:o,boxSizing:s,contextStyle:r}=MD(e);r.forEach(([d,f])=>Ma?.style.setProperty(d,f)),Object.entries(ID).forEach(([d,f])=>Ma?.style.setProperty(d,f,"important")),Ma.value=e.value||e.placeholder||"";let l=Ma.scrollHeight;const u={};s==="border-box"?l=l+o:s==="content-box"&&(l=l-a),Ma.value="";const c=Ma.scrollHeight-a;if(He(t)){let d=c*t;s==="border-box"&&(d=d+a+o),l=Math.max(d,l),u.minHeight=`${d}px`}if(He(n)){let d=c*n;s==="border-box"&&(d=d+a+o),l=Math.min(d,l)}return u.height=`${l}px`,Ma.parentNode?.removeChild(Ma),Ma=void 0,u}const _D=["id","name","minlength","maxlength","type","disabled","readonly","autocomplete","tabindex","aria-label","placeholder","form","autofocus","role","inputmode"],AD=["id","name","minlength","maxlength","tabindex","disabled","readonly","autocomplete","aria-label","placeholder","form","autofocus","rows","role"],wy="ElInput";var LD=se({name:wy,inheritAttrs:!1,__name:"input",props:gu,emits:RD,setup(e,{expose:t,emit:n}){const a=e,o=n,s=fs(),r=Wd(),l=hn(),u=w(()=>[a.type==="textarea"?m.b():h.b(),h.m(g.value),h.is("disabled",p.value),h.is("exceed",j.value),{[h.b("group")]:l.prepend||l.append,[h.m("prefix")]:l.prefix||a.prefixIcon,[h.m("suffix")]:l.suffix||a.suffixIcon||a.clearable||a.showPassword,[h.bm("suffix","password-clear")]:L.value&&D.value,[h.b("hidden")]:a.type==="hidden"},s.class]),c=w(()=>[h.e("wrapper"),h.is("focus",R.value)]),{form:d,formItem:f}=Dn(),{inputId:v}=Ia(a,{formItemContext:f}),g=Sn(),p=ln(),h=fe("input"),m=fe("textarea"),b=Xt(),k=Xt(),y=M(!1),S=M(!1),C=M(),E=Xt(a.inputStyle),$=w(()=>b.value||k.value),{wrapperRef:O,isFocused:R,handleFocus:N,handleBlur:A}=ms($,{disabled:p,afterBlur(){a.validateEvent&&f?.validate?.("blur").catch(Pe=>pt(Pe))}}),_=w(()=>d?.statusIcon??!1),V=w(()=>f?.validateState||""),z=w(()=>V.value&&nf[V.value]),U=w(()=>S.value?_3:o3),W=w(()=>[s.style]),P=w(()=>[a.inputStyle,E.value,{resize:a.resize}]),I=w(()=>gn(a.modelValue)?"":String(a.modelValue)),L=w(()=>a.clearable&&!p.value&&!a.readonly&&!!I.value&&(R.value||y.value)),D=w(()=>a.showPassword&&!p.value&&!!I.value),F=w(()=>a.showWordLimit&&!!a.maxlength&&(a.type==="text"||a.type==="textarea")&&!p.value&&!a.readonly&&!a.showPassword),q=w(()=>I.value.length),j=w(()=>!!F.value&&q.value>Number(a.maxlength)),X=w(()=>!!l.suffix||!!a.suffixIcon||L.value||a.showPassword||F.value||!!V.value&&_.value),Q=w(()=>!!Object.keys(a.modelModifiers).length),[he,ue]=h4(b);Zt(k,Pe=>{if(ae(),!F.value||a.resize!=="both"&&a.resize!=="horizontal")return;const{width:Ae}=Pe[0].contentRect;C.value={right:`calc(100% - ${Ae+22-10}px)`}});const ge=()=>{const{type:Pe,autosize:Ae}=a;if(!(!Mt||Pe!=="textarea"||!k.value))if(Ae){const je=nt(Ae)?Ae.minRows:void 0,Nt=nt(Ae)?Ae.maxRows:void 0,Ue=yy(k.value,je,Nt);E.value={overflowY:"hidden",...Ue},Ne(()=>{k.value.offsetHeight,E.value=Ue})}else E.value={minHeight:yy(k.value).minHeight}},ae=(Pe=>{let Ae=!1;return()=>{Ae||!a.autosize||k.value?.offsetParent!==null&&(setTimeout(Pe),Ae=!0)}})(ge),ne=()=>{const Pe=$.value,Ae=a.formatter?a.formatter(I.value):I.value;!Pe||Pe.value===Ae||a.type==="file"||(Pe.value=Ae)},K=Pe=>{const{trim:Ae,number:je}=a.modelModifiers;return Ae&&(Pe=Pe.trim()),je&&(Pe=`${by(Pe)}`),a.formatter&&a.parser&&(Pe=a.parser(Pe)),Pe},Z=async Pe=>{if(ce.value)return;const{lazy:Ae}=a.modelModifiers;let{value:je}=Pe.target;if(Ae){o(wn,je);return}if(je=K(je),String(je)===I.value){a.formatter&&ne();return}he(),o(tt,je),o(wn,je),await Ne(),(a.formatter&&a.parser||!Q.value)&&ne(),ue()},re=async Pe=>{let{value:Ae}=Pe.target;Ae=K(Ae),a.modelModifiers.lazy&&o(tt,Ae),o(bt,Ae,Pe),await Ne(),ne()},{isComposing:ce,handleCompositionStart:ve,handleCompositionUpdate:ke,handleCompositionEnd:Re}=pu({emit:o,afterComposition:Z}),Ie=()=>{S.value=!S.value},$e=()=>$.value?.focus(),pe=()=>$.value?.blur(),Ee=Pe=>{y.value=!1,o("mouseleave",Pe)},me=Pe=>{y.value=!0,o("mouseenter",Pe)},Me=Pe=>{o("keydown",Pe)},We=()=>{$.value?.select()},Xe=Pe=>{o(tt,""),o(bt,""),o("clear",Pe),o(wn,"")};return le(()=>a.modelValue,()=>{Ne(()=>ge()),a.validateEvent&&f?.validate?.("change").catch(Pe=>pt(Pe))}),le(I,Pe=>{if(!$.value)return;const{trim:Ae,number:je}=a.modelModifiers,Nt=$.value.value,Ue=(je||a.type==="number")&&!/^0\d/.test(Nt)?`${by(Nt)}`:Nt;Ue!==Pe&&(document.activeElement===$.value&&$.value.type!=="range"&&Ae&&Ue.trim()===Pe||ne())}),le(()=>a.type,async()=>{await Ne(),ne(),ge()}),ht(()=>{!a.formatter&&a.parser&&pt(wy,"If you set the parser, you also need to set the formatter."),ne(),Ne(ge)}),t({input:b,textarea:k,ref:$,textareaStyle:P,autosize:Vt(a,"autosize"),isComposing:ce,focus:$e,blur:pe,select:We,clear:Xe,resizeTextarea:ge}),(Pe,Ae)=>(x(),B("div",{class:T([u.value,{[i(h).bm("group","append")]:Pe.$slots.append,[i(h).bm("group","prepend")]:Pe.$slots.prepend}]),style:Ke(W.value),onMouseenter:me,onMouseleave:Ee},[te(" input "),e.type!=="textarea"?(x(),B(Fe,{key:0},[te(" prepend slot "),Pe.$slots.prepend?(x(),B("div",{key:0,class:T(i(h).be("group","prepend"))},[ee(Pe.$slots,"prepend")],2)):te("v-if",!0),H("div",{ref_key:"wrapperRef",ref:O,class:T(c.value)},[te(" prefix slot "),Pe.$slots.prefix||e.prefixIcon?(x(),B("span",{key:0,class:T(i(h).e("prefix"))},[H("span",{class:T(i(h).e("prefix-inner"))},[ee(Pe.$slots,"prefix"),e.prefixIcon?(x(),oe(i(De),{key:0,class:T(i(h).e("icon"))},{default:J(()=>[(x(),oe(it(e.prefixIcon)))]),_:1},8,["class"])):te("v-if",!0)],2)],2)):te("v-if",!0),H("input",dt({id:i(v),ref_key:"input",ref:b,class:i(h).e("inner")},i(r),{name:e.name,minlength:e.minlength,maxlength:e.maxlength,type:e.showPassword?S.value?"text":"password":e.type,disabled:i(p),readonly:e.readonly,autocomplete:e.autocomplete,tabindex:e.tabindex,"aria-label":e.ariaLabel,placeholder:e.placeholder,style:e.inputStyle,form:e.form,autofocus:e.autofocus,role:e.containerRole,inputmode:e.inputmode,onCompositionstart:Ae[0]||(Ae[0]=(...je)=>i(ve)&&i(ve)(...je)),onCompositionupdate:Ae[1]||(Ae[1]=(...je)=>i(ke)&&i(ke)(...je)),onCompositionend:Ae[2]||(Ae[2]=(...je)=>i(Re)&&i(Re)(...je)),onInput:Z,onChange:re,onKeydown:Me}),null,16,_D),te(" suffix slot "),X.value?(x(),B("span",{key:1,class:T(i(h).e("suffix"))},[H("span",{class:T(i(h).e("suffix-inner"))},[!L.value||!D.value||!F.value?(x(),B(Fe,{key:0},[ee(Pe.$slots,"suffix"),e.suffixIcon?(x(),oe(i(De),{key:0,class:T(i(h).e("icon"))},{default:J(()=>[(x(),oe(it(e.suffixIcon)))]),_:1},8,["class"])):te("v-if",!0)],64)):te("v-if",!0),L.value?(x(),oe(i(De),{key:1,class:T([i(h).e("icon"),i(h).e("clear")]),onMousedown:Ge(i(Dt),["prevent"]),onClick:Xe},{default:J(()=>[(x(),oe(it(e.clearIcon)))]),_:1},8,["class","onMousedown"])):te("v-if",!0),D.value?(x(),oe(i(De),{key:2,class:T([i(h).e("icon"),i(h).e("password")]),onClick:Ie,onMousedown:Ge(i(Dt),["prevent"]),onMouseup:Ge(i(Dt),["prevent"])},{default:J(()=>[(x(),oe(it(U.value)))]),_:1},8,["class","onMousedown","onMouseup"])):te("v-if",!0),F.value?(x(),B("span",{key:3,class:T([i(h).e("count"),i(h).is("outside",e.wordLimitPosition==="outside")])},[H("span",{class:T(i(h).e("count-inner"))},Se(q.value)+" / "+Se(e.maxlength),3)],2)):te("v-if",!0),V.value&&z.value&&_.value?(x(),oe(i(De),{key:4,class:T([i(h).e("icon"),i(h).e("validateIcon"),i(h).is("loading",V.value==="validating")])},{default:J(()=>[(x(),oe(it(z.value)))]),_:1},8,["class"])):te("v-if",!0)],2)],2)):te("v-if",!0)],2),te(" append slot "),Pe.$slots.append?(x(),B("div",{key:1,class:T(i(h).be("group","append"))},[ee(Pe.$slots,"append")],2)):te("v-if",!0)],64)):(x(),B(Fe,{key:1},[te(" textarea "),H("textarea",dt({id:i(v),ref_key:"textarea",ref:k,class:[i(m).e("inner"),i(h).is("focus",i(R)),i(m).is("clearable",e.clearable)]},i(r),{name:e.name,minlength:e.minlength,maxlength:e.maxlength,tabindex:e.tabindex,disabled:i(p),readonly:e.readonly,autocomplete:e.autocomplete,style:P.value,"aria-label":e.ariaLabel,placeholder:e.placeholder,form:e.form,autofocus:e.autofocus,rows:e.rows,role:e.containerRole,onCompositionstart:Ae[3]||(Ae[3]=(...je)=>i(ve)&&i(ve)(...je)),onCompositionupdate:Ae[4]||(Ae[4]=(...je)=>i(ke)&&i(ke)(...je)),onCompositionend:Ae[5]||(Ae[5]=(...je)=>i(Re)&&i(Re)(...je)),onInput:Z,onFocus:Ae[6]||(Ae[6]=(...je)=>i(N)&&i(N)(...je)),onBlur:Ae[7]||(Ae[7]=(...je)=>i(A)&&i(A)(...je)),onChange:re,onKeydown:Me}),null,16,AD),L.value?(x(),oe(i(De),{key:0,class:T([i(m).e("icon"),i(m).e("clear")]),onMousedown:Ge(i(Dt),["prevent"]),onClick:Xe},{default:J(()=>[(x(),oe(it(e.clearIcon)))]),_:1},8,["class","onMousedown"])):te("v-if",!0),F.value?(x(),B("span",{key:1,style:Ke(C.value),class:T([i(h).e("count"),i(h).is("outside",e.wordLimitPosition==="outside")])},Se(q.value)+" / "+Se(e.maxlength),7)):te("v-if",!0)],64))],38))}}),DD=LD;const ea=st(DD),BD=Ce({...gu,valueKey:{type:String,default:"value"},modelValue:{type:[String,Number],default:""},debounce:{type:Number,default:300},placement:{type:G(String),values:["top","top-start","top-end","bottom","bottom-start","bottom-end"],default:"bottom-start"},fetchSuggestions:{type:G([Function,Array]),default:Dt},popperClass:zt.popperClass,popperStyle:zt.popperStyle,triggerOnFocus:{type:Boolean,default:!0},selectWhenUnmatched:Boolean,hideLoading:Boolean,teleported:zt.teleported,appendTo:zt.appendTo,highlightFirstItem:Boolean,fitInputWidth:Boolean,loopNavigation:{type:Boolean,default:!0}}),FD={[tt]:e=>Le(e)||He(e),[wn]:e=>Le(e)||He(e),[bt]:e=>Le(e)||He(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,select:e=>nt(e)},VD=Ce({distance:{type:Number,default:0},height:{type:[String,Number],default:""},maxHeight:{type:[String,Number],default:""},native:Boolean,wrapStyle:{type:G([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,...aa(["ariaLabel","ariaOrientation"])}),ZC={"end-reached":e=>["left","right","top","bottom"].includes(e),scroll:({scrollTop:e,scrollLeft:t})=>[e,t].every(He)},Vr=4,QC={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"}},zD=({move:e,size:t,bar:n})=>({[n.size]:t,transform:`translate${n.axis}(${e}%)`}),HD=Ce({vertical:Boolean,size:String,move:Number,ratio:{type:Number,required:!0},always:Boolean}),om=Symbol("scrollbarContextKey"),KD=Ce({always:{type:Boolean,default:!0},minSize:{type:Number,required:!0}}),WD="Thumb";var jD=se({__name:"thumb",props:HD,setup(e){const t=e,n=_e(om),a=fe("scrollbar");n||en(WD,"can not inject scrollbar context");const o=M(),s=M(),r=M({}),l=M(!1);let u=!1,c=!1,d=0,f=0,v=Mt?document.onselectstart:null;const g=w(()=>QC[t.vertical?"vertical":"horizontal"]),p=w(()=>zD({size:t.size,move:t.move,bar:g.value})),h=w(()=>o.value[g.value.offset]**2/n.wrapElement[g.value.scrollSize]/t.ratio/s.value[g.value.offset]),m=O=>{if(O.stopPropagation(),O.ctrlKey||[1,2].includes(O.button))return;window.getSelection()?.removeAllRanges(),k(O);const R=O.currentTarget;R&&(r.value[g.value.axis]=R[g.value.offset]-(O[g.value.client]-R.getBoundingClientRect()[g.value.direction]))},b=O=>{if(!s.value||!o.value||!n.wrapElement)return;const R=(Math.abs(O.target.getBoundingClientRect()[g.value.direction]-O[g.value.client])-s.value[g.value.offset]/2)*100*h.value/o.value[g.value.offset];n.wrapElement[g.value.scroll]=R*n.wrapElement[g.value.scrollSize]/100},k=O=>{O.stopImmediatePropagation(),u=!0,d=n.wrapElement.scrollHeight,f=n.wrapElement.scrollWidth,document.addEventListener("mousemove",y),document.addEventListener("mouseup",S),v=document.onselectstart,document.onselectstart=()=>!1},y=O=>{if(!o.value||!s.value||u===!1)return;const R=r.value[g.value.axis];if(!R)return;const N=((o.value.getBoundingClientRect()[g.value.direction]-O[g.value.client])*-1-(s.value[g.value.offset]-R))*100*h.value/o.value[g.value.offset];g.value.scroll==="scrollLeft"?n.wrapElement[g.value.scroll]=N*f/100:n.wrapElement[g.value.scroll]=N*d/100},S=()=>{u=!1,r.value[g.value.axis]=0,document.removeEventListener("mousemove",y),document.removeEventListener("mouseup",S),$(),c&&(l.value=!1)},C=()=>{c=!1,l.value=!!t.size},E=()=>{c=!0,l.value=u};Bt(()=>{$(),document.removeEventListener("mouseup",S)});const $=()=>{document.onselectstart!==v&&(document.onselectstart=v)};return Ft(Vt(n,"scrollbarElement"),"mousemove",C),Ft(Vt(n,"scrollbarElement"),"mouseleave",E),(O,R)=>(x(),oe(Vn,{name:i(a).b("fade"),persisted:""},{default:J(()=>[ct(H("div",{ref_key:"instance",ref:o,class:T([i(a).e("bar"),i(a).is(g.value.key)]),onMousedown:b,onClick:R[0]||(R[0]=Ge(()=>{},["stop"]))},[H("div",{ref_key:"thumb",ref:s,class:T(i(a).e("thumb")),style:Ke(p.value),onMousedown:m},null,38)],34),[[Pt,e.always||l.value]])]),_:1},8,["name"]))}}),Sy=jD,UD=se({__name:"bar",props:KD,setup(e,{expose:t}){const n=e,a=_e(om),o=M(0),s=M(0),r=M(""),l=M(""),u=M(1),c=M(1);return t({handleScroll:v=>{if(v){const g=v.offsetHeight-Vr,p=v.offsetWidth-Vr;s.value=v.scrollTop*100/g*u.value,o.value=v.scrollLeft*100/p*c.value}},update:()=>{const v=a?.wrapElement;if(!v)return;const g=v.offsetHeight-Vr,p=v.offsetWidth-Vr,h=g**2/v.scrollHeight,m=p**2/v.scrollWidth,b=Math.max(h,n.minSize),k=Math.max(m,n.minSize);u.value=h/(g-h)/(b/(g-b)),c.value=m/(p-m)/(k/(p-k)),l.value=b+Vr(x(),B(Fe,null,[Y(Sy,{move:o.value,ratio:c.value,size:r.value,always:e.always},null,8,["move","ratio","size","always"]),Y(Sy,{move:s.value,ratio:u.value,size:l.value,vertical:"",always:e.always},null,8,["move","ratio","size","always"])],64))}}),qD=UD;const YD=["tabindex"],qf="ElScrollbar";var GD=se({name:qf,__name:"scrollbar",props:VD,emits:ZC,setup(e,{expose:t,emit:n}){const a=e,o=n,s=fe("scrollbar");let r,l,u,c=0,d=0,f="";const v={bottom:!1,top:!1,right:!1,left:!1},g=M(),p=M(),h=M(),m=M(),b=w(()=>{const _={},V=rn(a.height),z=rn(a.maxHeight);return V&&(_.height=V),z&&(_.maxHeight=z),[a.wrapStyle,_]}),k=w(()=>[a.wrapClass,s.e("wrap"),{[s.em("wrap","hidden-default")]:!a.native}]),y=w(()=>[s.e("view"),a.viewClass]),S=_=>v[_]??!1,C={top:"bottom",bottom:"top",left:"right",right:"left"},E=_=>{const V=C[f];if(!V)return;const z=_[f],U=_[V];z&&!v[f]&&(v[f]=!0),!U&&v[V]&&(v[V]=!1)},$=()=>{if(p.value){m.value?.handleScroll(p.value);const _=c,V=d;c=p.value.scrollTop,d=p.value.scrollLeft;const z={bottom:c+p.value.clientHeight>=p.value.scrollHeight-a.distance,top:c<=a.distance&&_!==0,right:d+p.value.clientWidth>=p.value.scrollWidth-a.distance&&V!==d,left:d<=a.distance&&V!==0};if(o("scroll",{scrollTop:c,scrollLeft:d}),_!==c&&(f=c>_?"bottom":"top"),V!==d&&(f=d>V?"right":"left"),a.distance>0){if(S(f))return;E(z)}z[f]&&o("end-reached",f)}};function O(_,V){nt(_)?p.value.scrollTo(_):He(_)&&He(V)&&p.value.scrollTo(_,V)}const R=_=>{if(!He(_)){pt(qf,"value must be a number");return}p.value.scrollTop=_},N=_=>{if(!He(_)){pt(qf,"value must be a number");return}p.value.scrollLeft=_},A=()=>{m.value?.update(),v[f]=!1};return le(()=>a.noresize,_=>{_?(r?.(),l?.(),u?.()):({stop:r}=Zt(h,A),{stop:l}=Zt(p,A),u=Ft("resize",A))},{immediate:!0}),le(()=>[a.maxHeight,a.height],()=>{a.native||Ne(()=>{A(),p.value&&m.value?.handleScroll(p.value)})}),St(om,At({scrollbarElement:g,wrapElement:p})),Gi(()=>{p.value&&(p.value.scrollTop=c,p.value.scrollLeft=d)}),ht(()=>{a.native||Ne(()=>{A()})}),so(()=>A()),t({wrapRef:p,update:A,scrollTo:O,setScrollTop:R,setScrollLeft:N,handleScroll:$}),(_,V)=>(x(),B("div",{ref_key:"scrollbarRef",ref:g,class:T(i(s).b())},[H("div",{ref_key:"wrapRef",ref:p,class:T(k.value),style:Ke(b.value),tabindex:e.tabindex,onScroll:$},[(x(),oe(it(e.tag),{id:e.id,ref_key:"resizeRef",ref:h,class:T(y.value),style:Ke(e.viewStyle),role:e.role,"aria-label":e.ariaLabel,"aria-orientation":e.ariaOrientation},{default:J(()=>[ee(_.$slots,"default")]),_:3},8,["id","class","style","role","aria-label","aria-orientation"]))],46,YD),e.native?te("v-if",!0):(x(),oe(qD,{key:0,ref_key:"barRef",ref:m,always:e.always,"min-size":e.minSize},null,8,["always","min-size"]))],2))}}),XD=GD;const no=st(XD),JD=["aria-expanded","aria-owns"],ZD={key:0},QD=["id","aria-selected","onClick"],Cy="ElAutocomplete";var eB=se({name:Cy,inheritAttrs:!1,__name:"autocomplete",props:BD,emits:FD,setup(e,{expose:t,emit:n}){const a=e,o=n,s=w(()=>ss(a,Object.keys(gu))),r=fs(),l=ln(),u=fe("autocomplete"),c=M(),d=M(),f=M(),v=M();let g=!1,p=!1;const h=M([]),m=M(-1),b=M(""),k=M(!1),y=M(!1),S=M(!1),C=zn(),E=w(()=>r.style),$=w(()=>(h.value.length>0||S.value)&&k.value),O=w(()=>!a.hideLoading&&S.value),R=w(()=>c.value?Array.from(c.value.$el.querySelectorAll("input")):[]),N=()=>{$.value&&(b.value=`${c.value.$el.offsetWidth}px`)},A=()=>{m.value=-1},_=async ae=>{if(y.value)return;const ne=K=>{S.value=!1,!y.value&&(ye(K)?(h.value=K,m.value=a.highlightFirstItem?0:-1):en(Cy,"autocomplete suggestions must be an array"))};if(S.value=!0,ye(a.fetchSuggestions))ne(a.fetchSuggestions);else{const K=await a.fetchSuggestions(ae,ne);ye(K)&&ne(K)}},V=ou(_,w(()=>a.debounce)),z=ae=>{const ne=!!ae;if(o(wn,ae),o(tt,ae),y.value=!1,k.value||=ne,!a.triggerOnFocus&&!ae){y.value=!0,h.value=[];return}V(ae)},U=ae=>{l.value||(ae.target?.tagName!=="INPUT"||R.value.includes(document.activeElement))&&(k.value=!0)},W=ae=>{o(bt,ae)},P=ae=>{if(p)p=!1;else{k.value=!0,o("focus",ae);const ne=a.modelValue??"";a.triggerOnFocus&&!g&&V(String(ne))}},I=ae=>{setTimeout(()=>{if(f.value?.isFocusInsideContent()){p=!0;return}k.value&&q(),o("blur",ae)})},L=()=>{k.value=!1,o(tt,""),o("clear")},D=async()=>{c.value?.isComposing||($.value&&m.value>=0&&m.value{$.value&&(ae.preventDefault(),ae.stopPropagation(),q())},q=()=>{k.value=!1},j=()=>{c.value?.focus()},X=()=>{c.value?.blur()},Q=async ae=>{o(wn,ae[a.valueKey]),o(tt,ae[a.valueKey]),o("select",ae),h.value=[],m.value=-1},he=ae=>{if(!$.value||S.value)return;if(ae<0){if(!a.loopNavigation){m.value=-1;return}ae=h.value.length-1}ae>=h.value.length&&(ae=a.loopNavigation?0:h.value.length-1);const[ne,K]=ue(),Z=K[ae],re=ne.scrollTop,{offsetTop:ce,scrollHeight:ve}=Z;ce+ve>re+ne.clientHeight&&(ne.scrollTop=ce+ve-ne.clientHeight),ce{const ae=d.value.querySelector(`.${u.be("suggestion","wrap")}`);return[ae,ae.querySelectorAll(`.${u.be("suggestion","list")} li`)]},ge=Nv(v,ae=>{if(f.value?.isFocusInsideContent())return;const ne=p;p=!1,$.value&&(ne?I(new FocusEvent("blur",ae)):q())}),ie=ae=>{switch(jt(ae)){case we.up:ae.preventDefault(),he(m.value-1);break;case we.down:ae.preventDefault(),he(m.value+1);break;case we.enter:case we.numpadEnter:ae.preventDefault(),D();break;case we.tab:q();break;case we.esc:F(ae);break;case we.home:ae.preventDefault(),he(0);break;case we.end:ae.preventDefault(),he(h.value.length-1);break;case we.pageUp:ae.preventDefault(),he(Math.max(0,m.value-10));break;case we.pageDown:ae.preventDefault(),he(Math.min(h.value.length-1,m.value+10));break}};return Bt(()=>{ge?.()}),ht(()=>{const ae=c.value?.ref;ae&&([{key:"role",value:"textbox"},{key:"aria-autocomplete",value:"list"},{key:"aria-controls",value:C.value},{key:"aria-activedescendant",value:`${C.value}-item-${m.value}`}].forEach(({key:ne,value:K})=>ae.setAttribute(ne,K)),g=ae.hasAttribute("readonly"))}),t({highlightedIndex:m,activated:k,loading:S,inputRef:c,popperRef:f,suggestions:h,handleSelect:Q,handleKeyEnter:D,focus:j,blur:X,close:q,highlight:he,getData:_}),(ae,ne)=>(x(),oe(i(Ln),{ref_key:"popperRef",ref:f,visible:$.value,placement:e.placement,"fallback-placements":["bottom-start","top-start"],"popper-class":[i(u).e("popper"),e.popperClass],"popper-style":e.popperStyle,teleported:e.teleported,"append-to":e.appendTo,"gpu-acceleration":!1,pure:"","manual-mode":"",effect:"light",trigger:"click",transition:`${i(u).namespace.value}-zoom-in-top`,persistent:"",role:"listbox",onBeforeShow:N,onHide:A},{content:J(()=>[H("div",{ref_key:"regionRef",ref:d,class:T([i(u).b("suggestion"),i(u).is("loading",O.value)]),style:Ke({[e.fitInputWidth?"width":"minWidth"]:b.value,outline:"none"}),role:"region"},[ae.$slots.header?(x(),B("div",{key:0,class:T(i(u).be("suggestion","header")),onClick:ne[0]||(ne[0]=Ge(()=>{},["stop"]))},[ee(ae.$slots,"header")],2)):te("v-if",!0),Y(i(no),{id:i(C),tag:"ul","wrap-class":i(u).be("suggestion","wrap"),"view-class":i(u).be("suggestion","list"),role:"listbox"},{default:J(()=>[O.value?(x(),B("li",ZD,[ee(ae.$slots,"loading",{},()=>[Y(i(De),{class:T(i(u).is("loading"))},{default:J(()=>[Y(i(_o))]),_:1},8,["class"])])])):(x(!0),B(Fe,{key:1},yt(h.value,(K,Z)=>(x(),B("li",{id:`${i(C)}-item-${Z}`,key:Z,class:T({highlighted:m.value===Z}),role:"option","aria-selected":m.value===Z,onClick:re=>Q(K)},[ee(ae.$slots,"default",{item:K},()=>[wt(Se(K[e.valueKey]),1)])],10,QD))),128))]),_:3},8,["id","wrap-class","view-class"]),ae.$slots.footer?(x(),B("div",{key:1,class:T(i(u).be("suggestion","footer")),onClick:ne[1]||(ne[1]=Ge(()=>{},["stop"]))},[ee(ae.$slots,"footer")],2)):te("v-if",!0)],6)]),default:J(()=>[H("div",{ref_key:"listboxRef",ref:v,class:T([i(u).b(),ae.$attrs.class]),style:Ke(E.value),role:"combobox","aria-haspopup":"listbox","aria-expanded":$.value,"aria-owns":i(C)},[Y(i(ea),dt({ref_key:"inputRef",ref:c},dt(s.value,ae.$attrs),{"model-value":e.modelValue,disabled:i(l),onInput:z,onChange:W,onFocus:P,onBlur:I,onClear:L,onKeydown:ie,onMousedown:U}),ua({_:2},[ae.$slots.prepend?{name:"prepend",fn:J(()=>[ee(ae.$slots,"prepend")]),key:"0"}:void 0,ae.$slots.append?{name:"append",fn:J(()=>[ee(ae.$slots,"append")]),key:"1"}:void 0,ae.$slots.prefix?{name:"prefix",fn:J(()=>[ee(ae.$slots,"prefix")]),key:"2"}:void 0,ae.$slots.suffix?{name:"suffix",fn:J(()=>[ee(ae.$slots,"suffix")]),key:"3"}:void 0]),1040,["model-value","disabled"])],14,JD)]),_:3},8,["visible","placement","popper-class","popper-style","teleported","append-to","transition"]))}}),tB=eB;const nB=st(tB),aB=Ce({size:{type:[Number,String],values:ro,validator:e=>He(e)},shape:{type:String,values:["circle","square"]},icon:{type:Kt},src:{type:String,default:""},alt:String,srcSet:String,fit:{type:G(String),default:"cover"}}),oB={error:e=>e instanceof Event},ek=Symbol("avatarGroupContextKey"),sB={size:{type:G([Number,String]),values:ro,validator:e=>He(e)},shape:{type:G(String),values:["circle","square"]},collapseAvatars:Boolean,collapseAvatarsTooltip:Boolean,maxCollapseAvatars:{type:Number,default:1},effect:{type:G(String),default:"light"},placement:{type:G(String),values:Lo,default:"top"},popperClass:zt.popperClass,popperStyle:zt.popperStyle,collapseClass:String,collapseStyle:{type:G([String,Array,Object])}},rB=["src","alt","srcset"];var lB=se({name:"ElAvatar",__name:"avatar",props:aB,emits:oB,setup(e,{emit:t}){const n=e,a=t,o=_e(ek,void 0),s=fe("avatar"),r=M(!1),l=w(()=>n.size??o?.size),u=w(()=>n.shape??o?.shape??"circle"),c=w(()=>{const{icon:g}=n,p=[s.b()];return Le(l.value)&&p.push(s.m(l.value)),g&&p.push(s.m("icon")),u.value&&p.push(s.m(u.value)),p}),d=w(()=>He(l.value)?s.cssVarBlock({size:rn(l.value)}):void 0),f=w(()=>({objectFit:n.fit}));le(()=>[n.src,n.srcSet],()=>r.value=!1);function v(g){r.value=!0,a("error",g)}return(g,p)=>(x(),B("span",{class:T(c.value),style:Ke(d.value)},[(e.src||e.srcSet)&&!r.value?(x(),B("img",{key:0,src:e.src,alt:e.alt,srcset:e.srcSet,style:Ke(f.value),onError:v},null,44,rB)):e.icon?(x(),oe(i(De),{key:1},{default:J(()=>[(x(),oe(it(e.icon)))]),_:1})):ee(g.$slots,"default",{key:2})],6))}}),tk=lB,nk=se({name:"ElAvatarGroup",props:sB,setup(e,{slots:t}){const n=fe("avatar-group");return St(ek,At({size:Vt(e,"size"),shape:Vt(e,"shape")})),()=>{const a=Ta(t.default?.()??[]);let o=a;if(e.collapseAvatars&&a.length>e.maxCollapseAvatars){o=a.slice(0,e.maxCollapseAvatars);const s=a.slice(e.maxCollapseAvatars);o.push(Y(Ln,{popperClass:e.popperClass,popperStyle:e.popperStyle,placement:e.placement,effect:e.effect,disabled:!e.collapseAvatarsTooltip},{default:()=>Y(tk,{size:e.size,shape:e.shape,class:e.collapseClass,style:e.collapseStyle},{default:()=>[wt("+ "),s.length]}),content:()=>Y("div",{class:n.e("collapse-avatars")},[s.map((r,l)=>Ut(r)?Ro(r,{key:r.key??l}):r)])}))}return Y("div",{class:n.b()},[o])}}});const iB=st(tk,{AvatarGroup:nk}),uB=tn(nk),cB={visibilityHeight:{type:Number,default:200},target:{type:String,default:""},right:{type:Number,default:40},bottom:{type:Number,default:40}},dB={click:e=>e instanceof MouseEvent},fB=(e,t,n)=>{const a=Xt(),o=Xt(),s=M(!1),r=()=>{a.value&&(s.value=a.value.scrollTop>=e.visibilityHeight)},l=u=>{a.value?.scrollTo({top:0,behavior:"smooth"}),t("click",u)};return Ft(o,"scroll",VS(r,300,!0)),ht(()=>{o.value=document,a.value=document.documentElement,e.target&&(a.value=document.querySelector(e.target)??void 0,a.value||en(n,`target does not exist: ${e.target}`),o.value=a.value),r()}),{visible:s,handleClick:l}},ky="ElBacktop";var pB=se({name:ky,__name:"backtop",props:cB,emits:dB,setup(e,{emit:t}){const n=e,a=t,o=fe("backtop"),{handleClick:s,visible:r}=fB(n,a,ky),l=w(()=>({right:`${n.right}px`,bottom:`${n.bottom}px`}));return(u,c)=>(x(),oe(Vn,{name:`${i(o).namespace.value}-fade-in`},{default:J(()=>[i(r)?(x(),B("div",{key:0,style:Ke(l.value),class:T(i(o).b()),onClick:c[0]||(c[0]=Ge((...d)=>i(s)&&i(s)(...d),["stop"]))},[ee(u.$slots,"default",{},()=>[Y(i(De),{class:T(i(o).e("icon"))},{default:J(()=>[Y(i(V4))]),_:1},8,["class"])])],6)):te("v-if",!0)]),_:3},8,["name"]))}}),hB=pB;const vB=st(hB),mB=Ce({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:!0},color:String,badgeStyle:{type:G([String,Object,Array])},offset:{type:G(Array),default:()=>[0,0]},badgeClass:{type:String}});var gB=se({name:"ElBadge",__name:"badge",props:mB,setup(e,{expose:t}){const n=e,a=fe("badge"),o=w(()=>n.isDot?"":He(n.value)&&He(n.max)?n.max[{backgroundColor:n.color,marginRight:rn(-n.offset[0]),marginTop:rn(n.offset[1])},n.badgeStyle??{}]);return t({content:o}),(r,l)=>(x(),B("div",{class:T(i(a).b())},[ee(r.$slots,"default"),Y(Vn,{name:`${i(a).namespace.value}-zoom-in-center`},{default:J(()=>[!e.hidden&&(o.value||e.isDot||r.$slots.content)?(x(),B("sup",{key:0,class:T([i(a).e("content"),i(a).em("content",e.type),i(a).is("fixed",!!r.$slots.default),i(a).is("dot",e.isDot),i(a).is("hide-zero",!e.showZero&&e.value===0),e.badgeClass]),style:Ke(s.value)},[ee(r.$slots,"content",{value:o.value},()=>[wt(Se(o.value),1)])],6)):te("v-if",!0)]),_:3},8,["name"])],2))}}),bB=gB;const ak=st(bB),yB=Ce({separator:{type:String,default:"/"},separatorIcon:{type:Kt}}),ok=Symbol("breadcrumbKey"),wB=Ce({to:{type:G([String,Object]),default:""},replace:Boolean}),SB=["aria-label"];var CB=se({name:"ElBreadcrumb",__name:"breadcrumb",props:yB,setup(e){const{t}=Ct(),n=e,a=fe("breadcrumb"),o=M();return St(ok,n),ht(()=>{const s=o.value.querySelectorAll(`.${a.e("item")}`);s.length&&s[s.length-1].setAttribute("aria-current","page")}),(s,r)=>(x(),B("div",{ref_key:"breadcrumb",ref:o,class:T(i(a).b()),"aria-label":i(t)("el.breadcrumb.label"),role:"navigation"},[ee(s.$slots,"default")],10,SB))}}),kB=CB,EB=se({name:"ElBreadcrumbItem",__name:"breadcrumb-item",props:wB,setup(e){const t=e,n=ft(),a=_e(ok,void 0),o=fe("breadcrumb"),s=n.appContext.config.globalProperties.$router,r=()=>{!t.to||!s||(t.replace?s.replace(t.to):s.push(t.to))};return(l,u)=>(x(),B("span",{class:T(i(o).e("item"))},[H("span",{class:T([i(o).e("inner"),i(o).is("link",!!e.to)]),role:"link",onClick:r},[ee(l.$slots,"default")],2),i(a)?.separatorIcon?(x(),oe(i(De),{key:0,class:T(i(o).e("separator"))},{default:J(()=>[(x(),oe(it(i(a).separatorIcon)))]),_:1},8,["class"])):(x(),B("span",{key:1,class:T(i(o).e("separator")),role:"presentation"},Se(i(a)?.separator),3))],2))}}),sk=EB;const xB=st(kB,{BreadcrumbItem:sk}),TB=tn(sk),Jp=["default","primary","success","warning","info","danger","text",""],$B=["button","submit","reset"],Zp=Ce({size:Tn,disabled:{type:Boolean,default:void 0},type:{type:String,values:Jp,default:""},icon:{type:Kt},nativeType:{type:String,values:$B,default:"button"},loading:Boolean,loadingIcon:{type:Kt,default:()=>_o},plain:{type:Boolean,default:void 0},text:{type:Boolean,default:void 0},link:Boolean,bg:Boolean,autofocus:Boolean,round:{type:Boolean,default:void 0},circle:Boolean,dashed:{type:Boolean,default:void 0},color:String,dark:Boolean,autoInsertSpace:{type:Boolean,default:void 0},tag:{type:G([String,Object]),default:"button"}}),OB={click:e=>e instanceof MouseEvent},rk=Symbol(),td=M();function gs(e,t=void 0){const n=ft()?_e(rk,td):td;return e?w(()=>n.value?.[e]??t):n}function of(e,t){const n=gs(),a=fe(e,w(()=>n.value?.namespace||di)),o=Ct(w(()=>n.value?.locale)),s=uu(w(()=>n.value?.zIndex||hC)),r=w(()=>i(t)||n.value?.size||"");return sm(w(()=>i(n)||{})),{ns:a,locale:o,zIndex:s,size:r}}const sm=(e,t,n=!1)=>{const a=!!ft(),o=a?gs():void 0,s=t?.provide??(a?St:void 0);if(!s){pt("provideGlobalConfig","provideGlobalConfig() can only be used inside setup().");return}const r=w(()=>{const l=i(e);return o?.value?NB(o.value,l):l});return s(rk,r),s(GS,w(()=>r.value.locale)),s(XS,w(()=>r.value.namespace)),s(vC,w(()=>r.value.zIndex)),s(OC,{size:w(()=>r.value.size||"")}),s(RC,w(()=>({emptyValues:r.value.emptyValues,valueOnClear:r.value.valueOnClear}))),(n||!td.value)&&(td.value=r.value),r},NB=(e,t)=>{const n=[...new Set([...Oi(e),...Oi(t)])],a={};for(const o of n)a[o]=t[o]!==void 0?t[o]:e[o];return a},RB=Ce({a11y:{type:Boolean,default:!0},locale:{type:G(Object)},size:Tn,button:{type:G(Object)},card:{type:G(Object)},dialog:{type:G(Object)},link:{type:G(Object)},experimentalFeatures:{type:G(Object)},keyboardNavigation:{type:Boolean,default:!0},message:{type:G(Object)},zIndex:Number,namespace:{type:String,default:"el"},table:{type:G(Object)},...Ir}),Gn={placement:"top"},IB=se({name:"ElConfigProvider",props:RB,setup(e,{slots:t}){const n=sm(e);return le(()=>e.message,a=>{Object.assign(Gn,n?.value?.message??{},a??{})},{immediate:!0,deep:!0}),()=>ee(t,"default",{config:n?.value})}}),PB=st(IB),lk=Symbol("buttonGroupContextKey"),MB=(e,t)=>{xo({from:"type.text",replacement:"link",version:"3.0.0",scope:"props",ref:"https://element-plus.org/en-US/component/button.html#button-attributes"},w(()=>e.type==="text"));const n=_e(lk,void 0),a=gs("button"),{form:o}=Dn(),s=Sn(w(()=>n?.size)),r=ln(),l=M(),u=hn(),c=w(()=>e.type||n?.type||a.value?.type||""),d=w(()=>e.autoInsertSpace??a.value?.autoInsertSpace??!1),f=w(()=>e.plain??a.value?.plain??!1),v=w(()=>e.round??a.value?.round??!1),g=w(()=>e.text??a.value?.text??!1),p=w(()=>e.dashed??a.value?.dashed??!1),h=w(()=>e.tag==="button"?{ariaDisabled:r.value||e.loading,disabled:r.value||e.loading,autofocus:e.autofocus,type:e.nativeType}:{}),m=w(()=>{const k=u.default?.();if(d.value&&k?.length===1){const y=k[0];if(y?.type===Ol){const S=y.children;return new RegExp("^\\p{Unified_Ideograph}{2}$","u").test(S.trim())}}return!1});return{_disabled:r,_size:s,_type:c,_ref:l,_props:h,_plain:f,_round:v,_text:g,_dashed:p,shouldAddSpace:m,handleClick:k=>{if(r.value||e.loading){k.stopPropagation();return}e.nativeType==="reset"&&o?.resetFields(),t("click",k)}}};function jn(e,t){_B(e)&&(e="100%");const n=AB(e);return e=t===360?e:Math.min(t,Math.max(0,parseFloat(e))),n&&(e=parseInt(String(e*t),10)/100),Math.abs(e-t)<1e-6?1:(t===360?e=(e<0?e%t+t:e%t)/parseFloat(String(t)):e=e%t/parseFloat(String(t)),e)}function Uu(e){return Math.min(1,Math.max(0,e))}function _B(e){return typeof e=="string"&&e.indexOf(".")!==-1&&parseFloat(e)===1}function AB(e){return typeof e=="string"&&e.indexOf("%")!==-1}function ik(e){return e=parseFloat(e),(isNaN(e)||e<0||e>1)&&(e=1),e}function qu(e){return Number(e)<=1?`${Number(e)*100}%`:e}function or(e){return e.length===1?"0"+e:String(e)}function LB(e,t,n){return{r:jn(e,255)*255,g:jn(t,255)*255,b:jn(n,255)*255}}function Ey(e,t,n){e=jn(e,255),t=jn(t,255),n=jn(n,255);const a=Math.max(e,t,n),o=Math.min(e,t,n);let s=0,r=0;const l=(a+o)/2;if(a===o)r=0,s=0;else{const u=a-o;switch(r=l>.5?u/(2-a-o):u/(a+o),a){case e:s=(t-n)/u+(t1&&(n-=1),n<1/6?e+(t-e)*(6*n):n<1/2?t:n<2/3?e+(t-e)*(2/3-n)*6:e}function DB(e,t,n){let a,o,s;if(e=jn(e,360),t=jn(t,100),n=jn(n,100),t===0)o=n,s=n,a=n;else{const r=n<.5?n*(1+t):n+t-n*t,l=2*n-r;a=Yf(l,r,e+1/3),o=Yf(l,r,e),s=Yf(l,r,e-1/3)}return{r:a*255,g:o*255,b:s*255}}function xy(e,t,n){e=jn(e,255),t=jn(t,255),n=jn(n,255);const a=Math.max(e,t,n),o=Math.min(e,t,n);let s=0;const r=a,l=a-o,u=a===0?0:l/a;if(a===o)s=0;else{switch(a){case e:s=(t-n)/l+(t>16,g:(e&65280)>>8,b:e&255}}const Qp={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 KB(e){let t={r:0,g:0,b:0},n=1,a=null,o=null,s=null,r=!1,l=!1;return typeof e=="string"&&(e=UB(e)),typeof e=="object"&&(Ca(e.r)&&Ca(e.g)&&Ca(e.b)?(t=LB(e.r,e.g,e.b),r=!0,l=String(e.r).substr(-1)==="%"?"prgb":"rgb"):Ca(e.h)&&Ca(e.s)&&Ca(e.v)?(a=qu(e.s),o=qu(e.v),t=BB(e.h,a,o),r=!0,l="hsv"):Ca(e.h)&&Ca(e.s)&&Ca(e.l)?(a=qu(e.s),s=qu(e.l),t=DB(e.h,a,s),r=!0,l="hsl"):Ca(e.c)&&Ca(e.m)&&Ca(e.y)&&Ca(e.k)&&(t=VB(e.c,e.m,e.y,e.k),r=!0,l="cmyk"),Object.prototype.hasOwnProperty.call(e,"a")&&(n=e.a)),n=ik(n),{ok:r,format:e.format||l,r:Math.min(255,Math.max(t.r,0)),g:Math.min(255,Math.max(t.g,0)),b:Math.min(255,Math.max(t.b,0)),a:n}}const WB="[-\\+]?\\d+%?",jB="[-\\+]?\\d*\\.\\d+%?",Is="(?:"+jB+")|(?:"+WB+")",Gf="[\\s|\\(]+("+Is+")[,|\\s]+("+Is+")[,|\\s]+("+Is+")\\s*\\)?",Yu="[\\s|\\(]+("+Is+")[,|\\s]+("+Is+")[,|\\s]+("+Is+")[,|\\s]+("+Is+")\\s*\\)?",Aa={CSS_UNIT:new RegExp(Is),rgb:new RegExp("rgb"+Gf),rgba:new RegExp("rgba"+Yu),hsl:new RegExp("hsl"+Gf),hsla:new RegExp("hsla"+Yu),hsv:new RegExp("hsv"+Gf),hsva:new RegExp("hsva"+Yu),cmyk:new RegExp("cmyk"+Yu),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 UB(e){if(e=e.trim().toLowerCase(),e.length===0)return!1;let t=!1;if(Qp[e])e=Qp[e],t=!0;else if(e==="transparent")return{r:0,g:0,b:0,a:0,format:"name"};let n=Aa.rgb.exec(e);return n?{r:n[1],g:n[2],b:n[3]}:(n=Aa.rgba.exec(e),n?{r:n[1],g:n[2],b:n[3],a:n[4]}:(n=Aa.hsl.exec(e),n?{h:n[1],s:n[2],l:n[3]}:(n=Aa.hsla.exec(e),n?{h:n[1],s:n[2],l:n[3],a:n[4]}:(n=Aa.hsv.exec(e),n?{h:n[1],s:n[2],v:n[3]}:(n=Aa.hsva.exec(e),n?{h:n[1],s:n[2],v:n[3],a:n[4]}:(n=Aa.cmyk.exec(e),n?{c:n[1],m:n[2],y:n[3],k:n[4]}:(n=Aa.hex8.exec(e),n?{r:ka(n[1]),g:ka(n[2]),b:ka(n[3]),a:Oy(n[4]),format:t?"name":"hex8"}:(n=Aa.hex6.exec(e),n?{r:ka(n[1]),g:ka(n[2]),b:ka(n[3]),format:t?"name":"hex"}:(n=Aa.hex4.exec(e),n?{r:ka(n[1]+n[1]),g:ka(n[2]+n[2]),b:ka(n[3]+n[3]),a:Oy(n[4]+n[4]),format:t?"name":"hex8"}:(n=Aa.hex3.exec(e),n?{r:ka(n[1]+n[1]),g:ka(n[2]+n[2]),b:ka(n[3]+n[3]),format:t?"name":"hex"}:!1))))))))))}function Ca(e){return typeof e=="number"?!Number.isNaN(e):Aa.CSS_UNIT.test(e)}class fn{constructor(t="",n={}){if(t instanceof fn)return t;typeof t=="number"&&(t=HB(t)),this.originalInput=t;const a=KB(t);this.originalInput=t,this.r=a.r,this.g=a.g,this.b=a.b,this.a=a.a,this.roundA=Math.round(100*this.a)/100,this.format=n.format??a.format,this.gradientType=n.gradientType,this.r<1&&(this.r=Math.round(this.r)),this.g<1&&(this.g=Math.round(this.g)),this.b<1&&(this.b=Math.round(this.b)),this.isValid=a.ok}isDark(){return this.getBrightness()<128}isLight(){return!this.isDark()}getBrightness(){const t=this.toRgb();return(t.r*299+t.g*587+t.b*114)/1e3}getLuminance(){const t=this.toRgb();let n,a,o;const s=t.r/255,r=t.g/255,l=t.b/255;return s<=.03928?n=s/12.92:n=Math.pow((s+.055)/1.055,2.4),r<=.03928?a=r/12.92:a=Math.pow((r+.055)/1.055,2.4),l<=.03928?o=l/12.92:o=Math.pow((l+.055)/1.055,2.4),.2126*n+.7152*a+.0722*o}getAlpha(){return this.a}setAlpha(t){return this.a=ik(t),this.roundA=Math.round(100*this.a)/100,this}isMonochrome(){const{s:t}=this.toHsl();return t===0}toHsv(){const t=xy(this.r,this.g,this.b);return{h:t.h*360,s:t.s,v:t.v,a:this.a}}toHsvString(){const t=xy(this.r,this.g,this.b),n=Math.round(t.h*360),a=Math.round(t.s*100),o=Math.round(t.v*100);return this.a===1?`hsv(${n}, ${a}%, ${o}%)`:`hsva(${n}, ${a}%, ${o}%, ${this.roundA})`}toHsl(){const t=Ey(this.r,this.g,this.b);return{h:t.h*360,s:t.s,l:t.l,a:this.a}}toHslString(){const t=Ey(this.r,this.g,this.b),n=Math.round(t.h*360),a=Math.round(t.s*100),o=Math.round(t.l*100);return this.a===1?`hsl(${n}, ${a}%, ${o}%)`:`hsla(${n}, ${a}%, ${o}%, ${this.roundA})`}toHex(t=!1){return Ty(this.r,this.g,this.b,t)}toHexString(t=!1){return"#"+this.toHex(t)}toHex8(t=!1){return FB(this.r,this.g,this.b,this.a,t)}toHex8String(t=!1){return"#"+this.toHex8(t)}toHexShortString(t=!1){return this.a===1?this.toHexString(t):this.toHex8String(t)}toRgb(){return{r:Math.round(this.r),g:Math.round(this.g),b:Math.round(this.b),a:this.a}}toRgbString(){const t=Math.round(this.r),n=Math.round(this.g),a=Math.round(this.b);return this.a===1?`rgb(${t}, ${n}, ${a})`:`rgba(${t}, ${n}, ${a}, ${this.roundA})`}toPercentageRgb(){const t=n=>`${Math.round(jn(n,255)*100)}%`;return{r:t(this.r),g:t(this.g),b:t(this.b),a:this.a}}toPercentageRgbString(){const t=n=>Math.round(jn(n,255)*100);return this.a===1?`rgb(${t(this.r)}%, ${t(this.g)}%, ${t(this.b)}%)`:`rgba(${t(this.r)}%, ${t(this.g)}%, ${t(this.b)}%, ${this.roundA})`}toCmyk(){return{...$y(this.r,this.g,this.b)}}toCmykString(){const{c:t,m:n,y:a,k:o}=$y(this.r,this.g,this.b);return`cmyk(${t}, ${n}, ${a}, ${o})`}toName(){if(this.a===0)return"transparent";if(this.a<1)return!1;const t="#"+Ty(this.r,this.g,this.b,!1);for(const[n,a]of Object.entries(Qp))if(t===a)return n;return!1}toString(t){const n=!!t;t=t??this.format;let a=!1;const o=this.a<1&&this.a>=0;return!n&&o&&(t.startsWith("hex")||t==="name")?t==="name"&&this.a===0?this.toName():this.toRgbString():(t==="rgb"&&(a=this.toRgbString()),t==="prgb"&&(a=this.toPercentageRgbString()),(t==="hex"||t==="hex6")&&(a=this.toHexString()),t==="hex3"&&(a=this.toHexString(!0)),t==="hex4"&&(a=this.toHex8String(!0)),t==="hex8"&&(a=this.toHex8String()),t==="name"&&(a=this.toName()),t==="hsl"&&(a=this.toHslString()),t==="hsv"&&(a=this.toHsvString()),t==="cmyk"&&(a=this.toCmykString()),a||this.toHexString())}toNumber(){return(Math.round(this.r)<<16)+(Math.round(this.g)<<8)+Math.round(this.b)}clone(){return new fn(this.toString())}lighten(t=10){const n=this.toHsl();return n.l+=t/100,n.l=Uu(n.l),new fn(n)}brighten(t=10){const n=this.toRgb();return n.r=Math.max(0,Math.min(255,n.r-Math.round(255*-(t/100)))),n.g=Math.max(0,Math.min(255,n.g-Math.round(255*-(t/100)))),n.b=Math.max(0,Math.min(255,n.b-Math.round(255*-(t/100)))),new fn(n)}darken(t=10){const n=this.toHsl();return n.l-=t/100,n.l=Uu(n.l),new fn(n)}tint(t=10){return this.mix("white",t)}shade(t=10){return this.mix("black",t)}desaturate(t=10){const n=this.toHsl();return n.s-=t/100,n.s=Uu(n.s),new fn(n)}saturate(t=10){const n=this.toHsl();return n.s+=t/100,n.s=Uu(n.s),new fn(n)}greyscale(){return this.desaturate(100)}spin(t){const n=this.toHsl(),a=(n.h+t)%360;return n.h=a<0?360+a:a,new fn(n)}mix(t,n=50){const a=this.toRgb(),o=new fn(t).toRgb(),s=n/100,r={r:(o.r-a.r)*s+a.r,g:(o.g-a.g)*s+a.g,b:(o.b-a.b)*s+a.b,a:(o.a-a.a)*s+a.a};return new fn(r)}analogous(t=6,n=30){const a=this.toHsl(),o=360/n,s=[this];for(a.h=(a.h-(o*t>>1)+720)%360;--t;)a.h=(a.h+o)%360,s.push(new fn(a));return s}complement(){const t=this.toHsl();return t.h=(t.h+180)%360,new fn(t)}monochromatic(t=6){const n=this.toHsv(),{h:a}=n,{s:o}=n;let{v:s}=n;const r=[],l=1/t;for(;t--;)r.push(new fn({h:a,s:o,v:s})),s=(s+l)%1;return r}splitcomplement(){const t=this.toHsl(),{h:n}=t;return[this,new fn({h:(n+72)%360,s:t.s,l:t.l}),new fn({h:(n+216)%360,s:t.s,l:t.l})]}onBackground(t){const n=this.toRgb(),a=new fn(t).toRgb(),o=n.a+a.a*(1-n.a);return new fn({r:(n.r*n.a+a.r*a.a*(1-n.a))/o,g:(n.g*n.a+a.g*a.a*(1-n.a))/o,b:(n.b*n.a+a.b*a.a*(1-n.a))/o,a:o})}triad(){return this.polyad(3)}tetrad(){return this.polyad(4)}polyad(t){const n=this.toHsl(),{h:a}=n,o=[this],s=360/t;for(let r=1;r{let a={},o=e.color;if(o){const s=o.match(/var\((.*?)\)/);s&&(o=window.getComputedStyle(window.document.documentElement).getPropertyValue(s[1]));const r=new fn(o),l=e.dark?r.tint(20).toString():ws(r,20);if(e.plain)a=n.cssVarBlock({"bg-color":e.dark?ws(r,90):r.tint(90).toString(),"text-color":o,"border-color":e.dark?ws(r,50):r.tint(50).toString(),"hover-text-color":`var(${n.cssVarName("color-white")})`,"hover-bg-color":o,"hover-border-color":o,"active-bg-color":l,"active-text-color":`var(${n.cssVarName("color-white")})`,"active-border-color":l}),t.value&&(a[n.cssVarBlockName("disabled-bg-color")]=e.dark?ws(r,90):r.tint(90).toString(),a[n.cssVarBlockName("disabled-text-color")]=e.dark?ws(r,50):r.tint(50).toString(),a[n.cssVarBlockName("disabled-border-color")]=e.dark?ws(r,80):r.tint(80).toString());else{const u=e.dark?ws(r,30):r.tint(30).toString(),c=r.isDark()?`var(${n.cssVarName("color-white")})`:`var(${n.cssVarName("color-black")})`;if(a=n.cssVarBlock({"bg-color":o,"text-color":c,"border-color":o,"hover-bg-color":u,"hover-text-color":c,"hover-border-color":u,"active-bg-color":l,"active-border-color":l}),t.value){const d=e.dark?ws(r,50):r.tint(50).toString();a[n.cssVarBlockName("disabled-bg-color")]=d,a[n.cssVarBlockName("disabled-text-color")]=e.dark?"rgba(255, 255, 255, 0.5)":`var(${n.cssVarName("color-white")})`,a[n.cssVarBlockName("disabled-border-color")]=d}}}return a})}var YB=se({name:"ElButton",__name:"button",props:Zp,emits:OB,setup(e,{expose:t,emit:n}){const a=e,o=n,s=qB(a),r=fe("button"),{_ref:l,_size:u,_type:c,_disabled:d,_props:f,_plain:v,_round:g,_text:p,_dashed:h,shouldAddSpace:m,handleClick:b}=MB(a,o),k=w(()=>[r.b(),r.m(c.value),r.m(u.value),r.is("disabled",d.value),r.is("loading",a.loading),r.is("plain",v.value),r.is("round",g.value),r.is("circle",a.circle),r.is("text",p.value),r.is("dashed",h.value),r.is("link",a.link),r.is("has-bg",a.bg)]);return t({ref:l,size:u,type:c,disabled:d,shouldAddSpace:m}),(y,S)=>(x(),oe(it(e.tag),dt({ref_key:"_ref",ref:l},i(f),{class:k.value,style:i(s),onClick:i(b)}),{default:J(()=>[e.loading?(x(),B(Fe,{key:0},[y.$slots.loading?ee(y.$slots,"loading",{key:0}):(x(),oe(i(De),{key:1,class:T(i(r).is("loading"))},{default:J(()=>[(x(),oe(it(e.loadingIcon)))]),_:1},8,["class"]))],64)):e.icon||y.$slots.icon?(x(),oe(i(De),{key:1},{default:J(()=>[e.icon?(x(),oe(it(e.icon),{key:0})):ee(y.$slots,"icon",{key:1})]),_:3})):te("v-if",!0),y.$slots.default?(x(),B("span",{key:2,class:T({[i(r).em("text","expand")]:i(m)})},[ee(y.$slots,"default")],2)):te("v-if",!0)]),_:3},16,["class","style","onClick"]))}}),GB=YB;const XB={size:Zp.size,type:Zp.type,direction:{type:G(String),values:["horizontal","vertical"],default:"horizontal"}};var JB=se({name:"ElButtonGroup",__name:"button-group",props:XB,setup(e){const t=e;St(lk,At({size:Vt(t,"size"),type:Vt(t,"type")}));const n=fe("button");return(a,o)=>(x(),B("div",{class:T([i(n).b("group"),i(n).bm("group",t.direction)])},[ee(a.$slots,"default")],2))}}),uk=JB;const In=st(GB,{ButtonGroup:uk}),ck=tn(uk),ZB=e=>ye(e)&&e.length===2&&e.every(t=>As(t)),QB=Ce({modelValue:{type:Date},range:{type:G(Array),validator:ZB},controllerType:{type:String,values:["button","select"],default:"button"},formatter:{type:G(Function)}}),e8={[tt]:e=>As(e),[wn]:e=>As(e)},Ny=["hours","minutes","seconds"],ao="EP_PICKER_BASE",rm="ElPopperOptions",dk=Symbol("commonPickerContextKey"),wl="HH:mm:ss",Os="YYYY-MM-DD",t8={date:Os,dates:Os,week:"gggg[w]ww",year:"YYYY",years:"YYYY",month:"YYYY-MM",months:"YYYY-MM",datetime:`${Os} ${wl}`,monthrange:"YYYY-MM",yearrange:"YYYY",daterange:Os,datetimerange:`${Os} ${wl}`};function bs(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var pc={exports:{}},n8=pc.exports,Ry;function a8(){return Ry||(Ry=1,(function(e,t){(function(n,a){e.exports=a()})(n8,(function(){var n=1e3,a=6e4,o=36e5,s="millisecond",r="second",l="minute",u="hour",c="day",d="week",f="month",v="quarter",g="year",p="date",h="Invalid Date",m=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,b=/\[([^\]]+)]|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,k={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(z){var U=["th","st","nd","rd"],W=z%100;return"["+z+(U[(W-20)%10]||U[W]||U[0])+"]"}},y=function(z,U,W){var P=String(z);return!P||P.length>=U?z:""+Array(U+1-P.length).join(W)+z},S={s:y,z:function(z){var U=-z.utcOffset(),W=Math.abs(U),P=Math.floor(W/60),I=W%60;return(U<=0?"+":"-")+y(P,2,"0")+":"+y(I,2,"0")},m:function z(U,W){if(U.date()1)return z(D[0])}else{var F=U.name;E[F]=U,I=F}return!P&&I&&(C=I),I||!P&&C},N=function(z,U){if(O(z))return z.clone();var W=typeof U=="object"?U:{};return W.date=z,W.args=arguments,new _(W)},A=S;A.l=R,A.i=O,A.w=function(z,U){return N(z,{locale:U.$L,utc:U.$u,x:U.$x,$offset:U.$offset})};var _=(function(){function z(W){this.$L=R(W.locale,null,!0),this.parse(W),this.$x=this.$x||W.x||{},this[$]=!0}var U=z.prototype;return U.parse=function(W){this.$d=(function(P){var I=P.date,L=P.utc;if(I===null)return new Date(NaN);if(A.u(I))return new Date;if(I instanceof Date)return new Date(I);if(typeof I=="string"&&!/Z$/i.test(I)){var D=I.match(m);if(D){var F=D[2]-1||0,q=(D[7]||"0").substring(0,3);return L?new Date(Date.UTC(D[1],F,D[3]||1,D[4]||0,D[5]||0,D[6]||0,q)):new Date(D[1],F,D[3]||1,D[4]||0,D[5]||0,D[6]||0,q)}}return new Date(I)})(W),this.init()},U.init=function(){var W=this.$d;this.$y=W.getFullYear(),this.$M=W.getMonth(),this.$D=W.getDate(),this.$W=W.getDay(),this.$H=W.getHours(),this.$m=W.getMinutes(),this.$s=W.getSeconds(),this.$ms=W.getMilliseconds()},U.$utils=function(){return A},U.isValid=function(){return this.$d.toString()!==h},U.isSame=function(W,P){var I=N(W);return this.startOf(P)<=I&&I<=this.endOf(P)},U.isAfter=function(W,P){return N(W)[e>0?e-1:void 0,e,eArray.from(Array.from({length:e}).keys()),fk=e=>e.replace(/\W?m{1,2}|\W?ZZ/g,"").replace(/\W?h{1,2}|\W?s{1,3}|\W?a/gi,"").trim(),pk=e=>e.replace(/\W?D{1,2}|\W?Do|\W?d{1,4}|\W?M{1,4}|\W?Y{2,4}/g,"").trim(),Iy=function(e,t){const n=As(e),a=As(t);return n&&a?e.getTime()===t.getTime():!n&&!a?e===t:!1},hk=function(e,t){const n=ye(e),a=ye(t);return n&&a?e.length!==t.length?!1:e.every((o,s)=>Iy(o,t[s])):!n&&!a?Iy(e,t):!1},Py=function(e,t,n){const a=ia(t)||t==="x"?ot(e).locale(n):ot(e,t).locale(n);return a.isValid()?a:void 0},My=function(e,t,n){return ia(t)?e:t==="x"?+e:ot(e).locale(n).format(t)},Jf=(e,t)=>{const n=[],a=t?.();for(let o=0;oye(e)?e.map(t=>t.toDate()):e.toDate(),lm=Ce({disabledHours:{type:G(Function)},disabledMinutes:{type:G(Function)},disabledSeconds:{type:G(Function)}}),vk=Ce({visible:Boolean,actualVisible:{type:Boolean,default:void 0},format:{type:String,default:""}}),im=Ce({automaticDropdown:{type:Boolean,default:!0},id:{type:G([Array,String])},name:{type:G([Array,String])},popperClass:zt.popperClass,popperStyle:zt.popperStyle,format:String,valueFormat:String,dateFormat:String,timeFormat:String,type:{type:String,default:""},clearable:{type:Boolean,default:!0},clearIcon:{type:G([String,Object]),default:Fo},editable:{type:Boolean,default:!0},saveOnBlur:{type:Boolean,default:!0},prefixIcon:{type:G([String,Object]),default:""},size:Tn,readonly:Boolean,disabled:{type:Boolean,default:void 0},placeholder:{type:String,default:""},popperOptions:{type:G(Object),default:()=>({})},modelValue:{type:G([Date,Array,String,Number]),default:""},rangeSeparator:{type:String,default:"-"},startPlaceholder:String,endPlaceholder:String,defaultValue:{type:G([Date,Array])},defaultTime:{type:G([Date,Array])},isRange:Boolean,...lm,disabledDate:{type:Function},cellClassName:{type:Function},shortcuts:{type:Array,default:()=>[]},arrowControl:Boolean,tabindex:{type:G([String,Number]),default:0},validateEvent:{type:Boolean,default:!0},unlinkPanels:Boolean,placement:{type:G(String),values:Lo,default:"bottom"},fallbackPlacements:{type:G(Array),default:["bottom","top","right","left"]},...Ir,...aa(["ariaLabel"]),showNow:{type:Boolean,default:!0},showConfirm:{type:Boolean,default:!0},showFooter:{type:Boolean,default:!0},showWeekNumber:Boolean}),s8=Ce({id:{type:G(Array)},name:{type:G(Array)},modelValue:{type:G([Array,String])},startPlaceholder:String,endPlaceholder:String,disabled:Boolean}),mk=(e,t)=>{const{lang:n}=Ct(),a=M(!1),o=M(!1),s=M(null),r=w(()=>{const{modelValue:p}=e;return!p||ye(p)&&!p.filter(Boolean).length}),l=p=>{if(!hk(e.modelValue,p)){let h;ye(p)?h=p.map(m=>My(m,e.valueFormat,n.value)):p&&(h=My(p,e.valueFormat,n.value)),t(tt,p&&h,n.value)}},u=w(()=>{let p;if(r.value?c.value.getDefaultValue&&(p=c.value.getDefaultValue()):ye(e.modelValue)?p=e.modelValue.map(h=>Py(h,e.valueFormat,n.value)):p=Py(e.modelValue??"",e.valueFormat,n.value),c.value.getRangeAvailableTime){const h=c.value.getRangeAvailableTime(p);on(h,p)||(p=h,r.value||l(hc(p)))}return ye(p)&&p.some(h=>!h)&&(p=[]),p}),c=M({});return{parsedValue:u,pickerActualVisible:o,pickerOptions:c,pickerVisible:a,userInput:s,valueIsEmpty:r,emitInput:l,onCalendarChange:p=>{t("calendar-change",p)},onPanelChange:(p,h,m)=>{t("panel-change",p,h,m)},onPick:(p="",h=!1)=>{a.value=h;let m;ye(p)?m=p.map(b=>b.toDate()):m=p&&p.toDate(),s.value=null,l(m)},onSetPickerOption:p=>{c.value[p[0]]=p[1],c.value.panelReady=!0}}},r8=["id","name","placeholder","value","disabled"],l8=["id","name","placeholder","value","disabled"];var i8=se({name:"PickerRangeTrigger",inheritAttrs:!1,__name:"picker-range-trigger",props:s8,emits:["mouseenter","mouseleave","click","touchstart","focus","blur","startInput","endInput","startChange","endChange"],setup(e,{expose:t,emit:n}){const a=e,o=n,{formItem:s}=Dn(),{inputId:r}=Ia(At({id:w(()=>a.id?.[0])}),{formItemContext:s}),l=Wd(),u=fe("date"),c=fe("range"),d=M(),f=M(),{wrapperRef:v,isFocused:g}=ms(d,{disabled:w(()=>a.disabled)}),p=O=>{o("click",O)},h=O=>{o("mouseenter",O)},m=O=>{o("mouseleave",O)},b=O=>{o("touchstart",O)},k=O=>{o("startInput",O)},y=O=>{o("endInput",O)},S=O=>{o("startChange",O)},C=O=>{o("endChange",O)};return t({focus:()=>{d.value?.focus()},blur:()=>{d.value?.blur(),f.value?.blur()}}),(O,R)=>(x(),B("div",{ref_key:"wrapperRef",ref:v,class:T([i(u).is("active",i(g)),O.$attrs.class]),style:Ke(O.$attrs.style),onClick:p,onMouseenter:h,onMouseleave:m,onTouchstartPassive:b},[ee(O.$slots,"prefix"),H("input",dt(i(l),{id:i(r),ref_key:"inputRef",ref:d,name:O.name&&O.name[0],placeholder:O.startPlaceholder,value:O.modelValue&&O.modelValue[0],class:i(c).b("input"),disabled:O.disabled,onInput:k,onChange:S}),null,16,r8),ee(O.$slots,"range-separator"),H("input",dt(i(l),{id:O.id&&O.id[1],ref_key:"endInputRef",ref:f,name:O.name&&O.name[1],placeholder:O.endPlaceholder,value:O.modelValue&&O.modelValue[1],class:i(c).b("input"),disabled:O.disabled,onInput:y,onChange:C}),null,16,l8),ee(O.$slots,"suffix")],38))}}),u8=i8,c8=se({name:"Picker",__name:"picker",props:im,emits:[tt,bt,"focus","blur","clear","calendar-change","panel-change","visible-change","keydown"],setup(e,{expose:t,emit:n}){const a=e,o=n,s=fs(),r=fe("date"),l=fe("input"),u=fe("range"),{formItem:c}=Dn(),d=_e(rm,{}),f=hu(a,null),v=M(),g=M(),p=M(null);let h=!1;const m=ln(),b=mk(a,o),{parsedValue:k,pickerActualVisible:y,userInput:S,pickerVisible:C,pickerOptions:E,valueIsEmpty:$,emitInput:O,onPick:R,onSetPickerOption:N,onCalendarChange:A,onPanelChange:_}=b,{isFocused:V,handleFocus:z,handleBlur:U}=ms(g,{disabled:m,beforeFocus(){return a.readonly},afterFocus(){a.automaticDropdown&&(C.value=!0)},beforeBlur(de){return!h&&v.value?.isFocusInsideContent(de)},afterBlur(){ae.value&&!a.saveOnBlur?$.value||E.value.handleCancel?.():We(),C.value=!1,h=!1,a.validateEvent&&c?.validate("blur").catch(de=>pt(de))}}),W=M(!1),P=w(()=>[r.b("editor"),r.bm("editor",a.type),l.e("wrapper"),r.is("disabled",m.value),r.is("active",C.value),u.b("editor"),Ee?u.bm("editor",Ee.value):"",s.class]),I=w(()=>[l.e("icon"),u.e("close-icon"),ce.value?"":u.em("close-icon","hidden")]);le(C,de=>{de?Ne(()=>{de&&(p.value=a.modelValue)}):(S.value=null,Ne(()=>{L(a.modelValue)}))});const L=(de,Ye)=>{(Ye||!hk(de,p.value))&&(o(bt,de),Ye&&(p.value=de),a.validateEvent&&c?.validate("change").catch($t=>pt($t)))},D=de=>{o("keydown",de)},F=w(()=>g.value?Array.from(g.value.$el.querySelectorAll("input")):[]),q=(de,Ye,$t)=>{const Qt=F.value;Qt.length&&(!$t||$t==="min"?(Qt[0].setSelectionRange(de,Ye),Qt[0].focus()):$t==="max"&&(Qt[1].setSelectionRange(de,Ye),Qt[1].focus()))},j=()=>{y.value=!0},X=()=>{o("visible-change",!0)},Q=()=>{y.value=!1,C.value=!1,o("visible-change",!1)},he=()=>{C.value=!0},ue=()=>{C.value=!1},ge=w(()=>{const de=Pe(k.value);return ye(S.value)?[S.value[0]||de&&de[0]||"",S.value[1]||de&&de[1]||""]:S.value!==null?S.value:ae.value&&$.value&&!a.saveOnBlur||!ae.value&&$.value||!C.value&&$.value?"":de?ne.value||K.value||Z.value?de.join(", "):de:""}),ie=w(()=>a.type.includes("time")),ae=w(()=>a.type.startsWith("time")),ne=w(()=>a.type==="dates"),K=w(()=>a.type==="months"),Z=w(()=>a.type==="years"),re=w(()=>a.prefixIcon||(ie.value?_C:D4)),ce=w(()=>a.clearable&&!m.value&&!a.readonly&&!$.value&&(W.value||V.value)),ve=de=>{a.readonly||m.value||(ce.value&&(de?.stopPropagation(),E.value.handleClear?E.value.handleClear():O(f.valueOnClear.value),L(f.valueOnClear.value,!0),Q()),o("clear"))},ke=async de=>{a.readonly||m.value||(de.target?.tagName!=="INPUT"||V.value||!a.automaticDropdown)&&(C.value=!0)},Re=()=>{a.readonly||m.value||!$.value&&a.clearable&&(W.value=!0)},Ie=()=>{W.value=!1},$e=de=>{a.readonly||m.value||(de.touches[0].target?.tagName!=="INPUT"||V.value||!a.automaticDropdown)&&(C.value=!0)},pe=w(()=>a.type.includes("range")),Ee=Sn(),me=w(()=>i(v)?.popperRef?.contentRef),Me=Nv(g,de=>{const Ye=i(me),$t=xn(g);Ye&&(de.target===Ye||de.composedPath().includes(Ye))||de.target===$t||$t&&de.composedPath().includes($t)||(C.value=!1)});Bt(()=>{Me?.()});const We=()=>{if(!(ae.value&&!a.saveOnBlur)){if(S.value){const de=Xe(ge.value);de&&(Ae(de)&&O(hc(de)),S.value=null)}S.value===""&&(O(f.valueOnClear.value),L(f.valueOnClear.value,!0),S.value=null)}},Xe=de=>de?E.value.parseUserInput(de):null,Pe=de=>de?ye(de)?de.map(Ye=>Ye.format(a.format)):de.format(a.format):null,Ae=de=>E.value.isValidValue(de),je=async de=>{if(a.readonly||m.value)return;const Ye=jt(de);if(D(de),Ye===we.esc){C.value===!0&&(C.value=!1,de.preventDefault(),de.stopPropagation());return}if(Ye===we.down&&(E.value.handleFocusPicker&&(de.preventDefault(),de.stopPropagation()),C.value===!1&&(C.value=!0,await Ne()),E.value.handleFocusPicker)){E.value.handleFocusPicker();return}if(Ye===we.tab){h=!0;return}if(Ye===we.enter||Ye===we.numpadEnter){C.value?(S.value===null||S.value===""||Ae(Xe(ge.value)))&&(We(),C.value=!1):C.value=!0,de.preventDefault(),de.stopPropagation();return}if(S.value){de.stopPropagation();return}E.value.handleKeydownInput&&E.value.handleKeydownInput(de)},Nt=de=>{S.value=de,C.value||(C.value=!0)},Ue=de=>{const Ye=de.target;S.value?S.value=[Ye.value,S.value[1]]:S.value=[Ye.value,null]},rt=de=>{const Ye=de.target;S.value?S.value=[S.value[0],Ye.value]:S.value=[null,Ye.value]},mt=()=>{const de=S.value,Ye=Xe(de&&de[0]),$t=i(k);if(Ye&&Ye.isValid()){S.value=[Pe(Ye),ge.value?.[1]||null];const Qt=[Ye,$t&&($t[1]||null)];Ae(Qt)&&(O(hc(Qt)),S.value=null)}},kt=()=>{const de=i(S),Ye=Xe(de&&de[1]),$t=i(k);if(Ye&&Ye.isValid()){S.value=[i(ge)?.[0]||null,Pe(Ye)];const Qt=[$t&&$t[0],Ye];Ae(Qt)&&(O(hc(Qt)),S.value=null)}},be=()=>{g.value?.focus()},ze=()=>{g.value?.blur()};return St(ao,{props:a,emptyValues:f}),St(dk,b),t({focus:be,blur:ze,handleOpen:he,handleClose:ue,onPick:R}),(de,Ye)=>(x(),oe(i(Ln),dt({ref_key:"refPopper",ref:v,visible:i(C),effect:"light",pure:"",trigger:"click"},de.$attrs,{role:"dialog",teleported:"",transition:`${i(r).namespace.value}-zoom-in-top`,"popper-class":[`${i(r).namespace.value}-picker__popper`,de.popperClass],"popper-style":de.popperStyle,"popper-options":i(d),"fallback-placements":de.fallbackPlacements,"gpu-acceleration":!1,placement:de.placement,"stop-popper-mouse-event":!1,"hide-after":0,persistent:"",onBeforeShow:j,onShow:X,onHide:Q}),{default:J(()=>[pe.value?(x(),oe(u8,{key:1,id:de.id,ref_key:"inputRef",ref:g,"model-value":ge.value,name:de.name,disabled:i(m),readonly:!de.editable||de.readonly,"start-placeholder":de.startPlaceholder,"end-placeholder":de.endPlaceholder,class:T(P.value),style:Ke(de.$attrs.style),"aria-label":de.ariaLabel,tabindex:de.tabindex,autocomplete:"off",role:"combobox",onClick:ke,onFocus:i(z),onBlur:i(U),onStartInput:Ue,onStartChange:mt,onEndInput:rt,onEndChange:kt,onMousedown:ke,onMouseenter:Re,onMouseleave:Ie,onTouchstartPassive:$e,onKeydown:je},{prefix:J(()=>[re.value?(x(),oe(i(De),{key:0,class:T([i(l).e("icon"),i(u).e("icon")])},{default:J(()=>[(x(),oe(it(re.value)))]),_:1},8,["class"])):te("v-if",!0)]),"range-separator":J(()=>[ee(de.$slots,"range-separator",{},()=>[H("span",{class:T(i(u).b("separator"))},Se(de.rangeSeparator),3)])]),suffix:J(()=>[de.clearIcon?(x(),oe(i(De),{key:0,class:T(I.value),onMousedown:Ge(i(Dt),["prevent"]),onClick:ve},{default:J(()=>[(x(),oe(it(de.clearIcon)))]),_:1},8,["class","onMousedown"])):te("v-if",!0)]),_:3},8,["id","model-value","name","disabled","readonly","start-placeholder","end-placeholder","class","style","aria-label","tabindex","onFocus","onBlur"])):(x(),oe(i(ea),{key:0,id:de.id,ref_key:"inputRef",ref:g,"container-role":"combobox","model-value":ge.value,name:de.name,size:i(Ee),disabled:i(m),placeholder:de.placeholder,class:T([i(r).b("editor"),i(r).bm("editor",de.type),i(r).is("focus",i(C)),de.$attrs.class]),style:Ke(de.$attrs.style),readonly:!de.editable||de.readonly||ne.value||K.value||Z.value||de.type==="week","aria-label":de.ariaLabel,tabindex:de.tabindex,"validate-event":!1,onInput:Nt,onFocus:i(z),onBlur:i(U),onKeydown:je,onChange:We,onMousedown:ke,onMouseenter:Re,onMouseleave:Ie,onTouchstartPassive:$e,onClick:Ye[0]||(Ye[0]=Ge(()=>{},["stop"]))},{prefix:J(()=>[re.value?(x(),oe(i(De),{key:0,class:T(i(l).e("icon")),onMousedown:Ge(ke,["prevent"]),onTouchstartPassive:$e},{default:J(()=>[(x(),oe(it(re.value)))]),_:1},8,["class"])):te("v-if",!0)]),suffix:J(()=>[ce.value&&de.clearIcon?(x(),oe(i(De),{key:0,class:T(`${i(l).e("icon")} clear-icon`),onMousedown:Ge(i(Dt),["prevent"]),onClick:ve},{default:J(()=>[(x(),oe(it(de.clearIcon)))]),_:1},8,["class","onMousedown"])):te("v-if",!0)]),_:1},8,["id","model-value","name","size","disabled","placeholder","class","style","readonly","aria-label","tabindex","onFocus","onBlur"]))]),content:J(()=>[ee(de.$slots,"default",{visible:i(C),actualVisible:i(y),parsedValue:i(k),format:de.format,dateFormat:de.dateFormat,timeFormat:de.timeFormat,unlinkPanels:de.unlinkPanels,type:de.type,defaultValue:de.defaultValue,showNow:de.showNow,showConfirm:de.showConfirm,showFooter:de.showFooter,showWeekNumber:de.showWeekNumber,onPick:Ye[1]||(Ye[1]=(...$t)=>i(R)&&i(R)(...$t)),onSelectRange:q,onSetPickerOption:Ye[2]||(Ye[2]=(...$t)=>i(N)&&i(N)(...$t)),onCalendarChange:Ye[3]||(Ye[3]=(...$t)=>i(A)&&i(A)(...$t)),onClear:ve,onPanelChange:Ye[4]||(Ye[4]=(...$t)=>i(_)&&i(_)(...$t)),onMousedown:Ye[5]||(Ye[5]=Ge(()=>{},["stop"]))})]),_:3},16,["visible","transition","popper-class","popper-style","popper-options","fallback-placements","placement"]))}}),gk=c8;const ks=new Map;if(Mt){let e;document.addEventListener("mousedown",t=>e=t),document.addEventListener("mouseup",t=>{if(e){for(const n of ks.values())for(const{documentHandler:a}of n)a(t,e);e=void 0}})}function _y(e,t){let n=[];return ye(t.arg)?n=t.arg:ha(t.arg)&&n.push(t.arg),function(a,o){const s=t.instance.popperRef,r=a.target,l=o?.target,u=!t||!t.instance,c=!r||!l,d=e.contains(r)||e.contains(l),f=e===r,v=n.length&&n.some(p=>p?.contains(r))||n.length&&n.includes(l),g=s&&(s.contains(r)||s.contains(l));u||c||d||f||v||g||t.value(a,o)}}const zs={beforeMount(e,t){ks.has(e)||ks.set(e,[]),ks.get(e).push({documentHandler:_y(e,t),bindingFn:t.value})},updated(e,t){ks.has(e)||ks.set(e,[]);const n=ks.get(e),a=n.findIndex(s=>s.bindingFn===t.oldValue),o={documentHandler:_y(e,t),bindingFn:t.value};a>=0?n.splice(a,1,o):n.push(o)},unmounted(e){ks.delete(e)}},d8=100,f8=600,Gu="_RepeatClick",nd={beforeMount(e,t){const n=t.value,{interval:a=d8,delay:o=f8}=Ve(n)?{}:n;let s,r;const l=()=>Ve(n)?n():n.handler(),u=()=>{r&&(clearTimeout(r),r=void 0),s&&(clearInterval(s),s=void 0)},c=d=>{d.button===0&&(u(),l(),document.addEventListener("mouseup",u,{once:!0}),r=setTimeout(()=>{s=setInterval(()=>{l()},a)},o))};e[Gu]={start:c,clear:u},e.addEventListener("mousedown",c)},unmounted(e){if(!e[Gu])return;const{start:t,clear:n}=e[Gu];t&&e.removeEventListener("mousedown",t),n&&(n(),document.removeEventListener("mouseup",n)),e[Gu]=null}},eh="_trap-focus-children",sr=[],Ay=e=>{if(sr.length===0)return;const t=jt(e),n=sr[sr.length-1][eh];if(n.length>0&&t===we.tab){if(n.length===1){e.preventDefault(),document.activeElement!==n[0]&&n[0].focus();return}const a=e.shiftKey,o=e.target===n[0],s=e.target===n[n.length-1];o&&a&&(e.preventDefault(),n[n.length-1].focus()),s&&!a&&(e.preventDefault(),n[0].focus())}},p8={beforeMount(e){e[eh]=Rb(e),sr.push(e),sr.length<=1&&document.addEventListener("keydown",Ay)},updated(e){Ne(()=>{e[eh]=Rb(e)})},unmounted(){sr.shift(),sr.length===0&&document.removeEventListener("keydown",Ay)}};var Ly=!1,Qs,th,nh,vc,mc,bk,gc,ah,oh,sh,yk,rh,lh,wk,Sk;function fa(){if(!Ly){Ly=!0;var e=navigator.userAgent,t=/(?:MSIE.(\d+\.\d+))|(?:(?:Firefox|GranParadiso|Iceweasel).(\d+\.\d+))|(?:Opera(?:.+Version.|.)(\d+\.\d+))|(?:AppleWebKit.(\d+(?:\.\d+)?))|(?:Trident\/\d+\.\d+.*rv:(\d+\.\d+))/.exec(e),n=/(Mac OS X)|(Windows)|(Linux)/.exec(e);if(rh=/\b(iPhone|iP[ao]d)/.exec(e),lh=/\b(iP[ao]d)/.exec(e),sh=/Android/i.exec(e),wk=/FBAN\/\w+;/i.exec(e),Sk=/Mobile/i.exec(e),yk=!!/Win64/.exec(e),t){Qs=t[1]?parseFloat(t[1]):t[5]?parseFloat(t[5]):NaN,Qs&&document&&document.documentMode&&(Qs=document.documentMode);var a=/(?:Trident\/(\d+.\d+))/.exec(e);bk=a?parseFloat(a[1])+4:Qs,th=t[2]?parseFloat(t[2]):NaN,nh=t[3]?parseFloat(t[3]):NaN,vc=t[4]?parseFloat(t[4]):NaN,vc?(t=/(?:Chrome\/(\d+\.\d+))/.exec(e),mc=t&&t[1]?parseFloat(t[1]):NaN):mc=NaN}else Qs=th=nh=mc=vc=NaN;if(n){if(n[1]){var o=/(?:Mac OS X (\d+(?:[._]\d+)?))/.exec(e);gc=o?parseFloat(o[1].replace("_",".")):!0}else gc=!1;ah=!!n[2],oh=!!n[3]}else gc=ah=oh=!1}}var ih={ie:function(){return fa()||Qs},ieCompatibilityMode:function(){return fa()||bk>Qs},ie64:function(){return ih.ie()&&yk},firefox:function(){return fa()||th},opera:function(){return fa()||nh},webkit:function(){return fa()||vc},safari:function(){return ih.webkit()},chrome:function(){return fa()||mc},windows:function(){return fa()||ah},osx:function(){return fa()||gc},linux:function(){return fa()||oh},iphone:function(){return fa()||rh},mobile:function(){return fa()||rh||lh||sh||Sk},nativeApp:function(){return fa()||wk},android:function(){return fa()||sh},ipad:function(){return fa()||lh}},h8=ih,v8=!!(typeof window<"u"&&window.document&&window.document.createElement),m8={canUseDOM:v8},Ck=m8,kk;Ck.canUseDOM&&(kk=document.implementation&&document.implementation.hasFeature&&document.implementation.hasFeature("","")!==!0);function g8(e,t){if(!Ck.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,a=n in document;if(!a){var o=document.createElement("div");o.setAttribute(n,"return;"),a=typeof o[n]=="function"}return!a&&kk&&e==="wheel"&&(a=document.implementation.hasFeature("Events.wheel","3.0")),a}var b8=g8,Dy=10,By=40,Fy=800;function Ek(e){var t=0,n=0,a=0,o=0;return"detail"in e&&(n=e.detail),"wheelDelta"in e&&(n=-e.wheelDelta/120),"wheelDeltaY"in e&&(n=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(t=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(t=n,n=0),a=t*Dy,o=n*Dy,"deltaY"in e&&(o=e.deltaY),"deltaX"in e&&(a=e.deltaX),(a||o)&&e.deltaMode&&(e.deltaMode==1?(a*=By,o*=By):(a*=Fy,o*=Fy)),a&&!t&&(t=a<1?-1:1),o&&!n&&(n=o<1?-1:1),{spinX:t,spinY:n,pixelX:a,pixelY:o}}Ek.getEventType=function(){return h8.firefox()?"DOMMouseScroll":b8("wheel")?"wheel":"mousewheel"};var y8=Ek;const bc="_Mousewheel",Vy=function(e,t){if(e&&e.addEventListener){xk(e);const n=function(a){const o=y8(a);t&&Reflect.apply(t,this,[a,o])};e[bc]={wheelHandler:n},e.addEventListener("wheel",n,{passive:!0})}},xk=e=>{e[bc]?.wheelHandler&&(e.removeEventListener("wheel",e[bc].wheelHandler),e[bc]=null)},w8={beforeMount(e,t){Vy(e,t.value)},unmounted(e){xk(e)},updated(e,t){t.value!==t.oldValue&&Vy(e,t.value)}},S8=Ce({...vk,datetimeRole:String,parsedValue:{type:G(Object)}}),Tk=({getAvailableHours:e,getAvailableMinutes:t,getAvailableSeconds:n})=>{const a=(r,l,u,c)=>{const d={hour:e,minute:t,second:n};let f=r;return["hour","minute","second"].forEach(v=>{if(d[v]){let g;const p=d[v];switch(v){case"minute":g=p(f.hour(),l,c);break;case"second":g=p(f.hour(),f.minute(),l,c);break;default:g=p(l,c);break}if(g?.length&&!g.includes(f[v]())){const h=u?0:g.length-1;f=f[v](g[h])}}}),f},o={};return{timePickerOptions:o,getAvailableTime:a,onSetOption:([r,l])=>{o[r]=l}}},Zf=e=>{const t=(a,o)=>a||o,n=a=>a!==!0;return e.map(t).filter(n)},$k=(e,t,n)=>({getHoursList:(r,l)=>Jf(24,e&&(()=>e?.(r,l))),getMinutesList:(r,l,u)=>Jf(60,t&&(()=>t?.(r,l,u))),getSecondsList:(r,l,u,c)=>Jf(60,n&&(()=>n?.(r,l,u,c)))}),Ok=(e,t,n)=>{const{getHoursList:a,getMinutesList:o,getSecondsList:s}=$k(e,t,n);return{getAvailableHours:(c,d)=>Zf(a(c,d)),getAvailableMinutes:(c,d,f)=>Zf(o(c,d,f)),getAvailableSeconds:(c,d,f,v)=>Zf(s(c,d,f,v))}},Nk=(e,t)=>{const n=M(e.parsedValue);return le(()=>e.visible,a=>{const o=dg(t.modelValue),s=dg(t.valueOnClear);if(a&&o===s){n.value=s;return}a||(n.value=e.parsedValue)}),n},C8=Ce({role:{type:String,required:!0},spinnerDate:{type:G(Object),required:!0},showSeconds:{type:Boolean,default:!0},arrowControl:Boolean,amPmMode:{type:G(String),default:""},...lm}),k8=["onClick"],E8=["onMouseenter"];var x8=se({__name:"basic-time-spinner",props:C8,emits:[bt,"select-range","set-option"],setup(e,{emit:t}){const n=e,{isRange:a,format:o,saveOnBlur:s}=_e(ao).props,r=t,l=fe("time"),{getHoursList:u,getMinutesList:c,getSecondsList:d}=$k(n.disabledHours,n.disabledMinutes,n.disabledSeconds);let f=!1;const v={hours:!1,minutes:!1,seconds:!1},g=M(),p={hours:M(),minutes:M(),seconds:M()},h=w(()=>n.showSeconds?Ny:Ny.slice(0,2)),m=w(()=>{const{spinnerDate:F}=n;return{hours:F.hour(),minutes:F.minute(),seconds:F.second()}}),b=w(()=>{const{hours:F,minutes:q}=i(m),{role:j,spinnerDate:X}=n,Q=a?void 0:X;return{hours:u(j,Q),minutes:c(F,j,Q),seconds:d(F,q,j,Q)}}),k=w(()=>{const{hours:F,minutes:q,seconds:j}=i(m);return{hours:Xf(F,23),minutes:Xf(q,59),seconds:Xf(j,59)}}),y=Po(F=>{f=!1,E(F)},200),S=F=>{if(!n.amPmMode)return"";const q=n.amPmMode==="A";let j=F<12?" am":" pm";return q&&(j=j.toUpperCase()),j},C=F=>{let q=[0,0];const j=o||wl,X=j.indexOf("HH"),Q=j.indexOf("mm"),he=j.indexOf("ss");switch(F){case"hours":X!==-1&&(q=[X,X+2]);break;case"minutes":Q!==-1&&(q=[Q,Q+2]);break;case"seconds":he!==-1&&(q=[he,he+2]);break}const[ue,ge]=q;r("select-range",ue,ge),g.value=F},E=F=>{R(F,i(m)[F])},$=()=>{E("hours"),E("minutes"),E("seconds")},O=F=>F.querySelector(`.${l.namespace.value}-scrollbar__wrap`),R=(F,q)=>{if(n.arrowControl)return;const j=i(p[F]);j&&j.$el&&(s||(v[F]=!0,Qa(()=>{v[F]=!1})),O(j.$el).scrollTop=Math.max(0,q*N(F)))},N=F=>{const q=i(p[F])?.$el.querySelector("li");return q&&Number.parseFloat(Yo(q,"height"))||0},A=()=>{V(1)},_=()=>{V(-1)},V=F=>{g.value||C("hours");const q=g.value,j=i(m)[q],X=z(q,j,F,g.value==="hours"?24:60);U(q,X),R(q,X),Ne(()=>C(q))},z=(F,q,j,X)=>{let Q=(q+j+X)%X;const he=i(b)[F];for(;he[Q]&&Q!==q;)Q=(Q+j+X)%X;return Q},U=(F,q)=>{if(i(b)[F][q])return;const{hours:j,minutes:X,seconds:Q}=i(m);let he;switch(F){case"hours":he=n.spinnerDate.hour(q).minute(X).second(Q);break;case"minutes":he=n.spinnerDate.hour(j).minute(q).second(Q);break;case"seconds":he=n.spinnerDate.hour(j).minute(X).second(q);break}r(bt,he)},W=(F,{value:q,disabled:j})=>{j||(U(F,q),C(F),R(F,q))},P=F=>{if(!s&&v[F])return;const q=i(p[F]);q&&(f=!0,y(F),U(F,Math.min(Math.round((O(q.$el).scrollTop-(I(F)*.5-10)/N(F)+3)/N(F)),F==="hours"?23:59)))},I=F=>i(p[F]).$el.offsetHeight,L=()=>{const F=q=>{const j=i(p[q]);j&&j.$el&&(O(j.$el).onscroll=()=>{P(q)})};F("hours"),F("minutes"),F("seconds")};ht(()=>{Ne(()=>{!n.arrowControl&&L(),$(),n.role==="start"&&C("hours")})});const D=(F,q)=>{p[q].value=F??void 0};return r("set-option",[`${n.role}_scrollDown`,V]),r("set-option",[`${n.role}_emitSelectRange`,C]),le(()=>n.spinnerDate,()=>{f||$()}),(F,q)=>(x(),B("div",{class:T([i(l).b("spinner"),{"has-seconds":F.showSeconds}])},[F.arrowControl?te("v-if",!0):(x(!0),B(Fe,{key:0},yt(h.value,j=>(x(),oe(i(no),{key:j,ref_for:!0,ref:X=>D(X,j),class:T(i(l).be("spinner","wrapper")),"wrap-style":"max-height: inherit;","view-class":i(l).be("spinner","list"),noresize:"",tag:"ul",onMouseenter:X=>C(j),onMousemove:X=>E(j)},{default:J(()=>[(x(!0),B(Fe,null,yt(b.value[j],(X,Q)=>(x(),B("li",{key:Q,class:T([i(l).be("spinner","item"),i(l).is("active",Q===m.value[j]),i(l).is("disabled",X)]),onClick:he=>W(j,{value:Q,disabled:X})},[j==="hours"?(x(),B(Fe,{key:0},[wt(Se(("0"+(F.amPmMode?Q%12||12:Q)).slice(-2))+Se(S(Q)),1)],64)):(x(),B(Fe,{key:1},[wt(Se(("0"+Q).slice(-2)),1)],64))],10,k8))),128))]),_:2},1032,["class","view-class","onMouseenter","onMousemove"]))),128)),F.arrowControl?(x(!0),B(Fe,{key:1},yt(h.value,j=>(x(),B("div",{key:j,class:T([i(l).be("spinner","wrapper"),i(l).is("arrow")]),onMouseenter:X=>C(j)},[ct((x(),oe(i(De),{class:T(["arrow-up",i(l).be("spinner","arrow")])},{default:J(()=>[Y(i(ef))]),_:1},8,["class"])),[[i(nd),_]]),ct((x(),oe(i(De),{class:T(["arrow-down",i(l).be("spinner","arrow")])},{default:J(()=>[Y(i(Bo))]),_:1},8,["class"])),[[i(nd),A]]),H("ul",{class:T(i(l).be("spinner","list"))},[(x(!0),B(Fe,null,yt(k.value[j],(X,Q)=>(x(),B("li",{key:Q,class:T([i(l).be("spinner","item"),i(l).is("active",X===m.value[j]),i(l).is("disabled",b.value[j][X])])},[i(He)(X)?(x(),B(Fe,{key:0},[j==="hours"?(x(),B(Fe,{key:0},[wt(Se(("0"+(F.amPmMode?X%12||12:X)).slice(-2))+Se(S(X)),1)],64)):(x(),B(Fe,{key:1},[wt(Se(("0"+X).slice(-2)),1)],64))],64)):te("v-if",!0)],2))),128))],2)],42,E8))),128)):te("v-if",!0)],2))}}),uh=x8,T8=se({__name:"panel-time-pick",props:S8,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,a=t,o=_e(ao),{arrowControl:s,disabledHours:r,disabledMinutes:l,disabledSeconds:u,defaultValue:c}=o.props,{getAvailableHours:d,getAvailableMinutes:f,getAvailableSeconds:v}=Ok(r,l,u),g=fe("time"),{t:p,lang:h}=Ct(),m=M([0,2]),b=Nk(n,{modelValue:w(()=>o.props.modelValue),valueOnClear:w(()=>o?.emptyValues?o.emptyValues.valueOnClear.value:null)}),k=w(()=>Tt(n.actualVisible)?`${g.namespace.value}-zoom-in-top`:""),y=w(()=>n.format.includes("ss")),S=w(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),C=I=>{const L=ot(I).locale(h.value),D=U(L);return L.isSame(D)},E=()=>{const I=b.value;a("pick",I,!1),Ne(()=>{b.value=I})},$=(I=!1,L=!1)=>{L||a("pick",n.parsedValue,I)},O=I=>{n.visible&&a("pick",U(I).millisecond(0),!0)},R=(I,L)=>{a("select-range",I,L),m.value=[I,L]},N=I=>{const L=n.format,D=L.indexOf("HH"),F=L.indexOf("mm"),q=L.indexOf("ss"),j=[],X=[];D!==-1&&(j.push(D),X.push("hours")),F!==-1&&(j.push(F),X.push("minutes")),q!==-1&&y.value&&(j.push(q),X.push("seconds"));const Q=(j.indexOf(m.value[0])+I+j.length)%j.length;_.start_emitSelectRange(X[Q])},A=I=>{const L=jt(I),{left:D,right:F,up:q,down:j}=we;if([D,F].includes(L)){N(L===D?-1:1),I.preventDefault();return}if([q,j].includes(L)){const X=L===q?-1:1;_.start_scrollDown(X),I.preventDefault();return}},{timePickerOptions:_,onSetOption:V,getAvailableTime:z}=Tk({getAvailableHours:d,getAvailableMinutes:f,getAvailableSeconds:v}),U=I=>z(I,n.datetimeRole||"",!0),W=I=>I?ot(I,n.format).locale(h.value):null,P=()=>ot(c).locale(h.value);return a("set-picker-option",["isValidValue",C]),a("set-picker-option",["parseUserInput",W]),a("set-picker-option",["handleKeydownInput",A]),a("set-picker-option",["getRangeAvailableTime",U]),a("set-picker-option",["getDefaultValue",P]),a("set-picker-option",["handleCancel",E]),(I,L)=>(x(),oe(Vn,{name:k.value},{default:J(()=>[I.actualVisible||I.visible?(x(),B("div",{key:0,class:T(i(g).b("panel"))},[H("div",{class:T([i(g).be("panel","content"),{"has-seconds":y.value}])},[Y(uh,{ref:"spinner",role:I.datetimeRole||"start","arrow-control":i(s),"show-seconds":y.value,"am-pm-mode":S.value,"spinner-date":I.parsedValue,"disabled-hours":i(r),"disabled-minutes":i(l),"disabled-seconds":i(u),onChange:O,onSetOption:i(V),onSelectRange:R},null,8,["role","arrow-control","show-seconds","am-pm-mode","spinner-date","disabled-hours","disabled-minutes","disabled-seconds","onSetOption"])],2),H("div",{class:T(i(g).be("panel","footer"))},[H("button",{type:"button",class:T([i(g).be("panel","btn"),"cancel"]),onClick:E},Se(i(p)("el.datepicker.cancel")),3),H("button",{type:"button",class:T([i(g).be("panel","btn"),"confirm"]),onClick:L[0]||(L[0]=D=>$())},Se(i(p)("el.datepicker.confirm")),3)],2)],2)):te("v-if",!0)]),_:1},8,["name"]))}}),ad=T8;const $8=Ce({...vk,parsedValue:{type:G(Array)}}),O8=["disabled"];var N8=se({__name:"panel-time-range",props:$8,emits:["pick","select-range","set-picker-option"],setup(e,{emit:t}){const n=e,a=t,o=(ne,K)=>{const Z=[];for(let re=ne;re<=K;re++)Z.push(re);return Z},{t:s,lang:r}=Ct(),l=fe("time"),u=fe("picker"),c=_e(ao),{arrowControl:d,disabledHours:f,disabledMinutes:v,disabledSeconds:g,defaultValue:p}=c.props,h=w(()=>[l.be("range-picker","body"),l.be("panel","content"),l.is("arrow",d),C.value?"has-seconds":""]),m=w(()=>[l.be("range-picker","body"),l.be("panel","content"),l.is("arrow",d),C.value?"has-seconds":""]),b=w(()=>n.parsedValue[0]),k=w(()=>n.parsedValue[1]),y=Nk(n,{modelValue:w(()=>c.props.modelValue),valueOnClear:w(()=>c?.emptyValues?c.emptyValues.valueOnClear.value:null)}),S=()=>{const ne=y.value;a("pick",ne,!1),Ne(()=>{y.value=ne})},C=w(()=>n.format.includes("ss")),E=w(()=>n.format.includes("A")?"A":n.format.includes("a")?"a":""),$=(ne=!1)=>{a("pick",[b.value,k.value],ne)},O=ne=>{A(ne.millisecond(0),k.value)},R=ne=>{A(b.value,ne.millisecond(0))},N=ne=>{const K=ne.map(re=>ot(re).locale(r.value)),Z=q(K);return K[0].isSame(Z[0])&&K[1].isSame(Z[1])},A=(ne,K)=>{n.visible&&a("pick",[ne,K],!0)},_=w(()=>b.value>k.value),V=M([0,2]),z=(ne,K)=>{a("select-range",ne,K,"min"),V.value=[ne,K]},U=w(()=>C.value?11:8),W=(ne,K)=>{a("select-range",ne,K,"max");const Z=i(U);V.value=[ne+Z,K+Z]},P=ne=>{const K=C.value?[0,3,6,11,14,17]:[0,3,8,11],Z=["hours","minutes"].concat(C.value?["seconds"]:[]),re=(K.indexOf(V.value[0])+ne+K.length)%K.length,ce=K.length/2;re{const K=jt(ne),{left:Z,right:re,up:ce,down:ve}=we;if([Z,re].includes(K)){P(K===Z?-1:1),ne.preventDefault();return}if([ce,ve].includes(K)){const ke=K===ce?-1:1;he[`${V.value[0]{const Z=f?f(ne):[],re=ne==="start",ce=(K||(re?k.value:b.value)).hour();return Vf(Z,re?o(ce+1,23):o(0,ce-1))},D=(ne,K,Z)=>{const re=v?v(ne,K):[],ce=K==="start",ve=Z||(ce?k.value:b.value);if(ne!==ve.hour())return re;const ke=ve.minute();return Vf(re,ce?o(ke+1,59):o(0,ke-1))},F=(ne,K,Z,re)=>{const ce=g?g(ne,K,Z):[],ve=Z==="start",ke=re||(ve?k.value:b.value),Re=ke.hour(),Ie=ke.minute();if(ne!==Re||K!==Ie)return ce;const $e=ke.second();return Vf(ce,ve?o($e+1,59):o(0,$e-1))},q=([ne,K])=>[ue(ne,"start",!0,K),ue(K,"end",!1,ne)],{getAvailableHours:j,getAvailableMinutes:X,getAvailableSeconds:Q}=Ok(L,D,F),{timePickerOptions:he,getAvailableTime:ue,onSetOption:ge}=Tk({getAvailableHours:j,getAvailableMinutes:X,getAvailableSeconds:Q}),ie=ne=>ne?ye(ne)?ne.map(K=>ot(K,n.format).locale(r.value)):ot(ne,n.format).locale(r.value):null,ae=()=>{if(ye(p))return p.map(K=>ot(K).locale(r.value));const ne=ot(p).locale(r.value);return[ne,ne.add(60,"m")]};return a("set-picker-option",["parseUserInput",ie]),a("set-picker-option",["isValidValue",N]),a("set-picker-option",["handleKeydownInput",I]),a("set-picker-option",["getDefaultValue",ae]),a("set-picker-option",["getRangeAvailableTime",q]),a("set-picker-option",["handleCancel",S]),(ne,K)=>ne.actualVisible?(x(),B("div",{key:0,class:T([i(l).b("range-picker"),i(u).b("panel")])},[H("div",{class:T(i(l).be("range-picker","content"))},[H("div",{class:T(i(l).be("range-picker","cell"))},[H("div",{class:T(i(l).be("range-picker","header"))},Se(i(s)("el.datepicker.startTime")),3),H("div",{class:T(h.value)},[Y(uh,{ref:"minSpinner",role:"start","show-seconds":C.value,"am-pm-mode":E.value,"arrow-control":i(d),"spinner-date":b.value,"disabled-hours":L,"disabled-minutes":D,"disabled-seconds":F,onChange:O,onSetOption:i(ge),onSelectRange:z},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2),H("div",{class:T(i(l).be("range-picker","cell"))},[H("div",{class:T(i(l).be("range-picker","header"))},Se(i(s)("el.datepicker.endTime")),3),H("div",{class:T(m.value)},[Y(uh,{ref:"maxSpinner",role:"end","show-seconds":C.value,"am-pm-mode":E.value,"arrow-control":i(d),"spinner-date":k.value,"disabled-hours":L,"disabled-minutes":D,"disabled-seconds":F,onChange:R,onSetOption:i(ge),onSelectRange:W},null,8,["show-seconds","am-pm-mode","arrow-control","spinner-date","onSetOption"])],2)],2)],2),H("div",{class:T(i(l).be("panel","footer"))},[H("button",{type:"button",class:T([i(l).be("panel","btn"),"cancel"]),onClick:K[0]||(K[0]=Z=>S())},Se(i(s)("el.datepicker.cancel")),3),H("button",{type:"button",class:T([i(l).be("panel","btn"),"confirm"]),disabled:_.value,onClick:K[1]||(K[1]=Z=>$())},Se(i(s)("el.datepicker.confirm")),11,O8)],2)],2)):te("v-if",!0)}}),R8=N8,yc={exports:{}},I8=yc.exports,zy;function P8(){return zy||(zy=1,(function(e,t){(function(n,a){e.exports=a()})(I8,(function(){var n={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"},a=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|Q|YYYY|YY?|ww?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,o=/\d/,s=/\d\d/,r=/\d\d?/,l=/\d*[^-_:/,()\s\d]+/,u={},c=function(m){return(m=+m)+(m>68?1900:2e3)},d=function(m){return function(b){this[m]=+b}},f=[/[+-]\d\d:?(\d\d)?|Z/,function(m){(this.zone||(this.zone={})).offset=(function(b){if(!b||b==="Z")return 0;var k=b.match(/([+-]|\d\d)/g),y=60*k[1]+(+k[2]||0);return y===0?0:k[0]==="+"?-y:y})(m)}],v=function(m){var b=u[m];return b&&(b.indexOf?b:b.s.concat(b.f))},g=function(m,b){var k,y=u.meridiem;if(y){for(var S=1;S<=24;S+=1)if(m.indexOf(y(S,0,b))>-1){k=S>12;break}}else k=m===(b?"pm":"PM");return k},p={A:[l,function(m){this.afternoon=g(m,!1)}],a:[l,function(m){this.afternoon=g(m,!0)}],Q:[o,function(m){this.month=3*(m-1)+1}],S:[o,function(m){this.milliseconds=100*+m}],SS:[s,function(m){this.milliseconds=10*+m}],SSS:[/\d{3}/,function(m){this.milliseconds=+m}],s:[r,d("seconds")],ss:[r,d("seconds")],m:[r,d("minutes")],mm:[r,d("minutes")],H:[r,d("hours")],h:[r,d("hours")],HH:[r,d("hours")],hh:[r,d("hours")],D:[r,d("day")],DD:[s,d("day")],Do:[l,function(m){var b=u.ordinal,k=m.match(/\d+/);if(this.day=k[0],b)for(var y=1;y<=31;y+=1)b(y).replace(/\[|\]/g,"")===m&&(this.day=y)}],w:[r,d("week")],ww:[s,d("week")],M:[r,d("month")],MM:[s,d("month")],MMM:[l,function(m){var b=v("months"),k=(v("monthsShort")||b.map((function(y){return y.slice(0,3)}))).indexOf(m)+1;if(k<1)throw new Error;this.month=k%12||k}],MMMM:[l,function(m){var b=v("months").indexOf(m)+1;if(b<1)throw new Error;this.month=b%12||b}],Y:[/[+-]?\d+/,d("year")],YY:[s,function(m){this.year=c(m)}],YYYY:[/\d{4}/,d("year")],Z:f,ZZ:f};function h(m){var b,k;b=m,k=u&&u.formats;for(var y=(m=b.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(N,A,_){var V=_&&_.toUpperCase();return A||k[_]||n[_]||k[V].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(z,U,W){return U||W.slice(1)}))}))).match(a),S=y.length,C=0;C-1)return new Date((I==="X"?1e3:1)*P);var F=h(I)(P),q=F.year,j=F.month,X=F.day,Q=F.hours,he=F.minutes,ue=F.seconds,ge=F.milliseconds,ie=F.zone,ae=F.week,ne=new Date,K=X||(q||j?1:ne.getDate()),Z=q||ne.getFullYear(),re=0;q&&!j||(re=j>0?j-1:ne.getMonth());var ce,ve=Q||0,ke=he||0,Re=ue||0,Ie=ge||0;return ie?new Date(Date.UTC(Z,re,K,ve,ke,Re,Ie+60*ie.offset*1e3)):L?new Date(Date.UTC(Z,re,K,ve,ke,Re,Ie)):(ce=new Date(Z,re,K,ve,ke,Re,Ie),ae&&(ce=D(ce).week(ae).toDate()),ce)}catch{return new Date("")}})(E,R,$,k),this.init(),V&&V!==!0&&(this.$L=this.locale(V).$L),_&&E!=this.format(R)&&(this.$d=new Date("")),u={}}else if(R instanceof Array)for(var z=R.length,U=1;U<=z;U+=1){O[1]=R[U-1];var W=k.apply(this,O);if(W.isValid()){this.$d=W.$d,this.$L=W.$L,this.init();break}U===z&&(this.$d=new Date(""))}else S.call(this,C)}}}))})(yc)),yc.exports}var M8=P8();const um=bs(M8);ot.extend(um);var _8=se({name:"ElTimePicker",install:null,props:{...im,isRange:Boolean},emits:[tt],setup(e,t){const n=M(),[a,o]=e.isRange?["timerange",R8]:["time",ad],s=r=>t.emit(tt,r);return St(rm,e.popperOptions),t.expose({focus:()=>{n.value?.focus()},blur:()=>{n.value?.blur()},handleOpen:()=>{n.value?.handleOpen()},handleClose:()=>{n.value?.handleClose()}}),()=>{const r=e.format??wl;return Y(gk,dt(e,{ref:n,type:a,format:r,"onUpdate:modelValue":s}),{default:l=>Y(o,l,null)})}}});const A8=st(_8),us=Ce({type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"},closable:Boolean,disableTransitions:Boolean,hit:Boolean,color:String,size:{type:String,values:ro},effect:{type:String,values:["dark","light","plain"],default:"light"},round:Boolean}),L8={close:e=>e instanceof MouseEvent,click:e=>e instanceof MouseEvent},D8=["aria-label"],B8=["aria-label"];var F8=se({name:"ElTag",__name:"tag",props:us,emits:L8,setup(e,{emit:t}){const n=e,a=t,o=Sn(),{t:s}=Ct(),r=fe("tag"),l=w(()=>{const{type:f,hit:v,effect:g,closable:p,round:h}=n;return[r.b(),r.is("closable",p),r.m(f||"primary"),r.m(o.value),r.m(g),r.is("hit",v),r.is("round",h)]}),u=f=>{a("close",f)},c=f=>{a("click",f)},d=f=>{f?.component?.subTree?.component?.bum&&(f.component.subTree.component.bum=null)};return(f,v)=>e.disableTransitions?(x(),B("span",{key:0,class:T(l.value),style:Ke({backgroundColor:e.color}),onClick:c},[H("span",{class:T(i(r).e("content"))},[ee(f.$slots,"default")],2),e.closable?(x(),B("button",{key:0,"aria-label":i(s)("el.tag.close"),class:T(i(r).e("close")),type:"button",onClick:Ge(u,["stop"])},[Y(i(De),null,{default:J(()=>[Y(i(Ha))]),_:1})],10,D8)):te("v-if",!0)],6)):(x(),oe(Vn,{key:1,name:`${i(r).namespace.value}-zoom-in-center`,appear:"",onVnodeMounted:d},{default:J(()=>[H("span",{class:T(l.value),style:Ke({backgroundColor:e.color}),onClick:c},[H("span",{class:T(i(r).e("content"))},[ee(f.$slots,"default")],2),e.closable?(x(),B("button",{key:0,"aria-label":i(s)("el.tag.close"),class:T(i(r).e("close")),type:"button",onClick:Ge(u,["stop"])},[Y(i(De),null,{default:J(()=>[Y(i(Ha))]),_:1})],10,B8)):te("v-if",!0)],6)]),_:3},8,["name"]))}}),V8=F8;const ts=st(V8),Rk=Symbol("ElSelectGroup"),bu=Symbol("ElSelect"),od={label:"label",value:"value",disabled:"disabled",options:"options"};function yu(e){const t=M({...od,...e.props});let n={...e.props};return le(()=>e.props,l=>{on(l,n)||(t.value={...od,...l},n={...l})},{deep:!0}),{aliasProps:t,getLabel:l=>yn(l,t.value.label),getValue:l=>yn(l,t.value.value),getDisabled:l=>yn(l,t.value.disabled),getOptions:l=>yn(l,t.value.options)}}const Ik=Ce({name:String,id:String,modelValue:{type:G([Array,String,Number,Boolean,Object]),default:void 0},autocomplete:{type:String,default:"off"},automaticDropdown:Boolean,size:Tn,effect:{type:G(String),default:"light"},disabled:{type:Boolean,default:void 0},clearable:Boolean,filterable:Boolean,allowCreate:Boolean,loading:Boolean,popperClass:{type:String,default:""},popperStyle:{type:G([String,Object])},popperOptions:{type:G(Object),default:()=>({})},remote:Boolean,debounce:{type:Number,default:300},loadingText:String,noMatchText:String,noDataText:String,remoteMethod:{type:G(Function)},filterMethod:{type:G(Function)},multiple:Boolean,multipleLimit:{type:Number,default:0},placeholder:{type:String},defaultFirstOption:Boolean,reserveKeyword:{type:Boolean,default:!0},valueKey:{type:String,default:"value"},collapseTags:Boolean,collapseTagsTooltip:Boolean,tagTooltip:{type:G(Object),default:()=>({})},maxCollapseTags:{type:Number,default:1},teleported:zt.teleported,persistent:{type:Boolean,default:!0},clearIcon:{type:Kt,default:Fo},fitInputWidth:Boolean,suffixIcon:{type:Kt,default:Bo},tagType:{...us.type,default:"info"},tagEffect:{...us.effect,default:"light"},validateEvent:{type:Boolean,default:!0},remoteShowSuffix:Boolean,showArrow:{type:Boolean,default:!0},offset:{type:Number,default:12},placement:{type:G(String),values:Lo,default:"bottom-start"},fallbackPlacements:{type:G(Array),default:["bottom-start","top-start","right","left"]},tabindex:{type:[String,Number],default:0},appendTo:zt.appendTo,options:{type:G(Array)},props:{type:G(Object),default:()=>od},...Ir,...aa(["ariaLabel"])});ZC.scroll;const ch="ElOption",z8=Ce({value:{type:[String,Number,Boolean,Object],required:!0},label:{type:[String,Number]},created:Boolean,disabled:Boolean});function H8(e,t){const n=_e(bu);n||en(ch,"usage: ");const a=_e(Rk,{disabled:!1}),o=w(()=>d(Rn(n.props.modelValue),e.value)),s=w(()=>{if(n.props.multiple){const g=Rn(n.props.modelValue??[]);return!o.value&&g.length>=n.props.multipleLimit&&n.props.multipleLimit>0}else return!1}),r=w(()=>e.label??(nt(e.value)?"":e.value)),l=w(()=>e.value||e.label||""),u=w(()=>e.disabled||t.groupDisabled||s.value),c=ft(),d=(g=[],p)=>{if(nt(e.value)){const h=n.props.valueKey;return g&&g.some(m=>qt(yn(m,h))===yn(p,h))}else return g&&g.includes(p)},f=()=>{u.value||(n.states.hoveringIndex=n.optionsArray.indexOf(c.proxy))},v=g=>{t.visible=new RegExp(Pv(g),"i").test(String(r.value))||e.created};return le(()=>r.value,()=>{!e.created&&!n.props.remote&&n.setSelected()}),le(()=>e.value,(g,p)=>{const{remote:h,valueKey:m}=n.props;if((h?g!==p:!on(g,p))&&(n.onOptionDestroy(p,c.proxy),n.onOptionCreate(c.proxy)),!e.created&&!h){if(m&&nt(g)&&nt(p)&&g[m]===p[m])return;n.setSelected()}}),le(()=>a.disabled,()=>{t.groupDisabled=a.disabled},{immediate:!0}),{select:n,currentLabel:r,currentValue:l,itemSelected:o,isDisabled:u,hoverItem:f,updateOption:v}}var K8=se({name:ch,componentName:ch,props:z8,setup(e){const t=fe("select"),n=zn(),a=w(()=>[t.be("dropdown","item"),t.is("disabled",i(l)),t.is("selected",i(r)),t.is("hovering",i(v))]),o=At({index:-1,groupDisabled:!1,visible:!0,hover:!1}),{currentLabel:s,itemSelected:r,isDisabled:l,select:u,hoverItem:c,updateOption:d}=H8(e,o),{visible:f,hover:v}=Mn(o),g=ft().proxy;u.onOptionCreate(g),Bt(()=>{const h=g.value;Ne(()=>{const{selected:m}=u.states,b=m.some(k=>k.value===g.value);u.states.cachedOptions.get(h)===g&&!b&&u.states.cachedOptions.delete(h)}),u.onOptionDestroy(h,g)});function p(){l.value||u.handleOptionSelect(g)}return{ns:t,id:n,containerKls:a,currentLabel:s,itemSelected:r,isDisabled:l,select:u,visible:f,hover:v,states:o,hoverItem:c,updateOption:d,selectOptionClick:p}}});const W8=["id","aria-disabled","aria-selected"];function j8(e,t,n,a,o,s){return ct((x(),B("li",{id:e.id,class:T(e.containerKls),role:"option","aria-disabled":e.isDisabled||void 0,"aria-selected":e.itemSelected,onMousemove:t[0]||(t[0]=(...r)=>e.hoverItem&&e.hoverItem(...r)),onClick:t[1]||(t[1]=Ge((...r)=>e.selectOptionClick&&e.selectOptionClick(...r),["stop"]))},[ee(e.$slots,"default",{},()=>[H("span",null,Se(e.currentLabel),1)])],42,W8)),[[Pt,e.visible]])}var cm=$n(K8,[["render",j8]]),U8=se({name:"ElOptionGroup",componentName:"ElOptionGroup",props:{label:String,disabled:Boolean},setup(e){const t=fe("select"),n=M(),a=ft(),o=M([]);St(Rk,At({...Mn(e)}));const s=w(()=>o.value.some(c=>c.visible===!0)),r=c=>c.type.name==="ElOption"&&!!c.component?.proxy,l=c=>{const d=Rn(c),f=[];return d.forEach(v=>{Ut(v)&&(r(v)?f.push(v.component.proxy):ye(v.children)&&v.children.length?f.push(...l(v.children)):v.component?.subTree&&f.push(...l(v.component.subTree)))}),f},u=()=>{o.value=l(a.subTree)};return ht(()=>{u()}),su(n,u,{attributes:!0,subtree:!0,childList:!0}),{groupRef:n,visible:s,ns:t}}});function q8(e,t,n,a,o,s){return ct((x(),B("ul",{ref:"groupRef",class:T(e.ns.be("group","wrap"))},[H("li",{class:T(e.ns.be("group","title"))},Se(e.label),3),H("li",null,[H("ul",{class:T(e.ns.b("group"))},[ee(e.$slots,"default")],2)])],2)),[[Pt,e.visible]])}var dm=$n(U8,[["render",q8]]),Y8=se({name:"ElSelectDropdown",componentName:"ElSelectDropdown",setup(){const e=_e(bu),t=fe("select"),n=w(()=>e.props.popperClass),a=w(()=>e.props.multiple),o=w(()=>e.props.fitInputWidth),s=M("");function r(){const l=e.selectRef?.offsetWidth;l?s.value=`${l-q1}px`:s.value=""}return ht(()=>{r(),Zt(e.selectRef,r)}),{ns:t,minWidth:s,popperClass:n,isMultiple:a,isFitInputWidth:o}}});function G8(e,t,n,a,o,s){return x(),B("div",{class:T([e.ns.b("dropdown"),e.ns.is("multiple",e.isMultiple),e.popperClass]),style:Ke({[e.isFitInputWidth?"width":"minWidth"]:e.minWidth})},[e.$slots.header?(x(),B("div",{key:0,class:T(e.ns.be("dropdown","header"))},[ee(e.$slots,"header")],2)):te("v-if",!0),ee(e.$slots,"default"),e.$slots.footer?(x(),B("div",{key:1,class:T(e.ns.be("dropdown","footer"))},[ee(e.$slots,"footer")],2)):te("v-if",!0)],6)}var X8=$n(Y8,[["render",G8]]);const J8=(e,t)=>{const{t:n}=Ct(),a=hn(),o=zn(),s=fe("select"),r=fe("input"),l=At({inputValue:"",options:new Map,cachedOptions:new Map,optionValues:[],selected:[],selectionWidth:0,collapseItemWidth:0,selectedLabel:"",hoveringIndex:-1,previousQuery:null,inputHovering:!1,menuVisibleOnFocus:!1,isBeforeHide:!1}),u=M(),c=M(),d=M(),f=M(),v=M(),g=M(),p=M(),h=M(),m=M(),b=M(),k=M(),y=M(!1),S=M(),C=M(!1),{form:E,formItem:$}=Dn(),{inputId:O}=Ia(e,{formItemContext:$}),{valueOnClear:R,isEmptyValue:N}=hu(e),{isComposing:A,handleCompositionStart:_,handleCompositionUpdate:V,handleCompositionEnd:z}=pu({afterComposition:Te=>Nt(Te)}),U=ln(),{wrapperRef:W,isFocused:P,handleBlur:I}=ms(v,{disabled:U,afterFocus(){e.automaticDropdown&&!y.value&&(y.value=!0,l.menuVisibleOnFocus=!0)},beforeBlur(Te){return d.value?.isFocusInsideContent(Te)||f.value?.isFocusInsideContent(Te)},afterBlur(){y.value=!1,l.menuVisibleOnFocus=!1,e.validateEvent&&$?.validate?.("blur").catch(Te=>pt(Te))}}),L=w(()=>ye(e.modelValue)?e.modelValue.length>0:!N(e.modelValue)),D=w(()=>E?.statusIcon??!1),F=w(()=>e.clearable&&!U.value&&L.value&&(P.value||l.inputHovering)),q=w(()=>e.remote&&e.filterable&&!e.remoteShowSuffix?"":e.suffixIcon),j=w(()=>s.is("reverse",!!(q.value&&y.value))),X=w(()=>$?.validateState||""),Q=w(()=>X.value&&nf[X.value]),he=w(()=>e.remote?e.debounce:0),ue=w(()=>e.remote&&!l.inputValue&&l.options.size===0),ge=w(()=>e.loading?e.loadingText||n("el.select.loading"):e.filterable&&l.inputValue&&l.options.size>0&&ie.value===0?e.noMatchText||n("el.select.noMatch"):l.options.size===0?e.noDataText||n("el.select.noData"):null),ie=w(()=>ae.value.filter(Te=>Te.visible).length),ae=w(()=>{const Te=Array.from(l.options.values()),vt=[];return l.optionValues.forEach(Lt=>{const Yt=Te.findIndex(En=>En.value===Lt);Yt>-1&&vt.push(Te[Yt])}),vt.length>=Te.length?vt:Te}),ne=w(()=>Array.from(l.cachedOptions.values())),K=w(()=>{const Te=ae.value.filter(vt=>!vt.created).some(vt=>vt.currentLabel===l.inputValue);return e.filterable&&e.allowCreate&&l.inputValue!==""&&!Te}),Z=()=>{e.filterable&&Ve(e.filterMethod)||e.filterable&&e.remote&&Ve(e.remoteMethod)||ae.value.forEach(Te=>{Te.updateOption?.(l.inputValue)})},re=Sn(),ce=w(()=>["small"].includes(re.value)?"small":"default"),ve=w({get(){return y.value&&(e.loading||!ue.value||e.remote&&!!a.empty)&&(!C.value||!ia(l.previousQuery))},set(Te){y.value=Te}}),ke=w(()=>{if(e.multiple&&!Tt(e.modelValue))return Rn(e.modelValue).length===0&&!l.inputValue;const Te=ye(e.modelValue)?e.modelValue[0]:e.modelValue;return e.filterable||Tt(Te)?!l.inputValue:!0}),Re=w(()=>{const Te=e.placeholder??n("el.select.placeholder");return e.multiple||!L.value?Te:l.selectedLabel}),Ie=w(()=>Xc?null:"mouseenter");le(()=>e.modelValue,(Te,vt)=>{e.multiple&&e.filterable&&!e.reserveKeyword&&(l.inputValue="",$e("")),Ee(),!on(Te,vt)&&e.validateEvent&&$?.validate("change").catch(Lt=>pt(Lt))},{flush:"post",deep:!0}),le(()=>y.value,Te=>{Te?$e(l.inputValue):(l.inputValue="",l.previousQuery=null,l.isBeforeHide=!0,l.menuVisibleOnFocus=!1)}),le(()=>l.options.entries(),()=>{Mt&&(Ee(),e.defaultFirstOption&&(e.filterable||e.remote)&&ie.value&&pe())},{flush:"post"}),le([()=>l.hoveringIndex,ae],([Te])=>{He(Te)&&Te>-1?S.value=ae.value[Te]||{}:S.value={},ae.value.forEach(vt=>{vt.hover=S.value===vt})}),wa(()=>{l.isBeforeHide||Z()});const $e=Te=>{l.previousQuery===Te||A.value||(l.previousQuery=Te,e.filterable&&Ve(e.filterMethod)?e.filterMethod(Te):e.filterable&&e.remote&&Ve(e.remoteMethod)&&e.remoteMethod(Te),e.defaultFirstOption&&(e.filterable||e.remote)&&ie.value?Ne(pe):Ne(Me))},pe=()=>{const Te=ae.value.filter(Yt=>Yt.visible&&!Yt.disabled&&!Yt.states.groupDisabled),vt=Te.find(Yt=>Yt.created),Lt=Te[0];l.hoveringIndex=Ye(ae.value.map(Yt=>Yt.value),vt||Lt)},Ee=()=>{if(e.multiple)l.selectedLabel="";else{const vt=me(ye(e.modelValue)?e.modelValue[0]:e.modelValue);l.selectedLabel=vt.currentLabel,l.selected=[vt];return}const Te=[];Tt(e.modelValue)||Rn(e.modelValue).forEach(vt=>{Te.push(me(vt))}),l.selected=Te},me=Te=>{let vt;const Lt=mi(Te);for(let Yt=l.cachedOptions.size-1;Yt>=0;Yt--){const En=ne.value[Yt];if(Lt?yn(En.value,e.valueKey)===yn(Te,e.valueKey):En.value===Te){vt={index:ae.value.filter(ho=>!ho.created).indexOf(En),value:Te,currentLabel:En.currentLabel,get isDisabled(){return En.isDisabled}};break}}return vt||{index:-1,value:Te,currentLabel:Lt?Te.label:Te??""}},Me=()=>{const Te=l.selected.length;if(Te>0){const vt=l.selected[Te-1];l.hoveringIndex=ae.value.findIndex(Lt=>oa(vt)===oa(Lt))}else l.hoveringIndex=-1},We=()=>{l.selectionWidth=Number.parseFloat(window.getComputedStyle(c.value).width)},Xe=()=>{l.collapseItemWidth=b.value.getBoundingClientRect().width},Pe=()=>{d.value?.updatePopper?.()},Ae=()=>{f.value?.updatePopper?.()},je=()=>{l.inputValue.length>0&&!y.value&&(y.value=!0),$e(l.inputValue)},Nt=Te=>{if(l.inputValue=Te.target.value,e.remote)C.value=!0,Ue();else return je()},Ue=ou(()=>{je(),C.value=!1},he),rt=Te=>{on(e.modelValue,Te)||t(bt,Te)},mt=Te=>NS(Te,vt=>{const Lt=l.cachedOptions.get(vt);return!Lt?.disabled&&!Lt?.states.groupDisabled}),kt=Te=>{const vt=jt(Te);if(e.multiple&&vt!==we.delete&&Te.target.value.length<=0){const Lt=Rn(e.modelValue).slice(),Yt=mt(Lt);if(Yt<0)return;const En=Lt[Yt];Lt.splice(Yt,1),t(tt,Lt),rt(Lt),t("remove-tag",En)}},be=(Te,vt)=>{const Lt=l.selected.indexOf(vt);if(Lt>-1&&!U.value){const Yt=Rn(e.modelValue).slice();Yt.splice(Lt,1),t(tt,Yt),rt(Yt),t("remove-tag",vt.value)}Te.stopPropagation(),ut()},ze=Te=>{Te.stopPropagation();const vt=e.multiple?[]:R.value;if(e.multiple)for(const Lt of l.selected)Lt.isDisabled&&vt.push(Lt.value);t(tt,vt),rt(vt),l.hoveringIndex=-1,y.value=!1,t("clear"),ut()},de=Te=>{if(e.multiple){const vt=Rn(e.modelValue??[]).slice(),Lt=Ye(vt,Te);Lt>-1?vt.splice(Lt,1):(e.multipleLimit<=0||vt.length{$t(Te)})},Ye=(Te,vt)=>Tt(vt)?-1:nt(vt.value)?Te.findIndex(Lt=>on(yn(Lt,e.valueKey),oa(vt))):Te.indexOf(vt.value),$t=Te=>{const vt=ye(Te)?Te[Te.length-1]:Te;let Lt=null;if(!gn(vt?.value)){const Yt=ae.value.filter(En=>En.value===vt.value);Yt.length>0&&(Lt=Yt[0].$el)}if(d.value&&Lt){const Yt=d.value?.popperRef?.contentRef?.querySelector?.(`.${s.be("dropdown","wrap")}`);Yt&&Av(Yt,Lt)}k.value?.handleScroll()},Qt=Te=>{l.options.set(Te.value,Te),l.cachedOptions.set(Te.value,Te)},_n=(Te,vt)=>{l.options.get(Te)===vt&&l.options.delete(Te)},Be=w(()=>d.value?.popperRef?.contentRef),et=()=>{l.isBeforeHide=!1,Ne(()=>{k.value?.update(),$t(l.selected)})},ut=()=>{v.value?.focus()},kn=()=>{if(y.value){y.value=!1,Ne(()=>v.value?.blur());return}v.value?.blur()},Wt=Te=>{ze(Te)},bn=Te=>{if(y.value=!1,P.value){const vt=new FocusEvent("blur",Te);Ne(()=>I(vt))}},Je=()=>{l.inputValue.length>0?l.inputValue="":y.value=!1},Ze=Te=>{U.value||e.filterable&&y.value&&Te&&!p.value?.contains(Te.target)||(Xc&&(l.inputHovering=!0),l.menuVisibleOnFocus?l.menuVisibleOnFocus=!1:y.value=!y.value)},gt=()=>{if(!y.value)Ze();else{const Te=ae.value[l.hoveringIndex];Te&&!Te.isDisabled&&de(Te)}},oa=Te=>nt(Te.value)?yn(Te.value,e.valueKey):Te.value,po=w(()=>ae.value.filter(Te=>Te.visible).every(Te=>Te.isDisabled)),Ka=w(()=>e.multiple?e.collapseTags?l.selected.slice(0,e.maxCollapseTags):l.selected:[]),Ou=w(()=>e.multiple?e.collapseTags?l.selected.slice(e.maxCollapseTags):[]:[]),Ws=Te=>{if(!y.value){y.value=!0;return}if(!(l.options.size===0||ie.value===0||A.value)&&!po.value){Te==="next"?(l.hoveringIndex++,l.hoveringIndex===l.options.size&&(l.hoveringIndex=0)):Te==="prev"&&(l.hoveringIndex--,l.hoveringIndex<0&&(l.hoveringIndex=l.options.size-1));const vt=ae.value[l.hoveringIndex];(vt.isDisabled||!vt.visible)&&Ws(Te),Ne(()=>$t(S.value))}},Nu=(Te,vt,Lt,Yt)=>{for(let En=vt;En>=0&&En{const Lt=l.options.size;if(Lt===0)return;const Yt=nr(Te,0,Lt-1),En=ae.value,ho=vt==="up"?-1:1,Ar=Nu(En,Yt,ho,Lt)??Nu(En,Yt-ho,-ho,Lt);Ar!=null&&(l.hoveringIndex=Ar,Ne(()=>$t(S.value)))},yf=Te=>{const vt=jt(Te);let Lt=!0;switch(vt){case we.up:Ws("prev");break;case we.down:Ws("next");break;case we.enter:case we.numpadEnter:A.value||gt();break;case we.esc:Je();break;case we.backspace:Lt=!1,kt(Te);return;case we.home:if(!y.value)return;zo(0,"down");break;case we.end:if(!y.value)return;zo(l.options.size-1,"up");break;case we.pageUp:if(!y.value)return;zo(l.hoveringIndex-10,"up");break;case we.pageDown:if(!y.value)return;zo(l.hoveringIndex+10,"down");break;default:Lt=!1;break}Lt&&(Te.preventDefault(),Te.stopPropagation())},wf=()=>{if(!c.value)return 0;const Te=window.getComputedStyle(c.value);return Number.parseFloat(Te.gap||"6px")},Sf=w(()=>{const Te=wf(),vt=e.filterable?Te+Ad:0;return{maxWidth:`${b.value&&e.maxCollapseTags===1?l.selectionWidth-l.collapseItemWidth-Te-vt:l.selectionWidth-vt}px`}}),Cf=w(()=>({maxWidth:`${l.selectionWidth}px`})),kf=Te=>{t("popup-scroll",Te)};Zt(c,We),Zt(W,Pe),Zt(m,Ae),Zt(b,Xe);let _r;return le(()=>ve.value,Te=>{Te?_r=Zt(h,Pe).stop:(_r?.(),_r=void 0),t("visible-change",Te)}),ht(()=>{Ee()}),{inputId:O,contentId:o,nsSelect:s,nsInput:r,states:l,isFocused:P,expanded:y,optionsArray:ae,hoverOption:S,selectSize:re,filteredOptionsCount:ie,updateTooltip:Pe,updateTagTooltip:Ae,debouncedOnInputChange:Ue,onInput:Nt,deletePrevTag:kt,deleteTag:be,deleteSelected:ze,handleOptionSelect:de,scrollToOption:$t,hasModelValue:L,shouldShowPlaceholder:ke,currentPlaceholder:Re,mouseEnterEventName:Ie,needStatusIcon:D,showClearBtn:F,iconComponent:q,iconReverse:j,validateState:X,validateIcon:Q,showNewOption:K,updateOptions:Z,collapseTagSize:ce,setSelected:Ee,selectDisabled:U,emptyText:ge,handleCompositionStart:_,handleCompositionUpdate:V,handleCompositionEnd:z,handleKeydown:yf,onOptionCreate:Qt,onOptionDestroy:_n,handleMenuEnter:et,focus:ut,blur:kn,handleClearClick:Wt,handleClickOutside:bn,handleEsc:Je,toggleMenu:Ze,selectOption:gt,getValueKey:oa,navigateOptions:Ws,dropdownMenuVisible:ve,showTagList:Ka,collapseTagList:Ou,popupScroll:kf,getOption:me,tagStyle:Sf,collapseTagStyle:Cf,popperRef:Be,inputRef:v,tooltipRef:d,tagTooltipRef:f,prefixRef:g,suffixRef:p,selectRef:u,wrapperRef:W,selectionRef:c,scrollbarRef:k,menuRef:h,tagMenuRef:m,collapseItemRef:b}};var Z8=se({name:"ElOptions",setup(e,{slots:t}){const n=_e(bu);let a=[];return()=>{const o=t.default?.(),s=[];function r(l){ye(l)&&l.forEach(u=>{const c=(u?.type||{})?.name;c==="ElOptionGroup"?r(!Le(u.children)&&!ye(u.children)&&Ve(u.children?.default)?u.children?.default():u.children):c==="ElOption"?s.push(u.props?.value):ye(u.children)&&r(u.children)})}return o.length&&r(o[0]?.children),on(s,a)||(a=s,n&&(n.states.optionValues=s)),o}}});const Hy="ElSelect",Ai=new WeakMap,Q8=e=>(...t)=>{const n=t[0];if(!n||n.includes('Slot "default" invoked outside of the render function')&&t[2]?.includes("ElTreeSelect"))return;const a=Ai.get(e)?.originalWarnHandler;if(a){a(...t);return}console.warn(...t)},eF=e=>{let t=Ai.get(e);return t||(t={originalWarnHandler:e.config.warnHandler,handler:Q8(e),count:0},Ai.set(e,t)),t};var tF=se({name:Hy,componentName:Hy,components:{ElSelectMenu:X8,ElOption:cm,ElOptions:Z8,ElOptionGroup:dm,ElTag:ts,ElScrollbar:no,ElTooltip:Ln,ElIcon:De},directives:{ClickOutside:zs},props:Ik,emits:[tt,bt,"remove-tag","clear","visible-change","focus","blur","popup-scroll"],setup(e,{emit:t,slots:n}){const a=ft(),o=eF(a.appContext);o.count+=1,a.appContext.config.warnHandler=o.handler;const s=w(()=>{const{modelValue:k,multiple:y}=e,S=y?[]:void 0;return ye(k)?y?k:S:y?S:k}),r=At({...Mn(e),modelValue:s}),l=J8(r,t),{calculatorRef:u,inputStyle:c}=Iv(),{getLabel:d,getValue:f,getOptions:v,getDisabled:g}=yu(e),p=k=>({label:d(k),value:f(k),disabled:g(k)}),h=k=>k.reduce((y,S)=>(y.push(S),S.children&&S.children.length>0&&y.push(...h(S.children)),y),[]),m=k=>{Ta(k||[]).forEach(y=>{if(nt(y)&&(y.type.name==="ElOption"||y.type.name==="ElTree")){const S=y.type.name;if(S==="ElTree")h(y.props?.data||[]).forEach(C=>{C.currentLabel=C.label||(nt(C.value)?"":C.value),l.onOptionCreate(C)});else if(S==="ElOption"){const C={...y.props};C.currentLabel=C.label||(nt(C.value)?"":C.value),l.onOptionCreate(C)}}})};le(()=>[e.persistent||l.expanded.value||!n.default?void 0:n.default?.(),s.value],()=>{e.persistent||l.expanded.value||(l.states.options.clear(),m(n.default?.()))},{immediate:!0}),St(bu,At({props:r,states:l.states,selectRef:l.selectRef,optionsArray:l.optionsArray,setSelected:l.setSelected,handleOptionSelect:l.handleOptionSelect,onOptionCreate:l.onOptionCreate,onOptionDestroy:l.onOptionDestroy}));const b=w(()=>e.multiple?l.states.selected.map(k=>k.currentLabel):l.states.selectedLabel);return Bt(()=>{const k=Ai.get(a.appContext);k&&(k.count-=1,k.count<=0&&(a.appContext.config.warnHandler=k.originalWarnHandler,Ai.delete(a.appContext)))}),{...l,modelValue:s,selectedLabel:b,calculatorRef:u,inputStyle:c,getLabel:d,getValue:f,getOptions:v,getDisabled:g,getOptionProps:p}}});const nF=["id","value","name","disabled","autocomplete","tabindex","readonly","aria-activedescendant","aria-controls","aria-expanded","aria-label"],aF=["textContent"],oF={key:1};function sF(e,t,n,a,o,s){const r=It("el-tag"),l=It("el-tooltip"),u=It("el-icon"),c=It("el-option"),d=It("el-option-group"),f=It("el-options"),v=It("el-scrollbar"),g=It("el-select-menu"),p=rv("click-outside");return ct((x(),B("div",dt({ref:"selectRef",class:[e.nsSelect.b(),e.nsSelect.m(e.selectSize)]},{[ti(e.mouseEnterEventName)]:t[11]||(t[11]=h=>e.states.inputHovering=!0)},{onMouseleave:t[12]||(t[12]=h=>e.states.inputHovering=!1)}),[Y(l,{ref:"tooltipRef",visible:e.dropdownMenuVisible,placement:e.placement,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"popper-style":e.popperStyle,"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,pure:"",trigger:"click",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,"stop-popper-mouse-event":!1,"gpu-acceleration":!1,persistent:e.persistent,"append-to":e.appendTo,"show-arrow":e.showArrow,offset:e.offset,onBeforeShow:e.handleMenuEnter,onHide:t[10]||(t[10]=h=>e.states.isBeforeHide=!1)},{default:J(()=>[H("div",{ref:"wrapperRef",class:T([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)]),onClick:t[7]||(t[7]=Ge((...h)=>e.toggleMenu&&e.toggleMenu(...h),["prevent"]))},[e.$slots.prefix?(x(),B("div",{key:0,ref:"prefixRef",class:T(e.nsSelect.e("prefix"))},[ee(e.$slots,"prefix")],2)):te("v-if",!0),H("div",{ref:"selectionRef",class:T([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.states.selected.length)])},[e.multiple?ee(e.$slots,"tag",{key:0,data:e.states.selected,deleteTag:e.deleteTag,selectDisabled:e.selectDisabled},()=>[(x(!0),B(Fe,null,yt(e.showTagList,h=>(x(),B("div",{key:e.getValueKey(h),class:T(e.nsSelect.e("selected-item"))},[Y(r,{closable:!e.selectDisabled&&!h.isDisabled,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:Ke(e.tagStyle),onClose:m=>e.deleteTag(m,h)},{default:J(()=>[H("span",{class:T(e.nsSelect.e("tags-text"))},[ee(e.$slots,"label",{index:h.index,label:h.currentLabel,value:h.value},()=>[wt(Se(h.currentLabel),1)])],2)]),_:2},1032,["closable","size","type","effect","style","onClose"])],2))),128)),e.collapseTags&&e.states.selected.length>e.maxCollapseTags?(x(),oe(l,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":e.tagTooltip?.fallbackPlacements??["bottom","top","right","left"],effect:e.tagTooltip?.effect??e.effect,placement:e.tagTooltip?.placement??"bottom","popper-class":e.tagTooltip?.popperClass??e.popperClass,"popper-style":e.tagTooltip?.popperStyle??e.popperStyle,teleported:e.tagTooltip?.teleported??e.teleported,"append-to":e.tagTooltip?.appendTo??e.appendTo,"popper-options":e.tagTooltip?.popperOptions??e.popperOptions,transition:e.tagTooltip?.transition,"show-after":e.tagTooltip?.showAfter,"hide-after":e.tagTooltip?.hideAfter,"auto-close":e.tagTooltip?.autoClose,offset:e.tagTooltip?.offset},{default:J(()=>[H("div",{ref:"collapseItemRef",class:T(e.nsSelect.e("selected-item"))},[Y(r,{closable:!1,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:Ke(e.collapseTagStyle)},{default:J(()=>[H("span",{class:T(e.nsSelect.e("tags-text"))}," + "+Se(e.states.selected.length-e.maxCollapseTags),3)]),_:1},8,["size","type","effect","style"])],2)]),content:J(()=>[H("div",{ref:"tagMenuRef",class:T(e.nsSelect.e("selection"))},[(x(!0),B(Fe,null,yt(e.collapseTagList,h=>(x(),B("div",{key:e.getValueKey(h),class:T(e.nsSelect.e("selected-item"))},[Y(r,{class:"in-tooltip",closable:!e.selectDisabled&&!h.isDisabled,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",onClose:m=>e.deleteTag(m,h)},{default:J(()=>[H("span",{class:T(e.nsSelect.e("tags-text"))},[ee(e.$slots,"label",{index:h.index,label:h.currentLabel,value:h.value},()=>[wt(Se(h.currentLabel),1)])],2)]),_:2},1032,["closable","size","type","effect","onClose"])],2))),128))],2)]),_:3},8,["disabled","fallback-placements","effect","placement","popper-class","popper-style","teleported","append-to","popper-options","transition","show-after","hide-after","auto-close","offset"])):te("v-if",!0)]):te("v-if",!0),H("div",{class:T([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable||e.selectDisabled||!e.states.inputValue&&!e.isFocused)])},[H("input",{id:e.inputId,ref:"inputRef",value:e.states.inputValue,type:"text",name:e.name,class:T([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,autocomplete:e.autocomplete,style:Ke(e.inputStyle),tabindex:e.tabindex,role:"combobox",readonly:!e.filterable,spellcheck:"false","aria-activedescendant":e.hoverOption?.id||"","aria-controls":e.contentId,"aria-expanded":e.dropdownMenuVisible,"aria-label":e.ariaLabel,"aria-autocomplete":"none","aria-haspopup":"listbox",onKeydown:t[0]||(t[0]=(...h)=>e.handleKeydown&&e.handleKeydown(...h)),onCompositionstart:t[1]||(t[1]=(...h)=>e.handleCompositionStart&&e.handleCompositionStart(...h)),onCompositionupdate:t[2]||(t[2]=(...h)=>e.handleCompositionUpdate&&e.handleCompositionUpdate(...h)),onCompositionend:t[3]||(t[3]=(...h)=>e.handleCompositionEnd&&e.handleCompositionEnd(...h)),onInput:t[4]||(t[4]=(...h)=>e.onInput&&e.onInput(...h)),onChange:t[5]||(t[5]=Ge(()=>{},["stop"])),onClick:t[6]||(t[6]=Ge((...h)=>e.toggleMenu&&e.toggleMenu(...h),["stop"]))},null,46,nF),e.filterable?(x(),B("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:T(e.nsSelect.e("input-calculator")),textContent:Se(e.states.inputValue)},null,10,aF)):te("v-if",!0)],2),e.shouldShowPlaceholder?(x(),B("div",{key:1,class:T([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[e.hasModelValue?ee(e.$slots,"label",{key:0,index:e.getOption(e.modelValue).index,label:e.currentPlaceholder,value:e.modelValue},()=>[H("span",null,Se(e.currentPlaceholder),1)]):(x(),B("span",oF,Se(e.currentPlaceholder),1))],2)):te("v-if",!0)],2),H("div",{ref:"suffixRef",class:T(e.nsSelect.e("suffix"))},[e.iconComponent&&!e.showClearBtn?(x(),oe(u,{key:0,class:T([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.iconReverse])},{default:J(()=>[(x(),oe(it(e.iconComponent)))]),_:1},8,["class"])):te("v-if",!0),e.showClearBtn&&e.clearIcon?(x(),oe(u,{key:1,class:T([e.nsSelect.e("caret"),e.nsSelect.e("icon"),e.nsSelect.e("clear")]),onClick:e.handleClearClick},{default:J(()=>[(x(),oe(it(e.clearIcon)))]),_:1},8,["class","onClick"])):te("v-if",!0),e.validateState&&e.validateIcon&&e.needStatusIcon?(x(),oe(u,{key:2,class:T([e.nsInput.e("icon"),e.nsInput.e("validateIcon"),e.nsInput.is("loading",e.validateState==="validating")])},{default:J(()=>[(x(),oe(it(e.validateIcon)))]),_:1},8,["class"])):te("v-if",!0)],2)],2)]),content:J(()=>[Y(g,{ref:"menuRef"},{default:J(()=>[e.$slots.header?(x(),B("div",{key:0,class:T(e.nsSelect.be("dropdown","header")),onClick:t[8]||(t[8]=Ge(()=>{},["stop"]))},[ee(e.$slots,"header")],2)):te("v-if",!0),ct(Y(v,{id:e.contentId,ref:"scrollbarRef",tag:"ul","wrap-class":e.nsSelect.be("dropdown","wrap"),"view-class":e.nsSelect.be("dropdown","list"),class:T([e.nsSelect.is("empty",e.filteredOptionsCount===0)]),role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical",onScroll:e.popupScroll},{default:J(()=>[e.showNewOption?(x(),oe(c,{key:0,value:e.states.inputValue,created:!0},null,8,["value"])):te("v-if",!0),Y(f,null,{default:J(()=>[ee(e.$slots,"default",{},()=>[(x(!0),B(Fe,null,yt(e.options,(h,m)=>(x(),B(Fe,{key:m},[e.getOptions(h)?.length?(x(),oe(d,{key:0,label:e.getLabel(h),disabled:e.getDisabled(h)},{default:J(()=>[(x(!0),B(Fe,null,yt(e.getOptions(h),b=>(x(),oe(c,dt({key:e.getValue(b)},{ref_for:!0},e.getOptionProps(b)),null,16))),128))]),_:2},1032,["label","disabled"])):(x(),oe(c,dt({key:1,ref_for:!0},e.getOptionProps(h)),null,16))],64))),128))])]),_:3})]),_:3},8,["id","wrap-class","view-class","class","aria-label","onScroll"]),[[Pt,e.states.options.size>0&&!e.loading]]),e.$slots.loading&&e.loading?(x(),B("div",{key:1,class:T(e.nsSelect.be("dropdown","loading"))},[ee(e.$slots,"loading")],2)):e.loading||e.filteredOptionsCount===0?(x(),B("div",{key:2,class:T(e.nsSelect.be("dropdown","empty"))},[ee(e.$slots,"empty",{},()=>[H("span",null,Se(e.emptyText),1)])],2)):te("v-if",!0),e.$slots.footer?(x(),B("div",{key:3,class:T(e.nsSelect.be("dropdown","footer")),onClick:t[9]||(t[9]=Ge(()=>{},["stop"]))},[ee(e.$slots,"footer")],2)):te("v-if",!0)]),_:3},512)]),_:3},8,["visible","placement","teleported","popper-class","popper-style","popper-options","fallback-placements","effect","transition","persistent","append-to","show-arrow","offset","onBeforeShow"])],16)),[[p,e.handleClickOutside,e.popperRef]])}var rF=$n(tF,[["render",sF]]);const Hs=st(rF,{Option:cm,OptionGroup:dm}),sd=tn(cm),lF=tn(dm),iF=(e,t)=>{const n=e.subtract(1,"month").endOf("month").date();return _s(t).map((a,o)=>n-(t-o-1))},uF=e=>_s(e.daysInMonth()).map((t,n)=>n+1),cF=e=>_s(e.length/7).map(t=>{const n=t*7;return e.slice(n,n+7)}),dF=Ce({selectedDay:{type:G(Object)},range:{type:G(Array)},date:{type:G(Object),required:!0},hideHeader:{type:Boolean}}),fF={pick:e=>nt(e)};var wc={exports:{}},pF=wc.exports,Ky;function hF(){return Ky||(Ky=1,(function(e,t){(function(n,a){e.exports=a()})(pF,(function(){return function(n,a,o){var s=a.prototype,r=function(f){return f&&(f.indexOf?f:f.s)},l=function(f,v,g,p,h){var m=f.name?f:f.$locale(),b=r(m[v]),k=r(m[g]),y=b||k.map((function(C){return C.slice(0,p)}));if(!h)return y;var S=m.weekStart;return y.map((function(C,E){return y[(E+(S||0))%7]}))},u=function(){return o.Ls[o.locale()]},c=function(f,v){return f.formats[v]||(function(g){return g.replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(p,h,m){return h||m.slice(1)}))})(f.formats[v.toUpperCase()])},d=function(){var f=this;return{months:function(v){return v?v.format("MMMM"):l(f,"months")},monthsShort:function(v){return v?v.format("MMM"):l(f,"monthsShort","months",3)},firstDayOfWeek:function(){return f.$locale().weekStart||0},weekdays:function(v){return v?v.format("dddd"):l(f,"weekdays")},weekdaysMin:function(v){return v?v.format("dd"):l(f,"weekdaysMin","weekdays",2)},weekdaysShort:function(v){return v?v.format("ddd"):l(f,"weekdaysShort","weekdays",3)},longDateFormat:function(v){return c(f.$locale(),v)},meridiem:this.$locale().meridiem,ordinal:this.$locale().ordinal}};s.localeData=function(){return d.bind(this)()},o.localeData=function(){var f=u();return{firstDayOfWeek:function(){return f.weekStart||0},weekdays:function(){return o.weekdays()},weekdaysShort:function(){return o.weekdaysShort()},weekdaysMin:function(){return o.weekdaysMin()},months:function(){return o.months()},monthsShort:function(){return o.monthsShort()},longDateFormat:function(v){return c(f,v)},meridiem:f.meridiem,ordinal:f.ordinal}},o.months=function(){return l(u(),"months")},o.monthsShort=function(){return l(u(),"monthsShort","months",3)},o.weekdays=function(f){return l(u(),"weekdays",null,null,f)},o.weekdaysShort=function(f){return l(u(),"weekdaysShort","weekdays",3,f)},o.weekdaysMin=function(f){return l(u(),"weekdaysMin","weekdays",2,f)}}}))})(wc)),wc.exports}var vF=hF();const Pk=bs(vF),mF=(e,t)=>{ot.extend(Pk);const n=ot.localeData().firstDayOfWeek(),{t:a,lang:o}=Ct(),s=ot().locale(o.value),r=w(()=>!!e.range&&!!e.range.length),l=w(()=>{let v=[];if(r.value){const[g,p]=e.range,h=_s(p.date()-g.date()+1).map(k=>({text:g.date()+k,type:"current"}));let m=h.length%7;m=m===0?0:7-m;const b=_s(m).map((k,y)=>({text:y+1,type:"next"}));v=h.concat(b)}else{const g=e.date.startOf("month").day(),p=iF(e.date,(g-n+7)%7).map(b=>({text:b,type:"prev"})),h=uF(e.date).map(b=>({text:b,type:"current"}));v=[...p,...h];const m=_s(7-(v.length%7||7)).map((b,k)=>({text:k+1,type:"next"}));v=v.concat(m)}return cF(v)}),u=w(()=>{const v=n;return v===0?Af.map(g=>a(`el.datepicker.weeks.${g}`)):Af.slice(v).concat(Af.slice(0,v)).map(g=>a(`el.datepicker.weeks.${g}`))}),c=(v,g)=>{switch(g){case"prev":return e.date.startOf("month").subtract(1,"month").date(v);case"next":return e.date.startOf("month").add(1,"month").date(v);case"current":return e.date.date(v)}};return{now:s,isInRange:r,rows:l,weekDays:u,getFormattedDate:c,handlePickDay:({text:v,type:g})=>{t("pick",c(v,g))},getSlotData:({text:v,type:g})=>{const p=c(v,g);return{isSelected:p.isSame(e.selectedDay),type:`${g}-month`,day:p.format("YYYY-MM-DD"),date:p.toDate()}}}},gF={key:0},bF=["onClick"];var yF=se({name:"DateTable",__name:"date-table",props:dF,emits:fF,setup(e,{expose:t,emit:n}){const a=e,{isInRange:o,now:s,rows:r,weekDays:l,getFormattedDate:u,handlePickDay:c,getSlotData:d}=mF(a,n),f=fe("calendar-table"),v=fe("calendar-day"),g=({text:p,type:h})=>{const m=[h];if(h==="current"){const b=u(p,h);b.isSame(a.selectedDay,"day")&&m.push(v.is("selected")),b.isSame(s,"day")&&m.push(v.is("today"))}return m};return t({getFormattedDate:u}),(p,h)=>(x(),B("table",{class:T([i(f).b(),i(f).is("range",i(o))]),cellspacing:"0",cellpadding:"0"},[e.hideHeader?te("v-if",!0):(x(),B("thead",gF,[H("tr",null,[(x(!0),B(Fe,null,yt(i(l),m=>(x(),B("th",{key:m,scope:"col"},Se(m),1))),128))])])),H("tbody",null,[(x(!0),B(Fe,null,yt(i(r),(m,b)=>(x(),B("tr",{key:b,class:T({[i(f).e("row")]:!0,[i(f).em("row","hide-border")]:b===0&&e.hideHeader})},[(x(!0),B(Fe,null,yt(m,(k,y)=>(x(),B("td",{key:y,class:T(g(k)),onClick:S=>i(c)(k)},[H("div",{class:T(i(v).b())},[ee(p.$slots,"date-cell",{data:i(d)(k)},()=>[H("span",null,Se(k.text),1)])],2)],10,bF))),128))],2))),128))])],2))}}),Wy=yF;const wF=(e,t)=>{const n=e.endOf("month"),a=t.startOf("month"),o=n.isSame(a,"week")?a.add(1,"week"):a;return[[e,n],[o.startOf("week"),t]]},SF=(e,t)=>{const n=e.endOf("month"),a=e.add(1,"month").startOf("month"),o=n.isSame(a,"week")?a.add(1,"week"):a,s=o.endOf("month"),r=t.startOf("month"),l=s.isSame(r,"week")?r.add(1,"week"):r;return[[e,n],[o.startOf("week"),s],[l.startOf("week"),t]]},CF=(e,t,n)=>{const{lang:a}=Ct(),o=M(),s=ot().locale(a.value),r=w({get(){return e.modelValue?u.value:o.value},set(b){if(!b)return;o.value=b;const k=b.toDate();t(wn,k),t(tt,k)}}),l=w(()=>{if(!e.range||!ye(e.range)||e.range.length!==2||e.range.some(y=>!As(y)))return[];const[b,k]=e.range.map(y=>ot(y).locale(a.value));return b.isAfter(k)?(pt(n,"end time should be greater than start time"),[]):b.isSame(k,"month")?g(b,k):b.add(1,"month").month()!==k.month()?(pt(n,"start time and end time interval must not exceed two months"),[]):g(b,k)}),u=w(()=>e.modelValue?ot(e.modelValue).locale(a.value):r.value||(l.value.length?l.value[0][0]:s)),c=w(()=>u.value.subtract(1,"month").date(1)),d=w(()=>u.value.add(1,"month").date(1)),f=w(()=>u.value.subtract(1,"year").date(1)),v=w(()=>u.value.add(1,"year").date(1)),g=(b,k)=>{const y=b.startOf("week"),S=k.endOf("week"),C=y.get("month"),E=S.get("month");return C===E?[[y,S]]:(C+1)%12===E?wF(y,S):C+2===E||(C+1)%11===E?SF(y,S):(pt(n,"start time and end time interval must not exceed two months"),[])},p=b=>{r.value=b},h=b=>{const k={"prev-month":c.value,"next-month":d.value,"prev-year":f.value,"next-year":v.value,today:s}[b];k.isSame(u.value,"day")||p(k)};return{calculateValidatedDateRange:g,date:u,realSelectedDay:r,pickDay:p,selectDate:h,validatedRange:l,handleDateChange:b=>{b==="today"?h("today"):p(b)}}},kF=Ce({date:{type:G(Object),required:!0},formatter:{type:G(Function)}}),EF={"date-change":e=>nt(e)||Le(e)};var xF=se({name:"SelectController",__name:"select-controller",props:kF,emits:EF,setup(e,{emit:t}){const n=e,a=t,o=fe("calendar-select"),{t:s,lang:r}=Ct(),l=Array.from({length:12},(p,h)=>{const m=h+1;return{value:m,label:Ve(n.formatter)?n.formatter(m,"month"):m}}),u=w(()=>n.date.year()),c=w(()=>n.date.month()+1),d=w(()=>{const p=[];for(let h=-10;h<10;h++){const m=u.value+h;if(m>0){const b=Ve(n.formatter)?n.formatter(m,"year"):m;p.push({value:m,label:b})}}return p}),f=p=>{a("date-change",ot(new Date(p,c.value-1,1)).locale(r.value))},v=p=>{a("date-change",ot(new Date(u.value,p-1,1)).locale(r.value))},g=()=>{a("date-change","today")};return(p,h)=>(x(),B(Fe,null,[Y(i(Hs),{"model-value":u.value,size:"small",class:T(i(o).e("year")),"validate-event":!1,options:d.value,onChange:f},null,8,["model-value","class","options"]),Y(i(Hs),{"model-value":c.value,size:"small",class:T(i(o).e("month")),"validate-event":!1,options:i(l),onChange:v},null,8,["model-value","class","options"]),Y(i(In),{size:"small",onClick:g},{default:J(()=>[wt(Se(i(s)("el.datepicker.today")),1)]),_:1})],64))}}),TF=xF;const jy="ElCalendar";var $F=se({name:jy,__name:"calendar",props:QB,emits:e8,setup(e,{expose:t,emit:n}){const a=fe("calendar"),{calculateValidatedDateRange:o,date:s,pickDay:r,realSelectedDay:l,selectDate:u,validatedRange:c,handleDateChange:d}=CF(e,n,jy),{t:f}=Ct(),v=w(()=>{const g=`el.datepicker.month${s.value.format("M")}`;return`${s.value.year()} ${f("el.datepicker.year")} ${f(g)}`});return t({selectedDay:l,pickDay:r,selectDate:u,calculateValidatedDateRange:o}),(g,p)=>(x(),B("div",{class:T(i(a).b())},[H("div",{class:T(i(a).e("header"))},[ee(g.$slots,"header",{date:v.value},()=>[H("div",{class:T(i(a).e("title"))},Se(v.value),3),i(c).length===0&&e.controllerType==="button"?(x(),B("div",{key:0,class:T(i(a).e("button-group"))},[Y(i(ck),null,{default:J(()=>[Y(i(In),{size:"small",onClick:p[0]||(p[0]=h=>i(u)("prev-month"))},{default:J(()=>[wt(Se(i(f)("el.datepicker.prevMonth")),1)]),_:1}),Y(i(In),{size:"small",onClick:p[1]||(p[1]=h=>i(u)("today"))},{default:J(()=>[wt(Se(i(f)("el.datepicker.today")),1)]),_:1}),Y(i(In),{size:"small",onClick:p[2]||(p[2]=h=>i(u)("next-month"))},{default:J(()=>[wt(Se(i(f)("el.datepicker.nextMonth")),1)]),_:1})]),_:1})],2)):i(c).length===0&&e.controllerType==="select"?(x(),B("div",{key:1,class:T(i(a).e("select-controller"))},[Y(TF,{date:i(s),formatter:e.formatter,onDateChange:i(d)},null,8,["date","formatter","onDateChange"])],2)):te("v-if",!0)])],2),i(c).length===0?(x(),B("div",{key:0,class:T(i(a).e("body"))},[Y(Wy,{date:i(s),"selected-day":i(l),onPick:i(r)},ua({_:2},[g.$slots["date-cell"]?{name:"date-cell",fn:J(h=>[ee(g.$slots,"date-cell",Jo(Zo(h)))]),key:"0"}:void 0]),1032,["date","selected-day","onPick"])],2)):(x(),B("div",{key:1,class:T(i(a).e("body"))},[(x(!0),B(Fe,null,yt(i(c),(h,m)=>(x(),oe(Wy,{key:m,date:h[0],"selected-day":i(l),range:h,"hide-header":m!==0,onPick:i(r)},ua({_:2},[g.$slots["date-cell"]?{name:"date-cell",fn:J(b=>[ee(g.$slots,"date-cell",dt({ref_for:!0},b))]),key:"0"}:void 0]),1032,["date","selected-day","range","hide-header","onPick"]))),128))],2))],2))}}),OF=$F;const NF=st(OF),RF=Ce({header:{type:String,default:""},footer:{type:String,default:""},bodyStyle:{type:G([String,Object,Array]),default:""},headerClass:String,bodyClass:String,footerClass:String,shadow:{type:String,values:["always","hover","never"],default:void 0}});var IF=se({name:"ElCard",__name:"card",props:RF,setup(e){const t=gs("card"),n=fe("card");return(a,o)=>(x(),B("div",{class:T([i(n).b(),i(n).is(`${e.shadow||i(t)?.shadow||"always"}-shadow`)])},[a.$slots.header||e.header?(x(),B("div",{key:0,class:T([i(n).e("header"),e.headerClass])},[ee(a.$slots,"header",{},()=>[wt(Se(e.header),1)])],2)):te("v-if",!0),H("div",{class:T([i(n).e("body"),e.bodyClass]),style:Ke(e.bodyStyle)},[ee(a.$slots,"default")],6),a.$slots.footer||e.footer?(x(),B("div",{key:1,class:T([i(n).e("footer"),e.footerClass])},[ee(a.$slots,"footer",{},()=>[wt(Se(e.footer),1)])],2)):te("v-if",!0)],2))}}),PF=IF;const MF=st(PF),_F=Ce({initialIndex:{type:Number,default:0},height:{type:String,default:""},trigger:{type:String,values:["hover","click"],default:"hover"},autoplay:{type:Boolean,default:!0},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:.83},loop:{type:Boolean,default:!0},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},pauseOnHover:{type:Boolean,default:!0},motionBlur:Boolean}),AF={change:(e,t)=>[e,t].every(He)},Mk=Symbol("carouselContextKey"),Li="ElCarouselItem",LF=Ce({name:{type:String,default:""},label:{type:[String,Number],default:""}}),Uy=300,DF=(e,t,n)=>{const{children:a,addChild:o,removeChild:s,ChildrenSorter:r}=Qd(ft(),Li),l=hn(),u=M(-1),c=M(null),d=M(!1),f=M(),v=M(0),g=M(!0),p=w(()=>e.arrow!=="never"&&!i(b)),h=w(()=>a.value.some(Q=>Q.props.label.toString().length>0)),m=w(()=>e.type==="card"),b=w(()=>e.direction==="vertical"),k=w(()=>e.height!=="auto"?{height:e.height}:{height:`${v.value}px`,overflow:"hidden"}),y=Ns(Q=>{R(Q)},Uy,{trailing:!0}),S=Ns(Q=>{P(Q)},Uy),C=Q=>g.value?u.value<=1?Q<=1:Q>1:!0;function E(){c.value&&(clearInterval(c.value),c.value=null)}function $(){e.interval<=0||!e.autoplay||c.value||(c.value=setInterval(()=>O(),e.interval))}const O=()=>{u.valueie.props.name===Q);ge.length>0&&(Q=a.value.indexOf(ge[0]))}if(Q=Number(Q),Number.isNaN(Q)||Q!==Math.floor(Q)){pt(n,"index must be integer.");return}const he=a.value.length,ue=u.value;Q<0?u.value=e.loop?he-1:0:Q>=he?u.value=e.loop?0:he-1:u.value=Q,ue===u.value&&N(ue),D()}function N(Q){a.value.forEach((he,ue)=>{he.translateItem(ue,u.value,Q)})}function A(Q,he){const ue=i(a),ge=ue.length;if(ge===0||!Q.states.inStage)return!1;const ie=he+1,ae=he-1,ne=ge-1,K=ue[ne].states.active,Z=ue[0].states.active,re=ue[ie]?.states?.active,ce=ue[ae]?.states?.active;return he===ne&&Z||re?"left":he===0&&K||ce?"right":!1}function _(){d.value=!0,e.pauseOnHover&&E()}function V(){d.value=!1,$()}function z(Q){i(b)||a.value.forEach((he,ue)=>{Q===A(he,ue)&&(he.states.hover=!0)})}function U(){i(b)||a.value.forEach(Q=>{Q.states.hover=!1})}function W(Q){u.value=Q}function P(Q){e.trigger==="hover"&&Q!==u.value&&(u.value=Q)}function I(){R(u.value-1)}function L(){R(u.value+1)}function D(){E(),(!e.pauseOnHover||!d.value)&&$()}function F(Q){e.height==="auto"&&(v.value=Q)}function q(){const Q=l.default?.();if(!Q)return null;const he=Ta(Q).filter(ue=>Ut(ue)&&ue.type.name===Li);return he?.length===2&&e.loop&&!m.value?(g.value=!0,he):(g.value=!1,null)}le(()=>u.value,(Q,he)=>{N(he),g.value&&(Q=Q%2,he=he%2),he>-1&&t(bt,Q,he)});const j=w({get:()=>g.value?u.value%2:u.value,set:Q=>u.value=Q});le(()=>e.autoplay,Q=>{Q?$():E()}),le(()=>e.loop,()=>{R(u.value)}),le(()=>e.interval,()=>{D()});const X=Xt();return ht(()=>{le(()=>a.value,()=>{a.value.length>0&&R(e.initialIndex)},{immediate:!0}),X.value=Zt(f.value,()=>{N()}),$()}),Bt(()=>{E(),f.value&&X.value&&X.value.stop()}),St(Mk,{root:f,isCardType:m,isVertical:b,items:a,loop:e.loop,cardScale:e.cardScale,addItem:o,removeItem:s,setActiveItem:R,setContainerHeight:F}),{root:f,activeIndex:u,exposeActiveIndex:j,arrowDisplay:p,hasLabel:h,hover:d,isCardType:m,items:a,isVertical:b,containerStyle:k,isItemsTwoLength:g,handleButtonEnter:z,handleButtonLeave:U,handleIndicatorClick:W,handleMouseEnter:_,handleMouseLeave:V,setActiveItem:R,prev:I,next:L,PlaceholderItem:q,isTwoLengthShow:C,ItemsSorter:r,throttledArrowClick:y,throttledIndicatorHover:S}},BF=["aria-label"],FF=["aria-label"],VF=["onMouseenter","onClick"],zF=["aria-label"],HF={key:0},KF={key:2,xmlns:"http://www.w3.org/2000/svg",version:"1.1",style:{display:"none"}},qy="ElCarousel";var WF=se({name:qy,__name:"carousel",props:_F,emits:AF,setup(e,{expose:t,emit:n}){const a=e,{root:o,activeIndex:s,exposeActiveIndex:r,arrowDisplay:l,hasLabel:u,hover:c,isCardType:d,items:f,isVertical:v,containerStyle:g,handleButtonEnter:p,handleButtonLeave:h,handleIndicatorClick:m,handleMouseEnter:b,handleMouseLeave:k,setActiveItem:y,prev:S,next:C,PlaceholderItem:E,isTwoLengthShow:$,ItemsSorter:O,throttledArrowClick:R,throttledIndicatorHover:N}=DF(a,n,qy),A=fe("carousel"),{t:_}=Ct(),V=w(()=>{const P=[A.b(),A.m(a.direction)];return i(d)&&P.push(A.m("card")),P.push(A.is("vertical-outside",i(v)&&a.indicatorPosition==="outside")),P}),z=w(()=>{const P=[A.e("indicators"),A.em("indicators",a.direction)];return i(u)&&P.push(A.em("indicators","labels")),a.indicatorPosition==="outside"&&P.push(A.em("indicators","outside")),i(v)&&P.push(A.em("indicators","right")),P});function U(P){if(!a.motionBlur)return;const I=i(v)?`${A.namespace.value}-transitioning-vertical`:`${A.namespace.value}-transitioning`;P.currentTarget.classList.add(I)}function W(P){if(!a.motionBlur)return;const I=i(v)?`${A.namespace.value}-transitioning-vertical`:`${A.namespace.value}-transitioning`;P.currentTarget.classList.remove(I)}return t({activeIndex:r,setActiveItem:y,prev:S,next:C}),(P,I)=>(x(),B("div",{ref_key:"root",ref:o,class:T(V.value),onMouseenter:I[6]||(I[6]=Ge((...L)=>i(b)&&i(b)(...L),["stop"])),onMouseleave:I[7]||(I[7]=Ge((...L)=>i(k)&&i(k)(...L),["stop"]))},[i(l)?(x(),oe(Vn,{key:0,name:"carousel-arrow-left",persisted:""},{default:J(()=>[ct(H("button",{type:"button",class:T([i(A).e("arrow"),i(A).em("arrow","left")]),"aria-label":i(_)("el.carousel.leftArrow"),onMouseenter:I[0]||(I[0]=L=>i(p)("left")),onMouseleave:I[1]||(I[1]=(...L)=>i(h)&&i(h)(...L)),onClick:I[2]||(I[2]=Ge(L=>i(R)(i(s)-1),["stop"]))},[Y(i(De),null,{default:J(()=>[Y(i(is))]),_:1})],42,BF),[[Pt,(e.arrow==="always"||i(c))&&(e.loop||i(s)>0)]])]),_:1})):te("v-if",!0),i(l)?(x(),oe(Vn,{key:1,name:"carousel-arrow-right",persisted:""},{default:J(()=>[ct(H("button",{type:"button",class:T([i(A).e("arrow"),i(A).em("arrow","right")]),"aria-label":i(_)("el.carousel.rightArrow"),onMouseenter:I[3]||(I[3]=L=>i(p)("right")),onMouseleave:I[4]||(I[4]=(...L)=>i(h)&&i(h)(...L)),onClick:I[5]||(I[5]=Ge(L=>i(R)(i(s)+1),["stop"]))},[Y(i(De),null,{default:J(()=>[Y(i(na))]),_:1})],42,FF),[[Pt,(e.arrow==="always"||i(c))&&(e.loop||i(s)[e.indicatorPosition!=="none"?(x(),B("ul",{key:0,class:T(z.value)},[(x(!0),B(Fe,null,yt(i(f),(L,D)=>ct((x(),B("li",{key:D,class:T([i(A).e("indicator"),i(A).em("indicator",e.direction),i(A).is("active",D===i(s))]),onMouseenter:F=>i(N)(D),onClick:Ge(F=>i(m)(D),["stop"])},[H("button",{class:T(i(A).e("button")),"aria-label":i(_)("el.carousel.indicator",{index:D+1})},[i(u)?(x(),B("span",HF,Se(L.props.label),1)):te("v-if",!0)],10,zF)],42,VF)),[[Pt,i($)(D)]])),128))],2)):te("v-if",!0)]),_:1}),e.motionBlur?(x(),B("svg",KF,[...I[8]||(I[8]=[H("defs",null,[H("filter",{id:"elCarouselHorizontal"},[H("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"12,0"})]),H("filter",{id:"elCarouselVertical"},[H("feGaussianBlur",{in:"SourceGraphic",stdDeviation:"0,10"})])],-1)])])):te("v-if",!0)],34))}}),jF=WF;const UF=e=>{const t=_e(Mk),n=ft();t||pt(Li,"usage: "),n||pt(Li,"compositional hook can only be invoked inside setups");const a=M(),o=M(!1),s=M(0),r=M(1),l=M(!1),u=M(!1),c=M(!1),d=M(!1),{isCardType:f,isVertical:v,cardScale:g}=t;function p(S,C,E){const $=E-1,O=C-1,R=C+1,N=E/2;return C===0&&S===$?-1:C===$&&S===0?E:S=N?E+1:S>R&&S-C>=N?-2:S}function h(S,C){const E=i(v)?t.root.value?.offsetHeight||0:t.root.value?.offsetWidth||0;return c.value?E*((2-g)*(S-C)+1)/4:S{const $=i(f),O=t.items.value.length??NaN,R=S===C;!$&&!Tt(E)&&(d.value=R||S===E),!R&&O>2&&t.loop&&(S=p(S,C,O));const N=i(v);l.value=R,$?(c.value=Math.round(Math.abs(S-C))<=1,s.value=h(S,C),r.value=i(l)?1:g):s.value=m(S,C,N),u.value=!0,R&&a.value&&t.setContainerHeight(a.value.offsetHeight)};function k(){if(t&&i(f)){const S=t.items.value.findIndex(({uid:C})=>C===n.uid);t.setActiveItem(S)}}const y={props:e,states:At({hover:o,translate:s,scale:r,active:l,ready:u,inStage:c,animating:d}),uid:n.uid,getVnode:()=>n.vnode,translateItem:b};return t.addItem(y),Bt(()=>{t.removeItem(y)}),{carouselItemRef:a,active:l,animating:d,hover:o,inStage:c,isVertical:v,translate:s,isCardType:f,scale:r,ready:u,handleItemClick:k}};var qF=se({name:Li,__name:"carousel-item",props:LF,setup(e){const t=e,n=fe("carousel"),{carouselItemRef:a,active:o,animating:s,hover:r,inStage:l,isVertical:u,translate:c,isCardType:d,scale:f,ready:v,handleItemClick:g}=UF(t),p=w(()=>[n.e("item"),n.is("active",o.value),n.is("in-stage",l.value),n.is("hover",r.value),n.is("animating",s.value),{[n.em("item","card")]:d.value,[n.em("item","card-vertical")]:d.value&&u.value}]),h=w(()=>({transform:[`${`translate${i(u)?"Y":"X"}`}(${i(c)}px)`,`scale(${i(f)})`].join(" ")}));return(m,b)=>ct((x(),B("div",{ref_key:"carouselItemRef",ref:a,class:T(p.value),style:Ke(h.value),onClick:b[0]||(b[0]=(...k)=>i(g)&&i(g)(...k))},[i(d)?ct((x(),B("div",{key:0,class:T(i(n).e("mask"))},null,2)),[[Pt,!i(o)]]):te("v-if",!0),ee(m.$slots,"default")],6)),[[Pt,i(v)]])}}),_k=qF;const YF=st(jF,{CarouselItem:_k}),GF=tn(_k),Ak=Ce({modelValue:{type:G([Number,String,Array,Object])},options:{type:G(Array),default:()=>[]},props:{type:G(Object),default:()=>({})}}),XF={expandTrigger:"click",multiple:!1,checkStrictly:!1,emitPath:!0,lazy:!1,lazyLoad:Dt,value:"value",label:"label",children:"children",leaf:"leaf",disabled:"disabled",hoverThreshold:500,checkOnClickNode:!1,checkOnClickLeaf:!0,showPrefix:!0},JF=Ce({...Ak,border:{type:Boolean,default:!0},renderLabel:{type:Function}}),Yy=e=>!0,ZF={[tt]:Yy,[bt]:Yy,close:()=>!0,"expand-change":e=>e},QF=e=>w(()=>({...XF,...e.props})),Lk={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:{type:Boolean,default:void 0},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:Tn,tabindex:[String,Number],validateEvent:{type:Boolean,default:!0},ariaLabel:String,...aa(["ariaControls"])},Dk={[tt]:e=>Le(e)||He(e)||Ht(e),change:e=>Le(e)||He(e)||Ht(e)},Ll=Symbol("checkboxGroupContextKey"),eV=Ce({modelValue:{type:G(Array),default:()=>[]},disabled:{type:Boolean,default:void 0},min:Number,max:Number,size:Tn,fill:String,textColor:String,tag:{type:String,default:"div"},validateEvent:{type:Boolean,default:!0},options:{type:G(Array)},props:{type:G(Object),default:()=>Bk},type:{type:String,values:["checkbox","button"],default:"checkbox"},...aa(["ariaLabel"])}),tV={[tt]:e=>ye(e),change:e=>ye(e)},Bk={label:"label",value:"value",disabled:"disabled"},nV=({model:e,isChecked:t})=>{const n=_e(Ll,void 0),a=_e(Pr,void 0),o=w(()=>{const s=n?.max?.value,r=n?.min?.value;return!Tt(s)&&e.value.length>=s&&!t.value||!Tt(r)&&e.value.length<=r&&t.value});return{isDisabled:ln(w(()=>n===void 0?a?.disabled??o.value:n.disabled?.value||o.value)),isLimitDisabled:o}},aV=(e,{model:t,isLimitExceeded:n,hasOwnLabel:a,isDisabled:o,isLabeledByFormItem:s})=>{const r=_e(Ll,void 0),{formItem:l}=Dn(),{emit:u}=ft();function c(p){return[!0,e.trueValue,e.trueLabel].includes(p)?e.trueValue??e.trueLabel??!0:e.falseValue??e.falseLabel??!1}function d(p,h){u(bt,c(p),h)}function f(p){if(n.value)return;const h=p.target;u(bt,c(h.checked),p)}async function v(p){n.value||!a.value&&!o.value&&s.value&&(p.composedPath().some(h=>h.tagName==="LABEL")||(t.value=c([!1,e.falseValue,e.falseLabel].includes(t.value)),await Ne(),d(t.value,p)))}const g=w(()=>r?.validateEvent||e.validateEvent);return le(()=>e.modelValue,()=>{g.value&&l?.validate("change").catch(p=>pt(p))}),{handleChange:f,onClickRoot:v}},oV=e=>{const t=M(!1),{emit:n}=ft(),a=_e(Ll,void 0),o=w(()=>Tt(a)===!1),s=M(!1),r=w({get(){return o.value?a?.modelValue?.value:e.modelValue??t.value},set(l){o.value&&ye(l)?(s.value=a?.max?.value!==void 0&&l.length>a?.max.value&&l.length>r.value.length,s.value===!1&&a?.changeEvent?.(l)):(n(tt,l),t.value=l)}});return{model:r,isGroup:o,isLimitExceeded:s}},sV=(e,t,{model:n})=>{const a=_e(Ll,void 0),o=M(!1),s=w(()=>va(e.value)?e.label:e.value),r=w(()=>{const l=n.value;return Ht(l)?l:ye(l)?nt(s.value)?l.map(qt).some(u=>on(u,s.value)):l.map(qt).includes(s.value):l!=null?l===e.trueValue||l===e.trueLabel:!!l});return{checkboxButtonSize:Sn(w(()=>a?.size?.value),{prop:!0}),isChecked:r,isFocused:o,checkboxSize:Sn(w(()=>a?.size?.value)),hasOwnLabel:w(()=>!!t.default||!va(s.value)),actualValue:s}},Fk=(e,t)=>{const{formItem:n}=Dn(),{model:a,isGroup:o,isLimitExceeded:s}=oV(e),{isFocused:r,isChecked:l,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,actualValue:f}=sV(e,t,{model:a}),{isDisabled:v}=nV({model:a,isChecked:l}),{inputId:g,isLabeledByFormItem:p}=Ia(e,{formItemContext:n,disableIdGeneration:d,disableIdManagement:o}),{handleChange:h,onClickRoot:m}=aV(e,{model:a,isLimitExceeded:s,hasOwnLabel:d,isDisabled:v,isLabeledByFormItem:p});return(()=>{function k(){ye(a.value)&&!a.value.includes(f.value)?a.value.push(f.value):a.value=e.trueValue??e.trueLabel??!0}e.checked&&k()})(),xo({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},w(()=>o.value&&va(e.value))),xo({from:"true-label",replacement:"true-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},w(()=>!!e.trueLabel)),xo({from:"false-label",replacement:"false-value",version:"3.0.0",scope:"el-checkbox",ref:"https://element-plus.org/en-US/component/checkbox.html"},w(()=>!!e.falseLabel)),{inputId:g,isLabeledByFormItem:p,isChecked:l,isDisabled:v,isFocused:r,checkboxButtonSize:u,checkboxSize:c,hasOwnLabel:d,model:a,actualValue:f,handleChange:h,onClickRoot:m}},rV=["id","indeterminate","name","tabindex","disabled"];var lV=se({name:"ElCheckbox",__name:"checkbox",props:Lk,emits:Dk,setup(e){const t=e,{inputId:n,isLabeledByFormItem:a,isChecked:o,isDisabled:s,isFocused:r,checkboxSize:l,hasOwnLabel:u,model:c,actualValue:d,handleChange:f,onClickRoot:v}=Fk(t,hn()),g=w(()=>t.trueValue||t.falseValue||t.trueLabel||t.falseLabel?{"true-value":t.trueValue??t.trueLabel??!0,"false-value":t.falseValue??t.falseLabel??!1}:{value:d.value}),p=fe("checkbox"),h=w(()=>[p.b(),p.m(l.value),p.is("disabled",s.value),p.is("bordered",t.border),p.is("checked",o.value)]),m=w(()=>[p.e("input"),p.is("disabled",s.value),p.is("checked",o.value),p.is("indeterminate",t.indeterminate),p.is("focus",r.value)]);return(b,k)=>(x(),oe(it(!i(u)&&i(a)?"span":"label"),{for:!i(u)&&i(a)?null:i(n),class:T(h.value),"aria-controls":e.indeterminate?e.ariaControls:null,"aria-checked":e.indeterminate?"mixed":void 0,"aria-label":e.ariaLabel,onClick:i(v)},{default:J(()=>[H("span",{class:T(m.value)},[ct(H("input",dt({id:i(n),"onUpdate:modelValue":k[0]||(k[0]=y=>Jt(c)?c.value=y:null),class:i(p).e("original"),type:"checkbox",indeterminate:e.indeterminate,name:e.name,tabindex:e.tabindex,disabled:i(s)},g.value,{onChange:k[1]||(k[1]=(...y)=>i(f)&&i(f)(...y)),onFocus:k[2]||(k[2]=y=>r.value=!0),onBlur:k[3]||(k[3]=y=>r.value=!1),onClick:k[4]||(k[4]=Ge(()=>{},["stop"]))}),null,16,rV),[[H1,i(c)]]),H("span",{class:T(i(p).e("inner"))},null,2)],2),i(u)?(x(),B("span",{key:0,class:T(i(p).e("label"))},[ee(b.$slots,"default"),b.$slots.default?te("v-if",!0):(x(),B(Fe,{key:0},[wt(Se(e.label),1)],64))],2)):te("v-if",!0)]),_:3},8,["for","class","aria-controls","aria-checked","aria-label","onClick"]))}}),Vk=lV;const iV=["name","tabindex","disabled"];var uV=se({name:"ElCheckboxButton",__name:"checkbox-button",props:Lk,emits:Dk,setup(e){const t=e,{isFocused:n,isChecked:a,isDisabled:o,checkboxButtonSize:s,model:r,actualValue:l,handleChange:u}=Fk(t,hn()),c=w(()=>t.trueValue||t.falseValue||t.trueLabel||t.falseLabel?{"true-value":t.trueValue??t.trueLabel??!0,"false-value":t.falseValue??t.falseLabel??!1}:{value:l.value}),d=_e(Ll,void 0),f=fe("checkbox"),v=w(()=>{const p=d?.fill?.value??"";return{backgroundColor:p,borderColor:p,color:d?.textColor?.value??"",boxShadow:p?`-1px 0 0 0 ${p}`:void 0}}),g=w(()=>[f.b("button"),f.bm("button",s.value),f.is("disabled",o.value),f.is("checked",a.value),f.is("focus",n.value)]);return(p,h)=>(x(),B("label",{class:T(g.value)},[ct(H("input",dt({"onUpdate:modelValue":h[0]||(h[0]=m=>Jt(r)?r.value=m:null),class:i(f).be("button","original"),type:"checkbox",name:e.name,tabindex:e.tabindex,disabled:i(o)},c.value,{onChange:h[1]||(h[1]=(...m)=>i(u)&&i(u)(...m)),onFocus:h[2]||(h[2]=m=>n.value=!0),onBlur:h[3]||(h[3]=m=>n.value=!1),onClick:h[4]||(h[4]=Ge(()=>{},["stop"]))}),null,16,iV),[[H1,i(r)]]),p.$slots.default||e.label?(x(),B("span",{key:0,class:T(i(f).be("button","inner")),style:Ke(i(a)?v.value:void 0)},[ee(p.$slots,"default",{},()=>[wt(Se(e.label),1)])],6)):te("v-if",!0)],2))}}),fm=uV,cV=se({name:"ElCheckboxGroup",__name:"checkbox-group",props:eV,emits:tV,setup(e,{emit:t}){const n=e,a=t,o=fe("checkbox"),s=ln(),{formItem:r}=Dn(),{inputId:l,isLabeledByFormItem:u}=Ia(n,{formItemContext:r}),c=async p=>{a(tt,p),await Ne(),a(bt,p)},d=w({get(){return n.modelValue},set(p){c(p)}}),f=w(()=>({...Bk,...n.props})),v=p=>{const{label:h,value:m,disabled:b}=f.value,k={label:p[h],value:p[m],disabled:p[b]};return{...tu(p,[h,m,b]),...k}},g=w(()=>n.type==="button"?fm:Vk);return St(Ll,{...ss(Mn(n),["size","min","max","validateEvent","fill","textColor"]),disabled:s,modelValue:d,changeEvent:c}),le(()=>n.modelValue,(p,h)=>{n.validateEvent&&!on(p,h)&&r?.validate("change").catch(m=>pt(m))}),(p,h)=>(x(),oe(it(e.tag),{id:i(l),class:T(i(o).b("group")),role:"group","aria-label":i(u)?void 0:e.ariaLabel||"checkbox-group","aria-labelledby":i(u)?i(r)?.labelId:void 0},{default:J(()=>[ee(p.$slots,"default",{},()=>[(x(!0),B(Fe,null,yt(e.options,(m,b)=>(x(),oe(it(g.value),dt({key:b},{ref_for:!0},v(m)),null,16))),128))])]),_:3},8,["id","class","aria-label","aria-labelledby"]))}}),zk=cV;const oo=st(Vk,{CheckboxButton:fm,CheckboxGroup:zk}),dV=tn(fm),pm=tn(zk),Hk=Ce({modelValue:{type:[String,Number,Boolean],default:void 0},size:Tn,disabled:{type:Boolean,default:void 0},label:{type:[String,Number,Boolean],default:void 0},value:{type:[String,Number,Boolean],default:void 0},name:{type:String,default:void 0}}),fV=Ce({...Hk,border:Boolean}),Kk={[tt]:e=>Le(e)||He(e)||Ht(e),[bt]:e=>Le(e)||He(e)||Ht(e)},Wk=Symbol("radioGroupKey"),pV=Ce({...Hk}),jk={label:"label",value:"value",disabled:"disabled"},hV=Ce({id:{type:String,default:void 0},size:Tn,disabled:{type:Boolean,default:void 0},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:!0},options:{type:G(Array)},props:{type:G(Object),default:()=>jk},type:{type:String,values:["radio","button"],default:"radio"},...aa(["ariaLabel"])}),vV=Kk,Uk=(e,t)=>{const n=M(),a=_e(Wk,void 0),o=w(()=>!!a),s=w(()=>va(e.value)?e.label:e.value),r=w({get(){return o.value?a.modelValue:e.modelValue},set(f){o.value?a.changeEvent(f):t&&t(tt,f),n.value.checked=e.modelValue===s.value}}),l=Sn(w(()=>a?.size)),u=ln(w(()=>a?.disabled)),c=M(!1),d=w(()=>u.value||o.value&&r.value!==s.value?-1:0);return xo({from:"label act as value",replacement:"value",version:"3.0.0",scope:"el-radio",ref:"https://element-plus.org/en-US/component/radio.html"},w(()=>o.value&&va(e.value))),{radioRef:n,isGroup:o,radioGroup:a,focus:c,size:l,disabled:u,tabIndex:d,modelValue:r,actualValue:s}},mV=["value","name","disabled","checked"];var gV=se({name:"ElRadio",__name:"radio",props:fV,emits:Kk,setup(e,{emit:t}){const n=e,a=t,o=fe("radio"),{radioRef:s,radioGroup:r,focus:l,size:u,disabled:c,modelValue:d,actualValue:f}=Uk(n,a);function v(){Ne(()=>a(bt,d.value))}return(g,p)=>(x(),B("label",{class:T([i(o).b(),i(o).is("disabled",i(c)),i(o).is("focus",i(l)),i(o).is("bordered",e.border),i(o).is("checked",i(d)===i(f)),i(o).m(i(u))])},[H("span",{class:T([i(o).e("input"),i(o).is("disabled",i(c)),i(o).is("checked",i(d)===i(f))])},[ct(H("input",{ref_key:"radioRef",ref:s,"onUpdate:modelValue":p[0]||(p[0]=h=>Jt(d)?d.value=h:null),class:T(i(o).e("original")),value:i(f),name:e.name||i(r)?.name,disabled:i(c),checked:i(d)===i(f),type:"radio",onFocus:p[1]||(p[1]=h=>l.value=!0),onBlur:p[2]||(p[2]=h=>l.value=!1),onChange:v,onClick:p[3]||(p[3]=Ge(()=>{},["stop"]))},null,42,mV),[[K1,i(d)]]),H("span",{class:T(i(o).e("inner"))},null,2)],2),H("span",{class:T(i(o).e("label")),onKeydown:p[4]||(p[4]=Ge(()=>{},["stop"]))},[ee(g.$slots,"default",{},()=>[wt(Se(e.label),1)])],34)],2))}}),qk=gV;const bV=["value","name","disabled"];var yV=se({name:"ElRadioButton",__name:"radio-button",props:pV,setup(e){const t=e,n=fe("radio"),{radioRef:a,focus:o,size:s,disabled:r,modelValue:l,radioGroup:u,actualValue:c}=Uk(t),d=w(()=>({backgroundColor:u?.fill||"",borderColor:u?.fill||"",boxShadow:u?.fill?`-1px 0 0 0 ${u.fill}`:"",color:u?.textColor||""}));return(f,v)=>(x(),B("label",{class:T([i(n).b("button"),i(n).is("active",i(l)===i(c)),i(n).is("disabled",i(r)),i(n).is("focus",i(o)),i(n).bm("button",i(s))])},[ct(H("input",{ref_key:"radioRef",ref:a,"onUpdate:modelValue":v[0]||(v[0]=g=>Jt(l)?l.value=g:null),class:T(i(n).be("button","original-radio")),value:i(c),type:"radio",name:e.name||i(u)?.name,disabled:i(r),onFocus:v[1]||(v[1]=g=>o.value=!0),onBlur:v[2]||(v[2]=g=>o.value=!1),onClick:v[3]||(v[3]=Ge(()=>{},["stop"]))},null,42,bV),[[K1,i(l)]]),H("span",{class:T(i(n).be("button","inner")),style:Ke(i(l)===i(c)?d.value:{}),onKeydown:v[4]||(v[4]=Ge(()=>{},["stop"]))},[ee(f.$slots,"default",{},()=>[wt(Se(e.label),1)])],38)],2))}}),hm=yV;const wV=["id","aria-label","aria-labelledby"];var SV=se({name:"ElRadioGroup",__name:"radio-group",props:hV,emits:vV,setup(e,{emit:t}){const n=e,a=t,o=fe("radio"),s=zn(),r=M(),{formItem:l}=Dn(),{inputId:u,isLabeledByFormItem:c}=Ia(n,{formItemContext:l}),d=h=>{a(tt,h),Ne(()=>a(bt,h))};ht(()=>{const h=r.value.querySelectorAll("[type=radio]"),m=h[0];!Array.from(h).some(b=>b.checked)&&m&&(m.tabIndex=0)});const f=w(()=>n.name||s.value),v=w(()=>({...jk,...n.props})),g=h=>{const{label:m,value:b,disabled:k}=v.value,y={label:h[m],value:h[b],disabled:h[k]};return{...tu(h,[m,b,k]),...y}},p=w(()=>n.type==="button"?hm:qk);return St(Wk,At({...Mn(n),changeEvent:d,name:f})),le(()=>n.modelValue,(h,m)=>{n.validateEvent&&!on(h,m)&&l?.validate("change").catch(b=>pt(b))}),(h,m)=>(x(),B("div",{id:i(u),ref_key:"radioGroupRef",ref:r,class:T(i(o).b("group")),role:"radiogroup","aria-label":i(c)?void 0:e.ariaLabel||"radio-group","aria-labelledby":i(c)?i(l).labelId:void 0},[ee(h.$slots,"default",{},()=>[(x(!0),B(Fe,null,yt(e.options,(b,k)=>(x(),oe(it(p.value),dt({key:k},{ref_for:!0},g(b)),null,16))),128))])],10,wV))}}),Yk=SV;const Gk=st(qk,{RadioButton:hm,RadioGroup:Yk}),CV=tn(Yk),kV=tn(hm),sf=Symbol();function EV(e){return!!(ye(e)?e.every(({type:t})=>t===mn):e?.type===mn)}var xV=se({name:"NodeContent",props:{node:{type:Object,required:!0}},setup(e){const t=fe("cascader-node"),{renderLabelFn:n}=_e(sf),{node:a}=e,{data:o,label:s}=a,r=()=>{const l=n?.({node:a,data:o});return EV(l)?s:l??s};return()=>Y("span",{class:t.e("label")},[r()])}});const TV=["id","aria-haspopup","aria-owns","aria-expanded","tabindex"];var $V=se({name:"ElCascaderNode",__name:"node",props:{node:{type:Object,required:!0},menuId:String},emits:["expand"],setup(e,{emit:t}){const n=e,a=t,o=_e(sf),s=fe("cascader-node"),r=w(()=>o.isHoverMenu),l=w(()=>o.config.multiple),u=w(()=>o.config.checkStrictly),c=w(()=>o.config.showPrefix),d=w(()=>o.checkedNodes[0]?.uid),f=w(()=>n.node.isDisabled),v=w(()=>n.node.isLeaf),g=w(()=>u.value&&!v.value||!f.value),p=w(()=>m(o.expandingNode)),h=w(()=>u.value&&o.checkedNodes.some(m)),m=R=>{const{level:N,uid:A}=n.node;return R?.pathNodes[N-1]?.uid===A},b=()=>{p.value||o.expandNode(n.node)},k=R=>{const{node:N}=n;R!==N.checked&&o.handleCheckChange(N,R)},y=()=>{o.lazyLoad(n.node,()=>{v.value||b()})},S=R=>{r.value&&(C(),!v.value&&a("expand",R))},C=()=>{const{node:R}=n;!g.value||R.loading||(R.loaded?b():y())},E=()=>{v.value&&!f.value&&!u.value&&!l.value?O(!0):(o.config.checkOnClickNode&&(l.value||u.value)||v.value&&o.config.checkOnClickLeaf)&&!f.value?$(!n.node.checked):r.value||C()},$=R=>{u.value?(k(R),n.node.loaded&&b()):O(R)},O=R=>{n.node.loaded?(k(R),!u.value&&b()):y()};return(R,N)=>(x(),B("li",{id:`${e.menuId}-${e.node.uid}`,role:"menuitem","aria-haspopup":!v.value,"aria-owns":v.value?void 0:e.menuId,"aria-expanded":p.value,tabindex:g.value?-1:void 0,class:T([i(s).b(),i(s).is("selectable",u.value),i(s).is("active",e.node.checked),i(s).is("disabled",!g.value),p.value&&"in-active-path",h.value&&"in-checked-path"]),onMouseenter:S,onFocus:S,onClick:E},[te(" prefix "),l.value&&c.value?(x(),oe(i(oo),{key:0,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:f.value,onClick:N[0]||(N[0]=Ge(()=>{},["stop"])),"onUpdate:modelValue":$},null,8,["model-value","indeterminate","disabled"])):u.value&&c.value?(x(),oe(i(Gk),{key:1,"model-value":d.value,label:e.node.uid,disabled:f.value,"onUpdate:modelValue":$,onClick:N[1]||(N[1]=Ge(()=>{},["stop"]))},{default:J(()=>[te(` + Add an empty element to avoid render label, + do not use empty fragment here for https://github.com/vuejs/vue-next/pull/2485 + `),N[2]||(N[2]=H("span",null,null,-1))]),_:1},8,["model-value","label","disabled"])):v.value&&e.node.checked?(x(),oe(i(De),{key:2,class:T(i(s).e("prefix"))},{default:J(()=>[Y(i(vu))]),_:1},8,["class"])):te("v-if",!0),te(" content "),Y(i(xV),{node:e.node},null,8,["node"]),te(" postfix "),v.value?te("v-if",!0):(x(),B(Fe,{key:3},[e.node.loading?(x(),oe(i(De),{key:0,class:T([i(s).is("loading"),i(s).e("postfix")])},{default:J(()=>[Y(i(_o))]),_:1},8,["class"])):(x(),oe(i(De),{key:1,class:T(["arrow-right",i(s).e("postfix")])},{default:J(()=>[Y(i(na))]),_:1},8,["class"]))],64))],42,TV))}}),OV=$V,NV=se({name:"ElCascaderMenu",__name:"menu",props:{nodes:{type:Array,required:!0},index:{type:Number,required:!0}},setup(e){const t=e,n=ft(),a=fe("cascader-menu"),{t:o}=Ct(),s=zn();let r,l;const u=_e(sf),c=M(),d=w(()=>!t.nodes.length),f=w(()=>!u.initialLoaded),v=w(()=>`${s.value}-${t.index}`),g=b=>{r=b.target},p=b=>{if(!(!u.isHoverMenu||!r||!c.value))if(r.contains(b.target)){h();const k=n.vnode.el,{left:y}=k.getBoundingClientRect(),{offsetWidth:S,offsetHeight:C}=k,E=b.clientX-y,$=r.offsetTop,O=$+r.offsetHeight,R=k.querySelector(`.${a.e("wrap")}`)?.scrollTop||0;c.value.innerHTML=` + + + `}else l||(l=window.setTimeout(m,u.config.hoverThreshold))},h=()=>{l&&(clearTimeout(l),l=void 0)},m=()=>{c.value&&(c.value.innerHTML="",h())};return(b,k)=>(x(),oe(i(no),{key:v.value,tag:"ul",role:"menu",class:T(i(a).b()),"wrap-class":i(a).e("wrap"),"view-class":[i(a).e("list"),i(a).is("empty",d.value)],onMousemove:p,onMouseleave:m},{default:J(()=>[(x(!0),B(Fe,null,yt(e.nodes,y=>(x(),oe(OV,{key:y.uid,node:y,"menu-id":v.value,onExpand:g},null,8,["node","menu-id"]))),128)),f.value?(x(),B("div",{key:0,class:T(i(a).e("empty-text"))},[Y(i(De),{size:"14",class:T(i(a).is("loading"))},{default:J(()=>[Y(i(_o))]),_:1},8,["class"]),wt(" "+Se(i(o)("el.cascader.loading")),1)],2)):d.value?(x(),B("div",{key:1,class:T(i(a).e("empty-text"))},[ee(b.$slots,"empty",{},()=>[wt(Se(i(o)("el.cascader.noData")),1)])],2)):i(u)?.isHoverMenu?(x(),B(Fe,{key:2},[te(" eslint-disable vue/html-self-closing "),(x(),B("svg",{ref_key:"hoverZone",ref:c,class:T(i(a).e("hover-zone"))},null,2))],2112)):te("v-if",!0),te(" eslint-enable vue/html-self-closing ")]),_:3},8,["class","wrap-class","view-class"]))}}),RV=NV;let IV=0;const PV=e=>{const t=[e];let{parent:n}=e;for(;n;)t.unshift(n),n=n.parent;return t};var dh=class fh{constructor(t,n,a,o=!1){this.data=t,this.config=n,this.parent=a,this.root=o,this.uid=IV++,this.checked=!1,this.indeterminate=!1,this.loading=!1;const{value:s,label:r,children:l}=n,u=t[l],c=PV(this);this.level=o?0:a?a.level+1:1,this.value=t[s],this.label=t[r],this.pathNodes=c,this.pathValues=c.map(d=>d.value),this.pathLabels=c.map(d=>d.label),this.childrenData=u,this.children=(u||[]).map(d=>new fh(d,n,this)),this.loaded=!n.lazy||this.isLeaf||!ia(u),this.text=""}get isDisabled(){const{data:t,parent:n,config:a}=this,{disabled:o,checkStrictly:s}=a;return(Ve(o)?o(t,this):!!t[o])||!s&&!!n?.isDisabled}get isLeaf(){const{data:t,config:n,childrenData:a,loaded:o}=this,{lazy:s,leaf:r}=n,l=Ve(r)?r(t,this):t[r];return Tt(l)?s&&!o?!1:!(ye(a)&&a.length):!!l}get valueByOption(){return this.config.emitPath?this.pathValues:this.value}appendChild(t){const{childrenData:n,children:a}=this,o=new fh(t,this.config,this);return ye(n)?n.push(t):this.childrenData=[t],a.push(o),o}calcText(t,n){const a=t?this.pathLabels.join(n):this.label;return this.text=a,a}broadcast(t){this.children.forEach(n=>{n&&(n.broadcast(t),n.onParentCheck?.(t))})}emit(){const{parent:t}=this;t&&(t.onChildCheck?.(),t.emit())}onParentCheck(t){this.isDisabled||this.setCheckState(t)}onChildCheck(){const{children:t}=this,n=t.filter(o=>!o.isDisabled),a=n.length?n.every(o=>o.checked):!1;this.setCheckState(a)}setCheckState(t){const n=this.children.length,a=this.children.reduce((o,s)=>o+(s.checked?1:s.indeterminate?.5:0),0);this.checked=this.loaded&&this.children.filter(o=>!o.isDisabled).every(o=>o.loaded&&o.checked)&&t,this.indeterminate=this.loaded&&a!==n&&a>0}doCheck(t){if(this.checked===t)return;const{checkStrictly:n,multiple:a}=this.config;n||!a?this.checked=t:(this.broadcast(t),this.setCheckState(t),this.emit())}};const ph=(e,t)=>e.reduce((n,a)=>(a.isLeaf?n.push(a):(!t&&n.push(a),n=n.concat(ph(a.children,t))),n),[]);var Gy=class{constructor(e,t){this.config=t;const n=(e||[]).map(a=>new dh(a,this.config));this.nodes=n,this.allNodes=ph(n,!1),this.leafNodes=ph(n,!0)}getNodes(){return this.nodes}getFlattedNodes(e){return e?this.leafNodes:this.allNodes}appendNode(e,t){const n=t?t.appendChild(e):new dh(e,this.config);t||this.nodes.push(n),this.appendAllNodesAndLeafNodes(n)}appendNodes(e,t){e.length>0?e.forEach(n=>this.appendNode(n,t)):t&&t.isLeaf&&this.leafNodes.push(t)}appendAllNodesAndLeafNodes(e){this.allNodes.push(e),e.isLeaf&&this.leafNodes.push(e),e.children&&e.children.forEach(t=>{this.appendAllNodesAndLeafNodes(t)})}getNodeByValue(e,t=!1){return va(e)?null:this.getFlattedNodes(t).find(n=>on(n.value,e)||on(n.pathValues,e))||null}getSameNode(e){return e&&this.getFlattedNodes(!1).find(({value:t,level:n})=>on(e.value,t)&&e.level===n)||null}};const Xy=e=>{if(!e)return 0;const t=e.id.split("-");return Number(t[t.length-2])},MV=e=>{if(!e)return;const t=e.querySelector("input");t?t.click():KS(e)&&e.click()},_V=(e,t)=>{const n=t.slice(0),a=n.map(s=>s.uid),o=e.reduce((s,r)=>{const l=a.indexOf(r.uid);return l>-1&&(s.push(r),n.splice(l,1),a.splice(l,1)),s},[]);return o.push(...n),o};var AV=se({name:"ElCascaderPanel",__name:"index",props:JF,emits:ZF,setup(e,{expose:t,emit:n}){const a=e,o=n;let s=!1;const r=fe("cascader"),l=QF(a),u=hn();let c;const d=M(!0),f=M(!1),v=M([]),g=M(),p=M([]),h=M(),m=M([]),b=w(()=>l.value.expandTrigger==="hover"),k=w(()=>a.renderLabel||u.default),y=()=>{const{options:P}=a,I=l.value;s=!1,c=new Gy(P,I),p.value=[c.getNodes()],I.lazy&&ia(a.options)?(d.value=!1,S(void 0,L=>{L&&(c=new Gy(L,I),p.value=[c.getNodes()]),d.value=!0,_(!1,!0)})):_(!1,!0)},S=(P,I)=>{const L=l.value;P=P||new dh({},L,void 0,!0),P.loading=!0;const D=q=>{const j=P,X=j.root?null:j;j.loading=!1,j.loaded=!0,j.childrenData=j.childrenData||[],q&&c?.appendNodes(q,X),q&&I?.(q),P.level===0&&(f.value=!0)},F=()=>{P.loading=!1,P.loaded=!1,P.level===0&&(d.value=!0)};L.lazyLoad(P,D,F)},C=(P,I)=>{const{level:L}=P,D=p.value.slice(0,L);let F;P.isLeaf?F=P.pathNodes[L-2]:(F=P,D.push(P.children)),h.value?.uid!==F?.uid&&(h.value=P,p.value=D,!I&&o("expand-change",P?.pathValues||[]))},E=(P,I,L=!0)=>{const{checkStrictly:D,multiple:F}=l.value,q=m.value[0];s=!0,!F&&q?.doCheck(!1),P.doCheck(I),A(),L&&!F&&!D&&o("close"),!L&&!F&&$(P)},$=P=>{P&&(P=P.parent,$(P),P&&C(P))},O=P=>c?.getFlattedNodes(P),R=P=>O(P)?.filter(({checked:I})=>I!==!1),N=()=>{m.value.forEach(P=>P.doCheck(!1)),A(),p.value=p.value.slice(0,1),h.value=void 0,o("expand-change",[])},A=()=>{const{checkStrictly:P,multiple:I}=l.value,L=m.value,D=_V(L,R(!P)),F=D.map(q=>q.valueByOption);m.value=D,g.value=I?F:F[0]??null},_=(P=!1,I=!1)=>{const{modelValue:L}=a,{lazy:D,multiple:F,checkStrictly:q}=l.value,j=!q;if(!(!d.value||s||!I&&on(L,g.value)))if(D&&!P){const X=oy(cM(Zn(L))).map(Q=>c?.getNodeByValue(Q)).filter(Q=>!!Q&&!Q.loaded&&!Q.loading);X.length?X.forEach(Q=>{S(Q,()=>_(!1,I))}):_(!0,I)}else V(oy((F?Zn(L):[L]).map(X=>c?.getNodeByValue(X,j))),I),g.value=es(L??void 0)},V=(P,I=!0)=>{const{checkStrictly:L}=l.value,D=m.value,F=P.filter(X=>!!X&&(L||X.isLeaf)),q=c?.getSameNode(h.value),j=I&&q||F[0];j?j.pathNodes.forEach(X=>C(X,!0)):h.value=void 0,D.forEach(X=>X.doCheck(!1)),At(F).forEach(X=>X.doCheck(!0)),m.value=F,Ne(z)},z=()=>{Mt&&v.value.forEach(P=>{const I=P?.$el;if(I){const L=I.querySelector(`.${r.namespace.value}-scrollbar__wrap`);let D=I.querySelector(`.${r.b("node")}.in-active-path`);if(!D){const F=I.querySelectorAll(`.${r.b("node")}.${r.is("active")}`);D=F[F.length-1]}Av(L,D)}})},U=P=>{const I=P.target,L=jt(P);switch(L){case we.up:case we.down:P.preventDefault(),cc(WS(I,L===we.up?-1:1,`.${r.b("node")}[tabindex="-1"]`));break;case we.left:{P.preventDefault();const D=v.value[Xy(I)-1]?.$el.querySelector(`.${r.b("node")}[aria-expanded="true"]`);cc(D);break}case we.right:{P.preventDefault();const D=v.value[Xy(I)+1]?.$el.querySelector(`.${r.b("node")}[tabindex="-1"]`);cc(D);break}case we.enter:case we.numpadEnter:MV(I);break}};St(sf,At({config:l,expandingNode:h,checkedNodes:m,isHoverMenu:b,initialLoaded:d,renderLabelFn:k,lazyLoad:S,expandNode:C,handleCheckChange:E})),le(l,(P,I)=>{on(P,I)||y()},{immediate:!0}),le(()=>a.options,y,{deep:!0}),le(()=>a.modelValue,()=>{s=!1,_()},{deep:!0}),le(()=>g.value,P=>{on(P,a.modelValue)||(o(tt,P),o(bt,P))});const W=()=>{f.value||y()};return ov(()=>v.value=[]),ht(()=>!ia(a.modelValue)&&_()),t({menuList:v,menus:p,checkedNodes:m,handleKeyDown:U,handleCheckChange:E,getFlattedNodes:O,getCheckedNodes:R,clearCheckedNodes:N,calculateCheckedValue:A,scrollToExpandingNode:z,loadLazyRootNodes:W}),(P,I)=>(x(),B("div",{class:T([i(r).b("panel"),i(r).is("bordered",e.border)]),onKeydown:U},[(x(!0),B(Fe,null,yt(p.value,(L,D)=>(x(),oe(RV,{key:D,ref_for:!0,ref:F=>v.value[D]=F,index:D,nodes:[...L]},{empty:J(()=>[ee(P.$slots,"empty")]),_:3},8,["index","nodes"]))),128))],34))}}),LV=AV;const Xk=st(LV),DV=Ce({...Ak,size:Tn,placeholder:String,disabled:{type:Boolean,default:void 0},clearable:Boolean,clearIcon:{type:Kt,default:Fo},filterable:Boolean,filterMethod:{type:G(Function),default:(e,t)=>e.text.includes(t)},separator:{type:String,default:" / "},showAllLevels:{type:Boolean,default:!0},collapseTags:Boolean,maxCollapseTags:{type:Number,default:1},collapseTagsTooltip:Boolean,maxCollapseTagsTooltipHeight:{type:[String,Number]},debounce:{type:Number,default:300},beforeFilter:{type:G(Function),default:()=>!0},placement:{type:G(String),values:Lo,default:"bottom-start"},fallbackPlacements:{type:G(Array),default:["bottom-start","bottom","top-start","top","right","left"]},popperClass:zt.popperClass,popperStyle:zt.popperStyle,teleported:zt.teleported,effect:{type:G(String),default:"light"},tagType:{...us.type,default:"info"},tagEffect:{...us.effect,default:"light"},validateEvent:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},showCheckedStrategy:{type:String,values:["parent","child"],default:"child"},checkOnClickNode:Boolean,showPrefix:{type:Boolean,default:!0},...Ir}),Jy=e=>!0,BV={[tt]:Jy,[bt]:Jy,focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0,visibleChange:e=>Ht(e),expandChange:e=>!!e,removeTag:e=>!!e},FV=["placeholder"],VV=["onClick"];var zV=se({name:"ElCascader",__name:"cascader",props:DV,emits:BV,setup(e,{expose:t,emit:n}){const a={modifiers:[{name:"arrowPosition",enabled:!0,phase:"main",fn:({state:Be})=>{const{modifiersData:et,placement:ut}=Be;["right","left","bottom","top"].includes(ut)||et.arrow&&(et.arrow.x=35)},requires:["arrow"]}]},o=e,s=n,r=fs(),l=hn();let u=0,c=0;const d=fe("cascader"),f=fe("input"),v={small:7,default:11,large:15},{t:g}=Ct(),{formItem:p}=Dn(),h=ln(),{valueOnClear:m}=hu(o),{isComposing:b,handleComposition:k}=pu({afterComposition(Be){const et=Be.target?.value;Ye(et)}}),y=M(),S=M(),C=M(),E=M(),$=M(),O=M(),R=M(!1),N=M(!1),A=M(!1),_=M(""),V=M(""),z=M([]),U=M([]),W=w(()=>o.props.multiple?o.collapseTags?z.value.slice(0,o.maxCollapseTags):z.value:[]),P=w(()=>o.props.multiple?o.collapseTags?z.value.slice(o.maxCollapseTags):[]:[]),I=w(()=>r.style),L=w(()=>o.placeholder??g("el.cascader.placeholder")),D=w(()=>V.value||z.value.length>0||b.value?"":L.value),F=Sn(),q=w(()=>F.value==="small"?"small":"default"),j=w(()=>!!o.props.multiple),X=w(()=>!o.filterable||j.value),Q=w(()=>j.value?V.value:_.value),he=w(()=>$.value?.checkedNodes||[]),{wrapperRef:ue,isFocused:ge,handleBlur:ie}=ms(C,{disabled:h,beforeBlur(Be){return y.value?.isFocusInsideContent(Be)||S.value?.isFocusInsideContent(Be)},afterBlur(){o.validateEvent&&p?.validate?.("blur").catch(Be=>pt(Be))}}),ae=w(()=>!o.clearable||h.value||A.value||!N.value&&!ge.value?!1:!!he.value.length),ne=w(()=>{const{showAllLevels:Be,separator:et}=o,ut=he.value;return ut.length?j.value?"":ut[0].calcText(Be,et):""}),K=w(()=>p?.validateState||""),Z=w({get(){return es(o.modelValue)},set(Be){const et=Be??m.value;s(tt,et),s(bt,et),o.validateEvent&&p?.validate("change").catch(ut=>pt(ut))}}),re=w(()=>[d.b(),d.m(F.value),d.is("disabled",h.value),r.class]),ce=w(()=>[f.e("icon"),"icon-arrow-down",d.is("reverse",R.value)]),ve=w(()=>d.is("focus",ge.value)),ke=w(()=>y.value?.popperRef?.contentRef),Re=Be=>{ge.value&&ie(new FocusEvent("blur",Be)),Ie(!1)},Ie=Be=>{h.value||(Be=Be??!R.value,Be!==R.value&&(R.value=Be,C.value?.input?.setAttribute("aria-expanded",`${Be}`),Be?($e(),$.value&&Ne($.value.scrollToExpandingNode)):o.filterable&&mt(),s("visibleChange",Be)))},$e=()=>{Ne(()=>{y.value?.updatePopper()})},pe=()=>{A.value=!1},Ee=Be=>{const{showAllLevels:et,separator:ut}=o;return{node:Be,key:Be.uid,text:Be.calcText(et,ut),hitState:!1,closable:!h.value&&!Be.isDisabled}},me=Be=>{const et=Be.node;et.doCheck(!1),$.value?.calculateCheckedValue(),s("removeTag",et.valueByOption)},Me=()=>{switch(o.showCheckedStrategy){case"child":return he.value;case"parent":{const Be=je(!1),et=Be.map(ut=>ut.value);return Be.filter(ut=>!ut.parent||!et.includes(ut.parent.value))}default:return[]}},We=()=>{if(!j.value)return;const Be=Me(),et=[];Be.forEach(ut=>et.push(Ee(ut))),z.value=et},Xe=()=>{const{filterMethod:Be,showAllLevels:et,separator:ut}=o,kn=$.value?.getFlattedNodes(!o.props.checkStrictly)?.filter(Wt=>Wt.isDisabled?!1:(Wt.calcText(et,ut),Be(Wt,Q.value)));j.value&&z.value.forEach(Wt=>{Wt.hitState=!1}),A.value=!0,U.value=kn,$e()},Pe=()=>{let Be;A.value&&O.value?Be=O.value.$el.querySelector(`.${d.e("suggestion-item")}`):Be=$.value?.$el.querySelector(`.${d.b("node")}[tabindex="-1"]`),Be&&(Be.focus(),!A.value&&Be.click())},Ae=()=>{const Be=C.value?.input,et=E.value,ut=O.value?.$el;if(!(!Mt||!Be)){if(ut){const kn=ut.querySelector(`.${d.e("suggestion-list")}`);kn.style.minWidth=`${Be.offsetWidth}px`}if(et){const{offsetHeight:kn}=et,Wt=z.value.length>0?`${Math.max(kn,u)-2}px`:`${u}px`;if(Be.style.height=Wt,l.prefix){const bn=C.value?.$el.querySelector(`.${f.e("prefix")}`);let Je=0;bn&&(Je=bn.offsetWidth,Je>0&&(Je+=v[F.value||"default"])),et.style.left=`${Je}px`}else et.style.left="0";$e()}}},je=Be=>$.value?.getCheckedNodes(Be),Nt=Be=>{$e(),s("expandChange",Be)},Ue=Be=>{if(!b.value)switch(jt(Be)){case we.enter:case we.numpadEnter:Ie();break;case we.down:Ie(!0),Ne(Pe),Be.preventDefault();break;case we.esc:R.value===!0&&(Be.preventDefault(),Be.stopPropagation(),Ie(!1));break;case we.tab:Ie(!1);break}},rt=()=>{$.value?.clearCheckedNodes(),!R.value&&o.filterable&&mt(),Ie(!1),s("clear")},mt=()=>{const{value:Be}=ne;_.value=Be,V.value=Be},kt=Be=>{const{checked:et}=Be;j.value?$.value?.handleCheckChange(Be,!et,!1):(!et&&$.value?.handleCheckChange(Be,!0,!1),Ie(!1))},be=Be=>{const et=Be.target,ut=jt(Be);switch(ut){case we.up:case we.down:Be.preventDefault(),cc(WS(et,ut===we.up?-1:1,`.${d.e("suggestion-item")}[tabindex="-1"]`));break;case we.enter:case we.numpadEnter:et.click();break}},ze=()=>{const Be=z.value[z.value.length-1];c=V.value?0:c+1,!(!Be||!c||o.collapseTags&&z.value.length>1)&&(Be.hitState?me(Be):Be.hitState=!0)},de=ou(()=>{const{value:Be}=Q;if(!Be)return;const et=o.beforeFilter(Be);vr(et)?et.then(Xe).catch(()=>{}):et!==!1?Xe():pe()},w(()=>o.debounce)),Ye=(Be,et)=>{!R.value&&Ie(!0),!et?.isComposing&&(Be?de():pe())},$t=Be=>Number.parseFloat(GM(f.cssVarName("input-height"),Be).value)-2,Qt=()=>{C.value?.focus()},_n=()=>{C.value?.blur()};return le(A,$e),le([he,h,()=>o.collapseTags,()=>o.maxCollapseTags],We),le(z,()=>{Ne(()=>Ae())}),le(F,async()=>{await Ne();const Be=C.value.input;u=$t(Be)||u,Ae()}),le(ne,mt,{immediate:!0}),le(()=>R.value,Be=>{Be&&o.props.lazy&&o.props.lazyLoad&&$.value?.loadLazyRootNodes()}),ht(()=>{const Be=C.value.input,et=$t(Be);u=Be.offsetHeight||et,Zt(Be,Ae)}),t({getCheckedNodes:je,cascaderPanelRef:$,togglePopperVisible:Ie,contentRef:ke,presentText:ne,focus:Qt,blur:_n}),(Be,et)=>(x(),oe(i(Ln),{ref_key:"tooltipRef",ref:y,visible:R.value,teleported:e.teleported,"popper-class":[i(d).e("dropdown"),e.popperClass],"popper-style":e.popperStyle,"popper-options":a,"fallback-placements":e.fallbackPlacements,"stop-popper-mouse-event":!1,"gpu-acceleration":!1,placement:e.placement,transition:`${i(d).namespace.value}-zoom-in-top`,effect:e.effect,pure:"",persistent:e.persistent,onHide:pe},{default:J(()=>[ct((x(),B("div",{ref_key:"wrapperRef",ref:ue,class:T(re.value),style:Ke(I.value),onClick:et[8]||(et[8]=()=>Ie(X.value?void 0:!0)),onKeydown:Ue,onMouseenter:et[9]||(et[9]=ut=>N.value=!0),onMouseleave:et[10]||(et[10]=ut=>N.value=!1)},[Y(i(ea),{ref_key:"inputRef",ref:C,modelValue:_.value,"onUpdate:modelValue":et[1]||(et[1]=ut=>_.value=ut),placeholder:D.value,readonly:X.value,disabled:i(h),"validate-event":!1,size:i(F),class:T(ve.value),tabindex:j.value&&e.filterable&&!i(h)?-1:void 0,onCompositionstart:i(k),onCompositionupdate:i(k),onCompositionend:i(k),onInput:Ye},ua({suffix:J(()=>[ae.value?(x(),oe(i(De),{key:"clear",class:T([i(f).e("icon"),"icon-circle-close"]),onClick:Ge(rt,["stop"])},{default:J(()=>[(x(),oe(it(e.clearIcon)))]),_:1},8,["class"])):(x(),oe(i(De),{key:"arrow-down",class:T(ce.value),onClick:et[0]||(et[0]=Ge(ut=>Ie(),["stop"]))},{default:J(()=>[Y(i(Bo))]),_:1},8,["class"]))]),_:2},[Be.$slots.prefix?{name:"prefix",fn:J(()=>[ee(Be.$slots,"prefix")]),key:"0"}:void 0]),1032,["modelValue","placeholder","readonly","disabled","size","class","tabindex","onCompositionstart","onCompositionupdate","onCompositionend"]),j.value?(x(),B("div",{key:0,ref_key:"tagWrapper",ref:E,class:T([i(d).e("tags"),i(d).is("validate",!!K.value)])},[ee(Be.$slots,"tag",{data:z.value,deleteTag:me},()=>[(x(!0),B(Fe,null,yt(W.value,ut=>(x(),oe(i(ts),{key:ut.key,type:e.tagType,size:q.value,effect:e.tagEffect,hit:ut.hitState,closable:ut.closable,"disable-transitions":"",onClose:kn=>me(ut)},{default:J(()=>[H("span",null,Se(ut.text),1)]),_:2},1032,["type","size","effect","hit","closable","onClose"]))),128))]),e.collapseTags&&z.value.length>e.maxCollapseTags?(x(),oe(i(Ln),{key:0,ref_key:"tagTooltipRef",ref:S,disabled:R.value||!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],placement:"bottom","popper-class":e.popperClass,"popper-style":e.popperStyle,effect:e.effect,persistent:e.persistent},{default:J(()=>[Y(i(ts),{closable:!1,size:q.value,type:e.tagType,effect:e.tagEffect,"disable-transitions":""},{default:J(()=>[H("span",{class:T(i(d).e("tags-text"))}," + "+Se(z.value.length-e.maxCollapseTags),3)]),_:1},8,["size","type","effect"])]),content:J(()=>[Y(i(no),{"max-height":e.maxCollapseTagsTooltipHeight},{default:J(()=>[H("div",{class:T(i(d).e("collapse-tags"))},[(x(!0),B(Fe,null,yt(P.value,(ut,kn)=>(x(),B("div",{key:kn,class:T(i(d).e("collapse-tag"))},[(x(),oe(i(ts),{key:ut.key,class:"in-tooltip",type:e.tagType,size:q.value,effect:e.tagEffect,hit:ut.hitState,closable:ut.closable,"disable-transitions":"",onClose:Wt=>me(ut)},{default:J(()=>[H("span",null,Se(ut.text),1)]),_:2},1032,["type","size","effect","hit","closable","onClose"]))],2))),128))],2)]),_:1},8,["max-height"])]),_:1},8,["disabled","popper-class","popper-style","effect","persistent"])):te("v-if",!0),e.filterable&&!i(h)?ct((x(),B("input",{key:1,"onUpdate:modelValue":et[2]||(et[2]=ut=>V.value=ut),type:"text",class:T(i(d).e("search-input")),placeholder:ne.value?"":L.value,onInput:et[3]||(et[3]=ut=>Ye(V.value,ut)),onClick:et[4]||(et[4]=Ge(ut=>Ie(!0),["stop"])),onKeydown:an(ze,["delete"]),onCompositionstart:et[5]||(et[5]=(...ut)=>i(k)&&i(k)(...ut)),onCompositionupdate:et[6]||(et[6]=(...ut)=>i(k)&&i(k)(...ut)),onCompositionend:et[7]||(et[7]=(...ut)=>i(k)&&i(k)(...ut))},null,42,FV)),[[z1,V.value]]):te("v-if",!0)],2)):te("v-if",!0)],38)),[[i(zs),Re,ke.value]])]),content:J(()=>[Be.$slots.header?(x(),B("div",{key:0,class:T(i(d).e("header")),onClick:et[11]||(et[11]=Ge(()=>{},["stop"]))},[ee(Be.$slots,"header")],2)):te("v-if",!0),ct(Y(i(Xk),{ref_key:"cascaderPanelRef",ref:$,modelValue:Z.value,"onUpdate:modelValue":et[12]||(et[12]=ut=>Z.value=ut),options:e.options,props:o.props,border:!1,"render-label":Be.$slots.default,onExpandChange:Nt,onClose:et[13]||(et[13]=ut=>Be.$nextTick(()=>Ie(!1)))},{empty:J(()=>[ee(Be.$slots,"empty")]),_:3},8,["modelValue","options","props","render-label"]),[[Pt,!A.value]]),e.filterable?ct((x(),oe(i(no),{key:1,ref_key:"suggestionPanel",ref:O,tag:"ul",class:T(i(d).e("suggestion-panel")),"view-class":i(d).e("suggestion-list"),onKeydown:be},{default:J(()=>[U.value.length?(x(!0),B(Fe,{key:0},yt(U.value,ut=>(x(),B("li",{key:ut.uid,class:T([i(d).e("suggestion-item"),i(d).is("checked",ut.checked)]),tabindex:-1,onClick:kn=>kt(ut)},[ee(Be.$slots,"suggestion-item",{item:ut},()=>[H("span",null,Se(ut.text),1),ut.checked?(x(),oe(i(De),{key:0},{default:J(()=>[Y(i(vu))]),_:1})):te("v-if",!0)])],10,VV))),128)):ee(Be.$slots,"empty",{key:1},()=>[H("li",{class:T(i(d).e("empty-text"))},Se(i(g)("el.cascader.noMatch")),3)])]),_:3},8,["class","view-class"])),[[Pt,A.value]]):te("v-if",!0),Be.$slots.footer?(x(),B("div",{key:2,class:T(i(d).e("footer")),onClick:et[14]||(et[14]=Ge(()=>{},["stop"]))},[ee(Be.$slots,"footer")],2)):te("v-if",!0)]),_:3},8,["visible","teleported","popper-class","popper-style","fallback-placements","placement","transition","effect","persistent"]))}}),HV=zV;const KV=st(HV),WV=Ce({checked:Boolean,disabled:Boolean,type:{type:String,values:["primary","success","info","warning","danger"],default:"primary"}}),jV={"update:checked":e=>Ht(e),[bt]:e=>Ht(e)};var UV=se({name:"ElCheckTag",__name:"check-tag",props:WV,emits:jV,setup(e,{emit:t}){const n=e,a=t,o=fe("check-tag"),s=w(()=>[o.b(),o.is("checked",n.checked),o.is("disabled",n.disabled),o.m(n.type||"primary")]),r=()=>{if(n.disabled)return;const l=!n.checked;a(bt,l),a("update:checked",l)};return(l,u)=>(x(),B("span",{class:T(s.value),onClick:r},[ee(l.$slots,"default")],2))}}),qV=UV;const YV=st(qV),GV=Ce({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:G([Number,Object]),default:()=>sn({})},sm:{type:G([Number,Object]),default:()=>sn({})},md:{type:G([Number,Object]),default:()=>sn({})},lg:{type:G([Number,Object]),default:()=>sn({})},xl:{type:G([Number,Object]),default:()=>sn({})}}),XV=["start","center","end","space-around","space-between","space-evenly"],JV=["top","middle","bottom"],ZV=Ce({tag:{type:String,default:"div"},gutter:{type:Number,default:0},justify:{type:String,values:XV,default:"start"},align:{type:String,values:JV}}),Jk=Symbol("rowContextKey");var QV=se({name:"ElRow",__name:"row",props:ZV,setup(e){const t=e,n=fe("row");St(Jk,{gutter:w(()=>t.gutter)});const a=w(()=>{const s={};return t.gutter&&(s.marginRight=s.marginLeft=`-${t.gutter/2}px`),s}),o=w(()=>[n.b(),n.is(`justify-${t.justify}`,t.justify!=="start"),n.is(`align-${t.align}`,!!t.align)]);return(s,r)=>(x(),oe(it(e.tag),{class:T(o.value),style:Ke(a.value)},{default:J(()=>[ee(s.$slots,"default")]),_:3},8,["class","style"]))}}),e6=QV;const t6=st(e6);var n6=se({name:"ElCol",__name:"col",props:GV,setup(e){const t=e,{gutter:n}=_e(Jk,{gutter:w(()=>0)}),a=fe("col"),o=w(()=>{const r={};return n.value&&(r.paddingLeft=r.paddingRight=`${n.value/2}px`),r}),s=w(()=>{const r=[];return["span","offset","pull","push"].forEach(l=>{const u=t[l];He(u)&&(l==="span"?r.push(a.b(`${t[l]}`)):u>0&&r.push(a.b(`${l}-${t[l]}`)))}),["xs","sm","md","lg","xl"].forEach(l=>{He(t[l])?r.push(a.b(`${l}-${t[l]}`)):nt(t[l])&&Object.entries(t[l]).forEach(([u,c])=>{r.push(u!=="span"?a.b(`${l}-${u}-${c}`):a.b(`${l}-${c}`))})}),n.value&&r.push(a.is("guttered")),[a.b(),r]});return(r,l)=>(x(),oe(it(e.tag),{class:T(s.value),style:Ke(o.value)},{default:J(()=>[ee(r.$slots,"default")]),_:3},8,["class","style"]))}}),a6=n6;const o6=st(a6),Zy=e=>He(e)||Le(e)||ye(e),s6=Ce({accordion:Boolean,modelValue:{type:G([Array,String,Number]),default:()=>sn([])},expandIconPosition:{type:G([String]),default:"right"},beforeCollapse:{type:G(Function)}}),r6={[tt]:Zy,[bt]:Zy},Zk=Symbol("collapseContextKey"),l6=Ce({title:{type:String,default:""},name:{type:G([String,Number]),default:void 0},icon:{type:Kt,default:na},disabled:Boolean});var i6=se({name:"ElCollapseTransition",__name:"collapse-transition",setup(e){const t=fe("collapse-transition"),n=o=>{o.style.maxHeight="",o.style.overflow=o.dataset.oldOverflow,o.style.paddingTop=o.dataset.oldPaddingTop,o.style.paddingBottom=o.dataset.oldPaddingBottom},a={beforeEnter(o){o.dataset||(o.dataset={}),o.dataset.oldPaddingTop=o.style.paddingTop,o.dataset.oldPaddingBottom=o.style.paddingBottom,o.style.height&&(o.dataset.elExistsHeight=o.style.height),o.style.maxHeight=0,o.style.paddingTop=0,o.style.paddingBottom=0},enter(o){requestAnimationFrame(()=>{o.dataset.oldOverflow=o.style.overflow,o.dataset.elExistsHeight?o.style.maxHeight=o.dataset.elExistsHeight:o.scrollHeight!==0?o.style.maxHeight=`${o.scrollHeight}px`:o.style.maxHeight=0,o.style.paddingTop=o.dataset.oldPaddingTop,o.style.paddingBottom=o.dataset.oldPaddingBottom,o.style.overflow="hidden"})},afterEnter(o){o.style.maxHeight="",o.style.overflow=o.dataset.oldOverflow},enterCancelled(o){n(o)},beforeLeave(o){o.dataset||(o.dataset={}),o.dataset.oldPaddingTop=o.style.paddingTop,o.dataset.oldPaddingBottom=o.style.paddingBottom,o.dataset.oldOverflow=o.style.overflow,o.style.maxHeight=`${o.scrollHeight}px`,o.style.overflow="hidden"},leave(o){o.scrollHeight!==0&&(o.style.maxHeight=0,o.style.paddingTop=0,o.style.paddingBottom=0)},afterLeave(o){n(o)},leaveCancelled(o){n(o)}};return(o,s)=>(x(),oe(Vn,dt({name:i(t).b()},DT(a)),{default:J(()=>[ee(o.$slots,"default")]),_:3},16,["name"]))}}),u6=i6;const rf=st(u6),Qy="ElCollapse",c6=(e,t)=>{const n=M(Rn(e.modelValue)),a=r=>{n.value=r;const l=e.accordion?n.value[0]:n.value;t(tt,l),t(bt,l)},o=r=>{if(e.accordion)a([n.value[0]===r?"":r]);else{const l=[...n.value],u=l.indexOf(r);u>-1?l.splice(u,1):l.push(r),a(l)}},s=async r=>{const{beforeCollapse:l}=e;if(!l){o(r);return}const u=l(r);[vr(u),Ht(u)].includes(!0)||en(Qy,"beforeCollapse must return type `Promise` or `boolean`"),vr(u)?u.then(c=>{c!==!1&&o(r)}).catch(c=>{pt(Qy,`some error occurred: ${c}`)}):u&&o(r)};return le(()=>e.modelValue,()=>n.value=Rn(e.modelValue),{deep:!0}),St(Zk,{activeNames:n,handleItemClick:s}),{activeNames:n,setActiveNames:a}},d6=e=>{const t=fe("collapse");return{rootKls:w(()=>[t.b(),t.b(`icon-position-${e.expandIconPosition}`)])}};var f6=se({name:"ElCollapse",__name:"collapse",props:s6,emits:r6,setup(e,{expose:t,emit:n}){const a=e,{activeNames:o,setActiveNames:s}=c6(a,n),{rootKls:r}=d6(a);return t({activeNames:o,setActiveNames:s}),(l,u)=>(x(),B("div",{class:T(i(r))},[ee(l.$slots,"default")],2))}}),p6=f6;const h6=e=>{const t=_e(Zk),{namespace:n}=fe("collapse"),a=M(!1),o=M(!1),s=jv(),r=w(()=>s.current++),l=w(()=>e.name??`${n.value}-id-${s.prefix}-${i(r)}`),u=w(()=>t?.activeNames.value.includes(i(l)));return{focusing:a,id:r,isActive:u,handleFocus:()=>{setTimeout(()=>{o.value?o.value=!1:a.value=!0},50)},handleHeaderClick:v=>{e.disabled||v.target?.closest("input, textarea, select")||(t?.handleItemClick(i(l)),a.value=!1,o.value=!0)},handleEnterClick:v=>{v.target?.closest("input, textarea, select")||(v.preventDefault(),t?.handleItemClick(i(l)))}}},v6=(e,{focusing:t,isActive:n,id:a})=>{const o=fe("collapse"),s=w(()=>[o.b("item"),o.is("active",i(n)),o.is("disabled",e.disabled)]),r=w(()=>[o.be("item","header"),o.is("active",i(n)),{focusing:i(t)&&!e.disabled}]),l=w(()=>[o.be("item","arrow"),o.is("active",i(n))]);return{itemTitleKls:w(()=>[o.be("item","title")]),arrowKls:l,headKls:r,rootKls:s,itemWrapperKls:w(()=>o.be("item","wrap")),itemContentKls:w(()=>o.be("item","content")),scopedContentId:w(()=>o.b(`content-${i(a)}`)),scopedHeadId:w(()=>o.b(`head-${i(a)}`))}},m6=["id","aria-expanded","aria-controls","aria-describedby","tabindex","aria-disabled"],g6=["id","aria-hidden","aria-labelledby"];var b6=se({name:"ElCollapseItem",__name:"collapse-item",props:l6,setup(e,{expose:t}){const n=e,{focusing:a,id:o,isActive:s,handleFocus:r,handleHeaderClick:l,handleEnterClick:u}=h6(n),{arrowKls:c,headKls:d,rootKls:f,itemTitleKls:v,itemWrapperKls:g,itemContentKls:p,scopedContentId:h,scopedHeadId:m}=v6(n,{focusing:a,isActive:s,id:o});return t({isActive:s}),(b,k)=>(x(),B("div",{class:T(i(f))},[H("div",{id:i(m),class:T(i(d)),"aria-expanded":i(s),"aria-controls":i(h),"aria-describedby":i(h),tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,role:"button",onClick:k[0]||(k[0]=(...y)=>i(l)&&i(l)(...y)),onKeydown:k[1]||(k[1]=an(Ge((...y)=>i(u)&&i(u)(...y),["stop"]),["space","enter"])),onFocus:k[2]||(k[2]=(...y)=>i(r)&&i(r)(...y)),onBlur:k[3]||(k[3]=y=>a.value=!1)},[H("span",{class:T(i(v))},[ee(b.$slots,"title",{isActive:i(s)},()=>[wt(Se(e.title),1)])],2),ee(b.$slots,"icon",{isActive:i(s)},()=>[Y(i(De),{class:T(i(c))},{default:J(()=>[(x(),oe(it(e.icon)))]),_:1},8,["class"])])],42,m6),Y(i(rf),null,{default:J(()=>[ct(H("div",{id:i(h),role:"region",class:T(i(g)),"aria-hidden":!i(s),"aria-labelledby":i(m)},[H("div",{class:T(i(p))},[ee(b.$slots,"default")],2)],10,g6),[[Pt,i(s)]])]),_:3})],2))}}),Qk=b6;const y6=st(p6,{CollapseItem:Qk}),w6=tn(Qk),e2=Ce({modelValue:{type:G(String),default:void 0},border:{type:Boolean,default:!0},showAlpha:Boolean,colorFormat:{type:G(String)},disabled:Boolean,predefine:{type:G(Array)},validateEvent:{type:Boolean,default:!0}}),S6={[tt]:e=>Le(e)||gn(e)},t2=Symbol("colorCommonPickerKey"),n2=Symbol("colorPickerPanelContextKey"),a2=Ce({color:{type:G(Object),required:!0},vertical:Boolean,disabled:Boolean}),C6=a2,e0=e=>{let t=0,n=e;for(;n;)t+=n.offsetTop,n=n.offsetParent;return t},hh=(e,t)=>Math.abs(e0(e)-e0(t)),o2=e=>{let t,n;return e.type==="touchend"?(n=e.changedTouches[0].clientY,t=e.changedTouches[0].clientX):e.type.startsWith("touch")?(n=e.touches[0].clientY,t=e.touches[0].clientX):(n=e.clientY,t=e.clientX),{clientX:t,clientY:n}};let Qf=!1;function vh(e,t){if(!Mt)return;const n=function(s){t.drag?.(s)},a=function(s){document.removeEventListener("mousemove",n),document.removeEventListener("mouseup",a),document.removeEventListener("touchmove",n),document.removeEventListener("touchend",a),document.onselectstart=null,document.ondragstart=null,Qf=!1,t.end?.(s)},o=function(s){Qf||(document.onselectstart=()=>!1,document.ondragstart=()=>!1,document.addEventListener("mousemove",n),document.addEventListener("mouseup",a),document.addEventListener("touchmove",n),document.addEventListener("touchend",a),Qf=!0,t.start?.(s))};e.addEventListener("mousedown",o),e.addEventListener("touchstart",o,{passive:!1})}const s2=(e,{key:t,minValue:n,maxValue:a})=>{const o=ft(),s=Xt(),r=Xt(),l=w(()=>e.color.get(t));function u(v){e.disabled||(v.target!==s.value&&c(v),s.value?.focus())}function c(v){if(!r.value||!s.value||e.disabled)return;const g=o.vnode.el.getBoundingClientRect(),{clientX:p,clientY:h}=o2(v);let m;if(e.vertical){let b=h-g.top;b=Math.max(s.value.offsetHeight/2,b),b=Math.min(b,g.height-s.value.offsetHeight/2),m=Math.round((b-s.value.offsetHeight/2)/(g.height-s.value.offsetHeight)*a)}else{let b=p-g.left;b=Math.max(s.value.offsetWidth/2,b),b=Math.min(b,g.width-s.value.offsetWidth/2),m=Math.round((b-s.value.offsetWidth/2)/(g.width-s.value.offsetWidth)*a)}e.color.set(t,m)}function d(v){if(e.disabled)return;const{shiftKey:g}=v,p=jt(v),h=g?10:1,m=t==="hue"?-1:1;let b=!0;switch(p){case we.left:case we.down:f(-h*m);break;case we.right:case we.up:f(h*m);break;case we.home:e.color.set(t,t==="hue"?a:n);break;case we.end:e.color.set(t,t==="hue"?n:a);break;case we.pageDown:f(-4*m);break;case we.pageUp:f(4*m);break;default:b=!1;break}b&&v.preventDefault()}function f(v){let g=l.value+v;g=ga?a:g,e.color.set(t,g)}return{thumb:s,bar:r,currentValue:l,handleDrag:c,handleClick:u,handleKeydown:d}},r2=(e,{namespace:t,maxValue:n,bar:a,thumb:o,currentValue:s,handleDrag:r,getBackground:l})=>{const u=ft(),c=fe(t),d=M(0),f=M(0),v=M();function g(){if(!o.value||e.vertical)return 0;const y=u.vnode.el,S=s.value;return y?Math.round(S*(y.offsetWidth-o.value.offsetWidth/2)/n):0}function p(){if(!o.value)return 0;const y=u.vnode.el;if(!e.vertical)return 0;const S=s.value;return y?Math.round(S*(y.offsetHeight-o.value.offsetHeight/2)/n):0}function h(){d.value=g(),f.value=p(),v.value=l?.()}ht(()=>{if(!a.value||!o.value)return;const y={drag:S=>{r(S)},end:S=>{r(S)}};vh(a.value,y),vh(o.value,y),h()}),le(s,()=>h()),le(()=>e.color.value,()=>h());const m=w(()=>[c.b(),c.is("vertical",e.vertical),c.is("disabled",e.disabled)]),b=w(()=>c.e("bar")),k=w(()=>c.e("thumb"));return{rootKls:m,barKls:b,barStyle:w(()=>({background:v.value})),thumbKls:k,thumbStyle:w(()=>({left:rn(d.value),top:rn(f.value)})),thumbLeft:d,thumbTop:f,update:h}},k6=["aria-label","aria-valuenow","aria-valuetext","aria-orientation","tabindex","aria-disabled"],t0=0,ep=100;var E6=se({name:"ElColorAlphaSlider",__name:"alpha-slider",props:a2,setup(e,{expose:t}){const n=e,{currentValue:a,bar:o,thumb:s,handleDrag:r,handleClick:l,handleKeydown:u}=s2(n,{key:"alpha",minValue:t0,maxValue:ep}),{rootKls:c,barKls:d,barStyle:f,thumbKls:v,thumbStyle:g,update:p}=r2(n,{namespace:"color-alpha-slider",maxValue:ep,currentValue:a,bar:o,thumb:s,handleDrag:r,getBackground:k}),{t:h}=Ct(),m=w(()=>h("el.colorpicker.alphaLabel")),b=w(()=>h("el.colorpicker.alphaDescription",{alpha:a.value,color:n.color.value}));function k(){if(n.color&&n.color.value){const{r:y,g:S,b:C}=n.color.toRgb();return`linear-gradient(to right, rgba(${y}, ${S}, ${C}, 0) 0%, rgba(${y}, ${S}, ${C}, 1) 100%)`}return""}return t({update:p,bar:o,thumb:s}),(y,S)=>(x(),B("div",{class:T(i(c))},[H("div",{ref_key:"bar",ref:o,class:T(i(d)),style:Ke(i(f)),onClick:S[0]||(S[0]=(...C)=>i(l)&&i(l)(...C))},null,6),H("div",{ref_key:"thumb",ref:s,class:T(i(v)),style:Ke(i(g)),"aria-label":m.value,"aria-valuenow":i(a),"aria-valuetext":b.value,"aria-orientation":e.vertical?"vertical":"horizontal","aria-valuemin":t0,"aria-valuemax":ep,role:"slider",tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,onKeydown:S[1]||(S[1]=(...C)=>i(u)&&i(u)(...C))},null,46,k6)],2))}}),x6=E6;const T6=["aria-label","aria-valuenow","aria-valuetext","aria-orientation","tabindex","aria-disabled"],n0=0,tp=360;var $6=se({name:"ElColorHueSlider",__name:"hue-slider",props:C6,setup(e,{expose:t}){const n=e,{currentValue:a,bar:o,thumb:s,handleDrag:r,handleClick:l,handleKeydown:u}=s2(n,{key:"hue",minValue:n0,maxValue:tp}),{rootKls:c,barKls:d,thumbKls:f,thumbStyle:v,thumbTop:g,update:p}=r2(n,{namespace:"color-hue-slider",maxValue:tp,currentValue:a,bar:o,thumb:s,handleDrag:r}),{t:h}=Ct(),m=w(()=>h("el.colorpicker.hueLabel")),b=w(()=>h("el.colorpicker.hueDescription",{hue:a.value,color:n.color.value}));return t({bar:o,thumb:s,thumbTop:g,update:p}),(k,y)=>(x(),B("div",{class:T(i(c))},[H("div",{ref_key:"bar",ref:o,class:T(i(d)),onClick:y[0]||(y[0]=(...S)=>i(l)&&i(l)(...S))},null,2),H("div",{ref_key:"thumb",ref:s,class:T(i(f)),style:Ke(i(v)),"aria-label":m.value,"aria-valuenow":i(a),"aria-valuetext":b.value,"aria-orientation":e.vertical?"vertical":"horizontal","aria-valuemin":n0,"aria-valuemax":tp,role:"slider",tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,onKeydown:y[1]||(y[1]=(...S)=>i(u)&&i(u)(...S))},null,46,T6)],2))}}),O6=$6;const N6=Ce({colors:{type:G(Array),required:!0},color:{type:G(Object),required:!0},enableAlpha:{type:Boolean,required:!0},disabled:Boolean});var rd=class{constructor(e={}){this._hue=0,this._saturation=100,this._value=100,this._alpha=100,this._tiny=new fn,this._isValid=!1,this.enableAlpha=!1,this.format="",this.value="";for(const t in e)Rt(e,t)&&(this[t]=e[t]);e.value?this.fromString(e.value):this.doOnChange()}set(e,t){if(arguments.length===1&&typeof e=="object"){for(const n in e)Rt(e,n)&&this.set(n,e[n]);return}this[`_${e}`]=t,this._isValid=!0,this.doOnChange()}get(e){return["hue","saturation","value","alpha"].includes(e)?Math.round(this[`_${e}`]):this[`_${e}`]}toRgb(){return this._isValid?this._tiny.toRgb():{r:255,g:255,b:255,a:0}}fromString(e){const t=new fn(e);if(this._isValid=t.isValid,t.isValid){const{h:n,s:a,v:o,a:s}=t.toHsv();this._hue=n,this._saturation=a*100,this._value=o*100,this._alpha=s*100}else this._hue=0,this._saturation=100,this._value=100,this._alpha=100;this.doOnChange()}clear(){this._isValid=!1,this.value="",this._hue=0,this._saturation=100,this._value=100,this._alpha=100}compare(e){const t=new fn({h:e._hue,s:e._saturation/100,v:e._value/100,a:e._alpha/100});return this._tiny.equals(t)}doOnChange(){const{_hue:e,_saturation:t,_value:n,_alpha:a,format:o,enableAlpha:s}=this;let r=o||(s?"rgb":"hex");o==="hex"&&s&&(r="hex8"),this._tiny=new fn({h:e,s:t/100,v:n/100,a:a/100}),this.value=this._isValid?this._tiny.toString(r):""}};const R6=e=>{const{currentColor:t}=_e(n2),n=M(o(e.colors,e.color));le(()=>t.value,s=>{const r=new rd({value:s,enableAlpha:e.enableAlpha});n.value.forEach(l=>{l.selected=r.compare(l)})}),wa(()=>{n.value=o(e.colors,e.color)});function a(s){e.color.fromString(e.colors[s])}function o(s,r){return s.map(l=>{const u=new rd({value:l,enableAlpha:e.enableAlpha});return u.selected=u.compare(r),u})}return{rgbaColors:n,handleSelect:a}},I6=e=>{const t=fe("color-predefine"),n=w(()=>[t.b(),t.is("disabled",e.disabled)]),a=w(()=>t.e("colors"));function o(s){return[t.e("color-selector"),t.is("alpha",s.get("alpha")<100),{selected:s.selected}]}return{rootKls:n,colorsKls:a,colorSelectorKls:o}},P6=["disabled","aria-label","onClick"];var M6=se({name:"ElColorPredefine",__name:"predefine",props:N6,setup(e){const t=e,{rgbaColors:n,handleSelect:a}=R6(t),{rootKls:o,colorsKls:s,colorSelectorKls:r}=I6(t),{t:l}=Ct(),u=c=>l("el.colorpicker.predefineDescription",{value:c});return(c,d)=>(x(),B("div",{class:T(i(o))},[H("div",{class:T(i(s))},[(x(!0),B(Fe,null,yt(i(n),(f,v)=>(x(),B("button",{key:e.colors[v],type:"button",disabled:e.disabled,"aria-label":u(f.value),class:T(i(r)(f)),onClick:g=>i(a)(v)},[H("div",{style:Ke({backgroundColor:f.value})},null,4)],10,P6))),128))],2)],2))}}),_6=M6;const A6=Ce({color:{type:G(Object),required:!0},disabled:Boolean}),L6=e=>{const t=ft(),n=M(),a=M(0),o=M(0),s=M("hsl(0, 100%, 50%)"),r=w(()=>e.color.get("saturation")),l=w(()=>e.color.get("value")),u=w(()=>e.color.get("hue"));function c(p){e.disabled||(p.target!==n.value&&d(p),n.value?.focus({preventScroll:!0}))}function d(p){if(e.disabled)return;const h=t.vnode.el.getBoundingClientRect(),{clientX:m,clientY:b}=o2(p);let k=m-h.left,y=b-h.top;k=Math.max(0,k),k=Math.min(k,h.width),y=Math.max(0,y),y=Math.min(y,h.height),o.value=k,a.value=y,e.color.set({saturation:k/h.width*100,value:100-y/h.height*100})}function f(p){if(e.disabled)return;const{shiftKey:h}=p,m=jt(p),b=h?10:1;let k=!0;switch(m){case we.left:v(-b);break;case we.right:v(b);break;case we.up:g(b);break;case we.down:g(-b);break;default:k=!1;break}k&&p.preventDefault()}function v(p){let h=r.value+p;h=h<0?0:h>100?100:h,e.color.set("saturation",h)}function g(p){let h=l.value+p;h=h<0?0:h>100?100:h,e.color.set("value",h)}return{cursorRef:n,cursorTop:a,cursorLeft:o,background:s,saturation:r,brightness:l,hue:u,handleClick:c,handleDrag:d,handleKeydown:f}},D6=(e,{cursorTop:t,cursorLeft:n,background:a,handleDrag:o})=>{const s=ft(),r=fe("color-svpanel");function l(){const u=e.color.get("saturation"),c=e.color.get("value"),{clientWidth:d,clientHeight:f}=s.vnode.el;n.value=u*d/100,t.value=(100-c)*f/100,a.value=`hsl(${e.color.get("hue")}, 100%, 50%)`}return ht(()=>{vh(s.vnode.el,{drag:u=>{o(u)},end:u=>{o(u)}}),l()}),le([()=>e.color.get("hue"),()=>e.color.get("value"),()=>e.color.value],()=>l()),{rootKls:w(()=>r.b()),cursorKls:w(()=>r.e("cursor")),rootStyle:w(()=>({backgroundColor:a.value})),cursorStyle:w(()=>({top:rn(t.value),left:rn(n.value)})),update:l}},B6=["tabindex","aria-disabled","aria-label","aria-valuenow","aria-valuetext"];var F6=se({name:"ElSvPanel",__name:"sv-panel",props:A6,setup(e,{expose:t}){const n=e,{cursorRef:a,cursorTop:o,cursorLeft:s,background:r,saturation:l,brightness:u,handleClick:c,handleDrag:d,handleKeydown:f}=L6(n),{rootKls:v,cursorKls:g,rootStyle:p,cursorStyle:h,update:m}=D6(n,{cursorTop:o,cursorLeft:s,background:r,handleDrag:d}),{t:b}=Ct(),k=w(()=>b("el.colorpicker.svLabel")),y=w(()=>b("el.colorpicker.svDescription",{saturation:l.value,brightness:u.value,color:n.color.value}));return t({update:m}),(S,C)=>(x(),B("div",{class:T(i(v)),style:Ke(i(p)),onClick:C[1]||(C[1]=(...E)=>i(c)&&i(c)(...E))},[H("div",{ref_key:"cursorRef",ref:a,class:T(i(g)),style:Ke(i(h)),tabindex:e.disabled?void 0:0,"aria-disabled":e.disabled,role:"slider","aria-valuemin":"0,0","aria-valuemax":"100,100","aria-label":k.value,"aria-valuenow":`${i(l)},${i(u)}`,"aria-valuetext":y.value,onKeydown:C[0]||(C[0]=(...E)=>i(f)&&i(f)(...E))},null,46,B6)],6))}}),V6=F6;const l2=(e,t)=>{const n=At(new rd({enableAlpha:e.showAlpha,format:e.colorFormat||"",value:e.modelValue}));return le(()=>[e.colorFormat,e.showAlpha],()=>{n.enableAlpha=e.showAlpha,n.format=e.colorFormat||n.format,n.doOnChange(),t(tt,n.value)}),{color:n}};var z6=se({name:"ElColorPickerPanel",__name:"color-picker-panel",props:e2,emits:S6,setup(e,{expose:t,emit:n}){const a=e,o=n,s=fe("color-picker-panel"),{formItem:r}=Dn(),l=ln(),u=M(),c=M(),d=M(),f=M(),v=M(""),{color:g}=_e(t2,()=>l2(a,o),!0);function p(){g.fromString(v.value),g.value!==v.value&&(v.value=g.value)}function h(){a.validateEvent&&r?.validate?.("blur").catch(b=>pt(b))}function m(){u.value?.update(),c.value?.update(),d.value?.update()}return ht(()=>{a.modelValue&&(v.value=g.value),Ne(m)}),le(()=>a.modelValue,b=>{b!==g.value&&(b?g.fromString(b):g.clear())}),le(()=>g.value,b=>{o(tt,b),v.value=b,a.validateEvent&&r?.validate("change").catch(k=>pt(k))}),St(n2,{currentColor:w(()=>g.value)}),t({color:g,inputRef:f,update:m}),(b,k)=>(x(),B("div",{class:T([i(s).b(),i(s).is("disabled",i(l)),i(s).is("border",e.border)]),onFocusout:h},[H("div",{class:T(i(s).e("wrapper"))},[Y(O6,{ref_key:"hueRef",ref:u,class:"hue-slider",color:i(g),vertical:"",disabled:i(l)},null,8,["color","disabled"]),Y(V6,{ref_key:"svRef",ref:c,color:i(g),disabled:i(l)},null,8,["color","disabled"])],2),e.showAlpha?(x(),oe(x6,{key:0,ref_key:"alphaRef",ref:d,color:i(g),disabled:i(l)},null,8,["color","disabled"])):te("v-if",!0),e.predefine?(x(),oe(_6,{key:1,ref:"predefine","enable-alpha":e.showAlpha,color:i(g),colors:e.predefine,disabled:i(l)},null,8,["enable-alpha","color","colors","disabled"])):te("v-if",!0),H("div",{class:T(i(s).e("footer"))},[Y(i(ea),{ref_key:"inputRef",ref:f,modelValue:v.value,"onUpdate:modelValue":k[0]||(k[0]=y=>v.value=y),"validate-event":!1,size:"small",disabled:i(l),onChange:p},null,8,["modelValue","disabled"]),ee(b.$slots,"footer")],2)],34))}}),H6=z6;const i2=st(H6),K6=Ce({persistent:{type:Boolean,default:!0},modelValue:{type:G(String),default:void 0},id:String,showAlpha:Boolean,colorFormat:{type:G(String)},disabled:{type:Boolean,default:void 0},clearable:{type:Boolean,default:!0},size:Tn,popperClass:zt.popperClass,popperStyle:zt.popperStyle,tabindex:{type:[String,Number],default:0},teleported:zt.teleported,appendTo:zt.appendTo,predefine:{type:G(Array)},validateEvent:{type:Boolean,default:!0},...Ir,...aa(["ariaLabel"])}),W6={[tt]:e=>Le(e)||gn(e),[bt]:e=>Le(e)||gn(e),activeChange:e=>Le(e)||gn(e),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0},j6=["id","aria-label","aria-labelledby","aria-description","aria-disabled","tabindex"];var U6=se({name:"ElColorPicker",__name:"color-picker",props:K6,emits:W6,setup(e,{expose:t,emit:n}){const a=e,o=n,{t:s}=Ct(),r=fe("color"),{formItem:l}=Dn(),u=Sn(),c=ln(),{valueOnClear:d,isEmptyValue:f}=hu(a,null),v=l2(a,o),{inputId:g,isLabeledByFormItem:p}=Ia(a,{formItemContext:l}),h=M(),m=M(),b=M(),k=M(!1),y=M(!1);let S=!0;const{isFocused:C,handleFocus:E,handleBlur:$}=ms(m,{disabled:c,beforeBlur(ae){return h.value?.isFocusInsideContent(ae)},afterBlur(){W(!1),D(),a.validateEvent&&l?.validate?.("blur").catch(ae=>pt(ae))}}),O=AM(()=>b.value?.color??v.color),R=w(()=>ss(a,Object.keys(e2))),N=w(()=>!a.modelValue&&!y.value?"transparent":U(O,a.showAlpha)),A=w(()=>!a.modelValue&&!y.value?"":O.value),_=w(()=>p.value?void 0:a.ariaLabel||s("el.colorpicker.defaultLabel")),V=w(()=>p.value?l?.labelId:void 0),z=w(()=>[r.b("picker"),r.is("disabled",c.value),r.bm("picker",u.value),r.is("focused",C.value)]);function U(ae,ne){const{r:K,g:Z,b:re,a:ce}=ae.toRgb();return ne?`rgba(${K}, ${Z}, ${re}, ${ce})`:`rgb(${K}, ${Z}, ${re})`}function W(ae){k.value=ae}const P=Po(W,100,{leading:!0});function I(){c.value||W(!0)}function L(){P(!1),D()}function D(){Ne(()=>{a.modelValue?O.fromString(a.modelValue):(O.value="",Ne(()=>{y.value=!1}))})}function F(){c.value||(k.value&&D(),P(!k.value))}function q(){const ae=f(O.value)?d.value:O.value;o(tt,ae),o(bt,ae),a.validateEvent&&l?.validate("change").catch(ne=>pt(ne)),P(!1),Ne(()=>{const ne=new rd({enableAlpha:a.showAlpha,format:a.colorFormat||"",value:a.modelValue});O.compare(ne)||D()})}function j(){P(!1),o(tt,d.value),o(bt,d.value),a.modelValue!==d.value&&a.validateEvent&&l?.validate("change").catch(ae=>pt(ae)),D(),o("clear")}function X(){b?.value?.inputRef?.focus()}function Q(){k.value&&(L(),C.value&&ge())}function he(ae){ae.preventDefault(),ae.stopPropagation(),W(!1),D()}function ue(ae){switch(jt(ae)){case we.enter:case we.numpadEnter:case we.space:ae.preventDefault(),ae.stopPropagation(),I();break;case we.esc:he(ae);break}}function ge(){m.value.focus()}function ie(){m.value.blur()}return le(()=>A.value,ae=>{S&&o("activeChange",ae),S=!0}),le(()=>O.value,()=>{!a.modelValue&&!y.value&&(y.value=!0)}),le(()=>a.modelValue,ae=>{ae?ae&&ae!==O.value&&(S=!1,O.fromString(ae)):y.value=!1}),le(()=>k.value,()=>{b.value&&Ne(b.value.update)}),St(t2,v),t({color:O,show:I,hide:L,focus:ge,blur:ie}),(ae,ne)=>(x(),oe(i(Ln),{ref_key:"popper",ref:h,visible:k.value,"show-arrow":!1,"fallback-placements":["bottom","top","right","left"],offset:0,"gpu-acceleration":!1,"popper-class":[i(r).be("picker","panel"),e.popperClass],"popper-style":e.popperStyle,"stop-popper-mouse-event":!1,pure:"",loop:"",role:"dialog",effect:"light",trigger:"click",teleported:e.teleported,transition:`${i(r).namespace.value}-zoom-in-top`,persistent:e.persistent,"append-to":e.appendTo,onShow:X,onHide:ne[2]||(ne[2]=K=>W(!1))},{content:J(()=>[ct((x(),oe(i(i2),dt({ref_key:"pickerPanelRef",ref:b},R.value,{border:!1,"validate-event":!1,onKeydown:an(he,["esc"])}),{footer:J(()=>[H("div",null,[e.clearable?(x(),oe(i(In),{key:0,class:T(i(r).be("footer","link-btn")),text:"",size:"small",onClick:j},{default:J(()=>[wt(Se(i(s)("el.colorpicker.clear")),1)]),_:1},8,["class"])):te("v-if",!0),Y(i(In),{plain:"",size:"small",class:T(i(r).be("footer","btn")),onClick:q},{default:J(()=>[wt(Se(i(s)("el.colorpicker.confirm")),1)]),_:1},8,["class"])])]),_:1},16)),[[i(zs),Q,m.value]])]),default:J(()=>[H("div",dt({id:i(g),ref_key:"triggerRef",ref:m},ae.$attrs,{class:z.value,role:"button","aria-label":_.value,"aria-labelledby":V.value,"aria-description":i(s)("el.colorpicker.description",{color:e.modelValue||""}),"aria-disabled":i(c),tabindex:i(c)?void 0:e.tabindex,onKeydown:ue,onFocus:ne[0]||(ne[0]=(...K)=>i(E)&&i(E)(...K)),onBlur:ne[1]||(ne[1]=(...K)=>i($)&&i($)(...K))}),[H("div",{class:T(i(r).be("picker","trigger")),onClick:F},[H("span",{class:T([i(r).be("picker","color"),i(r).is("alpha",e.showAlpha)])},[H("span",{class:T(i(r).be("picker","color-inner")),style:Ke({backgroundColor:N.value})},[ct(Y(i(De),{class:T([i(r).be("picker","icon"),i(r).is("icon-arrow-down")])},{default:J(()=>[Y(i(Bo))]),_:1},8,["class"]),[[Pt,e.modelValue||y.value]]),ct(Y(i(De),{class:T([i(r).be("picker","empty"),i(r).is("icon-close")])},{default:J(()=>[Y(i(Ha))]),_:1},8,["class"]),[[Pt,!e.modelValue&&!y.value]])],6)],2)],2)],16,j6)]),_:1},8,["visible","popper-class","popper-style","teleported","transition","persistent","append-to"]))}}),q6=U6;const Y6=st(q6);var G6=se({name:"ElContainer",__name:"container",props:{direction:{type:String,required:!1}},setup(e){const t=e,n=hn(),a=fe("container"),o=w(()=>t.direction==="vertical"?!0:t.direction==="horizontal"?!1:n&&n.default?n.default().some(s=>{const r=s.type.name;return r==="ElHeader"||r==="ElFooter"}):!1);return(s,r)=>(x(),B("section",{class:T([i(a).b(),i(a).is("vertical",o.value)])},[ee(s.$slots,"default")],2))}}),X6=G6,J6=se({name:"ElAside",__name:"aside",props:{width:{type:[String,null],required:!1,default:null}},setup(e){const t=e,n=fe("aside"),a=w(()=>t.width?n.cssVarBlock({width:t.width}):{});return(o,s)=>(x(),B("aside",{class:T(i(n).b()),style:Ke(a.value)},[ee(o.$slots,"default")],6))}}),u2=J6,Z6=se({name:"ElFooter",__name:"footer",props:{height:{type:[String,null],required:!1,default:null}},setup(e){const t=e,n=fe("footer"),a=w(()=>t.height?n.cssVarBlock({height:t.height}):{});return(o,s)=>(x(),B("footer",{class:T(i(n).b()),style:Ke(a.value)},[ee(o.$slots,"default")],6))}}),c2=Z6,Q6=se({name:"ElHeader",__name:"header",props:{height:{type:[String,null],required:!1,default:null}},setup(e){const t=e,n=fe("header"),a=w(()=>t.height?n.cssVarBlock({height:t.height}):{});return(o,s)=>(x(),B("header",{class:T(i(n).b()),style:Ke(a.value)},[ee(o.$slots,"default")],6))}}),d2=Q6,ez=se({name:"ElMain",__name:"main",setup(e){const t=fe("main");return(n,a)=>(x(),B("main",{class:T(i(t).b())},[ee(n.$slots,"default")],2))}}),f2=ez;const tz=st(X6,{Aside:u2,Footer:c2,Header:d2,Main:f2}),nz=tn(u2),az=tn(c2),oz=tn(d2),sz=tn(f2),rz=Ce({format:{type:String,default:"HH:mm:ss"},prefix:String,suffix:String,title:String,value:{type:G([Number,Object]),default:0},valueStyle:{type:G([String,Object,Array])}}),lz={finish:()=>!0,[bt]:e=>He(e)},iz=Ce({decimalSeparator:{type:String,default:"."},groupSeparator:{type:String,default:","},precision:{type:Number,default:0},formatter:Function,value:{type:G([Number,Object]),default:0},prefix:String,suffix:String,title:String,valueStyle:{type:G([String,Object,Array])}});var uz=se({name:"ElStatistic",__name:"statistic",props:iz,setup(e,{expose:t}){const n=e,a=fe("statistic"),o=w(()=>{const{value:s,formatter:r,precision:l,decimalSeparator:u,groupSeparator:c}=n;if(Ve(r))return r(s);if(!He(s)||Number.isNaN(s))return s;let[d,f=""]=String(s).split(".");return f=f.padEnd(l,"0").slice(0,l>0?l:0),d=d.replace(/\B(?=(\d{3})+(?!\d))/g,c),[d,f].join(f?u:"")});return t({displayValue:o}),(s,r)=>(x(),B("div",{class:T(i(a).b())},[s.$slots.title||e.title?(x(),B("div",{key:0,class:T(i(a).e("head"))},[ee(s.$slots,"title",{},()=>[wt(Se(e.title),1)])],2)):te("v-if",!0),H("div",{class:T(i(a).e("content"))},[s.$slots.prefix||e.prefix?(x(),B("div",{key:0,class:T(i(a).e("prefix"))},[ee(s.$slots,"prefix",{},()=>[H("span",null,Se(e.prefix),1)])],2)):te("v-if",!0),H("span",{class:T(i(a).e("number")),style:Ke(e.valueStyle)},Se(o.value),7),s.$slots.suffix||e.suffix?(x(),B("div",{key:1,class:T(i(a).e("suffix"))},[ee(s.$slots,"suffix",{},()=>[H("span",null,Se(e.suffix),1)])],2)):te("v-if",!0)],2)],2))}}),cz=uz;const p2=st(cz),dz=[["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]],a0=e=>He(e)?new Date(e).getTime():e.valueOf(),o0=(e,t)=>{let n=e;return dz.reduce((a,[o,s])=>{const r=new RegExp(`${o}+(?![^\\[\\]]*\\])`,"g");if(r.test(a)){const l=Math.floor(n/s);return n-=l*s,a.replace(r,u=>String(l).padStart(u.length,"0"))}return a},t).replace(/\[([^\]]*)]/g,"$1")};var fz=se({name:"ElCountdown",__name:"countdown",props:rz,emits:lz,setup(e,{expose:t,emit:n}){const a=e,o=n;let s;const r=M(0),l=w(()=>o0(r.value,a.format)),u=f=>o0(f,a.format),c=()=>{s&&(rs(s),s=void 0)},d=()=>{const f=a0(a.value),v=()=>{let g=f-Date.now();o(bt,g),g<=0?(g=0,c(),o("finish")):s=Qa(v),r.value=g};s=Qa(v)};return ht(()=>{r.value=a0(a.value)-Date.now(),le(()=>[a.value,a.format],()=>{c(),d()},{immediate:!0})}),Bt(()=>{c()}),t({displayValue:l}),(f,v)=>(x(),oe(i(p2),{value:r.value,title:e.title,prefix:e.prefix,suffix:e.suffix,"value-style":e.valueStyle,formatter:u},ua({_:2},[yt(f.$slots,(g,p)=>({name:p,fn:J(()=>[ee(f.$slots,p)])}))]),1032,["value","title","prefix","suffix","value-style"]))}}),pz=fz;const hz=st(pz),vz=Ce({valueFormat:String,dateFormat:String,timeFormat:String,disabled:{type:Boolean,default:void 0},modelValue:{type:G([Date,Array,String,Number]),default:""},defaultValue:{type:G([Date,Array])},defaultTime:{type:G([Date,Array])},isRange:Boolean,...lm,disabledDate:{type:Function},cellClassName:{type:Function},shortcuts:{type:Array,default:()=>[]},arrowControl:Boolean,unlinkPanels:Boolean,showNow:{type:Boolean,default:!0},showConfirm:Boolean,showFooter:Boolean,showWeekNumber:Boolean,type:{type:G(String),default:"date"},clearable:{type:Boolean,default:!0},border:{type:Boolean,default:!0},editable:{type:Boolean,default:!0}}),vm=Symbol("rootPickerContextKey"),wu="ElIsDefaultFormat",mz=["date","dates","year","years","month","months","week","range"],mm=Ce({cellClassName:{type:G(Function)},disabledDate:{type:G(Function)},date:{type:G(Object),required:!0},minDate:{type:G(Object)},maxDate:{type:G(Object)},parsedValue:{type:G([Object,Array])},rangeState:{type:G(Object),default:()=>({endDate:null,selecting:!1})},disabled:Boolean}),h2=Ce({type:{type:G(String),required:!0,values:aO},dateFormat:String,timeFormat:String,showNow:{type:Boolean,default:!0},showConfirm:Boolean,showFooter:{type:Boolean,default:!0},showWeekNumber:Boolean,border:Boolean,disabled:Boolean,editable:{type:Boolean,default:!0}}),gm=Ce({unlinkPanels:Boolean,visible:{type:Boolean,default:!0},showConfirm:Boolean,showFooter:{type:Boolean,default:!0},border:Boolean,disabled:Boolean,parsedValue:{type:G(Array)}}),bm=e=>({type:String,values:mz,default:e}),gz=Ce({...h2,parsedValue:{type:G([Object,Array])},visible:{type:Boolean,default:!0},format:{type:String,default:""}}),Di=e=>{if(!ye(e))return!1;const[t,n]=e;return ot.isDayjs(t)&&ot.isDayjs(n)&&ot(t).isValid()&&ot(n).isValid()&&t.isSameOrBefore(n)},lf=(e,{lang:t,step:n=1,unit:a,unlinkPanels:o})=>{let s;if(ye(e)){let[r,l]=e.map(u=>ot(u).locale(t));return o||(l=r.add(n,a)),[r,l]}else e?s=ot(e):s=ot();return s=s.locale(t),[s,s.add(n,a)]},bz=(e,t,{columnIndexOffset:n,startDate:a,nextEndDate:o,now:s,unit:r,relativeDateGetter:l,setCellMetadata:u,setRowMetadata:c})=>{for(let d=0;d{const o=ot().locale(a).startOf("month").month(n).year(t).hour(e.hour()).minute(e.minute()).second(e.second());return _s(o.daysInMonth()).map(s=>o.add(s,"day").toDate())},Sl=(e,t,n,a,o)=>{const s=ot().year(t).month(n).startOf("month").hour(e.hour()).minute(e.minute()).second(e.second()),r=ld(e,t,n,a).find(l=>!o?.(l));return r?ot(r).locale(a):s.locale(a)},id=(e,t,n)=>{const a=e.year();if(!n?.(e.toDate()))return e.locale(t);const o=e.month();if(!ld(e,a,o,t).every(n))return Sl(e,a,o,t,n);for(let s=0;s<12;s++)if(!ld(e,a,s,t).every(n))return Sl(e,a,s,t,n);return e},Cl=(e,t,n,a)=>{if(ye(e))return e.map(o=>Cl(o,t,n,a));if(Le(e)){const o=a?.value?ot(e):ot(e,t);if(!o.isValid())return o}return ot(e,t).locale(n)},yz=Ce({...mm,showWeekNumber:Boolean,selectionMode:bm("date")}),wz=["changerange","pick","select"],ud=(e="")=>["normal","today"].includes(e),Sz=(e,t)=>{const{lang:n}=Ct(),a=M(),o=M(),s=M(),r=M(),l=M([[],[],[],[],[],[]]);let u=!1;const c=e.date.$locale().weekStart||7,d=e.date.locale("en").localeData().weekdaysShort().map(L=>L.toLowerCase()),f=w(()=>c>3?7-c:-c),v=w(()=>{const L=e.date.startOf("month");return L.subtract(L.day()||7,"day")}),g=w(()=>d.concat(d).slice(c,c+7)),p=w(()=>Yc(i(S)).some(L=>L.isCurrent)),h=w(()=>{const L=e.date.startOf("month");return{startOfMonthDay:L.day()||7,dateCountOfMonth:L.daysInMonth(),dateCountOfLastMonth:L.subtract(1,"month").daysInMonth()}}),m=w(()=>e.selectionMode==="dates"?Zn(e.parsedValue):[]),b=(L,{count:D,rowIndex:F,columnIndex:q})=>{const{startOfMonthDay:j,dateCountOfMonth:X,dateCountOfLastMonth:Q}=i(h),he=i(f);if(F>=0&&F<=1){const ue=j+he<0?7+j+he:j+he;if(q+F*7>=ue)return L.text=D,!0;L.text=Q-(ue-q%7)+1+F*7,L.type="prev-month"}else return D<=X?L.text=D:(L.text=D-X,L.type="next-month"),!0;return!1},k=(L,{columnIndex:D,rowIndex:F},q)=>{const{disabledDate:j,cellClassName:X}=e,Q=i(m),he=b(L,{count:q,rowIndex:F,columnIndex:D}),ue=L.dayjs.toDate();return L.selected=Q.find(ge=>ge.isSame(L.dayjs,"day")),L.isSelected=!!L.selected,L.isCurrent=E(L),L.disabled=j?.(ue),L.customClass=X?.(ue),he},y=L=>{if(e.selectionMode==="week"){const[D,F]=e.showWeekNumber?[1,7]:[0,6],q=I(L[D+1]);L[D].inRange=q,L[D].start=q,L[F].inRange=q,L[F].end=q}},S=w(()=>{const{minDate:L,maxDate:D,rangeState:F,showWeekNumber:q}=e,j=i(f),X=i(l),Q="day";let he=1;if(bz({row:6,column:7},X,{startDate:L,columnIndexOffset:q?1:0,nextEndDate:F.endDate||D||F.selecting&&L||null,now:ot().locale(i(n)).startOf(Q),unit:Q,relativeDateGetter:ue=>i(v).add(ue-j,Q),setCellMetadata:(...ue)=>{k(...ue,he)&&(he+=1)},setRowMetadata:y}),q)for(let ue=0;ue<6;ue++)X[ue][1].dayjs&&(X[ue][0]={type:"week",text:X[ue][1].dayjs.week()});return X});le(()=>e.date,async()=>{i(a)?.contains(document.activeElement)&&(await Ne(),await C())});const C=async()=>i(o)?.focus(),E=L=>e.selectionMode==="date"&&ud(L.type)&&$(L,e.parsedValue),$=(L,D)=>D?ot(D).locale(i(n)).isSame(e.date.date(Number(L.text)),"day"):!1,O=(L,D)=>{const F=i(h).startOfMonthDay,q=i(f),j=F+q<0?7+F+q:F+q,X=L*7+(D-(e.showWeekNumber?1:0));return e.date.startOf("month").subtract(j,"day").add(X,"day")},R=L=>{if(!e.rangeState.selecting)return;let D=L.target;if(D.tagName==="SPAN"&&(D=D.parentNode?.parentNode),D.tagName==="DIV"&&(D=D.parentNode),D.tagName!=="TD")return;const F=D.parentNode.rowIndex-1,q=D.cellIndex;i(S)[F][q].disabled||(F!==i(s)||q!==i(r))&&(s.value=F,r.value=q,t("changerange",{selecting:!0,endDate:O(F,q)}))},N=L=>!i(p)&&L?.text===1&&ud(L.type)||L.isCurrent,A=L=>{u||i(p)||e.selectionMode!=="date"||P(L,!0)},_=L=>{L.target.closest("td")&&(u=!0)},V=L=>{L.target.closest("td")&&(u=!1)},z=L=>{!e.rangeState.selecting||!e.minDate?(t("pick",{minDate:L,maxDate:null}),t("select",!0)):(L>=e.minDate?t("pick",{minDate:e.minDate,maxDate:L}):t("pick",{minDate:L,maxDate:e.minDate}),t("select",!1))},U=L=>{const D=L.week(),F=`${L.year()}w${D}`;t("pick",{year:L.year(),week:D,value:F,date:L.startOf("week")})},W=(L,D)=>{t("pick",D?Zn(e.parsedValue).filter(F=>F?.valueOf()!==L.valueOf()):Zn(e.parsedValue).concat([L]))},P=(L,D=!1)=>{if(e.disabled)return;const F=L.target.closest("td");if(!F)return;const q=F.parentNode.rowIndex-1,j=F.cellIndex,X=i(S)[q][j];if(X.disabled||X.type==="week")return;const Q=O(q,j);switch(e.selectionMode){case"range":z(Q);break;case"date":t("pick",Q,D);break;case"week":U(Q);break;case"dates":W(Q,!!X.selected);break}},I=L=>{if(e.selectionMode!=="week")return!1;let D=e.date.startOf("day");if(L.type==="prev-month"&&(D=D.subtract(1,"month")),L.type==="next-month"&&(D=D.add(1,"month")),D=D.date(Number.parseInt(L.text,10)),e.parsedValue&&!ye(e.parsedValue)){const F=(e.parsedValue.day()-c+7)%7-1;return e.parsedValue.subtract(F,"day").isSame(D,"day")}return!1};return{WEEKS:g,rows:S,tbodyRef:a,currentCellRef:o,focus:C,isCurrent:E,isWeekActive:I,isSelectedCell:N,handlePickDate:P,handleMouseUp:V,handleMouseDown:_,handleMouseMove:R,handleFocus:A}},Cz=(e,{isCurrent:t,isWeekActive:n})=>{const a=fe("date-table"),{t:o}=Ct(),s=w(()=>[a.b(),a.is("week-mode",e.selectionMode==="week"&&!e.disabled)]),r=w(()=>o("el.datepicker.dateTablePrompt")),l=c=>{const d=[];return ud(c.type)&&!c.disabled?(d.push("available"),c.type==="today"&&d.push("today")):d.push(c.type),t(c)&&d.push("current"),c.inRange&&(ud(c.type)||e.selectionMode==="week")&&(d.push("in-range"),c.start&&d.push("start-date"),c.end&&d.push("end-date")),(c.disabled||e.disabled)&&d.push("disabled"),c.selected&&d.push("selected"),c.customClass&&d.push(c.customClass),d.join(" ")},u=c=>[a.e("row"),{current:n(c)}];return{tableKls:s,tableLabel:r,weekHeaderClass:a.e("week-header"),getCellClasses:l,getRowKls:u,t:o}},kz=Ce({cell:{type:G(Object)}});var ym=se({name:"ElDatePickerCell",props:kz,setup(e){const t=fe("date-table-cell"),{slots:n}=_e(vm);return()=>{const{cell:a}=e;return ee(n,"default",{...a},()=>[Y("div",{class:t.b()},[Y("span",{class:t.e("text")},[a?.renderText??a?.text])])])}}});const Ez=["aria-label"],xz=["aria-label"],Tz=["aria-current","aria-selected","tabindex","aria-disabled"];var $z=se({__name:"basic-date-table",props:yz,emits:wz,setup(e,{expose:t,emit:n}){const a=e,{WEEKS:o,rows:s,tbodyRef:r,currentCellRef:l,focus:u,isCurrent:c,isWeekActive:d,isSelectedCell:f,handlePickDate:v,handleMouseUp:g,handleMouseDown:p,handleMouseMove:h,handleFocus:m}=Sz(a,n),{tableLabel:b,tableKls:k,getCellClasses:y,getRowKls:S,weekHeaderClass:C,t:E}=Cz(a,{isCurrent:c,isWeekActive:d});let $=!1;return Bt(()=>{$=!0}),t({focus:u}),(O,R)=>(x(),B("table",{"aria-label":i(b),class:T(i(k)),cellspacing:"0",cellpadding:"0",role:"grid",onClick:R[1]||(R[1]=(...N)=>i(v)&&i(v)(...N)),onMousemove:R[2]||(R[2]=(...N)=>i(h)&&i(h)(...N)),onMousedown:R[3]||(R[3]=(...N)=>i(p)&&i(p)(...N)),onMouseup:R[4]||(R[4]=(...N)=>i(g)&&i(g)(...N))},[H("tbody",{ref_key:"tbodyRef",ref:r},[H("tr",null,[O.showWeekNumber?(x(),B("th",{key:0,scope:"col",class:T(i(C))},null,2)):te("v-if",!0),(x(!0),B(Fe,null,yt(i(o),(N,A)=>(x(),B("th",{key:A,"aria-label":i(E)("el.datepicker.weeksFull."+N),scope:"col"},Se(i(E)("el.datepicker.weeks."+N)),9,xz))),128))]),(x(!0),B(Fe,null,yt(i(s),(N,A)=>(x(),B("tr",{key:A,class:T(i(S)(O.showWeekNumber?N[2]:N[1]))},[(x(!0),B(Fe,null,yt(N,(_,V)=>(x(),B("td",{key:`${A}.${V}`,ref_for:!0,ref:z=>!i($)&&i(f)(_)&&(l.value=z),class:T(i(y)(_)),"aria-current":_.isCurrent?"date":void 0,"aria-selected":_.isCurrent,tabindex:O.disabled?void 0:i(f)(_)?0:-1,"aria-disabled":O.disabled,onFocus:R[0]||(R[0]=(...z)=>i(m)&&i(m)(...z))},[Y(i(ym),{cell:_},null,8,["cell"])],42,Tz))),128))],2))),128))],512)],42,Ez))}}),mh=$z;const Oz=Ce({...mm,selectionMode:bm("month")}),Nz=["aria-label"],Rz=["aria-selected","aria-label","tabindex","onKeydown"];var Iz=se({__name:"basic-month-table",props:Oz,emits:["changerange","pick","select"],setup(e,{expose:t,emit:n}){const a=e,o=n,s=fe("month-table"),{t:r,lang:l}=Ct(),u=M(),c=M(),d=M(a.date.locale("en").localeData().monthsShort().map(S=>S.toLowerCase())),f=M([[],[],[]]),v=M(),g=M(),p=w(()=>{const S=f.value,C=ot().locale(l.value).startOf("month");for(let E=0;E<3;E++){const $=S[E];for(let O=0;O<4;O++){const R=$[O]||={row:E,column:O,type:"normal",inRange:!1,start:!1,end:!1,text:-1,disabled:!1,isSelected:!1,customClass:void 0,date:void 0,dayjs:void 0,isCurrent:void 0,selected:void 0,renderText:void 0,timestamp:void 0};R.type="normal";const N=E*4+O,A=a.date.startOf("year").month(N),_=a.rangeState.endDate||a.maxDate||a.rangeState.selecting&&a.minDate||null;R.inRange=!!(a.minDate&&A.isSameOrAfter(a.minDate,"month")&&_&&A.isSameOrBefore(_,"month"))||!!(a.minDate&&A.isSameOrBefore(a.minDate,"month")&&_&&A.isSameOrAfter(_,"month")),a.minDate?.isSameOrAfter(_)?(R.start=!!(_&&A.isSame(_,"month")),R.end=a.minDate&&A.isSame(a.minDate,"month")):(R.start=!!(a.minDate&&A.isSame(a.minDate,"month")),R.end=!!(_&&A.isSame(_,"month"))),C.isSame(A)&&(R.type="today");const V=A.toDate();R.text=N,R.disabled=a.disabledDate?.(V)||!1,R.date=V,R.customClass=a.cellClassName?.(V),R.dayjs=A,R.timestamp=A.valueOf(),R.isSelected=b(R)}}return S}),h=()=>{c.value?.focus()},m=S=>{const C={},E=a.date.year(),$=new Date,O=S.text;return C.disabled=a.disabled||(a.disabledDate?ld(a.date,E,O,l.value).every(a.disabledDate):!1),C.current=Zn(a.parsedValue).some(R=>ot.isDayjs(R)&&R.year()===E&&R.month()===O),C.today=$.getFullYear()===E&&$.getMonth()===O,S.customClass&&(C[S.customClass]=!0),S.inRange&&(C["in-range"]=!0,S.start&&(C["start-date"]=!0),S.end&&(C["end-date"]=!0)),C},b=S=>{const C=a.date.year(),E=S.text;return Zn(a.date).some($=>$.year()===C&&$.month()===E)},k=S=>{if(!a.rangeState.selecting)return;let C=S.target;if(C.tagName==="SPAN"&&(C=C.parentNode?.parentNode),C.tagName==="DIV"&&(C=C.parentNode),C.tagName!=="TD")return;const E=C.parentNode.rowIndex,$=C.cellIndex;p.value[E][$].disabled||(E!==v.value||$!==g.value)&&(v.value=E,g.value=$,o("changerange",{selecting:!0,endDate:a.date.startOf("year").month(E*4+$)}))},y=S=>{if(a.disabled)return;const C=S.target?.closest("td");if(C?.tagName!=="TD"||To(C,"disabled"))return;const E=C.cellIndex,$=C.parentNode.rowIndex*4+E,O=a.date.startOf("year").month($);if(a.selectionMode==="months"){if(S.type==="keydown"){o("pick",Zn(a.parsedValue),!1);return}const R=Sl(a.date,a.date.year(),$,l.value,a.disabledDate);o("pick",To(C,"current")?Zn(a.parsedValue).filter(N=>N?.year()!==R.year()||N?.month()!==R.month()):Zn(a.parsedValue).concat([ot(R)]))}else a.selectionMode==="range"?a.rangeState.selecting?(a.minDate&&O>=a.minDate?o("pick",{minDate:a.minDate,maxDate:O}):o("pick",{minDate:O,maxDate:a.minDate}),o("select",!1)):(o("pick",{minDate:O,maxDate:null}),o("select",!0)):o("pick",$)};return le(()=>a.date,async()=>{u.value?.contains(document.activeElement)&&(await Ne(),c.value?.focus())}),t({focus:h}),(S,C)=>(x(),B("table",{role:"grid","aria-label":i(r)("el.datepicker.monthTablePrompt"),class:T(i(s).b()),onClick:y,onMousemove:k},[H("tbody",{ref_key:"tbodyRef",ref:u},[(x(!0),B(Fe,null,yt(p.value,(E,$)=>(x(),B("tr",{key:$},[(x(!0),B(Fe,null,yt(E,(O,R)=>(x(),B("td",{key:R,ref_for:!0,ref:N=>O.isSelected&&(c.value=N),class:T(m(O)),"aria-selected":!!O.isSelected,"aria-label":i(r)(`el.datepicker.month${+O.text+1}`),tabindex:O.isSelected?0:-1,onKeydown:[an(Ge(y,["prevent","stop"]),["space"]),an(Ge(y,["prevent","stop"]),["enter"])]},[Y(i(ym),{cell:{...O,renderText:i(r)("el.datepicker.months."+d.value[O.text])}},null,8,["cell"])],42,Rz))),128))]))),128))],512)],42,Nz))}}),Bi=Iz;const Pz=Ce({...mm,selectionMode:bm("year")}),Mz=["aria-label"],_z=["aria-selected","aria-label","tabindex","onKeydown"];var Az=se({__name:"basic-year-table",props:Pz,emits:["changerange","pick","select"],setup(e,{expose:t,emit:n}){const a=(C,E)=>{const $=ot(String(C)).locale(E).startOf("year");return _s($.endOf("year").dayOfYear()).map(O=>$.add(O,"day").toDate())},o=e,s=n,r=fe("year-table"),{t:l,lang:u}=Ct(),c=M(),d=M(),f=w(()=>Math.floor(o.date.year()/10)*10),v=M([[],[],[]]),g=M(),p=M(),h=w(()=>{const C=v.value,E=ot().locale(u.value).startOf("year");for(let $=0;$<3;$++){const O=C[$];for(let R=0;R<4&&!($*4+R>=10);R++){let N=O[R];N||(N={row:$,column:R,type:"normal",inRange:!1,start:!1,end:!1,text:-1,disabled:!1,isSelected:!1,customClass:void 0,date:void 0,dayjs:void 0,isCurrent:void 0,selected:void 0,renderText:void 0,timestamp:void 0}),N.type="normal";const A=$*4+R+f.value,_=ot().year(A),V=o.rangeState.endDate||o.maxDate||o.rangeState.selecting&&o.minDate||null;N.inRange=!!(o.minDate&&_.isSameOrAfter(o.minDate,"year")&&V&&_.isSameOrBefore(V,"year"))||!!(o.minDate&&_.isSameOrBefore(o.minDate,"year")&&V&&_.isSameOrAfter(V,"year")),o.minDate?.isSameOrAfter(V)?(N.start=!!(V&&_.isSame(V,"year")),N.end=!!(o.minDate&&_.isSame(o.minDate,"year"))):(N.start=!!(o.minDate&&_.isSame(o.minDate,"year")),N.end=!!(V&&_.isSame(V,"year"))),E.isSame(_)&&(N.type="today"),N.text=A;const z=_.toDate();N.disabled=o.disabledDate?.(z)||!1,N.date=z,N.customClass=o.cellClassName?.(z),N.dayjs=_,N.timestamp=_.valueOf(),N.isSelected=k(N),O[R]=N}}return C}),m=()=>{d.value?.focus()},b=C=>{const E={},$=ot().locale(u.value),O=C.text;return E.disabled=o.disabled||(o.disabledDate?a(O,u.value).every(o.disabledDate):!1),E.today=$.year()===O,E.current=Zn(o.parsedValue).some(R=>R.year()===O),C.customClass&&(E[C.customClass]=!0),C.inRange&&(E["in-range"]=!0,C.start&&(E["start-date"]=!0),C.end&&(E["end-date"]=!0)),E},k=C=>{const E=C.text;return Zn(o.date).some($=>$.year()===E)},y=C=>{if(o.disabled)return;const E=C.target?.closest("td");if(!E||!E.textContent||To(E,"disabled"))return;const $=E.cellIndex,O=E.parentNode.rowIndex*4+$+f.value,R=ot().year(O);if(o.selectionMode==="range")o.rangeState.selecting?(o.minDate&&R>=o.minDate?s("pick",{minDate:o.minDate,maxDate:R}):s("pick",{minDate:R,maxDate:o.minDate}),s("select",!1)):(s("pick",{minDate:R,maxDate:null}),s("select",!0));else if(o.selectionMode==="years"){if(C.type==="keydown"){s("pick",Zn(o.parsedValue),!1);return}const N=id(R.startOf("year"),u.value,o.disabledDate);s("pick",To(E,"current")?Zn(o.parsedValue).filter(A=>A?.year()!==O):Zn(o.parsedValue).concat([N]))}else s("pick",O)},S=C=>{if(!o.rangeState.selecting)return;const E=C.target?.closest("td");if(!E)return;const $=E.parentNode.rowIndex,O=E.cellIndex;h.value[$][O].disabled||($!==g.value||O!==p.value)&&(g.value=$,p.value=O,s("changerange",{selecting:!0,endDate:ot().year(f.value).add($*4+O,"year")}))};return le(()=>o.date,async()=>{c.value?.contains(document.activeElement)&&(await Ne(),d.value?.focus())}),t({focus:m}),(C,E)=>(x(),B("table",{role:"grid","aria-label":i(l)("el.datepicker.yearTablePrompt"),class:T(i(r).b()),onClick:y,onMousemove:S},[H("tbody",{ref_key:"tbodyRef",ref:c},[(x(!0),B(Fe,null,yt(h.value,($,O)=>(x(),B("tr",{key:O},[(x(!0),B(Fe,null,yt($,(R,N)=>(x(),B("td",{key:`${O}_${N}`,ref_for:!0,ref:A=>R.isSelected&&(d.value=A),class:T(["available",b(R)]),"aria-selected":R.isSelected,"aria-label":String(R.text),tabindex:R.isSelected?0:-1,onKeydown:[an(Ge(y,["prevent","stop"]),["space"]),an(Ge(y,["prevent","stop"]),["enter"])]},[Y(i(ym),{cell:R},null,8,["cell"])],42,_z))),128))]))),128))],512)],42,Mz))}}),Fi=Az;const Lz=["disabled","onClick"],Dz=["aria-label","disabled"],Bz=["aria-label","disabled"],Fz=["tabindex","aria-disabled"],Vz=["tabindex","aria-disabled"],zz=["aria-label","disabled"],Hz=["aria-label","disabled"];var Kz=se({__name:"panel-date-pick",props:gz,emits:["pick","set-picker-option","panel-change"],setup(e,{emit:t}){const n=(be,ze,de)=>!0,a=e,o=t,s=fe("picker-panel"),r=fe("date-picker"),l=fs(),u=hn(),{t:c,lang:d}=Ct(),f=_e(ao),v=_e(wu,void 0),{shortcuts:g,disabledDate:p,cellClassName:h,defaultTime:m}=f.props,b=Vt(f.props,"defaultValue"),k=M(),y=M(ot().locale(d.value)),S=M(!1);let C=!1;const E=w(()=>ot(m).locale(d.value)),$=w(()=>y.value.month()),O=w(()=>y.value.year()),R=M([]),N=M(null),A=M(null),_=be=>R.value.length>0?n(be,R.value,a.format||"HH:mm:ss"):!0,V=be=>m&&!Re.value&&!S.value&&!C?E.value.year(be.year()).month(be.month()).date(be.date()):ie.value?be.millisecond(0):be.startOf("day"),z=(be,...ze)=>{be?ye(be)?o("pick",be.map(V),...ze):o("pick",V(be),...ze):o("pick",be,...ze),N.value=null,A.value=null,S.value=!1,C=!1},U=async(be,ze)=>{if(F.value==="date"&&ot.isDayjs(be)){const de=jl(a.parsedValue);let Ye=de?de.year(be.year()).month(be.month()).date(be.date()):be;_(Ye),y.value=Ye,z(Ye,ie.value||ze)}else F.value==="week"?z(be.date):F.value==="dates"&&z(be,!0)},W=be=>{const ze=be?"add":"subtract";y.value=y.value[ze](1,"month"),kt("month")},P=be=>{const ze=y.value,de=be?"add":"subtract";y.value=I.value==="year"?ze[de](10,"year"):ze[de](1,"year"),kt("year")},I=M("date"),L=w(()=>{const be=c("el.datepicker.year");if(I.value==="year"){const ze=Math.floor(O.value/10)*10;return be?`${ze} ${be} - ${ze+9} ${be}`:`${ze} - ${ze+9}`}return`${O.value} ${be}`}),D=be=>{const ze=Ve(be.value)?be.value():be.value;if(ze){C=!0,z(ot(ze).locale(d.value));return}be.onClick&&be.onClick({attrs:l,slots:u,emit:o})},F=w(()=>{const{type:be}=a;return["week","month","months","year","years","dates"].includes(be)?be:"date"}),q=w(()=>F.value==="dates"||F.value==="months"||F.value==="years"),j=w(()=>F.value==="date"?I.value:F.value),X=w(()=>!!g.length),Q=async(be,ze)=>{F.value==="month"?(y.value=Sl(y.value,y.value.year(),be,d.value,p),z(y.value,!1)):F.value==="months"?z(be,ze??!0):(y.value=Sl(y.value,y.value.year(),be,d.value,p),I.value="date",["month","year","date","week"].includes(F.value)&&(z(y.value,!0),await Ne(),Nt())),kt("month")},he=async(be,ze)=>{F.value==="year"?(y.value=id(y.value.startOf("year").year(be),d.value,p),z(y.value,!1)):F.value==="years"?z(be,ze??!0):(y.value=id(y.value.year(be),d.value,p),I.value="month",["month","year","date","week"].includes(F.value)&&(z(y.value,!0),await Ne(),Nt())),kt("year")},ue=ln(),ge=async be=>{ue.value||(I.value=be,await Ne(),Nt())},ie=w(()=>a.type==="datetime"||a.type==="datetimerange"),ae=w(()=>{const be=ie.value||F.value==="dates",ze=F.value==="years",de=F.value==="months",Ye=I.value==="date",$t=I.value==="year",Qt=I.value==="month";return be&&Ye||ze&&$t||de&&Qt}),ne=w(()=>!q.value&&a.showNow||a.showConfirm),K=w(()=>p?a.parsedValue?ye(a.parsedValue)?p(a.parsedValue[0].toDate()):p(a.parsedValue.toDate()):!0:!1),Z=()=>{if(q.value)z(a.parsedValue);else{let be=jl(a.parsedValue);if(!be){const ze=ot(m).locale(d.value),de=je();be=ze.year(de.year()).month(de.month()).date(de.date())}y.value=be,z(be)}},re=w(()=>p?p(ot().locale(d.value).toDate()):!1),ce=()=>{const be=ot().locale(d.value).toDate();S.value=!0,(!p||!p(be))&&_(be)&&(y.value=ot().locale(d.value),z(y.value))},ve=w(()=>a.timeFormat||pk(a.format)||wl),ke=w(()=>a.dateFormat||fk(a.format)||Os),Re=w(()=>{if(A.value)return A.value;if(!(!a.parsedValue&&!b.value))return(jl(a.parsedValue)||y.value).format(ve.value)}),Ie=w(()=>{if(N.value)return N.value;if(!(!a.parsedValue&&!b.value))return(jl(a.parsedValue)||y.value).format(ke.value)}),$e=M(!1),pe=()=>{$e.value=!0},Ee=()=>{$e.value=!1},me=be=>({hour:be.hour(),minute:be.minute(),second:be.second(),year:be.year(),month:be.month(),date:be.date()}),Me=(be,ze,de)=>{const{hour:Ye,minute:$t,second:Qt}=me(be),_n=jl(a.parsedValue);y.value=_n?_n.hour(Ye).minute($t).second(Qt):be,z(y.value,!0),de||($e.value=ze)},We=be=>{const ze=ot(be,ve.value).locale(d.value);if(ze.isValid()&&_(ze)){const{year:de,month:Ye,date:$t}=me(y.value);y.value=ze.year(de).month(Ye).date($t),A.value=null,$e.value=!1,z(y.value,!0)}},Xe=be=>{const ze=Cl(be,ke.value,d.value,v);if(ze.isValid()){if(p&&p(ze.toDate()))return;const{hour:de,minute:Ye,second:$t}=me(y.value);y.value=ze.hour(de).minute(Ye).second($t),N.value=null,z(y.value,!0)}},Pe=be=>ot.isDayjs(be)&&be.isValid()&&(p?!p(be.toDate()):!0),Ae=be=>Cl(be,a.format,d.value,v),je=()=>{const be=ot(b.value).locale(d.value);if(!b.value){const ze=E.value;return ot().hour(ze.hour()).minute(ze.minute()).second(ze.second()).locale(d.value)}return be},Nt=()=>{["week","month","year","date"].includes(F.value)&&k.value?.focus()},Ue=()=>{Nt(),F.value==="week"&&mt(we.down)},rt=be=>{const ze=jt(be);[we.up,we.down,we.left,we.right,we.home,we.end,we.pageUp,we.pageDown].includes(ze)&&(mt(ze),be.stopPropagation(),be.preventDefault()),[we.enter,we.space,we.numpadEnter].includes(ze)&&N.value===null&&A.value===null&&(be.preventDefault(),z(y.value,!1))},mt=be=>{const{up:ze,down:de,left:Ye,right:$t,home:Qt,end:_n,pageUp:Be,pageDown:et}=we,ut={year:{[ze]:-4,[de]:4,[Ye]:-1,[$t]:1,offset:(Wt,bn)=>Wt.setFullYear(Wt.getFullYear()+bn)},month:{[ze]:-4,[de]:4,[Ye]:-1,[$t]:1,offset:(Wt,bn)=>Wt.setMonth(Wt.getMonth()+bn)},week:{[ze]:-1,[de]:1,[Ye]:-1,[$t]:1,offset:(Wt,bn)=>Wt.setDate(Wt.getDate()+bn*7)},date:{[ze]:-7,[de]:7,[Ye]:-1,[$t]:1,[Qt]:Wt=>-Wt.getDay(),[_n]:Wt=>-Wt.getDay()+6,[Be]:Wt=>-new Date(Wt.getFullYear(),Wt.getMonth(),0).getDate(),[et]:Wt=>new Date(Wt.getFullYear(),Wt.getMonth()+1,0).getDate(),offset:(Wt,bn)=>Wt.setDate(Wt.getDate()+bn)}},kn=y.value.toDate();for(;Math.abs(y.value.diff(kn,"year",!0))<1;){const Wt=ut[j.value];if(!Wt)return;if(Wt.offset(kn,Ve(Wt[be])?Wt[be](kn):Wt[be]??0),p&&p(kn))break;const bn=ot(kn).locale(d.value);y.value=bn,o("pick",bn,!0);break}},kt=be=>{o("panel-change",y.value.toDate(),be,I.value)};return le(()=>F.value,be=>{if(["month","year"].includes(be)){I.value=be;return}else if(be==="years"){I.value="year";return}else if(be==="months"){I.value="month";return}I.value="date"},{immediate:!0}),le(()=>b.value,be=>{be&&(y.value=je())},{immediate:!0}),le(()=>a.parsedValue,be=>{if(be){if(q.value||ye(be))return;y.value=be}else y.value=je()},{immediate:!0}),o("set-picker-option",["isValidValue",Pe]),o("set-picker-option",["parseUserInput",Ae]),o("set-picker-option",["handleFocusPicker",Ue]),(be,ze)=>(x(),B("div",{class:T([i(s).b(),i(r).b(),i(s).is("border",be.border),i(s).is("disabled",i(ue)),{"has-sidebar":be.$slots.sidebar||X.value,"has-time":ie.value}])},[H("div",{class:T(i(s).e("body-wrapper"))},[ee(be.$slots,"sidebar",{class:T(i(s).e("sidebar"))}),X.value?(x(),B("div",{key:0,class:T(i(s).e("sidebar"))},[(x(!0),B(Fe,null,yt(i(g),(de,Ye)=>(x(),B("button",{key:Ye,type:"button",disabled:i(ue),class:T(i(s).e("shortcut")),onClick:$t=>D(de)},Se(de.text),11,Lz))),128))],2)):te("v-if",!0),H("div",{class:T(i(s).e("body"))},[ie.value?(x(),B("div",{key:0,class:T(i(r).e("time-header"))},[H("span",{class:T(i(r).e("editor-wrap"))},[Y(i(ea),{placeholder:i(c)("el.datepicker.selectDate"),"model-value":Ie.value,size:"small","validate-event":!1,disabled:i(ue),readonly:!be.editable,onInput:ze[0]||(ze[0]=de=>N.value=de),onChange:Xe},null,8,["placeholder","model-value","disabled","readonly"])],2),ct((x(),B("span",{class:T(i(r).e("editor-wrap"))},[Y(i(ea),{placeholder:i(c)("el.datepicker.selectTime"),"model-value":Re.value,size:"small","validate-event":!1,disabled:i(ue),readonly:!be.editable,onFocus:pe,onInput:ze[1]||(ze[1]=de=>A.value=de),onChange:We},null,8,["placeholder","model-value","disabled","readonly"]),Y(i(ad),{visible:$e.value,format:ve.value,"parsed-value":y.value,onPick:Me},null,8,["visible","format","parsed-value"])],2)),[[i(zs),Ee]])],2)):te("v-if",!0),ct(H("div",{class:T([i(r).e("header"),(I.value==="year"||I.value==="month")&&i(r).em("header","bordered")])},[H("span",{class:T(i(r).e("prev-btn"))},[H("button",{type:"button","aria-label":i(c)("el.datepicker.prevYear"),class:T(["d-arrow-left",i(s).e("icon-btn")]),disabled:i(ue),onClick:ze[2]||(ze[2]=de=>P(!1))},[ee(be.$slots,"prev-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Bs))]),_:1})])],10,Dz),ct(H("button",{type:"button","aria-label":i(c)("el.datepicker.prevMonth"),class:T([i(s).e("icon-btn"),"arrow-left"]),disabled:i(ue),onClick:ze[3]||(ze[3]=de=>W(!1))},[ee(be.$slots,"prev-month",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(is))]),_:1})])],10,Bz),[[Pt,I.value==="date"]])],2),H("span",{role:"button",class:T(i(r).e("header-label")),"aria-live":"polite",tabindex:be.disabled?void 0:0,"aria-disabled":be.disabled,onKeydown:ze[4]||(ze[4]=an(de=>ge("year"),["enter"])),onClick:ze[5]||(ze[5]=de=>ge("year"))},Se(L.value),43,Fz),ct(H("span",{role:"button","aria-live":"polite",tabindex:be.disabled?void 0:0,"aria-disabled":be.disabled,class:T([i(r).e("header-label"),{active:I.value==="month"}]),onKeydown:ze[6]||(ze[6]=an(de=>ge("month"),["enter"])),onClick:ze[7]||(ze[7]=de=>ge("month"))},Se(i(c)(`el.datepicker.month${$.value+1}`)),43,Vz),[[Pt,I.value==="date"]]),H("span",{class:T(i(r).e("next-btn"))},[ct(H("button",{type:"button","aria-label":i(c)("el.datepicker.nextMonth"),class:T([i(s).e("icon-btn"),"arrow-right"]),disabled:i(ue),onClick:ze[8]||(ze[8]=de=>W(!0))},[ee(be.$slots,"next-month",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(na))]),_:1})])],10,zz),[[Pt,I.value==="date"]]),H("button",{type:"button","aria-label":i(c)("el.datepicker.nextYear"),class:T([i(s).e("icon-btn"),"d-arrow-right"]),disabled:i(ue),onClick:ze[9]||(ze[9]=de=>P(!0))},[ee(be.$slots,"next-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Fs))]),_:1})])],10,Hz)],2)],2),[[Pt,I.value!=="time"]]),H("div",{class:T(i(s).e("content")),onKeydown:rt},[I.value==="date"?(x(),oe(mh,{key:0,ref_key:"currentViewRef",ref:k,"selection-mode":F.value,date:y.value,"parsed-value":be.parsedValue,"disabled-date":i(p),disabled:i(ue),"cell-class-name":i(h),"show-week-number":be.showWeekNumber,onPick:U},null,8,["selection-mode","date","parsed-value","disabled-date","disabled","cell-class-name","show-week-number"])):te("v-if",!0),I.value==="year"?(x(),oe(Fi,{key:1,ref_key:"currentViewRef",ref:k,"selection-mode":F.value,date:y.value,"disabled-date":i(p),disabled:i(ue),"parsed-value":be.parsedValue,"cell-class-name":i(h),onPick:he},null,8,["selection-mode","date","disabled-date","disabled","parsed-value","cell-class-name"])):te("v-if",!0),I.value==="month"?(x(),oe(Bi,{key:2,ref_key:"currentViewRef",ref:k,"selection-mode":F.value,date:y.value,"parsed-value":be.parsedValue,"disabled-date":i(p),disabled:i(ue),"cell-class-name":i(h),onPick:Q},null,8,["selection-mode","date","parsed-value","disabled-date","disabled","cell-class-name"])):te("v-if",!0)],34)],2)],2),be.showFooter&&ae.value&&ne.value?(x(),B("div",{key:0,class:T(i(s).e("footer"))},[ct(Y(i(In),{text:"",size:"small",class:T(i(s).e("link-btn")),disabled:re.value,onClick:ce},{default:J(()=>[wt(Se(i(c)("el.datepicker.now")),1)]),_:1},8,["class","disabled"]),[[Pt,!q.value&&be.showNow]]),be.showConfirm?(x(),oe(i(In),{key:0,plain:"",size:"small",class:T(i(s).e("link-btn")),disabled:K.value,onClick:Z},{default:J(()=>[wt(Se(i(c)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])):te("v-if",!0)],2)):te("v-if",!0)],2))}}),Wz=Kz;const jz=Ce({...h2,...gm}),Uz=e=>{const{emit:t}=ft(),n=fs(),a=hn();return s=>{const r=Ve(s.value)?s.value():s.value;if(r){t("pick",[ot(r[0]).locale(e.value),ot(r[1]).locale(e.value)]);return}s.onClick&&s.onClick({attrs:n,slots:a,emit:t})}},wm=(e,{defaultValue:t,defaultTime:n,leftDate:a,rightDate:o,step:s,unit:r,sortDates:l})=>{const{emit:u}=ft(),{pickerNs:c}=_e(vm),d=fe("date-range-picker"),{t:f,lang:v}=Ct(),g=Uz(v),p=M(),h=M(),m=M({endDate:null,selecting:!1}),b=E=>{m.value=E},k=(E=!1)=>{const $=i(p),O=i(h);Di([$,O])&&u("pick",[$,O],E)},y=E=>{m.value.selecting=E,E||(m.value.endDate=null)},S=E=>{if(ye(E)&&E.length===2){const[$,O]=E;p.value=$,a.value=$,h.value=O,l(i(p),i(h))}else C()},C=()=>{let[E,$]=lf(i(t),{lang:i(v),step:s,unit:r,unlinkPanels:e.unlinkPanels});const O=N=>N.diff(N.startOf("d"),"ms"),R=i(n);if(R){let N=0,A=0;if(ye(R)){const[_,V]=R.map(ot);N=O(_),A=O(V)}else{const _=O(ot(R));N=_,A=_}E=E.startOf("d").add(N,"ms"),$=$.startOf("d").add(A,"ms")}p.value=void 0,h.value=void 0,a.value=E,o.value=$};return le(t,E=>{E&&C()},{immediate:!0}),le(()=>e.parsedValue,E=>{(!E?.length||!on(E,[p.value,h.value]))&&S(E)},{immediate:!0}),le(()=>e.visible,()=>{e.visible&&S(e.parsedValue)},{immediate:!0}),{minDate:p,maxDate:h,rangeState:m,lang:v,ppNs:c,drpNs:d,handleChangeRange:b,handleRangeConfirm:k,handleShortcutClick:g,onSelect:y,parseValue:S,t:f}},qz=(e,t,n,a)=>{const o=M("date"),s=M(),r=M("date"),l=M(),{disabledDate:u}=_e(ao).props,{t:c,lang:d}=Ct(),f=w(()=>n.value.year()),v=w(()=>n.value.month()),g=w(()=>a.value.year()),p=w(()=>a.value.month());function h(C,E){const $=c("el.datepicker.year");if(C.value==="year"){const O=Math.floor(E.value/10)*10;return $?`${O} ${$} - ${O+9} ${$}`:`${O} - ${O+9}`}return`${E.value} ${$}`}function m(C){C?.focus()}async function b(C,E){if(e.disabled)return;const $=C==="left"?o:r,O=C==="left"?s:l;$.value=E,await Ne(),m(O.value)}async function k(C,E,$){if(e.disabled)return;const O=E==="left",R=O?n:a,N=O?a:n,A=O?o:r,_=O?s:l;C==="year"&&(R.value=id(R.value.year($),d.value,u)),C==="month"&&(R.value=Sl(R.value,R.value.year(),$,d.value,u)),e.unlinkPanels||(N.value=E==="left"?R.value.add(1,"month"):R.value.subtract(1,"month")),A.value=C==="year"?"month":"date",await Ne(),m(_.value),y(C)}function y(C){t("panel-change",[n.value.toDate(),a.value.toDate()],C)}function S(C,E,$){const O=$?"add":"subtract";return C==="year"?E[O](10,"year"):E[O](1,"year")}return{leftCurrentView:o,rightCurrentView:r,leftCurrentViewRef:s,rightCurrentViewRef:l,leftYear:f,rightYear:g,leftMonth:v,rightMonth:p,leftYearLabel:w(()=>h(o,f)),rightYearLabel:w(()=>h(r,g)),showLeftPicker:C=>b("left",C),showRightPicker:C=>b("right",C),handleLeftYearPick:C=>k("year","left",C),handleRightYearPick:C=>k("year","right",C),handleLeftMonthPick:C=>k("month","left",C),handleRightMonthPick:C=>k("month","right",C),handlePanelChange:y,adjustDateByView:S}},Yz=["disabled","onClick"],Gz=["aria-label","disabled"],Xz=["aria-label","disabled"],Jz=["disabled","aria-label"],Zz=["disabled","aria-label"],Qz=["tabindex","aria-disabled"],eH=["tabindex","aria-disabled"],tH=["disabled","aria-label"],nH=["disabled","aria-label"],aH=["aria-label","disabled"],oH=["disabled","aria-label"],sH=["tabindex","aria-disabled"],rH=["tabindex","aria-disabled"],Xu="month";var lH=se({__name:"panel-date-range",props:jz,emits:["pick","set-picker-option","calendar-change","panel-change","clear"],setup(e,{emit:t}){const n=e,a=t,o=_e(ao),s=_e(wu,void 0),{disabledDate:r,cellClassName:l,defaultTime:u,clearable:c}=o.props,d=Vt(o.props,"format"),f=Vt(o.props,"shortcuts"),v=Vt(o.props,"defaultValue"),{lang:g}=Ct(),p=M(ot().locale(g.value)),h=M(ot().locale(g.value).add(1,Xu)),{minDate:m,maxDate:b,rangeState:k,ppNs:y,drpNs:S,handleChangeRange:C,handleRangeConfirm:E,handleShortcutClick:$,onSelect:O,parseValue:R,t:N}=wm(n,{defaultValue:v,defaultTime:u,leftDate:p,rightDate:h,unit:Xu,sortDates:bn});le(()=>n.visible,Je=>{!Je&&k.value.selecting&&(R(n.parsedValue),O(!1))});const A=M({min:null,max:null}),_=M({min:null,max:null}),{leftCurrentView:V,rightCurrentView:z,leftCurrentViewRef:U,rightCurrentViewRef:W,leftYear:P,rightYear:I,leftMonth:L,rightMonth:D,leftYearLabel:F,rightYearLabel:q,showLeftPicker:j,showRightPicker:X,handleLeftYearPick:Q,handleRightYearPick:he,handleLeftMonthPick:ue,handleRightMonthPick:ge,handlePanelChange:ie,adjustDateByView:ae}=qz(n,a,p,h),ne=w(()=>!!f.value.length),K=w(()=>A.value.min!==null?A.value.min:m.value?m.value.format(ke.value):""),Z=w(()=>A.value.max!==null?A.value.max:b.value||m.value?(b.value||m.value).format(ke.value):""),re=w(()=>_.value.min!==null?_.value.min:m.value?m.value.format(ve.value):""),ce=w(()=>_.value.max!==null?_.value.max:b.value||m.value?(b.value||m.value).format(ve.value):""),ve=w(()=>n.timeFormat||pk(d.value||"")||wl),ke=w(()=>n.dateFormat||fk(d.value||"")||Os),Re=Je=>Di(Je)&&(r?!r(Je[0].toDate())&&!r(Je[1].toDate()):!0),Ie=()=>{p.value=ae(V.value,p.value,!1),n.unlinkPanels||(h.value=p.value.add(1,"month")),ie("year")},$e=()=>{p.value=p.value.subtract(1,"month"),n.unlinkPanels||(h.value=p.value.add(1,"month")),ie("month")},pe=()=>{n.unlinkPanels?h.value=ae(z.value,h.value,!0):(p.value=ae(z.value,p.value,!0),h.value=p.value.add(1,"month")),ie("year")},Ee=()=>{n.unlinkPanels?h.value=h.value.add(1,"month"):(p.value=p.value.add(1,"month"),h.value=p.value.add(1,"month")),ie("month")},me=()=>{p.value=ae(V.value,p.value,!0),ie("year")},Me=()=>{p.value=p.value.add(1,"month"),ie("month")},We=()=>{h.value=ae(z.value,h.value,!1),ie("year")},Xe=()=>{h.value=h.value.subtract(1,"month"),ie("month")},Pe=w(()=>{const Je=(L.value+1)%12,Ze=L.value+1>=12?1:0;return n.unlinkPanels&&new Date(P.value+Ze,Je)n.unlinkPanels&&I.value*12+D.value-(P.value*12+L.value+1)>=12),je=ln(),Nt=w(()=>!(m.value&&b.value&&!k.value.selecting&&Di([m.value,b.value])&&!je.value)),Ue=w(()=>n.type==="datetime"||n.type==="datetimerange"),rt=(Je,Ze)=>{if(Je)return u?ot(u[Ze]||u).locale(g.value).year(Je.year()).month(Je.month()).date(Je.date()):Je},mt=(Je,Ze=!0)=>{const gt=Je.minDate,oa=Je.maxDate,po=rt(gt,0),Ka=rt(oa,1);b.value===Ka&&m.value===po||(a("calendar-change",[gt.toDate(),oa&&oa.toDate()]),b.value=Ka,m.value=po,!Ue.value&&Ze&&(Ze=!po||!Ka),E(Ze))},kt=M(!1),be=M(!1),ze=()=>{kt.value=!1},de=()=>{be.value=!1},Ye=(Je,Ze)=>{A.value[Ze]=Je;const gt=ot(Je,ke.value).locale(g.value);if(gt.isValid()){if(r&&r(gt.toDate()))return;Ze==="min"?(p.value=gt,m.value=(m.value||p.value).year(gt.year()).month(gt.month()).date(gt.date()),!n.unlinkPanels&&(!b.value||b.value.isBefore(m.value))&&(h.value=gt.add(1,"month"),b.value=m.value.add(1,"month"))):(h.value=gt,b.value=(b.value||h.value).year(gt.year()).month(gt.month()).date(gt.date()),!n.unlinkPanels&&(!m.value||m.value.isAfter(b.value))&&(p.value=gt.subtract(1,"month"),m.value=b.value.subtract(1,"month"))),bn(m.value,b.value),E(!0)}},$t=(Je,Ze)=>{A.value[Ze]=null},Qt=(Je,Ze)=>{_.value[Ze]=Je;const gt=ot(Je,ve.value).locale(g.value);gt.isValid()&&(Ze==="min"?(kt.value=!0,m.value=(m.value||p.value).hour(gt.hour()).minute(gt.minute()).second(gt.second()),p.value=m.value):(be.value=!0,b.value=(b.value||h.value).hour(gt.hour()).minute(gt.minute()).second(gt.second()),h.value=b.value))},_n=(Je,Ze)=>{_.value[Ze]=null,Ze==="min"?(p.value=m.value,kt.value=!1,(!b.value||b.value.isBefore(m.value))&&(b.value=m.value)):(h.value=b.value,be.value=!1,b.value&&b.value.isBefore(m.value)&&(m.value=b.value)),E(!0)},Be=(Je,Ze,gt)=>{_.value.min||(Je&&(m.value=(m.value||p.value).hour(Je.hour()).minute(Je.minute()).second(Je.second())),gt||(kt.value=Ze),(!b.value||b.value.isBefore(m.value))&&(b.value=m.value,h.value=Je,Ne(()=>{R(n.parsedValue)})),E(!0))},et=(Je,Ze,gt)=>{_.value.max||(Je&&(b.value=(b.value||h.value).hour(Je.hour()).minute(Je.minute()).second(Je.second())),gt||(be.value=Ze),b.value&&b.value.isBefore(m.value)&&(m.value=b.value),E(!0))},ut=()=>{kn(),a("clear")},kn=()=>{let Je=null;o?.emptyValues&&(Je=o.emptyValues.valueOnClear.value),p.value=lf(i(v),{lang:i(g),unit:"month",unlinkPanels:n.unlinkPanels})[0],h.value=p.value.add(1,"month"),b.value=void 0,m.value=void 0,E(!0),a("pick",Je)},Wt=Je=>Cl(Je,d.value||"",g.value,s);function bn(Je,Ze){if(n.unlinkPanels&&Ze){const gt=Je?.year()||0,oa=Je?.month()||0,po=Ze.year(),Ka=Ze.month();h.value=gt===po&&oa===Ka?Ze.add(1,Xu):Ze}else h.value=p.value.add(1,Xu),Ze&&(h.value=h.value.hour(Ze.hour()).minute(Ze.minute()).second(Ze.second()))}return a("set-picker-option",["isValidValue",Re]),a("set-picker-option",["parseUserInput",Wt]),a("set-picker-option",["handleClear",kn]),(Je,Ze)=>(x(),B("div",{class:T([i(y).b(),i(S).b(),i(y).is("border",Je.border),i(y).is("disabled",i(je)),{"has-sidebar":Je.$slots.sidebar||ne.value,"has-time":Ue.value}])},[H("div",{class:T(i(y).e("body-wrapper"))},[ee(Je.$slots,"sidebar",{class:T(i(y).e("sidebar"))}),ne.value?(x(),B("div",{key:0,class:T(i(y).e("sidebar"))},[(x(!0),B(Fe,null,yt(f.value,(gt,oa)=>(x(),B("button",{key:oa,type:"button",disabled:i(je),class:T(i(y).e("shortcut")),onClick:po=>i($)(gt)},Se(gt.text),11,Yz))),128))],2)):te("v-if",!0),H("div",{class:T(i(y).e("body"))},[Ue.value?(x(),B("div",{key:0,class:T(i(S).e("time-header"))},[H("span",{class:T(i(S).e("editors-wrap"))},[H("span",{class:T(i(S).e("time-picker-wrap"))},[Y(i(ea),{size:"small",disabled:i(k).selecting||i(je),placeholder:i(N)("el.datepicker.startDate"),class:T(i(S).e("editor")),"model-value":K.value,"validate-event":!1,readonly:!Je.editable,onInput:Ze[0]||(Ze[0]=gt=>Ye(gt,"min")),onChange:Ze[1]||(Ze[1]=gt=>$t(gt,"min"))},null,8,["disabled","placeholder","class","model-value","readonly"])],2),ct((x(),B("span",{class:T(i(S).e("time-picker-wrap"))},[Y(i(ea),{size:"small",class:T(i(S).e("editor")),disabled:i(k).selecting||i(je),placeholder:i(N)("el.datepicker.startTime"),"model-value":re.value,"validate-event":!1,readonly:!Je.editable,onFocus:Ze[2]||(Ze[2]=gt=>kt.value=!0),onInput:Ze[3]||(Ze[3]=gt=>Qt(gt,"min")),onChange:Ze[4]||(Ze[4]=gt=>_n(gt,"min"))},null,8,["class","disabled","placeholder","model-value","readonly"]),Y(i(ad),{visible:kt.value,format:ve.value,"datetime-role":"start","parsed-value":i(m)||p.value,onPick:Be},null,8,["visible","format","parsed-value"])],2)),[[i(zs),ze]])],2),H("span",null,[Y(i(De),null,{default:J(()=>[Y(i(na))]),_:1})]),H("span",{class:T([i(S).e("editors-wrap"),"is-right"])},[H("span",{class:T(i(S).e("time-picker-wrap"))},[Y(i(ea),{size:"small",class:T(i(S).e("editor")),disabled:i(k).selecting||i(je),placeholder:i(N)("el.datepicker.endDate"),"model-value":Z.value,readonly:!i(m)||!Je.editable,"validate-event":!1,onInput:Ze[5]||(Ze[5]=gt=>Ye(gt,"max")),onChange:Ze[6]||(Ze[6]=gt=>$t(gt,"max"))},null,8,["class","disabled","placeholder","model-value","readonly"])],2),ct((x(),B("span",{class:T(i(S).e("time-picker-wrap"))},[Y(i(ea),{size:"small",class:T(i(S).e("editor")),disabled:i(k).selecting||i(je),placeholder:i(N)("el.datepicker.endTime"),"model-value":ce.value,readonly:!i(m)||!Je.editable,"validate-event":!1,onFocus:Ze[7]||(Ze[7]=gt=>i(m)&&(be.value=!0)),onInput:Ze[8]||(Ze[8]=gt=>Qt(gt,"max")),onChange:Ze[9]||(Ze[9]=gt=>_n(gt,"max"))},null,8,["class","disabled","placeholder","model-value","readonly"]),Y(i(ad),{"datetime-role":"end",visible:be.value,format:ve.value,"parsed-value":i(b)||h.value,onPick:et},null,8,["visible","format","parsed-value"])],2)),[[i(zs),de]])],2)],2)):te("v-if",!0),H("div",{class:T([[i(y).e("content"),i(S).e("content")],"is-left"])},[H("div",{class:T(i(S).e("header"))},[H("button",{type:"button",class:T([i(y).e("icon-btn"),"d-arrow-left"]),"aria-label":i(N)("el.datepicker.prevYear"),disabled:i(je),onClick:Ie},[ee(Je.$slots,"prev-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Bs))]),_:1})])],10,Gz),ct(H("button",{type:"button",class:T([i(y).e("icon-btn"),"arrow-left"]),"aria-label":i(N)("el.datepicker.prevMonth"),disabled:i(je),onClick:$e},[ee(Je.$slots,"prev-month",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(is))]),_:1})])],10,Xz),[[Pt,i(V)==="date"]]),Je.unlinkPanels?(x(),B("button",{key:0,type:"button",disabled:!Ae.value||i(je),class:T([[i(y).e("icon-btn"),i(y).is("disabled",!Ae.value||i(je))],"d-arrow-right"]),"aria-label":i(N)("el.datepicker.nextYear"),onClick:me},[ee(Je.$slots,"next-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Fs))]),_:1})])],10,Jz)):te("v-if",!0),Je.unlinkPanels&&i(V)==="date"?(x(),B("button",{key:1,type:"button",disabled:!Pe.value||i(je),class:T([[i(y).e("icon-btn"),i(y).is("disabled",!Pe.value||i(je))],"arrow-right"]),"aria-label":i(N)("el.datepicker.nextMonth"),onClick:Me},[ee(Je.$slots,"next-month",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(na))]),_:1})])],10,Zz)):te("v-if",!0),H("div",null,[H("span",{role:"button",class:T(i(S).e("header-label")),"aria-live":"polite",tabindex:Je.disabled?void 0:0,"aria-disabled":Je.disabled,onKeydown:Ze[10]||(Ze[10]=an(gt=>i(j)("year"),["enter"])),onClick:Ze[11]||(Ze[11]=gt=>i(j)("year"))},Se(i(F)),43,Qz),ct(H("span",{role:"button","aria-live":"polite",tabindex:Je.disabled?void 0:0,"aria-disabled":Je.disabled,class:T([i(S).e("header-label"),{active:i(V)==="month"}]),onKeydown:Ze[12]||(Ze[12]=an(gt=>i(j)("month"),["enter"])),onClick:Ze[13]||(Ze[13]=gt=>i(j)("month"))},Se(i(N)(`el.datepicker.month${p.value.month()+1}`)),43,eH),[[Pt,i(V)==="date"]])])],2),i(V)==="date"?(x(),oe(mh,{key:0,ref_key:"leftCurrentViewRef",ref:U,"selection-mode":"range",date:p.value,"min-date":i(m),"max-date":i(b),"range-state":i(k),"disabled-date":i(r),"cell-class-name":i(l),"show-week-number":Je.showWeekNumber,disabled:i(je),onChangerange:i(C),onPick:mt,onSelect:i(O)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","show-week-number","disabled","onChangerange","onSelect"])):te("v-if",!0),i(V)==="year"?(x(),oe(Fi,{key:1,ref_key:"leftCurrentViewRef",ref:U,"selection-mode":"year",date:p.value,"disabled-date":i(r),"parsed-value":Je.parsedValue,disabled:i(je),onPick:i(Q)},null,8,["date","disabled-date","parsed-value","disabled","onPick"])):te("v-if",!0),i(V)==="month"?(x(),oe(Bi,{key:2,ref_key:"leftCurrentViewRef",ref:U,"selection-mode":"month",date:p.value,"parsed-value":Je.parsedValue,"disabled-date":i(r),disabled:i(je),onPick:i(ue)},null,8,["date","parsed-value","disabled-date","disabled","onPick"])):te("v-if",!0)],2),H("div",{class:T([[i(y).e("content"),i(S).e("content")],"is-right"])},[H("div",{class:T(i(S).e("header"))},[Je.unlinkPanels?(x(),B("button",{key:0,type:"button",disabled:!Ae.value||i(je),class:T([[i(y).e("icon-btn"),i(y).is("disabled",!Ae.value||i(je))],"d-arrow-left"]),"aria-label":i(N)("el.datepicker.prevYear"),onClick:We},[ee(Je.$slots,"prev-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Bs))]),_:1})])],10,tH)):te("v-if",!0),Je.unlinkPanels&&i(z)==="date"?(x(),B("button",{key:1,type:"button",disabled:!Pe.value||i(je),class:T([[i(y).e("icon-btn"),i(y).is("disabled",!Pe.value||i(je))],"arrow-left"]),"aria-label":i(N)("el.datepicker.prevMonth"),onClick:Xe},[ee(Je.$slots,"prev-month",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(is))]),_:1})])],10,nH)):te("v-if",!0),H("button",{type:"button","aria-label":i(N)("el.datepicker.nextYear"),class:T([i(y).e("icon-btn"),"d-arrow-right"]),disabled:i(je),onClick:pe},[ee(Je.$slots,"next-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Fs))]),_:1})])],10,aH),ct(H("button",{type:"button",class:T([i(y).e("icon-btn"),"arrow-right"]),disabled:i(je),"aria-label":i(N)("el.datepicker.nextMonth"),onClick:Ee},[ee(Je.$slots,"next-month",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(na))]),_:1})])],10,oH),[[Pt,i(z)==="date"]]),H("div",null,[H("span",{role:"button",class:T(i(S).e("header-label")),"aria-live":"polite",tabindex:Je.disabled?void 0:0,"aria-disabled":Je.disabled,onKeydown:Ze[14]||(Ze[14]=an(gt=>i(X)("year"),["enter"])),onClick:Ze[15]||(Ze[15]=gt=>i(X)("year"))},Se(i(q)),43,sH),ct(H("span",{role:"button","aria-live":"polite",tabindex:Je.disabled?void 0:0,"aria-disabled":Je.disabled,class:T([i(S).e("header-label"),{active:i(z)==="month"}]),onKeydown:Ze[16]||(Ze[16]=an(gt=>i(X)("month"),["enter"])),onClick:Ze[17]||(Ze[17]=gt=>i(X)("month"))},Se(i(N)(`el.datepicker.month${h.value.month()+1}`)),43,rH),[[Pt,i(z)==="date"]])])],2),i(z)==="date"?(x(),oe(mh,{key:0,ref_key:"rightCurrentViewRef",ref:W,"selection-mode":"range",date:h.value,"min-date":i(m),"max-date":i(b),"range-state":i(k),"disabled-date":i(r),"cell-class-name":i(l),"show-week-number":Je.showWeekNumber,disabled:i(je),onChangerange:i(C),onPick:mt,onSelect:i(O)},null,8,["date","min-date","max-date","range-state","disabled-date","cell-class-name","show-week-number","disabled","onChangerange","onSelect"])):te("v-if",!0),i(z)==="year"?(x(),oe(Fi,{key:1,ref_key:"rightCurrentViewRef",ref:W,"selection-mode":"year",date:h.value,"disabled-date":i(r),"parsed-value":Je.parsedValue,disabled:i(je),onPick:i(he)},null,8,["date","disabled-date","parsed-value","disabled","onPick"])):te("v-if",!0),i(z)==="month"?(x(),oe(Bi,{key:2,ref_key:"rightCurrentViewRef",ref:W,"selection-mode":"month",date:h.value,"parsed-value":Je.parsedValue,"disabled-date":i(r),disabled:i(je),onPick:i(ge)},null,8,["date","parsed-value","disabled-date","disabled","onPick"])):te("v-if",!0)],2)],2)],2),Je.showFooter&&Ue.value&&(Je.showConfirm||i(c))?(x(),B("div",{key:0,class:T(i(y).e("footer"))},[i(c)?(x(),oe(i(In),{key:0,text:"",size:"small",class:T(i(y).e("link-btn")),onClick:ut},{default:J(()=>[wt(Se(i(N)("el.datepicker.clear")),1)]),_:1},8,["class"])):te("v-if",!0),Je.showConfirm?(x(),oe(i(In),{key:1,plain:"",size:"small",class:T(i(y).e("link-btn")),disabled:Nt.value,onClick:Ze[18]||(Ze[18]=gt=>i(E)(!1))},{default:J(()=>[wt(Se(i(N)("el.datepicker.confirm")),1)]),_:1},8,["class","disabled"])):te("v-if",!0)],2)):te("v-if",!0)],2))}}),iH=lH;const uH=Ce({...gm}),cH=["pick","set-picker-option","calendar-change"],dH=({unlinkPanels:e,leftDate:t,rightDate:n})=>{const{t:a}=Ct();return{leftPrevYear:()=>{t.value=t.value.subtract(1,"year"),e.value||(n.value=n.value.subtract(1,"year"))},rightNextYear:()=>{e.value||(t.value=t.value.add(1,"year")),n.value=n.value.add(1,"year")},leftNextYear:()=>{t.value=t.value.add(1,"year")},rightPrevYear:()=>{n.value=n.value.subtract(1,"year")},leftLabel:w(()=>`${t.value.year()} ${a("el.datepicker.year")}`),rightLabel:w(()=>`${n.value.year()} ${a("el.datepicker.year")}`),leftYear:w(()=>t.value.year()),rightYear:w(()=>n.value.year()===t.value.year()?t.value.year()+1:n.value.year())}},fH=["disabled","onClick"],pH=["disabled"],hH=["disabled"],vH=["disabled"],mH=["disabled"],Ju="year";var gH=se({name:"DatePickerMonthRange",__name:"panel-month-range",props:uH,emits:cH,setup(e,{emit:t}){const n=e,a=t,{lang:o}=Ct(),s=_e(ao),r=_e(wu,void 0),{shortcuts:l,disabledDate:u,cellClassName:c}=s.props,d=Vt(s.props,"format"),f=Vt(s.props,"defaultValue"),v=M(ot().locale(o.value)),g=M(ot().locale(o.value).add(1,Ju)),{minDate:p,maxDate:h,rangeState:m,ppNs:b,drpNs:k,handleChangeRange:y,handleRangeConfirm:S,handleShortcutClick:C,onSelect:E,parseValue:$}=wm(n,{defaultValue:f,leftDate:v,rightDate:g,unit:Ju,sortDates:F}),O=w(()=>!!l.length),{leftPrevYear:R,rightNextYear:N,leftNextYear:A,rightPrevYear:_,leftLabel:V,rightLabel:z,leftYear:U,rightYear:W}=dH({unlinkPanels:Vt(n,"unlinkPanels"),leftDate:v,rightDate:g}),P=w(()=>n.unlinkPanels&&W.value>U.value+1),I=(j,X=!0)=>{const Q=j.minDate,he=j.maxDate;h.value===he&&p.value===Q||(a("calendar-change",[Q.toDate(),he&&he.toDate()]),h.value=he,p.value=Q,X&&S())},L=()=>{let j=null;s?.emptyValues&&(j=s.emptyValues.valueOnClear.value),v.value=lf(i(f),{lang:i(o),unit:"year",unlinkPanels:n.unlinkPanels})[0],g.value=v.value.add(1,"year"),a("pick",j)},D=j=>Cl(j,d.value,o.value,r);function F(j,X){n.unlinkPanels&&X?g.value=(j?.year()||0)===X.year()?X.add(1,Ju):X:g.value=v.value.add(1,Ju)}const q=ln();return le(()=>n.visible,j=>{!j&&m.value.selecting&&($(n.parsedValue),E(!1))}),a("set-picker-option",["isValidValue",Di]),a("set-picker-option",["parseUserInput",D]),a("set-picker-option",["handleClear",L]),(j,X)=>(x(),B("div",{class:T([i(b).b(),i(k).b(),i(b).is("border",j.border),i(b).is("disabled",i(q)),{"has-sidebar":!!j.$slots.sidebar||O.value}])},[H("div",{class:T(i(b).e("body-wrapper"))},[ee(j.$slots,"sidebar",{class:T(i(b).e("sidebar"))}),O.value?(x(),B("div",{key:0,class:T(i(b).e("sidebar"))},[(x(!0),B(Fe,null,yt(i(l),(Q,he)=>(x(),B("button",{key:he,type:"button",class:T(i(b).e("shortcut")),disabled:i(q),onClick:ue=>i(C)(Q)},Se(Q.text),11,fH))),128))],2)):te("v-if",!0),H("div",{class:T(i(b).e("body"))},[H("div",{class:T([[i(b).e("content"),i(k).e("content")],"is-left"])},[H("div",{class:T(i(k).e("header"))},[H("button",{type:"button",class:T([i(b).e("icon-btn"),"d-arrow-left"]),disabled:i(q),onClick:X[0]||(X[0]=(...Q)=>i(R)&&i(R)(...Q))},[ee(j.$slots,"prev-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Bs))]),_:1})])],10,pH),j.unlinkPanels?(x(),B("button",{key:0,type:"button",disabled:!P.value||i(q),class:T([[i(b).e("icon-btn"),i(b).is("disabled",!P.value||i(q))],"d-arrow-right"]),onClick:X[1]||(X[1]=(...Q)=>i(A)&&i(A)(...Q))},[ee(j.$slots,"next-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Fs))]),_:1})])],10,hH)):te("v-if",!0),H("div",null,Se(i(V)),1)],2),Y(Bi,{"selection-mode":"range",date:v.value,"min-date":i(p),"max-date":i(h),"range-state":i(m),"disabled-date":i(u),disabled:i(q),"cell-class-name":i(c),onChangerange:i(y),onPick:I,onSelect:i(E)},null,8,["date","min-date","max-date","range-state","disabled-date","disabled","cell-class-name","onChangerange","onSelect"])],2),H("div",{class:T([[i(b).e("content"),i(k).e("content")],"is-right"])},[H("div",{class:T(i(k).e("header"))},[j.unlinkPanels?(x(),B("button",{key:0,type:"button",disabled:!P.value||i(q),class:T([[i(b).e("icon-btn"),i(b).is("disabled",!P.value||i(q))],"d-arrow-left"]),onClick:X[2]||(X[2]=(...Q)=>i(_)&&i(_)(...Q))},[ee(j.$slots,"prev-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Bs))]),_:1})])],10,vH)):te("v-if",!0),H("button",{type:"button",class:T([i(b).e("icon-btn"),"d-arrow-right"]),disabled:i(q),onClick:X[3]||(X[3]=(...Q)=>i(N)&&i(N)(...Q))},[ee(j.$slots,"next-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Fs))]),_:1})])],10,mH),H("div",null,Se(i(z)),1)],2),Y(Bi,{"selection-mode":"range",date:g.value,"min-date":i(p),"max-date":i(h),"range-state":i(m),"disabled-date":i(u),disabled:i(q),"cell-class-name":i(c),onChangerange:i(y),onPick:I,onSelect:i(E)},null,8,["date","min-date","max-date","range-state","disabled-date","disabled","cell-class-name","onChangerange","onSelect"])],2)],2)],2)],2))}}),bH=gH;const yH=Ce({...gm}),wH=["pick","set-picker-option","calendar-change"],SH=({unlinkPanels:e,leftDate:t,rightDate:n})=>({leftPrevYear:()=>{t.value=t.value.subtract(10,"year"),e.value||(n.value=n.value.subtract(10,"year"))},rightNextYear:()=>{e.value||(t.value=t.value.add(10,"year")),n.value=n.value.add(10,"year")},leftNextYear:()=>{t.value=t.value.add(10,"year")},rightPrevYear:()=>{n.value=n.value.subtract(10,"year")},leftLabel:w(()=>{const l=Math.floor(t.value.year()/10)*10;return`${l}-${l+9}`}),rightLabel:w(()=>{const l=Math.floor(n.value.year()/10)*10;return`${l}-${l+9}`}),leftYear:w(()=>Math.floor(t.value.year()/10)*10+9),rightYear:w(()=>Math.floor(n.value.year()/10)*10)}),CH=["disabled","onClick"],kH=["disabled"],EH=["disabled"],xH=["disabled"],TH=["disabled"],zr=10,Ul="year";var $H=se({name:"DatePickerYearRange",__name:"panel-year-range",props:yH,emits:wH,setup(e,{emit:t}){const n=e,a=t,{lang:o}=Ct(),s=M(ot().locale(o.value)),r=M(ot().locale(o.value).add(zr,Ul)),l=_e(wu,void 0),u=_e(ao),{shortcuts:c,disabledDate:d,cellClassName:f}=u.props,v=Vt(u.props,"format"),g=Vt(u.props,"defaultValue"),{minDate:p,maxDate:h,rangeState:m,ppNs:b,drpNs:k,handleChangeRange:y,handleRangeConfirm:S,handleShortcutClick:C,onSelect:E,parseValue:$}=wm(n,{defaultValue:g,leftDate:s,rightDate:r,step:zr,unit:Ul,sortDates:he}),{leftPrevYear:O,rightNextYear:R,leftNextYear:N,rightPrevYear:A,leftLabel:_,rightLabel:V,leftYear:z,rightYear:U}=SH({unlinkPanels:Vt(n,"unlinkPanels"),leftDate:s,rightDate:r}),W=ln(),P=w(()=>!!c.length),I=w(()=>[b.b(),k.b(),b.is("border",n.border),b.is("disabled",W.value),{"has-sidebar":!!hn().sidebar||P.value}]),L=w(()=>({content:[b.e("content"),k.e("content"),"is-left"],arrowLeftBtn:[b.e("icon-btn"),"d-arrow-left"],arrowRightBtn:[b.e("icon-btn"),b.is("disabled",!F.value||W.value),"d-arrow-right"]})),D=w(()=>({content:[b.e("content"),k.e("content"),"is-right"],arrowLeftBtn:[b.e("icon-btn"),b.is("disabled",!F.value||W.value),"d-arrow-left"],arrowRightBtn:[b.e("icon-btn"),"d-arrow-right"]})),F=w(()=>n.unlinkPanels&&U.value>z.value+1),q=(ue,ge=!0)=>{const ie=ue.minDate,ae=ue.maxDate;h.value===ae&&p.value===ie||(a("calendar-change",[ie.toDate(),ae&&ae.toDate()]),h.value=ae,p.value=ie,ge&&S())},j=ue=>Cl(ue,v.value,o.value,l),X=ue=>Di(ue)&&(d?!d(ue[0].toDate())&&!d(ue[1].toDate()):!0),Q=()=>{let ue=null;u?.emptyValues&&(ue=u.emptyValues.valueOnClear.value);const ge=lf(i(g),{lang:i(o),step:zr,unit:Ul,unlinkPanels:n.unlinkPanels});s.value=ge[0],r.value=ge[1],a("pick",ue)};function he(ue,ge){if(n.unlinkPanels&&ge){const ie=ue?.year()||0,ae=ge.year();r.value=ie+zr>ae?ge.add(zr,Ul):ge}else r.value=s.value.add(zr,Ul)}return le(()=>n.visible,ue=>{!ue&&m.value.selecting&&($(n.parsedValue),E(!1))}),a("set-picker-option",["isValidValue",X]),a("set-picker-option",["parseUserInput",j]),a("set-picker-option",["handleClear",Q]),(ue,ge)=>(x(),B("div",{class:T(I.value)},[H("div",{class:T(i(b).e("body-wrapper"))},[ee(ue.$slots,"sidebar",{class:T(i(b).e("sidebar"))}),P.value?(x(),B("div",{key:0,class:T(i(b).e("sidebar"))},[(x(!0),B(Fe,null,yt(i(c),(ie,ae)=>(x(),B("button",{key:ae,type:"button",class:T(i(b).e("shortcut")),disabled:i(W),onClick:ne=>i(C)(ie)},Se(ie.text),11,CH))),128))],2)):te("v-if",!0),H("div",{class:T(i(b).e("body"))},[H("div",{class:T(L.value.content)},[H("div",{class:T(i(k).e("header"))},[H("button",{type:"button",class:T(L.value.arrowLeftBtn),disabled:i(W),onClick:ge[0]||(ge[0]=(...ie)=>i(O)&&i(O)(...ie))},[ee(ue.$slots,"prev-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Bs))]),_:1})])],10,kH),ue.unlinkPanels?(x(),B("button",{key:0,type:"button",disabled:!F.value||i(W),class:T(L.value.arrowRightBtn),onClick:ge[1]||(ge[1]=(...ie)=>i(N)&&i(N)(...ie))},[ee(ue.$slots,"next-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Fs))]),_:1})])],10,EH)):te("v-if",!0),H("div",null,Se(i(_)),1)],2),Y(Fi,{"selection-mode":"range",date:s.value,"min-date":i(p),"max-date":i(h),"range-state":i(m),"disabled-date":i(d),disabled:i(W),"cell-class-name":i(f),onChangerange:i(y),onPick:q,onSelect:i(E)},null,8,["date","min-date","max-date","range-state","disabled-date","disabled","cell-class-name","onChangerange","onSelect"])],2),H("div",{class:T(D.value.content)},[H("div",{class:T(i(k).e("header"))},[ue.unlinkPanels?(x(),B("button",{key:0,type:"button",disabled:!F.value||i(W),class:T(D.value.arrowLeftBtn),onClick:ge[2]||(ge[2]=(...ie)=>i(A)&&i(A)(...ie))},[ee(ue.$slots,"prev-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Bs))]),_:1})])],10,xH)):te("v-if",!0),H("button",{type:"button",class:T(D.value.arrowRightBtn),disabled:i(W),onClick:ge[3]||(ge[3]=(...ie)=>i(R)&&i(R)(...ie))},[ee(ue.$slots,"next-year",{},()=>[Y(i(De),null,{default:J(()=>[Y(i(Fs))]),_:1})])],10,TH),H("div",null,Se(i(V)),1)],2),Y(Fi,{"selection-mode":"range",date:r.value,"min-date":i(p),"max-date":i(h),"range-state":i(m),"disabled-date":i(d),disabled:i(W),"cell-class-name":i(f),onChangerange:i(y),onPick:q,onSelect:i(E)},null,8,["date","min-date","max-date","range-state","disabled-date","disabled","cell-class-name","onChangerange","onSelect"])],2)],2)],2)],2))}}),OH=$H;const NH=function(e){switch(e){case"daterange":case"datetimerange":return iH;case"monthrange":return bH;case"yearrange":return OH;default:return Wz}};var Sc={exports:{}},RH=Sc.exports,s0;function IH(){return s0||(s0=1,(function(e,t){(function(n,a){e.exports=a()})(RH,(function(){return function(n,a){var o=a.prototype,s=o.format;o.format=function(r){var l=this,u=this.$locale();if(!this.isValid())return s.bind(this)(r);var c=this.$utils(),d=(r||"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(f){switch(f){case"Q":return Math.ceil((l.$M+1)/3);case"Do":return u.ordinal(l.$D);case"gggg":return l.weekYear();case"GGGG":return l.isoWeekYear();case"wo":return u.ordinal(l.week(),"W");case"w":case"ww":return c.s(l.week(),f==="w"?1:2,"0");case"W":case"WW":return c.s(l.isoWeek(),f==="W"?1:2,"0");case"k":case"kk":return c.s(String(l.$H===0?24:l.$H),f==="k"?1:2,"0");case"X":return Math.floor(l.$d.getTime()/1e3);case"x":return l.$d.getTime();case"z":return"["+l.offsetName()+"]";case"zzz":return"["+l.offsetName("long")+"]";default:return f}}));return s.bind(this)(d)}}}))})(Sc)),Sc.exports}var PH=IH();const MH=bs(PH);var Cc={exports:{}},_H=Cc.exports,r0;function AH(){return r0||(r0=1,(function(e,t){(function(n,a){e.exports=a()})(_H,(function(){var n="week",a="year";return function(o,s,r){var l=s.prototype;l.week=function(u){if(u===void 0&&(u=null),u!==null)return this.add(7*(u-this.week()),"day");var c=this.$locale().yearStart||1;if(this.month()===11&&this.date()>25){var d=r(this).startOf(a).add(1,a).date(c),f=r(this).endOf(n);if(d.isBefore(f))return 1}var v=r(this).startOf(a).date(c).startOf(n).subtract(1,"millisecond"),g=this.diff(v,n,!0);return g<0?r(this).startOf("week").week():Math.ceil(g)},l.weeks=function(u){return u===void 0&&(u=null),this.week(u)}}}))})(Cc)),Cc.exports}var LH=AH();const DH=bs(LH);var kc={exports:{}},BH=kc.exports,l0;function FH(){return l0||(l0=1,(function(e,t){(function(n,a){e.exports=a()})(BH,(function(){return function(n,a){a.prototype.weekYear=function(){var o=this.month(),s=this.week(),r=this.year();return s===1&&o===11?r+1:o===0&&s>=52?r-1:r}}}))})(kc)),kc.exports}var VH=FH();const zH=bs(VH);var Ec={exports:{}},HH=Ec.exports,i0;function KH(){return i0||(i0=1,(function(e,t){(function(n,a){e.exports=a()})(HH,(function(){return function(n,a,o){a.prototype.dayOfYear=function(s){var r=Math.round((o(this).startOf("day")-o(this).startOf("year"))/864e5)+1;return s==null?r:this.add(s-r,"day")}}}))})(Ec)),Ec.exports}var WH=KH();const jH=bs(WH);var xc={exports:{}},UH=xc.exports,u0;function qH(){return u0||(u0=1,(function(e,t){(function(n,a){e.exports=a()})(UH,(function(){return function(n,a){a.prototype.isSameOrAfter=function(o,s){return this.isSame(o,s)||this.isAfter(o,s)}}}))})(xc)),xc.exports}var YH=qH();const GH=bs(YH);var Tc={exports:{}},XH=Tc.exports,c0;function JH(){return c0||(c0=1,(function(e,t){(function(n,a){e.exports=a()})(XH,(function(){return function(n,a){a.prototype.isSameOrBefore=function(o,s){return this.isSame(o,s)||this.isBefore(o,s)}}}))})(Tc)),Tc.exports}var ZH=JH();const QH=bs(ZH);function e5(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Ut(e)}ot.extend(Pk);ot.extend(MH);ot.extend(um);ot.extend(DH);ot.extend(zH);ot.extend(jH);ot.extend(GH);ot.extend(QH);var t5=se({name:"ElDatePickerPanel",install:null,inheritAttrs:!1,props:vz,emits:[tt,"calendar-change","panel-change","visible-change","clear"],setup(e,{slots:t,emit:n,attrs:a}){const o=fe("picker-panel");Tt(_e(ao,void 0))&&St(ao,{props:At({...Mn(e)})}),St(vm,{slots:t,pickerNs:o});const{parsedValue:s,onCalendarChange:r,onPanelChange:l,onSetPickerOption:u,onPick:c}=_e(dk,()=>mk(e,n),!0);return()=>Y(NH(e.type),dt(tu(a,"onPick"),e,{parsedValue:s.value,"onSet-picker-option":u,"onCalendar-change":r,"onPanel-change":l,onClear:()=>n("clear"),onPick:c}),e5(t)?t:{default:()=>[t]})}});const v2=st(t5),n5=Ce({...im,type:{type:G(String),default:"date"}});function a5(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Ut(e)}var o5=se({name:"ElDatePicker",install:null,props:n5,emits:[tt],setup(e,{expose:t,emit:n,slots:a}){St(wu,w(()=>!e.format)),St(rm,At(Vt(e,"popperOptions")));const o=M();t({focus:()=>{o.value?.focus()},blur:()=>{o.value?.blur()},handleOpen:()=>{o.value?.handleOpen()},handleClose:()=>{o.value?.handleClose()}});const s=r=>{n(tt,r)};return()=>{const r=e.format??(t8[e.type]||Os);return Y(gk,dt(e,{format:r,type:e.type,ref:o,"onUpdate:modelValue":s}),{default:l=>Y(v2,dt({disabled:e.disabled,editable:e.editable,border:!1},l),a5(a)?a:{default:()=>[a]}),"range-separator":a["range-separator"]})}}});const s5=st(o5),r5=Ce({border:Boolean,column:{type:Number,default:3},direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},size:Tn,title:{type:String,default:""},extra:{type:String,default:""},labelWidth:{type:[String,Number]}}),m2="ElDescriptionsItem",l5=Ce({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]},align:{type:String,values:Jg,default:"left"},labelAlign:{type:String,values:Jg},className:{type:String,default:""},labelClassName:{type:String,default:""}}),g2=se({name:m2,props:l5}),Sm=Symbol("elDescriptions"),i5=Ce({row:{type:G(Array),default:()=>[]}});var ql=se({name:"ElDescriptionsCell",props:{cell:{type:Object},tag:{type:String,default:"td"},type:{type:String}},setup(){return{descriptions:_e(Sm,{})}},render(){const e=g4(this.cell),t=(this.cell?.dirs||[]).map(h=>{const{dir:m,arg:b,modifiers:k,value:y}=h;return[m,y,b,k]}),{border:n,direction:a}=this.descriptions,o=a==="vertical",s=()=>this.cell?.children?.label?.()||e.label,r=()=>this.cell?.children?.default?.(),l=e.span,u=e.rowspan,c=e.align?`is-${e.align}`:"",d=e.labelAlign?`is-${e.labelAlign}`:c,f=e.className,v=e.labelClassName,g={width:rn(this.type==="label"?e.labelWidth??this.descriptions.labelWidth??e.width:e.width),minWidth:rn(e.minWidth)},p=fe("descriptions");switch(this.type){case"label":return ct(qe(this.tag,{style:g,class:[p.e("cell"),p.e("label"),p.is("bordered-label",n),p.is("vertical-label",o),d,v],colSpan:o?l:1,rowspan:o?1:u},s()),t);case"content":return ct(qe(this.tag,{style:g,class:[p.e("cell"),p.e("content"),p.is("bordered-content",n),p.is("vertical-content",o),c,f],colSpan:o?l:l*2-1,rowspan:o?u*2-1:u},r()),t);default:{const h=s(),m={},b=rn(e.labelWidth??this.descriptions.labelWidth);return b&&(m.width=b,m.display="inline-block"),ct(qe("td",{style:g,class:[p.e("cell"),c],colSpan:l,rowspan:u},[gn(h)?void 0:qe("span",{style:m,class:[p.e("label"),v]},h),qe("span",{class:[p.e("content"),f]},r())]),t)}}}});const u5={key:1};var c5=se({name:"ElDescriptionsRow",__name:"descriptions-row",props:i5,setup(e){const t=_e(Sm,{});return(n,a)=>i(t).direction==="vertical"?(x(),B(Fe,{key:0},[H("tr",null,[(x(!0),B(Fe,null,yt(e.row,(o,s)=>(x(),oe(i(ql),{key:`tr1-${s}`,cell:o,tag:"th",type:"label"},null,8,["cell"]))),128))]),H("tr",null,[(x(!0),B(Fe,null,yt(e.row,(o,s)=>(x(),oe(i(ql),{key:`tr2-${s}`,cell:o,tag:"td",type:"content"},null,8,["cell"]))),128))])],64)):(x(),B("tr",u5,[(x(!0),B(Fe,null,yt(e.row,(o,s)=>(x(),B(Fe,{key:`tr3-${s}`},[i(t).border?(x(),B(Fe,{key:0},[Y(i(ql),{cell:o,tag:"td",type:"label"},null,8,["cell"]),Y(i(ql),{cell:o,tag:"td",type:"content"},null,8,["cell"])],64)):(x(),oe(i(ql),{key:1,cell:o,tag:"td",type:"both"},null,8,["cell"]))],64))),128))]))}}),d5=c5,f5=se({name:"ElDescriptions",__name:"description",props:r5,setup(e){const t=e,n=fe("descriptions"),a=Sn(),o=hn();St(Sm,t);const s=w(()=>[n.b(),n.m(a.value)]),r=(u,c,d,f=!1)=>(u.props||(u.props={}),c>d&&(u.props.span=d),f&&(u.props.span=c),u),l=()=>{if(!o.default)return[];const u=Ta(o.default()).filter(p=>p?.type?.name===m2),c=[];let d=[],f=t.column,v=0;const g=[];return u.forEach((p,h)=>{const m=p.props?.span||1,b=p.props?.rowspan||1,k=c.length;if(g[k]||=0,b>1)for(let y=1;y0&&(f-=g[k],g[k]=0),hf?f:m),h===u.length-1){const y=t.column-v%t.column;d.push(r(p,y,f,!0)),c.push(d);return}m(x(),B("div",{class:T(s.value)},[e.title||e.extra||u.$slots.title||u.$slots.extra?(x(),B("div",{key:0,class:T(i(n).e("header"))},[H("div",{class:T(i(n).e("title"))},[ee(u.$slots,"title",{},()=>[wt(Se(e.title),1)])],2),H("div",{class:T(i(n).e("extra"))},[ee(u.$slots,"extra",{},()=>[wt(Se(e.extra),1)])],2)],2)):te("v-if",!0),H("div",{class:T(i(n).e("body"))},[H("table",{class:T([i(n).e("table"),i(n).is("bordered",e.border)])},[H("tbody",null,[(x(!0),B(Fe,null,yt(l(),(d,f)=>(x(),oe(d5,{key:f,row:d},null,8,["row"]))),128))])],2)],2)],2))}}),p5=f5;const h5=st(p5,{DescriptionsItem:g2}),v5=tn(g2),b2=Ce({center:Boolean,alignCenter:{type:Boolean,default:void 0},closeIcon:{type:Kt},draggable:{type:Boolean,default:void 0},overflow:{type:Boolean,default:void 0},fullscreen:Boolean,headerClass:String,bodyClass:String,footerClass:String,showClose:{type:Boolean,default:!0},title:{type:String,default:""},ariaLevel:{type:String,default:"2"}}),m5={close:()=>!0},y2=Ce({...b2,appendToBody:Boolean,appendTo:{type:au.to.type,default:"body"},beforeClose:{type:G(Function)},destroyOnClose:Boolean,closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},modal:{type:Boolean,default:!0},modalPenetrable:Boolean,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"},transition:{type:G([String,Object]),default:void 0}}),w2={open:()=>!0,opened:()=>!0,close:()=>!0,closed:()=>!0,[tt]:e=>Ht(e),openAutoFocus:()=>!0,closeAutoFocus:()=>!0},g5=Ce({mask:{type:Boolean,default:!0},customMaskEvent:Boolean,overlayClass:{type:G([String,Array,Object])},zIndex:{type:G([String,Number])}}),b5={click:e=>e instanceof MouseEvent},y5="overlay";var w5=se({name:"ElOverlay",props:g5,emits:b5,setup(e,{slots:t,emit:n}){const a=fe(y5),o=u=>{n("click",u)},{onClick:s,onMousedown:r,onMouseup:l}=Wv(e.customMaskEvent?void 0:o);return()=>e.mask?Y("div",{class:[a.b(),e.overlayClass],style:{zIndex:e.zIndex},onClick:s,onMousedown:r,onMouseup:l},[ee(t,"default")],Wa.STYLE|Wa.CLASS|Wa.PROPS,["onClick","onMouseup","onMousedown"]):qe("div",{class:e.overlayClass,style:{zIndex:e.zIndex,position:"fixed",top:"0px",right:"0px",bottom:"0px",left:"0px"}},[ee(t,"default")])}});const Cm=w5,S2=Symbol("dialogInjectionKey"),np="dialog-fade",S5="ElDialog",C2=(e,t)=>{const n=ft().emit,{nextZIndex:a}=uu();let o="";const s=zn(),r=zn(),l=M(!1),u=M(!1),c=M(!1),d=M(e.zIndex??a()),f=M(!1);let v,g;const p=gs(),h=w(()=>p.value?.namespace??di),m=w(()=>p.value?.dialog),b=w(()=>{const D={},F=`--${h.value}-dialog`;if(!e.fullscreen){e.top&&(D[`${F}-margin-top`]=e.top);const q=rn(e.width);q&&(D[`${F}-width`]=q)}return D}),k=w(()=>(e.draggable??m.value?.draggable??!1)&&!e.fullscreen),y=w(()=>e.alignCenter??m.value?.alignCenter??!1),S=w(()=>e.overflow??m.value?.overflow??!1),C=w(()=>y.value?{display:"flex"}:{}),E=w(()=>{const D=e.transition??m.value?.transition??np,F={name:D,onAfterEnter:$,onBeforeLeave:R,onAfterLeave:O};if(nt(D)){const q={...D},j=(X,Q)=>he=>{ye(X)?X.forEach(ue=>{Ve(ue)&&ue(he)}):Ve(X)&&X(he),Q()};return q.onAfterEnter=j(q.onAfterEnter,$),q.onBeforeLeave=j(q.onBeforeLeave,R),q.onAfterLeave=j(q.onAfterLeave,O),q.name||(q.name=np,pt(S5,`transition.name is missing when using object syntax, fallback to '${np}'`)),q}return F});function $(){n("opened")}function O(){n("closed"),n(tt,!1),e.destroyOnClose&&(c.value=!1),f.value=!1}function R(){f.value=!0,n("close")}function N(){g?.(),v?.(),e.openDelay&&e.openDelay>0?{stop:v}=pl(()=>z(),e.openDelay):z()}function A(){v?.(),g?.(),e.closeDelay&&e.closeDelay>0?{stop:g}=pl(()=>U(),e.closeDelay):U()}function _(){function D(F){F||(u.value=!0,l.value=!1)}e.beforeClose?e.beforeClose(D):A()}function V(){e.closeOnClickModal&&_()}function z(){Mt&&(l.value=!0)}function U(){l.value=!1}function W(){n("openAutoFocus")}function P(){n("closeAutoFocus")}function I(D){D.detail?.focusReason==="pointer"&&D.preventDefault()}e.lockScroll&&qd(l);function L(){e.closeOnPressEscape&&_()}return le(()=>e.zIndex,()=>{d.value=e.zIndex??a()}),le(()=>e.modelValue,D=>{D?(u.value=!1,f.value=!1,N(),c.value=!0,d.value=e.zIndex??a(),Ne(()=>{n("open"),t.value&&(t.value.parentElement.scrollTop=0,t.value.parentElement.scrollLeft=0,t.value.scrollTop=0)})):l.value&&A()}),le(()=>e.fullscreen,D=>{t.value&&(D?(o=t.value.style.transform,t.value.style.transform=""):t.value.style.transform=o)}),ht(()=>{e.modelValue&&(l.value=!0,c.value=!0,N())}),{afterEnter:$,afterLeave:O,beforeLeave:R,handleClose:_,onModalClick:V,close:A,doClose:U,onOpenAutoFocus:W,onCloseAutoFocus:P,onCloseRequested:L,onFocusoutPrevented:I,titleId:s,bodyId:r,closed:u,style:b,overlayDialogStyle:C,rendered:c,visible:l,zIndex:d,transitionConfig:E,_draggable:k,_alignCenter:y,_overflow:S,closing:f}},km=(...e)=>t=>{e.forEach(n=>{n.value=t})},C5=["aria-level"],k5=["aria-label"],E5=["id"];var x5=se({name:"ElDialogContent",__name:"dialog-content",props:b2,emits:m5,setup(e,{expose:t}){const{t:n}=Ct(),{Close:a}=BC,o=e,{dialogRef:s,headerRef:r,bodyId:l,ns:u,style:c}=_e(S2),{focusTrapRef:d}=_e(GC),f=km(d,s),v=w(()=>!!o.draggable),{resetPosition:g,updatePosition:p,isDragging:h}=YS(s,r,v,w(()=>!!o.overflow)),m=w(()=>[u.b(),u.is("fullscreen",o.fullscreen),u.is("draggable",v.value),u.is("dragging",h.value),u.is("align-center",!!o.alignCenter),{[u.m("center")]:o.center}]);return t({resetPosition:g,updatePosition:p}),(b,k)=>(x(),B("div",{ref:i(f),class:T(m.value),style:Ke(i(c)),tabindex:"-1"},[H("header",{ref_key:"headerRef",ref:r,class:T([i(u).e("header"),e.headerClass,{"show-close":e.showClose}])},[ee(b.$slots,"header",{},()=>[H("span",{role:"heading","aria-level":e.ariaLevel,class:T(i(u).e("title"))},Se(e.title),11,C5)]),e.showClose?(x(),B("button",{key:0,"aria-label":i(n)("el.dialog.close"),class:T(i(u).e("headerbtn")),type:"button",onClick:k[0]||(k[0]=y=>b.$emit("close"))},[Y(i(De),{class:T(i(u).e("close"))},{default:J(()=>[(x(),oe(it(e.closeIcon||i(a))))]),_:1},8,["class"])],10,k5)):te("v-if",!0)],2),H("div",{id:i(l),class:T([i(u).e("body"),e.bodyClass])},[ee(b.$slots,"default")],10,E5),b.$slots.footer?(x(),B("footer",{key:0,class:T([i(u).e("footer"),e.footerClass])},[ee(b.$slots,"footer")],2)):te("v-if",!0)],6))}}),T5=x5;const $5=["aria-label","aria-labelledby","aria-describedby"];var O5=se({name:"ElDialog",inheritAttrs:!1,__name:"dialog",props:y2,emits:w2,setup(e,{expose:t}){const n=e,a=hn();xo({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"},w(()=>!!a.title));const o=fe("dialog"),s=M(),r=M(),l=M(),{visible:u,titleId:c,bodyId:d,style:f,overlayDialogStyle:v,rendered:g,transitionConfig:p,zIndex:h,_draggable:m,_alignCenter:b,_overflow:k,handleClose:y,onModalClick:S,onOpenAutoFocus:C,onCloseAutoFocus:E,onCloseRequested:$,onFocusoutPrevented:O,closing:R}=C2(n,s);St(S2,{dialogRef:s,headerRef:r,bodyId:d,ns:o,rendered:g,style:f});const N=Wv(S),A=w(()=>n.modalPenetrable&&!n.modal&&!n.fullscreen);return t({visible:u,dialogContentRef:l,resetPosition:()=>{l.value?.resetPosition()},handleClose:y}),(V,z)=>(x(),oe(i(_l),{to:e.appendTo,disabled:e.appendTo!=="body"?!1:!e.appendToBody},{default:J(()=>[Y(Vn,dt(i(p),{persisted:""}),{default:J(()=>[ct(Y(i(Cm),{"custom-mask-event":"",mask:e.modal,"overlay-class":[e.modalClass??"",`${i(o).namespace.value}-modal-dialog`,i(o).is("penetrable",A.value)],"z-index":i(h)},{default:J(()=>[H("div",{role:"dialog","aria-modal":"true","aria-label":e.title||void 0,"aria-labelledby":e.title?void 0:i(c),"aria-describedby":i(d),class:T([`${i(o).namespace.value}-overlay-dialog`,i(o).is("closing",i(R))]),style:Ke(i(v)),onClick:z[0]||(z[0]=(...U)=>i(N).onClick&&i(N).onClick(...U)),onMousedown:z[1]||(z[1]=(...U)=>i(N).onMousedown&&i(N).onMousedown(...U)),onMouseup:z[2]||(z[2]=(...U)=>i(N).onMouseup&&i(N).onMouseup(...U))},[Y(i(Al),{loop:"",trapped:i(u),"focus-start-el":"container",onFocusAfterTrapped:i(C),onFocusAfterReleased:i(E),onFocusoutPrevented:i(O),onReleaseRequested:i($)},{default:J(()=>[i(g)?(x(),oe(T5,dt({key:0,ref_key:"dialogContentRef",ref:l},V.$attrs,{center:e.center,"align-center":i(b),"close-icon":e.closeIcon,draggable:i(m),overflow:i(k),fullscreen:e.fullscreen,"header-class":e.headerClass,"body-class":e.bodyClass,"footer-class":e.footerClass,"show-close":e.showClose,title:e.title,"aria-level":e.headerAriaLevel,onClose:i(y)}),ua({header:J(()=>[V.$slots.title?ee(V.$slots,"title",{key:1}):ee(V.$slots,"header",{key:0,close:i(y),titleId:i(c),titleClass:i(o).e("title")})]),default:J(()=>[ee(V.$slots,"default")]),_:2},[V.$slots.footer?{name:"footer",fn:J(()=>[ee(V.$slots,"footer")]),key:"0"}:void 0]),1040,["center","align-center","close-icon","draggable","overflow","fullscreen","header-class","body-class","footer-class","show-close","title","aria-level","onClose"])):te("v-if",!0)]),_:3},8,["trapped","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])],46,$5)]),_:3},8,["mask","overlay-class","z-index"]),[[Pt,i(u)]])]),_:3},16)]),_:3},8,["to","disabled"]))}}),N5=O5;const R5=st(N5),I5=Ce({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},contentPosition:{type:String,values:["left","center","right"],default:"center"},borderStyle:{type:G(String),default:"solid"}});var P5=se({name:"ElDivider",__name:"divider",props:I5,setup(e){const t=e,n=fe("divider"),a=w(()=>n.cssVar({"border-style":t.borderStyle}));return(o,s)=>(x(),B("div",{class:T([i(n).b(),i(n).m(e.direction)]),style:Ke(a.value),role:"separator"},[o.$slots.default&&e.direction!=="vertical"?(x(),B("div",{key:0,class:T([i(n).e("text"),i(n).is(e.contentPosition)])},[ee(o.$slots,"default")],2)):te("v-if",!0)],6))}}),M5=P5;const k2=st(M5),_5=Ce({...y2,direction:{type:String,default:"rtl",values:["ltr","rtl","ttb","btt"]},resizable:Boolean,size:{type:[String,Number],default:"30%"},withHeader:{type:Boolean,default:!0},modalFade:{type:Boolean,default:!0},headerAriaLevel:{type:String,default:"2"}}),A5={...w2,"resize-start":(e,t)=>e instanceof MouseEvent&&typeof t=="number",resize:(e,t)=>e instanceof MouseEvent&&typeof t=="number","resize-end":(e,t)=>e instanceof MouseEvent&&typeof t=="number"};function L5(e,t,n){const{width:a,height:o}=Rv(),s=w(()=>["ltr","rtl"].includes(e.direction)),r=w(()=>["ltr","ttb"].includes(e.direction)?1:-1),l=w(()=>s.value?a.value:o.value),u=w(()=>BS(c.value+r.value*d.value,4,l.value)),c=M(0),d=M(0),f=M(!1),v=M(!1);let g=[],p=[];const h=()=>{const S=t.value?.closest('[aria-modal="true"]');return S?s.value?S.offsetWidth:S.offsetHeight:100};le(()=>[e.size,e.resizable],()=>{v.value=!1,c.value=0,d.value=0,k()});const m=S=>{e.resizable&&(v.value||(c.value=h(),v.value=!0),g=[S.pageX,S.pageY],f.value=!0,n("resize-start",S,c.value),p.push(Ft(window,"mouseup",k),Ft(window,"mousemove",b)))},b=S=>{const{pageX:C,pageY:E}=S,$=C-g[0],O=E-g[1];d.value=s.value?$:O,n("resize",S,u.value)},k=S=>{f.value&&(g=[],c.value=u.value,d.value=0,f.value=!1,p.forEach(C=>C?.()),p=[],S&&n("resize-end",S,c.value))},y=Ft(t,"mousedown",m);return Bt(()=>{y(),k()}),{size:w(()=>v.value?`${u.value}px`:rn(e.size)),isResizing:f,isHorizontal:s}}const D5=["aria-label","aria-labelledby","aria-describedby"],B5=["id","aria-level"],F5=["aria-label"],V5=["id"];var z5=se({name:"ElDrawer",inheritAttrs:!1,__name:"drawer",props:_5,emits:A5,setup(e,{expose:t,emit:n}){const a=e,o=n,s=hn();xo({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"},w(()=>!!s.title));const r=M(),l=M(),u=M(),c=fe("drawer"),{t:d}=Ct(),{afterEnter:f,afterLeave:v,beforeLeave:g,visible:p,rendered:h,titleId:m,bodyId:b,zIndex:k,onModalClick:y,onOpenAutoFocus:S,onCloseAutoFocus:C,onFocusoutPrevented:E,onCloseRequested:$,handleClose:O}=C2(a,r),{isHorizontal:R,size:N,isResizing:A}=L5(a,u,o),_=w(()=>a.modalPenetrable&&!a.modal);return t({handleClose:O,afterEnter:f,afterLeave:v}),(V,z)=>(x(),oe(i(_l),{to:e.appendTo,disabled:e.appendTo!=="body"?!1:!e.appendToBody},{default:J(()=>[Y(Vn,{name:i(c).b("fade"),onAfterEnter:i(f),onAfterLeave:i(v),onBeforeLeave:i(g),persisted:""},{default:J(()=>[ct(Y(i(Cm),{mask:e.modal,"overlay-class":[i(c).is("drawer"),e.modalClass??"",`${i(c).namespace.value}-modal-drawer`,i(c).is("penetrable",_.value)],"z-index":i(k),onClick:i(y)},{default:J(()=>[Y(i(Al),{loop:"",trapped:i(p),"focus-trap-el":r.value,"focus-start-el":l.value,onFocusAfterTrapped:i(S),onFocusAfterReleased:i(C),onFocusoutPrevented:i(E),onReleaseRequested:i($)},{default:J(()=>[H("div",dt({ref_key:"drawerRef",ref:r,"aria-modal":"true","aria-label":e.title||void 0,"aria-labelledby":e.title?void 0:i(m),"aria-describedby":i(b)},V.$attrs,{class:[i(c).b(),e.direction,i(p)&&"open",i(c).is("dragging",i(A))],style:{[i(R)?"width":"height"]:i(N)},role:"dialog",onClick:z[1]||(z[1]=Ge(()=>{},["stop"]))}),[H("span",{ref_key:"focusStartRef",ref:l,class:T(i(c).e("sr-focus")),tabindex:"-1"},null,2),e.withHeader?(x(),B("header",{key:0,class:T([i(c).e("header"),e.headerClass])},[V.$slots.title?ee(V.$slots,"title",{key:1},()=>[te(" DEPRECATED SLOT ")]):ee(V.$slots,"header",{key:0,close:i(O),titleId:i(m),titleClass:i(c).e("title")},()=>[H("span",{id:i(m),role:"heading","aria-level":e.headerAriaLevel,class:T(i(c).e("title"))},Se(e.title),11,B5)]),e.showClose?(x(),B("button",{key:2,"aria-label":i(d)("el.drawer.close"),class:T(i(c).e("close-btn")),type:"button",onClick:z[0]||(z[0]=(...U)=>i(O)&&i(O)(...U))},[Y(i(De),{class:T(i(c).e("close"))},{default:J(()=>[Y(i(Ha))]),_:1},8,["class"])],10,F5)):te("v-if",!0)],2)):te("v-if",!0),i(h)?(x(),B("div",{key:1,id:i(b),class:T([i(c).e("body"),e.bodyClass])},[ee(V.$slots,"default")],10,V5)):te("v-if",!0),V.$slots.footer?(x(),B("div",{key:2,class:T([i(c).e("footer"),e.footerClass])},[ee(V.$slots,"footer")],2)):te("v-if",!0),e.resizable?(x(),B("div",{key:3,ref_key:"draggerRef",ref:u,style:Ke({zIndex:i(k)}),class:T(i(c).e("dragger"))},null,6)):te("v-if",!0)],16,D5)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onFocusAfterTrapped","onFocusAfterReleased","onFocusoutPrevented","onReleaseRequested"])]),_:3},8,["mask","overlay-class","z-index","onClick"]),[[Pt,i(p)]])]),_:3},8,["name","onAfterEnter","onAfterLeave","onBeforeLeave"])]),_:3},8,["to","disabled"]))}}),H5=z5;const K5=st(H5),$c=Ce({trigger:{...No.trigger,type:G([String,Array])},triggerKeys:{type:G(Array),default:()=>[we.enter,we.numpadEnter,we.space,we.down]},virtualTriggering:No.virtualTriggering,virtualRef:No.virtualRef,effect:{...zt.effect,default:"light"},type:{type:G(String)},placement:{type:G(String),default:"bottom"},popperOptions:{type:G(Object),default:()=>({})},id:String,size:{type:String,default:""},splitButton:Boolean,hideOnClick:{type:Boolean,default:!0},loop:{type:Boolean,default:!0},showArrow:{type:Boolean,default:!0},showTimeout:{type:Number,default:150},hideTimeout:{type:Number,default:150},tabindex:{type:G([Number,String]),default:0},maxHeight:{type:G([Number,String]),default:""},popperClass:zt.popperClass,popperStyle:zt.popperStyle,disabled:Boolean,role:{type:String,values:FC,default:"menu"},buttonProps:{type:G(Object)},teleported:zt.teleported,appendTo:zt.appendTo,persistent:{type:Boolean,default:!0}}),E2=Ce({command:{type:[Object,String,Number],default:()=>({})},disabled:Boolean,divided:Boolean,textValue:String,icon:{type:Kt}}),W5=Ce({onKeydown:{type:G(Function)}}),uf=Symbol("elDropdown"),x2="elDropdown";var j5=se({inheritAttrs:!1});function U5(e,t,n,a,o,s){return ee(e.$slots,"default")}var q5=$n(j5,[["render",U5]]),Y5=se({name:"ElCollectionItem",inheritAttrs:!1});function G5(e,t,n,a,o,s){return ee(e.$slots,"default")}var X5=$n(Y5,[["render",G5]]);const T2="data-el-collection-item",J5=e=>{const t=`El${e}Collection`,n=`${t}Item`,a=Symbol(t),o=Symbol(n);return{COLLECTION_INJECTION_KEY:a,COLLECTION_ITEM_INJECTION_KEY:o,ElCollection:Object.assign({},q5,{name:t,setup(){const s=M(),r=new Map;St(a,{itemMap:r,getItems:(()=>{const u=i(s);if(!u)return[];const c=Array.from(u.querySelectorAll(`[${T2}]`));return[...r.values()].sort((d,f)=>c.indexOf(d.ref)-c.indexOf(f.ref))}),collectionRef:s})}}),ElCollectionItem:Object.assign({},X5,{name:n,setup(s,{attrs:r}){const l=M(),u=_e(a,void 0);St(o,{collectionItemRef:l}),ht(()=>{const c=i(l);c&&u.itemMap.set(c,{ref:c,...r})}),Bt(()=>{const c=i(l);u.itemMap.delete(c)})}})}},Z5=Ce({style:{type:G([String,Array,Object])},currentTabId:{type:G(String)},defaultCurrentTabId:String,loop:Boolean,dir:{type:String,values:["ltr","rtl"],default:"ltr"},orientation:{type:G(String)},onBlur:Function,onFocus:Function,onMousedown:Function}),{ElCollection:Q5,ElCollectionItem:eK,COLLECTION_INJECTION_KEY:$2,COLLECTION_ITEM_INJECTION_KEY:tK}=J5("RovingFocusGroup"),Em=Symbol("elRovingFocusGroup"),O2=Symbol("elRovingFocusGroupItem"),nK={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"},aK=(e,t)=>e,oK=(e,t,n)=>{const a=aK(jt(e));return nK[a]},sK=(e,t)=>e.map((n,a)=>e[(a+t)%e.length]),d0=e=>{const{activeElement:t}=document;for(const n of e)if(n===t||(n.focus(),t!==document.activeElement))return},f0="currentTabIdChange",p0="rovingFocusGroup.entryFocus",rK={bubbles:!1,cancelable:!0};var lK=se({name:"ElRovingFocusGroupImpl",inheritAttrs:!1,props:Z5,emits:[f0,"entryFocus"],setup(e,{emit:t}){const n=M((e.currentTabId||e.defaultCurrentTabId)??null),a=M(!1),o=M(!1),s=M(),{getItems:r}=_e($2,void 0),l=w(()=>[{outline:"none"},e.style]),u=h=>{t(f0,h)},c=()=>{a.value=!0},d=Nn(h=>{e.onMousedown?.(h)},()=>{o.value=!0}),f=Nn(h=>{e.onFocus?.(h)},h=>{const m=!i(o),{target:b,currentTarget:k}=h;if(b===k&&m&&!i(a)){const y=new Event(p0,rK);if(k?.dispatchEvent(y),!y.defaultPrevented){const S=r().filter(C=>C.focusable);d0([S.find(C=>C.active),S.find(C=>C.id===i(n)),...S].filter(Boolean).map(C=>C.ref))}}o.value=!1}),v=Nn(h=>{e.onBlur?.(h)},()=>{a.value=!1}),g=(...h)=>{t("entryFocus",...h)},p=h=>{const m=oK(h);if(m){h.preventDefault();let b=r().filter(k=>k.focusable).map(k=>k.ref);switch(m){case"last":b.reverse();break;case"prev":case"next":{m==="prev"&&b.reverse();const k=b.indexOf(h.currentTarget);b=e.loop?sK(b,k+1):b.slice(k+1);break}}Ne(()=>{d0(b)})}};St(Em,{currentTabbedId:gr(n),loop:Vt(e,"loop"),tabIndex:w(()=>i(a)?-1:0),rovingFocusGroupRef:s,rovingFocusGroupRootStyle:l,orientation:Vt(e,"orientation"),dir:Vt(e,"dir"),onItemFocus:u,onItemShiftTab:c,onBlur:v,onFocus:f,onMousedown:d,onKeydown:p}),le(()=>e.currentTabId,h=>{n.value=h??null}),Ft(s,p0,g)}});function iK(e,t,n,a,o,s){return ee(e.$slots,"default")}var uK=$n(lK,[["render",iK]]),cK=se({name:"ElRovingFocusGroup",components:{ElFocusGroupCollection:Q5,ElRovingFocusGroupImpl:uK}});function dK(e,t,n,a,o,s){const r=It("el-roving-focus-group-impl"),l=It("el-focus-group-collection");return x(),oe(l,null,{default:J(()=>[Y(r,Jo(Zo(e.$attrs)),{default:J(()=>[ee(e.$slots,"default")]),_:3},16)]),_:3})}var fK=$n(cK,[["render",dK]]),pK=se({components:{ElRovingFocusCollectionItem:eK},props:{focusable:{type:Boolean,default:!0},active:Boolean},emits:["mousedown","focus","keydown"],setup(e,{emit:t}){const{currentTabbedId:n,onItemFocus:a,onItemShiftTab:o,onKeydown:s}=_e(Em,void 0),r=zn(),l=M(),u=Nn(v=>{t("mousedown",v)},v=>{e.focusable?a(i(r)):v.preventDefault()}),c=Nn(v=>{t("focus",v)},()=>{a(i(r))}),d=Nn(v=>{t("keydown",v)},v=>{const{shiftKey:g,target:p,currentTarget:h}=v;if(jt(v)===we.tab&&g){o();return}p===h&&s(v)}),f=w(()=>n.value===i(r));return St(O2,{rovingFocusGroupItemRef:l,tabIndex:w(()=>i(f)?0:-1),handleMousedown:u,handleFocus:c,handleKeydown:d}),{id:r,handleKeydown:d,handleFocus:c,handleMousedown:u}}});function hK(e,t,n,a,o,s){const r=It("el-roving-focus-collection-item");return x(),oe(r,{id:e.id,focusable:e.focusable,active:e.active},{default:J(()=>[ee(e.$slots,"default")]),_:3},8,["id","focusable","active"])}var vK=$n(pK,[["render",hK]]),mK=fK;const{ButtonGroup:gK}=In;var bK=se({name:"ElDropdown",components:{ElButton:In,ElButtonGroup:gK,ElScrollbar:no,ElTooltip:Ln,ElRovingFocusGroup:mK,ElOnlyChild:KC,ElIcon:De,ArrowDown:Bo},props:$c,emits:["visible-change","click","command"],setup(e,{emit:t}){const n=ft(),a=fe("dropdown"),{t:o}=Ct(),s=M(),r=M(),l=M(),u=M(),c=M(null),d=M(null),f=M(!1),v=w(()=>({maxHeight:rn(e.maxHeight)})),g=w(()=>[a.m(S.value)]),p=w(()=>Rn(e.trigger)),h=zn().value,m=w(()=>e.id||h);function b(){l.value?.onClose(void 0,0)}function k(){l.value?.onClose()}function y(){l.value?.onOpen()}const S=Sn();function C(...V){t("command",...V)}function E(){}function $(){const V=i(u);p.value.includes("hover")&&V?.focus({preventScroll:!0}),d.value=null}function O(V){d.value=V}function R(){t("visible-change",!0)}function N(V){f.value=V?.type==="keydown",u.value?.focus()}function A(){t("visible-change",!1)}return St(uf,{contentRef:u,role:w(()=>e.role),triggerId:m,isUsingKeyboard:f,onItemEnter:E,onItemLeave:$,handleClose:k}),St(x2,{instance:n,dropdownSize:S,handleClick:b,commandHandler:C,trigger:Vt(e,"trigger"),hideOnClick:Vt(e,"hideOnClick")}),{t:o,ns:a,scrollbar:c,wrapStyle:v,dropdownTriggerKls:g,dropdownSize:S,triggerId:m,currentTabId:d,handleCurrentTabIdChange:O,handlerMainButtonClick:V=>{t("click",V)},handleClose:k,handleOpen:y,handleBeforeShowTooltip:R,handleShowTooltip:N,handleBeforeHideTooltip:A,popperRef:l,contentRef:u,triggeringElementRef:s,referenceElementRef:r}}});function yK(e,t,n,a,o,s){const r=It("el-roving-focus-group"),l=It("el-scrollbar"),u=It("el-only-child"),c=It("el-tooltip"),d=It("el-button"),f=It("arrow-down"),v=It("el-icon"),g=It("el-button-group");return x(),B("div",{class:T([e.ns.b(),e.ns.is("disabled",e.disabled)])},[Y(c,{ref:"popperRef",role:e.role,effect:e.effect,"fallback-placements":["bottom","top"],"popper-options":e.popperOptions,"gpu-acceleration":!1,placement:e.placement,"popper-class":[e.ns.e("popper"),e.popperClass],"popper-style":e.popperStyle,trigger:e.trigger,"trigger-keys":e.triggerKeys,"trigger-target-el":e.contentRef,"show-arrow":e.showArrow,"show-after":e.trigger==="hover"?e.showTimeout:0,"hide-after":e.trigger==="hover"?e.hideTimeout:0,"virtual-ref":e.virtualRef??e.triggeringElementRef,"virtual-triggering":e.virtualTriggering||e.splitButton,disabled:e.disabled,transition:`${e.ns.namespace.value}-zoom-in-top`,teleported:e.teleported,"append-to":e.appendTo,pure:"","focus-on-target":"",persistent:e.persistent,onBeforeShow:e.handleBeforeShowTooltip,onShow:e.handleShowTooltip,onBeforeHide:e.handleBeforeHideTooltip},ua({content:J(()=>[Y(l,{ref:"scrollbar","wrap-style":e.wrapStyle,tag:"div","view-class":e.ns.e("list")},{default:J(()=>[Y(r,{loop:e.loop,"current-tab-id":e.currentTabId,orientation:"horizontal",onCurrentTabIdChange:e.handleCurrentTabIdChange},{default:J(()=>[ee(e.$slots,"dropdown")]),_:3},8,["loop","current-tab-id","onCurrentTabIdChange"])]),_:3},8,["wrap-style","view-class"])]),_:2},[e.splitButton?void 0:{name:"default",fn:J(()=>[Y(u,{id:e.triggerId,ref:"triggeringElementRef",role:"button",tabindex:e.tabindex},{default:J(()=>[ee(e.$slots,"default")]),_:3},8,["id","tabindex"])]),key:"0"}]),1032,["role","effect","popper-options","placement","popper-class","popper-style","trigger","trigger-keys","trigger-target-el","show-arrow","show-after","hide-after","virtual-ref","virtual-triggering","disabled","transition","teleported","append-to","persistent","onBeforeShow","onShow","onBeforeHide"]),e.splitButton?(x(),oe(g,{key:0},{default:J(()=>[Y(d,dt({ref:"referenceElementRef"},e.buttonProps,{size:e.dropdownSize,type:e.type,disabled:e.disabled,tabindex:e.tabindex,onClick:e.handlerMainButtonClick}),{default:J(()=>[ee(e.$slots,"default")]),_:3},16,["size","type","disabled","tabindex","onClick"]),Y(d,dt({id:e.triggerId,ref:"triggeringElementRef"},e.buttonProps,{role:"button",size:e.dropdownSize,type:e.type,class:e.ns.e("caret-button"),disabled:e.disabled,tabindex:e.tabindex,"aria-label":e.t("el.dropdown.toggleDropdown")}),{default:J(()=>[Y(v,{class:T(e.ns.e("icon"))},{default:J(()=>[Y(f)]),_:1},8,["class"])]),_:1},16,["id","size","type","class","disabled","tabindex","aria-label"])]),_:3})):te("v-if",!0)],2)}var wK=$n(bK,[["render",yK]]),SK=se({name:"DropdownItemImpl",components:{ElIcon:De},props:E2,emits:["pointermove","pointerleave","click","clickimpl"],setup(e,{emit:t}){const n=fe("dropdown"),{role:a}=_e(uf,void 0),{collectionItemRef:o}=_e(tK,void 0),{rovingFocusGroupItemRef:s,tabIndex:r,handleFocus:l,handleKeydown:u,handleMousedown:c}=_e(O2,void 0),d=km(o,s),f=w(()=>a.value==="menu"?"menuitem":a.value==="navigation"?"link":"button"),v=Nn(g=>{const p=jt(g);if([we.enter,we.numpadEnter,we.space].includes(p))return g.preventDefault(),g.stopImmediatePropagation(),t("clickimpl",g),!0},u);return{ns:n,itemRef:d,dataset:{[T2]:""},role:f,tabIndex:r,handleFocus:l,handleKeydown:v,handleMousedown:c}}});const CK=["aria-disabled","tabindex","role"];function kK(e,t,n,a,o,s){const r=It("el-icon");return x(),B(Fe,null,[e.divided?(x(),B("li",{key:0,role:"separator",class:T(e.ns.bem("menu","item","divided"))},null,2)):te("v-if",!0),H("li",dt({ref:e.itemRef},{...e.dataset,...e.$attrs},{"aria-disabled":e.disabled,class:[e.ns.be("menu","item"),e.ns.is("disabled",e.disabled)],tabindex:e.tabIndex,role:e.role,onClick:t[0]||(t[0]=l=>e.$emit("clickimpl",l)),onFocus:t[1]||(t[1]=(...l)=>e.handleFocus&&e.handleFocus(...l)),onKeydown:t[2]||(t[2]=Ge((...l)=>e.handleKeydown&&e.handleKeydown(...l),["self"])),onMousedown:t[3]||(t[3]=(...l)=>e.handleMousedown&&e.handleMousedown(...l)),onPointermove:t[4]||(t[4]=l=>e.$emit("pointermove",l)),onPointerleave:t[5]||(t[5]=l=>e.$emit("pointerleave",l))}),[e.icon||e.$slots.icon?(x(),oe(r,{key:0},{default:J(()=>[ee(e.$slots,"icon",{},()=>[(x(),oe(it(e.icon)))])]),_:3})):te("v-if",!0),ee(e.$slots,"default")],16,CK)],64)}var EK=$n(SK,[["render",kK]]);const N2=()=>{const e=_e(x2,{});return{elDropdown:e,_elDropdownSize:w(()=>e?.dropdownSize)}};var xK=se({name:"ElDropdownItem",components:{ElRovingFocusItem:vK,ElDropdownItemImpl:EK},inheritAttrs:!1,props:E2,emits:["pointermove","pointerleave","click"],setup(e,{emit:t,attrs:n}){const{elDropdown:a}=N2(),o=ft(),{onItemEnter:s,onItemLeave:r}=_e(uf,void 0),l=Nn(c=>(t("pointermove",c),c.defaultPrevented),Mb(c=>{if(e.disabled){r(c);return}const d=c.currentTarget;d===document.activeElement||d.contains(document.activeElement)||(s(c),c.defaultPrevented||d?.focus({preventScroll:!0}))})),u=Nn(c=>(t("pointerleave",c),c.defaultPrevented),Mb(r));return{handleClick:Nn(c=>{if(!e.disabled)return t("click",c),c.type!=="keydown"&&c.defaultPrevented},c=>{if(e.disabled){c.stopImmediatePropagation();return}a?.hideOnClick?.value&&a.handleClick?.(),a.commandHandler?.(e.command,o,c)}),handlePointerMove:l,handlePointerLeave:u,propsAndAttrs:w(()=>({...e,...n}))}}});function TK(e,t,n,a,o,s){const r=It("el-dropdown-item-impl"),l=It("el-roving-focus-item");return x(),oe(l,{focusable:!e.disabled},{default:J(()=>[Y(r,dt(e.propsAndAttrs,{onPointerleave:e.handlePointerLeave,onPointermove:e.handlePointerMove,onClickimpl:e.handleClick}),ua({default:J(()=>[ee(e.$slots,"default")]),_:2},[e.$slots.icon?{name:"icon",fn:J(()=>[ee(e.$slots,"icon")]),key:"0"}:void 0]),1040,["onPointerleave","onPointermove","onClickimpl"])]),_:3},8,["focusable"])}var R2=$n(xK,[["render",TK]]),$K=se({name:"ElDropdownMenu",props:W5,setup(e){const t=fe("dropdown"),{_elDropdownSize:n}=N2(),a=n.value,{contentRef:o,role:s,triggerId:r,isUsingKeyboard:l,handleClose:u}=_e(uf,void 0),{rovingFocusGroupRef:c,rovingFocusGroupRootStyle:d,onBlur:f,onFocus:v,onKeydown:g,onMousedown:p}=_e(Em,void 0),{collectionRef:h}=_e($2,void 0),m=w(()=>[t.b("menu"),t.bm("menu",a?.value)]),b=km(o,c,h),k=Nn(S=>{e.onKeydown?.(S)},S=>{const{currentTarget:C,target:E}=S,$=jt(S);if(C.contains(E),we.tab===$)return u();g(S)});function y(S){l.value&&v(S)}return{size:a,rovingFocusGroupRootStyle:d,dropdownKls:m,role:s,triggerId:r,dropdownListWrapperRef:b,handleKeydown:k,onBlur:f,handleFocus:y,onMousedown:p}}});const OK=["role","aria-labelledby"];function NK(e,t,n,a,o,s){return x(),B("ul",{ref:e.dropdownListWrapperRef,class:T(e.dropdownKls),style:Ke(e.rovingFocusGroupRootStyle),tabindex:-1,role:e.role,"aria-labelledby":e.triggerId,onFocusin:t[0]||(t[0]=(...r)=>e.handleFocus&&e.handleFocus(...r)),onFocusout:t[1]||(t[1]=(...r)=>e.onBlur&&e.onBlur(...r)),onKeydown:t[2]||(t[2]=Ge((...r)=>e.handleKeydown&&e.handleKeydown(...r),["self"])),onMousedown:t[3]||(t[3]=Ge((...r)=>e.onMousedown&&e.onMousedown(...r),["self"]))},[ee(e.$slots,"default")],46,OK)}var I2=$n($K,[["render",NK]]);const RK=st(wK,{DropdownItem:R2,DropdownMenu:I2}),IK=tn(R2),PK=tn(I2),MK=Ce({image:{type:String,default:""},imageSize:Number,description:{type:String,default:""}}),_K={viewBox:"0 0 79 86",version:"1.1",xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink"},AK=["id"],LK=["stop-color"],DK=["stop-color"],BK=["id"],FK=["stop-color"],VK=["stop-color"],zK=["id"],HK={stroke:"none","stroke-width":"1",fill:"none","fill-rule":"evenodd"},KK={transform:"translate(-1268.000000, -535.000000)"},WK={transform:"translate(1268.000000, 535.000000)"},jK=["fill"],UK=["fill"],qK={transform:"translate(34.500000, 31.500000) scale(-1, 1) rotate(-25.000000) translate(-34.500000, -31.500000) translate(7.000000, 10.000000)"},YK=["fill"],GK=["fill"],XK=["fill"],JK=["fill"],ZK=["fill"],QK={transform:"translate(53.000000, 45.000000)"},eW=["fill","xlink:href"],tW=["fill","mask"],nW=["fill"];var aW=se({name:"ImgEmpty",__name:"img-empty",setup(e){const t=fe("empty"),n=zn();return(a,o)=>(x(),B("svg",_K,[H("defs",null,[H("linearGradient",{id:`linearGradient-1-${i(n)}`,x1:"38.8503086%",y1:"0%",x2:"61.1496914%",y2:"100%"},[H("stop",{"stop-color":`var(${i(t).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,LK),H("stop",{"stop-color":`var(${i(t).cssVarBlockName("fill-color-4")})`,offset:"100%"},null,8,DK)],8,AK),H("linearGradient",{id:`linearGradient-2-${i(n)}`,x1:"0%",y1:"9.5%",x2:"100%",y2:"90.5%"},[H("stop",{"stop-color":`var(${i(t).cssVarBlockName("fill-color-1")})`,offset:"0%"},null,8,FK),H("stop",{"stop-color":`var(${i(t).cssVarBlockName("fill-color-6")})`,offset:"100%"},null,8,VK)],8,BK),H("rect",{id:`path-3-${i(n)}`,x:"0",y:"0",width:"17",height:"36"},null,8,zK)]),H("g",HK,[H("g",KK,[H("g",WK,[H("path",{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(${i(t).cssVarBlockName("fill-color-3")})`},null,8,jK),H("polygon",{fill:`var(${i(t).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,UK),H("g",qK,[H("polygon",{fill:`var(${i(t).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,YK),H("polygon",{fill:`var(${i(t).cssVarBlockName("fill-color-5")})`,points:"-3.69149156e-15 7 38 7 38 43 -3.69149156e-15 43"},null,8,GK),H("rect",{fill:`url(#linearGradient-1-${i(n)})`,transform:"translate(46.500000, 25.000000) scale(-1, 1) translate(-46.500000, -25.000000) ",x:"38",y:"7",width:"17",height:"36"},null,8,XK),H("polygon",{fill:`var(${i(t).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,JK)]),H("rect",{fill:`url(#linearGradient-2-${i(n)})`,x:"13",y:"45",width:"40",height:"36"},null,8,ZK),H("g",QK,[H("use",{fill:`var(${i(t).cssVarBlockName("fill-color-8")})`,transform:"translate(8.500000, 18.000000) scale(-1, 1) translate(-8.500000, -18.000000) ","xlink:href":`#path-3-${i(n)}`},null,8,eW),H("polygon",{fill:`var(${i(t).cssVarBlockName("fill-color-9")})`,mask:`url(#mask-4-${i(n)})`,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,tW)]),H("polygon",{fill:`var(${i(t).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,nW)])])])]))}}),oW=aW;const sW=["src"],rW={key:1};var lW=se({name:"ElEmpty",__name:"empty",props:MK,setup(e){const t=e,{t:n}=Ct(),a=fe("empty"),o=w(()=>t.description||n("el.table.emptyText")),s=w(()=>({width:rn(t.imageSize)}));return(r,l)=>(x(),B("div",{class:T(i(a).b())},[H("div",{class:T(i(a).e("image")),style:Ke(s.value)},[e.image?(x(),B("img",{key:0,src:e.image,ondragstart:"return false"},null,8,sW)):ee(r.$slots,"image",{key:1},()=>[Y(oW)])],6),H("div",{class:T(i(a).e("description"))},[r.$slots.description?ee(r.$slots,"description",{key:0}):(x(),B("p",rW,Se(o.value),1))],2),r.$slots.default?(x(),B("div",{key:0,class:T(i(a).e("bottom"))},[ee(r.$slots,"default")],2)):te("v-if",!0)],2))}}),iW=lW;const P2=st(iW),uW=Ce({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:G([String,Object])},previewSrcList:{type:G(Array),default:()=>sn([])},previewTeleported:Boolean,zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},scale:{type:Number,default:1},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},showProgress:Boolean,crossorigin:{type:G(String)}}),cW={load:e=>e instanceof Event,error:e=>e instanceof Event,switch:e=>He(e),close:()=>!0,show:()=>!0},dW=Ce({urlList:{type:G(Array),default:()=>sn([])},zIndex:{type:Number},initialIndex:{type:Number,default:0},infinite:{type:Boolean,default:!0},hideOnClickModal:Boolean,teleported:Boolean,closeOnPressEscape:{type:Boolean,default:!0},zoomRate:{type:Number,default:1.2},scale:{type:Number,default:1},minScale:{type:Number,default:.2},maxScale:{type:Number,default:7},showProgress:Boolean,crossorigin:{type:G(String)}}),fW={close:()=>!0,error:e=>e instanceof Event,switch:e=>He(e),rotate:e=>He(e)},pW=["src","crossorigin"];var hW=se({name:"ElImageViewer",__name:"image-viewer",props:dW,emits:fW,setup(e,{expose:t,emit:n}){const a={CONTAIN:{name:"contain",icon:Eo(n3)},ORIGINAL:{name:"original",icon:Eo(C3)}},o=e,s=n;let r;const{t:l}=Ct(),u=fe("image-viewer"),{nextZIndex:c}=uu(),d=M(),f=M(),v=qx(),g=w(()=>{const{scale:ie,minScale:ae,maxScale:ne}=o;return BS(ie,ae,ne)}),p=M(!0),h=M(!1),m=M(!1),b=M(o.initialIndex),k=Xt(a.CONTAIN),y=M({scale:g.value,deg:0,offsetX:0,offsetY:0,enableTransition:!1}),S=M(o.zIndex??c());qd(m,{ns:u});const C=w(()=>{const{urlList:ie}=o;return ie.length<=1}),E=w(()=>b.value===0),$=w(()=>b.value===o.urlList.length-1),O=w(()=>o.urlList[b.value]),R=w(()=>[u.e("btn"),u.e("prev"),u.is("disabled",!o.infinite&&E.value)]),N=w(()=>[u.e("btn"),u.e("next"),u.is("disabled",!o.infinite&&$.value)]),A=w(()=>{const{scale:ie,deg:ae,offsetX:ne,offsetY:K,enableTransition:Z}=y.value;let re=ne/ie,ce=K/ie;const ve=ae*Math.PI/180,ke=Math.cos(ve),Re=Math.sin(ve);re=re*ke+ce*Re,ce=ce*ke-ne/ie*Re;const Ie={transform:`scale(${ie}) rotate(${ae}deg) translate(${re}px, ${ce}px)`,transition:Z?"transform .3s":""};return k.value.name===a.CONTAIN.name&&(Ie.maxWidth=Ie.maxHeight="100%"),Ie}),_=w(()=>`${b.value+1} / ${o.urlList.length}`);function V(){U(),r?.(),m.value=!1,s("close")}function z(){const ie=Ns(ne=>{switch(jt(ne)){case we.esc:o.closeOnPressEscape&&V();break;case we.space:F();break;case we.left:j();break;case we.up:Q("zoomIn");break;case we.right:X();break;case we.down:Q("zoomOut");break}}),ae=Ns(ne=>{Q((ne.deltaY||ne.deltaX)<0?"zoomIn":"zoomOut",{zoomRate:o.zoomRate,enableTransition:!1})});v.run(()=>{Ft(document,"keydown",ie),Ft(d,"wheel",ae)})}function U(){v.stop()}function W(){p.value=!1}function P(ie){h.value=!0,p.value=!1,s("error",ie),ie.target.alt=l("el.image.error")}function I(ie){if(p.value||ie.button!==0||!d.value)return;y.value.enableTransition=!1;const{offsetX:ae,offsetY:ne}=y.value,K=ie.pageX,Z=ie.pageY,re=Ns(ke=>{y.value={...y.value,offsetX:ae+ke.pageX-K,offsetY:ne+ke.pageY-Z}}),ce=Ft(document,"mousemove",re),ve=Ft(document,"mouseup",()=>{ce(),ve()});ie.preventDefault()}function L(ie){if(p.value||!d.value||ie.touches.length!==1)return;y.value.enableTransition=!1;const{offsetX:ae,offsetY:ne}=y.value,{pageX:K,pageY:Z}=ie.touches[0],re=Ns(ke=>{const Re=ke.touches[0];y.value={...y.value,offsetX:ae+Re.pageX-K,offsetY:ne+Re.pageY-Z}}),ce=Ft(document,"touchmove",re),ve=Ft(document,"touchend",()=>{ce(),ve()});ie.preventDefault()}function D(){y.value={scale:g.value,deg:0,offsetX:0,offsetY:0,enableTransition:!1}}function F(){if(p.value||h.value)return;const ie=Oi(a),ae=Object.values(a),ne=k.value.name;k.value=a[ie[(ae.findIndex(K=>K.name===ne)+1)%ie.length]],D()}function q(ie){h.value=!1;const ae=o.urlList.length;b.value=(ie+ae)%ae}function j(){E.value&&!o.infinite||q(b.value-1)}function X(){$.value&&!o.infinite||q(b.value+1)}function Q(ie,ae={}){if(p.value||h.value)return;const{minScale:ne,maxScale:K}=o,{zoomRate:Z,rotateDeg:re,enableTransition:ce}={zoomRate:o.zoomRate,rotateDeg:90,enableTransition:!0,...ae};switch(ie){case"zoomOut":y.value.scale>ne&&(y.value.scale=Number.parseFloat((y.value.scale/Z).toFixed(3)));break;case"zoomIn":y.value.scale0)return ie.preventDefault(),!1}}return le(()=>g.value,ie=>{y.value.scale=ie}),le(O,()=>{Ne(()=>{f.value?.complete||(p.value=!0)})}),le(b,ie=>{D(),s("switch",ie)}),ht(()=>{m.value=!0,z(),r=Ft("wheel",ge,{passive:!1})}),t({setActiveItem:q}),(ie,ae)=>(x(),oe(i(_l),{to:"body",disabled:!e.teleported},{default:J(()=>[Y(Vn,{name:"viewer-fade",appear:""},{default:J(()=>[H("div",{ref_key:"wrapper",ref:d,tabindex:-1,class:T(i(u).e("wrapper")),style:Ke({zIndex:S.value})},[Y(i(Al),{loop:"",trapped:"","focus-trap-el":d.value,"focus-start-el":"container",onFocusoutPrevented:he,onReleaseRequested:ue},{default:J(()=>[H("div",{class:T(i(u).e("mask")),onClick:ae[0]||(ae[0]=Ge(ne=>e.hideOnClickModal&&V(),["self"]))},null,2),te(" CLOSE "),H("span",{class:T([i(u).e("btn"),i(u).e("close")]),onClick:V},[Y(i(De),null,{default:J(()=>[Y(i(Ha))]),_:1})],2),te(" ARROW "),C.value?te("v-if",!0):(x(),B(Fe,{key:0},[H("span",{class:T(R.value),onClick:j},[Y(i(De),null,{default:J(()=>[Y(i(is))]),_:1})],2),H("span",{class:T(N.value),onClick:X},[Y(i(De),null,{default:J(()=>[Y(i(na))]),_:1})],2)],64)),ie.$slots.progress||e.showProgress?(x(),B("div",{key:1,class:T([i(u).e("btn"),i(u).e("progress")])},[ee(ie.$slots,"progress",{activeIndex:b.value,total:e.urlList.length},()=>[wt(Se(_.value),1)])],2)):te("v-if",!0),te(" ACTIONS "),H("div",{class:T([i(u).e("btn"),i(u).e("actions")])},[H("div",{class:T(i(u).e("actions__inner"))},[ee(ie.$slots,"toolbar",{actions:Q,prev:j,next:X,reset:F,activeIndex:b.value,setActiveItem:q},()=>[Y(i(De),{onClick:ae[1]||(ae[1]=ne=>Q("zoomOut"))},{default:J(()=>[Y(i(B3))]),_:1}),Y(i(De),{onClick:ae[2]||(ae[2]=ne=>Q("zoomIn"))},{default:J(()=>[Y(i(DC))]),_:1}),H("i",{class:T(i(u).e("actions__divider"))},null,2),Y(i(De),{onClick:F},{default:J(()=>[(x(),oe(it(k.value.icon)))]),_:1}),H("i",{class:T(i(u).e("actions__divider"))},null,2),Y(i(De),{onClick:ae[3]||(ae[3]=ne=>Q("anticlockwise"))},{default:J(()=>[Y(i(b3))]),_:1}),Y(i(De),{onClick:ae[4]||(ae[4]=ne=>Q("clockwise"))},{default:J(()=>[Y(i(w3))]),_:1})])],2)],2),te(" CANVAS "),H("div",{class:T(i(u).e("canvas"))},[h.value&&ie.$slots["viewer-error"]?ee(ie.$slots,"viewer-error",{key:0,activeIndex:b.value,src:O.value}):(x(),B("img",{ref_key:"imgRef",ref:f,key:O.value,src:O.value,style:Ke(A.value),class:T(i(u).e("img")),crossorigin:e.crossorigin,onLoad:W,onError:P,onMousedown:I,onTouchstart:L},null,46,pW))],2),ee(ie.$slots,"default")]),_:3},8,["focus-trap-el"])],6)]),_:3})]),_:3},8,["disabled"]))}}),vW=hW;const M2=st(vW),mW=["src","loading","crossorigin"],gW={key:0};var bW=se({name:"ElImage",inheritAttrs:!1,__name:"image",props:uW,emits:cW,setup(e,{expose:t,emit:n}){const a=e,o=n,{t:s}=Ct(),r=fe("image"),l=fs(),u=w(()=>fl(Object.entries(l).filter(([P])=>/^(data-|on[A-Z])/i.test(P)||["id","style"].includes(P)))),c=Wd({excludeListeners:!0,excludeKeys:w(()=>Object.keys(u.value))}),d=M(),f=M(!1),v=M(!0),g=M(!1),p=M(),h=M(),m=Mt&&"loading"in HTMLImageElement.prototype;let b;const k=w(()=>[r.e("inner"),S.value&&r.e("preview"),v.value&&r.is("loading")]),y=w(()=>{const{fit:P}=a;return Mt&&P?{objectFit:P}:{}}),S=w(()=>{const{previewSrcList:P}=a;return ye(P)&&P.length>0}),C=w(()=>{const{previewSrcList:P,initialIndex:I}=a;let L=I;return I>P.length-1&&(L=0),L}),E=w(()=>a.loading==="eager"?!1:!m&&a.loading==="lazy"||a.lazy),$=()=>{Mt&&(v.value=!0,f.value=!1,d.value=a.src)};function O(P){v.value=!1,f.value=!1,o("load",P)}function R(P){v.value=!1,f.value=!0,o("error",P)}function N(P){P&&($(),V())}const A=VS(N,200,!0);async function _(){if(!Mt)return;await Ne();const{scrollContainer:P}=a;if(ha(P))h.value=P;else if(Le(P)&&P!=="")h.value=document.querySelector(P)??void 0;else if(p.value){const L=_v(p.value);h.value=nu(L)?void 0:L}const{stop:I}=JM(p,([L])=>{A(L.isIntersecting)},{root:h});b=I}function V(){!Mt||!A||(b?.(),h.value=void 0,b=void 0)}function z(){S.value&&(g.value=!0,o("show"))}function U(){g.value=!1,o("close")}function W(P){o("switch",P)}return le(()=>a.src,()=>{E.value?(v.value=!0,f.value=!1,V(),_()):$()}),ht(()=>{E.value?_():$()}),t({showPreview:z}),(P,I)=>(x(),B("div",dt({ref_key:"container",ref:p},u.value,{class:[i(r).b(),P.$attrs.class]}),[f.value?ee(P.$slots,"error",{key:0},()=>[H("div",{class:T(i(r).e("error"))},Se(i(s)("el.image.error")),3)]):(x(),B(Fe,{key:1},[d.value!==void 0?(x(),B("img",dt({key:0},i(c),{src:d.value,loading:e.loading,style:y.value,class:k.value,crossorigin:e.crossorigin,onClick:z,onLoad:O,onError:R}),null,16,mW)):te("v-if",!0),v.value?(x(),B("div",{key:1,class:T(i(r).e("wrapper"))},[ee(P.$slots,"placeholder",{},()=>[H("div",{class:T(i(r).e("placeholder"))},null,2)])],2)):te("v-if",!0)],64)),S.value?(x(),B(Fe,{key:2},[g.value?(x(),oe(i(M2),{key:0,"z-index":e.zIndex,"initial-index":C.value,infinite:e.infinite,"zoom-rate":e.zoomRate,"min-scale":e.minScale,"max-scale":e.maxScale,"show-progress":e.showProgress,"url-list":e.previewSrcList,scale:e.scale,crossorigin:e.crossorigin,"hide-on-click-modal":e.hideOnClickModal,teleported:e.previewTeleported,"close-on-press-escape":e.closeOnPressEscape,onClose:U,onSwitch:W},ua({toolbar:J(L=>[ee(P.$slots,"toolbar",Jo(Zo(L)))]),default:J(()=>[P.$slots.viewer?(x(),B("div",gW,[ee(P.$slots,"viewer")])):te("v-if",!0)]),_:2},[P.$slots.progress?{name:"progress",fn:J(L=>[ee(P.$slots,"progress",Jo(Zo(L)))]),key:"0"}:void 0,P.$slots["viewer-error"]?{name:"viewer-error",fn:J(L=>[ee(P.$slots,"viewer-error",Jo(Zo(L)))]),key:"1"}:void 0]),1032,["z-index","initial-index","infinite","zoom-rate","min-scale","max-scale","show-progress","url-list","scale","crossorigin","hide-on-click-modal","teleported","close-on-press-escape"])):te("v-if",!0)],64)):te("v-if",!0)],16))}}),yW=bW;const wW=st(yW),SW=Ce({id:{type:String,default:void 0},step:{type:Number,default:1},stepStrictly:Boolean,max:{type:Number,default:Number.MAX_SAFE_INTEGER},min:{type:Number,default:Number.MIN_SAFE_INTEGER},modelValue:{type:[Number,null]},readonly:Boolean,disabled:{type:Boolean,default:void 0},size:Tn,controls:{type:Boolean,default:!0},controlsPosition:{type:String,default:"",values:["","right"]},valueOnClear:{type:G([String,Number,null]),validator:e=>e===null||He(e)||["min","max"].includes(e),default:null},name:String,placeholder:String,precision:{type:Number,validator:e=>e>=0&&e===Number.parseInt(`${e}`,10)},validateEvent:{type:Boolean,default:!0},...aa(["ariaLabel"]),inputmode:{type:G(String),default:void 0},align:{type:G(String),default:"center"},disabledScientific:Boolean}),CW={[bt]:(e,t)=>t!==e,blur:e=>e instanceof FocusEvent,focus:e=>e instanceof FocusEvent,[wn]:e=>He(e)||gn(e),[tt]:e=>He(e)||gn(e)},kW=["aria-label"],EW=["aria-label"];var xW=se({name:"ElInputNumber",__name:"input-number",props:SW,emits:CW,setup(e,{expose:t,emit:n}){const a=e,o=n,{t:s}=Ct(),r=fe("input-number"),l=M(),u=At({currentValue:a.modelValue,userInput:null}),{formItem:c}=Dn(),d=w(()=>He(a.modelValue)&&a.modelValue<=a.min),f=w(()=>He(a.modelValue)&&a.modelValue>=a.max),v=w(()=>{const P=k(a.step);return Tt(a.precision)?Math.max(k(a.modelValue),P):(P>a.precision&&pt("InputNumber","precision should not be less than the decimal places of step"),a.precision)}),g=w(()=>a.controls&&a.controlsPosition==="right"),p=Sn(),h=ln(),m=w(()=>{if(u.userInput!==null)return u.userInput;let P=u.currentValue;if(gn(P))return"";if(He(P)){if(Number.isNaN(P))return"";Tt(a.precision)||(P=P.toFixed(a.precision))}return P}),b=(P,I)=>{if(Tt(I)&&(I=v.value),I===0)return Math.round(P);let L=String(P);const D=L.indexOf(".");if(D===-1||!L.replace(".","").split("")[D+I])return P;const F=L.length;return L.charAt(F-1)==="5"&&(L=`${L.slice(0,Math.max(0,F-1))}6`),Number.parseFloat(Number(L).toFixed(I))},k=P=>{if(gn(P))return 0;const I=P.toString(),L=I.indexOf(".");let D=0;return L!==-1&&(D=I.length-L-1),D},y=(P,I=1)=>He(P)?P>=Number.MAX_SAFE_INTEGER&&I===1?(pt("InputNumber","The value has reached the maximum safe integer limit."),P):P<=Number.MIN_SAFE_INTEGER&&I===-1?(pt("InputNumber","The value has reached the minimum safe integer limit."),P):b(P+a.step*I):u.currentValue,S=P=>{const I=jt(P),L=ZS(P);if(a.disabledScientific&&["e","E"].includes(L)){P.preventDefault();return}switch(I){case we.up:P.preventDefault(),C();break;case we.down:P.preventDefault(),E();break}},C=()=>{a.readonly||h.value||f.value||(O(y(Number(m.value)||0)),o(wn,u.currentValue),U())},E=()=>{a.readonly||h.value||d.value||(O(y(Number(m.value)||0,-1)),o(wn,u.currentValue),U())},$=(P,I)=>{const{max:L,min:D,step:F,precision:q,stepStrictly:j,valueOnClear:X}=a;LL||QL?L:D,I&&o(tt,Q)),Q},O=(P,I=!0)=>{const L=u.currentValue,D=$(P);if(!I){o(tt,D);return}u.userInput=null,!(L===D&&P)&&(o(tt,D),L!==D&&o(bt,D,L),a.validateEvent&&c?.validate?.("change").catch(F=>pt(F)),u.currentValue=D)},R=P=>{u.userInput=P;const I=P===""?null:Number(P);o(wn,I),O(I,!1)},N=P=>{const I=P!==""?Number(P):"";(He(I)&&!Number.isNaN(I)||P==="")&&O(I),U(),u.userInput=null},A=()=>{l.value?.focus?.()},_=()=>{l.value?.blur?.()},V=P=>{o("focus",P)},z=P=>{u.userInput=null,u.currentValue===null&&l.value?.input&&(l.value.input.value=""),o("blur",P),a.validateEvent&&c?.validate?.("blur").catch(I=>pt(I))},U=()=>{u.currentValue!==a.modelValue&&(u.currentValue=a.modelValue)},W=P=>{document.activeElement===P.target&&P.preventDefault()};return le(()=>a.modelValue,(P,I)=>{const L=$(P,!0);u.userInput===null&&L!==I&&(u.currentValue=L)},{immediate:!0}),le(()=>a.precision,()=>{u.currentValue=$(a.modelValue)}),ht(()=>{const{min:P,max:I,modelValue:L}=a,D=l.value?.input;if(D.setAttribute("role","spinbutton"),Number.isFinite(I)?D.setAttribute("aria-valuemax",String(I)):D.removeAttribute("aria-valuemax"),Number.isFinite(P)?D.setAttribute("aria-valuemin",String(P)):D.removeAttribute("aria-valuemin"),D.setAttribute("aria-valuenow",u.currentValue||u.currentValue===0?String(u.currentValue):""),D.setAttribute("aria-disabled",String(h.value)),!He(L)&&L!=null){let F=Number(L);Number.isNaN(F)&&(F=null),o(tt,F)}D.addEventListener("wheel",W,{passive:!1})}),so(()=>{l.value?.input?.setAttribute("aria-valuenow",`${u.currentValue??""}`)}),t({focus:A,blur:_}),(P,I)=>(x(),B("div",{class:T([i(r).b(),i(r).m(i(p)),i(r).is("disabled",i(h)),i(r).is("without-controls",!e.controls),i(r).is("controls-right",g.value),i(r).is(e.align,!!e.align)]),onDragstart:I[0]||(I[0]=Ge(()=>{},["prevent"]))},[e.controls?ct((x(),B("span",{key:0,role:"button","aria-label":i(s)("el.inputNumber.decrease"),class:T([i(r).e("decrease"),i(r).is("disabled",d.value)]),onKeydown:an(E,["enter"])},[ee(P.$slots,"decrease-icon",{},()=>[Y(i(De),null,{default:J(()=>[g.value?(x(),oe(i(Bo),{key:0})):(x(),oe(i(i3),{key:1}))]),_:1})])],42,kW)),[[i(nd),E]]):te("v-if",!0),e.controls?ct((x(),B("span",{key:1,role:"button","aria-label":i(s)("el.inputNumber.increase"),class:T([i(r).e("increase"),i(r).is("disabled",f.value)]),onKeydown:an(C,["enter"])},[ee(P.$slots,"increase-icon",{},()=>[Y(i(De),null,{default:J(()=>[g.value?(x(),oe(i(ef),{key:0})):(x(),oe(i(AC),{key:1}))]),_:1})])],42,EW)),[[i(nd),C]]):te("v-if",!0),Y(i(ea),{id:e.id,ref_key:"input",ref:l,type:"number",step:e.step,"model-value":m.value,placeholder:e.placeholder,readonly:e.readonly,disabled:i(h),size:i(p),max:e.max,min:e.min,name:e.name,"aria-label":e.ariaLabel,"validate-event":!1,inputmode:e.inputmode,onKeydown:S,onBlur:z,onFocus:V,onInput:R,onChange:N},ua({_:2},[P.$slots.prefix?{name:"prefix",fn:J(()=>[ee(P.$slots,"prefix")]),key:"0"}:void 0,P.$slots.suffix?{name:"suffix",fn:J(()=>[ee(P.$slots,"suffix")]),key:"1"}:void 0]),1032,["id","step","model-value","placeholder","readonly","disabled","size","max","min","name","aria-label","inputmode"])],34))}}),TW=xW;const _2=st(TW),$W=Ce({modelValue:{type:G(Array)},max:Number,tagType:{...us.type,default:"info"},tagEffect:us.effect,effect:{type:G(String),default:"light"},trigger:{type:G(String),default:we.enter},draggable:Boolean,delimiter:{type:[String,RegExp],default:""},size:Tn,clearable:Boolean,clearIcon:{type:Kt,default:Fo},disabled:{type:Boolean,default:void 0},validateEvent:{type:Boolean,default:!0},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:G(String),default:"off"},saveOnBlur:{type:Boolean,default:!0},collapseTags:Boolean,collapseTagsTooltip:Boolean,maxCollapseTags:{type:Number,default:1},ariaLabel:String}),OW={[tt]:e=>ye(e)||Tt(e),[bt]:e=>ye(e)||Tt(e),[wn]:e=>Le(e),"add-tag":e=>Le(e)||ye(e),"remove-tag":(e,t)=>Le(e)&&He(t),"drag-tag":(e,t,n)=>He(e)&&He(t)&&Le(n),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0};function NW({wrapperRef:e,handleDragged:t,afterDragged:n}){const a=fe("input-tag"),o=Xt(),s=M(!1);let r,l,u,c;function d(p){return`.${a.e("inner")} .${a.namespace.value}-tag:nth-child(${p+1})`}function f(p,h){r=h,l=e.value.querySelector(d(h)),l&&(l.style.opacity="0.5"),p.dataTransfer.effectAllowed="move"}function v(p,h){if(u=h,p.preventDefault(),p.dataTransfer.dropEffect="move",Tt(r)||r===h){s.value=!1;return}const m=e.value.querySelector(d(h)).getBoundingClientRect(),b=r+1!==h,k=r-1!==h,y=p.clientX-m.left,S=b?k?.5:1:-1,C=k?b?.5:0:1;y<=m.width*S?c="before":y>m.width*C?c="after":c=void 0;const E=e.value.querySelector(`.${a.e("inner")}`),$=E.getBoundingClientRect(),O=Number.parseFloat(Yo(E,"gap"))/2,R=m.top-$.top;let N=-9999;if(c==="before")N=Math.max(m.left-$.left-O,Math.floor(-O/2));else if(c==="after"){const A=m.right-$.left;N=A+($.width===A?Math.floor(O/2):O)}qS(o.value,{top:`${R}px`,left:`${N}px`}),s.value=!!c}function g(p){p.preventDefault(),l&&(l.style.opacity=""),c&&!Tt(r)&&!Tt(u)&&r!==u&&t(r,u,c),s.value=!1,r=void 0,l=null,u=void 0,c=void 0,n?.()}return{dropIndicatorRef:o,showDropIndicator:s,handleDragStart:f,handleDragOver:v,handleDragEnd:g}}function RW(){const e=M(!1);return{hovering:e,handleMouseEnter:()=>{e.value=!0},handleMouseLeave:()=>{e.value=!1}}}function IW({props:e,emit:t,formItem:n}){const a=ln(),o=Sn(),s=Xt(),r=M(),l=M(),u=w(()=>["small"].includes(o.value)?"small":"default"),c=w(()=>e.modelValue?.length?void 0:e.placeholder),d=w(()=>!(e.readonly||a.value)),f=w(()=>Tt(e.max)?!1:(e.modelValue?.length??0)>=e.max),v=w(()=>e.collapseTags?e.modelValue?.slice(0,e.maxCollapseTags):e.modelValue),g=w(()=>e.collapseTags?e.modelValue?.slice(e.maxCollapseTags):[]),p=W=>{const P=[...e.modelValue??[],...Rn(W)];t(tt,P),t(bt,P),t("add-tag",W),r.value=void 0},h=W=>{const P=W.split(e.delimiter),I=P.length>1?P.map(L=>L.trim()).filter(Boolean):[];if(e.max){const L=e.max-(e.modelValue?.length??0);I.splice(L)}return I.length===1?I[0]:I},m=W=>{const P=W.clipboardData?.getData("text");if(e.readonly||f.value||!e.delimiter||!P)return;const{selectionStart:I=0,selectionEnd:L=0,value:D}=W.target,F=D.slice(0,I)+P+D.slice(L),q=h(F);q.length&&(p(q),t(wn,F),W.preventDefault())},b=W=>{if(f.value){r.value=void 0;return}if(!_.value){if(e.delimiter&&r.value){const P=h(r.value);P.length&&p(P)}t(wn,W.target.value)}},k=W=>{if(!_.value)switch(jt(W)){case e.trigger:W.preventDefault(),W.stopPropagation(),S();break;case we.numpadEnter:e.trigger===we.enter&&(W.preventDefault(),W.stopPropagation(),S());break;case we.backspace:!r.value&&e.modelValue?.length&&(W.preventDefault(),W.stopPropagation(),C(e.modelValue.length-1));break}},y=W=>{_.value||!jS()||jt(W)===we.space&&e.trigger===we.space&&(W.preventDefault(),W.stopPropagation(),S())},S=()=>{const W=r.value?.trim();!W||f.value||p(W)},C=W=>{const P=(e.modelValue??[]).slice(),[I]=P.splice(W,1);t(tt,P),t(bt,P),t("remove-tag",I,W)},E=()=>{r.value=void 0,t(tt,void 0),t(bt,void 0),t("clear")},$=(W,P,I)=>{const L=(e.modelValue??[]).slice(),[D]=L.splice(W,1),F=P>W&&I==="before"?-1:P{s.value?.focus()},R=()=>{s.value?.blur()},{wrapperRef:N,isFocused:A}=ms(s,{disabled:a,beforeBlur(W){return l.value?.isFocusInsideContent(W)},afterBlur(){e.saveOnBlur?S():r.value=void 0,e.validateEvent&&n?.validate?.("blur").catch(W=>pt(W))}}),{isComposing:_,handleCompositionStart:V,handleCompositionUpdate:z,handleCompositionEnd:U}=pu({afterComposition:b});return le(()=>e.modelValue,()=>{e.validateEvent&&n?.validate?.(bt).catch(W=>pt(W))}),{inputRef:s,wrapperRef:N,tagTooltipRef:l,isFocused:A,isComposing:_,inputValue:r,size:o,tagSize:u,placeholder:c,closable:d,disabled:a,inputLimit:f,showTagList:v,collapseTagList:g,handleDragged:$,handlePaste:m,handleInput:b,handleKeydown:k,handleKeyup:y,handleAddTag:S,handleRemoveTag:C,handleClear:E,handleCompositionStart:V,handleCompositionUpdate:z,handleCompositionEnd:U,focus:O,blur:R}}function PW({props:e,isFocused:t,hovering:n,disabled:a,inputValue:o,size:s,validateState:r,validateIcon:l,needStatusIcon:u}){const c=fs(),d=hn(),f=fe("input-tag"),v=fe("input"),g=M(),p=M(),h=w(()=>[f.b(),f.is("focused",t.value),f.is("hovering",n.value),f.is("disabled",a.value),f.m(s.value),f.e("wrapper"),c.class]),m=w(()=>[c.style]),b=w(()=>[f.e("inner"),f.is("draggable",e.draggable),f.is("left-space",!e.modelValue?.length&&!d.prefix),f.is("right-space",!e.modelValue?.length&&!y.value)]),k=w(()=>e.clearable&&!a.value&&!e.readonly&&(e.modelValue?.length||o.value)&&(t.value||n.value)),y=w(()=>d.suffix||k.value||r.value&&l.value&&u.value),S=At({innerWidth:0,collapseItemWidth:0}),C=()=>{if(!p.value)return 0;const R=window.getComputedStyle(p.value);return Number.parseFloat(R.gap||"6px")},E=()=>{S.innerWidth=Number.parseFloat(window.getComputedStyle(p.value).width)},$=()=>{S.collapseItemWidth=g.value.getBoundingClientRect().width},O=w(()=>{if(!e.collapseTags)return{};const R=C(),N=R+Ad,A=g.value&&e.maxCollapseTags===1?S.innerWidth-S.collapseItemWidth-R-N:S.innerWidth-N;return{maxWidth:`${Math.max(A,0)}px`}});return Zt(p,E),Zt(g,$),{ns:f,nsInput:v,containerKls:h,containerStyle:m,innerKls:b,showClear:k,showSuffix:y,tagStyle:O,collapseItemRef:g,innerRef:p}}const MW=["id","minlength","maxlength","disabled","readonly","autocomplete","tabindex","placeholder","autofocus","ariaLabel"],_W=["textContent"];var AW=se({name:"ElInputTag",inheritAttrs:!1,__name:"input-tag",props:$W,emits:OW,setup(e,{expose:t,emit:n}){const a=e,o=n,s=Wd(),r=hn(),{form:l,formItem:u}=Dn(),{inputId:c}=Ia(a,{formItemContext:u}),d=w(()=>l?.statusIcon??!1),f=w(()=>u?.validateState||""),v=w(()=>f.value&&nf[f.value]),{inputRef:g,wrapperRef:p,tagTooltipRef:h,isFocused:m,inputValue:b,size:k,tagSize:y,placeholder:S,closable:C,disabled:E,showTagList:$,collapseTagList:O,handleDragged:R,handlePaste:N,handleInput:A,handleKeydown:_,handleKeyup:V,handleRemoveTag:z,handleClear:U,handleCompositionStart:W,handleCompositionUpdate:P,handleCompositionEnd:I,focus:L,blur:D}=IW({props:a,emit:o,formItem:u}),{hovering:F,handleMouseEnter:q,handleMouseLeave:j}=RW(),{calculatorRef:X,inputStyle:Q}=Iv(),{dropIndicatorRef:he,showDropIndicator:ue,handleDragStart:ge,handleDragOver:ie,handleDragEnd:ae}=NW({wrapperRef:p,handleDragged:R,afterDragged:L}),{ns:ne,nsInput:K,containerKls:Z,containerStyle:re,innerKls:ce,showClear:ve,showSuffix:ke,tagStyle:Re,collapseItemRef:Ie,innerRef:$e}=PW({props:a,hovering:F,isFocused:m,inputValue:b,disabled:E,size:k,validateState:f,validateIcon:v,needStatusIcon:d});return t({focus:L,blur:D}),(pe,Ee)=>(x(),B("div",{ref_key:"wrapperRef",ref:p,class:T(i(Z)),style:Ke(i(re)),onMouseenter:Ee[9]||(Ee[9]=(...me)=>i(q)&&i(q)(...me)),onMouseleave:Ee[10]||(Ee[10]=(...me)=>i(j)&&i(j)(...me))},[i(r).prefix?(x(),B("div",{key:0,class:T(i(ne).e("prefix"))},[ee(pe.$slots,"prefix")],2)):te("v-if",!0),H("div",{ref_key:"innerRef",ref:$e,class:T(i(ce))},[(x(!0),B(Fe,null,yt(i($),(me,Me)=>(x(),oe(i(ts),{key:Me,size:i(y),closable:i(C),type:e.tagType,effect:e.tagEffect,draggable:i(C)&&e.draggable,style:Ke(i(Re)),"disable-transitions":"",onClose:We=>i(z)(Me),onDragstart:We=>i(ge)(We,Me),onDragover:We=>i(ie)(We,Me),onDragend:i(ae),onDrop:Ee[0]||(Ee[0]=Ge(()=>{},["stop"]))},{default:J(()=>[ee(pe.$slots,"tag",{value:me,index:Me},()=>[wt(Se(me),1)])]),_:2},1032,["size","closable","type","effect","draggable","style","onClose","onDragstart","onDragover","onDragend"]))),128)),e.collapseTags&&e.modelValue&&e.modelValue.length>e.maxCollapseTags?(x(),oe(i(Ln),{key:0,ref_key:"tagTooltipRef",ref:h,disabled:!e.collapseTagsTooltip,"fallback-placements":["bottom","top","right","left"],effect:e.effect,placement:"bottom"},{default:J(()=>[H("div",{ref_key:"collapseItemRef",ref:Ie,class:T(i(ne).e("collapse-tag"))},[Y(i(ts),{closable:!1,size:i(y),type:e.tagType,effect:e.tagEffect,"disable-transitions":""},{default:J(()=>[wt(" + "+Se(e.modelValue.length-e.maxCollapseTags),1)]),_:1},8,["size","type","effect"])],2)]),content:J(()=>[H("div",{class:T(i(ne).e("input-tag-list"))},[(x(!0),B(Fe,null,yt(i(O),(me,Me)=>(x(),oe(i(ts),{key:Me,size:i(y),closable:i(C),type:e.tagType,effect:e.tagEffect,"disable-transitions":"",onClose:We=>i(z)(Me+e.maxCollapseTags)},{default:J(()=>[ee(pe.$slots,"tag",{value:me,index:Me+e.maxCollapseTags},()=>[wt(Se(me),1)])]),_:2},1032,["size","closable","type","effect","onClose"]))),128))],2)]),_:3},8,["disabled","effect"])):te("v-if",!0),H("div",{class:T(i(ne).e("input-wrapper"))},[ct(H("input",dt({id:i(c),ref_key:"inputRef",ref:g,"onUpdate:modelValue":Ee[1]||(Ee[1]=me=>Jt(b)?b.value=me:null)},i(s),{type:"text",minlength:e.minlength,maxlength:e.maxlength,disabled:i(E),readonly:e.readonly,autocomplete:e.autocomplete,tabindex:e.tabindex,placeholder:i(S),autofocus:e.autofocus,ariaLabel:e.ariaLabel,class:i(ne).e("input"),style:i(Q),onCompositionstart:Ee[2]||(Ee[2]=(...me)=>i(W)&&i(W)(...me)),onCompositionupdate:Ee[3]||(Ee[3]=(...me)=>i(P)&&i(P)(...me)),onCompositionend:Ee[4]||(Ee[4]=(...me)=>i(I)&&i(I)(...me)),onPaste:Ee[5]||(Ee[5]=(...me)=>i(N)&&i(N)(...me)),onInput:Ee[6]||(Ee[6]=(...me)=>i(A)&&i(A)(...me)),onKeydown:Ee[7]||(Ee[7]=(...me)=>i(_)&&i(_)(...me)),onKeyup:Ee[8]||(Ee[8]=(...me)=>i(V)&&i(V)(...me))}),null,16,MW),[[z1,i(b)]]),H("span",{ref_key:"calculatorRef",ref:X,"aria-hidden":"true",class:T(i(ne).e("input-calculator")),textContent:Se(i(b))},null,10,_W)],2),ct(H("div",{ref_key:"dropIndicatorRef",ref:he,class:T(i(ne).e("drop-indicator"))},null,2),[[Pt,i(ue)]])],2),i(ke)?(x(),B("div",{key:1,class:T(i(ne).e("suffix"))},[ee(pe.$slots,"suffix"),i(ve)?(x(),oe(i(De),{key:0,class:T([i(ne).e("icon"),i(ne).e("clear")]),onMousedown:Ge(i(Dt),["prevent"]),onClick:i(U)},{default:J(()=>[(x(),oe(it(e.clearIcon)))]),_:1},8,["class","onMousedown","onClick"])):te("v-if",!0),f.value&&v.value&&d.value?(x(),oe(i(De),{key:1,class:T([i(K).e("icon"),i(K).e("validateIcon"),i(K).is("loading",f.value==="validating")])},{default:J(()=>[(x(),oe(it(v.value)))]),_:1},8,["class"])):te("v-if",!0)],2)):te("v-if",!0)],38))}}),LW=AW;const DW=st(LW),BW=Ce({type:{type:String,values:["primary","success","warning","info","danger","default"],default:void 0},underline:{type:[Boolean,String],values:[!0,!1,"always","never","hover"],default:void 0},disabled:Boolean,href:{type:String,default:""},target:{type:String,default:"_self"},icon:{type:Kt}}),FW={click:e=>e instanceof MouseEvent},VW=["href","target"];var zW=se({name:"ElLink",__name:"link",props:BW,emits:FW,setup(e,{emit:t}){const n=e,a=t,o=gs("link");xo({scope:"el-link",from:"The underline option (boolean)",replacement:"'always' | 'hover' | 'never'",version:"3.0.0",ref:"https://element-plus.org/en-US/component/link.html#underline"},w(()=>Ht(n.underline)));const s=fe("link"),r=w(()=>[s.b(),s.m(n.type??o.value?.type??"default"),s.is("disabled",n.disabled),s.is("underline",l.value==="always"),s.is("hover-underline",l.value==="hover"&&!n.disabled)]),l=w(()=>Ht(n.underline)?n.underline?"hover":"never":n.underline??o.value?.underline??"hover");function u(c){n.disabled||a("click",c)}return(c,d)=>(x(),B("a",{class:T(r.value),href:e.disabled||!e.href?void 0:e.href,target:e.disabled||!e.href?void 0:e.target,onClick:u},[e.icon?(x(),oe(i(De),{key:0},{default:J(()=>[(x(),oe(it(e.icon)))]),_:1})):te("v-if",!0),c.$slots.default?(x(),B("span",{key:1,class:T(i(s).e("inner"))},[ee(c.$slots,"default")],2)):te("v-if",!0),c.$slots.icon?ee(c.$slots,"icon",{key:2}):te("v-if",!0)],10,VW))}}),HW=zW;const KW=st(HW),xm="rootMenu",cd="subMenu:";function A2(e,t){const n=w(()=>{let a=e.parent;const o=[t.value];for(;a.type.name!=="ElMenu";)a.props.index&&o.unshift(a.props.index),a=a.parent;return o});return{parentMenu:w(()=>{let a=e.parent;for(;a&&!["ElMenu","ElSubMenu"].includes(a.type.name);)a=a.parent;return a}),indexPath:n}}function WW(e){return w(()=>{const t=e.backgroundColor;return t?new fn(t).shade(20).toString():""})}const L2=(e,t)=>{const n=fe("menu");return w(()=>n.cssVarBlock({"text-color":e.textColor||"","hover-text-color":e.textColor||"","bg-color":e.backgroundColor||"","hover-bg-color":WW(e).value||"","active-color":e.activeTextColor||"",level:`${t}`}))},jW=Ce({index:{type:String,required:!0},showTimeout:Number,hideTimeout:Number,popperClass:String,popperStyle:{type:G([String,Object])},disabled:Boolean,teleported:{type:Boolean,default:void 0},popperOffset:Number,expandCloseIcon:{type:Kt},expandOpenIcon:{type:Kt},collapseCloseIcon:{type:Kt},collapseOpenIcon:{type:Kt}}),ap="ElSubMenu";var Tm=se({name:ap,props:jW,setup(e,{slots:t,expose:n}){const a=ft(),{indexPath:o,parentMenu:s}=A2(a,w(()=>e.index)),r=fe("menu"),l=fe("sub-menu"),u=_e(xm);u||en(ap,"can not inject root menu");const c=_e(`${cd}${s.value.uid}`);c||en(ap,"can not inject sub menu");const d=M({}),f=M({});let v;const g=M(!1),p=M(),h=M(),m=w(()=>c.level===0),b=w(()=>O.value==="horizontal"&&m.value?"bottom-start":"right-start"),k=w(()=>O.value==="horizontal"&&m.value||O.value==="vertical"&&!u.props.collapse?e.expandCloseIcon&&e.expandOpenIcon?E.value?e.expandOpenIcon:e.expandCloseIcon:Bo:e.collapseCloseIcon&&e.collapseOpenIcon?E.value?e.collapseOpenIcon:e.collapseCloseIcon:na),y=w(()=>{const q=e.teleported;return Tt(q)?m.value:q}),S=w(()=>u.props.collapse?`${r.namespace.value}-zoom-in-left`:`${r.namespace.value}-zoom-in-top`),C=w(()=>O.value==="horizontal"&&m.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"]),E=w(()=>u.openedMenus.includes(e.index)),$=w(()=>[...Object.values(d.value),...Object.values(f.value)].some(({active:q})=>q)),O=w(()=>u.props.mode),R=w(()=>u.props.persistent),N=At({index:e.index,indexPath:o,active:$}),A=L2(u.props,c.level+1),_=w(()=>e.popperOffset??u.props.popperOffset),V=w(()=>e.popperClass??u.props.popperClass),z=w(()=>e.popperStyle??u.props.popperStyle),U=w(()=>e.showTimeout??u.props.showTimeout),W=w(()=>e.hideTimeout??u.props.hideTimeout),P=()=>h.value?.popperRef?.popperInstanceRef?.destroy(),I=q=>{q||P()},L=()=>{u.props.menuTrigger==="hover"&&u.props.mode==="horizontal"||u.props.collapse&&u.props.mode==="vertical"||e.disabled||u.handleSubMenuClick({index:e.index,indexPath:o.value,active:$.value})},D=(q,j=U.value)=>{if(q.type!=="focus"){if(u.props.menuTrigger==="click"&&u.props.mode==="horizontal"||!u.props.collapse&&u.props.mode==="vertical"||e.disabled){c.mouseInChild.value=!0;return}c.mouseInChild.value=!0,v?.(),{stop:v}=pl(()=>{u.openMenu(e.index,o.value)},j),y.value&&s.value.vnode.el?.dispatchEvent(new MouseEvent("mouseenter")),q.type==="mouseenter"&&q.target&&Ne(()=>{ru(q.target,{preventScroll:!0})})}},F=(q=!1)=>{if(u.props.menuTrigger==="click"&&u.props.mode==="horizontal"||!u.props.collapse&&u.props.mode==="vertical"){c.mouseInChild.value=!1;return}v?.(),c.mouseInChild.value=!1,{stop:v}=pl(()=>!g.value&&u.closeMenu(e.index,o.value),W.value),y.value&&q&&c.handleMouseleave?.(!0)};le(()=>u.props.collapse,q=>I(!!q));{const q=X=>{f.value[X.index]=X},j=X=>{delete f.value[X.index]};St(`${cd}${a.uid}`,{addSubMenu:q,removeSubMenu:j,handleMouseleave:F,mouseInChild:g,level:c.level+1})}return n({opened:E}),ht(()=>{u.addSubMenu(N),c.addSubMenu(N)}),Bt(()=>{c.removeSubMenu(N),u.removeSubMenu(N)}),()=>{const q=[t.title?.(),qe(De,{class:l.e("icon-arrow"),style:{transform:E.value?e.expandCloseIcon&&e.expandOpenIcon||e.collapseCloseIcon&&e.collapseOpenIcon&&u.props.collapse?"none":"rotateZ(180deg)":"none"}},{default:()=>Le(k.value)?qe(a.appContext.components[k.value]):qe(k.value)})],j=u.isMenuPopup?qe(Ln,{ref:h,visible:E.value,effect:"light",pure:!0,offset:_.value,showArrow:!1,persistent:R.value,popperClass:V.value,popperStyle:z.value,placement:b.value,teleported:y.value,fallbackPlacements:C.value,transition:S.value,gpuAcceleration:!1},{content:()=>qe("div",{class:[r.m(O.value),r.m("popup-container"),V.value],onMouseenter:X=>D(X,100),onMouseleave:()=>F(!0),onFocus:X=>D(X,100)},[qe("ul",{class:[r.b(),r.m("popup"),r.m(`popup-${b.value}`)],style:A.value},[t.default?.()])]),default:()=>qe("div",{class:l.e("title"),onClick:L},q)}):qe(Fe,{},[qe("div",{class:l.e("title"),ref:p,onClick:L},q),qe(rf,{},{default:()=>ct(qe("ul",{role:"menu",class:[r.b(),r.m("inline")],style:A.value},[t.default?.()]),[[Pt,E.value]])})]);return qe("li",{class:[l.b(),l.is("active",$.value),l.is("opened",E.value),l.is("disabled",e.disabled)],role:"menuitem",ariaHaspopup:!0,ariaExpanded:E.value,onMouseenter:D,onMouseleave:()=>F(),onFocus:D},[j])}}}),UW=class{constructor(e,t){this.parent=e,this.domNode=t,this.subIndex=0,this.subIndex=0,this.init()}init(){this.subMenuItems=this.domNode.querySelectorAll("li"),this.addListeners()}gotoSubIndex(e){e===this.subMenuItems.length?e=0:e<0&&(e=this.subMenuItems.length-1),this.subMenuItems[e].focus(),this.subIndex=e}addListeners(){const e=this.parent.domNode;Array.prototype.forEach.call(this.subMenuItems,t=>{t.addEventListener("keydown",n=>{const a=jt(n);let o=!1;switch(a){case we.down:this.gotoSubIndex(this.subIndex+1),o=!0;break;case we.up:this.gotoSubIndex(this.subIndex-1),o=!0;break;case we.tab:uc(e,"mouseleave");break;case we.enter:case we.numpadEnter:case we.space:o=!0,n.currentTarget.click();break}return o&&(n.preventDefault(),n.stopPropagation()),!1})})}},qW=class{constructor(e,t){this.domNode=e,this.submenu=null,this.submenu=null,this.init(t)}init(e){this.domNode.setAttribute("tabindex","0");const t=this.domNode.querySelector(`.${e}-menu`);t&&(this.submenu=new UW(this,t)),this.addListeners()}addListeners(){this.domNode.addEventListener("keydown",e=>{const t=jt(e);let n=!1;switch(t){case we.down:uc(e.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(0),n=!0;break;case we.up:uc(e.currentTarget,"mouseenter"),this.submenu&&this.submenu.gotoSubIndex(this.submenu.subMenuItems.length-1),n=!0;break;case we.tab:uc(e.currentTarget,"mouseleave");break;case we.enter:case we.numpadEnter:case we.space:n=!0,e.currentTarget.click();break}n&&e.preventDefault()})}},YW=class{constructor(e,t){this.domNode=e,this.init(t)}init(e){const t=this.domNode.childNodes;Array.from(t).forEach(n=>{n.nodeType===1&&new qW(n,e)})}},GW=se({name:"ElMenuCollapseTransition",__name:"menu-collapse-transition",setup(e){const t=fe("menu"),n={onBeforeEnter:a=>a.style.opacity="0.2",onEnter(a,o){La(a,`${t.namespace.value}-opacity-transition`),a.style.opacity="1",o()},onAfterEnter(a){ta(a,`${t.namespace.value}-opacity-transition`),a.style.opacity=""},onBeforeLeave(a){a.dataset||(a.dataset={}),To(a,t.m("collapse"))?(ta(a,t.m("collapse")),a.dataset.oldOverflow=a.style.overflow,a.dataset.scrollWidth=a.clientWidth.toString(),La(a,t.m("collapse"))):(La(a,t.m("collapse")),a.dataset.oldOverflow=a.style.overflow,a.dataset.scrollWidth=a.clientWidth.toString(),ta(a,t.m("collapse"))),a.style.width=`${a.scrollWidth}px`,a.style.overflow="hidden"},onLeave(a){La(a,"horizontal-collapse-transition"),a.style.width=`${a.dataset.scrollWidth}px`}};return(a,o)=>(x(),oe(Vn,dt({mode:"out-in"},n),{default:J(()=>[ee(a.$slots,"default")]),_:3},16))}}),XW=GW;const JW=Ce({mode:{type:String,values:["horizontal","vertical"],default:"vertical"},defaultActive:{type:String,default:""},defaultOpeneds:{type:G(Array),default:()=>sn([])},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:!0},ellipsis:{type:Boolean,default:!0},popperOffset:{type:Number,default:6},ellipsisIcon:{type:Kt,default:()=>d3},popperEffect:{type:G(String),default:"dark"},popperClass:String,popperStyle:{type:G([String,Object])},showTimeout:{type:Number,default:300},hideTimeout:{type:Number,default:300},persistent:{type:Boolean,default:!0}}),op=e=>ye(e)&&e.every(t=>Le(t)),ZW={close:(e,t)=>Le(e)&&op(t),open:(e,t)=>Le(e)&&op(t),select:(e,t,n,a)=>Le(e)&&op(t)&&nt(n)&&(Tt(a)||a instanceof Promise)},h0=64;var QW=se({name:"ElMenu",props:JW,emits:ZW,setup(e,{emit:t,slots:n,expose:a}){const o=ft(),s=o.appContext.config.globalProperties.$router,r=M(),l=M(),u=fe("menu"),c=fe("sub-menu");let d=h0;const f=M(-1),v=M(e.defaultOpeneds&&!e.collapse?e.defaultOpeneds.slice(0):[]),g=M(e.defaultActive),p=M({}),h=M({}),m=w(()=>e.mode==="horizontal"||e.mode==="vertical"&&e.collapse),b=()=>{const P=g.value&&p.value[g.value];!P||e.mode==="horizontal"||e.collapse||P.indexPath.forEach(I=>{const L=h.value[I];L&&k(I,L.indexPath)})},k=(P,I)=>{v.value.includes(P)||(e.uniqueOpened&&(v.value=v.value.filter(L=>I.includes(L))),v.value.push(P),t("open",P,I))},y=P=>{const I=v.value.indexOf(P);I!==-1&&v.value.splice(I,1)},S=(P,I)=>{y(P),t("close",P,I)},C=({index:P,indexPath:I})=>{v.value.includes(P)?S(P,I):k(P,I)},E=P=>{(e.mode==="horizontal"||e.collapse)&&(v.value=[]);const{index:I,indexPath:L}=P;if(!(gn(I)||gn(L)))if(e.router&&s){const D=P.route||I,F=s.push(D).then(q=>(q||(g.value=I),q));t("select",I,L,{index:I,indexPath:L,route:D},F)}else g.value=I,t("select",I,L,{index:I,indexPath:L})},$=P=>{const I=p.value;g.value=(I[P]||g.value&&I[g.value]||I[e.defaultActive])?.index??P},O=P=>{const I=getComputedStyle(P),L=Number.parseInt(I.marginLeft,10),D=Number.parseInt(I.marginRight,10);return P.offsetWidth+L+D||0},R=()=>{if(!r.value)return-1;const P=Array.from(r.value.childNodes).filter(X=>X.nodeName!=="#comment"&&(X.nodeName!=="#text"||X.nodeValue)),I=getComputedStyle(r.value),L=Number.parseInt(I.paddingLeft,10),D=Number.parseInt(I.paddingRight,10),F=r.value.clientWidth-L-D;let q=0,j=0;return P.forEach((X,Q)=>{q+=O(X),q<=F-d&&(j=Q+1)}),j===P.length?-1:j},N=P=>h.value[P].indexPath,A=(P,I=33.34)=>{let L;return()=>{L&&clearTimeout(L),L=setTimeout(()=>{P()},I)}};let _=!0;const V=()=>{const P=xn(l);if(P&&(d=O(P)||h0),f.value===R())return;const I=()=>{f.value=-1,Ne(()=>{f.value=R()})};_?I():A(I)(),_=!1};le(()=>e.defaultActive,P=>{p.value[P]||(g.value=""),$(P)}),le(()=>e.collapse,P=>{P&&(v.value=[])}),le(p.value,b);let z;wa(()=>{e.mode==="horizontal"&&e.ellipsis?z=Zt(r,V).stop:z?.()});const U=M(!1);{const P=F=>{h.value[F.index]=F},I=F=>{delete h.value[F.index]};St(xm,At({props:e,openedMenus:v,items:p,subMenus:h,activeIndex:g,isMenuPopup:m,addMenuItem:F=>{p.value[F.index]=F},removeMenuItem:F=>{delete p.value[F.index]},addSubMenu:P,removeSubMenu:I,openMenu:k,closeMenu:S,handleMenuItemClick:E,handleSubMenuClick:C})),St(`${cd}${o.uid}`,{addSubMenu:P,removeSubMenu:I,mouseInChild:U,level:0})}ht(()=>{e.mode==="horizontal"&&new YW(o.vnode.el,u.namespace.value)}),a({open:I=>{const{indexPath:L}=h.value[I];L.forEach(D=>k(D,L))},close:y,updateActiveIndex:$,handleResize:V});const W=L2(e,0);return()=>{let P=n.default?.()??[];const I=[];if(e.mode==="horizontal"&&r.value){const F=Ta(P).filter(X=>X?.shapeFlag!==8),q=f.value===-1?F:F.slice(0,f.value),j=f.value===-1?[]:F.slice(f.value);j?.length&&e.ellipsis&&(P=q,I.push(qe(Tm,{ref:l,index:"sub-menu-more",class:c.e("hide-arrow"),popperOffset:e.popperOffset},{title:()=>qe(De,{class:c.e("icon-more")},{default:()=>qe(e.ellipsisIcon)}),default:()=>j})))}const L=e.closeOnClickOutside?[[zs,()=>{v.value.length&&(U.value||(v.value.forEach(F=>t("close",F,N(F))),v.value=[]))}]]:[],D=ct(qe("ul",{key:String(e.collapse),role:"menubar",ref:r,style:W.value,class:{[u.b()]:!0,[u.m(e.mode)]:!0,[u.m("collapse")]:e.collapse}},[...P,...I]),L);return e.collapseTransition&&e.mode==="vertical"?qe(XW,()=>D):D}}});const ej=Ce({index:{type:G([String,null]),default:null},route:{type:G([String,Object])},disabled:Boolean}),tj={click:e=>Le(e.index)&&ye(e.indexPath)},nj={title:String},Zu="ElMenuItem";var aj=se({name:Zu,__name:"menu-item",props:ej,emits:tj,setup(e,{expose:t,emit:n}){const a=e,o=n;va(a.index)&&pt(Zu,'Missing required prop: "index"');const s=ft(),r=_e(xm),l=fe("menu"),u=fe("menu-item");r||en(Zu,"can not inject root menu");const{parentMenu:c,indexPath:d}=A2(s,Vt(a,"index")),f=_e(`${cd}${c.value.uid}`);f||en(Zu,"can not inject sub menu");const v=w(()=>a.index===r.activeIndex),g=At({index:a.index,indexPath:d,active:v}),p=()=>{a.disabled||(r.handleMenuItemClick({index:a.index,indexPath:d.value,route:a.route}),o("click",g))};return ht(()=>{f.addSubMenu(g),r.addMenuItem(g)}),Bt(()=>{f.removeSubMenu(g),r.removeMenuItem(g)}),t({parentMenu:c,rootMenu:r,active:v,nsMenu:l,nsMenuItem:u,handleClick:p}),(h,m)=>(x(),B("li",{class:T([i(u).b(),i(u).is("active",v.value),i(u).is("disabled",e.disabled)]),role:"menuitem",tabindex:"-1",onClick:p},[i(c).type.name==="ElMenu"&&i(r).props.collapse&&h.$slots.title?(x(),oe(i(Ln),{key:0,effect:i(r).props.popperEffect,placement:"right","fallback-placements":["left"],"popper-class":i(r).props.popperClass,"popper-style":i(r).props.popperStyle,persistent:i(r).props.persistent,"focus-on-target":""},{content:J(()=>[ee(h.$slots,"title")]),default:J(()=>[H("div",{class:T(i(l).be("tooltip","trigger"))},[ee(h.$slots,"default")],2)]),_:3},8,["effect","popper-class","popper-style","persistent"])):(x(),B(Fe,{key:1},[ee(h.$slots,"default"),ee(h.$slots,"title")],64))],2))}}),D2=aj,oj=se({name:"ElMenuItemGroup",__name:"menu-item-group",props:nj,setup(e){const t=fe("menu-item-group");return(n,a)=>(x(),B("li",{class:T(i(t).b())},[H("div",{class:T(i(t).e("title"))},[n.$slots.title?ee(n.$slots,"title",{key:1}):(x(),B(Fe,{key:0},[wt(Se(e.title),1)],64))],2),H("ul",null,[ee(n.$slots,"default")])],2))}}),B2=oj;const sj=st(QW,{MenuItem:D2,MenuItemGroup:B2,SubMenu:Tm}),rj=tn(D2),lj=tn(B2),ij=tn(Tm),uj=Ce({icon:{type:Kt,default:()=>A4},title:String,content:{type:String,default:""}}),cj={back:()=>!0},dj=["aria-label"];var fj=se({name:"ElPageHeader",__name:"page-header",props:uj,emits:cj,setup(e,{emit:t}){const n=t,{t:a}=Ct(),o=fe("page-header");function s(){n("back")}return(r,l)=>(x(),B("div",{class:T([i(o).b(),i(o).is("contentful",!!r.$slots.default),{[i(o).m("has-breadcrumb")]:!!r.$slots.breadcrumb,[i(o).m("has-extra")]:!!r.$slots.extra}])},[r.$slots.breadcrumb?(x(),B("div",{key:0,class:T(i(o).e("breadcrumb"))},[ee(r.$slots,"breadcrumb")],2)):te("v-if",!0),H("div",{class:T(i(o).e("header"))},[H("div",{class:T(i(o).e("left"))},[H("div",{class:T(i(o).e("back")),role:"button",tabindex:"0",onClick:s},[e.icon||r.$slots.icon?(x(),B("div",{key:0,"aria-label":e.title||i(a)("el.pageHeader.title"),class:T(i(o).e("icon"))},[ee(r.$slots,"icon",{},()=>[e.icon?(x(),oe(i(De),{key:0},{default:J(()=>[(x(),oe(it(e.icon)))]),_:1})):te("v-if",!0)])],10,dj)):te("v-if",!0),H("div",{class:T(i(o).e("title"))},[ee(r.$slots,"title",{},()=>[wt(Se(e.title||i(a)("el.pageHeader.title")),1)])],2)],2),Y(i(k2),{direction:"vertical"}),H("div",{class:T(i(o).e("content"))},[ee(r.$slots,"content",{},()=>[wt(Se(e.content),1)])],2)],2),r.$slots.extra?(x(),B("div",{key:0,class:T(i(o).e("extra"))},[ee(r.$slots,"extra")],2)):te("v-if",!0)],2),r.$slots.default?(x(),B("div",{key:1,class:T(i(o).e("main"))},[ee(r.$slots,"default")],2)):te("v-if",!0)],2))}}),pj=fj;const hj=st(pj),F2=Symbol("elPaginationKey"),vj=Ce({disabled:Boolean,currentPage:{type:Number,default:1},prevText:{type:String},prevIcon:{type:Kt}}),mj={click:e=>e instanceof MouseEvent},gj=["disabled","aria-label","aria-disabled"],bj={key:0};var yj=se({name:"ElPaginationPrev",__name:"prev",props:vj,emits:mj,setup(e){const t=e,{t:n}=Ct(),a=w(()=>t.disabled||t.currentPage<=1);return(o,s)=>(x(),B("button",{type:"button",class:"btn-prev",disabled:a.value,"aria-label":o.prevText||i(n)("el.pagination.prev"),"aria-disabled":a.value,onClick:s[0]||(s[0]=r=>o.$emit("click",r))},[o.prevText?(x(),B("span",bj,Se(o.prevText),1)):(x(),oe(i(De),{key:1},{default:J(()=>[(x(),oe(it(o.prevIcon)))]),_:1}))],8,gj))}}),wj=yj;const Sj=Ce({disabled:Boolean,currentPage:{type:Number,default:1},pageCount:{type:Number,default:50},nextText:{type:String},nextIcon:{type:Kt}}),Cj=["disabled","aria-label","aria-disabled"],kj={key:0};var Ej=se({name:"ElPaginationNext",__name:"next",props:Sj,emits:["click"],setup(e){const t=e,{t:n}=Ct(),a=w(()=>t.disabled||t.currentPage===t.pageCount||t.pageCount===0);return(o,s)=>(x(),B("button",{type:"button",class:"btn-next",disabled:a.value,"aria-label":o.nextText||i(n)("el.pagination.next"),"aria-disabled":a.value,onClick:s[0]||(s[0]=r=>o.$emit("click",r))},[o.nextText?(x(),B("span",kj,Se(o.nextText),1)):(x(),oe(i(De),{key:1},{default:J(()=>[(x(),oe(it(o.nextIcon)))]),_:1}))],8,Cj))}}),xj=Ej;const $m=()=>_e(F2,{}),Tj=Ce({pageSize:{type:Number,required:!0},pageSizes:{type:G(Array),default:()=>sn([10,20,30,40,50,100])},popperClass:{type:String},popperStyle:{type:G([String,Object])},disabled:Boolean,teleported:Boolean,size:{type:String,values:ro},appendSizeTo:String});var $j=se({name:"ElPaginationSizes",__name:"sizes",props:Tj,emits:["page-size-change"],setup(e,{emit:t}){const n=e,a=t,{t:o}=Ct(),s=fe("pagination"),r=$m(),l=M(n.pageSize);le(()=>n.pageSizes,(d,f)=>{on(d,f)||ye(d)&&a("page-size-change",d.includes(n.pageSize)?n.pageSize:n.pageSizes[0])}),le(()=>n.pageSize,d=>{l.value=d});const u=w(()=>n.pageSizes);function c(d){d!==l.value&&(l.value=d,r.handleSizeChange?.(Number(d)))}return(d,f)=>(x(),B("span",{class:T(i(s).e("sizes"))},[Y(i(Hs),{"model-value":l.value,disabled:d.disabled,"popper-class":d.popperClass,"popper-style":d.popperStyle,size:d.size,teleported:d.teleported,"validate-event":!1,"append-to":d.appendSizeTo,onChange:c},{default:J(()=>[(x(!0),B(Fe,null,yt(u.value,v=>(x(),oe(i(sd),{key:v,value:v,label:v+i(o)("el.pagination.pagesize")},null,8,["value","label"]))),128))]),_:1},8,["model-value","disabled","popper-class","popper-style","size","teleported","append-to"])],2))}}),Oj=$j;const Nj=Ce({size:{type:String,values:ro}}),Rj=["disabled"];var Ij=se({name:"ElPaginationJumper",__name:"jumper",props:Nj,setup(e){const{t}=Ct(),n=fe("pagination"),{pageCount:a,disabled:o,currentPage:s,changeEvent:r}=$m(),l=M(),u=w(()=>l.value??s?.value);function c(f){l.value=f?+f:""}function d(f){f=Math.trunc(+f),r?.(f),l.value=void 0}return(f,v)=>(x(),B("span",{class:T(i(n).e("jump")),disabled:i(o)},[H("span",{class:T([i(n).e("goto")])},Se(i(t)("el.pagination.goto")),3),Y(i(ea),{size:f.size,class:T([i(n).e("editor"),i(n).is("in-pagination")]),min:1,max:i(a),disabled:i(o),"model-value":u.value,"validate-event":!1,"aria-label":i(t)("el.pagination.page"),type:"number","onUpdate:modelValue":c,onChange:d},null,8,["size","class","max","disabled","model-value","aria-label"]),H("span",{class:T([i(n).e("classifier")])},Se(i(t)("el.pagination.pageClassifier")),3)],10,Rj))}}),Pj=Ij;const Mj=Ce({total:{type:Number,default:1e3}}),_j=["disabled"];var Aj=se({name:"ElPaginationTotal",__name:"total",props:Mj,setup(e){const{t}=Ct(),n=fe("pagination"),{disabled:a}=$m();return(o,s)=>(x(),B("span",{class:T(i(n).e("total")),disabled:i(a)},Se(i(t)("el.pagination.total",{total:o.total})),11,_j))}}),Lj=Aj;const Dj=Ce({currentPage:{type:Number,default:1},pageCount:{type:Number,required:!0},pagerCount:{type:Number,default:7},disabled:Boolean}),Bj=["aria-current","aria-label","tabindex"],Fj=["tabindex","aria-label"],Vj=["aria-current","aria-label","tabindex"],zj=["tabindex","aria-label"],Hj=["aria-current","aria-label","tabindex"];var Kj=se({name:"ElPaginationPager",__name:"pager",props:Dj,emits:[bt],setup(e,{emit:t}){const n=e,a=t,o=fe("pager"),s=fe("icon"),{t:r}=Ct(),l=M(!1),u=M(!1),c=M(!1),d=M(!1),f=M(!1),v=M(!1),g=w(()=>{const C=n.pagerCount,E=(C-1)/2,$=Number(n.currentPage),O=Number(n.pageCount);let R=!1,N=!1;O>C&&($>C-E&&(R=!0),$["more","btn-quickprev",s.b(),o.is("disabled",n.disabled)]),h=w(()=>["more","btn-quicknext",s.b(),o.is("disabled",n.disabled)]),m=w(()=>n.disabled?-1:0);le(()=>[n.pageCount,n.pagerCount,n.currentPage],([C,E,$])=>{const O=(E-1)/2;let R=!1,N=!1;C>E&&(R=$>E-O,N=$O&&($=O)),$!==R&&a(bt,$)}return(C,E)=>(x(),B("ul",{class:T(i(o).b()),onClick:S,onKeyup:an(y,["enter"])},[C.pageCount>0?(x(),B("li",{key:0,class:T([[i(o).is("active",C.currentPage===1),i(o).is("disabled",C.disabled)],"number"]),"aria-current":C.currentPage===1,"aria-label":i(r)("el.pagination.currentPage",{pager:1}),tabindex:m.value}," 1 ",10,Bj)):te("v-if",!0),l.value?(x(),B("li",{key:1,class:T(p.value),tabindex:m.value,"aria-label":i(r)("el.pagination.prevPages",{pager:C.pagerCount-2}),onMouseenter:E[0]||(E[0]=$=>b(!0)),onMouseleave:E[1]||(E[1]=$=>c.value=!1),onFocus:E[2]||(E[2]=$=>k(!0)),onBlur:E[3]||(E[3]=$=>f.value=!1)},[(c.value||f.value)&&!C.disabled?(x(),oe(i(Bs),{key:0})):(x(),oe(i(ny),{key:1}))],42,Fj)):te("v-if",!0),(x(!0),B(Fe,null,yt(g.value,$=>(x(),B("li",{key:$,class:T([[i(o).is("active",C.currentPage===$),i(o).is("disabled",C.disabled)],"number"]),"aria-current":C.currentPage===$,"aria-label":i(r)("el.pagination.currentPage",{pager:$}),tabindex:m.value},Se($),11,Vj))),128)),u.value?(x(),B("li",{key:2,class:T(h.value),tabindex:m.value,"aria-label":i(r)("el.pagination.nextPages",{pager:C.pagerCount-2}),onMouseenter:E[4]||(E[4]=$=>b()),onMouseleave:E[5]||(E[5]=$=>d.value=!1),onFocus:E[6]||(E[6]=$=>k()),onBlur:E[7]||(E[7]=$=>v.value=!1)},[(d.value||v.value)&&!C.disabled?(x(),oe(i(Fs),{key:0})):(x(),oe(i(ny),{key:1}))],42,zj)):te("v-if",!0),C.pageCount>1?(x(),B("li",{key:3,class:T([[i(o).is("active",C.currentPage===C.pageCount),i(o).is("disabled",C.disabled)],"number"]),"aria-current":C.currentPage===C.pageCount,"aria-label":i(r)("el.pagination.currentPage",{pager:C.pageCount}),tabindex:m.value},Se(C.pageCount),11,Hj)):te("v-if",!0)],34))}}),Wj=Kj;const sa=e=>typeof e!="number",jj=Ce({pageSize:Number,defaultPageSize:Number,total:Number,pageCount:Number,pagerCount:{type:Number,validator:e=>He(e)&&Math.trunc(e)===e&&e>4&&e<22&&e%2===1,default:7},currentPage:Number,defaultCurrentPage:Number,layout:{type:String,default:["prev","pager","next","jumper","->","total"].join(", ")},pageSizes:{type:G(Array),default:()=>sn([10,20,30,40,50,100])},popperClass:{type:String,default:""},popperStyle:{type:G([String,Object])},prevText:{type:String,default:""},prevIcon:{type:Kt,default:()=>is},nextText:{type:String,default:""},nextIcon:{type:Kt,default:()=>na},teleported:{type:Boolean,default:!0},small:Boolean,size:Tn,background:Boolean,disabled:Boolean,hideOnSinglePage:Boolean,appendSizeTo:String}),Uj={"update:current-page":e=>He(e),"update:page-size":e=>He(e),"size-change":e=>He(e),change:(e,t)=>He(e)&&He(t),"current-change":e=>He(e),"prev-click":e=>He(e),"next-click":e=>He(e)},v0="ElPagination";var qj=se({name:v0,props:jj,emits:Uj,setup(e,{emit:t,slots:n}){const{t:a}=Ct(),o=fe("pagination"),s=ft().vnode.props||{},r=NC(),l=w(()=>e.small?"small":e.size??r.value);xo({from:"small",replacement:"size",version:"3.0.0",scope:"el-pagination",ref:"https://element-plus.org/zh-CN/component/pagination.html"},w(()=>!!e.small));const u="onUpdate:currentPage"in s||"onUpdate:current-page"in s||"onCurrentChange"in s,c="onUpdate:pageSize"in s||"onUpdate:page-size"in s||"onSizeChange"in s,d=w(()=>{if(sa(e.total)&&sa(e.pageCount)||!sa(e.currentPage)&&!u)return!1;if(e.layout.includes("sizes")){if(sa(e.pageCount)){if(!sa(e.total)&&!sa(e.pageSize)&&!c)return!1}else if(!c)return!1}return!0}),f=M(sa(e.defaultPageSize)?10:e.defaultPageSize),v=M(sa(e.defaultCurrentPage)?1:e.defaultCurrentPage),g=w({get(){return sa(e.pageSize)?f.value:e.pageSize},set(C){sa(e.pageSize)&&(f.value=C),c&&(t("update:page-size",C),t("size-change",C))}}),p=w(()=>{let C=0;return sa(e.pageCount)?sa(e.total)||(C=Math.max(1,Math.ceil(e.total/g.value))):C=e.pageCount,C}),h=w({get(){return sa(e.currentPage)?v.value:e.currentPage},set(C){let E=C;C<1?E=1:C>p.value&&(E=p.value),sa(e.currentPage)&&(v.value=E),u&&(t("update:current-page",E),t("current-change",E))}});le(p,C=>{h.value>C&&(h.value=C)}),le([h,g],C=>{t(bt,...C)},{flush:"post"});function m(C){h.value=C}function b(C){g.value=C;const E=p.value;h.value>E&&(h.value=E)}function k(){e.disabled||(h.value-=1,t("prev-click",h.value))}function y(){e.disabled||(h.value+=1,t("next-click",h.value))}function S(C,E){C&&(C.props||(C.props={}),C.props.class=[C.props.class,E].join(" "))}return St(F2,{pageCount:p,disabled:w(()=>e.disabled),currentPage:h,changeEvent:m,handleSizeChange:b}),()=>{if(!d.value)return pt(v0,a("el.pagination.deprecationWarning")),null;if(!e.layout||e.hideOnSinglePage&&p.value<=1)return null;const C=[],E=[],$=qe("div",{class:o.e("rightwrapper")},E),O={prev:qe(wj,{disabled:e.disabled,currentPage:h.value,prevText:e.prevText,prevIcon:e.prevIcon,onClick:k}),jumper:qe(Pj,{size:l.value}),pager:qe(Wj,{currentPage:h.value,pageCount:p.value,pagerCount:e.pagerCount,onChange:m,disabled:e.disabled}),next:qe(xj,{disabled:e.disabled,currentPage:h.value,pageCount:p.value,nextText:e.nextText,nextIcon:e.nextIcon,onClick:y}),sizes:qe(Oj,{pageSize:g.value,pageSizes:e.pageSizes,popperClass:e.popperClass,popperStyle:e.popperStyle,disabled:e.disabled,teleported:e.teleported,size:l.value,appendSizeTo:e.appendSizeTo}),slot:n?.default?.()??null,total:qe(Lj,{total:sa(e.total)?0:e.total})},R=e.layout.split(",").map(A=>A.trim());let N=!1;return R.forEach(A=>{if(A==="->"){N=!0;return}N?E.push(O[A]):C.push(O[A])}),S(C[0],o.is("first")),S(C[C.length-1],o.is("last")),N&&E.length>0&&(S(E[0],o.is("first")),S(E[E.length-1],o.is("last")),C.push($)),qe("div",{class:[o.b(),o.is("background",e.background),o.m(l.value)]},C)}}});const Yj=st(qj),Gj=Ce({title:String,confirmButtonText:String,cancelButtonText:String,confirmButtonType:{type:String,values:Jp,default:"primary"},cancelButtonType:{type:String,values:Jp,default:"text"},icon:{type:Kt,default:()=>m3},iconColor:{type:String,default:"#f90"},hideIcon:Boolean,hideAfter:{type:Number,default:200},effect:{...zt.effect,default:"light"},teleported:zt.teleported,persistent:zt.persistent,width:{type:[String,Number],default:150},virtualTriggering:No.virtualTriggering,virtualRef:No.virtualRef}),Xj={confirm:e=>e instanceof MouseEvent,cancel:e=>e instanceof MouseEvent};var Jj=se({name:"ElPopconfirm",__name:"popconfirm",props:Gj,emits:Xj,setup(e,{expose:t,emit:n}){const a=e,o=n,{t:s}=Ct(),r=fe("popconfirm"),l=M(),u=M(),c=w(()=>i(l)?.popperRef),d=()=>{u.value?.focus?.()},f=()=>{l.value?.onClose?.()},v=w(()=>({width:rn(a.width)})),g=b=>{o("confirm",b),f()},p=b=>{o("cancel",b),f()},h=w(()=>a.confirmButtonText||s("el.popconfirm.confirmButtonText")),m=w(()=>a.cancelButtonText||s("el.popconfirm.cancelButtonText"));return t({popperRef:c,hide:f}),(b,k)=>(x(),oe(i(Ln),dt({ref_key:"tooltipRef",ref:l,trigger:"click",effect:e.effect},b.$attrs,{"virtual-triggering":e.virtualTriggering,"virtual-ref":e.virtualRef,"popper-class":`${i(r).namespace.value}-popover`,"popper-style":v.value,teleported:e.teleported,"fallback-placements":["bottom","top","right","left"],"hide-after":e.hideAfter,persistent:e.persistent,loop:"",onShow:d}),{content:J(()=>[H("div",{ref_key:"rootRef",ref:u,tabindex:"-1",class:T(i(r).b())},[H("div",{class:T(i(r).e("main"))},[!e.hideIcon&&e.icon?(x(),oe(i(De),{key:0,class:T(i(r).e("icon")),style:Ke({color:e.iconColor})},{default:J(()=>[(x(),oe(it(e.icon)))]),_:1},8,["class","style"])):te("v-if",!0),wt(" "+Se(e.title),1)],2),H("div",{class:T(i(r).e("action"))},[ee(b.$slots,"actions",{confirm:g,cancel:p},()=>[Y(i(In),{size:"small",type:e.cancelButtonType==="text"?"":e.cancelButtonType,text:e.cancelButtonType==="text",onClick:p},{default:J(()=>[wt(Se(m.value),1)]),_:1},8,["type","text"]),Y(i(In),{size:"small",type:e.confirmButtonType==="text"?"":e.confirmButtonType,text:e.confirmButtonType==="text",onClick:g},{default:J(()=>[wt(Se(h.value),1)]),_:1},8,["type","text"])])],2)],2)]),default:J(()=>[b.$slots.reference?ee(b.$slots,"reference",{key:0}):te("v-if",!0)]),_:3},16,["effect","virtual-triggering","virtual-ref","popper-class","popper-style","teleported","hide-after","persistent"]))}}),Zj=Jj;const Qj=st(Zj),e9=Ce({type:{type:String,default:"line",values:["line","circle","dashboard"]},percentage:{type:Number,default:0,validator:e=>e>=0&&e<=100},status:{type:String,default:"",values:["","success","exception","warning"]},indeterminate:Boolean,duration:{type:Number,default:3},strokeWidth:{type:Number,default:6},strokeLinecap:{type:G(String),default:"round"},textInside:Boolean,width:{type:Number,default:126},showText:{type:Boolean,default:!0},color:{type:G([String,Array,Function]),default:""},striped:Boolean,stripedFlow:Boolean,format:{type:G(Function),default:e=>`${e}%`}}),t9=["aria-valuenow"],n9={viewBox:"0 0 100 100"},a9=["d","stroke","stroke-linecap","stroke-width"],o9=["d","stroke","opacity","stroke-linecap","stroke-width"],s9={key:0};var r9=se({name:"ElProgress",__name:"progress",props:e9,setup(e){const t={success:"#13ce66",exception:"#ff4949",warning:"#e6a23c",default:"#20a0ff"},n=e,a=fe("progress"),o=w(()=>{const y={width:`${n.percentage}%`,animationDuration:`${n.duration}s`},S=k(n.percentage);return S.includes("gradient")?y.background=S:y.backgroundColor=S,y}),s=w(()=>(n.strokeWidth/n.width*100).toFixed(1)),r=w(()=>["circle","dashboard"].includes(n.type)?Number.parseInt(`${50-Number.parseFloat(s.value)/2}`,10):0),l=w(()=>{const y=r.value,S=n.type==="dashboard";return` + M 50 50 + m 0 ${S?"":"-"}${y} + a ${y} ${y} 0 1 1 0 ${S?"-":""}${y*2} + a ${y} ${y} 0 1 1 0 ${S?"":"-"}${y*2} + `}),u=w(()=>2*Math.PI*r.value),c=w(()=>n.type==="dashboard"?.75:1),d=w(()=>`${-1*u.value*(1-c.value)/2}px`),f=w(()=>({strokeDasharray:`${u.value*c.value}px, ${u.value}px`,strokeDashoffset:d.value})),v=w(()=>({strokeDasharray:`${u.value*c.value*(n.percentage/100)}px, ${u.value}px`,strokeDashoffset:d.value,transition:"stroke-dasharray 0.6s ease 0s, stroke 0.6s ease, opacity ease 0.6s"})),g=w(()=>{let y;return n.color?y=k(n.percentage):y=t[n.status]||t.default,y}),p=w(()=>n.status==="warning"?tf:n.type==="line"?n.status==="success"?Jv:Fo:n.status==="success"?vu:Ha),h=w(()=>n.type==="line"?12+n.strokeWidth*.4:n.width*.111111+2),m=w(()=>n.format(n.percentage));function b(y){const S=100/y.length;return y.map((C,E)=>Le(C)?{color:C,percentage:(E+1)*S}:C).sort((C,E)=>C.percentage-E.percentage)}const k=y=>{const{color:S}=n;if(Ve(S))return S(y);if(Le(S))return S;{const C=b(S);for(const E of C)if(E.percentage>y)return E.color;return C[C.length-1]?.color}};return(y,S)=>(x(),B("div",{class:T([i(a).b(),i(a).m(e.type),i(a).is(e.status),{[i(a).m("without-text")]:!e.showText,[i(a).m("text-inside")]:e.textInside}]),role:"progressbar","aria-valuenow":e.percentage,"aria-valuemin":"0","aria-valuemax":"100"},[e.type==="line"?(x(),B("div",{key:0,class:T(i(a).b("bar"))},[H("div",{class:T(i(a).be("bar","outer")),style:Ke({height:`${e.strokeWidth}px`})},[H("div",{class:T([i(a).be("bar","inner"),{[i(a).bem("bar","inner","indeterminate")]:e.indeterminate},{[i(a).bem("bar","inner","striped")]:e.striped},{[i(a).bem("bar","inner","striped-flow")]:e.stripedFlow}]),style:Ke(o.value)},[(e.showText||y.$slots.default)&&e.textInside?(x(),B("div",{key:0,class:T(i(a).be("bar","innerText"))},[ee(y.$slots,"default",{percentage:e.percentage},()=>[H("span",null,Se(m.value),1)])],2)):te("v-if",!0)],6)],6)],2)):(x(),B("div",{key:1,class:T(i(a).b("circle")),style:Ke({height:`${e.width}px`,width:`${e.width}px`})},[(x(),B("svg",n9,[H("path",{class:T(i(a).be("circle","track")),d:l.value,stroke:`var(${i(a).cssVarName("fill-color-light")}, #e5e9f2)`,"stroke-linecap":e.strokeLinecap,"stroke-width":s.value,fill:"none",style:Ke(f.value)},null,14,a9),H("path",{class:T(i(a).be("circle","path")),d:l.value,stroke:g.value,fill:"none",opacity:e.percentage?1:0,"stroke-linecap":e.strokeLinecap,"stroke-width":s.value,style:Ke(v.value)},null,14,o9)]))],6)),(e.showText||y.$slots.default)&&!e.textInside?(x(),B("div",{key:2,class:T(i(a).e("text")),style:Ke({fontSize:`${h.value}px`})},[ee(y.$slots,"default",{percentage:e.percentage},()=>[e.status?(x(),oe(i(De),{key:1},{default:J(()=>[(x(),oe(it(p.value)))]),_:1})):(x(),B("span",s9,Se(m.value),1))])],6)):te("v-if",!0)],10,t9))}}),l9=r9;const V2=st(l9),i9=Ce({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:G([Array,Object]),default:()=>sn(["","",""])},voidColor:{type:String,default:""},disabledVoidColor:{type:String,default:""},icons:{type:G([Array,Object]),default:()=>[Vu,Vu,Vu]},voidIcon:{type:Kt,default:()=>I3},disabledVoidIcon:{type:Kt,default:()=>Vu},disabled:{type:Boolean,default:void 0},allowHalf:Boolean,showText:Boolean,showScore:Boolean,textColor:{type:String,default:""},texts:{type:G(Array),default:()=>sn(["Extremely bad","Disappointed","Fair","Satisfied","Surprise"])},scoreTemplate:{type:String,default:"{value}"},size:Tn,clearable:Boolean,...aa(["ariaLabel"])}),u9={[bt]:e=>He(e),[tt]:e=>He(e)},c9=["id","aria-label","aria-labelledby","aria-valuenow","aria-valuetext","aria-valuemax","tabindex","aria-disabled"],d9=["onMousemove","onClick"];var f9=se({name:"ElRate",__name:"rate",props:i9,emits:u9,setup(e,{expose:t,emit:n}){function a(I,L){const D=q=>nt(q),F=L[Object.keys(L).map(q=>+q).filter(q=>{const j=L[q];return D(j)&&j.excluded?Iq-j)[0]];return D(F)&&F.value||F}const o=e,s=n,r=_e(Ao,void 0),l=Sn(),u=fe("rate"),{inputId:c,isLabeledByFormItem:d}=Ia(o,{formItemContext:r}),f=M(nr(o.modelValue,0,o.max)),v=M(-1),g=M(!0),p=M([]),h=w(()=>p.value.map(I=>I.$el.clientWidth)),m=w(()=>[u.b(),u.m(l.value)]),b=ln(),k=w(()=>u.cssVarBlock({"void-color":o.voidColor,"disabled-void-color":o.disabledVoidColor,"fill-color":E.value})),y=w(()=>{let I="";return o.showScore?I=o.scoreTemplate.replace(/\{\s*value\s*\}/,b.value?`${o.modelValue}`:`${f.value}`):o.showText&&(I=o.texts[Math.ceil(f.value)-1]),I}),S=w(()=>o.modelValue*100-Math.floor(o.modelValue)*100),C=w(()=>ye(o.colors)?{[o.lowThreshold]:o.colors[0],[o.highThreshold]:{value:o.colors[1],excluded:!0},[o.max]:o.colors[2]}:o.colors),E=w(()=>{const I=a(f.value,C.value);return nt(I)?"":I}),$=w(()=>{let I="";return b.value?I=`${S.value}%`:o.allowHalf&&(I="50%"),{color:E.value,width:I}}),O=w(()=>{let I=ye(o.icons)?[...o.icons]:{...o.icons};return I=Eo(I),ye(I)?{[o.lowThreshold]:I[0],[o.highThreshold]:{value:I[1],excluded:!0},[o.max]:I[2]}:I}),R=w(()=>a(o.modelValue,O.value)),N=w(()=>b.value?Le(o.disabledVoidIcon)?o.disabledVoidIcon:Eo(o.disabledVoidIcon):Le(o.voidIcon)?o.voidIcon:Eo(o.voidIcon)),A=w(()=>a(f.value,O.value));function _(I){const L=b.value&&S.value>0&&I-1o.modelValue,D=o.allowHalf&&g.value&&I-.5<=f.value&&I>f.value;return L||D}function V(I){o.clearable&&I===o.modelValue&&(I=0),s(tt,I),o.modelValue!==I&&s(bt,I)}function z(I){b.value||(o.allowHalf&&g.value?V(f.value):V(I))}function U(I){if(b.value)return;const L=jt(I),D=o.allowHalf?.5:1;let F=f.value;switch(L){case we.up:case we.right:F+=D;break;case we.left:case we.down:F-=D;break}if(F=nr(F,0,o.max),F!==f.value)return I.stopPropagation(),I.preventDefault(),s(tt,F),s(bt,F),F}function W(I,L){b.value||(o.allowHalf&&L?(g.value=L.offsetX*2<=h.value[I-1],f.value=g.value?I-.5:I):f.value=I,v.value=I)}function P(){b.value||(o.allowHalf&&(g.value=o.modelValue!==Math.floor(o.modelValue)),f.value=nr(o.modelValue,0,o.max),v.value=-1)}return le(()=>o.modelValue,I=>{f.value=nr(I,0,o.max),g.value=o.modelValue!==Math.floor(o.modelValue)}),o.modelValue||s(tt,0),t({setCurrentValue:W,resetCurrentValue:P}),(I,L)=>(x(),B("div",{id:i(c),class:T([m.value,i(u).is("disabled",i(b))]),role:"slider","aria-label":i(d)?void 0:e.ariaLabel||"rating","aria-labelledby":i(d)?i(r)?.labelId:void 0,"aria-valuenow":f.value,"aria-valuetext":y.value||void 0,"aria-valuemin":"0","aria-valuemax":e.max,style:Ke(k.value),tabindex:i(b)?void 0:0,"aria-disabled":i(b),onKeydown:U},[(x(!0),B(Fe,null,yt(e.max,(D,F)=>(x(),B("span",{key:F,class:T(i(u).e("item")),onMousemove:q=>W(D,q),onMouseleave:P,onClick:q=>z(D)},[Y(i(De),{ref_for:!0,ref_key:"iconRefs",ref:p,class:T([i(u).e("icon"),{hover:v.value===D},i(u).is("active",D<=f.value),i(u).is("focus-visible",D===Math.ceil(f.value||1))])},{default:J(()=>[ct((x(),oe(it(A.value),null,null,512)),[[Pt,!_(D)&&D<=f.value]]),ct((x(),oe(it(N.value),null,null,512)),[[Pt,!_(D)&&D>f.value]]),ct((x(),oe(it(N.value),{class:T([i(u).em("decimal","box")])},null,8,["class"])),[[Pt,_(D)]]),ct(Y(i(De),{style:Ke($.value),class:T([i(u).e("icon"),i(u).e("decimal")])},{default:J(()=>[(x(),oe(it(R.value)))]),_:1},8,["style","class"]),[[Pt,_(D)]])]),_:2},1032,["class"])],42,d9))),128)),e.showText||e.showScore?(x(),B("span",{key:0,class:T(i(u).e("text")),style:Ke({color:e.textColor})},Se(y.value),7)):te("v-if",!0)],46,c9))}}),p9=f9;const h9=st(p9),er={primary:"icon-primary",success:"icon-success",warning:"icon-warning",error:"icon-error",info:"icon-info"},m0={[er.primary]:Mi,[er.success]:K4,[er.warning]:tf,[er.error]:Zv,[er.info]:Mi},v9=Ce({title:{type:String,default:""},subTitle:{type:String,default:""},icon:{type:String,values:["primary","success","warning","info","error"],default:"info"}});var m9=se({name:"ElResult",__name:"result",props:v9,setup(e){const t=e,n=fe("result"),a=w(()=>{const o=t.icon,s=o&&er[o]?er[o]:"icon-info";return{class:s,component:m0[s]||m0["icon-info"]}});return(o,s)=>(x(),B("div",{class:T(i(n).b())},[H("div",{class:T(i(n).e("icon"))},[ee(o.$slots,"icon",{},()=>[a.value.component?(x(),oe(it(a.value.component),{key:0,class:T(a.value.class)},null,8,["class"])):te("v-if",!0)])],2),e.title||o.$slots.title?(x(),B("div",{key:0,class:T(i(n).e("title"))},[ee(o.$slots,"title",{},()=>[H("p",null,Se(e.title),1)])],2)):te("v-if",!0),e.subTitle||o.$slots["sub-title"]?(x(),B("div",{key:1,class:T(i(n).e("subtitle"))},[ee(o.$slots,"sub-title",{},()=>[H("p",null,Se(e.subTitle),1)])],2)):te("v-if",!0),o.$slots.extra?(x(),B("div",{key:2,class:T(i(n).e("extra"))},[ee(o.$slots,"extra")],2)):te("v-if",!0)],2))}}),g9=m9;const b9=st(g9),gh=50,dd="itemRendered",fd="scroll",Yr="forward",pd="backward",Da="auto",cf="smart",Vi="start",Co="center",zi="end",kl="horizontal",z2="vertical",y9="ltr",al="rtl",Hi="negative",Om="positive-ascending",Nm="positive-descending",w9={[kl]:"left",[z2]:"top"},S9=20,bh=io({type:G([Number,Function]),required:!0}),yh=io({type:Number}),wh=io({type:Number,default:2}),C9=io({type:String,values:["ltr","rtl"],default:"ltr"}),Sh=io({type:Number,default:0}),hd=io({type:Number,required:!0}),H2=io({type:String,values:["horizontal","vertical"],default:z2}),K2=Ce({className:{type:String,default:""},containerElement:{type:G([String,Object]),default:"div"},data:{type:G(Array),default:()=>sn([])},direction:C9,height:{type:[String,Number],required:!0},innerElement:{type:[String,Object],default:"div"},innerProps:{type:G(Object),default:()=>({})},style:{type:G([Object,String,Array])},useIsScrolling:Boolean,width:{type:[Number,String],required:!1},perfMode:{type:Boolean,default:!0},scrollbarAlwaysOn:Boolean}),W2=Ce({cache:wh,estimatedItemSize:yh,layout:H2,initScrollOffset:Sh,total:hd,itemSize:bh,...K2}),Ch={type:Number,default:6},j2={type:Number,default:0},U2={type:Number,default:2},pr=Ce({columnCache:wh,columnWidth:bh,estimatedColumnWidth:yh,estimatedRowHeight:yh,initScrollLeft:Sh,initScrollTop:Sh,itemKey:{type:G(Function),default:({columnIndex:e,rowIndex:t})=>`${t}:${e}`},rowCache:wh,rowHeight:bh,totalColumn:hd,totalRow:hd,hScrollbarSize:Ch,vScrollbarSize:Ch,scrollbarStartGap:j2,scrollbarEndGap:U2,role:String,...K2}),q2=Ce({alwaysOn:Boolean,class:String,layout:H2,total:hd,ratio:{type:Number,required:!0},clientSize:{type:Number,required:!0},scrollFrom:{type:Number,required:!0},scrollbarSize:Ch,startGap:j2,endGap:U2,visible:Boolean}),rr=(e,t)=>ee===y9||e===al||e===kl,g0=e=>e===al;let Hr=null;function vd(e=!1){if(Hr===null||e){const t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";const a=document.createElement("div"),o=a.style;return o.width="100px",o.height="100px",t.appendChild(a),document.body.appendChild(t),t.scrollLeft>0?Hr=Nm:(t.scrollLeft=1,t.scrollLeft===0?Hr=Hi:Hr=Om),document.body.removeChild(t),Hr}return Hr}function k9({move:e,size:t,bar:n},a){const o={},s=`translate${n.axis}(${e}px)`;return o[n.size]=t,o.transform=s,a==="horizontal"?o.height="100%":o.width="100%",o}var b0=Number.isNaN||function(t){return typeof t=="number"&&t!==t};function E9(e,t){return!!(e===t||b0(e)&&b0(t))}function x9(e,t){if(e.length!==t.length)return!1;for(var n=0;n{const e=ft().proxy.$props;return w(()=>{const t=(n,a,o)=>({});return e.perfMode?Vd(t):T9(t)})},G2=({atEndEdge:e,atStartEdge:t,layout:n},a)=>{let o,s=0;const r=u=>u<0&&t.value||u>0&&e.value;return{hasReachedEdge:r,onWheel:u=>{rs(o);let{deltaX:c,deltaY:d}=u;u.shiftKey&&d!==0&&(c=d,d=0);const f=n.value===kl?c:d;r(f)||(s+=f,!Ud()&&f!==0&&u.preventDefault(),o=Qa(()=>{a(s),s=0}))}}},kh=se({name:"ElVirtualScrollBar",props:q2,emits:["scroll","start-move","stop-move"],setup(e,{emit:t}){const n=w(()=>e.startGap+e.endGap),a=fe("virtual-scrollbar"),o=fe("scrollbar"),s=M(),r=M();let l=null,u=null;const c=At({isDragging:!1,traveled:0}),d=w(()=>QC[e.layout]),f=w(()=>e.clientSize-i(n)),v=w(()=>({position:"absolute",width:`${kl===e.layout?f.value:e.scrollbarSize}px`,height:`${kl===e.layout?e.scrollbarSize:f.value}px`,[w9[e.layout]]:"2px",right:"2px",bottom:"2px",borderRadius:"4px"})),g=w(()=>{const E=e.ratio;if(E>=100)return Number.POSITIVE_INFINITY;if(E>=50)return E*f.value/100;const $=f.value/3;return Math.floor(Math.min(Math.max(E*f.value/100,S9),$))}),p=w(()=>{if(!Number.isFinite(g.value))return{display:"none"};const E=`${g.value}px`;return k9({bar:d.value,size:E,move:c.traveled},e.layout)}),h=w(()=>Math.ceil(e.clientSize-g.value-i(n))),m=()=>{window.addEventListener("mousemove",S),window.addEventListener("mouseup",y);const E=i(r);E&&(u=document.onselectstart,document.onselectstart=()=>!1,E.addEventListener("touchmove",S,{passive:!0}),E.addEventListener("touchend",y))},b=()=>{window.removeEventListener("mousemove",S),window.removeEventListener("mouseup",y),document.onselectstart=u,u=null;const E=i(r);E&&(E.removeEventListener("touchmove",S),E.removeEventListener("touchend",y))},k=E=>{E.stopImmediatePropagation(),!(E.ctrlKey||[1,2].includes(E.button))&&(c.isDragging=!0,c[d.value.axis]=E.currentTarget[d.value.offset]-(E[d.value.client]-E.currentTarget.getBoundingClientRect()[d.value.direction]),t("start-move"),m())},y=()=>{c.isDragging=!1,c[d.value.axis]=0,t("stop-move"),b()},S=E=>{const{isDragging:$}=c;if(!$||!r.value||!s.value)return;const O=c[d.value.axis];if(!O)return;rs(l);const R=(s.value.getBoundingClientRect()[d.value.direction]-E[d.value.client])*-1-(r.value[d.value.offset]-O);l=Qa(()=>{c.traveled=Math.max(0,Math.min(R,h.value)),t("scroll",R,h.value)})},C=E=>{const $=Math.abs(E.target.getBoundingClientRect()[d.value.direction]-E[d.value.client])-r.value[d.value.offset]/2;c.traveled=Math.max(0,Math.min($,h.value)),t("scroll",$,h.value)};return le(()=>e.scrollFrom,E=>{c.isDragging||(c.traveled=Math.ceil(E*h.value))}),Bt(()=>{b()}),()=>qe("div",{role:"presentation",ref:s,class:[a.b(),e.class,(e.alwaysOn||c.isDragging)&&"always-on"],style:v.value,onMousedown:Ge(C,["stop","prevent"]),onTouchstartPrevent:k},qe("div",{ref:r,class:o.e("thumb"),style:p.value,onMousedown:k},[]))}}),X2=({name:e,getOffset:t,getItemSize:n,getItemOffset:a,getEstimatedTotalSize:o,getStartIndexForOffset:s,getStopIndexForStartIndex:r,initCache:l,clearCache:u,validateProps:c})=>se({name:e??"ElVirtualList",props:W2,emits:[dd,fd],setup(d,{emit:f,expose:v}){c(d);const g=ft(),p=fe("vl"),h=M(l(d,g)),m=Y2(),b=M(),k=M(),y=M(),S=M({isScrolling:!1,scrollDir:"forward",scrollOffset:He(d.initScrollOffset)?d.initScrollOffset:0,updateRequested:!1,isScrollbarDragging:!1,scrollbarAlwaysOn:d.scrollbarAlwaysOn}),C=w(()=>{const{total:j,cache:X}=d,{isScrolling:Q,scrollDir:he,scrollOffset:ue}=i(S);if(j===0)return[0,0,0,0];const ge=s(d,ue,i(h)),ie=r(d,ge,ue,i(h)),ae=!Q||he===pd?Math.max(1,X):1,ne=!Q||he===Yr?Math.max(1,X):1;return[Math.max(0,ge-ae),Math.max(0,Math.min(j-1,ie+ne)),ge,ie]}),E=w(()=>o(d,i(h))),$=w(()=>Ki(d.layout)),O=w(()=>[{position:"relative",[`overflow-${$.value?"x":"y"}`]:"scroll",WebkitOverflowScrolling:"touch",willChange:"transform"},{direction:d.direction,height:He(d.height)?`${d.height}px`:d.height,width:He(d.width)?`${d.width}px`:d.width},d.style]),R=w(()=>{const j=i(E),X=i($);return{height:X?"100%":`${j}px`,pointerEvents:i(S).isScrolling?"none":void 0,width:X?`${j}px`:"100%",margin:0,boxSizing:"border-box"}}),N=w(()=>$.value?d.width:d.height),{onWheel:A}=G2({atStartEdge:w(()=>S.value.scrollOffset<=0),atEndEdge:w(()=>S.value.scrollOffset>=E.value),layout:w(()=>d.layout)},j=>{y.value.onMouseUp?.(),P(Math.min(S.value.scrollOffset+j,E.value-N.value))});Ft(b,"wheel",A,{passive:!1});const _=()=>{const{total:j}=d;if(j>0){const[ue,ge,ie,ae]=i(C);f(dd,ue,ge,ie,ae)}const{scrollDir:X,scrollOffset:Q,updateRequested:he}=i(S);f(fd,X,Q,he)},V=j=>{const{clientHeight:X,scrollHeight:Q,scrollTop:he}=j.currentTarget,ue=i(S);if(ue.scrollOffset===he)return;const ge=Math.max(0,Math.min(he,Q-X));S.value={...ue,isScrolling:!0,scrollDir:rr(ue.scrollOffset,ge),scrollOffset:ge,updateRequested:!1},Ne(D)},z=j=>{const{clientWidth:X,scrollLeft:Q,scrollWidth:he}=j.currentTarget,ue=i(S);if(ue.scrollOffset===Q)return;const{direction:ge}=d;let ie=Q;if(ge===al)switch(vd()){case Hi:ie=-Q;break;case Nm:ie=he-X-Q;break}ie=Math.max(0,Math.min(ie,he-X)),S.value={...ue,isScrolling:!0,scrollDir:rr(ue.scrollOffset,ie),scrollOffset:ie,updateRequested:!1},Ne(D)},U=j=>{i($)?z(j):V(j),_()},W=(j,X)=>{const Q=(E.value-N.value)/X*j;P(Math.min(E.value-N.value,Q))},P=j=>{j=Math.max(j,0),j!==i(S).scrollOffset&&(S.value={...i(S),scrollOffset:j,scrollDir:rr(i(S).scrollOffset,j),updateRequested:!0},Ne(D))},I=(j,X=Da)=>{const{scrollOffset:Q}=i(S);j=Math.max(0,Math.min(j,d.total-1)),P(t(d,j,X,Q,i(h)))},L=j=>{const{direction:X,itemSize:Q,layout:he}=d,ue=m.value(u&&Q,u&&he,u&&X);let ge;if(Rt(ue,String(j)))ge=ue[j];else{const ie=a(d,j,i(h)),ae=n(d,j,i(h)),ne=i($),K=X===al,Z=ne?ie:0;ue[j]=ge={position:"absolute",left:K?void 0:`${Z}px`,right:K?`${Z}px`:void 0,top:ne?0:`${ie}px`,height:ne?"100%":`${ae}px`,width:ne?`${ae}px`:"100%"}}return ge},D=()=>{S.value.isScrolling=!1,Ne(()=>{m.value(-1,null,null)})},F=()=>{const j=b.value;j&&(j.scrollTop=0)};ht(()=>{if(!Mt)return;const{initScrollOffset:j}=d,X=i(b);He(j)&&X&&(i($)?X.scrollLeft=j:X.scrollTop=j),_()}),so(()=>{const{direction:j,layout:X}=d,{scrollOffset:Q,updateRequested:he}=i(S),ue=i(b);if(he&&ue)if(X===kl)if(j===al)switch(vd()){case Hi:ue.scrollLeft=-Q;break;case Om:ue.scrollLeft=Q;break;default:{const{clientWidth:ge,scrollWidth:ie}=ue;ue.scrollLeft=ie-ge-Q;break}}else ue.scrollLeft=Q;else ue.scrollTop=Q}),Gi(()=>{i(b).scrollTop=i(S).scrollOffset});const q={ns:p,clientSize:N,estimatedTotalSize:E,windowStyle:O,windowRef:b,innerRef:k,innerStyle:R,itemsToRender:C,scrollbarRef:y,states:S,getItemStyle:L,onScroll:U,onScrollbarScroll:W,onWheel:A,scrollTo:P,scrollToItem:I,resetScrollTop:F};return v({windowRef:b,innerRef:k,getItemStyleCache:m,scrollTo:P,scrollToItem:I,resetScrollTop:F,states:S}),q},render(d){const{$slots:f,className:v,clientSize:g,containerElement:p,data:h,getItemStyle:m,innerElement:b,itemsToRender:k,innerStyle:y,layout:S,total:C,onScroll:E,onScrollbarScroll:$,states:O,useIsScrolling:R,windowStyle:N,ns:A}=d,[_,V]=k,z=it(p),U=it(b),W=[];if(C>0)for(let D=_;D<=V;D++)W.push(qe(Fe,{key:D},f.default?.({data:h,index:D,isScrolling:R?O.isScrolling:void 0,style:m(D)})));const P=[qe(U,dt(d.innerProps,{style:y,ref:"innerRef"}),Le(U)?W:{default:()=>W})],I=qe(kh,{ref:"scrollbarRef",clientSize:g,layout:S,onScroll:$,ratio:g*100/this.estimatedTotalSize,scrollFrom:O.scrollOffset/(this.estimatedTotalSize-g),total:C,alwaysOn:O.scrollbarAlwaysOn}),L=qe(z,{class:[A.e("window"),v],style:N,onScroll:E,ref:"windowRef",key:0},Le(z)?[P]:{default:()=>[P]});return qe("div",{key:0,class:[A.e("wrapper"),O.scrollbarAlwaysOn?"always-on":""]},[L,I])}}),J2=X2({name:"ElFixedSizeList",getItemOffset:({itemSize:e},t)=>t*e,getItemSize:({itemSize:e})=>e,getEstimatedTotalSize:({total:e,itemSize:t})=>t*e,getOffset:({height:e,total:t,itemSize:n,layout:a,width:o},s,r,l)=>{const u=Ki(a)?o:e;Le(u)&&en("[ElVirtualList]",` + You should set + width/height + to number when your layout is + horizontal/vertical + `);const c=Math.max(0,t*n-u),d=Math.min(c,s*n),f=Math.max(0,(s+1)*n-u);switch(r===cf&&(l>=f-u&&l<=d+u?r=Da:r=Co),r){case Vi:return d;case zi:return f;case Co:{const v=Math.round(f+(d-f)/2);return vc+Math.floor(u/2)?c:v}case Da:default:return l>=f&&l<=d?l:lMath.max(0,Math.min(e-1,Math.floor(n/t))),getStopIndexForStartIndex:({height:e,total:t,itemSize:n,layout:a,width:o},s,r)=>{const l=s*n,u=Ki(a)?o:e,c=Math.ceil((u+r-l)/n);return Math.max(0,Math.min(t-1,s+c-1))},initCache(){},clearCache:!0,validateProps(){}}),$9="ElDynamicSizeList",Gr=(e,t,n)=>{const{itemSize:a}=e,{items:o,lastVisitedIndex:s}=n;if(t>s){let r=0;if(s>=0){const l=o[s];r=l.offset+l.size}for(let l=s+1;l<=t;l++){const u=a(l);o[l]={offset:r,size:u},r+=u}n.lastVisitedIndex=t}return o[t]},O9=(e,t,n)=>{const{items:a,lastVisitedIndex:o}=t;return(o>0?a[o].offset:0)>=n?Z2(e,t,0,o,n):N9(e,t,Math.max(0,o),n)},Z2=(e,t,n,a,o)=>{for(;n<=a;){const s=n+Math.floor((a-n)/2),r=Gr(e,s,t).offset;if(r===o)return s;ro&&(a=s-1)}return Math.max(0,n-1)},N9=(e,t,n,a)=>{const{total:o}=e;let s=1;for(;n{let o=0;if(a>=e&&(a=e-1),a>=0){const r=t[a];o=r.offset+r.size}const s=(e-a-1)*n;return o+s},R9=X2({name:"ElDynamicSizeList",getItemOffset:(e,t,n)=>Gr(e,t,n).offset,getItemSize:(e,t,{items:n})=>n[t].size,getEstimatedTotalSize:y0,getOffset:(e,t,n,a,o)=>{const{height:s,layout:r,width:l}=e,u=Ki(r)?l:s,c=Gr(e,t,o),d=y0(e,o),f=Math.max(0,Math.min(d-u,c.offset)),v=Math.max(0,c.offset-u+c.size);switch(n===cf&&(a>=v-u&&a<=f+u?n=Da:n=Co),n){case Vi:return f;case zi:return v;case Co:return Math.round(v+(f-v)/2);case Da:default:return a>=v&&a<=f?a:aO9(e,n,t),getStopIndexForStartIndex:(e,t,n,a)=>{const{height:o,total:s,layout:r,width:l}=e,u=Ki(r)?l:o,c=Gr(e,t,a),d=n+u;let f=c.offset+c.size,v=t;for(;v{n.lastVisitedIndex=Math.min(n.lastVisitedIndex,a-1),t.exposed?.getItemStyleCache(-1),o&&t.proxy?.$forceUpdate()},n},clearCache:!1,validateProps:({itemSize:e})=>{typeof e!="function"&&en($9,` + itemSize is required as function, but the given value was ${typeof e} + `)}}),I9=({atXEndEdge:e,atXStartEdge:t,atYEndEdge:n,atYStartEdge:a},o)=>{let s=null,r=0,l=0;const u=(d,f)=>{const v=d<0&&t.value||d>0&&e.value,g=f<0&&a.value||f>0&&n.value;return v||g};return{hasReachedEdge:u,onWheel:d=>{rs(s);let f=d.deltaX,v=d.deltaY;if(Math.abs(f)>Math.abs(v)?v=0:f=0,d.shiftKey&&v!==0&&(f=v,v=0),u(f,v)){d.deltaX!==0&&f===0&&d.preventDefault();return}r+=f,l+=v,d.preventDefault(),s=Qa(()=>{o(r,l),r=0,l=0})}}},P9=(e,t,n,a,o,s,r)=>{const l=M(0),u=M(0);let c,d=0,f=0;const v=p=>{rs(c),l.value=p.touches[0].clientX,u.value=p.touches[0].clientY,d=0,f=0},g=p=>{p.preventDefault(),rs(c),d+=l.value-p.touches[0].clientX,f+=u.value-p.touches[0].clientY,l.value=p.touches[0].clientX,u.value=p.touches[0].clientY,c=Qa(()=>{const h=a.value-i(s),m=o.value-i(r);n({scrollLeft:Math.min(t.value.scrollLeft+d,h),scrollTop:Math.min(t.value.scrollTop+f,m)}),d=0,f=0})};return Ft(e,"touchstart",v,{passive:!0}),Ft(e,"touchmove",g,{passive:!1}),{touchStartX:l,touchStartY:u,handleTouchStart:v,handleTouchMove:g}},Q2=({name:e,clearCache:t,getColumnPosition:n,getColumnStartIndexForOffset:a,getColumnStopIndexForStartIndex:o,getEstimatedTotalHeight:s,getEstimatedTotalWidth:r,getColumnOffset:l,getRowOffset:u,getRowPosition:c,getRowStartIndexForOffset:d,getRowStopIndexForStartIndex:f,initCache:v,injectToInstance:g,validateProps:p})=>se({name:e??"ElVirtualList",props:pr,emits:[dd,fd],setup(h,{emit:m,expose:b,slots:k}){const y=fe("vl");p(h);const S=ft(),C=M(v(h,S));g?.(S,C);const E=M(),$=M(),O=M(),R=M(),N=M({isScrolling:!1,scrollLeft:He(h.initScrollLeft)?h.initScrollLeft:0,scrollTop:He(h.initScrollTop)?h.initScrollTop:0,updateRequested:!1,xAxisScrollDir:Yr,yAxisScrollDir:Yr}),A=Y2(),_=w(()=>Number.parseInt(`${h.height}`,10)),V=w(()=>Number.parseInt(`${h.width}`,10)),z=w(()=>{const{totalColumn:pe,totalRow:Ee,columnCache:me}=h,{isScrolling:Me,xAxisScrollDir:We,scrollLeft:Xe}=i(N);if(pe===0||Ee===0)return[0,0,0,0];const Pe=a(h,Xe,i(C)),Ae=o(h,Pe,Xe,i(C)),je=!Me||We===pd?Math.max(1,me):1,Nt=!Me||We===Yr?Math.max(1,me):1;return[Math.max(0,Pe-je),Math.max(0,Math.min(pe-1,Ae+Nt)),Pe,Ae]}),U=w(()=>{const{totalColumn:pe,totalRow:Ee,rowCache:me}=h,{isScrolling:Me,yAxisScrollDir:We,scrollTop:Xe}=i(N);if(pe===0||Ee===0)return[0,0,0,0];const Pe=d(h,Xe,i(C)),Ae=f(h,Pe,Xe,i(C)),je=!Me||We===pd?Math.max(1,me):1,Nt=!Me||We===Yr?Math.max(1,me):1;return[Math.max(0,Pe-je),Math.max(0,Math.min(Ee-1,Ae+Nt)),Pe,Ae]}),W=w(()=>s(h,i(C))),P=w(()=>r(h,i(C))),I=w(()=>[{position:"relative",overflow:"hidden",WebkitOverflowScrolling:"touch",willChange:"transform"},{direction:h.direction,height:He(h.height)?`${h.height}px`:h.height,width:He(h.width)?`${h.width}px`:h.width},h.style??{}]),L=w(()=>{const pe=`${i(P)}px`;return{height:`${i(W)}px`,pointerEvents:i(N).isScrolling?"none":void 0,width:pe,margin:0,boxSizing:"border-box"}}),D=()=>{const{totalColumn:pe,totalRow:Ee}=h;if(pe>0&&Ee>0){const[Ae,je,Nt,Ue]=i(z),[rt,mt,kt,be]=i(U);m(dd,{columnCacheStart:Ae,columnCacheEnd:je,rowCacheStart:rt,rowCacheEnd:mt,columnVisibleStart:Nt,columnVisibleEnd:Ue,rowVisibleStart:kt,rowVisibleEnd:be})}const{scrollLeft:me,scrollTop:Me,updateRequested:We,xAxisScrollDir:Xe,yAxisScrollDir:Pe}=i(N);m(fd,{xAxisScrollDir:Xe,scrollLeft:me,yAxisScrollDir:Pe,scrollTop:Me,updateRequested:We})},F=pe=>{const{clientHeight:Ee,clientWidth:me,scrollHeight:Me,scrollLeft:We,scrollTop:Xe,scrollWidth:Pe}=pe.currentTarget,Ae=i(N);if(Ae.scrollTop===Xe&&Ae.scrollLeft===We)return;let je=We;if(g0(h.direction))switch(vd()){case Hi:je=-We;break;case Nm:je=Pe-me-We;break}N.value={...Ae,isScrolling:!0,scrollLeft:je,scrollTop:Math.max(0,Math.min(Xe,Me-Ee)),updateRequested:!0,xAxisScrollDir:rr(Ae.scrollLeft,je),yAxisScrollDir:rr(Ae.scrollTop,Xe)},Ne(()=>K()),Z(),D()},q=(pe,Ee)=>{const me=i(_),Me=(W.value-me)/Ee*pe;Q({scrollTop:Math.min(W.value-me,Me)})},j=(pe,Ee)=>{const me=i(V),Me=(P.value-me)/Ee*pe;Q({scrollLeft:Math.min(P.value-me,Me)})},{onWheel:X}=I9({atXStartEdge:w(()=>N.value.scrollLeft<=0),atXEndEdge:w(()=>N.value.scrollLeft>=P.value-i(V)),atYStartEdge:w(()=>N.value.scrollTop<=0),atYEndEdge:w(()=>N.value.scrollTop>=W.value-i(_))},(pe,Ee)=>{$.value?.onMouseUp?.(),O.value?.onMouseUp?.();const me=i(V),Me=i(_);Q({scrollLeft:Math.min(N.value.scrollLeft+pe,P.value-me),scrollTop:Math.min(N.value.scrollTop+Ee,W.value-Me)})});Ft(E,"wheel",X,{passive:!1});const Q=({scrollLeft:pe=N.value.scrollLeft,scrollTop:Ee=N.value.scrollTop})=>{pe=Math.max(pe,0),Ee=Math.max(Ee,0);const me=i(N);Ee===me.scrollTop&&pe===me.scrollLeft||(N.value={...me,xAxisScrollDir:rr(me.scrollLeft,pe),yAxisScrollDir:rr(me.scrollTop,Ee),scrollLeft:pe,scrollTop:Ee,updateRequested:!0},Ne(()=>K()),Z(),D())},{touchStartX:he,touchStartY:ue,handleTouchStart:ge,handleTouchMove:ie}=P9(E,N,Q,P,W,V,_),ae=(pe=0,Ee=0,me=Da)=>{const Me=i(N);Ee=Math.max(0,Math.min(Ee,h.totalColumn-1)),pe=Math.max(0,Math.min(pe,h.totalRow-1));const We=JS(y.namespace.value),Xe=i(C),Pe=s(h,Xe),Ae=r(h,Xe);Q({scrollLeft:l(h,Ee,me,Me.scrollLeft,Xe,Ae>h.width?We:0),scrollTop:u(h,pe,me,Me.scrollTop,Xe,Pe>h.height?We:0)})},ne=(pe,Ee)=>{const{columnWidth:me,direction:Me,rowHeight:We}=h,Xe=A.value(t&&me,t&&We,t&&Me),Pe=`${pe},${Ee}`;if(Rt(Xe,Pe))return Xe[Pe];{const[,Ae]=n(h,Ee,i(C)),je=i(C),Nt=g0(Me),[Ue,rt]=c(h,pe,je),[mt]=n(h,Ee,je);return Xe[Pe]={position:"absolute",left:Nt?void 0:`${Ae}px`,right:Nt?`${Ae}px`:void 0,top:`${rt}px`,height:`${Ue}px`,width:`${mt}px`},Xe[Pe]}},K=()=>{N.value.isScrolling=!1,Ne(()=>{A.value(-1,null,null)})};ht(()=>{if(!Mt)return;const{initScrollLeft:pe,initScrollTop:Ee}=h,me=i(E);me&&(He(pe)&&(me.scrollLeft=pe),He(Ee)&&(me.scrollTop=Ee)),D()});const Z=()=>{const{direction:pe}=h,{scrollLeft:Ee,scrollTop:me,updateRequested:Me}=i(N),We=i(E);if(Me&&We){if(pe===al)switch(vd()){case Hi:We.scrollLeft=-Ee;break;case Om:We.scrollLeft=Ee;break;default:{const{clientWidth:Xe,scrollWidth:Pe}=We;We.scrollLeft=Pe-Xe-Ee;break}}else We.scrollLeft=Math.max(0,Ee);We.scrollTop=Math.max(0,me)}},{resetAfterColumnIndex:re,resetAfterRowIndex:ce,resetAfter:ve}=S.proxy;b({windowRef:E,innerRef:R,getItemStyleCache:A,touchStartX:he,touchStartY:ue,handleTouchStart:ge,handleTouchMove:ie,scrollTo:Q,scrollToItem:ae,states:N,resetAfterColumnIndex:re,resetAfterRowIndex:ce,resetAfter:ve});const ke=()=>{const{scrollbarAlwaysOn:pe,scrollbarStartGap:Ee,scrollbarEndGap:me,totalColumn:Me,totalRow:We}=h,Xe=i(V),Pe=i(_),Ae=i(P),je=i(W),{scrollLeft:Nt,scrollTop:Ue}=i(N);return{horizontalScrollbar:qe(kh,{ref:$,alwaysOn:pe,startGap:Ee,endGap:me,class:y.e("horizontal"),clientSize:Xe,layout:"horizontal",onScroll:j,ratio:Xe*100/Ae,scrollFrom:Nt/(Ae-Xe),total:We,visible:!0}),verticalScrollbar:qe(kh,{ref:O,alwaysOn:pe,startGap:Ee,endGap:me,class:y.e("vertical"),clientSize:Pe,layout:"vertical",onScroll:q,ratio:Pe*100/je,scrollFrom:Ue/(je-Pe),total:Me,visible:!0})}},Re=()=>{const[pe,Ee]=i(z),[me,Me]=i(U),{data:We,totalColumn:Xe,totalRow:Pe,useIsScrolling:Ae,itemKey:je}=h,Nt=[];if(Pe>0&&Xe>0)for(let Ue=me;Ue<=Me;Ue++)for(let rt=pe;rt<=Ee;rt++){const mt=je({columnIndex:rt,data:We,rowIndex:Ue});Nt.push(qe(Fe,{key:mt},k.default?.({columnIndex:rt,data:We,isScrolling:Ae?i(N).isScrolling:void 0,style:ne(Ue,rt),rowIndex:Ue})))}return Nt},Ie=()=>{const pe=it(h.innerElement),Ee=Re();return[qe(pe,dt(h.innerProps,{style:i(L),ref:R}),Le(pe)?Ee:{default:()=>Ee})]};return()=>{const pe=it(h.containerElement),{horizontalScrollbar:Ee,verticalScrollbar:me}=ke(),Me=Ie();return qe("div",{key:0,class:y.e("wrapper"),role:h.role},[qe(pe,{class:h.className,style:i(I),onScroll:F,ref:E},Le(pe)?Me:{default:()=>Me}),Ee,me])}}}),w0="ElFixedSizeGrid",M9=Q2({name:"ElFixedSizeGrid",getColumnPosition:({columnWidth:e},t)=>[e,t*e],getRowPosition:({rowHeight:e},t)=>[e,t*e],getEstimatedTotalHeight:({totalRow:e,rowHeight:t})=>t*e,getEstimatedTotalWidth:({totalColumn:e,columnWidth:t})=>t*e,getColumnOffset:({totalColumn:e,columnWidth:t,width:n},a,o,s,r,l)=>{n=Number(n);const u=Math.max(0,e*t-n),c=Math.min(u,a*t),d=Math.max(0,a*t-n+l+t);switch(o==="smart"&&(s>=d-n&&s<=c+n?o=Da:o=Co),o){case Vi:return c;case zi:return d;case Co:{const f=Math.round(d+(c-d)/2);return fu+Math.floor(n/2)?u:f}case Da:default:return s>=d&&s<=c?s:d>c||s{t=Number(t);const u=Math.max(0,n*e-t),c=Math.min(u,a*e),d=Math.max(0,a*e-t+l+e);switch(o===cf&&(s>=d-t&&s<=c+t?o=Da:o=Co),o){case Vi:return c;case zi:return d;case Co:{const f=Math.round(d+(c-d)/2);return fu+Math.floor(t/2)?u:f}case Da:default:return s>=d&&s<=c?s:d>c||sMath.max(0,Math.min(t-1,Math.floor(n/e))),getColumnStopIndexForStartIndex:({columnWidth:e,totalColumn:t,width:n},a,o)=>{const s=a*e,r=Math.ceil((n+o-s)/e);return Math.max(0,Math.min(t-1,a+r-1))},getRowStartIndexForOffset:({rowHeight:e,totalRow:t},n)=>Math.max(0,Math.min(t-1,Math.floor(n/e))),getRowStopIndexForStartIndex:({rowHeight:e,totalRow:t,height:n},a,o)=>{const s=a*e,r=Math.ceil((n+o-s)/e);return Math.max(0,Math.min(t-1,a+r-1))},initCache:()=>{},clearCache:!0,validateProps:({columnWidth:e,rowHeight:t})=>{He(e)||en(w0,` + "columnWidth" must be passed as number, + instead ${typeof e} was given. + `),He(t)||en(w0,` + "columnWidth" must be passed as number, + instead ${typeof t} was given. + `)}}),{max:md,min:eE,floor:tE}=Math,S0="ElDynamicSizeGrid",_9={column:"columnWidth",row:"rowHeight"},Eh={column:"lastVisitedColumnIndex",row:"lastVisitedRowIndex"},jo=(e,t,n,a)=>{const[o,s,r]=[n[a],e[_9[a]],n[Eh[a]]];if(t>r){let l=0;if(r>=0){const u=o[r];l=u.offset+u.size}for(let u=r+1;u<=t;u++){const c=s(u);o[u]={offset:l,size:c},l+=c}n[Eh[a]]=t}return o[t]},nE=(e,t,n,a,o,s)=>{for(;n<=a;){const r=n+tE((a-n)/2),l=jo(e,r,t,s).offset;if(l===o)return r;l{const s=o==="column"?e.totalColumn:e.totalRow;let r=1;for(;n{const[o,s]=[t[a],t[Eh[a]]];return(s>0?o[s].offset:0)>=n?nE(e,t,0,s,n,a):A9(e,t,md(0,s),n,a)},aE=({totalRow:e},{estimatedRowHeight:t,lastVisitedRowIndex:n,row:a})=>{let o=0;if(n>=e&&(n=e-1),n>=0){const r=a[n];o=r.offset+r.size}const s=(e-n-1)*t;return o+s},oE=({totalColumn:e},{column:t,estimatedColumnWidth:n,lastVisitedColumnIndex:a})=>{let o=0;if(a>e&&(a=e-1),a>=0){const r=t[a];o=r.offset+r.size}const s=(e-a-1)*n;return o+s},L9={column:oE,row:aE},k0=(e,t,n,a,o,s,r)=>{const[l,u]=[s==="row"?e.height:e.width,L9[s]],c=jo(e,t,o,s),d=md(0,eE(u(e,o)-l,c.offset)),f=md(0,c.offset-l+r+c.size);switch(n===cf&&(a>=f-l&&a<=d+l?n=Da:n=Co),n){case Vi:return d;case zi:return f;case Co:return Math.round(f+(d-f)/2);case Da:default:return a>=f&&a<=d?a:f>d||a{const a=jo(e,t,n,"column");return[a.size,a.offset]},getRowPosition:(e,t,n)=>{const a=jo(e,t,n,"row");return[a.size,a.offset]},getColumnOffset:(e,t,n,a,o,s)=>k0(e,t,n,a,o,"column",s),getRowOffset:(e,t,n,a,o,s)=>k0(e,t,n,a,o,"row",s),getColumnStartIndexForOffset:(e,t,n)=>C0(e,n,t,"column"),getColumnStopIndexForStartIndex:(e,t,n,a)=>{const o=jo(e,t,a,"column"),s=n+e.width;let r=o.offset+o.size,l=t;for(;lC0(e,n,t,"row"),getRowStopIndexForStartIndex:(e,t,n,a)=>{const{totalRow:o,height:s}=e,r=jo(e,t,a,"row"),l=n+s;let u=r.size+r.offset,c=t;for(;c{const n=({columnIndex:s,rowIndex:r},l)=>{l=Tt(l)?!0:l,He(s)&&(t.value.lastVisitedColumnIndex=Math.min(t.value.lastVisitedColumnIndex,s-1)),He(r)&&(t.value.lastVisitedRowIndex=Math.min(t.value.lastVisitedRowIndex,r-1)),e.exposed?.getItemStyleCache.value(-1,null,null),l&&e.proxy?.$forceUpdate()},a=(s,r)=>{n({columnIndex:s},r)},o=(s,r)=>{n({rowIndex:s},r)};Object.assign(e.proxy,{resetAfterColumnIndex:a,resetAfterRowIndex:o,resetAfter:n})},initCache:({estimatedColumnWidth:e=gh,estimatedRowHeight:t=gh})=>({column:{},estimatedColumnWidth:e,estimatedRowHeight:t,lastVisitedColumnIndex:-1,lastVisitedRowIndex:-1,row:{}}),clearCache:!1,validateProps:({columnWidth:e,rowHeight:t})=>{Ve(e)||en(S0,` + "columnWidth" must be passed as function, + instead ${typeof e} was given. + `),Ve(t)||en(S0,` + "rowHeight" must be passed as function, + instead ${typeof t} was given. + `)}}),Rm=Symbol("ElSelectV2Injection"),B9=Ce({allowCreate:Boolean,autocomplete:{type:G(String),default:"none"},automaticDropdown:Boolean,clearable:Boolean,clearIcon:{type:Kt,default:Fo},effect:{type:G(String),default:"light"},collapseTags:Boolean,collapseTagsTooltip:Boolean,tagTooltip:{type:G(Object),default:()=>({})},maxCollapseTags:{type:Number,default:1},defaultFirstOption:Boolean,disabled:{type:Boolean,default:void 0},estimatedOptionHeight:{type:Number,default:void 0},filterable:Boolean,filterMethod:{type:G(Function)},height:{type:Number,default:274},itemHeight:{type:Number,default:34},id:String,loading:Boolean,loadingText:String,modelValue:{type:G([Array,String,Number,Boolean,Object]),default:void 0},multiple:Boolean,multipleLimit:{type:Number,default:0},name:String,noDataText:String,noMatchText:String,remoteMethod:{type:G(Function)},reserveKeyword:{type:Boolean,default:!0},options:{type:G(Array),required:!0},placeholder:{type:String},teleported:zt.teleported,persistent:{type:Boolean,default:!0},popperClass:zt.popperClass,popperStyle:zt.popperStyle,popperOptions:{type:G(Object),default:()=>({})},remote:Boolean,debounce:{type:Number,default:300},size:Tn,props:{type:G(Object),default:()=>od},valueKey:{type:String,default:"value"},scrollbarAlwaysOn:Boolean,validateEvent:{type:Boolean,default:!0},offset:{type:Number,default:12},remoteShowSuffix:Boolean,showArrow:{type:Boolean,default:!0},placement:{type:G(String),values:Lo,default:"bottom-start"},fallbackPlacements:{type:G(Array),default:["bottom-start","top-start","right","left"]},tagType:{...us.type,default:"info"},tagEffect:{...us.effect,default:"light"},tabindex:{type:[String,Number],default:0},appendTo:zt.appendTo,fitInputWidth:{type:[Boolean,Number],default:!0,validator(e){return Ht(e)||He(e)}},suffixIcon:{type:Kt,default:Bo},...Ir,...aa(["ariaLabel"])}),F9=Ce({data:Array,disabled:Boolean,hovering:Boolean,item:{type:G(Object),required:!0},index:Number,style:Object,selected:Boolean,created:Boolean}),V9={[tt]:e=>!0,[bt]:e=>!0,"remove-tag":e=>!0,"visible-change":e=>!0,focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent,clear:()=>!0},z9={hover:e=>He(e),select:(e,t)=>!0};var H9=se({props:{item:{type:Object,required:!0},style:{type:Object},height:Number},setup(){return{ns:fe("select")}}});function K9(e,t,n,a,o,s){return x(),B("div",{class:T(e.ns.be("group","title")),style:Ke({...e.style,lineHeight:`${e.height}px`})},Se(e.item.label),7)}var W9=$n(H9,[["render",K9]]);function j9(e,{emit:t}){return{hoverItem:()=>{e.disabled||t("hover",e.index)},selectOptionClick:()=>{e.disabled||t("select",e.item,e.index)}}}var U9=se({props:F9,emits:z9,setup(e,{emit:t}){const n=_e(Rm),a=fe("select"),{hoverItem:o,selectOptionClick:s}=j9(e,{emit:t}),{getLabel:r}=yu(n.props);return{ns:a,contentId:n.contentId,hoverItem:o,selectOptionClick:s,getLabel:r}}});const q9=["id","aria-selected","aria-disabled"];function Y9(e,t,n,a,o,s){return x(),B("li",{id:`${e.contentId}-${e.index}`,role:"option","aria-selected":e.selected,"aria-disabled":e.disabled||void 0,style:Ke(e.style),class:T([e.ns.be("dropdown","item"),e.ns.is("selected",e.selected),e.ns.is("disabled",e.disabled),e.ns.is("created",e.created),e.ns.is("hovering",e.hovering)]),onMousemove:t[0]||(t[0]=(...r)=>e.hoverItem&&e.hoverItem(...r)),onClick:t[1]||(t[1]=Ge((...r)=>e.selectOptionClick&&e.selectOptionClick(...r),["stop"]))},[ee(e.$slots,"default",{item:e.item,index:e.index,disabled:e.disabled},()=>[H("span",null,Se(e.getLabel(e.item)),1)])],46,q9)}var G9=$n(U9,[["render",Y9]]);const X9={loading:Boolean,data:{type:Array,required:!0},hoveringIndex:Number,width:Number,id:String,ariaLabel:String};var J9=se({name:"ElSelectDropdown",props:X9,setup(e,{slots:t,expose:n}){const a=_e(Rm),o=fe("select"),{getLabel:s,getValue:r,getDisabled:l}=yu(a.props),u=M([]),c=M(),d=w(()=>e.data.length);le(()=>d.value,()=>{a.tooltipRef.value?.updatePopper?.()});const f=w(()=>Tt(a.props.estimatedOptionHeight)),v=w(()=>f.value?{itemSize:a.props.itemHeight}:{estimatedSize:a.props.estimatedOptionHeight,itemSize:N=>u.value[N]}),g=(N=[],A)=>{const{props:{valueKey:_}}=a;return nt(A)?N&&N.some(V=>qt(yn(V,_))===yn(A,_)):N.includes(A)},p=(N,A)=>{if(nt(A)){const{valueKey:_}=a.props;return yn(N,_)===yn(A,_)}else return N===A},h=(N,A)=>a.props.multiple?g(N,r(A)):p(N,r(A)),m=(N,A)=>{const{disabled:_,multiple:V,multipleLimit:z}=a.props;return _||!A&&(V?z>0&&N.length>=z:!1)},b=N=>e.hoveringIndex===N;n({listRef:c,isSized:f,isItemDisabled:m,isItemHovering:b,isItemSelected:h,scrollToItem:N=>{const A=c.value;A&&A.scrollToItem(N)},resetScrollTop:()=>{const N=c.value;N&&N.resetScrollTop()}});const S=N=>{const{index:A,data:_,style:V}=N,z=i(f),{itemSize:U,estimatedSize:W}=i(v),{modelValue:P}=a.props,{onSelect:I,onHover:L}=a,D=_[A];if(D.type==="Group")return Y(W9,{item:D,style:V,height:z?U:W},null);const F=h(P,D),q=m(P,F),j=b(A);return Y(G9,dt(N,{selected:F,disabled:l(D)||q,created:!!D.created,hovering:j,item:D,onSelect:I,onHover:L}),{default:X=>t.default?.(X)||Y("span",null,[s(D)])})},{onKeyboardNavigate:C,onKeyboardSelect:E}=a,$=()=>{C("forward")},O=()=>{C("backward")},R=N=>{const A=jt(N),{tab:_,esc:V,down:z,up:U,enter:W,numpadEnter:P}=we;switch([V,z,U,W,P].includes(A)&&(N.preventDefault(),N.stopPropagation()),A){case _:case V:break;case z:$();break;case U:O();break;case W:case P:E();break}};return()=>{const{data:N,width:A}=e,{height:_,multiple:V,scrollbarAlwaysOn:z}=a.props,U=w(()=>Xc?!0:z),W=i(f)?J2:R9;return Y("div",{class:[o.b("dropdown"),o.is("multiple",V)],style:{width:`${A}px`}},[t.header?.(),t.loading?.()||t.empty?.()||Y(W,dt({ref:c},i(v),{className:o.be("dropdown","list"),scrollbarAlwaysOn:U.value,data:N,height:_,width:A,total:N.length,innerElement:"ul",innerProps:{id:e.id,role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical"},onKeydown:R}),{default:P=>Y(S,P,null)}),t.footer?.()])}}});function Z9(e,t){const{aliasProps:n,getLabel:a,getValue:o}=yu(e),s=M(0),r=M(),l=w(()=>e.allowCreate&&e.filterable);le(()=>e.options,g=>{const p=new Set(g.map(h=>a(h)));t.createdOptions=t.createdOptions.filter(h=>!p.has(a(h)))});function u(g){const p=h=>a(h)===g;return e.options&&e.options.some(p)||t.createdOptions.some(p)}function c(g){l.value&&(e.multiple&&g.created?s.value++:r.value=g)}function d(g){if(l.value)if(g&&g.length>0){if(u(g)){t.createdOptions=t.createdOptions.filter(h=>a(h)!==t.previousQuery);return}const p={[n.value.value]:g,[n.value.label]:g,created:!0,[n.value.disabled]:!1};t.createdOptions.length>=s.value?t.createdOptions[s.value]=p:t.createdOptions.push(p)}else if(e.multiple)t.createdOptions.length=s.value;else{const p=r.value;t.createdOptions.length=0,p&&p.created&&t.createdOptions.push(p)}}function f(g){if(!l.value||!g||!g.created||g.created&&e.reserveKeyword&&t.inputValue===a(g))return;const p=t.createdOptions.findIndex(h=>o(h)===o(g));~p&&(t.createdOptions.splice(p,1),s.value--)}function v(){l.value&&(t.createdOptions.length=0,s.value=0)}return{createNewOption:d,removeNewOption:f,selectNewOption:c,clearAllNewOption:v}}const Q9=(e,t)=>{const{t:n}=Ct(),a=hn(),o=fe("select"),s=fe("input"),{form:r,formItem:l}=Dn(),{inputId:u}=Ia(e,{formItemContext:l}),{aliasProps:c,getLabel:d,getValue:f,getDisabled:v,getOptions:g}=yu(e),{valueOnClear:p,isEmptyValue:h}=hu(e),m=At({inputValue:"",cachedOptions:[],createdOptions:[],hoveringIndex:-1,inputHovering:!1,selectionWidth:0,collapseItemWidth:0,previousQuery:null,previousValue:void 0,selectedLabel:"",menuVisibleOnFocus:!1,isBeforeHide:!1}),b=M(-1),k=M(!1),y=M(),S=M(),C=M(),E=M(),$=M(),O=M(),R=M(),N=M(),A=M(),_=M(),{isComposing:V,handleCompositionStart:z,handleCompositionEnd:U,handleCompositionUpdate:W}=pu({afterComposition:Oe=>Yt(Oe)}),P=ln(),{wrapperRef:I,isFocused:L,handleBlur:D}=ms($,{disabled:P,afterFocus(){e.automaticDropdown&&!X.value&&(X.value=!0,m.menuVisibleOnFocus=!0)},beforeBlur(Oe){return C.value?.isFocusInsideContent(Oe)||E.value?.isFocusInsideContent(Oe)},afterBlur(){X.value=!1,m.menuVisibleOnFocus=!1,e.validateEvent&&l?.validate?.("blur").catch(Oe=>pt(Oe))}}),F=w(()=>Re("")),q=w(()=>e.loading?!1:e.options.length>0||m.createdOptions.length>0),j=M([]),X=M(!1),Q=w(()=>r?.statusIcon??!1),he=w(()=>{const Oe=j.value.length*e.itemHeight;return Oe>e.height?e.height:Oe}),ue=w(()=>e.multiple?ye(e.modelValue)&&e.modelValue.length>0:!h(e.modelValue)),ge=w(()=>e.clearable&&!P.value&&ue.value&&(L.value||m.inputHovering)),ie=w(()=>e.remote&&e.filterable&&!e.remoteShowSuffix?"":e.suffixIcon),ae=w(()=>ie.value&&o.is("reverse",X.value)),ne=w(()=>l?.validateState||""),K=w(()=>{if(ne.value)return nf[ne.value]}),Z=w(()=>e.remote?e.debounce:0),re=w(()=>e.remote&&!m.inputValue&&!q.value),ce=w(()=>e.loading?e.loadingText||n("el.select.loading"):e.filterable&&m.inputValue&&q.value&&j.value.length===0?e.noMatchText||n("el.select.noMatch"):q.value?null:e.noDataText||n("el.select.noData")),ve=w(()=>e.filterable&&Ve(e.filterMethod)),ke=w(()=>e.filterable&&e.remote&&Ve(e.remoteMethod)),Re=Oe=>{const Ot=new RegExp(Pv(Oe),"i"),Et=xt=>ve.value||ke.value?!0:Oe?Ot.test(d(xt)||""):!0;return e.loading?[]:[...m.createdOptions,...e.options].reduce((xt,Bn)=>{const Sa=g(Bn);if(ye(Sa)){const Iu=Sa.filter(Et);Iu.length>0&&xt.push({label:d(Bn),type:"Group"},...Iu)}else(e.remote||Et(Bn))&&xt.push(Bn);return xt},[])},Ie=()=>{j.value=Re(m.inputValue)},$e=w(()=>{const Oe=new Map;return F.value.forEach((Ot,Et)=>{Oe.set(Ze(f(Ot)),{option:Ot,index:Et})}),Oe}),pe=w(()=>{const Oe=new Map;return j.value.forEach((Ot,Et)=>{Oe.set(Ze(f(Ot)),{option:Ot,index:Et})}),Oe}),Ee=w(()=>j.value.every(Oe=>v(Oe))),me=Sn(),Me=w(()=>me.value==="small"?"small":"default"),We=()=>{if(He(e.fitInputWidth)){b.value=e.fitInputWidth;return}const Oe=y.value?.offsetWidth||200;!e.fitInputWidth&&q.value?Ne(()=>{b.value=Math.max(Oe,Xe())}):b.value=Oe},Xe=()=>{const Oe=document.createElement("canvas").getContext("2d"),Ot=o.be("dropdown","item"),Et=(N.value?.listRef?.innerRef||document).querySelector(`.${Ot}`);if(Et===null||Oe===null)return 0;const xt=getComputedStyle(Et),Bn=Number.parseFloat(xt.paddingLeft)+Number.parseFloat(xt.paddingRight);return Oe.font=`bold ${xt.font.replace(new RegExp(`\\b${xt.fontWeight}\\b`),"")}`,j.value.reduce((Sa,Iu)=>{const _x=Oe.measureText(d(Iu));return Math.max(_x.width,Sa)},0)+Bn},Pe=()=>{if(!S.value)return 0;const Oe=window.getComputedStyle(S.value);return Number.parseFloat(Oe.gap||"6px")},Ae=w(()=>{const Oe=Pe(),Ot=e.filterable?Oe+Ad:0;return{maxWidth:`${_.value&&e.maxCollapseTags===1?m.selectionWidth-m.collapseItemWidth-Oe-Ot:m.selectionWidth-Ot}px`}}),je=w(()=>({maxWidth:`${m.selectionWidth}px`})),Nt=w(()=>ye(e.modelValue)?e.modelValue.length===0&&!m.inputValue:e.filterable?!m.inputValue:!0),Ue=w(()=>{const Oe=e.placeholder??n("el.select.placeholder");return e.multiple||!ue.value?Oe:m.selectedLabel}),rt=w(()=>C.value?.popperRef?.contentRef),mt=w(()=>{if(e.multiple){const Oe=e.modelValue.length;if(Oe>0&&pe.value.has(e.modelValue[Oe-1])){const{index:Ot}=pe.value.get(e.modelValue[Oe-1]);return Ot}}else if(!h(e.modelValue)&&pe.value.has(e.modelValue)){const{index:Oe}=pe.value.get(e.modelValue);return Oe}return-1}),kt=w({get(){return X.value&&(e.loading||!re.value||e.remote&&!!a.empty)&&(!k.value||!ia(m.previousQuery))},set(Oe){X.value=Oe}}),be=w(()=>e.multiple?e.collapseTags?m.cachedOptions.slice(0,e.maxCollapseTags):m.cachedOptions:[]),ze=w(()=>e.multiple?e.collapseTags?m.cachedOptions.slice(e.maxCollapseTags):[]:[]),{createNewOption:de,removeNewOption:Ye,selectNewOption:$t,clearAllNewOption:Qt}=Z9(e,m),_n=Oe=>{P.value||e.filterable&&X.value&&Oe&&!R.value?.contains(Oe.target)||(m.menuVisibleOnFocus?m.menuVisibleOnFocus=!1:X.value=!X.value)},Be=()=>{m.inputValue.length>0&&!X.value&&(X.value=!0),de(m.inputValue),Ne(()=>{ut(m.inputValue)})},et=ou(()=>{Be(),k.value=!1},Z),ut=Oe=>{m.previousQuery===Oe||V.value||(m.previousQuery=Oe,e.filterable&&Ve(e.filterMethod)?e.filterMethod(Oe):e.filterable&&e.remote&&Ve(e.remoteMethod)&&e.remoteMethod(Oe),e.defaultFirstOption&&(e.filterable||e.remote)&&j.value.length?Ne(kn):Ne(Lt))},kn=()=>{const Oe=j.value.filter(xt=>!xt.disabled&&xt.type!=="Group"),Ot=Oe.find(xt=>xt.created),Et=Oe[0];m.hoveringIndex=Je(j.value,Ot||Et)},Wt=Oe=>{on(e.modelValue,Oe)||t(bt,Oe)},bn=Oe=>{t(tt,Oe),Wt(Oe),m.previousValue=e.multiple?String(Oe):Oe,Ne(()=>{if(e.multiple&&ye(e.modelValue)){const Ot=m.cachedOptions.slice(),Et=e.modelValue.map(xt=>lg(xt,Ot));on(m.cachedOptions,Et)||(m.cachedOptions=Et)}else Ru(!0)})},Je=(Oe=[],Ot)=>{if(!nt(Ot))return Oe.indexOf(Ot);const Et=e.valueKey;let xt=-1;return Oe.some((Bn,Sa)=>yn(Bn,Et)===yn(Ot,Et)?(xt=Sa,!0):!1),xt},Ze=Oe=>nt(Oe)?yn(Oe,e.valueKey):Oe,gt=()=>{We()},oa=()=>{m.selectionWidth=Number.parseFloat(window.getComputedStyle(S.value).width)},po=()=>{m.collapseItemWidth=_.value.getBoundingClientRect().width},Ka=()=>{C.value?.updatePopper?.()},Ou=()=>{E.value?.updatePopper?.()},Ws=Oe=>{const Ot=f(Oe);if(e.multiple){let Et=e.modelValue.slice();const xt=Je(Et,Ot);xt>-1?(Et=[...Et.slice(0,xt),...Et.slice(xt+1)],m.cachedOptions.splice(xt,1),Ye(Oe)):(e.multipleLimit<=0||Et.length{let Et=e.modelValue.slice();const xt=Je(Et,f(Ot));xt>-1&&!P.value&&(Et=[...e.modelValue.slice(0,xt),...e.modelValue.slice(xt+1)],m.cachedOptions.splice(xt,1),bn(Et),t("remove-tag",f(Ot)),Ye(Ot)),Oe.stopPropagation(),zo()},zo=()=>{$.value?.focus()},yf=()=>{if(X.value){X.value=!1,Ne(()=>$.value?.blur());return}$.value?.blur()},wf=()=>{m.inputValue.length>0?m.inputValue="":X.value=!1},Sf=Oe=>NS(Oe,Ot=>!m.cachedOptions.some(Et=>f(Et)===Ot&&v(Et))),Cf=Oe=>{const Ot=jt(Oe);if(e.multiple&&Ot!==we.delete&&m.inputValue.length===0){Oe.preventDefault();const Et=e.modelValue.slice(),xt=Sf(Et);if(xt<0)return;const Bn=Et[xt];Et.splice(xt,1);const Sa=m.cachedOptions[xt];m.cachedOptions.splice(xt,1),Ye(Sa),bn(Et),t("remove-tag",Bn)}},kf=()=>{let Oe;ye(e.modelValue)?Oe=[]:Oe=p.value,m.selectedLabel="",X.value=!1,bn(Oe),t("clear"),Qt(),zo()},_r=(Oe,Ot=void 0)=>{const Et=j.value;if(!["forward","backward"].includes(Oe)||P.value||Et.length<=0||Ee.value||V.value)return;if(!X.value)return _n();Tt(Ot)&&(Ot=m.hoveringIndex);let xt=-1;Oe==="forward"?(xt=Ot+1,xt>=Et.length&&(xt=0)):Oe==="backward"&&(xt=Ot-1,(xt<0||xt>=Et.length)&&(xt=Et.length-1));const Bn=Et[xt];if(v(Bn)||Bn.type==="Group")return _r(Oe,xt);m.hoveringIndex=xt,Ar(xt)},Te=()=>{if(X.value)~m.hoveringIndex&&j.value[m.hoveringIndex]&&Ws(j.value[m.hoveringIndex]);else return _n()},vt=Oe=>{m.hoveringIndex=Oe??-1},Lt=()=>{if(!e.multiple)m.hoveringIndex=j.value.findIndex(Oe=>Ze(f(Oe))===Ze(e.modelValue));else{const Oe=e.modelValue.length;if(Oe>0){const Ot=e.modelValue[Oe-1];m.hoveringIndex=j.value.findIndex(Et=>Ze(Ot)===Ze(f(Et)))}else m.hoveringIndex=-1}},Yt=Oe=>{if(m.inputValue=Oe.target.value,e.remote)k.value=!0,et();else return Be()},En=Oe=>{X.value=!1,L.value&&D(new FocusEvent("blur",Oe))},ho=()=>(m.isBeforeHide=!1,Ne(()=>{~mt.value&&Ar(mt.value)})),Ar=Oe=>{N.value.scrollToItem(Oe)},lg=(Oe,Ot)=>{const Et=Ze(Oe);if($e.value.has(Et)){const{option:xt}=$e.value.get(Et);return xt}if(Ot&&Ot.length){const xt=Ot.find(Bn=>Ze(f(Bn))===Et);if(xt)return xt}return{[c.value.value]:Oe,[c.value.label]:Oe}},Mx=Oe=>$e.value.get(f(Oe))?.index??-1,Ru=(Oe=!1)=>{if(e.multiple)if(e.modelValue.length>0){const Ot=m.cachedOptions.slice();m.cachedOptions.length=0,m.previousValue=e.modelValue.toString();for(const Et of e.modelValue){const xt=lg(Et,Ot);m.cachedOptions.push(xt)}}else m.cachedOptions=[],m.previousValue=void 0;else if(ue.value){m.previousValue=e.modelValue;const Ot=j.value,Et=Ot.findIndex(xt=>Ze(f(xt))===Ze(e.modelValue));~Et?m.selectedLabel=d(Ot[Et]):(!m.selectedLabel||Oe)&&(m.selectedLabel=Ze(e.modelValue))}else m.selectedLabel="",m.previousValue=void 0;Qt(),We()};le(()=>e.fitInputWidth,()=>{We()}),le(X,Oe=>{Oe?(e.persistent||We(),ut("")):(m.inputValue="",m.previousQuery=null,m.isBeforeHide=!0,m.menuVisibleOnFocus=!1,de(""))}),le(()=>e.modelValue,(Oe,Ot)=>{(!Oe||ye(Oe)&&Oe.length===0||e.multiple&&!on(Oe.toString(),m.previousValue)||!e.multiple&&Ze(Oe)!==Ze(m.previousValue))&&Ru(!0),!on(Oe,Ot)&&e.validateEvent&&l?.validate?.("change").catch(Et=>pt(Et))},{deep:!0}),le(()=>e.options,()=>{const Oe=$.value;(!Oe||Oe&&document.activeElement!==Oe)&&Ru()},{deep:!0,flush:"post"}),le(()=>j.value,()=>(We(),N.value&&Ne(N.value.resetScrollTop))),wa(()=>{m.isBeforeHide||Ie()}),wa(()=>{const{valueKey:Oe,options:Ot}=e,Et=new Map;for(const xt of Ot){const Bn=f(xt);let Sa=Bn;if(nt(Sa)&&(Sa=yn(Bn,Oe)),Et.get(Sa)){pt("ElSelectV2","The option values you provided seem to be duplicated, which may cause some problems, please check.");break}else Et.set(Sa,!0)}}),ht(()=>{Ru()}),Zt(y,gt),Zt(S,oa),Zt(I,Ka),Zt(A,Ou),Zt(_,po);let Ef;return le(()=>kt.value,Oe=>{Oe?Ef=Zt(N,Ka).stop:(Ef?.(),Ef=void 0),t("visible-change",Oe)}),{inputId:u,collapseTagSize:Me,currentPlaceholder:Ue,expanded:X,emptyText:ce,popupHeight:he,debounce:Z,allOptions:F,allOptionsValueMap:$e,filteredOptions:j,iconComponent:ie,iconReverse:ae,tagStyle:Ae,collapseTagStyle:je,popperSize:b,dropdownMenuVisible:kt,hasModelValue:ue,shouldShowPlaceholder:Nt,selectDisabled:P,selectSize:me,needStatusIcon:Q,showClearBtn:ge,states:m,isFocused:L,nsSelect:o,nsInput:s,inputRef:$,menuRef:N,tagMenuRef:A,tooltipRef:C,tagTooltipRef:E,selectRef:y,wrapperRef:I,selectionRef:S,prefixRef:O,suffixRef:R,collapseItemRef:_,popperRef:rt,validateState:ne,validateIcon:K,showTagList:be,collapseTagList:ze,debouncedOnInputChange:et,deleteTag:Nu,getLabel:d,getValue:f,getDisabled:v,getValueKey:Ze,getIndex:Mx,handleClear:kf,handleClickOutside:En,handleDel:Cf,handleEsc:wf,focus:zo,blur:yf,handleMenuEnter:ho,handleResize:gt,resetSelectionWidth:oa,updateTooltip:Ka,updateTagTooltip:Ou,updateOptions:Ie,toggleMenu:_n,scrollTo:Ar,onInput:Yt,onKeyboardNavigate:_r,onKeyboardSelect:Te,onSelect:Ws,onHover:vt,handleCompositionStart:z,handleCompositionEnd:U,handleCompositionUpdate:W}};var e7=se({name:"ElSelectV2",components:{ElSelectMenu:J9,ElTag:ts,ElTooltip:Ln,ElIcon:De},directives:{ClickOutside:zs},props:B9,emits:V9,setup(e,{emit:t}){const n=w(()=>{const{modelValue:u,multiple:c}=e,d=c?[]:void 0;return ye(u)?c?u:d:c?d:u}),a=Q9(At({...Mn(e),modelValue:n}),t),{calculatorRef:o,inputStyle:s}=Iv(),r=zn();St(Rm,{props:At({...Mn(e),height:a.popupHeight,modelValue:n}),expanded:a.expanded,tooltipRef:a.tooltipRef,contentId:r,onSelect:a.onSelect,onHover:a.onHover,onKeyboardNavigate:a.onKeyboardNavigate,onKeyboardSelect:a.onKeyboardSelect});const l=w(()=>e.multiple?a.states.cachedOptions.map(u=>a.getLabel(u)):a.states.selectedLabel);return{...a,modelValue:n,selectedLabel:l,calculatorRef:o,inputStyle:s,contentId:r,BORDER_HORIZONTAL_WIDTH:q1}}});const t7=["id","value","autocomplete","tabindex","aria-expanded","aria-label","disabled","aria-controls","aria-activedescendant","readonly","name"],n7=["textContent"],a7={key:1};function o7(e,t,n,a,o,s){const r=It("el-tag"),l=It("el-tooltip"),u=It("el-icon"),c=It("el-select-menu"),d=rv("click-outside");return ct((x(),B("div",{ref:"selectRef",class:T([e.nsSelect.b(),e.nsSelect.m(e.selectSize)]),onMouseenter:t[15]||(t[15]=f=>e.states.inputHovering=!0),onMouseleave:t[16]||(t[16]=f=>e.states.inputHovering=!1)},[Y(l,{ref:"tooltipRef",visible:e.dropdownMenuVisible,teleported:e.teleported,"popper-class":[e.nsSelect.e("popper"),e.popperClass],"popper-style":e.popperStyle,"gpu-acceleration":!1,"stop-popper-mouse-event":!1,"popper-options":e.popperOptions,"fallback-placements":e.fallbackPlacements,effect:e.effect,placement:e.placement,pure:"",transition:`${e.nsSelect.namespace.value}-zoom-in-top`,trigger:"click",persistent:e.persistent,"append-to":e.appendTo,"show-arrow":e.showArrow,offset:e.offset,onBeforeShow:e.handleMenuEnter,onHide:t[14]||(t[14]=f=>e.states.isBeforeHide=!1)},{default:J(()=>[H("div",{ref:"wrapperRef",class:T([e.nsSelect.e("wrapper"),e.nsSelect.is("focused",e.isFocused),e.nsSelect.is("hovering",e.states.inputHovering),e.nsSelect.is("filterable",e.filterable),e.nsSelect.is("disabled",e.selectDisabled)]),onClick:t[11]||(t[11]=Ge((...f)=>e.toggleMenu&&e.toggleMenu(...f),["prevent"]))},[e.$slots.prefix?(x(),B("div",{key:0,ref:"prefixRef",class:T(e.nsSelect.e("prefix"))},[ee(e.$slots,"prefix")],2)):te("v-if",!0),H("div",{ref:"selectionRef",class:T([e.nsSelect.e("selection"),e.nsSelect.is("near",e.multiple&&!e.$slots.prefix&&!!e.modelValue.length)])},[e.multiple?ee(e.$slots,"tag",{key:0,data:e.states.cachedOptions,deleteTag:e.deleteTag,selectDisabled:e.selectDisabled},()=>[(x(!0),B(Fe,null,yt(e.showTagList,f=>(x(),B("div",{key:e.getValueKey(e.getValue(f)),class:T(e.nsSelect.e("selected-item"))},[Y(r,{closable:!e.selectDisabled&&!e.getDisabled(f),size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",style:Ke(e.tagStyle),onClose:v=>e.deleteTag(v,f)},{default:J(()=>[H("span",{class:T(e.nsSelect.e("tags-text"))},[ee(e.$slots,"label",{index:e.getIndex(f),label:e.getLabel(f),value:e.getValue(f)},()=>[wt(Se(e.getLabel(f)),1)])],2)]),_:2},1032,["closable","size","type","effect","style","onClose"])],2))),128)),e.collapseTags&&e.states.cachedOptions.length>e.maxCollapseTags?(x(),oe(l,{key:0,ref:"tagTooltipRef",disabled:e.dropdownMenuVisible||!e.collapseTagsTooltip,"fallback-placements":e.tagTooltip?.fallbackPlacements??["bottom","top","right","left"],effect:e.tagTooltip?.effect??e.effect,placement:e.tagTooltip?.placement??"bottom","popper-class":e.tagTooltip?.popperClass??e.popperClass,"popper-style":e.tagTooltip?.popperStyle??e.popperStyle,teleported:e.tagTooltip?.teleported??e.teleported,"append-to":e.tagTooltip?.appendTo??e.appendTo,"popper-options":e.tagTooltip?.popperOptions??e.popperOptions,transition:e.tagTooltip?.transition,"show-after":e.tagTooltip?.showAfter,"hide-after":e.tagTooltip?.hideAfter,"auto-close":e.tagTooltip?.autoClose,offset:e.tagTooltip?.offset},{default:J(()=>[H("div",{ref:"collapseItemRef",class:T(e.nsSelect.e("selected-item"))},[Y(r,{closable:!1,size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,style:Ke(e.collapseTagStyle),"disable-transitions":""},{default:J(()=>[H("span",{class:T(e.nsSelect.e("tags-text"))}," + "+Se(e.states.cachedOptions.length-e.maxCollapseTags),3)]),_:1},8,["size","type","effect","style"])],2)]),content:J(()=>[H("div",{ref:"tagMenuRef",class:T(e.nsSelect.e("selection"))},[(x(!0),B(Fe,null,yt(e.collapseTagList,f=>(x(),B("div",{key:e.getValueKey(e.getValue(f)),class:T(e.nsSelect.e("selected-item"))},[Y(r,{class:"in-tooltip",closable:!e.selectDisabled&&!e.getDisabled(f),size:e.collapseTagSize,type:e.tagType,effect:e.tagEffect,"disable-transitions":"",onClose:v=>e.deleteTag(v,f)},{default:J(()=>[H("span",{class:T(e.nsSelect.e("tags-text"))},[ee(e.$slots,"label",{index:e.getIndex(f),label:e.getLabel(f),value:e.getValue(f)},()=>[wt(Se(e.getLabel(f)),1)])],2)]),_:2},1032,["closable","size","type","effect","onClose"])],2))),128))],2)]),_:3},8,["disabled","fallback-placements","effect","placement","popper-class","popper-style","teleported","append-to","popper-options","transition","show-after","hide-after","auto-close","offset"])):te("v-if",!0)]):te("v-if",!0),H("div",{class:T([e.nsSelect.e("selected-item"),e.nsSelect.e("input-wrapper"),e.nsSelect.is("hidden",!e.filterable||e.selectDisabled||!e.states.inputValue&&!e.isFocused)])},[H("input",{id:e.inputId,ref:"inputRef",value:e.states.inputValue,style:Ke(e.inputStyle),autocomplete:e.autocomplete,tabindex:e.tabindex,"aria-autocomplete":"none","aria-haspopup":"listbox",autocapitalize:"off","aria-expanded":e.expanded,"aria-label":e.ariaLabel,class:T([e.nsSelect.e("input"),e.nsSelect.is(e.selectSize)]),disabled:e.selectDisabled,role:"combobox","aria-controls":e.contentId,"aria-activedescendant":e.states.hoveringIndex>=0?`${e.contentId}-${e.states.hoveringIndex}`:"",readonly:!e.filterable,spellcheck:"false",type:"text",name:e.name,onInput:t[0]||(t[0]=(...f)=>e.onInput&&e.onInput(...f)),onChange:t[1]||(t[1]=Ge(()=>{},["stop"])),onCompositionstart:t[2]||(t[2]=(...f)=>e.handleCompositionStart&&e.handleCompositionStart(...f)),onCompositionupdate:t[3]||(t[3]=(...f)=>e.handleCompositionUpdate&&e.handleCompositionUpdate(...f)),onCompositionend:t[4]||(t[4]=(...f)=>e.handleCompositionEnd&&e.handleCompositionEnd(...f)),onKeydown:[t[5]||(t[5]=an(Ge(f=>e.onKeyboardNavigate("backward"),["stop","prevent"]),["up"])),t[6]||(t[6]=an(Ge(f=>e.onKeyboardNavigate("forward"),["stop","prevent"]),["down"])),t[7]||(t[7]=an(Ge((...f)=>e.onKeyboardSelect&&e.onKeyboardSelect(...f),["stop","prevent"]),["enter"])),t[8]||(t[8]=an(Ge((...f)=>e.handleEsc&&e.handleEsc(...f),["stop","prevent"]),["esc"])),t[9]||(t[9]=an(Ge((...f)=>e.handleDel&&e.handleDel(...f),["stop"]),["delete"]))],onClick:t[10]||(t[10]=Ge((...f)=>e.toggleMenu&&e.toggleMenu(...f),["stop"]))},null,46,t7),e.filterable?(x(),B("span",{key:0,ref:"calculatorRef","aria-hidden":"true",class:T(e.nsSelect.e("input-calculator")),textContent:Se(e.states.inputValue)},null,10,n7)):te("v-if",!0)],2),e.shouldShowPlaceholder?(x(),B("div",{key:1,class:T([e.nsSelect.e("selected-item"),e.nsSelect.e("placeholder"),e.nsSelect.is("transparent",!e.hasModelValue||e.expanded&&!e.states.inputValue)])},[e.hasModelValue?ee(e.$slots,"label",{key:0,index:e.allOptionsValueMap.get(e.modelValue)?.index??-1,label:e.currentPlaceholder,value:e.modelValue},()=>[H("span",null,Se(e.currentPlaceholder),1)]):(x(),B("span",a7,Se(e.currentPlaceholder),1))],2)):te("v-if",!0)],2),H("div",{ref:"suffixRef",class:T(e.nsSelect.e("suffix"))},[e.iconComponent?ct((x(),oe(u,{key:0,class:T([e.nsSelect.e("caret"),e.nsInput.e("icon"),e.iconReverse])},{default:J(()=>[(x(),oe(it(e.iconComponent)))]),_:1},8,["class"])),[[Pt,!e.showClearBtn]]):te("v-if",!0),e.showClearBtn&&e.clearIcon?(x(),oe(u,{key:1,class:T([e.nsSelect.e("caret"),e.nsInput.e("icon"),e.nsSelect.e("clear")]),onClick:Ge(e.handleClear,["prevent","stop"])},{default:J(()=>[(x(),oe(it(e.clearIcon)))]),_:1},8,["class","onClick"])):te("v-if",!0),e.validateState&&e.validateIcon&&e.needStatusIcon?(x(),oe(u,{key:2,class:T([e.nsInput.e("icon"),e.nsInput.e("validateIcon"),e.nsInput.is("loading",e.validateState==="validating")])},{default:J(()=>[(x(),oe(it(e.validateIcon)))]),_:1},8,["class"])):te("v-if",!0)],2)],2)]),content:J(()=>[Y(c,{id:e.contentId,ref:"menuRef",data:e.filteredOptions,width:e.popperSize-e.BORDER_HORIZONTAL_WIDTH,"hovering-index":e.states.hoveringIndex,"scrollbar-always-on":e.scrollbarAlwaysOn,"aria-label":e.ariaLabel},ua({default:J(f=>[ee(e.$slots,"default",Jo(Zo(f)))]),_:2},[e.$slots.header?{name:"header",fn:J(()=>[H("div",{class:T(e.nsSelect.be("dropdown","header")),onClick:t[12]||(t[12]=Ge(()=>{},["stop"]))},[ee(e.$slots,"header")],2)]),key:"0"}:void 0,e.$slots.loading&&e.loading?{name:"loading",fn:J(()=>[H("div",{class:T(e.nsSelect.be("dropdown","loading"))},[ee(e.$slots,"loading")],2)]),key:"1"}:e.loading||e.filteredOptions.length===0?{name:"empty",fn:J(()=>[H("div",{class:T(e.nsSelect.be("dropdown","empty"))},[ee(e.$slots,"empty",{},()=>[H("span",null,Se(e.emptyText),1)])],2)]),key:"2"}:void 0,e.$slots.footer?{name:"footer",fn:J(()=>[H("div",{class:T(e.nsSelect.be("dropdown","footer")),onClick:t[13]||(t[13]=Ge(()=>{},["stop"]))},[ee(e.$slots,"footer")],2)]),key:"3"}:void 0]),1032,["id","data","width","hovering-index","scrollbar-always-on","aria-label"])]),_:3},8,["visible","teleported","popper-class","popper-style","popper-options","fallback-placements","effect","placement","transition","persistent","append-to","show-arrow","offset","onBeforeShow"])],34)),[[d,e.handleClickOutside,e.popperRef]])}var s7=$n(e7,[["render",o7]]);const r7=st(s7),l7=Ce({animated:Boolean,count:{type:Number,default:1},rows:{type:Number,default:3},loading:{type:Boolean,default:!0},throttle:{type:G([Number,Object])}}),i7=Ce({variant:{type:String,values:["circle","rect","h1","h3","text","caption","p","image","button"],default:"text"}});var u7=se({name:"ElSkeletonItem",__name:"skeleton-item",props:i7,setup(e){const t=fe("skeleton");return(n,a)=>(x(),B("div",{class:T([i(t).e("item"),i(t).e(e.variant)])},[e.variant==="image"?(x(),oe(i(p3),{key:0})):te("v-if",!0)],2))}}),gd=u7,c7=se({name:"ElSkeleton",__name:"skeleton",props:l7,setup(e,{expose:t}){const n=e,a=fe("skeleton"),o=gA(Vt(n,"loading"),n.throttle);return t({uiLoading:o}),(s,r)=>i(o)?(x(),B("div",dt({key:0,class:[i(a).b(),i(a).is("animated",e.animated)]},s.$attrs),[(x(!0),B(Fe,null,yt(e.count,l=>(x(),B(Fe,{key:l},[i(o)?ee(s.$slots,"template",{key:l},()=>[Y(gd,{class:T(i(a).is("first")),variant:"p"},null,8,["class"]),(x(!0),B(Fe,null,yt(e.rows,u=>(x(),oe(gd,{key:u,class:T([i(a).e("paragraph"),i(a).is("last",u===e.rows&&e.rows>1)]),variant:"p"},null,8,["class"]))),128))]):te("v-if",!0)],64))),128))],16)):ee(s.$slots,"default",Jo(dt({key:1},s.$attrs)))}}),d7=c7;const f7=st(d7,{SkeletonItem:gd}),p7=tn(gd),sE=Symbol("sliderContextKey"),h7=Ce({modelValue:{type:G([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:!0},size:Tn,inputSize:Tn,showStops:Boolean,showTooltip:{type:Boolean,default:!0},formatTooltip:{type:G(Function),default:void 0},disabled:{type:Boolean,default:void 0},range:Boolean,vertical:Boolean,height:String,rangeStartLabel:{type:String,default:void 0},rangeEndLabel:{type:String,default:void 0},formatValueText:{type:G(Function),default:void 0},tooltipClass:{type:String,default:void 0},placement:{type:String,values:Lo,default:"top"},marks:{type:G(Object)},validateEvent:{type:Boolean,default:!0},persistent:{type:Boolean,default:!0},...aa(["ariaLabel"])}),sp=e=>He(e)||ye(e)&&e.every(He),v7={[tt]:sp,[wn]:sp,[bt]:sp},m7=(e,t,n)=>{const a=M();return ht(async()=>{e.range?(ye(e.modelValue)?(t.firstValue=Math.max(e.min,e.modelValue[0]),t.secondValue=Math.min(e.max,e.modelValue[1])):(t.firstValue=e.min,t.secondValue=e.max),t.oldValue=[t.firstValue,t.secondValue]):(!He(e.modelValue)||Number.isNaN(e.modelValue)?t.firstValue=e.min:t.firstValue=Math.min(e.max,Math.max(e.min,e.modelValue)),t.oldValue=t.firstValue),Ft(window,"resize",n),await Ne(),n()}),{sliderWrapper:a}},g7=e=>w(()=>e.marks?Object.keys(e.marks).map(Number.parseFloat).sort((t,n)=>t-n).filter(t=>t<=e.max&&t>=e.min).map(t=>({point:t,position:(t-e.min)*100/(e.max-e.min),mark:e.marks[t]})):[]),b7=(e,t,n)=>{const{formItem:a}=Dn(),o=Xt(),s=M(),r=M(),l={firstButton:s,secondButton:r},u=ln(),c=w(()=>Math.min(t.firstValue,t.secondValue)),d=w(()=>Math.max(t.firstValue,t.secondValue)),f=w(()=>e.range?`${100*(d.value-c.value)/(e.max-e.min)}%`:`${100*(t.firstValue-e.min)/(e.max-e.min)}%`),v=w(()=>e.range?`${100*(c.value-e.min)/(e.max-e.min)}%`:"0%"),g=w(()=>e.vertical?{height:e.height}:{}),p=w(()=>e.vertical?{height:f.value,bottom:v.value}:{width:f.value,left:v.value}),h=()=>{o.value&&(t.sliderSize=o.value.getBoundingClientRect()[e.vertical?"height":"width"])},m=A=>{const _=e.min+A*(e.max-e.min)/100;if(!e.range)return s;let V;return Math.abs(c.value-_)t.secondValue?"firstButton":"secondButton",l[V]},b=A=>{const _=m(A);return _.value.setPosition(A),_},k=A=>{t.firstValue=A??e.min,S(e.range?[c.value,d.value]:A??e.min)},y=A=>{t.secondValue=A,e.range&&S([c.value,d.value])},S=A=>{n(tt,A),n(wn,A)},C=async()=>{await Ne(),n(bt,e.range?[c.value,d.value]:e.modelValue)},E=A=>{if(u.value||t.dragging)return;h();let _=0;if(e.vertical){const V=A.touches?.item(0)?.clientY??A.clientY;_=(o.value.getBoundingClientRect().bottom-V)/t.sliderSize*100}else _=((A.touches?.item(0)?.clientX??A.clientX)-o.value.getBoundingClientRect().left)/t.sliderSize*100;if(!(_<0||_>100))return b(_)};return{elFormItem:a,slider:o,firstButton:s,secondButton:r,sliderDisabled:u,minValue:c,maxValue:d,runwayStyle:g,barStyle:p,resetSize:h,setPosition:b,emitChange:C,onSliderWrapperPrevent:A=>{(l.firstButton.value?.dragging||l.secondButton.value?.dragging)&&A.preventDefault()},onSliderClick:A=>{E(A)&&C()},onSliderDown:async A=>{const _=E(A);_&&(await Ne(),_.value.onButtonDown(A))},onSliderMarkerDown:A=>{u.value||t.dragging||b(A)&&C()},setFirstValue:k,setSecondValue:y}},y7=(e,t,n,a)=>({stops:w(()=>{if(!e.showStops||e.min>e.max)return[];if(e.step===0)return pt("ElSlider","step should not be 0."),[];const r=Math.ceil((e.max-e.min)/e.step),l=100*e.step/(e.max-e.min),u=Array.from({length:r-1}).map((c,d)=>(d+1)*l);return e.range?u.filter(c=>c<100*(n.value-e.min)/(e.max-e.min)||c>100*(a.value-e.min)/(e.max-e.min)):u.filter(c=>c>100*(t.firstValue-e.min)/(e.max-e.min))}),getStopStyle:r=>e.vertical?{bottom:`${r}%`}:{left:`${r}%`}}),w7=(e,t,n,a,o,s)=>{const r=c=>{o(tt,c),o(wn,c)},l=()=>e.range?![n.value,a.value].every((c,d)=>c===t.oldValue[d]):e.modelValue!==t.oldValue,u=()=>{e.min>e.max&&en("Slider","min should not be greater than max.");const c=e.modelValue;e.range&&ye(c)?c[1]e.max?r([e.max,e.max]):c[0]e.max?r([c[0],e.max]):(t.firstValue=c[0],t.secondValue=c[1],l()&&(e.validateEvent&&s?.validate?.("change").catch(d=>pt(d)),t.oldValue=c.slice())):!e.range&&He(c)&&!Number.isNaN(c)&&(ce.max?r(e.max):(t.firstValue=c,l()&&(e.validateEvent&&s?.validate?.("change").catch(d=>pt(d)),t.oldValue=c)))};u(),le(()=>t.dragging,c=>{c||u()}),le(()=>e.modelValue,(c,d)=>{t.dragging||ye(c)&&ye(d)&&c.every((f,v)=>f===d[v])&&t.firstValue===c[0]&&t.secondValue===c[1]||u()},{deep:!0}),le(()=>[e.min,e.max],()=>{u()})},S7=(e,t,n)=>{const a=M(),o=M(!1),s=w(()=>t.value instanceof Function);return{tooltip:a,tooltipVisible:o,formatValue:w(()=>s.value&&t.value(e.modelValue)||e.modelValue),displayTooltip:Po(()=>{n.value&&(o.value=!0)},50),hideTooltip:Po(()=>{n.value&&(o.value=!1)},50)}},C7=(e,t,n)=>{const{disabled:a,min:o,max:s,step:r,showTooltip:l,persistent:u,precision:c,sliderSize:d,formatTooltip:f,emitChange:v,resetSize:g,updateDragging:p}=_e(sE),{tooltip:h,tooltipVisible:m,formatValue:b,displayTooltip:k,hideTooltip:y}=S7(e,f,l),S=M(),C=w(()=>`${(e.modelValue-o.value)/(s.value-o.value)*100}%`),E=w(()=>e.vertical?{bottom:C.value}:{left:C.value}),$=()=>{t.hovering=!0,k()},O=()=>{t.hovering=!1,t.dragging||y()},R=j=>{a.value||(j.preventDefault(),L(j),window.addEventListener("mousemove",D),window.addEventListener("touchmove",D),window.addEventListener("mouseup",F),window.addEventListener("touchend",F),window.addEventListener("contextmenu",F),S.value.focus())},N=j=>{a.value||(t.newPosition=Number.parseFloat(C.value)+j/(s.value-o.value)*100,q(t.newPosition),v())},A=()=>{N(-r.value)},_=()=>{N(r.value)},V=()=>{N(-r.value*4)},z=()=>{N(r.value*4)},U=()=>{a.value||(q(0),v())},W=()=>{a.value||(q(100),v())},P=j=>{const X=jt(j);let Q=!0;switch(X){case we.left:case we.down:A();break;case we.right:case we.up:_();break;case we.home:U();break;case we.end:W();break;case we.pageDown:V();break;case we.pageUp:z();break;default:Q=!1;break}Q&&j.preventDefault()},I=j=>{let X,Q;return j.type.startsWith("touch")?(Q=j.touches[0].clientY,X=j.touches[0].clientX):(Q=j.clientY,X=j.clientX),{clientX:X,clientY:Q}},L=j=>{t.dragging=!0,t.isClick=!0;const{clientX:X,clientY:Q}=I(j);e.vertical?t.startY=Q:t.startX=X,t.startPosition=Number.parseFloat(C.value),t.newPosition=t.startPosition},D=j=>{if(t.dragging){t.isClick=!1,k(),g();let X;const{clientX:Q,clientY:he}=I(j);e.vertical?(t.currentY=he,X=(t.startY-t.currentY)/d.value*100):(t.currentX=Q,X=(t.currentX-t.startX)/d.value*100),t.newPosition=t.startPosition+X,q(t.newPosition)}},F=()=>{t.dragging&&(setTimeout(()=>{t.dragging=!1,t.hovering||y(),t.isClick||q(t.newPosition),v()},0),window.removeEventListener("mousemove",D),window.removeEventListener("touchmove",D),window.removeEventListener("mouseup",F),window.removeEventListener("touchend",F),window.removeEventListener("contextmenu",F))},q=async j=>{if(j===null||Number.isNaN(+j))return;j=nr(j,0,100);const X=Math.floor((s.value-o.value)/r.value),Q=X*r.value/(s.value-o.value)*100,he=Q+(100-Q)/2;let ue;if(jt.dragging,j=>{p(j)}),Ft(S,"touchstart",R,{passive:!1}),{disabled:a,button:S,tooltip:h,tooltipVisible:m,showTooltip:l,persistent:u,wrapperStyle:E,formatValue:b,handleMouseEnter:$,handleMouseLeave:O,onButtonDown:R,onKeyDown:P,setPosition:q}},k7=Ce({modelValue:{type:Number,default:0},vertical:Boolean,tooltipClass:String,placement:{type:String,values:Lo,default:"top"}}),E7={[tt]:e=>He(e)},x7=["tabindex"];var T7=se({name:"ElSliderButton",__name:"button",props:k7,emits:E7,setup(e,{expose:t,emit:n}){const a=e,o=n,s=fe("slider"),r=At({hovering:!1,dragging:!1,isClick:!1,startX:0,currentX:0,startY:0,currentY:0,startPosition:0,newPosition:0,oldValue:a.modelValue}),l=w(()=>f.value?v.value:!1),{disabled:u,button:c,tooltip:d,showTooltip:f,persistent:v,tooltipVisible:g,wrapperStyle:p,formatValue:h,handleMouseEnter:m,handleMouseLeave:b,onButtonDown:k,onKeyDown:y,setPosition:S}=C7(a,r,o),{hovering:C,dragging:E}=Mn(r);return t({onButtonDown:k,onKeyDown:y,setPosition:S,hovering:C,dragging:E}),($,O)=>(x(),B("div",{ref_key:"button",ref:c,class:T([i(s).e("button-wrapper"),{hover:i(C),dragging:i(E)}]),style:Ke(i(p)),tabindex:i(u)?void 0:0,onMouseenter:O[0]||(O[0]=(...R)=>i(m)&&i(m)(...R)),onMouseleave:O[1]||(O[1]=(...R)=>i(b)&&i(b)(...R)),onMousedown:O[2]||(O[2]=(...R)=>i(k)&&i(k)(...R)),onFocus:O[3]||(O[3]=(...R)=>i(m)&&i(m)(...R)),onBlur:O[4]||(O[4]=(...R)=>i(b)&&i(b)(...R)),onKeydown:O[5]||(O[5]=(...R)=>i(y)&&i(y)(...R))},[Y(i(Ln),{ref_key:"tooltip",ref:d,visible:i(g),placement:$.placement,"fallback-placements":["top","bottom","right","left"],"stop-popper-mouse-event":!1,"popper-class":$.tooltipClass,disabled:!i(f),persistent:l.value},{content:J(()=>[H("span",null,Se(i(h)),1)]),default:J(()=>[H("div",{class:T([i(s).e("button"),{hover:i(C),dragging:i(E)}])},null,2)]),_:1},8,["visible","placement","popper-class","disabled","persistent"])],46,x7))}}),E0=T7;const $7=Ce({mark:{type:G([String,Object]),default:void 0}});var O7=se({name:"ElSliderMarker",props:$7,setup(e){const t=fe("slider"),n=w(()=>Le(e.mark)?e.mark:e.mark.label),a=w(()=>Le(e.mark)?void 0:e.mark.style);return()=>qe("div",{class:t.e("marks-text"),style:a.value},n.value)}});const N7=["id","role","aria-label","aria-labelledby"],R7={key:1};var I7=se({name:"ElSlider",__name:"slider",props:h7,emits:v7,setup(e,{expose:t,emit:n}){const a=e,o=n,s=fe("slider"),{t:r}=Ct(),l=At({firstValue:0,secondValue:0,oldValue:0,dragging:!1,sliderSize:1}),{elFormItem:u,slider:c,firstButton:d,secondButton:f,sliderDisabled:v,minValue:g,maxValue:p,runwayStyle:h,barStyle:m,resetSize:b,emitChange:k,onSliderWrapperPrevent:y,onSliderClick:S,onSliderDown:C,onSliderMarkerDown:E,setFirstValue:$,setSecondValue:O}=b7(a,l,o),{stops:R,getStopStyle:N}=y7(a,l,g,p),{inputId:A,isLabeledByFormItem:_}=Ia(a,{formItemContext:u}),V=Sn(),z=w(()=>a.inputSize||V.value),U=w(()=>a.ariaLabel||r("el.slider.defaultLabel",{min:a.min,max:a.max})),W=w(()=>a.range?a.rangeStartLabel||r("el.slider.defaultRangeStartLabel"):U.value),P=w(()=>a.formatValueText?a.formatValueText(X.value):`${X.value}`),I=w(()=>a.rangeEndLabel||r("el.slider.defaultRangeEndLabel")),L=w(()=>a.formatValueText?a.formatValueText(Q.value):`${Q.value}`),D=w(()=>[s.b(),s.m(V.value),s.is("vertical",a.vertical),{[s.m("with-input")]:a.showInput}]),F=g7(a);w7(a,l,g,p,o,u);const q=w(()=>{const ge=[a.min,a.max,a.step].map(ie=>{const ae=`${ie}`.split(".")[1];return ae?ae.length:0});return Math.max.apply(null,ge)}),{sliderWrapper:j}=m7(a,l,b),{firstValue:X,secondValue:Q,sliderSize:he}=Mn(l),ue=ge=>{l.dragging=ge};return Ft(j,"touchstart",y,{passive:!1}),Ft(j,"touchmove",y,{passive:!1}),St(sE,{...Mn(a),sliderSize:he,disabled:v,precision:q,emitChange:k,resetSize:b,updateDragging:ue}),t({onSliderClick:S}),(ge,ie)=>(x(),B("div",{id:ge.range?i(A):void 0,ref_key:"sliderWrapper",ref:j,class:T(D.value),role:ge.range?"group":void 0,"aria-label":ge.range&&!i(_)?U.value:void 0,"aria-labelledby":ge.range&&i(_)?i(u)?.labelId:void 0},[H("div",{ref_key:"slider",ref:c,class:T([i(s).e("runway"),{"show-input":ge.showInput&&!ge.range},i(s).is("disabled",i(v))]),style:Ke(i(h)),onMousedown:ie[0]||(ie[0]=(...ae)=>i(C)&&i(C)(...ae)),onTouchstartPassive:ie[1]||(ie[1]=(...ae)=>i(C)&&i(C)(...ae))},[H("div",{class:T(i(s).e("bar")),style:Ke(i(m))},null,6),Y(E0,{id:ge.range?void 0:i(A),ref_key:"firstButton",ref:d,"model-value":i(X),vertical:ge.vertical,"tooltip-class":ge.tooltipClass,placement:ge.placement,role:"slider","aria-label":ge.range||!i(_)?W.value:void 0,"aria-labelledby":!ge.range&&i(_)?i(u)?.labelId:void 0,"aria-valuemin":ge.min,"aria-valuemax":ge.range?i(Q):ge.max,"aria-valuenow":i(X),"aria-valuetext":P.value,"aria-orientation":ge.vertical?"vertical":"horizontal","aria-disabled":i(v),"onUpdate:modelValue":i($)},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"]),ge.range?(x(),oe(E0,{key:0,ref_key:"secondButton",ref:f,"model-value":i(Q),vertical:ge.vertical,"tooltip-class":ge.tooltipClass,placement:ge.placement,role:"slider","aria-label":I.value,"aria-valuemin":i(X),"aria-valuemax":ge.max,"aria-valuenow":i(Q),"aria-valuetext":L.value,"aria-orientation":ge.vertical?"vertical":"horizontal","aria-disabled":i(v),"onUpdate:modelValue":i(O)},null,8,["model-value","vertical","tooltip-class","placement","aria-label","aria-valuemin","aria-valuemax","aria-valuenow","aria-valuetext","aria-orientation","aria-disabled","onUpdate:modelValue"])):te("v-if",!0),ge.showStops?(x(),B("div",R7,[(x(!0),B(Fe,null,yt(i(R),(ae,ne)=>(x(),B("div",{key:ne,class:T(i(s).e("stop")),style:Ke(i(N)(ae))},null,6))),128))])):te("v-if",!0),i(F).length>0?(x(),B(Fe,{key:2},[H("div",null,[(x(!0),B(Fe,null,yt(i(F),(ae,ne)=>(x(),B("div",{key:ne,style:Ke(i(N)(ae.position)),class:T([i(s).e("stop"),i(s).e("marks-stop")])},null,6))),128))]),H("div",{class:T(i(s).e("marks"))},[(x(!0),B(Fe,null,yt(i(F),(ae,ne)=>(x(),oe(i(O7),{key:ne,mark:ae.mark,style:Ke(i(N)(ae.position)),onMousedown:Ge(K=>i(E)(ae.position),["stop"])},null,8,["mark","style","onMousedown"]))),128))],2)],64)):te("v-if",!0)],38),ge.showInput&&!ge.range?(x(),oe(i(_2),{key:0,ref:"input","model-value":i(X),class:T(i(s).e("input")),step:ge.step,disabled:i(v),controls:ge.showInputControls,min:ge.min,max:ge.max,precision:q.value,size:z.value,"onUpdate:modelValue":i($),onChange:i(k)},null,8,["model-value","class","step","disabled","controls","min","max","precision","size","onUpdate:modelValue","onChange"])):te("v-if",!0)],10,N7))}}),P7=I7;const M7=st(P7),_7=Ce({prefixCls:{type:String}}),x0=se({name:"ElSpaceItem",props:_7,setup(e,{slots:t}){const n=fe("space"),a=w(()=>`${e.prefixCls||n.b()}__item`);return()=>qe("div",{class:a.value},ee(t,"default"))}}),T0={small:8,default:12,large:16};function A7(e){const t=fe("space"),n=w(()=>[t.b(),t.m(e.direction),e.class]),a=M(0),o=M(0),s=w(()=>[e.wrap||e.fill?{flexWrap:"wrap"}:{},{alignItems:e.alignment},{rowGap:`${o.value}px`,columnGap:`${a.value}px`},e.style]),r=w(()=>e.fill?{flexGrow:1,minWidth:`${e.fillRatio}%`}:{});return wa(()=>{const{size:l="small",wrap:u,direction:c,fill:d}=e;if(ye(l)){const[f=0,v=0]=l;a.value=f,o.value=v}else{let f;He(l)?f=l:f=T0[l||"small"]||T0.small,(u||d)&&c==="horizontal"?a.value=o.value=f:c==="horizontal"?(a.value=f,o.value=0):(o.value=f,a.value=0)}}),{classes:n,containerStyle:s,itemStyle:r}}const L7=Ce({direction:{type:String,values:["horizontal","vertical"],default:"horizontal"},class:{type:G([String,Object,Array]),default:""},style:{type:G([String,Array,Object]),default:""},alignment:{type:G(String),default:"center"},prefixCls:{type:String},spacer:{type:G([Object,String,Number,Array]),default:null,validator:e=>Ut(e)||He(e)||Le(e)},wrap:Boolean,fill:Boolean,fillRatio:{type:Number,default:100},size:{type:[String,Array,Number],values:ro,validator:e=>He(e)||ye(e)&&e.length===2&&e.every(He)}}),D7=se({name:"ElSpace",props:L7,setup(e,{slots:t}){const{classes:n,containerStyle:a,itemStyle:o}=A7(e);function s(r,l="",u=[]){const{prefixCls:c}=e;return r.forEach((d,f)=>{Wp(d)?ye(d.children)&&d.children.forEach((v,g)=>{Wp(v)&&ye(v.children)?s(v.children,`${l+g}-`,u):Ut(v)&&v?.type===mn?u.push(v):u.push(Y(x0,{style:o.value,prefixCls:c,key:`nested-${l+g}`},{default:()=>[v]},Wa.PROPS|Wa.STYLE,["style","prefixCls"]))}):m4(d)&&u.push(Y(x0,{style:o.value,prefixCls:c,key:`LoopKey${l+f}`},{default:()=>[d]},Wa.PROPS|Wa.STYLE,["style","prefixCls"]))}),u}return()=>{const{spacer:r,direction:l}=e,u=ee(t,"default",{key:0},()=>[]);if((u.children??[]).length===0)return null;if(ye(u.children)){let c=s(u.children);if(r){const d=c.length-1;c=c.reduce((f,v,g)=>{const p=[...f,v];return g!==d&&p.push(Y("span",{style:[o.value,l==="vertical"?"width: 100%":null],key:g},[Ut(r)?r:wt(r,Wa.TEXT)],Wa.STYLE)),p},[])}return Y("div",{class:n.value,style:a.value},c,Wa.STYLE|Wa.CLASS)}return u.children}}}),B7=st(D7),F7=Ce({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"}}),V7={[bt]:(e,t)=>[e,t].every(He)},rE="ElSteps",z7=Ce({title:{type:String,default:""},icon:{type:Kt},description:{type:String,default:""},status:{type:String,values:["","wait","process","finish","error","success"],default:""}});var H7=se({name:"ElSteps",__name:"steps",props:F7,emits:V7,setup(e,{emit:t}){const n=e,a=t,o=fe("steps"),{children:s,addChild:r,removeChild:l,ChildrenSorter:u}=Qd(ft(),"ElStep");return le(s,()=>{s.value.forEach((c,d)=>{c.setIndex(d)})}),St(rE,{props:n,steps:s,addStep:r,removeStep:l}),le(()=>n.active,(c,d)=>{a(bt,c,d)}),(c,d)=>(x(),B("div",{class:T([i(o).b(),i(o).m(e.simple?"simple":e.direction)])},[ee(c.$slots,"default"),Y(i(u))],2))}}),K7=H7,W7=se({name:"ElStep",__name:"item",props:z7,setup(e){const t=e,n=fe("step"),a=M(-1),o=M({}),s=M(""),r=_e(rE),l=ft();let u=0,c=0;ht(()=>{le([()=>r.props.active,()=>r.props.processStatus,()=>r.props.finishStatus],([O],[R])=>{c=R||0,u=O-c,E(O)},{immediate:!0})});const d=w(()=>t.status||s.value),f=w(()=>{const O=r.steps.value[a.value-1];return O?O.internalStatus.value:"wait"}),v=w(()=>r.props.alignCenter),g=w(()=>r.props.direction==="vertical"),p=w(()=>r.props.simple),h=w(()=>r.steps.value.length),m=w(()=>r.steps.value[h.value-1]?.uid===l.uid),b=w(()=>p.value?"":r.props.space),k=w(()=>[n.b(),n.is(p.value?"simple":r.props.direction),n.is("flex",m.value&&!b.value&&!v.value),n.is("center",v.value&&!g.value&&!p.value)]),y=w(()=>{const O={flexBasis:He(b.value)?`${b.value}px`:b.value?b.value:`${100/(h.value-(v.value?0:1))}%`};return g.value||m.value&&(O.maxWidth=`${100/h.value}%`),O}),S=O=>{a.value=O},C=O=>{const R=O==="wait",N={transitionDelay:`${Math.abs(u)===1?0:u>0?(a.value+1-c)*150:-(a.value+1-r.props.active)*150}ms`},A=O===r.props.processStatus||R?0:100;N.borderWidth=A&&!p.value?"1px":0,N[r.props.direction==="vertical"?"height":"width"]=`${A}%`,o.value=N},E=O=>{O>a.value?s.value=r.props.finishStatus:O===a.value&&f.value!=="error"?s.value=r.props.processStatus:s.value="wait";const R=r.steps.value[a.value-1];R&&R.calcProgress(s.value)},$={uid:l.uid,getVnode:()=>l.vnode,currentStatus:d,internalStatus:s,setIndex:S,calcProgress:C};return r.addStep($),Bt(()=>{r.removeStep($)}),(O,R)=>(x(),B("div",{style:Ke(y.value),class:T(k.value)},[te(" icon & line "),H("div",{class:T([i(n).e("head"),i(n).is(d.value)])},[p.value?te("v-if",!0):(x(),B("div",{key:0,class:T(i(n).e("line"))},[H("i",{class:T(i(n).e("line-inner")),style:Ke(o.value)},null,6)],2)),H("div",{class:T([i(n).e("icon"),i(n).is(e.icon||O.$slots.icon?"icon":"text")])},[ee(O.$slots,"icon",{},()=>[e.icon?(x(),oe(i(De),{key:0,class:T(i(n).e("icon-inner"))},{default:J(()=>[(x(),oe(it(e.icon)))]),_:1},8,["class"])):d.value==="success"?(x(),oe(i(De),{key:1,class:T([i(n).e("icon-inner"),i(n).is("status")])},{default:J(()=>[Y(i(vu))]),_:1},8,["class"])):d.value==="error"?(x(),oe(i(De),{key:2,class:T([i(n).e("icon-inner"),i(n).is("status")])},{default:J(()=>[Y(i(Ha))]),_:1},8,["class"])):p.value?te("v-if",!0):(x(),B("div",{key:3,class:T(i(n).e("icon-inner"))},Se(a.value+1),3))])],2)],2),te(" title & description "),H("div",{class:T(i(n).e("main"))},[H("div",{class:T([i(n).e("title"),i(n).is(d.value)])},[ee(O.$slots,"title",{},()=>[wt(Se(e.title),1)])],2),p.value?(x(),B("div",{key:0,class:T(i(n).e("arrow"))},null,2)):(x(),B("div",{key:1,class:T([i(n).e("description"),i(n).is(d.value)])},[ee(O.$slots,"description",{},()=>[wt(Se(e.description),1)])],2))],2)],6))}}),lE=W7;const j7=st(K7,{Step:lE}),U7=tn(lE),iE=e=>["",...ro].includes(e),q7=Ce({modelValue:{type:[Boolean,String,Number],default:!1},disabled:{type:Boolean,default:void 0},loading:Boolean,size:{type:String,validator:iE},width:{type:[String,Number],default:""},inlinePrompt:Boolean,inactiveActionIcon:{type:Kt},activeActionIcon:{type:Kt},activeIcon:{type:Kt},inactiveIcon:{type:Kt},activeText:{type:String,default:""},inactiveText:{type:String,default:""},activeValue:{type:[Boolean,String,Number],default:!0},inactiveValue:{type:[Boolean,String,Number],default:!1},name:{type:String,default:""},validateEvent:{type:Boolean,default:!0},beforeChange:{type:G(Function)},id:String,tabindex:{type:[String,Number]},...aa(["ariaLabel"])}),Y7={[tt]:e=>Ht(e)||Le(e)||He(e),[bt]:e=>Ht(e)||Le(e)||He(e),[wn]:e=>Ht(e)||Le(e)||He(e)},G7=["id","aria-checked","aria-disabled","aria-label","name","true-value","false-value","disabled","tabindex"],X7=["aria-hidden"],J7={key:1},Z7={key:1},Q7=["aria-hidden"],rp="ElSwitch";var eU=se({name:rp,__name:"switch",props:q7,emits:Y7,setup(e,{expose:t,emit:n}){const a=e,o=n,{formItem:s}=Dn(),r=Sn(),l=fe("switch"),{inputId:u}=Ia(a,{formItemContext:s}),c=ln(w(()=>{if(a.loading)return!0})),d=M(a.modelValue!==!1),f=Xt(),v=w(()=>[l.b(),l.m(r.value),l.is("disabled",c.value),l.is("checked",b.value)]),g=w(()=>[l.e("label"),l.em("label","left"),l.is("active",!b.value)]),p=w(()=>[l.e("label"),l.em("label","right"),l.is("active",b.value)]),h=w(()=>({width:rn(a.width)}));le(()=>a.modelValue,()=>{d.value=!0});const m=w(()=>d.value?a.modelValue:!1),b=w(()=>m.value===a.activeValue);[a.activeValue,a.inactiveValue].includes(m.value)||(o(tt,a.inactiveValue),o(bt,a.inactiveValue),o(wn,a.inactiveValue)),le(b,C=>{f.value.checked=C,a.validateEvent&&s?.validate?.("change").catch(E=>pt(E))});const k=()=>{const C=b.value?a.inactiveValue:a.activeValue;o(tt,C),o(bt,C),o(wn,C),Ne(()=>{f.value.checked=b.value})},y=()=>{if(c.value)return;const{beforeChange:C}=a;if(!C){k();return}const E=C();[vr(E),Ht(E)].includes(!0)||en(rp,"beforeChange must return type `Promise` or `boolean`"),vr(E)?E.then($=>{$&&k()}).catch($=>{pt(rp,`some error occurred: ${$}`)}):E&&k()},S=()=>{f.value?.focus?.()};return ht(()=>{f.value.checked=b.value}),t({focus:S,checked:b}),(C,E)=>(x(),B("div",{class:T(v.value),onClick:Ge(y,["prevent"])},[H("input",{id:i(u),ref_key:"input",ref:f,class:T(i(l).e("input")),type:"checkbox",role:"switch","aria-checked":b.value,"aria-disabled":i(c),"aria-label":e.ariaLabel,name:e.name,"true-value":e.activeValue,"false-value":e.inactiveValue,disabled:i(c),tabindex:e.tabindex,onChange:k,onKeydown:an(y,["enter"])},null,42,G7),!e.inlinePrompt&&(e.inactiveIcon||e.inactiveText||C.$slots.inactive)?(x(),B("span",{key:0,class:T(g.value)},[ee(C.$slots,"inactive",{},()=>[e.inactiveIcon?(x(),oe(i(De),{key:0},{default:J(()=>[(x(),oe(it(e.inactiveIcon)))]),_:1})):te("v-if",!0),!e.inactiveIcon&&e.inactiveText?(x(),B("span",{key:1,"aria-hidden":b.value},Se(e.inactiveText),9,X7)):te("v-if",!0)])],2)):te("v-if",!0),H("span",{class:T(i(l).e("core")),style:Ke(h.value)},[e.inlinePrompt?(x(),B("div",{key:0,class:T(i(l).e("inner"))},[b.value?(x(),B("div",{key:1,class:T(i(l).e("inner-wrapper"))},[ee(C.$slots,"active",{},()=>[e.activeIcon?(x(),oe(i(De),{key:0},{default:J(()=>[(x(),oe(it(e.activeIcon)))]),_:1})):te("v-if",!0),!e.activeIcon&&e.activeText?(x(),B("span",Z7,Se(e.activeText),1)):te("v-if",!0)])],2)):(x(),B("div",{key:0,class:T(i(l).e("inner-wrapper"))},[ee(C.$slots,"inactive",{},()=>[e.inactiveIcon?(x(),oe(i(De),{key:0},{default:J(()=>[(x(),oe(it(e.inactiveIcon)))]),_:1})):te("v-if",!0),!e.inactiveIcon&&e.inactiveText?(x(),B("span",J7,Se(e.inactiveText),1)):te("v-if",!0)])],2))],2)):te("v-if",!0),H("div",{class:T(i(l).e("action"))},[e.loading?(x(),oe(i(De),{key:0,class:T(i(l).is("loading"))},{default:J(()=>[Y(i(_o))]),_:1},8,["class"])):b.value?ee(C.$slots,"active-action",{key:1},()=>[e.activeActionIcon?(x(),oe(i(De),{key:0},{default:J(()=>[(x(),oe(it(e.activeActionIcon)))]),_:1})):te("v-if",!0)]):b.value?te("v-if",!0):ee(C.$slots,"inactive-action",{key:2},()=>[e.inactiveActionIcon?(x(),oe(i(De),{key:0},{default:J(()=>[(x(),oe(it(e.inactiveActionIcon)))]),_:1})):te("v-if",!0)])],2)],6),!e.inlinePrompt&&(e.activeIcon||e.activeText||C.$slots.active)?(x(),B("span",{key:1,class:T(p.value)},[ee(C.$slots,"active",{},()=>[e.activeIcon?(x(),oe(i(De),{key:0},{default:J(()=>[(x(),oe(it(e.activeIcon)))]),_:1})):te("v-if",!0),!e.activeIcon&&e.activeText?(x(),B("span",{key:1,"aria-hidden":!b.value},Se(e.activeText),9,Q7)):te("v-if",!0)])],2)):te("v-if",!0)],2))}}),tU=eU;const nU=st(tU),lp=function(e){return e.target?.closest("td")},aU=function(e,t,n,a,o){if(!t&&!a&&(!o||ye(o)&&!o.length))return e;Le(n)?n=n==="descending"?-1:1:n=n&&n<0?-1:1;const s=a?null:function(l,u){return o?RS(Rn(o),c=>Le(c)?yn(l,c):c(l,u,e)):(t!=="$key"&&nt(l)&&"$value"in l&&(l=l.$value),[nt(l)?t?yn(l,t):null:l])},r=function(l,u){if(a)return a(l.value,u.value);for(let c=0,d=l.key?.length??0;cu.key?.[c])return 1}return 0};return e.map((l,u)=>({value:l,index:u,key:s?s(l,u):null})).sort((l,u)=>{let c=r(l,u);return c||(c=l.index-u.index),c*+n}).map(l=>l.value)},uE=function(e,t){let n=null;return e.columns.forEach(a=>{a.id===t&&(n=a)}),n},oU=function(e,t){let n=null;for(let a=0;a{if(!e)throw new Error("Row is required when get row identity");if(Le(t)){if(!t.includes("."))return`${e[t]}`;const n=t.split(".");let a=e;for(const o of n)a=a[o];return`${a}`}else if(Ve(t))return t.call(null,e);return""},ol=function(e,t,n=!1,a="children"){const o=e||[],s={};return o.forEach((r,l)=>{if(s[Hn(r,t)]={row:r,index:l},n){const u=r[a];ye(u)&&Object.assign(s,ol(u,t,!0,a))}}),s};function sU(e,t){const n={};let a;for(a in e)n[a]=e[a];for(a in t)if(Rt(t,a)){const o=t[a];Tt(o)||(n[a]=o)}return n}function Im(e){return e===""||Tt(e)||(e=Number.parseInt(e,10),Number.isNaN(e)&&(e="")),e}function cE(e){return e===""||Tt(e)||(e=Im(e),Number.isNaN(e)&&(e=80)),e}function rU(e){return He(e)?e:Le(e)?/^\d+(?:px)?$/.test(e)?Number.parseInt(e,10):e:null}function lU(...e){return e.length===0?t=>t:e.length===1?e[0]:e.reduce((t,n)=>(...a)=>t(n(...a)))}function bd(e,t,n,a,o,s,r){let l=s??0,u=!1;const d=(()=>{if(!r)return e.indexOf(t);const h=Hn(t,r);return e.findIndex(m=>Hn(m,r)===h)})(),f=d!==-1,v=o?.call(null,t,l),g=h=>{h==="add"?e.push(t):e.splice(d,1),u=!0},p=h=>{let m=0;const b=a?.children&&h[a.children];return b&&ye(b)&&(m+=b.length,b.forEach(k=>{m+=p(k)})),m};return(!o||v)&&(Ht(n)?n&&!f?g("add"):!n&&f&&g("remove"):g(f?"remove":"add")),!a?.checkStrictly&&a?.children&&ye(t[a.children])&&t[a.children].forEach(h=>{const m=bd(e,h,n??!f,a,o,l+1,r);l+=p(h)+1,m&&(u=m)}),u}function iU(e,t,n="children",a="hasChildren",o=!1){const s=l=>!(ye(l)&&l.length);function r(l,u,c){t(l,u,c),u.forEach(d=>{if(d[a]&&o){t(d,null,c+1);return}const f=d[n];s(f)||r(d,f,c+1)})}e.forEach(l=>{if(l[a]&&o){t(l,null,0);return}const u=l[n];s(u)||r(l,u,0)})}const uU=(e,t,n,a)=>{const o={strategy:"fixed",...e.popperOptions},s=Ve(a?.tooltipFormatter)?a.tooltipFormatter({row:n,column:a,cellValue:Ms(n,a.property).value}):void 0;return Ut(s)?{slotContent:s,content:null,...e,popperOptions:o}:{slotContent:null,content:s??t,...e,popperOptions:o}};let pa=null;function cU(e,t,n,a,o,s){const r=uU(e,t,n,a),l={...r,slotContent:void 0};if(pa?.trigger===o){const g=pa.vm?.component;IS(g?.props,l),g&&r.slotContent&&(g.slots.content=()=>[r.slotContent]);return}pa?.();const u=s?.refs.tableWrapper,c=u?.dataset.prefix,d=Y(Ln,{virtualTriggering:!0,virtualRef:o,appendTo:u,placement:"top",transition:"none",offset:0,hideAfter:0,...l},r.slotContent?{content:()=>r.slotContent}:void 0);d.appContext={...s.appContext,...s};const f=document.createElement("div");Ls(d,f),d.component.exposed.onOpen();const v=u?.querySelector(`.${c}-scrollbar__wrap`);pa=()=>{d.component?.exposed?.onClose&&d.component.exposed.onClose(),Ls(null,f);const g=pa;v?.removeEventListener("scroll",g),g.trigger=void 0,g.vm=void 0,pa=null},pa.trigger=o??void 0,pa.vm=d,v?.addEventListener("scroll",pa)}function dE(e){return e.children?RS(e.children,dE):[e]}function O0(e,t){return e+t.colSpan}const fE=(e,t,n,a)=>{let o=0,s=e;const r=n.states.columns.value;if(a){const u=dE(a[e]);o=r.slice(0,r.indexOf(u[0])).reduce(O0,0),s=o+u.reduce(O0,0)-1}else o=e;let l;switch(t){case"left":s=r.length-n.states.rightFixedLeafColumnsLength.value&&(l="right");break;default:s=r.length-n.states.rightFixedLeafColumnsLength.value&&(l="right")}return l?{direction:l,start:o,after:s}:{}},Pm=(e,t,n,a,o,s=0)=>{const r=[],{direction:l,start:u,after:c}=fE(t,n,a,o);if(l){const d=l==="left";r.push(`${e}-fixed-column--${l}`),d&&c+s===a.states.fixedLeafColumnsLength.value-1?r.push("is-last-column"):!d&&u-s===a.states.columns.value.length-a.states.rightFixedLeafColumnsLength.value&&r.push("is-first-column")}return r};function N0(e,t){return e+(Kd(t.realWidth)||Number.isNaN(t.realWidth)?Number(t.width):t.realWidth)}const Mm=(e,t,n,a)=>{const{direction:o,start:s=0,after:r=0}=fE(e,t,n,a);if(!o)return;const l={},u=o==="left",c=n.states.columns.value;return u?l.left=c.slice(0,s).reduce(N0,0):l.right=c.slice(r+1).reverse().reduce(N0,0),l},El=(e,t)=>{e&&(Number.isNaN(e[t])||(e[t]=`${e[t]}px`))};function pE(e){return e.some(t=>Ut(t)?!(t.type===mn||t.type===Fe&&!pE(t.children)):!0)?e:null}function dU(e){const t=ft(),n=M(!1),a=M([]),o=(c,d)=>{const f=t.store.states.rowExpandable.value;return f?.(c,d)??!0};return{updateExpandRows:()=>{const c=e.data.value||[],d=e.rowKey.value;if(n.value)a.value=t.store.states.rowExpandable.value?c.filter(o):c.slice();else if(d){const f=ol(a.value,d);a.value=c.filter((v,g)=>!!f[Hn(v,d)]&&o(v,g))}else a.value=[]},toggleRowExpansion:(c,d)=>{const f=(e.data.value||[]).indexOf(c);f>-1&&!o(c,f)||bd(a.value,c,d,void 0,void 0,void 0,e.rowKey.value)&&t.emit("expand-change",c,a.value.slice())},setExpandRowKeys:c=>{t.store.assertRowKey();const d=e.data.value||[],f=e.rowKey.value,v=ol(d,f);a.value=c.reduce((g,p)=>{const h=v[p];return h&&o(h.row,h.index)&&g.push(h.row),g},[])},isRowExpanded:c=>{const d=e.rowKey.value;return d?!!ol(a.value,d)[Hn(c,d)]:a.value.includes(c)},states:{expandRows:a,defaultExpandAll:n}}}function fU(e){const t=ft(),n=M(null),a=M(null),o=c=>{t.store.assertRowKey(),n.value=c,r(c)},s=()=>{n.value=null},r=c=>{const{data:d,rowKey:f}=e,v=a.value;let g=null;f.value&&(g=(i(d)||[]).find(p=>Hn(p,f.value)===c)??null),a.value=g??null,t.emit("current-change",a.value,v)};return{setCurrentRowKey:o,restoreCurrentRowKey:s,setCurrentRowByKey:r,updateCurrentRow:c=>{const d=a.value;if(c&&c!==d){a.value=c,t.emit("current-change",a.value,d);return}!c&&d&&(a.value=null,t.emit("current-change",null,d))},updateCurrentRowData:()=>{const c=e.rowKey.value,d=e.data.value||[],f=a.value;f&&!d.includes(f)?c?r(Hn(f,c)):(a.value=null,t.emit("current-change",null,f)):n.value&&(r(n.value),s())},states:{_currentRowKey:n,currentRow:a}}}function pU(e){const t=M([]),n=M({}),a=M(16),o=M(!1),s=M({}),r=M("hasChildren"),l=M("children"),u=M(!1),c=ft(),d=w(()=>e.rowKey.value?v(e.data.value||[]):{}),f=w(()=>{const S=e.rowKey.value,C=Object.keys(s.value),E={};return C.length&&C.forEach($=>{if(s.value[$].length){const O={children:[]};s.value[$].forEach(R=>{const N=Hn(R,S);O.children.push(N),R[r.value]&&!E[N]&&(E[N]={children:[]})}),E[$]=O}}),E}),v=S=>{const C=e.rowKey.value,E={};return iU(S,($,O,R)=>{const N=Hn($,C);ye(O)?E[N]={children:O.map(A=>Hn(A,C)),level:R}:o.value&&(E[N]={children:[],lazy:!0,level:R})},l.value,r.value,o.value),E},g=(S=!1,C)=>{C||=c.store?.states.defaultExpandAll.value;const E=d.value,$=f.value,O=Object.keys(E),R={};if(O.length){const N=i(n),A=[],_=(z,U)=>{if(S)return t.value?C||t.value.includes(U):!!(C||z?.expanded);{const W=C||t.value&&t.value.includes(U);return!!(z?.expanded||W)}};O.forEach(z=>{const U=N[z],W={...E[z]};if(W.expanded=_(U,z),W.lazy){const{loaded:P=!1,loading:I=!1}=U||{};W.loaded=!!P,W.loading=!!I,A.push(z)}R[z]=W});const V=Object.keys($);o.value&&V.length&&A.length&&V.forEach(z=>{const U=N[z],W=$[z].children;if(A.includes(z)){if(R[z].children?.length!==0)throw new Error("[ElTable]children must be an empty array.");R[z].children=W}else{const{loaded:P=!1,loading:I=!1}=U||{};R[z]={lazy:!0,loaded:!!P,loading:!!I,expanded:_(U,z),children:W,level:void 0}}})}n.value=R,c.store?.updateTableScrollY()};le(()=>t.value,()=>{g(!0)}),le(()=>d.value,()=>{g()}),le(()=>f.value,()=>{g()});const p=S=>{t.value=S,g()},h=S=>o.value&&S&&"loaded"in S&&!S.loaded,m=(S,C)=>{c.store.assertRowKey();const E=e.rowKey.value,$=Hn(S,E),O=$&&n.value[$];if($&&O&&"expanded"in O){const R=O.expanded;C=Tt(C)?!O.expanded:C,n.value[$].expanded=C,R!==C&&c.emit("expand-change",S,C),C&&h(O)&&k(S,$,O),c.store.updateTableScrollY()}},b=S=>{c.store.assertRowKey();const C=e.rowKey.value,E=Hn(S,C),$=n.value[E];h($)?k(S,E,$):m(S,void 0)},k=(S,C,E)=>{const{load:$}=c.props;$&&!n.value[C].loaded&&(n.value[C].loading=!0,$(S,E,O=>{if(!ye(O))throw new TypeError("[ElTable] data must be an array");n.value[C].loading=!1,n.value[C].loaded=!0,n.value[C].expanded=!0,O.length&&(s.value[C]=O),c.emit("expand-change",S,!0)}))};return{loadData:k,loadOrToggle:b,toggleTreeExpansion:m,updateTreeExpandKeys:p,updateTreeData:g,updateKeyChildren:(S,C)=>{const{lazy:E,rowKey:$}=c.props;if(E){if(!$)throw new Error("[Table] rowKey is required in updateKeyChild");s.value[S]&&(s.value[S]=C)}},normalize:v,states:{expandRowKeys:t,treeData:n,indent:a,lazy:o,lazyTreeNodeMap:s,lazyColumnIdentifier:r,childrenColumnName:l,checkStrictly:u}}}const hU=(e,t)=>{const n=t.sortingColumn;return!n||Le(n.sortable)?e:aU(e,t.sortProp,t.sortOrder,n.sortMethod,n.sortBy)},Oc=e=>{const t=[];return e.forEach(n=>{n.children&&n.children.length>0?t.push.apply(t,Oc(n.children)):t.push(n)}),t};function vU(){const e=ft(),{size:t}=Mn(e.proxy?.$props),n=M(null),a=M([]),o=M([]),s=M(!1),r=M([]),l=M([]),u=M([]),c=M([]),d=M([]),f=M([]),v=M([]),g=M([]),p=[],h=M(0),m=M(0),b=M(0),k=M(!1),y=M([]),S=M(!1),C=M(!1),E=M(null),$=M(null),O=M({}),R=M(null),N=M(null),A=M(null),_=M(null),V=M(null),z=w(()=>n.value?ol(y.value,n.value):void 0);le(a,()=>{e.state&&(I(!1),e.props.tableLayout==="auto"&&e.refs.tableHeaderRef?.updateFixedColumnStyle())},{deep:!0});const U=()=>{if(!n.value)throw new Error("[ElTable] prop row-key is required")},W=Ue=>{Ue.children?.forEach(rt=>{rt.fixed=Ue.fixed,W(rt)})},P=()=>{r.value.forEach(de=>{W(de)}),c.value=r.value.filter(de=>[!0,"left"].includes(de.fixed));const Ue=r.value.find(de=>de.type==="selection");let rt;Ue&&Ue.fixed!=="right"&&!c.value.includes(Ue)&&r.value.indexOf(Ue)===0&&c.value.length&&(c.value.unshift(Ue),rt=!0),d.value=r.value.filter(de=>de.fixed==="right");const mt=r.value.filter(de=>(rt?de.type!=="selection":!0)&&!de.fixed);l.value=Array.from(c.value).concat(mt).concat(d.value);const kt=Oc(mt),be=Oc(c.value),ze=Oc(d.value);h.value=kt.length,m.value=be.length,b.value=ze.length,u.value=Array.from(be).concat(kt).concat(ze),s.value=c.value.length>0||d.value.length>0},I=(Ue,rt=!1)=>{Ue&&P(),rt?e.state.doLayout():e.state.debouncedUpdateLayout()},L=Ue=>z.value?!!z.value[Hn(Ue,n.value)]:y.value.includes(Ue),D=()=>{k.value=!1;const Ue=y.value;y.value=[],Ue.length&&e.emit("selection-change",[])},F=()=>{let Ue;if(n.value){Ue=[];const rt=e?.store?.states?.childrenColumnName.value,mt=ol(a.value,n.value,!0,rt);for(const kt in z.value)Rt(z.value,kt)&&!mt[kt]&&Ue.push(z.value[kt].row)}else Ue=y.value.filter(rt=>!a.value.includes(rt));if(Ue.length){const rt=y.value.filter(mt=>!Ue.includes(mt));y.value=rt,e.emit("selection-change",rt.slice())}},q=()=>(y.value||[]).slice(),j=(Ue,rt,mt=!0,kt=!1)=>{const be={children:e?.store?.states?.childrenColumnName.value,checkStrictly:e?.store?.states?.checkStrictly.value};if(bd(y.value,Ue,rt,be,kt?void 0:E.value,a.value.indexOf(Ue),n.value)){const ze=(y.value||[]).slice();mt&&e.emit("select",ze,Ue),e.emit("selection-change",ze)}},X=()=>{const Ue=C.value?!k.value:!(k.value||y.value.length);k.value=Ue;let rt=!1,mt=0;const kt=e?.store?.states?.rowKey.value,{childrenColumnName:be}=e.store.states,ze={children:be.value,checkStrictly:!1};a.value.forEach((de,Ye)=>{const $t=Ye+mt;bd(y.value,de,Ue,ze,E.value,$t,kt)&&(rt=!0),mt+=he(Hn(de,kt))}),rt&&e.emit("selection-change",y.value?y.value.slice():[]),e.emit("select-all",(y.value||[]).slice())},Q=()=>{if(a.value?.length===0){k.value=!1;return}const{childrenColumnName:Ue}=e.store.states;let rt=0,mt=0;const kt=ze=>{for(const de of ze){const Ye=E.value&&E.value.call(null,de,rt);if(L(de))mt++;else if(!E.value||Ye)return!1;if(rt++,de[Ue.value]?.length&&!kt(de[Ue.value]))return!1}return!0},be=kt(a.value||[]);k.value=mt===0?!1:be},he=Ue=>{if(!e||!e.store)return 0;const{treeData:rt}=e.store.states;let mt=0;const kt=rt.value[Ue]?.children;return kt&&(mt+=kt.length,kt.forEach(be=>{mt+=he(be)})),mt},ue=(Ue,rt)=>{const mt={};return Rn(Ue).forEach(kt=>{O.value[kt.id]=rt,mt[kt.columnKey||kt.id]=rt}),mt},ge=(Ue,rt,mt)=>{N.value&&N.value!==Ue&&(N.value.order=null),N.value=Ue,A.value=rt,_.value=mt},ie=()=>{let Ue=i(o);Object.keys(O.value).forEach(rt=>{const mt=O.value[rt];if(!mt||mt.length===0)return;const kt=uE({columns:u.value},rt);kt&&kt.filterMethod&&(Ue=Ue.filter(be=>mt.some(ze=>kt.filterMethod.call(null,ze,be,kt))))}),R.value=Ue},ae=()=>{a.value=hU(R.value??[],{sortingColumn:N.value,sortProp:A.value,sortOrder:_.value})},ne=(Ue=void 0)=>{Ue?.filter||ie(),ae()},K=Ue=>{const{tableHeaderRef:rt}=e.refs;if(!rt)return;const mt=Object.assign({},rt.filterPanels),kt=Object.keys(mt);if(kt.length)if(Le(Ue)&&(Ue=[Ue]),ye(Ue)){const be=Ue.map(ze=>oU({columns:u.value},ze));kt.forEach(ze=>{const de=be.find(Ye=>Ye.id===ze);de&&(de.filteredValue=[])}),e.store.commit("filterChange",{column:be,values:[],silent:!0,multi:!0})}else kt.forEach(be=>{const ze=u.value.find(de=>de.id===be);ze&&(ze.filteredValue=[])}),O.value={},e.store.commit("filterChange",{column:{},values:[],silent:!0})},Z=()=>{N.value&&(ge(null,null,null),e.store.commit("changeSortCondition",{silent:!0}))},{setExpandRowKeys:re,toggleRowExpansion:ce,updateExpandRows:ve,states:ke,isRowExpanded:Re}=dU({data:a,rowKey:n}),{updateTreeExpandKeys:Ie,toggleTreeExpansion:$e,updateTreeData:pe,updateKeyChildren:Ee,loadOrToggle:me,states:Me}=pU({data:a,rowKey:n}),{updateCurrentRowData:We,updateCurrentRow:Xe,setCurrentRowKey:Pe,states:Ae}=fU({data:a,rowKey:n});return{assertRowKey:U,updateColumns:P,scheduleLayout:I,isSelected:L,clearSelection:D,cleanSelection:F,getSelectionRows:q,toggleRowSelection:j,_toggleAllSelection:X,toggleAllSelection:null,updateAllSelected:Q,updateFilters:ue,updateCurrentRow:Xe,updateSort:ge,execFilter:ie,execSort:ae,execQuery:ne,clearFilter:K,clearSort:Z,toggleRowExpansion:ce,setExpandRowKeysAdapter:Ue=>{re(Ue),Ie(Ue)},setCurrentRowKey:Pe,toggleRowExpansionAdapter:(Ue,rt)=>{u.value.some(({type:mt})=>mt==="expand")?ce(Ue,rt):$e(Ue,rt)},isRowExpanded:Re,updateExpandRows:ve,updateCurrentRowData:We,loadOrToggle:me,updateTreeData:pe,updateKeyChildren:Ee,states:{tableSize:t,rowKey:n,data:a,_data:o,isComplex:s,_columns:r,originColumns:l,columns:u,fixedColumns:c,rightFixedColumns:d,leafColumns:f,fixedLeafColumns:v,rightFixedLeafColumns:g,updateOrderFns:p,leafColumnsLength:h,fixedLeafColumnsLength:m,rightFixedLeafColumnsLength:b,isAllSelected:k,selection:y,reserveSelection:S,selectOnIndeterminate:C,selectable:E,rowExpandable:$,filters:O,filteredData:R,sortingColumn:N,sortProp:A,sortOrder:_,hoverRow:V,...ke,...Me,...Ae}}}function xh(e,t){return e.map(n=>n.id===t.id?t:(n.children?.length&&(n.children=xh(n.children,t)),n))}function Th(e){e.forEach(t=>{t.no=t.getColumnIndex?.(),t.children?.length&&Th(t.children)}),e.sort((t,n)=>t.no-n.no)}function mU(){const e=ft(),t=vU(),n=fe("table"),{t:a}=Ct();return{ns:n,t:a,...t,mutations:{setData(l,u){const c=i(l._data)!==u;l.data.value=u,l._data.value=u,e.store.execQuery(),e.store.updateCurrentRowData(),e.store.updateExpandRows(),e.store.updateTreeData(e.store.states.defaultExpandAll.value),i(l.reserveSelection)?e.store.assertRowKey():c?e.store.clearSelection():e.store.cleanSelection(),e.store.updateAllSelected(),e.$ready&&e.store.scheduleLayout()},insertColumn(l,u,c,d){const f=i(l._columns);let v=[];c?(c&&!c.children&&(c.children=[]),c.children?.push(u),v=xh(f,c)):(f.push(u),v=f),Th(v),l._columns.value=v,l.updateOrderFns.push(d),u.type==="selection"&&(l.selectable.value=u.selectable,l.reserveSelection.value=u.reserveSelection),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},updateColumnOrder(l,u){u.getColumnIndex?.()!==u.no&&(Th(l._columns.value),e.$ready&&e.store.updateColumns())},removeColumn(l,u,c,d){const f=i(l._columns)||[];if(c)c.children?.splice(c.children.findIndex(g=>g.id===u.id),1),Ne(()=>{c.children?.length===0&&delete c.children}),l._columns.value=xh(f,c);else{const g=f.indexOf(u);g>-1&&(f.splice(g,1),l._columns.value=f)}const v=l.updateOrderFns.indexOf(d);v>-1&&l.updateOrderFns.splice(v,1),e.$ready&&(e.store.updateColumns(),e.store.scheduleLayout())},sort(l,u){const{prop:c,order:d,init:f}=u;if(c){const v=i(l.columns).find(g=>g.property===c);v&&(v.order=d,e.store.updateSort(v,c,d),e.store.commit("changeSortCondition",{init:f}))}},changeSortCondition(l,u){const{sortingColumn:c,sortProp:d,sortOrder:f}=l,v=i(c),g=i(d),p=i(f);Kd(p)&&(l.sortingColumn.value=null,l.sortProp.value=null),e.store.execQuery({filter:!0}),(!u||!(u.silent||u.init))&&e.emit("sort-change",{column:v,prop:g,order:p}),e.store.updateTableScrollY()},filterChange(l,u){const{column:c,values:d,silent:f}=u,v=e.store.updateFilters(c,d);e.store.execQuery(),f||e.emit("filter-change",v),e.store.updateTableScrollY()},toggleAllSelection(){e.store.toggleAllSelection?.()},rowSelectedChanged(l,u){e.store.toggleRowSelection(u),e.store.updateAllSelected()},setHoverRow(l,u){l.hoverRow.value=u},setCurrentRow(l,u){e.store.updateCurrentRow(u)}},commit:function(l,...u){const c=e.store.mutations;if(c[l])c[l].apply(e,[e.store.states,...u]);else throw new Error(`Action not found: ${l}`)},updateTableScrollY:function(){Ne(()=>e.layout.updateScrollY.apply(e.layout))}}}const _m={rowKey:"rowKey",defaultExpandAll:"defaultExpandAll",rowExpandable:"rowExpandable",selectOnIndeterminate:"selectOnIndeterminate",indent:"indent",lazy:"lazy","treeProps.hasChildren":{key:"lazyColumnIdentifier",default:"hasChildren"},"treeProps.children":{key:"childrenColumnName",default:"children"},"treeProps.checkStrictly":{key:"checkStrictly",default:!1}};function gU(e,t){if(!e)throw new Error("Table is required.");const n=mU();return n.toggleAllSelection=Po(n._toggleAllSelection,10),Object.keys(_m).forEach(a=>{hE(vE(t,a),a,n)}),bU(n,t),n}function bU(e,t){Object.keys(_m).forEach(n=>{le(()=>vE(t,n),a=>{hE(a,n,e)})})}function hE(e,t,n){let a=e,o=_m[t];nt(o)&&(a=a||o.default,o=o.key),n.states[o].value=a}function vE(e,t){if(t.includes(".")){const n=t.split(".");let a=e;return n.forEach(o=>{a=a[o]}),a}else return e[t]}var yU=class{constructor(e){this.observers=[],this.table=null,this.store=null,this.columns=[],this.fit=!0,this.showHeader=!0,this.height=M(null),this.scrollX=M(!1),this.scrollY=M(!1),this.bodyWidth=M(null),this.fixedWidth=M(null),this.rightFixedWidth=M(null),this.gutterWidth=0;for(const t in e)Rt(e,t)&&(Jt(this[t])?this[t].value=e[t]:this[t]=e[t]);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 e=this.height.value;if(Kd(e))return!1;const t=this.table.refs.scrollBarRef;if(this.table.vnode.el&&t?.wrapRef){let n=!0;const a=this.scrollY.value;return n=t.wrapRef.scrollHeight>t.wrapRef.clientHeight,this.scrollY.value=n,a!==n}return!1}setHeight(e,t="height"){if(!Mt)return;const n=this.table.vnode.el;if(e=rU(e),this.height.value=Number(e),!n&&(e||e===0)){Ne(()=>this.setHeight(e,t));return}n&&He(e)?(n.style[t]=`${e}px`,this.updateElsHeight()):n&&Le(e)&&(n.style[t]=e,this.updateElsHeight())}setMaxHeight(e){this.setHeight(e,"max-height")}getFlattenColumns(){const e=[];return this.table.store.states.columns.value.forEach(t=>{t.isColumnGroup?e.push.apply(e,t.columns):e.push(t)}),e}updateElsHeight(){this.updateScrollY(),this.notifyObservers("scrollable")}headerDisplayNone(e){if(!e)return!0;let t=e;for(;t.tagName!=="DIV";){if(getComputedStyle(t).display==="none")return!0;t=t.parentElement}return!1}updateColumnsWidth(){if(!Mt)return;const e=this.fit,t=this.table.vnode.el?.clientWidth;let n=0;const a=this.getFlattenColumns(),o=a.filter(l=>!He(l.width));if(a.forEach(l=>{He(l.width)&&l.realWidth&&(l.realWidth=null)}),o.length>0&&e){if(a.forEach(l=>{n+=Number(l.width||l.minWidth||80)}),n<=t){this.scrollX.value=!1;const l=t-n;if(o.length===1)o[0].realWidth=Number(o[0].minWidth||80)+l;else{const u=l/o.reduce((d,f)=>d+Number(f.minWidth||80),0);let c=0;o.forEach((d,f)=>{if(f===0)return;const v=Math.floor(Number(d.minWidth||80)*u);c+=v,d.realWidth=Number(d.minWidth||80)+v}),o[0].realWidth=Number(o[0].minWidth||80)+l-c}}else this.scrollX.value=!0,o.forEach(l=>{l.realWidth=Number(l.minWidth)});this.bodyWidth.value=Math.max(n,t),this.table.state.resizeState.value.width=this.bodyWidth.value}else a.forEach(l=>{!l.width&&!l.minWidth?l.realWidth=80:l.realWidth=Number(l.width||l.minWidth),n+=l.realWidth}),this.scrollX.value=n>t,this.bodyWidth.value=n;const s=this.store.states.fixedColumns.value;if(s.length>0){let l=0;s.forEach(u=>{l+=Number(u.realWidth||u.width)}),this.fixedWidth.value=l}const r=this.store.states.rightFixedColumns.value;if(r.length>0){let l=0;r.forEach(u=>{l+=Number(u.realWidth||u.width)}),this.rightFixedWidth.value=l}this.notifyObservers("columns")}addObserver(e){this.observers.push(e)}removeObserver(e){const t=this.observers.indexOf(e);t!==-1&&this.observers.splice(t,1)}notifyObservers(e){this.observers.forEach(t=>{switch(e){case"columns":t.state?.onColumnsChange(this);break;case"scrollable":t.state?.onScrollableChange(this);break;default:throw new Error(`Table Layout don't have event ${e}.`)}})}};const co=Symbol("ElTable"),mE=e=>{const t=[];return e.forEach(n=>{n.children?(t.push(n),t.push.apply(t,mE(n.children))):t.push(n)}),t},gE=e=>{let t=1;const n=(o,s)=>{if(s&&(o.level=s.level+1,t{n(l,o),r+=l.colSpan}),o.colSpan=r}else o.colSpan=1};e.forEach(o=>{o.level=1,n(o,void 0)});const a=[];for(let o=0;o{o.children?(o.rowSpan=1,o.children.forEach(s=>s.isSubColumn=!0)):o.rowSpan=t-o.level+1,a[o.level-1].push(o)}),a};function wU(e){const t=_e(co),n=w(()=>gE(e.store.states.originColumns.value));return{isGroup:w(()=>{const s=n.value.length>1;return s&&t&&(t.state.isGroup.value=!0),s}),toggleAllSelection:s=>{s.stopPropagation(),t?.store.commit("toggleAllSelection")},columnRows:n}}var SU=se({name:"ElTableFilterPanel",components:{ElCheckbox:oo,ElCheckboxGroup:pm,ElScrollbar:no,ElTooltip:Ln,ElIcon:De,ArrowDown:Bo,ArrowUp:ef},props:{placement:{type:String,default:"bottom-start"},store:{type:Object},column:{type:Object},upDataColumn:{type:Function},appendTo:zt.appendTo},setup(e){const t=ft(),{t:n}=Ct(),a=fe("table-filter"),o=t?.parent;e.column&&!o.filterPanels.value[e.column.id]&&(o.filterPanels.value[e.column.id]=t);const s=M(null),r=M(null),l=M(0),u=w(()=>e.column&&e.column.filters),c=w(()=>e.column&&e.column.filterClassName?`${a.b()} ${e.column.filterClassName}`:a.b()),d=w({get:()=>(e.column?.filteredValue||[])[0],set:$=>{f.value&&(va($)?f.value.splice(0,1):f.value.splice(0,1,$))}}),f=w({get(){return e.column?e.column.filteredValue||[]:[]},set($){e.column&&e.upDataColumn?.("filteredValue",$)}}),v=w(()=>e.column?e.column.filterMultiple:!0),g=$=>$.value===d.value,p=()=>{s.value?.onClose()},h=()=>{k(f.value),p()},m=()=>{f.value=[],k(f.value),p()},b=($,O)=>{d.value=$,l.value=O,va($)?k([]):k(f.value),p()},k=$=>{e.store?.commit("filterChange",{column:e.column,values:$}),e.store?.updateAllSelected()},y=()=>{r.value?.focus(),!v.value&&C(),e.column&&e.upDataColumn?.("filterOpened",!0)},S=()=>{e.column&&e.upDataColumn?.("filterOpened",!1)},C=()=>{if(va(d)){l.value=0;return}const $=(u.value||[]).findIndex(O=>O.value===d.value);l.value=$>=0?$+1:0};return{multiple:v,filterClassName:c,filteredValue:f,filterValue:d,filters:u,handleConfirm:h,handleReset:m,handleSelect:b,isPropAbsent:va,isActive:g,t:n,ns:a,tooltipRef:s,rootRef:r,checkedIndex:l,handleShowTooltip:y,handleHideTooltip:S,handleKeydown:$=>{const O=jt($),R=(u.value?u.value.length:0)+1;let N=l.value,A=!0;switch(O){case we.down:case we.right:N=(N+1)%R;break;case we.up:case we.left:N=(N-1+R)%R;break;case we.tab:p(),A=!1;break;case we.enter:case we.space:if(N===0)b(null,0);else{const _=(u.value||[])[N-1];_.value&&b(_.value,N)}break;default:A=!1;break}A&&$.preventDefault(),l.value=N,r.value?.querySelector(`.${a.e("list-item")}:nth-child(${N+1})`)?.focus()}}}});const CU=["disabled"],kU=["tabindex","aria-checked"],EU=["tabindex","aria-checked","onClick"],xU=["aria-label"];function TU(e,t,n,a,o,s){const r=It("el-checkbox"),l=It("el-checkbox-group"),u=It("el-scrollbar"),c=It("arrow-up"),d=It("arrow-down"),f=It("el-icon"),v=It("el-tooltip");return x(),oe(v,{ref:"tooltipRef",offset:0,placement:e.placement,"show-arrow":!1,trigger:"click",role:"dialog",teleported:"",effect:"light",pure:"",loop:"","popper-class":e.filterClassName,persistent:"","append-to":e.appendTo,onShow:e.handleShowTooltip,onHide:e.handleHideTooltip},{content:J(()=>[e.multiple?(x(),B("div",{key:0,ref:"rootRef",tabindex:"-1",class:T(e.ns.e("multiple"))},[H("div",{class:T(e.ns.e("content"))},[Y(u,{"wrap-class":e.ns.e("wrap")},{default:J(()=>[Y(l,{modelValue:e.filteredValue,"onUpdate:modelValue":t[0]||(t[0]=g=>e.filteredValue=g),class:T(e.ns.e("checkbox-group"))},{default:J(()=>[(x(!0),B(Fe,null,yt(e.filters,g=>(x(),oe(r,{key:g.value,value:g.value},{default:J(()=>[wt(Se(g.text),1)]),_:2},1032,["value"]))),128))]),_:1},8,["modelValue","class"])]),_:1},8,["wrap-class"])],2),H("div",{class:T(e.ns.e("bottom"))},[H("button",{class:T(e.ns.is("disabled",e.filteredValue.length===0)),disabled:e.filteredValue.length===0,type:"button",onClick:t[1]||(t[1]=(...g)=>e.handleConfirm&&e.handleConfirm(...g))},Se(e.t("el.table.confirmFilter")),11,CU),H("button",{type:"button",onClick:t[2]||(t[2]=(...g)=>e.handleReset&&e.handleReset(...g))},Se(e.t("el.table.resetFilter")),1)],2)],2)):(x(),B("ul",{key:1,ref:"rootRef",tabindex:"-1",role:"radiogroup",class:T(e.ns.e("list")),onKeydown:t[4]||(t[4]=(...g)=>e.handleKeydown&&e.handleKeydown(...g))},[H("li",{role:"radio",class:T([e.ns.e("list-item"),e.ns.is("active",e.isPropAbsent(e.filterValue))]),tabindex:e.checkedIndex===0?0:-1,"aria-checked":e.isPropAbsent(e.filterValue),onClick:t[3]||(t[3]=g=>e.handleSelect(null,0))},Se(e.t("el.table.clearFilter")),11,kU),(x(!0),B(Fe,null,yt(e.filters,(g,p)=>(x(),B("li",{key:g.value,role:"radio",class:T([e.ns.e("list-item"),e.ns.is("active",e.isActive(g))]),tabindex:e.checkedIndex===p+1?0:-1,"aria-checked":e.isActive(g),onClick:h=>e.handleSelect(g.value,p+1)},Se(g.text),11,EU))),128))],34))]),default:J(()=>[H("button",{type:"button",class:T(`${e.ns.namespace.value}-table__column-filter-trigger`),"aria-label":e.t("el.table.filterLabel",{column:e.column?.label||""})},[Y(f,null,{default:J(()=>[ee(e.$slots,"filter-icon",{},()=>[e.column?.filterOpened?(x(),oe(c,{key:0})):(x(),oe(d,{key:1}))])]),_:3})],10,xU)]),_:3},8,["placement","popper-class","append-to","onShow","onHide"])}var $U=$n(SU,[["render",TU]]);function Am(e){const t=ft();Pd(()=>{n.value.addObserver(t)}),ht(()=>{a(n.value),o(n.value)}),so(()=>{a(n.value),o(n.value)}),$l(()=>{n.value.removeObserver(t)});const n=w(()=>{const s=e.layout;if(!s)throw new Error("Can not find table layout.");return s}),a=s=>{const r=e.vnode.el?.querySelectorAll("colgroup > col")||[];if(!r.length)return;const l=s.getFlattenColumns(),u={};l.forEach(c=>{u[c.id]=c});for(let c=0,d=r.length;c{const r=e.vnode.el?.querySelectorAll("colgroup > col[name=gutter]")||[];for(let u=0,c=r.length;u{h.stopPropagation()},s=(h,m)=>{!m.filters&&m.sortable?p(h,m,!1):m.filterable&&!m.sortable&&o(h),a?.emit("header-click",m,h)},r=(h,m)=>{a?.emit("header-contextmenu",m,h)},l=M(null),u=M(!1),c=M(),d=(h,m)=>{if(Mt&&!(m.children&&m.children.length>0)&&l.value&&e.border&&l.value.id===m.id){u.value=!0;const b=a;t("set-drag-visible",!0);const k=b?.vnode.el?.getBoundingClientRect().left,y=n?.vnode?.el?.querySelector(`th.${m.id}`),S=y.getBoundingClientRect(),C=S.left-k+30;La(y,"noclick"),c.value={startMouseLeft:h.clientX,startLeft:S.right-k,startColumnLeft:S.left-k,tableLeft:k};const E=b?.refs.resizeProxy;E.style.left=`${c.value.startLeft}px`,document.onselectstart=function(){return!1},document.ondragstart=function(){return!1};const $=R=>{const N=R.clientX-c.value.startMouseLeft,A=c.value.startLeft+N;E.style.left=`${Math.max(C,A)}px`},O=()=>{if(u.value){const{startColumnLeft:R,startLeft:N}=c.value;m.width=m.realWidth=Number.parseInt(E.style.left,10)-R,b?.emit("header-dragend",m.width,N-R,m,h),requestAnimationFrame(()=>{e.store.scheduleLayout(!1,!0)}),document.body.style.cursor="",u.value=!1,l.value=null,c.value=void 0,t("set-drag-visible",!1)}document.removeEventListener("mousemove",$),document.removeEventListener("mouseup",O),document.onselectstart=null,document.ondragstart=null,setTimeout(()=>{ta(y,"noclick")},0)};document.addEventListener("mousemove",$),document.addEventListener("mouseup",O)}},f=(h,m)=>{if(!e.border||m.children&&m.children.length>0)return;const b=h.target,k=ha(b)?b.closest("th"):null;if(!k)return;const y=To(k,"is-sortable");if(y){const R=u.value?"col-resize":"";k.style.cursor=R;const N=k.querySelector(".caret-wrapper");N&&(N.style.cursor=R)}if(!m.resizable||u.value){l.value=null;return}const S=k.getBoundingClientRect(),C=k.parentNode?.lastElementChild===k,E=e.allowDragLastColumn||!C,$=S.width>12&&S.right-h.clientX<8&&E,O=$?"col-resize":"";document.body.style.cursor=O,l.value=$?m:null,y&&(k.style.cursor=O)},v=()=>{!Mt||u.value||(document.body.style.cursor="")},g=({order:h,sortOrders:m})=>{if(h==="")return m[0];const b=m.indexOf(h||null);return m[b>m.length-2?0:b+1]},p=(h,m,b)=>{h.stopPropagation();const k=m.order===b?null:b||g(m),y=h.target?.closest("th");if(y&&To(y,"noclick")){ta(y,"noclick");return}if(!m.sortable)return;const S=h.currentTarget;if(["ascending","descending"].some(R=>To(S,R)&&!m.sortOrders.includes(R)))return;const C=e.store.states;let E=C.sortProp.value,$;const O=C.sortingColumn.value;(O!==m||O===m&&Kd(O.order))&&(O&&(O.order=null),C.sortingColumn.value=m,E=m.property),k?$=m.order=k:$=m.order=null,C.sortProp.value=E,C.sortOrder.value=$,a?.store.commit("changeSortCondition")};return{handleHeaderClick:s,handleHeaderContextMenu:r,handleMouseDown:d,handleMouseMove:f,handleMouseOut:v,handleSortClick:p,handleFilterClick:o}}function NU(e){const t=_e(co),n=fe("table");return{getHeaderRowStyle:l=>{const u=t?.props.headerRowStyle;return Ve(u)?u.call(null,{rowIndex:l}):u},getHeaderRowClass:l=>{const u=[],c=t?.props.headerRowClassName;return Le(c)?u.push(c):Ve(c)&&u.push(c.call(null,{rowIndex:l})),u.join(" ")},getHeaderCellStyle:(l,u,c,d)=>{let f=t?.props.headerCellStyle??{};Ve(f)&&(f=f.call(null,{rowIndex:l,columnIndex:u,row:c,column:d}));const v=Mm(u,d.fixed,e.store,c);return El(v,"left"),El(v,"right"),Object.assign({},f,v)},getHeaderCellClass:(l,u,c,d)=>{const f=Pm(n.b(),u,d.fixed,e.store,c),v=[d.id,d.order,d.headerAlign,d.className,d.labelClassName,...f];d.children||v.push("is-leaf"),d.sortable&&v.push("is-sortable");const g=t?.props.headerCellClassName;return Le(g)?v.push(g):Ve(g)&&v.push(g.call(null,{rowIndex:l,columnIndex:u,row:c,column:d})),v.push(n.e("cell")),v.filter(p=>!!p).join(" ")}}}var RU=se({name:"ElTableHeader",components:{ElCheckbox:oo},props:{fixed:{type:String,default:""},store:{required:!0,type:Object},border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})},appendFilterPanelTo:{type:String},allowDragLastColumn:{type:Boolean}},setup(e,{emit:t}){const n=ft(),a=_e(co),o=fe("table"),s=M({}),{onColumnsChange:r,onScrollableChange:l}=Am(a),u=a?.props.tableLayout==="auto",c=At(new Map),d=M();let f;const v=()=>{f=setTimeout(()=>{c.size>0&&(c.forEach((_,V)=>{const z=d.value.querySelector(`.${V.replace(/\s/g,".")}`);z&&(_.width=z.getBoundingClientRect().width||_.width)}),c.clear())})};le(c,v),Bt(()=>{f&&(clearTimeout(f),f=void 0)}),ht(async()=>{await Ne(),await Ne();const{prop:_,order:V}=e.defaultSort;a?.store.commit("sort",{prop:_,order:V,init:!0}),v()});const{handleHeaderClick:g,handleHeaderContextMenu:p,handleMouseDown:h,handleMouseMove:m,handleMouseOut:b,handleSortClick:k,handleFilterClick:y}=OU(e,t),{getHeaderRowStyle:S,getHeaderRowClass:C,getHeaderCellStyle:E,getHeaderCellClass:$}=NU(e),{isGroup:O,toggleAllSelection:R,columnRows:N}=wU(e),{t:A}=Ct();return n.state={onColumnsChange:r,onScrollableChange:l},n.filterPanels=s,{ns:o,t:A,filterPanels:s,onColumnsChange:r,onScrollableChange:l,columnRows:N,getHeaderRowClass:C,getHeaderRowStyle:S,getHeaderCellClass:$,getHeaderCellStyle:E,handleHeaderClick:g,handleHeaderContextMenu:p,handleMouseDown:h,handleMouseMove:m,handleMouseOut:b,handleSortClick:k,handleFilterClick:y,isGroup:O,toggleAllSelection:R,saveIndexSelection:c,isTableLayoutAuto:u,theadRef:d,updateFixedColumnStyle:v}},render(){const{ns:e,t,isGroup:n,columnRows:a,getHeaderCellStyle:o,getHeaderCellClass:s,getHeaderRowClass:r,getHeaderRowStyle:l,handleHeaderClick:u,handleHeaderContextMenu:c,handleMouseDown:d,handleMouseMove:f,handleSortClick:v,handleMouseOut:g,store:p,$parent:h,saveIndexSelection:m,isTableLayoutAuto:b}=this;let k=1;return qe("thead",{ref:"theadRef",class:e.is("group",n)},a.map((y,S)=>qe("tr",{class:r(S),key:S,style:l(S)},y.map((C,E)=>{C.rowSpan>k&&(k=C.rowSpan);const $=s(S,E,y,C);return b&&C.fixed&&m.set($,C),qe("th",{class:$,colspan:C.colSpan,key:`${C.id}-thead`,rowspan:C.rowSpan,scope:C.colSpan>1?"colgroup":"col",ariaSort:C.sortable?C.order:void 0,style:o(S,E,y,C),onClick:O=>{O.currentTarget?.classList.contains("noclick")||u(O,C)},onContextmenu:O=>c(O,C),onMousedown:O=>d(O,C),onMousemove:O=>f(O,C),onMouseout:g},[qe("div",{class:["cell",C.filteredValue&&C.filteredValue.length>0?"highlight":""]},[C.renderHeader?C.renderHeader({column:C,$index:E,store:p,_self:h}):C.label,C.sortable&&qe("button",{type:"button",class:"caret-wrapper","aria-label":t("el.table.sortLabel",{column:C.label||""}),onClick:O=>v(O,C)},[qe("i",{onClick:O=>v(O,C,"ascending"),class:"sort-caret ascending"}),qe("i",{onClick:O=>v(O,C,"descending"),class:"sort-caret descending"})]),C.filterable&&qe($U,{store:p,placement:C.filterPlacement||"bottom-start",appendTo:h?.appendFilterPanelTo,column:C,upDataColumn:(O,R)=>{C[O]=R}},{"filter-icon":()=>C.renderFilterIcon?C.renderFilterIcon({filterOpened:C.filterOpened}):null})])])}))))}});function ip(e,t,n=.03){return e-t>n}function IU(e){const t=_e(co),n=M(""),a=M(qe("div")),o=(p,h,m)=>{const b=t,k=lp(p);let y=null;const S=b?.vnode.el?.dataset.prefix;k&&(y=$0({columns:e.store?.states.columns.value??[]},k,S),y&&b?.emit(`cell-${m}`,h,y,k,p)),b?.emit(`row-${m}`,h,y,p)},s=(p,h)=>{o(p,h,"dblclick")},r=(p,h)=>{e.store?.commit("setCurrentRow",h),o(p,h,"click")},l=(p,h)=>{o(p,h,"contextmenu")},u=Po(p=>{e.store?.commit("setHoverRow",p)},30),c=Po(()=>{e.store?.commit("setHoverRow",null)},30),d=p=>{const h=window.getComputedStyle(p,null);return{left:Number.parseInt(h.paddingLeft,10)||0,right:Number.parseInt(h.paddingRight,10)||0,top:Number.parseInt(h.paddingTop,10)||0,bottom:Number.parseInt(h.paddingBottom,10)||0}},f=(p,h,m)=>{let b=h?.target?.parentNode;for(;p>1&&(b=b?.nextSibling,!(!b||b.nodeName!=="TR"));)m(b,"hover-row hover-fixed-row"),p--};return{handleDoubleClick:s,handleClick:r,handleContextMenu:l,handleMouseEnter:u,handleMouseLeave:c,handleCellMouseEnter:(p,h,m)=>{if(!t)return;const b=t,k=lp(p),y=b?.vnode.el?.dataset.prefix;let S=null;if(k){if(S=$0({columns:e.store?.states.columns.value??[]},k,y),!S)return;k.rowSpan>1&&f(k.rowSpan,p,La);const P=b.hoverState={cell:k,column:S,row:h};b?.emit("cell-mouse-enter",P.row,P.column,P.cell,p)}if(!m){pa?.trigger===k&&pa?.();return}const C=p.target.querySelector(".cell");if(!(To(C,`${y}-tooltip`)&&C.childNodes.length&&C.textContent?.trim()))return;const E=document.createRange();E.setStart(C,0),E.setEnd(C,C.childNodes.length);const{width:$,height:O}=E.getBoundingClientRect(),{width:R,height:N}=C.getBoundingClientRect(),{top:A,left:_,right:V,bottom:z}=d(C),U=_+V,W=A+z;ip($+U,R)||ip(O+W,N)||ip(C.scrollWidth,R)?cU(m,(k?.innerText||k?.textContent)??"",h,S,k,b):pa?.trigger===k&&pa?.()},handleCellMouseLeave:p=>{const h=lp(p);if(!h)return;h.rowSpan>1&&f(h.rowSpan,p,ta);const m=t?.hoverState;t?.emit("cell-mouse-leave",m?.row,m?.column,m?.cell,p)},tooltipContent:n,tooltipTrigger:a}}function PU(e){const t=_e(co),n=fe("table");return{getRowStyle:(c,d)=>{const f=t?.props.rowStyle;return Ve(f)?f.call(null,{row:c,rowIndex:d}):f||null},getRowClass:(c,d,f)=>{const v=[n.e("row")];t?.props.highlightCurrentRow&&c===e.store?.states.currentRow.value&&v.push("current-row"),e.stripe&&f%2===1&&v.push(n.em("row","striped"));const g=t?.props.rowClassName;return Le(g)?v.push(g):Ve(g)&&v.push(g.call(null,{row:c,rowIndex:d})),v},getCellStyle:(c,d,f,v)=>{const g=t?.props.cellStyle;let p=g??{};Ve(g)&&(p=g.call(null,{rowIndex:c,columnIndex:d,row:f,column:v}));const h=Mm(d,e?.fixed,e.store);return El(h,"left"),El(h,"right"),Object.assign({},p,h)},getCellClass:(c,d,f,v,g)=>{const p=Pm(n.b(),d,e?.fixed,e.store,void 0,g),h=[v.id,v.align,v.className,...p],m=t?.props.cellClassName;return Le(m)?h.push(m):Ve(m)&&h.push(m.call(null,{rowIndex:c,columnIndex:d,row:f,column:v})),h.push(n.e("cell")),h.filter(b=>!!b).join(" ")},getSpan:(c,d,f,v)=>{let g=1,p=1;const h=t?.props.spanMethod;if(Ve(h)){const m=h({row:c,column:d,rowIndex:f,columnIndex:v});ye(m)?(g=m[0],p=m[1]):nt(m)&&(g=m.rowspan,p=m.colspan)}return{rowspan:g,colspan:p}},getColspanRealWidth:(c,d,f)=>{if(d<1)return c[f].realWidth;const v=c.map(({realWidth:g,width:p})=>g||p).slice(f,f+d);return Number(v.reduce((g,p)=>Number(g)+Number(p),-1))}}}const MU=["colspan","rowspan"];var _U=se({name:"TableTdWrapper",__name:"td-wrapper",props:{colspan:{type:Number,default:1},rowspan:{type:Number,default:1}},setup(e){return(t,n)=>(x(),B("td",{colspan:e.colspan,rowspan:e.rowspan},[ee(t.$slots,"default")],8,MU))}}),AU=_U;function LU(e){const t=_e(co),n=fe("table"),{handleDoubleClick:a,handleClick:o,handleContextMenu:s,handleMouseEnter:r,handleMouseLeave:l,handleCellMouseEnter:u,handleCellMouseLeave:c,tooltipContent:d,tooltipTrigger:f}=IU(e),{getRowStyle:v,getRowClass:g,getCellStyle:p,getCellClass:h,getSpan:m,getColspanRealWidth:b}=PU(e);let k=-1;const y=w(()=>e.store?.states.columns.value.findIndex(({type:O})=>O==="default")),S=(O,R)=>{const N=t?.props?.rowKey;return N?Hn(O,N):R},C=(O,R,N,A=!1)=>{const{tooltipEffect:_,tooltipOptions:V,store:z}=e,{indent:U,columns:W}=z.states,P=[];let I=!0;return N&&(P.push(n.em("row",`level-${N.level}`)),I=!!N.display),R===0&&(k=-1),e.stripe&&I&&k++,P.push(...g(O,R,k)),qe("tr",{style:[I?null:{display:"none"},v(O,R)],class:P,key:S(O,R),onDblclick:L=>a(L,O),onClick:L=>o(L,O),onContextmenu:L=>s(L,O),onMouseenter:()=>r(R),onMouseleave:l},W.value.map((L,D)=>{const{rowspan:F,colspan:q}=m(O,L,R,D);if(!F||!q)return null;const j=Object.assign({},L);j.realWidth=b(W.value,q,D);const X={store:z,_self:e.context||t,column:j,row:O,$index:R,cellIndex:D,expanded:A};D===y.value&&N&&(X.treeNode={indent:N.level&&N.level*U.value,level:N.level},Ht(N.expanded)&&(X.treeNode.expanded=N.expanded,"loading"in N&&(X.treeNode.loading=N.loading),"noLazyChildren"in N&&(X.treeNode.noLazyChildren=N.noLazyChildren)));const Q=`${S(O,R)},${D}`,he=j.columnKey||j.rawColumnKey||"",ue=L.showOverflowTooltip&&IS({effect:_},V,L.showOverflowTooltip);return qe(AU,{style:p(R,D,O,L),class:h(R,D,O,L,q-1),key:`${he}${Q}`,rowspan:F,colspan:q,onMouseenter:ge=>u(ge,O,ue),onMouseleave:c},{default:()=>E(D,L,X)})}))},E=(O,R,N)=>R.renderCell(N);return{wrappedRowRender:(O,R)=>{const N=e.store,{isRowExpanded:A,assertRowKey:_}=N,{treeData:V,lazyTreeNodeMap:z,childrenColumnName:U,rowKey:W}=N.states,P=N.states.columns.value;if(P.some(({type:I})=>I==="expand")){const I=A(O),L=C(O,R,void 0,I),D=t?.renderExpanded;if(!D)return console.error("[Element Error]renderExpanded is required."),L;const F=[[L]];return(t.props.preserveExpandedContent||I)&&F[0].push(qe("tr",{key:`expanded-row__${L.key}`,style:{display:I?"":"none"}},[qe("td",{colspan:P.length,class:`${n.e("cell")} ${n.e("expanded-cell")}`},[D({row:O,$index:R,store:N,expanded:I})])])),F}else if(Object.keys(V.value).length){_();const I=Hn(O,W.value);let L=V.value[I],D=null;L&&(D={expanded:L.expanded,level:L.level,display:!0,noLazyChildren:void 0,loading:void 0},Ht(L.lazy)&&(D&&Ht(L.loaded)&&L.loaded&&(D.noLazyChildren=!(L.children&&L.children.length)),D.loading=L.loading));const F=[C(O,R,D??void 0)];if(L){let q=0;const j=(X,Q)=>{X&&X.length&&Q&&X.forEach(he=>{const ue={display:Q.display&&Q.expanded,level:Q.level+1,expanded:!1,noLazyChildren:!1,loading:!1},ge=Hn(he,W.value);if(va(ge))throw new Error("For nested data item, row-key is required.");L={...V.value[ge]},L&&(ue.expanded=L.expanded,L.level=L.level||ue.level,L.display=!!(L.expanded&&ue.display),Ht(L.lazy)&&(Ht(L.loaded)&&L.loaded&&(ue.noLazyChildren=!(L.children&&L.children.length)),ue.loading=L.loading)),q++,F.push(C(he,R+q,ue)),L&&j(z.value[ge]||he[U.value],L)})};L.display=!0,j(z.value[I]||O[U.value],L)}return F}else return C(O,R,void 0)},tooltipContent:d,tooltipTrigger:f}}const DU={store:{required:!0,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 BU=se({name:"ElTableBody",props:DU,setup(e){const t=ft(),n=_e(co),a=fe("table"),{wrappedRowRender:o,tooltipContent:s,tooltipTrigger:r}=LU(e),{onColumnsChange:l,onScrollableChange:u}=Am(n),c=[];return le(e.store?.states.hoverRow,(d,f)=>{const v=t?.vnode.el,g=Array.from(v?.children||[]).filter(m=>m?.classList.contains(`${a.e("row")}`));let p=d;const h=g[p]?.childNodes;if(h?.length){let m=0;Array.from(h).reduce((b,k,y)=>(h[y]?.colSpan>1&&(m=h[y]?.colSpan),k.nodeName!=="TD"&&m===0&&b.push(y),m>0&&m--,b),[]).forEach(b=>{for(p=d;p>0;){const k=g[p-1]?.childNodes;if(k[b]&&k[b].nodeName==="TD"&&k[b].rowSpan>1){La(k[b],"hover-cell"),c.push(k[b]);break}p--}})}else c.forEach(m=>ta(m,"hover-cell")),c.length=0;!e.store?.states.isComplex.value||!Mt||Qa(()=>{const m=g[f],b=g[d];m&&!m.classList.contains("hover-fixed-row")&&ta(m,"hover-row"),b&&La(b,"hover-row")})}),$l(()=>{pa?.()}),{ns:a,onColumnsChange:l,onScrollableChange:u,wrappedRowRender:o,tooltipContent:s,tooltipTrigger:r}},render(){const{wrappedRowRender:e,store:t}=this;return qe("tbody",{tabIndex:-1},[(t?.states.data.value||[]).reduce((n,a)=>n.concat(e(a,n.length)),[])])}});function FU(){const e=_e(co)?.store;return{leftFixedLeafCount:w(()=>e?.states.fixedLeafColumnsLength.value??0),rightFixedLeafCount:w(()=>e?.states.rightFixedColumns.value.length??0),columnsCount:w(()=>e?.states.columns.value.length??0),leftFixedCount:w(()=>e?.states.fixedColumns.value.length??0),rightFixedCount:w(()=>e?.states.rightFixedColumns.value.length??0),columns:w(()=>e?.states.columns.value??[])}}function VU(e){const{columns:t}=FU(),n=fe("table");return{getCellClasses:(s,r)=>{const l=s[r],u=[n.e("cell"),l.id,l.align,l.labelClassName,...Pm(n.b(),r,l.fixed,e.store)];return l.className&&u.push(l.className),l.children||u.push(n.is("leaf")),u},getCellStyles:(s,r)=>{const l=Mm(r,s.fixed,e.store);return El(l,"left"),El(l,"right"),l},columns:t}}var zU=se({name:"ElTableFooter",props:{fixed:{type:String,default:""},store:{required:!0,type:Object},summaryMethod:Function,sumText:String,border:Boolean,defaultSort:{type:Object,default:()=>({prop:"",order:""})}},setup(e){const t=_e(co),n=fe("table"),{getCellClasses:a,getCellStyles:o,columns:s}=VU(e),{onScrollableChange:r,onColumnsChange:l}=Am(t);return{ns:n,onScrollableChange:r,onColumnsChange:l,getCellClasses:a,getCellStyles:o,columns:s}},render(){const{columns:e,getCellStyles:t,getCellClasses:n,summaryMethod:a,sumText:o}=this,s=this.store.states.data.value;let r=[];return a?r=a({columns:e,data:s}):e.forEach((l,u)=>{if(u===0){r[u]=o;return}const c=s.map(g=>Number(g[l.property])),d=[];let f=!0;c.forEach(g=>{if(!Number.isNaN(+g)){f=!1;const p=`${g}`.split(".")[1];d.push(p?p.length:0)}});const v=Math.max.apply(null,d);f?r[u]="":r[u]=c.reduce((g,p)=>{const h=Number(p);return Number.isNaN(+h)?g:Number.parseFloat((g+p).toFixed(Math.min(v,20)))},0)}),qe(qe("tfoot",[qe("tr",{},[...e.map((l,u)=>qe("td",{key:u,colspan:l.colSpan,rowspan:l.rowSpan,class:n(e,u),style:t(l,u)},[qe("div",{class:["cell",l.labelClassName]},[r[u]])]))])]))}});function HU(e){return{setCurrentRow:f=>{e.commit("setCurrentRow",f)},getSelectionRows:()=>e.getSelectionRows(),toggleRowSelection:(f,v,g=!0)=>{e.toggleRowSelection(f,v,!1,g),e.updateAllSelected()},clearSelection:()=>{e.clearSelection()},clearFilter:f=>{e.clearFilter(f)},toggleAllSelection:()=>{e.commit("toggleAllSelection")},toggleRowExpansion:(f,v)=>{e.toggleRowExpansionAdapter(f,v)},clearSort:()=>{e.clearSort()},sort:(f,v)=>{e.commit("sort",{prop:f,order:v})},updateKeyChildren:(f,v)=>{e.updateKeyChildren(f,v)}}}function KU(e,t,n,a){const o=M(!1),s=M(null),r=M(!1),l=U=>{r.value=U},u=M({width:null,height:null,headerHeight:null}),c=M(!1),d={display:"inline-block",verticalAlign:"middle"},f=M(),v=M(0),g=M(0),p=M(0),h=M(0),m=M(0);le(()=>e.height,U=>{t.setHeight(U??null)},{immediate:!0}),le(()=>e.maxHeight,U=>{t.setMaxHeight(U??null)},{immediate:!0}),le(()=>[e.currentRowKey,n.states.rowKey],([U,W])=>{!i(W)||!i(U)||n.setCurrentRowKey(`${U}`)},{immediate:!0}),le(()=>e.data,U=>{a.store.commit("setData",U)},{immediate:!0,deep:!0}),wa(()=>{e.expandRowKeys&&n.setExpandRowKeysAdapter(e.expandRowKeys)});const b=()=>{a.store.commit("setHoverRow",null),a.hoverState&&(a.hoverState=null)},k=(U,W)=>{const{pixelX:P,pixelY:I}=W;Math.abs(P)>=Math.abs(I)&&(a.refs.bodyWrapper.scrollLeft+=W.pixelX/5)},y=w(()=>e.height||e.maxHeight||n.states.fixedColumns.value.length>0||n.states.rightFixedColumns.value.length>0),S=w(()=>({width:t.bodyWidth.value?`${t.bodyWidth.value}px`:""})),C=()=>{y.value&&t.updateElsHeight(),t.updateColumnsWidth(),!(typeof window>"u")&&requestAnimationFrame(R)};ht(async()=>{await Ne(),n.updateColumns(),N(),requestAnimationFrame(C);const U=a.vnode.el,W=a.refs.headerWrapper;e.flexible&&U&&U.parentElement&&(U.parentElement.style.minWidth="0"),u.value={width:f.value=U.offsetWidth,height:U.offsetHeight,headerHeight:e.showHeader&&W?W.offsetHeight:null},n.states.columns.value.forEach(P=>{P.filteredValue&&P.filteredValue.length&&a.store.commit("filterChange",{column:P,values:P.filteredValue,silent:!0})}),a.$ready=!0});const E=(U,W)=>{if(!U)return;const P=Array.from(U.classList).filter(I=>!I.startsWith("is-scrolling-"));P.push(t.scrollX.value?W:"is-scrolling-none"),U.className=P.join(" ")},$=U=>{const{tableWrapper:W}=a.refs;E(W,U)},O=U=>{const{tableWrapper:W}=a.refs;return!!(W&&W.classList.contains(U))},R=function(){if(!a.refs.scrollBarRef)return;if(!t.scrollX.value){const F="is-scrolling-none";O(F)||$(F);return}const U=a.refs.scrollBarRef.wrapRef;if(!U)return;const{scrollLeft:W,offsetWidth:P,scrollWidth:I}=U,{headerWrapper:L,footerWrapper:D}=a.refs;L&&(L.scrollLeft=W),D&&(D.scrollLeft=W),W>=I-P-1?$("is-scrolling-right"):$(W===0?"is-scrolling-left":"is-scrolling-middle")},N=()=>{a.refs.scrollBarRef&&(a.refs.scrollBarRef.wrapRef&&Ft(a.refs.scrollBarRef.wrapRef,"scroll",R,{passive:!0}),e.fit?Zt(a.vnode.el,A):Ft(window,"resize",A),Zt(a.refs.tableInnerWrapper,()=>{A(),a.refs?.scrollBarRef?.update()}))},A=()=>{const U=a.vnode.el;if(!a.$ready||!U)return;let W=!1;const{width:P,height:I,headerHeight:L}=u.value,D=f.value=U.offsetWidth;P!==D&&(W=!0);const F=U.offsetHeight;(e.height||y.value)&&I!==F&&(W=!0);const q=e.tableLayout==="fixed"?a.refs.headerWrapper:a.refs.tableHeaderRef?.$el;e.showHeader&&q?.offsetHeight!==L&&(W=!0),v.value=a.refs.tableWrapper?.scrollHeight||0,p.value=q?.scrollHeight||0,h.value=a.refs.footerWrapper?.offsetHeight||0,m.value=a.refs.appendWrapper?.offsetHeight||0,g.value=v.value-p.value-h.value-m.value,W&&(u.value={width:D,height:F,headerHeight:e.showHeader&&q?.offsetHeight||0},C())},_=Sn(),V=w(()=>{const{bodyWidth:U,scrollY:W,gutterWidth:P}=t;return U.value?`${U.value-(W.value?P:0)}px`:""}),z=w(()=>e.maxHeight?"fixed":e.tableLayout);return{isHidden:o,renderExpanded:s,setDragVisible:l,isGroup:c,handleMouseLeave:b,handleHeaderFooterMousewheel:k,tableSize:_,emptyBlockStyle:w(()=>{if(e.data&&e.data.length)return;let U="100%";e.height&&g.value&&(U=`${g.value}px`);const W=f.value;return{width:W?`${W}px`:"",height:U}}),resizeProxyVisible:r,bodyWidth:V,resizeState:u,doLayout:C,tableBodyStyles:S,tableLayout:z,scrollbarViewStyle:d,scrollbarStyle:w(()=>e.height?{height:"100%"}:e.maxHeight?Number.isNaN(Number(e.maxHeight))?{maxHeight:`calc(${e.maxHeight} - ${p.value+h.value}px)`}:{maxHeight:`${+e.maxHeight-p.value-h.value}px`}:{})}}function WU(e){let t;const n=()=>{const a=e.vnode.el.querySelector(".hidden-columns"),o={childList:!0,subtree:!0},s=e.store.states.updateOrderFns;t=new MutationObserver(()=>{s.forEach(r=>r())}),t.observe(a,o)};ht(()=>{n()}),$l(()=>{t?.disconnect()})}var jU={data:{type:Array,default:()=>[]},size:Tn,width:[String,Number],height:[String,Number],maxHeight:[String,Number],fit:{type:Boolean,default:!0},stripe:Boolean,border:Boolean,rowKey:[String,Function],showHeader:{type:Boolean,default:!0},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,rowExpandable:{type:Function},defaultSort:Object,tooltipEffect:String,tooltipOptions:Object,spanMethod:Function,selectOnIndeterminate:{type:Boolean,default:!0},indent:{type:Number,default:16},treeProps:{type:Object,default:()=>({hasChildren:"hasChildren",children:"children",checkStrictly:!1})},lazy:Boolean,load:Function,style:{type:[String,Object,Array],default:()=>({})},className:{type:String,default:""},tableLayout:{type:String,default:"fixed"},scrollbarAlwaysOn:Boolean,flexible:Boolean,showOverflowTooltip:{type:[Boolean,Object],default:void 0},tooltipFormatter:Function,appendFilterPanelTo:String,scrollbarTabindex:{type:[Number,String],default:void 0},allowDragLastColumn:{type:Boolean,default:!0},preserveExpandedContent:Boolean,nativeScrollbar:Boolean};function bE(e){const t=e.tableLayout==="auto";let n=e.columns||[];t&&n.every(({width:o})=>Tt(o))&&(n=[]);const a=o=>{const s={key:`${e.tableLayout}_${o.id}`,style:{},name:void 0};return t?s.style={width:`${o.width}px`}:s.name=o.id,s};return qe("colgroup",{},n.map(o=>qe("col",a(o))))}bE.props=["columns","tableLayout"];const UU=()=>{const e=M(),t=(s,r)=>{const l=e.value;l&&l.scrollTo(s,r)},n=(s,r)=>{const l=e.value;l&&He(r)&&["Top","Left"].includes(s)&&l[`setScroll${s}`](r)};return{scrollBarRef:e,scrollTo:t,setScrollTop:s=>n("Top",s),setScrollLeft:s=>n("Left",s)}};let qU=1;var YU=se({name:"ElTable",directives:{Mousewheel:w8},components:{TableHeader:RU,TableBody:BU,TableFooter:zU,ElScrollbar:no,hColgroup:bE},props:jU,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(e){const{t}=Ct(),n=fe("table"),a=gs("table"),o=ft();St(co,o);const s=gU(o,e);o.store=s;const r=new yU({store:o.store,table:o,fit:e.fit,showHeader:e.showHeader});o.layout=r;const l=w(()=>(s.states.data.value||[]).length===0),{setCurrentRow:u,getSelectionRows:c,toggleRowSelection:d,clearSelection:f,clearFilter:v,toggleAllSelection:g,toggleRowExpansion:p,clearSort:h,sort:m,updateKeyChildren:b}=HU(s),{isHidden:k,renderExpanded:y,setDragVisible:S,isGroup:C,handleMouseLeave:E,handleHeaderFooterMousewheel:$,tableSize:O,emptyBlockStyle:R,resizeProxyVisible:N,bodyWidth:A,resizeState:_,doLayout:V,tableBodyStyles:z,tableLayout:U,scrollbarViewStyle:W,scrollbarStyle:P}=KU(e,r,s,o),{scrollBarRef:I,scrollTo:L,setScrollLeft:D,setScrollTop:F}=UU(),q=Po(V,50),j=`${n.namespace.value}-table_${qU++}`;o.tableId=j,o.state={isGroup:C,resizeState:_,doLayout:V,debouncedUpdateLayout:q};const X=w(()=>e.sumText??t("el.table.sumText")),Q=w(()=>e.emptyText??t("el.table.emptyText")),he=w(()=>e.tooltipEffect??a.value?.tooltipEffect),ue=w(()=>e.tooltipOptions??a.value?.tooltipOptions),ge=w(()=>gE(s.states.originColumns.value)[0]);return WU(o),Bt(()=>{q.cancel()}),{ns:n,layout:r,store:s,columns:ge,handleHeaderFooterMousewheel:$,handleMouseLeave:E,tableId:j,tableSize:O,isHidden:k,isEmpty:l,renderExpanded:y,resizeProxyVisible:N,resizeState:_,isGroup:C,bodyWidth:A,tableBodyStyles:z,emptyBlockStyle:R,debouncedUpdateLayout:q,setCurrentRow:u,getSelectionRows:c,toggleRowSelection:d,clearSelection:f,clearFilter:v,toggleAllSelection:g,toggleRowExpansion:p,clearSort:h,doLayout:V,sort:m,updateKeyChildren:b,t,setDragVisible:S,context:o,computedSumText:X,computedEmptyText:Q,computedTooltipEffect:he,computedTooltipOptions:ue,tableLayout:U,scrollbarViewStyle:W,scrollbarStyle:P,scrollBarRef:I,scrollTo:L,setScrollLeft:D,setScrollTop:F,allowDragLastColumn:e.allowDragLastColumn}}});const GU=["data-prefix"],XU={ref:"hiddenColumns",class:"hidden-columns"};function JU(e,t,n,a,o,s){const r=It("hColgroup"),l=It("table-header"),u=It("table-body"),c=It("table-footer"),d=It("el-scrollbar"),f=rv("mousewheel");return x(),B("div",{ref:"tableWrapper",class:T([{[e.ns.m("fit")]:e.fit,[e.ns.m("striped")]:e.stripe,[e.ns.m("border")]:e.border||e.isGroup,[e.ns.m("hidden")]:e.isHidden,[e.ns.m("group")]:e.isGroup,[e.ns.m("fluid-height")]:e.maxHeight,[e.ns.m("scrollable-x")]:e.layout.scrollX.value,[e.ns.m("scrollable-y")]:e.layout.scrollY.value,[e.ns.m("enable-row-hover")]:!e.store.states.isComplex.value,[e.ns.m("enable-row-transition")]:(e.store.states.data.value||[]).length!==0&&(e.store.states.data.value||[]).length<100,"has-footer":e.showSummary},e.ns.m(e.tableSize),e.className,e.ns.b(),e.ns.m(`layout-${e.tableLayout}`)]),style:Ke(e.style),"data-prefix":e.ns.namespace.value,onMouseleave:t[1]||(t[1]=(...v)=>e.handleMouseLeave&&e.handleMouseLeave(...v))},[H("div",{ref:"tableInnerWrapper",class:T(e.ns.e("inner-wrapper"))},[H("div",XU,[ee(e.$slots,"default")],512),e.showHeader&&e.tableLayout==="fixed"?ct((x(),B("div",{key:0,ref:"headerWrapper",class:T(e.ns.e("header-wrapper"))},[H("table",{ref:"tableHeader",class:T(e.ns.e("header")),style:Ke(e.tableBodyStyles),border:"0",cellpadding:"0",cellspacing:"0"},[Y(r,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),Y(l,{ref:"tableHeaderRef",border:e.border,"default-sort":e.defaultSort,store:e.store,"append-filter-panel-to":e.appendFilterPanelTo,"allow-drag-last-column":e.allowDragLastColumn,onSetDragVisible:e.setDragVisible},null,8,["border","default-sort","store","append-filter-panel-to","allow-drag-last-column","onSetDragVisible"])],6)],2)),[[f,e.handleHeaderFooterMousewheel]]):te("v-if",!0),H("div",{ref:"bodyWrapper",class:T(e.ns.e("body-wrapper"))},[Y(d,{ref:"scrollBarRef","view-style":e.scrollbarViewStyle,"wrap-style":e.scrollbarStyle,always:e.scrollbarAlwaysOn,tabindex:e.scrollbarTabindex,native:e.nativeScrollbar,onScroll:t[0]||(t[0]=v=>e.$emit("scroll",v))},{default:J(()=>[H("table",{ref:"tableBody",class:T(e.ns.e("body")),cellspacing:"0",cellpadding:"0",border:"0",style:Ke({width:e.bodyWidth,tableLayout:e.tableLayout})},[Y(r,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),e.showHeader&&e.tableLayout==="auto"?(x(),oe(l,{key:0,ref:"tableHeaderRef",class:T(e.ns.e("body-header")),border:e.border,"default-sort":e.defaultSort,store:e.store,"append-filter-panel-to":e.appendFilterPanelTo,onSetDragVisible:e.setDragVisible},null,8,["class","border","default-sort","store","append-filter-panel-to","onSetDragVisible"])):te("v-if",!0),Y(u,{context:e.context,highlight:e.highlightCurrentRow,"row-class-name":e.rowClassName,"tooltip-effect":e.computedTooltipEffect,"tooltip-options":e.computedTooltipOptions,"row-style":e.rowStyle,store:e.store,stripe:e.stripe},null,8,["context","highlight","row-class-name","tooltip-effect","tooltip-options","row-style","store","stripe"]),e.showSummary&&e.tableLayout==="auto"?(x(),oe(c,{key:1,class:T(e.ns.e("body-footer")),border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["class","border","default-sort","store","sum-text","summary-method"])):te("v-if",!0)],6),e.isEmpty?(x(),B("div",{key:0,ref:"emptyBlock",style:Ke(e.emptyBlockStyle),class:T(e.ns.e("empty-block"))},[H("span",{class:T(e.ns.e("empty-text"))},[ee(e.$slots,"empty",{},()=>[wt(Se(e.computedEmptyText),1)])],2)],6)):te("v-if",!0),e.$slots.append?(x(),B("div",{key:1,ref:"appendWrapper",class:T(e.ns.e("append-wrapper"))},[ee(e.$slots,"append")],2)):te("v-if",!0)]),_:3},8,["view-style","wrap-style","always","tabindex","native"])],2),e.showSummary&&e.tableLayout==="fixed"?ct((x(),B("div",{key:1,ref:"footerWrapper",class:T(e.ns.e("footer-wrapper"))},[H("table",{class:T(e.ns.e("footer")),cellspacing:"0",cellpadding:"0",border:"0",style:Ke(e.tableBodyStyles)},[Y(r,{columns:e.store.states.columns.value,"table-layout":e.tableLayout},null,8,["columns","table-layout"]),Y(c,{border:e.border,"default-sort":e.defaultSort,store:e.store,"sum-text":e.computedSumText,"summary-method":e.summaryMethod},null,8,["border","default-sort","store","sum-text","summary-method"])],6)],2)),[[Pt,!e.isEmpty],[f,e.handleHeaderFooterMousewheel]]):te("v-if",!0),e.border||e.isGroup?(x(),B("div",{key:2,class:T(e.ns.e("border-left-patch"))},null,2)):te("v-if",!0)],2),ct(H("div",{ref:"resizeProxy",class:T(e.ns.e("column-resize-proxy"))},null,2),[[Pt,e.resizeProxyVisible]])],46,GU)}var ZU=$n(YU,[["render",JU]]);const QU={selection:"table-column--selection",expand:"table__expand-column"},eq={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:""}},tq=e=>QU[e]||"",nq={selection:{renderHeader({store:e}){function t(){return e.states.data.value&&e.states.data.value.length===0}return qe(oo,{disabled:t(),size:e.states.tableSize.value,indeterminate:e.states.selection.value.length>0&&!e.states.isAllSelected.value,"onUpdate:modelValue":e.toggleAllSelection??void 0,modelValue:e.states.isAllSelected.value,ariaLabel:e.t("el.table.selectAllLabel")})},renderCell({row:e,column:t,store:n,$index:a}){return qe(oo,{disabled:t.selectable?!t.selectable.call(null,e,a):!1,size:n.states.tableSize.value,onChange:()=>{n.commit("rowSelectedChanged",e)},onClick:o=>o.stopPropagation(),modelValue:n.isSelected(e),ariaLabel:n.t("el.table.selectRowLabel")})},sortable:!1,resizable:!1},index:{renderHeader({column:e}){return e.label||"#"},renderCell({column:e,$index:t}){let n=t+1;const a=e.index;return He(a)?n=t+a:Ve(a)&&(n=a(t)),qe("div",{},[n])},sortable:!1},expand:{renderHeader({column:e}){return e.label||""},renderCell({column:e,row:t,store:n,expanded:a,$index:o}){const{ns:s}=n,r=[s.e("expand-icon")];!e.renderExpand&&a&&r.push(s.em("expand-icon","expanded"));const l=function(c){c.stopPropagation(),n.toggleRowExpansion(t)},u=n.states.rowExpandable.value?.(t,o)??!0;return u||r.push(s.is("disabled")),qe("button",{type:"button",disabled:!u,"aria-label":n.t(a?"el.table.collapseRowLabel":"el.table.expandRowLabel"),"aria-expanded":a,class:r,onClick:l},{default:()=>e.renderExpand?[e.renderExpand({expanded:a,expandable:u})]:[qe(De,null,{default:()=>[qe(na)]})]})},sortable:!1,resizable:!1}};function aq({row:e,column:t,$index:n}){const a=t.property,o=a&&Ms(e,a).value;return t&&t.formatter?t.formatter(e,t,o,n):o?.toString?.()||""}function oq({row:e,treeNode:t,store:n},a=!1){const{ns:o}=n;if(!t)return a?[qe("span",{class:o.e("placeholder")})]:null;const s=[],r=function(l){l.stopPropagation(),!t.loading&&n.loadOrToggle(e)};if(t.indent&&s.push(qe("span",{class:o.e("indent"),style:{"padding-left":`${t.indent}px`}})),Ht(t.expanded)&&!t.noLazyChildren){const l=[o.e("expand-icon"),t.expanded?o.em("expand-icon","expanded"):""];let u=na;t.loading&&(u=_o),s.push(qe("button",{type:"button","aria-label":n.t(t.expanded?"el.table.collapseRowLabel":"el.table.expandRowLabel"),"aria-expanded":t.expanded,class:l,onClick:r},{default:()=>[qe(De,{class:o.is("loading",t.loading)},{default:()=>[qe(u)]})]}))}else s.push(qe("span",{class:o.e("placeholder")}));return s}function R0(e,t){return e.reduce((n,a)=>(n[a]=a,n),t)}function sq(e,t){const n=ft();return{registerComplexWatchers:()=>{const s=["fixed"],r={realWidth:"width",realMinWidth:"minWidth"},l=R0(s,r);Object.keys(l).forEach(u=>{const c=r[u];Rt(t,c)&&le(()=>t[c],d=>{let f=d;c==="width"&&u==="realWidth"&&(f=Im(d)),c==="minWidth"&&u==="realMinWidth"&&(f=cE(d)),n.columnConfig.value[c]=f,n.columnConfig.value[u]=f;const v=c==="fixed";e.value.store.scheduleLayout(v)})})},registerNormalWatchers:()=>{const s=["label","filters","filterMultiple","filteredValue","sortable","index","formatter","className","labelClassName","filterClassName","showOverflowTooltip","tooltipFormatter","resizable"],r=["showOverflowTooltip"],l={property:"prop",align:"realAlign",headerAlign:"realHeaderAlign"},u=R0(s,l);Object.keys(u).forEach(d=>{const f=l[d];Rt(t,f)&&le(()=>t[f],v=>{n.columnConfig.value[d]=v,(d==="filters"||d==="filterMethod")&&(n.columnConfig.value.filterable=!!(n.columnConfig.value.filters||n.columnConfig.value.filterMethod))})}),r.forEach(d=>{Rt(e.value.props,d)&&le(()=>e.value.props[d],f=>{n.columnConfig.value.type!=="selection"&&Tt(t[d])&&(n.columnConfig.value[d]=f)})});const c=gs("table");c.value&&Rt(c.value,"showOverflowTooltip")&&le(()=>c.value?.showOverflowTooltip,d=>{n.columnConfig.value.type!=="selection"&&(!Tt(t.showOverflowTooltip)||!Tt(e.value.props.showOverflowTooltip)||(n.columnConfig.value.showOverflowTooltip=d))})}}}function rq(e,t,n){const a=ft(),o=M(""),s=M(!1),r=M(),l=M(),u=fe("table");wa(()=>{r.value=e.align?`is-${e.align}`:null,r.value}),wa(()=>{l.value=e.headerAlign?`is-${e.headerAlign}`:r.value,l.value});const c=w(()=>{let S=a.vnode.vParent||a.parent;for(;S&&!S.tableId&&!S.columnId;)S=S.vnode.vParent||S.parent;return S}),d=w(()=>{const{store:S}=a.parent;if(!S)return!1;const{treeData:C}=S.states,E=C.value;return E&&Object.keys(E).length>0}),f=M(Im(e.width)),v=M(cE(e.minWidth)),g=S=>(f.value&&(S.width=f.value),v.value&&(S.minWidth=v.value),!f.value&&v.value&&(S.width=void 0),S.minWidth||(S.minWidth=80),S.realWidth=Number(Tt(S.width)?S.minWidth:S.width),S),p=S=>{const C=S.type,E=nq[C]||{};Object.keys(E).forEach(O=>{const R=E[O];O!=="className"&&!Tt(R)&&(S[O]=R)});const $=tq(C);if($){const O=`${i(u.namespace)}-${$}`;S.className=S.className?`${S.className} ${O}`:O}return S},h=S=>{ye(S)?S.forEach(E=>C(E)):C(S);function C(E){E?.type?.name==="ElTableColumn"&&(E.vParent=a)}};return{columnId:o,realAlign:r,isSubColumn:s,realHeaderAlign:l,columnOrTableParent:c,setColumnWidth:g,setColumnForcedProps:p,setColumnRenders:S=>{e.renderHeader?pt("TableColumn","Comparing to render-header, scoped-slot header is easier to use. We recommend users to use scoped-slot header."):S.type!=="selection"&&(S.renderHeader=E=>{if(a.columnConfig.value.label,t.header){const $=t.header(E);if(pE($))return qe(Fe,$)}return wt(S.label)}),t["filter-icon"]&&(S.renderFilterIcon=E=>ee(t,"filter-icon",E)),t.expand&&(S.renderExpand=E=>ee(t,"expand",E));let C=S.renderCell;return S.type==="expand"?(S.renderCell=E=>qe("div",{class:"cell"},[C(E)]),n.value.renderExpanded=E=>t.default?t.default(E):t.default):(C=C||aq,S.renderCell=E=>{let $=null;if(t.default){const _=t.default(E);$=_.some(V=>V.type!==mn)?_:C(E)}else $=C(E);const{columns:O}=n.value.store.states,R=O.value.findIndex(_=>_.type==="default"),N=oq(E,d.value&&E.cellIndex===R),A={class:"cell",style:{}};return S.showOverflowTooltip&&(A.class=`${A.class} ${i(u.namespace)}-tooltip`,A.style={width:`${(E.column.realWidth||Number(E.column.width))-1}px`}),h($),qe("div",A,[N,$])}),S},getPropsData:(...S)=>S.reduce((C,E)=>(ye(E)&&E.forEach($=>{C[$]=e[$]}),C),{}),getColumnElIndex:(S,C)=>Array.prototype.indexOf.call(S,C),updateColumnOrder:()=>{n.value.store.commit("updateColumnOrder",a.columnConfig.value)}}}var lq={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:!1},sortMethod:Function,sortBy:[String,Function,Array],resizable:{type:Boolean,default:!0},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:!0},filterClassName:String,index:[Number,Function],sortOrders:{type:Array,default:()=>["ascending","descending",null],validator:e=>e.every(t=>["ascending","descending",null].includes(t))}};let iq=1;var uq=se({name:"ElTableColumn",components:{ElCheckbox:oo},props:lq,setup(e,{slots:t}){const n=ft(),a=gs("table"),o=M({}),s=w(()=>{let S=n.parent;for(;S&&!S.tableId;)S=S.parent;return S}),{registerNormalWatchers:r,registerComplexWatchers:l}=sq(s,e),{columnId:u,isSubColumn:c,realHeaderAlign:d,columnOrTableParent:f,setColumnWidth:v,setColumnForcedProps:g,setColumnRenders:p,getPropsData:h,getColumnElIndex:m,realAlign:b,updateColumnOrder:k}=rq(e,t,s),y=f.value;u.value=`${"tableId"in y&&y.tableId||"columnId"in y&&y.columnId}_column_${iq++}`,Pd(()=>{c.value=s.value!==y;const S=e.type||"default",C=e.sortable===""?!0:e.sortable,E=S==="selection"?!1:Tt(e.showOverflowTooltip)?y.props.showOverflowTooltip??a.value?.showOverflowTooltip:e.showOverflowTooltip,$=Tt(e.tooltipFormatter)?y.props.tooltipFormatter??a.value?.tooltipFormatter:e.tooltipFormatter,O={...eq[S],id:u.value,type:S,property:e.prop||e.property,align:b,headerAlign:d,showOverflowTooltip:E,tooltipFormatter:$,filterable:e.filters||e.filterMethod,filteredValue:[],filterPlacement:"",filterClassName:"",isColumnGroup:!1,isSubColumn:!1,filterOpened:!1,sortable:C,index:e.index,rawColumnKey:n.vnode.key};let R=h(["columnKey","label","className","labelClassName","type","renderHeader","formatter","fixed","resizable"],["sortMethod","sortBy","sortOrders"],["selectable","reserveSelection"],["filterMethod","filters","filterMultiple","filterOpened","filteredValue","filterPlacement","filterClassName"]);R=sU(O,R),R=lU(p,v,g)(R),o.value=R,r(),l()}),ht(()=>{const S=f.value,C=c.value?S.vnode.el?.children:S.refs.hiddenColumns?.children,E=()=>m(C||[],n.vnode.el);o.value.getColumnIndex=E,E()>-1&&s.value.store.commit("insertColumn",o.value,c.value?"columnConfig"in S&&S.columnConfig.value:null,k)}),Bt(()=>{const S=o.value.getColumnIndex;(S?S():-1)>-1&&s.value.store.commit("removeColumn",o.value,c.value?"columnConfig"in y&&y.columnConfig.value:null,k)}),n.columnId=u.value,n.columnConfig=o},render(){try{const e=this.$slots.default?.({row:{},column:{},$index:-1}),t=[];if(ye(e))for(const n of e)n.type?.name==="ElTableColumn"||n.shapeFlag&2?t.push(n):n.type===Fe&&ye(n.children)&&n.children.forEach(a=>{a?.patchFlag!==1024&&!Le(a?.children)&&t.push(a)});return qe("div",t)}catch{return qe("div",[])}}}),yE=uq;const cq=st(ZU,{TableColumn:yE}),dq=tn(yE);let ko=(function(e){return e.ASC="asc",e.DESC="desc",e})({}),yd=(function(e){return e.LEFT="left",e.CENTER="center",e.RIGHT="right",e})({}),fq=(function(e){return e.LEFT="left",e.RIGHT="right",e})({});const $h={[ko.ASC]:ko.DESC,[ko.DESC]:ko.ASC},Wi=Symbol("placeholder"),wE=String,Su={type:G(Array),required:!0},Lm={type:G(Array)},SE={...Lm,required:!0},pq=String,I0={type:G(Array),default:()=>sn([])},tr={type:Number,required:!0},CE={type:G([String,Number,Symbol]),default:"id"},P0={type:G(Object)},lr=Ce({class:String,columns:Su,columnsStyles:{type:G(Object),required:!0},depth:Number,expandColumnKey:pq,estimatedRowHeight:{...pr.estimatedRowHeight,default:void 0},isScrolling:Boolean,onRowExpand:{type:G(Function)},onRowHover:{type:G(Function)},onRowHeightChange:{type:G(Function)},rowData:{type:G(Object),required:!0},rowEventHandlers:{type:G(Object)},rowIndex:{type:Number,required:!0},rowKey:CE,style:{type:G(Object)}}),up={type:Number,required:!0},Dm=Ce({class:String,columns:Su,fixedHeaderData:{type:G(Array)},headerData:{type:G(Array),required:!0},headerHeight:{type:G([Number,Array]),default:50},rowWidth:up,rowHeight:{type:Number,default:50},height:up,width:up}),Nc=Ce({columns:Su,data:SE,fixedData:Lm,estimatedRowHeight:lr.estimatedRowHeight,width:tr,height:tr,headerWidth:tr,headerHeight:Dm.headerHeight,bodyWidth:tr,rowHeight:tr,cache:W2.cache,useIsScrolling:Boolean,scrollbarAlwaysOn:pr.scrollbarAlwaysOn,scrollbarStartGap:pr.scrollbarStartGap,scrollbarEndGap:pr.scrollbarEndGap,class:wE,style:P0,containerStyle:P0,getRowHeight:{type:G(Function),required:!0},rowKey:lr.rowKey,onRowsRendered:{type:G(Function)},onScroll:{type:G(Function)}}),hq=Ce({cache:Nc.cache,estimatedRowHeight:lr.estimatedRowHeight,rowKey:CE,headerClass:{type:G([String,Function])},headerProps:{type:G([Object,Function])},headerCellProps:{type:G([Object,Function])},headerHeight:Dm.headerHeight,footerHeight:{type:Number,default:0},rowClass:{type:G([String,Function])},rowProps:{type:G([Object,Function])},rowHeight:{type:Number,default:50},cellProps:{type:G([Object,Function])},columns:Su,data:SE,dataGetter:{type:G(Function)},fixedData:Lm,expandColumnKey:lr.expandColumnKey,expandedRowKeys:I0,defaultExpandedRowKeys:I0,class:wE,fixed:Boolean,style:{type:G(Object)},width:tr,height:tr,maxHeight:Number,useIsScrolling:Boolean,indentSize:{type:Number,default:12},iconSize:{type:Number,default:12},hScrollbarSize:pr.hScrollbarSize,vScrollbarSize:pr.vScrollbarSize,scrollbarAlwaysOn:q2.alwaysOn,sortBy:{type:G(Object),default:()=>({})},sortState:{type:G(Object),default:void 0},onColumnSort:{type:G(Function)},onExpandedRowsChange:{type:G(Function)},onEndReached:{type:G(Function)},onRowExpand:lr.onRowExpand,onScroll:Nc.onScroll,onRowsRendered:Nc.onRowsRendered,rowEventHandlers:lr.rowEventHandlers}),vq=(e,t,n)=>{const a={flexGrow:0,flexShrink:0,...n?{}:{flexGrow:e.flexGrow??0,flexShrink:e.flexShrink??1}},o={...e.style??{},...a,flexBasis:"auto",width:e.width};return t||(e.maxWidth&&(o.maxWidth=e.maxWidth),e.minWidth&&(o.minWidth=e.minWidth)),o};function mq(e,t,n){const a=w(()=>i(t).map((m,b)=>({...m,key:m.key??m.dataKey??b}))),o=w(()=>i(a).filter(m=>!m.hidden)),s=w(()=>i(o).filter(m=>m.fixed==="left"||m.fixed===!0)),r=w(()=>i(o).filter(m=>m.fixed==="right")),l=w(()=>i(o).filter(m=>!m.fixed)),u=w(()=>{const m=[];return i(s).forEach(b=>{m.push({...b,placeholderSign:Wi})}),i(l).forEach(b=>{m.push(b)}),i(r).forEach(b=>{m.push({...b,placeholderSign:Wi})}),m}),c=w(()=>i(s).length||i(r).length),d=w(()=>i(a).reduce((m,b)=>(m[b.key]=vq(b,i(n),e.fixed),m),{})),f=w(()=>i(o).reduce((m,b)=>m+b.width,0)),v=m=>i(a).find(b=>b.key===m),g=m=>i(d)[m],p=(m,b)=>{m.width=b};function h(m){const{key:b}=m.currentTarget.dataset;if(!b)return;const{sortState:k,sortBy:y}=e;let S=ko.ASC;nt(k)?S=$h[k[b]]:S=$h[y.order],e.onColumnSort?.({column:v(b),key:b,order:S})}return{columns:a,columnsStyles:d,columnsTotalWidth:f,fixedColumnsOnLeft:s,fixedColumnsOnRight:r,hasFixedColumns:c,mainColumns:u,normalColumns:l,visibleColumns:o,getColumn:v,getColumnStyle:g,updateColumnWidth:p,onColumnSorted:h}}const gq=(e,{mainTableRef:t,leftTableRef:n,rightTableRef:a,onMaybeEndReached:o})=>{const s=M({scrollLeft:0,scrollTop:0});function r(g){const{scrollTop:p}=g;t.value?.scrollTo(g),n.value?.scrollToTop(p),a.value?.scrollToTop(p)}function l(g){s.value=g,r(g)}function u(g){s.value.scrollTop=g,r(i(s))}function c(g){s.value.scrollLeft=g,t.value?.scrollTo?.(i(s))}function d(g){l(g),e.onScroll?.(g)}function f({scrollTop:g}){const{scrollTop:p}=i(s);g!==p&&u(g)}function v(g,p="auto"){t.value?.scrollToRow(g,p)}return le(()=>i(s).scrollTop,(g,p)=>{g>p&&o()}),{scrollPos:s,scrollTo:l,scrollToLeft:c,scrollToTop:u,scrollToRow:v,onScroll:d,onVerticalScroll:f}},bq=(e,{mainTableRef:t,leftTableRef:n,rightTableRef:a,tableInstance:o,ns:s,isScrolling:r})=>{const l=ft(),{emit:u}=l,c=Xt(!1),d=M(e.defaultExpandedRowKeys||[]),f=M(-1),v=Xt(null),g=M({}),p=M({}),h=Xt({}),m=Xt({}),b=Xt({}),k=w(()=>He(e.estimatedRowHeight));function y(N){e.onRowsRendered?.(N),N.rowCacheEnd>i(f)&&(f.value=N.rowCacheEnd)}function S({hovered:N,rowKey:A}){r.value||o.vnode.el.querySelectorAll(`[rowkey="${String(A)}"]`).forEach(_=>{N?_.classList.add(s.is("hovered")):_.classList.remove(s.is("hovered"))})}function C({expanded:N,rowData:A,rowIndex:_,rowKey:V}){const z=[...i(d)],U=z.indexOf(V);N?U===-1&&z.push(V):U>-1&&z.splice(U,1),d.value=z,u("update:expandedRowKeys",z),e.onRowExpand?.({expanded:N,rowData:A,rowIndex:_,rowKey:V}),e.onExpandedRowsChange?.(z),o.vnode.el.querySelector(`.${s.is("hovered")}[rowkey="${String(V)}"]`)&&Ne(()=>S({hovered:!0,rowKey:V}))}const E=Po(()=>{c.value=!0,g.value={...i(g),...i(p)},$(i(v),!1),p.value={},v.value=null,t.value?.forceUpdate(),n.value?.forceUpdate(),a.value?.forceUpdate(),l.proxy?.$forceUpdate(),c.value=!1},0);function $(N,A=!1){i(k)&&[t,n,a].forEach(_=>{const V=i(_);V&&V.resetAfterRowIndex(N,A)})}function O(N,A,_){const V=i(v);(V===null||V>_)&&(v.value=_),p.value[N]=A}function R({rowKey:N,height:A,rowIndex:_},V){V?V===fq.RIGHT?b.value[N]=A:h.value[N]=A:m.value[N]=A;const z=Math.max(...[h,b,m].map(U=>U.value[N]||0));i(g)[N]!==z&&(O(N,z,_),E())}return{expandedRowKeys:d,lastRenderedRowIndex:f,isDynamic:k,isResetting:c,rowHeights:g,resetAfterIndex:$,onRowExpanded:C,onRowHovered:S,onRowsRendered:y,onRowHeightChange:R}},yq=(e,{expandedRowKeys:t,lastRenderedRowIndex:n,resetAfterIndex:a})=>{const o=M({}),s=w(()=>{const l={},{data:u,rowKey:c}=e,d=i(t);if(!d||!d.length)return u;const f=[],v=new Set;d.forEach(p=>v.add(p));let g=u.slice();for(g.forEach(p=>l[p[c]]=0);g.length>0;){const p=g.shift();f.push(p),v.has(p[c])&&ye(p.children)&&p.children.length>0&&(g=[...p.children,...g],p.children.forEach(h=>l[h[c]]=l[p[c]]+1))}return o.value=l,f}),r=w(()=>{const{data:l,expandColumnKey:u}=e;return u?i(s):l});return le(r,(l,u)=>{l!==u&&(n.value=-1,a(0,!0))}),{data:r,depthMap:o}},wq=(e,t)=>e+t,Rc=e=>ye(e)?e.reduce(wq,0):e,kr=(e,t,n={})=>Ve(e)?e(t):e??n,Ps=e=>(["width","maxWidth","minWidth","height"].forEach(t=>{e[t]=rn(e[t])}),e),kE=e=>Ut(e)?t=>qe(e,t):e,Sq=(e,{columnsTotalWidth:t,rowsHeight:n,fixedColumnsOnLeft:a,fixedColumnsOnRight:o})=>{const s=w(()=>{const{fixed:h,width:m,vScrollbarSize:b}=e,k=m-b;return h?Math.max(Math.round(i(t)),k):k}),r=w(()=>{const{height:h=0,maxHeight:m=0,footerHeight:b,hScrollbarSize:k}=e;if(m>0){const y=i(v),S=i(n),C=i(f)+y+S+k;return Math.min(C,m-b)}return h-b}),l=w(()=>{const{maxHeight:h}=e,m=i(r);if(He(h)&&h>0)return m;const b=i(n)+i(f)+i(v);return Math.min(m,b)}),u=h=>h.width,c=w(()=>Rc(i(a).map(u))),d=w(()=>Rc(i(o).map(u))),f=w(()=>Rc(e.headerHeight)),v=w(()=>(e.fixedData?.length||0)*e.rowHeight),g=w(()=>i(r)-i(f)-i(v)),p=w(()=>{const{style:h={},height:m,width:b}=e;return Ps({...h,height:m,width:b})});return{bodyWidth:s,fixedTableHeight:l,mainTableHeight:r,leftTableWidth:c,rightTableWidth:d,windowHeight:g,footerHeight:w(()=>Ps({height:e.footerHeight})),emptyStyle:w(()=>({top:rn(i(f)),bottom:rn(e.footerHeight),width:rn(e.width)})),rootStyle:p,headerHeight:f}};function Cq(e){const t=M(),n=M(),a=M(),{columns:o,columnsStyles:s,columnsTotalWidth:r,fixedColumnsOnLeft:l,fixedColumnsOnRight:u,hasFixedColumns:c,mainColumns:d,onColumnSorted:f}=mq(e,Vt(e,"columns"),Vt(e,"fixed")),{scrollTo:v,scrollToLeft:g,scrollToTop:p,scrollToRow:h,onScroll:m,onVerticalScroll:b,scrollPos:k}=gq(e,{mainTableRef:t,leftTableRef:n,rightTableRef:a,onMaybeEndReached:Z}),y=fe("table-v2"),S=ft(),C=Xt(!1),{expandedRowKeys:E,lastRenderedRowIndex:$,isDynamic:O,isResetting:R,rowHeights:N,resetAfterIndex:A,onRowExpanded:_,onRowHeightChange:V,onRowHovered:z,onRowsRendered:U}=bq(e,{mainTableRef:t,leftTableRef:n,rightTableRef:a,tableInstance:S,ns:y,isScrolling:C}),{data:W,depthMap:P}=yq(e,{expandedRowKeys:E,lastRenderedRowIndex:$,resetAfterIndex:A}),I=w(()=>{const{estimatedRowHeight:re,rowHeight:ce}=e,ve=i(W);return He(re)?Object.values(i(N)).reduce((ke,Re)=>ke+Re,0):ve.length*ce}),{bodyWidth:L,fixedTableHeight:D,mainTableHeight:F,leftTableWidth:q,rightTableWidth:j,windowHeight:X,footerHeight:Q,emptyStyle:he,rootStyle:ue,headerHeight:ge}=Sq(e,{columnsTotalWidth:r,fixedColumnsOnLeft:l,fixedColumnsOnRight:u,rowsHeight:I}),ie=M(),ae=w(()=>{const re=i(W).length===0;return ye(e.fixedData)?e.fixedData.length===0&&re:re});function ne(re){const{estimatedRowHeight:ce,rowHeight:ve,rowKey:ke}=e;return ce?i(N)[i(W)[re][ke]]||ce:ve}const K=M(!1);function Z(){const{onEndReached:re}=e;if(!re)return;const{scrollTop:ce}=i(k),ve=i(I),ke=ve-(ce+i(X))+e.hScrollbarSize;!K.value&&i($)>=0&&ve<=ce+i(F)-i(ge)?(K.value=!0,re(ke)):K.value=!1}return le(()=>i(I),()=>K.value=!1),le(()=>e.expandedRowKeys,re=>E.value=re,{deep:!0}),{columns:o,containerRef:ie,mainTableRef:t,leftTableRef:n,rightTableRef:a,isDynamic:O,isResetting:R,isScrolling:C,hasFixedColumns:c,columnsStyles:s,columnsTotalWidth:r,data:W,expandedRowKeys:E,depthMap:P,fixedColumnsOnLeft:l,fixedColumnsOnRight:u,mainColumns:d,bodyWidth:L,emptyStyle:he,rootStyle:ue,footerHeight:Q,mainTableHeight:F,fixedTableHeight:D,leftTableWidth:q,rightTableWidth:j,showEmpty:ae,getRowHeight:ne,onColumnSorted:f,onRowHovered:z,onRowExpanded:_,onRowsRendered:U,onRowHeightChange:V,scrollTo:v,scrollToLeft:g,scrollToTop:p,scrollToRow:h,onScroll:m,onVerticalScroll:b}}const Bm=Symbol("tableV2"),EE="tableV2GridScrollLeft",kq=se({name:"ElTableV2Header",props:Dm,setup(e,{slots:t,expose:n}){const a=fe("table-v2"),o=_e(EE),s=M(),r=w(()=>Ps({width:e.width,height:e.height})),l=w(()=>Ps({width:e.rowWidth,height:e.height})),u=w(()=>Rn(i(e.headerHeight))),c=v=>{const g=i(s);Ne(()=>{g?.scroll&&g.scroll({left:v})})},d=()=>{const v=a.e("fixed-header-row"),{columns:g,fixedHeaderData:p,rowHeight:h}=e;return p?.map((m,b)=>{const k=Ps({height:h,width:"100%"});return t.fixed?.({class:v,columns:g,rowData:m,rowIndex:-(b+1),style:k})})},f=()=>{const v=a.e("dynamic-header-row"),{columns:g}=e;return i(u).map((p,h)=>{const m=Ps({width:"100%",height:p});return t.dynamic?.({class:v,columns:g,headerIndex:h,style:m})})};return so(()=>{o?.value&&c(o.value)}),n({scrollToLeft:c}),()=>{if(!(e.height<=0))return Y("div",{ref:s,class:e.class,style:i(r),role:"rowgroup"},[Y("div",{style:i(l),class:a.e("header")},[f(),d()])])}}}),Eq="ElTableV2Grid",xq=e=>{const t=M(),n=M(),a=M(0),o=w(()=>{const{data:m,rowHeight:b,estimatedRowHeight:k}=e;if(!k)return m.length*b}),s=w(()=>{const{fixedData:m,rowHeight:b}=e;return(m?.length||0)*b}),r=w(()=>Rc(e.headerHeight)),l=w(()=>{const{height:m}=e;return Math.max(0,m-i(r)-i(s))}),u=w(()=>i(r)+i(s)>0),c=({data:m,rowIndex:b})=>m[b][e.rowKey];function d({rowCacheStart:m,rowCacheEnd:b,rowVisibleStart:k,rowVisibleEnd:y}){e.onRowsRendered?.({rowCacheStart:m,rowCacheEnd:b,rowVisibleStart:k,rowVisibleEnd:y})}function f(m,b){n.value?.resetAfterRowIndex(m,b)}function v(m,b){const k=i(t),y=i(n);nt(m)?(k?.scrollToLeft(m.scrollLeft),a.value=m.scrollLeft,y?.scrollTo(m)):(k?.scrollToLeft(m),a.value=m,y?.scrollTo({scrollLeft:m,scrollTop:b}))}function g(m){i(n)?.scrollTo({scrollTop:m})}function p(m,b){const k=i(n);if(!k)return;const y=a.value;k.scrollToItem(m,0,b),y&&v({scrollLeft:y})}function h(){i(n)?.$forceUpdate(),i(t)?.$forceUpdate()}return le(()=>e.bodyWidth,()=>{He(e.estimatedRowHeight)&&n.value?.resetAfter({columnIndex:0},!1)}),{bodyRef:n,forceUpdate:h,fixedRowHeight:s,gridHeight:l,hasHeader:u,headerHeight:r,headerRef:t,totalHeight:o,itemKey:c,onItemRendered:d,resetAfterRowIndex:f,scrollTo:v,scrollToTop:g,scrollToRow:p,scrollLeft:a}},Fm=se({name:Eq,props:Nc,setup(e,{slots:t,expose:n}){const{ns:a}=_e(Bm),{bodyRef:o,fixedRowHeight:s,gridHeight:r,hasHeader:l,headerRef:u,headerHeight:c,totalHeight:d,forceUpdate:f,itemKey:v,onItemRendered:g,resetAfterRowIndex:p,scrollTo:h,scrollToTop:m,scrollToRow:b,scrollLeft:k}=xq(e);St(EE,k),Gi(async()=>{await Ne();const S=o.value?.states.scrollTop;S&&m(Math.round(S)+1)}),n({forceUpdate:f,totalHeight:d,scrollTo:h,scrollToTop:m,scrollToRow:b,resetAfterRowIndex:p});const y=()=>e.bodyWidth;return()=>{const{cache:S,columns:C,data:E,fixedData:$,useIsScrolling:O,scrollbarAlwaysOn:R,scrollbarEndGap:N,scrollbarStartGap:A,style:_,rowHeight:V,bodyWidth:z,estimatedRowHeight:U,headerWidth:W,height:P,width:I,getRowHeight:L,onScroll:D}=e,F=He(U),q=F?D9:M9,j=i(c);return Y("div",{role:"table",class:[a.e("table"),e.class],style:_},[Y(q,{ref:o,data:E,useIsScrolling:O,itemKey:v,columnCache:0,columnWidth:F?y:z,totalColumn:1,totalRow:E.length,rowCache:S,rowHeight:F?L:V,width:I,height:i(r),class:a.e("body"),role:"rowgroup",scrollbarStartGap:A,scrollbarEndGap:N,scrollbarAlwaysOn:R,onScroll:D,onItemRendered:g,perfMode:!1},{default:X=>{const Q=E[X.rowIndex];return t.row?.({...X,columns:C,rowData:Q})}}),i(l)&&Y(kq,{ref:u,class:a.e("header-wrapper"),columns:C,headerData:E,headerHeight:e.headerHeight,fixedHeaderData:$,rowWidth:W,rowHeight:V,width:I,height:Math.min(j+i(s),P)},{dynamic:t.header,fixed:t.row})])}}});function Tq(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Ut(e)}const $q=(e,{slots:t})=>{const{mainTableRef:n,...a}=e;return Y(Fm,dt({ref:n},a),Tq(t)?t:{default:()=>[t]})};function Oq(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Ut(e)}const Nq=(e,{slots:t})=>{if(!e.columns.length)return;const{leftTableRef:n,...a}=e;return Y(Fm,dt({ref:n},a),Oq(t)?t:{default:()=>[t]})};function Rq(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Ut(e)}const Iq=(e,{slots:t})=>{if(!e.columns.length)return;const{rightTableRef:n,...a}=e;return Y(Fm,dt({ref:n},a),Rq(t)?t:{default:()=>[t]})},Pq=e=>{const{isScrolling:t}=_e(Bm),n=M(!1),a=M(),o=w(()=>He(e.estimatedRowHeight)&&e.rowIndex>=0),s=(u=!1)=>{const c=i(a);if(!c)return;const{columns:d,onRowHeightChange:f,rowKey:v,rowIndex:g,style:p}=e,{height:h}=c.getBoundingClientRect();n.value=!0,Ne(()=>{if(u||h!==Number.parseInt(p.height)){const m=d[0],b=m?.placeholderSign===Wi;f?.({rowKey:v,height:h,rowIndex:g},m&&!b&&m.fixed)}})},r=w(()=>{const{rowData:u,rowIndex:c,rowKey:d,onRowHover:f}=e,v=e.rowEventHandlers||{},g={};return Object.entries(v).forEach(([p,h])=>{Ve(h)&&(g[p]=m=>{h({event:m,rowData:u,rowIndex:c,rowKey:d})})}),f&&[{name:"onMouseleave",hovered:!1},{name:"onMouseenter",hovered:!0}].forEach(({name:p,hovered:h})=>{const m=g[p];g[p]=b=>{f({event:b,hovered:h,rowData:u,rowIndex:c,rowKey:d}),m?.(b)}}),g}),l=u=>{const{onRowExpand:c,rowData:d,rowIndex:f,rowKey:v}=e;c?.({expanded:u,rowData:d,rowIndex:f,rowKey:v})};return ht(()=>{i(o)&&s(!0)}),{isScrolling:t,measurable:o,measured:n,rowRef:a,eventHandlers:r,onExpand:l}},Mq=se({name:"ElTableV2TableRow",props:lr,setup(e,{expose:t,slots:n,attrs:a}){const{eventHandlers:o,isScrolling:s,measurable:r,measured:l,rowRef:u,onExpand:c}=Pq(e);return t({onExpand:c}),()=>{const{columns:d,columnsStyles:f,expandColumnKey:v,depth:g,rowData:p,rowIndex:h,style:m}=e;let b=d.map((k,y)=>{const S=ye(p.children)&&p.children.length>0&&k.key===v;return n.cell({column:k,columns:d,columnIndex:y,depth:g,style:f[k.key],rowData:p,rowIndex:h,isScrolling:i(s),expandIconProps:S?{rowData:p,rowIndex:h,onExpand:c}:void 0})});if(n.row&&(b=n.row({cells:b.map(k=>ye(k)&&k.length===1?k[0]:k),style:m,columns:d,depth:g,rowData:p,rowIndex:h,isScrolling:i(s)})),i(r)){const{height:k,...y}=m||{},S=i(l);return Y("div",dt({ref:u,class:e.class,style:S?m:y,role:"row"},a,i(o)),[b])}return Y("div",dt(a,{ref:u,class:e.class,style:m,role:"row"},i(o)),[b])}}});function _q(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Ut(e)}const Aq=(e,{slots:t})=>{const{columns:n,columnsStyles:a,depthMap:o,expandColumnKey:s,expandedRowKeys:r,estimatedRowHeight:l,hasFixedColumns:u,rowData:c,rowIndex:d,style:f,isScrolling:v,rowProps:g,rowClass:p,rowKey:h,rowEventHandlers:m,ns:b,onRowHovered:k,onRowExpanded:y}=e,S=kr(p,{columns:n,rowData:c,rowIndex:d},""),C=kr(g,{columns:n,rowData:c,rowIndex:d}),E=c[h],$=o[E]||0,O=!!s,R=d<0,N=[b.e("row"),S,b.is("expanded",O&&r.includes(E)),b.is("fixed",!$&&R),b.is("customized",!!t.row),{[b.e(`row-depth-${$}`)]:O&&d>=0}],A=u?k:void 0,_={...C,columns:n,columnsStyles:a,class:N,depth:$,expandColumnKey:s,estimatedRowHeight:R?void 0:l,isScrolling:v,rowIndex:d,rowData:c,rowKey:E,rowEventHandlers:m,style:f};return Y(Mq,dt(_,{onRowExpand:y,onMouseenter:U=>{A?.({hovered:!0,rowKey:E,event:U,rowData:c,rowIndex:d})},onMouseleave:U=>{A?.({hovered:!1,rowKey:E,event:U,rowData:c,rowIndex:d})},rowkey:E}),_q(t)?t:{default:()=>[t]})},Vm=(e,{slots:t})=>{const{cellData:n,style:a}=e,o=n?.toString?.()||"",s=ee(t,"default",e,()=>[o]);return Y("div",{class:e.class,title:o,style:a},[s])};Vm.displayName="ElTableV2Cell";Vm.inheritAttrs=!1;const xE=e=>{const{expanded:t,expandable:n,onExpand:a,style:o,size:s,ariaLabel:r}=e;return Y("button",dt({onClick:n?()=>a(!t):void 0,ariaLabel:r,ariaExpanded:t,class:e.class},{type:"button"}),[Y(De,{size:s,style:o},{default:()=>[Y(na,null,null)]})])};xE.inheritAttrs=!1;const Oh=({columns:e,column:t,columnIndex:n,depth:a,expandIconProps:o,isScrolling:s,rowData:r,rowIndex:l,style:u,expandedRowKeys:c,ns:d,t:f,cellProps:v,expandColumnKey:g,indentSize:p,iconSize:h,rowKey:m},{slots:b})=>{const k=Ps(u);if(t.placeholderSign===Wi)return Y("div",{class:d.em("row-cell","placeholder"),style:k},null);const{cellRenderer:y,dataKey:S,dataGetter:C}=t,E=Ve(C)?C({columns:e,column:t,columnIndex:n,rowData:r,rowIndex:l}):yn(r,S??""),$=kr(v,{cellData:E,columns:e,column:t,columnIndex:n,rowIndex:l,rowData:r}),O={class:d.e("cell-text"),columns:e,column:t,columnIndex:n,cellData:E,isScrolling:s,rowData:r,rowIndex:l},R=kE(y),N=R?R(O):ee(b,"default",O,()=>[Y(Vm,O,null)]),A=[d.e("row-cell"),t.class,t.align===yd.CENTER&&d.is("align-center"),t.align===yd.RIGHT&&d.is("align-right")],_=l>=0&&g&&t.key===g,V=l>=0&&c.includes(r[m]);let z;const U=`margin-inline-start: ${a*p}px;`;return _&&(nt(o)?z=Y(xE,dt(o,{class:[d.e("expand-icon"),d.is("expanded",V)],size:h,expanded:V,ariaLabel:f(V?"el.table.collapseRowLabel":"el.table.expandRowLabel"),style:U,expandable:!0}),null):z=Y("div",{style:[U,`width: ${h}px; height: ${h}px;`].join(" ")},null)),Y("div",dt({class:A,style:k},$,{role:"cell"}),[z,N])};Oh.inheritAttrs=!1;const Lq=Ce({class:String,columns:Su,columnsStyles:{type:G(Object),required:!0},headerIndex:Number,style:{type:G(Object)}}),Dq=se({name:"ElTableV2HeaderRow",props:Lq,setup(e,{slots:t}){return()=>{const{columns:n,columnsStyles:a,headerIndex:o,style:s}=e;let r=n.map((l,u)=>t.cell({columns:n,column:l,columnIndex:u,headerIndex:o,style:a[l.key]}));return t.header&&(r=t.header({cells:r.map(l=>ye(l)&&l.length===1?l[0]:l),columns:n,headerIndex:o})),Y("div",{class:e.class,style:s,role:"row"},[r])}}});function Bq(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Ut(e)}const Fq=({columns:e,columnsStyles:t,headerIndex:n,style:a,headerClass:o,headerProps:s,ns:r},{slots:l})=>{const u={columns:e,headerIndex:n},c=[r.e("header-row"),kr(o,u,""),r.is("customized",!!l.header)];return Y(Dq,{...kr(s,u),columnsStyles:t,class:c,columns:e,headerIndex:n,style:a},Bq(l)?l:{default:()=>[l]})},zm=(e,{slots:t})=>ee(t,"default",e,()=>[Y("div",{class:e.class,title:e.column?.title},[e.column?.title])]);zm.displayName="ElTableV2HeaderCell";zm.inheritAttrs=!1;const Vq=e=>{const{sortOrder:t}=e;return Y("button",{type:"button","aria-label":e.ariaLabel,class:e.class},[Y(De,{size:14},{default:()=>[t===ko.ASC?Y(O3,null,null):Y(T3,null,null)]})])},M0=(e,{slots:t})=>{const{column:n,ns:a,t:o,style:s,onColumnSorted:r}=e,l=Ps(s);if(n.placeholderSign===Wi)return Y("div",{class:a.em("header-row-cell","placeholder"),style:l},null);const{headerCellRenderer:u,headerClass:c,sortable:d}=n,f={...e,class:a.e("header-cell-text")},v=kE(u),g=v?v(f):ee(t,"default",f,()=>[Y(zm,f,null)]),{sortBy:p,sortState:h,headerCellProps:m}=e;let b,k,y;if(h){const C=h[n.key];b=!!$h[C],k=b?C:ko.ASC}else b=n.key===p.key,k=b?p.order:ko.ASC;k===ko.ASC?y="ascending":k===ko.DESC?y="descending":y=void 0;const S=[a.e("header-cell"),kr(c,e,""),n.align===yd.CENTER&&a.is("align-center"),n.align===yd.RIGHT&&a.is("align-right"),d&&a.is("sortable")];return Y("div",dt({...kr(m,e),onClick:n.sortable?r:void 0,ariaSort:d?y:void 0,class:S,style:l,"data-key":n.key},{role:"columnheader"}),[g,d&&Y(Vq,{class:[a.e("sort-icon"),b&&a.is("sorting")],sortOrder:k,ariaLabel:o("el.table.sortLabel",{column:n.title||""})},null)])},TE=(e,{slots:t})=>Y("div",{class:e.class,style:e.style},[t.default?.()]);TE.displayName="ElTableV2Footer";const $E=(e,{slots:t})=>{const n=ee(t,"default",{},()=>[Y(P2,null,null)]);return Y("div",{class:e.class,style:e.style},[n])};$E.displayName="ElTableV2Empty";const OE=(e,{slots:t})=>Y("div",{class:e.class,style:e.style},[t.default?.()]);OE.displayName="ElTableV2Overlay";function Yl(e){return typeof e=="function"||Object.prototype.toString.call(e)==="[object Object]"&&!Ut(e)}const zq=se({name:"ElTableV2",props:hq,setup(e,{slots:t,expose:n}){const a=fe("table-v2"),{t:o}=Ct(),{columnsStyles:s,fixedColumnsOnLeft:r,fixedColumnsOnRight:l,mainColumns:u,mainTableHeight:c,fixedTableHeight:d,leftTableWidth:f,rightTableWidth:v,data:g,depthMap:p,expandedRowKeys:h,hasFixedColumns:m,mainTableRef:b,leftTableRef:k,rightTableRef:y,isDynamic:S,isResetting:C,isScrolling:E,bodyWidth:$,emptyStyle:O,rootStyle:R,footerHeight:N,showEmpty:A,scrollTo:_,scrollToLeft:V,scrollToTop:z,scrollToRow:U,getRowHeight:W,onColumnSorted:P,onRowHeightChange:I,onRowHovered:L,onRowExpanded:D,onRowsRendered:F,onScroll:q,onVerticalScroll:j}=Cq(e);return n({scrollTo:_,scrollToLeft:V,scrollToTop:z,scrollToRow:U}),St(Bm,{ns:a,isResetting:C,isScrolling:E}),()=>{const{cache:X,cellProps:Q,estimatedRowHeight:he,expandColumnKey:ue,fixedData:ge,headerHeight:ie,headerClass:ae,headerProps:ne,headerCellProps:K,sortBy:Z,sortState:re,rowHeight:ce,rowClass:ve,rowEventHandlers:ke,rowKey:Re,rowProps:Ie,scrollbarAlwaysOn:$e,indentSize:pe,iconSize:Ee,useIsScrolling:me,vScrollbarSize:Me,width:We}=e,Xe=i(g),Pe={cache:X,class:a.e("main"),columns:i(u),data:Xe,fixedData:ge,estimatedRowHeight:he,bodyWidth:i($),headerHeight:ie,headerWidth:i($),height:i(c),mainTableRef:b,rowKey:Re,rowHeight:ce,scrollbarAlwaysOn:$e,scrollbarStartGap:2,scrollbarEndGap:Me,useIsScrolling:me,width:We,getRowHeight:W,onRowsRendered:F,onScroll:q},Ae=i(f),je=i(d),Nt={cache:X,class:a.e("left"),columns:i(r),data:Xe,fixedData:ge,estimatedRowHeight:he,leftTableRef:k,rowHeight:ce,bodyWidth:Ae,headerWidth:Ae,headerHeight:ie,height:je,rowKey:Re,scrollbarAlwaysOn:$e,scrollbarStartGap:2,scrollbarEndGap:Me,useIsScrolling:me,width:Ae,getRowHeight:W,onScroll:j},Ue=i(v),rt={cache:X,class:a.e("right"),columns:i(l),data:Xe,fixedData:ge,estimatedRowHeight:he,rightTableRef:y,rowHeight:ce,bodyWidth:Ue,headerWidth:Ue,headerHeight:ie,height:je,rowKey:Re,scrollbarAlwaysOn:$e,scrollbarStartGap:2,scrollbarEndGap:Me,width:Ue,style:`${a.cssVarName("table-scrollbar-size")}: ${Me}px`,useIsScrolling:me,getRowHeight:W,onScroll:j},mt=i(s),kt={ns:a,depthMap:i(p),columnsStyles:mt,expandColumnKey:ue,expandedRowKeys:i(h),estimatedRowHeight:he,hasFixedColumns:i(m),rowProps:Ie,rowClass:ve,rowKey:Re,rowEventHandlers:ke,onRowHovered:L,onRowExpanded:D,onRowHeightChange:I},be={cellProps:Q,expandColumnKey:ue,indentSize:pe,iconSize:Ee,rowKey:Re,expandedRowKeys:i(h),ns:a,t:o},ze={ns:a,headerClass:ae,headerProps:ne,columnsStyles:mt},de={ns:a,t:o,sortBy:Z,sortState:re,headerCellProps:K,onColumnSorted:P},Ye={row:_n=>Y(Aq,dt(_n,kt),{row:t.row,cell:Be=>{let et;return t.cell?Y(Oh,dt(Be,be,{style:mt[Be.column.key]}),Yl(et=t.cell(Be))?et:{default:()=>[et]}):Y(Oh,dt(Be,be,{style:mt[Be.column.key]}),null)}}),header:_n=>Y(Fq,dt(_n,ze),{header:t.header,cell:Be=>{let et;return t["header-cell"]?Y(M0,dt(Be,de,{style:mt[Be.column.key]}),Yl(et=t["header-cell"](Be))?et:{default:()=>[et]}):Y(M0,dt(Be,de,{style:mt[Be.column.key]}),null)}})},$t=[e.class,a.b(),a.e("root"),a.is("dynamic",i(S))],Qt={class:a.e("footer"),style:i(N)};return Y("div",{class:$t,style:i(R)},[Y($q,Pe,Yl(Ye)?Ye:{default:()=>[Ye]}),Y(Nq,Nt,Yl(Ye)?Ye:{default:()=>[Ye]}),Y(Iq,rt,Yl(Ye)?Ye:{default:()=>[Ye]}),t.footer&&Y(TE,Qt,{default:t.footer}),i(A)&&Y($E,{class:a.e("empty"),style:i(O)},{default:t.empty}),t.overlay&&Y(OE,{class:a.e("overlay")},{default:t.overlay})])}}}),Hq=Ce({disableWidth:Boolean,disableHeight:Boolean,onResize:{type:G(Function)}}),Kq=e=>{const t=M(),n=M(0),a=M(0);let o;return ht(()=>{o=Zt(t,([s])=>{const{width:r,height:l}=s.contentRect,{paddingLeft:u,paddingRight:c,paddingTop:d,paddingBottom:f}=getComputedStyle(s.target),v=Number.parseInt(u)||0,g=Number.parseInt(c)||0,p=Number.parseInt(d)||0,h=Number.parseInt(f)||0;n.value=r-v-g,a.value=l-p-h}).stop}),Bt(()=>{o?.()}),le([n,a],([s,r])=>{e.onResize?.({width:s,height:r})}),{sizer:t,width:n,height:a}},Wq=se({name:"ElAutoResizer",props:Hq,setup(e,{slots:t}){const n=fe("auto-resizer"),{height:a,width:o,sizer:s}=Kq(e),r={width:"100%",height:"100%"};return()=>Y("div",{ref:s,class:n.b(),style:r},[t.default?.({height:a.value,width:o.value})])}}),jq=st(zq),Uq=st(Wq),df=Symbol("tabsRootContextKey"),qq=Ce({tabs:{type:G(Array),default:()=>sn([])},tabRefs:{type:G(Object),default:()=>sn({})}}),_0="ElTabBar";var Yq=se({name:_0,__name:"tab-bar",props:qq,setup(e,{expose:t}){const n=e,a=_e(df);a||en(_0,"");const o=fe("tabs"),s=M(),r=M(),l=w(()=>Tt(a.props.defaultValue)||!!r.value?.transform),u=()=>{let g=0,p=0;const h=["top","bottom"].includes(a.props.tabPosition)?"width":"height",m=h==="width"?"x":"y",b=m==="x"?"left":"top";return n.tabs.every(k=>{if(Tt(k.paneName))return!1;const y=n.tabRefs[k.paneName];if(!y)return!1;if(!k.active)return!0;g=y[`offset${$s(b)}`],p=y[`client${$s(h)}`];const S=window.getComputedStyle(y);return h==="width"&&(p-=Number.parseFloat(S.paddingLeft)+Number.parseFloat(S.paddingRight),g+=Number.parseFloat(S.paddingLeft)),!1}),{[h]:`${p}px`,transform:`translate${$s(m)}(${g}px)`}},c=()=>r.value=u(),d=[],f=()=>{d.forEach(g=>g.stop()),d.length=0,Object.values(n.tabRefs).forEach(g=>{d.push(Zt(g,c))})};le(()=>n.tabs,async()=>{await Ne(),c(),f()},{immediate:!0});const v=Zt(s,()=>c());return Bt(()=>{d.forEach(g=>g.stop()),d.length=0,v.stop()}),t({ref:s,update:c}),(g,p)=>l.value?(x(),B("div",{key:0,ref_key:"barRef",ref:s,class:T([i(o).e("active-bar"),i(o).is(i(a).props.tabPosition)]),style:Ke(r.value)},null,6)):te("v-if",!0)}}),Gq=Yq;const Xq=Ce({panes:{type:G(Array),default:()=>sn([])},currentName:{type:[String,Number],default:""},editable:Boolean,type:{type:String,values:["card","border-card",""],default:""},stretch:Boolean,tabindex:{type:[String,Number],default:void 0}}),Jq={tabClick:(e,t,n)=>n instanceof Event,tabRemove:(e,t)=>t instanceof Event},A0="ElTabNav",Zq=se({name:A0,props:Xq,emits:Jq,setup(e,{expose:t,emit:n}){const a=_e(df);a||en(A0,"");const o=fe("tabs"),s=XM(),r=ZM(),l=M(),u=M(),c=M(),d=M({}),f=M(),v=M(!1),g=M(0),p=M(!1),h=M(!0),m=Xt(),b=w(()=>["top","bottom"].includes(a.props.tabPosition)),k=w(()=>b.value?"width":"height"),y=w(()=>({transform:`translate${k.value==="width"?"X":"Y"}(-${g.value}px)`})),{width:S,height:C}=Dp(l),{width:E,height:$}=Dp(u,{width:0,height:0},{box:"border-box"}),O=w(()=>b.value?S.value:C.value),R=w(()=>b.value?E.value:$.value),{onWheel:N}=G2({atStartEdge:w(()=>g.value<=0),atEndEdge:w(()=>R.value-g.value<=O.value),layout:w(()=>b.value?"horizontal":"vertical")},D=>{g.value=nr(g.value+D,0,R.value-O.value)}),A=()=>{if(!l.value)return;const D=l.value[`offset${$s(k.value)}`],F=g.value;F&&(g.value=F>D?F-D:0)},_=()=>{if(!l.value||!u.value)return;const D=u.value[`offset${$s(k.value)}`],F=l.value[`offset${$s(k.value)}`],q=g.value;D-q<=F||(g.value=D-q>F*2?q+F:D-F)},V=async()=>{const D=u.value;if(!v.value||!c.value||!l.value||!D)return;await Ne();const F=d.value[e.currentName];if(!F)return;const q=l.value,j=F.getBoundingClientRect(),X=q.getBoundingClientRect(),Q=b.value?D.offsetWidth-X.width:D.offsetHeight-X.height,he=g.value;let ue=he;b.value?(j.leftX.right&&(ue=he+j.right-X.right)):(j.topX.bottom&&(ue=he+(j.bottom-X.bottom))),ue=Math.max(ue,0),g.value=Math.min(ue,Q)},z=()=>{if(!u.value||!l.value)return;e.stretch&&f.value?.update();const D=u.value[`offset${$s(k.value)}`],F=l.value[`offset${$s(k.value)}`],q=g.value;F0&&(g.value=0))},U=D=>{const F=jt(D);let q=0;switch(F){case we.left:case we.up:q=-1;break;case we.right:case we.down:q=1;break;default:return}const j=Array.from(D.currentTarget.querySelectorAll("[role=tab]:not(.is-disabled)"));let X=j.indexOf(D.target)+q;X<0?X=j.length-1:X>=j.length&&(X=0),j[X].focus({preventScroll:!0}),j[X].click(),W()},W=()=>{h.value&&(p.value=!0)},P=()=>p.value=!1,I=(D,F)=>{d.value[F]=D},L=async()=>{await Ne(),d.value[e.currentName]?.focus({preventScroll:!0})};return le(s,D=>{D==="hidden"?h.value=!1:D==="visible"&&setTimeout(()=>h.value=!0,50)}),le(r,D=>{D?setTimeout(()=>h.value=!0,50):h.value=!1}),Zt(c,()=>{Qa(z)}),ht(()=>setTimeout(()=>V(),0)),so(()=>z()),t({scrollToActiveTab:V,removeFocus:P,focusActiveTab:L,tabListRef:u,tabBarRef:f,scheduleRender:()=>oc(m)}),()=>{const D=v.value?[Y("span",{class:[o.e("nav-prev"),o.is("disabled",!v.value.prev)],onClick:A},[Y(De,null,{default:()=>[Y(is,null,null)]})]),Y("span",{class:[o.e("nav-next"),o.is("disabled",!v.value.next)],onClick:_},[Y(De,null,{default:()=>[Y(na,null,null)]})])]:null,F=e.panes.map((q,j)=>{const X=q.uid,Q=q.props.disabled,he=q.props.name??q.index??`${j}`,ue=!Q&&(q.isClosable||q.props.closable!==!1&&e.editable);q.index=`${j}`;const ge=ue?Y(De,{class:"is-icon-close",onClick:ne=>n("tabRemove",q,ne)},{default:()=>[Y(Ha,null,null)]}):null,ie=q.slots.label?.()||q.props.label,ae=!Q&&q.active?e.tabindex??a.props.tabindex:-1;return Y("div",{ref:ne=>I(ne,he),class:[o.e("item"),o.is(a.props.tabPosition),o.is("active",q.active),o.is("disabled",Q),o.is("closable",ue),o.is("focus",p.value)],id:`tab-${he}`,key:`tab-${X}`,"aria-controls":`pane-${he}`,role:"tab","aria-selected":q.active,tabindex:ae,onFocus:()=>W(),onBlur:()=>P(),onClick:ne=>{P(),n("tabClick",q,he,ne)},onKeydown:ne=>{const K=jt(ne);ue&&(K===we.delete||K===we.backspace)&&n("tabRemove",q,ne)}},[ie,ge])});return m.value,Y("div",{ref:c,class:[o.e("nav-wrap"),o.is("scrollable",!!v.value),o.is(a.props.tabPosition)]},[D,Y("div",{class:o.e("nav-scroll"),ref:l},[e.panes.length>0?Y("div",{class:[o.e("nav"),o.is(a.props.tabPosition),o.is("stretch",e.stretch&&["top","bottom"].includes(a.props.tabPosition))],ref:u,style:y.value,role:"tablist",onKeydown:U,onWheel:N},[e.type?null:Y(Gq,{ref:f,tabs:[...e.panes],tabRefs:d.value},null),F]):null])])}}}),Qq=Ce({type:{type:String,values:["card","border-card",""],default:""},closable:Boolean,addable:Boolean,modelValue:{type:[String,Number]},defaultValue:{type:[String,Number]},editable:Boolean,tabPosition:{type:String,values:["top","right","bottom","left"],default:"top"},beforeLeave:{type:G(Function),default:()=>!0},stretch:Boolean,tabindex:{type:[String,Number],default:0}}),cp=e=>Le(e)||He(e),eY={[tt]:e=>cp(e),tabClick:(e,t)=>t instanceof Event,tabChange:e=>cp(e),edit:(e,t)=>["remove","add"].includes(t),tabRemove:e=>cp(e),tabAdd:()=>!0},tY=se({name:"ElTabs",props:Qq,emits:eY,setup(e,{emit:t,slots:n,expose:a}){const o=fe("tabs"),s=w(()=>["left","right"].includes(e.tabPosition)),{children:r,addChild:l,removeChild:u,ChildrenSorter:c}=Qd(ft(),"ElTabPane"),d=M(),f=M((Tt(e.modelValue)?e.defaultValue:e.modelValue)??"0"),v=async(k,y=!1)=>{if(!(f.value===k||Tt(k)))try{let S;if(e.beforeLeave){const C=e.beforeLeave(k,f.value);S=C instanceof Promise?await C:C}else S=!0;if(S!==!1){const C=r.value.find(E=>E.paneName===f.value)?.isFocusInsidePane();f.value=k,y&&(t(tt,k),t("tabChange",k)),d.value?.removeFocus?.(),C&&d.value?.focusActiveTab()}}catch{}},g=(k,y,S)=>{k.props.disabled||(t("tabClick",k,S),v(y,!0))},p=(k,y)=>{k.props.disabled||Tt(k.props.name)||(y.stopPropagation(),t("edit",k.props.name,"remove"),t("tabRemove",k.props.name))},h=()=>{t("edit",void 0,"add"),t("tabAdd")},m=k=>{const y=jt(k);[we.enter,we.numpadEnter].includes(y)&&h()},b=k=>{const y=k.el.firstChild,S=["bottom","right"].includes(e.tabPosition)?k.children[0].el:k.children[1].el;y!==S&&y.before(S)};return le(()=>e.modelValue,k=>v(k)),le(f,async()=>{await Ne(),d.value?.scrollToActiveTab()}),St(df,{props:e,currentName:f,registerPane:l,unregisterPane:u,nav$:d}),a({currentName:f,get tabNavRef(){return tu(d.value,["scheduleRender"])}}),()=>{const k=n["add-icon"],y=e.editable||e.addable?Y("div",{class:[o.e("new-tab"),s.value&&o.e("new-tab-vertical")],tabindex:e.tabindex,onClick:h,onKeydown:m},[k?ee(n,"add-icon"):Y(De,{class:o.is("icon-plus")},{default:()=>[Y(AC,null,null)]})]):null,S=()=>Y(Zq,{ref:d,currentName:f.value,editable:e.editable,type:e.type,panes:r.value,stretch:e.stretch,onTabClick:g,onTabRemove:p},null),C=Y("div",{class:[o.e("header"),s.value&&o.e("header-vertical"),o.is(e.tabPosition)]},[Y(c,null,{default:S,$stable:!0}),y]),E=Y("div",{class:o.e("content")},[ee(n,"default")]);return Y("div",{class:[o.b(),o.m(e.tabPosition),{[o.m("card")]:e.type==="card",[o.m("border-card")]:e.type==="border-card"}],onVnodeMounted:b,onVnodeUpdated:b},[E,C])}}}),nY=Ce({label:{type:String,default:""},name:{type:[String,Number]},closable:{type:Boolean,default:void 0},disabled:Boolean,lazy:Boolean}),aY=["id","aria-hidden","aria-labelledby"],L0="ElTabPane";var oY=se({name:L0,__name:"tab-pane",props:nY,setup(e){const t=e,n=ft(),a=hn(),o=_e(df);o||en(L0,"usage: ");const s=fe("tab-pane"),r=M(),l=M(),u=w(()=>t.closable??o.props.closable),c=w(()=>o.currentName.value===(t.name??l.value)),d=M(c.value),f=w(()=>t.name??l.value),v=w(()=>!t.lazy||d.value||c.value),g=()=>r.value?.contains(document.activeElement);le(c,h=>{h&&(d.value=!0)});const p=At({uid:n.uid,getVnode:()=>n.vnode,slots:a,props:t,paneName:f,active:c,index:l,isClosable:u,isFocusInsidePane:g});return o.registerPane(p),Bt(()=>{o.unregisterPane(p)}),ov(()=>{a.label&&o.nav$.value?.scheduleRender()}),(h,m)=>v.value?ct((x(),B("div",{key:0,id:`pane-${f.value}`,ref_key:"paneRef",ref:r,class:T(i(s).b()),role:"tabpanel","aria-hidden":!c.value,"aria-labelledby":`tab-${f.value}`},[ee(h.$slots,"default")],10,aY)),[[Pt,c.value]]):te("v-if",!0)}}),NE=oY;const sY=st(tY,{TabPane:NE}),rY=tn(NE),lY=Ce({type:{type:String,values:["primary","success","info","warning","danger",""],default:""},size:{type:String,values:ro,default:""},truncated:Boolean,lineClamp:{type:[String,Number]},tag:{type:String,default:"span"}});var iY=se({name:"ElText",__name:"text",props:lY,setup(e){const t=e,n=M(),a=Sn(),o=fe("text"),s=w(()=>[o.b(),o.m(t.type),o.m(a.value),o.is("truncated",t.truncated),o.is("line-clamp",!Tt(t.lineClamp))]),r=()=>{if(fs().title)return;let l=!1;const u=n.value?.textContent||"";if(t.truncated){const c=n.value?.offsetWidth,d=n.value?.scrollWidth;c&&d&&d>c&&(l=!0)}else if(!Tt(t.lineClamp)){const c=n.value?.offsetHeight,d=n.value?.scrollHeight;c&&d&&d>c&&(l=!0)}l?n.value?.setAttribute("title",u):n.value?.removeAttribute("title")};return ht(r),so(r),(l,u)=>(x(),oe(it(e.tag),{ref_key:"textRef",ref:n,class:T(s.value),style:Ke({"-webkit-line-clamp":e.lineClamp})},{default:J(()=>[ee(l.$slots,"default")]),_:3},8,["class","style"]))}}),uY=iY;const Hm=st(uY),Nh="00:30",cY=Ce({format:{type:String,default:"HH:mm"},modelValue:{type:G(String)},disabled:{type:Boolean,default:void 0},editable:{type:Boolean,default:!0},effect:{type:G(String),default:"light"},clearable:{type:Boolean,default:!0},size:Tn,placeholder:String,start:{type:String,default:"09:00"},end:{type:String,default:"18:00"},step:{type:String,default:Nh},minTime:{type:G(String)},maxTime:{type:G(String)},includeEndTime:Boolean,name:String,prefixIcon:{type:G([String,Object]),default:()=>_C},clearIcon:{type:G([String,Object]),default:()=>Fo},popperClass:{type:String,default:""},popperStyle:{type:G([String,Object])},...Ir}),Go=e=>{const t=(e||"").split(":");if(t.length>=2){let n=Number.parseInt(t[0],10);const a=Number.parseInt(t[1],10),o=e.toUpperCase();return o.includes("AM")&&n===12?n=0:o.includes("PM")&&n!==12&&(n+=12),{hours:n,minutes:a}}return null},dp=(e,t)=>{const n=Go(e);if(!n)return-1;const a=Go(t);if(!a)return-1;const o=n.minutes+n.hours*60,s=a.minutes+a.hours*60;return o===s?0:o>s?1:-1},D0=e=>`${e}`.padStart(2,"0"),Ur=e=>`${D0(e.hours)}:${D0(e.minutes)}`,dY=(e,t)=>{const n=Go(e);if(!n)return"";const a=Go(t);if(!a)return"";const o={hours:n.hours,minutes:n.minutes};return o.minutes+=a.minutes,o.hours+=a.hours,o.hours+=Math.floor(o.minutes/60),o.minutes=o.minutes%60,Ur(o)};var fY=se({name:"ElTimeSelect",__name:"time-select",props:cY,emits:[bt,"blur","focus","clear",tt],setup(e,{expose:t}){ot.extend(um);const{Option:n}=Hs,a=e,o=fe("input"),s=M(),r=ln(),{lang:l}=Ct(),u=w(()=>a.modelValue),c=w(()=>{const b=Go(a.start);return b?Ur(b):null}),d=w(()=>{const b=Go(a.end);return b?Ur(b):null}),f=w(()=>{const b=Go(a.minTime||"");return b?Ur(b):null}),v=w(()=>{const b=Go(a.maxTime||"");return b?Ur(b):null}),g=w(()=>{const b=Go(a.step),k=!b||b.hours<0||b.minutes<0||Number.isNaN(b.hours)||Number.isNaN(b.minutes)||b.hours===0&&b.minutes===0;return k&&pt("ElTimeSelect",`invalid step, fallback to default step (${Nh}).`),k?Nh:Ur(b)}),p=w(()=>{const b=[],k=(y,S)=>{b.push({value:y,rawValue:S,disabled:dp(S,f.value||"-1:-1")<=0||dp(S,v.value||"100:100")>=0})};if(a.start&&a.end&&a.step){let y=c.value,S;for(;y&&d.value&&dp(y,d.value)<=0;)S=ot(y,"HH:mm").locale(l.value).format(a.format),k(S,y),y=dY(y,g.value);a.includeEndTime&&d.value&&b[b.length-1]?.rawValue!==d.value&&k(ot(d.value,"HH:mm").locale(l.value).format(a.format),d.value)}return b});return t({blur:()=>{s.value?.blur?.()},focus:()=>{s.value?.focus?.()}}),(b,k)=>(x(),oe(i(Hs),{ref_key:"select",ref:s,name:e.name,"model-value":u.value,disabled:i(r),clearable:e.clearable,"clear-icon":e.clearIcon,size:e.size,effect:e.effect,placeholder:e.placeholder,"default-first-option":"",filterable:e.editable,"empty-values":e.emptyValues,"value-on-clear":e.valueOnClear,"popper-class":e.popperClass,"popper-style":e.popperStyle,"onUpdate:modelValue":k[0]||(k[0]=y=>b.$emit(i(tt),y)),onChange:k[1]||(k[1]=y=>b.$emit(i(bt),y)),onBlur:k[2]||(k[2]=y=>b.$emit("blur",y)),onFocus:k[3]||(k[3]=y=>b.$emit("focus",y)),onClear:k[4]||(k[4]=()=>b.$emit("clear"))},{prefix:J(()=>[e.prefixIcon?(x(),oe(i(De),{key:0,class:T(i(o).e("prefix-icon"))},{default:J(()=>[(x(),oe(it(e.prefixIcon)))]),_:1},8,["class"])):te("v-if",!0)]),default:J(()=>[(x(!0),B(Fe,null,yt(p.value,y=>(x(),oe(i(n),{key:y.value,label:y.value,value:y.value,disabled:y.disabled},null,8,["label","value","disabled"]))),128))]),_:1},8,["name","model-value","disabled","clearable","clear-icon","size","effect","placeholder","filterable","empty-values","value-on-clear","popper-class","popper-style"]))}}),pY=fY;const hY=st(pY),RE="timeline",vY=Ce({mode:{type:String,values:["start","alternate","alternate-reverse","end"],default:"start"},reverse:Boolean}),mY=se({name:"ElTimeline",props:vY,setup(e,{slots:t}){const n=fe("timeline");St(RE,{props:e,slots:t});const a=w(()=>[n.b(),n.is(e.mode)]);return()=>{const o=Ta(t.default?.()??[]);return qe("ul",{class:a.value},e.reverse?o.reverse():o)}}}),gY=Ce({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:Kt},hollow:Boolean});var bY=se({name:"ElTimelineItem",__name:"timeline-item",props:gY,setup(e){const t=e,{props:n}=_e(RE),a=fe("timeline-item"),o=w(()=>[a.e("node"),a.em("node",t.size||""),a.em("node",t.type||""),a.is("hollow",t.hollow)]),s=w(()=>[a.b(),{[a.e("center")]:t.center},a.is(n.mode)]);return(r,l)=>(x(),B("li",{class:T(s.value)},[H("div",{class:T(i(a).e("tail"))},null,2),r.$slots.dot?te("v-if",!0):(x(),B("div",{key:0,class:T(o.value),style:Ke({backgroundColor:e.color})},[e.icon?(x(),oe(i(De),{key:0,class:T(i(a).e("icon"))},{default:J(()=>[(x(),oe(it(e.icon)))]),_:1},8,["class"])):te("v-if",!0)],6)),r.$slots.dot?(x(),B("div",{key:1,class:T(i(a).e("dot"))},[ee(r.$slots,"dot")],2)):te("v-if",!0),H("div",{class:T(i(a).e("wrapper"))},[!e.hideTimestamp&&e.placement==="top"?(x(),B("div",{key:0,class:T([i(a).e("timestamp"),i(a).is("top")])},Se(e.timestamp),3)):te("v-if",!0),H("div",{class:T(i(a).e("content"))},[ee(r.$slots,"default")],2),!e.hideTimestamp&&e.placement==="bottom"?(x(),B("div",{key:1,class:T([i(a).e("timestamp"),i(a).is("bottom")])},Se(e.timestamp),3)):te("v-if",!0)],2)],2))}}),IE=bY;const yY=st(mY,{TimelineItem:IE}),wY=tn(IE),PE="left-check-change",ME="right-check-change",qr=Ce({data:{type:G(Array),default:()=>[]},titles:{type:G(Array),default:()=>[]},buttonTexts:{type:G(Array),default:()=>[]},filterPlaceholder:String,filterMethod:{type:G(Function)},leftDefaultChecked:{type:G(Array),default:()=>[]},rightDefaultChecked:{type:G(Array),default:()=>[]},renderContent:{type:G(Function)},modelValue:{type:G(Array),default:()=>[]},format:{type:G(Object),default:()=>({})},filterable:Boolean,props:{type:G(Object),default:()=>sn({label:"label",key:"key",disabled:"disabled"})},targetOrder:{type:String,values:["original","push","unshift"],default:"original"},validateEvent:{type:Boolean,default:!0}}),Rh=(e,t)=>[e,t].every(ye)||ye(e)&&gn(t),SY={[bt]:(e,t,n)=>[e,n].every(ye)&&["left","right"].includes(t),[tt]:e=>ye(e),[PE]:Rh,[ME]:Rh},Cu=e=>{const t={label:"label",key:"key",disabled:"disabled"};return w(()=>({...t,...e.props}))},CY=(e,t)=>({onSourceCheckedChange:(o,s)=>{e.leftChecked=o,s&&t(PE,o,s)},onTargetCheckedChange:(o,s)=>{e.rightChecked=o,s&&t(ME,o,s)}}),kY=e=>{const t=Cu(e),n=w(()=>e.data.reduce((a,o)=>(a[o[t.value.key]]=o)&&a,{}));return{sourceData:w(()=>e.data.filter(a=>!e.modelValue.includes(a[t.value.key]))),targetData:w(()=>e.targetOrder==="original"?e.data.filter(a=>e.modelValue.includes(a[t.value.key])):e.modelValue.reduce((a,o)=>{const s=n.value[o];return s&&a.push(s),a},[]))}},EY=(e,t,n)=>{const a=Cu(e),o=(l,u,c)=>{n(tt,l),n(bt,l,u,c)};return{addToLeft:()=>{const l=e.modelValue.slice();t.rightChecked.forEach(u=>{const c=l.indexOf(u);c>-1&&l.splice(c,1)}),o(l,"left",t.rightChecked)},addToRight:()=>{let l=e.modelValue.slice();const u=e.data.filter(c=>{const d=c[a.value.key];return t.leftChecked.includes(d)&&!e.modelValue.includes(d)}).map(c=>c[a.value.key]);l=e.targetOrder==="unshift"?u.concat(l):l.concat(u),e.targetOrder==="original"&&(l=e.data.filter(c=>l.includes(c[a.value.key])).map(c=>c[a.value.key])),o(l,"right",t.leftChecked)}}},Ih="checked-change",xY=Ce({data:qr.data,optionRender:{type:G(Function)},placeholder:String,title:String,filterable:Boolean,format:qr.format,filterMethod:qr.filterMethod,defaultChecked:qr.leftDefaultChecked,props:qr.props}),TY={[Ih]:Rh},$Y=(e,t,n)=>{const a=Cu(e),o=w(()=>e.data.filter(d=>Ve(e.filterMethod)?e.filterMethod(t.query,d):String(d[a.value.label]||d[a.value.key]).toLowerCase().includes(t.query.toLowerCase()))),s=w(()=>o.value.filter(d=>!d[a.value.disabled])),r=w(()=>{const d=t.checked.length,f=e.data.length,{noChecked:v,hasChecked:g}=e.format;return v&&g?d>0?g.replace(/\${checked}/g,d.toString()).replace(/\${total}/g,f.toString()):v.replace(/\${total}/g,f.toString()):`${d}/${f}`}),l=w(()=>{const d=t.checked.length;return d>0&&d{const d=s.value.map(f=>f[a.value.key]);t.allChecked=d.length>0&&d.every(f=>t.checked.includes(f))},c=d=>{t.checked=d?s.value.map(f=>f[a.value.key]):[]};return le(()=>t.checked,(d,f)=>{u(),t.checkChangeByUser?n(Ih,d,d.concat(f).filter(v=>!d.includes(v)||!f.includes(v))):(n(Ih,d),t.checkChangeByUser=!0)}),le(s,()=>{u()}),le(()=>e.data,()=>{const d=[],f=o.value.map(v=>v[a.value.key]);t.checked.forEach(v=>{f.includes(v)&&d.push(v)}),t.checkChangeByUser=!1,t.checked=d}),le(()=>e.defaultChecked,(d,f)=>{if(f&&d.length===f.length&&d.every(p=>f.includes(p)))return;const v=[],g=s.value.map(p=>p[a.value.key]);d.forEach(p=>{g.includes(p)&&v.push(p)}),t.checkChangeByUser=!1,t.checked=v},{immediate:!0}),{filteredData:o,checkableData:s,checkedSummary:r,isIndeterminate:l,updateAllChecked:u,handleAllCheckedChange:c}};var OY=se({name:"ElTransferPanel",__name:"transfer-panel",props:xY,emits:TY,setup(e,{expose:t,emit:n}){const a=e,o=n,s=hn(),r=({option:S})=>S,{t:l}=Ct(),u=fe("transfer"),c=At({checked:[],allChecked:!1,query:"",checkChangeByUser:!0}),d=Cu(a),{filteredData:f,checkedSummary:v,isIndeterminate:g,handleAllCheckedChange:p}=$Y(a,c,o),h=w(()=>!ia(c.query)&&ia(f.value)),m=w(()=>!ia(s.default()[0].children)),{checked:b,allChecked:k,query:y}=Mn(c);return t({query:y}),(S,C)=>(x(),B("div",{class:T(i(u).b("panel"))},[H("p",{class:T(i(u).be("panel","header"))},[Y(i(oo),{modelValue:i(k),"onUpdate:modelValue":C[0]||(C[0]=E=>Jt(k)?k.value=E:null),indeterminate:i(g),"validate-event":!1,onChange:i(p)},{default:J(()=>[H("span",{class:T(i(u).be("panel","header-title"))},Se(e.title),3),H("span",{class:T(i(u).be("panel","header-count"))},Se(i(v)),3)]),_:1},8,["modelValue","indeterminate","onChange"])],2),H("div",{class:T([i(u).be("panel","body"),i(u).is("with-footer",m.value)])},[e.filterable?(x(),oe(i(ea),{key:0,modelValue:i(y),"onUpdate:modelValue":C[1]||(C[1]=E=>Jt(y)?y.value=E:null),class:T(i(u).be("panel","filter")),size:"default",placeholder:e.placeholder,"prefix-icon":i(E3),clearable:"","validate-event":!1},null,8,["modelValue","class","placeholder","prefix-icon"])):te("v-if",!0),ct(Y(i(pm),{modelValue:i(b),"onUpdate:modelValue":C[2]||(C[2]=E=>Jt(b)?b.value=E:null),"validate-event":!1,class:T([i(u).is("filterable",e.filterable),i(u).be("panel","list")])},{default:J(()=>[(x(!0),B(Fe,null,yt(i(f),E=>(x(),oe(i(oo),{key:E[i(d).key],class:T(i(u).be("panel","item")),value:E[i(d).key],disabled:E[i(d).disabled],"validate-event":!1},{default:J(()=>[Y(r,{option:e.optionRender?.(E)},null,8,["option"])]),_:2},1032,["class","value","disabled"]))),128))]),_:1},8,["modelValue","class"]),[[Pt,!h.value&&!i(ia)(e.data)]]),ct(H("div",{class:T(i(u).be("panel","empty"))},[ee(S.$slots,"empty",{},()=>[wt(Se(h.value?i(l)("el.transfer.noMatch"):i(l)("el.transfer.noData")),1)])],2),[[Pt,h.value||i(ia)(e.data)]])],2),m.value?(x(),B("p",{key:0,class:T(i(u).be("panel","footer"))},[ee(S.$slots,"default")],2)):te("v-if",!0)],2))}}),B0=OY;const NY={key:0},RY={key:0};var IY=se({name:"ElTransfer",__name:"transfer",props:qr,emits:SY,setup(e,{expose:t,emit:n}){const a=e,o=n,s=hn(),{t:r}=Ct(),l=fe("transfer"),{formItem:u}=Dn(),c=At({leftChecked:[],rightChecked:[]}),d=Cu(a),{sourceData:f,targetData:v}=kY(a),{onSourceCheckedChange:g,onTargetCheckedChange:p}=CY(c,o),{addToLeft:h,addToRight:m}=EY(a,c,o),b=M(),k=M(),y=R=>{switch(R){case"left":b.value.query="";break;case"right":k.value.query="";break}},S=w(()=>a.buttonTexts.length===2),C=w(()=>a.titles[0]||r("el.transfer.titles.0")),E=w(()=>a.titles[1]||r("el.transfer.titles.1")),$=w(()=>a.filterPlaceholder||r("el.transfer.filterPlaceholder"));le(()=>a.modelValue,()=>{a.validateEvent&&u?.validate?.("change").catch(R=>pt(R))});const O=w(()=>R=>{if(a.renderContent)return a.renderContent(qe,R);const N=(s.default?.({option:R})||[]).filter(A=>A.type!==mn);return N.length?N:qe("span",R[d.value.label]||R[d.value.key])});return t({clearQuery:y,leftPanel:b,rightPanel:k}),(R,N)=>(x(),B("div",{class:T(i(l).b())},[Y(B0,{ref_key:"leftPanel",ref:b,data:i(f),"option-render":O.value,placeholder:$.value,title:C.value,filterable:e.filterable,format:e.format,"filter-method":e.filterMethod,"default-checked":e.leftDefaultChecked,props:a.props,onCheckedChange:i(g)},{empty:J(()=>[ee(R.$slots,"left-empty")]),default:J(()=>[ee(R.$slots,"left-footer")]),_:3},8,["data","option-render","placeholder","title","filterable","format","filter-method","default-checked","props","onCheckedChange"]),H("div",{class:T(i(l).e("buttons"))},[Y(i(In),{type:"primary",class:T([i(l).e("button"),i(l).is("with-texts",S.value)]),disabled:i(ia)(c.rightChecked),onClick:i(h)},{default:J(()=>[Y(i(De),null,{default:J(()=>[Y(i(is))]),_:1}),i(Tt)(e.buttonTexts[0])?te("v-if",!0):(x(),B("span",NY,Se(e.buttonTexts[0]),1))]),_:1},8,["class","disabled","onClick"]),Y(i(In),{type:"primary",class:T([i(l).e("button"),i(l).is("with-texts",S.value)]),disabled:i(ia)(c.leftChecked),onClick:i(m)},{default:J(()=>[i(Tt)(e.buttonTexts[1])?te("v-if",!0):(x(),B("span",RY,Se(e.buttonTexts[1]),1)),Y(i(De),null,{default:J(()=>[Y(i(na))]),_:1})]),_:1},8,["class","disabled","onClick"])],2),Y(B0,{ref_key:"rightPanel",ref:k,data:i(v),"option-render":O.value,placeholder:$.value,filterable:e.filterable,format:e.format,"filter-method":e.filterMethod,title:E.value,"default-checked":e.rightDefaultChecked,props:a.props,onCheckedChange:i(p)},{empty:J(()=>[ee(R.$slots,"right-empty")]),default:J(()=>[ee(R.$slots,"right-footer")]),_:3},8,["data","option-render","placeholder","filterable","format","filter-method","title","default-checked","props","onCheckedChange"])],2))}}),PY=IY;const MY=st(PY),Km="RootTree",_E="NodeInstance",F0="TreeNodeMap",AE=Ce({data:{type:G(Array),default:()=>[]},emptyText:{type:String},renderAfterExpand:{type:Boolean,default:!0},nodeKey:String,checkStrictly:Boolean,defaultExpandAll:Boolean,expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkOnClickLeaf:{type:Boolean,default:!0},checkDescendants:Boolean,autoExpandParent:{type:Boolean,default:!0},defaultCheckedKeys:{type:Array},defaultExpandedKeys:{type:Array},currentNodeKey:{type:[String,Number]},renderContent:{type:G(Function)},showCheckbox:Boolean,draggable:Boolean,allowDrag:{type:G(Function)},allowDrop:{type:G(Function)},props:{type:Object,default:()=>({children:"children",label:"label",disabled:"disabled"})},lazy:Boolean,highlightCurrent:Boolean,load:{type:Function},filterNodeMethod:{type:Function},accordion:Boolean,indent:{type:Number,default:18},icon:{type:Kt}}),_Y={"check-change":(e,t,n)=>e&&Ht(t)&&Ht(n),"current-change":(e,t)=>!0,"node-click":(e,t,n,a)=>e&&t&&a instanceof Event,"node-contextmenu":(e,t,n,a)=>e instanceof Event&&t&&n,"node-collapse":(e,t,n)=>e&&t,"node-expand":(e,t,n)=>e&&t,check:(e,t)=>e&&t,"node-drag-start":(e,t)=>e&&t,"node-drag-end":(e,t,n,a)=>e&&a,"node-drop":(e,t,n,a)=>e&&t&&a,"node-drag-leave":(e,t,n)=>e&&t&&n,"node-drag-enter":(e,t,n)=>e&&t&&n,"node-drag-over":(e,t,n)=>e&&t&&n},sl="$treeNodeId",V0=function(e,t){!t||t[sl]||Object.defineProperty(t,sl,{value:e.id,enumerable:!1,configurable:!1,writable:!1})},Wm=(e,t)=>t?.[e||sl],Ph=(e,t,n)=>{const a=e.value.currentNode;n();const o=e.value.currentNode;a!==o&&t("current-change",o?o.data:null,o)},LE=e=>{let t=!0,n=!0,a=!0,o=!0;for(let s=0,r=e.length;s{n.canFocus=t,Mh(n.childNodes,t)})};let AY=0;var _h=class Ic{constructor(t){this.isLeafByUser=void 0,this.isLeaf=void 0,this.isEffectivelyChecked=!1,this.id=AY++,this.text=null,this.checked=!1,this.indeterminate=!1,this.data=null,this.expanded=!1,this.parent=null,this.visible=!0,this.isCurrent=!1,this.canFocus=!1;for(const n in t)Rt(t,n)&&(this[n]=t[n]);this.level=0,this.loaded=!1,this.childNodes=[],this.loading=!1,this.parent&&(this.level=this.parent.level+1)}initialize(){const t=this.store;if(!t)throw new Error("[Node]store is required!");t.registerNode(this);const n=t.props;if(n&&typeof n.isLeaf<"u"){const s=Qu(this,"isLeaf");Ht(s)&&(this.isLeafByUser=s)}if(t.lazy!==!0&&this.data?(this.setData(this.data),t.defaultExpandAll&&(this.expanded=!0,this.canFocus=!0)):this.level>0&&t.lazy&&t.defaultExpandAll&&!this.isLeafByUser&&this.expand(),ye(this.data)||V0(this,this.data),!this.data)return;const a=t.defaultExpandedKeys,o=t.key;o&&!gn(this.key)&&a&&a.includes(this.key)&&this.expand(null,t.autoExpandParent),o&&t.currentNodeKey!==void 0&&this.key===t.currentNodeKey&&(t.currentNode&&(t.currentNode.isCurrent=!1),t.currentNode=this,t.currentNode.isCurrent=!0),t.lazy&&t._initDefaultCheckedNode(this),this.updateLeafState(),(this.level===1||this.parent?.expanded===!0)&&(this.canFocus=!0)}setData(t){ye(t)||V0(this,t),this.data=t,this.childNodes=[];let n;this.level===0&&ye(this.data)?n=this.data:n=Qu(this,"children")||[];for(let a=0,o=n.length;a-1)return t.childNodes[n+1]}return null}get previousSibling(){const t=this.parent;if(t){const n=t.childNodes.indexOf(this);if(n>-1)return n>0?t.childNodes[n-1]:null}return null}contains(t,n=!0){return(this.childNodes||[]).some(a=>a===t||n&&a.contains(t))}remove(){const t=this.parent;t&&t.removeChild(this)}insertChild(t,n,a){if(!t)throw new Error("InsertChild error: child is required.");if(!(t instanceof Ic)){if(!a){const o=this.getChildren(!0);o?.includes(t.data)||(Tt(n)||n<0?o?.push(t.data):o?.splice(n,0,t.data))}Object.assign(t,{parent:this,store:this.store}),t=At(new Ic(t)),t instanceof Ic&&t.initialize()}t.level=this.level+1,Tt(n)||n<0?this.childNodes.push(t):this.childNodes.splice(n,0,t),this.updateLeafState()}insertBefore(t,n){let a;n&&(a=this.childNodes.indexOf(n)),this.insertChild(t,a)}insertAfter(t,n){let a;n&&(a=this.childNodes.indexOf(n),a!==-1&&(a+=1)),this.insertChild(t,a)}removeChild(t){const n=this.getChildren()||[],a=n.indexOf(t.data);a>-1&&n.splice(a,1);const o=this.childNodes.indexOf(t);o>-1&&(this.store&&this.store.deregisterNode(t),t.parent=null,this.childNodes.splice(o,1)),this.updateLeafState()}removeChildByData(t){const n=this.childNodes.find(a=>a.data===t);n&&this.removeChild(n)}expand(t,n){const a=()=>{if(n){let o=this.parent;for(;o&&o.level>0;)o.expanded=!0,o=o.parent}this.expanded=!0,t&&t(),Mh(this.childNodes,!0)};this.shouldLoadData()?this.loadData(o=>{ye(o)&&(this.checked?this.setChecked(!0,!0):this.store.checkStrictly||Zl(this),a())}):a()}doCreateChildren(t,n={}){t.forEach(a=>{this.insertChild(Object.assign({data:a},n),void 0,!0)})}collapse(){this.expanded=!1,Mh(this.childNodes,!1)}shouldLoadData(){return!!(this.store.lazy===!0&&this.store.load&&!this.loaded)}updateLeafState(){if(this.store.lazy===!0&&this.loaded!==!0&&typeof this.isLeafByUser<"u"){this.isLeaf=this.isLeafByUser,this.isEffectivelyChecked=this.isLeaf&&this.disabled;return}const t=this.childNodes;if(!this.store.lazy||this.store.lazy===!0&&this.loaded===!0){this.isLeaf=!t||t.length===0,this.isEffectivelyChecked=this.isLeaf&&this.disabled;return}this.isLeaf=!1}setChecked(t,n,a,o){if(this.indeterminate=t==="half",this.checked=t===!0,this.isEffectivelyChecked=!this.childNodes.length&&(this.disabled||this.checked),this.store.checkStrictly)return;if(!(this.shouldLoadData()&&!this.store.checkDescendants)){const r=()=>{if(n){const l=this.childNodes;for(let f=0,v=l.length;f{r(),Zl(this)},{checked:t!==!1});return}else r()}const s=this.parent;!s||s.level===0||a||Zl(s)}getChildren(t=!1){if(this.level===0)return this.data;const n=this.data;if(!n)return null;const a=this.store.props;let o="children";return a&&(o=a.children||"children"),Tt(n[o])&&(n[o]=null),t&&!n[o]&&(n[o]=[]),n[o]}updateChildren(){const t=this.getChildren()||[],n=this.childNodes.map(s=>s.data),a={},o=[];t.forEach((s,r)=>{const l=s[sl];l&&n.some(u=>u?.[sl]===l)?a[l]={index:r,data:s}:o.push({index:r,data:s})}),this.store.lazy||n.forEach(s=>{a[s?.[sl]]||this.removeChildByData(s)}),o.forEach(({index:s,data:r})=>{this.insertChild({data:r},s)}),this.updateLeafState()}loadData(t,n={}){if(this.store.lazy===!0&&this.store.load&&!this.loaded&&(!this.loading||Object.keys(n).length)){this.loading=!0;const a=s=>{this.childNodes=[],this.doCreateChildren(s,n),this.loaded=!0,this.loading=!1,this.updateLeafState(),t&&t.call(this,s)},o=()=>{this.loading=!1};this.store.load(this,a,o)}else t&&t.call(this)}eachNode(t){const n=[this];for(;n.length;){const a=n.shift();n.unshift(...a.childNodes),t(a)}}reInitChecked(){this.store.checkStrictly||Zl(this)}},LY=class{constructor(e){this.lazy=!1,this.checkStrictly=!1,this.autoExpandParent=!1,this.defaultExpandAll=!1,this.checkDescendants=!1,this.currentNode=null,this.currentNodeKey=null;for(const t in e)Rt(e,t)&&(this[t]=e[t]);this.nodesMap={}}initialize(){if(this.root=new _h({data:this.data,store:this}),this.root.initialize(),this.lazy&&this.load){const e=this.load;e(this.root,t=>{this.root.doCreateChildren(t),this._initDefaultCheckedNodes()},Dt)}else this._initDefaultCheckedNodes()}filter(e){const t=this.filterNodeMethod,n=this.lazy,a=async function(o){const s=o.root?o.root.childNodes:o.childNodes;for(const[r,l]of s.entries())l.visible=!!t?.call(l,e,l.data,l),r%80===0&&r>0&&await Ne(),await a(l);if(!o.visible&&s.length){let r=!0;r=!s.some(l=>l.visible),o.root?o.root.visible=r===!1:o.visible=r===!1}e&&o.visible&&!o.isLeaf&&(!n||o.loaded)&&o.expand()};a(this)}setData(e){e!==this.root.data?(this.nodesMap={},this.root.setData(e),this._initDefaultCheckedNodes(),this.setCurrentNodeKey(this.currentNodeKey)):this.root.updateChildren()}getNode(e){if(e instanceof _h)return e;const t=nt(e)?Wm(this.key,e):e;return this.nodesMap[t]||null}insertBefore(e,t){const n=this.getNode(t);n.parent?.insertBefore({data:e},n)}insertAfter(e,t){const n=this.getNode(t);n.parent?.insertAfter({data:e},n)}remove(e){const t=this.getNode(e);t&&t.parent&&(t===this.currentNode&&(this.currentNode=null),t.parent.removeChild(t))}append(e,t){const n=va(t)?this.root:this.getNode(t);n&&n.insertChild({data:e})}_initDefaultCheckedNodes(){const e=this.defaultCheckedKeys||[],t=this.nodesMap;e.forEach(n=>{const a=t[n];a&&a.setChecked(!0,!this.checkStrictly)})}_initDefaultCheckedNode(e){const t=this.defaultCheckedKeys||[];!gn(e.key)&&t.includes(e.key)&&e.setChecked(!0,!this.checkStrictly)}setDefaultCheckedKey(e){e!==this.defaultCheckedKeys&&(this.defaultCheckedKeys=e,this._initDefaultCheckedNodes())}registerNode(e){const t=this.key;if(!(!e||!e.data))if(!t)this.nodesMap[e.id]=e;else{const n=e.key;gn(n)||(this.nodesMap[n]=e)}}deregisterNode(e){!this.key||!e||!e.data||(e.childNodes.forEach(t=>{this.deregisterNode(t)}),delete this.nodesMap[e.key])}getCheckedNodes(e=!1,t=!1){const n=[],a=function(o){(o.root?o.root.childNodes:o.childNodes).forEach(s=>{(s.checked||t&&s.indeterminate)&&(!e||e&&s.isLeaf)&&n.push(s.data),a(s)})};return a(this),n}getCheckedKeys(e=!1){return this.getCheckedNodes(e).map(t=>(t||{})[this.key])}getHalfCheckedNodes(){const e=[],t=function(n){(n.root?n.root.childNodes:n.childNodes).forEach(a=>{a.indeterminate&&e.push(a.data),t(a)})};return t(this),e}getHalfCheckedKeys(){return this.getHalfCheckedNodes().map(e=>(e||{})[this.key])}_getAllNodes(){const e=[],t=this.nodesMap;for(const n in t)Rt(t,n)&&e.push(t[n]);return e}updateChildren(e,t){const n=this.nodesMap[e];if(!n)return;const a=n.childNodes;for(let o=a.length-1;o>=0;o--){const s=a[o];this.remove(s.data)}for(let o=0,s=t.length;ol.level-u.level),o=Object.create(null),s=Object.keys(n);a.forEach(l=>l.setChecked(!1,!1));const r=l=>{l.childNodes.forEach(u=>{o[u.data[e]]=!0,u.childNodes?.length&&r(u)})};for(let l=0,u=a.length;l{g.isLeaf||g.setChecked(!1,!1,!0),f(g)}),v.reInitChecked()};f(c)}}}setCheckedNodes(e,t=!1){const n=this.key,a={};e.forEach(o=>{a[(o||{})[n]]=!0}),this._setCheckedKeys(n,t,a)}setCheckedKeys(e,t=!1){this.defaultCheckedKeys=e;const n=this.key,a={};e.forEach(o=>{a[o]=!0}),this._setCheckedKeys(n,t,a)}setDefaultExpandedKeys(e){e=e||[],this.defaultExpandedKeys=e,e.forEach(t=>{const n=this.getNode(t);n&&n.expand(null,this.autoExpandParent)})}setChecked(e,t,n){const a=this.getNode(e);a&&a.setChecked(!!t,n)}getCurrentNode(){return this.currentNode}setCurrentNode(e){const t=this.currentNode;t&&(t.isCurrent=!1),this.currentNode=e,this.currentNode.isCurrent=!0}setUserCurrentNode(e,t=!0){const n=e[this.key],a=this.nodesMap[n];this.setCurrentNode(a),t&&this.currentNode&&this.currentNode.level>1&&this.currentNode.parent?.expand(null,!0)}setCurrentNodeKey(e,t=!0){if(this.currentNodeKey=e,va(e)){this.currentNode&&(this.currentNode.isCurrent=!1),this.currentNode=null;return}const n=this.getNode(e);n&&(this.setCurrentNode(n),t&&this.currentNode&&this.currentNode.level>1&&this.currentNode.parent?.expand(null,!0))}};function DE(e){const t=_e(F0,null);let n={treeNodeExpand:a=>{e.node!==a&&e.node?.collapse()},children:new Set};return t&&t.children.add(n),Bt(()=>{t&&t.children.delete(n),n=null}),St(F0,n),{broadcastExpanded:a=>{if(e.accordion)for(const o of n.children)o.treeNodeExpand(a)}}}const BE=Symbol("dragEvents");function DY({props:e,ctx:t,el$:n,dropIndicator$:a,store:o}){const s=fe("tree"),r=M({showDropIndicator:!1,draggingNode:null,dropNode:null,allowDrop:!0,dropType:null});return St(BE,{treeNodeDragStart:({event:d,treeNode:f})=>{if(d.dataTransfer){if(Ve(e.allowDrag)&&!e.allowDrag(f.node))return d.preventDefault(),!1;d.dataTransfer.effectAllowed="move";try{d.dataTransfer.setData("text/plain","")}catch{}r.value.draggingNode=f,t.emit("node-drag-start",f.node,d)}},treeNodeDragOver:({event:d,treeNode:f})=>{if(!d.dataTransfer)return;const v=f,g=r.value.dropNode;g&&g.node.id!==v.node.id&&ta(g.$el,s.is("drop-inner"));const p=r.value.draggingNode;if(!p||!v)return;let h=!0,m=!0,b=!0,k=!0;Ve(e.allowDrop)&&(h=e.allowDrop(p.node,v.node,"prev"),k=m=e.allowDrop(p.node,v.node,"inner"),b=e.allowDrop(p.node,v.node,"next")),d.dataTransfer.dropEffect=m||h||b?"move":"none",(h||m||b)&&g?.node.id!==v.node.id&&(g&&t.emit("node-drag-leave",p.node,g.node,d),t.emit("node-drag-enter",p.node,v.node,d)),h||m||b?r.value.dropNode=v:r.value.dropNode=null,v.node.nextSibling===p.node&&(b=!1),v.node.previousSibling===p.node&&(h=!1),v.node.contains(p.node,!1)&&(m=!1),(p.node===v.node||p.node.contains(v.node))&&(h=!1,m=!1,b=!1);const y=v.$el,S=y.querySelector(`.${s.be("node","content")}`).getBoundingClientRect(),C=n.value.getBoundingClientRect(),E=n.value.scrollTop;let $;const O=h?m?.25:b?.45:1:Number.NEGATIVE_INFINITY,R=b?m?.75:h?.55:0:Number.POSITIVE_INFINITY;let N=-9999;const A=d.clientY-S.top;AS.height*R?$="after":m?$="inner":$="none";const _=y.querySelector(`.${s.be("node","expand-icon")}`).getBoundingClientRect(),V=a.value;$==="before"?N=_.top-C.top+E:$==="after"&&(N=_.bottom-C.top+E),V.style.top=`${N}px`,V.style.left=`${_.right-C.left}px`,$==="inner"?La(y,s.is("drop-inner")):ta(y,s.is("drop-inner")),r.value.showDropIndicator=$==="before"||$==="after",r.value.allowDrop=r.value.showDropIndicator||k,r.value.dropType=$,t.emit("node-drag-over",p.node,v.node,d)},treeNodeDragEnd:d=>{const{draggingNode:f,dropType:v,dropNode:g}=r.value;if(d.preventDefault(),d.dataTransfer&&(d.dataTransfer.dropEffect="move"),f?.node.data&&g){const p={data:f.node.data};v!=="none"&&f.node.remove(),v==="before"?g.node.parent?.insertBefore(p,g.node):v==="after"?g.node.parent?.insertAfter(p,g.node):v==="inner"&&g.node.insertChild(p),v!=="none"&&(o.value.registerNode(p),o.value.key&&f.node.eachNode(h=>{o.value.nodesMap[h.data[o.value.key]]?.setChecked(h.checked,!o.value.checkStrictly)})),ta(g.$el,s.is("drop-inner")),t.emit("node-drag-end",f.node,g.node,v,d),v!=="none"&&t.emit("node-drop",f.node,g.node,v,d)}f&&!g&&t.emit("node-drag-end",f.node,null,v,d),r.value.showDropIndicator=!1,r.value.draggingNode=null,r.value.dropNode=null,r.value.allowDrop=!0}}),{dragState:r}}var BY=se({name:"ElTreeNodeContent",props:{node:{type:Object,required:!0},renderContent:Function},setup(e){const t=fe("tree"),n=_e(_E),a=_e(Km);return()=>{const o=e.node,{data:s,store:r}=o;return e.renderContent?e.renderContent(qe,{_self:n,node:o,data:s,store:r}):ee(a.ctx.slots,"default",{node:o,data:s},()=>[qe(Hm,{tag:"span",truncated:!0,class:t.be("node","label")},()=>[o.label])])}}}),FY=BY,VY=se({name:"ElTreeNode",components:{ElCollapseTransition:rf,ElCheckbox:oo,NodeContent:FY,ElIcon:De,Loading:_o},props:{node:{type:_h,default:()=>({})},props:{type:Object,default:()=>({})},accordion:Boolean,renderContent:Function,renderAfterExpand:Boolean,showCheckbox:Boolean},emits:["node-expand"],setup(e,t){const n=fe("tree"),{broadcastExpanded:a}=DE(e),o=_e(Km),s=M(!1),r=M(!1),l=M(),u=M(),c=M(),d=_e(BE),f=ft();St(_E,f),o||pt("Tree","Can not find node's tree."),e.node.expanded&&(s.value=!0,r.value=!0);const v=o.props.props.children||"children";le(()=>{const R=e.node.data?.[v];return R&&[...R]},()=>{e.node.updateChildren()}),le(()=>e.node.indeterminate,R=>{h(e.node.checked,R)}),le(()=>e.node.checked,R=>{h(R,e.node.indeterminate)}),le(()=>e.node.childNodes.length,()=>e.node.reInitChecked()),le(()=>e.node.expanded,R=>{Ne(()=>s.value=R),R&&(r.value=!0)});const g=R=>o.props.nodeKey?Wm(o.props.nodeKey,R.data):R.id,p=R=>{const N=e.props.class;if(!N)return{};let A;if(Ve(N)){const{data:_}=R;A=N(_,R)}else A=N;return Le(A)?{[A]:!0}:A},h=(R,N)=>{(l.value!==R||u.value!==N)&&o.ctx.emit("check-change",e.node.data,R,N),l.value=R,u.value=N},m=R=>{Ph(o.store,o.ctx.emit,()=>{if(o?.props?.nodeKey){const N=g(e.node);o.store.value.setCurrentNodeKey(N)}else o.store.value.setCurrentNode(e.node)}),o.currentNode.value=e.node,o.props.expandOnClickNode&&k(),(o.props.checkOnClickNode||e.node.isLeaf&&o.props.checkOnClickLeaf&&e.showCheckbox)&&!e.node.disabled&&y(!e.node.checked),o.ctx.emit("node-click",e.node.data,e.node,f,R)},b=R=>{o.instance.vnode.props?.onNodeContextmenu&&(R.stopPropagation(),R.preventDefault()),o.ctx.emit("node-contextmenu",R,e.node.data,e.node,f)},k=()=>{e.node.isLeaf||(s.value?(o.ctx.emit("node-collapse",e.node.data,e.node,f),e.node.collapse()):e.node.expand(()=>{t.emit("node-expand",e.node.data,e.node,f)}))},y=R=>{const N=o?.props.checkStrictly,A=e.node.childNodes;!N&&A.length&&(R=A.some(_=>!_.isEffectivelyChecked)),e.node.setChecked(R,!N),Ne(()=>{const _=o.store.value;o.ctx.emit("check",e.node.data,{checkedNodes:_.getCheckedNodes(),checkedKeys:_.getCheckedKeys(),halfCheckedNodes:_.getHalfCheckedNodes(),halfCheckedKeys:_.getHalfCheckedKeys()})})};return{ns:n,node$:c,tree:o,expanded:s,childNodeRendered:r,oldChecked:l,oldIndeterminate:u,getNodeKey:g,getNodeClass:p,handleSelectChange:h,handleClick:m,handleContextMenu:b,handleExpandIconClick:k,handleCheckChange:y,handleChildNodeExpand:(R,N,A)=>{a(N),o.ctx.emit("node-expand",R,N,A)},handleDragStart:R=>{o.props.draggable&&d.treeNodeDragStart({event:R,treeNode:e})},handleDragOver:R=>{R.preventDefault(),o.props.draggable&&d.treeNodeDragOver({event:R,treeNode:{$el:c.value,node:e.node}})},handleDrop:R=>{R.preventDefault()},handleDragEnd:R=>{o.props.draggable&&d.treeNodeDragEnd(R)},CaretRight:MC}}});const zY=["aria-expanded","aria-disabled","aria-checked","draggable","data-key"],HY=["aria-expanded"];function KY(e,t,n,a,o,s){const r=It("el-icon"),l=It("el-checkbox"),u=It("loading"),c=It("node-content"),d=It("el-tree-node"),f=It("el-collapse-transition");return ct((x(),B("div",{ref:"node$",class:T([e.ns.b("node"),e.ns.is("expanded",e.expanded),e.ns.is("current",e.node.isCurrent),e.ns.is("hidden",!e.node.visible),e.ns.is("focusable",!e.node.disabled),e.ns.is("checked",!e.node.disabled&&e.node.checked),e.getNodeClass(e.node)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.node.disabled,"aria-checked":e.node.checked,draggable:e.tree.props.draggable,"data-key":e.getNodeKey(e.node),onClick:t[2]||(t[2]=Ge((...v)=>e.handleClick&&e.handleClick(...v),["stop"])),onContextmenu:t[3]||(t[3]=(...v)=>e.handleContextMenu&&e.handleContextMenu(...v)),onDragstart:t[4]||(t[4]=Ge((...v)=>e.handleDragStart&&e.handleDragStart(...v),["stop"])),onDragover:t[5]||(t[5]=Ge((...v)=>e.handleDragOver&&e.handleDragOver(...v),["stop"])),onDragend:t[6]||(t[6]=Ge((...v)=>e.handleDragEnd&&e.handleDragEnd(...v),["stop"])),onDrop:t[7]||(t[7]=Ge((...v)=>e.handleDrop&&e.handleDrop(...v),["stop"]))},[H("div",{class:T(e.ns.be("node","content")),style:Ke({paddingLeft:(e.node.level-1)*e.tree.props.indent+"px"})},[e.tree.props.icon||e.CaretRight?(x(),oe(r,{key:0,class:T([e.ns.be("node","expand-icon"),e.ns.is("leaf",e.node.isLeaf),{expanded:!e.node.isLeaf&&e.expanded}]),onClick:Ge(e.handleExpandIconClick,["stop"])},{default:J(()=>[(x(),oe(it(e.tree.props.icon||e.CaretRight)))]),_:1},8,["class","onClick"])):te("v-if",!0),e.showCheckbox?(x(),oe(l,{key:1,"model-value":e.node.checked,indeterminate:e.node.indeterminate,disabled:!!e.node.disabled,onClick:t[0]||(t[0]=Ge(()=>{},["stop"])),onChange:e.handleCheckChange},null,8,["model-value","indeterminate","disabled","onChange"])):te("v-if",!0),e.node.loading?(x(),oe(r,{key:2,class:T([e.ns.be("node","loading-icon"),e.ns.is("loading")])},{default:J(()=>[Y(u)]),_:1},8,["class"])):te("v-if",!0),Y(c,{node:e.node,"render-content":e.renderContent},null,8,["node","render-content"])],6),Y(f,null,{default:J(()=>[!e.renderAfterExpand||e.childNodeRendered?ct((x(),B("div",{key:0,class:T(e.ns.be("node","children")),role:"group","aria-expanded":e.expanded,onClick:t[1]||(t[1]=Ge(()=>{},["stop"]))},[(x(!0),B(Fe,null,yt(e.node.childNodes,v=>(x(),oe(d,{key:e.getNodeKey(v),"render-content":e.renderContent,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,node:v,accordion:e.accordion,props:e.props,onNodeExpand:e.handleChildNodeExpand},null,8,["render-content","render-after-expand","show-checkbox","node","accordion","props","onNodeExpand"]))),128))],10,HY)),[[Pt,e.expanded]]):te("v-if",!0)]),_:1})],42,zY)),[[Pt,e.node.visible]])}var WY=$n(VY,[["render",KY]]);function jY({el$:e},t){const n=fe("tree");ht(()=>{s()}),so(()=>{e.value?.querySelectorAll("input[type=checkbox]").forEach(r=>{r.setAttribute("tabindex","-1")})});function a(r,l){const u=t.value.getNode(r[l].dataset.key);return u.canFocus&&u.visible&&(u.parent?.expanded||u.parent?.level===0)}Ft(e,"keydown",r=>{const l=r.target;if(!l.className.includes(n.b("node")))return;const u=jt(r),c=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`)),d=c.indexOf(l);let f;if([we.up,we.down].includes(u)){if(r.preventDefault(),u===we.up){f=d===-1?0:d!==0?d-1:c.length-1;const g=f;for(;!a(c,f);){if(f--,f===g){f=-1;break}f<0&&(f=c.length-1)}}else{f=d===-1?0:d=c.length&&(f=0)}}f!==-1&&c[f].focus()}[we.left,we.right].includes(u)&&(r.preventDefault(),l.click());const v=l.querySelector('[type="checkbox"]');[we.enter,we.numpadEnter,we.space].includes(u)&&v&&(r.preventDefault(),v.click())});const s=()=>{if(!e.value)return;const r=Array.from(e.value.querySelectorAll(`.${n.is("focusable")}[role=treeitem]`));Array.from(e.value.querySelectorAll("input[type=checkbox]")).forEach(u=>{u.setAttribute("tabindex","-1")});const l=e.value.querySelectorAll(`.${n.is("checked")}[role=treeitem]`);if(l.length){l[0].setAttribute("tabindex","0");return}r[0]?.setAttribute("tabindex","0")}}var UY=se({name:"ElTree",components:{ElTreeNode:WY},props:AE,emits:_Y,setup(e,t){const{t:n}=Ct(),a=fe("tree"),o=M(new LY({key:e.nodeKey,data:e.data,lazy:e.lazy,props:e.props,load:e.load,currentNodeKey:e.currentNodeKey,checkStrictly:e.checkStrictly,checkDescendants:e.checkDescendants,defaultCheckedKeys:e.defaultCheckedKeys,defaultExpandedKeys:e.defaultExpandedKeys,autoExpandParent:e.autoExpandParent,defaultExpandAll:e.defaultExpandAll,filterNodeMethod:e.filterNodeMethod}));o.value.initialize();const s=M(o.value.root),r=M(null),l=M(null),u=M(null),{broadcastExpanded:c}=DE(e),{dragState:d}=DY({props:e,ctx:t,el$:l,dropIndicator$:u,store:o});jY({el$:l},o);const f=ft(),v=w(()=>{let D=f?.parent;for(;D;){if(D.type.name==="ElTreeSelect")return!0;D=D.parent}return!1}),g=w(()=>{const{childNodes:D}=s.value;return(!D||D.length===0||D.every(({visible:F})=>!F))&&!v.value});le(()=>e.currentNodeKey,D=>{o.value.setCurrentNodeKey(D??null)}),le(()=>e.defaultCheckedKeys,(D,F)=>{on(D,F)||o.value.setDefaultCheckedKey(D??[])}),le(()=>e.defaultExpandedKeys,D=>{o.value.setDefaultExpandedKeys(D??[])}),le(()=>e.data,D=>{o.value.setData(D)},{deep:!0}),le(()=>e.checkStrictly,D=>{o.value.checkStrictly=D});const p=D=>{if(!e.filterNodeMethod)throw new Error("[Tree] filterNodeMethod is required when filter");o.value.filter(D)},h=D=>e.nodeKey?Wm(e.nodeKey,D.data):D.id,m=D=>{if(!e.nodeKey)throw new Error(`[Tree] nodeKey is required in ${D}`)},b=D=>{m("getNodePath");const F=o.value.getNode(D);if(!F)return[];const q=[F.data];let j=F.parent;for(;j&&j!==s.value;)q.push(j.data),j=j.parent;return q.reverse()},k=(D,F)=>o.value.getCheckedNodes(D,F),y=D=>o.value.getCheckedKeys(D),S=()=>{const D=o.value.getCurrentNode();return D?D.data:null},C=()=>{m("getCurrentKey");const D=S();return D?D[e.nodeKey]:null},E=(D,F)=>{m("setCheckedNodes"),o.value.setCheckedNodes(D,F)},$=(D,F)=>{m("setCheckedKeys"),o.value.setCheckedKeys(D,F)},O=(D,F,q)=>{o.value.setChecked(D,F,q)},R=()=>o.value.getHalfCheckedNodes(),N=()=>o.value.getHalfCheckedKeys(),A=(D,F=!0)=>{m("setCurrentNode"),Ph(o,t.emit,()=>{c(D),o.value.setUserCurrentNode(D,F)})},_=(D=null,F=!0)=>{m("setCurrentKey"),Ph(o,t.emit,()=>{c(),o.value.setCurrentNodeKey(D,F)})},V=D=>o.value.getNode(D),z=D=>{o.value.remove(D)},U=(D,F)=>{o.value.append(D,F)},W=(D,F)=>{o.value.insertBefore(D,F)},P=(D,F)=>{o.value.insertAfter(D,F)},I=(D,F,q)=>{c(F),t.emit("node-expand",D,F,q)},L=(D,F)=>{m("updateKeyChildren"),o.value.updateChildren(D,F)};return St(Km,{ctx:t,props:e,store:o,root:s,currentNode:r,instance:f}),St(Ao,void 0),{ns:a,store:o,root:s,currentNode:r,dragState:d,el$:l,dropIndicator$:u,isEmpty:g,filter:p,getNodeKey:h,getNodePath:b,getCheckedNodes:k,getCheckedKeys:y,getCurrentNode:S,getCurrentKey:C,setCheckedNodes:E,setCheckedKeys:$,setChecked:O,getHalfCheckedNodes:R,getHalfCheckedKeys:N,setCurrentNode:A,setCurrentKey:_,t:n,getNode:V,remove:z,append:U,insertBefore:W,insertAfter:P,handleNodeExpand:I,updateKeyChildren:L}}});function qY(e,t,n,a,o,s){const r=It("el-tree-node");return x(),B("div",{ref:"el$",class:T([e.ns.b(),e.ns.is("dragging",!!e.dragState.draggingNode),e.ns.is("drop-not-allow",!e.dragState.allowDrop),e.ns.is("drop-inner",e.dragState.dropType==="inner"),{[e.ns.m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[(x(!0),B(Fe,null,yt(e.root.childNodes,l=>(x(),oe(r,{key:e.getNodeKey(l),node:l,props:e.props,accordion:e.accordion,"render-after-expand":e.renderAfterExpand,"show-checkbox":e.showCheckbox,"render-content":e.renderContent,onNodeExpand:e.handleNodeExpand},null,8,["node","props","accordion","render-after-expand","show-checkbox","render-content","onNodeExpand"]))),128)),e.isEmpty?(x(),B("div",{key:0,class:T(e.ns.e("empty-block"))},[ee(e.$slots,"empty",{},()=>[H("span",{class:T(e.ns.e("empty-text"))},Se(e.emptyText??e.t("el.tree.emptyText")),3)])],2)):te("v-if",!0),ct(H("div",{ref:"dropIndicator$",class:T(e.ns.e("drop-indicator"))},null,2),[[Pt,e.dragState.showDropIndicator]])],2)}var YY=$n(UY,[["render",qY]]);const jm=st(YY),GY=(e,{attrs:t,emit:n},{select:a,tree:o,key:s})=>{const r=fe("tree-select");le(()=>e.data,()=>{e.filterable&&Ne(()=>{o.value?.filter(a.value?.states.inputValue)})},{flush:"post"});const l=u=>{const c=u.at(-1);if(c.expanded&&c.childNodes.at(-1))l([c.childNodes.at(-1)]);else{o.value.el$?.querySelector(`[data-key="${u.at(-1).key}"]`)?.focus({preventScroll:!0});return}};return ht(()=>{Ft(()=>a.value?.$el,"keydown",async u=>{const c=jt(u),{dropdownMenuVisible:d}=a.value;[we.down,we.up].includes(c)&&d&&(await Ne(),setTimeout(()=>{if(we.up===c){const f=o.value.store.root.childNodes;l(f);return}a.value.optionsArray[a.value.states.hoveringIndex].$el?.parentNode?.parentNode?.focus({preventScroll:!0})}))},{capture:!0})}),{...ss(Mn(e),Object.keys(Hs.props)),...t,class:w(()=>t.class),style:w(()=>t.style),"onUpdate:modelValue":u=>n(tt,u),valueKey:s,popperClass:w(()=>{const u=[r.e("popper")];return e.popperClass&&u.push(e.popperClass),u.join(" ")}),filterMethod:(u="")=>{e.filterMethod?e.filterMethod(u):e.remoteMethod?e.remoteMethod(u):o.value?.filter(u)}}},XY=se({extends:sd,setup(e,t){const n=sd.setup(e,t);delete n.selectOptionClick;const a=ft().proxy;return Ne(()=>{n.select.states.cachedOptions.get(a.value)||n.select.onOptionCreate(a)}),le(()=>t.attrs.visible,o=>{Ne(()=>{n.states.visible=o})},{immediate:!0}),n},methods:{selectOptionClick(){this.$el.parentElement.click()}}});function Ah(e){return e||e===0}function Um(e){return ye(e)&&e.length}function Kr(e){return ye(e)?e:Ah(e)?[e]:[]}function Pc(e,t,n,a,o){for(let s=0;s{le([()=>e.modelValue,s],()=>{e.showCheckbox&&Ne(()=>{const p=s.value;p&&!on(p.getCheckedKeys(),Kr(e.modelValue))&&p.setCheckedKeys(Kr(e.modelValue))})},{immediate:!0,deep:!0});const l=w(()=>({value:r.value,label:"label",children:"children",disabled:"disabled",isLeaf:"isLeaf",...e.props})),u=(p,h)=>{const m=l.value[p];return Ve(m)?m(h,s.value?.getNode(u("value",h))):h[m]},c=Kr(e.modelValue).map(p=>Pc(e.data||[],h=>u("value",h)===p,h=>u("children",h),(h,m,b,k)=>k&&u("value",k))).filter(p=>Ah(p)),d=w(()=>{if(!e.renderAfterExpand&&!e.lazy)return[];const p=[];return Mc(e.data.concat(e.cacheData),h=>{const m=u("value",h);p.push({value:m,currentLabel:u("label",h),isDisabled:u("disabled",h)})},h=>u("children",h)),p}),f=()=>s.value?.getCheckedKeys().filter(p=>{const h=s.value?.getNode(p);return!gn(h)&&ia(h.childNodes)}),v=p=>{on(e.modelValue,p)||a(bt,p)};function g(p){a(tt,p),v(p)}return{...ss(Mn(e),Object.keys(jm.props)),...t,nodeKey:r,expandOnClickNode:w(()=>!e.checkStrictly&&e.expandOnClickNode),defaultExpandedKeys:w(()=>e.defaultExpandedKeys?e.defaultExpandedKeys.concat(c):c),renderContent:(p,{node:h,data:m,store:b})=>p(XY,{value:u("value",m),label:u("label",m),disabled:u("disabled",m),visible:h.visible},e.renderContent?()=>e.renderContent(p,{node:h,data:m,store:b}):n.default?()=>n.default({node:h,data:m,store:b}):void 0),filterNodeMethod:(p,h,m)=>e.filterNodeMethod?e.filterNodeMethod(p,h,m):p?new RegExp(Pv(p),"i").test(u("label",h)||""):!0,onNodeClick:(p,h,m)=>{if(t.onNodeClick?.(p,h,m),!(e.showCheckbox&&e.checkOnClickNode))if(!e.showCheckbox&&(e.checkStrictly||h.isLeaf)){if(!u("disabled",p)){const b=o.value?.states.options.get(u("value",p));o.value?.handleOptionSelect(b)}}else e.expandOnClickNode&&m.proxy.handleExpandIconClick()},onCheck:(p,h)=>{if(!e.showCheckbox)return;const m=u("value",p),b={};Mc([s.value.store.root],C=>b[C.key]=C,C=>C.childNodes);const k=h.checkedKeys,y=e.multiple?Kr(e.modelValue).filter(C=>!(C in b)&&!k.includes(C)):[],S=y.concat(k);if(e.checkStrictly)g(e.multiple?S:S.includes(m)?m:void 0);else if(e.multiple){const C=f();g(y.concat(C))}else{const C=Pc([p],O=>!Um(u("children",O))&&!u("disabled",O),O=>u("children",O)),E=C?u("value",C):void 0,$=Ah(e.modelValue)&&!!Pc([p],O=>u("value",O)===e.modelValue,O=>u("children",O));g(E===e.modelValue||$?void 0:E)}Ne(()=>{const C=Kr(e.modelValue);s.value.setCheckedKeys(C),t.onCheck?.(p,{checkedKeys:s.value.getCheckedKeys(),checkedNodes:s.value.getCheckedNodes(),halfCheckedKeys:s.value.getHalfCheckedKeys(),halfCheckedNodes:s.value.getHalfCheckedNodes()})}),o.value?.focus()},onNodeExpand:(p,h,m)=>{t.onNodeExpand?.(p,h,m),Ne(()=>{if(!e.checkStrictly&&e.lazy&&e.multiple&&h.checked){const b={},k=s.value.getCheckedKeys();Mc([s.value.store.root],C=>b[C.key]=C,C=>C.childNodes);const y=Kr(e.modelValue).filter(C=>!(C in b)&&!k.includes(C)),S=f();g(y.concat(S))}})},cacheOptions:d}};var ZY=se({props:{data:{type:Array,default:()=>[]}},setup(e){const t=_e(bu);return le(()=>e.data,()=>{e.data.forEach(a=>{t.states.cachedOptions.has(a.value)||t.states.cachedOptions.set(a.value,a)});const n=t.selectRef?.querySelectorAll("input")||[];Mt&&!Array.from(n).includes(document.activeElement)&&t.setSelected()},{flush:"post",immediate:!0}),()=>{}}}),QY=se({name:"ElTreeSelect",inheritAttrs:!1,props:{...Ik,...AE,cacheData:{type:Array,default:()=>[]}},setup(e,t){const{slots:n,expose:a,emit:o,attrs:s}=t,r={...s,onChange:void 0},l=M(),u=M(),c=w(()=>e.nodeKey||e.valueKey||"value"),d=GY(e,{attrs:s,emit:o},{select:l,tree:u,key:c}),{cacheOptions:f,...v}=JY(e,{attrs:r,slots:n,emit:o},{select:l,tree:u,key:c}),g=At({});return a(g),ht(()=>{Object.assign(g,{...ss(u.value,["filter","updateKeyChildren","getCheckedNodes","setCheckedNodes","getCheckedKeys","setCheckedKeys","setChecked","getHalfCheckedNodes","getHalfCheckedKeys","getCurrentKey","getCurrentNode","setCurrentKey","setCurrentNode","getNode","remove","append","insertBefore","insertAfter"]),...ss(l.value,["focus","blur","selectedLabel"]),treeRef:u.value,selectRef:l.value})}),()=>qe(Hs,At({...d,ref:p=>l.value=p}),{...n,default:()=>[qe(ZY,{data:f.value}),qe(jm,At({...v,ref:p=>u.value=p}))]})}}),eG=QY;const tG=st(eG),qm=Symbol(),nG={key:-1,level:-1,data:{}};let Xo=(function(e){return e.KEY="id",e.LABEL="label",e.CHILDREN="children",e.DISABLED="disabled",e.CLASS="",e})({}),z0=(function(e){return e.ADD="add",e.DELETE="delete",e})({});const FE={type:Number,default:26},aG=Ce({data:{type:G(Array),default:()=>sn([])},emptyText:{type:String},height:{type:Number,default:200},props:{type:G(Object),default:()=>sn({children:Xo.CHILDREN,label:Xo.LABEL,disabled:Xo.DISABLED,value:Xo.KEY,class:Xo.CLASS})},highlightCurrent:Boolean,showCheckbox:Boolean,defaultCheckedKeys:{type:G(Array),default:()=>sn([])},checkStrictly:Boolean,defaultExpandedKeys:{type:G(Array),default:()=>sn([])},indent:{type:Number,default:16},itemSize:FE,icon:{type:Kt},expandOnClickNode:{type:Boolean,default:!0},checkOnClickNode:Boolean,checkOnClickLeaf:{type:Boolean,default:!0},currentNodeKey:{type:G([String,Number])},accordion:Boolean,filterMethod:{type:G(Function)},perfMode:{type:Boolean,default:!0},scrollbarAlwaysOn:Boolean}),oG=Ce({node:{type:G(Object),default:()=>sn(nG)},expanded:Boolean,checked:Boolean,indeterminate:Boolean,showCheckbox:Boolean,disabled:Boolean,current:Boolean,hiddenExpandIcon:Boolean,itemSize:FE}),sG=Ce({node:{type:G(Object),required:!0}}),VE="node-click",zE="node-drop",HE="node-expand",KE="node-collapse",WE="current-change",jE="check",UE="check-change",qE="node-contextmenu",rG={[VE]:(e,t,n)=>e&&t&&n,[zE]:(e,t,n)=>e&&t&&n,[HE]:(e,t)=>e&&t,[KE]:(e,t)=>e&&t,[WE]:(e,t)=>e&&t,[jE]:(e,t)=>e&&t,[UE]:(e,t)=>e&&Ht(t),[qE]:(e,t,n)=>e&&t&&n},lG={click:(e,t)=>!!(e&&t),drop:(e,t)=>!!(e&&t),toggle:e=>!!e,check:(e,t)=>e&&Ht(t)};function iG(e,t){const n=M(new Set),a=M(new Set),{emit:o}=ft();le([()=>t.value,()=>e.defaultCheckedKeys],()=>Ne(()=>{k(e.defaultCheckedKeys)}),{immediate:!0});const s=()=>{if(!t.value||!e.showCheckbox||e.checkStrictly)return;const{levelTreeNodeMap:y,maxLevel:S}=t.value,C=n.value,E=new Set;for(let $=S;$>=1;--$){const O=y.get($);O&&O.forEach(R=>{const N=R.children;let A=!R.isLeaf||R.disabled||C.has(R.key);if(N){let _=!0,V=!1;for(const z of N){const U=z.key;if(z.isEffectivelyChecked||(A=!1),C.has(U))V=!0;else if(E.has(U)){_=!1,V=!0;break}else _=!1}_?C.add(R.key):V?(E.add(R.key),C.delete(R.key)):(C.delete(R.key),E.delete(R.key))}R.isEffectivelyChecked=A})}a.value=E},r=y=>n.value.has(y.key),l=y=>a.value.has(y.key),u=(y,S,C=!0,E=!0)=>{const $=n.value,O=y.children;!e.checkStrictly&&C&&O?.length&&(S=O.some(N=>!N.isEffectivelyChecked));const R=(N,A)=>{$[A?z0.ADD:z0.DELETE](N.key);const _=N.children;!e.checkStrictly&&_&&_.forEach(V=>{(!V.disabled||V.children)&&R(V,A)})};R(y,S),E&&s(),C&&c(y,S)},c=(y,S)=>{const{checkedNodes:C,checkedKeys:E}=p(),{halfCheckedNodes:$,halfCheckedKeys:O}=h();o(jE,y.data,{checkedKeys:E,checkedNodes:C,halfCheckedKeys:O,halfCheckedNodes:$}),o(UE,y.data,S)};function d(y=!1){return p(y).checkedKeys}function f(y=!1){return p(y).checkedNodes}function v(){return h().halfCheckedKeys}function g(){return h().halfCheckedNodes}function p(y=!1){const S=[],C=[];if(t?.value&&e.showCheckbox){const{treeNodeMap:E}=t.value;n.value.forEach($=>{const O=E.get($);O&&(!y||y&&O.isLeaf)&&(C.push($),S.push(O.data))})}return{checkedKeys:C,checkedNodes:S}}function h(){const y=[],S=[];if(t?.value&&e.showCheckbox){const{treeNodeMap:C}=t.value;a.value.forEach(E=>{const $=C.get(E);$&&(S.push(E),y.push($.data))})}return{halfCheckedNodes:y,halfCheckedKeys:S}}function m(y){n.value.clear(),a.value.clear(),Ne(()=>{k(y)})}function b(y,S){if(t?.value&&e.showCheckbox){const C=t.value.treeNodeMap.get(y);C&&u(C,S,!1)}}function k(y){if(t?.value){const{treeNodeMap:S}=t.value;if(e.showCheckbox&&S&&y?.length>0){for(const C of y){const E=S.get(C);E&&!r(E)&&u(E,!0,!1,!1)}s()}}}return{updateCheckedKeys:s,toggleCheckbox:u,isChecked:r,isIndeterminate:l,getCheckedKeys:d,getCheckedNodes:f,getHalfCheckedKeys:v,getHalfCheckedNodes:g,setChecked:b,setCheckedKeys:m}}function uG(e,t){const n=M(new Set([])),a=M(new Set([])),o=w(()=>Ve(e.filterMethod));function s(l){if(!o.value)return;const u=new Set,c=a.value,d=n.value,f=[],v=t.value?.treeNodes||[],g=e.filterMethod;d.clear();function p(h){h.forEach(m=>{f.push(m),g?.(l,m.data,m)?f.forEach(k=>{u.add(k.key),k.expanded=!0}):(m.expanded=!1,m.isLeaf&&d.add(m.key));const b=m.children;if(b&&p(b),!m.isLeaf){if(!u.has(m.key))d.add(m.key);else if(b){let k=!0;for(const y of b)if(!d.has(y.key)){k=!1;break}k?c.add(m.key):c.delete(m.key)}}f.pop()})}return p(v),u}function r(l){return a.value.has(l.key)}return{hiddenExpandIconKeySet:a,hiddenNodeKeySet:n,doFilter:s,isForceHiddenExpandIcon:r}}function cG(e,t){const n=M(new Set),a=M(),o=Xt(),s=M(),{isIndeterminate:r,isChecked:l,toggleCheckbox:u,getCheckedKeys:c,getCheckedNodes:d,getHalfCheckedKeys:f,getHalfCheckedNodes:v,setChecked:g,setCheckedKeys:p}=iG(e,o),{doFilter:h,hiddenNodeKeySet:m,isForceHiddenExpandIcon:b}=uG(e,o),k=w(()=>e.props?.value||Xo.KEY),y=w(()=>e.props?.children||Xo.CHILDREN),S=w(()=>e.props?.disabled||Xo.DISABLED),C=w(()=>e.props?.label||Xo.LABEL),E=w(()=>{const ne=n.value,K=m.value,Z=[],re=o.value?.treeNodes||[],ce=[];for(let ve=re.length-1;ve>=0;--ve)ce.push(re[ve]);for(;ce.length;){const ve=ce.pop();if(!K.has(ve.key)&&(Z.push(ve),ve.children&&ne.has(ve.key)))for(let ke=ve.children.length-1;ke>=0;--ke)ce.push(ve.children[ke])}return Z}),$=w(()=>E.value.length>0);function O(ne){const K=new Map,Z=new Map;let re=1;function ce(ke,Re=1,Ie=void 0){const $e=[];for(const pe of ke){const Ee=A(pe),me={level:Re,key:Ee,data:pe};me.label=V(pe),me.parent=Ie;const Me=N(pe);me.disabled=_(pe),me.isLeaf=!Me||Me.length===0,me.expanded=n.value.has(Ee),Me&&Me.length&&(me.children=ce(Me,Re+1,me)),$e.push(me),K.set(Ee,me),Z.has(Re)||Z.set(Re,[]),Z.get(Re)?.push(me)}return Re>re&&(re=Re),$e}const ve=ce(ne);return{treeNodeMap:K,levelTreeNodeMap:Z,maxLevel:re,treeNodes:ve}}function R(ne){const K=h(ne);K&&(n.value=K)}function N(ne){return ne[y.value]}function A(ne){return ne?ne[k.value]:""}function _(ne){return ne[S.value]}function V(ne){return ne[C.value]}function z(ne){n.value.has(ne.key)?F(ne):D(ne)}function U(ne){const K=new Set,Z=o.value.treeNodeMap;n.value.forEach(re=>{const ce=Z.get(re);n.value.delete(ce.key),ce.expanded=!1}),ne.forEach(re=>{let ce=Z.get(re);for(;ce&&!K.has(ce.key);)K.add(ce.key),ce.expanded=!0,ce=ce.parent}),n.value=K}function W(ne,K){t(VE,ne.data,ne,K),I(ne),e.expandOnClickNode&&z(ne),e.showCheckbox&&(e.checkOnClickNode||ne.isLeaf&&e.checkOnClickLeaf)&&!ne.disabled&&u(ne,!l(ne),!0)}function P(ne,K){t(zE,ne.data,ne,K)}function I(ne){j(ne)||(a.value=ne.key,t(WE,ne.data,ne))}function L(ne,K){u(ne,K)}function D(ne){const K=n.value;if(o.value&&e.accordion){const{treeNodeMap:re}=o.value;K.forEach(ce=>{const ve=re.get(ce);ne&&ne.level===ve?.level&&(K.delete(ce),ve.expanded=!1)})}K.add(ne.key);const Z=ge(ne.key);Z&&(Z.expanded=!0,t(HE,Z.data,Z))}function F(ne){n.value.delete(ne.key);const K=ge(ne.key);K&&(K.expanded=!1,t(KE,K.data,K))}function q(ne){return!!ne.disabled}function j(ne){const K=a.value;return K!==void 0&&K===ne.key}function X(){if(a.value)return o.value?.treeNodeMap.get(a.value)?.data}function Q(){return a.value}function he(ne){a.value=ne}function ue(ne){o.value=O(ne)}function ge(ne){const K=nt(ne)?A(ne):ne;return o.value?.treeNodeMap.get(K)}function ie(ne,K="auto"){const Z=ge(ne);Z&&s.value&&s.value.scrollToItem(E.value.indexOf(Z),K)}function ae(ne){s.value?.scrollTo(ne)}return le(()=>e.currentNodeKey,ne=>{a.value=ne},{immediate:!0}),le(()=>e.defaultExpandedKeys,ne=>{n.value=new Set(ne)},{immediate:!0}),le(()=>e.data,ne=>{ue(ne)},{immediate:!0}),{tree:o,flattenTree:E,isNotEmpty:$,listRef:s,getKey:A,getChildren:N,toggleExpand:z,toggleCheckbox:u,isChecked:l,isIndeterminate:r,isDisabled:q,isCurrent:j,isForceHiddenExpandIcon:b,handleNodeClick:W,handleNodeDrop:P,handleNodeCheck:L,getCurrentNode:X,getCurrentKey:Q,setCurrentKey:he,getCheckedKeys:c,getCheckedNodes:d,getHalfCheckedKeys:f,getHalfCheckedNodes:v,setChecked:g,setCheckedKeys:p,filter:R,setData:ue,getNode:ge,expandNode:D,collapseNode:F,setExpandedKeys:U,scrollToNode:ie,scrollTo:ae}}var dG=se({name:"ElTreeNodeContent",props:sG,setup(e){const t=_e(qm),n=fe("tree");return()=>{const a=e.node,{data:o}=a;return t?.ctx.slots.default?t.ctx.slots.default({node:a,data:o}):qe(Hm,{tag:"span",truncated:!0,class:n.be("node","label")},()=>[a?.label])}}});const fG=["aria-expanded","aria-disabled","aria-checked","data-key"];var pG=se({name:"ElTreeNode",__name:"tree-node",props:oG,emits:lG,setup(e,{emit:t}){const n=e,a=t,o=_e(qm),s=fe("tree"),r=w(()=>o?.props.indent??16),l=w(()=>o?.props.icon??MC),u=p=>{const h=o?.props.props?.class;if(!h)return{};let m;if(Ve(h)){const{data:b}=p;m=h(b,p)}else m=h;return Le(m)?{[m]:!0}:m},c=p=>{a("click",n.node,p)},d=p=>{a("drop",n.node,p)},f=()=>{a("toggle",n.node)},v=p=>{a("check",n.node,p)},g=p=>{o?.instance?.vnode?.props?.onNodeContextmenu&&(p.stopPropagation(),p.preventDefault()),o?.ctx.emit(qE,p,n.node?.data,n.node)};return(p,h)=>(x(),B("div",{ref:"node$",class:T([i(s).b("node"),i(s).is("expanded",e.expanded),i(s).is("current",e.current),i(s).is("focusable",!e.disabled),i(s).is("checked",!e.disabled&&e.checked),u(e.node)]),role:"treeitem",tabindex:"-1","aria-expanded":e.expanded,"aria-disabled":e.disabled,"aria-checked":e.checked,"data-key":e.node?.key,onClick:Ge(c,["stop"]),onContextmenu:g,onDragover:h[1]||(h[1]=Ge(()=>{},["prevent"])),onDragenter:h[2]||(h[2]=Ge(()=>{},["prevent"])),onDrop:Ge(d,["stop"])},[H("div",{class:T(i(s).be("node","content")),style:Ke({paddingLeft:`${(e.node.level-1)*r.value}px`,height:e.itemSize+"px"})},[l.value?(x(),oe(i(De),{key:0,class:T([i(s).is("leaf",!!e.node?.isLeaf),i(s).is("hidden",e.hiddenExpandIcon),{expanded:!e.node?.isLeaf&&e.expanded},i(s).be("node","expand-icon")]),onClick:Ge(f,["stop"])},{default:J(()=>[(x(),oe(it(l.value)))]),_:1},8,["class"])):te("v-if",!0),e.showCheckbox?(x(),oe(i(oo),{key:1,"model-value":e.checked,indeterminate:e.indeterminate,disabled:e.disabled,onChange:v,onClick:h[0]||(h[0]=Ge(()=>{},["stop"]))},null,8,["model-value","indeterminate","disabled"])):te("v-if",!0),Y(i(dG),{node:{...e.node,expanded:e.expanded}},null,8,["node"])],6)],42,fG))}}),hG=pG,vG=se({name:"ElTreeV2",__name:"tree",props:aG,emits:rG,setup(e,{expose:t,emit:n}){const a=e,o=n,s=hn(),r=w(()=>a.itemSize);St(qm,{ctx:{emit:o,slots:s},props:a,instance:ft()}),St(Ao,void 0);const{t:l}=Ct(),u=fe("tree"),{flattenTree:c,isNotEmpty:d,listRef:f,toggleExpand:v,isIndeterminate:g,isChecked:p,isDisabled:h,isCurrent:m,isForceHiddenExpandIcon:b,handleNodeClick:k,handleNodeDrop:y,handleNodeCheck:S,toggleCheckbox:C,getCurrentNode:E,getCurrentKey:$,setCurrentKey:O,getCheckedKeys:R,getCheckedNodes:N,getHalfCheckedKeys:A,getHalfCheckedNodes:_,setChecked:V,setCheckedKeys:z,filter:U,setData:W,getNode:P,expandNode:I,collapseNode:L,setExpandedKeys:D,scrollToNode:F,scrollTo:q}=cG(a,o);return t({toggleCheckbox:C,getCurrentNode:E,getCurrentKey:$,setCurrentKey:O,getCheckedKeys:R,getCheckedNodes:N,getHalfCheckedKeys:A,getHalfCheckedNodes:_,setChecked:V,setCheckedKeys:z,filter:U,setData:W,getNode:P,expandNode:I,collapseNode:L,setExpandedKeys:D,scrollToNode:F,scrollTo:q}),(j,X)=>(x(),B("div",{class:T([i(u).b(),{[i(u).m("highlight-current")]:e.highlightCurrent}]),role:"tree"},[i(d)?(x(),oe(i(J2),{key:0,ref_key:"listRef",ref:f,"class-name":i(u).b("virtual-list"),data:i(c),total:i(c).length,height:e.height,"item-size":r.value,"perf-mode":e.perfMode,"scrollbar-always-on":e.scrollbarAlwaysOn},{default:J(({data:Q,index:he,style:ue})=>[(x(),oe(hG,{key:Q[he].key,style:Ke(ue),node:Q[he],expanded:Q[he].expanded,"show-checkbox":e.showCheckbox,checked:i(p)(Q[he]),indeterminate:i(g)(Q[he]),"item-size":r.value,disabled:i(h)(Q[he]),current:i(m)(Q[he]),"hidden-expand-icon":i(b)(Q[he]),onClick:i(k),onToggle:i(v),onCheck:i(S),onDrop:i(y)},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","scrollbar-always-on"])):(x(),B("div",{key:1,class:T(i(u).e("empty-block"))},[ee(j.$slots,"empty",{},()=>[H("span",{class:T(i(u).e("empty-text"))},Se(e.emptyText??i(l)("el.tree.emptyText")),3)])],2))],2))}}),mG=vG;const gG=st(mG),bG="ElUpload";var yG=class extends Error{constructor(e,t,n,a){super(e),this.name="UploadAjaxError",this.status=t,this.method=n,this.url=a}};function H0(e,t,n){let a;return n.response?a=`${n.response.error||n.response}`:n.responseText?a=`${n.responseText}`:a=`fail to ${t.method} ${e} ${n.status}`,new yG(a,n.status,t.method,e)}function wG(e){const t=e.responseText||e.response;if(!t)return t;try{return JSON.parse(t)}catch{return t}}const SG=e=>{typeof XMLHttpRequest>"u"&&en(bG,"XMLHttpRequest is undefined");const t=new XMLHttpRequest,n=e.action;t.upload&&t.upload.addEventListener("progress",s=>{const r=s;r.percent=s.total>0?s.loaded/s.total*100:0,e.onProgress(r)});const a=new FormData;if(e.data)for(const[s,r]of Object.entries(e.data))ye(r)?r.length===2&&r[0]instanceof Blob&&Le(r[1])?a.append(s,r[0],r[1]):r.forEach(l=>{a.append(s,l)}):a.append(s,r);a.append(e.filename,e.file,e.file.name),t.addEventListener("error",()=>{e.onError(H0(n,e,t))}),t.addEventListener("load",()=>{if(t.status<200||t.status>=300)return e.onError(H0(n,e,t));e.onSuccess(wG(t))}),t.open(e.method,n,!0),e.withCredentials&&"withCredentials"in t&&(t.withCredentials=!0);const o=e.headers||{};if(o instanceof Headers)o.forEach((s,r)=>t.setRequestHeader(r,s));else for(const[s,r]of Object.entries(o))gn(r)||t.setRequestHeader(s,String(r));return t.send(a),t},YE=["text","picture","picture-card"];let CG=1;const Lh=()=>Date.now()+CG++,GE=Ce({action:{type:String,default:"#"},headers:{type:G(Object)},method:{type:String,default:"post"},data:{type:G([Object,Function,Promise]),default:()=>sn({})},multiple:Boolean,name:{type:String,default:"file"},drag:Boolean,withCredentials:Boolean,showFileList:{type:Boolean,default:!0},accept:{type:String,default:""},fileList:{type:G(Array),default:()=>sn([])},autoUpload:{type:Boolean,default:!0},listType:{type:String,values:YE,default:"text"},httpRequest:{type:G(Function),default:SG},disabled:{type:Boolean,default:void 0},limit:Number,directory:Boolean}),kG=Ce({...GE,beforeUpload:{type:G(Function),default:Dt},beforeRemove:{type:G(Function)},onRemove:{type:G(Function),default:Dt},onChange:{type:G(Function),default:Dt},onPreview:{type:G(Function),default:Dt},onSuccess:{type:G(Function),default:Dt},onProgress:{type:G(Function),default:Dt},onError:{type:G(Function),default:Dt},onExceed:{type:G(Function),default:Dt},crossorigin:{type:G(String)}}),XE=Symbol("uploadContextKey"),EG=Ce({files:{type:G(Array),default:()=>sn([])},disabled:{type:Boolean,default:void 0},handlePreview:{type:G(Function),default:Dt},listType:{type:String,values:YE,default:"text"},crossorigin:{type:G(String)}}),xG={remove:e=>!!e},TG=Ce({...GE,beforeUpload:{type:G(Function),default:Dt},onRemove:{type:G(Function),default:Dt},onStart:{type:G(Function),default:Dt},onSuccess:{type:G(Function),default:Dt},onProgress:{type:G(Function),default:Dt},onError:{type:G(Function),default:Dt},onExceed:{type:G(Function),default:Dt}}),$G=Ce({disabled:{type:Boolean,default:void 0},directory:Boolean}),OG={file:e=>ye(e)},NG=["tabindex","aria-disabled","onKeydown"],RG=["src","crossorigin"],IG=["onClick"],PG=["title"],MG=["onClick"],_G=["onClick"];var AG=se({name:"ElUploadList",__name:"upload-list",props:EG,emits:xG,setup(e,{emit:t}){const n=e,a=t,{t:o}=Ct(),s=fe("upload"),r=fe("icon"),l=fe("list"),u=ln(),c=M(!1),d=w(()=>[s.b("list"),s.bm("list",n.listType),s.is("disabled",u.value)]),f=v=>{a("remove",v)};return(v,g)=>(x(),oe(F1,{tag:"ul",class:T(d.value),name:i(l).b()},{default:J(()=>[(x(!0),B(Fe,null,yt(e.files,(p,h)=>(x(),B("li",{key:p.uid||p.name,class:T([i(s).be("list","item"),i(s).is(p.status),{focusing:c.value}]),tabindex:i(u)?void 0:0,"aria-disabled":i(u),role:"button",onKeydown:an(m=>!i(u)&&f(p),["delete"]),onFocus:g[0]||(g[0]=m=>c.value=!0),onBlur:g[1]||(g[1]=m=>c.value=!1),onClick:g[2]||(g[2]=m=>c.value=!1)},[ee(v.$slots,"default",{file:p,index:h},()=>[e.listType==="picture"||p.status!=="uploading"&&e.listType==="picture-card"?(x(),B("img",{key:0,class:T(i(s).be("list","item-thumbnail")),src:p.url,crossorigin:e.crossorigin,alt:""},null,10,RG)):te("v-if",!0),p.status==="uploading"||e.listType!=="picture-card"?(x(),B("div",{key:1,class:T(i(s).be("list","item-info"))},[H("a",{class:T(i(s).be("list","item-name")),onClick:Ge(m=>e.handlePreview(p),["prevent"])},[Y(i(De),{class:T(i(r).m("document"))},{default:J(()=>[Y(i(e3))]),_:1},8,["class"]),H("span",{class:T(i(s).be("list","item-file-name")),title:p.name},Se(p.name),11,PG)],10,IG),p.status==="uploading"?(x(),oe(i(V2),{key:0,type:e.listType==="picture-card"?"circle":"line","stroke-width":e.listType==="picture-card"?6:2,percentage:Number(p.percentage),style:Ke(e.listType==="picture-card"?"":"margin-top: 0.5rem")},null,8,["type","stroke-width","percentage","style"])):te("v-if",!0)],2)):te("v-if",!0),H("label",{class:T(i(s).be("list","item-status-label"))},[e.listType==="text"?(x(),oe(i(De),{key:0,class:T([i(r).m("upload-success"),i(r).m("circle-check")])},{default:J(()=>[Y(i(Jv))]),_:1},8,["class"])):["picture-card","picture"].includes(e.listType)?(x(),oe(i(De),{key:1,class:T([i(r).m("upload-success"),i(r).m("check")])},{default:J(()=>[Y(i(vu))]),_:1},8,["class"])):te("v-if",!0)],2),i(u)?te("v-if",!0):(x(),oe(i(De),{key:2,class:T(i(r).m("close")),"aria-label":i(o)("el.upload.delete"),role:"button",tabindex:"0",onClick:m=>f(p),onKeydown:an(Ge(m=>f(p),["prevent"]),["enter","space"])},{default:J(()=>[Y(i(Ha))]),_:1},8,["class","aria-label","onClick","onKeydown"])),i(u)?te("v-if",!0):(x(),B("i",{key:3,class:T(i(r).m("close-tip"))},Se(i(o)("el.upload.deleteTip")),3)),e.listType==="picture-card"?(x(),B("span",{key:4,class:T(i(s).be("list","item-actions"))},[H("span",{class:T(i(s).be("list","item-preview")),onClick:m=>e.handlePreview(p)},[Y(i(De),{class:T(i(r).m("zoom-in"))},{default:J(()=>[Y(i(DC))]),_:1},8,["class"])],10,MG),i(u)?te("v-if",!0):(x(),B("span",{key:0,class:T(i(s).be("list","item-delete")),onClick:m=>f(p)},[Y(i(De),{class:T(i(r).m("delete"))},{default:J(()=>[Y(i(Z4))]),_:1},8,["class"])],10,_G))],2)):te("v-if",!0)])],42,NG))),128)),ee(v.$slots,"append")]),_:3},8,["class","name"]))}}),K0=AG;const W0="ElUploadDrag";var LG=se({name:W0,__name:"upload-dragger",props:$G,emits:OG,setup(e,{emit:t}){const n=e,a=t;_e(XE)||en(W0,"usage: ");const o=fe("upload"),s=M(!1),r=ln(),l=v=>new Promise((g,p)=>v.file(g,p)),u=async v=>{try{if(v.isFile){const g=await l(v);return g.isDirectory=!1,[g]}if(v.isDirectory){const g=v.createReader(),p=()=>new Promise((k,y)=>g.readEntries(k,y)),h=[];let m=await p();for(;m.length>0;)h.push(...m),m=await p();const b=h.map(k=>u(k).catch(()=>[]));return Yc(await Promise.all(b))}}catch{return[]}return[]},c=async v=>{if(r.value)return;s.value=!1,v.stopPropagation();const g=Array.from(v.dataTransfer.files),p=v.dataTransfer.items||[];if(n.directory){const h=Array.from(p).map(m=>m?.webkitGetAsEntry?.()).filter(m=>m);a("file",Yc(await Promise.all(h.map(u))));return}g.forEach((h,m)=>{const b=p[m]?.webkitGetAsEntry?.();b&&(h.isDirectory=b.isDirectory)}),a("file",g)},d=()=>{r.value||(s.value=!0)},f=v=>{v.currentTarget.contains(v.relatedTarget)||(s.value=!1)};return(v,g)=>(x(),B("div",{class:T([i(o).b("dragger"),i(o).is("dragover",s.value)]),onDrop:Ge(c,["prevent"]),onDragover:Ge(d,["prevent"]),onDragleave:Ge(f,["prevent"])},[ee(v.$slots,"default")],34))}}),DG=LG;const BG=["tabindex","aria-disabled","onKeydown"],FG=["name","disabled","multiple","accept","webkitdirectory"];var VG=se({name:"ElUploadContent",inheritAttrs:!1,__name:"upload-content",props:TG,setup(e,{expose:t}){const n=e,a=fe("upload"),o=ln(),s=Xt({}),r=Xt(),l=h=>{if(h.length===0)return;const{autoUpload:m,limit:b,fileList:k,multiple:y,onStart:S,onExceed:C}=n;if(b&&k.length+h.length>b){C(h,k);return}y||(h=h.slice(0,1));for(const E of h){const $=E;$.uid=Lh(),S($),m&&u($)}},u=async h=>{if(r.value.value="",!n.beforeUpload)return d(h);let m,b={};try{const y=n.data,S=n.beforeUpload(h);b=mi(n.data)?es(n.data):n.data,m=await S,mi(n.data)&&on(y,b)&&(b=es(n.data))}catch{m=!1}if(m===!1){n.onRemove(h);return}let k=h;m instanceof Blob&&(m instanceof File?k=m:k=new File([m],h.name,{type:h.type})),d(Object.assign(k,{uid:h.uid}),b)},c=async(h,m)=>Ve(h)?h(m):h,d=async(h,m)=>{const{headers:b,data:k,method:y,withCredentials:S,name:C,action:E,onProgress:$,onSuccess:O,onError:R,httpRequest:N}=n;try{m=await c(m??k,h)}catch{n.onRemove(h);return}const{uid:A}=h,_={headers:b||{},withCredentials:S,file:h,data:m,method:y,filename:C,action:E,onProgress:z=>{$(z,h)},onSuccess:z=>{O(z,h),delete s.value[A]},onError:z=>{R(z,h),delete s.value[A]}},V=N(_);s.value[A]=V,V instanceof Promise&&V.then(_.onSuccess,_.onError)},f=h=>{const m=h.target.files;m&&l(Array.from(m))},v=()=>{o.value||(r.value.value="",r.value.click())},g=()=>{v()};return t({abort:h=>{MS(s.value).filter(h?([m])=>String(h.uid)===m:()=>!0).forEach(([m,b])=>{b instanceof XMLHttpRequest&&b.abort(),delete s.value[m]})},upload:u}),(h,m)=>(x(),B("div",{class:T([i(a).b(),i(a).m(e.listType),i(a).is("drag",e.drag),i(a).is("disabled",i(o))]),tabindex:i(o)?void 0:0,"aria-disabled":i(o),role:"button",onClick:v,onKeydown:an(Ge(g,["self"]),["enter","space"])},[e.drag?(x(),oe(DG,{key:0,disabled:i(o),directory:e.directory,onFile:l},{default:J(()=>[ee(h.$slots,"default")]),_:3},8,["disabled","directory"])):ee(h.$slots,"default",{key:1}),H("input",{ref_key:"inputRef",ref:r,class:T(i(a).e("input")),name:e.name,disabled:i(o),multiple:e.multiple,accept:e.accept,webkitdirectory:e.directory||void 0,type:"file",onChange:f,onClick:m[0]||(m[0]=Ge(()=>{},["stop"]))},null,42,FG)],42,BG))}}),j0=VG;const U0="ElUpload",q0=e=>{e.url?.startsWith("blob:")&&URL.revokeObjectURL(e.url)},zG=(e,t)=>{const n=zS(e,"fileList",void 0,{passive:!0}),a=p=>n.value.find(h=>h.uid===p.uid);function o(p){t.value?.abort(p)}function s(p=["ready","uploading","success","fail"]){n.value=n.value.filter(h=>!p.includes(h.status))}function r(p){n.value=n.value.filter(h=>h.uid!==p.uid)}const l=p=>{Ne(()=>e.onChange(p,n.value))},u=(p,h)=>{const m=a(h);m&&(console.error(p),m.status="fail",r(m),e.onError(p,m,n.value),l(m))},c=(p,h)=>{const m=a(h);m&&(e.onProgress(p,m,n.value),m.status="uploading",m.percentage=Math.round(p.percent))},d=(p,h)=>{const m=a(h);m&&(m.status="success",m.response=p,e.onSuccess(p,m,n.value),l(m))},f=p=>{gn(p.uid)&&(p.uid=Lh());const h={name:p.name,percentage:0,status:"ready",size:p.size,raw:p,uid:p.uid};if(e.listType==="picture-card"||e.listType==="picture")try{h.url=URL.createObjectURL(p)}catch(m){pt(U0,m.message),e.onError(m,h,n.value)}n.value=[...n.value,h],l(h)},v=async p=>{const h=p instanceof File?a(p):p;h||en(U0,"file to be removed not found");const m=b=>{o(b),r(b),e.onRemove(b,n.value),q0(b)};e.beforeRemove?await e.beforeRemove(h,n.value)!==!1&&m(h):m(h)};function g(){n.value.filter(({status:p})=>p==="ready").forEach(({raw:p})=>p&&t.value?.upload(p))}return le(()=>e.listType,p=>{p!=="picture-card"&&p!=="picture"||(n.value=n.value.map(h=>{const{raw:m,url:b}=h;if(!b&&m)try{h.url=URL.createObjectURL(m)}catch(k){e.onError(k,h,n.value)}return h}))}),le(n,p=>{for(const h of p)h.uid||=Lh(),h.status||="success"},{immediate:!0,deep:!0}),{uploadFiles:n,abort:o,clearFiles:s,handleError:u,handleProgress:c,handleStart:f,handleSuccess:d,handleRemove:v,submit:g,revokeFileObjectURL:q0}};var HG=se({name:"ElUpload",__name:"upload",props:kG,setup(e,{expose:t}){const n=e,a=ln(),o=Xt(),{abort:s,submit:r,clearFiles:l,uploadFiles:u,handleStart:c,handleError:d,handleRemove:f,handleSuccess:v,handleProgress:g,revokeFileObjectURL:p}=zG(n,o),h=w(()=>n.listType==="picture-card"),m=w(()=>({...n,fileList:u.value,onStart:c,onProgress:g,onSuccess:v,onError:d,onRemove:f}));return Bt(()=>{u.value.forEach(p)}),St(XE,{accept:Vt(n,"accept")}),t({abort:s,submit:r,clearFiles:l,handleStart:c,handleRemove:f}),(b,k)=>(x(),B("div",null,[h.value&&e.showFileList?(x(),oe(K0,{key:0,disabled:i(a),"list-type":e.listType,files:i(u),crossorigin:e.crossorigin,"handle-preview":e.onPreview,onRemove:i(f)},ua({append:J(()=>[Y(j0,dt({ref_key:"uploadRef",ref:o},m.value),{default:J(()=>[b.$slots.trigger?ee(b.$slots,"trigger",{key:0}):te("v-if",!0),!b.$slots.trigger&&b.$slots.default?ee(b.$slots,"default",{key:1}):te("v-if",!0)]),_:3},16)]),_:2},[b.$slots.file?{name:"default",fn:J(({file:y,index:S})=>[ee(b.$slots,"file",{file:y,index:S})]),key:"0"}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):te("v-if",!0),!h.value||h.value&&!e.showFileList?(x(),oe(j0,dt({key:1,ref_key:"uploadRef",ref:o},m.value),{default:J(()=>[b.$slots.trigger?ee(b.$slots,"trigger",{key:0}):te("v-if",!0),!b.$slots.trigger&&b.$slots.default?ee(b.$slots,"default",{key:1}):te("v-if",!0)]),_:3},16)):te("v-if",!0),b.$slots.trigger?ee(b.$slots,"default",{key:2}):te("v-if",!0),ee(b.$slots,"tip"),!h.value&&e.showFileList?(x(),oe(K0,{key:3,disabled:i(a),"list-type":e.listType,files:i(u),crossorigin:e.crossorigin,"handle-preview":e.onPreview,onRemove:i(f)},ua({_:2},[b.$slots.file?{name:"default",fn:J(({file:y,index:S})=>[ee(b.$slots,"file",{file:y,index:S})]),key:"0"}:void 0]),1032,["disabled","list-type","files","crossorigin","handle-preview","onRemove"])):te("v-if",!0)]))}}),KG=HG;const WG=st(KG),jG=Ce({zIndex:{type:Number,default:9},rotate:{type:Number,default:-22},width:Number,height:Number,image:String,content:{type:G([String,Array]),default:"Element Plus"},font:{type:G(Object)},gap:{type:G(Array),default:()=>[100,100]},offset:{type:G(Array)}});function UG(e){return e.replace(/([A-Z])/g,"-$1").toLowerCase()}function qG(e){return Object.keys(e).map(t=>`${UG(t)}: ${e[t]};`).join(" ")}function YG(){return window.devicePixelRatio||1}const GG=(e,t)=>{let n=!1;return e.removedNodes.length&&t&&(n=Array.from(e.removedNodes).includes(t)),e.type==="attributes"&&e.target===t&&(n=!0),n},XG={left:[0,.5],start:[0,.5],center:[.5,0],right:[1,-.5],end:[1,-.5]};function fp(e,t,n=1){const a=document.createElement("canvas"),o=a.getContext("2d"),s=e*n,r=t*n;return a.setAttribute("width",`${s}px`),a.setAttribute("height",`${r}px`),o.save(),[o,a,s,r]}function JG(){function e(t,n,a,o,s,r,l,u,c){const[d,f,v,g]=fp(o,s,a);let p=0;if(t instanceof HTMLImageElement)d.drawImage(t,0,0,v,g);else{const{color:q,fontSize:j,fontStyle:X,fontWeight:Q,fontFamily:he,textAlign:ue,textBaseline:ge}=r,ie=Number(j)*a;d.font=`${X} normal ${Q} ${ie}px/${s}px ${he}`,d.fillStyle=q,d.textAlign=ue,d.textBaseline=ge;const ae=ye(t)?t:[t];if(ge!=="top"&&ae[0]){const ne=d.measureText(ae[0]);d.textBaseline="top";const K=d.measureText(ae[0]);p=ne.actualBoundingBoxAscent-K.actualBoundingBoxAscent}ae?.forEach((ne,K)=>{const[Z,re]=XG[ue];d.fillText(ne??"",v*Z+c*re,K*(ie+r.fontGap*a))})}const h=Math.PI/180*Number(n),m=Math.max(o,s),[b,k,y]=fp(m,m,a);b.translate(y/2,y/2),b.rotate(h),v>0&&g>0&&b.drawImage(f,-v/2,-g/2);function S(q,j){return[q*Math.cos(h)-j*Math.sin(h),q*Math.sin(h)+j*Math.cos(h)]}let C=0,E=0,$=0,O=0;const R=v/2,N=g/2;[[0-R,0-N],[0+R,0-N],[0+R,0+N],[0-R,0+N]].forEach(([q,j])=>{const[X,Q]=S(q,j);C=Math.min(C,X),E=Math.max(E,X),$=Math.min($,Q),O=Math.max(O,Q)});const A=C+y/2,_=$+y/2,V=E-C,z=O-$,U=l*a,W=u*a,P=(V+U)*2,I=z+W,[L,D]=fp(P,I);function F(q=0,j=0){L.drawImage(k,A,_,V,z,q,j+p,V,z)}return F(),F(V+U,-z/2-W/2),F(V+U,+z/2+W/2),[D.toDataURL(),P/a,I/a]}return e}var ZG=se({name:"ElWatermark",__name:"watermark",props:jG,setup(e){const t={position:"relative"},n=e,a=w(()=>n.font?.fontGap??3),o=w(()=>n.font?.color??"rgba(0,0,0,.15)"),s=w(()=>n.font?.fontSize??16),r=w(()=>n.font?.fontWeight??"normal"),l=w(()=>n.font?.fontStyle??"normal"),u=w(()=>n.font?.fontFamily??"sans-serif"),c=w(()=>n.font?.textAlign??"center"),d=w(()=>n.font?.textBaseline??"hanging"),f=w(()=>n.gap[0]),v=w(()=>n.gap[1]),g=w(()=>f.value/2),p=w(()=>v.value/2),h=w(()=>n.offset?.[0]??g.value),m=w(()=>n.offset?.[1]??p.value),b=()=>{const A={zIndex:n.zIndex,position:"absolute",left:0,top:0,width:"100%",height:"100%",pointerEvents:"none",backgroundRepeat:"repeat"};let _=h.value-g.value,V=m.value-p.value;return _>0&&(A.left=`${_}px`,A.width=`calc(100% - ${_}px)`,_=0),V>0&&(A.top=`${V}px`,A.height=`calc(100% - ${V}px)`,V=0),A.backgroundPosition=`${_}px ${V}px`,A},k=Xt(null),y=Xt(),S=M(!1),C=()=>{y.value&&(y.value.remove(),y.value=void 0)},E=(A,_)=>{k.value&&y.value&&(S.value=!0,y.value.setAttribute("style",qG({...b(),backgroundImage:`url('${A}')`,backgroundSize:`${Math.floor(_)}px`})),k.value?.append(y.value),setTimeout(()=>{S.value=!1}))},$=A=>{let _=120,V=64,z=0;const{image:U,content:W,width:P,height:I,rotate:L}=n;if(!U&&A.measureText){A.font=`${Number(s.value)}px ${u.value}`;const D=ye(W)?W:[W];let F=0,q=0;D.forEach(X=>{const{width:Q,fontBoundingBoxAscent:he,fontBoundingBoxDescent:ue,actualBoundingBoxAscent:ge,actualBoundingBoxDescent:ie}=A.measureText(X),ae=Tt(he)?ge+ie:he+ue;Q>F&&(F=Math.ceil(Q)),ae>q&&(q=Math.ceil(ae))}),_=F,V=q*D.length+(D.length-1)*a.value;const j=Math.PI/180*Number(L);z=Math.ceil(Math.abs(Math.sin(j)*V)/2),_+=z}return[P??_,I??V,z]},O=JG(),R=()=>{const A=document.createElement("canvas").getContext("2d"),_=n.image,V=n.content,z=n.rotate;if(A){y.value||(y.value=document.createElement("div"));const U=YG(),[W,P,I]=$(A),L=D=>{const[F,q]=O(D||"",z,U,W,P,{color:o.value,fontSize:s.value,fontStyle:l.value,fontWeight:r.value,fontFamily:u.value,fontGap:a.value,textAlign:c.value,textBaseline:d.value},f.value,v.value,I);E(F,q)};if(_){const D=new Image;D.onload=()=>{L(D)},D.onerror=()=>{L(V)},D.crossOrigin="anonymous",D.referrerPolicy="no-referrer",D.src=_}else L(V)}};return ht(()=>{R()}),le(()=>n,()=>{R()},{deep:!0,flush:"post"}),Bt(()=>{C()}),su(k,A=>{S.value||A.forEach(_=>{GG(_,y.value)&&(C(),R())})},{attributes:!0,subtree:!0,childList:!0}),(A,_)=>(x(),B("div",{ref_key:"containerRef",ref:k,style:Ke([t])},[ee(A.$slots,"default")],4))}}),QG=ZG;const eX=st(QG),tX=["absolute","fixed"],nX=["top-start","top-end","top","bottom-start","bottom-end","bottom","left-start","left-end","left","right-start","right-end","right"],Ym=Ce({placement:{type:G(String),values:nX,default:"bottom"},reference:{type:G(Object),default:null},strategy:{type:G(String),values:tX,default:"absolute"},offset:{type:Number,default:10},showArrow:Boolean,zIndex:{type:Number,default:2001}}),aX={close:()=>!0},oX=Ce({modelValue:Boolean,current:{type:Number,default:0},showArrow:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeIcon:{type:Kt},placement:Ym.placement,contentStyle:{type:G([Object])},mask:{type:G([Boolean,Object]),default:!0},gap:{type:G(Object),default:()=>({offset:6,radius:2})},zIndex:{type:Number},scrollIntoViewOptions:{type:G([Boolean,Object]),default:()=>({block:"center"})},type:{type:G(String)},appendTo:{type:au.to.type,default:"body"},closeOnPressEscape:{type:Boolean,default:!0},targetAreaClickable:{type:Boolean,default:!0}}),sX={[tt]:e=>Ht(e),"update:current":e=>He(e),close:e=>He(e),finish:()=>!0,change:e=>He(e)},rX=Ce({target:{type:G([String,Object,Function])},title:String,description:String,showClose:{type:Boolean,default:void 0},closeIcon:{type:Kt},showArrow:{type:Boolean,default:void 0},placement:Ym.placement,mask:{type:G([Boolean,Object]),default:void 0},contentStyle:{type:G([Object])},prevButtonProps:{type:G(Object)},nextButtonProps:{type:G(Object)},scrollIntoViewOptions:{type:G([Boolean,Object]),default:void 0},type:{type:G(String)}}),lX={close:()=>!0},iX=(e,t,n,a,o)=>{const s=M(null),r=()=>{let d;return Le(e.value)?d=document.querySelector(e.value):Ve(e.value)?d=e.value():d=e.value,d},l=()=>{const d=r();if(!d||!t.value){s.value=null;return}uX(d)||d.scrollIntoView(o.value);const{left:f,top:v,width:g,height:p}=d.getBoundingClientRect();s.value={left:f,top:v,width:g,height:p,radius:0}};ht(()=>{le([t,e],()=>{l()},{immediate:!0}),window.addEventListener("resize",l)}),Bt(()=>{window.removeEventListener("resize",l)});const u=d=>(ye(n.value.offset)?n.value.offset[d]:n.value.offset)??6,c=w(()=>{if(!s.value)return s.value;const d=u(0),f=u(1),v=n.value?.radius||2;return{left:s.value.left-d,top:s.value.top-f,width:s.value.width+d*2,height:s.value.height+f*2,radius:v}});return{mergedPosInfo:c,triggerTarget:w(()=>{const d=r();return!a.value||!d||!window.DOMRect?d||void 0:{getBoundingClientRect(){return window.DOMRect.fromRect({width:c.value?.width||0,height:c.value?.height||0,x:c.value?.left||0,y:c.value?.top||0})}}})}},ff=Symbol("ElTour");function uX(e){const t=window.innerWidth||document.documentElement.clientWidth,n=window.innerHeight||document.documentElement.clientHeight,{top:a,right:o,bottom:s,left:r}=e.getBoundingClientRect();return a>=0&&r>=0&&o<=t&&s<=n}const cX=(e,t,n,a,o,s,r,l)=>{const u=M(),c=M(),d=M({}),f={x:u,y:c,placement:a,strategy:o,middlewareData:d},v=w(()=>{const b=[u4(i(s)),d4(),c4(),dX()];return i(l)&&i(n)&&b.push(f4({element:i(n)})),b}),g=async()=>{if(!Mt)return;const b=i(e),k=i(t);if(!b||!k)return;const y=await p4(b,k,{placement:i(a),strategy:i(o),middleware:i(v)});Oi(f).forEach(S=>{f[S].value=y[S]})},p=w(()=>{if(!i(e))return{position:"fixed",top:"50%",left:"50%",transform:"translate3d(-50%, -50%, 0)",maxWidth:"100vw",zIndex:i(r)};const{overflow:b}=i(d);return{position:i(o),zIndex:i(r),top:i(c)!=null?`${i(c)}px`:"",left:i(u)!=null?`${i(u)}px`:"",maxWidth:b?.maxWidth?`${b?.maxWidth}px`:""}}),h=w(()=>{if(!i(l))return{};const{arrow:b}=i(d);return{left:b?.x!=null?`${b?.x}px`:"",top:b?.y!=null?`${b?.y}px`:""}});let m;return ht(()=>{const b=i(e),k=i(t);b&&k&&(m=l4(b,k,g)),wa(()=>{g()})}),Bt(()=>{m&&m()}),{update:g,contentStyle:p,arrowStyle:h}},dX=()=>({name:"overflow",async fn(e){const t=await i4(e);let n=0;return t.left>0&&(n=t.left),t.right>0&&(n=t.right),{data:{maxWidth:e.rects.floating.width-n}}}}),fX=Ce({zIndex:{type:Number,default:1001},visible:Boolean,fill:{type:String,default:"rgba(0,0,0,0.5)"},pos:{type:G(Object)},targetAreaClickable:{type:Boolean,default:!0}}),pX={style:{width:"100%",height:"100%"}},hX=["d"];var vX=se({name:"ElTourMask",inheritAttrs:!1,__name:"mask",props:fX,setup(e){const t=e,{ns:n}=_e(ff),a=w(()=>t.pos?.radius??2),o=w(()=>{const d=a.value,f=`a${d},${d} 0 0 1`;return{topRight:`${f} ${d},${d}`,bottomRight:`${f} ${-d},${d}`,bottomLeft:`${f} ${-d},${-d}`,topLeft:`${f} ${d},${-d}`}}),{width:s,height:r}=Rv(),l=w(()=>{const d=s.value,f=r.value,v=o.value,g=`M${d},0 L0,0 L0,${f} L${d},${f} L${d},0 Z`,p=a.value;return t.pos?`${g} M${t.pos.left+p},${t.pos.top} h${t.pos.width-p*2} ${v.topRight} v${t.pos.height-p*2} ${v.bottomRight} h${-t.pos.width+p*2} ${v.bottomLeft} v${-t.pos.height+p*2} ${v.topLeft} z`:g}),u=w(()=>({position:"fixed",left:0,right:0,top:0,bottom:0,zIndex:t.zIndex,pointerEvents:t.pos&&t.targetAreaClickable?"none":"auto"})),c=w(()=>({fill:t.fill,pointerEvents:"auto",cursor:"auto"}));return qd(Vt(t,"visible"),{ns:n}),(d,f)=>e.visible?(x(),B("div",dt({key:0,class:i(n).e("mask"),style:u.value},d.$attrs),[(x(),B("svg",pX,[H("path",{class:T(i(n).e("hollow")),style:Ke(c.value),d:l.value},null,14,hX)]))],16)):te("v-if",!0)}}),mX=vX;const gX=["data-side"];var bX=se({name:"ElTourContent",__name:"content",props:Ym,emits:aX,setup(e,{emit:t}){const n=e,a=t,o=M(n.placement),s=M(n.strategy),r=M(null),l=M(null);le(()=>n.placement,()=>{o.value=n.placement});const{contentStyle:u,arrowStyle:c}=cX(Vt(n,"reference"),r,l,o,s,Vt(n,"offset"),Vt(n,"zIndex"),Vt(n,"showArrow")),d=w(()=>o.value.split("-")[0]),{ns:f}=_e(ff),v=()=>{a("close")},g=p=>{p.detail.focusReason==="pointer"&&p.preventDefault()};return(p,h)=>(x(),B("div",{ref_key:"contentRef",ref:r,style:Ke(i(u)),class:T(i(f).e("content")),"data-side":d.value,tabindex:"-1"},[Y(i(Al),{loop:"",trapped:"","focus-start-el":"container","focus-trap-el":r.value||void 0,onReleaseRequested:v,onFocusoutPrevented:g},{default:J(()=>[ee(p.$slots,"default")]),_:3},8,["focus-trap-el"]),e.showArrow?(x(),B("span",{key:0,ref_key:"arrowRef",ref:l,style:Ke(i(c)),class:T(i(f).e("arrow"))},null,6)):te("v-if",!0)],14,gX))}}),yX=bX,wX=se({name:"ElTourSteps",props:{current:{type:Number,default:0}},emits:["update-total"],setup(e,{slots:t,emit:n}){let a=0;return()=>{const o=t.default?.(),s=[];let r=0;function l(u){ye(u)&&u.forEach(c=>{(c?.type||{})?.name==="ElTourStep"&&(s.push(c),r+=1)})}return o.length&&l(Ta(o[0]?.children)),a!==r&&(a=r,n("update-total",r)),s.length?s[e.current]:null}}}),SX=se({name:"ElTour",inheritAttrs:!1,__name:"tour",props:oX,emits:sX,setup(e,{emit:t}){const n=e,a=t,o=fe("tour"),s=M(0),r=M(),l=zS(n,"current",a,{passive:!0}),u=w(()=>r.value?.target),c=w(()=>[o.b(),b.value==="primary"?o.m("primary"):""]),d=w(()=>r.value?.placement||n.placement),f=w(()=>r.value?.contentStyle??n.contentStyle),v=w(()=>r.value?.mask??n.mask),g=w(()=>!!v.value&&n.modelValue),p=w(()=>Ht(v.value)?void 0:v.value),h=w(()=>!!u.value&&(r.value?.showArrow??n.showArrow)),m=w(()=>r.value?.scrollIntoViewOptions??n.scrollIntoViewOptions),b=w(()=>r.value?.type??n.type),{nextZIndex:k}=uu(),y=k(),S=w(()=>n.zIndex??y),{mergedPosInfo:C,triggerTarget:E}=iX(u,Vt(n,"modelValue"),Vt(n,"gap"),v,m);le(()=>n.modelValue,N=>{N||(l.value=0)});const $=()=>{n.closeOnPressEscape&&(a(tt,!1),a("close",l.value))},O=N=>{s.value=N},R=hn();return St(ff,{currentStep:r,current:l,total:s,showClose:Vt(n,"showClose"),closeIcon:Vt(n,"closeIcon"),mergedType:b,ns:o,slots:R,updateModelValue(N){a(tt,N)},onClose(){a("close",l.value)},onFinish(){a("finish")},onChange(){a(bt,l.value)}}),(N,A)=>(x(),B(Fe,null,[Y(i(_l),{to:e.appendTo},{default:J(()=>[H("div",dt({class:c.value},N.$attrs),[Y(mX,{visible:g.value,fill:p.value?.color,style:Ke(p.value?.style),pos:i(C),"z-index":S.value,"target-area-clickable":e.targetAreaClickable},null,8,["visible","fill","style","pos","z-index","target-area-clickable"]),e.modelValue?(x(),oe(yX,{key:i(l),reference:i(E),placement:d.value,"show-arrow":h.value,"z-index":S.value,style:Ke(f.value),onClose:$},{default:J(()=>[Y(i(wX),{current:i(l),onUpdateTotal:O},{default:J(()=>[ee(N.$slots,"default")]),_:3},8,["current"])]),_:3},8,["reference","placement","show-arrow","z-index","style"])):te("v-if",!0)],16)]),_:3},8,["to"]),te(" just for IDE "),te("v-if",!0)],64))}}),CX=SX;const kX=["aria-label"];var EX=se({name:"ElTourStep",__name:"step",props:rX,emits:lX,setup(e,{emit:t}){const n=e,a=t,{Close:o}=BC,{t:s}=Ct(),{currentStep:r,current:l,total:u,showClose:c,closeIcon:d,mergedType:f,ns:v,slots:g,updateModelValue:p,onClose:h,onFinish:m,onChange:b}=_e(ff);le(n,N=>{r.value=N},{immediate:!0});const k=w(()=>n.showClose??c.value),y=w(()=>n.closeIcon??d.value??o),S=N=>{if(N)return tu(N,["children","onClick"])},C=()=>{l.value-=1,n.prevButtonProps?.onClick&&n.prevButtonProps?.onClick(),b()},E=()=>{l.value>=u.value-1?$():l.value+=1,n.nextButtonProps?.onClick&&n.nextButtonProps.onClick(),b()},$=()=>{O(),m()},O=()=>{p(!1),h(),a("close")},R=N=>{if(!N.target?.isContentEditable)switch(jt(N)){case we.left:N.preventDefault(),l.value>0&&C();break;case we.right:N.preventDefault(),E();break}};return ht(()=>{window.addEventListener("keydown",R)}),Bt(()=>{window.removeEventListener("keydown",R)}),(N,A)=>(x(),B(Fe,null,[k.value?(x(),B("button",{key:0,"aria-label":i(s)("el.tour.close"),class:T(i(v).e("closebtn")),type:"button",onClick:O},[Y(i(De),{class:T(i(v).e("close"))},{default:J(()=>[(x(),oe(it(y.value)))]),_:1},8,["class"])],10,kX)):te("v-if",!0),H("header",{class:T([i(v).e("header"),{"show-close":i(c)}])},[ee(N.$slots,"header",{},()=>[H("span",{role:"heading",class:T(i(v).e("title"))},Se(e.title),3)])],2),H("div",{class:T(i(v).e("body"))},[ee(N.$slots,"default",{},()=>[H("span",null,Se(e.description),1)])],2),H("footer",{class:T(i(v).e("footer"))},[H("div",{class:T(i(v).b("indicators"))},[i(g).indicators?(x(),oe(it(i(g).indicators),{key:0,current:i(l),total:i(u)},null,8,["current","total"])):(x(!0),B(Fe,{key:1},yt(i(u),(_,V)=>(x(),B("span",{key:_,class:T([i(v).b("indicator"),i(v).is("active",V===i(l))])},null,2))),128))],2),H("div",{class:T(i(v).b("buttons"))},[i(l)>0?(x(),oe(i(In),dt({key:0,size:"small",type:i(f)},S(e.prevButtonProps),{onClick:C}),{default:J(()=>[wt(Se(e.prevButtonProps?.children??i(s)("el.tour.previous")),1)]),_:1},16,["type"])):te("v-if",!0),i(l)<=i(u)-1?(x(),oe(i(In),dt({key:1,size:"small",type:i(f)==="primary"?"default":"primary"},S(e.nextButtonProps),{onClick:E}),{default:J(()=>[wt(Se(e.nextButtonProps?.children??(i(l)===i(u)-1?i(s)("el.tour.finish"):i(s)("el.tour.next"))),1)]),_:1},16,["type"])):te("v-if",!0)],2)],2)],64))}}),JE=EX;const xX=st(CX,{TourStep:JE}),TX=tn(JE),$X=Ce({container:{type:G([String,Object])},offset:{type:Number,default:0},bound:{type:Number,default:15},duration:{type:Number,default:300},marker:{type:Boolean,default:!0},type:{type:G(String),default:"default"},direction:{type:G(String),default:"vertical"},selectScrollTop:Boolean}),OX={change:e=>Le(e),click:(e,t)=>e instanceof MouseEvent&&(Le(t)||Tt(t))},ec=(e=>{if(!Mt||e==="")return null;if(Le(e))try{return document.querySelector(e)}catch{return null}return e});function NX(e){let t=0;const n=(...a)=>{t&&rs(t),t=Qa(()=>{e(...a),t=0})};return n.cancel=()=>{rs(t),t=0},n}const ZE=Symbol("anchor");var RX=se({name:"ElAnchor",__name:"anchor",props:$X,emits:OX,setup(e,{expose:t,emit:n}){const a=e,o=n,s=hn(),r=M(""),l=M({}),u=M(null),c=M(null),d=M(),f={};let v=!1,g=0;const p=fe("anchor"),h=w(()=>[p.b(),a.type==="underline"?p.m("underline"):"",p.m(a.direction)]),m=_=>{f[_.href]=_.el},b=_=>{delete f[_]},k=_=>{r.value!==_&&(r.value=_,o(bt,_))};let y=null,S="";const C=_=>{if(!d.value)return;const V=ec(_);if(!V)return;if(y){if(S===_)return;y()}S=_,v=!0;const z=Ib(V,d.value),U=hh(V,z),W=z.scrollHeight-z.clientHeight,P=Math.min(U-a.offset,W);y=u_(d.value,g,P,a.duration,()=>{setTimeout(()=>{v=!1,S=""},20)})},E=_=>{_&&(k(_),C(_))},$=(_,V)=>{o("click",_,V),E(V)},O=NX(()=>{d.value&&(g=Pb(d.value));const _=R();v||Tt(_)||k(_)}),R=()=>{if(!d.value)return;const _=Pb(d.value),V=[];for(const z of Object.keys(f)){const U=ec(z);if(!U)continue;const W=hh(U,Ib(U,d.value));V.push({top:W-a.offset-a.bound,href:z})}V.sort((z,U)=>z.top-U.top);for(let z=0;z_))return U.href}},N=()=>{const _=ec(a.container);!_||nu(_)?d.value=window:d.value=_};Ft(d,"scroll",O);const A=()=>{Ne(()=>{if(!u.value||!c.value||!r.value){l.value={};return}const _=f[r.value];if(!_){l.value={};return}const V=u.value.getBoundingClientRect(),z=c.value.getBoundingClientRect(),U=_.getBoundingClientRect();a.direction==="horizontal"?l.value={left:`${U.left-V.left}px`,width:`${U.width}px`,opacity:1}:l.value={top:`${U.top-V.top+(U.height-z.height)/2}px`,opacity:1}})};return le(r,A),le(()=>s.default?.(),A),ht(()=>{N();const _=decodeURIComponent(window.location.hash);ec(_)?E(_):O()}),le(()=>a.container,()=>{N()}),St(ZE,{ns:p,direction:a.direction,currentAnchor:r,addLink:m,removeLink:b,handleClick:$}),t({scrollTo:E}),(_,V)=>(x(),B("div",{ref_key:"anchorRef",ref:u,class:T(h.value)},[e.marker?(x(),B("div",{key:0,ref_key:"markerRef",ref:c,class:T(i(p).e("marker")),style:Ke(l.value)},null,6)):te("v-if",!0),H("div",{class:T(i(p).e("list"))},[ee(_.$slots,"default")],2)],2))}}),IX=RX;const PX=Ce({title:String,href:String}),MX=["href"];var _X=se({name:"ElAnchorLink",__name:"anchor-link",props:PX,setup(e){const t=e,n=M(null),{ns:a,direction:o,currentAnchor:s,addLink:r,removeLink:l,handleClick:u}=_e(ZE),c=w(()=>[a.e("link"),a.is("active",s.value===t.href)]),d=f=>{u(f,t.href)};return le(()=>t.href,(f,v)=>{Ne(()=>{v&&l(v),f&&r({href:f,el:n.value})})}),ht(()=>{const{href:f}=t;f&&r({href:f,el:n.value})}),Bt(()=>{const{href:f}=t;f&&l(f)}),(f,v)=>(x(),B("div",{class:T(i(a).e("item"))},[H("a",{ref_key:"linkRef",ref:n,class:T(c.value),href:e.href,onClick:d},[ee(f.$slots,"default",{},()=>[wt(Se(e.title),1)])],10,MX),f.$slots["sub-link"]&&i(o)==="vertical"?(x(),B("div",{key:0,class:T(i(a).e("list"))},[ee(f.$slots,"sub-link")],2)):te("v-if",!0)],2))}}),QE=_X;const AX=st(IX,{AnchorLink:QE}),LX=tn(QE),ex={label:"label",value:"value",disabled:"disabled"},DX=Ce({direction:{type:G(String),default:"horizontal"},options:{type:G(Array),default:()=>[]},modelValue:{type:[String,Number,Boolean],default:void 0},props:{type:G(Object),default:()=>ex},block:Boolean,size:Tn,disabled:{type:Boolean,default:void 0},validateEvent:{type:Boolean,default:!0},id:String,name:String,...aa(["ariaLabel"])}),BX={[tt]:e=>Le(e)||He(e)||Ht(e),[bt]:e=>Le(e)||He(e)||Ht(e)},FX=["id","aria-label","aria-labelledby"],VX=["name","disabled","checked","onChange"];var zX=se({name:"ElSegmented",__name:"segmented",props:DX,emits:BX,setup(e,{emit:t}){const n=e,a=t,o=fe("segmented"),s=zn(),r=Sn(),l=ln(),{formItem:u}=Dn(),{inputId:c,isLabeledByFormItem:d}=Ia(n,{formItemContext:u}),f=M(null),v=UM(),g=At({isInit:!1,width:0,height:0,translateX:0,translateY:0,focusVisible:!1}),p=(_,V)=>{const z=b(V);a(tt,z),a(bt,z),_.target.checked=z===n.modelValue},h=w(()=>({...ex,...n.props})),m=_=>_,b=_=>nt(_)?_[h.value.value]:_,k=_=>nt(_)?_[h.value.label]:_,y=_=>!!(l.value||nt(_)&&_[h.value.disabled]),S=_=>n.modelValue===b(_),C=_=>n.options.find(V=>b(V)===_),E=_=>[o.e("item"),o.is("selected",S(_)),o.is("disabled",y(_))],$=()=>{if(!f.value)return;const _=f.value.querySelector(".is-selected"),V=f.value.querySelector(".is-selected input");if(!_||!V){g.width=0,g.height=0,g.translateX=0,g.translateY=0,g.focusVisible=!1;return}g.isInit=!0,n.direction==="vertical"?(g.height=_.offsetHeight,g.translateY=_.offsetTop):(g.width=_.offsetWidth,g.translateX=_.offsetLeft);try{g.focusVisible=V.matches(":focus-visible")}catch{}},O=w(()=>[o.b(),o.m(r.value),o.is("block",n.block)]),R=w(()=>({width:n.direction==="vertical"?"100%":`${g.width}px`,height:n.direction==="vertical"?`${g.height}px`:"100%",transform:n.direction==="vertical"?`translateY(${g.translateY}px)`:`translateX(${g.translateX}px)`,display:g.isInit?"block":"none"})),N=w(()=>[o.e("item-selected"),o.is("disabled",y(C(n.modelValue))),o.is("focus-visible",g.focusVisible)]),A=w(()=>n.name||s.value);return Zt(f,$),le(v,$),le(()=>n.modelValue,()=>{$(),n.validateEvent&&u?.validate?.("change").catch(_=>pt(_))},{flush:"post"}),(_,V)=>e.options.length?(x(),B("div",{key:0,id:i(c),ref_key:"segmentedRef",ref:f,class:T(O.value),role:"radiogroup","aria-label":i(d)?void 0:e.ariaLabel||"segmented","aria-labelledby":i(d)?i(u).labelId:void 0},[H("div",{class:T([i(o).e("group"),i(o).m(e.direction)])},[H("div",{style:Ke(R.value),class:T(N.value)},null,6),(x(!0),B(Fe,null,yt(e.options,(z,U)=>(x(),B("label",{key:U,class:T(E(z))},[H("input",{class:T(i(o).e("item-input")),type:"radio",name:A.value,disabled:y(z),checked:S(z),onChange:W=>p(W,z)},null,42,VX),H("div",{class:T(i(o).e("item-label"))},[ee(_.$slots,"default",{item:m(z)},()=>[wt(Se(k(z)),1)])],2)],2))),128))],2)],10,FX)):te("v-if",!0)}}),HX=zX;const KX=st(HX),WX=(e,t)=>{const n=e.toLowerCase();return(t.label||t.value||"").toLowerCase().includes(n)},jX=(e,t,n)=>{const{selectionEnd:a}=e;if(a===null)return;const o=e.value,s=Rn(t);let r=-1,l;for(let u=a-1;u>=0;--u){const c=o[u];if(c===n||c===` +`||c==="\r"){r=u;continue}if(s.includes(c)){const d=r===-1?a:r;l={pattern:o.slice(u+1,d),start:u+1,end:d,prefix:c,prefixIndex:u,splitIndex:r,selectionEnd:a};break}}return l},UX=(e,t={debug:!1,useSelectionEnd:!1})=>{const n=e.selectionStart!==null?e.selectionStart:0,a=e.selectionEnd!==null?e.selectionEnd:0,o=t.useSelectionEnd?a:n,s=["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(t.debug){const v=document.querySelector("#input-textarea-caret-position-mirror-div");v?.parentNode&&v.parentNode.removeChild(v)}const r=document.createElement("div");r.id="input-textarea-caret-position-mirror-div",document.body.appendChild(r);const l=r.style,u=window.getComputedStyle(e),c=e.nodeName==="INPUT";l.whiteSpace=c?"nowrap":"pre-wrap",c||(l.wordWrap="break-word"),l.position="absolute",t.debug||(l.visibility="hidden"),s.forEach(v=>{if(c&&v==="lineHeight")if(u.boxSizing==="border-box"){const g=Number.parseInt(u.height),p=Number.parseInt(u.paddingTop)+Number.parseInt(u.paddingBottom)+Number.parseInt(u.borderTopWidth)+Number.parseInt(u.borderBottomWidth),h=p+Number.parseInt(u.lineHeight);g>h?l.lineHeight=`${g-p}px`:g===h?l.lineHeight=u.lineHeight:l.lineHeight="0"}else l.lineHeight=u.height;else l[v]=u[v]}),Ud()?e.scrollHeight>Number.parseInt(u.height)&&(l.overflowY="scroll"):l.overflow="hidden",r.textContent=e.value.slice(0,Math.max(0,o)),c&&r.textContent&&(r.textContent=r.textContent.replace(/\s/g," "));const d=document.createElement("span");d.textContent=e.value.slice(Math.max(0,o))||".",d.style.position="relative",d.style.left=`${-e.scrollLeft}px`,d.style.top=`${-e.scrollTop}px`,r.appendChild(d);const f={top:d.offsetTop+Number.parseInt(u.borderTopWidth),left:d.offsetLeft+Number.parseInt(u.borderLeftWidth),height:Number.parseInt(u.fontSize)*1.5};return t.debug?d.style.backgroundColor="#aaa":document.body.removeChild(r),f.left>=e.clientWidth&&(f.left=e.clientWidth),f},qX=Ce({...gu,options:{type:G(Array),default:()=>[]},prefix:{type:G([String,Array]),default:"@",validator:e=>Le(e)?e.length===1:e.every(t=>Le(t)&&t.length===1)},split:{type:String,default:" ",validator:e=>e.length===1},filterOption:{type:G([Boolean,Function]),default:()=>WX,validator:e=>e===!1?!0:Ve(e)},placement:{type:G(String),default:"bottom"},showArrow:Boolean,offset:{type:Number,default:0},whole:Boolean,checkIsWhole:{type:G(Function)},modelValue:String,loading:Boolean,popperClass:zt.popperClass,popperStyle:zt.popperStyle,popperOptions:{type:G(Object),default:()=>({})},props:{type:G(Object),default:()=>tx}}),YX={[tt]:e=>Le(e),"whole-remove":(e,t)=>Le(e)&&Le(t),input:e=>Le(e),search:(e,t)=>Le(e)&&Le(t),select:(e,t)=>nt(e)&&Le(t),focus:e=>e instanceof FocusEvent,blur:e=>e instanceof FocusEvent},tx={value:"value",label:"label",disabled:"disabled"},GX=Ce({options:{type:G(Array),default:()=>[]},loading:Boolean,disabled:Boolean,contentId:String,ariaLabel:String}),XX={select:e=>Le(e.value)},JX=["id","aria-disabled","aria-selected","onMousemove","onClick"];var ZX=se({name:"ElMentionDropdown",__name:"mention-dropdown",props:GX,emits:XX,setup(e,{expose:t,emit:n}){const a=e,o=n,s=fe("mention"),{t:r}=Ct(),l=M(-1),u=M(),c=M(),d=M(),f=(S,C)=>[s.be("dropdown","item"),s.is("hovering",l.value===C),s.is("disabled",S.disabled||a.disabled)],v=S=>{S.disabled||a.disabled||o("select",S)},g=S=>{l.value=S},p=w(()=>a.disabled||a.options.every(S=>S.disabled)),h=w(()=>a.options[l.value]),m=()=>{!h.value||h.value.disabled||a.disabled||o("select",h.value)},b=S=>{const{options:C}=a;if(C.length===0||p.value)return;S==="next"?(l.value++,l.value===C.length&&(l.value=0)):S==="prev"&&(l.value--,l.value<0&&(l.value=C.length-1));const E=C[l.value];if(E.disabled){b(S);return}Ne(()=>k(E))},k=S=>{const{options:C}=a,E=C.findIndex(O=>O.value===S.value),$=c.value?.[E];if($){const O=d.value?.querySelector?.(`.${s.be("dropdown","wrap")}`);O&&Av(O,$)}u.value?.handleScroll()};return le(()=>a.options,()=>{p.value||a.options.length===0?l.value=-1:l.value=a.options.findIndex(S=>!S.disabled)},{immediate:!0}),t({hoveringIndex:l,navigateOptions:b,selectHoverOption:m,hoverOption:h}),(S,C)=>(x(),B("div",{ref_key:"dropdownRef",ref:d,class:T(i(s).b("dropdown"))},[S.$slots.header?(x(),B("div",{key:0,class:T(i(s).be("dropdown","header"))},[ee(S.$slots,"header")],2)):te("v-if",!0),ct(Y(i(no),{id:e.contentId,ref_key:"scrollbarRef",ref:u,tag:"ul","wrap-class":i(s).be("dropdown","wrap"),"view-class":i(s).be("dropdown","list"),role:"listbox","aria-label":e.ariaLabel,"aria-orientation":"vertical"},{default:J(()=>[(x(!0),B(Fe,null,yt(e.options,(E,$)=>(x(),B("li",{id:`${e.contentId}-${$}`,ref_for:!0,ref_key:"optionRefs",ref:c,key:$,class:T(f(E,$)),role:"option","aria-disabled":E.disabled||e.disabled||void 0,"aria-selected":l.value===$,onMousemove:O=>g($),onClick:Ge(O=>v(E),["stop"])},[ee(S.$slots,"label",{item:E,index:$},()=>[H("span",null,Se(E.label??E.value),1)])],42,JX))),128))]),_:3},8,["id","wrap-class","view-class","aria-label"]),[[Pt,e.options.length>0&&!e.loading]]),e.loading?(x(),B("div",{key:1,class:T(i(s).be("dropdown","loading"))},[ee(S.$slots,"loading",{},()=>[wt(Se(i(r)("el.mention.loading")),1)])],2)):te("v-if",!0),S.$slots.footer?(x(),B("div",{key:2,class:T(i(s).be("dropdown","footer"))},[ee(S.$slots,"footer")],2)):te("v-if",!0)],2))}}),QX=ZX,eJ=se({name:"ElMention",inheritAttrs:!1,__name:"mention",props:qX,emits:YX,setup(e,{expose:t,emit:n}){const a=e,o=n,s=w(()=>ss(a,Object.keys(gu))),r=fe("mention"),l=ln(),u=zn(),c=M(),d=M(),f=M(),v=M(!1),g=M(),p=M(),h=w(()=>a.showArrow?a.placement:`${a.placement}-start`),m=w(()=>a.showArrow?["bottom","top"]:["bottom-start","top-start"]),b=w(()=>({...tx,...a.props})),k=P=>{const I={label:P[b.value.label],value:P[b.value.value],disabled:P[b.value.disabled]};return{...P,...I}},y=w(()=>a.options.map(k)),S=w(()=>{const{filterOption:P}=a;return!p.value||!P?y.value:y.value.filter(I=>P(p.value.pattern,I))}),C=w(()=>v.value&&(!!S.value.length||a.loading)),E=w(()=>`${u.value}-${f.value?.hoveringIndex}`),$=P=>{o(tt,P),o(wn,P),z()},O=P=>{if(c.value?.isComposing)return;const I=jt(P);switch(I){case we.left:case we.right:z();break;case we.up:case we.down:if(!v.value)return;P.preventDefault(),f.value?.navigateOptions(I===we.up?"prev":"next");break;case we.enter:case we.numpadEnter:if(!v.value){a.type!=="textarea"&&z();return}P.preventDefault(),f.value?.hoverOption?f.value?.selectHoverOption():v.value=!1;break;case we.esc:if(!v.value)return;P.preventDefault(),v.value=!1;break;case we.backspace:if(a.whole&&p.value){const{splitIndex:L,selectionEnd:D,pattern:F,prefixIndex:q,prefix:j}=p.value,X=V();if(!X)return;const Q=X.value,he=y.value.find(ue=>ue.value===F);if((Ve(a.checkIsWhole)?a.checkIsWhole(F,j):he)&&L!==-1&&L+1===D){P.preventDefault();const ue=Q.slice(0,q)+Q.slice(L+1);o(tt,ue),o(wn,ue),o("whole-remove",F,j);const ge=q;Ne(()=>{X.selectionStart=ge,X.selectionEnd=ge,W()})}}}},{wrapperRef:R}=ms(c,{disabled:l,afterFocus(){z()},beforeBlur(P){return d.value?.isFocusInsideContent(P)},afterBlur(){v.value=!1}}),N=()=>{z()},A=P=>a.options.find(I=>P.value===I[b.value.value]),_=P=>{if(!p.value)return;const I=V();if(!I)return;const L=I.value,{split:D}=a,F=L.slice(p.value.end),q=F.startsWith(D),j=`${P.value}${q?"":D}`,X=L.slice(0,p.value.start)+j+F;o(tt,X),o(wn,X),o("select",A(P),p.value.prefix);const Q=p.value.start+j.length+(q?1:0);Ne(()=>{I.selectionStart=Q,I.selectionEnd=Q,I.focus(),W()})},V=()=>a.type==="textarea"?c.value?.textarea:c.value?.input,z=()=>{setTimeout(()=>{U(),W(),Ne(()=>d.value?.updatePopper())},0)},U=()=>{const P=V();if(!P)return;const I=UX(P),L=P.getBoundingClientRect(),D=R.value.getBoundingClientRect();g.value={position:"absolute",width:0,height:`${I.height}px`,left:`${I.left+L.left-D.left}px`,top:`${I.top+L.top-D.top}px`}},W=()=>{const P=V();if(document.activeElement!==P){v.value=!1;return}const{prefix:I,split:L}=a;if(p.value=jX(P,I,L),p.value&&p.value.splitIndex===-1){v.value=!0,o("search",p.value.pattern,p.value.prefix);return}v.value=!1};return t({input:c,tooltip:d,dropdownVisible:C}),(P,I)=>(x(),B("div",{ref_key:"wrapperRef",ref:R,class:T(i(r).b())},[Y(i(ea),dt(dt(s.value,P.$attrs),{ref_key:"elInputRef",ref:c,"model-value":e.modelValue,disabled:i(l),role:C.value?"combobox":void 0,"aria-activedescendant":C.value?E.value||"":void 0,"aria-controls":C.value?i(u):void 0,"aria-expanded":C.value||void 0,"aria-label":e.ariaLabel,"aria-autocomplete":C.value?"none":void 0,"aria-haspopup":C.value?"listbox":void 0,onInput:$,onKeydown:O,onMousedown:N}),ua({_:2},[yt(P.$slots,(L,D)=>({name:D,fn:J(F=>[ee(P.$slots,D,Jo(Zo(F)))])}))]),1040,["model-value","disabled","role","aria-activedescendant","aria-controls","aria-expanded","aria-label","aria-autocomplete","aria-haspopup"]),Y(i(Ln),{ref_key:"tooltipRef",ref:d,visible:C.value,"popper-class":[i(r).e("popper"),e.popperClass],"popper-style":e.popperStyle,"popper-options":e.popperOptions,placement:h.value,"fallback-placements":m.value,effect:"light",pure:"",offset:e.offset,"show-arrow":e.showArrow},{default:J(()=>[H("div",{style:Ke(g.value)},null,4)]),content:J(()=>[Y(QX,{ref_key:"dropdownRef",ref:f,options:S.value,disabled:i(l),loading:e.loading,"content-id":i(u),"aria-label":e.ariaLabel,onSelect:_,onClick:I[0]||(I[0]=Ge(L=>c.value?.focus(),["stop"]))},ua({_:2},[yt(P.$slots,(L,D)=>({name:D,fn:J(F=>[ee(P.$slots,D,Jo(Zo(F)))])}))]),1032,["options","disabled","loading","content-id","aria-label"])]),_:3},8,["visible","popper-class","popper-style","popper-options","placement","fallback-placements","offset","show-arrow"])],2))}}),tJ=eJ;const nJ=st(tJ),aJ=Ce({layout:{type:String,default:"horizontal",values:["horizontal","vertical"]},lazy:Boolean}),oJ={resizeStart:(e,t)=>!0,resize:(e,t)=>!0,resizeEnd:(e,t)=>!0,collapse:(e,t,n)=>!0},sJ=Ce({min:{type:[String,Number]},max:{type:[String,Number]},size:{type:[String,Number]},resizable:{type:Boolean,default:!0},collapsible:Boolean}),rJ={"update:size":e=>typeof e=="number"||typeof e=="string"};function lJ(e){const t=M(),{width:n,height:a}=Dp(t);return{containerEl:t,containerSize:w(()=>e.value==="horizontal"?n.value:a.value)}}function Gm(e){return Number(e.slice(0,-1))/100}function Xm(e){return Number(e.slice(0,-2))}function Jm(e){return Le(e)&&e.endsWith("%")}function Zm(e){return Le(e)&&e.endsWith("px")}function iJ(e,t){const n=w(()=>e.value.map(r=>r.size)),a=w(()=>e.value.length),o=M([]);le([n,a,t],()=>{let r=[],l=0;for(let c=0;cc+(d||0),0);if(u>1||!l){const c=1/u;r=r.map(d=>d===void 0?0:d*c)}else{const c=(1-u)/l;r=r.map(d=>d===void 0?c:d)}o.value=r});const s=r=>r*t.value;return{percentSizes:o,pxSizes:w(()=>o.value.map(s))}}function uJ(e,t,n,a){const o=m=>m*t.value||0;function s(m,b){return Jm(m)?o(Gm(m)):Zm(m)?Xm(m):m??b}const r=M(0),l=M(null);let u=[],c=Dt;const d=w(()=>e.value.map(m=>[m.min,m.max]));le(a,()=>{if(r.value){const m=new MouseEvent("mouseup",{bubbles:!0});window.dispatchEvent(m)}});const f=m=>{r.value=0,l.value={index:m,confirmed:!1},u=n.value},v=(m,b)=>{let k=null;if((!l.value||!l.value.confirmed)&&b!==0){if(b>0)k=m,l.value={index:m,confirmed:!0};else for(let A=m;A>=0;A-=1)if(u[A]>0){k=A,l.value={index:A,confirmed:!0};break}}const y=k??l.value?.index??m,S=[...u],C=y+1,E=s(d.value[y][0],0),$=s(d.value[C][0],0),O=s(d.value[y][1],t.value||0),R=s(d.value[C][1],t.value||0);let N=b;S[y]+NO&&(N=O-S[y]),S[C]-N>R&&(N=S[C]-R),S[y]+=N,S[C]-=N,r.value=N,c=()=>{e.value.forEach((A,_)=>{A.size=S[_]}),c=Dt},a.value||c()},g=()=>{a.value&&c(),r.value=0,l.value=null,u=[]},p=[];return{lazyOffset:r,onMoveStart:f,onMoving:v,onMoveEnd:g,movingIndex:l,onCollapse:(m,b)=>{p.length||p.push(...n.value);const k=n.value,y=b==="start"?m:m+1,S=b==="start"?m+1:m,C=k[y],E=k[S];if(C!==0&&E!==0)k[y]=0,k[S]+=C,p[m]=C;else{const $=C+E,O=p[m],R=$-O;k[S]=O,k[y]=R}e.value.forEach(($,O)=>{$.size=k[O]})}}}const nx=Symbol("splitterRootContextKey");var cJ=se({name:"ElSplitter",__name:"splitter",props:aJ,emits:oJ,setup(e,{emit:t}){const n=fe("splitter"),a=t,o=e,s=Vt(o,"layout"),r=Vt(o,"lazy"),{containerEl:l,containerSize:u}=lJ(s),{removeChild:c,children:d,addChild:f,ChildrenSorter:v}=Qd(ft(),"ElSplitterPanel");le(d,()=>{m.value=null,d.value.forEach((N,A)=>{N.setIndex(A)})});const{percentSizes:g,pxSizes:p}=iJ(d,u),{lazyOffset:h,movingIndex:m,onMoveStart:b,onMoving:k,onMoveEnd:y,onCollapse:S}=uJ(d,u,p,r),C=w(()=>({[n.cssVarBlockName("bar-offset")]:r.value?`${h.value}px`:void 0}));return St(nx,At({panels:d,percentSizes:g,pxSizes:p,layout:s,lazy:r,movingIndex:m,containerSize:u,onMoveStart:N=>{b(N),a("resizeStart",N,p.value)},onMoving:(N,A)=>{k(N,A),r.value||a("resize",N,p.value)},onMoveEnd:async N=>{y(),await Ne(),a("resizeEnd",N,p.value)},onCollapse:(N,A)=>{S(N,A),a("collapse",N,A,p.value)},registerPanel:f,unregisterPanel:c})),(N,A)=>(x(),B("div",{ref_key:"containerEl",ref:l,class:T([i(n).b(),i(n).e(s.value)]),style:Ke(C.value)},[ee(N.$slots,"default"),Y(i(v)),te(" Prevent iframe touch events from breaking "),i(m)?(x(),B("div",{key:0,class:T([i(n).e("mask"),i(n).e(`mask-${s.value}`)])},null,2)):te("v-if",!0)],6))}}),dJ=cJ;function fJ(e){return e&&nt(e)?e:{start:!!e,end:!!e}}function Y0(e,t,n,a){return!!(e?.collapsible.end&&t>0||n?.collapsible.start&&a===0&&t>0)}var pJ=se({name:"ElSplitterBar",__name:"split-bar",props:{index:{type:Number,required:!0},layout:{type:String,values:["horizontal","vertical"],default:"horizontal"},resizable:{type:Boolean,default:!0},lazy:Boolean,startCollapsible:Boolean,endCollapsible:Boolean},emits:["moveStart","moving","moveEnd","collapse"],setup(e,{emit:t}){const n=fe("splitter-bar"),a=e,o=t,s=w(()=>a.layout==="horizontal"),r=w(()=>s.value?{width:0}:{height:0}),l=w(()=>({width:s.value?"16px":"100%",height:s.value?"100%":"16px",cursor:a.resizable?s.value?"ew-resize":"ns-resize":"auto",touchAction:"none"})),u=w(()=>{const k=n.e("dragger");return{[`${k}-horizontal`]:s.value,[`${k}-vertical`]:!s.value,[`${k}-active`]:!!c.value}}),c=M(null),d=k=>{a.resizable&&(c.value=[k.pageX,k.pageY],o("moveStart",a.index),window.addEventListener("mouseup",p),window.addEventListener("mousemove",v))},f=k=>{if(a.resizable&&k.touches.length===1){k.preventDefault();const y=k.touches[0];c.value=[y.pageX,y.pageY],o("moveStart",a.index),window.addEventListener("touchend",h),window.addEventListener("touchmove",g)}},v=k=>{const{pageX:y,pageY:S}=k,C=y-c.value[0],E=S-c.value[1],$=s.value?C:E;o("moving",a.index,$)},g=k=>{if(k.touches.length===1){k.preventDefault();const y=k.touches[0],S=y.pageX-c.value[0],C=y.pageY-c.value[1],E=s.value?S:C;o("moving",a.index,E)}},p=()=>{c.value=null,window.removeEventListener("mouseup",p),window.removeEventListener("mousemove",v),o("moveEnd",a.index)},h=()=>{c.value=null,window.removeEventListener("touchend",h),window.removeEventListener("touchmove",g),o("moveEnd",a.index)},m=w(()=>s.value?is:ef),b=w(()=>s.value?na:Bo);return(k,y)=>(x(),B("div",{class:T([i(n).b()]),style:Ke(r.value)},[e.startCollapsible?(x(),B("div",{key:0,class:T([i(n).e("collapse-icon"),i(n).e(`${e.layout}-collapse-icon-start`)]),onClick:y[0]||(y[0]=S=>o("collapse",e.index,"start"))},[ee(k.$slots,"start-collapsible",{},()=>[(x(),oe(it(m.value),{style:{width:"12px",height:"12px"}}))])],2)):te("v-if",!0),H("div",{class:T([i(n).e("dragger"),u.value,i(n).is("disabled",!e.resizable),i(n).is("lazy",e.resizable&&e.lazy)]),style:Ke(l.value),onMousedown:d,onTouchstart:f},null,38),e.endCollapsible?(x(),B("div",{key:1,class:T([i(n).e("collapse-icon"),i(n).e(`${e.layout}-collapse-icon-end`)]),onClick:y[1]||(y[1]=S=>o("collapse",e.index,"end"))},[ee(k.$slots,"end-collapsible",{},()=>[(x(),oe(it(b.value),{style:{width:"12px",height:"12px"}}))])],2)):te("v-if",!0)],6))}}),hJ=pJ;const G0="ElSplitterPanel";var vJ=se({name:G0,__name:"split-panel",props:sJ,emits:rJ,setup(e,{expose:t,emit:n}){const a=fe("splitter-panel"),o=e,s=n,r=_e(nx);r||en(G0,"usage: ");const{panels:l,layout:u,lazy:c,containerSize:d,pxSizes:f}=Mn(r),{registerPanel:v,unregisterPanel:g,onCollapse:p,onMoveEnd:h,onMoveStart:m,onMoving:b}=r,k=M(),y=ft(),S=y.uid,C=M(0),E=w(()=>l.value[C.value]),$=I=>{C.value=I},O=w(()=>E.value?f.value[C.value]??0:0),R=w(()=>E.value?f.value[C.value+1]??0:0),N=w(()=>E.value?l.value[C.value+1]:null),A=w(()=>N.value?o.resizable&&N.value?.resizable&&(O.value!==0||!o.min)&&(R.value!==0||!N.value.min):!1),_=w(()=>E.value?C.value!==l.value.length-1:!1),V=w(()=>Y0(E.value,O.value,N.value,R.value)),z=w(()=>Y0(N.value,R.value,E.value,O.value));function U(I){return Jm(I)?Gm(I)*d.value||0:Zm(I)?Xm(I):I??0}let W=!1;le(()=>o.size,()=>{if(!W&&E.value){if(!d.value){E.value.size=o.size;return}const I=U(o.size),L=U(o.max),D=U(o.min),F=Math.min(Math.max(I,D||0),L||I);F!==I&&s("update:size",F),E.value.size=F}}),le(()=>E.value?.size,I=>{I!==o.size&&(W=!0,s("update:size",I),Ne(()=>W=!1))}),le(()=>o.resizable,I=>{E.value&&(E.value.resizable=I)});const P=At({uid:S,getVnode:()=>y.vnode,setIndex:$,...o,collapsible:w(()=>fJ(o.collapsible))});return v(P),Bt(()=>g(P)),t({splitterPanelRef:k}),(I,L)=>(x(),B(Fe,null,[H("div",dt({ref_key:"panelEl",ref:k,class:[i(a).b()],style:{flexBasis:`${O.value}px`}},I.$attrs),[ee(I.$slots,"default")],16),_.value?(x(),oe(hJ,{key:0,index:C.value,layout:i(u),lazy:i(c),resizable:A.value,"start-collapsible":V.value,"end-collapsible":z.value,onMoveStart:i(m),onMoving:i(b),onMoveEnd:i(h),onCollapse:i(p)},{"start-collapsible":J(()=>[ee(I.$slots,"start-collapsible")]),"end-collapsible":J(()=>[ee(I.$slots,"end-collapsible")]),_:3},8,["index","layout","lazy","resizable","start-collapsible","end-collapsible","onMoveStart","onMoving","onMoveEnd","onCollapse"])):te("v-if",!0)],64))}}),ax=vJ;const mJ=st(dJ,{SplitPanel:ax}),gJ=tn(ax),Ea="ElInfiniteScroll",bJ=50,yJ=200,wJ=0,SJ={delay:{type:Number,default:yJ},distance:{type:Number,default:wJ},disabled:{type:Boolean,default:!1},immediate:{type:Boolean,default:!0}},Qm=(e,t)=>Object.entries(SJ).reduce((n,[a,o])=>{const{type:s,default:r}=o,l=e.getAttribute(`infinite-scroll-${a}`);let u=t[l]??l??r;return u=u==="false"?!1:u,u=s(u),n[a]=Number.isNaN(u)?r:u,n},{}),ox=e=>{const{observer:t}=e[Ea];t&&(t.disconnect(),delete e[Ea].observer)},CJ=(e,t)=>{const{container:n,containerEl:a,instance:o,observer:s,lastScrollTop:r}=e[Ea],{disabled:l,distance:u}=Qm(e,o),{clientHeight:c,scrollHeight:d,scrollTop:f}=a,v=f-r;if(e[Ea].lastScrollTop=f,s||l||v<0)return;let g=!1;if(n===e)g=d-(c+f)<=u;else{const{clientTop:p,scrollHeight:h}=e,m=hh(e,a);g=f+c>=m+p+h-u}g&&t.call(o)};function pp(e,t){const{containerEl:n,instance:a}=e[Ea],{disabled:o}=Qm(e,a);o||n.clientHeight===0||(n.scrollHeight<=n.clientHeight?t.call(a):ox(e))}const kJ={async mounted(e,t){const{instance:n,value:a}=t;xo({scope:Ea,from:"the directive v-infinite-scroll",replacement:"the el-scrollbar infinite scroll",version:"3.0.0",ref:"https://element-plus.org/en-US/component/scrollbar#infinite-scroll"},!0),Ve(a)||en(Ea,"'v-infinite-scroll' binding value must be a function"),await Ne();const{delay:o,immediate:s}=Qm(e,n),r=_v(e,!0),l=r===window?document.documentElement:r,u=Ns(CJ.bind(null,e,a),o);if(r){if(e[Ea]={instance:n,container:r,containerEl:l,delay:o,cb:a,onScroll:u,lastScrollTop:l.scrollTop},s){const c=new MutationObserver(Ns(pp.bind(null,e,a),bJ));e[Ea].observer=c,c.observe(e,{childList:!0,subtree:!0}),pp(e,a)}r.addEventListener("scroll",u)}},unmounted(e){if(!e[Ea])return;const{container:t,onScroll:n}=e[Ea];t?.removeEventListener("scroll",n),ox(e)},async updated(e){if(!e[Ea])await Ne();else{const{containerEl:t,cb:n,observer:a}=e[Ea];t.clientHeight&&a&&pp(e,n)}}},Dh=kJ;Dh.install=e=>{e.directive("InfiniteScroll",Dh)};const EJ=Dh;function xJ(e,t){let n;const a=M(!1),o=At({...e,originalPosition:"",originalOverflow:"",visible:!1});function s(v){o.text=v}function r(){const v=o.parent,g=f.ns;if(!v.vLoadingAddClassList){let p=v.getAttribute("loading-number");p=Number.parseInt(p)-1,p?v.setAttribute("loading-number",p.toString()):(ta(v,g.bm("parent","relative")),v.removeAttribute("loading-number")),ta(v,g.bm("parent","hidden"))}l(),d.unmount()}function l(){f.$el?.parentNode?.removeChild(f.$el)}function u(){e.beforeClose&&!e.beforeClose()||(a.value=!0,clearTimeout(n),n=setTimeout(c,400),o.visible=!1,e.closed?.())}function c(){if(!a.value)return;const v=o.parent;a.value=!1,v.vLoadingAddClassList=void 0,r()}const d=eO(se({name:"ElLoading",setup(v,{expose:g}){const{ns:p,zIndex:h}=of("loading");return g({ns:p,zIndex:h}),()=>{const m=o.spinner||o.svg,b=qe("svg",{class:"circular",viewBox:o.svgViewBox?o.svgViewBox:"0 0 50 50",...m?{innerHTML:m}:{}},[qe("circle",{class:"path",cx:"25",cy:"25",r:"20",fill:"none"})]),k=o.text?qe("p",{class:p.b("text")},[o.text]):void 0;return qe(Vn,{name:p.b("fade"),onAfterLeave:c},{default:J(()=>[ct(Y("div",{style:{backgroundColor:o.background||""},class:[p.b("mask"),o.customClass,p.is("fullscreen",o.fullscreen)]},[qe("div",{class:p.b("spinner")},[b,k])]),[[Pt,o.visible]])])})}}}));Object.assign(d._context,t??{});const f=d.mount(document.createElement("div"));return{...Mn(o),setText:s,removeElLoadingChild:l,close:u,handleAfterLeave:c,vm:f,get $el(){return f.$el}}}let tc;const rl=function(e={},t){if(!Mt)return;const n=TJ(e);if(n.fullscreen&&tc)return tc;const a=xJ({...n,closed:()=>{n.closed?.(),n.fullscreen&&(tc=void 0)}},t??rl._context);$J(n,n.parent,a),X0(n,n.parent,a),n.parent.vLoadingAddClassList=()=>X0(n,n.parent,a);let o=n.parent.getAttribute("loading-number");return o?o=`${Number.parseInt(o)+1}`:o="1",n.parent.setAttribute("loading-number",o),n.parent.appendChild(a.$el),Ne(()=>a.visible.value=n.visible),n.fullscreen&&(tc=a),a},TJ=e=>{let t;return Le(e.target)?t=document.querySelector(e.target)??document.body:t=e.target||document.body,{parent:t===document.body||e.body?document.body:t,background:e.background||"",svg:e.svg||"",svgViewBox:e.svgViewBox||"",spinner:e.spinner||!1,text:e.text||"",fullscreen:t===document.body&&(e.fullscreen??!0),lock:e.lock??!1,customClass:e.customClass||"",visible:e.visible??!0,beforeClose:e.beforeClose,closed:e.closed,target:t}},$J=async(e,t,n)=>{const{nextZIndex:a}=n.vm.zIndex||n.vm._.exposed.zIndex,o={};if(e.fullscreen)n.originalPosition.value=Yo(document.body,"position"),n.originalOverflow.value=Yo(document.body,"overflow"),o.zIndex=a();else if(e.parent===document.body){n.originalPosition.value=Yo(document.body,"position"),await Ne();for(const s of["top","left"]){const r=s==="top"?"scrollTop":"scrollLeft";o[s]=`${e.target.getBoundingClientRect()[s]+document.body[r]+document.documentElement[r]-Number.parseInt(Yo(document.body,`margin-${s}`),10)}px`}for(const s of["height","width"])o[s]=`${e.target.getBoundingClientRect()[s]}px`}else n.originalPosition.value=Yo(t,"position");for(const[s,r]of Object.entries(o))n.$el.style[s]=r},X0=(e,t,n)=>{const a=n.vm.ns||n.vm._.exposed.ns;["absolute","fixed","sticky"].includes(n.originalPosition.value)?ta(t,a.bm("parent","relative")):La(t,a.bm("parent","relative")),e.fullscreen&&e.lock?La(t,a.bm("parent","hidden")):ta(t,a.bm("parent","hidden"))};rl._context=null;const Ql=Symbol("ElLoading"),Js=e=>`element-loading-${cs(e)}`,J0=(e,t)=>{const n=t.instance,a=c=>nt(t.value)?t.value[c]:void 0,o=c=>M(Le(c)&&n?.[c]||c),s=c=>o(a(c)||e.getAttribute(Js(c))),r=a("fullscreen")??t.modifiers.fullscreen,l={text:s("text"),svg:s("svg"),svgViewBox:s("svgViewBox"),spinner:s("spinner"),background:s("background"),customClass:s("customClass"),fullscreen:r,target:a("target")??(r?void 0:e),body:a("body")??t.modifiers.body,lock:a("lock")??t.modifiers.lock},u=rl(l);u._context=vi._context,e[Ql]={options:l,instance:u}},OJ=(e,t)=>{for(const n of Object.keys(e))Jt(e[n])&&(e[n].value=t[n])},vi={mounted(e,t){t.value&&J0(e,t)},updated(e,t){const n=e[Ql];if(!t.value){n?.instance.close(),e[Ql]=null;return}n?OJ(n.options,nt(t.value)?t.value:{text:e.getAttribute(Js("text")),svg:e.getAttribute(Js("svg")),svgViewBox:e.getAttribute(Js("svgViewBox")),spinner:e.getAttribute(Js("spinner")),background:e.getAttribute(Js("background")),customClass:e.getAttribute(Js("customClass"))}):J0(e,t)},unmounted(e){e[Ql]?.instance.close(),e[Ql]=null}};vi._context=null;const NJ={install(e){rl._context=e._context,vi._context=e._context,e.directive("loading",vi),e.config.globalProperties.$loading=rl},directive:vi,service:rl},sx=["primary","success","info","warning","error"],rx=["top","top-left","top-right","bottom","bottom-left","bottom-right"],ll="top",Un=sn({customClass:"",dangerouslyUseHTMLString:!1,duration:3e3,icon:void 0,id:"",message:"",onClose:void 0,showClose:!1,type:"info",plain:!1,offset:16,placement:void 0,zIndex:0,grouping:!1,repeatNum:1,appendTo:Mt?document.body:void 0}),RJ=Ce({customClass:{type:String,default:Un.customClass},dangerouslyUseHTMLString:{type:Boolean,default:Un.dangerouslyUseHTMLString},duration:{type:Number,default:Un.duration},icon:{type:Kt,default:Un.icon},id:{type:String,default:Un.id},message:{type:G([String,Object,Function]),default:Un.message},onClose:{type:G(Function),default:Un.onClose},showClose:{type:Boolean,default:Un.showClose},type:{type:String,values:sx,default:Un.type},plain:{type:Boolean,default:Un.plain},offset:{type:Number,default:Un.offset},placement:{type:String,values:rx,default:Un.placement},zIndex:{type:Number,default:Un.zIndex},grouping:{type:Boolean,default:Un.grouping},repeatNum:{type:Number,default:Un.repeatNum}}),IJ={destroy:()=>!0},Ga=Zh({}),PJ=e=>(Ga[e]||(Ga[e]=Zh([])),Ga[e]),MJ=(e,t)=>{const n=Ga[t]||[],a=n.findIndex(r=>r.id===e),o=n[a];let s;return a>0&&(s=n[a-1]),{current:o,prev:s}},_J=(e,t)=>{const{prev:n}=MJ(e,t);return n?n.vm.exposed.bottom.value:0},AJ=(e,t,n)=>(Ga[n]||[]).findIndex(a=>a.id===e)>0?16:t,LJ=["id"],DJ=["innerHTML"];var BJ=se({name:"ElMessage",__name:"message",props:RJ,emits:IJ,setup(e,{expose:t,emit:n}){const{Close:a}=Qv,o=e,s=n,r=M(!1),{ns:l,zIndex:u}=of("message"),{currentZIndex:c,nextZIndex:d}=u,f=M(),v=M(!1),g=M(0);let p;const h=w(()=>o.type?o.type==="error"?"danger":o.type:"info"),m=w(()=>{const V=o.type;return{[l.bm("icon",V)]:V&&Vs[V]}}),b=w(()=>o.icon||Vs[o.type]||""),k=w(()=>o.placement||ll),y=w(()=>_J(o.id,k.value)),S=w(()=>AJ(o.id,o.offset,k.value)+y.value),C=w(()=>g.value+S.value),E=w(()=>k.value.includes("left")?l.is("left"):k.value.includes("right")?l.is("right"):l.is("center")),$=w(()=>k.value.startsWith("top")?"top":"bottom"),O=w(()=>({[$.value]:`${S.value}px`,zIndex:c.value}));function R(){o.duration!==0&&({stop:p}=pl(()=>{A()},o.duration))}function N(){p?.()}function A(){v.value=!1,Ne(()=>{r.value||(o.onClose?.(),s("destroy"))})}function _(V){jt(V)===we.esc&&A()}return ht(()=>{R(),d(),v.value=!0}),le(()=>o.repeatNum,()=>{N(),R()}),Ft(document,"keydown",_),Zt(f,()=>{g.value=f.value.getBoundingClientRect().height}),t({visible:v,bottom:C,close:A}),(V,z)=>(x(),oe(Vn,{name:i(l).b("fade"),onBeforeEnter:z[0]||(z[0]=U=>r.value=!0),onBeforeLeave:e.onClose,onAfterLeave:z[1]||(z[1]=U=>V.$emit("destroy")),persisted:""},{default:J(()=>[ct(H("div",{id:e.id,ref_key:"messageRef",ref:f,class:T([i(l).b(),{[i(l).m(e.type)]:e.type},i(l).is("closable",e.showClose),i(l).is("plain",e.plain),i(l).is("bottom",$.value==="bottom"),E.value,e.customClass]),style:Ke(O.value),role:"alert",onMouseenter:N,onMouseleave:R},[e.repeatNum>1?(x(),oe(i(ak),{key:0,value:e.repeatNum,type:h.value,class:T(i(l).e("badge"))},null,8,["value","type","class"])):te("v-if",!0),b.value?(x(),oe(i(De),{key:1,class:T([i(l).e("icon"),m.value])},{default:J(()=>[(x(),oe(it(b.value)))]),_:1},8,["class"])):te("v-if",!0),ee(V.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(x(),B(Fe,{key:1},[te(" Caution here, message could've been compromised, never use user's input as message "),H("p",{class:T(i(l).e("content")),innerHTML:e.message},null,10,DJ)],2112)):(x(),B("p",{key:0,class:T(i(l).e("content"))},Se(e.message),3))]),e.showClose?(x(),oe(i(De),{key:2,class:T(i(l).e("closeBtn")),onClick:Ge(A,["stop"])},{default:J(()=>[Y(i(a))]),_:1},8,["class"])):te("v-if",!0)],46,LJ),[[Pt,v.value]])]),_:3},8,["name","onBeforeLeave"]))}}),FJ=BJ;let VJ=1;const zJ=e=>{if(!e.appendTo)e.appendTo=document.body;else if(Le(e.appendTo)){let t=document.querySelector(e.appendTo);ha(t)||(pt("ElMessage","the appendTo option is not an HTMLElement. Falling back to document.body."),t=document.body),e.appendTo=t}},HJ=e=>{!e.placement&&Le(Gn.placement)&&Gn.placement&&(e.placement=Gn.placement),e.placement||(e.placement=ll),rx.includes(e.placement)||(pt("ElMessage",`Invalid placement: ${e.placement}. Falling back to '${ll}'.`),e.placement=ll)},lx=e=>{const t=!e||Le(e)||Ut(e)||Ve(e)?{message:e}:e,n={...Un,...t};return zJ(n),HJ(n),Ht(Gn.grouping)&&!n.grouping&&(n.grouping=Gn.grouping),He(Gn.duration)&&n.duration===3e3&&(n.duration=Gn.duration),He(Gn.offset)&&n.offset===16&&(n.offset=Gn.offset),Ht(Gn.showClose)&&!n.showClose&&(n.showClose=Gn.showClose),Ht(Gn.plain)&&!n.plain&&(n.plain=Gn.plain),n},KJ=e=>{const t=Ga[e.props.placement||ll],n=t.indexOf(e);if(n===-1)return;t.splice(n,1);const{handler:a}=e;a.close()},WJ=({appendTo:e,...t},n)=>{const a=`message_${VJ++}`,o=t.onClose,s=document.createElement("div"),r={...t,id:a,onClose:()=>{o?.(),KJ(c)},onDestroy:()=>{Ls(null,s)}},l=Y(FJ,r,Ve(r.message)||Ut(r.message)?{default:Ve(r.message)?r.message:()=>r.message}:null);l.appContext=n||Er._context,Ls(l,s),e.appendChild(s.firstElementChild);const u=l.component,c={id:a,vnode:l,vm:u,handler:{close:()=>{u.exposed.close()}},props:l.component.props};return c},Er=(e={},t)=>{if(!Mt)return{close:()=>{}};const n=lx(e),a=PJ(n.placement||ll);if(n.grouping&&a.length){const s=a.find(({vnode:r})=>r.props?.message===n.message);if(s)return s.props.repeatNum+=1,s.props.type=n.type,s.handler}if(He(Gn.max)&&a.length>=Gn.max)return{close:()=>{}};const o=WJ(n,t);return a.push(o),o.handler};sx.forEach(e=>{Er[e]=(t={},n)=>Er({...lx(t),type:e},n)});function jJ(e){for(const t in Ga)if(Rt(Ga,t)){const n=[...Ga[t]];for(const a of n)(!e||e===a.props.type)&&a.handler.close()}}function UJ(e){Ga[e]&&[...Ga[e]].forEach(t=>t.handler.close())}Er.closeAll=jJ;Er.closeAllByPlacement=UJ;Er._context=null;const qJ=PC(Er,"$message");var YJ=se({name:"ElMessageBox",directives:{TrapFocus:p8},components:{ElButton:In,ElFocusTrap:Al,ElInput:ea,ElOverlay:Cm,ElIcon:De,...Qv},inheritAttrs:!1,props:{buttonSize:{type:String,validator:iE},modal:{type:Boolean,default:!0},lockScroll:{type:Boolean,default:!0},showClose:{type:Boolean,default:!0},closeOnClickModal:{type:Boolean,default:!0},closeOnPressEscape:{type:Boolean,default:!0},closeOnHashChange:{type:Boolean,default:!0},center:Boolean,draggable:Boolean,overflow:Boolean,roundButton:Boolean,container:{type:String,default:"body"},boxType:{type:String,default:""}},emits:["vanish","action"],setup(e,{emit:t}){const{locale:n,zIndex:a,ns:o,size:s}=of("message-box",w(()=>e.buttonSize)),{t:r}=n,{nextZIndex:l}=a,u=M(!1),c=At({autofocus:!0,beforeClose:null,callback:null,cancelButtonText:"",cancelButtonClass:"",confirmButtonText:"",confirmButtonClass:"",cancelButtonType:"",confirmButtonType:"primary",customClass:"",customStyle:{},dangerouslyUseHTMLString:!1,distinguishCancelAndClose:!1,icon:"",closeIcon:"",inputPattern:null,inputPlaceholder:"",inputType:"text",inputValue:"",inputValidator:void 0,inputErrorMessage:"",message:"",modalFade:!0,modalClass:"",showCancelButton:!1,showConfirmButton:!0,type:"",title:void 0,showInput:!1,action:"",confirmButtonLoading:!1,cancelButtonLoading:!1,confirmButtonLoadingIcon:Eo(_o),cancelButtonLoadingIcon:Eo(_o),confirmButtonDisabled:!1,editorErrorMessage:"",validateError:!1,zIndex:l()}),d=w(()=>{const U=c.type;return{[o.bm("icon",U)]:U&&Vs[U]}}),f=zn(),v=zn(),g=w(()=>{const U=c.type;return c.icon||U&&Vs[U]||""}),p=w(()=>!!c.message),h=M(),m=M(),b=M(),k=M(),y=M(),S=w(()=>c.confirmButtonClass);le(()=>c.inputValue,async U=>{await Ne(),e.boxType==="prompt"&&U&&A()},{immediate:!0}),le(()=>u.value,U=>{U&&(e.boxType!=="prompt"&&(c.autofocus?b.value=y.value?.$el??h.value:b.value=h.value),c.zIndex=l()),e.boxType==="prompt"&&(U?Ne().then(()=>{k.value&&k.value.$el&&(c.autofocus?b.value=_()??h.value:b.value=h.value)}):(c.editorErrorMessage="",c.validateError=!1))});const{isDragging:C}=YS(h,m,w(()=>e.draggable),w(()=>e.overflow));ht(async()=>{await Ne(),e.closeOnHashChange&&window.addEventListener("hashchange",E)}),Bt(()=>{e.closeOnHashChange&&window.removeEventListener("hashchange",E)});function E(){u.value&&(u.value=!1,Ne(()=>{c.action&&t("action",c.action)}))}const $=()=>{e.closeOnClickModal&&N(c.distinguishCancelAndClose?"close":"cancel")},O=Wv($),R=U=>{if(c.inputType!=="textarea"&&!k.value?.isComposing)return U.preventDefault(),N("confirm")},N=U=>{e.boxType==="prompt"&&U==="confirm"&&!A()||(c.action=U,c.beforeClose?c.beforeClose?.(U,c,E):E())},A=()=>{if(e.boxType==="prompt"){const U=c.inputPattern;if(U&&!U.test(c.inputValue||""))return c.editorErrorMessage=c.inputErrorMessage||r("el.messagebox.error"),c.validateError=!0,!1;const W=c.inputValidator;if(Ve(W)){const P=W(c.inputValue);if(P===!1)return c.editorErrorMessage=c.inputErrorMessage||r("el.messagebox.error"),c.validateError=!0,!1;if(Le(P))return c.editorErrorMessage=P,c.validateError=!0,!1}}return c.editorErrorMessage="",c.validateError=!1,!0},_=()=>{const U=k.value?.$refs;return U?.input??U?.textarea},V=()=>{N("close")},z=()=>{e.closeOnPressEscape&&V()};return e.lockScroll&&qd(u,{ns:o}),{...Mn(c),ns:o,overlayEvent:O,visible:u,hasMessage:p,typeClass:d,contentId:f,inputId:v,btnSize:s,iconComponent:g,confirmButtonClasses:S,rootRef:h,focusStartRef:b,headerRef:m,inputRef:k,isDragging:C,confirmRef:y,doClose:E,handleClose:V,onCloseRequested:z,handleWrapperClick:$,handleInputEnter:R,handleAction:N,t:r}}});const GJ=["aria-label","aria-describedby"],XJ=["aria-label"],JJ=["id"];function ZJ(e,t,n,a,o,s){const r=It("el-icon"),l=It("el-input"),u=It("el-button"),c=It("el-focus-trap"),d=It("el-overlay");return x(),oe(Vn,{name:"fade-in-linear",onAfterLeave:t[11]||(t[11]=f=>e.$emit("vanish")),persisted:""},{default:J(()=>[ct(Y(d,{"z-index":e.zIndex,"overlay-class":[e.ns.is("message-box"),e.modalClass],mask:e.modal},{default:J(()=>[H("div",{role:"dialog","aria-label":e.title,"aria-modal":"true","aria-describedby":e.showInput?void 0:e.contentId,class:T(`${e.ns.namespace.value}-overlay-message-box`),onClick:t[8]||(t[8]=(...f)=>e.overlayEvent.onClick&&e.overlayEvent.onClick(...f)),onMousedown:t[9]||(t[9]=(...f)=>e.overlayEvent.onMousedown&&e.overlayEvent.onMousedown(...f)),onMouseup:t[10]||(t[10]=(...f)=>e.overlayEvent.onMouseup&&e.overlayEvent.onMouseup(...f))},[Y(c,{loop:"",trapped:e.visible,"focus-trap-el":e.rootRef,"focus-start-el":e.focusStartRef,onReleaseRequested:e.onCloseRequested},{default:J(()=>[H("div",{ref:"rootRef",class:T([e.ns.b(),e.customClass,e.ns.is("draggable",e.draggable),e.ns.is("dragging",e.isDragging),{[e.ns.m("center")]:e.center}]),style:Ke(e.customStyle),tabindex:"-1",onClick:t[7]||(t[7]=Ge(()=>{},["stop"]))},[e.title!==null&&e.title!==void 0?(x(),B("div",{key:0,ref:"headerRef",class:T([e.ns.e("header"),{"show-close":e.showClose}])},[H("div",{class:T(e.ns.e("title"))},[e.iconComponent&&e.center?(x(),oe(r,{key:0,class:T([e.ns.e("status"),e.typeClass])},{default:J(()=>[(x(),oe(it(e.iconComponent)))]),_:1},8,["class"])):te("v-if",!0),H("span",null,Se(e.title),1)],2),e.showClose?(x(),B("button",{key:0,type:"button",class:T(e.ns.e("headerbtn")),"aria-label":e.t("el.messagebox.close"),onClick:t[0]||(t[0]=f=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel")),onKeydown:t[1]||(t[1]=an(Ge(f=>e.handleAction(e.distinguishCancelAndClose?"close":"cancel"),["prevent"]),["enter"]))},[Y(r,{class:T(e.ns.e("close"))},{default:J(()=>[(x(),oe(it(e.closeIcon||"close")))]),_:1},8,["class"])],42,XJ)):te("v-if",!0)],2)):te("v-if",!0),H("div",{id:e.contentId,class:T(e.ns.e("content"))},[H("div",{class:T(e.ns.e("container"))},[e.iconComponent&&!e.center&&e.hasMessage?(x(),oe(r,{key:0,class:T([e.ns.e("status"),e.typeClass])},{default:J(()=>[(x(),oe(it(e.iconComponent)))]),_:1},8,["class"])):te("v-if",!0),e.hasMessage?(x(),B("div",{key:1,class:T(e.ns.e("message"))},[ee(e.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(x(),oe(it(e.showInput?"label":"p"),{key:1,for:e.showInput?e.inputId:void 0,innerHTML:e.message},null,8,["for","innerHTML"])):(x(),oe(it(e.showInput?"label":"p"),{key:0,for:e.showInput?e.inputId:void 0,textContent:Se(e.message)},null,8,["for","textContent"]))])],2)):te("v-if",!0)],2),ct(H("div",{class:T(e.ns.e("input"))},[Y(l,{id:e.inputId,ref:"inputRef",modelValue:e.inputValue,"onUpdate:modelValue":t[2]||(t[2]=f=>e.inputValue=f),type:e.inputType,placeholder:e.inputPlaceholder,"aria-invalid":e.validateError,class:T({invalid:e.validateError}),onKeydown:an(e.handleInputEnter,["enter"])},null,8,["id","modelValue","type","placeholder","aria-invalid","class","onKeydown"]),H("div",{class:T(e.ns.e("errormsg")),style:Ke({visibility:e.editorErrorMessage?"visible":"hidden"})},Se(e.editorErrorMessage),7)],2),[[Pt,e.showInput]])],10,JJ),H("div",{class:T(e.ns.e("btns"))},[e.showCancelButton?(x(),oe(u,{key:0,type:e.cancelButtonType==="text"?"":e.cancelButtonType,text:e.cancelButtonType==="text",loading:e.cancelButtonLoading,"loading-icon":e.cancelButtonLoadingIcon,class:T([e.cancelButtonClass]),round:e.roundButton,size:e.btnSize,onClick:t[3]||(t[3]=f=>e.handleAction("cancel")),onKeydown:t[4]||(t[4]=an(Ge(f=>e.handleAction("cancel"),["prevent"]),["enter"]))},{default:J(()=>[wt(Se(e.cancelButtonText||e.t("el.messagebox.cancel")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","size"])):te("v-if",!0),ct(Y(u,{ref:"confirmRef",type:e.confirmButtonType==="text"?"":e.confirmButtonType,text:e.confirmButtonType==="text",loading:e.confirmButtonLoading,"loading-icon":e.confirmButtonLoadingIcon,class:T([e.confirmButtonClasses]),round:e.roundButton,disabled:e.confirmButtonDisabled,size:e.btnSize,onClick:t[5]||(t[5]=f=>e.handleAction("confirm")),onKeydown:t[6]||(t[6]=an(Ge(f=>e.handleAction("confirm"),["prevent"]),["enter"]))},{default:J(()=>[wt(Se(e.confirmButtonText||e.t("el.messagebox.confirm")),1)]),_:1},8,["type","text","loading","loading-icon","class","round","disabled","size"]),[[Pt,e.showConfirmButton]])],2)],6)]),_:3},8,["trapped","focus-trap-el","focus-start-el","onReleaseRequested"])],42,GJ)]),_:3},8,["z-index","overlay-class","mask"]),[[Pt,e.visible]])]),_:3})}var QJ=$n(YJ,[["render",ZJ]]);const ji=new Map,eZ=e=>{let t=document.body;return e.appendTo&&(Le(e.appendTo)&&(t=document.querySelector(e.appendTo)),ha(e.appendTo)&&(t=e.appendTo),ha(t)||(pt("ElMessageBox","the appendTo option is not an HTMLElement. Falling back to document.body."),t=document.body)),t},tZ=(e,t,n=null)=>{const a=Y(QJ,e,Ve(e.message)||Ut(e.message)?{default:Ve(e.message)?e.message:()=>e.message}:null);return a.appContext=n,Ls(a,t),eZ(e).appendChild(t.firstElementChild),a.component},nZ=()=>document.createElement("div"),aZ=(e,t)=>{const n=nZ();e.onVanish=()=>{Ls(null,n),ji.delete(o)},e.onAction=s=>{const r=ji.get(o);let l;e.showInput?l={value:o.inputValue,action:s}:l=s,e.callback?e.callback(l,a.proxy):s==="cancel"||s==="close"?e.distinguishCancelAndClose&&s!=="cancel"?r.reject("close"):r.reject("cancel"):r.resolve(l)};const a=tZ(e,n,t),o=a.proxy;for(const s in e)Rt(e,s)&&!Rt(o.$props,s)&&(s==="closeIcon"&&nt(e[s])?o[s]=Eo(e[s]):o[s]=e[s]);return o.visible=!0,o};function Dl(e,t=null){if(!Mt)return Promise.reject();let n;return Le(e)||Ut(e)?e={message:e}:n=e.callback,new Promise((a,o)=>{const s=aZ(e,t??Dl._context);ji.set(s,{options:e,callback:n,resolve:a,reject:o})})}const oZ=["alert","confirm","prompt"],sZ={alert:{closeOnPressEscape:!1,closeOnClickModal:!1},confirm:{showCancelButton:!0},prompt:{showCancelButton:!0,showInput:!0}};oZ.forEach(e=>{Dl[e]=rZ(e)});function rZ(e){return(t,n,a,o)=>{let s="";return nt(n)?(a=n,s=""):Tt(n)?s="":s=n,Dl(Object.assign({title:s,message:t,type:"",...sZ[e]},a,{boxType:e}),o)}}Dl.close=()=>{ji.forEach((e,t)=>{t.doClose()}),ji.clear()};Dl._context=null;const Es=Dl;Es.install=e=>{Es._context=e._context,e.config.globalProperties.$msgbox=Es,e.config.globalProperties.$messageBox=Es,e.config.globalProperties.$alert=Es.alert,e.config.globalProperties.$confirm=Es.confirm,e.config.globalProperties.$prompt=Es.prompt};const lZ=Es,ix=["primary","success","info","warning","error"],iZ=Ce({customClass:{type:String,default:""},dangerouslyUseHTMLString:Boolean,duration:{type:Number,default:4500},icon:{type:Kt},id:{type:String,default:""},message:{type:G([String,Object,Function]),default:""},offset:{type:Number,default:0},onClick:{type:G(Function),default:()=>{}},onClose:{type:G(Function),required:!0},position:{type:String,values:["top-right","top-left","bottom-right","bottom-left"],default:"top-right"},showClose:{type:Boolean,default:!0},title:{type:String,default:""},type:{type:String,values:[...ix,""],default:""},zIndex:Number,closeIcon:{type:Kt,default:Ha}}),uZ={destroy:()=>!0},cZ=["id"],dZ=["textContent"],fZ={key:0},pZ=["innerHTML"];var hZ=se({name:"ElNotification",__name:"notification",props:iZ,emits:uZ,setup(e,{expose:t}){const n=e,{ns:a,zIndex:o}=of("notification"),{nextZIndex:s,currentZIndex:r}=o,l=M(!1);let u;const c=w(()=>{const k=n.type;return k&&Vs[n.type]?a.m(k):""}),d=w(()=>n.type&&Vs[n.type]||n.icon),f=w(()=>n.position.endsWith("right")?"right":"left"),v=w(()=>n.position.startsWith("top")?"top":"bottom"),g=w(()=>({[v.value]:`${n.offset}px`,zIndex:n.zIndex??r.value}));function p(){n.duration>0&&({stop:u}=pl(()=>{l.value&&m()},n.duration))}function h(){u?.()}function m(){l.value=!1}function b(k){switch(jt(k)){case we.delete:case we.backspace:h();break;case we.esc:l.value&&m();break;default:p();break}}return ht(()=>{p(),s(),l.value=!0}),Ft(document,"keydown",b),t({visible:l,close:m}),(k,y)=>(x(),oe(Vn,{name:i(a).b("fade"),onBeforeLeave:e.onClose,onAfterLeave:y[1]||(y[1]=S=>k.$emit("destroy")),persisted:""},{default:J(()=>[ct(H("div",{id:e.id,class:T([i(a).b(),e.customClass,f.value]),style:Ke(g.value),role:"alert",onMouseenter:h,onMouseleave:p,onClick:y[0]||(y[0]=(...S)=>e.onClick&&e.onClick(...S))},[d.value?(x(),oe(i(De),{key:0,class:T([i(a).e("icon"),c.value])},{default:J(()=>[(x(),oe(it(d.value)))]),_:1},8,["class"])):te("v-if",!0),H("div",{class:T(i(a).e("group"))},[H("h2",{class:T(i(a).e("title")),textContent:Se(e.title)},null,10,dZ),ct(H("div",{class:T(i(a).e("content")),style:Ke(e.title?void 0:{margin:0})},[ee(k.$slots,"default",{},()=>[e.dangerouslyUseHTMLString?(x(),B(Fe,{key:1},[te(" Caution here, message could've been compromised, never use user's input as message "),H("p",{innerHTML:e.message},null,8,pZ)],2112)):(x(),B("p",fZ,Se(e.message),1))])],6),[[Pt,e.message]]),e.showClose?(x(),oe(i(De),{key:0,class:T(i(a).e("closeBtn")),onClick:Ge(m,["stop"])},{default:J(()=>[(x(),oe(it(e.closeIcon)))]),_:1},8,["class"])):te("v-if",!0)],2)],46,cZ),[[Pt,l.value]])]),_:3},8,["name","onBeforeLeave"]))}}),vZ=hZ;const xl={"top-left":[],"top-right":[],"bottom-left":[],"bottom-right":[]},wd=16;let mZ=1;const xr=function(e={},t){if(!Mt)return{close:()=>{}};(Le(e)||Ut(e))&&(e={message:e});const n=e.position||"top-right";let a=e.offset||0;xl[n].forEach(({vm:d})=>{a+=(d.el?.offsetHeight||0)+wd}),a+=wd;const o=`notification_${mZ++}`,s=e.onClose,r={...e,offset:a,id:o,onClose:()=>{gZ(o,n,s)}};let l=document.body;ha(e.appendTo)?l=e.appendTo:Le(e.appendTo)&&(l=document.querySelector(e.appendTo)),ha(l)||(pt("ElNotification","the appendTo option is not an HTMLElement. Falling back to document.body."),l=document.body);const u=document.createElement("div"),c=Y(vZ,r,Ve(r.message)?r.message:Ut(r.message)?()=>r.message:null);return c.appContext=Tt(t)?xr._context:t,c.props.onDestroy=()=>{Ls(null,u)},Ls(c,u),xl[n].push({vm:c}),l.appendChild(u.firstElementChild),{close:()=>{c.component.exposed.visible.value=!1}}};ix.forEach(e=>{xr[e]=(t={},n)=>((Le(t)||Ut(t))&&(t={message:t}),xr({...t,type:e},n))});function gZ(e,t,n){const a=xl[t],o=a.findIndex(({vm:c})=>c.component?.props.id===e);if(o===-1)return;const{vm:s}=a[o];if(!s)return;n?.(s);const r=s.el.offsetHeight,l=t.split("-")[0];a.splice(o,1);const u=a.length;if(!(u<1))for(let c=o;c{t.component.exposed.visible.value=!1})}function yZ(e="top-right"){let t=xl[e][0]?.vm.component?.props?.offset||0;for(const{vm:n}of xl[e])n.component.props.offset=t,t+=(n.el?.offsetHeight||0)+wd}xr.closeAll=bZ;xr.updateOffsets=yZ;xr._context=null;const wZ=PC(xr,"$notify"),SZ=Ce({trigger:No.trigger,triggerKeys:No.triggerKeys,placement:$c.placement,disabled:No.disabled,visible:zt.visible,transition:zt.transition,popperOptions:$c.popperOptions,tabindex:$c.tabindex,content:zt.content,popperStyle:zt.popperStyle,popperClass:zt.popperClass,enterable:{...zt.enterable,default:!0},effect:{...zt.effect,default:"light"},teleported:zt.teleported,appendTo:zt.appendTo,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:!0},persistent:{type:Boolean,default:!0},"onUpdate:visible":{type:Function}}),CZ={"update:visible":e=>Ht(e),"before-enter":()=>!0,"before-leave":()=>!0,"after-enter":()=>!0,"after-leave":()=>!0},kZ="onUpdate:visible";var EZ=se({name:"ElPopover",__name:"popover",props:SZ,emits:CZ,setup(e,{expose:t,emit:n}){const a=e,o=n,s=w(()=>a[kZ]),r=fe("popover"),l=M(),u=w(()=>i(l)?.popperRef),c=w(()=>[{width:rn(a.width)},a.popperStyle]),d=w(()=>[r.b(),a.popperClass,{[r.m("plain")]:!!a.content}]),f=w(()=>a.transition===`${r.namespace.value}-fade-in-linear`),v=()=>{l.value?.hide()},g=()=>{o("before-enter")},p=()=>{o("before-leave")},h=()=>{o("after-enter")},m=()=>{o("update:visible",!1),o("after-leave")};return t({popperRef:u,hide:v}),(b,k)=>(x(),oe(i(Ln),dt({ref_key:"tooltipRef",ref:l},b.$attrs,{trigger:e.trigger,"trigger-keys":e.triggerKeys,placement:e.placement,disabled:e.disabled,visible:e.visible,transition:e.transition,"popper-options":e.popperOptions,tabindex:e.tabindex,content:e.content,offset:e.offset,"show-after":e.showAfter,"hide-after":e.hideAfter,"auto-close":e.autoClose,"show-arrow":e.showArrow,"aria-label":e.title,effect:e.effect,enterable:e.enterable,"popper-class":d.value,"popper-style":c.value,teleported:e.teleported,"append-to":e.appendTo,persistent:e.persistent,"gpu-acceleration":f.value,"onUpdate:visible":s.value,onBeforeShow:g,onBeforeHide:p,onShow:h,onHide:m}),{content:J(()=>[e.title?(x(),B("div",{key:0,class:T(i(r).e("title")),role:"title"},Se(e.title),3)):te("v-if",!0),ee(b.$slots,"default",{hide:v},()=>[wt(Se(e.content),1)])]),default:J(()=>[b.$slots.reference?ee(b.$slots,"reference",{key:0}):te("v-if",!0)]),_:3},16,["trigger","trigger-keys","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","append-to","persistent","gpu-acceleration","onUpdate:visible"]))}}),xZ=EZ;const Z0=(e,t)=>{const n=(t.arg||t.value)?.popperRef;n&&(n.triggerRef=e)};var TZ={mounted(e,t){Z0(e,t)},updated(e,t){Z0(e,t)}};const $Z="popover",ux=E4(TZ,$Z),OZ=st(xZ,{directive:ux}),NZ="2.13.5",RZ=(e=[])=>({version:NZ,install:(n,a)=>{n[Xg]||(n[Xg]=!0,e.forEach(o=>n.use(o)),a&&sm(a,n,!0))}});var IZ=[N4,q3,nB,Uq,iB,uB,vB,ak,xB,TB,In,ck,NF,MF,YF,GF,KV,Xk,YV,oo,dV,pm,o6,y6,w6,rf,i2,Y6,PB,tz,nz,az,oz,sz,s5,v2,h5,v5,R5,k2,K5,RK,IK,PK,P2,jL,UL,De,wW,M2,ea,_2,DW,KW,sj,rj,lj,ij,hj,Yj,Qj,OZ,JC,V2,Gk,kV,CV,h9,b9,t6,no,Hs,sd,lF,r7,f7,p7,M7,B7,p2,hz,j7,U7,nU,cq,dq,jq,sY,rY,ts,Hm,A8,hY,yY,wY,Ln,MY,jm,tG,gG,WG,eX,xX,TX,AX,LX,KX,nJ,mJ,gJ],PZ=[EJ,NJ,qJ,lZ,wZ,ux],eg=RZ([...IZ,...PZ]);eg.install;eg.version;var Aee=eg;function cx(e,t){return function(){return e.apply(t,arguments)}}const{toString:MZ}=Object.prototype,{getPrototypeOf:tg}=Object,{iterator:pf,toStringTag:dx}=Symbol,hf=(e=>t=>{const n=MZ.call(t);return e[n]||(e[n]=n.slice(8,-1).toLowerCase())})(Object.create(null)),fo=e=>(e=e.toLowerCase(),t=>hf(t)===e),vf=e=>t=>typeof t===e,{isArray:Bl}=Array,Tl=vf("undefined");function ku(e){return e!==null&&!Tl(e)&&e.constructor!==null&&!Tl(e.constructor)&&ba(e.constructor.isBuffer)&&e.constructor.isBuffer(e)}const fx=fo("ArrayBuffer");function _Z(e){let t;return typeof ArrayBuffer<"u"&&ArrayBuffer.isView?t=ArrayBuffer.isView(e):t=e&&e.buffer&&fx(e.buffer),t}const AZ=vf("string"),ba=vf("function"),px=vf("number"),Eu=e=>e!==null&&typeof e=="object",LZ=e=>e===!0||e===!1,_c=e=>{if(hf(e)!=="object")return!1;const t=tg(e);return(t===null||t===Object.prototype||Object.getPrototypeOf(t)===null)&&!(dx in e)&&!(pf in e)},DZ=e=>{if(!Eu(e)||ku(e))return!1;try{return Object.keys(e).length===0&&Object.getPrototypeOf(e)===Object.prototype}catch{return!1}},BZ=fo("Date"),FZ=fo("File"),VZ=e=>!!(e&&typeof e.uri<"u"),zZ=e=>e&&typeof e.getParts<"u",HZ=fo("Blob"),KZ=fo("FileList"),WZ=e=>Eu(e)&&ba(e.pipe);function jZ(){return typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:typeof global<"u"?global:{}}const Q0=jZ(),ew=typeof Q0.FormData<"u"?Q0.FormData:void 0,UZ=e=>{let t;return e&&(ew&&e instanceof ew||ba(e.append)&&((t=hf(e))==="formdata"||t==="object"&&ba(e.toString)&&e.toString()==="[object FormData]"))},qZ=fo("URLSearchParams"),[YZ,GZ,XZ,JZ]=["ReadableStream","Request","Response","Headers"].map(fo),ZZ=e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"");function xu(e,t,{allOwnKeys:n=!1}={}){if(e===null||typeof e>"u")return;let a,o;if(typeof e!="object"&&(e=[e]),Bl(e))for(a=0,o=e.length;a0;)if(o=n[a],t===o.toLowerCase())return o;return null}const ir=typeof globalThis<"u"?globalThis:typeof self<"u"?self:typeof window<"u"?window:global,vx=e=>!Tl(e)&&e!==ir;function Bh(){const{caseless:e,skipUndefined:t}=vx(this)&&this||{},n={},a=(o,s)=>{if(s==="__proto__"||s==="constructor"||s==="prototype")return;const r=e&&hx(n,s)||s;_c(n[r])&&_c(o)?n[r]=Bh(n[r],o):_c(o)?n[r]=Bh({},o):Bl(o)?n[r]=o.slice():(!t||!Tl(o))&&(n[r]=o)};for(let o=0,s=arguments.length;o(xu(t,(o,s)=>{n&&ba(o)?Object.defineProperty(e,s,{value:cx(o,n),writable:!0,enumerable:!0,configurable:!0}):Object.defineProperty(e,s,{value:o,writable:!0,enumerable:!0,configurable:!0})},{allOwnKeys:a}),e),eQ=e=>(e.charCodeAt(0)===65279&&(e=e.slice(1)),e),tQ=(e,t,n,a)=>{e.prototype=Object.create(t.prototype,a),Object.defineProperty(e.prototype,"constructor",{value:e,writable:!0,enumerable:!1,configurable:!0}),Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},nQ=(e,t,n,a)=>{let o,s,r;const l={};if(t=t||{},e==null)return t;do{for(o=Object.getOwnPropertyNames(e),s=o.length;s-- >0;)r=o[s],(!a||a(r,e,t))&&!l[r]&&(t[r]=e[r],l[r]=!0);e=n!==!1&&tg(e)}while(e&&(!n||n(e,t))&&e!==Object.prototype);return t},aQ=(e,t,n)=>{e=String(e),(n===void 0||n>e.length)&&(n=e.length),n-=t.length;const a=e.indexOf(t,n);return a!==-1&&a===n},oQ=e=>{if(!e)return null;if(Bl(e))return e;let t=e.length;if(!px(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},sQ=(e=>t=>e&&t instanceof e)(typeof Uint8Array<"u"&&tg(Uint8Array)),rQ=(e,t)=>{const a=(e&&e[pf]).call(e);let o;for(;(o=a.next())&&!o.done;){const s=o.value;t.call(e,s[0],s[1])}},lQ=(e,t)=>{let n;const a=[];for(;(n=e.exec(t))!==null;)a.push(n);return a},iQ=fo("HTMLFormElement"),uQ=e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,function(n,a,o){return a.toUpperCase()+o}),tw=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),cQ=fo("RegExp"),mx=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),a={};xu(n,(o,s)=>{let r;(r=t(o,s,e))!==!1&&(a[s]=r||o)}),Object.defineProperties(e,a)},dQ=e=>{mx(e,(t,n)=>{if(ba(e)&&["arguments","caller","callee"].indexOf(n)!==-1)return!1;const a=e[n];if(ba(a)){if(t.enumerable=!1,"writable"in t){t.writable=!1;return}t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")})}})},fQ=(e,t)=>{const n={},a=o=>{o.forEach(s=>{n[s]=!0})};return Bl(e)?a(e):a(String(e).split(t)),n},pQ=()=>{},hQ=(e,t)=>e!=null&&Number.isFinite(e=+e)?e:t;function vQ(e){return!!(e&&ba(e.append)&&e[dx]==="FormData"&&e[pf])}const mQ=e=>{const t=new Array(10),n=(a,o)=>{if(Eu(a)){if(t.indexOf(a)>=0)return;if(ku(a))return a;if(!("toJSON"in a)){t[o]=a;const s=Bl(a)?[]:{};return xu(a,(r,l)=>{const u=n(r,o+1);!Tl(u)&&(s[l]=u)}),t[o]=void 0,s}}return a};return n(e,0)},gQ=fo("AsyncFunction"),bQ=e=>e&&(Eu(e)||ba(e))&&ba(e.then)&&ba(e.catch),gx=((e,t)=>e?setImmediate:t?((n,a)=>(ir.addEventListener("message",({source:o,data:s})=>{o===ir&&s===n&&a.length&&a.shift()()},!1),o=>{a.push(o),ir.postMessage(n,"*")}))(`axios@${Math.random()}`,[]):n=>setTimeout(n))(typeof setImmediate=="function",ba(ir.postMessage)),yQ=typeof queueMicrotask<"u"?queueMicrotask.bind(ir):typeof process<"u"&&process.nextTick||gx,wQ=e=>e!=null&&ba(e[pf]),xe={isArray:Bl,isArrayBuffer:fx,isBuffer:ku,isFormData:UZ,isArrayBufferView:_Z,isString:AZ,isNumber:px,isBoolean:LZ,isObject:Eu,isPlainObject:_c,isEmptyObject:DZ,isReadableStream:YZ,isRequest:GZ,isResponse:XZ,isHeaders:JZ,isUndefined:Tl,isDate:BZ,isFile:FZ,isReactNativeBlob:VZ,isReactNative:zZ,isBlob:HZ,isRegExp:cQ,isFunction:ba,isStream:WZ,isURLSearchParams:qZ,isTypedArray:sQ,isFileList:KZ,forEach:xu,merge:Bh,extend:QZ,trim:ZZ,stripBOM:eQ,inherits:tQ,toFlatObject:nQ,kindOf:hf,kindOfTest:fo,endsWith:aQ,toArray:oQ,forEachEntry:rQ,matchAll:lQ,isHTMLForm:iQ,hasOwnProperty:tw,hasOwnProp:tw,reduceDescriptors:mx,freezeMethods:dQ,toObjectSet:fQ,toCamelCase:uQ,noop:pQ,toFiniteNumber:hQ,findKey:hx,global:ir,isContextDefined:vx,isSpecCompliantForm:vQ,toJSONObject:mQ,isAsyncFn:gQ,isThenable:bQ,setImmediate:gx,asap:yQ,isIterable:wQ};let _t=class bx extends Error{static from(t,n,a,o,s,r){const l=new bx(t.message,n||t.code,a,o,s);return l.cause=t,l.name=t.name,t.status!=null&&l.status==null&&(l.status=t.status),r&&Object.assign(l,r),l}constructor(t,n,a,o,s){super(t),Object.defineProperty(this,"message",{value:t,enumerable:!0,writable:!0,configurable:!0}),this.name="AxiosError",this.isAxiosError=!0,n&&(this.code=n),a&&(this.config=a),o&&(this.request=o),s&&(this.response=s,this.status=s.status)}toJSON(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:xe.toJSONObject(this.config),code:this.code,status:this.status}}};_t.ERR_BAD_OPTION_VALUE="ERR_BAD_OPTION_VALUE";_t.ERR_BAD_OPTION="ERR_BAD_OPTION";_t.ECONNABORTED="ECONNABORTED";_t.ETIMEDOUT="ETIMEDOUT";_t.ERR_NETWORK="ERR_NETWORK";_t.ERR_FR_TOO_MANY_REDIRECTS="ERR_FR_TOO_MANY_REDIRECTS";_t.ERR_DEPRECATED="ERR_DEPRECATED";_t.ERR_BAD_RESPONSE="ERR_BAD_RESPONSE";_t.ERR_BAD_REQUEST="ERR_BAD_REQUEST";_t.ERR_CANCELED="ERR_CANCELED";_t.ERR_NOT_SUPPORT="ERR_NOT_SUPPORT";_t.ERR_INVALID_URL="ERR_INVALID_URL";const SQ=null;function Fh(e){return xe.isPlainObject(e)||xe.isArray(e)}function yx(e){return xe.endsWith(e,"[]")?e.slice(0,-2):e}function hp(e,t,n){return e?e.concat(t).map(function(o,s){return o=yx(o),!n&&s?"["+o+"]":o}).join(n?".":""):t}function CQ(e){return xe.isArray(e)&&!e.some(Fh)}const kQ=xe.toFlatObject(xe,{},null,function(t){return/^is[A-Z]/.test(t)});function mf(e,t,n){if(!xe.isObject(e))throw new TypeError("target must be an object");t=t||new FormData,n=xe.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,function(h,m){return!xe.isUndefined(m[h])});const a=n.metaTokens,o=n.visitor||d,s=n.dots,r=n.indexes,u=(n.Blob||typeof Blob<"u"&&Blob)&&xe.isSpecCompliantForm(t);if(!xe.isFunction(o))throw new TypeError("visitor must be a function");function c(p){if(p===null)return"";if(xe.isDate(p))return p.toISOString();if(xe.isBoolean(p))return p.toString();if(!u&&xe.isBlob(p))throw new _t("Blob is not supported. Use a Buffer instead.");return xe.isArrayBuffer(p)||xe.isTypedArray(p)?u&&typeof Blob=="function"?new Blob([p]):Buffer.from(p):p}function d(p,h,m){let b=p;if(xe.isReactNative(t)&&xe.isReactNativeBlob(p))return t.append(hp(m,h,s),c(p)),!1;if(p&&!m&&typeof p=="object"){if(xe.endsWith(h,"{}"))h=a?h:h.slice(0,-2),p=JSON.stringify(p);else if(xe.isArray(p)&&CQ(p)||(xe.isFileList(p)||xe.endsWith(h,"[]"))&&(b=xe.toArray(p)))return h=yx(h),b.forEach(function(y,S){!(xe.isUndefined(y)||y===null)&&t.append(r===!0?hp([h],S,s):r===null?h:h+"[]",c(y))}),!1}return Fh(p)?!0:(t.append(hp(m,h,s),c(p)),!1)}const f=[],v=Object.assign(kQ,{defaultVisitor:d,convertValue:c,isVisitable:Fh});function g(p,h){if(!xe.isUndefined(p)){if(f.indexOf(p)!==-1)throw Error("Circular reference detected in "+h.join("."));f.push(p),xe.forEach(p,function(b,k){(!(xe.isUndefined(b)||b===null)&&o.call(t,b,xe.isString(k)?k.trim():k,h,v))===!0&&g(b,h?h.concat(k):[k])}),f.pop()}}if(!xe.isObject(e))throw new TypeError("data must be an object");return g(e),t}function nw(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,function(a){return t[a]})}function ng(e,t){this._pairs=[],e&&mf(e,this,t)}const wx=ng.prototype;wx.append=function(t,n){this._pairs.push([t,n])};wx.toString=function(t){const n=t?function(a){return t.call(this,a,nw)}:nw;return this._pairs.map(function(o){return n(o[0])+"="+n(o[1])},"").join("&")};function EQ(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+")}function Sx(e,t,n){if(!t)return e;const a=n&&n.encode||EQ,o=xe.isFunction(n)?{serialize:n}:n,s=o&&o.serialize;let r;if(s?r=s(t,o):r=xe.isURLSearchParams(t)?t.toString():new ng(t,o).toString(a),r){const l=e.indexOf("#");l!==-1&&(e=e.slice(0,l)),e+=(e.indexOf("?")===-1?"?":"&")+r}return e}class aw{constructor(){this.handlers=[]}use(t,n,a){return this.handlers.push({fulfilled:t,rejected:n,synchronous:a?a.synchronous:!1,runWhen:a?a.runWhen:null}),this.handlers.length-1}eject(t){this.handlers[t]&&(this.handlers[t]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(t){xe.forEach(this.handlers,function(a){a!==null&&t(a)})}}const ag={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1,legacyInterceptorReqResOrdering:!0},xQ=typeof URLSearchParams<"u"?URLSearchParams:ng,TQ=typeof FormData<"u"?FormData:null,$Q=typeof Blob<"u"?Blob:null,OQ={isBrowser:!0,classes:{URLSearchParams:xQ,FormData:TQ,Blob:$Q},protocols:["http","https","file","blob","url","data"]},og=typeof window<"u"&&typeof document<"u",Vh=typeof navigator=="object"&&navigator||void 0,NQ=og&&(!Vh||["ReactNative","NativeScript","NS"].indexOf(Vh.product)<0),RQ=typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope&&typeof self.importScripts=="function",IQ=og&&window.location.href||"http://localhost",PQ=Object.freeze(Object.defineProperty({__proto__:null,hasBrowserEnv:og,hasStandardBrowserEnv:NQ,hasStandardBrowserWebWorkerEnv:RQ,navigator:Vh,origin:IQ},Symbol.toStringTag,{value:"Module"})),Qn={...PQ,...OQ};function MQ(e,t){return mf(e,new Qn.classes.URLSearchParams,{visitor:function(n,a,o,s){return Qn.isNode&&xe.isBuffer(n)?(this.append(a,n.toString("base64")),!1):s.defaultVisitor.apply(this,arguments)},...t})}function _Q(e){return xe.matchAll(/\w+|\[(\w*)]/g,e).map(t=>t[0]==="[]"?"":t[1]||t[0])}function AQ(e){const t={},n=Object.keys(e);let a;const o=n.length;let s;for(a=0;a=n.length;return r=!r&&xe.isArray(o)?o.length:r,u?(xe.hasOwnProp(o,r)?o[r]=[o[r],a]:o[r]=a,!l):((!o[r]||!xe.isObject(o[r]))&&(o[r]=[]),t(n,a,o[r],s)&&xe.isArray(o[r])&&(o[r]=AQ(o[r])),!l)}if(xe.isFormData(e)&&xe.isFunction(e.entries)){const n={};return xe.forEachEntry(e,(a,o)=>{t(_Q(a),o,n,0)}),n}return null}function LQ(e,t,n){if(xe.isString(e))try{return(t||JSON.parse)(e),xe.trim(e)}catch(a){if(a.name!=="SyntaxError")throw a}return(n||JSON.stringify)(e)}const Tu={transitional:ag,adapter:["xhr","http","fetch"],transformRequest:[function(t,n){const a=n.getContentType()||"",o=a.indexOf("application/json")>-1,s=xe.isObject(t);if(s&&xe.isHTMLForm(t)&&(t=new FormData(t)),xe.isFormData(t))return o?JSON.stringify(Cx(t)):t;if(xe.isArrayBuffer(t)||xe.isBuffer(t)||xe.isStream(t)||xe.isFile(t)||xe.isBlob(t)||xe.isReadableStream(t))return t;if(xe.isArrayBufferView(t))return t.buffer;if(xe.isURLSearchParams(t))return n.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),t.toString();let l;if(s){if(a.indexOf("application/x-www-form-urlencoded")>-1)return MQ(t,this.formSerializer).toString();if((l=xe.isFileList(t))||a.indexOf("multipart/form-data")>-1){const u=this.env&&this.env.FormData;return mf(l?{"files[]":t}:t,u&&new u,this.formSerializer)}}return s||o?(n.setContentType("application/json",!1),LQ(t)):t}],transformResponse:[function(t){const n=this.transitional||Tu.transitional,a=n&&n.forcedJSONParsing,o=this.responseType==="json";if(xe.isResponse(t)||xe.isReadableStream(t))return t;if(t&&xe.isString(t)&&(a&&!this.responseType||o)){const r=!(n&&n.silentJSONParsing)&&o;try{return JSON.parse(t,this.parseReviver)}catch(l){if(r)throw l.name==="SyntaxError"?_t.from(l,_t.ERR_BAD_RESPONSE,this,null,this.response):l}}return t}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Qn.classes.FormData,Blob:Qn.classes.Blob},validateStatus:function(t){return t>=200&&t<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};xe.forEach(["delete","get","head","post","put","patch"],e=>{Tu.headers[e]={}});const DQ=xe.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),BQ=e=>{const t={};let n,a,o;return e&&e.split(` +`).forEach(function(r){o=r.indexOf(":"),n=r.substring(0,o).trim().toLowerCase(),a=r.substring(o+1).trim(),!(!n||t[n]&&DQ[n])&&(n==="set-cookie"?t[n]?t[n].push(a):t[n]=[a]:t[n]=t[n]?t[n]+", "+a:a)}),t},ow=Symbol("internals");function Gl(e){return e&&String(e).trim().toLowerCase()}function Ac(e){return e===!1||e==null?e:xe.isArray(e)?e.map(Ac):String(e)}function FQ(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let a;for(;a=n.exec(e);)t[a[1]]=a[2];return t}const VQ=e=>/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim());function vp(e,t,n,a,o){if(xe.isFunction(a))return a.call(this,t,n);if(o&&(t=n),!!xe.isString(t)){if(xe.isString(a))return t.indexOf(a)!==-1;if(xe.isRegExp(a))return a.test(t)}}function zQ(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(t,n,a)=>n.toUpperCase()+a)}function HQ(e,t){const n=xe.toCamelCase(" "+t);["get","set","has"].forEach(a=>{Object.defineProperty(e,a+n,{value:function(o,s,r){return this[a].call(this,t,o,s,r)},configurable:!0})})}let ya=class{constructor(t){t&&this.set(t)}set(t,n,a){const o=this;function s(l,u,c){const d=Gl(u);if(!d)throw new Error("header name must be a non-empty string");const f=xe.findKey(o,d);(!f||o[f]===void 0||c===!0||c===void 0&&o[f]!==!1)&&(o[f||u]=Ac(l))}const r=(l,u)=>xe.forEach(l,(c,d)=>s(c,d,u));if(xe.isPlainObject(t)||t instanceof this.constructor)r(t,n);else if(xe.isString(t)&&(t=t.trim())&&!VQ(t))r(BQ(t),n);else if(xe.isObject(t)&&xe.isIterable(t)){let l={},u,c;for(const d of t){if(!xe.isArray(d))throw TypeError("Object iterator must return a key-value pair");l[c=d[0]]=(u=l[c])?xe.isArray(u)?[...u,d[1]]:[u,d[1]]:d[1]}r(l,n)}else t!=null&&s(n,t,a);return this}get(t,n){if(t=Gl(t),t){const a=xe.findKey(this,t);if(a){const o=this[a];if(!n)return o;if(n===!0)return FQ(o);if(xe.isFunction(n))return n.call(this,o,a);if(xe.isRegExp(n))return n.exec(o);throw new TypeError("parser must be boolean|regexp|function")}}}has(t,n){if(t=Gl(t),t){const a=xe.findKey(this,t);return!!(a&&this[a]!==void 0&&(!n||vp(this,this[a],a,n)))}return!1}delete(t,n){const a=this;let o=!1;function s(r){if(r=Gl(r),r){const l=xe.findKey(a,r);l&&(!n||vp(a,a[l],l,n))&&(delete a[l],o=!0)}}return xe.isArray(t)?t.forEach(s):s(t),o}clear(t){const n=Object.keys(this);let a=n.length,o=!1;for(;a--;){const s=n[a];(!t||vp(this,this[s],s,t,!0))&&(delete this[s],o=!0)}return o}normalize(t){const n=this,a={};return xe.forEach(this,(o,s)=>{const r=xe.findKey(a,s);if(r){n[r]=Ac(o),delete n[s];return}const l=t?zQ(s):String(s).trim();l!==s&&delete n[s],n[l]=Ac(o),a[l]=!0}),this}concat(...t){return this.constructor.concat(this,...t)}toJSON(t){const n=Object.create(null);return xe.forEach(this,(a,o)=>{a!=null&&a!==!1&&(n[o]=t&&xe.isArray(a)?a.join(", "):a)}),n}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map(([t,n])=>t+": "+n).join(` +`)}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(t){return t instanceof this?t:new this(t)}static concat(t,...n){const a=new this(t);return n.forEach(o=>a.set(o)),a}static accessor(t){const a=(this[ow]=this[ow]={accessors:{}}).accessors,o=this.prototype;function s(r){const l=Gl(r);a[l]||(HQ(o,r),a[l]=!0)}return xe.isArray(t)?t.forEach(s):s(t),this}};ya.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]);xe.reduceDescriptors(ya.prototype,({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(a){this[n]=a}}});xe.freezeMethods(ya);function mp(e,t){const n=this||Tu,a=t||n,o=ya.from(a.headers);let s=a.data;return xe.forEach(e,function(l){s=l.call(n,s,o.normalize(),t?t.status:void 0)}),o.normalize(),s}function kx(e){return!!(e&&e.__CANCEL__)}let $u=class extends _t{constructor(t,n,a){super(t??"canceled",_t.ERR_CANCELED,n,a),this.name="CanceledError",this.__CANCEL__=!0}};function Ex(e,t,n){const a=n.config.validateStatus;!n.status||!a||a(n.status)?e(n):t(new _t("Request failed with status code "+n.status,[_t.ERR_BAD_REQUEST,_t.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n))}function KQ(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}function WQ(e,t){e=e||10;const n=new Array(e),a=new Array(e);let o=0,s=0,r;return t=t!==void 0?t:1e3,function(u){const c=Date.now(),d=a[s];r||(r=c),n[o]=u,a[o]=c;let f=s,v=0;for(;f!==o;)v+=n[f++],f=f%e;if(o=(o+1)%e,o===s&&(s=(s+1)%e),c-r{n=d,o=null,s&&(clearTimeout(s),s=null),e(...c)};return[(...c)=>{const d=Date.now(),f=d-n;f>=a?r(c,d):(o=c,s||(s=setTimeout(()=>{s=null,r(o)},a-f)))},()=>o&&r(o)]}const Sd=(e,t,n=3)=>{let a=0;const o=WQ(50,250);return jQ(s=>{const r=s.loaded,l=s.lengthComputable?s.total:void 0,u=r-a,c=o(u),d=r<=l;a=r;const f={loaded:r,total:l,progress:l?r/l:void 0,bytes:u,rate:c||void 0,estimated:c&&l&&d?(l-r)/c:void 0,event:s,lengthComputable:l!=null,[t?"download":"upload"]:!0};e(f)},n)},sw=(e,t)=>{const n=e!=null;return[a=>t[0]({lengthComputable:n,total:e,loaded:a}),t[1]]},rw=e=>(...t)=>xe.asap(()=>e(...t)),UQ=Qn.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,Qn.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(Qn.origin),Qn.navigator&&/(msie|trident)/i.test(Qn.navigator.userAgent)):()=>!0,qQ=Qn.hasStandardBrowserEnv?{write(e,t,n,a,o,s,r){if(typeof document>"u")return;const l=[`${e}=${encodeURIComponent(t)}`];xe.isNumber(n)&&l.push(`expires=${new Date(n).toUTCString()}`),xe.isString(a)&&l.push(`path=${a}`),xe.isString(o)&&l.push(`domain=${o}`),s===!0&&l.push("secure"),xe.isString(r)&&l.push(`SameSite=${r}`),document.cookie=l.join("; ")},read(e){if(typeof document>"u")return null;const t=document.cookie.match(new RegExp("(?:^|; )"+e+"=([^;]*)"));return t?decodeURIComponent(t[1]):null},remove(e){this.write(e,"",Date.now()-864e5,"/")}}:{write(){},read(){return null},remove(){}};function YQ(e){return typeof e!="string"?!1:/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}function GQ(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}function xx(e,t,n){let a=!YQ(t);return e&&(a||n==!1)?GQ(e,t):t}const lw=e=>e instanceof ya?{...e}:e;function Tr(e,t){t=t||{};const n={};function a(c,d,f,v){return xe.isPlainObject(c)&&xe.isPlainObject(d)?xe.merge.call({caseless:v},c,d):xe.isPlainObject(d)?xe.merge({},d):xe.isArray(d)?d.slice():d}function o(c,d,f,v){if(xe.isUndefined(d)){if(!xe.isUndefined(c))return a(void 0,c,f,v)}else return a(c,d,f,v)}function s(c,d){if(!xe.isUndefined(d))return a(void 0,d)}function r(c,d){if(xe.isUndefined(d)){if(!xe.isUndefined(c))return a(void 0,c)}else return a(void 0,d)}function l(c,d,f){if(f in t)return a(c,d);if(f in e)return a(void 0,c)}const u={url:s,method:s,data:s,baseURL:r,transformRequest:r,transformResponse:r,paramsSerializer:r,timeout:r,timeoutMessage:r,withCredentials:r,withXSRFToken:r,adapter:r,responseType:r,xsrfCookieName:r,xsrfHeaderName:r,onUploadProgress:r,onDownloadProgress:r,decompress:r,maxContentLength:r,maxBodyLength:r,beforeRedirect:r,transport:r,httpAgent:r,httpsAgent:r,cancelToken:r,socketPath:r,responseEncoding:r,validateStatus:l,headers:(c,d,f)=>o(lw(c),lw(d),f,!0)};return xe.forEach(Object.keys({...e,...t}),function(d){if(d==="__proto__"||d==="constructor"||d==="prototype")return;const f=xe.hasOwnProp(u,d)?u[d]:o,v=f(e[d],t[d],d);xe.isUndefined(v)&&f!==l||(n[d]=v)}),n}const Tx=e=>{const t=Tr({},e);let{data:n,withXSRFToken:a,xsrfHeaderName:o,xsrfCookieName:s,headers:r,auth:l}=t;if(t.headers=r=ya.from(r),t.url=Sx(xx(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),l&&r.set("Authorization","Basic "+btoa((l.username||"")+":"+(l.password?unescape(encodeURIComponent(l.password)):""))),xe.isFormData(n)){if(Qn.hasStandardBrowserEnv||Qn.hasStandardBrowserWebWorkerEnv)r.setContentType(void 0);else if(xe.isFunction(n.getHeaders)){const u=n.getHeaders(),c=["content-type","content-length"];Object.entries(u).forEach(([d,f])=>{c.includes(d.toLowerCase())&&r.set(d,f)})}}if(Qn.hasStandardBrowserEnv&&(a&&xe.isFunction(a)&&(a=a(t)),a||a!==!1&&UQ(t.url))){const u=o&&s&&qQ.read(s);u&&r.set(o,u)}return t},XQ=typeof XMLHttpRequest<"u",JQ=XQ&&function(e){return new Promise(function(n,a){const o=Tx(e);let s=o.data;const r=ya.from(o.headers).normalize();let{responseType:l,onUploadProgress:u,onDownloadProgress:c}=o,d,f,v,g,p;function h(){g&&g(),p&&p(),o.cancelToken&&o.cancelToken.unsubscribe(d),o.signal&&o.signal.removeEventListener("abort",d)}let m=new XMLHttpRequest;m.open(o.method.toUpperCase(),o.url,!0),m.timeout=o.timeout;function b(){if(!m)return;const y=ya.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders()),C={data:!l||l==="text"||l==="json"?m.responseText:m.response,status:m.status,statusText:m.statusText,headers:y,config:e,request:m};Ex(function($){n($),h()},function($){a($),h()},C),m=null}"onloadend"in m?m.onloadend=b:m.onreadystatechange=function(){!m||m.readyState!==4||m.status===0&&!(m.responseURL&&m.responseURL.indexOf("file:")===0)||setTimeout(b)},m.onabort=function(){m&&(a(new _t("Request aborted",_t.ECONNABORTED,e,m)),m=null)},m.onerror=function(S){const C=S&&S.message?S.message:"Network Error",E=new _t(C,_t.ERR_NETWORK,e,m);E.event=S||null,a(E),m=null},m.ontimeout=function(){let S=o.timeout?"timeout of "+o.timeout+"ms exceeded":"timeout exceeded";const C=o.transitional||ag;o.timeoutErrorMessage&&(S=o.timeoutErrorMessage),a(new _t(S,C.clarifyTimeoutError?_t.ETIMEDOUT:_t.ECONNABORTED,e,m)),m=null},s===void 0&&r.setContentType(null),"setRequestHeader"in m&&xe.forEach(r.toJSON(),function(S,C){m.setRequestHeader(C,S)}),xe.isUndefined(o.withCredentials)||(m.withCredentials=!!o.withCredentials),l&&l!=="json"&&(m.responseType=o.responseType),c&&([v,p]=Sd(c,!0),m.addEventListener("progress",v)),u&&m.upload&&([f,g]=Sd(u),m.upload.addEventListener("progress",f),m.upload.addEventListener("loadend",g)),(o.cancelToken||o.signal)&&(d=y=>{m&&(a(!y||y.type?new $u(null,e,m):y),m.abort(),m=null)},o.cancelToken&&o.cancelToken.subscribe(d),o.signal&&(o.signal.aborted?d():o.signal.addEventListener("abort",d)));const k=KQ(o.url);if(k&&Qn.protocols.indexOf(k)===-1){a(new _t("Unsupported protocol "+k+":",_t.ERR_BAD_REQUEST,e));return}m.send(s||null)})},ZQ=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let a=new AbortController,o;const s=function(c){if(!o){o=!0,l();const d=c instanceof Error?c:this.reason;a.abort(d instanceof _t?d:new $u(d instanceof Error?d.message:d))}};let r=t&&setTimeout(()=>{r=null,s(new _t(`timeout of ${t}ms exceeded`,_t.ETIMEDOUT))},t);const l=()=>{e&&(r&&clearTimeout(r),r=null,e.forEach(c=>{c.unsubscribe?c.unsubscribe(s):c.removeEventListener("abort",s)}),e=null)};e.forEach(c=>c.addEventListener("abort",s));const{signal:u}=a;return u.unsubscribe=()=>xe.asap(l),u}},QQ=function*(e,t){let n=e.byteLength;if(n{const o=eee(e,t);let s=0,r,l=u=>{r||(r=!0,a&&a(u))};return new ReadableStream({async pull(u){try{const{done:c,value:d}=await o.next();if(c){l(),u.close();return}let f=d.byteLength;if(n){let v=s+=f;n(v)}u.enqueue(new Uint8Array(d))}catch(c){throw l(c),c}},cancel(u){return l(u),o.return()}},{highWaterMark:2})},uw=64*1024,{isFunction:nc}=xe,nee=(({Request:e,Response:t})=>({Request:e,Response:t}))(xe.global),{ReadableStream:cw,TextEncoder:dw}=xe.global,fw=(e,...t)=>{try{return!!e(...t)}catch{return!1}},aee=e=>{e=xe.merge.call({skipUndefined:!0},nee,e);const{fetch:t,Request:n,Response:a}=e,o=t?nc(t):typeof fetch=="function",s=nc(n),r=nc(a);if(!o)return!1;const l=o&&nc(cw),u=o&&(typeof dw=="function"?(p=>h=>p.encode(h))(new dw):async p=>new Uint8Array(await new n(p).arrayBuffer())),c=s&&l&&fw(()=>{let p=!1;const h=new n(Qn.origin,{body:new cw,method:"POST",get duplex(){return p=!0,"half"}}).headers.has("Content-Type");return p&&!h}),d=r&&l&&fw(()=>xe.isReadableStream(new a("").body)),f={stream:d&&(p=>p.body)};o&&["text","arrayBuffer","blob","formData","stream"].forEach(p=>{!f[p]&&(f[p]=(h,m)=>{let b=h&&h[p];if(b)return b.call(h);throw new _t(`Response type '${p}' is not supported`,_t.ERR_NOT_SUPPORT,m)})});const v=async p=>{if(p==null)return 0;if(xe.isBlob(p))return p.size;if(xe.isSpecCompliantForm(p))return(await new n(Qn.origin,{method:"POST",body:p}).arrayBuffer()).byteLength;if(xe.isArrayBufferView(p)||xe.isArrayBuffer(p))return p.byteLength;if(xe.isURLSearchParams(p)&&(p=p+""),xe.isString(p))return(await u(p)).byteLength},g=async(p,h)=>{const m=xe.toFiniteNumber(p.getContentLength());return m??v(h)};return async p=>{let{url:h,method:m,data:b,signal:k,cancelToken:y,timeout:S,onDownloadProgress:C,onUploadProgress:E,responseType:$,headers:O,withCredentials:R="same-origin",fetchOptions:N}=Tx(p),A=t||fetch;$=$?($+"").toLowerCase():"text";let _=ZQ([k,y&&y.toAbortSignal()],S),V=null;const z=_&&_.unsubscribe&&(()=>{_.unsubscribe()});let U;try{if(E&&c&&m!=="get"&&m!=="head"&&(U=await g(O,b))!==0){let F=new n(h,{method:"POST",body:b,duplex:"half"}),q;if(xe.isFormData(b)&&(q=F.headers.get("content-type"))&&O.setContentType(q),F.body){const[j,X]=sw(U,Sd(rw(E)));b=iw(F.body,uw,j,X)}}xe.isString(R)||(R=R?"include":"omit");const W=s&&"credentials"in n.prototype,P={...N,signal:_,method:m.toUpperCase(),headers:O.normalize().toJSON(),body:b,duplex:"half",credentials:W?R:void 0};V=s&&new n(h,P);let I=await(s?A(V,N):A(h,P));const L=d&&($==="stream"||$==="response");if(d&&(C||L&&z)){const F={};["status","statusText","headers"].forEach(Q=>{F[Q]=I[Q]});const q=xe.toFiniteNumber(I.headers.get("content-length")),[j,X]=C&&sw(q,Sd(rw(C),!0))||[];I=new a(iw(I.body,uw,j,()=>{X&&X(),z&&z()}),F)}$=$||"text";let D=await f[xe.findKey(f,$)||"text"](I,p);return!L&&z&&z(),await new Promise((F,q)=>{Ex(F,q,{data:D,headers:ya.from(I.headers),status:I.status,statusText:I.statusText,config:p,request:V})})}catch(W){throw z&&z(),W&&W.name==="TypeError"&&/Load failed|fetch/i.test(W.message)?Object.assign(new _t("Network Error",_t.ERR_NETWORK,p,V,W&&W.response),{cause:W.cause||W}):_t.from(W,W&&W.code,p,V,W&&W.response)}}},oee=new Map,$x=e=>{let t=e&&e.env||{};const{fetch:n,Request:a,Response:o}=t,s=[a,o,n];let r=s.length,l=r,u,c,d=oee;for(;l--;)u=s[l],c=d.get(u),c===void 0&&d.set(u,c=l?new Map:aee(t)),d=c;return c};$x();const sg={http:SQ,xhr:JQ,fetch:{get:$x}};xe.forEach(sg,(e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch{}Object.defineProperty(e,"adapterName",{value:t})}});const pw=e=>`- ${e}`,see=e=>xe.isFunction(e)||e===null||e===!1;function ree(e,t){e=xe.isArray(e)?e:[e];const{length:n}=e;let a,o;const s={};for(let r=0;r`adapter ${u} `+(c===!1?"is not supported by the environment":"is not available in the build"));let l=n?r.length>1?`since : +`+r.map(pw).join(` +`):" "+pw(r[0]):"as no adapter specified";throw new _t("There is no suitable adapter to dispatch the request "+l,"ERR_NOT_SUPPORT")}return o}const Ox={getAdapter:ree,adapters:sg};function gp(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new $u(null,e)}function hw(e){return gp(e),e.headers=ya.from(e.headers),e.data=mp.call(e,e.transformRequest),["post","put","patch"].indexOf(e.method)!==-1&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Ox.getAdapter(e.adapter||Tu.adapter,e)(e).then(function(a){return gp(e),a.data=mp.call(e,e.transformResponse,a),a.headers=ya.from(a.headers),a},function(a){return kx(a)||(gp(e),a&&a.response&&(a.response.data=mp.call(e,e.transformResponse,a.response),a.response.headers=ya.from(a.response.headers))),Promise.reject(a)})}const Nx="1.13.6",gf={};["object","boolean","number","function","string","symbol"].forEach((e,t)=>{gf[e]=function(a){return typeof a===e||"a"+(t<1?"n ":" ")+e}});const vw={};gf.transitional=function(t,n,a){function o(s,r){return"[Axios v"+Nx+"] Transitional option '"+s+"'"+r+(a?". "+a:"")}return(s,r,l)=>{if(t===!1)throw new _t(o(r," has been removed"+(n?" in "+n:"")),_t.ERR_DEPRECATED);return n&&!vw[r]&&(vw[r]=!0,console.warn(o(r," has been deprecated since v"+n+" and will be removed in the near future"))),t?t(s,r,l):!0}};gf.spelling=function(t){return(n,a)=>(console.warn(`${a} is likely a misspelling of ${t}`),!0)};function lee(e,t,n){if(typeof e!="object")throw new _t("options must be an object",_t.ERR_BAD_OPTION_VALUE);const a=Object.keys(e);let o=a.length;for(;o-- >0;){const s=a[o],r=t[s];if(r){const l=e[s],u=l===void 0||r(l,s,e);if(u!==!0)throw new _t("option "+s+" must be "+u,_t.ERR_BAD_OPTION_VALUE);continue}if(n!==!0)throw new _t("Unknown option "+s,_t.ERR_BAD_OPTION)}}const Lc={assertOptions:lee,validators:gf},_a=Lc.validators;let hr=class{constructor(t){this.defaults=t||{},this.interceptors={request:new aw,response:new aw}}async request(t,n){try{return await this._request(t,n)}catch(a){if(a instanceof Error){let o={};Error.captureStackTrace?Error.captureStackTrace(o):o=new Error;const s=o.stack?o.stack.replace(/^.+\n/,""):"";try{a.stack?s&&!String(a.stack).endsWith(s.replace(/^.+\n.+\n/,""))&&(a.stack+=` +`+s):a.stack=s}catch{}}throw a}}_request(t,n){typeof t=="string"?(n=n||{},n.url=t):n=t||{},n=Tr(this.defaults,n);const{transitional:a,paramsSerializer:o,headers:s}=n;a!==void 0&&Lc.assertOptions(a,{silentJSONParsing:_a.transitional(_a.boolean),forcedJSONParsing:_a.transitional(_a.boolean),clarifyTimeoutError:_a.transitional(_a.boolean),legacyInterceptorReqResOrdering:_a.transitional(_a.boolean)},!1),o!=null&&(xe.isFunction(o)?n.paramsSerializer={serialize:o}:Lc.assertOptions(o,{encode:_a.function,serialize:_a.function},!0)),n.allowAbsoluteUrls!==void 0||(this.defaults.allowAbsoluteUrls!==void 0?n.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:n.allowAbsoluteUrls=!0),Lc.assertOptions(n,{baseUrl:_a.spelling("baseURL"),withXsrfToken:_a.spelling("withXSRFToken")},!0),n.method=(n.method||this.defaults.method||"get").toLowerCase();let r=s&&xe.merge(s.common,s[n.method]);s&&xe.forEach(["delete","get","head","post","put","patch","common"],p=>{delete s[p]}),n.headers=ya.concat(r,s);const l=[];let u=!0;this.interceptors.request.forEach(function(h){if(typeof h.runWhen=="function"&&h.runWhen(n)===!1)return;u=u&&h.synchronous;const m=n.transitional||ag;m&&m.legacyInterceptorReqResOrdering?l.unshift(h.fulfilled,h.rejected):l.push(h.fulfilled,h.rejected)});const c=[];this.interceptors.response.forEach(function(h){c.push(h.fulfilled,h.rejected)});let d,f=0,v;if(!u){const p=[hw.bind(this),void 0];for(p.unshift(...l),p.push(...c),v=p.length,d=Promise.resolve(n);f{if(!a._listeners)return;let s=a._listeners.length;for(;s-- >0;)a._listeners[s](o);a._listeners=null}),this.promise.then=o=>{let s;const r=new Promise(l=>{a.subscribe(l),s=l}).then(o);return r.cancel=function(){a.unsubscribe(s)},r},t(function(s,r,l){a.reason||(a.reason=new $u(s,r,l),n(a.reason))})}throwIfRequested(){if(this.reason)throw this.reason}subscribe(t){if(this.reason){t(this.reason);return}this._listeners?this._listeners.push(t):this._listeners=[t]}unsubscribe(t){if(!this._listeners)return;const n=this._listeners.indexOf(t);n!==-1&&this._listeners.splice(n,1)}toAbortSignal(){const t=new AbortController,n=a=>{t.abort(a)};return this.subscribe(n),t.signal.unsubscribe=()=>this.unsubscribe(n),t.signal}static source(){let t;return{token:new Rx(function(o){t=o}),cancel:t}}};function uee(e){return function(n){return e.apply(null,n)}}function cee(e){return xe.isObject(e)&&e.isAxiosError===!0}const zh={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511,WebServerIsDown:521,ConnectionTimedOut:522,OriginIsUnreachable:523,TimeoutOccurred:524,SslHandshakeFailed:525,InvalidSslCertificate:526};Object.entries(zh).forEach(([e,t])=>{zh[t]=e});function Ix(e){const t=new hr(e),n=cx(hr.prototype.request,t);return xe.extend(n,hr.prototype,t,{allOwnKeys:!0}),xe.extend(n,t,null,{allOwnKeys:!0}),n.create=function(o){return Ix(Tr(e,o))},n}const On=Ix(Tu);On.Axios=hr;On.CanceledError=$u;On.CancelToken=iee;On.isCancel=kx;On.VERSION=Nx;On.toFormData=mf;On.AxiosError=_t;On.Cancel=On.CanceledError;On.all=function(t){return Promise.all(t)};On.spread=uee;On.isAxiosError=cee;On.mergeConfig=Tr;On.AxiosHeaders=ya;On.formToJSON=e=>Cx(xe.isHTMLForm(e)?new FormData(e):e);On.getAdapter=Ox.getAdapter;On.HttpStatusCode=zh;On.default=On;const{Axios:Fee,AxiosError:dee,CanceledError:Vee,isCancel:zee,CancelToken:Hee,VERSION:Kee,all:Wee,Cancel:jee,isAxiosError:Uee,spread:qee,toFormData:Yee,AxiosHeaders:Gee,HttpStatusCode:Xee,formToJSON:Jee,getAdapter:Zee,mergeConfig:Qee}=On;function fee(e){if(e instanceof dee){const t=e.response?.data;if(t&&typeof t=="object"){if("error"in t&&t.error)return String(t.error);if("message"in t&&t.message)return String(t.message)}return typeof t=="string"&&t.trim()?t:e.message||"请求失败"}return e instanceof Error?e.message:"请求失败"}function pee(){const e=On.create({withCredentials:!0,timeout:3e4,headers:{"X-Requested-With":"XMLHttpRequest"}});return e.interceptors.request.use(t=>t),e.interceptors.response.use(t=>t,t=>Promise.reject(new Error(fee(t)))),e}const hee=pee();async function bf(e){return(await hee.request(e)).data}function un(e,t){return bf({url:e,method:"GET",...t})}function nn(e,t,n){return bf({url:e,method:"POST",data:t,...n})}function rg(e,t,n){return bf({url:e,method:"PUT",data:t,...n})}function Cn(e,t){return bf({url:e,method:"DELETE",...t})}const vee=un,ete=nn;async function at(e){const t=await e;if(!t.success)throw new Error(t.message||"请求失败");return t.data}function mee(){const e=typeof window>"u"?"":window.localStorage.getItem("uid")||"",t=Number(e);if(!Number.isFinite(t)||t<=0)throw new Error("未获取到用户ID");return t}function gee(e){return`app_column_permissions:${String(e)}`}async function bee(){const e=mee(),t=gee(e);try{const a=JSON.parse(window.localStorage.getItem(t)||"null");if(Array.isArray(a))return a.map(o=>String(o.column_key||"").trim().toLowerCase()).filter(Boolean)}catch{}const n=await vee(`/api/admin/user/${encodeURIComponent(String(e))}/column-permissions`,{params:{menu_type:"app"}});if(!n.success)throw new Error(n.error||"获取菜单权限失败");try{window.localStorage.setItem(t,JSON.stringify(n.items||[]))}catch{}return(n.items||[]).map(a=>String(a.column_key||"").trim().toLowerCase()).filter(Boolean)}const yee={class:"top-bar"},wee={class:"nav-sections","aria-label":"顶部功能导航"},See={class:"nav-section-title"},Cee={class:"nav-section-items"},kee=["href"],Eee=se({__name:"BrandTopBar",props:{active:{}},setup(e){const n=e.active,a=M(null),o=[{columnKey:"brand_front_tools",label:"前端工具",items:[{key:"collect",label:"采集数据"},{key:"variant",label:"变体分析"},{key:"brand",label:"品牌检测",href:"/brand"},{key:"appearance-patent",label:"外观专利检测",href:"/new_web_source/appearance-patent.html"},{key:"dedupe",label:"数据去重",href:"/new_web_source/dedupe.html"},{key:"split",label:"数据拆分",href:"/new_web_source/split.html"},{key:"convert",label:"格式转换",href:"/new_web_source/convert.html"}]},{columnKey:"brand_operation_tools",label:"运营工具",items:[{key:"delete-brand",label:"删除ASIN",href:"/new_web_source/delete-brand.html"},{key:"product-risk",label:"商品风险解决",href:"/new_web_source/product-risk.html"},{key:"shop-match",label:"定时匹配",href:"/new_web_source/shop-match.html"},{key:"pricing",label:"跟价",href:"/new_web_source/price-track.html"},{key:"patrol-delete",label:"巡店删除",href:"/new_web_source/patrol-delete.html"},{key:"query-asin",label:"查询ASIN",href:"/new_web_source/query-asin.html"},{key:"withdraw",label:"取款"},{key:"shop-status",label:"店铺状态查询"}]},{columnKey:"brand_logistics_tools",label:"后勤工具",items:[{key:"purchase",label:"采购"},{key:"erp",label:"ERP"}]}],s=w(()=>{if(a.value===null)return o;const r=new Set(a.value);return o.filter(l=>r.has(l.columnKey))});return ht(async()=>{try{a.value=await bee()}catch{a.value=null}}),(r,l)=>(x(),B("header",yee,[l[0]||(l[0]=H("div",{class:"logo-area"},[H("span",{class:"app-name"},"数富AI-亚马逊"),H("a",{href:"/home",class:"btn-home"},"返回首页")],-1)),H("nav",wee,[(x(!0),B(Fe,null,yt(s.value,u=>(x(),B("section",{key:u.columnKey,class:"nav-section"},[H("div",See,Se(u.label),1),H("div",Cee,[(x(!0),B(Fe,null,yt(u.items,c=>(x(),B(Fe,{key:c.key},[c.href?(x(),B("a",{key:0,href:c.href,class:T(["nav-item",{active:i(n)===c.key}])},Se(c.label),11,kee)):(x(),B("span",{key:1,class:T(["nav-item disabled",{active:i(n)===c.key}])},Se(c.label),3))],64))),128))])]))),128))]),l[1]||(l[1]=H("div",{class:"top-right"},null,-1))]))}}),xee=(e,t)=>{const n=e.__vccOpts||e;for(const[a,o]of t)n[a]=o;return n},tte=xee(Eee,[["__scopeId","data-v-5cd781bd"]]),Tee=1e4,$ee=6e4,Oee=5e3,Nee=3e4;function nte(){return typeof document<"u"&&document.visibilityState!=="visible"?$ee:Tee}function Ree(){return typeof document<"u"&&document.hidden?Nee:Oee}const Qe="/newApi/api",mw=new Map,bp=new Map;function lt(){const e=typeof window>"u"?"":window.localStorage.getItem("uid")||"",t=Number(e);if(!Number.isFinite(t)||t<=0)throw new Error("未获取到用户ID");return t}function Iee(e){return Array.from(new Set((e||[]).map(t=>Number(t)).filter(t=>Number.isFinite(t)&&t>0))).sort((t,n)=>t-n)}function Pee(e,t){return`${e}::${t.join(",")}`}async function Mr(e,t){const n=Iee(t);if(!n.length)return{items:[],missingTaskIds:[]};const a=Pee(e,n),o=Date.now(),s=mw.get(a);if(s&&s.expiresAt>o)return s.data;const r=bp.get(a);if(r)return await r;const l=at(nn(e,{taskIds:n})).then(u=>(mw.set(a,{data:u,expiresAt:Date.now()+Ree()}),u)).finally(()=>{bp.delete(a)});return bp.set(a,l),l}function ate(e){return at(un(`${Qe}/files/excel-info`,{params:{fileKey:e}}))}function ote(e){return at(nn(`${Qe}/dedupe/run`,{...e,user_id:lt()}))}function ste(){return at(un(`${Qe}/dedupe/history`,{params:{user_id:lt()}}))}function rte(e){return at(Cn(`${Qe}/dedupe/history/${e}`,{params:{user_id:lt()}}))}function lte(e){return Vo(`/dedupe/results/${e}/download`)}function ite(e){return at(nn(`${Qe}/split/run`,{...e,user_id:lt()}))}function ute(){return at(un(`${Qe}/split/history`,{params:{user_id:lt()}}))}function cte(e){return at(Cn(`${Qe}/split/history/${e}`,{params:{user_id:lt()}}))}function dte(e){return Vo(`/split/results/${e}/download`)}function fte(){return at(un(`${Qe}/convert/templates`))}function pte(e){return at(nn(`${Qe}/convert/run`,{...e,user_id:lt()}))}function hte(){return at(un(`${Qe}/convert/history`,{params:{user_id:lt()}}))}function vte(e){return at(Cn(`${Qe}/convert/history/${e}`,{params:{user_id:lt()}}))}function mte(e){return Vo(`/convert/results/${e}/download`)}function gte(e){return at(nn(`${Qe}/delete-brand/run`,{...e,user_id:lt()}))}function bte(){return at(un(`${Qe}/delete-brand/history`,{params:{user_id:lt()}}))}function yte(e){return at(Cn(`${Qe}/delete-brand/history/${e}`,{params:{user_id:lt()}}))}function wte(e){return Vo(`/delete-brand/tasks/${e}/download`)}function Ste(){return at(un(`${Qe}/product-risk-resolve/candidates`,{params:{user_id:lt()}}))}function Cte(e){return at(nn(`${Qe}/product-risk-resolve/candidates`,{user_id:lt(),shop_name:e}))}function kte(e){return at(Cn(`${Qe}/product-risk-resolve/candidates/${e}`,{params:{user_id:lt()}}))}function Ete(){return at(un(`${Qe}/product-risk-resolve/country-preference`,{params:{user_id:lt()}}))}function xte(e){return at(rg(`${Qe}/product-risk-resolve/country-preference`,{user_id:lt(),country_codes:e}))}function Tte(e){return at(nn(`${Qe}/product-risk-resolve/match-shops`,{user_id:lt(),shop_names:e}))}function $te(){return at(un(`${Qe}/product-risk-resolve/dashboard`,{params:{user_id:lt()}}))}function Ote(){return at(un(`${Qe}/product-risk-resolve/history`,{params:{user_id:lt()}}))}function Nte(e){return at(Cn(`${Qe}/product-risk-resolve/history/${e}`,{params:{user_id:lt()}}))}function Rte(e){return at(nn(`${Qe}/product-risk-resolve/tasks`,{user_id:lt(),items:e}))}function Ite(e){return at(Cn(`${Qe}/product-risk-resolve/tasks/${e}`,{params:{user_id:lt()}}))}function Pte(e){return at(Cn(`${Qe}/product-risk-resolve/pending-shop-result`,{params:{user_id:lt(),shop_name:e}}))}function Mte(e){return Vo(`/product-risk-resolve/results/${e}/download`)}function _te(){return at(un(`${Qe}/shop-match/candidates`,{params:{user_id:lt()}}))}function Ate(e){return at(nn(`${Qe}/shop-match/candidates`,{user_id:lt(),shop_name:e}))}function Lte(e){return at(Cn(`${Qe}/shop-match/candidates/${e}`,{params:{user_id:lt()}}))}function Dte(){return at(un(`${Qe}/shop-match/country-preference`,{params:{user_id:lt()}}))}function Bte(e){return at(rg(`${Qe}/shop-match/country-preference`,{user_id:lt(),country_codes:e}))}function Fte(e){return at(nn(`${Qe}/shop-match/match-shops`,{user_id:lt(),shop_names:e}))}function Vte(){return at(un(`${Qe}/shop-match/dashboard`,{params:{user_id:lt()}}))}function zte(){return at(un(`${Qe}/shop-match/history`,{params:{user_id:lt()}}))}function Hte(e){return at(Cn(`${Qe}/shop-match/history/${e}`,{params:{user_id:lt()}}))}function Kte(e,t,n){return at(nn(`${Qe}/shop-match/tasks`,{user_id:lt(),items:e,country_codes:t,schedule_times:n}))}function Wte(e){return at(Cn(`${Qe}/shop-match/tasks/${e}`,{params:{user_id:lt()}}))}function jte(e,t){return at(nn(`${Qe}/shop-match/tasks/${e}/activate?user_id=${encodeURIComponent(String(lt()))}&stage_index=${encodeURIComponent(String(t))}`,void 0))}function Ute(e){return Vo(`/shop-match/results/${e}/download`)}function qte(){return at(un(`${Qe}/patrol-delete/candidates`,{params:{user_id:lt()}}))}function Yte(e){return at(nn(`${Qe}/patrol-delete/candidates`,{user_id:lt(),shop_name:e}))}function Gte(e){return at(Cn(`${Qe}/patrol-delete/candidates/${e}`,{params:{user_id:lt()}}))}function Xte(e){return at(nn(`${Qe}/patrol-delete/match-shops`,{user_id:lt(),shop_names:e}))}function Jte(){return at(un(`${Qe}/patrol-delete/dashboard`,{params:{user_id:lt()}}))}function Zte(){return at(un(`${Qe}/patrol-delete/history`,{params:{user_id:lt()}}))}function Qte(e){return Mr(`${Qe}/patrol-delete/tasks/progress/batch`,e)}function ene(e){return at(nn(`${Qe}/patrol-delete/tasks`,{user_id:lt(),items:e}))}function tne(e,t){return at(nn(`${Qe}/patrol-delete/tasks/${e}/result`,t))}function nne(e){return Vo(`/patrol-delete/results/${e}/download`)}function ane(e){return at(Cn(`${Qe}/patrol-delete/tasks/${e}`,{params:{user_id:lt()}}))}function one(e){return at(Cn(`${Qe}/patrol-delete/history/${e}`,{params:{user_id:lt()}}))}function sne(){return at(un(`${Qe}/query-asin/candidates`,{params:{user_id:lt()}}))}function rne(e){return at(nn(`${Qe}/query-asin/candidates`,{user_id:lt(),shop_name:e}))}function lne(e){return at(Cn(`${Qe}/query-asin/candidates/${e}`,{params:{user_id:lt()}}))}function ine(e){return at(nn(`${Qe}/query-asin/match-shops`,{user_id:lt(),shop_names:e}))}function une(){return at(un(`${Qe}/query-asin/dashboard`,{params:{user_id:lt()}}))}function cne(){return at(un(`${Qe}/query-asin/history`,{params:{user_id:lt()}}))}function dne(e){return Mr(`${Qe}/query-asin/tasks/progress/batch`,e)}function fne(e){return at(nn(`${Qe}/query-asin/tasks`,{user_id:lt(),items:e}))}function pne(e,t){return at(nn(`${Qe}/query-asin/tasks/${e}/result`,t))}function hne(e){return Vo(`/query-asin/results/${e}/download`)}function vne(e){return at(Cn(`${Qe}/query-asin/tasks/${e}`,{params:{user_id:lt()}}))}function mne(e){return at(Cn(`${Qe}/query-asin/history/${e}`,{params:{user_id:lt()}}))}function gne(e,t){return at(nn(`${Qe}/appearance-patent/parse`,{user_id:lt(),files:e,ai_prompt:t}))}function bne(){return at(un(`${Qe}/appearance-patent/dashboard`,{params:{user_id:lt()}}))}function yne(){return at(un(`${Qe}/appearance-patent/history`,{params:{user_id:lt()}}))}function wne(e){return Mr(`${Qe}/appearance-patent/tasks/progress/batch`,e)}function Sne(e){return at(nn(`${Qe}/appearance-patent/tasks/${e}/activate?user_id=${encodeURIComponent(String(lt()))}`,void 0))}function Cne(e){return at(Cn(`${Qe}/appearance-patent/tasks/${e}`,{params:{user_id:lt()}}))}function kne(e){return at(Cn(`${Qe}/appearance-patent/history/${e}`,{params:{user_id:lt()}}))}function Ene(e){return Vo(`/appearance-patent/results/${e}/download`)}function xne(){return at(un(`${Qe}/price-track/candidates?user_id=${encodeURIComponent(String(lt()))}`))}function Tne(e){return at(nn(`${Qe}/price-track/candidates`,{userId:lt(),shopName:e}))}function $ne(e){return at(Cn(`${Qe}/price-track/candidates/${e}?user_id=${encodeURIComponent(String(lt()))}`))}function One(){return at(un(`${Qe}/price-track/country-preference?user_id=${encodeURIComponent(String(lt()))}`))}function Nne(e){return at(rg(`${Qe}/price-track/country-preference`,{userId:lt(),countryCodes:e}))}function Rne(e,t){return at(nn(`${Qe}/price-track/match-shops`,{userId:lt(),shopNames:e,asinFiles:t?.asinFiles||[],countryCodes:t?.countryCodes||[]}))}function Ine(e){return Mr(`${Qe}/shop-match/tasks/progress/batch`,e)}function Pne(e){return Mr(`${Qe}/product-risk-resolve/tasks/progress/batch`,e)}function Mne(e){return Mr(`${Qe}/delete-brand/tasks/progress/batch`,e)}function _ne(){return at(un(`${Qe}/price-track/dashboard?user_id=${encodeURIComponent(String(lt()))}`))}function Ane(){return at(un(`${Qe}/price-track/history?user_id=${encodeURIComponent(String(lt()))}`))}function Lne(e){return at(Cn(`${Qe}/price-track/history/${e}?user_id=${encodeURIComponent(String(lt()))}`))}function Dne(e){return at(nn(`${Qe}/price-track/tasks`,{...e,userId:lt()}))}function Bne(e){return at(Cn(`${Qe}/price-track/tasks/${e}?user_id=${encodeURIComponent(String(lt()))}`))}function Fne(e){return at(nn(`${Qe}/price-track/loop-runs`,{...e,userId:lt()}))}function Vne(e){return at(un(`${Qe}/price-track/loop-runs/${e}?user_id=${encodeURIComponent(String(lt()))}`))}function zne(e){return at(nn(`${Qe}/price-track/loop-runs/${e}/dispatch-next?user_id=${encodeURIComponent(String(lt()))}`,void 0))}function Hne(e,t){return at(nn(`${Qe}/price-track/loop-runs/${e}/child-finished?user_id=${encodeURIComponent(String(lt()))}`,{childTaskId:t}))}function Kne(e){return at(nn(`${Qe}/price-track/loop-runs/${e}/stop?user_id=${encodeURIComponent(String(lt()))}`,void 0))}function Wne(e){return Mr(`${Qe}/price-track/tasks/progress/batch`,e)}function jne(e){return Vo(`/price-track/results/${e}/download`)}function Une(e){return at(Cn(`${Qe}/price-track/pending-shop-result?user_id=${encodeURIComponent(String(lt()))}&shop_name=${encodeURIComponent(e)}`))}function Vo(e){let t=e.startsWith("http://")||e.startsWith("https://")?e:`${Qe}${e}`;!t.startsWith("http://")&&!t.startsWith("https://")&&typeof window<"u"&&(t=`${window.location.origin}${t}`);const n=t.includes("?")?"&":"?";return`${t}${n}user_id=${encodeURIComponent(String(lt()))}`}let Hh,gw=!1;function Px(){return Hh=window.pywebview?.api,Hh}function Mee(){gw||typeof window>"u"||!window.addEventListener||(gw=!0,window.addEventListener("pywebviewready",()=>{Px()}))}Mee();function qne(){return Px()||Hh}export{bne as $,hte as A,tte as B,vte as C,mte as D,qJ as E,Fe as F,z1 as G,ite as H,ute as I,cte as J,dte as K,$l as L,_ee as M,Ke as N,Mne as O,gte as P,wte as Q,bte as R,yte as S,nte as T,oe as U,J as V,dq as W,cq as X,gne as Y,Sne as Z,xee as _,x as a,Jte as a$,yne as a0,Ene as a1,Cne as a2,kne as a3,wne as a4,an as a5,ea as a6,Ge as a7,i as a8,sd as a9,Kte as aA,Bte as aB,Ine as aC,jte as aD,ot as aE,_2 as aF,Nne as aG,One as aH,xne as aI,_ne as aJ,Ane as aK,Tne as aL,$ne as aM,Rne as aN,Une as aO,Dne as aP,Vne as aQ,Kne as aR,Hne as aS,zne as aT,Fne as aU,jne as aV,Lne as aW,Bne as aX,Wne as aY,ete as aZ,qte as a_,Hs as aa,xte as ab,Ete as ac,Pte as ad,Nte as ae,Ite as af,$te as ag,Ste as ah,Ote as ai,Pne as aj,Cte as ak,kte as al,Tte as am,Mte as an,Rte as ao,s5 as ap,_te as aq,Vte as ar,zte as as,Dte as at,Ate as au,Lte as av,Fte as aw,Ute as ax,Wte as ay,Hte as az,Y as b,Zte as b0,Yte as b1,Gte as b2,Xte as b3,ene as b4,tne as b5,nne as b6,ane as b7,one as b8,Qte as b9,sne as ba,une as bb,cne as bc,rne as bd,lne as be,ine as bf,fne as bg,pne as bh,hne as bi,vne as bj,mne as bk,dne as bl,a8 as bm,B as c,se as d,H as e,te as f,M as g,w as h,qne as i,ote as j,ste as k,rte as l,lte as m,T as n,ht as o,ate as p,eO as q,yt as r,Aee as s,Se as t,K1 as u,H1 as v,ct as w,wt as x,fte as y,pte as z}; diff --git a/new_web_source/assets/pywebview-Dp5dN8OO.css b/new_web_source/assets/pywebview-Dp5dN8OO.css new file mode 100644 index 0000000..d32e135 --- /dev/null +++ b/new_web_source/assets/pywebview-Dp5dN8OO.css @@ -0,0 +1 @@ +:root{--el-color-white:#fff;--el-color-black:#000;--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:.3s;--el-transition-duration-fast:.2s;--el-transition-function-ease-in-out-bezier:cubic-bezier(.645, .045, .355, 1);--el-transition-function-fast-bezier:cubic-bezier(.23, 1, .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;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;--el-color-primary:#409eff;--el-color-primary-light-3:#79bbff;--el-color-primary-light-5:#a0cfff;--el-color-primary-light-7:#c6e2ff;--el-color-primary-light-8:#d9ecff;--el-color-primary-light-9:#ecf5ff;--el-color-primary-dark-2:#337ecc;--el-color-success:#67c23a;--el-color-success-light-3:#95d475;--el-color-success-light-5:#b3e19d;--el-color-success-light-7:#d1edc4;--el-color-success-light-8:#e1f3d8;--el-color-success-light-9:#f0f9eb;--el-color-success-dark-2:#529b2e;--el-color-warning:#e6a23c;--el-color-warning-light-3:#eebe77;--el-color-warning-light-5:#f3d19e;--el-color-warning-light-7:#f8e3c5;--el-color-warning-light-8:#faecd8;--el-color-warning-light-9:#fdf6ec;--el-color-warning-dark-2:#b88230;--el-color-danger:#f56c6c;--el-color-danger-light-3:#f89898;--el-color-danger-light-5:#fab6b6;--el-color-danger-light-7:#fcd3d3;--el-color-danger-light-8:#fde2e2;--el-color-danger-light-9:#fef0f0;--el-color-danger-dark-2:#c45656;--el-color-error:#f56c6c;--el-color-error-light-3:#f89898;--el-color-error-light-5:#fab6b6;--el-color-error-light-7:#fcd3d3;--el-color-error-light-8:#fde2e2;--el-color-error-light-9:#fef0f0;--el-color-error-dark-2:#c45656;--el-color-info:#909399;--el-color-info-light-3:#b1b3b8;--el-color-info-light-5:#c8c9cc;--el-color-info-light-7:#dedfe0;--el-color-info-light-8:#e9e9eb;--el-color-info-light-9:#f4f4f5;--el-color-info-dark-2:#73767a;--el-bg-color:#fff;--el-bg-color-page:#f2f3f5;--el-bg-color-overlay:#fff;--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:#fff;--el-box-shadow:0px 12px 32px 4px #0000000a, 0px 8px 20px #00000014;--el-box-shadow-light:0px 0px 12px #0000001f;--el-box-shadow-lighter:0px 0px 6px #0000001f;--el-box-shadow-dark:0px 16px 48px 16px #00000014, 0px 12px 32px #0000001f, 0px 8px 16px -8px #00000029;--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:#000c;--el-overlay-color-light:#000000b3;--el-overlay-color-lighter:#00000080;--el-mask-color:#ffffffe6;--el-mask-color-extra-light:#ffffff4d;--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;transition:var(--el-transition-md-fade);transform-origin:top;transform:scaleY(1)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin: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;transition:var(--el-transition-md-fade);transform-origin:bottom;transform:scaleY(1)}.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;transition:var(--el-transition-md-fade);transform-origin:0 0;transform:scale(1)}.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-leave-active,.el-collapse-transition-enter-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--right{margin-left:5px}.el-icon--left{margin-right:5px}@keyframes rotating{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.el-icon{--color:inherit;fill:currentColor;width:1em;height:1em;color:var(--color);line-height:1em;font-size:inherit;justify-content:center;align-items:center;display:inline-flex;position:relative}.el-icon.is-loading{animation:2s linear infinite rotating}.el-icon svg{width:1em;height: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;width:100%;padding:var(--el-alert-padding);box-sizing:border-box;border-radius:var(--el-alert-border-radius-base);background-color:var(--el-color-white);opacity:1;transition:opacity var(--el-transition-duration-fast);align-items:center;margin:0;display:flex;position:relative;overflow:hidden}.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--primary{--el-alert-bg-color:var(--el-color-primary-light-9)}.el-alert--primary.is-light{background-color:var(--el-alert-bg-color);color:var(--el-color-primary)}.el-alert--primary.is-light .el-alert__description{color:var(--el-color-primary)}.el-alert--primary.is-dark{background-color:var(--el-color-primary);color:var(--el-color-white)}.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);color:var(--el-color-success)}.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);color:var(--el-color-info)}.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);color:var(--el-color-warning)}.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);color:var(--el-color-error)}.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{flex-direction:column;gap:4px;display:flex}.el-alert .el-alert__icon{font-size:var(--el-alert-icon-size);width:var(--el-alert-icon-size);margin-right:8px}.el-alert .el-alert__icon.is-big{font-size:var(--el-alert-icon-large-size);width:var(--el-alert-icon-large-size);margin-right:12px}.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{font-size:var(--el-alert-close-font-size);opacity:1;cursor:pointer;position:absolute;top:12px;right:16px}.el-alert .el-alert__close-btn.is-customed{font-style:normal;font-size:var(--el-alert-close-customed-font-size);line-height:24px;top:8px}.el-alert-fade-enter-from,.el-alert-fade-leave-active{opacity:0}.el-aside{box-sizing:border-box;width:var(--el-aside-width,300px);flex-shrink:0;overflow:auto}.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%;width:var(--el-input-width);display:inline-block;position:relative}.el-autocomplete__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.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-top-color:#0000;border-left-color:#0000}.el-autocomplete__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-autocomplete__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-autocomplete__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-autocomplete-suggestion{border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-autocomplete-suggestion__header{border-bottom:1px solid var(--el-border-color-lighter);padding:10px}.el-autocomplete-suggestion__footer{border-top:1px solid var(--el-border-color-lighter);padding:10px}.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{cursor:pointer;color:var(--el-text-color-regular);line-height:34px;font-size:var(--el-font-size-base);text-align:left;text-overflow:ellipsis;white-space:nowrap;margin:0;padding:0 20px;list-style:none;overflow:hidden}.el-autocomplete-suggestion li:hover,.el-autocomplete-suggestion li.highlighted{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{cursor:default;height:100px;color:var(--el-text-color-secondary);justify-content:center;align-items:center;font-size:20px;display:flex}.el-autocomplete-suggestion.is-loading li:hover{background-color:var(--el-bg-color-overlay)}.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:40px;--el-avatar-size-small:24px;box-sizing:border-box;text-align:center;color:var(--el-avatar-text-color);background:var(--el-avatar-bg-color);width:var(--el-avatar-size);height:var(--el-avatar-size);font-size:var(--el-avatar-text-size);outline:none;justify-content:center;align-items:center;display:inline-flex;overflow:hidden}.el-avatar>img{width:100%;height:100%;display:block}.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-avatar-group{--el-avatar-group-item-gap:-8px;--el-avatar-group-collapse-item-gap:4px;display:inline-flex}.el-avatar-group .el-avatar{border:1px solid var(--el-border-color-extra-light)}.el-avatar-group .el-avatar:not(:first-child){margin-left:var(--el-avatar-group-item-gap)}.el-avatar-group__collapse-avatars{--el-avatar-group-item-gap:-8px;--el-avatar-group-collapse-item-gap:4px}.el-avatar-group__collapse-avatars .el-avatar:not(:first-child){margin-left:var(--el-avatar-group-collapse-item-gap)}.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);background-color:var(--el-backtop-bg-color);width:40px;height:40px;color:var(--el-backtop-text-color);box-shadow:var(--el-box-shadow-lighter);cursor:pointer;z-index:5;border-radius:50%;justify-content:center;align-items:center;font-size:20px;display:flex;position:fixed}.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;vertical-align:middle;width:-moz-fit-content;width:fit-content;display:inline-block;position:relative}.el-badge__content{background-color:var(--el-badge-bg-color);border-radius:var(--el-badge-radius);color:var(--el-color-white);font-size:var(--el-badge-font-size);height:var(--el-badge-size);padding:0 var(--el-badge-padding);white-space:nowrap;border:1px solid var(--el-bg-color);justify-content:center;align-items:center;display:inline-flex}.el-badge__content.is-fixed{top:0;right:calc(1px + var(--el-badge-size) / 2);z-index:var(--el-index-normal);position:absolute;transform:translateY(-50%)translate(100%)}.el-badge__content.is-fixed.is-dot{right:5px}.el-badge__content.is-dot{border-radius:50%;width:8px;height:8px;padding:0;right:0}.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__separator{color:var(--el-text-color-placeholder);margin:0 9px;font-weight:700}.el-breadcrumb__separator.el-icon{margin:0 6px;font-weight:400}.el-breadcrumb__separator.el-icon svg{vertical-align:middle}.el-breadcrumb__item{float:left;align-items:center;display:inline-flex}.el-breadcrumb__inner{color:var(--el-text-color-regular)}.el-breadcrumb__inner.is-link,.el-breadcrumb__inner a{transition:var(--el-transition-color);color:var(--el-text-color-primary);font-weight:700;text-decoration:none}.el-breadcrumb__inner.is-link:hover,.el-breadcrumb__inner a:hover{color:var(--el-color-primary);cursor:pointer}.el-breadcrumb__item:last-child .el-breadcrumb__inner,.el-breadcrumb__item:last-child .el-breadcrumb__inner:hover,.el-breadcrumb__item:last-child .el-breadcrumb__inner a,.el-breadcrumb__item:last-child .el-breadcrumb__inner a:hover{color:var(--el-text-color-regular);cursor:text;font-weight:400}.el-breadcrumb__item:last-child .el-breadcrumb__separator{display:none}.el-breadcrumb{font-size:14px;line-height:1}.el-breadcrumb:before,.el-breadcrumb:after{content:"";display:table}.el-breadcrumb:after{clear:both}.el-button-group>.el-button+.el-button{margin-left:0}.el-button-group>.el-button:first-child:last-child{border-top-right-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-bottom-left-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:hover,.el-button-group>.el-button:focus,.el-button-group>.el-button:active,.el-button-group>.el-button.is-active{z-index:1}.el-button-group--horizontal{vertical-align:middle;display:inline-block}.el-button-group--horizontal:before,.el-button-group--horizontal:after{content:"";display:table}.el-button-group--horizontal:after{clear:both}.el-button-group--horizontal>.el-button{float:left;position:relative}.el-button-group--horizontal>.el-button:first-child{border-top-right-radius:0;border-bottom-right-radius:0}.el-button-group--horizontal>.el-button:last-child{border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group--horizontal>.el-button:not(:last-child){margin-right:-1px}.el-button-group--horizontal .el-button--primary:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--primary:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .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--horizontal .el-button--success:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--success:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .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--horizontal .el-button--warning:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--warning:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .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--horizontal .el-button--danger:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--danger:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .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--horizontal .el-button--info:first-child{border-right-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .el-button--info:last-child{border-left-color:var(--el-button-divide-border-color)}.el-button-group--horizontal .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-group--horizontal>.el-dropdown>.el-button{border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0;border-bottom-left-radius:0}.el-button-group--vertical{flex-direction:column;align-items:stretch;display:inline-flex}.el-button-group--vertical>.el-button{margin-top:-1px}.el-button-group--vertical>.el-button:first-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.el-button-group--vertical>.el-button:last-child{border-top-left-radius:0;border-top-right-radius:0}.el-button-group--vertical>.el-dropdown{margin-top:-1px}.el-button-group--vertical>.el-dropdown>.el-button{border-left-color:var(--el-button-divide-border-color);border-top-left-radius:0;border-top-right-radius:0}.el-button-group--vertical .el-button--primary:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--primary:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--primary:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--success:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--warning:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--danger:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:first-child{border-bottom-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:last-child{border-top-color:var(--el-button-divide-border-color)}.el-button-group--vertical .el-button--info:not(:first-child):not(:last-child){border-top-color:var(--el-button-divide-border-color);border-bottom-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:#ffffff80;--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);white-space:nowrap;cursor:pointer;height:32px;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;line-height:1;font-weight:var(--el-button-font-weight);-webkit-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);outline:none;justify-content:center;align-items:center;transition:all .1s;display:inline-flex}.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:none}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset,outline}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:8px 15px}.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{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";border-radius:inherit;background-color:var(--el-mask-color-extra-light);position:absolute;inset:-1px}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-dashed{--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);border-style:dashed}.el-button.is-circle{border-radius:50%;width:32px;padding:8px}.el-button.is-text{color:var(--el-button-text-color);background-color:#0000;border:0 solid #0000}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important}.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,outline}.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{color:var(--el-button-text-color);background:0 0;border-color:#0000;height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button.is-link:not(.is-disabled):hover{background-color:#0000;border-color:#0000}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);background-color:#0000;border-color:#0000}.el-button--text{color:var(--el-color-primary);background:0 0;border-color:#0000;padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);background-color:#0000;border-color:#0000}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);background-color:#0000;border-color:#0000}.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-plain,.el-button--primary.is-text,.el-button--primary.is-link{--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-plain.is-disabled,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:hover,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--primary.is-dashed{--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-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-text-color:var(--el-color-primary-dark-2);--el-button-active-bg-color:var(--el-color-primary-light-9);--el-button-active-border-color:var(--el-color-primary-dark-2)}.el-button--primary.is-dashed.is-disabled,.el-button--primary.is-dashed.is-disabled:hover,.el-button--primary.is-dashed.is-disabled:focus,.el-button--primary.is-dashed.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.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-plain,.el-button--success.is-text,.el-button--success.is-link{--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-plain.is-disabled,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:hover,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:active,.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--success.is-dashed{--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-success);--el-button-hover-bg-color:var(--el-color-success-light-9);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-text-color:var(--el-color-success-dark-2);--el-button-active-bg-color:var(--el-color-success-light-9);--el-button-active-border-color:var(--el-color-success-dark-2)}.el-button--success.is-dashed.is-disabled,.el-button--success.is-dashed.is-disabled:hover,.el-button--success.is-dashed.is-disabled:focus,.el-button--success.is-dashed.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.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-plain,.el-button--warning.is-text,.el-button--warning.is-link{--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-plain.is-disabled,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:hover,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--warning.is-dashed{--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-warning);--el-button-hover-bg-color:var(--el-color-warning-light-9);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-text-color:var(--el-color-warning-dark-2);--el-button-active-bg-color:var(--el-color-warning-light-9);--el-button-active-border-color:var(--el-color-warning-dark-2)}.el-button--warning.is-dashed.is-disabled,.el-button--warning.is-dashed.is-disabled:hover,.el-button--warning.is-dashed.is-disabled:focus,.el-button--warning.is-dashed.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.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-plain,.el-button--danger.is-text,.el-button--danger.is-link{--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-plain.is-disabled,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:hover,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--danger.is-dashed{--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-danger);--el-button-hover-bg-color:var(--el-color-danger-light-9);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-text-color:var(--el-color-danger-dark-2);--el-button-active-bg-color:var(--el-color-danger-light-9);--el-button-active-border-color:var(--el-color-danger-dark-2)}.el-button--danger.is-dashed.is-disabled,.el-button--danger.is-dashed.is-disabled:hover,.el-button--danger.is-dashed.is-disabled:focus,.el-button--danger.is-dashed.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.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-plain,.el-button--info.is-text,.el-button--info.is-link{--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-plain.is-disabled,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:hover,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:active,.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--info.is-dashed{--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-info);--el-button-hover-bg-color:var(--el-color-info-light-9);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-text-color:var(--el-color-info-dark-2);--el-button-active-bg-color:var(--el-color-info-light-9);--el-button-active-border-color:var(--el-color-info-dark-2)}.el-button--info.is-dashed.is-disabled,.el-button--info.is-dashed.is-disabled:hover,.el-button--info.is-dashed.is-disabled:focus,.el-button--info.is-dashed.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.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{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:12px 19px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.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);padding:5px 11px;font-size:12px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.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);justify-content:space-between;padding:12px 20px;display:flex}.el-calendar__title{color:var(--el-text-color);align-self:center}.el-calendar__body{padding:12px 20px 35px}.el-calendar__select-controller .el-select{margin-right:8px}.el-calendar__select-controller .el-calendar-select__year{width:120px}.el-calendar__select-controller .el-calendar-select__month{width:60px}.el-calendar-table{table-layout:fixed;width:100%}.el-calendar-table thead th{color:var(--el-text-color-regular);padding:12px 0;font-weight:400}.el-calendar-table:not(.is-range) td.prev,.el-calendar-table:not(.is-range) td.next{color:var(--el-text-color-placeholder)}.el-calendar-table td{border-bottom:var(--el-calendar-border);border-right:var(--el-calendar-border);vertical-align:top;transition:background-color var(--el-transition-duration-fast) ease}.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{cursor:pointer;background-color:var(--el-calendar-selected-bg-color)}.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);border-radius:var(--el-card-border-radius);border:1px solid var(--el-card-border-color);background-color:var(--el-card-bg-color);color:var(--el-text-color-primary);transition:var(--el-transition-duration);flex-direction:column;display:flex;overflow:hidden}.el-card.is-always-shadow,.el-card.is-hover-shadow:hover,.el-card.is-hover-shadow:focus{box-shadow:var(--el-box-shadow-light)}.el-card__header{padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding);border-bottom:1px solid var(--el-card-border-color);box-sizing:border-box}.el-card__body{padding:var(--el-card-padding);flex-grow:1;overflow:auto}.el-card__footer{padding:calc(var(--el-card-padding) - 2px) var(--el-card-padding);border-top:1px solid var(--el-card-border-color);box-sizing:border-box}.el-carousel__item{width:100%;height:100%;z-index:calc(var(--el-index-normal) - 1);display:inline-block;position:absolute;top:0;left:0;overflow:hidden}.el-carousel__item.is-active{z-index:calc(var(--el-index-normal) - 1)}.el-carousel__item.is-animating{transition:transform .4s ease-in-out}.el-carousel__item--card{width:50%;transition:transform .4s ease-in-out}.el-carousel__item--card.is-in-stage{cursor:pointer;z-index:var(--el-index-normal)}.el-carousel__item--card.is-in-stage:hover .el-carousel__mask,.el-carousel__item--card.is-in-stage.is-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{width:100%;height:50%}.el-carousel__mask{background-color:var(--el-color-white);opacity:.24;width:100%;height:100%;transition:var(--el-transition-duration-fast);position:absolute;top:0;left:0}.el-carousel{--el-carousel-arrow-font-size:12px;--el-carousel-arrow-size:36px;--el-carousel-arrow-background:#1f2d3d1c;--el-carousel-arrow-hover-background:#1f2d3d3b;--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.is-vertical-outside{flex-direction:row;align-items:center;display:flex}.el-carousel.is-vertical-outside .el-carousel__container{flex:1}.el-carousel__container{height:300px;position:relative}.el-carousel__arrow{height:var(--el-carousel-arrow-size);width:var(--el-carousel-arrow-size);cursor:pointer;transition:var(--el-transition-duration);background-color:var(--el-carousel-arrow-background);color:#fff;z-index:10;text-align:center;font-size:var(--el-carousel-arrow-font-size);border:none;border-radius:50%;outline:none;justify-content:center;align-items:center;margin:0;padding:0;display:inline-flex;position:absolute;top:50%;transform:translateY(-50%)}.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{z-index:calc(var(--el-index-normal) + 1);margin:0;padding:0;list-style:none;position:absolute}.el-carousel__indicators--horizontal{bottom:0;left:50%;transform:translate(-50%)}.el-carousel__indicators--vertical{top:50%;right:0;transform:translateY(-50%)}.el-carousel__indicators--outside{text-align:center;position:static;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 .el-carousel__button{color:#000;padding:2px 18px;font-size:12px}.el-carousel__indicators--labels .el-carousel__indicator{padding:6px 4px}.el-carousel__indicator{cursor:pointer;background-color:#0000}.el-carousel__indicator:hover button{opacity:.72}.el-carousel__indicator--horizontal{padding:var(--el-carousel-indicator-padding-vertical) var(--el-carousel-indicator-padding-horizontal);display:inline-block}.el-carousel__indicator--vertical{padding:var(--el-carousel-indicator-padding-horizontal) var(--el-carousel-indicator-padding-vertical)}.el-carousel__indicator--vertical .el-carousel__button{width:var(--el-carousel-indicator-height);height:calc(var(--el-carousel-indicator-width) / 2)}.el-carousel__indicator.is-active button{opacity:1}.el-carousel__button{opacity:.48;width:var(--el-carousel-indicator-width);height:var(--el-carousel-indicator-height);cursor:pointer;transition:var(--el-transition-duration);background-color:#fff;border:none;outline:none;margin:0;padding:0;display:block}.el-carousel__indicators--labels .el-carousel__button{width:auto;height:auto}.carousel-arrow-left-enter-from,.carousel-arrow-left-leave-active{opacity:0;transform:translateY(-50%)translate(-10px)}.carousel-arrow-right-enter-from,.carousel-arrow-right-leave-active{opacity:0;transform:translateY(-50%)translate(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);width:-moz-fit-content;width:fit-content;font-size:var(--el-cascader-menu-font-size);display:flex}.el-cascader-panel.is-bordered{border:var(--el-cascader-menu-border);border-radius:var(--el-cascader-menu-radius)}.el-cascader-menu{box-sizing:border-box;min-width:180px;color:var(--el-cascader-menu-text-color);border-right:var(--el-cascader-menu-border)}.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;min-height:100%;margin:0;padding:6px 0;list-style:none;position:relative}.el-cascader-menu__hover-zone{pointer-events:none;width:100%;height:100%;position:absolute;top:0;left:0}.el-cascader-menu__empty-text{color:var(--el-cascader-color-empty);align-items:center;display:flex;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-cascader-menu__empty-text .is-loading{margin-right:2px}.el-cascader-node{outline:none;align-items:center;height:34px;padding:0 30px 0 20px;line-height:34px;display:flex;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-selectable.in-checked-path,.el-cascader-node.is-active{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.el-cascader-node:not(.is-disabled){cursor:pointer}.el-cascader-node:not(.is-disabled):hover,.el-cascader-node:not(.is-disabled):focus{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{position:absolute;left:10px}.el-cascader-node__postfix{position:absolute;right:10px}.el-cascader-node__label{text-align:left;white-space:nowrap;text-overflow:ellipsis;flex:1;padding:0 8px;overflow:hidden}.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);vertical-align:middle;font-size:var(--el-font-size-base);outline:none;line-height:32px;display:inline-block;position:relative}.el-cascader:not(.is-disabled):hover .el-input__wrapper{cursor:pointer;box-shadow:0 0 0 1px var(--el-input-hover-border-color) inset}.el-cascader .el-input{cursor:pointer;display:flex}.el-cascader .el-input .el-input__inner{text-overflow:ellipsis}.el-cascader .el-input .el-input__inner:read-only{cursor:pointer}.el-cascader .el-input .el-input__inner:disabled{cursor:not-allowed}.el-cascader .el-input .el-input__suffix-inner .el-icon svg{vertical-align:middle}.el-cascader .el-input .icon-arrow-down{transition:transform var(--el-transition-duration);font-size:14px}.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{z-index:calc(var(--el-index-normal) + 1);color:var(--el-disabled-text-color)}.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);font-size:var(--el-cascader-menu-font-size);border-radius:var(--el-cascader-menu-radius)}.el-cascader__dropdown.el-popper{background:var(--el-cascader-menu-fill);border:var(--el-cascader-menu-border);box-shadow:var(--el-cascader-menu-shadow)}.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-top-color:#0000;border-left-color:#0000}.el-cascader__dropdown.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-cascader__dropdown.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-cascader__dropdown.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-cascader__dropdown.el-popper{box-shadow:var(--el-cascader-menu-shadow)}.el-cascader__header{border-bottom:1px solid var(--el-border-color-light);padding:10px}.el-cascader__footer{border-top:1px solid var(--el-border-color-light);padding:10px}.el-cascader__tags{text-align:left;box-sizing:border-box;flex-wrap:wrap;gap:6px;padding:4px;line-height:normal;display:flex;position:absolute;top:50%;left:0;right:30px;transform:translateY(-50%)}.el-cascader__tags .el-tag{text-overflow:ellipsis;background:var(--el-cascader-tag-background);align-items:center;max-width:100%;display:inline-flex}.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:#0000}.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{text-overflow:ellipsis;flex:1;line-height:normal;overflow:hidden}.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{text-overflow:ellipsis;background:var(--el-fill-color);align-items:center;max-width:100%;display:inline-flex}.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:#0000}.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{text-overflow:ellipsis;flex:1;line-height:normal;overflow:hidden}.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__collapse-tags .el-tag{margin:2px 0}.el-cascader__suggestion-panel{border-radius:var(--el-cascader-menu-radius)}.el-cascader__suggestion-list{max-height:204px;font-size:var(--el-font-size-base);color:var(--el-cascader-menu-text-color);text-align:center;margin:0;padding:6px 0}.el-cascader__suggestion-item{text-align:left;cursor:pointer;outline:none;justify-content:space-between;align-items:center;height:34px;padding:0 15px;display:flex}.el-cascader__suggestion-item:hover,.el-cascader__suggestion-item:focus{background:var(--el-cascader-node-background-hover)}.el-cascader__suggestion-item.is-checked{color:var(--el-cascader-menu-selected-text-color);font-weight:700}.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{min-width:60px;height:24px;color:var(--el-cascader-menu-text-color);box-sizing:border-box;background:0 0;border:none;outline:none;flex:1;margin-left:7px;padding:0}.el-cascader__search-input::placeholder{color:#0000}.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;font-size:var(--el-font-size-base);line-height:var(--el-font-size-base);transition:var(--el-transition-all);padding:7px 15px;font-weight:700;display:inline-block}.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{background-color:var(--el-color-success-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.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{background-color:var(--el-color-warning-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.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{background-color:var(--el-color-danger-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.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{background-color:var(--el-color-error-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.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{background-color:var(--el-color-info-light-9);color:var(--el-disabled-text-color);cursor:not-allowed}.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);--el-checkbox-button-disabled-checked-fill:var(--el-border-color-extra-light);display:inline-block;position:relative}.el-checkbox-button__inner{line-height:1;font-weight:var(--el-checkbox-font-weight);white-space:nowrap;vertical-align:middle;cursor:pointer;background:var(--el-button-bg-color,var(--el-fill-color-blank));outline:var(--el-border);color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;font-size:var(--el-font-size-base);border-radius:0;margin:0;padding:8px 15px;display:inline-block;position:relative}.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{opacity:0;z-index:-1;outline:none;margin:0;position:absolute}.el-checkbox-button.is-checked .el-checkbox-button__inner{color:var(--el-checkbox-button-checked-text-color);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)}.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{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.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.is-disabled.is-checked .el-checkbox-button__inner{background-color:var(--el-checkbox-button-disabled-checked-fill)}.el-checkbox-button:first-child .el-checkbox-button__inner{border-top-left-radius:var(--el-border-radius-base);border-bottom-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-top-right-radius:var(--el-border-radius-base);border-bottom-right-radius:var(--el-border-radius-base)}.el-checkbox-button--large .el-checkbox-button__inner{font-size:var(--el-font-size-base);border-radius:0;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;padding:5px 11px;font-size:12px}.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);color:var(--el-checkbox-text-color);font-weight:var(--el-checkbox-font-weight);font-size:var(--el-font-size-base);cursor:pointer;white-space:nowrap;-webkit-user-select:none;user-select:none;height:var(--el-checkbox-height,32px);align-items:center;margin-right:30px;display:inline-flex;position:relative}.el-checkbox.is-disabled{cursor:not-allowed}.el-checkbox.is-bordered{border-radius:var(--el-border-radius-base);border:var(--el-border);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{width:14px;height: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{width:12px;height:12px}.el-checkbox.is-bordered.el-checkbox--small .el-checkbox__inner:after{width:2px;height:6px}.el-checkbox input:focus-visible+.el-checkbox__inner{outline:2px solid var(--el-checkbox-input-border-color-hover);outline-offset:1px;border-radius:var(--el-checkbox-border-radius)}.el-checkbox__input{white-space:nowrap;cursor:pointer;outline:none;display:inline-flex;position:relative}.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{cursor:not-allowed;border-color:var(--el-checkbox-disabled-icon-color);will-change:transform}.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:translate(-45%,-60%)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{content:"";background-color:var(--el-checkbox-checked-icon-color);height:2px;display:block;position:absolute;top:5px;left:0;right:0;transform:scale(.5)}.el-checkbox__input.is-indeterminate .el-checkbox__inner:after{display:none}.el-checkbox__inner{border:var(--el-checkbox-input-border);border-radius:var(--el-checkbox-border-radius);box-sizing:border-box;width:var(--el-checkbox-input-width);height:var(--el-checkbox-input-height);background-color:var(--el-checkbox-bg-color);z-index:var(--el-index-normal);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);display:inline-block;position:relative}.el-checkbox__inner:hover{border-color:var(--el-checkbox-input-border-color-hover)}.el-checkbox__inner:after{box-sizing:content-box;content:"";transform-origin:50%;border:1px solid #0000;border-top:0;border-left:0;width:3px;height:7px;transition:transform .15s ease-in 50ms;position:absolute;top:50%;left:50%;transform:translate(-45%,-60%)rotate(45deg)scaleY(0)}.el-checkbox__original{opacity:0;z-index:-1;outline:none;width:0;height:0;margin:0;position:absolute}.el-checkbox__label{line-height:1;font-size:var(--el-checkbox-font-size);padding-left:8px;display:inline-block}.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{width:14px;height: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{width:12px;height: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{width:2px;height:6px}.el-checkbox:last-of-type{margin-right:0}[class*=el-col-]{box-sizing:border-box}[class*=el-col-].is-guttered{min-height:1px;display:block}.el-col-0{flex:0 0;max-width:0%;display:none}.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{position:relative;left:0%}.el-col-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-1.is-guttered{display:block}.el-col-offset-1{margin-left:4.16667%}.el-col-pull-1{position:relative;right:4.16667%}.el-col-push-1{position:relative;left:4.16667%}.el-col-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-2.is-guttered{display:block}.el-col-offset-2{margin-left:8.33333%}.el-col-pull-2{position:relative;right:8.33333%}.el-col-push-2{position:relative;left:8.33333%}.el-col-3{flex:0 0 12.5%;max-width:12.5%;display:block}.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{position:relative;left:12.5%}.el-col-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-4.is-guttered{display:block}.el-col-offset-4{margin-left:16.6667%}.el-col-pull-4{position:relative;right:16.6667%}.el-col-push-4{position:relative;left:16.6667%}.el-col-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-5.is-guttered{display:block}.el-col-offset-5{margin-left:20.8333%}.el-col-pull-5{position:relative;right:20.8333%}.el-col-push-5{position:relative;left:20.8333%}.el-col-6{flex:0 0 25%;max-width:25%;display:block}.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{position:relative;left:25%}.el-col-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-7.is-guttered{display:block}.el-col-offset-7{margin-left:29.1667%}.el-col-pull-7{position:relative;right:29.1667%}.el-col-push-7{position:relative;left:29.1667%}.el-col-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-8.is-guttered{display:block}.el-col-offset-8{margin-left:33.3333%}.el-col-pull-8{position:relative;right:33.3333%}.el-col-push-8{position:relative;left:33.3333%}.el-col-9{flex:0 0 37.5%;max-width:37.5%;display:block}.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{position:relative;left:37.5%}.el-col-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-10.is-guttered{display:block}.el-col-offset-10{margin-left:41.6667%}.el-col-pull-10{position:relative;right:41.6667%}.el-col-push-10{position:relative;left:41.6667%}.el-col-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-11.is-guttered{display:block}.el-col-offset-11{margin-left:45.8333%}.el-col-pull-11{position:relative;right:45.8333%}.el-col-push-11{position:relative;left:45.8333%}.el-col-12{flex:0 0 50%;max-width:50%;display:block}.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{position:relative;left:50%}.el-col-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-13.is-guttered{display:block}.el-col-offset-13{margin-left:54.1667%}.el-col-pull-13{position:relative;right:54.1667%}.el-col-push-13{position:relative;left:54.1667%}.el-col-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-14.is-guttered{display:block}.el-col-offset-14{margin-left:58.3333%}.el-col-pull-14{position:relative;right:58.3333%}.el-col-push-14{position:relative;left:58.3333%}.el-col-15{flex:0 0 62.5%;max-width:62.5%;display:block}.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{position:relative;left:62.5%}.el-col-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-16.is-guttered{display:block}.el-col-offset-16{margin-left:66.6667%}.el-col-pull-16{position:relative;right:66.6667%}.el-col-push-16{position:relative;left:66.6667%}.el-col-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-17.is-guttered{display:block}.el-col-offset-17{margin-left:70.8333%}.el-col-pull-17{position:relative;right:70.8333%}.el-col-push-17{position:relative;left:70.8333%}.el-col-18{flex:0 0 75%;max-width:75%;display:block}.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{position:relative;left:75%}.el-col-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-19.is-guttered{display:block}.el-col-offset-19{margin-left:79.1667%}.el-col-pull-19{position:relative;right:79.1667%}.el-col-push-19{position:relative;left:79.1667%}.el-col-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-20.is-guttered{display:block}.el-col-offset-20{margin-left:83.3333%}.el-col-pull-20{position:relative;right:83.3333%}.el-col-push-20{position:relative;left:83.3333%}.el-col-21{flex:0 0 87.5%;max-width:87.5%;display:block}.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{position:relative;left:87.5%}.el-col-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-22.is-guttered{display:block}.el-col-offset-22{margin-left:91.6667%}.el-col-pull-22{position:relative;right:91.6667%}.el-col-push-22{position:relative;left:91.6667%}.el-col-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-23.is-guttered{display:block}.el-col-offset-23{margin-left:95.8333%}.el-col-pull-23{position:relative;right:95.8333%}.el-col-push-23{position:relative;left:95.8333%}.el-col-24{flex:0 0 100%;max-width:100%;display:block}.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{position:relative;left:100%}@media only screen and (max-width:767px){.el-col-xs-0{flex:0 0;max-width:0%;display:none}.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{position:relative;left:0%}.el-col-xs-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-xs-1.is-guttered{display:block}.el-col-xs-offset-1{margin-left:4.16667%}.el-col-xs-pull-1{position:relative;right:4.16667%}.el-col-xs-push-1{position:relative;left:4.16667%}.el-col-xs-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-xs-2.is-guttered{display:block}.el-col-xs-offset-2{margin-left:8.33333%}.el-col-xs-pull-2{position:relative;right:8.33333%}.el-col-xs-push-2{position:relative;left:8.33333%}.el-col-xs-3{flex:0 0 12.5%;max-width:12.5%;display:block}.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{position:relative;left:12.5%}.el-col-xs-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-xs-4.is-guttered{display:block}.el-col-xs-offset-4{margin-left:16.6667%}.el-col-xs-pull-4{position:relative;right:16.6667%}.el-col-xs-push-4{position:relative;left:16.6667%}.el-col-xs-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-xs-5.is-guttered{display:block}.el-col-xs-offset-5{margin-left:20.8333%}.el-col-xs-pull-5{position:relative;right:20.8333%}.el-col-xs-push-5{position:relative;left:20.8333%}.el-col-xs-6{flex:0 0 25%;max-width:25%;display:block}.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{position:relative;left:25%}.el-col-xs-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-xs-7.is-guttered{display:block}.el-col-xs-offset-7{margin-left:29.1667%}.el-col-xs-pull-7{position:relative;right:29.1667%}.el-col-xs-push-7{position:relative;left:29.1667%}.el-col-xs-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-xs-8.is-guttered{display:block}.el-col-xs-offset-8{margin-left:33.3333%}.el-col-xs-pull-8{position:relative;right:33.3333%}.el-col-xs-push-8{position:relative;left:33.3333%}.el-col-xs-9{flex:0 0 37.5%;max-width:37.5%;display:block}.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{position:relative;left:37.5%}.el-col-xs-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-xs-10.is-guttered{display:block}.el-col-xs-offset-10{margin-left:41.6667%}.el-col-xs-pull-10{position:relative;right:41.6667%}.el-col-xs-push-10{position:relative;left:41.6667%}.el-col-xs-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-xs-11.is-guttered{display:block}.el-col-xs-offset-11{margin-left:45.8333%}.el-col-xs-pull-11{position:relative;right:45.8333%}.el-col-xs-push-11{position:relative;left:45.8333%}.el-col-xs-12{flex:0 0 50%;max-width:50%;display:block}.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{position:relative;left:50%}.el-col-xs-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-xs-13.is-guttered{display:block}.el-col-xs-offset-13{margin-left:54.1667%}.el-col-xs-pull-13{position:relative;right:54.1667%}.el-col-xs-push-13{position:relative;left:54.1667%}.el-col-xs-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-xs-14.is-guttered{display:block}.el-col-xs-offset-14{margin-left:58.3333%}.el-col-xs-pull-14{position:relative;right:58.3333%}.el-col-xs-push-14{position:relative;left:58.3333%}.el-col-xs-15{flex:0 0 62.5%;max-width:62.5%;display:block}.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{position:relative;left:62.5%}.el-col-xs-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-xs-16.is-guttered{display:block}.el-col-xs-offset-16{margin-left:66.6667%}.el-col-xs-pull-16{position:relative;right:66.6667%}.el-col-xs-push-16{position:relative;left:66.6667%}.el-col-xs-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-xs-17.is-guttered{display:block}.el-col-xs-offset-17{margin-left:70.8333%}.el-col-xs-pull-17{position:relative;right:70.8333%}.el-col-xs-push-17{position:relative;left:70.8333%}.el-col-xs-18{flex:0 0 75%;max-width:75%;display:block}.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{position:relative;left:75%}.el-col-xs-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-xs-19.is-guttered{display:block}.el-col-xs-offset-19{margin-left:79.1667%}.el-col-xs-pull-19{position:relative;right:79.1667%}.el-col-xs-push-19{position:relative;left:79.1667%}.el-col-xs-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-xs-20.is-guttered{display:block}.el-col-xs-offset-20{margin-left:83.3333%}.el-col-xs-pull-20{position:relative;right:83.3333%}.el-col-xs-push-20{position:relative;left:83.3333%}.el-col-xs-21{flex:0 0 87.5%;max-width:87.5%;display:block}.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{position:relative;left:87.5%}.el-col-xs-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-xs-22.is-guttered{display:block}.el-col-xs-offset-22{margin-left:91.6667%}.el-col-xs-pull-22{position:relative;right:91.6667%}.el-col-xs-push-22{position:relative;left:91.6667%}.el-col-xs-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-xs-23.is-guttered{display:block}.el-col-xs-offset-23{margin-left:95.8333%}.el-col-xs-pull-23{position:relative;right:95.8333%}.el-col-xs-push-23{position:relative;left:95.8333%}.el-col-xs-24{flex:0 0 100%;max-width:100%;display:block}.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{position:relative;left:100%}}@media only screen and (min-width:768px){.el-col-sm-0{flex:0 0;max-width:0%;display:none}.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{position:relative;left:0%}.el-col-sm-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-sm-1.is-guttered{display:block}.el-col-sm-offset-1{margin-left:4.16667%}.el-col-sm-pull-1{position:relative;right:4.16667%}.el-col-sm-push-1{position:relative;left:4.16667%}.el-col-sm-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-sm-2.is-guttered{display:block}.el-col-sm-offset-2{margin-left:8.33333%}.el-col-sm-pull-2{position:relative;right:8.33333%}.el-col-sm-push-2{position:relative;left:8.33333%}.el-col-sm-3{flex:0 0 12.5%;max-width:12.5%;display:block}.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{position:relative;left:12.5%}.el-col-sm-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-sm-4.is-guttered{display:block}.el-col-sm-offset-4{margin-left:16.6667%}.el-col-sm-pull-4{position:relative;right:16.6667%}.el-col-sm-push-4{position:relative;left:16.6667%}.el-col-sm-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-sm-5.is-guttered{display:block}.el-col-sm-offset-5{margin-left:20.8333%}.el-col-sm-pull-5{position:relative;right:20.8333%}.el-col-sm-push-5{position:relative;left:20.8333%}.el-col-sm-6{flex:0 0 25%;max-width:25%;display:block}.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{position:relative;left:25%}.el-col-sm-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-sm-7.is-guttered{display:block}.el-col-sm-offset-7{margin-left:29.1667%}.el-col-sm-pull-7{position:relative;right:29.1667%}.el-col-sm-push-7{position:relative;left:29.1667%}.el-col-sm-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-sm-8.is-guttered{display:block}.el-col-sm-offset-8{margin-left:33.3333%}.el-col-sm-pull-8{position:relative;right:33.3333%}.el-col-sm-push-8{position:relative;left:33.3333%}.el-col-sm-9{flex:0 0 37.5%;max-width:37.5%;display:block}.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{position:relative;left:37.5%}.el-col-sm-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-sm-10.is-guttered{display:block}.el-col-sm-offset-10{margin-left:41.6667%}.el-col-sm-pull-10{position:relative;right:41.6667%}.el-col-sm-push-10{position:relative;left:41.6667%}.el-col-sm-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-sm-11.is-guttered{display:block}.el-col-sm-offset-11{margin-left:45.8333%}.el-col-sm-pull-11{position:relative;right:45.8333%}.el-col-sm-push-11{position:relative;left:45.8333%}.el-col-sm-12{flex:0 0 50%;max-width:50%;display:block}.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{position:relative;left:50%}.el-col-sm-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-sm-13.is-guttered{display:block}.el-col-sm-offset-13{margin-left:54.1667%}.el-col-sm-pull-13{position:relative;right:54.1667%}.el-col-sm-push-13{position:relative;left:54.1667%}.el-col-sm-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-sm-14.is-guttered{display:block}.el-col-sm-offset-14{margin-left:58.3333%}.el-col-sm-pull-14{position:relative;right:58.3333%}.el-col-sm-push-14{position:relative;left:58.3333%}.el-col-sm-15{flex:0 0 62.5%;max-width:62.5%;display:block}.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{position:relative;left:62.5%}.el-col-sm-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-sm-16.is-guttered{display:block}.el-col-sm-offset-16{margin-left:66.6667%}.el-col-sm-pull-16{position:relative;right:66.6667%}.el-col-sm-push-16{position:relative;left:66.6667%}.el-col-sm-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-sm-17.is-guttered{display:block}.el-col-sm-offset-17{margin-left:70.8333%}.el-col-sm-pull-17{position:relative;right:70.8333%}.el-col-sm-push-17{position:relative;left:70.8333%}.el-col-sm-18{flex:0 0 75%;max-width:75%;display:block}.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{position:relative;left:75%}.el-col-sm-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-sm-19.is-guttered{display:block}.el-col-sm-offset-19{margin-left:79.1667%}.el-col-sm-pull-19{position:relative;right:79.1667%}.el-col-sm-push-19{position:relative;left:79.1667%}.el-col-sm-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-sm-20.is-guttered{display:block}.el-col-sm-offset-20{margin-left:83.3333%}.el-col-sm-pull-20{position:relative;right:83.3333%}.el-col-sm-push-20{position:relative;left:83.3333%}.el-col-sm-21{flex:0 0 87.5%;max-width:87.5%;display:block}.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{position:relative;left:87.5%}.el-col-sm-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-sm-22.is-guttered{display:block}.el-col-sm-offset-22{margin-left:91.6667%}.el-col-sm-pull-22{position:relative;right:91.6667%}.el-col-sm-push-22{position:relative;left:91.6667%}.el-col-sm-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-sm-23.is-guttered{display:block}.el-col-sm-offset-23{margin-left:95.8333%}.el-col-sm-pull-23{position:relative;right:95.8333%}.el-col-sm-push-23{position:relative;left:95.8333%}.el-col-sm-24{flex:0 0 100%;max-width:100%;display:block}.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{position:relative;left:100%}}@media only screen and (min-width:992px){.el-col-md-0{flex:0 0;max-width:0%;display:none}.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{position:relative;left:0%}.el-col-md-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-md-1.is-guttered{display:block}.el-col-md-offset-1{margin-left:4.16667%}.el-col-md-pull-1{position:relative;right:4.16667%}.el-col-md-push-1{position:relative;left:4.16667%}.el-col-md-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-md-2.is-guttered{display:block}.el-col-md-offset-2{margin-left:8.33333%}.el-col-md-pull-2{position:relative;right:8.33333%}.el-col-md-push-2{position:relative;left:8.33333%}.el-col-md-3{flex:0 0 12.5%;max-width:12.5%;display:block}.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{position:relative;left:12.5%}.el-col-md-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-md-4.is-guttered{display:block}.el-col-md-offset-4{margin-left:16.6667%}.el-col-md-pull-4{position:relative;right:16.6667%}.el-col-md-push-4{position:relative;left:16.6667%}.el-col-md-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-md-5.is-guttered{display:block}.el-col-md-offset-5{margin-left:20.8333%}.el-col-md-pull-5{position:relative;right:20.8333%}.el-col-md-push-5{position:relative;left:20.8333%}.el-col-md-6{flex:0 0 25%;max-width:25%;display:block}.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{position:relative;left:25%}.el-col-md-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-md-7.is-guttered{display:block}.el-col-md-offset-7{margin-left:29.1667%}.el-col-md-pull-7{position:relative;right:29.1667%}.el-col-md-push-7{position:relative;left:29.1667%}.el-col-md-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-md-8.is-guttered{display:block}.el-col-md-offset-8{margin-left:33.3333%}.el-col-md-pull-8{position:relative;right:33.3333%}.el-col-md-push-8{position:relative;left:33.3333%}.el-col-md-9{flex:0 0 37.5%;max-width:37.5%;display:block}.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{position:relative;left:37.5%}.el-col-md-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-md-10.is-guttered{display:block}.el-col-md-offset-10{margin-left:41.6667%}.el-col-md-pull-10{position:relative;right:41.6667%}.el-col-md-push-10{position:relative;left:41.6667%}.el-col-md-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-md-11.is-guttered{display:block}.el-col-md-offset-11{margin-left:45.8333%}.el-col-md-pull-11{position:relative;right:45.8333%}.el-col-md-push-11{position:relative;left:45.8333%}.el-col-md-12{flex:0 0 50%;max-width:50%;display:block}.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{position:relative;left:50%}.el-col-md-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-md-13.is-guttered{display:block}.el-col-md-offset-13{margin-left:54.1667%}.el-col-md-pull-13{position:relative;right:54.1667%}.el-col-md-push-13{position:relative;left:54.1667%}.el-col-md-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-md-14.is-guttered{display:block}.el-col-md-offset-14{margin-left:58.3333%}.el-col-md-pull-14{position:relative;right:58.3333%}.el-col-md-push-14{position:relative;left:58.3333%}.el-col-md-15{flex:0 0 62.5%;max-width:62.5%;display:block}.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{position:relative;left:62.5%}.el-col-md-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-md-16.is-guttered{display:block}.el-col-md-offset-16{margin-left:66.6667%}.el-col-md-pull-16{position:relative;right:66.6667%}.el-col-md-push-16{position:relative;left:66.6667%}.el-col-md-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-md-17.is-guttered{display:block}.el-col-md-offset-17{margin-left:70.8333%}.el-col-md-pull-17{position:relative;right:70.8333%}.el-col-md-push-17{position:relative;left:70.8333%}.el-col-md-18{flex:0 0 75%;max-width:75%;display:block}.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{position:relative;left:75%}.el-col-md-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-md-19.is-guttered{display:block}.el-col-md-offset-19{margin-left:79.1667%}.el-col-md-pull-19{position:relative;right:79.1667%}.el-col-md-push-19{position:relative;left:79.1667%}.el-col-md-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-md-20.is-guttered{display:block}.el-col-md-offset-20{margin-left:83.3333%}.el-col-md-pull-20{position:relative;right:83.3333%}.el-col-md-push-20{position:relative;left:83.3333%}.el-col-md-21{flex:0 0 87.5%;max-width:87.5%;display:block}.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{position:relative;left:87.5%}.el-col-md-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-md-22.is-guttered{display:block}.el-col-md-offset-22{margin-left:91.6667%}.el-col-md-pull-22{position:relative;right:91.6667%}.el-col-md-push-22{position:relative;left:91.6667%}.el-col-md-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-md-23.is-guttered{display:block}.el-col-md-offset-23{margin-left:95.8333%}.el-col-md-pull-23{position:relative;right:95.8333%}.el-col-md-push-23{position:relative;left:95.8333%}.el-col-md-24{flex:0 0 100%;max-width:100%;display:block}.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{position:relative;left:100%}}@media only screen and (min-width:1200px){.el-col-lg-0{flex:0 0;max-width:0%;display:none}.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{position:relative;left:0%}.el-col-lg-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-lg-1.is-guttered{display:block}.el-col-lg-offset-1{margin-left:4.16667%}.el-col-lg-pull-1{position:relative;right:4.16667%}.el-col-lg-push-1{position:relative;left:4.16667%}.el-col-lg-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-lg-2.is-guttered{display:block}.el-col-lg-offset-2{margin-left:8.33333%}.el-col-lg-pull-2{position:relative;right:8.33333%}.el-col-lg-push-2{position:relative;left:8.33333%}.el-col-lg-3{flex:0 0 12.5%;max-width:12.5%;display:block}.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{position:relative;left:12.5%}.el-col-lg-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-lg-4.is-guttered{display:block}.el-col-lg-offset-4{margin-left:16.6667%}.el-col-lg-pull-4{position:relative;right:16.6667%}.el-col-lg-push-4{position:relative;left:16.6667%}.el-col-lg-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-lg-5.is-guttered{display:block}.el-col-lg-offset-5{margin-left:20.8333%}.el-col-lg-pull-5{position:relative;right:20.8333%}.el-col-lg-push-5{position:relative;left:20.8333%}.el-col-lg-6{flex:0 0 25%;max-width:25%;display:block}.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{position:relative;left:25%}.el-col-lg-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-lg-7.is-guttered{display:block}.el-col-lg-offset-7{margin-left:29.1667%}.el-col-lg-pull-7{position:relative;right:29.1667%}.el-col-lg-push-7{position:relative;left:29.1667%}.el-col-lg-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-lg-8.is-guttered{display:block}.el-col-lg-offset-8{margin-left:33.3333%}.el-col-lg-pull-8{position:relative;right:33.3333%}.el-col-lg-push-8{position:relative;left:33.3333%}.el-col-lg-9{flex:0 0 37.5%;max-width:37.5%;display:block}.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{position:relative;left:37.5%}.el-col-lg-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-lg-10.is-guttered{display:block}.el-col-lg-offset-10{margin-left:41.6667%}.el-col-lg-pull-10{position:relative;right:41.6667%}.el-col-lg-push-10{position:relative;left:41.6667%}.el-col-lg-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-lg-11.is-guttered{display:block}.el-col-lg-offset-11{margin-left:45.8333%}.el-col-lg-pull-11{position:relative;right:45.8333%}.el-col-lg-push-11{position:relative;left:45.8333%}.el-col-lg-12{flex:0 0 50%;max-width:50%;display:block}.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{position:relative;left:50%}.el-col-lg-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-lg-13.is-guttered{display:block}.el-col-lg-offset-13{margin-left:54.1667%}.el-col-lg-pull-13{position:relative;right:54.1667%}.el-col-lg-push-13{position:relative;left:54.1667%}.el-col-lg-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-lg-14.is-guttered{display:block}.el-col-lg-offset-14{margin-left:58.3333%}.el-col-lg-pull-14{position:relative;right:58.3333%}.el-col-lg-push-14{position:relative;left:58.3333%}.el-col-lg-15{flex:0 0 62.5%;max-width:62.5%;display:block}.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{position:relative;left:62.5%}.el-col-lg-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-lg-16.is-guttered{display:block}.el-col-lg-offset-16{margin-left:66.6667%}.el-col-lg-pull-16{position:relative;right:66.6667%}.el-col-lg-push-16{position:relative;left:66.6667%}.el-col-lg-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-lg-17.is-guttered{display:block}.el-col-lg-offset-17{margin-left:70.8333%}.el-col-lg-pull-17{position:relative;right:70.8333%}.el-col-lg-push-17{position:relative;left:70.8333%}.el-col-lg-18{flex:0 0 75%;max-width:75%;display:block}.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{position:relative;left:75%}.el-col-lg-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-lg-19.is-guttered{display:block}.el-col-lg-offset-19{margin-left:79.1667%}.el-col-lg-pull-19{position:relative;right:79.1667%}.el-col-lg-push-19{position:relative;left:79.1667%}.el-col-lg-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-lg-20.is-guttered{display:block}.el-col-lg-offset-20{margin-left:83.3333%}.el-col-lg-pull-20{position:relative;right:83.3333%}.el-col-lg-push-20{position:relative;left:83.3333%}.el-col-lg-21{flex:0 0 87.5%;max-width:87.5%;display:block}.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{position:relative;left:87.5%}.el-col-lg-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-lg-22.is-guttered{display:block}.el-col-lg-offset-22{margin-left:91.6667%}.el-col-lg-pull-22{position:relative;right:91.6667%}.el-col-lg-push-22{position:relative;left:91.6667%}.el-col-lg-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-lg-23.is-guttered{display:block}.el-col-lg-offset-23{margin-left:95.8333%}.el-col-lg-pull-23{position:relative;right:95.8333%}.el-col-lg-push-23{position:relative;left:95.8333%}.el-col-lg-24{flex:0 0 100%;max-width:100%;display:block}.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{position:relative;left:100%}}@media only screen and (min-width:1920px){.el-col-xl-0{flex:0 0;max-width:0%;display:none}.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{position:relative;left:0%}.el-col-xl-1{flex:0 0 4.16667%;max-width:4.16667%;display:block}.el-col-xl-1.is-guttered{display:block}.el-col-xl-offset-1{margin-left:4.16667%}.el-col-xl-pull-1{position:relative;right:4.16667%}.el-col-xl-push-1{position:relative;left:4.16667%}.el-col-xl-2{flex:0 0 8.33333%;max-width:8.33333%;display:block}.el-col-xl-2.is-guttered{display:block}.el-col-xl-offset-2{margin-left:8.33333%}.el-col-xl-pull-2{position:relative;right:8.33333%}.el-col-xl-push-2{position:relative;left:8.33333%}.el-col-xl-3{flex:0 0 12.5%;max-width:12.5%;display:block}.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{position:relative;left:12.5%}.el-col-xl-4{flex:0 0 16.6667%;max-width:16.6667%;display:block}.el-col-xl-4.is-guttered{display:block}.el-col-xl-offset-4{margin-left:16.6667%}.el-col-xl-pull-4{position:relative;right:16.6667%}.el-col-xl-push-4{position:relative;left:16.6667%}.el-col-xl-5{flex:0 0 20.8333%;max-width:20.8333%;display:block}.el-col-xl-5.is-guttered{display:block}.el-col-xl-offset-5{margin-left:20.8333%}.el-col-xl-pull-5{position:relative;right:20.8333%}.el-col-xl-push-5{position:relative;left:20.8333%}.el-col-xl-6{flex:0 0 25%;max-width:25%;display:block}.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{position:relative;left:25%}.el-col-xl-7{flex:0 0 29.1667%;max-width:29.1667%;display:block}.el-col-xl-7.is-guttered{display:block}.el-col-xl-offset-7{margin-left:29.1667%}.el-col-xl-pull-7{position:relative;right:29.1667%}.el-col-xl-push-7{position:relative;left:29.1667%}.el-col-xl-8{flex:0 0 33.3333%;max-width:33.3333%;display:block}.el-col-xl-8.is-guttered{display:block}.el-col-xl-offset-8{margin-left:33.3333%}.el-col-xl-pull-8{position:relative;right:33.3333%}.el-col-xl-push-8{position:relative;left:33.3333%}.el-col-xl-9{flex:0 0 37.5%;max-width:37.5%;display:block}.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{position:relative;left:37.5%}.el-col-xl-10{flex:0 0 41.6667%;max-width:41.6667%;display:block}.el-col-xl-10.is-guttered{display:block}.el-col-xl-offset-10{margin-left:41.6667%}.el-col-xl-pull-10{position:relative;right:41.6667%}.el-col-xl-push-10{position:relative;left:41.6667%}.el-col-xl-11{flex:0 0 45.8333%;max-width:45.8333%;display:block}.el-col-xl-11.is-guttered{display:block}.el-col-xl-offset-11{margin-left:45.8333%}.el-col-xl-pull-11{position:relative;right:45.8333%}.el-col-xl-push-11{position:relative;left:45.8333%}.el-col-xl-12{flex:0 0 50%;max-width:50%;display:block}.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{position:relative;left:50%}.el-col-xl-13{flex:0 0 54.1667%;max-width:54.1667%;display:block}.el-col-xl-13.is-guttered{display:block}.el-col-xl-offset-13{margin-left:54.1667%}.el-col-xl-pull-13{position:relative;right:54.1667%}.el-col-xl-push-13{position:relative;left:54.1667%}.el-col-xl-14{flex:0 0 58.3333%;max-width:58.3333%;display:block}.el-col-xl-14.is-guttered{display:block}.el-col-xl-offset-14{margin-left:58.3333%}.el-col-xl-pull-14{position:relative;right:58.3333%}.el-col-xl-push-14{position:relative;left:58.3333%}.el-col-xl-15{flex:0 0 62.5%;max-width:62.5%;display:block}.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{position:relative;left:62.5%}.el-col-xl-16{flex:0 0 66.6667%;max-width:66.6667%;display:block}.el-col-xl-16.is-guttered{display:block}.el-col-xl-offset-16{margin-left:66.6667%}.el-col-xl-pull-16{position:relative;right:66.6667%}.el-col-xl-push-16{position:relative;left:66.6667%}.el-col-xl-17{flex:0 0 70.8333%;max-width:70.8333%;display:block}.el-col-xl-17.is-guttered{display:block}.el-col-xl-offset-17{margin-left:70.8333%}.el-col-xl-pull-17{position:relative;right:70.8333%}.el-col-xl-push-17{position:relative;left:70.8333%}.el-col-xl-18{flex:0 0 75%;max-width:75%;display:block}.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{position:relative;left:75%}.el-col-xl-19{flex:0 0 79.1667%;max-width:79.1667%;display:block}.el-col-xl-19.is-guttered{display:block}.el-col-xl-offset-19{margin-left:79.1667%}.el-col-xl-pull-19{position:relative;right:79.1667%}.el-col-xl-push-19{position:relative;left:79.1667%}.el-col-xl-20{flex:0 0 83.3333%;max-width:83.3333%;display:block}.el-col-xl-20.is-guttered{display:block}.el-col-xl-offset-20{margin-left:83.3333%}.el-col-xl-pull-20{position:relative;right:83.3333%}.el-col-xl-push-20{position:relative;left:83.3333%}.el-col-xl-21{flex:0 0 87.5%;max-width:87.5%;display:block}.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{position:relative;left:87.5%}.el-col-xl-22{flex:0 0 91.6667%;max-width:91.6667%;display:block}.el-col-xl-22.is-guttered{display:block}.el-col-xl-offset-22{margin-left:91.6667%}.el-col-xl-pull-22{position:relative;right:91.6667%}.el-col-xl-push-22{position:relative;left:91.6667%}.el-col-xl-23{flex:0 0 95.8333%;max-width:95.8333%;display:block}.el-col-xl-23.is-guttered{display:block}.el-col-xl-offset-23{margin-left:95.8333%}.el-col-xl-pull-23{position:relative;right:95.8333%}.el-col-xl-push-23{position:relative;left:95.8333%}.el-col-xl-24{flex:0 0 100%;max-width:100%;display:block}.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{position:relative;left:100%}}.el-collapse-item.is-disabled .el-collapse-item__header{color:var(--el-text-color-disabled);cursor:not-allowed}.el-collapse-item__header{width:100%;min-height:var(--el-collapse-header-height);line-height:var(--el-collapse-header-height);background-color:var(--el-collapse-header-bg-color);color:var(--el-collapse-header-text-color);cursor:pointer;border:none;border-bottom:1px solid var(--el-collapse-border-color);font-size:var(--el-collapse-header-font-size);transition:border-bottom-color var(--el-transition-duration);box-sizing:border-box;outline:none;align-items:center;padding:0;font-weight:500;display:flex}.el-collapse-item__arrow{transition:transform var(--el-transition-duration);font-weight:300}.el-collapse-item__arrow.is-active{transform:rotate(90deg)}.el-collapse-item__title{text-align:left;flex:auto}.el-collapse-item__header.focusing:focus:not(:hover){color:var(--el-color-primary)}.el-collapse-item__header.is-active{border-bottom-color:#0000}.el-collapse-item__wrap{will-change:height;background-color:var(--el-collapse-content-bg-color);box-sizing:border-box;border-bottom:1px solid var(--el-collapse-border-color);overflow:hidden}.el-collapse-item__content{font-size:var(--el-collapse-content-font-size);color:var(--el-collapse-content-text-color);padding-bottom:25px;line-height:1.76923}.el-collapse-item:last-child{margin-bottom:-1px}.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-top:1px solid var(--el-collapse-border-color);border-bottom:1px solid var(--el-collapse-border-color)}.el-collapse-icon-position-left .el-collapse-item__header{gap:8px}.el-collapse-icon-position-left .el-collapse-item__title{order:1}.el-collapse-icon-position-right .el-collapse-item__header{padding-right:8px}.el-color-picker-panel{--el-colorpicker-bg-color:var(--el-bg-color-overlay);--el-fill-color-blank:var(--el-colorpicker-bg-color);box-sizing:content-box;background:var(--el-colorpicker-bg-color);width:300px;padding:12px}.el-color-picker-panel.is-border{border:solid 1px var(--el-border-color-lighter);border-radius:4px}.el-color-picker-panel__wrapper{margin-bottom:6px}.el-color-picker-panel__footer{text-align:right;justify-content:space-between;margin-top:12px;display:flex}.el-color-picker-panel__footer .el-input{color:#000;width:160px;font-size:12px;line-height:26px}.el-color-picker-panel.is-disabled .el-color-svpanel,.el-color-picker-panel.is-disabled .el-color-hue-slider{cursor:not-allowed;opacity:.3}.el-color-picker-panel.is-disabled .el-color-hue-slider__thumb{cursor:not-allowed}.el-color-picker-panel.is-disabled .el-color-alpha-slider,.el-color-picker-panel.is-disabled .el-color-predefine .el-color-predefine__color-selector{cursor:not-allowed;opacity:.3}.el-color-predefine{width:280px;margin-top:8px;font-size:12px;display:flex}.el-color-predefine__colors{flex-wrap:wrap;flex:1;gap:8px;display:flex}.el-color-predefine__color-selector{border-radius:var(--el-border-radius-base);cursor:pointer;border:none;outline:none;width:20px;height:20px;padding:0;overflow:hidden}.el-color-predefine__color-selector.selected{box-shadow:0 0 3px 2px var(--el-color-primary)}.el-color-predefine__color-selector:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-color-predefine__color-selector>div{height:100%;display:flex}.el-color-predefine__color-selector.is-alpha{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAwAAAAMCAIAAADZF8uwAAAAGUlEQVQYV2M4gwH+YwCGIasIUwhT25BVBADtzYNYrHvv4gAAAABJRU5ErkJggg==)}.el-color-hue-slider{box-sizing:border-box;float:right;background-color:red;width:280px;height:12px;padding:0 2px;position:relative}.el-color-hue-slider__bar{background:linear-gradient(90deg,red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red);height:100%;position:relative}.el-color-hue-slider__thumb{cursor:pointer;box-sizing:border-box;border:1px solid var(--el-border-color-lighter);z-index:1;background:#fff;border-radius:1px;width:4px;height:100%;position:absolute;top:0;left:0;box-shadow:0 0 2px #0009}.el-color-hue-slider__thumb:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-hue-slider.is-vertical{width:12px;height:180px;padding:2px 0}.el-color-hue-slider.is-vertical .el-color-hue-slider__bar{background:linear-gradient(red,#ff0 17%,#0f0 33%,#0ff,#00f 67%,#f0f 83%,red)}.el-color-hue-slider.is-vertical .el-color-hue-slider__thumb{width:100%;height:4px;top:0;left:0}.el-color-svpanel{background-image:linear-gradient(#0000,#000),linear-gradient(90deg,#fff,#fff0);width:280px;height:180px;position:relative}.el-color-svpanel__cursor{cursor:pointer;border-radius:50%;width:4px;height:4px;position:absolute;transform:translate(-2px,-2px);box-shadow:0 0 0 1.5px #fff,inset 0 0 1px 1px #0000004d,0 0 1px 2px #0006}.el-color-svpanel__cursor:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-color-alpha-slider{box-sizing:border-box;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;width:280px;height:12px;position:relative}.el-color-alpha-slider.is-disabled .el-color-alpha-slider__thumb{cursor:not-allowed}.el-color-alpha-slider__bar{background:linear-gradient(to right,#fff0 0%,var(--el-bg-color) 100%);height:100%;position:relative}.el-color-alpha-slider__thumb{cursor:pointer;box-sizing:border-box;border:1px solid var(--el-border-color-lighter);z-index:1;background:#fff;border-radius:1px;width:4px;height:100%;position:absolute;top:0;left:0;box-shadow:0 0 2px #0009}.el-color-alpha-slider__thumb:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:1px}.el-color-alpha-slider.is-vertical{width:20px;height:180px}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__bar{background:linear-gradient(#fff0,#fff)}.el-color-alpha-slider.is-vertical .el-color-alpha-slider__thumb{width:100%;height:4px;top:0;left:0}.el-color-picker-panel{--el-color-picker-alpha-bg-a:#ccc;--el-color-picker-alpha-bg-b:transparent}.dark .el-color-picker-panel{--el-color-picker-alpha-bg-a:#333}.el-color-picker{outline:none;width:32px;height:32px;line-height:normal;display:inline-block;position:relative}.el-color-picker:hover:not(:-webkit-any(.is-disabled,.is-focused)) .el-color-picker__trigger{border-color:var(--el-border-color-hover)}.el-color-picker:hover:not(:is(.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 .el-color-picker__trigger{cursor:not-allowed;background-color:var(--el-fill-color-light)}.el-color-picker.is-disabled .el-color-picker__color{opacity:.3}.el-color-picker--large{width:40px;height:40px}.el-color-picker--small{width:24px;height:24px}.el-color-picker--small .el-color-picker__icon,.el-color-picker--small .el-color-picker__empty{transform:scale(.8)}.el-color-picker__trigger{box-sizing:border-box;border:1px solid var(--el-border-color);cursor:pointer;border-radius:4px;justify-content:center;align-items:center;width:100%;height:100%;padding:4px;font-size:0;display:inline-flex;position:relative}.el-color-picker__color{box-sizing:border-box;border:1px solid var(--el-text-color-secondary);border-radius:var(--el-border-radius-small);text-align:center;width:100%;height:100%;display:block;position:relative}.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{justify-content:center;align-items:center;width:100%;height:100%;display:inline-flex}.el-color-picker .el-color-picker__empty{color:var(--el-text-color-secondary);font-size:12px}.el-color-picker .el-color-picker__icon{color:#fff;justify-content:center;align-items:center;font-size:12px;display:inline-flex}.el-color-picker__panel{border-radius:var(--el-border-radius-base);box-shadow:var(--el-box-shadow-light);background-color:#fff}.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:#333}.el-container{box-sizing:border-box;flex-direction:row;flex:auto;min-width:0;display:flex}.el-container.is-vertical{flex-direction:column}.el-date-table{-webkit-user-select:none;user-select:none;font-size:12px}.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-top-left-radius:15px;border-bottom-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-top-right-radius:15px;border-bottom-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;text-align:center;cursor:pointer;width:32px;height:30px;padding:4px 0;position:relative}.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%;width:24px;height:24px;margin:0 auto;line-height:24px;display:block;position:absolute;left:50%;transform:translate(-50%)}.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:700}.el-date-table td.today.start-date .el-date-table-cell__text,.el-date-table td.today.end-date .el-date-table-cell__text{color:#fff}.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{color:#fff;background-color:var(--el-datepicker-active-color)}.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.start-date .el-date-table-cell,.el-date-table td.end-date .el-date-table-cell{color:#fff}.el-date-table td.start-date .el-date-table-cell__text,.el-date-table td.end-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{border-top-left-radius:15px;border-bottom-left-radius:15px;margin-left:5px}.el-date-table td.end-date .el-date-table-cell{border-top-right-radius:15px;border-bottom-right-radius:15px;margin-right:5px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);opacity:1;cursor:not-allowed;color:var(--el-text-color-placeholder)}.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);color:#fff;border-radius:15px}.el-date-table td.week{color:var(--el-datepicker-off-text-color);cursor:default;font-size:80%}.el-date-table td:focus{outline:none}.el-date-table th{color:var(--el-datepicker-header-text-color);border-bottom:solid 1px var(--el-border-color-lighter);padding:5px;font-weight:400}.el-date-table th.el-date-table__week-header{width:24px;padding:0}.el-month-table{border-collapse:collapse;margin:-1px;font-size:12px}.el-month-table td{text-align:center;cursor:pointer;width:68px;padding:8px 0;position:relative}.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:700}.el-month-table td.today.start-date .el-date-table-cell__text,.el-month-table td.today.end-date .el-date-table-cell__text{color:#fff}.el-month-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.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{width:54px;height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto;line-height:36px;display:block;position:absolute;left:50%;transform:translate(-50%)}.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.start-date .el-date-table-cell,.el-month-table td.end-date .el-date-table-cell{color:#fff}.el-month-table td.start-date .el-date-table-cell__text,.el-month-table td.end-date .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-month-table td.start-date .el-date-table-cell{border-top-left-radius:24px;border-bottom-left-radius:24px;margin-left:3px}.el-month-table td.end-date .el-date-table-cell{border-top-right-radius:24px;border-bottom-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{color:#fff;background-color:var(--el-datepicker-active-color)}.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;margin:-1px;font-size:12px}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{text-align:center;cursor:pointer;width:68px;padding:8px 0;position:relative}.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:700}.el-year-table td.today.start-date .el-date-table-cell__text,.el-year-table td.today.end-date .el-date-table-cell__text{color:#fff}.el-year-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.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{width:60px;height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto;line-height:36px;display:block;position:absolute;left:50%;transform:translate(-50%)}.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.start-date .el-date-table-cell,.el-year-table td.end-date .el-date-table-cell{color:#fff}.el-year-table td.start-date .el-date-table-cell__text,.el-year-table td.end-date .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-year-table td.start-date .el-date-table-cell{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-year-table td.end-date .el-date-table-cell{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-year-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.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{vertical-align:top;width:50%;max-height:192px;display:inline-block;position:relative;overflow:auto}.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;text-align:center;overflow:hidden}.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);width:100%;z-index:var(--el-index-normal);text-align:center;cursor:pointer;height:30px;font-size:12px;line-height:30px;position:absolute;left:0}.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{text-align:center;padding:0}.el-time-spinner__list{text-align:center;margin:0;padding:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";width:100%;height:80px;display:block}.el-time-spinner__item{height:32px;color:var(--el-text-color-regular);font-size:12px;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:700}.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);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light)}.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-top-color:#0000;border-left-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.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%;text-align:left;vertical-align:middle;position:relative}.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.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{width:var(--el-date-editor-width);height:var(--el-input-height,var(--el-component-size))}.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 .close-icon,.el-date-editor .clear-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-input-clear-hover-color)}.el-date-editor .el-range__icon{height:inherit;color:var(--el-text-color-placeholder);float:left;font-size:14px}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;text-align:center;width:39%;height:30px;line-height:30px;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);background-color:#0000;border:none;outline:none;margin:0;padding:0;display:inline-block}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{overflow-wrap:break-word;height:100%;color:var(--el-text-color-primary);flex:1;justify-content:center;align-items:center;margin:0;padding:0 5px;font-size:14px;display:inline-flex}.el-date-editor .el-range__close-icon{color:var(--el-text-color-placeholder);height:inherit;width:unset;cursor:pointer;font-size:14px}.el-date-editor .el-range__close-icon:hover{color:var(--el-input-clear-hover-color)}.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{vertical-align:middle;align-items:center;padding:0 10px;display:inline-flex}.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{height:38px;font-size:14px;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{height:22px;font-size:12px;line-height:22px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled:hover,.el-range-editor.is-disabled:focus{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::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{color:var(--el-text-color-regular);background:var(--el-datepicker-bg-color);border-radius:var(--el-popper-border-radius,var(--el-border-radius-base));line-height:30px}.el-picker-panel .el-time-panel{border:solid 1px var(--el-datepicker-border-color);background-color:var(--el-datepicker-bg-color);box-shadow:var(--el-box-shadow-light);margin:5px 0}.el-picker-panel__body:after,.el-picker-panel__body-wrapper:after{content:"";clear:both;display:table}.el-picker-panel__content{margin:15px;position:relative}.el-picker-panel__footer{border-top:1px solid var(--el-datepicker-inner-border-color);text-align:right;background-color:var(--el-datepicker-bg-color);padding:4px 12px;font-size:0;position:relative}.el-picker-panel__shortcut{width:100%;color:var(--el-datepicker-text-color);text-align:left;cursor:pointer;background-color:#0000;border:0;outline:none;padding-left:12px;font-size:14px;line-height:28px;display:block}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{color:var(--el-datepicker-active-color);background-color:#e6f1fe}.el-picker-panel__btn{border:1px solid var(--el-fill-color-darker);color:var(--el-text-color-primary);cursor:pointer;background-color:#0000;border-radius:2px;outline:none;padding:0 20px;font-size:12px;line-height:24px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{color:var(--el-datepicker-icon-color);cursor:pointer;background:0 0;border:0;outline:none;margin-top:8px;padding:1px 6px;font-size:12px;line-height:1}.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.is-disabled .el-icon{cursor:inherit}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel.is-disabled .el-picker-panel__prev-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__prev-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__prev-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__next-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__next-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__next-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__icon-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__icon-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__icon-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__shortcut{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__shortcut:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__shortcut .el-icon{cursor:inherit}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:110px;padding-top:6px;position:absolute;top:0;bottom:0;overflow:auto}.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);--el-datepicker-bg-color:var(--el-bg-color-overlay);--el-fill-color-blank:var(--el-datepicker-bg-color);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{padding:0 5px;display:table-cell;position:relative}.el-date-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:100%;padding:8px 5px 5px;font-size:12px;display:table;position:relative}.el-date-picker__header{text-align:center;padding:12px 12px 0}.el-date-picker__header--bordered{border-bottom:solid 1px 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{text-align:center;cursor:pointer;color:var(--el-text-color-regular);padding:0 5px;font-size:16px;font-weight:500;line-height:22px}.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{text-align:center;padding:10px}.el-date-picker__time-label{float:left;cursor:pointer;margin-left:10px;line-height:30px}.el-date-picker .el-time-panel{position:absolute}.el-date-picker.is-disabled .el-date-picker__header-label{color:var(--el-text-color-disabled)}.el-date-picker.is-disabled .el-date-picker__header-label:hover{cursor:not-allowed}.el-date-picker.is-disabled .el-date-picker__header-label .el-icon{cursor:inherit}.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);--el-datepicker-bg-color:var(--el-bg-color-overlay);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{text-align:center;height:28px;position:relative}.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{margin-right:50px;font-size:16px;font-weight:500}.el-date-range-picker__header-label{text-align:center;cursor:pointer;color:var(--el-text-color-regular);padding:0 5px;font-size:16px;font-weight:500;line-height:22px}.el-date-range-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-range-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-range-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-range-picker__content{box-sizing:border-box;width:50%;margin:0;padding:16px;display:table-cell}.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;width:100%;padding:8px 5px 5px;font-size:12px;display:table;position:relative}.el-date-range-picker__time-header>.el-icon-arrow-right{vertical-align:middle;color:var(--el-datepicker-icon-color);font-size:20px;display:table-cell}.el-date-range-picker__time-picker-wrap{padding:0 5px;display:table-cell;position:relative}.el-date-range-picker__time-picker-wrap .el-picker-panel{z-index:1;background:#fff;position:absolute;top:13px;right:0}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-date-range-picker.is-disabled .el-date-range-picker__header-label{color:var(--el-text-color-disabled)}.el-date-range-picker.is-disabled .el-date-range-picker__header-label:hover{cursor:not-allowed}.el-date-range-picker.is-disabled .el-date-range-picker__header-label .el-icon{cursor:inherit}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{text-align:center;z-index:1;padding:10px;position:relative}.el-time-range-picker__cell{box-sizing:border-box;width:50%;margin:0;padding:4px 7px 7px;display:inline-block}.el-time-range-picker__header{text-align:center;margin-bottom:5px;font-size:14px}.el-time-range-picker__body{border:1px solid var(--el-datepicker-border-color);border-radius:2px}.el-time-panel{width:180px;z-index:var(--el-index-top);-webkit-user-select:none;user-select:none;box-sizing:content-box;border-radius:2px;position:relative;left:0}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";z-index:-1;box-sizing:border-box;text-align:left;height:32px;margin-top:-16px;padding-top:6px;position:absolute;top:50%;left:0;right:0}.el-time-panel__content:after{margin-left:12%;margin-right:12%;left:50%}.el-time-panel__content:before{border-top:1px solid var(--el-border-color-light);border-bottom: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.6667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));text-align:right;box-sizing:border-box;height:36px;padding:4px;line-height:25px}.el-time-panel__btn{cursor:pointer;color:var(--el-text-color-primary);background-color:#0000;border:none;outline:none;margin:0 5px;padding:0 5px;font-size:12px;line-height:28px}.el-time-panel__btn.confirm{color:var(--el-timepicker-active-color,var(--el-color-primary));font-weight:800}.el-picker-panel.is-border{border:solid 1px var(--el-border-color-lighter)}.el-picker-panel.is-border .el-picker-panel__body-wrapper{position:relative}.el-picker-panel.is-border.el-picker-panel [slot=sidebar],.el-picker-panel.is-border.el-picker-panel__sidebar{border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:110px;height:100%;padding-top:6px;position:absolute;top:0;overflow:auto}.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;font-size:var(--el-font-size-base);color:var(--el-text-color-primary)}.el-descriptions__header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.el-descriptions__title{color:var(--el-text-color-primary);font-size:16px;font-weight:700}.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;text-align:left;font-size:14px;line-height:23px}.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{color:var(--el-text-color-regular);background:var(--el-descriptions-item-bordered-label-background);font-weight:700}.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:.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{width:100%;height:100%;opacity:var(--el-popup-modal-opacity);background:var(--el-popup-modal-bg-color);position:fixed;top:0;left:0}.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);margin:var(--el-dialog-margin-top,15vh) auto 50px;background:var(--el-dialog-bg-color);border-radius:var(--el-dialog-border-radius);box-shadow:var(--el-dialog-box-shadow);box-sizing:border-box;padding:var(--el-dialog-padding-primary);width:var(--el-dialog-width,50%);overflow-wrap:break-word;position:relative}.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{margin:0;position:fixed;inset:0;overflow:auto}.el-dialog.is-draggable .el-dialog__header{cursor:move;-webkit-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{cursor:pointer;width:48px;height:48px;font-size:var(--el-message-close-size,16px);background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.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{line-height:var(--el-dialog-font-line-height);font-size:var(--el-dialog-title-font-size);color:var(--el-text-color-primary)}.el-dialog__body{color:var(--el-text-color-regular);font-size:var(--el-dialog-content-font-size)}.el-dialog__footer{padding-top:var(--el-dialog-padding-primary);text-align:right;box-sizing:border-box}.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-modal-dialog.is-penetrable{pointer-events:none}.el-modal-dialog.is-penetrable .el-dialog{pointer-events:auto}.el-overlay-dialog{position:fixed;inset:0;overflow:auto}.el-overlay-dialog.is-closing .el-dialog{pointer-events:none}.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:translateY(-20px)}to{opacity:1;transform:translate(0)}}@keyframes dialog-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translateY(-20px)}}@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);width:100%;height:1px;margin:24px 0;display:block}.el-divider--vertical{vertical-align:middle;border-left:1px var(--el-border-color) var(--el-border-style);width:1px;height:1em;margin:0 8px;display:inline-block;position:relative}.el-divider__text{background-color:var(--el-bg-color);color:var(--el-text-color-primary);padding:0 20px;font-size:14px;font-weight:500;position:absolute}.el-divider__text.is-left{left:20px;transform:translateY(-50%)}.el-divider__text.is-center{left:50%;transform:translate(-50%)translateY(-50%)}.el-divider__text.is-right{right:20px;transform:translateY(-50%)}.el-overlay.is-drawer{overflow:hidden}.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);--el-drawer-dragger-size:8px;box-sizing:border-box;background-color:var(--el-drawer-bg-color);box-shadow:var(--el-box-shadow-dark);transition:all var(--el-transition-duration);flex-direction:column;display:flex;position:absolute}.el-drawer .rtl,.el-drawer .ltr,.el-drawer .ttb,.el-drawer .btt{transform:translate(0)}.el-drawer__sr-focus:focus{outline:none!important}.el-drawer__header{color:var(--el-text-color-primary);padding:var(--el-drawer-padding-primary);align-items:center;margin-bottom:32px;padding-bottom:0;display:flex;overflow:hidden}.el-drawer__header>:first-child{flex:1}.el-drawer__title{line-height:inherit;flex:1;margin:0;font-size:16px}.el-drawer__footer{padding:var(--el-drawer-padding-primary);text-align:right;padding-top:10px;overflow:hidden}.el-drawer__close-btn{cursor:pointer;font-size:var(--el-font-size-extra-large);color:inherit;background-color:#0000;border:none;outline:none;display:inline-flex}.el-drawer__close-btn:focus i,.el-drawer__close-btn:hover i{color:var(--el-color-primary)}.el-drawer__body{padding:var(--el-drawer-padding-primary);flex:1;overflow:auto}.el-drawer__body>*{box-sizing:border-box}.el-drawer.is-dragging{transition:none}.el-drawer__dragger{-webkit-user-select:none;user-select:none;background-color:#0000;transition:all .2s;position:absolute}.el-drawer__dragger:before{content:"";background-color:#0000;transition:all .2s;position:absolute}.el-drawer__dragger:hover:before{background-color:var(--el-color-primary)}.el-drawer.ltr,.el-drawer.rtl{height:100%;top:0;bottom:0}.el-drawer.ltr>.el-drawer__dragger,.el-drawer.rtl>.el-drawer__dragger{height:100%;width:var(--el-drawer-dragger-size);cursor:ew-resize;top:0;bottom:0}.el-drawer.ltr>.el-drawer__dragger:before,.el-drawer.rtl>.el-drawer__dragger:before{width:3px;top:0;bottom:0}.el-drawer.ttb,.el-drawer.btt{width:100%;left:0;right:0}.el-drawer.ttb>.el-drawer__dragger,.el-drawer.btt>.el-drawer__dragger{width:100%;height:var(--el-drawer-dragger-size);cursor:ns-resize;left:0;right:0}.el-drawer.ttb>.el-drawer__dragger:before,.el-drawer.btt>.el-drawer__dragger:before{height:3px;left:0;right:0}.el-drawer.ltr{left:0}.el-drawer.ltr>.el-drawer__dragger{right:0}.el-drawer.ltr>.el-drawer__dragger:before{right:-2px}.el-drawer.rtl{right:0}.el-drawer.rtl>.el-drawer__dragger{left:0}.el-drawer.rtl>.el-drawer__dragger:before{left:-2px}.el-drawer.ttb{top:0}.el-drawer.ttb>.el-drawer__dragger{bottom:0}.el-drawer.ttb>.el-drawer__dragger:before{bottom:-2px}.el-drawer.btt{bottom:0}.el-drawer.btt>.el-drawer__dragger{top:0}.el-drawer.btt>.el-drawer__dragger:before{top:-2px}.el-modal-drawer.is-penetrable{pointer-events:none}.el-modal-drawer.is-penetrable .el-drawer{pointer-events:auto}.el-drawer-fade-enter-active,.el-drawer-fade-leave-active{transition:all var(--el-transition-duration)}.el-drawer-fade-enter-from,.el-drawer-fade-enter-active,.el-drawer-fade-enter-to,.el-drawer-fade-leave-from,.el-drawer-fade-leave-active,.el-drawer-fade-leave-to{overflow:hidden!important}.el-drawer-fade-enter-from,.el-drawer-fade-leave-to{background-color:#0000!important}.el-drawer-fade-enter-from .rtl,.el-drawer-fade-leave-to .rtl{transform:translate(100%)}.el-drawer-fade-enter-from .ltr,.el-drawer-fade-leave-to .ltr{transform:translate(-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);font-size:var(--el-font-size-base);vertical-align:top;line-height:1;display:inline-flex;position:relative}.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);border:1px solid var(--el-border-color-light);box-shadow:var(--el-dropdown-menu-box-shadow)}.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-top-color:#0000;border-left-color:#0000}.el-dropdown__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-dropdown__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-dropdown__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.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;margin:0;padding:0;list-style:none}.el-dropdown .el-dropdown__caret-button{border-left:none;justify-content:center;align-items:center;width:32px;padding-left:0;padding-right:0;display:inline-flex}.el-dropdown .el-dropdown__caret-button>span{display:inline-flex}.el-dropdown .el-dropdown__caret-button:before{content:"";background:var(--el-overlay-color-lighter);width:1px;display:block;position:absolute;top:-1px;bottom:-1px;left:0}.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{z-index:var(--el-dropdown-menu-index);background-color:var(--el-bg-color-overlay);border-radius:var(--el-border-radius-base);box-shadow:none;border:none;margin:0;padding:5px 0;list-style:none;position:relative;top:0;left:0}.el-dropdown-menu__item{white-space:nowrap;line-height:22px;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);cursor:pointer;outline:none;align-items:center;margin:0;padding:5px 16px;list-style:none;display:flex}.el-dropdown-menu__item:not(.is-disabled):hover,.el-dropdown-menu__item:not(.is-disabled):focus{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{cursor:not-allowed;color:var(--el-text-color-disabled)}.el-dropdown-menu--large{padding:7px 0}.el-dropdown-menu--large .el-dropdown-menu__item{padding:7px 20px;font-size:14px;line-height:22px}.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{padding:2px 12px;font-size:12px;line-height:20px}.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;text-align:center;box-sizing:border-box;padding:var(--el-empty-padding);flex-direction:column;justify-content:center;align-items:center;display:flex}.el-empty__image{width:var(--el-empty-image-width)}.el-empty__image img{-webkit-user-select:none;user-select:none;vertical-align:top;object-fit:contain;width:100%;height:100%}.el-empty__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;vertical-align:top;width:100%;height:100%}.el-empty__description{margin-top:var(--el-empty-description-margin-top)}.el-empty__description p{font-size:var(--el-font-size-base);color:var(--el-text-color-secondary);margin:0}.el-empty__bottom{margin-top:var(--el-empty-bottom-margin-top)}.el-footer{--el-footer-padding:0 20px;--el-footer-height:60px;padding:var(--el-footer-padding);box-sizing:border-box;height:var(--el-footer-height);flex-shrink:0}.el-form-item{--font-size:14px;margin-bottom:18px;display:flex}.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{text-align:left;justify-content:flex-start}.el-form-item--label-right .el-form-item__label{text-align:right;justify-content:flex-end}.el-form-item--label-top{display:block}.el-form-item--label-top .el-form-item__label{text-align:left;width:-moz-fit-content;width:fit-content;height:auto;margin-bottom:8px;padding-right:0;line-height:22px;display:block}.el-form-item__label-wrap{display:flex}.el-form-item__label{font-size:var(--el-form-label-font-size);color:var(--el-text-color-regular);box-sizing:border-box;flex:none;align-items:flex-start;height:32px;padding:0 12px 0 0;line-height:32px;display:inline-flex}.el-form-item__content{line-height:32px;font-size:var(--font-size);flex-wrap:wrap;flex:1;align-items:center;min-width:0;display:flex;position:relative}.el-form-item__content .el-input-group{vertical-align:top}.el-form-item__error{color:var(--el-color-danger);padding-top:2px;font-size:12px;line-height:1;position:absolute;top:100%;left:0}.el-form-item__error--inline{margin-left:10px;display:inline-block;position:relative;top:auto;left:auto}.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label:before,.el-form-item.is-required:not(.is-no-asterisk).asterisk-left>.el-form-item__label-wrap>.el-form-item__label:before{content:"*";color:var(--el-color-danger);margin-right:4px}.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label:after,.el-form-item.is-required:not(.is-no-asterisk).asterisk-right>.el-form-item__label-wrap>.el-form-item__label:after{content:"*";color:var(--el-color-danger);margin-left:4px}.el-form-item.is-error .el-form-item__content .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner,.el-form-item.is-error .el-form-item__content .el-textarea__inner:hover,.el-form-item.is-error .el-form-item__content .el-textarea__inner:focus,.el-form-item.is-error .el-form-item__content .el-textarea__inner.is-focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper,.el-form-item.is-error .el-form-item__content .el-select__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-select__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-select__wrapper.is-focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:hover,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper:focus,.el-form-item.is-error .el-form-item__content .el-input-tag__wrapper.is-focus{box-shadow:0 0 0 1px var(--el-color-danger) inset}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__wrapper,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__wrapper{box-shadow:inset 0 0 0 1px #0000}.el-form-item.is-error .el-form-item__content .el-input-group__append .el-input__validateIcon,.el-form-item.is-error .el-form-item__content .el-input-group__prepend .el-input__validateIcon{display:none}.el-form-item.is-error .el-form-item__content .el-input__validateIcon{color:var(--el-color-danger)}.el-form-item--feedback .el-input__validateIcon{display:inline-flex}.el-form{--el-form-label-font-size:var(--el-font-size-base);--el-form-inline-content-width:220px}.el-form--inline .el-form-item{vertical-align:middle;margin-right:32px;display:inline-flex}.el-form--inline.el-form--label-top{flex-wrap:wrap;display:flex}.el-form--inline.el-form--label-top .el-form-item{display:block}.el-header{--el-header-padding:0 20px;--el-header-height:60px;padding:var(--el-header-padding);box-sizing:border-box;height:var(--el-header-height);flex-shrink:0}.el-image-viewer__wrapper{position:fixed;inset:0}.el-image-viewer__wrapper:focus{outline:none!important}.el-image-viewer__btn{z-index:1;opacity:.8;cursor:pointer;box-sizing:border-box;-webkit-user-select:none;user-select:none;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute}.el-image-viewer__btn .el-icon{cursor:pointer}.el-image-viewer__close{width:40px;height:40px;font-size:40px;top:40px;right:40px}.el-image-viewer__canvas{-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:static}.el-image-viewer__actions{background-color:var(--el-text-color-regular);border-color:#fff;border-radius:22px;height:44px;padding:0 23px;bottom:30px;left:50%;transform:translate(-50%)}.el-image-viewer__actions__inner{cursor:default;color:#fff;justify-content:space-around;align-items:center;gap:22px;width:100%;height:100%;padding:0 6px;font-size:23px;display:flex}.el-image-viewer__actions__divider{margin:0 -6px}.el-image-viewer__progress{cursor:default;color:#fff;bottom:90px;left:50%;transform:translate(-50%)}.el-image-viewer__prev{color:#fff;background-color:var(--el-text-color-regular);border-color:#fff;width:44px;height:44px;font-size:24px;top:50%;left:40px;transform:translateY(-50%)}.el-image-viewer__next{text-indent:2px;color:#fff;background-color:var(--el-text-color-regular);border-color:#fff;width:44px;height:44px;font-size:24px;top:50%;right:40px;transform:translateY(-50%)}.el-image-viewer__close{color:#fff;background-color:var(--el-text-color-regular);border-color:#fff;width:44px;height:44px;font-size:24px}.el-image-viewer__mask{opacity:.5;background:#000;width:100%;height:100%;position:absolute;top:0;left:0}.el-image-viewer-parent--hidden{overflow:hidden}.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:translateY(-20px)}to{opacity:1;transform:translate(0)}}@keyframes viewer-fade-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translateY(-20px)}}.el-image__error,.el-image__placeholder,.el-image__wrapper,.el-image__inner{width:100%;height:100%}.el-image{display:inline-block;position:relative;overflow:hidden}.el-image__inner{vertical-align:top;opacity:1}.el-image__inner.is-loading{opacity:0}.el-image__wrapper{position:absolute;top:0;left:0}.el-image__placeholder{background:var(--el-fill-color-light)}.el-image__error{background:var(--el-fill-color-light);color:var(--el-text-color-placeholder);vertical-align:middle;justify-content:center;align-items:center;font-size:14px;display:flex}.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%;vertical-align:bottom;width:100%;font-size:var(--el-font-size-base);display:inline-block;position:relative}.el-textarea__inner{resize:vertical;box-sizing:border-box;width:100%;line-height:1.5;font-size:inherit;color:var(--el-input-text-color,var(--el-text-color-regular));background-color:var(--el-input-bg-color,var(--el-fill-color-blank));-webkit-appearance:none;box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;border-radius:var(--el-input-border-radius,var(--el-border-radius-base));transition:var(--el-transition-box-shadow);background-image:none;border:none;padding:5px 11px;font-family:inherit;display:block;position:relative}.el-textarea__inner.is-clearable{padding:5px 26px 5px 11px}.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__clear{color:var(--el-input-icon-color);cursor:pointer;font-size:14px;position:absolute;top:15px;right:11px;transform:translateY(-50%)}.el-textarea__clear:hover{color:var(--el-input-clear-hover-color)}.el-textarea .el-input__count{color:var(--el-color-info);background:var(--el-fill-color-blank);font-size:12px;line-height:14px;position:absolute;bottom:5px;right:10px}.el-textarea .el-input__count.is-outside{top:100%;right:0;bottom:unset;background:0 0;padding-top:2px;line-height:1;position:absolute}.el-textarea.is-disabled .el-textarea__inner{box-shadow:0 0 0 1px var(--el-disabled-border-color) inset;background-color:var(--el-disabled-bg-color);color:var(--el-disabled-text-color);cursor:not-allowed}.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);font-size:var(--el-font-size-base);width:var(--el-input-width);line-height:var(--el-input-height);box-sizing:border-box;vertical-align:middle;display:inline-flex;position:relative}.el-input::-webkit-scrollbar{z-index:11;width:6px}.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{background:var(--el-fill-color-blank)}.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{height:100%;color:var(--el-color-info);align-items:center;font-size:12px;display:inline-flex}.el-input .el-input__count .el-input__count-inner{background:var(--el-fill-color-blank);line-height:initial;padding-left:8px;display:inline-block}.el-input .el-input__count.is-outside{height:unset;padding-top:2px;position:absolute;top:100%;right:0}.el-input .el-input__count.is-outside .el-input__count-inner{background:0 0;padding-left:0;line-height:1}.el-input__wrapper{background-color:var(--el-input-bg-color,var(--el-fill-color-blank));border-radius:var(--el-input-border-radius,var(--el-border-radius-base));cursor:text;transition:var(--el-transition-box-shadow);box-shadow:0 0 0 1px var(--el-input-border-color,var(--el-border-color)) inset;background-image:none;flex-grow:1;justify-content:center;align-items:center;padding:1px 11px;display:inline-flex;transform:translate(0)}.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;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));font-size:inherit;height:var(--el-input-inner-height);line-height:var(--el-input-inner-height);box-sizing:border-box;background:0 0;border:none;outline:none;flex-grow:1;padding:0}.el-input__inner:focus{outline:none}.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{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__prefix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.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{white-space:nowrap;height:100%;line-height:var(--el-input-inner-height);text-align:center;color:var(--el-input-icon-color,var(--el-text-color-placeholder));transition:all var(--el-transition-duration);pointer-events:none;flex-wrap:nowrap;flex-shrink:0;display:inline-flex}.el-input__suffix-inner{pointer-events:all;justify-content:center;align-items:center;display:inline-flex}.el-input__suffix-inner>:first-child{margin-left:8px}.el-input .el-input__icon{height:inherit;line-height:inherit;transition:all var(--el-transition-duration);justify-content:center;align-items:center;margin-left:8px;display:flex}.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);cursor:not-allowed;box-shadow:0 0 0 1px var(--el-disabled-border-color) inset}.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::placeholder{color:var(--el-text-color-placeholder)}.el-input.is-disabled .el-input__icon{cursor:not-allowed}.el-input.is-disabled .el-input__prefix-inner,.el-input.is-disabled .el-input__suffix-inner{pointer-events:none}.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;width:100%;display:inline-flex}.el-input-group__append,.el-input-group__prepend{background-color:var(--el-fill-color-light);color:var(--el-color-info);border-radius:var(--el-input-border-radius);white-space:nowrap;justify-content:center;align-items:center;min-height:100%;padding:0 20px;display:inline-flex;position:relative}.el-input-group__append:focus,.el-input-group__prepend:focus{outline:none}.el-input-group__append .el-select,.el-input-group__append .el-button,.el-input-group__prepend .el-select,.el-input-group__prepend .el-button{flex:1;margin:0 -20px;display:inline-block}.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{color:inherit;background-color:#0000;border-color:#0000}.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{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;border-right:0;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group__append{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;border-left:0;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend>.el-input__wrapper{border-top-left-radius:0;border-bottom-left-radius:0}.el-input-group--prepend .el-input-group__prepend .el-select .el-select__wrapper{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;border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append>.el-input__wrapper{border-top-right-radius:0;border-bottom-right-radius:0}.el-input-group--append .el-input-group__append .el-select .el-select__wrapper{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;border-top-left-radius:0;border-bottom-left-radius:0}.el-input-hidden{display:none!important}.el-input-number{vertical-align:middle;width:150px;line-height:30px;display:inline-flex;position:relative}.el-input-number .el-input__wrapper{padding-left:42px;padding-right:42px}.el-input-number .el-input__inner{-webkit-appearance:none;-moz-appearance:textfield;text-align:center;line-height:1}.el-input-number .el-input__inner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.el-input-number .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-input-number.is-left .el-input__inner{text-align:left}.el-input-number.is-right .el-input__inner{text-align:right}.el-input-number.is-center .el-input__inner{text-align:center}.el-input-number__increase,.el-input-number__decrease{z-index:1;background:var(--el-fill-color-light);width:32px;height:auto;color:var(--el-text-color-regular);cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;font-size:13px;display:flex;position:absolute;top:1px;bottom:1px}.el-input-number__increase:hover,.el-input-number__decrease:hover{color:var(--el-color-primary)}.el-input-number__increase:hover~.el-input:not(.is-disabled) .el-input__wrapper,.el-input-number__decrease: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__increase.is-disabled,.el-input-number__decrease.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-input-number__increase{border-radius:0 var(--el-border-radius-base) var(--el-border-radius-base) 0;border-left:var(--el-border);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__increase,.el-input-number.is-disabled .el-input-number__decrease{border-color:var(--el-disabled-border-color);color:var(--el-disabled-border-color)}.el-input-number.is-disabled .el-input-number__increase:hover,.el-input-number.is-disabled .el-input-number__decrease:hover{color:var(--el-disabled-border-color);cursor:not-allowed}.el-input-number--large{width:180px;line-height:38px}.el-input-number--large .el-input-number__increase,.el-input-number--large .el-input-number__decrease{width:40px;font-size:14px}.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{width:120px;line-height:22px}.el-input-number--small .el-input-number__increase,.el-input-number--small .el-input-number__decrease{width:24px;font-size:12px}.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__increase [class*=el-icon],.el-input-number--small .el-input-number__decrease [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__increase,.el-input-number.is-controls-right .el-input-number__decrease{--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__increase [class*=el-icon],.el-input-number.is-controls-right .el-input-number__decrease [class*=el-icon]{transform:scale(.8)}.el-input-number.is-controls-right .el-input-number__increase{border-radius:0 var(--el-border-radius-base) 0 0;border-bottom:var(--el-border);bottom:auto;left:auto}.el-input-number.is-controls-right .el-input-number__decrease{border-right:none;border-left:var(--el-border);border-radius:0 0 var(--el-border-radius-base) 0;top:auto;left:auto;right:1px}.el-input-number.is-controls-right[class*=large] [class*=increase],.el-input-number.is-controls-right[class*=large] [class*=decrease]{--el-input-number-controls-height:19px}.el-input-number.is-controls-right[class*=small] [class*=increase],.el-input-number.is-controls-right[class*=small] [class*=decrease]{--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;box-sizing:border-box;cursor:pointer;font-size:var(--el-input-tag-font-size);padding:var(--el-input-tag-padding);width:var(--el-input-tag-width);min-height:var(--el-input-tag-mini-height);line-height:var(--el-input-tag-line-height);border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);transition:var(--el-transition-duration);box-shadow:0 0 0 1px var(--el-border-color) inset;align-items:center;display:flex;transform:translate(0)}.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{cursor:not-allowed;background-color:var(--el-fill-color-light);box-shadow:0 0 0 1px var(--el-input-tag-disabled-border) inset}.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{padding:0 var(--el-input-tag-inner-padding);color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;display:flex}.el-input-tag__suffix{padding:0 var(--el-input-tag-inner-padding);color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;gap:8px;display:flex}.el-input-tag__collapse-tag{line-height:1}.el-input-tag__input-tag-list{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;position:relative}.el-input-tag__input-tag-list.is-near{margin-left:-8px}.el-input-tag__input-tag-list .el-tag{cursor:pointer;border-color:#0000}.el-input-tag__input-tag-list .el-tag.el-tag--plain{border-color:var(--el-tag-border-color)}.el-input-tag__input-tag-list .el-tag .el-tag__content{min-width:0}.el-input-tag__inner{align-items:center;gap:var(--el-input-tag-gap);flex-wrap:wrap;flex:1;min-width:0;max-width:100%;display:flex;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;user-select:none}.el-input-tag__drop-indicator{width:1px;height:var(--el-input-tag-line-height);background-color:var(--el-color-primary);position:absolute;top:0}.el-input-tag__inner .el-tag{cursor:pointer;border-color:#0000;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{text-overflow:ellipsis;white-space:nowrap;min-width:0;line-height:normal;overflow:hidden}.el-input-tag__input-wrapper{flex:1}.el-input-tag__input{color:var(--el-input-tag-text-color);font-size:inherit;font-family:inherit;line-height:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;outline:none;width:100%;padding:0}.el-input-tag__input::placeholder{color:var(--el-input-tag-placeholder-color)}.el-input-tag__input-calculator{visibility:hidden;white-space:pre;max-width:100%;position:absolute;top:0;left:0;overflow:hidden}.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);vertical-align:middle;cursor:pointer;font-size:var(--el-link-font-size);font-weight:var(--el-link-font-weight);color:var(--el-link-text-color);outline:none;flex-direction:row;justify-content:center;align-items:center;padding:0;text-decoration:none;display:inline-flex;position:relative}.el-link.is-hover-underline:hover:after{content:"";border-bottom:1px solid var(--el-link-hover-text-color);height:0;position:absolute;bottom:0;left:0;right:0}.el-link.is-underline:after{content:"";border-bottom:1px solid var(--el-link-text-color);height:0;position:absolute;bottom:0;left:0;right:0}.el-link:hover{color:var(--el-link-hover-text-color)}.el-link:hover:after{border-color:var(--el-link-hover-text-color)}.el-link [class*=el-icon-]+span{margin-left:5px}.el-link__inner{justify-content:center;align-items:center;display:inline-flex}.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--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--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--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--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--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.is-disabled{color:var(--el-link-disabled-text-color);cursor:not-allowed}.el-link.is-disabled:after{border-color:var(--el-link-disabled-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{z-index:2000;background-color:var(--el-mask-color);transition:opacity var(--el-transition-duration);margin:0;position:absolute;inset:0}.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);text-align:center;width:100%;position:absolute;top:50%}.el-loading-spinner .el-loading-text{color:var(--el-color-primary);margin:3px 0;font-size:14px}.el-loading-spinner .circular{height:var(--el-loading-spinner-size);width:var(--el-loading-spinner-size);animation:2s linear infinite loading-rotate;display:inline}.el-loading-spinner .path{stroke-dasharray:90 150;stroke-dashoffset:0;stroke-width:2px;stroke:var(--el-color-primary);stroke-linecap:round;animation:1.5s ease-in-out infinite loading-dash}.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(360deg)}}@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;padding:var(--el-main-padding);flex:auto;display:block;overflow:auto}: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{border-right:solid 1px var(--el-menu-border-color);background-color:var(--el-menu-bg-color);box-sizing:border-box;margin:0;padding-left:0;list-style:none;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-sub-menu__title,.el-menu--vertical:not(.el-menu--collapse):not(.el-menu--popup-container) .el-menu-item-group__title{white-space:nowrap;padding-left:calc(var(--el-menu-base-level-padding) + var(--el-menu-level) * var(--el-menu-level-padding))}.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{height:var(--el-menu-horizontal-height);border-right:none;flex-wrap:nowrap;display:flex}.el-menu--horizontal.el-menu--popup-container{height:unset}.el-menu--horizontal.el-menu{border-bottom:solid 1px var(--el-menu-border-color)}.el-menu--horizontal>.el-menu-item{height:100%;color:var(--el-menu-text-color);border-bottom:2px solid #0000;justify-content:center;align-items:center;margin:0;display:inline-flex}.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{height:100%;color:var(--el-menu-text-color);border-bottom:2px solid #0000}.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{background-color:var(--el-menu-bg-color);height:var(--el-menu-horizontal-sub-item-height);line-height:var(--el-menu-horizontal-sub-item-height);color:var(--el-menu-text-color);align-items:center;padding:0 10px;display:flex}.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-menu-item.is-active:hover,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title,.el-menu--horizontal .el-menu .el-sub-menu.is-active>.el-sub-menu__title:hover{color:var(--el-menu-active-color)}.el-menu--horizontal .el-menu-item:not(.is-disabled):hover,.el-menu--horizontal .el-menu-item:not(.is-disabled):focus{color:var(--el-menu-active-color,var(--el-menu-hover-text-color));background-color:var(--el-menu-hover-bg-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-sub-menu>.el-sub-menu__title [class^=el-icon],.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title [class^=el-icon]{vertical-align:middle;width:var(--el-menu-icon-width);text-align:center;margin:0}.el-menu--collapse>.el-menu-item .el-sub-menu__icon-arrow,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title .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{display:none}.el-menu--collapse>.el-menu-item>span,.el-menu--collapse>.el-sub-menu>.el-sub-menu__title>span,.el-menu--collapse>.el-menu-item-group>ul>.el-sub-menu>.el-sub-menu__title>span{visibility:hidden;width:0;height:0;display:inline-block;overflow:hidden}.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{z-index:100;border-radius:var(--el-border-radius-small);min-width:200px;box-shadow:var(--el-box-shadow-light);border:none;padding:5px 0}.el-menu .el-icon{flex-shrink:0}.el-menu-item{height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;align-items:center;list-style:none;display:flex;position:relative}.el-menu-item *{vertical-align:bottom}.el-menu-item i{color:inherit}.el-menu-item:hover,.el-menu-item:focus{outline:none}.el-menu-item:hover{background-color:var(--el-menu-hover-bg-color)}.el-menu-item.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.el-menu-item [class^=el-icon]{width:var(--el-menu-icon-width);text-align:center;vertical-align:middle;margin-right:5px;font-size:18px}.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{box-sizing:border-box;width:100%;height:100%;padding:0 var(--el-menu-base-level-padding);align-items:center;display:inline-flex;position:absolute;top:0;left:0}.el-sub-menu{margin:0;padding-left:0;list-style:none}.el-sub-menu__title{height:var(--el-menu-item-height);line-height:var(--el-menu-item-height);font-size:var(--el-menu-item-font-size);color:var(--el-menu-text-color);padding:0 var(--el-menu-base-level-padding);cursor:pointer;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration),color var(--el-transition-duration);box-sizing:border-box;white-space:nowrap;align-items:center;list-style:none;display:flex;position:relative}.el-sub-menu__title *{vertical-align:bottom}.el-sub-menu__title i{color:inherit}.el-sub-menu__title:hover,.el-sub-menu__title:focus{outline:none}.el-sub-menu__title.is-disabled{opacity:.25;cursor:not-allowed;background:0 0!important}.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.el-sub-menu__hide-arrow .el-sub-menu__title{padding-right:var(--el-menu-base-level-padding)}.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-sub-menu__title,.el-sub-menu.is-disabled .el-menu-item{opacity:.25;cursor:not-allowed;background:0 0!important}.el-sub-menu .el-icon{vertical-align:middle;width:var(--el-menu-icon-width);text-align:center;margin-right:5px;font-size:18px}.el-sub-menu .el-icon.el-sub-menu__icon-more{margin-right:0!important}.el-sub-menu .el-sub-menu__icon-arrow{top:50%;right:var(--el-menu-base-level-padding);transition:transform var(--el-transition-duration);width:inherit;margin-top:-6px;margin-right:0;font-size:12px;position:absolute}.el-menu-item-group>ul{padding:0}.el-menu-item-group__title{padding:7px 0 7px var(--el-menu-base-level-padding);color:var(--el-text-color-secondary);font-size:12px;line-height:normal}.horizontal-collapse-transition .el-sub-menu__title .el-sub-menu__icon-arrow{transition:var(--el-transition-duration-fast);opacity:0}.el-popper,.el-menu--popup-container,.el-menu{outline:none}.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);max-width:var(--el-messagebox-width);width:100%;padding:var(--el-messagebox-padding-primary);vertical-align:middle;background-color:var(--el-bg-color);border-radius:var(--el-messagebox-border-radius);font-size:var(--el-messagebox-font-size);box-shadow:var(--el-messagebox-box-shadow);text-align:left;-webkit-backface-visibility:hidden;backface-visibility:hidden;box-sizing:border-box;overflow-wrap:break-word;display:inline-block;position:relative;overflow:hidden}.el-message-box:focus{outline:none!important}.is-message-box .el-overlay-message-box{text-align:center;padding:16px;position:fixed;inset:0;overflow:auto}.is-message-box .el-overlay-message-box:after{content:"";vertical-align:middle;width:0;height:100%;display:inline-block}.el-message-box.is-draggable .el-message-box__header{cursor:move;-webkit-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{font-size:var(--el-messagebox-font-size);line-height:var(--el-messagebox-font-line-height);color:var(--el-messagebox-title-color)}.el-message-box__headerbtn{width:40px;height:40px;font-size:var(--el-message-close-size,16px);cursor:pointer;background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.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;gap:12px;display:flex}.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--primary{--el-messagebox-color:var(--el-color-primary);color:var(--el-messagebox-color)}.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{min-width:0;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{padding-top:var(--el-messagebox-padding-primary);flex-wrap:wrap;justify-content:flex-end;align-items:center;display:flex}.el-message-box--center .el-message-box__title{justify-content:center;align-items:center;gap:6px;display:flex}.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}.el-message-box-parent--hidden{overflow:hidden}.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:translateY(-20px)}to{opacity:1;transform:translate(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);box-sizing:border-box;border-radius:var(--el-border-radius-base);border-width:var(--el-border-width);border-style:var(--el-border-style);border-color:var(--el-message-border-color);background-color:var(--el-message-bg-color);width:max-content;max-width:calc(100% - 32px);transition:opacity var(--el-transition-duration),transform .4s,top .4s,bottom .4s;padding:var(--el-message-padding);align-items:center;gap:8px;display:flex;position:fixed}.el-message.is-left{left:16px}.el-message.is-right{right:16px}.el-message.is-center{left:50%;transform:translate(-50%)}.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--primary{--el-message-bg-color:var(--el-color-primary-light-9);--el-message-border-color:var(--el-color-primary-light-8);--el-message-text-color:var(--el-color-primary)}.el-message--primary .el-message__content{color:var(--el-message-text-color);overflow-wrap:break-word}.el-message .el-message-icon--primary{color:var(--el-message-text-color)}.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;top:-8px;right:-8px}.el-message__content{padding:0;font-size:14px;line-height:1}.el-message__content:focus{outline-width:0}.el-message .el-message__closeBtn{cursor:pointer;color:var(--el-message-close-icon-color);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}.el-message-fade-enter-from.is-left,.el-message-fade-enter-from.is-right,.el-message-fade-leave-to.is-left,.el-message-fade-leave-to.is-right{transform:translateY(-100%)}.el-message-fade-enter-from.is-left.is-bottom,.el-message-fade-enter-from.is-right.is-bottom,.el-message-fade-leave-to.is-left.is-bottom,.el-message-fade-leave-to.is-right.is-bottom{transform:translateY(100%)}.el-message-fade-enter-from.is-center,.el-message-fade-leave-to.is-center{transform:translate(-50%,-100%)}.el-message-fade-enter-from.is-center.is-bottom,.el-message-fade-leave-to.is-center.is-bottom{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);width:var(--el-notification-width);padding:var(--el-notification-padding);border-radius:var(--el-notification-radius);box-sizing:border-box;border:1px solid var(--el-notification-border-color);background-color:var(--el-bg-color-overlay);box-shadow:var(--el-notification-shadow);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);overflow-wrap:break-word;z-index:9999;display:flex;position:fixed;overflow:hidden}.el-notification.right{right:16px}.el-notification.left{left:16px}.el-notification__group{min-width:0;margin-left:var(--el-notification-group-margin-left);margin-right:var(--el-notification-group-margin-right);flex:1}.el-notification__title{font-weight:700;font-size:var(--el-notification-title-font-size);line-height:var(--el-notification-icon-size);color:var(--el-notification-title-color);margin:0}.el-notification__content{font-size:var(--el-notification-content-font-size);color:var(--el-notification-content-color);margin:6px 0 0;line-height:24px}.el-notification__content p{margin:0}.el-notification .el-notification__icon{height:var(--el-notification-icon-size);width:var(--el-notification-icon-size);font-size:var(--el-notification-icon-size);flex-shrink:0}.el-notification .el-notification__closeBtn{cursor:pointer;color:var(--el-notification-close-color);font-size:var(--el-notification-close-font-size);position:absolute;top:18px;right:15px}.el-notification .el-notification__closeBtn:hover{color:var(--el-notification-close-hover-color)}.el-notification .el-notification--primary{--el-notification-icon-color:var(--el-color-primary);color:var(--el-notification-icon-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:translate(100%)}.el-notification-fade-enter-from.left{left:0;transform:translate(-100%)}.el-notification-fade-leave-to{opacity:0}.el-overlay{z-index:2000;background-color:var(--el-overlay-color-lighter);height:100%;position:fixed;inset:0;overflow:auto}.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{justify-content:space-between;align-items:center;line-height:24px;display:flex}.el-page-header__left{align-items:center;margin-right:40px;display:flex;position:relative}.el-page-header__back{cursor:pointer;align-items:center;display:flex}.el-page-header__left .el-divider--vertical{margin:0 16px}.el-page-header__icon{align-items:center;margin-right:10px;font-size:16px;display:flex}.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;white-space:nowrap;color:var(--el-pagination-text-color);font-size:var(--el-pagination-font-size);align-items:center;font-weight:400;display:flex}.el-pagination .el-input__inner{text-align:center;-moz-appearance:textfield}.el-pagination .el-select{width:128px}.el-pagination .btn-prev,.el-pagination .btn-next{font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box;border:none;justify-content:center;align-items:center;padding:0 4px;display:flex}.el-pagination .btn-prev *,.el-pagination .btn-next *{pointer-events:none}.el-pagination .btn-prev:focus,.el-pagination .btn-next:focus{outline:none}.el-pagination .btn-prev:hover,.el-pagination .btn-next:hover{color:var(--el-pagination-hover-color)}.el-pagination .btn-prev.is-active,.el-pagination .btn-next.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pagination .btn-prev.is-active.is-disabled,.el-pagination .btn-next.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pagination .btn-prev:disabled,.el-pagination .btn-prev.is-disabled,.el-pagination .btn-next:disabled,.el-pagination .btn-next.is-disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pagination .btn-prev:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-next:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-pagination .btn-prev .el-icon,.el-pagination .btn-next .el-icon{width:inherit;font-size:12px;font-weight:700;display:block}.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{margin-left:var(--el-pagination-item-gap);color:var(--el-text-color-regular);font-weight:400}.el-pagination__total[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__jump{margin-left:var(--el-pagination-item-gap);color:var(--el-text-color-regular);align-items:center;font-weight:400;display:flex}.el-pagination__jump[disabled=true]{color:var(--el-text-color-placeholder)}.el-pagination__goto{margin-right:8px}.el-pagination__editor{text-align:center;box-sizing:border-box}.el-pagination__editor.el-input{width:56px}.el-pagination__editor .el-input__inner::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.el-pagination__editor .el-input__inner::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}.el-pagination__classifier{margin-left:8px}.el-pagination__rightwrapper{flex:1;justify-content:flex-end;align-items:center;display:flex}.el-pagination.is-background .btn-prev,.el-pagination.is-background .btn-next,.el-pagination.is-background .el-pager li{background-color:var(--el-pagination-button-bg-color);margin:0 4px}.el-pagination.is-background .btn-prev.is-active,.el-pagination.is-background .btn-next.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-prev:disabled,.el-pagination.is-background .btn-prev.is-disabled,.el-pagination.is-background .btn-next:disabled,.el-pagination.is-background .btn-next.is-disabled,.el-pagination.is-background .el-pager li:disabled,.el-pagination.is-background .el-pager li.is-disabled{color:var(--el-text-color-placeholder);background-color:var(--el-disabled-bg-color)}.el-pagination.is-background .btn-prev:disabled.is-active,.el-pagination.is-background .btn-prev.is-disabled.is-active,.el-pagination.is-background .btn-next:disabled.is-active,.el-pagination.is-background .btn-next.is-disabled.is-active,.el-pagination.is-background .el-pager li:disabled.is-active,.el-pagination.is-background .el-pager li.is-disabled.is-active{color:var(--el-text-color-secondary);background-color:var(--el-fill-color-dark)}.el-pagination.is-background .btn-prev{margin-left:var(--el-pagination-item-gap)}.el-pagination--small .btn-prev,.el-pagination--small .btn-next,.el-pagination--small .el-pager li{height:var(--el-pagination-button-height-small);line-height:var(--el-pagination-button-height-small);font-size:var(--el-pagination-font-size-small);min-width:var(--el-pagination-button-width-small)}.el-pagination--small span:not([class*=suffix]),.el-pagination--small button{font-size:var(--el-pagination-font-size-small)}.el-pagination--small .el-select{width:100px}.el-pagination--large .btn-prev,.el-pagination--large .btn-next,.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{-webkit-user-select:none;user-select:none;align-items:center;margin:0;padding:0;font-size:0;list-style:none;display:flex}.el-pager li{font-size:var(--el-pagination-font-size);min-width:var(--el-pagination-button-width);height:var(--el-pagination-button-height);line-height:var(--el-pagination-button-height);color:var(--el-pagination-button-color);background:var(--el-pagination-bg-color);border-radius:var(--el-pagination-border-radius);cursor:pointer;text-align:center;box-sizing:border-box;border:none;justify-content:center;align-items:center;padding:0 4px;display:flex}.el-pager li *{pointer-events:none}.el-pager li:focus{outline:none}.el-pager li:hover{color:var(--el-pagination-hover-color)}.el-pager li.is-active{color:var(--el-pagination-hover-color);cursor:default;font-weight:700}.el-pager li.is-active.is-disabled{color:var(--el-text-color-secondary);font-weight:700}.el-pager li:disabled,.el-pager li.is-disabled{color:var(--el-pagination-button-disabled-color);background-color:var(--el-pagination-button-disabled-bg-color);cursor:not-allowed}.el-pager li:focus-visible{outline:1px solid var(--el-pagination-hover-color);outline-offset:-1px}.el-popconfirm{outline:none}.el-popconfirm__main{align-items:center;display:flex}.el-popconfirm__icon{margin-right:5px}.el-popconfirm__action{text-align:right;margin-top:8px}.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-radius:var(--el-popover-border-radius);border:1px solid var(--el-popover-border-color);min-width:150px;padding:var(--el-popover-padding);z-index:var(--el-index-popper);color:var(--el-text-color-regular);line-height:1.4;font-size:var(--el-popover-font-size);box-shadow:var(--el-box-shadow-light);overflow-wrap:break-word;box-sizing:border-box}.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);margin-bottom:12px;line-height:1}.el-popover__reference:focus:not(.focusing),.el-popover__reference:focus:hover{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:active,.el-popover.el-popper:focus{outline-width:0}.el-progress{align-items:center;line-height:1;display:flex;position:relative}.el-progress__text{color:var(--el-text-color-regular);min-width:50px;margin-left:5px;font-size:14px;line-height:1}.el-progress__text i{vertical-align:middle;display:block}.el-progress--circle,.el-progress--dashboard{display:inline-block}.el-progress--circle .el-progress__text,.el-progress--dashboard .el-progress__text{text-align:center;width:100%;margin:0;position:absolute;top:50%;left:0;transform:translateY(-50%)}.el-progress--circle .el-progress__text i,.el-progress--dashboard .el-progress__text i{vertical-align:middle;display:inline-block}.el-progress--without-text .el-progress__text{display:none}.el-progress--without-text .el-progress-bar{margin-right:0;padding-right:0;display:block}.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);vertical-align:middle;border-radius:100px;height:6px;position:relative;overflow:hidden}.el-progress-bar__inner{background-color:var(--el-color-primary);text-align:right;white-space:nowrap;border-radius:100px;height:100%;line-height:1;transition:width .6s;position:absolute;top:0;left:0}.el-progress-bar__inner:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-progress-bar__inner--indeterminate{animation:3s infinite indeterminate;transform:translateZ(0)}.el-progress-bar__inner--striped{background-image:linear-gradient(45deg,#0000001a 25%,#0000 25% 50%,#0000001a 50% 75%,#0000 75%,#0000);background-size:1.25em 1.25em}.el-progress-bar__inner--striped.el-progress-bar__inner--striped-flow{animation:3s linear infinite striped-flow}.el-progress-bar__innerText{vertical-align:middle;color:#fff;margin:0 5px;font-size:12px;display:inline-block}@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);outline:none;display:inline-block;position:relative}.el-radio-button__inner{white-space:nowrap;vertical-align:middle;background:var(--el-button-bg-color,var(--el-fill-color-blank));outline:var(--el-border);line-height:1;font-weight:var(--el-button-font-weight,var(--el-font-weight-primary));color:var(--el-button-text-color,var(--el-text-color-regular));-webkit-appearance:none;text-align:center;box-sizing:border-box;cursor:pointer;transition:var(--el-transition-all);-webkit-user-select:none;user-select:none;font-size:var(--el-font-size-base);border-radius:0;margin:0;padding:8px 15px;display:inline-block;position:relative}.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-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{color:var(--el-radio-button-checked-text-color,var(--el-color-white));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))}.el-radio-button__original-radio{opacity:0;z-index:-1;outline:none;position:absolute}.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));outline:2px solid var(--el-radio-button-checked-border-color);outline-offset:1px;z-index:2;border-radius:var(--el-border-radius-base);box-shadow:none}.el-radio-button__original-radio:disabled+.el-radio-button__inner{color:var(--el-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color,var(--el-fill-color-blank));border-color:var(--el-button-disabled-border-color,var(--el-border-color-light));box-shadow:none}.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{font-size:var(--el-font-size-base);border-radius:0;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;padding:5px 11px;font-size:12px}.el-radio-button--small .el-radio-button__inner.is-round{padding:5px 11px}.el-radio-group{flex-wrap:wrap;align-items:center;font-size:0;display:inline-flex}.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);color:var(--el-radio-text-color);font-weight:var(--el-radio-font-weight);cursor:pointer;white-space:nowrap;font-size:var(--el-font-size-base);-webkit-user-select:none;user-select:none;outline:none;align-items:center;height:32px;margin-right:30px;display:inline-flex;position:relative}.el-radio.el-radio--large{height:40px}.el-radio.el-radio--small{height:24px}.el-radio.is-bordered{border-radius:var(--el-border-radius-base);border:var(--el-border);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{cursor:not-allowed;border-color:var(--el-border-color-lighter)}.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{width:14px;height: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{width:12px;height:12px}.el-radio:last-child{margin-right:0}.el-radio__input{white-space:nowrap;cursor:pointer;vertical-align:middle;outline:none;display:inline-flex;position:relative}.el-radio__input.is-disabled .el-radio__inner{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);cursor:not-allowed}.el-radio__input.is-disabled .el-radio__inner:after{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.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{border-color:var(--el-color-primary);background:var(--el-color-primary)}.el-radio__input.is-checked .el-radio__inner:after{background-color:var(--el-color-white);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{border:var(--el-radio-input-border);border-radius:var(--el-radio-input-border-radius);width:var(--el-radio-input-width);height:var(--el-radio-input-height);background-color:var(--el-radio-input-bg-color);cursor:pointer;box-sizing:border-box;transition:all .3s;display:inline-block;position:relative}.el-radio__inner:hover{border-color:var(--el-radio-input-border-color-hover)}.el-radio__inner:after{border-radius:var(--el-radio-input-border-radius);content:"";width:4px;height:4px;transition:transform .15s ease-in;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)scale(0)}.el-radio__original{opacity:0;z-index:-1;outline:none;margin:0;position:absolute;inset:0}.el-radio__original:focus-visible+.el-radio__inner{outline:2px solid var(--el-radio-input-border-color-hover);outline-offset:1px;border-radius:var(--el-radio-input-border-radius)}.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{width:14px;height:14px}.el-radio.el-radio--small .el-radio__label{font-size:12px}.el-radio.el-radio--small .el-radio__inner{width:12px;height: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);--el-rate-outline-color:var(--el-color-primary-light-5);align-items:center;height:32px;display:inline-flex}.el-rate:focus,.el-rate:active{outline:none}.el-rate:focus-visible .el-rate__item .el-rate__icon.is-focus-visible{outline:2px solid var(--el-rate-outline-color);transition:outline-offset,outline}.el-rate__item{cursor:pointer;vertical-align:middle;color:var(--el-rate-void-color);font-size:0;line-height:normal;display:inline-block;position:relative}.el-rate .el-rate__icon{font-size:var(--el-rate-icon-size);margin-right:var(--el-rate-icon-margin);transition:var(--el-transition-duration);display:inline-block;position:relative}.el-rate .el-rate__icon.hover{transform:scale(1.15)}.el-rate .el-rate__icon .path2{position:absolute;top:0;left: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;position:absolute;top:0;left:0;overflow:hidden}.el-rate__decimal--box{position:absolute;top:0;left:0}.el-rate__text{font-size:var(--el-rate-font-size);vertical-align:middle;color:var(--el-rate-text-color)}.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{cursor:not-allowed;color:var(--el-rate-disabled-void-color)}.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;text-align:center;box-sizing:border-box;padding:var(--el-result-padding);flex-direction:column;justify-content:center;align-items:center;display:flex}.el-result__icon svg{width:var(--el-result-icon-font-size);height:var(--el-result-icon-font-size)}.el-result__title{margin-top:var(--el-result-title-margin-top)}.el-result__title p{font-size:var(--el-result-title-font-size);color:var(--el-text-color-primary);margin:0;line-height:1.3}.el-result__subtitle{margin-top:var(--el-result-subtitle-margin-top)}.el-result__subtitle p{font-size:var(--el-font-size-base);color:var(--el-text-color-regular);margin:0;line-height:1.3}.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;flex-wrap:wrap;display:flex;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:.3;--el-scrollbar-bg-color:var(--el-text-color-secondary);--el-scrollbar-hover-opacity:.5;--el-scrollbar-hover-bg-color:var(--el-text-color-secondary);height:100%;position:relative;overflow:hidden}.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{cursor:pointer;border-radius:inherit;background-color:var(--el-scrollbar-bg-color,var(--el-text-color-secondary));width:0;height:0;transition:var(--el-transition-duration) background-color;opacity:var(--el-scrollbar-opacity,.3);display:block;position:relative}.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{z-index:1;border-radius:4px;position:absolute;bottom:2px;right:2px}.el-scrollbar__bar.is-vertical{width:6px;top:2px}.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{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-select-dropdown .el-scrollbar.is-empty .el-select-dropdown__list{padding:0}.el-select-dropdown__loading,.el-select-dropdown__empty{text-align:center;color:var(--el-text-color-secondary);font-size:var(--el-select-font-size);margin:0;padding:10px 0}.el-select-dropdown__wrap{max-height:274px}.el-select-dropdown__list{box-sizing:border-box;margin:0;padding:6px 0;list-style:none}.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{font-size:var(--el-font-size-base);white-space:nowrap;text-overflow:ellipsis;color:var(--el-text-color-regular);box-sizing:border-box;cursor:pointer;height:34px;padding:0 32px 0 20px;line-height:34px;position:relative;overflow:hidden}.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:700}.el-select-dropdown__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed;background-color:unset}.el-select-dropdown.is-multiple .el-select-dropdown__item.is-selected:after{content:"";background-position:50%;background-repeat:no-repeat;background-color:var(--el-color-primary);-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") 0 0/100% 100% no-repeat;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") 0 0/100% 100% no-repeat;border-top:none;border-right:none;width:12px;height:12px;position:absolute;top:50%;right:20px;transform:translateY(-50%);-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") 0 0/100% 100% no-repeat}.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{margin:0;padding:0;list-style:none;position:relative}.el-select-group__title{box-sizing:border-box;color:var(--el-color-info);text-overflow:ellipsis;white-space:nowrap;padding:0 20px;font-size:12px;line-height:34px;overflow:hidden}.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%;vertical-align:middle;width:var(--el-select-width);display:inline-block;position:relative}.el-select__wrapper{box-sizing:border-box;cursor:pointer;text-align:left;border-radius:var(--el-border-radius-base);background-color:var(--el-fill-color-blank);min-height:32px;transition:var(--el-transition-duration);box-shadow:0 0 0 1px var(--el-border-color) inset;align-items:center;gap:6px;padding:4px 12px;font-size:14px;line-height:24px;display:flex;position:relative;transform:translate(0)}.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{cursor:not-allowed;background-color:var(--el-fill-color-light);color:var(--el-text-color-placeholder);box-shadow:0 0 0 1px var(--el-select-disabled-border) inset}.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,.el-select__wrapper.is-disabled input{cursor:not-allowed}.el-select__wrapper.is-disabled .el-select__prefix,.el-select__wrapper.is-disabled .el-select__suffix{pointer-events:none}.el-select__prefix,.el-select__suffix{color:var(--el-input-icon-color,var(--el-text-color-placeholder));flex-shrink:0;align-items:center;gap:6px;display:flex}.el-select__caret{color:var(--el-select-input-color);font-size:var(--el-select-input-font-size);transition:var(--el-transition-duration);cursor:pointer;transform:rotate(0)}.el-select__caret.is-reverse{transform:rotate(180deg)}.el-select__clear{cursor:pointer}.el-select__clear:hover{color:var(--el-select-close-hover-color)}.el-select__selection{flex-wrap:wrap;flex:1;align-items:center;gap:6px;min-width:0;display:flex;position:relative}.el-select__selection.is-near{margin-left:-8px}.el-select__selection .el-tag{cursor:pointer;border-color:#0000}.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{-webkit-user-select:none;user-select:none;flex-wrap:wrap;display:flex}.el-select__tags-text{text-overflow:ellipsis;white-space:nowrap;line-height:normal;display:block;overflow:hidden}.el-select__placeholder{z-index:-1;text-overflow:ellipsis;white-space:nowrap;width:100%;color:var(--el-input-text-color,var(--el-text-color-regular));display:block;position:absolute;top:50%;overflow:hidden;transform:translateY(-50%)}.el-select__placeholder.is-transparent{-webkit-user-select:none;user-select:none;color:var(--el-text-color-placeholder)}.el-select__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.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-top-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-select__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-select__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.el-select__input-wrapper{flex:1}.el-select__input-wrapper.is-hidden{opacity:0;z-index:-1;position:absolute}.el-select__input{color:var(--el-select-multiple-input-color);font-size:inherit;-webkit-appearance:none;-moz-appearance:none;appearance:none;background-color:#0000;border:none;outline:none;width:100%;height:24px;padding:0;font-family:inherit}.el-select__input-calculator{visibility:hidden;white-space:pre;max-width:100%;position:absolute;top:0;left:0;overflow:hidden}.el-select--large .el-select__wrapper{gap:6px;min-height:40px;padding:8px 16px;font-size:14px;line-height:24px}.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{gap:4px;min-height:24px;padding:2px 8px;font-size:12px;line-height:20px}.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);width:100%;height:16px;display:inline-block}.el-skeleton__circle{width:var(--el-skeleton-circle-size);height:var(--el-skeleton-circle-size);line-height:var(--el-skeleton-circle-size);border-radius:50%}.el-skeleton__button{border-radius:4px;width:64px;height:40px}.el-skeleton__p{width:100%}.el-skeleton__p.is-last{width:61%}.el-skeleton__p.is-first{width:33%}.el-skeleton__text{width:100%;height:var(--el-font-size-small)}.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{width:unset;border-radius:0;justify-content:center;align-items:center;display:flex}.el-skeleton__image svg{color:var(--el-svg-monochrome-grey);fill:currentColor;width:22%;height: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%}to{background-position:0}}.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{background:linear-gradient(90deg,var(--el-skeleton-color) 25%,var(--el-skeleton-to-color) 37%,var(--el-skeleton-color) 63%);background-size:400% 100%;animation:1.4s infinite el-skeleton-loading}.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;width:100%;height:32px;display:flex}.el-slider__runway{height:var(--el-slider-height);background-color:var(--el-slider-runway-bg-color);border-radius:var(--el-slider-border-radius);cursor:pointer;flex:1;position:relative}.el-slider__runway.show-input{width:auto;margin-right:30px}.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:hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.hover,.el-slider__runway.is-disabled .el-slider__button-wrapper.dragging{cursor:not-allowed}.el-slider__runway.is-disabled .el-slider__button:hover,.el-slider__runway.is-disabled .el-slider__button.hover,.el-slider__runway.is-disabled .el-slider__button.dragging{cursor:not-allowed;transform:scale(1)}.el-slider__input{flex-shrink:0;width:130px}.el-slider__bar{height:var(--el-slider-height);background-color:var(--el-slider-main-bg-color);border-top-left-radius:var(--el-slider-border-radius);border-bottom-left-radius:var(--el-slider-border-radius);position:absolute}.el-slider__button-wrapper{height:var(--el-slider-button-wrapper-size);width:var(--el-slider-button-wrapper-size);z-index:1;top:var(--el-slider-button-wrapper-offset);text-align:center;-webkit-user-select:none;user-select:none;background-color:#0000;outline:none;line-height:normal;position:absolute;transform:translate(-50%)}.el-slider__button-wrapper:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-slider__button-wrapper:hover,.el-slider__button-wrapper.hover{cursor:grab}.el-slider__button-wrapper.dragging{cursor:grabbing}.el-slider__button{width:var(--el-slider-button-size);height:var(--el-slider-button-size);vertical-align:middle;border:solid 2px var(--el-slider-main-bg-color);background-color:var(--el-color-white);box-sizing:border-box;transition:var(--el-transition-duration-fast);-webkit-user-select:none;user-select:none;border-radius:50%;display:inline-block}.el-slider__button:hover,.el-slider__button.hover,.el-slider__button.dragging{transform:scale(1.2)}.el-slider__button:hover,.el-slider__button.hover{cursor:grab}.el-slider__button.dragging{cursor:grabbing}.el-slider__stop{height:var(--el-slider-height);width:var(--el-slider-height);border-radius:var(--el-border-radius-circle);background-color:var(--el-slider-stop-bg-color);position:absolute;transform:translate(-50%)}.el-slider__marks{width:18px;height:100%;top:0;left:12px}.el-slider__marks-text{color:var(--el-color-info);white-space:pre;margin-top:15px;font-size:14px;position:absolute;transform:translate(-50%)}.el-slider.is-vertical{flex:0;width:auto;height:100%;display:inline-flex;position:relative}.el-slider.is-vertical .el-slider__runway{width:var(--el-slider-height);height:100%;margin:0 16px}.el-slider.is-vertical .el-slider__bar{width:var(--el-slider-height);border-radius:0 0 3px 3px;height:auto}.el-slider.is-vertical .el-slider__button-wrapper{top:auto;left:var(--el-slider-button-wrapper-offset);transform:translateY(50%)}.el-slider.is-vertical .el-slider__stop{transform:translateY(50%)}.el-slider.is-vertical .el-slider__marks-text{margin-top:0;left:15px;transform:translateY(50%)}.el-slider--large{height:40px}.el-slider--small{height:24px}.el-space{vertical-align:top;display:inline-flex}.el-space__item{flex-wrap:wrap;display:flex}.el-space__item>*{flex:1}.el-space--vertical{flex-direction:column}.el-time-spinner{white-space:nowrap;width:100%}.el-spinner{vertical-align:middle;display:inline-block}.el-spinner-inner{width:50px;height:50px;animation:2s linear infinite rotate}.el-spinner-inner .path{stroke:var(--el-border-color-lighter);stroke-linecap:round;animation:1.5s ease-in-out infinite dash}@keyframes rotate{to{transform:rotate(360deg)}}@keyframes dash{0%{stroke-dasharray:1 150;stroke-dashoffset:0}50%{stroke-dasharray:90 150;stroke-dashoffset:-35px}to{stroke-dasharray:90 150;stroke-dashoffset:-124px}}.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-grow:0;flex-shrink:0;flex-basis:auto!important}.el-step:last-of-type .el-step__main,.el-step:last-of-type .el-step__description{padding-right:0}.el-step__head{width:100%;position:relative}.el-step__head.is-process{color:var(--el-text-color-primary);border-color:var(--el-text-color-primary)}.el-step__head.is-wait{color:var(--el-text-color-placeholder);border-color:var(--el-text-color-placeholder)}.el-step__head.is-success{color:var(--el-color-success);border-color:var(--el-color-success)}.el-step__head.is-error{color:var(--el-color-danger);border-color:var(--el-color-danger)}.el-step__head.is-finish{color:var(--el-color-primary);border-color:var(--el-color-primary)}.el-step__icon{z-index:1;box-sizing:border-box;background:var(--el-bg-color);justify-content:center;align-items:center;width:24px;height:24px;font-size:14px;transition:all .15s ease-out;display:inline-flex;position:relative}.el-step__icon.is-text{border:2px solid;border-radius:50%}.el-step__icon.is-icon{width:40px}.el-step__icon-inner{-webkit-user-select:none;user-select:none;text-align:center;color:inherit;font-weight:700;line-height:1;display:inline-block}.el-step__icon-inner[class*=el-icon]:not(.is-status){font-size:25px;font-weight:400}.el-step__icon-inner.is-status{transform:translateY(1px)}.el-step__line{background-color:var(--el-text-color-placeholder);border-color:currentColor;position:absolute}.el-step__line-inner{box-sizing:border-box;border:1px solid;width:0;height:0;transition:all .15s ease-out;display:block}.el-step__main{white-space:normal;text-align:left}.el-step__title{font-size:16px;line-height:38px}.el-step__title.is-process{color:var(--el-text-color-primary);font-weight:700}.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{margin-top:-5px;padding-right:10%;font-size:12px;font-weight:400;line-height:20px}.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;top:11px;left:0;right:0}.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{padding-bottom:8px;line-height:24px}.el-step.is-vertical .el-step__line{width:2px;top:0;bottom:0;left:11px}.el-step.is-vertical .el-step__icon.is-icon{width:24px}.el-step.is-vertical .el-step__description{padding-right:0}.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{width:auto;padding-right:10px;font-size:0}.el-step.is-simple .el-step__icon{background:0 0;width:16px;height:16px;font-size:12px}.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{flex-grow:1;align-items:stretch;display:flex;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{overflow-wrap:break-word;max-width:50%}.el-step.is-simple .el-step__arrow{flex-grow:1;justify-content:center;align-items:center;display:flex}.el-step.is-simple .el-step__arrow:before,.el-step.is-simple .el-step__arrow:after{content:"";background:var(--el-text-color-placeholder);width:1px;height:15px;display:inline-block;position:absolute}.el-step.is-simple .el-step__arrow:before{transform-origin:0 0;transform:rotate(-45deg)translateY(-4px)}.el-step.is-simple .el-step__arrow:after{transform-origin:100% 100%;transform:rotate(45deg)translateY(4px)}.el-step.is-simple:last-of-type .el-step__arrow{display:none}.el-steps{line-height:normal;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);vertical-align:middle;align-items:center;height:32px;font-size:14px;line-height:20px;display:inline-flex;position:relative}.el-switch.is-disabled .el-switch__core,.el-switch.is-disabled .el-switch__label{cursor:not-allowed}.el-switch__label{transition:var(--el-transition-duration-fast);cursor:pointer;vertical-align:middle;height:20px;color:var(--el-text-color-primary);font-size:14px;font-weight:500;display:inline-block}.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 *{font-size:14px;line-height:1;display:inline-block}.el-switch__label .el-icon{height:inherit}.el-switch__label .el-icon svg{vertical-align:middle}.el-switch__input{opacity:0;width:0;height:0;margin:0;position:absolute}.el-switch__input:focus-visible~.el-switch__core{outline:2px solid var(--el-switch-on-color);outline-offset:1px}.el-switch__core{border:1px solid var(--el-switch-border-color,var(--el-switch-off-color));box-sizing:border-box;background:var(--el-switch-off-color);cursor:pointer;min-width:40px;height:20px;transition:border-color var(--el-transition-duration),background-color var(--el-transition-duration);border-radius:10px;outline:none;align-items:center;display:inline-flex;position:relative}.el-switch__core .el-switch__inner{width:100%;transition:all var(--el-transition-duration);justify-content:center;align-items:center;height:16px;padding:0 4px 0 18px;display:flex;overflow:hidden}.el-switch__core .el-switch__inner-wrapper{color:var(--el-color-white);-webkit-user-select:none;user-select:none;text-overflow:ellipsis;white-space:nowrap;align-items:center;font-size:12px;display:flex;overflow:hidden}.el-switch__core .el-switch__action{border-radius:var(--el-border-radius-circle);transition:all var(--el-transition-duration);background-color:var(--el-color-white);width:16px;height:16px;color:var(--el-switch-off-color);justify-content:center;align-items:center;display:flex;position:absolute;left:1px}.el-switch.is-checked .el-switch__core{border-color:var(--el-switch-border-color,var(--el-switch-on-color));background-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{height:40px;font-size:14px;line-height:24px}.el-switch--large .el-switch__label{height:24px;font-size:14px}.el-switch--large .el-switch__label *{font-size:14px}.el-switch--large .el-switch__core{border-radius:12px;min-width:50px;height:24px}.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{width:20px;height: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{height:24px;font-size:12px;line-height:16px}.el-switch--small .el-switch__label{height:16px;font-size:12px}.el-switch--small .el-switch__label *{font-size:12px}.el-switch--small .el-switch__core{border-radius:8px;min-width:30px;height:16px}.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{width:12px;height: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{border:solid 1px var(--el-border-color-lighter);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;background-color:#fff;border-radius:2px}.el-table-filter__list{outline:none;min-width:100px;margin:0;padding:5px 0;list-style:none}.el-table-filter__list-item{cursor:pointer;line-height:36px;font-size:var(--el-font-size-base);outline:none;padding:0 10px}.el-table-filter__list-item:hover,.el-table-filter__list-item:focus{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:#fff}.el-table-filter__multiple{outline:none}.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{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table-filter__bottom button:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-filter__bottom button{color:var(--el-text-color-regular);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.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{height:unset;align-items:center;margin-bottom:12px;margin-left:5px;margin-right:5px;display:flex}.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-fill-color-blank);--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-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px #00000026;--el-table-fixed-right-column:inset -10px 0 10px -10px #00000026;--el-table-index:var(--el-index-normal);box-sizing:border-box;background-color:var(--el-table-bg-color);width:100%;max-width:100%;height:-moz-fit-content;height:fit-content;font-size:var(--el-font-size-base);color:var(--el-table-text-color);position:relative;overflow:hidden}.el-table__inner-wrapper{flex-direction:column;height:100%;display:flex;position:relative}.el-table__inner-wrapper:before{height:1px;bottom:0;left:0}.el-table tbody:focus-visible{outline:none}.el-table.has-footer.el-table--scrollable-y tr:last-child td.el-table__cell,.el-table.has-footer.el-table--fluid-height tr:last-child td.el-table__cell{border-bottom-color:#0000}.el-table__empty-block{text-align:center;justify-content:center;align-items:center;width:100%;min-height:60px;display:flex;position:sticky;left:0}.el-table__empty-text{width:50%;color:var(--el-text-color-secondary);line-height:60px}.el-table__expand-column .cell{text-align:center;-webkit-user-select:none;user-select:none;padding:0}.el-table__expand-icon{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:-2px}.el-table__expand-icon{color:var(--el-text-color-regular);width:min(23px,100%);height:23px;font-size:12px;line-height:12px}.el-table__expand-icon.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.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:#0000!important}.el-table__placeholder{width:20px;display:inline-block}.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;text-overflow:ellipsis;vertical-align:middle;text-align:left;min-width:0;z-index:var(--el-table-index);padding:8px 0;position:relative}.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;width:15px;padding:0}.el-table .el-table__cell.is-hidden>*{visibility:hidden}.el-table .cell{box-sizing:border-box;text-overflow:ellipsis;white-space:normal;overflow-wrap:break-word;padding:0 12px;line-height:23px;overflow:hidden}.el-table .cell.el-tooltip{white-space:nowrap;min-width:50px}.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 th.el-table__cell.is-leaf,.el-table td.el-table__cell{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{content:"";vertical-align:middle;background:#ff4d51;border-radius:50%;width:8px;height:8px;margin-right:5px;display:inline-block}.el-table td.el-table__cell div{box-sizing:border-box}.el-table td.el-table__cell.gutter{width:0}.el-table--border:after,.el-table--border:before,.el-table--border .el-table__inner-wrapper:after,.el-table__inner-wrapper:before{content:"";background-color:var(--el-table-border-color);z-index:calc(var(--el-table-index) + 2);position:absolute}.el-table--border .el-table__inner-wrapper:after{width:100%;height:1px;z-index:calc(var(--el-table-index) + 2);top:0;left:0}.el-table--border:before{width:1px;height:100%;top:-1px;left:0}.el-table--border:after{width:1px;height:100%;top:-1px;right:0}.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__header-wrapper,.el-table__body-wrapper,.el-table__footer-wrapper{width:100%}.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,.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{background:inherit;z-index:calc(var(--el-table-index) + 1);position:sticky!important}.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--left.is-first-column:before,.el-table__header-wrapper tr td.el-table-fixed-column--right.is-last-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-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--right.is-last-column:before,.el-table__header-wrapper tr th.el-table-fixed-column--right.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--left.is-first-column:before,.el-table__body-wrapper tr td.el-table-fixed-column--right.is-last-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-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--right.is-last-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-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--right.is-last-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-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--right.is-last-column:before,.el-table__footer-wrapper tr th.el-table-fixed-column--right.is-first-column:before{content:"";width:10px;box-shadow:none;touch-action:none;pointer-events:none;position:absolute;top:0;bottom:0;overflow:hidden}.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,.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{left:-10px}.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,.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{right:-10px}.el-table__header-wrapper tr td.el-table__fixed-right-patch,.el-table__header-wrapper tr th.el-table__fixed-right-patch,.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{z-index:calc(var(--el-table-index) + 1);background:#fff;right:0;position:sticky!important}.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__header,.el-table__body,.el-table__footer{table-layout:fixed;border-collapse:separate}.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__header-wrapper .el-table-column--selection>.cell,.el-table__body-wrapper .el-table-column--selection>.cell{align-items:center;height:23px;display:inline-flex}.el-table__header-wrapper .el-table-column--selection .el-checkbox,.el-table__body-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;position:relative;overflow:hidden}.el-table__body-wrapper .el-scrollbar__bar{z-index:calc(var(--el-table-index) + 2)}.el-table .caret-wrapper{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table .caret-wrapper:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table .caret-wrapper{vertical-align:middle;width:24px;height:14px;overflow:initial;flex-direction:column;align-items:center;display:inline-flex;position:relative}.el-table .sort-caret{border:5px solid #0000;width:0;height:0;position:absolute;left:7px}.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{visibility:hidden;z-index:-1;position:absolute}.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>td.el-table__cell,.el-table__body tr.hover-row.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.el-table__row--striped.current-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{z-index:calc(var(--el-table-index) + 2);position:sticky;top:0}.el-table.el-table--scrollable-y .el-table__body-footer{z-index:calc(var(--el-table-index) + 2);position:sticky;bottom:0}.el-table__column-resize-proxy{border-left:var(--el-table-border);width:0;z-index:calc(var(--el-table-index) + 9);position:absolute;top:0;bottom:0;left:200px}.el-table__column-filter-trigger{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table__column-filter-trigger:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table__column-filter-trigger{display:inline-block}.el-table__column-filter-trigger i{color:var(--el-color-info);vertical-align:middle;font-size:14px}.el-table__border-left-patch{width:1px;height:100%;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;top:0;left:0}.el-table__border-bottom-patch{height:1px;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;left:0}.el-table__border-right-patch{width:1px;height:100%;z-index:calc(var(--el-table-index) + 2);background-color:var(--el-table-border-color);position:absolute;top:0}.el-table--enable-row-transition .el-table__body td.el-table__cell{transition:background-color .25s}.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{text-align:center;width:20px;display:inline-block}.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-fill-color-blank);--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-fill-color-blank);--el-table-expanded-cell-bg-color:var(--el-fill-color-blank);--el-table-fixed-left-column:inset 10px 0 10px -10px #00000026;--el-table-fixed-right-column:inset -10px 0 10px -10px #00000026;--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);flex-direction:column-reverse;display:flex;position:absolute;top:0;left:0;overflow:hidden}.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);flex-direction:column-reverse;display:flex;position:absolute;top:0;left:0;overflow:hidden;box-shadow:2px 0 4px #0000000f}.el-table-v2__left .el-virtual-scrollbar{opacity:0}.el-table-v2__left .el-vl__vertical,.el-table-v2__left .el-vl__horizontal{z-index:-1}.el-table-v2__right{background-color:var(--el-bg-color);flex-direction:column-reverse;display:flex;position:absolute;top:0;right:0;overflow:hidden;box-shadow:-2px 0 4px #0000000f}.el-table-v2__right .el-virtual-scrollbar{opacity:0}.el-table-v2__right .el-vl__vertical,.el-table-v2__right .el-vl__horizontal{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{position:relative;overflow:hidden}.el-table-v2__header .el-checkbox{z-index:0}.el-table-v2__footer{position:absolute;bottom:0;left:0;right:0;overflow:hidden}.el-table-v2__empty{position:absolute;left:0}.el-table-v2__overlay{z-index:9999;position:absolute;inset:0}.el-table-v2__header-row{border-bottom:var(--el-table-border);display:flex}.el-table-v2__header-cell{-webkit-user-select:none;user-select:none;background-color:var(--el-table-header-bg-color);height:100%;color:var(--el-table-header-text-color);align-items:center;padding:0 8px;font-weight:700;display:flex;overflow:hidden}.el-table-v2__header-cell.is-align-center{text-align:center;justify-content:center}.el-table-v2__header-cell.is-align-right{text-align:right;justify-content:flex-end}.el-table-v2__header-cell.is-sortable{cursor:pointer}.el-table-v2__header-cell:hover .el-icon{display:block}.el-table-v2__sort-icon{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table-v2__sort-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-v2__sort-icon{transition:opacity,display var(--el-transition-duration);opacity:.6;display:none}.el-table-v2__sort-icon.is-sorting{opacity:1;display:flex}.el-table-v2__row{border-bottom:var(--el-table-border);transition:background-color var(--el-transition-duration);align-items:center;display:flex}.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;height:100%;padding:0 8px;display:flex;overflow:hidden}.el-table-v2__row-cell.is-align-center{text-align:center;justify-content:center}.el-table-v2__row-cell.is-align-right{text-align:right;justify-content:flex-end}.el-table-v2__expand-icon{cursor:pointer;-webkit-appearance:none;-moz-appearance:none;appearance:none;border-radius:var(--el-border-radius-base);transition:transform var(--el-transition-duration-fast) ease-in-out;background-color:#0000;border:none;outline:none;margin:0;padding:0}.el-table-v2__expand-icon:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-table-v2__expand-icon{-webkit-user-select:none;user-select:none;margin:0 4px}.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{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.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{justify-content:space-between;align-items:center;margin:0 0 15px;padding:0;display:flex;position:relative}.el-tabs__header-vertical{flex-direction:column}.el-tabs__active-bar{background-color:var(--el-color-primary);z-index:1;height:2px;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);list-style:none;position:absolute;bottom:0;left:0}.el-tabs__active-bar.is-bottom{bottom:auto}.el-tabs__new-tab{border:1px solid var(--el-border-color);text-align:center;width:20px;height:20px;color:var(--el-text-color-primary);cursor:pointer;border-radius:3px;flex-shrink:0;justify-content:center;align-items:center;margin:10px 0 10px 10px;font-size:12px;line-height:20px;transition:all .15s;display:flex}.el-tabs__new-tab .is-icon-plus{height:inherit;width:inherit;transform:scale(.8)}.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:auto;margin-bottom:-1px;position:relative;overflow:hidden}.el-tabs__nav-wrap:after{content:"";background-color:var(--el-border-color-light);width:100%;height:2px;z-index:var(--el-index-normal);position:absolute;bottom:0;left:0}.el-tabs__nav-wrap.is-bottom:after{top:0;bottom:auto}.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{cursor:pointer;color:var(--el-text-color-secondary);text-align:center;width:20px;font-size:12px;line-height:44px;position:absolute}.el-tabs__nav-next.is-disabled,.el-tabs__nav-prev.is-disabled{color:var(--el-text-color-disabled);cursor:not-allowed}.el-tabs__nav-next{right:0}.el-tabs__nav-prev{left:0}.el-tabs__nav{white-space:nowrap;transition:transform var(--el-transition-duration);float:left;z-index:calc(var(--el-index-normal) + 1);display:flex;position:relative}.el-tabs__nav.is-stretch{min-width:100%;display:flex}.el-tabs__nav.is-stretch>*{text-align:center;flex:1}.el-tabs__item{height:var(--el-tabs-header-height);box-sizing:border-box;font-size:var(--el-font-size-base);color:var(--el-text-color-primary);justify-content:center;align-items:center;padding:0 20px;font-weight:500;list-style:none;display:flex;position:relative}.el-tabs__item:focus,.el-tabs__item:focus:active{outline:none}.el-tabs__item:focus-visible{box-shadow:0 0 2px 2px var(--el-color-primary) inset;border-radius:3px}.el-tabs__item .is-icon-close{text-align:center;transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);border-radius:50%;margin-left:5px}.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:#fff}.el-tabs__item.is-active{color:var(--el-color-primary)}.el-tabs__item:hover{color:var(--el-color-primary);cursor:pointer}.el-tabs__item.is-disabled{color:var(--el-disabled-text-color);cursor:not-allowed}.el-tabs__content{flex-grow:1;position:relative;overflow:hidden}.el-tabs--top>.el-tabs__header .el-tabs__item:nth-child(2),.el-tabs--bottom>.el-tabs__header .el-tabs__item:nth-child(2){padding-left:0}.el-tabs--top>.el-tabs__header .el-tabs__item:last-child,.el-tabs--bottom>.el-tabs__header .el-tabs__item:last-child{padding-right:0}.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),.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){padding-left:20px}.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,.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{padding-right:20px}.el-tabs--card>.el-tabs__header{border-bottom:1px solid var(--el-border-color-light);height:var(--el-tabs-header-height);box-sizing:border-box}.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);box-sizing:border-box;border-bottom:none;border-radius:4px 4px 0 0}.el-tabs--card>.el-tabs__header .el-tabs__active-bar{display:none}.el-tabs--card>.el-tabs__header .el-tabs__item .is-icon-close{transform-origin:100%;width:0;height:14px;font-size:12px;position:relative;right:-2px;overflow:hidden}.el-tabs--card>.el-tabs__header .el-tabs__item{border-bottom:1px solid #0000;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);margin-top:-1px}.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{transition:all var(--el-transition-duration) var(--el-transition-function-ease-in-out-bezier);color:var(--el-text-color-secondary);border:1px solid #0000;margin-top:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item:first-child,.el-tabs--border-card>.el-tabs__header .el-tabs__item+.el-tabs__item{margin-left:-1px}.el-tabs--border-card>.el-tabs__header .el-tabs__item.is-active{color:var(--el-color-primary);background-color:var(--el-bg-color-overlay);border-right-color:var(--el-border-color);border-left-color:var(--el-border-color)}.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-top:10px;margin-bottom:0}.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-top:-1px;margin-bottom:0}.el-tabs--bottom.el-tabs--border-card .el-tabs__item.is-bottom:not(.is-active){border:1px solid #0000}.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-wrap.is-left,.el-tabs--left .el-tabs__nav-wrap.is-right,.el-tabs--left .el-tabs__nav-scroll,.el-tabs--right .el-tabs__header.is-left,.el-tabs--right .el-tabs__header.is-right,.el-tabs--right .el-tabs__nav-wrap.is-left,.el-tabs--right .el-tabs__nav-wrap.is-right,.el-tabs--right .el-tabs__nav-scroll{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{width:2px;height:auto;top:0;bottom:auto}.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-prev,.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-prev,.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-prev,.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-prev,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next{text-align:center;cursor:pointer;width:100%;height:30px;line-height:30px}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next i,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--left .el-tabs__nav-wrap.is-right>.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-left>.el-tabs__nav-next i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev i,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next i{transform:rotate(90deg)}.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev.is-disabled,.el-tabs--left .el-tabs__nav-wrap.is-left>.el-tabs__nav-next.is-disabled,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev.is-disabled,.el-tabs--left .el-tabs__nav-wrap.is-right>.el-tabs__nav-next.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-prev.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-left>.el-tabs__nav-next.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-prev.is-disabled,.el-tabs--right .el-tabs__nav-wrap.is-right>.el-tabs__nav-next.is-disabled{cursor:not-allowed}.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{top:0;left:auto}.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{width:2px;height:100%;top:0;bottom:auto}.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}.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__nav-wrap.is-left:after,.el-tabs--left .el-tabs__active-bar.is-left{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-left:none;border-right:1px solid var(--el-border-color-light);border-bottom:none;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-color:#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-right:none;border-radius:4px 0 0 4px}.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 #0000;margin:-1px 0 -1px -1px}.el-tabs--left.el-tabs--border-card .el-tabs__item.is-left.is-active{border-color:#d1dbe5 #0000}.el-tabs--left>.el-tabs__content+.el-tabs__header{order:-1}.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-color:#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 #0000;margin:-1px -1px -1px 0}.el-tabs--right.el-tabs--border-card .el-tabs__item.is-right.is-active{border-color:#d1dbe5 #0000}.el-tabs--top{flex-direction:column}.el-tabs--top>.el-tabs__content+.el-tabs__header{order:-1}.slideInRight-transition,.slideInLeft-transition{display:inline-block}.slideInRight-enter{animation:slideInRight-enter var(--el-transition-duration)}.slideInRight-leave{animation:slideInRight-leave var(--el-transition-duration);position:absolute;left:0;right:0}.slideInLeft-enter{animation:slideInLeft-enter var(--el-transition-duration)}.slideInLeft-leave{animation:slideInLeft-leave var(--el-transition-duration);position:absolute;left:0;right:0}@keyframes slideInRight-enter{0%{opacity:0;transform-origin:0 0;transform:translate(100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInRight-leave{0%{transform-origin:0 0;opacity:1;transform:translate(0)}to{transform-origin:0 0;opacity:0;transform:translate(100%)}}@keyframes slideInLeft-enter{0%{opacity:0;transform-origin:0 0;transform:translate(-100%)}to{opacity:1;transform-origin:0 0;transform:translate(0)}}@keyframes slideInLeft-leave{0%{transform-origin:0 0;opacity:1;transform:translate(0)}to{transform-origin:0 0;opacity:0;transform:translate(-100%)}}.el-tag{--el-tag-font-size:12px;--el-tag-border-radius:4px;--el-tag-border-radius-rounded:9999px;background-color:var(--el-tag-bg-color);border-color:var(--el-tag-border-color);color:var(--el-tag-text-color);vertical-align:middle;height:24px;font-size:var(--el-tag-font-size);border-radius:var(--el-tag-border-radius);box-sizing:border-box;white-space:nowrap;--el-icon-size:14px;--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);border-style:solid;border-width:1px;justify-content:center;align-items:center;padding:0 9px;line-height:1;display:inline-flex}.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{color:var(--el-color-white);background-color:var(--el-tag-hover-color)}.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{cursor:pointer;font-size:calc(var(--el-icon-size) - 2px);height:var(--el-icon-size);width:var(--el-icon-size);border-radius:50%;display:flex}.el-tag .el-tag__close{background-color:#0000;border:none;border-radius:50%;outline:none;margin-left:6px;padding:0;overflow:hidden}.el-tag .el-tag__close:focus-visible{outline:2px solid var(--el-color-primary);outline-offset:2px}.el-tag--dark{--el-tag-text-color:var(--el-color-white);--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--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--primary,.el-tag--dark.el-tag--success,.el-tag--dark.el-tag--warning,.el-tag--dark.el-tag--danger,.el-tag--dark.el-tag--error,.el-tag--dark.el-tag--info{--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{--el-icon-size:16px;height:32px;padding:0 11px}.el-tag--large .el-tag__close{margin-left:8px}.el-tag--large.is-closable{padding-right:7px}.el-tag--small{--el-icon-size:12px;height:20px;padding:0 7px}.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);font-size:var(--el-text-font-size);color:var(--el-text-color);overflow-wrap:break-word;align-self:center;margin:0;padding:0}.el-text.is-truncated{text-overflow:ellipsis;white-space:nowrap;max-width:100%;display:inline-block;overflow:hidden}.el-text.is-line-clamp{-webkit-box-orient:vertical;display:-webkit-inline-box;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{min-width:0;margin:5px 0}.time-select .el-picker-panel__content{max-height:200px;margin:0}.time-select-item{padding:8px 10px;font-size:14px;line-height:20px}.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:700}.time-select .time-select-item.selected:not(.disabled){color:var(--el-color-primary);font-weight:700}.el-timeline-item{padding-bottom:20px;position:relative}.el-timeline-item__wrapper{box-sizing:content-box;position:relative;top:-3px}.el-timeline-item__tail{border-left:2px solid var(--el-timeline-node-color);height:100%;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{background-color:var(--el-timeline-node-color);border-color:var(--el-timeline-node-color);box-sizing:border-box;border-radius:50%;justify-content:center;align-items:center;display:flex;position:absolute}.el-timeline-item__node--normal{width:var(--el-timeline-node-size-normal);height:var(--el-timeline-node-size-normal)}.el-timeline-item__node--large{width:var(--el-timeline-node-size-large);height: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{justify-content:center;align-items:center;display:flex;position:absolute}.el-timeline-item__content{color:var(--el-text-color-primary)}.el-timeline-item__timestamp{color:var(--el-text-color-secondary);line-height:1;font-size:var(--el-font-size-small)}.el-timeline-item__timestamp.is-top{margin-bottom:8px;padding-top:4px}.el-timeline-item__timestamp.is-bottom{margin-top:8px}.el-timeline-item.is-start .el-timeline-item__wrapper{padding-left:28px}.el-timeline-item.is-start .el-timeline-item__tail{left:4px}.el-timeline-item.is-start .el-timeline-item__node--normal{left:-1px}.el-timeline-item.is-start .el-timeline-item__node--large{left:-2px}.el-timeline-item.is-end .el-timeline-item__wrapper{text-align:right;padding-right:28px}.el-timeline-item.is-end .el-timeline-item__tail{right:4px}.el-timeline-item.is-end .el-timeline-item__node--normal{right:-1px}.el-timeline-item.is-end .el-timeline-item__node--large{right:-2px}.el-timeline-item.is-alternate .el-timeline-item__tail,.el-timeline-item.is-alternate .el-timeline-item__node,.el-timeline-item.is-alternate-reverse .el-timeline-item__tail,.el-timeline-item.is-alternate-reverse .el-timeline-item__node{left:50%;transform:translate(-50%)}.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);margin:0;list-style:none}.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{height:calc(50% - 10px);display:block}.el-timeline.is-start{padding-left:40px;padding-right:0}.el-timeline.is-end{padding-left:0;padding-right:40px}.el-timeline.is-alternate{padding-left:20px;padding-right:20px}.el-timeline.is-alternate .el-timeline-item:nth-child(odd) .el-timeline-item__wrapper{width:calc(50% - 28px);left:calc(50% - var(--el-timeline-node-size-large) / 2);padding-left:28px}.el-timeline.is-alternate .el-timeline-item:nth-child(2n) .el-timeline-item__wrapper{width:calc(50% - 28px + var(--el-timeline-node-size-large) / 2);text-align:right;padding-right:28px}.el-timeline.is-alternate-reverse{padding-left:20px;padding-right:20px}.el-timeline.is-alternate-reverse .el-timeline-item:nth-child(odd) .el-timeline-item__wrapper{width:calc(50% - 28px + var(--el-timeline-node-size-large) / 2);text-align:right;padding-right:28px}.el-timeline.is-alternate-reverse .el-timeline-item:nth-child(2n) .el-timeline-item__wrapper{width:calc(50% - 28px);left:calc(50% - var(--el-timeline-node-size-large) / 2);padding-left:28px}.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{vertical-align:middle;padding:0 30px;display:inline-block}.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);text-align:left;vertical-align:middle;width:var(--el-transfer-panel-width);box-sizing:border-box;max-height:100%;display:inline-block;position:relative;overflow:hidden}.el-transfer-panel__body{height:var(--el-transfer-panel-body-height);border-left:1px solid var(--el-transfer-border-color);border-right:1px solid var(--el-transfer-border-color);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);overflow:hidden}.el-transfer-panel__body.is-with-footer{border-bottom:none;border-bottom-right-radius:0;border-bottom-left-radius:0}.el-transfer-panel__list{height:var(--el-transfer-panel-body-height);box-sizing:border-box;margin:0;padding:6px 0;list-style:none;overflow:auto}.el-transfer-panel__list.is-filterable{height:calc(100% - var(--el-transfer-filter-height) - 30px);padding-top:0}.el-transfer-panel__item{height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);padding-left:15px;display:block!important}.el-transfer-panel__item+.el-transfer-panel__item{margin-left:0}.el-transfer-panel__item.el-checkbox{color:var(--el-text-color-regular);margin-right:30px}.el-transfer-panel__item:hover{color:var(--el-color-primary)}.el-transfer-panel__item.el-checkbox .el-checkbox__label{text-overflow:ellipsis;white-space:nowrap;box-sizing:border-box;width:100%;line-height:var(--el-transfer-item-height);padding-left:22px;display:block;overflow:hidden}.el-transfer-panel__item .el-checkbox__input{position:absolute;top:8px}.el-transfer-panel__filter{text-align:center;box-sizing:border-box;padding:15px}.el-transfer-panel__filter .el-input__inner{height:var(--el-transfer-filter-height);box-sizing:border-box;width:100%;font-size:12px;display:inline-block}.el-transfer-panel__filter .el-icon-circle-close{cursor:pointer}.el-transfer-panel .el-transfer-panel__header{height:var(--el-transfer-panel-header-height);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);align-items:center;margin:0;padding-left:15px;display:flex}.el-transfer-panel .el-transfer-panel__header .el-checkbox{align-items:center;width:100%;display:flex;position:relative}.el-transfer-panel .el-transfer-panel__header .el-checkbox .el-checkbox__label{min-width:0;color:var(--el-text-color-primary);flex:1;align-items:center;font-size:16px;font-weight:400;display:flex}.el-transfer-panel .el-transfer-panel__header-title{text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;overflow:hidden}.el-transfer-panel .el-transfer-panel__header-count{color:var(--el-text-color-secondary);flex-shrink:0;margin-left:8px;margin-right:15px;font-size:12px}.el-transfer-panel .el-transfer-panel__footer{height:var(--el-transfer-panel-footer-height);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);margin:0;padding:0}.el-transfer-panel .el-transfer-panel__footer:after{content:"";vertical-align:middle;height:100%;display:inline-block}.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{height:var(--el-transfer-item-height);line-height:var(--el-transfer-item-height);color:var(--el-text-color-secondary);text-align:center;margin:0;padding:6px 15px 0}.el-transfer-panel .el-checkbox__label{padding-left:8px}.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);cursor:default;background:var(--el-fill-color-blank);color:var(--el-tree-text-color);font-size:var(--el-font-size-base);position:relative}.el-tree__empty-block{text-align:center;width:100%;height:100%;min-height:60px;position:relative}.el-tree__empty-text{color:var(--el-text-color-secondary);font-size:var(--el-font-size-base);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-tree__drop-indicator{background-color:var(--el-color-primary);height:1px;position:absolute;left:0;right:0}.el-tree-node{white-space:nowrap;outline:none}.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);height:var(--el-tree-node-content-height);cursor:pointer;align-items:center;display:flex}.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{cursor:pointer;color:var(--el-tree-expand-icon-color);transition:transform var(--el-transition-duration) ease-in-out;font-size:12px;transform:rotate(0)}.el-tree-node__expand-icon.expanded{transform:rotate(90deg)}.el-tree-node__expand-icon.is-leaf{color:#0000;cursor:default;visibility:hidden}.el-tree-node__expand-icon.is-hidden{visibility:hidden}.el-tree-node__loading-icon{font-size:var(--el-font-size-base);color:var(--el-tree-expand-icon-color);margin-right:8px}.el-tree-node>.el-tree-node__children{background-color:#0000;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{flex:1;height:20px;padding-left:0;line-height:20px;background:0 0!important}.el-upload{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;cursor:pointer;outline:none;justify-content:center;align-items:center;display:inline-flex}.el-upload.is-disabled{cursor:not-allowed}.el-upload.is-disabled:focus{border-color:var(--el-border-color-darker);color:inherit}.el-upload.is-disabled:focus .el-upload-dragger{border-color:var(--el-border-color-darker)}.el-upload.is-disabled .el-upload-dragger{cursor:not-allowed;background-color:var(--el-disabled-bg-color)}.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);margin-top:7px;font-size:12px}.el-upload iframe{z-index:-1;opacity:0;filter:alpha(opacity=0);position:absolute;top:0;left:0}.el-upload--picture-card{background-color:var(--el-fill-color-lighter);border:1px dashed var(--el-border-color-darker);box-sizing:border-box;width:var(--el-upload-picture-card-size);height:var(--el-upload-picture-card-size);cursor:pointer;vertical-align:top;border-radius:6px;justify-content:center;align-items:center;display:inline-flex}.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{border-color:var(--el-color-primary);color:var(--el-color-primary)}.el-upload:focus .el-upload-dragger{border-color:var(--el-color-primary)}.el-upload-dragger{padding:var(--el-upload-dragger-padding-vertical) var(--el-upload-dragger-padding-horizontal);background-color:var(--el-fill-color-blank);border:1px dashed var(--el-border-color);box-sizing:border-box;text-align:center;cursor:pointer;border-radius:6px;position:relative;overflow:hidden}.el-upload-dragger .el-icon--upload{color:var(--el-text-color-placeholder);margin-bottom:16px;font-size:67px;line-height:50px}.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);text-align:center;font-size:14px}.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{padding:calc(var(--el-upload-dragger-padding-vertical) - 1px) calc(var(--el-upload-dragger-padding-horizontal) - 1px);background-color:var(--el-color-primary-light-9);border:2px dashed var(--el-color-primary)}.el-upload-list{--el-upload-dragger-padding-horizontal:10px;--el-upload-dragger-padding-vertical:40px;--el-upload-list-picture-card-size:var(--el-upload-picture-card-size);--el-upload-picture-card-size:148px;margin:10px 0 0;padding:0;list-style:none;position:relative}.el-upload-list__item{color:var(--el-text-color-regular);box-sizing:border-box;border-radius:4px;width:100%;margin-bottom:5px;font-size:14px;transition:all .5s cubic-bezier(.55,0,.1,1);position:relative}.el-upload-list__item .el-progress{width:100%;position:absolute;top:20px}.el-upload-list__item .el-progress__text{position:absolute;top:-13px;right:0}.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{cursor:pointer;opacity:.75;color:var(--el-text-color-regular);transition:opacity var(--el-transition-duration);display:none;position:absolute;top:50%;right:5px;transform:translateY(-50%)}.el-upload-list__item .el-icon--close:hover{opacity:1;color:var(--el-color-primary)}.el-upload-list__item .el-icon--close-tip{cursor:pointer;opacity:1;color:var(--el-color-primary);font-size:12px;font-style:normal;display:none;position:absolute;top:1px;right:5px}.el-upload-list__item:hover,.el-upload-list__item:focus-within{background-color:var(--el-fill-color-light)}.el-upload-list__item:hover .el-icon--close,.el-upload-list__item:focus-within .el-icon--close{display:inline-flex}.el-upload-list__item:hover .el-icon--close-tip,.el-upload-list__item:focus-within .el-icon--close-tip{right:24px}.el-upload-list__item:hover .el-progress__text,.el-upload-list__item:focus-within .el-progress__text{display:none}.el-upload-list__item .el-upload-list__item-info{flex-direction:column;justify-content:center;width:calc(100% - 30px);margin-left:4px;display:inline-flex}.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:hover,.el-upload-list__item.is-success .el-upload-list__item-name:focus{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:not(.focusing):focus,.el-upload-list__item.is-success:active{outline-width:0}.el-upload-list__item.is-success:not(.focusing):focus .el-icon--close-tip,.el-upload-list__item.is-success:active .el-icon--close-tip{display:none}.el-upload-list__item.is-success:hover .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus .el-upload-list__item-status-label,.el-upload-list__item.is-success:focus-within .el-upload-list__item-status-label{opacity:0;display:none}.el-upload-list__item-name{color:var(--el-text-color-regular);text-align:center;transition:color var(--el-transition-duration);font-size:var(--el-font-size-base);align-items:center;padding:0 4px;display:inline-flex}.el-upload-list__item-name .el-icon{color:var(--el-text-color-secondary);margin-right:6px}.el-upload-list__item-file-name{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.el-upload-list__item-status-label{line-height:inherit;height:100%;transition:opacity var(--el-transition-duration);justify-content:center;align-items:center;display:none;position:absolute;top:0;right:5px}.el-upload-list__item-delete{color:var(--el-text-color-regular);font-size:12px;display:none;position:absolute;top:0;right:10px}.el-upload-list__item-delete:hover{color:var(--el-color-primary)}.el-upload-list--picture-card{flex-wrap:wrap;margin:0;display:inline-flex}.el-upload-list--picture-card .el-upload-list__item{background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);box-sizing:border-box;width:var(--el-upload-list-picture-card-size);height:var(--el-upload-list-picture-card-size);border-radius:6px;margin:0 8px 8px 0;padding:0;display:inline-flex;overflow:hidden}.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:#fff}.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{opacity:0;display:block}.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{object-fit:contain;width:100%;height:100%}.el-upload-list--picture-card .el-upload-list__item-status-label{background:var(--el-color-success);text-align:center;width:40px;height:24px;top:-6px;right:-15px;transform:rotate(45deg)}.el-upload-list--picture-card .el-upload-list__item-status-label i{margin-top:11px;font-size:12px;transform:rotate(-45deg)}.el-upload-list--picture-card .el-upload-list__item-actions{cursor:default;color:#fff;opacity:0;background-color:var(--el-overlay-color-lighter);width:100%;height:100%;transition:opacity var(--el-transition-duration);justify-content:center;align-items:center;font-size:20px;display:inline-flex;position:absolute;top:0;left:0}.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{font-size:inherit;color: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{width:126px;top:50%;bottom:auto;left:50%;transform:translate(-50%,-50%)}.el-upload-list--picture-card .el-progress .el-progress__text{top:50%}.el-upload-list--picture .el-upload-list__item{z-index:0;background-color:var(--el-fill-color-blank);border:1px solid var(--el-border-color);box-sizing:border-box;border-radius:6px;align-items:center;margin-top:10px;padding:10px;display:flex;overflow:hidden}.el-upload-list--picture .el-upload-list__item .el-icon--check,.el-upload-list--picture .el-upload-list__item .el-icon--circle-check{color:#fff}.el-upload-list--picture .el-upload-list__item:hover .el-upload-list__item-status-label{opacity:0;display:inline-flex}.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{object-fit:contain;z-index:1;background-color:var(--el-color-white);justify-content:center;align-items:center;width:70px;height:70px;display:inline-flex;position:relative}.el-upload-list--picture .el-upload-list__item-status-label{background:var(--el-color-success);text-align:center;width:46px;height:26px;position:absolute;top:-7px;right:-17px;transform:rotate(45deg)}.el-upload-list--picture .el-upload-list__item-status-label i{margin-top:12px;font-size:12px;transform:rotate(-45deg)}.el-upload-list--picture .el-progress{position:relative;top:-7px}.el-upload-cover{z-index:10;cursor:default;width:100%;height:100%;position:absolute;top:0;left:0;overflow:hidden}.el-upload-cover:after{content:"";vertical-align:middle;height:100%;display:inline-block}.el-upload-cover img{width:100%;height:100%;display:block}.el-upload-cover__label{background:var(--el-color-success);text-align:center;width:40px;height:24px;top:-6px;right:-15px;transform:rotate(45deg)}.el-upload-cover__label i{color:#fff;margin-top:11px;font-size:12px;transform:rotate(-45deg)}.el-upload-cover__progress{vertical-align:middle;width:243px;display:inline-block;position:static}.el-upload-cover__progress+.el-upload__inner{opacity:0}.el-upload-cover__content{width:100%;height:100%;position:absolute;top:0;left:0}.el-upload-cover__interact{background-color:var(--el-overlay-color-light);text-align:center;width:100%;height:100%;position:absolute;bottom:0;left:0}.el-upload-cover__interact .btn{color:#fff;cursor:pointer;vertical-align:middle;transition:var(--el-transition-md-fade);margin-top:60px;font-size:14px;display:inline-block}.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:#fff;font-size:24px;line-height:inherit;margin:0 auto 5px;display:block}.el-upload-cover__title{text-overflow:ellipsis;white-space:nowrap;text-align:left;width:100%;height:36px;color:var(--el-text-color-primary);background-color:#fff;margin:0;padding:0 10px;font-size:14px;font-weight:400;line-height:36px;position:absolute;bottom:0;left:0;overflow:hidden}.el-upload-cover+.el-upload__inner{opacity:0;z-index:1;position:relative}.el-vl__wrapper{position:relative}.el-vl__wrapper:hover .el-virtual-scrollbar,.el-vl__wrapper.always-on .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);--el-popper-bg-color-light:var(--el-bg-color-overlay);--el-popper-bg-color-dark:var(--el-text-color-primary);border-radius:var(--el-popper-border-radius);z-index:2000;overflow-wrap:break-word;word-break:normal;visibility:visible;min-width:10px;padding:5px 11px;font-size:12px;line-height:20px;position:absolute}.el-popper.is-dark{--el-fill-color-blank:var(--el-popper-bg-color-dark);color:var(--el-bg-color);background:var(--el-popper-bg-color-dark);border:1px solid var(--el-text-color-primary)}.el-popper.is-dark>.el-popper__arrow:before{border:1px solid var(--el-text-color-primary);background:var(--el-popper-bg-color-dark);right:0}.el-popper.is-light{--el-fill-color-blank:var(--el-popper-bg-color-light);background:var(--el-popper-bg-color-light);border:1px solid var(--el-border-color-light)}.el-popper.is-light>.el-popper__arrow:before{border:1px solid var(--el-border-color-light);background:var(--el-popper-bg-color-light);right:0}.el-popper.is-pure{padding:0}.el-popper__arrow{z-index:-1;width:10px;height:10px;position:absolute}.el-popper__arrow:before{z-index:-1;content:" ";background:var(--el-text-color-primary);box-sizing:border-box;width:10px;height:10px;position:absolute;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-top-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=bottom]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-right-color:#0000!important}.el-popper[data-popper-placement^=left]>.el-popper__arrow:before{border-bottom-color:#0000!important;border-left-color:#0000!important}.el-popper[data-popper-placement^=right]>.el-popper__arrow:before{border-top-color:#0000!important;border-right-color:#0000!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{font-weight:var(--el-statistic-title-font-weight);font-size:var(--el-statistic-title-font-size);color:var(--el-statistic-title-color);margin-bottom:4px;line-height:20px}.el-statistic__content{font-weight:var(--el-statistic-content-font-weight);font-size:var(--el-statistic-content-font-size);color:var(--el-statistic-content-color)}.el-statistic__value{display:inline-block}.el-statistic__prefix{margin-right:4px;display:inline-block}.el-statistic__suffix{margin-left:4px;display:inline-block}.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);width:var(--el-tour-width);padding:var(--el-tour-padding-primary);background:var(--el-tour-bg-color);box-shadow:var(--el-box-shadow-light);box-sizing:border-box;overflow-wrap:break-word;outline:none}.el-tour__arrow{background:var(--el-tour-bg-color);pointer-events:none;box-sizing:border-box;width:10px;height:10px;position:absolute;transform:rotate(45deg)}.el-tour__content[data-side^=top] .el-tour__arrow{border-top-color:#0000;border-left-color:#0000}.el-tour__content[data-side^=bottom] .el-tour__arrow{border-bottom-color:#0000;border-right-color:#0000}.el-tour__content[data-side^=left] .el-tour__arrow{border-bottom-color:#0000;border-left-color:#0000}.el-tour__content[data-side^=right] .el-tour__arrow{border-top-color:#0000;border-right-color:#0000}.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{cursor:pointer;width:40px;height:40px;font-size:var(--el-message-close-size,16px);background:0 0;border:none;outline:none;padding:0;position:absolute;top:0;right:0}.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{line-height:var(--el-tour-font-line-height);font-size:var(--el-tour-title-font-size);color:var(--el-tour-title-text-color);font-weight:var(--el-tour-title-font-weight)}.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{padding-top:var(--el-tour-padding-primary);box-sizing:border-box;justify-content:space-between;display:flex}.el-tour__content .el-tour-indicators{flex:1;display:inline-block}.el-tour__content .el-tour-indicator{background:var(--el-color-info-light-9);border-radius:50%;width:6px;height:6px;margin-right:6px;display:inline-block}.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{color:var(--el-color-primary);border-color:var(--el-color-primary);background:#fff}.el-tour.el-tour--primary .el-button--primary{border-color:#fff}.el-tour.el-tour--primary .el-tour-indicator{background:#ffffff26}.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-hover-color:var(--el-text-color-regular);--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);opacity:0;z-index:0;border-radius:4px;position:absolute}.el-anchor.el-anchor--vertical .el-anchor__marker{width:4px;height:14px;transition:top .25s ease-in-out,opacity .25s;top:8px;left:0}.el-anchor.el-anchor--vertical .el-anchor__list{padding-left:var(--el-anchor-padding-indent)}.el-anchor.el-anchor--vertical.el-anchor--underline:before{content:"";background-color:#0505050f;width:2px;height:100%;position:absolute;left:0}.el-anchor.el-anchor--vertical.el-anchor--underline .el-anchor__marker{border-radius:unset;width:2px}.el-anchor.el-anchor--horizontal .el-anchor__marker{width:20px;height:2px;transition:left .25s ease-in-out,opacity .25s,width .25s;bottom:0}.el-anchor.el-anchor--horizontal .el-anchor__list{padding-bottom:4px;display:flex}.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{content:"";background-color:#0505050f;width:100%;height:2px;position:absolute;bottom:0}.el-anchor.el-anchor--horizontal.el-anchor--underline .el-anchor__marker{border-radius:unset;height:2px}.el-anchor__item{flex-direction:column;display:flex}.el-anchor__link{font-size:var(--el-anchor-font-size);line-height:var(--el-anchor-line-height);color:var(--el-anchor-color);transition:color var(--el-transition-duration);white-space:nowrap;text-overflow:ellipsis;cursor:pointer;outline:none;max-width:100%;padding:4px 0;text-decoration:none;overflow:hidden}.el-anchor__link:hover,.el-anchor__link:focus{color:var(--el-hover-color)}.el-anchor__link:focus-visible{border-radius:var(--el-border-radius-base);outline:2px solid var(--el-color-primary)}.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);background:var(--el-segmented-bg-color);min-height:32px;padding:var(--el-segmented-padding);border-radius:var(--el-border-radius-base);color:var(--el-segmented-color);box-sizing:border-box;align-items:stretch;font-size:14px;display:inline-flex}.el-segmented__group{align-items:stretch;width:100%;display:flex;position:relative}.el-segmented__item-selected{background:var(--el-segmented-item-selected-bg-color);border-radius:calc(var(--el-border-radius-base) - 2px);pointer-events:none;width:10px;height:100%;transition:all .3s;position:absolute;top:0;left:0}.el-segmented__item-selected.is-disabled{background:var(--el-segmented-item-selected-disabled-bg-color)}.el-segmented__item-selected.is-focus-visible:before{content:"";border-radius:inherit;outline:2px solid var(--el-segmented-item-selected-bg-color);outline-offset:1px;position:absolute;inset:0}.el-segmented__item{cursor:pointer;border-radius:calc(var(--el-border-radius-base) - 2px);flex:1;align-items:center;padding:0 11px;display:flex}.el-segmented__item:not(.is-disabled):not(.is-selected):hover{color:var(--el-segmented-item-hover-color);background:var(--el-segmented-item-hover-bg-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{cursor:not-allowed;color:var(--el-segmented-item-disabled-color)}.el-segmented__item-input{opacity:0;pointer-events:none;width:0;height:0;margin:0;position:absolute}.el-segmented__item-label{text-align:center;text-overflow:ellipsis;white-space:nowrap;z-index:1;flex:1;line-height:normal;transition:color .3s;overflow:hidden}.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);min-height:40px;font-size:16px}.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);min-height:24px;font-size:14px}.el-segmented--small .el-segmented__item-selected{border-radius:calc(calc(var(--el-border-radius-base) - 1px) - 2px)}.el-segmented--small .el-segmented--vertical .el-segmented__item{padding:7px}.el-segmented--small .el-segmented__item{border-radius:calc(calc(var(--el-border-radius-base) - 1px) - 2px);padding:0 7px}.el-mention{width:100%;position:relative}.el-mention__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-border-color-light);box-shadow:var(--el-box-shadow-light)}.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-top-color:#0000;border-left-color:#0000}.el-mention__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-mention__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-mention__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.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{font-size:var(--el-mention-font-size);white-space:nowrap;text-overflow:ellipsis;color:var(--el-mention-option-color);height:var(--el-mention-option-height);line-height:var(--el-mention-option-height);box-sizing:border-box;min-width:var(--el-mention-option-min-width);cursor:pointer;padding:0 20px;position:relative;overflow:hidden}.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:700}.el-mention-dropdown__item.is-disabled{color:var(--el-mention-option-disabled-color);cursor:not-allowed;background-color:unset}.el-mention-dropdown{z-index:calc(var(--el-index-top) + 1);border-radius:var(--el-border-radius-base);box-sizing:border-box}.el-mention-dropdown__loading{text-align:center;color:var(--el-mention-option-loading-color);min-width:var(--el-mention-option-min-width);margin:0;padding:10px 0;font-size:12px}.el-mention-dropdown__wrap{max-height:var(--el-mention-max-height)}.el-mention-dropdown__list{padding:var(--el-mention-padding);box-sizing:border-box;margin:0;list-style:none}.el-mention-dropdown__header{padding:var(--el-mention-header-padding);border-bottom:var(--el-mention-border)}.el-mention-dropdown__footer{padding:var(--el-mention-footer-padding);border-top:var(--el-mention-border)}.el-splitter{width:100%;height:100%;margin:0;padding:0;display:flex;position:relative}.el-splitter__mask{z-index:999;position:absolute;inset:0}.el-splitter__mask-horizontal{cursor:ew-resize}.el-splitter__mask-vertical{cursor:ns-resize}.el-splitter__horizontal{flex-direction:row}.el-splitter__vertical{flex-direction:column}.el-splitter-bar{-webkit-user-select:none;user-select:none;flex:none;position:relative}.el-splitter-bar__dragger{z-index:1;background:0 0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-splitter-bar__dragger:before,.el-splitter-bar__dragger:after{content:"";background-color:var(--el-border-color-light);position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.el-splitter-bar__dragger:not(.is-lazy):after{display:none}.el-splitter-bar__dragger:after{opacity:.4}.el-splitter-bar__dragger:hover:not(.is-disabled):before{background-color:var(--el-color-primary-light-5)}.el-splitter-bar__dragger-horizontal:before,.el-splitter-bar__dragger-horizontal:after{width:2px;height:100%}.el-splitter-bar__dragger-vertical:before,.el-splitter-bar__dragger-vertical:after{width:100%;height:2px}.el-splitter-bar__dragger-active:before,.el-splitter-bar__dragger-active:after{background-color:var(--el-color-primary-light-3)}.el-splitter-bar__dragger-active.el-splitter-bar__dragger-horizontal:after{transform:translate(calc(-50% + var(--el-splitter-bar-offset)),-50%)}.el-splitter-bar__dragger-active.el-splitter-bar__dragger-vertical:after{transform:translate(-50%,calc(-50% + var(--el-splitter-bar-offset)))}.el-splitter-bar:hover .el-splitter-bar__collapse-icon{opacity:1}.el-splitter-bar__collapse-icon{background:var(--el-border-color-light);cursor:pointer;opacity:0;z-index:9;border-radius:2px;justify-content:center;align-items:center;display:flex;position:absolute}.el-splitter-bar__collapse-icon:hover{opacity:1;background-color:var(--el-color-primary-light-5)}.el-splitter-bar__horizontal-collapse-icon-start{width:16px;height:24px;top:50%;left:-12px;transform:translate(-50%,-50%)}.el-splitter-bar__horizontal-collapse-icon-end{width:16px;height:24px;top:50%;left:12px;transform:translate(-50%,-50%)}.el-splitter-bar__vertical-collapse-icon-start{width:24px;height:16px;top:-12px;right:50%;transform:translate(50%,-50%)}.el-splitter-bar__vertical-collapse-icon-end{width:24px;height:16px;top:12px;right:50%;transform:translate(50%,-50%)}.el-splitter-panel{scrollbar-width:thin;box-sizing:border-box;flex-grow:0;overflow:auto}:root{--font-family-base: "Microsoft YaHei", "PingFang SC", "Hiragino Sans GB", sans-serif;--color-primary: #409eff;--color-bg-light: #eef3f8;--color-bg-dark: #0d0d0d;--color-surface-light: rgba(255, 255, 255, .92);--color-surface-dark: #1a1a1a;--color-border-light: #d6e4ef;--color-border-dark: #2a2a2a;--color-text-primary: #303133;--color-text-secondary: #606266;--color-text-dark: #e5eaf3;--shadow-card: 0 10px 30px rgba(0, 0, 0, .08);--radius-lg: 16px;--radius-md: 12px;--radius-sm: 8px}*{box-sizing:border-box}html,body,#app{margin:0;min-height:100%}body{font-family:var(--font-family-base);color:var(--color-text-primary)}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}body{background:var(--color-bg-light)}html{scrollbar-color:rgba(123,135,148,.7) rgba(255,255,255,.04);scrollbar-width:thin}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:#ffffff0a}*::-webkit-scrollbar-thumb{background:#7b8794b3;border:2px solid transparent;border-radius:999px;background-clip:padding-box}*::-webkit-scrollbar-thumb:hover{background:#94a3b8e6;border:2px solid transparent;background-clip:padding-box}*::-webkit-scrollbar-corner{background:transparent}.page-shell{min-height:100vh}.theme-light{background:var(--color-bg-light);color:var(--color-text-primary)}.theme-dark{background:var(--color-bg-dark);color:var(--color-text-dark)}.top-bar[data-v-5cd781bd]{min-height:88px;display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:10px 24px 12px;background:#111;border-bottom:1px solid #2a2a2a}.logo-area[data-v-5cd781bd]{display:flex;align-items:center;gap:16px;min-width:0;padding-top:10px}.app-name[data-v-5cd781bd]{color:#fff;font-size:18px;font-weight:800;letter-spacing:.02em;white-space:nowrap}.btn-home[data-v-5cd781bd]{color:#d2d2d2;font-size:13px;text-decoration:none;white-space:nowrap}.btn-home[data-v-5cd781bd]:hover{color:#fff}.nav-sections[data-v-5cd781bd]{flex:1;min-width:0;display:flex;align-items:stretch;justify-content:center;gap:0}.nav-section[data-v-5cd781bd]{flex:1;min-width:0;padding:0 18px;position:relative}.nav-section+.nav-section[data-v-5cd781bd]:before{content:"";position:absolute;left:0;top:14px;bottom:8px;width:1px;background:#ffffff24}.nav-section-title[data-v-5cd781bd]{margin-bottom:10px;text-align:center;color:#e8dfcf;font-size:16px;font-weight:800;letter-spacing:.08em}.nav-section-items[data-v-5cd781bd]{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;padding:10px 14px;border-radius:14px;background:linear-gradient(180deg,#534a43eb,#48413bf5);box-shadow:inset 0 1px #ffffff0f}.nav-item[data-v-5cd781bd]{display:inline-flex;align-items:center;justify-content:center;min-height:28px;padding:0 2px;color:#f3eee4;font-size:14px;font-weight:700;text-decoration:none;border-bottom:2px solid transparent;transition:color .18s ease,border-color .18s ease,opacity .18s ease}.nav-item[data-v-5cd781bd]:hover{color:#fff;border-bottom-color:#ffffffad}.nav-item.active[data-v-5cd781bd]{color:#fff;border-bottom-color:#8dc4ff}.nav-item.disabled[data-v-5cd781bd]{color:#ffffffc7;opacity:.82;cursor:default}.top-right[data-v-5cd781bd]{width:60px;flex-shrink:0}@media(max-width:1200px){.top-bar[data-v-5cd781bd]{flex-direction:column;align-items:stretch}.logo-area[data-v-5cd781bd]{padding-top:0}.nav-sections[data-v-5cd781bd]{flex-direction:column}.nav-section[data-v-5cd781bd]{padding:0}.nav-section+.nav-section[data-v-5cd781bd]:before{display:none}.top-right[data-v-5cd781bd]{display:none}} diff --git a/new_web_source/assets/query-asin-Bv7Jtgqa.css b/new_web_source/assets/query-asin-Bv7Jtgqa.css new file mode 100644 index 0000000..76a259b --- /dev/null +++ b/new_web_source/assets/query-asin-Bv7Jtgqa.css @@ -0,0 +1 @@ +.module-page[data-v-fc213f9d]{min-height:100vh;background:#1a1a1a}.main-content[data-v-fc213f9d]{display:flex;min-height:calc(100vh - 56px);height:calc(100vh - 56px)}.left-panel[data-v-fc213f9d]{width:400px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-fc213f9d]{flex:1;display:flex;flex-direction:column;min-width:0;background:#1a1a1a}.section-title[data-v-fc213f9d]{font-size:13px;color:#bbb;margin-bottom:10px}.input-zone[data-v-fc213f9d]{border:1px dashed #3a3a3a;border-radius:10px;padding:16px;background:#252525;margin-bottom:20px}.hint[data-v-fc213f9d]{color:#888;font-size:12px;margin-bottom:12px;line-height:1.5;text-align:left}.input-row[data-v-fc213f9d]{display:flex;gap:10px;align-items:center}.input-row[data-v-fc213f9d] .el-input{flex:1}.opt-btn[data-v-fc213f9d]{padding:8px 12px;font-size:12px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px;cursor:pointer;white-space:nowrap}.opt-btn[data-v-fc213f9d]:hover:not(:disabled){color:#3498db;border-color:#3498db}.opt-btn[data-v-fc213f9d]:disabled{opacity:.6;cursor:not-allowed}.empty-candidates[data-v-fc213f9d]{color:#666;font-size:13px;padding:16px;border:1px dashed #333;border-radius:8px;margin-bottom:16px}.candidate-table-scroll[data-v-fc213f9d]{max-height:320px;overflow:auto;margin-bottom:18px;border-radius:8px;border:1px solid #2a2a2a}.candidate-table[data-v-fc213f9d]{--el-table-bg-color: #252525;--el-table-tr-bg-color: #252525;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.link-danger[data-v-fc213f9d]{background:none;border:none;color:#e74c3c;cursor:pointer;font-size:12px;padding:0}.link-danger[data-v-fc213f9d]:hover{text-decoration:underline}.run-row[data-v-fc213f9d]{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}.btn-run[data-v-fc213f9d]{padding:10px 18px;font-size:14px;font-weight:600;color:#fff;background:#3498db;border:none;border-radius:8px;cursor:pointer}.btn-run[data-v-fc213f9d]:hover:not(:disabled){background:#2980b9}.btn-run[data-v-fc213f9d]:disabled{opacity:.55;cursor:not-allowed}.btn-queue[data-v-fc213f9d]{background:#27ae60}.btn-queue[data-v-fc213f9d]:hover:not(:disabled){background:#219a52}.loading-msg[data-v-fc213f9d]{margin-top:12px;font-size:12px;color:#777;line-height:1.5}.queue-debug-card[data-v-fc213f9d]{margin-top:18px;padding:14px;border:1px solid #2a2a2a;border-radius:10px;background:#202020}.queue-debug-title[data-v-fc213f9d]{margin-bottom:8px}.queue-debug-line[data-v-fc213f9d]{color:#b8c1cc;font-size:12px;line-height:1.6;margin-bottom:8px}.queue-debug-payload[data-v-fc213f9d]{margin:0;max-height:220px;overflow:auto;padding:10px;border-radius:8px;background:#141414;color:#8fd3ff;font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-all}.panel-header[data-v-fc213f9d]{padding:16px 20px;font-size:15px;font-weight:600;color:#e0e0e0;border-bottom:1px solid #2a2a2a}.task-list-wrap[data-v-fc213f9d]{flex:1;padding:16px 20px;overflow:auto}.clean-result-summary[data-v-fc213f9d]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.summary-card[data-v-fc213f9d]{padding:14px 16px;border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e}.summary-card strong[data-v-fc213f9d]{display:block;margin-top:8px;font-size:22px;color:#eaf4ff}.summary-label[data-v-fc213f9d]{font-size:12px;color:#8d8d8d}.subsection-title[data-v-fc213f9d]{font-size:13px;color:#999;margin:8px 0 10px}.empty-tasks[data-v-fc213f9d]{color:#666;font-size:13px;padding:16px;text-align:center}.empty-tasks.narrow[data-v-fc213f9d]{padding:12px 8px}.match-table[data-v-fc213f9d]{margin-bottom:18px}.match-table[data-v-fc213f9d] .el-table__body tr:hover>td.el-table__cell,.match-table[data-v-fc213f9d] .el-table__body tr.hover-row>td.el-table__cell,.match-table[data-v-fc213f9d] .el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-tr-bg-color, #222)!important}.result-table[data-v-fc213f9d]{--el-table-bg-color: #222;--el-table-tr-bg-color: #222;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.ok[data-v-fc213f9d]{color:#27ae60}.fail[data-v-fc213f9d]{color:#e67e22}.result-list-wrap[data-v-fc213f9d]{border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e;min-height:220px;margin-top:8px}.result-list-header[data-v-fc213f9d]{padding:12px 16px;border-bottom:1px solid #2a2a2a;font-size:14px;color:#ddd}.result-subsection[data-v-fc213f9d]{padding:12px 12px 4px}.result-subsection-title[data-v-fc213f9d]{font-size:12px;color:#888;margin-bottom:8px}.task-list[data-v-fc213f9d]{list-style:none;margin:0;padding:0}.task-item[data-v-fc213f9d]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:8px;background:#222}.left[data-v-fc213f9d]{flex:1;min-width:0}.split-result-main[data-v-fc213f9d]{display:flex;flex-direction:column;gap:4px}.id[data-v-fc213f9d]{font-weight:600;color:#e0e0e0;font-size:13px}.files[data-v-fc213f9d]{font-size:12px;color:#888}.task-right[data-v-fc213f9d]{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.status[data-v-fc213f9d]{padding:4px 10px;border-radius:6px;font-size:12px;white-space:nowrap}.status.success[data-v-fc213f9d]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-fc213f9d]{background:#e74c3c2e;color:#ff6b6b}.status.running[data-v-fc213f9d]{background:#3498db2e;color:#3498db}.archive[data-v-fc213f9d]{padding:6px 10px;border-radius:6px;font-size:12px;background:#3498db2e;color:#69b6ff;border:none;cursor:pointer}.archive[data-v-fc213f9d]:hover{background:#3498db47}.btn-delete[data-v-fc213f9d]{padding:6px 10px;border-radius:6px;font-size:12px;background:#e74c3c1f;color:#ff8f8f;border:none;cursor:pointer}.btn-delete[data-v-fc213f9d]:hover{background:#e74c3c38}@media(max-width:1100px){.main-content[data-v-fc213f9d]{flex-direction:column;height:auto}.left-panel[data-v-fc213f9d]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.clean-result-summary[data-v-fc213f9d]{grid-template-columns:repeat(2,minmax(0,1fr))}} diff --git a/new_web_source/assets/query-asin.js b/new_web_source/assets/query-asin.js new file mode 100644 index 0000000..7bdcfb1 --- /dev/null +++ b/new_web_source/assets/query-asin.js @@ -0,0 +1 @@ +import{d as Je,o as Xe,L as Ge,a as u,c as i,b as v,B as Ye,e as n,a5 as Ze,a6 as es,t as r,V as I,W as ss,X as ts,f as p,U as as,n as te,x as Ie,F as ae,r as be,g as h,h as N,ba as ns,bb as os,bc as ls,E as d,bd as rs,be as us,bf as is,i as Se,bg as cs,bh as ds,bi as fs,bj as hs,bk as vs,T as j,bl as ps,_ as ys,aE as ms,q as gs,s as _s}from"./pywebview-C66x_2Dh.js";import{z as ws}from"./zh-cn-CuE9Zzgz.js";/* empty css *//* empty css */const ks={class:"page-shell module-page"},Is={class:"main-content"},bs={class:"left-panel"},Ss={class:"input-zone"},As={class:"input-row"},Cs=["disabled"],Ts={key:0,class:"empty-candidates"},Ns={key:1,class:"candidate-table-scroll"},$s=["onClick"],Es={class:"run-row"},Qs=["disabled"],qs=["disabled"],Ds={key:2,class:"queue-debug-card"},Ms={class:"queue-debug-line"},Ps={key:0,class:"queue-debug-payload"},Rs={class:"right-panel"},Bs={class:"task-list-wrap"},Fs={class:"clean-result-summary"},Ls={class:"summary-card"},xs={class:"summary-card"},Us={class:"summary-card"},Hs={class:"summary-card"},Os={key:0,class:"empty-tasks narrow"},Vs=["onClick"],js={class:"result-list-wrap"},zs={key:0,class:"empty-tasks"},Ks={key:0,class:"result-subsection"},Ws={class:"task-list"},Js={class:"left split-result-main"},Xs=["title"],Gs={class:"files"},Ys={key:0,class:"files"},Zs={key:1,class:"files"},et={key:2,class:"files"},st={class:"files"},tt={class:"files"},at={key:3,class:"files"},nt={class:"task-right"},ot=["onClick"],lt={key:1,class:"result-subsection"},rt={class:"task-list"},ut={class:"left split-result-main"},it=["title"],ct={class:"files"},dt={key:0,class:"files"},ft={key:1,class:"files"},ht={key:2,class:"files"},vt={class:"files"},pt={key:3,class:"files"},yt={class:"files"},mt={key:4,class:"files"},gt={class:"task-right"},_t=["onClick"],wt=["onClick"],Ae=30,kt=Je({__name:"BrandQueryAsinTab",setup(bt){const M=h(""),z=h([]),P=h([]),m=h([]),_=h([]),$=h({candidateCount:0,processedTaskCount:0,successTaskCount:0,failedTaskCount:0}),R=h(!1),B=h(!1),K=h(!1),y=h(""),W=h(""),f=h([]),c=h(null),b=h(null),S=h(!1),J=h(!1);let A=null;const ne=N(()=>m.value.filter(e=>e.matched&&(e.queryAsins||[]).some(s=>s.asins?.length))),F=N(()=>_.value.filter(e=>!he(e.taskStatus))),X=N(()=>_.value.filter(e=>he(e.taskStatus))),G=N(()=>!!c.value||f.value.length>0),L=N(()=>S.value||G.value),oe=N(()=>S.value&&G.value);function Y(){return typeof window<"u"&&window.localStorage.getItem("uid")||"0"}function le(){return`query-asin:matched:${Y()}`}function re(){return`query-asin:queue-state:${Y()}`}function k(e){return`${(e.shopName||"").trim()}::${e.shopId||""}`}function x(e){return`${e.taskId??0}:${e.resultId??0}`}function ue(e){return new Promise(s=>window.setTimeout(s,e))}function ie(e){const s=e instanceof Error?e.message.toLowerCase():String(e||"").toLowerCase();return s.includes("network error")||s.includes("failed to fetch")||s.includes("timeout")||s.includes("503")||s.includes("502")||s.includes("504")||s.includes("500")||s.includes("load failed")}async function Ce(e,s,o=20){let a=0;for(;;)try{return await e()}catch(l){if(!ie(l)||a>=o-1)throw l;a+=1,s?.(a,o),await ue(j())}}function ce(e,s){return`query-asin:${e}:${s||"shop"}:${Date.now()}`}function Z(e){if(!e)return"-";const s=new Date(e);if(Number.isNaN(s.getTime()))return e;const o=s.getFullYear(),a=String(s.getMonth()+1).padStart(2,"0"),l=String(s.getDate()).padStart(2,"0"),t=String(s.getHours()).padStart(2,"0"),g=String(s.getMinutes()).padStart(2,"0"),se=String(s.getSeconds()).padStart(2,"0");return`${o}-${a}-${l} ${t}:${g}:${se}`}function Te(e){const s=(e||"").trim();return{MATCHED:"已匹配",PENDING:"待匹配",CONFLICT:"需人工确认",INDEX_STALE:"索引过期"}[s]||s||"-"}function Ne(e){const s=(e.matchMessage||"").trim();return s||(e.matched&&e.matchStatus==="MATCHED"?"索引已命中,可推送到 Python 队列":e.matched?"已命中索引,请结合状态列确认":"未命中或未就绪,请检查店铺名")}function $e(e){const s=w(e),o=Math.max(...s.map(a=>a.asins?.length||0),1);return Array.from({length:o},(a,l)=>({shopName:l===0?e.shopName:"",countries:s.map(t=>({country:t.country,asin:t.asins?.[l]||""}))}))}function de(e){const s=w(e),o=s.reduce((l,t)=>l+(t.asins?.length||0),0);return`${s.filter(l=>l.asins?.length).map(l=>l.country).join("、")||"无国家"},共 ${o} 个 ASIN`}function U(e){return(e||[]).map(s=>({country:(s.country||"").trim().toUpperCase(),asins:Array.from(new Set((s.asins||[]).map(o=>(o||"").trim().toUpperCase()).filter(Boolean)))})).filter(s=>s.country&&s.asins.length)}function w(e){return U(e?.queryAsins?.length?e.queryAsins:e?.query_asins)}function H(e){return w(e).some(s=>s.asins.length)}function fe(e){const s=(e||"").trim(),o=[b.value,...f.value,...m.value],a=o.find(t=>(t?.shopName||"").trim()===s&&H(t)),l=o.find(t=>H(t));return w(a||l)}function C(e,s){const o=H(e)?w(e):w(s||void 0);return{...e,queryAsins:o.length?o:fe(e.shopName)}}function he(e){return e==="SUCCESS"||e==="FAILED"||e==="COMPLETED"}function ve(e){return e==="SUCCESS"||e==="COMPLETED"?"已完成":e==="FAILED"?"失败":"执行中"}function pe(e){return e==="SUCCESS"||e==="COMPLETED"?"success":e==="FAILED"?"failed":"running"}function Ee(e){return!!(e.resultId&&(e.fileReady||e.downloadUrl))}function ye(){typeof window>"u"||window.localStorage.setItem(le(),JSON.stringify(m.value))}function Qe(){try{const e=typeof window<"u"?window.localStorage.getItem(le()):null;m.value=e?JSON.parse(e):[]}catch{m.value=[]}}function T(){if(typeof window>"u")return;const e={pendingQueue:f.value,activeTaskId:c.value,activeQueueItem:b.value};window.localStorage.setItem(re(),JSON.stringify(e))}function qe(){try{const e=typeof window<"u"?window.localStorage.getItem(re()):null;if(!e)return;const s=JSON.parse(e);f.value=s.pendingQueue||[],c.value=s.activeTaskId??null,b.value=s.activeQueueItem??null}catch{f.value=[],c.value=null,b.value=null}}function E(){c.value=null,b.value=null,T()}function Q(){G.value||(S.value=!1,K.value=!1,J.value=!1,V(),T())}function De(e){const s=e instanceof Error?e.message:String(e||"");return/记录不存在|任务不存在|不存在|已删除|not\s*found|404/i.test(s)}function Me(e){_.value=_.value.filter(s=>!(e.resultId!=null&&s.resultId===e.resultId||e.taskId!=null&&s.taskId===e.taskId))}function Pe(e,s){const o=new Map;for(const a of e)o.set(k(a),a);for(const a of s)o.set(k(a),a);return Array.from(o.values())}async function q(){z.value=await ns()}async function O(){$.value=await os()}async function ee(){const e=await ls();_.value=(e.items||[]).map(s=>C(s))}async function D(){await Promise.all([O(),ee()])}function me(){if(!c.value){Q();return}if(_.value.some(o=>o.taskId===c.value))return;const s=c.value;E(),y.value=f.value.length?`任务 ${s} 已不存在,已跳过并继续剩余队列`:"当前任务已不存在,已释放本地队列状态",Q()}function Re(e){if(!e.length)return;const s=new Map(e.map(a=>[x(a),C(a)])),o=_.value.map(a=>{const l=s.get(x(a));if(!l)return C(a);const t=H(l)?w(l):w(a).length?w(a):fe(l.shopName||a.shopName);return{...a,...l,queryAsins:t}});for(const a of e){const l=x(a);o.some(t=>x(t)===l)||o.push(C(a))}_.value=o}async function ge(e){const s=Array.from(new Set((e&&e.length?e:F.value.map(a=>a.taskId??0)).filter(a=>Number.isFinite(a)&&a>0)));if(!s.length)return;const o=await ps(s);Re(o.items||[]),(o.missingTaskIds||[]).length&&(await ee(),me())}function Be(){if(V(),!L.value)return;const e=async()=>{A=null,L.value&&(await ge(),L.value&&(A=window.setTimeout(e,j()*2)))};A=window.setTimeout(e,j()*2)}function V(){A&&(window.clearTimeout(A),A=null)}function Fe(e){P.value=e}async function _e(){const e=M.value.trim();if(!e){d.warning("请输入店铺名");return}R.value=!0;try{await rs(e),M.value="",await Promise.all([q(),O()]),d.success("已加入备选区")}catch(s){d.error(s instanceof Error?s.message:"添加失败")}finally{R.value=!1}}async function Le(e){try{await us(e),P.value=P.value.filter(s=>s.id!==e),await Promise.all([q(),O()]),d.success("已删除")}catch(s){d.error(s instanceof Error?s.message:"删除失败")}}function xe(e,s){const o=new Map;for(const a of e)o.set(k(a),a);for(const a of s)o.set(k(a),a);return Array.from(o.values())}async function Ue(){const e=P.value.map(s=>s.shop_name).filter(Boolean);if(!e.length){d.warning("请先勾选备选区店铺");return}B.value=!0;try{const s=await is(e);m.value=xe(m.value,s.items||[]),ye(),d.success(`本次返回 ${s.items?.length||0} 条匹配结果`)}catch(s){d.error(s instanceof Error?s.message:"匹配失败")}finally{B.value=!1}}function He(e){if(L.value){d.warning("队列执行中,请等待当前串行任务结束后再调整");return}m.value=m.value.filter(s=>k(s)!==k(e)),ye()}function Oe(e){return{shopName:e.shopName,matched:e.matched,shopId:e.shopId,platform:e.platform,companyName:e.companyName,matchStatus:e.matchStatus,matchMessage:e.matchMessage,queryAsins:U(e.queryAsins)}}function Ve(e,s){const o=ce(e,s.shopName);return{type:"query-asin-run",ts:Date.now(),data:{taskId:e,user_id:Number(Y())||0,source:"frontend-vue-query-asin",submissionId:o,items:[{shopName:s.shopName,submissionId:o,shopId:s.shopId,platform:s.platform,companyName:s.companyName,matched:s.matched,matchStatus:s.matchStatus,matchMessage:s.matchMessage,queryAsins:U(s.queryAsins)}],query_asins:U(s.queryAsins),query_asin_rows:$e(s)}}}function je(e){return _.value.find(s=>s.taskId===e)}async function ze(e){let s=0;for(;;){try{if(await ge([e]),c.value!==e)return"FAILED";s>0&&(y.value=`任务 ${e} 后端已恢复,继续等待执行结果...`),s=0;const a=je(e)?.taskStatus||"";if(a==="SUCCESS"||a==="FAILED"||a==="COMPLETED")return a}catch(o){if(!ie(o))throw o;if(s+=1,s>=Ae)throw new Error(`任务 ${e} 等待后端恢复超时,请稍后刷新查看状态`);y.value=`任务 ${e} 执行中,正在等待后端服务恢复(${s}/${Ae})...`}await ue(j())}}async function we(){if(!S.value){S.value=!0,K.value=!0,Be();try{const e=Se();if(!e?.enqueue_json)throw new Error("当前客户端未提供 enqueue_json");for(;c.value||f.value.length;){if(c.value){const g=await ze(c.value);y.value=f.value.length>0?`任务 ${c.value} ${g==="SUCCESS"?"已完成":"执行失败"},自动继续下一个(剩余 ${f.value.length} 条)`:`任务 ${c.value} ${g==="SUCCESS"?"已完成":"执行失败"}`,E();continue}const s=f.value.shift();if(T(),!s)break;const o=await Ce(()=>cs([Oe(s)]),(g,se)=>{y.value=`后端服务暂时不可用,正在重试创建任务(${g}/${se})...`}),a=o.items?.[0]?C(o.items[0],s):void 0;if(!a?.taskId||!a.resultId)throw new Error("后端未返回有效任务标识");c.value=o.taskId,b.value=C(s,a),T(),await D();const l=Ve(o.taskId,a);W.value=JSON.stringify(l,null,2);const t=await e.enqueue_json(l);if(!t?.success){await ds(o.taskId,{shops:[{shopName:a.shopName||s.shopName||"",error:t?.error||`任务 ${o.taskId} 推送失败`,shopDone:!0,submissionId:ce(o.taskId,a.shopName||s.shopName)}]}),await D(),y.value=`任务 ${o.taskId} 推送失败,已自动继续下一个任务`,E();continue}y.value=f.value.length>0?`任务 ${o.taskId} 已入队,等待完成后自动继续下一个(剩余 ${f.value.length} 条)`:`任务 ${o.taskId} 已入队,等待执行完成`}y.value="串行队列已执行完成",await D(),d.success("查询ASIN队列已按顺序执行完成")}catch(e){const s=e instanceof Error?e.message:"队列执行失败";y.value=s,d.error(s),await D()}finally{S.value=!1,K.value=!1,V(),T()}}}async function Ke(){J.value=!0,Q();const e=ne.value;if(!e.length){d.warning("请先匹配可用店铺");return}f.value=Pe(f.value,e),T(),y.value=`已加入 ${e.length} 条店铺,开始串行执行`,await we()}async function We(e){if(!e.resultId)return;const s=Se();if(!s?.save_file_from_url_new){d.error("当前客户端未提供下载能力");return}const o=fs(e.resultId),a=e.outputFilename||`${e.shopName||"result"}.xlsx`,l=await s.save_file_from_url_new(o,a);l.success?d.success(`已保存: ${l.path||a}`):l.error&&l.error!=="用户取消"&&d.error(l.error)}async function ke(e){try{if(e.taskId)await hs(e.taskId),c.value===e.taskId&&E();else if(e.resultId)await vs(e.resultId);else throw new Error("缺少可删除的任务标识");await Promise.all([q(),D()]),Q(),d.success("已删除")}catch(s){if(De(s)){e.taskId&&c.value===e.taskId&&E(),Me(e),await q(),Q(),d.success("后端记录已不存在,已同步移除本地记录");return}d.error(s instanceof Error?s.message:"删除失败")}}return Xe(async()=>{Qe(),qe(),await Promise.all([q(),O(),ee()]),me(),(c.value||f.value.length)&&(J.value=!0,y.value=c.value!=null?`检测到未完成队列,继续等待任务 ${c.value} 完成并自动接续后续店铺`:`检测到未完成队列,继续执行剩余 ${f.value.length} 条店铺`,we())}),Ge(()=>{V()}),(e,s)=>{const o=es,a=ss,l=ts;return u(),i("div",ks,[v(Ye,{active:"query-asin"}),n("div",Is,[n("aside",bs,[s[3]||(s[3]=n("div",{class:"section-title"},"店铺输入",-1)),n("div",Ss,[s[1]||(s[1]=n("div",{class:"hint"}," 左侧负责录入店铺并加入备选区,确认命中后推送到 Python 队列。查询ASIN按店铺串行执行:上一个任务完成后会自动开始下一个,失败也会继续下一个。 ",-1)),n("div",As,[v(o,{modelValue:M.value,"onUpdate:modelValue":s[0]||(s[0]=t=>M.value=t),clearable:"",placeholder:"请输入店铺名后回车或点击添加",onKeyup:Ze(_e,["enter"])},null,8,["modelValue"]),n("button",{type:"button",class:"opt-btn",disabled:R.value,onClick:_e},r(R.value?"添加中...":"添加"),9,Cs)])]),s[4]||(s[4]=n("div",{class:"section-title"},"备选区",-1)),z.value.length?(u(),i("div",Ns,[v(l,{data:z.value,"row-key":"id",height:"260",class:"candidate-table",onSelectionChange:Fe},{default:I(()=>[v(a,{type:"selection",width:"42"}),v(a,{prop:"shop_name",label:"店铺名","min-width":"140","show-overflow-tooltip":""}),v(a,{label:"操作",width:"72",align:"center"},{default:I(({row:t})=>[n("button",{type:"button",class:"link-danger",onClick:g=>Le(t.id)}," 删除 ",8,$s)]),_:1})]),_:1},8,["data"])])):(u(),i("div",Ts," 暂无备选店铺,请先输入并添加 ")),n("div",Es,[n("button",{type:"button",class:"btn-run",disabled:B.value,onClick:Ue},r(B.value?"匹配中...":"匹配店铺"),9,Qs),n("button",{type:"button",class:"btn-run btn-queue",disabled:oe.value||!ne.value.length,onClick:Ke},r(oe.value?"串行执行中...":"推送到 Python 队列"),9,qs)]),s[5]||(s[5]=n("p",{class:"loading-msg"}," 当前页面会按店铺串行推送任务,并在任务成功或失败后自动接续下一个任务。服务端临时重启时会自动重试查询状态,恢复后继续后续店铺。 ",-1)),y.value?(u(),i("div",Ds,[s[2]||(s[2]=n("div",{class:"section-title queue-debug-title"},"队列状态",-1)),n("div",Ms,r(y.value),1),W.value?(u(),i("pre",Ps,r(W.value),1)):p("",!0)])):p("",!0)]),n("section",Rs,[s[14]||(s[14]=n("div",{class:"panel-header"},"匹配与任务",-1)),n("div",Bs,[n("div",Fs,[n("div",Ls,[s[6]||(s[6]=n("span",{class:"summary-label"},"备选店铺",-1)),n("strong",null,r($.value.candidateCount),1)]),n("div",xs,[s[7]||(s[7]=n("span",{class:"summary-label"},"已处理任务",-1)),n("strong",null,r($.value.processedTaskCount),1)]),n("div",Us,[s[8]||(s[8]=n("span",{class:"summary-label"},"成功任务",-1)),n("strong",null,r($.value.successTaskCount),1)]),n("div",Hs,[s[9]||(s[9]=n("span",{class:"summary-label"},"失败任务",-1)),n("strong",null,r($.value.failedTaskCount),1)])]),s[13]||(s[13]=n("div",{class:"subsection-title"},"匹配结果",-1)),m.value.length?(u(),as(l,{key:1,data:m.value,"row-key":k,"highlight-current-row":!1,class:"result-table match-table"},{default:I(()=>[v(a,{prop:"shopName",label:"店铺名","min-width":"120"}),v(a,{label:"匹配",width:"72",align:"center"},{default:I(({row:t})=>[n("span",{class:te(t.matched?"ok":"fail")},r(t.matched?"是":"否"),3)]),_:1}),v(a,{prop:"shopId",label:"店铺 ID","min-width":"120","show-overflow-tooltip":""}),v(a,{prop:"platform",label:"平台",width:"88","show-overflow-tooltip":""}),v(a,{prop:"companyName",label:"公司","min-width":"120","show-overflow-tooltip":""}),v(a,{label:"状态",width:"110","show-overflow-tooltip":""},{default:I(({row:t})=>[Ie(r(Te(t.matchStatus)),1)]),_:1}),v(a,{label:"说明","min-width":"180","show-overflow-tooltip":""},{default:I(({row:t})=>[Ie(r(Ne(t)),1)]),_:1}),v(a,{label:"操作",width:"72",align:"center"},{default:I(({row:t})=>[n("button",{type:"button",class:"link-danger",onClick:g=>He(t)}," 删除 ",8,Vs)]),_:1})]),_:1},8,["data"])):(u(),i("div",Os," 完成“匹配店铺”后,这里会展示匹配结果。 ")),n("div",js,[s[12]||(s[12]=n("div",{class:"result-list-header"},[n("span",null,"任务记录")],-1)),!F.value.length&&!X.value.length?(u(),i("div",zs," 暂无任务记录。推送到 Python 队列后,这里会展示当前任务和历史任务。 ")):(u(),i(ae,{key:1},[F.value.length?(u(),i("div",Ks,[s[10]||(s[10]=n("div",{class:"result-subsection-title"},"当前任务",-1)),n("ul",Ws,[(u(!0),i(ae,null,be(F.value,t=>(u(),i("li",{key:`${t.resultId}-${t.taskId}`,class:"task-item"},[n("div",Js,[n("span",{class:"id",title:t.shopName||""},r(t.shopName||"-"),9,Xs),n("div",Gs,"任务 ID: "+r(t.taskId??"-"),1),t.resultId?(u(),i("div",Ys," 结果 ID: "+r(t.resultId),1)):p("",!0),t.shopId?(u(),i("div",Zs," 店铺 ID: "+r(t.shopId),1)):p("",!0),t.platform?(u(),i("div",et," 平台: "+r(t.platform),1)):p("",!0),n("div",st," 创建时间: "+r(Z(t.createdAt)),1),n("div",tt," ASIN结构: "+r(de(t)),1),t.error?(u(),i("div",at," 错误: "+r(t.error),1)):p("",!0)]),n("div",nt,[n("span",{class:te(["status",pe(t.taskStatus)])},r(ve(t.taskStatus)),3),n("button",{type:"button",class:"btn-delete",onClick:g=>ke(t)}," 删除 ",8,ot)])]))),128))])])):p("",!0),X.value.length?(u(),i("div",lt,[s[11]||(s[11]=n("div",{class:"result-subsection-title"},"历史任务",-1)),n("ul",rt,[(u(!0),i(ae,null,be(X.value,t=>(u(),i("li",{key:`${t.resultId}-${t.taskId}`,class:"task-item"},[n("div",ut,[n("span",{class:"id",title:t.shopName||""},r(t.shopName||"-"),9,it),n("div",ct,"任务 ID: "+r(t.taskId??"-"),1),t.resultId?(u(),i("div",dt," 结果 ID: "+r(t.resultId),1)):p("",!0),t.shopId?(u(),i("div",ft," 店铺 ID: "+r(t.shopId),1)):p("",!0),t.platform?(u(),i("div",ht," 平台: "+r(t.platform),1)):p("",!0),n("div",vt," 创建时间: "+r(Z(t.createdAt)),1),t.finishedAt?(u(),i("div",pt," 完成时间: "+r(Z(t.finishedAt)),1)):p("",!0),n("div",yt," ASIN结构: "+r(de(t)),1),t.error?(u(),i("div",mt," 错误: "+r(t.error),1)):p("",!0)]),n("div",gt,[n("span",{class:te(["status",pe(t.taskStatus)])},r(ve(t.taskStatus)),3),Ee(t)?(u(),i("button",{key:0,type:"button",class:"archive",onClick:g=>We(t)}," 下载结果 ",8,_t)):p("",!0),n("button",{type:"button",class:"btn-delete",onClick:g=>ke(t)}," 删除 ",8,wt)])]))),128))])])):p("",!0)],64))])])])])])}}}),It=ys(kt,[["__scopeId","data-v-fc213f9d"]]);ms.locale("zh-cn");gs(It).use(_s,{locale:ws}).mount("#app"); diff --git a/new_web_source/assets/shop-match-BiZP8IGM.css b/new_web_source/assets/shop-match-BiZP8IGM.css new file mode 100644 index 0000000..1efdd51 --- /dev/null +++ b/new_web_source/assets/shop-match-BiZP8IGM.css @@ -0,0 +1 @@ +.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:#ffffff80;--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);white-space:nowrap;cursor:pointer;height:32px;color:var(--el-button-text-color);text-align:center;box-sizing:border-box;line-height:1;font-weight:var(--el-button-font-weight);-webkit-user-select:none;user-select:none;vertical-align:middle;-webkit-appearance:none;background-color:var(--el-button-bg-color);border:var(--el-border);border-color:var(--el-button-border-color);outline:none;justify-content:center;align-items:center;transition:all .1s;display:inline-flex}.el-button:hover{color:var(--el-button-hover-text-color);border-color:var(--el-button-hover-border-color);background-color:var(--el-button-hover-bg-color);outline:none}.el-button:active{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button:focus-visible{outline:2px solid var(--el-button-outline-color);outline-offset:1px;transition:outline-offset,outline}.el-button>span{align-items:center;display:inline-flex}.el-button+.el-button{margin-left:12px}.el-button{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:8px 15px}.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{color:var(--el-button-active-text-color);border-color:var(--el-button-active-border-color);background-color:var(--el-button-active-bg-color);outline:none}.el-button.is-disabled,.el-button.is-disabled:hover{color:var(--el-button-disabled-text-color);cursor:not-allowed;background-image:none;background-color:var(--el-button-disabled-bg-color);border-color:var(--el-button-disabled-border-color)}.el-button.is-loading{pointer-events:none;position:relative}.el-button.is-loading:before{z-index:1;pointer-events:none;content:"";border-radius:inherit;background-color:var(--el-mask-color-extra-light);position:absolute;inset:-1px}.el-button.is-round{border-radius:var(--el-border-radius-round)}.el-button.is-dashed{--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);border-style:dashed}.el-button.is-circle{border-radius:50%;width:32px;padding:8px}.el-button.is-text{color:var(--el-button-text-color);background-color:#0000;border:0 solid #0000}.el-button.is-text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important}.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,outline}.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{color:var(--el-button-text-color);background:0 0;border-color:#0000;height:auto;padding:2px}.el-button.is-link:hover{color:var(--el-button-hover-link-text-color)}.el-button.is-link.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button.is-link:not(.is-disabled):hover{background-color:#0000;border-color:#0000}.el-button.is-link:not(.is-disabled):active{color:var(--el-button-active-color);background-color:#0000;border-color:#0000}.el-button--text{color:var(--el-color-primary);background:0 0;border-color:#0000;padding-left:0;padding-right:0}.el-button--text.is-disabled{color:var(--el-button-disabled-text-color);background-color:#0000!important;border-color:#0000!important}.el-button--text:not(.is-disabled):hover{color:var(--el-color-primary-light-3);background-color:#0000;border-color:#0000}.el-button--text:not(.is-disabled):active{color:var(--el-color-primary-dark-2);background-color:#0000;border-color:#0000}.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-plain,.el-button--primary.is-text,.el-button--primary.is-link{--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-plain.is-disabled,.el-button--primary.is-plain.is-disabled:hover,.el-button--primary.is-plain.is-disabled:focus,.el-button--primary.is-plain.is-disabled:active,.el-button--primary.is-text.is-disabled,.el-button--primary.is-text.is-disabled:hover,.el-button--primary.is-text.is-disabled:focus,.el-button--primary.is-text.is-disabled:active,.el-button--primary.is-link.is-disabled,.el-button--primary.is-link.is-disabled:hover,.el-button--primary.is-link.is-disabled:focus,.el-button--primary.is-link.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.el-button--primary.is-dashed{--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-primary);--el-button-hover-bg-color:var(--el-color-primary-light-9);--el-button-hover-border-color:var(--el-color-primary-light-3);--el-button-active-text-color:var(--el-color-primary-dark-2);--el-button-active-bg-color:var(--el-color-primary-light-9);--el-button-active-border-color:var(--el-color-primary-dark-2)}.el-button--primary.is-dashed.is-disabled,.el-button--primary.is-dashed.is-disabled:hover,.el-button--primary.is-dashed.is-disabled:focus,.el-button--primary.is-dashed.is-disabled:active{color:var(--el-color-primary-light-5);background-color:var(--el-color-primary-light-9);border-color:var(--el-color-primary-light-8)}.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-plain,.el-button--success.is-text,.el-button--success.is-link{--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-plain.is-disabled,.el-button--success.is-plain.is-disabled:hover,.el-button--success.is-plain.is-disabled:focus,.el-button--success.is-plain.is-disabled:active,.el-button--success.is-text.is-disabled,.el-button--success.is-text.is-disabled:hover,.el-button--success.is-text.is-disabled:focus,.el-button--success.is-text.is-disabled:active,.el-button--success.is-link.is-disabled,.el-button--success.is-link.is-disabled:hover,.el-button--success.is-link.is-disabled:focus,.el-button--success.is-link.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.el-button--success.is-dashed{--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-success);--el-button-hover-bg-color:var(--el-color-success-light-9);--el-button-hover-border-color:var(--el-color-success-light-3);--el-button-active-text-color:var(--el-color-success-dark-2);--el-button-active-bg-color:var(--el-color-success-light-9);--el-button-active-border-color:var(--el-color-success-dark-2)}.el-button--success.is-dashed.is-disabled,.el-button--success.is-dashed.is-disabled:hover,.el-button--success.is-dashed.is-disabled:focus,.el-button--success.is-dashed.is-disabled:active{color:var(--el-color-success-light-5);background-color:var(--el-color-success-light-9);border-color:var(--el-color-success-light-8)}.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-plain,.el-button--warning.is-text,.el-button--warning.is-link{--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-plain.is-disabled,.el-button--warning.is-plain.is-disabled:hover,.el-button--warning.is-plain.is-disabled:focus,.el-button--warning.is-plain.is-disabled:active,.el-button--warning.is-text.is-disabled,.el-button--warning.is-text.is-disabled:hover,.el-button--warning.is-text.is-disabled:focus,.el-button--warning.is-text.is-disabled:active,.el-button--warning.is-link.is-disabled,.el-button--warning.is-link.is-disabled:hover,.el-button--warning.is-link.is-disabled:focus,.el-button--warning.is-link.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.el-button--warning.is-dashed{--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-warning);--el-button-hover-bg-color:var(--el-color-warning-light-9);--el-button-hover-border-color:var(--el-color-warning-light-3);--el-button-active-text-color:var(--el-color-warning-dark-2);--el-button-active-bg-color:var(--el-color-warning-light-9);--el-button-active-border-color:var(--el-color-warning-dark-2)}.el-button--warning.is-dashed.is-disabled,.el-button--warning.is-dashed.is-disabled:hover,.el-button--warning.is-dashed.is-disabled:focus,.el-button--warning.is-dashed.is-disabled:active{color:var(--el-color-warning-light-5);background-color:var(--el-color-warning-light-9);border-color:var(--el-color-warning-light-8)}.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-plain,.el-button--danger.is-text,.el-button--danger.is-link{--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-plain.is-disabled,.el-button--danger.is-plain.is-disabled:hover,.el-button--danger.is-plain.is-disabled:focus,.el-button--danger.is-plain.is-disabled:active,.el-button--danger.is-text.is-disabled,.el-button--danger.is-text.is-disabled:hover,.el-button--danger.is-text.is-disabled:focus,.el-button--danger.is-text.is-disabled:active,.el-button--danger.is-link.is-disabled,.el-button--danger.is-link.is-disabled:hover,.el-button--danger.is-link.is-disabled:focus,.el-button--danger.is-link.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.el-button--danger.is-dashed{--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-danger);--el-button-hover-bg-color:var(--el-color-danger-light-9);--el-button-hover-border-color:var(--el-color-danger-light-3);--el-button-active-text-color:var(--el-color-danger-dark-2);--el-button-active-bg-color:var(--el-color-danger-light-9);--el-button-active-border-color:var(--el-color-danger-dark-2)}.el-button--danger.is-dashed.is-disabled,.el-button--danger.is-dashed.is-disabled:hover,.el-button--danger.is-dashed.is-disabled:focus,.el-button--danger.is-dashed.is-disabled:active{color:var(--el-color-danger-light-5);background-color:var(--el-color-danger-light-9);border-color:var(--el-color-danger-light-8)}.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-plain,.el-button--info.is-text,.el-button--info.is-link{--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-plain.is-disabled,.el-button--info.is-plain.is-disabled:hover,.el-button--info.is-plain.is-disabled:focus,.el-button--info.is-plain.is-disabled:active,.el-button--info.is-text.is-disabled,.el-button--info.is-text.is-disabled:hover,.el-button--info.is-text.is-disabled:focus,.el-button--info.is-text.is-disabled:active,.el-button--info.is-link.is-disabled,.el-button--info.is-link.is-disabled:hover,.el-button--info.is-link.is-disabled:focus,.el-button--info.is-link.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.el-button--info.is-dashed{--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-info);--el-button-hover-bg-color:var(--el-color-info-light-9);--el-button-hover-border-color:var(--el-color-info-light-3);--el-button-active-text-color:var(--el-color-info-dark-2);--el-button-active-bg-color:var(--el-color-info-light-9);--el-button-active-border-color:var(--el-color-info-dark-2)}.el-button--info.is-dashed.is-disabled,.el-button--info.is-dashed.is-disabled:hover,.el-button--info.is-dashed.is-disabled:focus,.el-button--info.is-dashed.is-disabled:active{color:var(--el-color-info-light-5);background-color:var(--el-color-info-light-9);border-color:var(--el-color-info-light-8)}.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{font-size:var(--el-font-size-base);border-radius:var(--el-border-radius-base);padding:12px 19px}.el-button--large.is-round{padding:12px 19px}.el-button--large.is-circle{width:var(--el-button-size);padding:12px}.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);padding:5px 11px;font-size:12px}.el-button--small.is-round{padding:5px 11px}.el-button--small.is-circle{width:var(--el-button-size);padding:5px}.el-date-table{-webkit-user-select:none;user-select:none;font-size:12px}.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-top-left-radius:15px;border-bottom-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-top-right-radius:15px;border-bottom-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;text-align:center;cursor:pointer;width:32px;height:30px;padding:4px 0;position:relative}.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%;width:24px;height:24px;margin:0 auto;line-height:24px;display:block;position:absolute;left:50%;transform:translate(-50%)}.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:700}.el-date-table td.today.start-date .el-date-table-cell__text,.el-date-table td.today.end-date .el-date-table-cell__text{color:#fff}.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{color:#fff;background-color:var(--el-datepicker-active-color)}.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.start-date .el-date-table-cell,.el-date-table td.end-date .el-date-table-cell{color:#fff}.el-date-table td.start-date .el-date-table-cell__text,.el-date-table td.end-date .el-date-table-cell__text{background-color:var(--el-datepicker-active-color)}.el-date-table td.start-date .el-date-table-cell{border-top-left-radius:15px;border-bottom-left-radius:15px;margin-left:5px}.el-date-table td.end-date .el-date-table-cell{border-top-right-radius:15px;border-bottom-right-radius:15px;margin-right:5px}.el-date-table td.disabled .el-date-table-cell{background-color:var(--el-fill-color-light);opacity:1;cursor:not-allowed;color:var(--el-text-color-placeholder)}.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);color:#fff;border-radius:15px}.el-date-table td.week{color:var(--el-datepicker-off-text-color);cursor:default;font-size:80%}.el-date-table td:focus{outline:none}.el-date-table th{color:var(--el-datepicker-header-text-color);border-bottom:solid 1px var(--el-border-color-lighter);padding:5px;font-weight:400}.el-date-table th.el-date-table__week-header{width:24px;padding:0}.el-month-table{border-collapse:collapse;margin:-1px;font-size:12px}.el-month-table td{text-align:center;cursor:pointer;width:68px;padding:8px 0;position:relative}.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:700}.el-month-table td.today.start-date .el-date-table-cell__text,.el-month-table td.today.end-date .el-date-table-cell__text{color:#fff}.el-month-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.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{width:54px;height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto;line-height:36px;display:block;position:absolute;left:50%;transform:translate(-50%)}.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.start-date .el-date-table-cell,.el-month-table td.end-date .el-date-table-cell{color:#fff}.el-month-table td.start-date .el-date-table-cell__text,.el-month-table td.end-date .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-month-table td.start-date .el-date-table-cell{border-top-left-radius:24px;border-bottom-left-radius:24px;margin-left:3px}.el-month-table td.end-date .el-date-table-cell{border-top-right-radius:24px;border-bottom-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{color:#fff;background-color:var(--el-datepicker-active-color)}.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;margin:-1px;font-size:12px}.el-year-table .el-icon{color:var(--el-datepicker-icon-color)}.el-year-table td{text-align:center;cursor:pointer;width:68px;padding:8px 0;position:relative}.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:700}.el-year-table td.today.start-date .el-date-table-cell__text,.el-year-table td.today.end-date .el-date-table-cell__text{color:#fff}.el-year-table td.disabled .el-date-table-cell__text{background-color:var(--el-fill-color-light);cursor:not-allowed;color:var(--el-text-color-placeholder)}.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{width:60px;height:36px;color:var(--el-datepicker-text-color);border-radius:18px;margin:0 auto;line-height:36px;display:block;position:absolute;left:50%;transform:translate(-50%)}.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.start-date .el-date-table-cell,.el-year-table td.end-date .el-date-table-cell{color:#fff}.el-year-table td.start-date .el-date-table-cell__text,.el-year-table td.end-date .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.el-year-table td.start-date .el-date-table-cell{border-top-left-radius:24px;border-bottom-left-radius:24px}.el-year-table td.end-date .el-date-table-cell{border-top-right-radius:24px;border-bottom-right-radius:24px}.el-year-table td.current:not(.disabled) .el-date-table-cell__text{color:#fff;background-color:var(--el-datepicker-active-color)}.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{vertical-align:top;width:50%;max-height:192px;display:inline-block;position:relative;overflow:auto}.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;text-align:center;overflow:hidden}.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);width:100%;z-index:var(--el-index-normal);text-align:center;cursor:pointer;height:30px;font-size:12px;line-height:30px;position:absolute;left:0}.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{text-align:center;padding:0}.el-time-spinner__list{text-align:center;margin:0;padding:0;list-style:none}.el-time-spinner__list:after,.el-time-spinner__list:before{content:"";width:100%;height:80px;display:block}.el-time-spinner__item{height:32px;color:var(--el-text-color-regular);font-size:12px;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:700}.el-time-spinner__item.is-disabled{color:var(--el-text-color-placeholder);cursor:not-allowed}.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;transition:var(--el-transition-md-fade);transform-origin:top;transform:scaleY(1)}.el-zoom-in-top-enter-active[data-popper-placement^=top],.el-zoom-in-top-leave-active[data-popper-placement^=top]{transform-origin: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;transition:var(--el-transition-md-fade);transform-origin:bottom;transform:scaleY(1)}.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;transition:var(--el-transition-md-fade);transform-origin:0 0;transform:scale(1)}.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-leave-active,.el-collapse-transition-enter-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-picker__popper{--el-datepicker-border-color:var(--el-disabled-border-color)}.el-picker__popper.el-popper{background:var(--el-bg-color-overlay);border:1px solid var(--el-datepicker-border-color);box-shadow:var(--el-box-shadow-light)}.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-top-color:#0000;border-left-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=bottom] .el-popper__arrow:before{border-bottom-color:#0000;border-right-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=left] .el-popper__arrow:before{border-bottom-color:#0000;border-left-color:#0000}.el-picker__popper.el-popper[data-popper-placement^=right] .el-popper__arrow:before{border-top-color:#0000;border-right-color:#0000}.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%;text-align:left;vertical-align:middle;position:relative}.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.is-focus .el-input__wrapper{box-shadow:0 0 0 1px var(--el-input-focus-border-color) inset}.el-date-editor.el-input,.el-date-editor.el-input__wrapper{width:var(--el-date-editor-width);height:var(--el-input-height,var(--el-component-size))}.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 .close-icon,.el-date-editor .clear-icon{cursor:pointer}.el-date-editor .clear-icon:hover{color:var(--el-input-clear-hover-color)}.el-date-editor .el-range__icon{height:inherit;color:var(--el-text-color-placeholder);float:left;font-size:14px}.el-date-editor .el-range__icon svg{vertical-align:middle}.el-date-editor .el-range-input{-webkit-appearance:none;-moz-appearance:none;appearance:none;text-align:center;width:39%;height:30px;line-height:30px;font-size:var(--el-font-size-base);color:var(--el-text-color-regular);background-color:#0000;border:none;outline:none;margin:0;padding:0;display:inline-block}.el-date-editor .el-range-input::placeholder{color:var(--el-text-color-placeholder)}.el-date-editor .el-range-separator{overflow-wrap:break-word;height:100%;color:var(--el-text-color-primary);flex:1;justify-content:center;align-items:center;margin:0;padding:0 5px;font-size:14px;display:inline-flex}.el-date-editor .el-range__close-icon{color:var(--el-text-color-placeholder);height:inherit;width:unset;cursor:pointer;font-size:14px}.el-date-editor .el-range__close-icon:hover{color:var(--el-input-clear-hover-color)}.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{vertical-align:middle;align-items:center;padding:0 10px;display:inline-flex}.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{height:38px;font-size:14px;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{height:22px;font-size:12px;line-height:22px}.el-range-editor.is-disabled{background-color:var(--el-disabled-bg-color);border-color:var(--el-disabled-border-color);color:var(--el-disabled-text-color);cursor:not-allowed}.el-range-editor.is-disabled:hover,.el-range-editor.is-disabled:focus{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::placeholder{color:var(--el-text-color-placeholder)}.el-range-editor.is-disabled .el-range-separator{color:var(--el-disabled-text-color)}.el-picker-panel{color:var(--el-text-color-regular);background:var(--el-datepicker-bg-color);border-radius:var(--el-popper-border-radius,var(--el-border-radius-base));line-height:30px}.el-picker-panel .el-time-panel{border:solid 1px var(--el-datepicker-border-color);background-color:var(--el-datepicker-bg-color);box-shadow:var(--el-box-shadow-light);margin:5px 0}.el-picker-panel__body:after,.el-picker-panel__body-wrapper:after{content:"";clear:both;display:table}.el-picker-panel__content{margin:15px;position:relative}.el-picker-panel__footer{border-top:1px solid var(--el-datepicker-inner-border-color);text-align:right;background-color:var(--el-datepicker-bg-color);padding:4px 12px;font-size:0;position:relative}.el-picker-panel__shortcut{width:100%;color:var(--el-datepicker-text-color);text-align:left;cursor:pointer;background-color:#0000;border:0;outline:none;padding-left:12px;font-size:14px;line-height:28px;display:block}.el-picker-panel__shortcut:hover{color:var(--el-datepicker-hover-text-color)}.el-picker-panel__shortcut.active{color:var(--el-datepicker-active-color);background-color:#e6f1fe}.el-picker-panel__btn{border:1px solid var(--el-fill-color-darker);color:var(--el-text-color-primary);cursor:pointer;background-color:#0000;border-radius:2px;outline:none;padding:0 20px;font-size:12px;line-height:24px}.el-picker-panel__btn[disabled]{color:var(--el-text-color-disabled);cursor:not-allowed}.el-picker-panel__icon-btn{color:var(--el-datepicker-icon-color);cursor:pointer;background:0 0;border:0;outline:none;margin-top:8px;padding:1px 6px;font-size:12px;line-height:1}.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.is-disabled .el-icon{cursor:inherit}.el-picker-panel__icon-btn .el-icon{cursor:pointer;font-size:inherit}.el-picker-panel__link-btn{vertical-align:middle}.el-picker-panel.is-disabled .el-picker-panel__prev-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__prev-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__prev-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__next-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__next-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__next-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__icon-btn{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__icon-btn:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__icon-btn .el-icon{cursor:inherit}.el-picker-panel.is-disabled .el-picker-panel__shortcut{color:var(--el-text-color-disabled)}.el-picker-panel.is-disabled .el-picker-panel__shortcut:hover{cursor:not-allowed}.el-picker-panel.is-disabled .el-picker-panel__shortcut .el-icon{cursor:inherit}.el-picker-panel [slot=sidebar],.el-picker-panel__sidebar{border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:110px;padding-top:6px;position:absolute;top:0;bottom:0;overflow:auto}.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);--el-datepicker-bg-color:var(--el-bg-color-overlay);--el-fill-color-blank:var(--el-datepicker-bg-color);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{padding:0 5px;display:table-cell;position:relative}.el-date-picker__time-header{border-bottom:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:100%;padding:8px 5px 5px;font-size:12px;display:table;position:relative}.el-date-picker__header{text-align:center;padding:12px 12px 0}.el-date-picker__header--bordered{border-bottom:solid 1px 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{text-align:center;cursor:pointer;color:var(--el-text-color-regular);padding:0 5px;font-size:16px;font-weight:500;line-height:22px}.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{text-align:center;padding:10px}.el-date-picker__time-label{float:left;cursor:pointer;margin-left:10px;line-height:30px}.el-date-picker .el-time-panel{position:absolute}.el-date-picker.is-disabled .el-date-picker__header-label{color:var(--el-text-color-disabled)}.el-date-picker.is-disabled .el-date-picker__header-label:hover{cursor:not-allowed}.el-date-picker.is-disabled .el-date-picker__header-label .el-icon{cursor:inherit}.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);--el-datepicker-bg-color:var(--el-bg-color-overlay);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{text-align:center;height:28px;position:relative}.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{margin-right:50px;font-size:16px;font-weight:500}.el-date-range-picker__header-label{text-align:center;cursor:pointer;color:var(--el-text-color-regular);padding:0 5px;font-size:16px;font-weight:500;line-height:22px}.el-date-range-picker__header-label:hover{color:var(--el-datepicker-hover-text-color)}.el-date-range-picker__header-label:focus-visible{color:var(--el-datepicker-hover-text-color);outline:none}.el-date-range-picker__header-label.active{color:var(--el-datepicker-active-color)}.el-date-range-picker__content{box-sizing:border-box;width:50%;margin:0;padding:16px;display:table-cell}.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;width:100%;padding:8px 5px 5px;font-size:12px;display:table;position:relative}.el-date-range-picker__time-header>.el-icon-arrow-right{vertical-align:middle;color:var(--el-datepicker-icon-color);font-size:20px;display:table-cell}.el-date-range-picker__time-picker-wrap{padding:0 5px;display:table-cell;position:relative}.el-date-range-picker__time-picker-wrap .el-picker-panel{z-index:1;background:#fff;position:absolute;top:13px;right:0}.el-date-range-picker__time-picker-wrap .el-time-panel{position:absolute}.el-date-range-picker.is-disabled .el-date-range-picker__header-label{color:var(--el-text-color-disabled)}.el-date-range-picker.is-disabled .el-date-range-picker__header-label:hover{cursor:not-allowed}.el-date-range-picker.is-disabled .el-date-range-picker__header-label .el-icon{cursor:inherit}.el-time-range-picker{width:354px;overflow:visible}.el-time-range-picker__content{text-align:center;z-index:1;padding:10px;position:relative}.el-time-range-picker__cell{box-sizing:border-box;width:50%;margin:0;padding:4px 7px 7px;display:inline-block}.el-time-range-picker__header{text-align:center;margin-bottom:5px;font-size:14px}.el-time-range-picker__body{border:1px solid var(--el-datepicker-border-color);border-radius:2px}.el-time-panel{width:180px;z-index:var(--el-index-top);-webkit-user-select:none;user-select:none;box-sizing:content-box;border-radius:2px;position:relative;left:0}.el-time-panel__content{font-size:0;position:relative;overflow:hidden}.el-time-panel__content:after,.el-time-panel__content:before{content:"";z-index:-1;box-sizing:border-box;text-align:left;height:32px;margin-top:-16px;padding-top:6px;position:absolute;top:50%;left:0;right:0}.el-time-panel__content:after{margin-left:12%;margin-right:12%;left:50%}.el-time-panel__content:before{border-top:1px solid var(--el-border-color-light);border-bottom: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.6667%}.el-time-panel__content.has-seconds:before{padding-left:33.3333%}.el-time-panel__footer{border-top:1px solid var(--el-timepicker-inner-border-color,var(--el-border-color-light));text-align:right;box-sizing:border-box;height:36px;padding:4px;line-height:25px}.el-time-panel__btn{cursor:pointer;color:var(--el-text-color-primary);background-color:#0000;border:none;outline:none;margin:0 5px;padding:0 5px;font-size:12px;line-height:28px}.el-time-panel__btn.confirm{color:var(--el-timepicker-active-color,var(--el-color-primary));font-weight:800}.el-picker-panel.is-border{border:solid 1px var(--el-border-color-lighter)}.el-picker-panel.is-border .el-picker-panel__body-wrapper{position:relative}.el-picker-panel.is-border.el-picker-panel [slot=sidebar],.el-picker-panel.is-border.el-picker-panel__sidebar{border-right:1px solid var(--el-datepicker-inner-border-color);box-sizing:border-box;width:110px;height:100%;padding-top:6px;position:absolute;top:0;overflow:auto}.module-page[data-v-064c8132]{min-height:100vh;background:#1a1a1a}.main-content[data-v-064c8132]{display:flex;min-height:calc(100vh - 56px);height:calc(100vh - 56px)}.left-panel[data-v-064c8132]{width:400px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-064c8132]{flex:1;display:flex;flex-direction:column;min-width:0;background:#1a1a1a}.section-title[data-v-064c8132]{font-size:13px;color:#bbb;margin-bottom:10px}.input-zone[data-v-064c8132]{border:1px dashed #3a3a3a;border-radius:10px;padding:16px;background:#252525;margin-bottom:20px}.hint[data-v-064c8132]{color:#888;font-size:12px;margin-bottom:12px;line-height:1.5;text-align:left}.country-pref-hint[data-v-064c8132]{margin-top:-4px}.country-pref-checks[data-v-064c8132]{display:flex;flex-wrap:wrap;gap:10px 16px;margin-bottom:12px}.country-check-row[data-v-064c8132]{display:inline-flex;align-items:center;gap:8px;cursor:pointer;-webkit-user-select:none;user-select:none;font-size:12px;color:#ccc}.country-check-input[data-v-064c8132]{width:16px;height:16px;accent-color:#409eff;cursor:pointer;flex-shrink:0}.country-check-text[data-v-064c8132]{line-height:1.3}.country-order-panel[data-v-064c8132]{border:1px solid #333;border-radius:8px;padding:10px 12px;background:#252525;margin-bottom:14px}.country-order-caption[data-v-064c8132]{font-size:11px;color:#777;margin-bottom:8px}.country-order-list[data-v-064c8132]{display:flex;flex-direction:column;gap:6px}.country-drag-row[data-v-064c8132]{display:flex;align-items:center;gap:10px;padding:8px 10px;background:#2c2c2c;border-radius:6px;border:1px solid #3a3a3a;cursor:grab;-webkit-user-select:none;user-select:none}.country-drag-row.dragging[data-v-064c8132]{opacity:.55;border-color:#3498db}.drag-handle[data-v-064c8132]{color:#666;font-size:12px;letter-spacing:-2px}.country-drag-label[data-v-064c8132]{font-size:12px;color:#ccc}.country-pref-status[data-v-064c8132]{font-size:11px;color:#888;margin-bottom:10px}.input-row[data-v-064c8132]{display:flex;gap:10px;align-items:center}.input-row[data-v-064c8132] .el-input{flex:1}.opt-btn[data-v-064c8132],.schedule-remove[data-v-064c8132],.schedule-add[data-v-064c8132]{padding:8px 12px;font-size:12px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px;cursor:pointer;white-space:nowrap}.opt-btn[data-v-064c8132]:hover:not(:disabled),.schedule-remove[data-v-064c8132]:hover:not(:disabled),.schedule-add[data-v-064c8132]:hover:not(:disabled){color:#3498db;border-color:#3498db}.opt-btn[data-v-064c8132]:disabled,.schedule-remove[data-v-064c8132]:disabled,.schedule-add[data-v-064c8132]:disabled{opacity:.6;cursor:not-allowed}.empty-candidates[data-v-064c8132]{color:#666;font-size:13px;padding:16px;border:1px dashed #333;border-radius:8px;margin-bottom:16px}.candidate-table-scroll[data-v-064c8132]{max-height:280px;overflow:auto;margin-bottom:16px;border-radius:8px;border:1px solid #2a2a2a}.candidate-table[data-v-064c8132]{--el-table-bg-color: #252525;--el-table-tr-bg-color: #252525;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.schedule-switch[data-v-064c8132]{display:flex;align-items:center;gap:8px;color:#ccc;font-size:12px;margin-bottom:12px}.schedule-config[data-v-064c8132]{border:1px solid #333;border-radius:8px;padding:12px;background:#252525;margin-bottom:16px}.schedule-row[data-v-064c8132]{display:flex;align-items:center;gap:10px;margin-bottom:10px}.schedule-picker[data-v-064c8132]{flex:1}.schedule-picker[data-v-064c8132] .el-input__wrapper{background-color:#2a2a2a;box-shadow:0 0 0 1px #3a3a3a inset}.schedule-picker[data-v-064c8132] .el-input__inner{color:#ccc}.schedule-add[data-v-064c8132]{margin-top:2px}.schedule-hint[data-v-064c8132]{margin-top:10px;margin-bottom:0}.link-danger[data-v-064c8132]{background:none;border:none;color:#e74c3c;cursor:pointer;font-size:12px;padding:0}.link-danger[data-v-064c8132]:hover{text-decoration:underline}.run-row[data-v-064c8132]{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}.btn-run[data-v-064c8132]{padding:10px 18px;font-size:14px;font-weight:600;color:#fff;background:#3498db;border:none;border-radius:8px;cursor:pointer}.btn-run[data-v-064c8132]:hover:not(:disabled){background:#2980b9}.btn-run[data-v-064c8132]:disabled{opacity:.55;cursor:not-allowed}.btn-queue[data-v-064c8132]{background:#27ae60}.btn-queue[data-v-064c8132]:hover:not(:disabled){background:#219a52}.loading-msg[data-v-064c8132]{margin-top:12px;font-size:12px;color:#777;line-height:1.5}.loading-msg code[data-v-064c8132]{font-size:11px;color:#8fd3ff}.queue-debug-card[data-v-064c8132]{margin-top:18px;padding:14px;border:1px solid #2a2a2a;border-radius:10px;background:#202020}.queue-debug-title[data-v-064c8132]{margin-bottom:8px}.queue-debug-line[data-v-064c8132]{color:#b8c1cc;font-size:12px;line-height:1.6;margin-bottom:8px}.queue-debug-payload[data-v-064c8132]{margin:0;max-height:220px;overflow:auto;padding:10px;border-radius:8px;background:#141414;color:#8fd3ff;font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-all}.panel-header[data-v-064c8132]{padding:16px 20px;font-size:15px;font-weight:600;color:#e0e0e0;border-bottom:1px solid #2a2a2a}.task-list-wrap[data-v-064c8132]{flex:1;padding:16px 20px;overflow:auto}.clean-result-summary[data-v-064c8132]{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:16px}.summary-card[data-v-064c8132]{padding:14px 16px;border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e}.summary-card strong[data-v-064c8132]{display:block;margin-top:8px;font-size:22px;color:#eaf4ff}.summary-label[data-v-064c8132]{font-size:12px;color:#8d8d8d}.subsection-title[data-v-064c8132]{font-size:13px;color:#999;margin:8px 0 10px}.empty-tasks[data-v-064c8132]{color:#666;font-size:13px;padding:16px;text-align:center}.empty-tasks.narrow[data-v-064c8132]{padding:12px 8px}.match-table[data-v-064c8132]{margin-bottom:18px}.match-table[data-v-064c8132] .el-table__body tr:hover>td.el-table__cell,.match-table[data-v-064c8132] .el-table__body tr.hover-row>td.el-table__cell,.match-table[data-v-064c8132] .el-table__body tr.current-row>td.el-table__cell{background-color:var(--el-table-tr-bg-color, #222)!important}.result-table[data-v-064c8132]{--el-table-bg-color: #222;--el-table-tr-bg-color: #222;--el-table-header-bg-color: #2a2a2a;--el-table-text-color: #ccc;--el-table-border-color: #333}.ok[data-v-064c8132]{color:#27ae60}.fail[data-v-064c8132]{color:#e67e22}.result-list-wrap[data-v-064c8132]{border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e;min-height:200px;margin-top:8px}.result-list-header[data-v-064c8132]{padding:12px 16px;border-bottom:1px solid #2a2a2a;font-size:14px;color:#ddd}.result-subsection[data-v-064c8132]{padding:12px 12px 4px}.result-subsection-title[data-v-064c8132]{font-size:12px;color:#888;margin-bottom:8px}.task-list[data-v-064c8132]{list-style:none;margin:0;padding:0}.task-item[data-v-064c8132]{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:8px;background:#222}.left[data-v-064c8132]{flex:1;min-width:0}.split-result-main[data-v-064c8132]{display:flex;flex-direction:column;gap:4px}.id[data-v-064c8132]{font-weight:600;color:#e0e0e0;font-size:13px}.files[data-v-064c8132]{font-size:12px;color:#888}.task-right[data-v-064c8132]{display:flex;align-items:center;gap:8px;flex-wrap:wrap;justify-content:flex-end}.status[data-v-064c8132]{padding:4px 10px;border-radius:6px;font-size:12px;white-space:nowrap}.status.success[data-v-064c8132]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-064c8132]{background:#e74c3c2e;color:#ff6b6b}.status.running[data-v-064c8132]{background:#3498db2e;color:#3498db}.download[data-v-064c8132]{padding:6px 10px;border-radius:6px;font-size:12px;background:#3498db2e;color:#69b6ff;border:none;cursor:pointer}.download[data-v-064c8132]:hover{background:#3498db47}.btn-delete[data-v-064c8132]{padding:6px 10px;border-radius:6px;font-size:12px;background:#e74c3c1f;color:#ff8f8f;border:none;cursor:pointer}.btn-delete[data-v-064c8132]:hover{background:#e74c3c38}@media(max-width:1100px){.main-content[data-v-064c8132]{flex-direction:column;height:auto}.left-panel[data-v-064c8132]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.clean-result-summary[data-v-064c8132]{grid-template-columns:repeat(2,minmax(0,1fr))}.schedule-row[data-v-064c8132]{flex-direction:column;align-items:stretch}} diff --git a/new_web_source/assets/shop-match.js b/new_web_source/assets/shop-match.js new file mode 100644 index 0000000..42afc5c --- /dev/null +++ b/new_web_source/assets/shop-match.js @@ -0,0 +1 @@ +import{d as ls,g as p,o as rs,L as us,a as i,c,b,B as is,e as l,a5 as cs,a6 as ds,t as v,V as M,W as fs,X as hs,F as U,r as q,a7 as pt,n as fe,f as T,a8 as vs,U as gt,a9 as ms,aa as ps,w as gs,v as ys,ap as ws,x as he,h as ve,aq as Ss,ar as ks,as as bs,at as _s,E as m,au as Ts,av as Cs,aw as Es,i as Ae,ax as Is,ay as $s,az as Ds,aA as Ns,aB as Ms,aC as Le,aD as Ps,T as xs,_ as As,aE as Ls,q as Fs,s as Us}from"./pywebview-C66x_2Dh.js";import{z as Rs}from"./zh-cn-CuE9Zzgz.js";/* empty css *//* empty css */import{L as Os}from"./listingFilters-BpGOU_pJ.js";const Vs={class:"page-shell module-page"},Hs={class:"main-content"},Bs={class:"left-panel"},qs={class:"input-zone"},js={class:"input-row"},Ks=["disabled"],zs={key:0,class:"empty-candidates"},Gs={key:1,class:"candidate-table-scroll"},Js=["onClick"],Ys={class:"country-pref-checks"},Qs=["checked","disabled","onChange"],Ws={class:"country-check-text"},Xs={key:2,class:"country-order-panel"},Zs={class:"country-order-list"},ea=["onDragstart","onDrop"],ta={class:"country-drag-label"},sa={key:3,class:"country-pref-status"},aa={class:"listing-filter-row"},na={class:"schedule-switch"},oa=["disabled"],la={key:4,class:"schedule-config"},ra=["disabled","onClick"],ua=["disabled"],ia={class:"run-row"},ca=["disabled"],da=["disabled"],fa={key:5,class:"queue-debug-card"},ha={class:"queue-debug-line"},va={key:0,class:"queue-debug-payload"},ma={class:"right-panel"},pa={class:"task-list-wrap"},ga={class:"clean-result-summary"},ya={class:"summary-card"},wa={class:"summary-card"},Sa={class:"summary-card"},ka={class:"summary-card"},ba={key:0,class:"empty-tasks narrow"},_a=["onClick"],Ta={class:"result-list-wrap"},Ca={key:0,class:"empty-tasks"},Ea={key:0,class:"result-subsection"},Ia={class:"task-list"},$a={class:"left split-result-main"},Da=["title"],Na={class:"files"},Ma={key:0,class:"files"},Pa={key:1,class:"files"},xa={key:2,class:"files"},Aa={key:3,class:"files"},La={class:"task-right"},Fa=["onClick"],Ua=["onClick"],Ra={key:1,class:"result-subsection"},Oa={class:"task-list"},Va={class:"left split-result-main"},Ha=["title"],Ba={class:"files"},qa={key:0,class:"files"},ja={key:1,class:"files"},Ka={class:"task-right"},za=["onClick"],Ga=["onClick"],Ja=ls({__name:"BrandShopMatchTab",setup(Qa){const me=[{code:"DE",label:"德国"},{code:"UK",label:"英国"},{code:"FR",label:"法国"},{code:"IT",label:"意大利"},{code:"ES",label:"西班牙"}],te=p(""),pe=p([]),Fe=p([]),_=p([]),ge=p("Active"),se=p(!1),ae=p(!1),D=p(!1),ye=p(!1),we=p(!1),w=p(""),j=p(""),g=p(["DE","UK","FR","IT","ES"]),K=p(null),Se=p(!1),ke=p(!1);let R=null;const N=p(!0),S=p([Ee()]),z=p({candidateCount:0,processedTaskCount:0,successTaskCount:0,failedTaskCount:0}),E=p([]),y=p([]),k=p({}),d=p({}),$=p(null),be=p(!1),O=new Map,_e=p(!1);let G=null,Ue=0,Re="";const Te=ve(()=>ze(E.value.filter(e=>!!C(e.taskId)&&!Qe(e)),d.value,"current")),Ce=ve(()=>ze(E.value.filter(e=>!C(e.taskId)||Qe(e)),d.value,"history")),yt=ve(()=>Te.value.length>0||Ce.value.length>0),wt=ve(()=>{const e=new Set(g.value);return[...g.value.map(t=>({code:t,label:je(t)})),...me.filter(t=>!e.has(t.code)).map(t=>({code:t.code,label:t.label}))]});function J(){return typeof window<"u"&&window.localStorage.getItem("uid")||"0"}function St(){const e=Number(J());return Number.isFinite(e)&&e>0?e:0}function C(e){const t=Number(e);return Number.isFinite(t)&&t>0?t:0}function Oe(){return`shop-match:tasks:${J()}`}function Ve(){return`shop-match:task-status:${J()}`}function He(){return`shop-match:task-snapshots:${J()}`}function Be(){return`shop-match:matched-items:${J()}`}function ne(e,t,s){s?window.localStorage.removeItem(e):window.localStorage.setItem(e,JSON.stringify(t))}function P(e){return`${(e.shopName||"").trim()}::${e.shopId||""}`}function qe(e){return`${C(e.taskId)}-${e.resultId||0}-${e.shopName||""}`}function je(e){return me.find(t=>t.code===e)?.label||e}function kt(e){const t=e.getFullYear(),s=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0"),n=String(e.getHours()).padStart(2,"0"),u=String(e.getMinutes()).padStart(2,"0"),r=String(e.getSeconds()).padStart(2,"0");return`${t}-${s}-${a}T${n}:${u}:${r}`}function oe(e){const t=e.getFullYear(),s=String(e.getMonth()+1).padStart(2,"0"),a=String(e.getDate()).padStart(2,"0"),n=String(e.getHours()).padStart(2,"0"),u=String(e.getMinutes()).padStart(2,"0");return`${t}-${s}-${a} ${n}:${u}:00`}function Ee(){const e=new Date;return e.setSeconds(0,0),e.setMinutes(e.getMinutes()+5),oe(e)}function Y(e){if(!e)return null;const s=e.trim().replace("T"," ").match(/^(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2})(?::(\d{2}))?$/);if(!s)return null;const a=Number(s[1]),n=Number(s[2]),u=Number(s[3]),r=Number(s[4]),f=Number(s[5]),o=Number(s[6]||"0"),h=new Date(a,n-1,u,r,f,o,0);return Number.isNaN(h.getTime())||h.getFullYear()!==a||h.getMonth()!==n-1||h.getDate()!==u?null:h}function bt(e,t){const s=Y(e)||new Date;return s.setSeconds(0,0),s.setMinutes(s.getMinutes()+t),oe(s)}function Ke(e){const t=Y(e);if(!t)return"-";const s=String(t.getMonth()+1).padStart(2,"0"),a=String(t.getDate()).padStart(2,"0"),n=String(t.getHours()).padStart(2,"0"),u=String(t.getMinutes()).padStart(2,"0");return`${s}-${a} ${n}:${u}`}function ze(e,t,s){const a=new Map;for(const n of e)a.set(qe(n),n);for(const[n,u]of Object.entries(t)){const r=C(n),f=u.items?.[0];if(!f||!r)continue;const o=Ye(r);if(s==="current"&&o||s==="history"&&!o)continue;const h=qe({...f,taskId:r});a.has(h)||a.set(h,{...f,taskId:r})}return Array.from(a.values())}function _t(){try{const e=window.localStorage.getItem(Oe()),t=e?JSON.parse(e):[];y.value=Array.isArray(t)?t.filter(s=>typeof s=="number"&&s>0):[]}catch{y.value=[]}}function le(){ne(Oe(),y.value,y.value.length===0)}function Tt(){try{const e=window.localStorage.getItem(Ve());k.value=e?JSON.parse(e):{}}catch{k.value={}}}function x(){ne(Ve(),k.value,Object.keys(k.value).length===0)}function Ct(){try{const e=window.localStorage.getItem(He());d.value=e?JSON.parse(e):{}}catch{d.value={}}}function V(){ne(He(),d.value,Object.keys(d.value).length===0)}function Et(){try{const e=window.localStorage.getItem(Be());_.value=e?JSON.parse(e):[]}catch{_.value=[]}}function Ie(){ne(Be(),_.value,_.value.length===0)}function It(e){const t=e instanceof Error?e.message:String(e||"");return/记录不存在|任务不存在|不存在|已删除|not\s*found|404/i.test(t)}function $t(){const e=y.value.filter(t=>(k.value[t]||d.value[t]?.task?.status)==="RUNNING");e.length!==y.value.length&&(y.value=e,le())}function Ge(e){y.value.includes(e)||(y.value=[...y.value,e],le())}function re(e){const t=O.get(e);t&&(window.clearTimeout(t),O.delete(e))}function ue(e){if(re(e),y.value=y.value.filter(t=>t!==e),delete k.value[e],d.value[e]){const t={...d.value};delete t[e],d.value=t,V()}le(),x()}function Q(e){ue(e),E.value=E.value.filter(t=>C(t.taskId)!==e)}function Je(e,t=!0){y.value=y.value.filter(s=>s!==e),t||delete k.value[e],le(),x()}function W(e){return e==="SUCCESS"||e==="FAILED"||e==="COMPLETED"}function Ye(e){if(!e)return!1;const t=k.value[e]||d.value[e]?.task?.status;return W(t)}function Qe(e){const t=C(e.taskId);return t&&Ye(t)||W(e.taskStatus)?!0:!!e.success}async function X(){pe.value=await Ss()}async function A(){z.value=await ks()}async function H(){const e=await bs();E.value=e.items||[]}async function Dt(){try{const e=await _s();if(ke.value)return;const t=(e.country_codes||[]).filter(s=>me.some(a=>a.code===s));t.length&&(g.value=t)}catch{}}async function ie(){await Promise.allSettled([H(),A()])}function We(){R&&clearTimeout(R),R=setTimeout(()=>{R=null,Nt()},450)}async function Nt(){if(g.value.length){Se.value=!0;try{await Ms(g.value)}catch(e){m.error(e instanceof Error?e.message:"保存国家配置失败")}finally{Se.value=!1}}}function Mt(e){Fe.value=e}async function Xe(){const e=te.value.trim();if(!e){m.warning("请输入店铺名");return}se.value=!0;try{await Ts(e),te.value="",await X(),await A()}catch(t){m.error(t instanceof Error?t.message:"添加失败")}finally{se.value=!1}}async function Pt(e){try{await Cs(e.id),await X(),await A()}catch(t){m.error(t instanceof Error?t.message:"删除失败")}}function xt(e){return g.value.includes(e)}function Ze(e){return g.value.length===1&&g.value[0]===e}function At(e,t){const s=t.target;if(s){if(!s.checked&&Ze(e)){s.checked=!0,m.warning("至少保留 1 个国家");return}Lt(e,s.checked)}}function Lt(e,t){if(ke.value=!0,t)g.value.includes(e)||(g.value=[...g.value,e]);else{if(g.value.length<=1){m.warning("至少保留 1 个国家");return}g.value=g.value.filter(s=>s!==e)}We()}function Ft(e){K.value=e}function Ut(){K.value=null}function Rt(e){const t=K.value;if(K.value=null,t==null||t===e)return;ke.value=!0;const s=[...g.value],[a]=s.splice(t,1);s.splice(e,0,a),g.value=s,We()}function Ot(){N.value&&(S.value=$e(S.value,!0)),N.value||(S.value=[])}function Vt(){const e=S.value[S.value.length-1],t=e?bt(e,60):Ee();S.value=[...S.value,t]}function Ht(e){S.value.length<=1||(S.value=S.value.filter((t,s)=>s!==e))}function Bt(e,t){const s=[...S.value];s[e]=t||"",S.value=$e(s,!1)}function qt(e,t){const s=new Map;for(const a of e)s.set(P(a),a);for(const a of t)s.set(P(a),a);return Array.from(s.values())}async function jt(){const e=Fe.value.map(t=>t.shop_name).filter(Boolean);if(!e.length){m.warning("请先选择候选店铺");return}ae.value=!0;try{const t=await Es(e);_.value=qt(_.value,t.items||[]),Ie(),we.value&&ht(),m.success(`本次返回 ${t.items?.length||0} 条匹配结果`)}catch(t){m.error(t instanceof Error?t.message:"匹配失败")}finally{ae.value=!1}}function Kt(e){_.value=_.value.filter(t=>P(t)!==P(e)),Ie()}function L(e){const t=new Set(e.map(s=>P(s)));_.value=_.value.filter(s=>!t.has(P(s))),Ie()}function zt(){if(!N.value)return;const e=Date.now(),t=S.value.map(n=>n.trim()).filter(Boolean);if(!t.length)throw new Error("请至少选择一个执行时间");const s=t.map(n=>{const u=Y(n);if(!u)throw new Error(`时间格式无效: ${n}`);return{raw:kt(u),picker:oe(u),time:u.getTime()}}).sort((n,u)=>n.time-u.time);for(let n=1;nn.time>e);if(!a.length)throw new Error("执行时间必须晚于当前时间,请重新选择");return a.length!==s.length&&(S.value=a.map(n=>n.picker),m.warning("已自动移除早于当前时间的执行时间")),a.map(n=>n.raw)}function $e(e,t){const s=Date.now(),a=e.map(r=>r.trim()).filter(Boolean).map(r=>{const f=Y(r);return f?{value:oe(f),time:f.getTime()}:null}).filter(r=>!!r).filter(r=>r.time>s).sort((r,f)=>r.time-f.time),n=[],u=new Set;for(const r of a)u.has(r.value)||(u.add(r.value),n.push(r.value));return!n.length&&t?[Ee()]:n}function et(e,t,s,a,n=!0){return{type:"shop-match-run",ts:Date.now(),data:{taskId:e,user_id:St(),items:[{shopName:t.shopName,shopId:t.shopId,platform:t.platform,companyName:t.companyName,matched:!0,matchStatus:t.matchStatus,matchMessage:t.matchMessage}],country_codes:[...s],risk_listing_filter:ge.value,stage_index:a,final_stage:n}}}function De(e){const t=d.value[e]?.task,s=t?.scheduleStages||[],a=t?.currentStageIndex;if(typeof a!="number")return null;const n=s.find(u=>u.stageIndex===a);return n?.scheduledAt?{stageIndex:a,scheduledAt:n.scheduledAt,finalStage:a===s.length-1}:null}async function Gt(e,t){const s=Ae();if(!s?.enqueue_json)throw new Error("当前客户端未提供 enqueue_json");const a=De(e),n=d.value[e],u=n?.task?.countryCodes||g.value;if(!a)throw new Error(`任务 ${e} 缺少待执行阶段`);re(e),await st(()=>Ps(e,a.stageIndex),(o,h)=>{w.value=`任务 ${e} 等待后端恢复后再激活执行(${o}/${h})...`}),k.value={...k.value,[e]:"RUNNING"},n?.task&&(d.value={...d.value,[e]:{...n,task:{...n.task,status:"RUNNING",activeStageIndex:a.stageIndex}}}),V(),x();const r=et(e,t,u,a.stageIndex,a.finalStage);j.value=JSON.stringify(r,null,2);const f=await s.enqueue_json(r);if(!f?.success)throw new Error(f?.error||`任务 ${e} 推送失败`);Ge(e),w.value=`任务 ${e} 已推送第 ${a.stageIndex+1} 轮`,ee(!0)}function tt(e){const t=Y(e);return t?t.getTime():Number.NaN}function Jt(){const e=new Set(y.value);for(const s of Object.keys(d.value)){const a=C(s);a>0&&e.add(a)}for(const s of E.value){const a=C(s.taskId);a>0&&e.add(a)}const t=Array.from(e).map(s=>{const a=d.value[s],n=k.value[s]||a?.task?.status,u=a?.items?.[0]||E.value.find(o=>C(o.taskId)===s),r=De(s);if(n!=="SCHEDULED"||!u||!r?.scheduledAt)return null;const f=tt(r.scheduledAt);return!Number.isFinite(f)||f>Date.now()?null:{taskId:s,item:u,scheduledTime:f}}).filter(s=>!!s);return t.sort((s,a)=>s.scheduledTime-a.scheduledTime||s.taskId-a.taskId),t}async function Ne(){if(_e.value)return;const e=Jt();if(e.length){_e.value=!0;try{const t=e[0];try{await Gt(t.taskId,t.item),await ts(t.taskId)}catch(s){const a=s instanceof Error?s.message:`任务 ${t.taskId} 调度失败`,n=`${t.taskId}:${a}`,u=Date.now();w.value=a,(Re!==n||u-Ue>1e4)&&(Re=n,Ue=u,m.error(a)),await Promise.allSettled([H(),at()])}}finally{_e.value=!1,I()}}}function Yt(e,t){if(!t)return;re(e);const s=tt(t);if(!Number.isFinite(s))return;const a=Math.max(0,s-Date.now()),n=window.setTimeout(()=>{O.delete(e),Ne()},a);O.set(e,n)}function I(){const e=new Set(y.value);for(const t of Object.keys(d.value)){const s=C(t);s>0&&e.add(s)}for(const t of E.value){const s=C(t.taskId);s>0&&e.add(s)}for(const t of e){const a=d.value[t]?.task?.status||k.value[t],n=De(t);a==="SCHEDULED"&&n?.scheduledAt?Yt(t,n.scheduledAt):re(t)}Ne()}function Qt(){G||(G=window.setInterval(()=>{Ne()},1e3))}function Wt(){G&&(window.clearInterval(G),G=null)}function ce(){I(),y.value.length&&ee(!0)}const Xt=["无法连接到后端服务","bad gateway","gateway timeout","network error","timeout","502","503","504"];function Z(e){return new Promise(t=>{window.setTimeout(()=>t(),e)})}function Me(e){const t=(e instanceof Error?e.message:String(e||"")).toLowerCase();return Xt.some(s=>t.includes(s.toLowerCase()))}async function st(e,t,s=10){let a=0;for(;;)try{return await e()}catch(n){if(a+=1,!Me(n)||a>=s)throw n;t(a,s),await Z(F())}}async function at(){if(!y.value.length)return{settledTaskIds:[]};try{const e=await Le(y.value),t={...d.value},s=new Set;for(const a of e.missingTaskIds||[])Q(a),delete t[a],s.add(a);for(const a of e.items||[]){const n=a.task?.id;if(!n)continue;const u=t[n];t[n]=u?{...u,task:{...u.task||{},...a.task||{}}}:a;const r=a.task?.status||"";if(r){if(k.value[n]=r,W(r)){ue(n),s.add(n);continue}r==="SCHEDULED"&&(Je(n),s.add(n))}}return d.value=t,V(),x(),I(),{settledTaskIds:Array.from(s)}}catch{return{settledTaskIds:[]}}}function F(){return xs()}function nt(e=!1){if($.value){if(!e)return;window.clearTimeout($.value),$.value=null}const t=async()=>{if($.value=null,be.value||!y.value.length){y.value.length&&nt();return}be.value=!0;try{const{settledTaskIds:s}=await at();s.length&&await Promise.allSettled([H(),A()])}finally{be.value=!1}y.value.length&&($.value=window.setTimeout(t,F()))};e?t():$.value=window.setTimeout(t,F())}function ee(e=!1){nt(e)}function Zt(){$.value&&(window.clearTimeout($.value),$.value=null)}async function es(e){let t=0;const s=30;for(;;){try{const a=await Le([e]);if(t>0&&(w.value=`任务 ${e} 后端已恢复,继续等待执行结果...`),t=0,(a.missingTaskIds||[]).includes(e))return Q(e),await ie(),I(),"FAILED";const n=(a.items||[]).find(r=>r.task?.id===e),u=n?.task?.status||"";if(n){const r=d.value[e];d.value={...d.value,[e]:r?{...r,task:{...r.task||{},...n.task||{}}}:n},V()}if(u&&(k.value[e]=u,x()),W(u))return ue(e),await ie(),I(),u}catch(a){if(!Me(a))throw a;if(t+=1,t>=s)throw new Error(`任务 ${e} 等待后端恢复超时,请稍后手动刷新查看状态`);w.value=`任务 ${e} 运行中,正在等待后端服务恢复(${t}/${s})...`,(t===1||t%5===0)&&m.warning(`任务 ${e} 运行中,后端服务暂时不可用,正在自动重试`),await Z(F());continue}await Z(F())}}async function ts(e){let t=0;const s=30;for(;;)try{const a=await Le([e]);if(t>0&&(w.value=`任务 ${e} 后端已恢复,继续等待当前轮次结束...`),t=0,(a.missingTaskIds||[]).includes(e))return Q(e),await ie(),I(),"FAILED";const n=(a.items||[]).find(r=>r.task?.id===e),u=n?.task?.status||"";if(n){const r=d.value[e];d.value={...d.value,[e]:r?{...r,task:{...r.task||{},...n.task||{}}}:n},V()}if(u&&(k.value[e]=u,x()),!u||u==="RUNNING"){await Z(F());continue}return W(u)?(ue(e),await ie(),I(),u):(u==="SCHEDULED"&&(Je(e),I()),u)}catch(a){if(!Me(a))throw a;if(t+=1,t>=s)throw new Error(`任务 ${e} 等待当前轮次结束超时,请稍后手动刷新查看状态`);w.value=`任务 ${e} 运行中,正在等待当前轮次结束(${t}/${s})...`,(t===1||t%5===0)&&m.warning(`任务 ${e} 运行中,后端服务暂时不可用,正在自动重试`),await Z(F())}}function Pe(e){const t=C(e.taskId);return t?k.value[t]||d.value[t]?.task?.status||e.taskStatus||"":e.taskStatus||""}function ot(e){const t=C(e.taskId);return t?d.value[t]:void 0}function lt(e){const s=ot(e)?.task,a=s?.scheduleStages||[];if(!a.length)return"";const n=a.length,u=typeof s?.activeStageIndex=="number"?s.activeStageIndex:void 0,r=typeof s?.currentStageIndex=="number"?s.currentStageIndex:void 0;return typeof u=="number"?`执行进度: 第 ${u+1}/${n} 次执行中`:typeof r=="number"?`执行进度: 等待第 ${r+1}/${n} 次`:`执行进度: 共 ${n} 次`}function rt(e){const s=ot(e)?.task,a=s?.scheduleStages||[];if(typeof s?.currentStageIndex=="number"){const n=a.find(u=>u.stageIndex===s.currentStageIndex);if(n?.scheduledAt)return Ke(n.scheduledAt)}return e.scheduledAt?Ke(e.scheduledAt):""}function ut(e){const t=Pe(e);return t==="SCHEDULED"?"待执行":t==="RUNNING"?"执行中":t==="SUCCESS"||t==="COMPLETED"?"已完成":t==="FAILED"?"失败":e.success?"已完成":"未知"}function it(e){const t=Pe(e);return t==="SUCCESS"||t==="COMPLETED"?"success":t==="FAILED"?"failed":"running"}function ct(e){const t=Pe(e);return!!e.resultId&&(!!e.fileReady||!!e.downloadUrl)&&(t==="SUCCESS"||t==="COMPLETED")}async function dt(e){if(!e.resultId)return;const t=Ae();if(!t?.save_file_from_url_new){m.error("当前客户端未提供下载能力");return}const s=Is(e.resultId),a=e.outputFilename||`${e.shopName||"result"}.xlsx`,n=await t.save_file_from_url_new(s,a);n.success?m.success(`已保存: ${n.path||a}`):n.error&&n.error!=="用户取消"&&m.error(n.error)}async function ft(e){const t=C(e.taskId),s=Number(e.resultId||0);try{if(t>0)await $s(t),Q(t);else if(s>0)await Ds(s),E.value=E.value.filter(a=>Number(a.resultId||0)!==s),L([e]);else throw new Error("缺少可删除的任务标识");await Promise.allSettled([H(),X(),A()]),m.success("删除成功")}catch(a){if(It(a)){t>0?Q(t):s>0&&(E.value=E.value.filter(n=>Number(n.resultId||0)!==s)),L([e]),await Promise.allSettled([H(),X(),A()]),m.success("后端记录已不存在,本地记录已同步清理");return}m.error(a instanceof Error?a.message:"删除失败")}}function ss(e){const t=(e||"").trim();return{MATCHED:"已匹配",PENDING:"待匹配",CONFLICT:"需人工确认",INDEX_STALE:"索引过期"}[t]||t||"—"}function as(e){const t=(e.matchMessage||"").trim();return t||(e.matched&&e.matchStatus==="MATCHED"?"紫鸟索引已命中,可推送队列":e.matched?"已关联索引,请结合状态列查看是否可推送":"未命中或未就绪,请检查店铺名与索引刷新")}async function ns(){we.value=!0,await ht()}function os(){return _.value.find(e=>e.matched)}async function ht(){if(ye.value)return;const e=Ae();if(!e?.enqueue_json){m.error("当前客户端未提供 enqueue_json");return}if(!_.value.filter(r=>r.matched).length){m.warning("请先匹配可用店铺");return}if(!g.value.length){m.warning("请至少勾选一个国家");return}let s;try{s=zt()}catch(r){m.error(r instanceof Error?r.message:"定时配置无效");return}ye.value=!0,D.value=!0,j.value="";let a=0,n=0,u=0;try{for(;we.value;){const r=os();if(!r)break;u+=1;try{const f=await st(()=>Ns([r],g.value,s),(xe,de)=>{w.value=`后端服务暂时不可用,正在重试创建任务(${xe}/${de})...`}),o=f.taskId,h=s?.length?"SCHEDULED":"RUNNING",B={task:{id:o,status:h,scheduledAt:s?.[0],countryCodes:[...g.value],currentStageIndex:s?.length?0:void 0,activeStageIndex:void 0,scheduleStages:(s||[]).map((xe,de)=>({stageIndex:de,scheduledAt:xe,status:de===0?"SCHEDULED":"PENDING"}))},items:f.items};if(d.value={...d.value,[o]:B},k.value={...k.value,[o]:h},V(),x(),!f.items?.[0]){L([r]);continue}if(s?.length){a+=1,I(),w.value=`任务 ${o} 已创建,共 ${s.length} 个执行时间点`,L([r]);continue}const vt=et(o,r,g.value);j.value=JSON.stringify(vt,null,2);const mt=await e.enqueue_json(vt);if(!mt?.success){n+=1,w.value=`任务 ${o} 推送失败,已自动继续下一条:${mt?.error||"未知错误"}`,m.error(w.value),L([r]);continue}if(Ge(o),ee(!0),L([r]),w.value=`任务 ${o} 已入队,等待执行完成`,await es(o)!=="SUCCESS"){n+=1,w.value=`任务 ${o} 执行失败,已自动继续下一条`,m.error(w.value);continue}a+=1,w.value=`任务 ${o} 已完成`}catch(f){n+=1,w.value=`第 ${u} 条任务处理失败,已自动继续下一条:${f instanceof Error?f.message:"未知错误"}`,m.error(w.value),L([r]);continue}}I(),s?.length||ee(!0),(a>0||n>0)&&m.success(s?.length?`定时任务已创建:成功 ${a} 条,失败 ${n} 条`:`店铺推送已完成:成功 ${a} 条,失败 ${n} 条`)}catch(r){const f=r instanceof Error?r.message:"推送失败";w.value=f,m.error(f)}finally{ye.value=!1,D.value=!1}}return rs(async()=>{_t(),Tt(),Ct(),Et(),S.value=$e(S.value,N.value),$t(),await Promise.allSettled([X(),Dt(),H(),A()]),Qt(),window.addEventListener("focus",ce),document.addEventListener("visibilitychange",ce),I(),y.value.length&&ee(!0)}),us(()=>{Zt(),Wt(),window.removeEventListener("focus",ce),document.removeEventListener("visibilitychange",ce),R&&clearTimeout(R);for(const e of O.values())window.clearTimeout(e);O.clear()}),(e,t)=>{const s=ds,a=fs,n=hs,u=ms,r=ps,f=ws;return i(),c("div",Vs,[b(is,{active:"shop-match"}),l("div",Hs,[l("aside",Bs,[t[10]||(t[10]=l("div",{class:"section-title"},"店铺候选",-1)),l("div",qs,[t[4]||(t[4]=l("div",{class:"hint"},"输入店铺名后点“添加”加入下方备选区。勾选备选店铺后先做“匹配店铺”,确认命中紫鸟索引后再推送到 Python 队列。",-1)),l("div",js,[b(s,{modelValue:te.value,"onUpdate:modelValue":t[0]||(t[0]=o=>te.value=o),clearable:"",placeholder:"请输入店铺名后回车或点击添加",onKeyup:cs(Xe,["enter"])},null,8,["modelValue"]),l("button",{type:"button",class:"opt-btn",disabled:se.value,onClick:Xe},v(se.value?"添加中...":"添加"),9,Ks)])]),t[11]||(t[11]=l("div",{class:"section-title"},"备选店铺",-1)),pe.value.length?(i(),c("div",Gs,[b(n,{data:pe.value,"row-key":"id",height:"240",class:"candidate-table",onSelectionChange:Mt},{default:M(()=>[b(a,{type:"selection",width:"42"}),b(a,{prop:"shop_name",label:"店铺名","min-width":"120","show-overflow-tooltip":""}),b(a,{label:"操作",width:"72",align:"center"},{default:M(({row:o})=>[l("button",{type:"button",class:"link-danger",onClick:h=>Pt(o)},"删除",8,Js)]),_:1})]),_:1},8,["data"])])):(i(),c("div",zs,"暂无备选店铺,请先输入并添加")),t[12]||(t[12]=l("div",{class:"section-title"},"国家配置",-1)),t[13]||(t[13]=l("p",{class:"hint country-pref-hint"},"勾选的国家会在每一个执行时间点都执行一遍。勾选区会按照已选顺序排在前面,下方支持拖拽排序,和商品风险页保持一致。",-1)),l("div",Ys,[(i(!0),c(U,null,q(wt.value,o=>(i(),c("label",{key:o.code,class:"country-check-row"},[l("input",{type:"checkbox",class:"country-check-input",checked:xt(o.code),disabled:Ze(o.code),onChange:h=>At(o.code,h)},null,40,Qs),l("span",Ws,v(o.label)+" ("+v(o.code)+")",1)]))),128))]),g.value.length?(i(),c("div",Xs,[t[6]||(t[6]=l("div",{class:"country-order-caption"},"已选顺序(拖拽 ⋮⋮ 调整)",-1)),l("div",Zs,[(i(!0),c(U,null,q(g.value,(o,h)=>(i(),c("div",{key:o,class:fe(["country-drag-row",{dragging:K.value===h}]),draggable:"true",onDragstart:B=>Ft(h),onDragend:Ut,onDragover:t[1]||(t[1]=pt(()=>{},["prevent"])),onDrop:pt(B=>Rt(h),["prevent"])},[t[5]||(t[5]=l("span",{class:"drag-handle",title:"拖动排序"},"⋮⋮",-1)),l("span",ta,v(je(o))+" ("+v(o)+")",1)],42,ea))),128))])])):T("",!0),Se.value?(i(),c("div",sa,"保存中...")):T("",!0),t[14]||(t[14]=l("div",{class:"section-title"},"商品列表筛选",-1)),t[15]||(t[15]=l("p",{class:"hint listing-filter-hint"},"与“推送到 Python 队列”一并下发,供 Python 区分处理场景。",-1)),l("div",aa,[b(r,{modelValue:ge.value,"onUpdate:modelValue":t[2]||(t[2]=o=>ge.value=o),class:"listing-filter-select",teleported:"",placeholder:"选择筛选类型"},{default:M(()=>[(i(!0),c(U,null,q(vs(Os),o=>(i(),gt(u,{key:o.value,label:o.label,value:o.value},null,8,["label","value"]))),128))]),_:1},8,["modelValue"])]),t[16]||(t[16]=l("div",{class:"section-title"},"定时执行",-1)),l("label",na,[gs(l("input",{"onUpdate:modelValue":t[3]||(t[3]=o=>N.value=o),type:"checkbox",disabled:D.value,onChange:Ot},null,40,oa),[[ys,N.value]]),t[7]||(t[7]=l("span",null,"启用多时间点调度",-1))]),N.value?(i(),c("div",la,[(i(!0),c(U,null,q(S.value,(o,h)=>(i(),c("div",{key:`schedule-${h}`,class:"schedule-row"},[b(f,{"model-value":o,type:"datetime","value-format":"YYYY-MM-DD HH:mm:ss",format:"MM-DD HH:mm",placeholder:"选择执行时间",disabled:D.value,class:"schedule-picker","onUpdate:modelValue":B=>Bt(h,B)},null,8,["model-value","disabled","onUpdate:modelValue"]),l("button",{type:"button",class:"schedule-remove",disabled:D.value||S.value.length<=1,onClick:B=>Ht(h)},"删除",8,ra)]))),128)),l("button",{type:"button",class:"schedule-add",disabled:D.value,onClick:Vt},"添加时间点",8,ua),t[8]||(t[8]=l("p",{class:"hint schedule-hint"},"默认开启定时;支持按 `MM-DD HH:mm` 配置多个时间点,前端不再限制选择更早时间,实际是否可执行以后端校验为准。",-1))])):T("",!0),l("div",ia,[l("button",{type:"button",class:"btn-run",disabled:ae.value,onClick:jt},v(ae.value?"匹配中...":"匹配店铺"),9,ca),l("button",{type:"button",class:"btn-run btn-queue",disabled:D.value||!_.value.length,onClick:ns},v(D.value?"推送中...":N.value?"创建定时任务":"推送到 Python 队列"),9,da)]),t[17]||(t[17]=l("p",{class:"loading-msg"},[he("已支持多阶段定时执行;Python 每处理完一店可回传 "),l("code",null,"/api/shop-match/tasks/{taskId}/result"),he(",后端会按阶段汇总并在超时场景自动收尾。")],-1)),w.value?(i(),c("div",fa,[t[9]||(t[9]=l("div",{class:"section-title queue-debug-title"},"推送结果",-1)),l("div",ha,v(w.value),1),j.value?(i(),c("pre",va,v(j.value),1)):T("",!0)])):T("",!0)]),l("section",ma,[t[26]||(t[26]=l("div",{class:"panel-header"},"匹配与任务",-1)),l("div",pa,[l("div",ga,[l("div",ya,[t[18]||(t[18]=l("span",{class:"summary-label"},"候选店铺",-1)),l("strong",null,v(z.value.candidateCount),1)]),l("div",wa,[t[19]||(t[19]=l("span",{class:"summary-label"},"已结束任务",-1)),l("strong",null,v(z.value.processedTaskCount),1)]),l("div",Sa,[t[20]||(t[20]=l("span",{class:"summary-label"},"成功",-1)),l("strong",null,v(z.value.successTaskCount),1)]),l("div",ka,[t[21]||(t[21]=l("span",{class:"summary-label"},"失败",-1)),l("strong",null,v(z.value.failedTaskCount),1)])]),t[25]||(t[25]=l("div",{class:"subsection-title"},"匹配结果",-1)),_.value.length?(i(),gt(n,{key:1,data:_.value,"row-key":P,"highlight-current-row":!1,class:"result-table match-table"},{default:M(()=>[b(a,{prop:"shopName",label:"店铺名","min-width":"100"}),b(a,{label:"匹配",width:"72",align:"center"},{default:M(({row:o})=>[l("span",{class:fe(o.matched?"ok":"fail")},v(o.matched?"是":"否"),3)]),_:1}),b(a,{prop:"shopId",label:"店铺ID","min-width":"120","show-overflow-tooltip":""}),b(a,{prop:"platform",label:"平台",width:"88","show-overflow-tooltip":""}),b(a,{prop:"companyName",label:"公司","min-width":"100","show-overflow-tooltip":""}),b(a,{label:"状态",width:"100","show-overflow-tooltip":""},{default:M(({row:o})=>[he(v(ss(o.matchStatus)),1)]),_:1}),b(a,{label:"说明","min-width":"140","show-overflow-tooltip":""},{default:M(({row:o})=>[he(v(as(o)),1)]),_:1}),b(a,{label:"操作",width:"72",align:"center"},{default:M(({row:o})=>[l("button",{type:"button",class:"link-danger",onClick:h=>Kt(o)},"删除",8,_a)]),_:1})]),_:1},8,["data"])):(i(),c("div",ba,"完成“匹配店铺”后,在此展示紫鸟索引匹配结果,供核对后再推送队列。")),l("div",Ta,[t[24]||(t[24]=l("div",{class:"result-list-header"},[l("span",null,"处理记录")],-1)),yt.value?(i(),c(U,{key:1},[Te.value.length?(i(),c("div",Ea,[t[22]||(t[22]=l("div",{class:"result-subsection-title"},"当前任务",-1)),l("ul",Ia,[(i(!0),c(U,null,q(Te.value,o=>(i(),c("li",{key:`cur-${o.resultId}-${o.taskId}`,class:"task-item"},[l("div",$a,[l("span",{class:"id",title:o.shopName||""},v(o.shopName||"-"),9,Da),l("div",Na,"任务 ID: "+v(o.taskId??"-"),1),o.platform?(i(),c("div",Ma,"平台: "+v(o.platform),1)):T("",!0),lt(o)?(i(),c("div",Pa,v(lt(o)),1)):T("",!0),rt(o)?(i(),c("div",xa,"下一次: "+v(rt(o)),1)):T("",!0),o.error?(i(),c("div",Aa,"错误: "+v(o.error),1)):T("",!0)]),l("div",La,[l("span",{class:fe(["status",it(o)])},v(ut(o)),3),ct(o)?(i(),c("button",{key:0,type:"button",class:"download",onClick:h=>dt(o)},"下载",8,Fa)):T("",!0),l("button",{type:"button",class:"btn-delete",onClick:h=>ft(o)},"删除",8,Ua)])]))),128))])])):T("",!0),Ce.value.length?(i(),c("div",Ra,[t[23]||(t[23]=l("div",{class:"result-subsection-title"},"历史任务",-1)),l("ul",Oa,[(i(!0),c(U,null,q(Ce.value,o=>(i(),c("li",{key:`his-${o.resultId}-${o.taskId}`,class:"task-item"},[l("div",Va,[l("span",{class:"id",title:o.shopName||""},v(o.shopName||"-"),9,Ha),l("div",Ba,"任务 ID: "+v(o.taskId??"-"),1),o.outputFilename?(i(),c("div",qa,"文件: "+v(o.outputFilename),1)):T("",!0),o.error?(i(),c("div",ja,"错误: "+v(o.error),1)):T("",!0)]),l("div",Ka,[l("span",{class:fe(["status",it(o)])},v(ut(o)),3),ct(o)?(i(),c("button",{key:0,type:"button",class:"download",onClick:h=>dt(o)},"下载",8,za)):T("",!0),l("button",{type:"button",class:"btn-delete",onClick:h=>ft(o)},"删除",8,Ga)])]))),128))])])):T("",!0)],64)):(i(),c("div",Ca,"暂无处理记录。推送队列并等待 Python 回传后,将在此显示下载链接。"))])])])])])}}}),Ya=As(Ja,[["__scopeId","data-v-064c8132"]]);Ls.locale("zh-cn");Fs(Ya).use(Us,{locale:Rs}).mount("#app"); diff --git a/new_web_source/assets/split-BoBVrLdC.css b/new_web_source/assets/split-BoBVrLdC.css new file mode 100644 index 0000000..e05f1ca --- /dev/null +++ b/new_web_source/assets/split-BoBVrLdC.css @@ -0,0 +1 @@ +.module-page[data-v-f3b42aa3]{min-height:100vh;background:#1a1a1a}.main-content[data-v-f3b42aa3]{display:flex;min-height:calc(100vh - 56px);height:calc(100vh - 56px)}.left-panel[data-v-f3b42aa3]{width:380px;background:#1e1e1e;padding:20px;overflow-y:auto;border-right:1px solid #2a2a2a}.right-panel[data-v-f3b42aa3]{flex:1;display:flex;flex-direction:column;min-width:0;background:#1a1a1a}.section-title[data-v-f3b42aa3]{font-size:13px;color:#bbb;margin-bottom:10px}.upload-zone[data-v-f3b42aa3]{border:1px dashed #3a3a3a;border-radius:10px;padding:24px;text-align:center;background:#252525;margin-bottom:20px;transition:all .2s ease}.upload-zone[data-v-f3b42aa3]:hover{border-color:#3498db;background:#2a2a2a}.hint[data-v-f3b42aa3]{color:#888;font-size:13px;margin-bottom:12px;line-height:1.5}.btns[data-v-f3b42aa3]{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}.opt-btn[data-v-f3b42aa3],.btn-run[data-v-f3b42aa3],.download[data-v-f3b42aa3],.btn-delete[data-v-f3b42aa3]{border:none;cursor:pointer;transition:all .2s ease}.opt-btn[data-v-f3b42aa3]{padding:8px 16px;font-size:13px;color:#ccc;background:#2a2a2a;border:1px solid #3a3a3a;border-radius:6px}.opt-btn.small[data-v-f3b42aa3]{padding:6px 10px;font-size:12px}.opt-btn[data-v-f3b42aa3]:hover{color:#3498db;background:#333;border-color:#3498db}.selected-files[data-v-f3b42aa3]{margin-top:14px;font-size:12px;color:#888;max-height:112px;overflow-y:auto;text-align:left}.selected-files span[data-v-f3b42aa3]{display:block;margin:4px 0;word-break:break-all}.more-line[data-v-f3b42aa3]{color:#b8c1cc}.split-selected-files[data-v-f3b42aa3]{max-height:120px;min-height:72px;padding-right:4px}.option-group[data-v-f3b42aa3]{margin-bottom:20px}.column-option-group[data-v-f3b42aa3]{padding:14px;border-radius:10px;background:#252525;border:1px solid #2a2a2a}.column-toolbar[data-v-f3b42aa3]{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.column-count[data-v-f3b42aa3]{font-size:12px;color:#a9b4bf}.column-actions[data-v-f3b42aa3]{display:flex;gap:8px}.column-grid[data-v-f3b42aa3]{display:grid;grid-template-columns:1fr;gap:8px;max-height:280px;overflow-y:auto}.empty-column-state[data-v-f3b42aa3]{padding:16px 12px;border-radius:8px;border:1px dashed #3a3a3a;background:#202020;color:#7f8790;font-size:12px;line-height:1.6}.column-item[data-v-f3b42aa3]{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;border:1px solid #2f2f2f;background:#202020;cursor:pointer;transition:all .2s ease;font-size:13px;color:#d7d7d7}.column-item[data-v-f3b42aa3]:hover,.column-item.active[data-v-f3b42aa3]{border-color:#3b6f98;background:#26313a}.column-item input[data-v-f3b42aa3]{margin:0}.column-item span[data-v-f3b42aa3]{word-break:break-all}.radio-item[data-v-f3b42aa3]{display:flex;align-items:flex-start;gap:10px;cursor:pointer;padding:10px 12px;border-radius:8px;background:#252525;border:1px solid #2a2a2a;margin-bottom:8px;transition:all .2s ease}.radio-item[data-v-f3b42aa3]:hover,.radio-item.active[data-v-f3b42aa3]{background:#2a2a2a;border-color:#3a3a3a}.radio-item input[data-v-f3b42aa3]{margin-top:3px}.label[data-v-f3b42aa3]{font-weight:500;color:#e0e0e0;font-size:13px}.desc[data-v-f3b42aa3]{font-size:12px;color:#888;margin-top:2px;line-height:1.5;font-weight:400}.split-input-card[data-v-f3b42aa3]{display:flex;flex-direction:column;gap:10px;padding:14px 16px;border-radius:10px;border:1px solid #2f2f2f;background:#252525}.split-number-input[data-v-f3b42aa3]{width:100%;padding:12px 14px;border-radius:8px;border:1px solid #3a3a3a;background:#1b1b1b;color:#eaf4ff;font-size:22px;font-weight:700;line-height:1.2;outline:none;transition:border-color .2s ease,box-shadow .2s ease,background .2s ease}.split-number-input[data-v-f3b42aa3]:focus{border-color:#3498db;box-shadow:0 0 0 3px #3498db2e;background:#20252b}.split-number-input[data-v-f3b42aa3]::placeholder{color:#708090;font-size:14px;font-weight:400}.run-row[data-v-f3b42aa3]{display:flex;align-items:center;flex-wrap:wrap;gap:10px 12px;margin-top:16px}.btn-run[data-v-f3b42aa3]{padding:10px 22px;background:#3498db;color:#fff;border-radius:8px;font-size:14px}.btn-run[data-v-f3b42aa3]:hover{background:#2980b9}.btn-run[data-v-f3b42aa3]:disabled{background:#555;color:#999;cursor:not-allowed}.loading-msg[data-v-f3b42aa3]{color:#3498db;font-size:13px}.panel-header[data-v-f3b42aa3]{padding:16px 20px;border-bottom:1px solid #2a2a2a;font-size:15px;font-weight:600;color:#ddd}.task-list-wrap[data-v-f3b42aa3]{flex:1;overflow-y:auto;padding:16px}.task-list[data-v-f3b42aa3]{list-style:none;margin:0;padding:0}.task-item[data-v-f3b42aa3]{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px;border:1px solid #2a2a2a;border-radius:8px;margin-bottom:10px;background:#1e1e1e}.split-result-item[data-v-f3b42aa3]{align-items:flex-start}.left[data-v-f3b42aa3]{flex:1;min-width:0}.split-result-main[data-v-f3b42aa3]{display:flex;flex-direction:column;gap:4px}.id[data-v-f3b42aa3]{display:inline-block;font-weight:600;color:#e0e0e0;font-size:13px}.files[data-v-f3b42aa3]{font-size:12px;color:#888;margin-top:4px}.time[data-v-f3b42aa3]{font-size:12px;color:#666;margin-top:2px}.split-entry-list[data-v-f3b42aa3]{line-height:1.6;word-break:break-all;max-width:100%}.task-right[data-v-f3b42aa3]{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:flex-end}.split-result-actions[data-v-f3b42aa3]{flex-shrink:0;min-width:180px;justify-content:flex-end;align-self:center}.status[data-v-f3b42aa3]{padding:4px 10px;border-radius:6px;font-size:12px;white-space:nowrap}.status.success[data-v-f3b42aa3]{background:#2ecc712e;color:#2ecc71}.status.failed[data-v-f3b42aa3]{background:#e74c3c2e;color:#ff6b6b}.download[data-v-f3b42aa3]{padding:6px 10px;border-radius:6px;font-size:12px;background:#3498db2e;color:#69b6ff}.download[data-v-f3b42aa3]:hover{background:#3498db47}.btn-delete[data-v-f3b42aa3]{padding:6px 10px;border-radius:6px;font-size:12px;background:#e74c3c1f;color:#ff8f8f}.btn-delete[data-v-f3b42aa3]:hover{background:#e74c3c38}.empty-tasks[data-v-f3b42aa3]{color:#666;font-size:13px;padding:24px 8px}.clean-placeholder[data-v-f3b42aa3]{max-height:112px}.clean-result-summary[data-v-f3b42aa3]{display:grid;grid-template-columns:repeat(3,minmax(0,220px));gap:16px;margin-bottom:18px}.summary-card[data-v-f3b42aa3]{padding:16px 18px;border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e}.summary-card strong[data-v-f3b42aa3]{display:block;margin-top:8px;font-size:24px;color:#eaf4ff}.summary-label[data-v-f3b42aa3]{font-size:12px;color:#8d8d8d}.result-list-wrap[data-v-f3b42aa3]{border:1px solid #2a2a2a;border-radius:10px;background:#1e1e1e;min-height:260px}.result-list-header[data-v-f3b42aa3]{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 16px;border-bottom:1px solid #2a2a2a;font-size:14px;color:#ddd}@media(max-width:1100px){.main-content[data-v-f3b42aa3]{flex-direction:column;height:auto}.left-panel[data-v-f3b42aa3]{width:100%;border-right:none;border-bottom:1px solid #2a2a2a}.right-panel[data-v-f3b42aa3]{min-height:420px}.task-item[data-v-f3b42aa3]{flex-direction:column;align-items:flex-start}.task-right[data-v-f3b42aa3]{width:100%;justify-content:flex-start}.split-result-actions[data-v-f3b42aa3]{min-width:0;align-self:flex-start}.clean-result-summary[data-v-f3b42aa3]{grid-template-columns:1fr}} diff --git a/new_web_source/assets/split.js b/new_web_source/assets/split.js new file mode 100644 index 0000000..f86d567 --- /dev/null +++ b/new_web_source/assets/split.js @@ -0,0 +1 @@ +import{d as q,o as G,a,c as n,b as L,B as O,e,F as x,r as I,t as i,f,n as F,w as C,u as V,G as M,g as d,h as Q,i as E,E as r,H as W,I as X,p as Y,v as Z,J as ss,K as es,_ as ts,q as ls,s as as}from"./pywebview-C66x_2Dh.js";import{e as ns}from"./brand-BZije8D7.js";const os={class:"page-shell module-page"},is={class:"main-content"},rs={class:"left-panel"},us={class:"upload-zone"},ds={class:"selected-files clean-placeholder split-selected-files"},cs={key:0,class:"more-line"},ps={key:1},vs={class:"option-group column-option-group"},fs={class:"column-toolbar"},_s={class:"column-count"},ms={class:"column-actions"},ys={key:0,class:"column-grid"},gs=["value"],hs={key:1,class:"empty-column-state"},bs={class:"option-group"},ws={class:"radio-item active"},ks={class:"desc"},Cs={class:"option-group"},Ss={class:"option-group"},xs={key:0,class:"split-input-card"},Fs={key:1,class:"split-input-card"},Es={class:"run-row"},Ps=["disabled"],$s={class:"loading-msg"},Is={class:"right-panel"},Rs={class:"task-list-wrap"},Bs={class:"clean-result-summary"},Us={class:"summary-card"},Vs={class:"summary-card"},Ms={class:"summary-card"},Ts={class:"result-list-wrap"},Ds={key:0,class:"empty-tasks"},Hs={key:1,class:"task-list clean-result-list"},Ks={class:"left split-result-main"},Ns=["title"],js={key:0,class:"files"},As={key:1,class:"time"},zs={key:2,class:"files"},Js={key:3,class:"files split-entry-list"},qs={key:4,class:"files"},Gs={class:"task-right split-result-actions"},Ls=["onClick"],Os=["onClick"],Qs=q({__name:"BrandSplitTab",setup(Xs){const _=d([]),S=d(""),c=d([]),m=d([]),p=d([]),R=d(0),u=d("rows_per_file"),y=d(2e3),g=d(5),h=d(!1),b=d([]),w=d({total:0,successCount:0,failedCount:0,items:[]}),P=Q(()=>_.value.slice(0,8));function T(l){w.value={total:l.length,successCount:l.filter(s=>s.success).length,failedCount:l.filter(s=>!s.success).length,items:l}}async function B(l){const s=E();if(!s?.upload_file_to_java)throw new Error("当前桌面端未提供文件上传桥接能力");const t=[];for(const o of l){const v=typeof o=="string"?o:o.absolutePath,J=typeof o=="string"?void 0:o.relativePath,k=await s.upload_file_to_java(v,J);if(!k?.success||!k.data)throw new Error(k?.error||k?.message||`上传失败:${v}`);t.push(k.data)}return t}async function U(l){const s=await Y(l);m.value=s.headers||[],p.value=[...s.headers||[]],R.value=s.totalRows||0}async function D(l,s){_.value=l,S.value="",c.value=await B(l),c.value.length>0&&await U(c.value[0].fileKey),r.success(s)}async function H(){const l=E();if(!l?.select_brand_xlsx_files){r.warning("当前环境不支持文件选择,请在本机客户端中打开");return}try{const s=await l.select_brand_xlsx_files();if(!s?.length)return;await D(s,`已选择 ${s.length} 个待拆分文件`)}catch(s){r.error(s instanceof Error?s.message:"选择失败")}}async function K(){const l=E();if(!l?.select_brand_folder){r.warning("当前环境不支持文件夹选择,请在本机客户端中打开");return}try{const s=await l.select_brand_folder();if(!s)return;S.value=s.split(/[/\\]/).filter(Boolean).pop()||"";const t=await ns(s);if(t.success&&t.items?.length){_.value=t.items.map(o=>o.relativePath),c.value=await B(t.items),c.value.length>0&&await U(c.value[0].fileKey),r.success(`已选择文件夹内 ${t.items.length} 个 xlsx 文件`);return}r.warning(t.error||"该文件夹下没有 xlsx 文件")}catch(s){r.error(s instanceof Error?s.message:"选择失败")}}async function N(){if(!c.value.length){r.warning("请先选择待拆分 Excel 文件或文件夹");return}if(!p.value.length){r.warning("请至少选择一列保留列");return}if(u.value==="rows_per_file"&&(!y.value||y.value<=0)){r.warning("请输入有效的每份条数");return}if(u.value==="parts"&&(!g.value||g.value<=0)){r.warning("请输入有效的拆分份数");return}try{h.value=!0;const l=await W({files:c.value.map(s=>({fileKey:s.fileKey,originalFilename:s.originalFilename,relativePath:s.relativePath})),selectedColumns:p.value,splitMode:u.value,rowsPerFile:u.value==="rows_per_file"&&y.value||void 0,parts:u.value==="parts"&&g.value||void 0,archiveName:c.value.some(s=>!!s.relativePath)&&S.value?S.value:void 0});w.value=l,b.value=l.items||[],await $(),r.success("数据拆分完成")}catch(l){r.error(l instanceof Error?l.message:"数据拆分失败")}finally{h.value=!1}}async function $(){try{const l=await X();b.value=l.items||[],T(b.value)}catch{}}async function j(l){try{await ss(l),await $(),r.success("已删除")}catch(s){r.error(s instanceof Error?s.message:"删除失败")}}function A(l){const s=l.slice(0,4).map(o=>o.rowCount!==void 0?`${o.filename}(${o.rowCount}条)`:o.filename);return l.length-s.length>0?`${s.join("、")} 等 ${l.length} 个文件`:s.join("、")}async function z(l){const s=E(),t=l.downloadUrl||(l.resultId?es(l.resultId):"");if(!t){r.warning("当前结果没有下载地址");return}const o=l.outputFilename||`${new Date().toISOString().slice(0,10).replace(/-/g,"")}.zip`;if(s?.save_file_from_url_new){const v=await s.save_file_from_url_new(t,o);v.success?r.success(`已保存:${v.path||o}`):v.error&&v.error!=="用户取消"&&r.error(v.error);return}}return G(()=>{$().catch(()=>{})}),(l,s)=>(a(),n("div",os,[L(O,{active:"split"}),e("div",is,[e("aside",rs,[s[14]||(s[14]=e("div",{class:"section-title"},"选择文件",-1)),e("div",us,[s[7]||(s[7]=e("div",{class:"hint"},"选择需要拆分的 Excel 文件或文件夹,按规则拆成多个 Excel 文件。",-1)),e("div",{class:"btns"},[e("button",{type:"button",class:"opt-btn",onClick:H},"选择 Excel 文件"),e("button",{type:"button",class:"opt-btn",onClick:K},"选择文件夹")]),e("div",ds,[_.value.length?(a(),n(x,{key:0},[(a(!0),n(x,null,I(P.value,t=>(a(),n("span",{key:t},i(t),1))),128)),_.value.length>P.value.length?(a(),n("span",cs," 还有 "+i(_.value.length-P.value.length)+" 个文件未展开显示 ",1)):f("",!0)],64)):(a(),n("span",ps,"暂未选择待拆分文件"))])]),s[15]||(s[15]=e("div",{class:"section-title"},"保留列设置",-1)),e("div",vs,[e("div",fs,[e("span",_s,"已选择 "+i(p.value.length)+" / "+i(m.value.length)+" 列",1),e("div",ms,[e("button",{type:"button",class:"opt-btn small",onClick:s[0]||(s[0]=t=>p.value=[...m.value])},"全选"),e("button",{type:"button",class:"opt-btn small",onClick:s[1]||(s[1]=t=>p.value=[])},"清空")])]),m.value.length?(a(),n("div",ys,[(a(!0),n(x,null,I(m.value,t=>(a(),n("label",{key:t,class:F(["column-item",{active:p.value.includes(t)}])},[C(e("input",{"onUpdate:modelValue":s[2]||(s[2]=o=>p.value=o),type:"checkbox",value:t},null,8,gs),[[Z,p.value]]),e("span",null,i(t),1)],2))),128))])):(a(),n("div",hs,"请选择 Excel 文件后读取表头并填充可保留列"))]),s[16]||(s[16]=e("div",{class:"section-title"},"总条数",-1)),e("div",bs,[e("label",ws,[s[9]||(s[9]=e("input",{type:"checkbox",checked:"",disabled:""},null,-1)),e("div",null,[s[8]||(s[8]=e("span",{class:"label"},"当前数据总条数",-1)),e("div",ks,i(R.value)+" 条(不含表头)",1)])])]),s[17]||(s[17]=e("div",{class:"section-title"},"拆分模式",-1)),e("div",Cs,[e("label",{class:F(["radio-item",{active:u.value==="rows_per_file"}])},[C(e("input",{"onUpdate:modelValue":s[3]||(s[3]=t=>u.value=t),type:"radio",value:"rows_per_file",name:"split-mode"},null,512),[[V,u.value]]),s[10]||(s[10]=e("div",null,[e("span",{class:"label"},"按每份条数"),e("div",{class:"desc"},"例如每份 2000 条,最后一份放剩余数据")],-1))],2),e("label",{class:F(["radio-item",{active:u.value==="parts"}])},[C(e("input",{"onUpdate:modelValue":s[4]||(s[4]=t=>u.value=t),type:"radio",value:"parts",name:"split-mode"},null,512),[[V,u.value]]),s[11]||(s[11]=e("div",null,[e("span",{class:"label"},"按份数平均拆分"),e("div",{class:"desc"},"例如拆 5 份,按总条数尽量平均分配")],-1))],2)]),s[18]||(s[18]=e("div",{class:"section-title"},"拆分参数",-1)),e("div",Ss,[u.value==="rows_per_file"?(a(),n("label",xs,[s[12]||(s[12]=e("span",{class:"label"},"每份条数",-1)),C(e("input",{"onUpdate:modelValue":s[5]||(s[5]=t=>y.value=t),class:"split-number-input",type:"number",min:"1",placeholder:"例如 2000"},null,512),[[M,y.value,void 0,{number:!0}]])])):(a(),n("label",Fs,[s[13]||(s[13]=e("span",{class:"label"},"拆分份数",-1)),C(e("input",{"onUpdate:modelValue":s[6]||(s[6]=t=>g.value=t),class:"split-number-input",type:"number",min:"1",placeholder:"例如 5"},null,512),[[M,g.value,void 0,{number:!0}]])]))]),e("div",Es,[e("button",{type:"button",class:"btn-run",disabled:h.value,onClick:N},i(h.value?"拆分中...":"开始拆分"),9,Ps),e("span",$s,i(h.value?"正在拆分并上传结果,请稍候…":"选择文件、保留列和拆分规则后即可执行拆分,结果会显示在右侧供下载"),1)])]),e("section",Is,[s[23]||(s[23]=e("div",{class:"panel-header"},"拆分结果",-1)),e("div",Rs,[e("div",Bs,[e("div",Us,[s[19]||(s[19]=e("span",{class:"summary-label"},"已处理文件",-1)),e("strong",null,i(w.value.total),1)]),e("div",Vs,[s[20]||(s[20]=e("span",{class:"summary-label"},"成功结果",-1)),e("strong",null,i(w.value.successCount),1)]),e("div",Ms,[s[21]||(s[21]=e("span",{class:"summary-label"},"失败文件",-1)),e("strong",null,i(w.value.failedCount),1)])]),e("div",Ts,[s[22]||(s[22]=e("div",{class:"result-list-header"},[e("span",null,"拆分结果压缩包列表")],-1)),b.value.length===0?(a(),n("div",Ds," 暂无拆分结果,完成数据拆分后会在这里展示压缩包文件 ")):(a(),n("ul",Hs,[(a(!0),n(x,null,I(b.value,t=>(a(),n("li",{key:`${t.resultId||t.outputFilename||t.sourceFilename}-${t.rowCount||0}`,class:"task-item split-result-item"},[e("div",Ks,[e("span",{class:"id",title:t.sourceFilename},i(t.sourceFilename||"-"),9,Ns),t.outputFilename?(a(),n("div",js,"压缩包文件:"+i(t.outputFilename),1)):f("",!0),t.rowCount!==void 0?(a(),n("div",As,"压缩包共包含 "+i(t.rowCount)+" 条数据",1)):f("",!0),t.entryCount&&t.entryCount>0?(a(),n("div",zs,"压缩包内共 "+i(t.entryCount)+" 个拆分文件 ",1)):f("",!0),t.entries&&t.entries.length?(a(),n("div",Js," 压缩包内容:"+i(A(t.entries)),1)):f("",!0),t.error?(a(),n("div",qs,"错误信息:"+i(t.error),1)):f("",!0)]),e("div",Gs,[e("span",{class:F(["status",t.success?"success":"failed"])},i(t.success?"已完成":"失败"),3),t.success&&(t.downloadUrl||t.resultId)?(a(),n("button",{key:0,type:"button",class:"download",onClick:o=>z(t)}," 下载压缩包 ",8,Ls)):f("",!0),t.resultId?(a(),n("button",{key:1,type:"button",class:"btn-delete",onClick:o=>j(t.resultId)}," 删除 ",8,Os)):f("",!0)])]))),128))]))])])])])]))}}),Ws=ts(Qs,[["__scopeId","data-v-f3b42aa3"]]);ls(Ws).use(as).mount("#app"); diff --git a/new_web_source/assets/zh-cn-CuE9Zzgz.js b/new_web_source/assets/zh-cn-CuE9Zzgz.js new file mode 100644 index 0000000..946af97 --- /dev/null +++ b/new_web_source/assets/zh-cn-CuE9Zzgz.js @@ -0,0 +1 @@ +import{bm as m}from"./pywebview-C66x_2Dh.js";var _={name:"zh-cn",el:{breadcrumb:{label:"面包屑"},colorpicker:{confirm:"确定",clear:"清空",defaultLabel:"颜色选择器",description:"当前颜色 {color},按 Enter 键选择新颜色",alphaLabel:"选择透明度的值",alphaDescription:"透明度 {alpha}, 当前颜色 {color}",hueLabel:"选择色相值",hueDescription:"色相 {hue}, 当前颜色 {color}",svLabel:"选择饱和度与明度的值",svDescription:"饱和度 {saturation}, 明度 {brightness}, 当前颜色 {color}",predefineDescription:"选择 {value} 作为颜色"},datepicker:{now:"此刻",today:"今天",cancel:"取消",clear:"清空",confirm:"确定",dateTablePrompt:"使用方向键与 Enter 键可选择日期",monthTablePrompt:"使用方向键与 Enter 键可选择月份",yearTablePrompt:"使用方向键与 Enter 键可选择年份",selectedDate:"已选日期",selectDate:"选择日期",selectTime:"选择时间",startDate:"开始日期",startTime:"开始时间",endDate:"结束日期",endTime:"结束时间",prevYear:"前一年",nextYear:"后一年",prevMonth:"上个月",nextMonth:"下个月",year:"年",month1:"1 月",month2:"2 月",month3:"3 月",month4:"4 月",month5:"5 月",month6:"6 月",month7:"7 月",month8:"8 月",month9:"9 月",month10:"10 月",month11:"11 月",month12:"12 月",weeks:{sun:"日",mon:"一",tue:"二",wed:"三",thu:"四",fri:"五",sat:"六"},weeksFull:{sun:"星期日",mon:"星期一",tue:"星期二",wed:"星期三",thu:"星期四",fri:"星期五",sat:"星期六"},months:{jan:"一月",feb:"二月",mar:"三月",apr:"四月",may:"五月",jun:"六月",jul:"七月",aug:"八月",sep:"九月",oct:"十月",nov:"十一月",dec:"十二月"}},inputNumber:{decrease:"减少数值",increase:"增加数值"},select:{loading:"加载中",noMatch:"无匹配数据",noData:"无数据",placeholder:"请选择"},mention:{loading:"加载中"},dropdown:{toggleDropdown:"切换下拉选项"},cascader:{noMatch:"无匹配数据",loading:"加载中",placeholder:"请选择",noData:"暂无数据"},pagination:{goto:"前往",pagesize:"条/页",total:"共 {total} 条",pageClassifier:"页",page:"页",prev:"上一页",next:"下一页",currentPage:"第 {pager} 页",prevPages:"向前 {pager} 页",nextPages:"向后 {pager} 页",deprecationWarning:"你使用了一些已被废弃的用法,请参考 el-pagination 的官方文档"},dialog:{close:"关闭此对话框"},drawer:{close:"关闭此对话框"},messagebox:{title:"提示",confirm:"确定",cancel:"取消",error:"输入的数据不合法!",close:"关闭此对话框"},upload:{deleteTip:"按 Delete 键可删除",delete:"删除",preview:"查看图片",continue:"继续上传"},slider:{defaultLabel:"滑块介于 {min} 至 {max}",defaultRangeStartLabel:"选择起始值",defaultRangeEndLabel:"选择结束值"},table:{emptyText:"暂无数据",confirmFilter:"筛选",resetFilter:"重置",clearFilter:"全部",sumText:"合计",selectAllLabel:"选择所有行",selectRowLabel:"选择当前行",expandRowLabel:"展开当前行",collapseRowLabel:"收起当前行",sortLabel:"按 {column} 排序",filterLabel:"按 {column} 过滤"},tag:{close:"关闭此标签"},tour:{next:"下一步",previous:"上一步",finish:"结束导览",close:"关闭此对话框"},tree:{emptyText:"暂无数据"},transfer:{noMatch:"无匹配数据",noData:"无数据",titles:["列表 1","列表 2"],filterPlaceholder:"请输入搜索内容",noCheckedFormat:"共 {total} 项",hasCheckedFormat:"已选 {checked}/{total} 项"},image:{error:"加载失败"},pageHeader:{title:"返回"},popconfirm:{confirmButtonText:"确定",cancelButtonText:"取消"},carousel:{leftArrow:"上一张幻灯片",rightArrow:"下一张幻灯片",indicator:"幻灯片切换至索引 {index}"}}},a={exports:{}},d=a.exports,i;function p(){return i||(i=1,(function(s,u){(function(n,r){s.exports=r(m())})(d,(function(n){function r(e){return e&&typeof e=="object"&&"default"in e?e:{default:e}}var c=r(n),l={name:"zh-cn",weekdays:"星期日_星期一_星期二_星期三_星期四_星期五_星期六".split("_"),weekdaysShort:"周日_周一_周二_周三_周四_周五_周六".split("_"),weekdaysMin:"日_一_二_三_四_五_六".split("_"),months:"一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月".split("_"),monthsShort:"1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月".split("_"),ordinal:function(e,o){return o==="W"?e+"周":e+"日"},weekStart:1,yearStart:4,formats:{LT:"HH:mm",LTS:"HH:mm:ss",L:"YYYY/MM/DD",LL:"YYYY年M月D日",LLL:"YYYY年M月D日Ah点mm分",LLLL:"YYYY年M月D日ddddAh点mm分",l:"YYYY/M/D",ll:"YYYY年M月D日",lll:"YYYY年M月D日 HH:mm",llll:"YYYY年M月D日dddd HH:mm"},relativeTime:{future:"%s内",past:"%s前",s:"几秒",m:"1 分钟",mm:"%d 分钟",h:"1 小时",hh:"%d 小时",d:"1 天",dd:"%d 天",M:"1 个月",MM:"%d 个月",y:"1 年",yy:"%d 年"},meridiem:function(e,o){var t=100*e+o;return t<600?"凌晨":t<900?"早上":t<1100?"上午":t<1300?"中午":t<1800?"下午":"晚上"}};return c.default.locale(l,null,!0),l}))})(a)),a.exports}p();export{_ as z}; diff --git a/new_web_source/shop-match.html b/new_web_source/shop-match.html index 9790905..4d6df59 100644 --- a/new_web_source/shop-match.html +++ b/new_web_source/shop-match.html @@ -10,7 +10,7 @@ - + diff --git a/ts.py b/ts.py new file mode 100644 index 0000000..261d6a9 --- /dev/null +++ b/ts.py @@ -0,0 +1,321 @@ +import json +import os +import sys +import threading +import time +from pathlib import Path +from types import SimpleNamespace + +import requests + + +ROOT_DIR = Path(__file__).resolve().parent +APP_DIR = ROOT_DIR / "app" +sys.path.insert(0, str(APP_DIR)) + +from amazon.main import TaskMonitor # noqa: E402 +from amazon.patrol_delete import InventoryManage, PatrolDeleteTask # noqa: E402 +from config import ( # noqa: E402 + DELETE_BRAND_API_BASE, + JAVA_API_BASE, + JSON_TASK_QUEUE, + ZN_COMPANY, + ZN_PASSWORD, + ZN_USERNAME, + runing_task, +) +from main import WindowAPI # noqa: E402 + + +SHOP_NAME = "郭亚芳" +USER_ID = 1 +COUNTRIES = [item.strip() for item in os.environ.get("PATROL_COUNTRIES", "德国,西班牙,意大利").split(",") if item.strip()] +TS_MODE = os.environ.get("TS_MODE", "full").strip().lower() + + +class EventSlot: + def __iadd__(self, handler): + return self + + +class DummyWindow: + def __init__(self): + self.events = SimpleNamespace(maximized=EventSlot(), restored=EventSlot()) + + +def log(message, payload=None): + print(f"[ts] {message}", flush=True) + if payload is not None: + print(json.dumps(payload, ensure_ascii=False, indent=2), flush=True) + + +def unwrap(response): + log(f"HTTP {response.request.method} {response.url} -> {response.status_code}") + response.raise_for_status() + data = response.json() + if not data.get("success"): + raise RuntimeError(data.get("message") or data.get("error") or response.text) + return data.get("data") + + +def get_match_item(): + data = unwrap( + requests.post( + f"{JAVA_API_BASE}/api/patrol-delete/match-shops", + json={"user_id": USER_ID, "shop_names": [SHOP_NAME]}, + timeout=40, + ) + ) + items = data.get("items") or [] + if not items: + raise RuntimeError("match-shops did not return any items") + + item = items[0] + log("match result", item) + if not item.get("matched"): + raise RuntimeError(f"shop is not matched: {item}") + return item + + +def create_java_task(match_item): + country_sections = [ + { + "country": country, + "rows": [ + { + "status": "全部", + "quantity": "", + "deleteQuantity": "", + "processStatus": "", + } + ], + } + for country in COUNTRIES + ] + cart_ratios = [{"country": country, "ratio": ""} for country in COUNTRIES] + task_item = { + "shopName": match_item.get("shopName") or SHOP_NAME, + "matched": bool(match_item.get("matched")), + "shopId": match_item.get("shopId"), + "platform": match_item.get("platform"), + "companyName": match_item.get("companyName"), + "matchStatus": match_item.get("matchStatus"), + "matchMessage": match_item.get("matchMessage"), + "countrySections": country_sections, + "cartRatios": cart_ratios, + } + data = unwrap( + requests.post( + f"{JAVA_API_BASE}/api/patrol-delete/tasks", + json={"user_id": USER_ID, "items": [task_item]}, + timeout=40, + ) + ) + log("created task", data) + return data + + +def build_queue_payload(created_task): + task_id = created_task["taskId"] + created_item = (created_task.get("items") or [])[0] + sections = created_item.get("countrySections") or [] + ratios = created_item.get("cartRatios") or [] + payload = { + "type": "patrol-delete-run", + "ts": int(time.time() * 1000), + "data": { + "taskId": task_id, + "user_id": USER_ID, + "source": "ts-real-patrol-delete", + "items": [ + { + "shopName": created_item.get("shopName") or SHOP_NAME, + "shopId": created_item.get("shopId"), + "platform": created_item.get("platform"), + "companyName": created_item.get("companyName"), + "matched": created_item.get("matched"), + "matchStatus": created_item.get("matchStatus"), + "matchMessage": created_item.get("matchMessage"), + } + ], + "template_rows": [ + { + "shopName": created_item.get("shopName") or SHOP_NAME, + "countries": [ + { + "country": section.get("country"), + "status": (section.get("rows") or [{}])[0].get("status", ""), + "quantity": (section.get("rows") or [{}])[0].get("quantity", ""), + "deleteQuantity": (section.get("rows") or [{}])[0].get("deleteQuantity", ""), + "processStatus": (section.get("rows") or [{}])[0].get("processStatus", ""), + } + for section in sections + ], + "cartRatios": ratios, + } + ], + "country_sections": sections, + "cart_ratios": ratios, + }, + } + log("queue payload", payload) + return payload + + +def make_monitor_without_startup_kill(): + monitor = object.__new__(TaskMonitor) + monitor.running = True + monitor.user_info = { + "company": ZN_COMPANY, + "username": ZN_USERNAME, + "password": ZN_PASSWORD, + } + monitor.chunk_index = 1 + monitor.max_workers = 1 + monitor.executor = None + return monitor + + +def poll_java_task(task_id): + for _ in range(60): + try: + data = unwrap( + requests.post( + f"{JAVA_API_BASE}/api/patrol-delete/tasks/progress/batch", + json={"taskIds": [task_id]}, + timeout=40, + ) + ) + log("java progress", data) + items = data.get("items") or [] + if items and items[0].get("taskStatus") in {"SUCCESS", "FAILED", "COMPLETED"}: + return items[0] + except Exception as exc: + log(f"java progress poll failed: {exc}") + time.sleep(5) + return None + + +def drain_queue(): + while True: + try: + JSON_TASK_QUEUE.get_nowait() + except Exception: + return + + +def make_user_info(company_name=None): + return { + "company": company_name or ZN_COMPANY, + "username": ZN_USERNAME, + "password": ZN_PASSWORD, + } + + +def complete_draft_payload_rows(tags): + rows = [] + for item in tags: + rows.append( + { + "status": "补全草稿", + "tag": item.get("tag", ""), + "type": "completeDraft", + "quantity": str(item.get("quantity") if item.get("quantity") is not None else ""), + "deleteQuantity": str(item.get("quantity") if item.get("quantity") is not None else ""), + "processStatus": "已完成", + "raw_text": item.get("raw_text", ""), + } + ) + return rows + + +def run_complete_draft_real_browser(): + log("starting real complete-draft read test") + log("scope", {"shop": SHOP_NAME, "countries": COUNTRIES, "user_id": USER_ID}) + match_item = get_match_item() + driver = InventoryManage(make_user_info(match_item.get("companyName"))) + try: + browser = driver.open_shop(match_item.get("shopName") or SHOP_NAME) + if not browser or browser == "店铺不存在": + raise RuntimeError(f"open shop failed: {browser}") + if driver.need_login(): + raise RuntimeError("shop requires login; complete-draft read test cannot continue safely") + + normalized_sections = [] + for country in COUNTRIES: + log(f"switching country for complete-draft read: {country}") + if not driver.switch_to_country(country): + raise RuntimeError(f"switch country failed: {country}") + tags = driver.get_complete_draft_quick_view_tags(match_item.get("shopName") or SHOP_NAME, country) + payload_rows = complete_draft_payload_rows(tags) + normalized = PatrolDeleteTask._normalize_country_sections_for_result( + [{"country": country, "rows": payload_rows}] + )[0] + normalized_sections.append(normalized) + log( + "complete draft country result", + { + "country": country, + "rawTags": tags, + "payloadRowsBeforeNormalize": payload_rows, + "normalizedForSubmit": normalized, + }, + ) + + log("complete draft normalized sections", normalized_sections) + finally: + try: + driver.close_store() + except Exception as exc: + log(f"close store failed: {exc}") + + +def main(): + if TS_MODE == "complete-draft": + run_complete_draft_real_browser() + return + + log("starting real patrol-delete automation") + log("scope", {"shop": SHOP_NAME, "countries": COUNTRIES, "user_id": USER_ID}) + log("java api base", {"JAVA_API_BASE": JAVA_API_BASE, "DELETE_BRAND_API_BASE": DELETE_BRAND_API_BASE}) + log("ziniao env", {"company": bool(ZN_COMPANY), "username": bool(ZN_USERNAME), "password": bool(ZN_PASSWORD)}) + + drain_queue() + match_item = get_match_item() + created_task = create_java_task(match_item) + task_id = created_task["taskId"] + payload = build_queue_payload(created_task) + + monitor = make_monitor_without_startup_kill() + monitor_thread = threading.Thread(target=monitor.start, daemon=True) + monitor_thread.start() + time.sleep(0.5) + + enqueue_result = WindowAPI(DummyWindow()).enqueue_json(payload) + log("enqueue result", enqueue_result) + if not enqueue_result.get("success"): + raise RuntimeError(f"enqueue failed: {enqueue_result}") + + deadline = time.time() + 60 * 45 + last_status = None + while time.time() < deadline: + state = runing_task.get(task_id) + if state and state != last_status: + log("python task state", state) + last_status = dict(state) + if state and state.get("status") in {"completed", "failed", "stopped"}: + break + time.sleep(5) + + monitor.running = False + JSON_TASK_QUEUE.put({"type": "__stop__"}) + monitor_thread.join(timeout=10) + + log("python final state", runing_task.get(task_id)) + final_java = poll_java_task(task_id) + log("java final", final_java) + log("finished", {"taskId": task_id}) + + +if __name__ == "__main__": + main() From d7d1021ec338d17c05d96d330029e5c2a012e786 Mon Sep 17 00:00:00 2001 From: koko Date: Tue, 28 Apr 2026 22:14:41 +0800 Subject: [PATCH 13/18] fix: brand html --- app/.env | 4 ++-- app/amazon/__pycache__/base.cpython-39.pyc | Bin 24711 -> 24711 bytes app/amazon/__pycache__/main.cpython-39.pyc | Bin 17784 -> 17899 bytes .../__pycache__/patrol_delete.cpython-39.pyc | Bin 61838 -> 61838 bytes .../__pycache__/main.cpython-39.pyc | Bin 4773 -> 7044 bytes 5 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/.env b/app/.env index 152d342..55dd269 100644 --- a/app/.env +++ b/app/.env @@ -11,8 +11,8 @@ zn_username=%E8%87%AA%E5%8A%A8%E5%8C%96_Robot client_name=ShuFuAI -java_api_base=http://47.111.163.154:18080 +# java_api_base=http://47.111.163.154:18080 # java_api_base=http://127.0.0.1:18080 -# java_api_base=http://8.136.19.173:18080 +java_api_base=http://8.136.19.173:18080 diff --git a/app/amazon/__pycache__/base.cpython-39.pyc b/app/amazon/__pycache__/base.cpython-39.pyc index 8d636e65296275f8e07c8022c56fed2cc90034cc..daba8fa776b9829f6eb8ce7a2d80a1640272d4fa 100644 GIT binary patch delta 2523 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 hSHSncPr$FhWgrII%s>i;c3_kV+%JSop A{|0epf~o)j diff --git a/app/amazon/__pycache__/main.cpython-39.pyc b/app/amazon/__pycache__/main.cpython-39.pyc index 53c5f6f490bb1beeec830719f6cdf31b5b585044..a9376f756c0be52d9cbe694466c4a3057b48afe8 100644 GIT binary patch delta 3493 zcma)9eN0=|6@T~He%ROsOfV19E*R%tuu zJ_dwQX;}XG+;h)8_nzN5_k*t{$rqPNUd->$72t2x2meT1I5U;EmV7guhiNJ0mhK$1bNkLhhdgsK*{h zQXi~m?@3$9H2bTxxn0S zAY%kIPQmnEBWF8^FeVXUw9WKor3nHvHz=jHe2TZY-_^F}ws2Qe%50y91ZB;b^nwJw z`ERq(3|tZ)PtwRVOO5QiP$P{H3}KZH_#g=?XI9rkM*xbvm9*S^WN8K#3gRIpdw z6Qr80^6aVg0g-d>&&+*zbMEEoM{nGFoDYi6KD_nl{)0#7CLdkA_~`ZpSz>8VUtS>1 z^R`j36ZgKSfwW*UWD;>Ix~9saB{nr%5k`Fq4zhzFpQ$r2ogdK zLWup-nuNvFbpYY%NoX(Vk}QmOIe=|R5zQPnlfP!4TX9|?W3H@g+LI-Aw(Q<4nIKR;uDcG@4hUK|luGW| zd-H{YIpbdD?IhDX?PH#TpH)h9GcIlm!d8TDA#6ivL--#1bwQX^G7^X!w4?UZ0Cp52 ztU@S42qF|CaI&96sS@G)2z>}YKsX2>=g>uN2H1l@U3evi_JZkI_!{c~1W6P{vhaa? z%sLCd6n$OL)lWl!bR!dk2V3@lD2sF_{6w6_kp4fr*wa3!YU-IZ?RXnUb+b#s&qz7b ziYrJHyINdDjxghCIoxsr<2E0KWoO|kM)Lpq7h^w}Gw8JDD> ztg^s5rKAhQe%KPec!p9{Gow7_jqH_mr-J2Zb^_qB3n29QgBh8Yv66~j&vt0{08Kks zqT+4R$O56Dmq(22qH9@8=$GU;`#O{$gX~1*z_=YG_6;M52zIn6;kj+OXiOVa?WE(T zj(GI6s`2Gm4l{O~?nY&KW5=4jZ~gOL2%R zspq1JO)2ZCs_R?eG~$gXbwiCpil{0V+XUN8p+kxeJybO^NfUWC(4P-ahM0CXs>M<& zeV%<#C5L&bj-j<1tkb$?s1XNT19UBp@bfiBjZ7T(xV@dLSg<-&v}{vrVErrBTm5O- zd64MK2s*+90$*3vYV@3VQ_L@Sk}kGS zj!8U6qwGC-GSmrHR-U0}Xk6_{Bvl?w1czeP($nl{Lp@aV#fFU?gP@QD^OcI7BM3Z` zKSC)BVC7Kt1jIf>&!Or?gn7olZ0H~<*3!6oPc3S{IW+9$fgM8W#{iK$<8;D|4=r$a z0ecRx>y3?a8br$zGZI=fVX7&56}y%Z`V#2&v(Fo^%Y4=wXu@Y$WR;=rCkU@0RL#z8 zcQ@n#6N|b_2$Kk10I-wjRraq<3Tb7>!p)?IO@%j*W9;Mbb~4JI zg!h%iz$)Vduf*^M_c9fQBdE9D;|C*9ugog&~e{GUqSs9_Mo+qMA#o& zD~Z9Lv>x2f_ts)E!f1sVq1O=3AuP!TG%d+cV>CWQN7&`fHPOYS{6F-dJ6vGIL-o_q zgr=xx_*!|osGT0{mW+{1G-=RdEN{!^<#m1?EZ$-RTYeW@h|jL``4aEk8Wnf*aIs41 z6$D5 zJ_J@=7+Nl?7tR@9(G2#kbOuie4nf$&X4_6myzFLX8@6|fuvv$9RC<^0(;GW#O6-%> zNyovPl{2KmNkHK{yuPyXrNh7CYbkJD7L9uRcvX8r7s|le~o}cw7J-v}FCtjjIWv6#m zkp^~aXLwvjBYr{hG2g`|&@50V0=|wYJ^=Xp!Ez)tlWN$^N5E5oVhvKf*XR_&Gy>m6 z_fcA$o=f$pTMbYIU!zG7@&z|>ita#RuDh++Us}oz@2VuL+1ReX&)1rpn^Rnu71*nu zJ+8;7(yN(p?Pt=a9VnlPSKh*fBoiwqrE3YekCvx{^t%@E-;8!g{~6Hb{Jq0!QAs@ZV3FJI_u21C%{5^Z)<= delta 3413 zcma)8eQZV+cF8Iw}Mz)Ji3*$>yenM>7iJXE<`1VDzuoQiOwqa2WbVl!kpH|rc0K7@iggMmKM6r zrwM(z?>*hpEh#yQLvap^{id{ORKm?&6Z_3+v*LygolFa(f-;NsTdS;}aygIv#9DKB zcG^55D042Gl>BQV5q1juo0I~j@Tia`ZNdQQC#W$Cy5lrC)Ix-Qi3oj7x-%^e5Lmfd z@fh*}KH_nU49$peSyYORnBNwZx&6{x62#`udZ8Yo?iA9(ZrIekYlMKwN2BIpBQ(yJs69WvtP@p}-9^K74R-{PqXqM~21+2ggT_ z$rg6QzGY0zsU%B~YMBJgN+PbxVn(d1&yY8#XCbF08qxG{B9`>O&UQI|Td)+fRE8iS zlp~a~7H5)FvJaj9rPH!#f!tDk33zE600c4L-vW@W zbn>XLot<5^WTx|O1kZ!;(@FpYNff72ITo1xrRem7p`Dfj(pt8wV8@bmAj%?bg-5`w zbtV3%*X%8wYFzD2QvXeywTAt*;Gqu}$k@=mJrq-)J7M_f(vKfs{ZaP8yW{KueTh9R zEF-&_)l*T3C#8FFf>qNK$)u{tga+7ZPgi~bwHB4q1eM(sw*uMy#4}&2Lvb>C)u!1VPglzu<9YLCm2!aPS#vhT09du$m%Jk6=_legT=<47NsoGK9s|(bAjUF z)IiZY!zoJDxE|ze)Uv-XI8cD+r3%1v3xN002iIg;%wnY*?JHrt4hU>!zbJj*hnH7s zl8y0m7oOa?LpcMuPdbkcdVfv!vTeQyQQ617oi)ax(bk0^A{eJfDF+~9p`m!EO1;cq zR!r8iU1cTJ^=K?aqghvb^^Cb&OT?)M6afp|jgh!fKbzU5vZ^gFcndhf(S)W3Aq`ZO z3k?ztHZWci#m%Dws1+A|8?zhYO*KcD+H20VrkL-;NN-`6_H90xID$H>8muEyv|G)>FG5zuX6EwyK5zUn!2 z;VVq0;tcA}A}|Es*uQF@TO=NA75j2&9nS|%9|KC+*6H125TO*WaJrRarOqNfn1X9#o|NmD~K+(jeo^TvuG zzkC00dN3w#Fkq*NgTY8#QG5AbdAg{P9yCi@PbwJI=pLplZ=Bv7r@`X}`*8VZ1uxEL zG{;0=oL>5Lmg&uR6-ON#I4Dq3f{oZk^lg0Ps`oA*n+?5>U-X>Jt> zWuLC{Ii_~-(^VB7(t^BOq>&e}L$LDUX?$~G)S(BH(3tqC5I?$PSGxCA=-2N1Ni)tBjGNI{| z-@j?F1RU@Yqo=fBI03tup^{{qL6&hWjAcsI(CCy}_#Q4b6Di1gC;NHpZW3cfFaL2N zuR@HIk$Mh>Xs0&4m9fIlvHaEND@rjY&twHkUv2q}8Q;UB>^G~+h|Hd?Za7?xPW&Cq z=e&YLNQgkq2>2OAHzI5U$e1E=oknr!MmU0i)k-Z0?;!Ac;r;eL4kwrAQWffo0Or6? zs}lsbU?XPHmNz@cwz4p{$iwcf@sT3-*_wa4jHpF diff --git a/app/amazon/__pycache__/patrol_delete.cpython-39.pyc b/app/amazon/__pycache__/patrol_delete.cpython-39.pyc index 0aad1c82102e397699c10ba494c226a9035469c6..e920af753efecd56d3c737b52f6b18c40259eb79 100644 GIT binary patch delta 11354 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
-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 O1OT{$Epg_`&i@CnrH~f@ delta 11335 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 M2i{zXI(nJ@9}+YG1poj5 delta 1831 zcma)6O-~y~81}5!_U>XEV;gLP2_Xq2n-5UhG>Hg7P1;hTwzN{zsG1x$YtLYo?CiR; zOCTKLLn8IWA=(~#Yf`CFIV1Hqw0~j$LRG0!ua(mG9aDjn9E!x_cb@lS-mlpgH-4Tg zyQPwqfj{flzr5eaUzXeC!OKh21Cn8c>3&Y+XLDr&SQ>a?zS%^#=Z5WC<{hz4zlCT)rqZIKMmGJ{V( z*XR_VdNpV>^EF`>8+nm=PUtjHZB~3uxXDVaj2y716g#Te3L86OXB1miY>m~A*wcy~ zhnN$rp<>P|rU^`oO)BP$Vy1v;f5@g4b(T+Uwb>~)(x>N^cQ?a;r@5{lMqK95tp$+koiOxe4bS!DwK;orm;|1ulzuZ5 zd={jr3XsWaBu^|-CG*4}3z(Cg{B3?@tANL@N>cvXPG=FlHRUZYCXUriXstBBa4{@g zOkQbBgZ^jtv5ETnp4E|Vz!o-R;j7YYGW^L7)5eNa?nnK?_y?f*@7_xw z?==>q*p0pJ;&R_jTBFa%LGr`soxy=7Pl4L|o_!ofqct#i`{rd}_huFYzT@ohjuVC3GO?@Q z(JR2y@=3bO{(56+16i4$Ji=jWiDLP5eme$Ki|~54dz= zzMuTlSZ!gu_QqmZyw8#SZcw(VHw--?7u+WIzXCz%%7&YCoX)2sO9xw zWjR`;gv)PG50RsO7{Fes^dF$38hEZR!`-JW`K`sTZvku1rv=AhVb^igywco;??#U$ zwn?o`YPtQs(+!0P1E~X>bSFO@U@OynHw-qs-qDu@9kA%sa2$LEj*}LI>jh4ypXOw^ z9dp@68yn#w0zO!I3judb;^M2hNKEXV12vXK$hLj{@d~`-Otb``XAM%(E?9NaB!*Vk aEI3 Date: Tue, 28 Apr 2026 22:33:27 +0800 Subject: [PATCH 14/18] Stop tracking remaining Python bytecode on master Master still tracked a small set of generated __pycache__ artifacts after merging dev/koko. The ignore rules already match dev/koko, so this commit only removes the remaining bytecode files from the Git index while leaving local files on disk. Constraint: dev/koko .gitignore already contains recursive __pycache__ ignore coverage Rejected: Delete local cache directories | repository tracking cleanup only requires --cached removal Confidence: high Scope-risk: narrow Tested: git ls-files shows no remaining paths containing __pycache__/ Not-tested: Application runtime; generated bytecode tracking only --- __pycache__/ts.cpython-39.pyc | Bin 8873 -> 0 bytes app/amazon/__pycache__/approve.cpython-39.pyc | Bin 32689 -> 0 bytes .../__pycache__/asin_status.cpython-39.pyc | Bin 18494 -> 0 bytes app/amazon/__pycache__/base.cpython-39.pyc | Bin 24711 -> 0 bytes .../__pycache__/del_brand.cpython-39.pyc | Bin 18506 -> 0 bytes .../__pycache__/detail_spider.cpython-39.pyc | Bin 12895 -> 0 bytes app/amazon/__pycache__/main.cpython-39.pyc | Bin 17899 -> 0 bytes .../__pycache__/match_action.cpython-39.pyc | Bin 19273 -> 0 bytes .../__pycache__/patrol_delete.cpython-314.pyc | Bin 139850 -> 0 bytes .../__pycache__/patrol_delete.cpython-39.pyc | Bin 61838 -> 0 bytes .../__pycache__/price_match.cpython-39.pyc | Bin 34586 -> 0 bytes app/amazon/__pycache__/tool.cpython-39.pyc | Bin 5415 -> 0 bytes .../__pycache__/__init__.cpython-39.pyc | Bin 141 -> 0 bytes .../__pycache__/admin.cpython-39.pyc | Bin 11768 -> 0 bytes app/blueprints/__pycache__/auth.cpython-39.pyc | Bin 3317 -> 0 bytes .../__pycache__/brand.cpython-39.pyc | Bin 20957 -> 0 bytes .../__pycache__/communication.cpython-39.pyc | Bin 2432 -> 0 bytes .../__pycache__/image.cpython-39.pyc | Bin 12194 -> 0 bytes app/blueprints/__pycache__/main.cpython-39.pyc | Bin 7044 -> 0 bytes .../__pycache__/main.cpython-39.pyc | Bin 13429 -> 0 bytes .../__pycache__/web_dec.cpython-39.pyc | Bin 4723 -> 0 bytes .../conftest.cpython-39-pytest-8.4.2.pyc | Bin 136 -> 0 bytes ...est_amazon_base.cpython-39-pytest-8.4.2.pyc | Bin 25106 -> 0 bytes ...t_patrol_delete.cpython-39-pytest-8.4.2.pyc | Bin 44141 -> 0 bytes .../test_patrol_delete.cpython-39.pyc | Bin 29305 -> 0 bytes app/tool/__pycache__/devices.cpython-39.pyc | Bin 7285 -> 0 bytes 26 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 __pycache__/ts.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/approve.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/asin_status.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/base.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/del_brand.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/detail_spider.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/main.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/match_action.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/patrol_delete.cpython-314.pyc delete mode 100644 app/amazon/__pycache__/patrol_delete.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/price_match.cpython-39.pyc delete mode 100644 app/amazon/__pycache__/tool.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/__init__.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/admin.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/auth.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/brand.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/communication.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/image.cpython-39.pyc delete mode 100644 app/blueprints/__pycache__/main.cpython-39.pyc delete mode 100644 app/brand_spider/__pycache__/main.cpython-39.pyc delete mode 100644 app/brand_spider/__pycache__/web_dec.cpython-39.pyc delete mode 100644 app/tests/__pycache__/conftest.cpython-39-pytest-8.4.2.pyc delete mode 100644 app/tests/__pycache__/test_amazon_base.cpython-39-pytest-8.4.2.pyc delete mode 100644 app/tests/__pycache__/test_patrol_delete.cpython-39-pytest-8.4.2.pyc delete mode 100644 app/tests/__pycache__/test_patrol_delete.cpython-39.pyc delete mode 100644 app/tool/__pycache__/devices.cpython-39.pyc diff --git a/__pycache__/ts.cpython-39.pyc b/__pycache__/ts.cpython-39.pyc deleted file mode 100644 index 85a8c25b80ed3f91a0c59feff351ad6b271b5ac9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8873 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 ZD#BP@+_lUR43A zesZwE25e)Kc#pxBygLcr;|08QXZrMXXJ-0z_w@Ai)a3M;b3$pECF#>M?$bl}bmsg1 zd+Vu63$fEJ9X-8w-`($j|NXx&QCAmo;pfnsf1BFkcDsJThsvK?JZ!*U_C>eLWx7mv z+7(m(-7&X38!-d_jkKrN8}qu=J73I)G*8;!8;AvZgR!8bd($<&HL)7G_oYLA=cn_6~a<;W32IZSEkkLN;VBX;CAuXbjKR+aAl0OuCKVvfEhgO zGK0z5L!MYOo@>kyo*qmgGS-aOb;kJg&uvur;n++#DvAJertkrCa%}a*O=0g~5 zvN<{TkUQ3vY#W}RY#njO7T|7Savts$;qIalwm2uYIJv}ZIpp5t+VSmJq=4K#OOuPu zxyRkH_S=!;gnJ-{eqN1!E<52K-0pV8mSYTylPi+TrIogxi-%XTuG?LAa0JWmT%HN3 z|7%@qS>Bagm25wR`P}PepOY)hR#kF1I^sgRi|;aGm&7hb`n=>N&$!ICh2p8quD)UuZuiGC zeYw=GRCgkm>dSPq^~xVF9yZ`F`&C?$EOXhpmC~d4OuX>$ z#M7^pULP4f_F*^R*7;#yJovj2f7uK!wyVcA>^9va?jg7B?lF3#SI04zwtLuXdPjKm z;jLjCRd0CB_0(@#x|{AA+P^G?>wesS=gvD3#&pWGK&vnG?+m)b3}-LWgN zug^;5lG%=(3G2=c-RVR&yS{zTplM-2&GsFU(vdS`55MWuQ@H#kCz~84yxq zB~saBJZV{lYs*!nGP$IcNu=2ew%?IXW%g$8+yG!obd+DNZ=dXL`;N)>6FOgiVt2A5 zWv*{e7R>(cj@|hbitbBha(&idM{i#y+rDGMhgm}(0))`Me6Da+xd&!y-<=y+IGapZ z-Ft56J8)xPCYMNMl2-eUHEZ@Ja;U67pX=Cd_2v7wL<2=nF0r%dNv4xU@BTz8SFABp z+5U85FliQztX1@Nr&HZ~iy^bGJD%=Km`OA0Eqb%b^sZuPava4VdmZ1I%M|NW%W*5Y z8_@rn%en}CJ>RjZ>#kIHpP9U?+e++DC#{bDbbfa#b629j|E@%D0&vS)!fj{&U@^39 ze=66#=QdQ@isIQ8TwK1eyWSmg8^87%_3p5NUw5Ic3gkN{ixnHyHb|tmCI|8H{7nA zZ`f}Fv^AIq%o>2X*Y+Y;5P3qf8TeFFev%TkQo=hN5_B52-9TV7`@@)l{I9irGZT!@qexu@dtz*IWq$qed^e5-9t&Ao)*hJsKeVtsHZ-ZOi#9EB8US zg8b|%g#}ixyp`~4VGo)4bTY2M*;*OhVKo2}tVUjl94CkoH@{|BO-!lBWek7#`EOq? z?7UC|?ceH4=d-t_vN@2IZMj4)pWS5j^>6CipK%)9m$Y)A4C%>j8P)sJL{<}7tvWQd z`*QjD#g_{U%Pn&6_Vtsb+__<2BArjJZ$EFe@5s+b_R-TXluo`{dgJWqu}{WMKQnRg z*yyQ|b7$X+!E={+X?_7Sd~%;6HBQmd$KRYd@<>-C z&k8GBINw?xoggm3li9ub9nmI>)T`(PUdk3d>14(t3Md9lBmj>Wy~KP)UpAdg_FHrC z%Hk-Bfn+AJGo3UocC_g0w}5n!H+djeG^}JXuq%}@6X|r(!*rjO$m~u=Ll$SSSi38g z2KJ8U2K$pmKROXlXNy6iyg1qft;O=hxjseXK!2=BA*)0hcut|0SnIT;xHRnR?#rV! zcU&-`x-4dkeuXJl;y!yTE-ts%Xmp3&E$$FdTfHE=Ansb+Ol`&6Aku<{-(8PXKhlT} z8{J+aL)^1mBmVPEp`{uzs-~)FKcSq^At-PUZVFdSL4a;-JGVxF>uhYlsR$5UUZ)pm zaB!y^=o36%YYqqzTNU@h+adLC1H7I5CvRuEuu*Ha6wa5|olxDM$RyL6`hjxiNWYx) zj*Z=f`P-O>n+AlCl#K8)b%VFhxWU__J8VVyev5V{!E)DS9o>Ds{ot=Mx!KxZzaEXv z+%@$oi!NC0nCnSwBgkj7wG4@$EyP7JHKhlJ$3On~+y|#e-#c1*@hvbd6OTO|4alyr z2rQ47c&m zeoxrl21qK*uZE(EQdOWtN=lYQK&gNmllZ?METm9WfR1q-EF);F$2Rb0?T{Cs<;{5x z8P;0cn<35g4*8JV*Wcy;w2cU zc*=~{6azc0zWv#xRSZ%nKytPiN@Y`-Y%Y=MP8L1coK^Iz+zP$Q488 zp=7bBU*RNoDi#2`Vp^=md98qeb3Jugkq2xav+u;)ELkU)n@GcpYYWhVfxi$Jc3$-&u(?p?ws9j+Pj$UXR?!@(i%QMd3=5CzQOajuYu z!V5W}qwZnD1n&br$76#-FvD2qT+VCO3I9P}s-EjukM(J-4JG|d60P-E8szFLPuc4#=)fa32I&>tL?-hzs+)$h_!q&|JI;ycoE# z`i$3HGE{HZpKxbiM2!*K00+7Bs0-J2#RGyTYF4#lZk9pZ=iD^pymlCQmY*`vuLjh` zQOF(Ef}GVa?FRN?>dZMct|G0=A1Vd9UyQX(`<$xC&c>S?upnuC5rWue>sOFYe~ev)xC zj9|vfdF*DHUsq2f>L^2}r0MZ`%?`Us#^g0S?WW--bIpj%k=+ECZmuZRq)HTi7qEz4 z0OD>NYLVWqH7}F7o{Jtql_G6>tnHYub#{x{Hjis``6=O*1u`!qWC9vI13Trpjn8b)|wNZ!KXB|E zL+x#P9=wn#yk?ik3Ds+St=_%!@%}o2(eiGcdHknfE7#TBW_~ z^}H`csfAA7W_zK)L6iAq?65^n?Hf*c>_q}=i%xj0f6C3llY6*j#AR;W>tTw$$h<+_ zq0EgHJ@yV9m3PJopS1|PZ~%b+Rv|PeTjsg@CF` zSX`*)5OfX@fluU&cp%>rd@QS$}~|b&pZER_tV%>q(3w>dU~uZMVAy z4$JNf4Bo1D-)$K8*K_lR+kjI9s}0X5eZfenGjQl##h#df@=fm9fx}>mHI*4SjJmfF z%0NFBh*p4X@@-p+^<;6uaNcf_Q?RBnUDQTX`pNb~aLs}35>g7nECkXGv;;A|&~_C1 zI1>sC(wC2~$H0J`tL9>pCtej@M%zD)LKc&Wo8EP#47Bx1CKD$%uY|?dtrNm-NFG0>a zZSU;;#1c2k61xY#gC+I}JK!=wHo3fdp?r7y1{$$Y_)m6Vpb>Kn6bWX83)HeD{}oJr zN5v0h>vNyJUV8DkmYF{t8NKHXh}D%`ed+awMvtDTD5P#hE-2V#!AK+zt-h>=f?36% zNg3l#XrNbRpl(|gb)=tce<}ktpi&Pe_Lv<2DTrQBHtILfD^ebu6ip^t@Tf!+>#Mju zzv}aKZqF6lC#Y;I26V^IFaJCRi-BxXWW9o;#?c9m9+%yQlF-a|Lu%}UW^ynd*Lm7^ zSY2qdaM84htxSNlPw~iF$IA?Il&BG`OZfIuUarL@>Mz!a_oDzr(xh zc)5iaDmyJo_ttt`{sMp5>v3_3=~pYLaLf6QnV?`-dJr1y zDdN4z$&Oa;{7s*`;DvULDEAaNL%?ztzZmS^lS-SG)-fpvp#F%aA0>1hpk`aGcl9b4 zTU3VX4f+`hXDKhaf?UQnEM$wju<;8m;!O2U5YF^|B-};a)>iy0{6*FDh!U-=M&X7r zli9twKJ4|Xjnf_h6h+DglIa_(15#u<*#U{RW51$4?bM@GPVna`)RBQg2Zk5b+UM=t z4q2-_RTHBpe+Z>!>FArIkDNGn=Ec&BhhZ2hJ#?n@+;h-tmL7Ry{LshBHiVo?ZK4qD z=+P&}58kIvo+>@`gs5HeooGOz<}1fu`F`od!=?L=kN$XM z^tqSN=1dL#Kw;^XuYF0A=Kr#%M-E8 zMj}f0y*hE|)v54Mwm5z^$9XmpGt!P$1N5<08C&x!# zouGa@PYkFAH~P@AiSNIzX0vj3IJ5Vh96kNKn(o3nHQvrOYsyxtN&vHxi7dw43yUbp z35{OuJECqeKw>J#PCi(=|16fE^zd_~XNIeo7~&*q6)wl0=qqg3j(VCNkGl4`z6Jhj z0LFBXTK5(~t*;qHqjRmb8M&da3FsClv2L;Ey4}f4@<6|JeFuj6zmd;XxatdSJg0)F zCr^D`>F9eC2Zyl)<8Qn?cJ}`9dmbBm=j=J5>!J)AKmBs)dk>Vp|4`}mV^~7{h9$?} zeQx~S7tWnIGri>YJO_=X%~N%Tb>uC};P%`H$F=rJKpjgl{{B1TpB^b_>WfAA4Nxa0 zfz?XO1n3FC0Wi#H69wHK@pvZRyOXvH>MyZy z*PvAeL*t)3TDtG0(RW@g-49&(KIRbMr8S?Tzk~s3^sRfHx$W%i%#*Zyz8-7VYt5QH zSKLWk$ExW1_8IpB`b0o4op}VEC}XP`b2>OJ(s6yB>-G71A~Tz?Qi%=?#A-K=zj4p# zQxBIXS6*4f`M;?PV-LJHdhi}}!Md5bsZJ(!5irYNfv3vqJ20i#Y)%GMSWUHB1r3>N zQ4l~k>$pWNtxAlYeP!(IX>_2l@$*dpfd|B=d+*M^17%_)RzkQKZ2J6Fl=tR7&SfUI zz8xmC-h?%X1>A_rCvHH@W(aMO5zK~BxU#8Yy*##Oisv4keY8u~@g1d>ZOMo;qq`9OjW(Pzmw=I|K z&wf3bvr^q!pf5vadD^F9U~Xjea7Kn7Q=zEybb(VLC$W3X@KSM5B7_2!f{CPT7hR}~ zNkoj3ys;9NCdDBUo5&lBU?f|q=t*P-E$;53C)2mT7=)E$7p=3_H<^z#r07lLa+bB4 z&o}Vdhde25w~aEP28gUXxidjelU;pQZz2~@9_TIxtmH1>xjpnkfo&wZOc}L^;fu9< zk_k#dB9u|svdAsQ>NS@eSK?u;27Q8SmYF;d3up5?dtvsHCz0b~jhbJJ3%>@7ud*eR z&o26ODa~ZW$=1YbGs&bGN7EVDghSbWus$Y*gIJxe9QQOFhbAAbZ?SWn<5;ci(6|_c zV{@x100s=lfo##;BYp?5khCOtKNij&Ric>z9Qa8jX+X1t|j95R}Nl!{xB5;9tl)9aydwFtQ&C!)_Ec+ZhY8B(W0@F+pvzwECYj9HgXBtBg z>ESZtJ_K_sbXQ&zu0^&1v#RSv(7O3VpzsOIru6K?8`16gVHl!QkpW@gZ5UlPK)f7-1HaG1elz1?|@!g1eP=d6FlLntri1G@)~0lroU7RSaq{^OgI-F%O5S z%8=3fdg`EWY%}Lm(E&Z;VjJ#Jrt3b8T?~QaLt#4%6Bx{T7+)P~Txi!}WQ(-n$7Nn5 z&x_TwU1xj5-1k>Gm!vOI{e$ZLs2MSr!iTq=roW+jbJ=i%4I}AL1M2sf%k2h^1+v_+fCTu`EO zg_~q9)P1vg30i8#C@+OcPExn07-KID`kV5i)I#@@c~hDm9eYvGYwN6 z8m72T@Gq8Ld#q6y6W7j2Gb??{0wCT0sE6jeVJ6+4&I>%*t ze6HcSGKSX4@kpQi>=W8(?U^?;FV|+z%gsMT6Iw>n7Qk?}4z3LI@U#&3o#y3)flNJW zZ^H^-p=!^38?&L-_)5LTgvNUFD%D@?kS}3&=G*i2Omdbg_8V5_>Z!ATyR4EP{WaK| z)XKvo2=kJfDX-P(wAxjMEc4n~>Y0Q6f1RGag-*Hks1N2djO2P{NY24%#uRN&czLJ| zdA}@Ug%M4x4f5V@gF~R#I_cE3QN0Ch`3J)GLc6UDH8RVBOKc4bdQ3N%H_DjUBFu5J zZa%98HExpqylBcwO{)VicN1n6#xgalnN7Op%^C+RMqOV)?TZzB*f6N?hz!9Lrt;(M z%`zef+rhMV73;uWy9G7F^kvh?#ogqyz7NBd!jy9+F{Mh=tE$IW=+yoAs_w^9)U(v7 z=a1~AlOuC5o^S9UDlp#HE`;&0$12tm2HKsHa;sk5cC^;6Tk~7@IxF<`GGywV&_3CV z3+x2HbpWGj?Wx!a!`KPR+LMV1w)PMHjqW=zj=2TU{Egg2!;7IXMmz+cro-eNu&4|H zgA>PS+shQZj&iq6Er;5FM=<7AHI_n`%=G8qXBrDQvmO}CRLuIe3(dMS5EqghzTEO~!oo|_j8n@6PH^z3mxYmAK?=zw2 zq&70g!NEwO3y2``RPg}KUdxA6jnl$WCVq{dd_8)mT(+PL9vi*~ zeyB`}tci>sJc}f#YLGWL%A$KQDTynD^W0ptYV&3=kFPCVxBTI`t8D&OhcIi|g0=(;pSHF|?yA4XeN9C-?tRdeu&Es7Js;|Vco zPFm+C%SOGThE#)85TLZjYA!@Qp~Uy`=YKQ?J>BW&N1ys+?8P%sFRJX*%8$KrcH-$5 z6?|GTbgSsL3w{MUd8(frC`vdAyV3X0!fZ13(HTIzQ!`Z7qlfN;j-(TXB3g?zdq!s+ zuvX&5dVxywOHk!%wGGr-LPJ@486{Auz=G`Xj2zeJzuoY>PiCv z3`aF7Gu~%WYYy#K8WrYm_+qt6_=E!3Dh=W1adviDmss{4q2{c8$7fU)RQ4%<9}+4XO&}^OS3y}|HtvR& zj`oGs?WLFR9ewsBoT$%z_#k|rVKLE$p=aJ5ee6SwtaSA0@lT&VcjlQpHY}+a38wDpiqqYP&S@HzE z2+NCx7}1EMr#{87RP2lb&kGn)Nydhz%()<*FSO7aYkV$K$DJE!lz~C7Y`TDl4~kl&`Wm1c>;Bhza87vbcY5GbP#!KDns2%UA}L{$7` z*wwm8@(Lh0MQp-)F?KlhzjU9n+fpf{;?##8f*B*&;Pe z7382j0mSd1aEoeLvqn=8iehN0P`>PFXXj0l3heF6(2mB4GoW;FKXBkq^@sbU4yAzP z69}FFE#PJ)`cnH+G3J8Lbb^>N3UjBinM}x&Bac*OoH3hZ<(%l*sMz7Ey~3r=oG7`Y zA1Zg4#~c}_1JST$w-4GY5O<8Q+KicJpbo||_UeN$e~u%r`Sm9;Ce7x4N&$rE6Rhp0 zXCwIldy6Daf^cPvPQ4LRpnU2oz5%-lMg_}s-p z!c+Id*CrhcYjIKK4(0lC2*=}l<&Q@*EnEr_$Opp)Oi--ccc7m}o~!T*7Ms2_Oe3%t z!OsaDO2hgjLHyS5@pV|iIVwcpS*(R&ejK?Ia&Sm$+)();JHSbkMK6uqPtyXwTU%N zON9qpUuIXz>J<;R0S>IbvVYyVSRGB1GH+tYf|&@Q3zL$i1fWT=r(udr^Vcx-WYc2r z3Boqw6$^>i9rAi%*?_GBRv$y|8a;dt!vfQW=Ljq(jj+tn0z%7AGp#%bIHUcB79QGZ zB#;r7654BE8xkuK|A%=83r{2bDMJRsCF_yPD>fkJ4T`0R*LtIozeq8Dji5HfjI&kP zTiky1hV~nEU+-N2i;_xV;3Rx8VUIx>v?R6ZI?I7^OcifU^jJJJ4cMHJqDpWK5sZd? zVcWD@sowAzmMi=&M~`8xG7P+_=o`icTb1-ptYFCFmzHQpV{h4N$X&STf^sH~xv(Nw zW&ES(LbSFRjK}Gk7LON0@p!KeeJ+OM@qv6It>4tZ#J^XvSrpDJnw=}QKILh(w~zBq zAY$?&-mZ=#I&l%8!3Z{m)&^^XeU0CBeb-fE@jXpdRX?y=xi;W0`vET1Ct=_e4DnZ2 zn$?pyKPBlmmnQ?sfEhZ8FfucI7$Ib_pt&MhW7gwD44#DH!$}wyOP*%rnPavfr55k! z;(e<*@31!(HdmVS%>_7Hqb^yKtWP$ezJ({f5@6+xH71)-8fi#feA0)Ymk7!JnySWT?x0rR%Aw+RNh&s7oI}Q@b({`-FpTWhJ9vIQgwN|}B# zhstk}(tSpIdg+t*OV4~Pjx(e0JkDGCp^U%u>DVKu$BsR%yiyKBAM#4+=xdT~{K2=7 zE$WLIn{J93o3|E?o3_P_TeioHZ+@-l!%-D|mNw=V!)3EJ?dMfTBaj4z@OLBrvd`m^ zb6L;k5aeJzTeu54dxI{+BL@Csh2%dDM8L5D25meH_A_fwdU@K%um^#kHF)DS!?qWC zmpZYl)t~Yq1du@!4X_Cy+*9k0uYz9FH+T|SP1yPhixElOm`SUbtz><#~5I{;7Hy=)=B2fNp4g=68*s$KbvNbakmk>8v4 zmO0j}i6|ulo#VuZ5Q2{y{fzm+{YAus0R!B^<8LDCBRDf8-wSO*^lZ~K^DL=?+1y|{+1Z`V zZU<49I{LCHitt^LU8w^}^V$eJ!Mh^s*7hH`Hj+;6%5_DqT)P6PI13?5&zmlFOFr-0 zt2*#5dTnH7C~`%@;41BzU=R;Fk_Ix0eHS7ayFaBl|_u8rt3 zaxkgsB)XnRr*>yLpl|5KV7dY3N$c9k?gS?KGS;$k<`tW9P6232cdAfG>3*E0@!^a) z32439-P^!UUI5f6tjq>$x^ySC1UITcGlERM89uGE^jSd}gV8ePjSQPur7M|bi_O?` zXN;Ai=ZrZyMq!k1$o;m1EEn$-+tAJ1zkVyn_-~$^Wq?lhX*&thMwVdR4_QeTxDvLm zCIm~u{v=)h0WN)M016l@7{NN!PP-5=IPK!ZFrK)CPFCV*g;FN*S!8Htn3}#m<%)m1 z1v>gBgwe`#x47raKMsE1*=G)RRsw}|;|sPp19hGeCLr-{hkGG{hJG^@V^2vwq(701 zFV@ot*&Um73*zH0L`qm#&8LC|!I6SY2|<1RiSATxFtWDu^6V_I#0vORSxLDVYFPUl zip?_6>7cMWa{1b|v&=TzpP9}Ltp@6!vD{E}CW@&-a#|cdOH)G87I6yJp# zU|}4EK?hEpCDx6zFTetT7pF%uC`-I2tMm|zL=hbVjyBoB`zLULBO~Qr&2vHOB{_-r zCi-K+ox9;YiKkegCyP7K5VG495{U>S7ypD+=FHgcet!za#yE_OxPnoJ zfZ)kfY$_c+g%|}y9!(bxDp?5!;_UT^>v- z10Gy{NTMy3(^k$>^xm>%^Eb*;hA*AmmrPfkB|^h2MGTpC-0} z`*7rpGiK*z`pi1)y(%~ZdoSYvUoRDp;ZVh+KXU3*o)H|E^&MP_zMHmg{l-?|!Oy$z zEHv$i+*vVGcq$k>uwQ)QG;NtIm*j@e)%h4#G(qXb(QVz5P=c$dm5d zeIwU~Rk#AwOi=4kXsBqn6L|>9Jnb@0*Yqk#roxqir>x4~0;W$Gg*1+Q#OkD66z*&T z_jENx@Hp-~yP1j=!o64S;bMw=B?|g&Pj)+2%}tSzt9HArj_u9%NNT7m)t5aeskK$9 zEFHEz6dQR~kT|8);|^j!(i%<$C^njnW)lxu9SY#SIfruv06jP+bA(4%F%Y~_l~7MD z%wPU(fm)!}4%nXST)7|u#aj>IWTF%99c_2v1U#H0T}9zm zhQ75)-{zn4s9u{3R6cXzbuMSTH7JF%TQE~0DYIA{T$iZcU=$HMMCes6hj0p9D$j=5 z&N(ZrLz$3WgVR?$wts}KQ{_Irt=n4WbIpgl>X#5gcO4y3|6W{!jKO*c(Y2^y14dhu z4#ORlJzmb*%@w&i?F5T6T-XlZ(Oq@KrJhC1uHo4P1AlMIe{l@@d)>NWrKik@VQr}# zy|lGbW@ptYIhiT5*o;ojPR096)O)yJ*}CWdUH5!vRnIR~{S${z)n^afS^o-ooYi-F z_gCiX$+py3^>YX3=ng<4#|9OGGd95-oq4)(lnn*cw<~?jxev}N{{&~hJ2%r2iL<%7 zBC0fuN~6bLcS;n!+<80%D!ca<6Cnl^8H#lh5CCmBDO$ET$4X&~(triL99PHEsW>D? zUZ{F+*@UpRvDXmUrlSLkf!jB3-Ezy8uWXSx!qS;1Cmubcf1K-!P-RnTf@lj#h&8CUYN`-$Q=BuIV=__KL1lkc9V!7q8ls6& z5g5hru0#rl1?s2zEJR~D&JRcyM+n}*{+`9_R+ZBwm&`PP9vtD6ad0g@|)Zma>i8Rx|C`$?9 znheHFFRYU+{S%fZ8m}xB`HU(~Rrz{6-%27-v7A~>$z zemQ3`uik4T6pyXId+CU(K)0o0n`MeJ74K#Dd=`-(M5 zSc1d?B4n@_){85PuXsft%#|g!g*zpVSCJ55(szpIIO&^%D4Dm<^;#>@$yOK@B*)XDF1b!CAKw z_F=Sot6Y=hw#I4kXHoNtTM$q=g1I)W3^ zP8m3JjkK@MoW~Y(^}JJoC1^Kn!e!l@kMqjv(T8%_MFZM?x1#L@s_n{gBF9NJQn_=+ zYA!5OJ2=G~1Gi>crJhAoM~&09CdYOW_zPz~GC?^|2W3Gq>1y40!Wdi!irFZ%9
h82_)K$(FGpwidDl8MoSuQ~{{-I{}0w=D?%-Wt@3wSBRdMwvsd)DK0 zVxCY8$!NtEMb`+mr8iH(_jUBxqeO9n@*-jdiL63Mw(_494EY(sJ%aG;sJO8xmsz?b z-G{Rr4~{;3Z1g9OjK6XeGS&E}&%o#oOM21RcNPAwl+bS;N+SZ2^8S#P5WuT++)|s##3e9@|-EQ zL1z)tQK4F>SpRZ}z4an$R3~Y)<4ywdBf4TK&cWhPVsW01$Qi|i52Pyhy74zOnOz;7 ztGpA0Ceiv>;UPh3Sj?2g8rb49LU?e*Im106Ii)fx6t;%B=o1T{37mPMNE{~s?x>RM zT4oSxLMkP?4T}4BtZ{RLmwNx$Nn^O>Y}Ai1;$#-YERB2HTW z5#^pIy|Z!S0(GNF-s^6M0biS;Ve6~WkW-)p*fRgk~ z8SW(=_l-1zBe$PHoMQA2GSCwgFanc$*wcz9hI5jt7Uot`J!e^>Uh7ZLF-7D5E$>L^ ztLR`o5*#{s8|a{tWofuXFeK$#FIuuq>LS^h!66)nHUu*@q(CKOUNKaw z>;9Rl8U1O%>8FN;P&o9ZQRrF|`qIq4*umid!#Y4W+yg%atqnpdM7wqfr#O0fUb`90 z_+T5`KExLLr)%p;uhz~i?AbuQ%)`5Qpt;JXiq(&h-XrpJy;~l|) zXrMA_k;~kJ&x6X~!z6{R2zv}dq7=$$&gW^A<^o7rVKLL_y^?)ZmD`-+dW}g+T6ULPnx^b;!$;?@c`UF6bFa!Df-qtdCgT z3RXww+}Y(ZHHSj;fI|K=3Rr*53lXpNUwHWgTqH^-QabSloCMVBI3$(FNS%64i9Xw* zObZ|q-^7XFihflHU$R&c>-SmRLR`*$@UXI@po8O|K0EsGOC0zUr!gk$J-k=pLG+!e zlB>kA@iUS8o_Y4%N5gWA)k%krE<%3J;JLG)vy9Oy%k!s|>Ap$?qZl+*<4D3(KI06c zs+APfU##u#gQpwFNj@b=Z4HzMl*kJwE*>rr zgoNdXtktUJEINBFze(1bia>nQAf9KAZ*Sl%bDrJogG)>hc*bk%uZax%fYaerBRW4| zBkNn>$)QyR4GLTbd<|++1DVLraC*^NelUa}`N9U)VTPpUTHyJx$aHm-FwA-_(;-#P zdd4a0$lE~9z7PRL6bh3ILJO(-;087DDj7lJQ}-bHBUFI+)C=7zYp`f=`<@ zR+s;R)oV?+w1^ODl!9&+EwZpdknReAb1sNqx6 z-dy#K6EzZ%yxKD@@}^bhX&&gL?!69QH3so{E@^!O)~`9;DAdjijW1VhzS9>k0{po` z7!{};LgLl)Y_mX_P-LoIGUA2o(ZDYB)X46^kprw-WI^*HKtsLMTCZDx{#PiHsbOHT zP{y#LjApY?Z#U&V)f;n(Ubmd4gMX*T6RR3e#2E=sAfI6*-~?2=KcA`H$#Jp=I9nRj zoa>EK{u|1Wx#QQ&PmUA3iZe=_bnSvP zi&NAA-3CJ6Bhtg=vW_dXRzS_4*IG2w{BhPQ%3Q2!0~D-0rDukL*|NJ=!6wlJnYvux zVO8I-$6Q4RJG6dSYKjVf1g*M)Xh6GfpkLlxYB!m_vPx_nlf-K2X5{kXpC ztb{K}@oQv+=k(jPm2Wdw;QeKQPM?KCLnckLx7mt50RN%=X3cFXzRfq- zqgP$6)8$iFeU=sR4$v~=g`ITewVDI?Kf2b3aC8)p>VRbkD_xGIyuPtC%yU8+ zg3V9UTF6`rgD8^&R&TN!@=-kXnLNc>>Y?!qdMd#g+Dg=|)oUkCj=lT54u_M^0dfn7 z2%z+AFxFgN?&qjvR&UEgkpPwQAcg-_QMxl$nOCa1lgA=Tr^HA)`Q((^bWYO_bFZW+ zEK>zvzl;-utQX+x8BA{NXSW&9h3VxHv5HsjicE?gv;kRkHMhRY%ZIqUW>`bKFYt1P zmvgu%1(g=BOUn=qL5?-iF6Q)|R&B8I0&9{1R zDK@L`)xpenqp-oy303HhmN4HnysYBoI4`5PXjRgzEa{Y95<|p->?>Vrg!eAiXXX2P zj#lWuvhM46q3R0G@k%wM4s^AykTiW38^3tiXIT$0GtF94S@kibt%qPCPW`SB*>lD{ zgu!r!$)qE$0;(jafZ&z`)|@dOiUH@deiHQ$Vjhe(F@r2}Uo5JjvO0;3Kg+5Z3$pcO z^V?86zi_h%S4NZYM6YsQi3P_L!k^m>jKvXoYEDba|P4ja}Ohn9op?qxsg9~(!;xIxs=Lj!mgHqi$Y489{OA_C5nLJt}><3aUSlQK&PtH9@G_2ChD4)j3q z06T{Wixf^P5ml06S$$xV>w7?cm5K)UL36&GuSNBe4{ic<-C3wk)?!^``RF7iZx=DY zuw!tUfMB5e3U+W4*uff{0(Jn50l$ZPiR51llMfg$DY2xw1kC*S;LY6)VA6zveXE0GE4*T&m!apcTp+Y&$)X5;)3VOB8-E`BfH*LQue#6#{TQvk#a~TQE*q!Wt&MMti7T;wj)TU(3t4Q0W0dOzH6xcpCHGw z8LFiJg#X2WISbV1~4 z{a;qimWrOdm7XNFV%7-sCkFXRMx{X#s`Yc`7t&R2z86yYCnQ89X|52+4~YphKF;s? zV92?58|VFqS2PU&uMLm!kFak1+8dSwD?w-$fhh1hi_9&7fdA+ZG}B6t`gq7AiOph? zC<7l>tJEP)>d_F8N9e{u=D2%N?lwo=n_-c97!TGXyqv(L7>Glq*d32s-(%7*nIs2$ zrn-BRxjlWRGAV_a?ln{0IqL=H69(kp@s7ruqLP+lf7AbSlyR)w^Ept;r zxMk)D%+~jD`9lMfwj4JS)d`xYfB(@RG~6wz#+v53`mLdDEjPD**HtGa=povR^N8Z{ zSRGEk-`%|@k56k}w(fFa$W*))JYVBm`*!x_3c+RT))un6*IkJn|7Yw|uh<|N-;!{O+bTL`3&XmWTynnW;?s}*Tf~X7jx!{ z)$|W0^0_{IvU!qS6ziXI;A~9DhmJe(5!3ii1l*VwIRz_-OR-kJ%W-*Xn9L=%PRYAl z@ZCu(catz)L|ZcH3UEgF_%r5$U0YPCiZ3J>NX)kNE8NBW+5KepRCwnbe7BC5t9cO? zlRTcr{m4^%Nkp-@!#i%hKhAF~Eq(1w4^I tLrg0pL)Gt9_2s)e7&DCD|L2$UVpYs5jgE@9Q=DDUy&Sw9&rfZ0|9{uGhCu)T diff --git a/app/amazon/__pycache__/asin_status.cpython-39.pyc b/app/amazon/__pycache__/asin_status.cpython-39.pyc deleted file mode 100644 index 67ab5f0014b0b7885ba2c4e1b6ab17e91ade0103..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18494 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 IKjN4FFAmeY{{R30 diff --git a/app/amazon/__pycache__/match_action.cpython-39.pyc b/app/amazon/__pycache__/match_action.cpython-39.pyc deleted file mode 100644 index fdc68a9f7ec1da035001d05fa6c34c9ec7834ff2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19273 zcmbt+eRNajnWyg6)we9m#ux(zgaZU680WLo!-NzP!c01hn*o|k1&k{DUW|+^nO9dN z)?TM1fdrB`cuNwR#!ls=`Dz0sO&TZ=nCYIK-LoIF-P!K!?A>n9o+*;;Ide|_V*g-v zoBch{dnL;sw4GV`=+(XNeZN1R=lT7f_d3jo>rxL?iA4dJy-)XVgU0XwpLm)lo$VJ*+qA z5xsHDooLphiA8!-qQwa5&Ce)`%V;$4n^=3uQZnHi$|2is>hIGR5`TaG1sA=Yc3-;stm1HT#40+tGLqW zFjjLdi~DaWt)a3WbA1D&l32ZG^`W23-#c7)Ag8g`SoI7>=%7X|HahfHnXj~N!i8E_ z?o|`FCe|ZE4u?&SmX}KEq5>ImvW(f3BBmum8AlvjyM$T?h;ptplt9CE?ap z-F?)R&@ew9-Fs9?c;tL0ymB5BK0So~G}ujBsX4|Ur_A01TYIU_LKtP0U;N4Rv5{++ z&R0s8d$HbX9}QPj>x1~_vj{9#zpJF^%7ikkSW3Uz&vlPr#4M$x>DmN^9z0bob=Fh0 zA1%{;oDya9t0gbZqEnt9Ioy`JK8GGai-QI14OcMce9Fh4tBkxk_1wp?$+Huaqt8}O z9I1?*C|^8PKJ%UFi62jozgbIq=dX@DHF@Sl`O2|aS64Q5INirX+_^t>I49Dkk?-tD zi9K6-GpT%jbH{-pU0~Yuj(xH6a~CIH`mk0`@$M%EQ|5t9|D-~;V;uxUDxEiyh7iTy zuNINcnuf@xGSmvHzcZ809?b9Af+dsctUlb_G1J_ReKYl^oOFY!KBF_OZ|*RP`e1Ko zUm=aGhmEY66GNQ?xoo~;-?Rs#hBo+U9p(yV@k`Yf=;_0IwovB0krKTJ9>_iMU@mK> z(pf`v?Ca_}m@-k=V8QI{6S=}*cid;Y%~X%=HZq2-J)TONc0f<(2Q#T5L$}quusyw* zbnihssONfZvJO?%V5 zIo;UXD^ibV4AD85DfFeYdsBmhds71`tlGT;v}%(nUbY(thwR|4$J2;;1SLmNM!p4s z%M(^2N>EY1(A0<$R`I74+vlzNjWb#8=+;4O%EPJ5PUBD^EeyR^rGlIfNoha6yaWCo zd!x^VwM{D+yMXrHh&t>xRm%;TqaD=5J(gS7mb&`g{n!V*;#I|EdP-g$Yus7yK0Sc- zu2~vV`H?2byMpcl)jQ4+;v8Bj$g(qRDUeqUPfkYZkvT(WJJ z$7!1vZ9_cTrix$IxaFTcUIfHvJHrB81~hb(qj3l($kET z8ui7NZ$cgRTYi$gX4LXiY0oIb{<=J^mcN>Zo*z^=?M#nk%NC7$s%9 zv9aOS9kk#DHl1F`7)iPQ#jWvuB7zko8Yv)YI!z*U`}?Y(WhxpFOyY~r|N2U?=QmZ* z@n|kn$nQw!O=z24X38w&w~5@~w%p^{TBU~#VM2doX7+L1*~mJQ>PRX`#P{9JpI?2Y zxV%~;ZT8$CDS1?g=8mG;vF|#y_E$$n3$!tRb>v@G&b(C~d#`-%Qsu;z$uqA{ zA30GOpSX7E(^!G_#^;w`l;y<=)L%;fqX`J*>9HeI?>tplj5y?&p7_b!C)B9P?;b6` z@@)CkQ`as&TUaKum(Tx*s(9i3`nop7itfGo?S&Oink&c3XD2Ereo`x-^2&$P&z;;9 zyU|+h9ZNbEtoeh5eeq_|guJ!}L6*1O86zte(Y;Sc1O&gWk*Ksi`HW!N_TZwpW{%vfS`aKLM<6F3b7jA*xlC>dhyNwJFF`c_BmDs=|goKniuxEdsx92a{U?C zup3vJr9!v3M&05sN8QB@NL{Cqp+P+sbc*hV#_oZxbVFl%`+d5m`}F{=MAKga0wVoe zw4A&lsm+JI$V(cP^8Ow4CGwVndU!(V4-Na|eSZ*Ea07IdA8Gwg+Mhz(MNm&@*q_zV zLVsN^8cC1p(3e#$PCdYG$YM8yfrB2!eh8o~yX*2aVLt?DKUkXH{Ch64C-g;(dLA$v zYU9%)$A{4p%6KyH7{=t#U(Vd~9zs0rA*ZK{^;THw>Ts~Gwk7CE@EMG_#7b6h8}QP; zM~6dJs6V2&VdRhleGAv+S!$7mvdq!sVat6Od4ye;VmYU1mnookpG9e!zCvHb^*5l- z1|B_iR2A#y3xqj+Ckd{|#Sw{**XlQ zodfK>hI{57`l-{i9d$Y4)iq}>Dz)&as$42r#O~7K+BkdrXHU#OgTcWUBAwwUePh! zHg1p{d7D^h#hBpV6YS%oD5)EPSM z0gg1+$M;Qtflq-17Nl+Yvs2|0BLJq8rKdK<3M7+bU9rlMONfHOf+#YNkZ|gy^W~GT z%7hTeQ=hy&&2}RJk;3gaOEdN9vAZiDOq8D*tDJfB+NDe7=O;eD{FGRW^wXqx3uI~5 zN-rP(Fjjo0*1ZL_+*ecCLVnj^CT#*3)+|g%83G}aW%*CY$Xc;GzN2V^3uuj z_m6@On7aBL3`tm|Q|CX%bzvJ4&g!rP+GGeYfZlGvq6Xmm+W!59ctoUou>!ifQhUg> zS|8usA!(70eT7vhXoIwCD=)n_H8Lux68XIH;)&^RpJg7Ua=HY&S2m^)uhlMXgr0(F zlBu0Z^%$AW9oMdogSC(h2C5))SY|AreX(+UlqWCd#PE`+Pr?z!+iRVZ3v)0fu#&OJ zolVdQ0NyFmeFtFI5Ksrz0VJQ*t4j(-{^WZvlrNr~0-JL7G{#ig`jb~_g<>3OaIap9 z6?|x13{f=t%W;jAPRp1$s+=0R_SsnZ^3&xD7p9-U^SH_=hw)B)$&BG(yYq%A&5U(O zCT^vmW@`uxCOv@gU)3N}*^pn!~W+nv&-EiTP-EoGX*4wxd4DPa043 z+CE|I7e@YoSb~i4CTWSgvxNarGib$7k}kukj4)FAP%@QIXA=?P-BcdP!oM*-!osrWronAUL(omMIxL}9X66c36cuQ zVxh_Uh#3j+3?;EW=2}#Z;2UK+$$soXJ^7aqxRhp?=o&05O$}-q8}l&L-6~&2-DKQ{ zRSjmoA2BTmgUGQCru;HBh^KAR$Olyt;p-sEQjsHy)P6Op1`$u!LHw=PBmf|KC5RgR z_-j)M7ErlVa&h&1n{H0aL8c1YO>w{NPcno`ChcG{S%uJcIGH?DNM#6IC6jDz3bI|r zeH46!g2yNzY+4r(<`E<(NaW>7`1uLaGzIVQ2RWWh$5|heFkA4={|LbhmrAS&Y#A^& zV;=CT9R@7IF@;%F4_MV(46otU!(%G(;72_PAD%bjc~oyYswMpT8dxqZ;9mp!T0=8} zMhNM{$k96H1^3W~91Z$9BZ63ZLS-$*lV$pHJZS`z-j1?X=qpiHRKK;F2I<23Dx{0) ztC6lr_d##2xBblG?oJ)N?nM{MSI(DT|Exflm5*PcOWHJ3Z(p4}d1ms&YkXHZ3PJg9 z`S|;sZ0d!NkSy-8)ol;i>h_(s`p_<0eR#L6e*KS#^9~g9fUHbJlOC#m=$gI{;>(nq zr3`x0FddU@lqW%op?U7Y2%eXZk3*Z6Uwl=fb*ZBq$?@8IHIB7*u~qctH`VT9_|)34 zDK`1?dzItouU(y}Jaw*o=5+bk1(HxN9xIRj5V~am%4TQ-r>C{EAvOqU_jpd|wc>Vn zLoD^6RgesYEb;faCwR`0a~2b=&U6+qCi!oupTvW^yjbB))j{7_eQs+HcW?h1_PFMrZ*;C5=v=GE*8bt9wST;6?JnE%(9WG-+i82iedojt zWlu4(FSe&TaJVe0`(oX3kD$eByR*5+Z9jzGeqvyxs3)X}=R7(4aV`2N;N$^Hl{ZrZ zgL7xhoyqn64C#3LyL`l2uuuwDYu<JaB2@Y7wpg zbaB-(j@AGu1Kee_0ncy<*Go)q$%m!q*V`r(nMYqNbI7|EN?-k3sxKP@+_T*Gxy%5- z=JID$27w)W)#31PgXOkD4Dd`!15oVJ+x4XrWLWy)S)|7zm>L0@jif%kkw#$&=RlZv;0=T z3hL`e-~g?)?eCpB;~v*im%jY>;N7~9Xs3h&=e7g%G@`66=yf>LFdXGp+(z~2x0?~G zQ9@vS1I-aVv!bQO375QQKo=fve6kUsntusY1JJE=>Q}`(bH+v$$Lq&|YwP53+Bgnz zpt!Ot^{$z5s(XHie2%tT4q#j3w7q9m+wYVuopM=1Zj7w%inxxdD+XBWG(l zY>oD;?WJ@N>$V3@yn(#kzzis?IdUH5?L{Ju&7F~qc~a7@wtFjRS)WuTx*dY_fG-Mc zt?>jgv+&2k=0enNNbdAN+Uzcn#VFhG@V09gE>6CGu?8w^-(y>Mc0b(x2W$wJFP@%0 zb+LT>^wh+Aa}vtuuYXoP`{}~Zm(q|i+?_vg(&Q%ncI=~=gaX$t{6N-*SZ3a16vO4S zG=5(Zq;W(q1qTppkB2}5v(vy1;#ZhS=D0)BY9%*w-fndK(T2``XGF-Sa#YhaqBALG zBAqhGz@1fwjA+OgddbO+IU#mBOvW@Skav;139_4*ZHRFY>szV4&mp)@G-2hfBb6V& z0Hh~}KgQ522AaR}-KPO`r_PHjl1hU1l7J!2MMrFz4=4g9l&*1{jgow2T_pE8Oll!i09lOS%6cQQ@rh!!z%hw zYCLMYfn98^Czs2J9AX$-*VG24z zG<5avda$uYZ3l!21Mq~Em=Z<0Wg7WD0D%CUZgUf4g69NJTLE_b@Qjcbgz79VuGtpV z!K2n~?1@h)E%`M{9qI%_$ORohXY`&aY6`+ zFbF08SDeE!K%{aqVb-9|5K=Azvm4^Hp;8#R!xnh${Fn6>D_m+IWi$cXc3g!SftG-` zT|zZN1>uTvalK)^4N7|{{L>M%q0x$<7hpb7_a}9AFOzlG_Y*0`WKa33)>nObRf&Qz zRuApSwsJY`b9^hsIrWuff!Nh+B7G|(;%4aQlB z^CG_*$TCUO%8cdb&P<(qYU=9C<=5Ykr840+KZ$G^sjO2Y<%=&%qXyc6aE&AlSwq1C zH+AkD>kKJWabiXSSZ3>Dvi))>YAwWIS6=MkkmKO?Vr_REQ&nqFu#uTjbUv>YSsGH^dhU zI?5&$7BMn)6d)mWrf%#&ZqUfGR>F}Y1BL`}TskXRMd~XPg|^n8&t=88>7LXuY&lNF z{2}X;@6e;u6cCz^FOq~{Xdv|jtPxPsuyw-DQe(e^Se_rny25wu@F_UI=9&|E6=Hx)W zZ;tvC?;zio;S|VQxNtG)7eUwoEf<7N0@8J>iuQ%7YQOesxP!K8R+$`h6AJd?&QCgy zu2_3%(1;w5r%}WOk=m=a;7jx$X*msH%niNjZpEEUttrLkn$D}u%kH>WypCo`-TxY0 zu>nw1`@J+J)ejN5HHG+1C`5^}fvr_2B|_Yw;20AJ^Y^gm^pHT-y%4-OUIazthp@u& zpTjQkhgN_NUqLMdfJz}mfo46V0?9E6m51265<*rG<%F#egfL@B-9L;Yt;4|FP$?44 zZiGsaW&c!`jP@}47C+^ZqO6|be3flsSL0rYjCdi||F`U8k@5ztu!R;Ojb`~L@Dz$B1H=cF zJ2d7fnw@aK`ZFO%(JZwZ(aU9Km{bdTsyTI%_-`sT0IhNx^yM-IWA@{E>u`iskAGOI z9{y$3BS+(TXPny^Ij@k&`Oxz;Cfv7`(r_r=VZoFU|FCe+vV`g*=nY)x6QI7(m;1Oc z>JSz;E6olnQD0SSy((LKlePs+FRQV=G}lmLlvl2nm{jewR^qD*zrdPv?B|hJYEY_% zEo&F^VQI}u-4t__6El#t95H+(Fmf;`(lIK#cImCj(o+)q%}VW9%T<{B@U~e`7XYxE zV$*NEH2vE9@~l+-xu{xB@jN;xUO-@n93e&!NW4MO-$zgbQsrYGluuqLkB&^f`{5kO zDoA;D&p0`#>kK7XvlDWuoQIdO1b8Mrw6b#~*gtuveDXZt6R~I{{ux?TPJcRm`V%M& z(x2NI?$HdFgHH_^W5o zC-F2AvFTGFAvOz^vDfZ8!^hX(xOTZjjd)|MreoWYo<{K6CFo%CZdXZxGn4OLnttv3 z@kXh;7`qWjV!Cq%uCdZ$EntTRb9oawD__W%H2^QsHMG%;!ed=WS`QeWa!B3-ghx7m z0LOHjCBM3m++GN{@#ynB5bhFZDd4%G86nLHsPE7)GYW047JC(GUmz`(z=bOa-2(m9 zqG-@jVK?!$?QU{sY3`ufhIlXHwJ*HTQ{-Z5gKko5xQv`p%kaFF5F5^|wLyPHl?^~{ z-i2@(tz~E_ZuV!WTdwrHSR6t6HK%N(x{5JqPahq^;Nwg3z_C&aS{glt ztlb1z8yfmQkhBd*O_EmAqmZ;XWW%teiF6Z7+UDVgCmR4j_?NXnSXcOP(E-kd7d%ix z8(sluC`D%1=*aXC^wa)XHMRVXH7S60#Fs;ZLzCd`7_@RRAB|#Y>Hx0xYzsf(dX1;OEJz8Cr`+hMTE|Mh% zh&pdA;$;uCSLt7bV{{!OIDo|S<39AaSO+C;xqIlZot8h#W!y5a#o_9xf|Us+*6&O|>sK{E{|x|O*hyI3>Zm4&_R#b-yhheKM1mYY zO|&jFel%)zdDh9&uuE?pcSeSeMZwyef|sOu7`Tv~_59>^s~P2PuojU`$D>{?>t|N8)3#37yHdJrtY2MDTvvS@R-3ETiuOQm zA^)NYPt6_+je3SUoH>(H;*Pmo z?BnUvXXZbLt;aTGfn2w>a>~cggQk#16%iC{B-O>$j3naaCB-qfvCNInizI#R@a>X~ z=l8>${_&9qko-4Z20luz=WG=2ETYFUqzF>bGk-v zsmX|1*N7W)D7DeC$xq&N&W_2GQ~VBuB-Y@@xf@Bjpo&b%Ppkdlvsl$0F69RE`xZ`G zyu4O@r@}cmC(C&5VywWaC5EV(=yE?|QtGVpTd36E>~f)lc{e=rcpjbH#BkC9JZbZ8 zip@X>atMi|NFko3;3o(q-Q)-YwwiH7>}7gNX77w8N&c2Po0u2`W{UuDGC90i2d9rP z>IfrZNTl`4hA$xzv4cu%mM?qZz{i7Zq=M-YGmOwmN_QUxw^HyJ1s4&-Tcmyb8!g5; zO(sEL`>Ekc;(EwDwj+6dORYxsoTCcvr-0gEH#m%sJUb#!kTp0b*XZTJoDjPyF}b$p zTGN*h_ut5x{ty?ireQ&Y#{m;W)-Xq{$OT5MzJ&iuY26AO^=$)-{Wk4N< z_QH{W95EL-EuiD{!_(j;bXNhV@^Ftc5V*%nayUvury+df+Av zPqq~uo96PDQVDFgI~FT*DGji@AF0#b9`HPHqc|2)`$W~khi%LjKL4_X5BAEjZNF*a z(73*WY>Y$S#Orq}>)Syi$w#+Wbu*U6d!~!GJ+$MY-47)n*txZPTXO3o4<{eky6d61 zyIb-Pq{)hRI{x=qIu8a}zSk7P4v#S`W$%G5QsMcoVq+JV*I7lt(lyCgcQv(e-BuIMNWANk?YnuSV(aTv<`rbS z5q?m znN#9@!_BPFi)(M59xh?|f>6DZE#7!aSyQumdgTlOT35O=lC#RJIo{>FMcSQ>qeXM_50^Q7|7i zw!=F?UEow1mmiNvu}>1H&Vl_mbjxjV7X%KI45o(Y^*!;QDV}K%mg^tU?I8+S!ne~E z2P^36GJ-z?-<{ur3m4>R7@R!+vF!DO3n4k$4yi5u)BM8J4X?i$a(yM_CUGF(I7sTM z#r7Hbxd6N4ts^*?@0igd7f|^us)NoQ)P(CHTPW+D_%L;9WuD6unwW zy#nCf2Ea=K*n$A2V`R5+`c?8M73W~j?@SIHsZyN-WBeX5!;2;~kI#B|v9mcoC>48jo!+OggcgRKu)T*D%@i}{G^{~zSs9A(w21s02uJqX|i z^Kn+R+_}I|(u{om)5?*jY6)1&bc=tFK8pW{py=yz$WIRm`8+Ebypvd4;n?sXdJ)r) z)O5gxs7bQ=o~I&6))($XuzAi09$smc!=F3nk-TM8d<;YoTe$&v31c6e?i)B95&K7*s!SXfm^QU|TRgbIO>rmoP- zI+d{_IBqUcApF1RHq|U?aoO0hBa@ft4OE<$0v*jV_GOg7f>wHlH_&a4g1@C;BLzH2 zwBm(L!T+G(+Y~Gy+{G{OAReug>0^{~0f{K9ClN3HCk4Nx;CGem1Q?EzWdBoKxPm0v zqi)dB^dVXPf8m+^LJg?b=~ru(a-L2XMe!%4JS)A~X7J50a3M%M;l3!_s&D{?QwV2AU(0L~yt33%p|T zMR>=uZ@K)Db%JuxQTqY>2a;qm(I9f!zTN``ygPsAU3c?=kg4Z>K(x+_uO@fqdU9sb zf6HBW6!U#|-HYx07Uw3rl8=s&Yn?&=^qG^D7tfVH{!r{il$fC4Fa@;r#h)YKos9od zAh%)-4a*mq#9vSfa_|ret{14-#*K(34uFBHOdpR+6xxMH4C)fGZQy+Juw@^CIk%DD z+{th3b^e7A{%cT=z*=$5fL`g`@gmNS%71pU5&xGU*@J%~pbH{7grA;;oM$E-@?$(4 zq-Q)mG?H?@d+3T*Ii0Lwr;PM^Fg_-vDE>8qgg5^*F%mVKG*=r2{#Z@(*Zt$n|^>=au(71OaBkzTjrhs diff --git a/app/amazon/__pycache__/patrol_delete.cpython-314.pyc b/app/amazon/__pycache__/patrol_delete.cpython-314.pyc deleted file mode 100644 index a1c98aeb97eaa205019af919cce2ad82332f9614..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 139850 zcmeFa33OD~nJ#*&N+p$~(mWyrD#Rd(L1Hu@5Lnj0AP}M?1O`O8P!%8$D*05EG1yMa zNo)&GfQLpN5+EISAn^d*aRS(mA)Q{qcXh9va!D?w+V{ojSQ5N--@5ohZo8ee-hJP{ z&sbHbBsn)d+_!R;v`?MA_u13g```b(=cT8maJcS1|KGd*-ecf?M-TF4m44jWW8yd` z*T>nH7jVAK3ppRRhqD_t7<>kHH~Nh1Zt|IMH*QE+Z}yo>D357F;`&5iBKw`NA!)tE zXJNn18B zzTEYBzC0FZ*^s}!z*n%o&{tT(*^_-!_9Xg>_T>7e?lJg^_gH+>_GI{`+f#fc_Eet@ zaWnR$_)04|`-&|F-%Q+B;y$axGK1@wz0@G~v}Lp0b@gsflT+>K^HbG$Uzt6lfU{>7 zaNU`{@{aNuoIOj<>8oJR*~;@=_MD?U&tuQI%JY2ooTof5V9)u=b0vE&P@b#UbD{FQ zkUdXPo)@v_BIS88d!DL1FJaHc%JWk8JWY9C#-67u&-Y+_mt*`^>@oXRVvMWzn0%}D z7=5d8ufcsyhq2`w>e$G?FeW8(8F6#ioA>HA->y9S!!X6+1Z2h3{I-*%#Uu z*%#ZF*q7RuRhfK^9hjkq3?*Dg9p*rz+zQ`1`#rw(cB^kg$GVo6#gepP$9g#@-dxvm zTAL>R?${8KI#WhzL!WNg?-P`HuJ<5JNeQsaZVK;s!v^aeS zD$HS1ZO_qgLVZ`KFKpT1bMwx<-R^M0rYjvIlb<%Wt-Q{Z|K?Q30n_!b$2^@c~7U?>#Z<`)AqZ44(|a^ucM2Sv+(nXqsQax z+Sk?Tq+-WjeTA-DYmYr}z~}4rR##Pd-QC@8zSG^~-F!Y=Nf+xejV=e`P{ArV$!j)Nz`z_bJ+d+M2y+^=wdYwMr)9rA%yWKu_CoOJifpZD?O;hI1LIizWJGaNU;@g-Y zh%4r{8V(rjhTTXJFS}9wU1glfRhVwk)Cwo`I1jtSiM-qA=X)*~!X~eerxD-h;SW1~ zUaG4!Jk{CTyIUNQ-4X4n>^&N`Ivma(j4i&d!@*C(3$yX>Eke-8{R?L>tonk2@3-Ej z+ncTI=?+pk)*Jdkm(rWncdj&+=s@A9?)Mj?veCJo?g=Td()s{OiY2!lGpeM*5$;^}?Ca ztjFu-q?FD zj(+#`&o93<_ScV(zV$uv)!!5LbL)xcZuLEW>-5{VzBj-k#@@d=a`DvY({FtK-cS8B zpHafd#b?IeJ*h3>*1303xtt!a27g2&qN*3$57-g53zj z&)m)}G1yH&cr5k=hV~?~7&D7WWHCuBCW*yZSd4|mB(sRsqF7cIlf`1PS)Mc&lfzM$zw73EGC1+6tI{=7L&jmEGCD=l&}~Zi^;X0VsSHATq(tM8+>{87g+2p7CT#t&1Z3QSX>#! z`3hJ}Ig6=aF@-EG-g;G!2 zSlYITv_(={J4@Rhk+xV$+riTAk4OVz&g$FA(so6pEtTHe&C)s|(w0eSdsvzyBJG}z za%rwUz*3!*+HFw!v0SQiFH7x=cz1tFZJP3miAagT7&f7H(1(VM5HxJX?-m1@rbl_ zQrb6J+P5Oo)=O#MW@%4Eq-~Je@+3=pDk5#8^j<$pJ06kNB&9vg(w>P(+a#6wEK7SX zB5kvj_B=~F5s}txKk3`j&iPvGGl7l17|z%r6Azo6JwQYJ+1R4S-aa>W@<|{8qpu$y zx%%SBTLXI7u=UPHVCheyCV`x4H`xs&^ttcdeClswr=f^>r7Zeg-{WI%9UuAG6Sk_V9_K?{`x)K5V4w3L58vf; zdl&3=^1JTs>~?y+HKhlR0=);xTiRh8dFtxe^A}V6WvFN5{l1YOJR?>%(tj~tWyh90 z3}Wj5Xz;I5Q6q@eWZv23bvxWVe{7XpL{|^^2w)pfOR0?uy1RM~d3W9Ga{8PLX6fia(ex~1^aoAzt=y5#^|SibMwR3MxJ;h z-sm(}r1G>3!wHO+Ve&cmhE1T{!U;#5UA}O#tIONl?L6vsg^gZ5Y-Yq?IK}1ZWMnL& z^Bt5CoDiu4Vmu!%+|b7ge!pYWmfHFTyQ6Kx=7ufX+A0#l2_W+Jg;Uf~3R`GQ z9D98|;WV*x4&J?=C{O}6b8I%7L_B+sbon|DID8(*VFvBgdc$+00AXePyfm@B!wCAg zyD409#);IYQ-$1`LCc!qyeX%5oZ4}E_o>}N>GojWj{cNkOZJJ3;~62#jDTgv`3Au< zW6-jAIA_}Fno~8xj6J~|M<{1+AZPEewf2t5n48jXxt+)*XPrnpo))r{1S}=zXA72+ zLCeBnOXi96&SvG93hAcA!mYIX|>ji|ChEFZ&VmFq5Vp+i$1QF~U zGkQzRjXRA9RvYvgI<1CX9R3aXH{##4#5kWAEz+g^T?KC31tXu2B)$;Ag#SY!%Le?X&?KdjH44Sj{bC7rcW<&duc9zNemyex#$ZD zF4bSjz0!Go$>jqdOdndhp2exXMs9Xdo6u|Po&Sa()aMp4J|ffuZY?xkQJ39dH%5Se z9T2@+0sk^+TxB3wMc00`q?jw=D!E?6ZYE2h*cMrKKo8P|E!VU=U4ClGlz*xB8Q2=_ zhCN1Xmh@F|$-G?JGy#gu{!NG+J^tdza~DOze(dR=jP^bL`Q>LupE*8y?#Yq9S8nwk zx7Bai{NLYy_Vb^;2CzEv`qi;>Z{K|T`(v-48F~A=BCKZQ^|yc5_svFrE=u&zL@+^t z)hUlWcEK37y1}jF-43U>v#Tqd*afahkFO$`uR;m@A_|rv2q!sse~;s!H#}?8hSs(X z&FdVkZMALNS{?QFEiLt1wl_QK8}8eNSjJ#uz>2S=7ZVP8Jw0Kw%YV4ni@CUh;!--D zJ+3Z5V{mF|n$3{_M=9fpIVi6qiVY>R&BBYLXW_)}u({cediuDS^?ZJrK#O`2ffRs~ z!P3TH-nvlUW+89$jm7;b%6hGSzy8CGS2tceCOqI4dOU-xdj~BK4rfdeEK}48E%6^Y z0*Ca$@7#l6GRrt}3DdIW*W%R+CjF(#*CH`yf%5ku_6VhvAYkh--P~;Wf}`+)>(Y`d zri&}y>JgvSMk6n~XicEe);ka2lSH7KQU>j91}CFNyXgb6Yrgyg_g+I4*Q;SS>#bmaXKkERF+p@Y1t>pDJ!pdJEs)j=EW3G!Pq zRB?ePUaVngw-Ejxb{HO~sD`~f~ zTeK8MCF2n=%ZO35ESJ8k3bANE7BBtQ+ck)0)Bgf5l%^rO>?!R=E4Nr7H4Yengf<~* zK6CS(CrA2!MA+l2-`0g*1OzWXH}=gdBTv2e`Frnu{=v(Djl>CK5Hds)*AM2ECtVv~I1VuYMD?j+}UB z?4|Q)!Pt907<=z65izc|0f-v-2E00ke_Wrf_0Pd=^mX*?XFzzx*L2IRwpC7>W^Xs-ap4>VZnGTq4V!B3 zSD`jf+-ZIzm29>9d#H&GJnw<@O$6YO={a3Ms+rWt>+kk?3ETk#6cNB;VzS4D;Pay) z_;|S)JPV=lKJN3Jg3~KsSoz|r!5NK1IgS06;Tbdg6F*JQKGF4b*E5F()(@u78n$Mh zSbu!|iOt71hpe*#Rzk(Bvj(lpkPxz#1*~Nk4T807(7IRw_zl6l#!%iSA#c--(*DNb zjJy-ajvpJC70M|2IHTm#%-qu{FQg1ktsKm(8ZMZ2GEL4<9?Y02lx-c%*!pQ^{^`^g zQiWpsVB3yR+n$fx_6QEQ;5$0lc5E>7kx$X2jZbep>3x37r|Ct)w7P4J*H#EqHwDu- z3zp3)9F{i^2^-?>*wO3pHV->tf51UBxFF$$s@WYKFM`XmG@FHlC-D-%F?h+juPIsb6piu0Z04+eb^-Ezr6>uw!?iz$tY~L%icM2u0V76PZ zx`#801WVDs`vT_o(r~*GNQB!si}Dn5c^4yKi_&B+`+`Go39Ave>pAT9QSL{sKx=zo z$1b6D*FW|QZRlW`VppUDm@Iex5(PqeicmG3HMu=oMj5IMy(Ses)Z<739Wm@yP&++d z8PE}v-N;ZjX?@G3V?CPeoR-|hic1J*NWiRBlv{h5*igHUY#Up*G!yaD$k)>#n!|e2 zPbvk1Y$pEp>g|mHr9{qX=6?clm_%*}rnk5mPU+>ra*Cebj4G;#p3-r%vJZJL8~5SN z8E2PZrfms?NKdu@`cxm)KseIFjXdhEtrq4R+7AV0X)J81F!TQdiEqNyidU*Dmz zEJnb#05job2rl`q)LqZHy#C#9utyatAS1gZVE>Pg!+`zBC?w;um+LTg*g3v zISP)qvTnZf^ypu{_4$YAMjwA?qO~<|oVB%~c3txpaOmn{SaIqC!>nO^xKvevDUuO4 zJO0Yiyb@kE`30wWjm^mI7>e;$Tz=8%?o-`^Gn<3?TSEEU1pKuEFH`opwZF*yWzo-z zZZrw|4hcU0VC_SLmLu^nvIJB{*u(!WKW>ss?)#`p<-sMH-QdAdcq!ph>y?=ocf6Y} zKF6*);y0tA);q-iiN^`w2VOLY4+$OOG=kp)P^Qu2wCRyPD%z#tHR->taLds;>CzPn zNAT5lqm|;-qVUM&7~(SR&Xk|j`t1pJvprF58F*ES7*xM!_9VMSCg7?--Bu*~XQ13M zXwyCahDar87o5l}$AbL*0^}Nf_r%Q~^pCu9UW_Il&szh~qQi>5`OZ&Ap6C|~7`b}- z){9p~#yU?#d0W`z=exsZUzZOeIIbc^v8K~-h5C*as(5ekyK3PqJN5Bx4w1$pZi`PJ^R$yTR*eSvyHxd@zzr({<-fvB3sr^8%^Aj z;&3v=!obN$;Ge_m;c}6a5qHKrpd&1@8Hyy1hDOI&PSa;u@Q0`Zi<0Ru9%J|urNn9& zw{~x=Tx#NX*aRbFL*h=X4CJp2=C1|$Vp$-6*~J4lz`bbg zPn9_m_X|7S!u|V%lKsK#1A_HHy#4P#(W3eZjjzHcG?{aW*#H?au_AIm!rH_?OUpJstz^qXA1mKnydHqcBTk6U3j8jJXg)4Nc}P<@5A$;2MN7?g?bv zbMa^}W21(}u;v#DzfAdg%8jMMo=&0r@Zh~YgBA~R_ov2!b87g%Bj)uU4VFUeSk3ug za0sr+X%@- zX*wEqv8Y?D`UH_`&elc0(jLeRsCpmzG@lmwE>>nJ+)7$Rty+Nc7)} z6cLZJwKD52Tb*d$WxMs)e+k4-WV??(4+hFf(GFtl70B(L9DV1d(Shg3-g^?*BL5@` z(I9}45(12C=WdI&mj>(J0}d29_W4fZ1d$?y)8PLsUE|?6it$a7F2C$=K;|R$eHpDUj6^%-YeNlP$$t6<%#;JmEvjJ*Cd6~M??Eumcu z3=)kno=h)FmPa~XhDhZQEyFu9MPF@%Hpq#&L?0oScOC-9CCV_*`+`GoY3UWymA31% zu6sYKyY}$kR}R%|6;^B=T4HCZYB%v7yA<;Ebs3Jz10d(XT?328m)RKseRSXlBz97% zkouW2xoru4V0Gb5H$j#ExwbJ9d;-Y@k+XV)a=W6qF%gjr^|3_g`bw%86XrH*b1$V`4HvY2E$t?n z9DZX7{(BR;h)kB5T<`aNez|Y-&2zd?Ow>bT^e~fQGHieBwYP!A5Qpo`^N?67P%@kb z{ogLn;(F&%Z|#0hIGsH%Stva-2_e(^(5(uR%#pXB1@}xOKB{e^1g6XFt$F0J`8JJU zkv)_A52YdNDRRGbW& zY@V(j4HHe0elh|gft8c0zU+mnuFriqoYDpBQ_=iUBrBjLE2~M&AQBw@_WASwu-TNTJy70jsVPf&>p7b7`-ySOHpcl6S{^RsSLg&KAa zHtZDk?i2PO3GID2u=nAYJfP%Pp7xydT$8_ZlKKP^4)9?V>NH`$z)emkAZnl^Aq$e1fw=Kkyd$l>yj8N8`z z?@vnVk`t~Mr6G*aiT(G5o%~;+DHFrXFmicG*NDMOg^VFYvmOG~P6$+Q9QeoSL-jj^ zwL6BY@7GW-T9BwvFW*E_6S4#h6ADu&rd>pRR6W`S00OkjEHp%aeKKSyMtI6!#0%;o z(JT*<$ISbY9*HxEbjY~#9*U+=8jZmjCjBPWxdeek#ViYCEDL5V*U&Jl-f#PG=hdAz z5`O_pv7HcHZ~JKGN8TIdf4_%4#@%}@ckUf$?^P#| zyoc&z?vU;4iZ;%Oly@lWA1@cjtFseAoLVa3r1B`H@pOMKYmcJABkgpq^W`}^6*q`PFIMLLqg zL6V52SH@!88Z5m&Mvgg4f{Q(K|Rb-35r8KsZ6L?h0LU3VJec#V`MTo=9d z{1Jt)xlDtIg(ypOwg&U%xJoieLLBllhU7b*Q%I^ ztbX71;lZm1Zxjd)mvFdeaE)is(i@LAMi?eT%^UG!lBoH3Dt4GXUq}7n|3Yiz^f!ASIpc0N0LAgbOt~u5BB(G`A{x zwCgB&PJEqNF}GyPKvEh>@s;nuZ~jdL5el#T0V;1{^n#g4|BiioP!jldpQ^g8D~EDc zg6W%)h3zU*w-tF-pISX=YYgVB3*~GUa>zuX{x=yp!v#}MrfT#|<7{LSw(*}qwsMz- zuo?lwpUmbCh)5|UeNnoT!YJM2XpB;lxE^Q?$QNx2Y(2b=9}{9zaa2azmCXkPUxGY0 zC52CAo@0ZIQuxG%2%a!V)+D((>b+gD2dFYu0zd%InuAoW@}^cpZS1`>H{U)d3qcs& z#O55d+h*v_DM?996oHgVB9JJ3N^Kq{3JFhj?DcnbyCB$L+P|`@8!H7%C{neJHGpT* z5gG)hy(!v;dGR6^{8095qP;TZl9WvWjpEo1h8!b(E_AfR|KhNwqoU3l71rrxf2d z(Y#(Y~ zx5D;L%HNyVo*1>B)w<2m>shl0>5olfJ61eu)v^Ck89Z^)7324%5=3G4hDq&-nOx&2 ztfwp!)}F*_x7aOOc2&E@o~(UVOGi5tO$vF8v2RAbFYnasOXsQiyhLr09-7O3T#PTI{KIt6Xw>>QdS#aG{q;EwIaq zzQ8Vv8W(#SV$!rDYfnc^#8}%i+EeVA?Wt7?a}T)5O_6zM&jKSa8~Z~JW^iu1*`C*) zXwPp?s!9Y1DPXKP$xQyamq)*IPIM7<>pR~ad*y?Xlh45wlDIom+sI~vvA-l(%6>;f z97Hl-RN5^CQVy*}l2`+z9AlT>tG0<8G$@+<1BSwnRmq9z*n~#d>J$T6 znDH~We=QiNaFS?R;jPF}DZ%h8@DSmvE^5CghNJ@?{G`n&TrBPOtTZxwldV1|BSQ#O z-c7g=rNM!rvXQB+DW)>v6;MoK<)|MtoG1B(i);&uBevzfF5atkL4b;p;`JXs?Bu(S zxm70tgn@+fY@$jA+1HKw_FgMuf%lNv3cEyM{6eWTPmgLWvyb;2hO5aQ$B_eI0@Gl?6P?&9 zw>NxmG@bBuOJG>RKQWr`E}R%hjuBkKKF@8Ad&JOW1ZI`I$;i;CwSoM#*OHmm$Z)YO zR9q7%uDN_DSiBL2%fHF6F~gRP|FHB|)&HehXm<*|{=ue)gpEgpl81xYM+NIqW;U}V zkiSG&+92dF3FddH_*kQ`ZoAO9LnygFn7vc5?v#`>hpp|y);v)1%;s)Ez`8)FTpP6B zt2~}R6tq^~O-)Qrxt+=7*5S-4!r`SK z+axl<_BJ5@m*g>`-blzTg}=?ozinoZiClKx?IiZo!r96%n7;Ga?PT_t!lk4usBS7n z#p1f8UkWVOdgoc-Sd+kY!O#Rgr@?l?4@rO;gBkZk{3q=JUS>BkTt~v%P=j)5uwb|m z)TIIytgknzJxRet=QAu=DM!!G1u$_F%13YLD&g7^dsFNQz$whYDH4HqpgdqL3HD^* z7Ae3?QrnZOED?MZeH_**;jjuGEY?6_dy4ZTmw^`^C_?cr8{x3J$rBfI?{$+tj*!3B+T zrqDt(P}CK#hTinu3Qf_Tu7~NXKC)w3)q4~!Rc}T+Jb+W1Tr(&2wX=1{&8m*n<}ZM6 zMvV)w%T#-gc4UETMvXNvPyK!jQ{lt9D7wxrd|5e1ZbwWC#PC`Ulb{XbL$Qk(7EB46SKN5`7^OQ#vFX{|Vj`*?1xPHB13RJgp+?S4SK;Z`kUC z2kq{9hVHw(<1suB&gE4 zaMr#q_#)I6#E((!*|7s1&XB5;mlO$~yAMfil$$8C?3p?yu^+WmsfILNB(;-zDN*EL z35-jd*2bYtCtn0Z>npKk!E0Z-M4S#=oiar@14=-k`>fo8DySrt&xP;2C2+x2G`w<^ zV6hDsPC-QeY>0)Y%?M3v3`}dhb~HF`CuNvf7MfWfm{~70Y!A-dfy}?jD3jXq! zql4DH!?wkOb=qf{MFSg%YFs{?Su9Mi8qO>gX04`(Rl}Ln&!$O1@xY*Qt^EPxT>ltmhHb!Rl`I3c+@qg1d?AD&)zK4ob7lKw59 zWzRUfbufF5Fn9IP+-63nHU*}`xL;`BGqlMOoc;iWd$yTpn|`q6+?I>Y!C7^oS?h&a z>#sc+v~7SxnjG8N+QFRJpXL^wZhE2Vwvn6CU>q)-Fz2@>_qGu2Nz;n(c+|zi&7@X4t+O{bBWFqNv z6^AlQ1DT~~?-|UT`&sUcQ10vi=;AJ6VeQbI`>xdna~p3=8_I3JZQ`<~3*{?^rdJ0t zSD_tQ(}yxE(Syv=q0A*hW~t;!XE^sShI6M4=T1d9a9}96Y&dtuaPAz0cQY(m*|&4K z+=`ELmR_DVxY99Py7FX`)b-&)Uheno;lc%Kmp{wQ4Q0*?WX=m^F8B;yJEkui%vkp8 zOjU)=75xoM|An{>U;KrED_VTJ*~now7B>Wn8?JQ)i|+^PL}7Jw$+Kn3u(d$sX=Fzb z`9hIM<*y*B|B+#9(ZFUY0R4{%Nc4WPMDItC`$Usr8U4}HS}u~f*U|-KDakD1Al7CC zJk`Z$_lY&%J|MDv8S;NAI(me{f>|`+!Ho=faEoKWgOpgIEr>KxBy|-(CPAh{B&8C< z6C$xBw&>gh)n<*HX(Pb*p8|y$} zGMr^LA-3RkXfep%O&f0{4_bCH2IQJR{+i22q4OhYpjHJksxGDmGgfP~@!EuT$Kb)k zLJuE2D7sG2H6|jt4O;80pRvlgk*n4(Q+;_*Eo>5fND}#4kj!bwE>PlI*Kr z&^nlj{A?X$o0omTA-I4AfE)at=3ME#T=;G?ixp?RmIWhq1=@Ouji;*6uISQf)nxWt z84H01f?cXI%mKsh1Ua@v5^~AUbSG~+(4Lpt!GwIY@S`r73}rsGbl5RUdaQbc+9oj4 zBE_?Cm5O$Ym%c$bNJnE8SX$7@lUiscXNAPZV;9OxU_QF^1euD^O^Zv< zh;)^SH*P<(6VRB}CzInsu+$Q%b~!i3nWhiB^qnlKE*9l?*l6nr8|Bd~;U@fcsoUqM zkk4+lr&Sr+6YC6sJ?WySZ4DR^g?6ANMo*s|{o9vEkN*IGW$dlj;3LdWlU9UNVuTj_ z07x->7jT8&k9=QE>4bY{pAD{odFK(Fjn(2jO8ydUH8!?-MA6|_##JfIGTvW|cT@^l z(;(3~*{)-zj%u5~l3Jiil-eOfJh=t)Z6a=t#)K0NdtB~g8M6N|P*dbvtRe%Rt$Roy z)lCv4$>A8C=_E?DX!?pIg@b+_pkM<98xh1fO>Ax0)KJ$311VDflHF&lqwI{DXs2I0 z>BXs0nq$(7q7y|%ZzPHI22sP|ETw_65QrHa^8||_vSf#RiKbNqekA#ls9VD*pV`qk zxvr3n!J~Z4XK2%qpl5lYc=_eTVDVa2&{MKLn7u);ZundV(<_Bln+7eL8Jv#e8cjAe zj&^?bSK4^hBCtoP65HgmYZ$}_lmWm*lmbH+?sp>RDy2OH&U7Z+FWL<1elZP)VfGr<8aAyJ?_Gv2 zZk1^o*JY?kaF(FUDWYIh4dH>_59>u=B{`@kb?FB3KVRPCK4NQfAKmM5@-8u^?2!8? zor+dA-}ZQ~73( z-|LoYX3p|iy%7bYUT06IyPHJZVpa2Pbh=-)?Ff8idyeQ=ES{mqS{BkCj$-`{(e(|WnkJiHFA_1gua>K)&ZUzE1$e#kBE=c}; zOzwv}wYC>LapA%-?m@}MSlj+^+e9f}vDNX-ta;pzQfmuLKPjlqHeJs) z<7Wg7^e4mk_(V)kJ_*6Z6wU~8shFMFJeMe(xtADeGxtjU^_=US*9t!XW{22uFuOiB zWOl7GvxL_mLAe-CW&qw3q1a|mP**0yd*UgUDz+4Qcn<)VnNOyU(>^3_)qDz#L4sx% zoEx>7)ol_TwY6@zZ&QQp5^kz10 zcJ?W#QW&$Pm%W+rPRb8cF0Q}4Pgv3*wB0{gzEddMCG6VsX~s$+y&5wsZ8dld$r-mT zTxRZxM~^=`&(l-+@tq0;VvU(uJI|64n^2L@j< zKCPu9L=hGoi|fz{Ejm;Igw1s3k2Hg^|0uhTzN)5r`VZ_+#r=ndnqAm`P%DYFu#Xt0 zahon@{qJ#PUZf?XkVBcjP z>fyH`fFVy6{U+L+&%^jL7fj(KiS?=)z{|6mUZ=BWshWt1&G^XSIWf~$_goeBrFWw! zf|;h|A~G&l4lKD}=yaXj9n5q0H~vc^XU!faL(1b#A!|v%T5>+=@-o3%GH9)pa2*k* zCQC4tN_x7HU}(`-USj=zb6RaNcfB~RcE0KQJOjcA_^IGHHe?-db`zF^U4zIPabc6L z=EO7l_cWtP@srJHi@6DE{1jgBiuZ9Qb3I;-VE3Su=u5RXQIVJVnoM8AUd6~x7yus6 zbO3ZDpD+ef4v=NU+9VeSb55%+F_@&6NiB3?iJ&%|A+F`UMQCLxi%9KMBbA%_<4ub%!*Sh#B+dFUR!jsCYaM8Tg?pAzI^0l zy2f$_9@+=CpKU+8UYNgLn7SdD4n4VzvAf3CT37rmf;*F2Q2&b-ltMU|X^TK`3Cjt$ z*wrNAN0vKJvayLrIH-)I7(!qsBLs{px}morU`}%PYuK(J1Pr~#wOBE9+Bf~ukOD@g zd@N0}M;_}?CzdF&mj&3EVGOqgGD4FfieQ)FF`GmMG%68ThAo~(sRJ6X(7bf(SYySR zTk;!h=&RW{0<}#pWKOsi267f&%n#?7`*nK|5xskNNxy9KLE@0sx<0whbHjJvZMdB+3E%noH7Cg#^cX%jJFy|Yju zgVU9yYKP#8_cqn+SY>+@B4yRwikQqNy2eVNz8JS|% z!==d>OwY5DT~X?j!M?;p%#iy6D8+Fw zcQDK2q)I7Bm2tOXtg=VpeZu7A8u&Gd6Zu$Djc3HumO zF=$a2m_yzER8T$5?Jl`=~hQar?cFeD!^^mNEPSXL~{+%5GHIv z8dK!r1Jn=#Bm8v);S{j<{99m+;dc3J5uxt;q?*PKYC@w%pSdvh-nU0zd=97G6Mu^x zDk^F{-8}I+891?nPzWFJFN!E-?9DeHc?_CSVo?#AThJgo^#Kf<*jqF)J7O~_aKZy&pFN$aHDY{PTE3!6^Mnf#tc*rX9?%ggs=@Us$cJaIv zNnuWWs>swZ_U7Xo^S?zyMCRXA6(N@-54D>%$?^)2I3g|;HuKJ&{ce@S4cpZBAgUnO z{Nn5ILnrcgU~~hD8z26#tZW5B+u04O@g?G2v+rlDEL=g#416fsKU78%fsi zjBZj32NBRIqTM)OBTBtVeoTVZ!l{Ku%*kY`oDp zXxWP+8$*`TfQ8hHEOUp8riY4F1&UT(ZVVRH^=DvsLxt6W!s^RwgN03@!iR*yhyKAU zv_24O#i=$f!R-mQ_J&&h0{(pd;FgClHnRAOx&h(TQNwy>F}1SEq6tQ_V|A__RcO4kR99aebW`JMBk3 zbv$-|rgx`uZMur)yQv;_fwPDjWZX-y6d9xIHNj&L4pYUsKV~gUh1jyTNck41EXH3% z3&3BjllhBrb3ux=sY=cTmdbH7?U;p~7mXbdhx8GMqpc4nn9d_@c&cvhItj4cOa~>C zpLUVEXeCJfEb<}R)YQCqI<4Ads`*&HWcUFW+-*aj>#6 zRJlp0#A$cIoX!39q=uJ&(mSx>tnYmN8^?r<#e!w=mv_@7h9k<(eY%bqj(LB$3${9w z?4Z=Vr|T&)|0^$XOrI>M&EvjnLh!xmwdLG(LlT8~X|=OW*Jl|hEKjRlVY2@WDJ&9|87N~rYY?ZBn zTr_VI+Bp-Sa>Z?*si%iV$CWCSn$&_4lK&d?c<^=;&bC*0@Dc7wG8v7d(1I`uBfXU* zEu#=Pu0oT_9aX(?0ux6W;-!DQr;2T}7AB0ZQ4`_lLBDm$5v?<~`gOhx=o``#i@J2bRa(Ti(z>3|AC2^g(MbFwM??R;arKU% z8#VsCm}mquzUBxj6rVbb8lSF7Dyu)v7t5TuJ}sr!p2T(sh1Cw}6ZRgqJHV&wG#FcL zdP9c%*dO%snOVMra=wZzQHM$Eui&|tKfnA#k@{k+O+}Fkwld6{0NX#ron^7er?0H4 zI^^^%P?VbX`h7l6&#rqPfZf+N)j%S+$+Y&btqMhy?=G&;;GLs z9|tufQd7t7Q_7c%&Sr%i^=r9sw zm)KUa$mnv_l!|Q@lS(_pQIvbC3?95i!m|K|?)PlG$l?em3*!KFW_KjfaqnLl`{8L( zF$44}J6Aonr6VktPD@3v6)`>2p$^5KVJgJXgrM{Y573Z%jD%ZAae07qB4eD!QYGbh zvP5H|OrH1&q8KL0-NOzv=2zk^_`qdSdWL`eit;du3rDVadP&hnwk3gA2%2-@beZrI zpBc^NrF~F#cpy?+|BRS$j6#}BZFOl~HL$HWjHW;#Es7>mF!1_o`+jxsql3cz>{OWM z&OwWd5SrrQf}+z$PQeR7tI)CMfKK^^&xHfQwyr_T!Ox~lJ5%^d;hExB ziifSchja68o4KMncQ{i~N`Lyl0CAeGsaMy}3tXr4(A-Bi;j93gm%k`ZljOkr?n#}N6+lm(mAt-e=pe)tsJ8{4E!Kr~K` z1^kLiax-HM>b^i*4P#A`G3Uka+Gol3uv6{+Ewl3JAv)g{&)+e^g*BMy2+t!7n4x(d~ZiZZ+D7x7`m-DM-S zjK&(GT1E9MoP5wLaq9TZ$Ph)^u0WK|MxoapwoE@j@z^MG3q!f91G%e%xoi59hf{M; z)EuuF$PJ}V|2TEJ!hG8zY~4O+?fkVhThU}@94U);_&)*)-*>I?6HAi_M9^zR!I+jg z(R7n#`$QY67(nW-#ru;yb?_Sz(9UikixdhkwOyHc#e2E@U3iYBXSJayn_a|;VbJa; z_%Rvv<5(t56&J&T!TkC9D#oM+3FSxP^Rf%-$26q4s*HZHa_nYOK!(-x-NiTE(b8~wuR^$^0s$*yP#D) z+0H?4<394e4YH)Jy9>i^hs;3f=RRk**B#pc8`Q?ha0TwJeK1x*FLjI2`!MpWUfD?yILuQny*){G?A#{$|GGa-vQei+d`U9Earf_YySbC9L1`rB<1*S z=TX~?ni^XfDX)}Kb}{WC8mq2uIJgs&4|KU)?jD_QJI;t7adscFdptgGIggOZ`MjV+ z+%OQ-T?%Y+QC6B>l&$iBQ+yXwUF@D-$5~FN%f)KZ9UAeIP;=Zo23D~S=!6>ppSz8B zySKA6sh!POZjH>yzp`~bG|wQj!m&whxhA z5NtLY2e#xXXgk`A$$&3J1y)K;aWrqKZ=jFGvf&Uxa_WaMf^e_0*Y7fRV9Dp%Kz>zrP9IhHleGHBji%bAF=I&!vp|I)l@^%K{@** zdKNpksWsGe^>gf*R7ve%$fJE4ydAhqd^!PmOux!Ei+S~2vJOo>t zPRs%~52Ki_p6;$5vcBnYJAtZV&OD~O{Aj75z3<8&9CDL65Um-SM7zp* zv7w+|$q=aQFj?uy4^o=H7p)Rg@Uuhz)7Yp5u_i|vs~@FevN!q@*!|dSv7dvrf_)0T zafr>Y%s=){8*?4n=;7mjKyl0o`p~D;01^GgE6!Juy@MGW@lNG~em8%#)lJfP)L16w zs_yal%6DNL8C$8NV!mw`V|FUBW1h%(7GYpWr785I5LT$S6#CPP;49n)q*Zu-A)2%!eV!ktDgJNNc3 z<7Puz?w5BVo+L)NF?pH7kJ>KWzkATy0p``f?6ZY$E;;Z0(F!4F>5z3PvkO@Em6uG+ zzgaMidlf8<@1)iin$FLz%`sh1GvMd-95X_F7Wu!8QpCp*oT4=IUhu^!ytL#tyI+B- z5Ix88#UDgduev7UHHue@{6lkB%V-xZxV}YPC2+WPObTRf zFcjL`!Ijs#Cjoa02Yf<3VtXA4$E4#xO?oOBs)L_+D(z|xgp{a@%uN z-hMldE-eA)j1Cypj6=F+0HmKVs!%v#P#Aw5HD$@U=%6+5=E1#>RR69>V9LglJE49_ z?kPGv96fPz?E7%)uMtwKF7BCTuPAArg-SZabv?pt#FWw^%c)3a!pU&HtXR6OuCAd~ zIdCa#!;Jo1Hp8sU~#I< zUG$P&n3^INngq(@iQ7o|FhZ+N=08K#kod8aR6G1F0T+_eeM$boYRG~O0S+|tzFWb5 zs!c>Db}9VlBD~wj0V)`nC7YbCx$Dc>qK%vZ0ieCW41RRrgx2|&=7cA44Fghducaxn zUwj4xhB6klFzQmF0M_G5(SU=snl`Se3rb$n=ZNK;qqi`AL5nvM%!0C{qQs>ZqI#ij zONcGOu2_T0wM3kBBlZK_`0Y+jztG}1{ZdSB(63FBVG5=KRAUsWB2;J+2%?s7P@8;2 zR*H$rF_ZECH4dEg)ynJ%ZAq$Rj&b;t)+V)yJbwJr^7xOHY86AAa7X0ZMKtQYpivKZ zdBH4@EW!P6psg`jm_lGns4Ov%#znRNEDZRwFhG(c{8<=46x^SM0q#nI8h;iB5L-{f z$d#G-|GyCih>RQJyo0@<$K6+X`!WM?GCX~;SXxFXR$>0fGAbk%1l1q2joECI;l9aI zOqpSY`uw+T3KY+rs<41FG_*Y_y)=&pS@CyNwKAB851#AqYk(Dx)?{f{nMw%a=w zuHSFHaOP17^`8XK4ea6yy#ZokY!aS>6D#fZ^aK#5GE0aFtM{(V+NAfC0*G5XLjiwc z5~5fP$vjz%ZgC37Yso@AUK3fGFlAz}QDowZ&OZ|=G=+gO_8z$e6AdRtw+ShtXPa_h zmf;-51dk27gIdEVDv_7MxGKyvh4E4p){3Mg8n#HZpEsPy-uH&h?9S+?a4Hmilng1V zGee%aWnem@1PySB1lCS!QS4#36A*xmZZP9jXaP;P^;>QmlajM!zd0SJI)s_)gst|I z9l^ZT{>FcrQgYG^?Zi+)RiL2iqB&S_4=Amif>TQe>OU!7hy$2TZ#lK)Z2c#>6<;KA zMYh}N3zN4Ppc#2){wwou8_S5#Q!y26o{Fj9@=#zm5R<3Xz@-)5X)|zBW}QqJCKu!@ z0@GH!pK}?f#b4fe&Hi3VaN35GDZj~?cB=a9+)qkZ%QbEMB)1ARO_>FE*qMd>@Pc+o z)}qY%wKbE}CA0o;*CoeoQC*|0zcDjpWm>Em1^pR+xSeD`OTY4N#+o=sBaat5dk)qhErxr{U{%PxSSgj*~>Num6%vJVehNHiG3Q}m@e zWre{QaYIlOT{`rT!YR>eG)g=lqaNo-r3j%LXaX&^m1r?$x~9{THeKVKHpM;cxGgfb zspp@Hlo>SY?zd|wvwJzNO}CY8ij!MVW?+~S*T`4cLBj5|mzDQsr?NM33t znZC%+hAtt9Sc`fZ|L6u?e(;&!-Z2rg^L4)i!UzwY4xS*%U!`G z>qASLg(dWI;g*wT(nHTX?jOkeWXil@sg!M>WX}8|jY`2WbD23O9zOo?fccrf2xZI) zWXuX?%n>YezPwu?DPe11ij~Wq25*a0Ytaj40GhO^UwO$q;M>#hTgm-ZI)cB+LU28~ zv@XSXeSQ+cpRY`}okI;zq7)n=1{ct977 zjB6B5*z56hPi(Tfj6Q{;ux&K&0%MxO3$WLt`=wm*IhKV)Umq`9?)(FOI1PPTb}9k8 zsEd5m*bQy^zysyb<Q7qqR?>tG z7fTgBBiNFKxA++olp!;6X2OHxS0-o^vZcj7kJvblqt8R1`A$88)rL|qWBOog+nC33 z4`%79tG6mZ;bE@N3=jgpZLB?DKrb_O87>&$$q@dCq3F?h;DRY^tXvpQg40$A@OpSR zR+Dt(eIMK9!^x}n!|B7rz5JSRP0T8b%f+o+4Gj}$?5(L(USCcheHuFP={2X;oSh5PRUv0Vu;%`MW$MM>nr1UJwgJ2tc{k2s_3sUvAes&rM=_l@gY#Uw zuEEh#Yj11CtYg!W^?;_roO?wyWfuX6xsz`?Z8+XWYG)t!d0xTk_7~a*8qeN$9!@FG zr(84!^Op3d{3av&8Sh~B&Y>DQ67z)jS+8K(`7{OnYIHCI=b7wO=P=sAF8ZQ0_wG!7 z!SPiJ|iv>dg#fWt{zVGk`IIE3>ZnuGf8(b8Y`#tMAO{nK#B>e+ITUG8uhw^z2h(Z~YAF2XxHZ z$>%@6+y_rWw)!obZKKbBZ}i<~s#6|$tdXy$a{mGWOoAXd=E4PAw}~#08{qA-cAX-{ zWZDVg*>zhsw=nNH_4eAvHb-=3$yG8l;$)J_J}O_Kx%mzB2w@L(3An$;MP@j)8{87v zsAdnPJ&r&`ZEbXkJJ%^h>bSgN63kAhs6!Xp?QrqVeLly7e$f}R`-lVjC+tXUwv0bT z5fReN6+<~IAk8F~62o)KamH1oNE7~Rcc0olSh_Blw?35DEaU-|#hJ=Qw*IE!oGGWP zPgTRMf6nYs&O9N9-1^u5CL;&*IS#IZvv5gliDL#%cc1DWoY@@A-xA8-Cg87i8>&+L zu?#xhA?Klwori?(BeywjopBQ#9MlX;nmB>LCYuU{nTh0H?Z=Qq_^bxWHBcglgqc8WtzH2_0epT;|H} z>$z(Hk{=gb#sTC+GqFqVXY3e|8%Lb`Y}Oq+g+l-bAo@8J=`P$->gQ0-eTK_Q{Tzzx z$k^6Za#aa%C8=yLab&*96OLTsxSK(WW-|bHrO3-ksP&Ql*eXjX|UJ9l7)yAmS1wemO#$(nOP>Bs=?+4N;48P?*!|^!H!;M zFkE!Dth1-^?@{Zd(`QH{MjWUUKq1)?Gi*cQ-$#Ns2?1%vDBH>fM1+^e5JYTSf$fs# zFl<9yaHZzix6jQxa1uOO2{`w=S&JBat3fppyUN<3oVAnKRW=6mnnHP7g}kjdcxhMp zG^b!7@l47qDQE8q7S0V7E))tEp5GhHS=3(-03XU&6v$X~aaJf}`NtW{qc<95e>gCB zuqSlT_whk8bbrWDOS?&naU0$C7#*~m95Ot>HWjB)*`2oHtg=x44gr7dJ8%%CHS6T6 z(`!$yJ-aNJ1CMJtCwHB8oN}Dq9?V++Z)^jr&a8c9?fIJE)Rn{5lCx8PP;#zBSX3XJ z(GZ%^B+O{Kk$pSaoRiX@bk{1KFe&7&e&6-s!K(*v6p#af!##s*JcE|rINKHxOoVLR zu^|`_=V#~CNFLlX>2puP3lk&t#Gz04yKYIK{@+W%r^sN`Kj$HZ4%@1E2dE$++x6k2J=F#JQbn5lh7x9YtdN`5y z_c#uE!)fAOJPpC+C+bl2Fe>I7dFRT_OXpD8=u7X6KKrvwdJkD0R-qsdGp{mt45hBD^P< zGgq+ARr5GPsS7?%T_EKN71o%B69bA0|=RHUnZ)wTo zbR;RQibiM>PrT9&(@L`;>zAY$m&3eKP#EEUncQLYzah*{JR(DsVDSsdCp@%|iH2!wh-VMBQg@2xd$Y8UUS>X?mF z>3h^LbCNZrYHN^7Z~6fz)uWbQk=CqHWIvYbbMCc~LK;k#nM(&ht&@?rU;X@p=d`Gb z==D~sDqn458g4l8ZobXU^Bx|*+Q5|c__5oD6J31QLvB87W|>%_k_TH2{xi8kkIew@ zmYhI|1_r7jh;8ptn^=u>c1pM;7Jq5j(Nf!7??BkLzE$)Y!CV!o7zuH`WOotY!>kP_ ziWP}M;{>Ft8oA%WQ@9}pT;Ra;9uULhARaC^PKW6h75l|Dvqkn1%F_ZDNiqL?jgYfa zu&x}-TiV|M7yoI~HSQwLx-V`WC=O0pelii>dUA{4(DZgfLYm8fljKOs^HMrIjSjfZ zu0Ma^a?-UtpC3xQm{7);HeGR<+Ai$q z7|iTMjV~vXRY2PGKitihL^m!&M7B_7=f|0ybWj$m|H?}c_{_B03gh*pg8Pb$*DF%* zD==SQI_17>^Ut%*`2F)DNOR0TpIuOAH2oYI!_#k~~$vPGn3-|D<2>03;+@ozsy!6n9$#D%QTSmLcG3=HQ4;}cZLX>fd zHK^tPQQSgKkHDKGc?;w#`idfNp8$L(u9{ILq@?3s_@Codk<&FT>SVB1oQ|nE8Iw3% z;X+2IL>}^`k|;6+P$?1OYKg956uRS=RL-K9<ugP$%r#$d2+lox zDdAG=GzdwSKt$%JyqJgEcLo znsxzyZSBF8+e0fm0xLU0D;;OHzPj~C^ZwPFi5I^)qc+v>{XzuS4Jil#Sd?~?B=|6I zLL(8&76|o#Ka3!p{-7U@G~qo3tQ0>yTSOur7pP;g{+Hu)>^bU%8>RMfznwETnBQ{F zHQ;^c$b};p9}ZUC8>(s)ssK_#m74>Vn?sdbPJ2&!&$;?jh5VLJrxXXM*TLckf>R#o zPyaL{`{b%%M#))lF~GxEEo7`dKmGEeK*egovie{DhnXwbYVc;DrYEM>RwbOvMQ}9{ zLBzgJxE9T)JKsR?CxSKbz66K_0S`j@CvW5vNfDvW06H-rjbJAl^PTj|MFDX$7eXz^_mMXtS1yl-w{_unR`9e15t z@`~x?isyQUlBa!PMkW!A(HxL38e~*rxkDNg%=8FHtbtkrO4@6NF%Dv*FEB-E*rTq= zEn^tw=)bM#X5b8!LW{~Q4lru%t2inQvUE>Z*i5cxRxs>ZLhfPeO2SO#B*Dp z+&XZ=Ys=}Yc;A}zas{Z18)+H7v{Fx6>Ch41vTfY5ZNFGB()RcH-n1HzDY>umeQN?G zg7gfoA#d2y+zI2hlz|h_Hyt=MZcB9=$8AXia6o~liHMM>=zrITMnv9?(Zpp;St_H!SBMMc6 zWwjF&=c#M(>~8ezzt7Xs#_ew#+kI%P?l4QucYu;}Dap|uL@ZnEI(c^%cT0RSqr zm06?%iiJj9HtoXlAWU!Cb&nvx0NIbUDCI0>$x{Lh;-c*e{#wpPB{;Ds{cFkliR{tS`Bod!8xPk$$Kdonz#|u8jYV0O})XP ztA~uLK4fOU*27JdT=xoXb*=ysiQo#7F-RU4BVYwUsqb#I5Bh`Ywl=2-3A%H zfWirEkC4kowPh82+#@9Dr+C03~yL7WRt_omPg1ZY|&$*N{ zobN5J@D*2c#gMsppR-7_`gwltqD+hfai_gu3rx*M)Z*{Qv2(nKX7PXf!< z1TH!gl{ZH}{t$kXNA#+*RsD63*NmIue5O>732=EZdnkYS$dxdzzR_2Ih{ON;4smIR zeWoLK7iw(r69pPe5@$@D15j^6htCD5dCgk^N7LXwm$nyXpGZZru_o-yMdk7VNRDrDoRsp!W3D=ti%z-4VjHSi#A zCBTm~YQ7a_$y2J62s~iYLA{Su#qtNFmW$sj!BBOt0xt{dy^Vg)B^PjC8hjW6s9XKd z-~P#WcxQDm^MCt$kKTIqJGTb@7B(Ut{^-kJ|LDx4AD#Q*N8cHEnD;fn3)9M@u0^VZ)uf8SZdi$Gy&Bs1Woboqb7mEDo z`7?J=pR<>5e)TI4lgJEiWKkq)jT`BFLe+EMzrER)yPux-HMTC=&s0GXcQ$W--nwZp z4riVis!8gf{tyzd!w#h1NVdD+8NtOLM(D#!MiaY6@Fbo>V9TbQUOhqq1E^>5G~?{S z+lcfpn*k_ARncjnl5k5IaQ~Xt+RGRo084W;eAj!-d4suLb4gzi=~P)``nG%+Z9A9$ zRQ`lc8&N!|*OPQvKuE`9l6^5*o|r6m>$RALeH8?l82*?%(DuU7^G65MpF8eLE%u}q zdsCMZ@~HROS9|QMhj+cT@AAGYQEwdZ+P4Yut338q!=-PPT`n7W;ElCj`__q&Ai^_) zfoJM9v5V-Kf-0UFgvz54pGS`wj0r|SvYm(k6JQeYRPNE{#J^CVNjl9zhOE091Q$yt z=ynMj&bY~77WuM^kT3?1dhkH-=n#I91PxGzPl0e2f1YrCEHj*(^2(!j<0AcLHMj%g z#*!IwLI!FXS#&yh-vOGoE*f@V2uw5iQJP{z_Q2y5Z&nz6!up41U;uxH=BNrAV-^hJ z1L~||WQ++GZiVdiU2DvBbJPDy21GG?q~B2OwK1BKKt;%Mt8K=oC%Kz zav!2Zb_sp>7o#b3fihPmD#=_yeGZ!9BWm|5)SA&0VdMiD!NrpbK}6x^35t7XlV|5H zk8_V_-vQ2fU~Fg8*tYvv;+cDzz=SbQE z1&SP@>jfz+n5{rZ)%S@%p%k`vsSr7{xH?eTyCC5Wa%c;Kz^45wzxRNN3M52er|Q5? zHB3W>{gJ#D{Z0Yn^+$BMIuEvWch@mDn}8A$mw*S%dY&1;ATcrh0-S`q-a(9i;S4a` z(%atA%JTzVr<#K&RQ&*G~yn!C}O_~c1*s3q)fB%b==ZA}Em3tr2)m@|~?%`fxi zmvi~$!!DnB!zX4#MC7<7eqezwaj7S9=}_J44VM~*cY8}KeWlyDQgXMJSTk-(9N6ef zUg1ezF>HM+?sD8nqIcysZ!%uk-5KMSG zb2eCmUJXO=<^lw7+m|2=;0ykxm*hM+=I0^v|2<$y+6;-L0GoKp2({RQZu^opl%jS3(@6q8KZ`Xd5pXSRL%Epl-@ zhf#2IWM>zzz;qqisMrYOAqRs|WD-~8P!a<7DNSWeG1^sQ;`+kgyC>pS;PMfTIuj=J z)x5uW)id1#YewVpMzkP!iDS6hleT);=}p_jnUdeP+TB${+81l!es*-rk5P)6V4i2TgdSQ0s7!puEgSU{S|lW5Ld}S(1vBP&YdZ`Zw{@GS z!3$V*ZiFWdJTMw=XGFwxv$cOKWKf*Fh)XZx-G0uT3k1ZdQIk}aKhs>$5#}ah{H%#I zv=@WahIak|wNm@QVdDoh*s$WR2EnCxoJ;F|d*krQpBIc3ZJD6Bcc9XWo7_lz#4cgS zG)~^aPu~6<$+IiB69Ol5h-X24q;Z@JX#-bT9T}5gKUfu7^*w{xb__xoR4hSta6F;+ zPO@*sLCR=Gz8KU951Fk3-zmW)nwgGzX>p6#b*Gd(YC&j z_YxNLZMhy3KalW3%J~%cNpHduU&1mjVcF0IZ_IMy58BT?^5i4#z23MbfRQHa6SZe+ z2M!JFcJFkbbl*Ru<&ui8nM%kENG3G9vKRODJaOvmsew4JIh`{uAId@?PYH2(q7wYP z&&I=C^PWLBIH&o1ZfTRLk!i@9K_MN}1*Py}Hyy*>roGfn=Ws<;P^An*sF-n*^oaps z)DeG4{~7aF`dV#vHDrj|&uG9Yf;v2o?YB?cdg;(xdHt3RTefYf-_ul6zJtl%k($|O zVB;^J5r?mnWK_@PLxw5>HhBXM51v{dtCr zj!)mCqI^14PU10W4Mle~2rkr3(CuO!`z2Qjt!I}2KgHo{6ys;(D}eieje%AmF0}y@ zd5c)WI@bxRemg&EGSh(Ra%kD9cWR$TP|7CK$)7!g8j`sLf~b?E40dX4D!#?RWq~zt zXyBlGsn?tfSMVNlf!Dl*GcJ+aOXbid5g+sI7ZU55*w#$NKuOyNQvGao{UbG#2T6WI zPcIHRx=5aPkEhr%;O0s7t3okAlYW_iiFJa}?gq43>2{(XD*Y}-PC8q=y;eRDPtyeGx3gsC>zwc2o zqm+hlGtx6Sx_}fj5WH(mI=|_H^}<1S{I_bytP3af6uF{|zgKQy_n8`5NW?=~WGY=2 zJYjYjC%?g6kLQ*V36=i8bv_SXH$p>R@*=Ck*O0hi;{(Uo)SEqlLRoT=c!=r zsOK&*S?0=JgtT3uvoM4t?XRvdXV@VSOwcToG{0Ky?02XL8(T3Yn57IA=B1_9p5g?IqF(Yn5gUiQC2QR7W0YD6@QDOgdTB0q!L zPUDOa^GVax2dPO~9l`ZFM@YTiVXO~#gw~tDDOW0Npmn4O6WF3ciNTfzHK1xtIYwrY zK3f%&R2bkeo}S) z!3;dNx_(bF93}V#p1LFPBGQEyvp5$de=^ie5Yx(8nBkR0nb-uDa z9R4@#@h;!%P2Sg6bA#xJ5>HIYP?a}k4X8zP%wu18Isf$(R={#k!t&u&!;3~*uB2Qs za}B$>6??o1d;5b~GGeABXPm8po(EZjTkf$gAJ+S}aP0-{vg zOBg6&TsRi^>@}RdX7Kc2$8g5*{^9Lcinv8J6XC&8(NlUOxc@oCpIbGXdI&*Fth7Hy zzRCuhf%_f|&HT)jeKd*^(Gy0B9|$f&@dLL@t?buKL|GzwuAr8GVMG~-5+O`0c8eNi z4#W^@ECUdVnHTxQhB6&Nb>?Lxfv4vN6Xl#L*GBwN! zeNKbmkCf=HR+ug0l3s}YW~@7SP(N7bO(^mu&`kFx ztn7@J<@nbr~@QUpxLnUt_HzH(0I6A+I_iAFjLhz zRths!h?5&8v`Z%O{sG1QDyHgn9`ON>mgd$J15N8)EbmBayIo&qg8nLl5v7Zu@p3oSYiu) z+R2m8P>)%+Qx$aJFwJc@>N_9l^sY5-CgEhZA^Jw7^@*crj}D}N?YJ*8!xNd|jm+%R z!(!nxE$2F(>Ts_dJm`xpz8YJMv;rjHVwMao@P#kC8orD&K+=r^h8M!mhr7$4i}b}8 zc;X8NyTONzU+%T7;LIyHqk_AR7P8BTkO7M$c$kZodT+uZ#yH~7sfedjrYVUi#Yc?N zX+^4Zg0!jE{GWr#{(B?xOhq1;w{u-R@SXF$ssaOS3Z{(H@Ucin4%Lj5SCV; z;oTTQ>Tm6B=q^T9IG{f7Qdj|FBv;<8>WgrO`ljSpKkD9Z` zv-5n}<(};Fk;UB3I&XG;Uj-MP;V~^hqCS(1E{LFw`jmk-7asmhpiOzAW*T5qa>zfg z_S-jTxYnYY45oz}PQlI(g%^)p>bbn}ZR>E=Proo$P&vUONuj$Q3f%x|+^+p&I}VIh zH}T2&K2Y+z1@La1%$y6V$uLV{M}$Wm=p6dIkWPuJF!knp{>8@})7Fb~)xz znGw;4E`zKZ1HHarL9fq-+x)*HwNLF+9TT5nn&5`_5E zg%t=J7d=fa&2V3(gad3brU*$|+gYM%YtR*nk>HsMKR_G(Ni!{VY}~%9w%)O&qRyWn zu6H^J3&l4%FYthw6puDbe<&-66&@~>NqMccnBj~TrYWj#ibR)6+d3*jo;W8@z0GXyylah#uMDm-9F1=k7e;- z+sNi?mTidgm``%Xlb>BRpJe*mZ!byQ5b=LklkU&Byq~Au+=$*}%ezTy=)wACHxNFu ziOJHM2|ku-)9r&cou|2#Yiu2BXd81J626$Z#wDIC)XX)_nr3rzbhEYD#vh>rhn7Dw zr>oootLfG{tJ=Aax%jSRS64Qig_9T}d_{Z2OV)o?a6zH_O8mQ7N|Z1u#TUtQelZuP zRl+ppBB?r~>!L+Wr!|VolDWHe(IQ+qU|aEw$gZfyN#j}SFYzI}46~$=&fRte&yqss z`i9JsLOMj(Wt1&03HI(8Q3%^gp>a4s*Ko1~*rrH4&T8d8tj0=E&kOR*Qk zej?H)nK-Q(!1zK0)kMrQ;!g|eQ(_93SWw6&qn(-(ox{ZJ@Do3VU2+W_5h6|sp191} zzMti+QzaoIai-ZUJ63f{BjB(oVx?YJ#7Vt)K(|Q2@m?fW3wKA9T6#ycB32qLMVyrL zBE?=ejYs_!`UT2A{Ivu7)AS1?Va5Cd^rmY@&%aN&wrY>q>NGpz_^*_qJeU81{q@K7 zjI>U{z1K+&EM?ox&2@ywg(HSPsLFFnDWE_|sY<1Y!DhaExz)Y;_x8geK3U`K!wdFCU z>dhFhFtzcjGmBqAL2NINf1q6^suPYhV;yx`8*${8zZ~(6q=UpRM?#&|5v9a1181@$ zQ8|~znIzsjZHk_=I&D~&Nvtp6Oh<$mj$~zjc156Gk0eJ38zzpkunH-i{JxaReaDw6Db0iv7&b ze_Cmj_bziUEcnA%5Fqyh{~6e8PIHT{8iFXwyUWsLmhIc)yC?w*&ji;a%4t!<6`WCk zTIu4(|S1eck} z2oO9lLqD5lQRHClP^D5-oVvV*x^~-9TW0Ymw#l>Uz;Nj^r`=hvEO@1NFxeNkjEh_5 z-E@HW>+;0~S@7!;&^wr-eDB=B!)l$>KZjZWAdbHTAY32-VI6?5hJZz#>PZW5(*@M> z9wxW8W&!I{T}>K5^dFJ4SXSTys6GflBid(b7sd_5ER9yWwW%)xTj&xCEfq7PyZClRl}01XoLrTeb5ZLzbabA8mo7bUv5C9UyR9~S%q z6%=XfD{C+6VD;emDZfQJ+{NnM)(ue{oA9H^l~-6MdRJh{pE<)zxT!6!1wfI0N);eM z8mj=#kVZv+kg;YU`2D!Vr@KcJk6bD7RX2I6n{b?ewED0&@yNOEbKOs=zVXE!nKEc% zlAfx3FJsMTlXQUVOXl)o?b8boT+T=Ec5WELT3%m3d(y8x<<}nZ2Q|Cen*R_5r#3j; z+*m-)ZPr0Fk;Rs5z&fEhf>S-3$z=%6fRPf&2FCAztpUFS?Qvk{VU!EeY*zsVMHE=k z6<|})(o<-V`i-kQnvb=#Hm~(>{8NTp$mAMzGvStJG((W#|McXDb)@c>@mET&JouY3 z&$0$ahF;V%wS<5sOMugjj}^-T8f~mcF^ATUb`STE-9YcIKjD6VXRKg!+mT zQJ)a`LDHiBjT3rJl&ycuvytvh_oU%Z{elvJnO{cJV zL#>#$%h_PVztE5%e{o0%HrN*q1i?P!z{Y1!xl7#LFRd7Cd1;L&ZpkND`3WDEt{Apq zP!dM!u2_G$8%{pFrL~-+*;Cp~kRjozP4C$S8+RC(IPLc`5WF1`hA?0ZQ0|{$olE^7 zuXC(0HU()Y1Wj?mj$EY(Zc}UdC5oxm{Zigw{m_C}_Y4OOJAZESq*w5qB54qjgS0k5 zW-HfbF59-Hl=H1p)m0X+SY`Rb5Nm~1ren}c7+qo4GPa$BI|VYq%o>P!0+rS2!2W+w z6Hz;Hw{gDn;K+*SO9oC3>c92KV9(ITS5J+lt$=m^;SJZ4*8b{2VZ&KcqLn2(0Ru(F zuuZ!j4-(n}PRavOfsjasLWcoU7!5fM_6QKg9ypyZDr8Ev3{+nf@Hy5@3>%s`ZA+V? zR%YT2?_!S{*)w1sv*!A&8#wER!A)FI`PiZjqt*>*A$(cF;G#8G`!~_K+Po;<&>}ku zL?;WFp+(mh@#GJJ|GyrWjb_X5@QEvfo|vpW2v7bPg$*NKh(&@ZGG^`SX=`;Yq%`_t z%_kAGA9oq?GcQKTh-MZWUF~h%{&3mZM7Jx6z6)X)x1Nw~1CM9Ju_&R~eu%wz{x%cK z`=j8oqPL4U>nxgb3ug18+w~vR24gpTh!R8EAKZJq{ej*#Hd*{(ErP{J*D1C&^H{?j zYGoP9XGgIQv2#wu0cY2JcKiDE>-mn4raI0vY0ERiXGf%;qhb1Qm_h%GnBuX0q2pvO ziMNwvi#xaZ$;|_sy|zrBEuXXH59<0VuE!^l|IpAULkDuamW(NlJ}MT67Nfu>k3F~i z$>js9z1G|*y%>8#h+XBiW=|Q!*ok0`Ef&Yl6C$U=G-lh`wyzzY2-if!PLXTT7xnHf z-;ErK9<`T{KAez2nb(>FkzRDnxtu3+2J*epS71KP(=4>;WqJiiaWKTNiN zsspUOnXzWlfcr!kY;I3Rgrr3F)l9(-Ny@k-!Dq31EcP4m>FzZU2Ry&az4W<#{6ooe zdtb>K3jV?3;q^;%xmxmvFm`h$Vlm|ndW9HT4mL#7g!(+*~5ufI^`qEc<(pL?ygujpZ3!PC`s39hH zN)PLOck8rJ`I~Ab|Ijaov-6oZl2f5he%+Qhu+o#?;Ir+9Ppz2vr|Uk^@MyrK0rzut z=jxscjGENwVUwIrJM$I& z;HIGkLkEAFJG}F!i$<(t#hbjj72ed!zU|lJQdq}hlVcr!H%t>#sr@7(BtEjQY9d;L z`C0j1ydBQBdE^+7#hd695n}$AFU~m{=OinLHBZ*KGq2fl?iw@+>5wHvSf8jlTXO@3 z4ZGbdzx9Q2+k!Vsh97*R>`MA*S+(0aSpL$U!4ucAmO~gjZp(ag<4Euu)mMr}S8sD4 z8r=C(`%uWW>=kgN$PCj=F~cGgQ>n;Zm1r4lxw$t5nHFn|U;Jz>}X5BwGxV+|WPlM~q=KipAkxxbroEX&ma@Tlr z*9;%_=2l*_Y{pBE8IC=>Kl>QQaMo)-^P9W7!OPHaSHhV1tp{ecxDJ^H^;QX~6Udjw}EQr3=hg5||q&gAtz5K=7jz z6!~E@0rr_?1VNR4pG$}&3y9_t(2&ZEY`A?T$`e?s8-YKn>e4l=S5;w`*vuj;iBxb@ ztw=~>D3K4)3Nk#IOtwh+Zc_g!G2(f0Q=kv%OF|#y9uNr=un)DQ7^7M*N!aygsh5=7 zJ=aTN=(g2HEpX!Cn3DM^*6T0?AIX}AHir(352ZO=%u*&eN=Gc5N2-0>Dy9KS*3j$F zQx0H&uHsQD*(ImUoRnt=n2kXKvoQnc+Xl5>yw}+QMq?&lCK!!4N+75M1cAL6#3LAI zQ8O8(gh-xYT#yh67yFabH8{)rQXgI$unIC#K+)?xB*`mtR^wyv|!v?JL>I zmB4S9x6m;fQ^)n5fRg{7M&F+MJbUirnji4(ab4Zx>W6A$p(nQRCwktBB)1v|3Tk{y z>p1*}rq7c4Q8=SKdAe`&`{tN|HurX4>e5kINXsi^nn~}QV;?&)(930&`qGx+|9E~8 z)R9IlIdA}iZ95T`G}w-!*f;oHW41lxDmDuum40c>tymklO%Q(p3tBS?Q3EKbGhpe! z5dB|^fNH1q2o|-VO&!3Q;7`;tI~$N12&ZZ(rFPnBT7|*xK&1}e#D<<((%`3G29U9OVuk9Xrs$QuCxFrj&Fc zQ+}@)#oVNBP~&JqqgdE8$bJHZNsnP4Aq%_Ih10HvItf+>D~xP2=vfT{4R&n;L@^Tl znM;LIsX&PD8H9q_D>Ya&rz)mWfe_yd`KZ^2uki_1WA&2w6n&IJR-v4wR~D%CN-Jnd zK;-{NdZZN!Dy+8Zy-~&9s;YuDv`DQFnYFdpr;$5MohwI`QqMWs;#UE6!dJrBg72zR zzQ(HPsqklsk50#7t542$)X4n&^n!|6v``sl0sLpC$@NK zsW-M9(AG+hmQ+#~UtXu`jM*G_GL0U=>$ZJyx)-zk*B5_t+NBqI*i)2LZWBVz17%Pw*B>*uJ1q zs>YXNn0VA99y#2j6^ud};0&Z^dS=;%=(`#O7dKAO?eYS4dwT(k%umZ?eyRpDWKS=$%#S?8 zIP{`w2h`W5se?=_0m>FoXb7S*l-MEAcy>7q0lDFf4E7-$T0McCD<_Sa%h$dOA(VZ3uWsXqSb7Bh!YCLutJYb%uIY+q8E76=v8Wbb-Tc$*7E%L zi#n1aAL_ut##&fUW<244!ZHW%wfkUmSDQa<%jVkc&{i(5tMD73q2TKA>)~Bk6wKse z(3qhK7c(kEXd#%b3f{enJ0jvmH$wqK+?9kaPDMGPler6n?tf>$FJ)hU#e_i<9Y?31o{MnzzI^J!sqa2CW-0j~ zWgpmCQA^)TS@jvi>AzH72#IdM9H1#^#owe2!5PBn1CRn3X4ig1K#+0sU2BkBA$E1q z{PVAxA#t6*y@H^16`IR<`e!r)_3rd<^O9B9GGrT2OCxH)W@YPqEVZ6r7P{XtISeTv=9Mcok3Q8*+F%icFma4Rre>(pm- z^`n6^+jR)t2I_nfZt}c#wbRf0DL6_&2LjA{QabQQVs;;HljfyMp4*ISXA_*df}{xn zx(LUR$$FZqNAXses;~|FL3Vk6?Rbjamr~?ODHJtm0Ap1N7NUCup;Q7wQ%Vvit*3e91^#kT<5ZFYJAD0&IzY7#;r!oU2COkfvzP zXv!)`4`A2;Vw)@o56EIYiEZL2c|zK!I!x=E+2xZ4-t;ljn2m{HeUX5dsaY_WeM&#Fo*i5%8N} zxjEls&L3PpRPHk`yJ}uGyui0=muJ;3&bgm!YWA&axw@)lJTCRA$nmti!3A8}YG2w0 zPud3F%&PP~x3Fw@r_a3Zs(IZ=iErZp&qna3I=KhBeH(kOZtNM4%eiXFAyew79y`S) zEFL@|x~E6Rax_=C&SzdfYF^K$2MZ}R>ux;!Ny+O0-ODcYHIL(ya?iXtKH~~0NmM!` z25B+a7YallR43ys5=uHhYiGB#3g{?osG*QNwH96gqL16f%!}Qx=CK&L?#Py11Z%OL zjgx!vaE7d*fk9oMbHFybBYZndHsD_nejD&F821qJ6ODT)`HC*k6$UdK`eIM;d9tuU zQy?9R2h1^jO2G5hD=**r$&dWO6}>LF4Q5eyzIN&6b3b>HUc5hKa~lj!9zVsW{qeJS z;Sa84njW80N8EYot=mt$di(5ozo8B^^>G$?>#v`<`Qpnr`!4zoTY8#1PC;$wOSD#W zyQ)t|?m7-{5v}%WthCn7V}N|bsYQRbvf>22vjF8vf&_m1jBQ**SAex)GygOr5<@oKpeNh>2vi)BhVc$b z!}xZfN2QBq0h@2%!-LXvgPCt-4j&z@>X_6c?uqWl zyHV@Vu*djY-|R^zH99iMkF@_q7t;OWP%!>X5G^DGGvv02dk5BgaQl1xtW$5L6OKH9843+G8$t+WL7*=Ib z9i@?6j0W(F3SNFbh+o|wG@;i-LaoH|Q;V%I*HhA(7xeu82Cr0vezcTkt7tpbs!qA6P_Y~FNxt}Hp7>=$J)`lfp_n4B zDLucYaHBP)o)Y>hw4{(`=8__+kD%h@1_X2MO$r{TC>z7szyMr`6rBZ|@(fXCrdxRP zZN&cs{9$Mjv1`z4Wb?{Zj)1|U41qYHlT$9L%LCL6g?M1gEQ};x2rk1K2ySE)1h*MR zK@i6`k(wl4LKBUXL<}-CN$Y^haiNZx|3KXIOD2%Pdtn#PkD>$d3W7Ok`ghDEt-_wr zH0kzwwS)5NPSIvM8k42lT?QQG#meR{`2eMGQSPe4zRrf6PhzE`V)< z?|6*>v^+qb{t_}{j5yxz2BXP>{mD%oot;O?W%bcE#eN3sTacJ2NO=;eyO{k`BGyFT zUo>Z2&r!gnC}afHwG}@F-(N($^W;<$BIoe^HK*LBi>4J01Y;uHh=M~HE_>OqjZ*Aa1Q&hVKCIpG+oS(pC%7d(shq`&*CHDpD8%B>4C6Zuh!vS{+ zFX<=P{c;fhdyWll1O-9t5OfbhhoHKkz~x0E0kE}|OBcL1XC z4GJ!JyB6wN;J@(Kw6m~55OP2$g0rxS^PltL(&%CE|5U#fYXcY_Qd!@-0Hxmg#^9Z= z_Y0l~54AP-^twQgbsjp@=6blL_msV*^Q7xA)?xsPP0*b&nC{>~!QwnjxPi<-pLVKD zFP$n=_2KaO2#0`EWq(A@VpjwXE}benAhNn+vp2ehS7}vy<1@ER88i`* zkCnfdwCpq2;#n7fD{$~3L{=^Ub!im1uR3{=s7a(`p1d#>3e>pgdYSLZ^UNOtU{*N; z^%81-j{1h?I?slUZuK}1URnN3@wt^xtsH1@-~XoWt%%DJK5M1NTIqEj6ozr>a-5|+ zoz&RU*!ob>qT)vyyBF>&U%a<@@#*~!l`LBMNMj4V42oh^O2uW<2xA)fq< z^1q4~Eqw$B@>))(v2;rxQKV8lHnu<@$XLOF%wE3HKSrbZ!xKaV!>@_#T zg6M~FiJxkMlEQ8#EdvucDQr>`6d%@Sf(pMWexPVHJQ+EB9Aroc>x;mN1Jc|cWuxqk zZY9c`GqyfPL7yD$HMb&SCb=N6fHae<+2m$|HdWO*UR6#|qMJ@A5MJ_E=ug-4G%WMt zCEt`LDB&eq!*<{$6kaGH&mh~i7nferU#c52zPgr=m#d9RvP-D8agtb-L;}#EO%MS< zZv}k~27+F~TLo5Y#Y6$ykzOf^>(wQk-O|r`1 zA|nlcvwUidr}N1GV*omc1`EASv8LQp1rAWE#fpzHw*S&}qjna(0<*xgP=Cu zGn2czbjGSwaDkYOMiq4CWt!r2Zk(OmTjqSnFcRe5x$E_wANBmoAh3Hv6Se(eiCRdd znUQ%}ah&ZvKfuQdTk#58Z@f*nzelg|8so?5i8i2_*4@a^oPQ=*ncjeJQEh*M0tu`{ z_ZhAOgX!%HV$Kjhv{?H$vNLR3y|x^mZ82wCJXj2ak=Lacbac#TE97j2gAT7{iS&X? zUhK6M_-so#+tQ&7ucZ_xeqti~DzJyZbewgu$GUj%;A=-N9`R5Id6zl81x~NE0Vk%c zaRW=AXXe`B3A^fSRe$~Cwd1C!C$^p4HekDEO1&FHrq*LMmKZhrj?#ugFlH{Gr_j9) z(6OT#=?`LdJDHN*SMYm&u=X1DVg`!*J#8s@q-2MHe1qXeN_M!Bk{xb5FjG>Qg8sO1 z@+-)t*+QG38d5J4E%U3tsR5^kVo@zhT(ESsCUDgRs?o`+b81v8q$pb1JhYUjL3Uos zuSAxo#9(q5!Nv;S71FC`9+yFN!!jeFqcjV*)LP_Am>U;XPe2|4{Vh|F%Y(zeg&&YmPScM&uNip zYP4D0loWQtBrq?w6xOV)Vm~;kpF)JgEI4ZQz=<6MQ>I;Fu633~|(g}40m$pU^Ygi!r zogt_XT2J-qGLd6kMGcl=V-G>DbMy=9M^f!+m)L7k{g@!Z8MZ?1C(ImH2P9>6z;?sx z5P>?F#5KbUAe<&gsB+F=PK1!1tZAtt0%sOWWp+kNsdllsYLEd2V1H&7NG;AU!9gSJHIRxKP=De?Pu@rx}pu)%y8Jc!}GbyDhzlrE_ zwSo28)Y66-)&}<`q?$$vcx5{aUO(90+1t(Hpy}%m7E&6T51~=?0c;+1L!FJ!0J?4b zZ}!^t25Q<3gL$F}bGvv63=m?l_;c=Y?*EX6jjX`{zk*W(pE=KC&Ku12noF4XIZ{fC zO&lokB`xtJEg7i#Ep38gQ*mq^+Z`ZxE&RgB+S=0DT66RsT zlL>#5bP+~_VEiBf)v!mx(DGfQ2H(Xza52qofQ1I%jy;|od%QdLU0dD7H68Ia9rrXH z_cnETR(CzqhTz$@i)nq8T+9RS=EC#Cv5V$`-r<#Rt+~ABjdfSretYztqrWDPJ-`+da(^va`?&5(8C?r=6ErqXhbIQw$;n93N zDb<&>)RVMy=zyGwUm2_|EHg8hRRa?zCxs76?trTC;CQs3(k)7V6&EB}GtClK! zFTYOp6;*hODn^>UMOEIoEmtjD-Zv*d_K2Kd=J$8=G>KVv7eNp2v&rR}h&JtKAIEB< z4&WB7iFM(8zwKBza0JcUrRiG>!hT`Q+`2UE7ezLNzl>hAb!G5B=yeo^1XE~Tymf8x zKN@rth6W>K;1dgnU6NS)KK#5#vVyrtRYRPKi={*ul+QDc`>+L1lnB_3j7Wk{%&!wB3C1;?1*P7k}M4_Y!`cj>HQBo@B(W`EcjyF#63uGa*$iwksKw-;cUO z`apo$MI+`nO3dF!5XWmQgZaw~oJT0dOwxS%R^g{1YeOBGK1nb%1N(dW4-IVLOxZY) zJ>$8SGvVYJAHS6|< z*HrmgH}NvRSZ*k{Y2OafmPZG_Z4AeAz%n2#0zG_>e$03u+l24j<59I+)L_!%U~^P! z$R+-3?uCuSmd(Amk^SPQqPQ-RR)deIQpU+*JSf!&)kPwKPJY3K5}Yy4%IHL%yy?%K zeq&S9ak6aG=53Vo0<-_ySjUzF5Y&$6R$&$HM@?o?_8@< zo(oii#??f@aS9%!;2{dWNWs@Bc!q)j3fvS7QScKAeony=3c4xyR|@`$gDj9W6#Z234S+OTpe*I-DT&>)zKj5O40iA!Fqow6GZNd&r+rfhmc4%D&? zIa6VBN&~$`FcldB)r$!Yg;UWX6pLUgT5qt?H@2xTlL3aP5KJYT4GYNw+rp^~`E4kD zfnX}uNM9hBvKb8fkt2muk*f@0A8QayorI1*JySTfEyzHr5llr!8%ifM2&Qtw4e{i) z1ZEfvhJ1RPKM|=Zt@7d z)C4_EC1x4YCNv19YPC^@ZTOzTsceUqil%Vth%Um=f)^A{rLLijDS$35Wfx`05wgS6 zM7Ab4dP=7=?9)*W>Vc<;r7SMVkR-(639cq7U9^-APZPN;zaT@FkRP5VOe|fP zAx!udPZRMh&Sppy;_x)FNT^E*sd0-|;3V5kwlize-{$sNf=4!>k4srl14);1p0--Xpml%kdPiHma$Su8YvV*kJOzg z2NE$MDV`?mEDnriAr4OyPQH?a&k3K?&7K zSRC9-ATEsJdWV+D(gU~!QYhcCleoSDU0Sh{c)6UAbpS&WIrSXqpX z#Y8w(vN$*eK#8#whrA;9n^`O~{O^dTSdm@RW7!|Y-X*Xv5(C~v3-6ebd@_u$_|7W4 zV}|P;sR8e7!n-t@xr?t_AWQz zUBZ5|V-;&*9($WlZ#%S7`xAw47qYjD0=`WW>a&==D+qX(yg$lO#_}y>ZUyNjM;Xk%|Hd3x!{3N1m>pm{-3; zRxmTwd;B=gMd3FX-LMUcNM0H$9O(dV+K%H>z-1Ctn!&$fO^C(kKw1(qUPv2AbGP&b zJst@|yM005Q1Qh^K<0B&6Ck>%1RS+&>+Wto+y<-XZ4b6}+yi}a3r(7&PL>o>b%qU~ zfhjx>+L!JZ=oks^e1B8b#LI{WMq@mPhxus?aYd;Kwq#8M5Whr5vx`J&Af7=OBZSVk zNmHzltF!rU_(N3Ip2brhYoF?3j$tNnNnUb2DyALtd=|D-7pN^gO@9_tc_Rly>yU*FMr z*l(LL>WF3CS&A~wXs+9m&ux2Z+tal^+d>#X;TEm)+Sd1lUN=VcYy0#1lOPTrY#VGC z+AwrtsGW;kf6Z9VcQQ>$aay7p{Cu$EVZLREsmf+TXb;*97A5$dA0mS}*Px3g0hH|& zD{YNo&0S!CYcAky4Q?}68Wn<(H%%VLcTh!+fVz*iOP4eYvl|LP8cCc-$J@omAsg{> zNP<5wLex_P709{3I*Dp7202Y<#4KroA#yM2A+;m5VSZ-I?EIqQoX+)bdXX%kFXILOSLoS#})31iS zx(J*r&wCmd~Z5(18czd^qhI*P0z!wX(af=u3$~8i|W=DjybB`V(K!@l2<-l9T5|4 z+9j?tjD*gyP#n=TO}zvaTCpW0Lu@Rs+CABj4{BP`t>}|QdjjSt-yYdDReiWP->0Qp zOrw%QP&0g8IKh+Ip7|8*+ICHuK1BoHDh0in_>@QFl-L`O;C(p!#?3Fkbn}Vt0>P_w z^&+J|m^Ongt$qVosmHqg7Evj;8*YBuJE4jDDpK{vA>gyvvgyO&pWVLrvwwT@@jI{o z_|98j^@lW+J8HMoZtkTX1V;JM(?7e}cka%G!D$JB^MwOxBC8ElCPOFj1-ocd2j^MC z&e1E5EZD*C*2-#%vpKw}lgvMf9V$ppGgKs}*zfe%V&EziqPWhE2XRhHFs3fHSyYPu zA!_9MU)TWI&adJv!M|k2Cg0`igkyzn)bgrmKc;|9?9jI3y_gpulKdudI?}MaVrbfjk^!l3Sn4cdn*GIuK%Fi2^8>U8-U*dWE^j8JLwOlyh&((%yp0w#8JIsk$^3o?nuOu z62Elu%v-r?RE`R%C)S)^GX(S*RN*tovZG`BLMC*pLf623?zuHju5rf>MtiM`V5vVg z@!XLoj|||1U@i=z*y7JsJz0h06D_>0{)=@_e_u^tscpRPSC#LD9G+ z%l*K(CCwc*Zb@}($1NG|@^M(OPan6~-B}ZHrp(B`YLCf2k&L6zq|^ylVnhiHpZG=h zmD0aIJ<`EB;GC(GYwF^)eEZ-5u!F>8*`y3k_)ysKsT?^qa+FJOzylA`_$=ujG%<%;R(U0S z)KU*;0%Mj;E^C?3vV6E`%(8mSviz=9leL0WQj^Ba3w-7r55zpVD~92seEn4zjVW5y z58F+d?%f_sfmrHt_i}e0&Vh3YtFKws+$dT-Uy|QnH^+aX2@PHI9-J)mnz3Bm!oe-R zMe99_)_WIi;1+J=Vm6H&9yQg%`0+nm3T{{v$#Z+@8o3*;FI_&Y|8W%`0T0eapBgl_ z{7*w5TKtcRP-Omx?sb^qUn#d&t1K%sL zLS{($9@7>o3@gXeB2N@oIs*?7x&H>Wb`d=1h40w#G|brY{B-6r+8mpao^fjsR^uAKo+Np%8It~z#nA4EFLJ5r`q06(2lKZ2-`NMIV{u1E*GfWlv_#Tm|YquYS{Mm01m z7pm&~igH-QI*D_nHJRqfEcJtZIgF8&MyfbSInUrrSX;B$8QF#ziLWKy($-DvcVt_% zkSif{(=OTXE7pptU(&`5@e?O{$Z2-imIv`Me9N7Yhtx+lX4=StfS-OjBb{3083j+q zVxH0PnksgOBDquYPmX#ohr|*xZhG#0SJj@bQ6T;YheQ;(FRwiPOJAEs~U_ zsS)T%ldMc5HtaAP=V>LROfNy5=trKZ$~?Ou)LqtQy`Qv85&g=Sil0B|Gμ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 diff --git a/app/amazon/__pycache__/patrol_delete.cpython-39.pyc b/app/amazon/__pycache__/patrol_delete.cpython-39.pyc deleted file mode 100644 index e920af753efecd56d3c737b52f6b18c40259eb79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 61838 zcmce<33yypdL~?TYgK8rEX(qODZF7BZ>&wb4cK@AH%6vy15II5UDhedWoz@TDub#^ z#9+WSU~o4($RN>d?tl$6-O!k2lFVe8^gPp(^dyr?CX-2!Wc^E$KNIqF=uY#$?|1IK zb!(BKCwWGC>fC$JzI^99-*(PP)YnHm_?!OYzfZlf-s|}rez^Za_*jcy`ggq^kMbyQ zk0+*|-k4XujhKO_(c|m&$NXM~`FaAqfmlG^{XN0nP%I?xfu3-0O{}Ij5{vZK#%g=( zVs*Xsv3d#f_B6yAkT%%U*xM9q62DN-wBF`ebMN%nbombVwDiu1&FF27wc@)bHd94n zZK^glOV!0@tNPd+)exJj8e`|Frr13Aov)_FqTL?V{GvB@0iM(GoSzIO7aa1AEL1I{ zUNvKmC$=cLIJsE04jXEwYP-)LyD)j7nsvwj3-KrU4rLAJTJv_5uTUfxfsvO(UL1r)32xtV^^Xz zUsX$Dt5tjKYk01~^QxqG=_w{E| zU8&9lGn;t!8U9UPGZ{n$CtK(M>^zfUI*o90-`bPO45U}DT$xVx^d!yBWM9Ti^sGqq zCQ#~%&i)nIeJgthQ+)>z&~FZ|EWRB`CGSkHRA!)D6i8hh?Tc^&)cUHf(X2T$;|264~6{PD!2 zZ%iD0M!v@HdvxrjSI3T=Z1?51-8F!2N842D!0l^QB9mCYFFAPC{2OlC9ACd~+lKhH zH{W*c)^E<=wQ^-=BAx2%U%oq=$@KSGaTA^F!@fjs@~ZhsWYwqU@5=44^R!ZQCQNnv z+LZd&<$9f+>lfE_>FsM1W-76~C$T%(bJhILJ;?)Rf8TP|e`nwPU4>A((@YIy(y@9p z-R$p)t7K0ylLWB%*^oleOlGoXUnil!{^Pq3zxDW~o8V+TdCwfrUa#^h;}`+l*O3ck zGhNHCBv>c=I{Q_suN!$rwy)o|`KBH54V$+WYRqIp#WTsfGVNY-9&$P9F&E(R*`*s+ z?@S>{a%ZQRxDzn8e4r=Wo$A|}7#P^8;cRC~WmgOg7G}qL`jK6Ue_Xe15vysy@pw(X z=g#lJ{6U4{=}aP%O~;klKfvyY_YWldR_smZ=1(1gBb;WO=u~k!d-~H!#wafa6DHZ2 zK_Se85oVQTkw&l;G}DZ{=(DN+6&i=lxl-V2a?N^DOcxO+l zb033e+exyW#0c?TIEn70wC94({@wu&J-P!kG`>HJL~+j1cqY*;Q7)W1ib^HA`})zV zoh)aenMBmyWS>f^cz;({(u@yiRDsf*UOsm$v;R&hbm=+sDk*m|fYF^KWKMFpv+Zzp zs*84}mwxiz_s5=iVC=DbmRz%X?A^D=j*Lt`^HLsf6K5XPAMM%Ah&_Jv;O(D$I6QXG zv%AKhduROdA5RV+Jp0N$$l>D4;fx)5VDh^!j2}Jr$p_DlKmF0fOYe^jzos)jd-|2} zL-$XP{&4cdi=Vvr;MGJl**Z95r=I=f%)66Motk{{=`4LedGFZRqo>CnKPADsfbpY0 z9y|QNr;I=G!TV!xerNo_mys$<)W#wnKP6$4_aB=)c#qCYBe?rtn>_TIWXopVGt8Kr zOGq?+e0buW7bngtKpn@Pd z!te_wYl>kA4GsHLSk)jjQuLQJ5mgJ{+9}f1sd|Lgm8EG=jqt4(UtLa+b(rOGYSN^p zAx1-4Em+59H60<1Q%Ks2x+}d^wzP4!nuGK$ z2rc%^To7aDsd@09p<1QQ=c_2bT9Y%oyvb(xU4R(#)dJ+(mJF(esO2KH7%^s9Ul*z+ z_?lgjYr9$s|2fIIQkv95^1nzeyU!0|>^!7zRV;tGT7j7JT(x3ffXssL`D}~Cx>#L; z?N5CTfD(d|^X2La$$5Tq0a7hgUqRkis;`RQBJpb$zt!q%;@0Uds&^=s}1m7S|#;HwFw~?p%%-EX)t~Z)pe-l^=h-! zXgS(a8eR#lU&lD#pteZ-6&3MIA)9&Ms5&I>O7>G(&9)-^CiM*oUxm7b(7J8#+pczq z-^EkpZ$lOHzggWPaW9!7uFOD;7~|fmzA14pt>}lKx((qmb-RRLCUw>0zEkZIzsqF= zgEE45sJQrDA%0&$yJR-V3}c(Vr4kZ;WksDT`*Sz?vr{RF|5eFvp-Li;F4Zl5tHp0x zlBG23nXFjG9+i^tuT?37^GiegUf`B}sz+k3sfbyEAEbwRRiDJY>Py7!R|69F>Ms#@ zzcMB6HHa%Sh&6Q0%rtr-qp}ibE#fdVs1Bg^cdEO@cb)Wuo_&L8e@=Z{{I9JjUBh%< z4N3U=DZ=kozailptkQ~ob`YiBqwbZ^jS{No@*#Df_-&G!6yvit_p1ja?7E85bd3pp zht&~@bG_u*jP@NxNe`-r#CNmg+Kl=4^}RO`#{gy@M))!Hh=gyEa1DQts^j8!qiO{W z{M|z1W}6GTG0_LgC)zLFH4y)~JLP9fz-SiY)7tLn1fMx`QA>u>DH;qhZHo<017%4X@6+KGAb z-yFPW;*FzYAKf2axw0>DAk{4#=kl(^fqpZUNv4t!Le5#(uI#5d2_15bC=p|(yvkArjuUqCW%x!8BdyK?rU}y zsXp-EV7FOg)^&MLs&8NVcFiW*fmh8hmIUU{DL-Mw8vqzAC-axgse#Vr-PzP~hoE2H z3)W)(E^{#&h&qHQ3h2*fa#z?j5MGao)5(O{x#!ycyVm#jWfG~rq)C=^Um}Cd2C|vu z-DZDwAbSBj>fN``e*E0n{Vz||MIG(6Ci&=sUqk}FOk#Jz2S%mfzcZ1_6lzo|J@dwr;yEzGdsW4I8(`cWl0K zcc!mUuNxOPlilEjgd^0>Le_G2`p#6Qb5A_eAMcep zRV;WX!qcK)j?RC!}0%;{_1 zf%KSoGTDvo9`VP7R-t`9^WIGDNSz92>i0I}LC~t2W5%fAWesYSq}bn-X;ig&<2la> z=}KT*}0~U`oz>a^}n@A3ia8@aW{|kN@W2y_?Jx$k1FuXBC`+(Z7#E zf<(H%FSo>EXrr33j@pcM6i`ITm0C$A9h`UeGS*5sva+JbpS@QzNE460hH6Zld3EB< z8yat{j(&Rx^P(;Zk&&5^i>O39qnjuD)>3M z3X8UE-o9gV$93`TJJ#*Ed3$`rwyig9*m`S6eA~u#8*Z}!*1Qy1o0rr1DxKAE3Zb}} z?ThbC7ZyyF$JU!RcEq*3qu_(!tq@4}K-gE9?vx@iHf-Fo?lzf%<|WM7zZX4O2&ioD zK)O)3E!)SMZZyq)v)yN|VGPI&6AH*jgfr=EPo{j5%%vP7UM5_y$6^3k=xKs!;m5>i zvL;IeUk%BkEfCM=e>Dj)Hf8smrquyK>ErICQ;sJ19m9r&S&p)VE9vxW%WewzO5(9Cm%ilV6w75@}^F@I@%sEw;^pIs*zq<7i-B* zoRW*eEQq2^EFqSN$sIHg0vU*irWzn~D@te&%2=D*@ow&5k+m`gW|9NW4@!!3QMFQ% zl8piM&eCCFO)1bs6yvyZ|La zfsyr?%^64viKOT=Vq|<4edBRcA(`MvC=(XSBarcBY9w_~g${u)ANBzTYGjF#pYqpH$7)URONq}U|o_=@i z{v#HKeE+G*$KKaiZbu=INoBAWLZE4`LmmZR*6cCwz*~DnV+D?t`E>@(T)*|ko3?D+ zu@P8g-KHJ!o7P>oF@E#5EiS~diIItq3p2iP^XBz8#BbTW@z!_|3lu`=;Y225V(sAs zDId&v0s>PC;T}YiG(|`rBZ4vH%#L_-E6PXl+?jMvIc15mzhKG+(yKDQDpQqh)^o`{ zKw}^O=H$T_#$R}OV)!BVJjDn?sP)$ehsQ?_PrUI_^rGna6K_r)e)O*op3rMh_DbgG z8tRgqrkKJyGfZK>sgS&|L{H%=z6V6icY@rB<85b+2fC3 zHXqm0(1~ZTv_CL@`tk9nADKAw0B5$j3%OV%2`6YN6;L%XXyLI(zXv#|E1$u$w{656 zzHwv6hK(EITQ_Y2$$I_P8_Onf;c}5*gFHQlgj-=6r+VTbRrf%eo;mKD+4>Fm^!bLEcMN~1jGEEUO^xd;__cL)a2)!T7>@4kK~86;2Uvgn>CoK=YTo zvK->RY{n&U$EBa*Z-G0aPz#q}36SOAz!Q`(nNd>A_j&TZ4W2_@kOhA8mW*%2PiA){ zkoS*zGr_%~yohd(8S)NDR6)?g)P9HZz7!!WoaKsRt>*6?9DjYZDmZAGR~7*wB?R|O zJa-D{f)v6FkAQG+;H{)VoJi!>xkRVQoOGi}yXJBVC`bv+HaxwvJZVrg3X0~Z=&S? zg`X$4v3#6}87kov3P^af4(SzZdipyPJ?X3QV&^9eL)ESVK{R&i;qfQl(WrcNRFitC zWcsRa4=syYP(k`czDWk*0A76vcA(APyx!92%o40msci0|5S&OG;Z**+U;Rsn{F(~Fu z$k!aCv%qmULCjm=oWW0&#vV{8*~+RCX?VMcG_F3XyLOQv9)zO?2GIZ*cBG`z5I8MtM@s(@NxPV#{m zHlTDsv>&8J0M8(PA!Q7Om2U|A02T~#i^fn;hLN(*P(GC2D>+!4Bm^(Pp@`%b$%nvS z2J+#2jS38hWqt^ef|4*(@({?dJQYITp$(qn-d#OIwUSp@($}h*S)P2Yip=ti!ng`) z0{DU-XBcW#r^ANo^YzNu=S}}CUze}nhkVSRB5u%*JJgT~3D-SUBv zuucc*v5{|_2_OBv#)IBy{EBBNjJon!C*?Q0%5OwScoYU?d7qk|WgUMPX?*(vd{Zq$ zHIib6q=3IuThB;@{QLgjMsK(5GZ6c)q#Zw(_^qxIq=oyBppWeFj7XfBR-QG|+k}UT z5o~YM0+Et;wG}@%+RyAC4VA25m9u#fi7h==n=&(sS=nIP~FTV@Hp{8ffg) zkH+5~r5qmmc$fr;fGbM~*79X&<-vAT$yEebtD}^9$Wmub1bMFt^$0P^4d?1%Gt>#g zpcIUYz{+0=Key0Im!<2g>t3~#_HZH0!aHE0qoo58Eoazs^s zRuFLtzB2upM9&6^tqRDZe_)#k^0HiRtWJ66C3kfoPo8-Eh4CZDtJZ5-wAeN@IoD#D zp24=O7?9<L=br7s7mH?4`r7 zK!K6T6jduPY8gzZVEKn?WGPfD1A{RQ8z4BR1UB6qX-3u2$Z|n+_go2TkijQGJ7xZr z73LHHNljrlinUZHn)X~se^oAPBhe`!qAOUKYpv??Ns+iMAQb9!E~EA)GI~5DxHxYL zGb~H6Qqlo}44t=Q2o~>3^*~hx)2o!Dl#%Rx&{An(RS>3hu+9=ucKb9 zR!dUb#vAok5duo-LURwX7feaD{TwrowOM|4Ob7eK>Pz}DR_p4-*tD(`RBG;w3N=oX zW6e4<_auuoT7}y4JyyFr+q2KAX~C+fO*U2Ii!Zin$o5%Xi6JukdtnLN7r%24_$_*) z`*cak^iR+q>A!~K36a2;|6lrpB=@atT4!BE6#{ygHND5#i&#QtZ0q(y4tl+Cn81Y*FTJMJ%n zVUpagST)YO_WgNoT{#i{Yxh?x$tRr-H8kmTi6j0Q(CmkV zD9a1;+>u>{JoMsWk>@gvwG!#<=)+Y}PxfjiDvfBRKG*aISZnH=Q$0{r(U?1top}gO z!Pk@Qt0cx_46nxjd=~-RKnGaFHdK=s@)mFIvhq&34+>j8| zFX9C~3ljnKEEvOdE97!sirzC~OhEEk#=#G%9>*Xcsu+KI1L9#kZ228Rps`f`ypi&b z8UweGASYQVGQa~O>x1SI(w6{IV9bzzQR3$rsUs;UC5A!91vvH!ddrkIA9$HuS8a#Z z>$?W&llR`AIQc%7mhq=XV7)zl^i_=S#2e2+7n5CpR%s~E9`3;f2nbrjsF^n-p6(@) z4$j4Ak=$~XrS&_v=X|?XN3$!Kxhv2r!Uh#P^JP(u9Z^of4@28zuF=-4VBMs8roA58 z@jhboo>Y!@ucEV|#j~(@E{Nj#C)}}?6PD`~w{P6Cas3Vm2+49=Iz>U`E;-?xGDh7> zqt%O4S=uTk0!?h1Q!N|KiO|{<(5-?s%_orRHi9ngIX!}@!oYeO8#Nd$0?1T5Kt#Q$ z9Gt5zTqVK|!mq;wQg)MTAk=0=cyX(zZm@#Ca$6KYxmwGX8 z*@r{MZJs`36>JjBwJm~X4ELmj!x-6ktAMyHWVdWkmfS$5$T z7y-blA9E%P0?0BLxv+hg+06P9!*8-Hzmh&1;h^)$ESc0onJ>|y61NbtD1_ofu!T@; zJNLz~sPZ1>bV##@8}Q=6($^xG*bj|aZgDyAYMD;TA*FPdP|YfF#Mfv~{EV$^p47!-=6csw*6Y~y& zb-1HwiIHn{ce*x9O7F|=62{X4;y=6QQ?AB(xx76~e7MU(Z^s`g!;HYT=yZ`0&M4aQ zY}j!+7#*_3!0OF!5A7=UpcW|Dyt5D{AR_$c>nObp`P%?1o%IUCxw>g*A>LqY zFhwKdU_C*zCLeGk3kp<$gDZupUyw;jk5N(MC~KZZ_BPpO5ep#BG&!L>(B@xZ6Ko7s zz7#C$Azy=r9=+_-DjmG}Gk|1K5`w7H2qWDCk^-t6Ky^6pcL)c{|7sxnVJw(7<$ZY8 zD*vb`cu06;!m93&cY_D=xgg1me9(MF)%O_+vM^1|P}Ml_o<*bxax(v;NS`48LvD>Q zw)$JCbrZ@Fa)kM)X)@QIln~0mf@&INWuuS^?tfBJ0?i%wLX2$Jd%BC@VZB@I{Lo@Z z@vQpPOMivn*FY&FtbW1}Q}Lb`|B zXLe+XBP#_~TIiuCx87&rB8;+^FpY>s+%Za|VK(r(k_jr&q6?q-2(l@rO=MoVjoOv18co!$n^#Q?+F1?4!dJ9g6)B z2>@A^vRqG!SxvnD`nQK5{LuNiWegNBedj}HubEVK$Ly+%O9>IXmAM4WL?5=WIuueN zT1*EbmWDMtIh6C3Rox6UO7C;Cm{i&B1{sT3q*{Jutu34vC;g4BnvU4S+6*VM4f83~ zrM;%Od=-2EHUaY(EK_9zpCgQ|C^0o~$|4G0-GZOGW_!*?Apqh@D=Gw*m1Z-l(@piyb~UV8MlSzYGSA zpI7Sbofb#RK?I;3M(#<$xeZp!NWwZKa<@GkOPCSu`X3G|iZs z4a5iaBq&CZIfr}$o2Zl=@;NDXJ1KlNl?f6E%gFuQrWF{b>N40Nh$k18ZMm5Du;Ii= zrjDZ*K`ov_&0-j%lkXlUN0?N=@Lp5axTmH~q>|9e3vG~W=NX;mSc&wwMk&zs0 zHS;9QQC){%@2r?bzWes%!Dr8Yd^q~`?NJM7?c&;#&?V56$>9c)Mu z@tY^ko_=ETonLHP&dCE zmVbcge@Ix?T)Q^w@xxRhNHp=QpdTy`zKDD(x%R5fn3`+ffwFQ<1Zi^Z0}Ux~=0aQ> zgB=#%zSzyTD|78{E7@X8Sv`S0Qi0m#p6I5gV8F(&635o_l`s z;6dmpN}=rALz}>GuR|s#Nf1av#J1rAYh78twPVxfZ8yem+`3`imiYQDG|jZk8eU== zXRttT0I9r8zcQpjtA@X1M>8%t$|m4zFf0`|v|j>3N^l18MG!v+XMjd@cuHu)efm33 zzOs*KcGLs9c#Rl4tk}O0`flF=FF8tW=Afx#8ax2kkP;@R;}=n^-vEx-?%BT(IYP%S zlyDO$ZQvfz=g7yV&jn`$I)sKS+DOQx(5k8NM~`D?aLMGhcA5iM2$7~IBDtGgmNrh< zPbat1e6SvqEGV?vbimE)*KgeJ7^;9l>g>l^6qQT5y}#Xjn#pI!Q`qY-+D=d`o$ej* z#UXYvv6l6a@MUCTNdUmE-pRDu;_(jRjS&uJuG%~CSwxE2%0 z1R#Ej7XX1b2Lqr|2~OSs7%UWtF3l*k9o=l2*8?18W91gB7qB(6u?jbX1@;f_(5tYu zW^Vv61u|fF1{6wwtQYw$6C-_Cd*=NEIYr657p50Mb8jA^3FNz1@)b$Y{=LYTQak@3 z7_T9i4?t>17ApYO25h3mScmQoiPR2H&i6cJ!NHE)eD?~Fz!4Cc+i^_ElC{`J(wj=B zlgceD61qU7wm=a!2#Io1;Lt%1<$Fn>z7vtsZ=w?m(;c!3juiw1rn1`c0v1u| z8$6)Xz^*1>5rqMB1MF4|0NMsALrcasD4K<$bQ&fDd;%SstP>5pzfh}^`WO)ICgYSX z1mq-?LU0fCwMnz!jY7;df&ifrU1R=Z`rRcdfc8@ZST^3L*YAoKHeF=WI>Q>$nsM3w z5;&0P$tKH(?01kN0!g7>hCx!2ey24zhl><@8{Rm8bw+MMg^0`MSBiiMdRLH-sD1zn z&L7{oV)*b&FM%Tx1&mPMGthwk^&N#6{jjHtgt-5{a7IjQ4{_23IzIF5OkX5(sRZ9p z!0E@2Q$_3@VdUB*cHW*NFnqcN!@6IDV<){l&?u<4?_s$eK!QRD2eNS6@b8MBx9Gbz`;6--a`fL&Y|GpqH)OGdT4!Qnlj*Q7=YjdMq#!br=bQU1-kFfYt}a z4+PCoP*ieaWxWWom*C`*_AhsIi42++o)Z8-EB+}S<{!}^KU)aMhENM?3ISLcbnYpK z(H|n>f?~rV3140@8a5=BEuz9Xm$aQYgA0|k{YkuNDn)OUB>sS8&ZbPbRnP3RYNbC~Y8=>@E_#+<|nhgCz z;&1a!;xG2Fke`d5mVzU(OPXp|3D^aDWqDH@e^N0CLzv@_d?Lo>(G6Q~jE+C@BDPnq zj)2}2xjbgU2IO1_rf?DtjFC7arz+v>=?BN3eB+akN5}6u%^a{gZDQJ)uB}4YCg4y# znuJ|cw(F=ovPH&z9XaWpM;A?AONLc5Ktm zTy`Q-bqJK}oCcIG2eTw1EFqYY3)2LWZ3Ju^0yh91wpH17ph+a#V!P@wMPeOW0*O?2 zIFR@s@$m(act<59(g*>17&0|$ySXKS)}leKIOaABCT)7TB@@PWTwf-#x3&}tCD%IS zaIYnk4k*Zh^8w_G9d7c(K74sX;yv(MH+I_(`yt(Cesz)`PBSS&wLovZ8+zIE)y?*0 zw~QNr_4bDGr(PZ(e&Nf2vH6$C+x!-tJKz*xaWja`=bK<)rwY^b$ChNG>qg?0WE%L# ziEEBA)i|8&A~;nmSONL<8uI5=?tFpvscZtAdrOVPx1@!BTJ>o2r}N@_5@|3E)`3^W zJpp<{0k^9aNw^~H7gki($hCi`V*Y@xSi`KGxnlkeKRHt7CvXbbEZaK(VMh5RIe@?` zIZ3!|luiSQoP z+rzz^mH~q!F-g2LxJpQGO_A)pp;*0 zm*&`ye{}A{4X`m?Z_=*UPwUKrED@{Le(24hW2b+7_N`IuJ0E}i^!UT~Xx)GG>xl!2 z?b0)xB-#i?5PWp|o&?T|Bg%*IkMIy8!VUqdMC|yt$lv@sIJR!@|HV5*l4f@WKD-_w z9USTgywI+KdQPgNVHPyAVn}r}N)R0Blv?~`sr`MtNT*XR*Fw^q(iIE^m1Qr1Pt=-z z5FJD&mZtv-aB055E^ui+aB1^0M0Vikz%}BVntzK|^WE(eUJXy-)r@rC{x-;V4HDjn zi6cgkZ_O~|x>}SV`Mz)EJ6rOlA-?2W%yWMm%CPdpyBDfHsdIZ>$EI8@&ZCHu<-?%? z=7(sVc_E!uaAX%KPgnc!m>aEVy^UKgv^px>BxDcEqOb+%H}STk5Y!vjo-X! zUB`wv+#T0%cbPjB*WxQtUt1pdk5YF_`1cAv%27!Qezy|7qIe;EMTFsi>Hz<<$vuK! zB)8b$U2IftA^YFj>{tPxL?i;Ax8S9G0oLDgW(LrNy^Vob}E1C@k?I@htnO~CL#X= zjpEG!^Mc0%f6Z@FEg5he5Vr>Q1^Tf&Oa=Gx9EDIv$!MYK!a#0krt{&*rpDQt-&5fC z27pz#U(*CKx3)A|c8J1n8(O^m6Qs0QK&@?&9uh~o$wc@d%F=A#nhHEO#Xz{2KK2+_ z&#S9epWLMIzhG9Q>~T+-4+dtbw^A z$_dIhWsjkJFnt*|W?i;F%o&~!4qOXuV2JX=o!HEU?N;IRO$YP7f&|(l{DqaAZV&iWlO^jOP$>C&%Rjk=N3E#1QsnzKn|;ts;IH8k@Y+~0tFo~E0}!FNvl@584wKEm^%f!~ICOJEqaLRy@1gfWNKSH@I^TY8&gin&=F zX&K}Yrc5&98tFEd;jJ@mINpWDj-q60QZ3K{bzJyXGa3PWcPDGwxmF&}qt+XEI zeg^w+Xmt7HycYpa6DpSBg<53_{#qcRZNakvPl^F40t9^EN4r{nw;7cOK78>GQb>B( zE0w07#0<_9-h&SeFK{D(fTrQi-K5%iumgR3GQFuc!lH}ezY>$26O=qFd`R>mH2?+Q z0!We5_uF@>WxGUJ z2fw53yV|eO!Z;#xZ8G&a-k=H?p~s)X(VSljN6Un<0Y+iViKzw8f58|(p@TU<+$Iud z8BCE@{)|Bai2t2$WvB<@F3*n$Wb+Wn(;Q&DKydop4>Sbv3JkVEi~I{vPAGRp1v-ZlXgu;F*mIBvF@ocrK#EZ82|(j4_gl6d z!Q1a(SDG0l$AZM3GXEPL;%M$-#8GseIGbEoK{}+Y2iR+W$Q}qI1$XBAtFMBNjs@pj z>&=9+tdw9^WFrKY4^N@zL~u?b3w#cVD%9LpNj|aU=}f{EN64pZhrCB*o}m*+gMi5a z8S5|cTShv=7=m5&XJia$QIxx;0$!%xpI(hl6IcaJC`AecOSyHd zjTC+eW&RNh*W^niWc+jPqFkKq8u zk^RTTC9F_iG7qFOg{ESudP_|?zIhDQ{2v^$`FQaF({M@S^3{X|jaF<9v7>QL#kq3l z+6{?m-bCQ2z%&7r<&5n%d|+&GiVVi~3Q|8913j{{Wotc_FFl^5RjHU1V+I%-tH242 zBq$BcX0t;DvCsh?po9rwyr3A6k%=RF>5R|3OFr|qe`YL;W{D3V4g!KATGEq>^rPqs zL2k0vxK}}JA_vXq7$SL9BNiV==s&Rs>+qs`kP<$~^D6u59D74cV4wB#l<#Pe5LfIC9s&t_#Sxq=QIL^`r^3t+`05Rr0qdu~4f_qKUyyhRmLCuP*#ZTz_ z=X4f0j-Z$keEQKn`Zfro%3hD+y5QQaRZ=q~FB;?wo!{%Xh?1IclUIx8Ki|3*>O1&(TM< z9mPHZ@+CNTe0m|=JC>|idJQR=smT}wE_4wxT$Ck)+zdPMMK023Vb0j8fWOLy;g6U~ zsG6tv7RJD0tcnCpH8SR35HrkSYQYP2uq0z>M6(cXE8N`tiglrcUn2dE=_#vBkvSAZ zB7n(k@yAup5uKjJ2Ps}*pJ12`w%&aV^diq1X$%8PX&0 ztIgMejl%gNc`i6_!v{88`Ff%;(B>gwo)HJERG~C)ob<1)B^rbp2YQnsAUqTzVh^F& z>S-9CoDp4Ows4>VMb^52lYzT6-Nlq3W+C$RxX23PLYP?TanL!IEGe+kf->LHx#&wq zctoDF9GO1mNKD$^P+YHyRnX_?VOxYpuUpcB+5BX!3qdJbnRDnPxHiDIG8E8-?Ar)i zSK!6txB0LZa9R;8TCKvT)0&1-QQ^UiBER1J3*pu)P7$_RUFCp4EMih0fjv~m`2&(H zBDhWXm>P{>GW+)#=3=50K#Lb6e~E)$AgCWT%xfjgTDTmfxJfPzaVwlZ^RCR2|J%7+ zD?WDa#&OKmrmR)(Sc8KQaa9ihpsY8~LzAv9o2lqE5&{%=`m60j`T{5@LAIQ&4pWhv zx|hhe64`PI7i61WK`TW;m6%sVl@uqNTM!E(2B;tm^CrfSR6+UvmZb1ypxFgthIV!Y zXj#?Rh`BxDLZ#*`f)>}MTu^g=**1JQxK#UT>W|?xv0#6GD-GS^h6^7iMKT=@M3jGp3 zfT+;nKw|pDEuufr%0Q!AAUFW0hokT=Lmce>2Fe5-ro1?O2tx*cY={(pZ1JLx_#-}! z(35aJE#uTS70{N8K+QT&eQXeQ0i}74NS>h3i+O4~ycc!V140?*Bw1xmLih{Q;@rV8 z2$WciCT6h?=U|m5_{_XBN7Yd(^-i24lp3MEKUD-ou{5-or*0b}}d*tju6KD$Fw2 ze9~$qGn{ykpd=jgY`h4^+^jj~BgPSy>C+sr^b^$8_R-2(2<{#&P&fm~LS(@wEn0O6 zXX=G?7BFZb9TUzF+N#wLS5HAqR5@#~8e`iY#JO*}i=k}K#CPN7J)A${fRLz=u^RYkPf$>GnSj75_KqS= zI1^-C5QZJ*7vu zLf1jy5ISOv)Z&XVr^?NpPxCPP1Pp3jo~Nhn&ikyaoJ&_M z`RDmMeEHS9Sui@tH=rNS$4PPql)4Q(*G@%e;g|u1^S&jlQNng3?EGRF?w+#S@n)tT zw@`7c>#XvO^bz)uTA&u%zDGU4M+Vx!8>*}k#!_%$2W+rmxSJNECQ}GWhbT6u0jjOp z)syVXV9zNh8jgR8Mdaz#KQ~&rFW}n7n8>YZyQp>7%$%W7y zMI^9BC5|Q)b}4@86>!j)#cYfSL@~SX3m<{hlB zWa6`FF#m;;Vdn~(0bc`3auM*pK)`BZ^{>&n3QkGaa^%>x+wrp`KccS#!iClj1_998 zVd18{T{4iYn2WWvR@2oN!fSdGy}MQ7>i3;~UH`A?S1UJ2pUIz<)Zb=`1T@H?0W?-n zp27o_k9g?rGy0cNozHf`2W}e?Hnu;NDD#D8l{QXCHXVQ;Ut)LK7JE}m=OPCfW&g2O7;~Sv$BRmR?Sn%V6z(&{^BiN!8%zoDmX3Kt6Qd?y8WkIAA z&~$&TXH}%MVv*Ot?+;O=;GmMiO2%_BN=Dbr(^#-LqB4Fk0(T<}>4HfzGP?EF{K8$b zcfsz1wqV7IEJQ4mL-

4%!xgq>juOP=W#uLim&Buc#vuYD`^3M;hh^aGV2StXMZ> z=H%0%dx9fV-Y2ZjpWF4RD6eFW;)n;&t_B-m^4`bfpm0nNsq_M7UZsRWWR1eD&|(7f zmv%u_?62aU5MJ4aAA)h1%i?=4o>kllVzTK#bNu zPzVV1z#T{=9AaPxY0fiV5(G=CwO?Mv;q zwi`iLd?P|#YmZ<#;tO*F1Ei~$eDt2mqxLNR}hK>;n8Qu;Og5@NC%e*2*VVydto z@$eP)&P8rIpWtV~8v4+Z*>409G8bB+a2OgS2rQ~t%6$;vZ6j7oCvm~uVGQS1iprvFY?}A-xl=OmT#XdEO z1)AM_z!eMM0|#BPU>0RQpT~($5PUoj9tCd@cm$zN^z+mws1u<=RQ@$kOdav0KOi+r zej4;E@2a)-Y+(@(b!ZGh8Ez3L{j2A$c>{rklh)iqr*xYBFK3!o929v@2G@mVic>V? zQlN>>hEo#f5GOM#*_DustyqJtaG+Rlm|jh#2zFeIpjc2Q=_Ne<0fLrGSLrHC{YTX4h{^s5 zA0j3L~M*;H1tS(@TwBd zrzI}qA$mMF+sfPg2P@|%r^xx#6ghunmHZC~hn9m1L>TqyTK*+?YSflrP7VJ7et>VL zq933YyE01!Z{~astKZ}r0n=OC_{2tq>0~#~@yVEr7+f^j()f5Fkuvp>t#)*niT5NS zR}~;B8xsPF-l!R}a*fsLy`TCTjPkV`XWn@}CA_TSAmSKR!iQfJ0yNXo0yp~DA~$Zk zWgPyhC_FU;*)=Unejs0c4+XdY2ZcI+6stHQxmHvONC^lG;x??g>1MI2@d7P?prnvZ zgmDn7kO8A@Kg0s|0U=jgaWxXbz}QFx;%z$~&>evB)J|Nyb`)Tk@q=N8EkEN@h6~|F zfT9?PMM6isM~r-kC$rE5Y=|X?AWn%uH~FUZUJHT8d-<>iLWuBS+vmiukvP1w&`AH4 z_0ITb^EEoY-tq(sLKv~xd02iB#zPEZ#oND|?P|v+C}O}8yvKfY7}l%tp-J)#&Nzg? zALKSoZSdt&o?~ox8^oNLCL?|@pvFjG6kL)}eDkog6=j?>$bWYAB)ZcbSZ0M%2oWxW z*jk(zNERZSv2hL}yLH<);+8+0_>FZQ$17uig>k=v04R!1*=M={71FCQsl-{p7A~GJ zS7}2$#nf=2RGW1#=>!yteHa!qNHhcn5c3pWW^`z^u2f__D<^NodXb`^hk9wL!s-fc z?~7|>F?r@%8bGy_G!U6j-R%t2xvghSs&xBOyW2}L^&uU9(raAC0MM<_4^uu5 zP$qBbNL(<&B2bdtEf9<~>;^5Va2yT~wFY>4<6tnPH;SXqwym&>*BTPyXcL?FX&XI) zVDlz=NcRf)jDuY~VyCW2Y$9vj?|+2Iwmr3j}Ai&u7pOn#RJkkY!CLVpo1W{wRBBf zc&0M5^dWwlKYKdZ9CRhmZeEW{>xNX}q-9QTW|LSS(14YevD`C(&U7htsvuwV99cv2 zPUK?NJ0%iS1>56@k;;6oW4T zC64_^kqi>;RrUTPw?1Wmn*SFB|O`{)Rzzk_em7HQQ&=DrJlI|wSa z{u8=SgJ=2a|0+}dOEs}%CL;SHpge#NJrHh!9X=r5q5U+>71lc~QC9HWj|>jgRv@zR z1SlNyr8fxK9&Uf#Z&37de8QiC>qWxW6Ni&b_{L$V0cbVTpmsJ3qLsXY&fyjhlS_l(Tq6I45 zVONnGd#r?_(aYYb^xUZDfGu`)D4I(-w3pMVLP!rFI}Na#D**N!K;;5cn~W}Md<0ZG z%&)LW5s7s3tvFFgGW8O!*fAt4=KiXRq5Q8`db>Y2XXoyn>f0ADyJQGQ^4z{|c`UI! zx9i)NF8k`x&fN?w^-5o4N8X)V?4-PXyYKR2uBuS=F)HUw?b?%eqj@3J9REZ6JK z-4$cyjC>R=1@+lRG5%hRwlGo#>2pg+4u(n7;g(4*NkL70|1saHjNG^Fk+ZkRl+uwp z@h_NIh)%Aupx=e~BW)S0vxyAc-I9*g)3hDJC^>h?+HWtzwvagtAaQ~tM*7Dl58HqZ zU}b7FP*fR!?V1q|Rx!Xn$2gYs7m5%a%X&P;u$!EhEE+`Y*r-gzZeHhr(q`wa2w4l@ zH^h1p&wGsA1r;z|ZmLv*j7W7ll;;tAKvD1B8JMw5F~HwKJQ<~UQcN=-OThOk*EhwN zYx&)6UCOQkv|Cmo8dz|B<0?bJ6~s=k$%1iW9|Tz3-6wlD!A~QMW(V*kCF?dl6{UNu zu_!9nYj9N~A@+mNdn8tEjmea3k6zpge#l-b_Q`V6K7_8-$fEM@6&GnDHd|FN1b9pj z2km2IrS%LWe7lQ|j{#5Ptwd&dA$|RHe#A)si4K9coW5R&DEDyONw`y38N}^C6gf5h zi$A~>OYah_0uSZY266LCWKr-d+NM>|H8gzYr1s&L&ZAUkxq``#EnkA4aRkC|8bOlv zPA}E6Bss?uA>z-yGuJwcl^=p?ZajxL)4hs1`dPfl{DKiv16;=h~Ysq(EM~1eb7lI7~w3&Bu$7dDxJT%sgTp2O@J< zn09*K@$GNf4|+gAs@)6IMeZw%WB9dV31$jfAQi)@8oZQ_L1__8fiQH?scU(oVs6x# zDN{?PG#$vB@R*}(zBq&*3J@}n0)>+H;k#U1LJJUEhLJ)zIMZso1Sq6>(W%^5EAgXs z%=grl(`F4KqZ0CXQ%TK;aFD&GP!{6_NC(PmZK1;6hnVq)Y^+$%i#_DE>+nkQC%$)V#Uo2 zo#KK-Sa{v8FrW)JuZWIj>hdW*m-3eYTCINb1K+^nVWCwM?1JnAQrr(+h^sE<0T#_l z0Bo{&6q*LiOe?F) zn|56$KgS=gnIAzvn3HsP=ZuSq5n-C5Ur~2C>^cG*l8hrt}A za~B<1x(HyRp!qJEoW34kHbF&mb3c|XEo+087)MPW6TWUg z5h@VtTpm*hG8Z=OctTot%(u~_JlA9O-@i%@LdI=Jp(WR>xd5A=vOFdgrdne!ox}yR z_7~1s!&j~W0T`JyZMhQN{kaIg^}Fy|Xvv=v|%et4fh7u(;L;GkZew|5@$ znv1y2b8rg;@|fR*@QaW(VtCEvXjmtHC4YpdwfLp~%IEPUJuwJLVutd@e9DOV)on=} zlrfBBGF0%sKrERn0(XtD1?F(-9hyGD0j*wGI2! zEHxV;EfNw!eoi`s&q0}U)p-b?!Eoi16!X;i@M%>$rKG0PTBF{TKBy^-yMr+4UVt8$ znQW^Pr=;y_A^MAE-QW&lvy!u?j4$m#O)o_JC8}NG&q4e;)OIQSE>g?HZ!Y|tmZ3Jw z5w=3Dl(6$qpJG@^4;1~?D)iOG>JmvY&z&2342y}1^ z)~RbH{z8e5T&74R;~=Tlqb3{FMoG0O*`{_O-^!9A0`IO8)h0mcb?W;2uz@1BxT1D$ zsNIYbzOHVN5-vnr-Cqge@VixgQ~WOC=F9eYq3NbX#_YH5Q{R!m6*W{%jlDZM_Wo1)mV-~uoEdv?bnGSG zdX9VP|K{Mm*}AeQJVU!Cn+D02>g(z+k?C*|7o-)M zfV0S_ExK*_qTc0;RCLkxs~6q4deQdJytn73?TX%hlZk61J2UKGeC3Q?Q4mT%u&~MO zgGpoC1J5b&izMlT>KP`3xj1XHYx&cu* zLKzefLOYWv8KHVqg9FOyq<3Jf6cqHwy}6%|X;e7$8fH^8V1WJ?-GDB@o4=dBu)o23 zfbTF<CX5Na`iuY`sZV(UBrbj8Tf>tBY+ve+dyHP+P!Pvn`z^%**AL5v z2Qr+HYRCjAeZl5dT!M#nXdB18sL|XZ~)>&>y2?>u!%~VaJ+_K%;Y39i$_Vb;RqxlE{h2 z>On0Hbs_hTe8-iq!PP)^4^)T`(GY=^n1WA9Tfg$5``eab+al2K>GKlajuJHZ)}}2nKpCC zFgp{D#!#C#IF~Pib=|g(%^latg?7MalaIYWcI2tEqpy`k6gdiH9<@L{ zG}vIlCHw^uSP;KU@pGx}GXiSVCQzhUCQSkUqP`CsKf$c__Z)y`u)G1(>z_2tXE@7c zzAu1>$$k>`{@-F&YjN+YiWzO4lq6MkiLPwnYj2m%Dn)TR z+}Rg@Q&-^cKDdVl`TC4+mDS<0^y*s@5uR;vGO)TxE`eShEd(}h+qQLEA*egQ5Rh|& zVe3y58S`VQTAe!P9|BXvjL5eAh*h38No$_ z$=!+0eT9g1x)1MzrdFZ7Uc>PdEGs0-O-h+hGUKP|aK`GgM;Rl)8wTzw)G%*~eS7t> z8Lu$b+l(*s;d#DsQWPu0oc|oNBdy>~eFM)4kgG^wrqB1F_ymnQqm5=$_$Hs``u{Z2 zFdrhEW{7WKI)!ZjxQ-Aa913+>Ge!&?4`j!b8^w3Gb2 z{YT*@VO3UHntD;S*5m2L#^7Gqt`g^t;M@QO?F5XJ`3_DC?~we9NwsLNh?`XyD=AJM z%|H_&Yg)v*Ko944pE`a9zjTr zWo*rZU${Q8Txbr`?>J>NSY>!dYI$BJw&(JqSiBtt4L4GcBVJ$`3mTwU3b;938;c`g zcmWqzDHR^7Q`4-?x3wEQ*l4|as8QD$t!>6Nwp@3wkUXY~#7oxf6R*nf4t zPKC2bo8FYKN9+gX8&}hsF{EqEqrK=!&)%lYG+sxWug5lHzb@BKX+G$*s?~1Q-ew#> z1BxQwsAeL56E^=&&o@b4O{xuB-@N%o^kEaX8e{F|yYB1RvU1PSE4Sr0mwt$Q-Yk#h z-^7i>#|_ye!4W#YBvq4&&hp@R9QNG>`9@GF^N|`U@U}qbgSUnGdi126PUtO44aau-1EbPdKB#SdTjThL`Qzfi$gg40OkIihoDbOix$9;pp zjq}%WK2Gj&$>CCg^UE@`^0;uA@T4v$L{ux0w|43l>ey(<6~{nnA@4O--mfF?X5>9z z^8O0qHA}9B&Q;EM4-Ylp-3%H=o}^(c-)VPG6JI>FFJK0T8XfmTkBoVCm3szUse8O{ zp%bTWsyLvLFss|YDz^|@Nd4Fo&Z-8YNJtd$FE)uH=vc5gmm?8uLaN7$8Ttl0AZK)w zJjahsy!vK2$@45wRfpWGt{1SVtXo_O$L@c9?9uneT&W6momtbw#s;AWgsjNYV3RA? z_`Bc^N3fvk`v)|ACHI;|^%1CJvJ8*EHadRdp`s}>vHKwID*EKndYxRCDAqSx)n2Upyr_oaGzG!Zd= z^f4~lvX}y){{tdutS(UfFT-yUH( zI9IQeH}{#Zz^l+;CSeWRw+%E84!=-(5Tw0PIglr+yMXs!pWsy|R^qF&)PCdJqNJ{p zF2i?ec2~)TJyG55R%f1i76569e@F`jhLMW4qgD+SU_=z`HN2hMfY$S)O8AssgJ;)}6CRTfBKjV}3 zScYj*{oiNFRa%p_Tce3-l1vs53lSatlmcp0^sTe+ybSaJWKNw^aR^Q^-`|6ijWVf# zt_F3TM&BxLr_aun+}?frlQWOF5g2YlpLq4mDJ^;4XXm(@E%dsWGh~ei39{XuE0K)(tnW-x1%jZu<>56Z4z#Z5!o89*51d`BE|e z!4}~D;>B1rTGMO-`2u~Zq|o`(HJx9D=ymm!Ooqq?2{C* zq4FBP2!>j~owRr_!Pi`*;ho-1-VLY&RM5YodkzkTlYbNN)CX)S$3wGOAMs5rtk7oX zuMuxtXV&AFzFtcM1F$a&;uqpk5Qnf^@3;Z11q&ph&%no6V$rbj&m`3fD{{C&Eo;mB z%{`#BAPXctox!dVicImWktc3T$;iP&lnL(*zU)=tKvLe9aSUY!M;Jl+2TQyWmKX~_L*aj@Xqk|&Nv0zGJ``ccq>tmUn|VlT+6!@(0gEpcGihuSo1YAl0`_K>GO z*wSl`(-vwJ7F0OqsTPM5)sECd{^uR|c?w(&I1+Fc1K1*Z$UD-2U4wP`I&dCqAX{XP z(@*$>YWIT6Xkq!8M)DhnN^82#r+byI3;2$T8apjSz3I&?*wueI`Zrz?~XnCq(y^j%5v=R8)r}7ql=Ig%j7Dh!*pIc zEPEbmYI)#lX-$u6v8A=%N#|MjOuK@kmF@Z9-m&-ITOG}EVUD^5CYnC9BD`ys2*EHmoSyH|~hz5bt%jX?4wV zruxrlBkl!GV!?y{0h_nDmg{@zxQ1w{)KB!vyf_0nDzA(3>0$Xp| z*b(1;{nndwC`4T%My-PA3K0>8iGE5JltRc_M{v|37=%Hse8PcQ>4E;fbTZc5iIo~G zPb$#^vus(t%s(S+JWPk{Njdex_8#Q&p%CZ+`sRNFe)EC+dDI~eXa!oQ%cTUNK;Qgs z@y@593IFpswZDFY+xVkNrgm~e~* z-TxddD2k;hNP+GP+kI>l0}U9=W(9o&h~^+F;)%X%ad+Nv;&I<`$N}uI!~rkEmoO+B0)6+X(FytV3sh9o1wSES}%izWAGnQWwc9&&2XIf$Um(5+FetO?bt zBaL>bu1nB!8<$BaXmHw`Jc-mre>ty1WDMqW00KcLB@%3l9oIxPxa3zKvZ!*GqF6Hu zAj&TRKouHonSn*1ng5;{UxuLQ*pb8I$6j>U49#Vp`%=U#0aPUAA3q08(Zs1yXrsrE z9vmM&I`;l!K~s-eM@WMfYH2wI z<4=;S<}-*#9f(+;#vP%$#L(3_`_3B^M^B#p@Rjk?kAL#fL)OK;!nvbM7bC|VB;tM> zFXq3a^ILQ%UNC3RoOyoS@kUc7;dSs`8~~Yh*k{y)HD!~?a-@+@EiXHo&BM+V1(*`=85E~ z!64VcrJ)(9o=ZrpHv-;(7vhkMzzBL` zMgQ0RA{VV#Flbm zL$7PR^TqSW?-1s0$$eZ$$qW0z@-%@L<@u-h=&v%`x}; z=T=k<-#KT5EyNT)yf~s9Mf;D!6lX;L9X@h*StCjg#~xAGQ&<`z*nNPHz&;fmr5VgX zO9fsF$K{ODKt^Ax#d~BzDljatuz!iKF$R)L~PkeVoe#(rAq+-*obvx57`h3{CIz|imlS*}I%y}64jL2PR3 zBF?%5T_Rmap)PE*2zNVaL}C9;!;2%b!Uz|6n2_)&!a0D3$07s;yAKA;0Z{w_-2WZG z2D-o+Pv2qy98BDxEDw{1!IxZ^g)gl-M?8WN03_V)P4R{l8k2!zAbL9CAA+G2#799= z@}k)87^=(t6LJB+0Y$9_byhM$frkYb; znm3w&mWn_km zve)D;W9iGkG00kN-Lt{ID!v|LHA%!O83f@!uzTgJV4f}$<0uc&C2B^Qfw zLJHC#yz9s}Z`%SfkI?m!c>IYs$B&&_9nICP@9)b%g0XxDR=8YKVql;r)kzg)-^#sU zW#nXqO`s8OWR*kuY`L^~F~5Si?K{;q=*m_1?&@fVFd&n^&uT~ExK+5;2IfBE zc8*ATnFNFN|5tYYF;ZPs9G~C249l==aF&=S+X?%*A8Jr=L2`17b&3^k4YqH!hq#h2SH7oP~e5 z^z@18Q$J{bAA@-zP3^U}}Tyav0C7i8k`uZ&cQ z;}@lq2`Or1zpykKekjSO&~RTQ2aueV9j3u8{gsCZDP&vyL+?3%B~mdNF*jxtRh0R} z)!7e@Nycxhvau?yCjk5i>C<-)Dlz<2ar=&aqyE^vSN+H-D6a9Mkr2A;0H&vi(TFvA zp7PK0l>etfFXKBBNUk#wbqTe@)=qVVnz7FVb8la;HRBa3D$k*7rb{!I;4vT=#M-!phcz3#ZFWy&%MK@$`a>{-d&tCB+{R;G(eIIMCnnwF4R{f z&^iTg5?;rGGRg8Y-hq`wDl7jKOOt-ZVqzTlxY=0_-hiBea40k}u_g5*@pbQ2>u zLyX|={}%F!lSYQ|547Px2t77)0(vm80eY-yiryQe z2RsJ@B(^tu2v(M%3X*ujqlANn^Ym%rkj8^0RnX}mc$<#f#>BwuzN#^s18gAi)@H%j zQa$^+TA-Na&PN4BX@gTJ8ax!yGOwNyR*8fTFukC+wSh?>)2y;tG@k>4j3~iekZ)Ic zcEL?TJyy8J7J4BYUshR5gVnXi)nL^}tdTp~o0))_v`jeF-ZBj!wfUAg4z&40nSaq@ zFu!U&n$t+Rip3fJF73wh;P*^$FEhF(`33*Y=!kh-d%$Qy4n~bMGu4iVQnlJRw$Qy9 zzOzKr3g+b3)i`zDXJGpm0GrC~#ZPuBU(we(^>$PeM0<87d1z=>8(Cf9Ed(N(ZaWFw z2gY-rr-yGR2+Tp98%c$u9N>B_zK(4G@`-So6Bz{oNi`wzGbHbx*EsNy6DWwDdKjiE z$gv*8caHj2E_$h4>Po9&idEdwKUY1#TY&pI@R$^E7xR)-L3+DfM%q6uU@{tMag#o< zNRa1t{GLHs3ZBoVxyg7gN!@_`IS#;81SY`P}3rmi@by0|}cM(g)cFRBETt1E+3I_PGk?kkuylWTMrS=JM{|z zsh6{qac|N>0j}$XykhJVwX)sE?`9k_?TWqZZ=>R-y==TPCM9~WJXUHw;J7ChMoRn& zBdk1~aeBgfs+B>AYW-^&Z+Uh7R$bBEsodD|_OXV$N!;WUwl`)QtPa(~-~Z8GO(56H z17Sn0#+HWuj)uMvH8gQij2arR+_W)f{S#p-;=h4^(dqSt5RA%ZIi5K=R+Bw z1M>CAZ5b=o8U^1qSJG=nE@iFt-%?M8DCkN2-j<#auPF86%sojE)|%*o)|80Ut>eTK zI9TwzoA@zHxgBOxAfo{bG#M3eiwV~cCEKP`#6XKFMPnZA=hUGm)S;ZA&s0a?>F11i z*h4MddzOKEN!>Gc3ku(frc5pXW4E{CR-4~o6V6jh%()!q1Yah`hHgICB$dS7RP3vz zbSjif1^|pwI(P~nM8KLLmdJPxWfMBd#oy)-h%x+|Q*zn|5w zB0S|;(c=xcV~bP^0zJpwFRP`Ccs3Ovkk|#n0j6pB<=pjRR~K%ANi_B*Er%YwNc9b( z4ih)}6TXRM+rWQ)m;!ubOEmblR*9%#t30iZ@r@X2hHv@csz&l2EyEIXWCt<~62|s| zhgqgw9*T|3I+>nCt$1*gV#~U2(Y}1c0NS+sj2dcowg8M#%gggD3>6Ne#6b2U-HpYc z-&4(h1WsG5@Y&RS1e^e~`+8SSPC8>N+Gl0}$cU82zPW0tns!0Ow}Fzos3W7UB1+-k z91bGE@fs(Zi&c3&3ZfJ8xiopB1BpU2Vu`phZSd5&YNu-9j5}~t$)i?h8wJTh-Z~`5n>k_ZMUq;Q(gTfz z=t>C+!ydKj+zClQ-GqHLp~Pk|083dwA{apLp|RDy%8yg&yS;`&bJ}K88=(=x*7dLP z3rpxrWwVm{qlLtq z2<3i_n}Sh?BxDj@AXG`VpEZ@dSjyQWC3vRGmqb=f<80TI8syUG(Ee+kU!%@4D3NC|_7+ZQ_OTUDXk5l9Vs1 zrKOGP(vaH7eJnd;OWG$zYlzp^KEa)gp&Tdi@*LSea>%#Ms!%ojW%-XraSbOTdukmz zv=R;mS>w+#1RrPF7+3zmJH>LKLSek+zN}O&)qEeLr7`*gHCWnauS>a$)3GcLyNuCG zy7XriwthUxQP4Pdt2+OtF17UfO`5(*z4l5FacT%J?R$b7{f-z0^*DJL#G0zhMxKI{ zq;!_}qglz19bzXAE~YDd1r)&hmM=w|XzM52ve zVScNrNoIZEQjk8f*xOOP4OLDEKJhJEF&lQ=m}!Nk+iO~o=XqMaEk+*MCt&jvCQj=% z9)*-kyGMC^SsFv#7Oxc@;y101d@Te<%T_p?9#Zb8ienU09hFM;z^+Qg9oJ9f9l}{c zN9P5CQ#$&Y3X{Ub%Q?+EA8}4QVBD8gh$Zn$l-!z~T-DqgD&$?_WdC=v*SJSiNCWRq z=tx>*Q#v~-%bfIErU!76pq->sC&A7=t0S?nPK=k+^5R7Pe7H7EH>bgNf?dO8jL}xw z?dO?A^k z2Y_pryY3Altn~%oL`mym`C3@W5S|d@)3s6`XT)J6{onOcK9e5c>U{o}5T|WbUxv&g zC4BBmJ()u4s_Nz$dw*$VCM%N_H4u$Wk=T0Wn8UZ}>6d-T`^6h=8lp#2xm^cpN4#<( zt8*-EhxY6n+3DyrN=P)d*j)U`*%*Rf!5G@eeM!ZKRqRypGDUg8{o6Kf_-JMO#=%cj21)Jy>B`oP z9~=Dmwykc5?%AVauZn3E@6qu6nXe-%~NE z;%yaAtN4kEb1HtV;;$-RQSqRPODf(_@m&=^RAJ!{f2AYyjxk4F|H*ZNFwy5qq1b&i)%sohK+=Jxir}KU{ty%1;@WU)Vq#3^q0<5T|f#1Bt*9a$VV0S*0ppNkFM@ z(FOxH4`T-i1Sls}3GW6235fxN$#l>3>9adC=j`sBvuE$wGiQ2Y)gwFG$@UD{Ub-9h z_xpeMUP4U_K7IGQ-}~`@|39S~8X_Kij=lGX%=&-ucz(-=>Q4|4Tkx0P;`MlR zkM7NS66)KV@XE86(B#{f@X5D7;g|0~A|T(vL=fLvHZ%}QguE>4%Z3N)5_JQSL`0sw z+4@91(*4=!KtrNopfS-X>49w1Ky#vbpe4~V(3)r+XiKz7dNA8Q(2?jE=uC7D%t_1{ z=t^{XJ-2xDkRE=-qlb@aiMe{69(lx*n5Wn4QGCzG+XlT6ZyWJ;0iK%lW;`{g8;#0Jz zkQqqFH7mUBkTE!rDGpdoPVDxfLS`_R$IJSy1F3=1VD6?=K5a!0XR_JkkTKYo&gbKP zt0jME@cv|Ou#h>B=}WPQ)o?IfNFsSCnaLd(wB{P=fx-LI$^1~dFO$k9`wpdyR9_)& zva+jAs*4|B_7tJn8-$}ad&#i$n>F~I|mPD`gZjB(1P<}vl{-k z;V-`vfvFi$)2n;CJbOH*$He!D&-Cfu!(L+v(ltr<={`Jfz_Z_e4&Zq^o`ZbWL+URc zF8&ZzMq>77;@G3*$9}c$_n*8}{_w-8*B_Za`b_!wsi|{6y?FjyY{kUr(ek<1E?#(j z^2xU+|Ln=>AAMGS`9k^33vsu6`O{}Fet2@?$L~%Zf2(}%{izS$nSA`ssZU>^y(CvG+|6mOMN#jBS$Y#YC(}2mr|;=AQuk-mM$b^TcrcT@Cp9#5Pii2AZF`T@njAk@>9H;I(LSzPP{nz#>w)9v(qo0#CDo|_#^yZfnB?H^~U(c&(2Id_0Yvn zeq4UyGvuBA@h>Lc`C0ko^W|6Gx_IHU^4ZbqO=oW?&laN@qnYO7O)p}=BRG9MgD`{V z88jh~ofG#NTwZrD((dw)$^7`c9{ki1+;_&{#2Ug)-ehC6kP&SD# z=JkIS_G({6yuq(D&HrUs)4q&o!7nu*HqO$^Zk*~mFTZ87XvYQ`YRh=5whU6-Ekp3( zY#AGfU`wg@9%Cmqk=NZaHc*kRy7sHstOtUS*yvib6O=MHG5L-}2o!9`*D^6>d{TKH7 zwNm`D6F;+_%TNA2XyLMx?@X>buho+;6R8K>#o>AN8hhnD`e#h`H_*h4$=-m;c0nzU zVhmUq&@6Vxo)}NU*oYcRGMj!GO3M6Qm;`VPR#8HYPIzNlc0} zKkIY)ew4@);;8w-ysWzHyv$M@q}h&mofS?dbE$!JGHFGU$$>$=m}NYgOdctwvi6&3 zz5qPdH;^tI8q|$>>}fXxf+b@mgB}JhwyZ!kgK&`NPfiX%l{eaEQdiLQkQsUz^t0(hSZDeXM$EdGJ!itCUkko5 zzZo>^%+R=xG*nHk_2@^W5O7kDdG#pp-G|Pz-XLuw7kbw?Qg242w|~%^%=-I0#viJB zsdB1bM$u*vZAQnj;i~e~j0AN=?(=|JUxeHt;l)H|*By8>@3l>CM>K zEyde0&k@<#M!IisU?82-)4Dpev5BYOm^yhH2zFxZlS{JX4`qgiK#|(Hran78^}$Dy z%c}278KBG4Sx`xPcNkbek5yj)m9CQVRzL`)BH{0EkDi|V;LoN%{Av00)8$j|sm6YL z^oK?6o0=YMiWLdpalll+REtQhw^NUvFF*6trkGVH907N(u?(-KrF~B#sK8opJYxC4 zH&}rK*})XP(3f06Hlb{6%a={()OMDQ?e6n#)fw9N^dh#qJb`N z#2fVoy6sWpRSocAs#%&3h*8tV}naiDnJV! z#U?Jkh4bv-FQG>T5c}QthXlVB-0~rLA9UZJ5PI~v8Sin{?e^aQh3Yllv+*OjB%C5$ z=+s_CNN~%{peAhM@9%CDYQk8|97_>^zxAc|gOvpHK5R3X_Vgy^*prQeH3SB@FleZG zPt*%a0DNHqXa$)b)5bE=0&LCu35=y8dOP6GA}cD~e|js~{dAFt6afXEjv^w4CObiS#$sW_perL*6O~&)y2bW^r1C3t=)Fpb$fch_q{ty;XQY) z+ZtQ9b!#c8VsW44D;ilVT*?e#>U3~)11aNhX~irR>S?>SZP#tP>l?SMzp-#=^SVS} z-P(2QHpVsM7WB^e7J^v|A23wm9lLK?_nq6W`<7k!+Kp@1t}88`rL}Zk6}T?(y*qoq z-`krAtiSGZc{2r-cl)|s>#p6q{=3M#cHR1Q@xbS#y{4Xgzx?v25-ndi=R_xd`6EV& zL8o5*Z1NOX>=)%};*nG3S6(llc(dm8YRJbwIlUB+ksL~@^Wg1$6WhCx+7IE3AJF@N zu?rbyLKjdFnH;1m$ueH%S(nFK>Zo4e)lQB+o-F4RK!mWP0yjMUo_=pXI92Y$lbRRs z11Yj2_25Zu#9Q#2!0CDj`2HzCnGkR-L?^(=8s2F3o4sH(_$Dy!K@Co>I^^;pm(R{s zGJTROD7h}zGDI=bvL7Y=cF7Mwaj z_m;kFDxcrnozC{?5N-_~OeWQv?tKP9_?v*3_!4YeTCEDNUb7~X8!8s63-=vL_Z~JEY8cpsm_KJEN z@n?scN+~U@*_$(K=&cd2k+b1YWs^=|`=0ieUXg7H4pwbbir0+&rmtTc!6wxGMGDe1 z(+_fQd%;J>4CH0-3^tzEbC-zLaK!j_Ki-B-@65MItz+sLY-sxkcmagvNPq+m7A2+hElpPRT47z^qR76Vu?aXo8iS*a&T|g^y z-9A*_Rc5!&tV4Z2GwU$F5zL$-fk)A&d6ijG^NJAjq2hi|A$r<7{GYs@k$SJE6hr>` zg@&=lagQ^zcX_@KLHtPlgFtN{03^27vlcO+s0BrWI`^zjoxL#m>DlRr&rW{wyrP$5 z_-r)}<~O-{nBriYO|i+B&rXaTw@dI9Kc%J4!O}DL-Mxj!>R@*8{vIH6?E8Gr{_J4i zVVvl@(6(_Wg5DxU6{?nrpC6t0)sy8D@1fqQcOL`kOCp&B@e5qkM>p- zP|`Kk^@|^Vi~_7|;+>zDN8hL(ki09cbGnvN9m}Qe>p|!Cr?NfhmB=xBaKs>CH+r&} z9J*PY&*~n(08tHkRUUn>eCDXC7n0oRXU^_0u0e*CpENZ|<&XpeL2f zLA=nHMkAy(+(sr&oxb?-E2_7po1HpkZESd(a>wj|TNkKu_1Mg|!5jp~1KS9Ruy#ao z(#qsJkC!hzYOmePA51*|-s;t>g(ooTZ63 zkeqsyx&rhh>HVp`!&c@)SA7m-qO4pj8W5x8e)pl7#CYygPlz6fXIMhfI`e?dgm$yP5|E^U&aCyYyb~{05Sb$U|f+& zq5g1x9o2$*olQ8Y6cF!D%2>oEb!OxRWE5{Y zjfJMMW)m$t(9;aw1(pd=wgpgjEubtEo~7&brb6pjn}V^`yA*MZ|K1g zM+)eRm({k`9R zass*oit>b({_W9+6eW#_qN5RUsc0rTH1zL3dE9M_kUf>py{O;K?(VD?@m1R z5NS*qlMObA5^7(75QStU0K#(6=&hV+p&WMzAQF(I0J`9Zi6@>dpL$*mLp2WI^+n6l z@AoVn=vk`AmVRr~((i0qx(C1m@CHokz>suG<+V$neG1?Vood9fP;2ObFiElp_zLuZ zuL7!dSbz@@0vp3hpX<+N@&(I(I6a(K@QrM%aUFwx2EvQD0L|EkG{`OU(9aD)aSH*B zL0-i2b6^8k4Py*MzGH`1)<00Z*(mJhk&VF7zq$nJ|(C$p9u$RA8J zI{gD2JCHe8nMkM$*T2yQGwLc^u9#mDsL2+Iw{u1K!2N>-^$Vqi=6r9p&t<+rbjCpmRO>Svb zd=$7PJp>shfDVBTo5njWNZP_7PJ(7RGSMR zw%xPuAMOG1I}#|pr#FB*YMkTAKvG+}*9`QBV1E#m`a<&5Y(ItNsl|S(D?m=$Uq=vi zj6kOqKqqVhq`4_=*Ly$$$}`@#Uk?zOTMO`05Ad@H;0N{K;em3sSy*L!likiLlJOPlN( zuFzvLhYe=KY0U_m4fae(e&oKACFfR=wz;SmEP)p!ZcgL4ZD3u0S{sH)UB=pta@_>$ z6_S|wf+UM&lmN@}Ent~89gB;7*ljKpx)esZuiVJjKsmekZ1AlYVwbDYl#+`sMXbm@ zUPGXf`~nMmsIYAiJnWh^hc?_zs$oTZbGOo4P5$D-HINXyj8n7YA_Xtqo2&(B$=Ou(MS(2@UeIQ$b4PwP+#A6pfd`k^e z^+D)L%TJ4j8mb#Ifc#J@cQ+}oR3?{Sp#%x5x&t~dZW z!5TN~WxLvg(IV^J>oJ~`u>m~=Em{CqV{AmcNOpSa^`B4t1xMT&;pak@FHJ6U0?{)xr} z$rt07YmpStE5|W66VHEC{^S(s8i!953P8_=S&A%Q}{!d(ah!qox3#Abo5 z3+VZKnTLyOr1%CK!N?2=(zSxHn}H(5xQ}lIvAbwE-l!OlVV2PjZAdiQdlAYD9EQB* z%jgeS0eOJ_L-b5SF*r&RutkYF*>p)p8!Gw|JSrqjeT!R`x*`afvX0Vf1`0QhAoGJn z;aNmHVa=<384UP=zJaEJw1Zxi67;rfU0y91{>mTHz*FEKBu@ATbRO|`YW%(i90$!f zDrLxNM1cM^@+^pVB6RtVxi#p&nzpH-14!q%Y{zYQC^eFG81s_g2cEnJSWX+>4!BR8 z0_~x0OHv)oBbW_T!-HO6OZgU4&wvl5ZEeM1zR0Ly*k6cV?rfQXiWFxg^>_G58;ZLYF7KrHlX_6#NOuJnBf4{FDVo*j&;P=a99PLhi8jzPyh&Jfyl+LG10)%wwWJtR4? z>-se%8Mo`BbRLwXT>{!9vZs1IIvXvTXx60^$|sIboc!6;@n6O!&yG)?eoV>F752vV znm+S0H|siZVoJIaTeAjos?0$po;r}a4^r(y8iKS`MPzHV0Og{adTTkg~ z2g?65D%k;1`yJ?b>6=brD3H?zB zkV?9w5B2pNEM|aB98zHb2C}xGU&Ml6T;sIu$`SLBjrAS6Y4Cw<3e%?zBBH}7A|;5| zdJYgGiBA;5*`TgwY(uhC6O4#{faS)RK{V2*=q`OtOnJ7 z(nuc!l~Z-Lgb9l5xj%!wxC^;2@^n+`*blVW$k=ANES# z%7|3Y+Rg-=J{4MY#J79)^^eq5fs?9PM-6ZP)ANoMn}apsifNb?D)z8qC~JA4e>pN? z+M`6g#JPxf^?tFj`b5m6c9-v@R?6sc?3+YMWh{>?-I*LIk=u$&-xi3pU>}wCe_gHJ zcMgJn-w7!NOsN zJ1z3)4vK*G?k!@kzPY=kb?^J!hwNZmij*OfOA&ER`Q7uNi6`HAdHU$%6KBRj2*-*% z5FmtAeM(ut{J$87Gzj{Fsn;G7F*Qm|kAF1t4GDG1l|+tp@#Dt?<0BJv3T)!ZH>=y) z6f61e(XT4fDv)_DJX$_GKJoZRZUvws!Afn4ebMQRPT-aRzWm|hzIbaDDd`HTt&k3a z4UoHv;=C747>^^cLg^gIL0v&8p)MZb%M@Q~M%oG;fI=~q&4OOc!O#b+(ZO^)qJUUE zC~^SpWMOzHZ3WSVWHxVwxh+UC0tRAnl3X22dtk_F0kJB82jERX9;@?`Bqg&B2)|@` zlQThJPyxu#3I2AXiyl~wQa{;F5s;8M5Cxa1gi%n25wXu9 zplpv#DHccL}?@e2;@3-IJ+iNOVsC z1SJ=v3cKuZ!8RaK$W##N-CKrW-nO}09=iAKHAvP8+$hCr`hlW%Zy{^3dAVw8`99+` z^HT4ltc#vyjA}jsKJf;12<~Nq$ThjotM>jAeAF4d$bjk|<2eQi20S*7@X}9lv~dzC zR#Y{vv@yoZ%=t5>N9=Se)km2+Lv9JiiUdWHH7x~$p={8x*@&~FHrDnd7Ui}jizC}P z=q)X{%x09TKs>#I)@n8;$xs(_lgHvFs>0e;IKWs-4g1$(ZEnuGlQi}S!>H5K53^3a zUa)6WVSmBRf=9*ZtFc!t%PLNSyBISuf$;`kKZBsC0PqjR@Gv%UdUW!GpNUw8gg(VG zd%k@Kzzq4H%EGAil*QW57kvy~XW#-Zo4%6iQ7a;gHDg&?tCl4R?0Do0L=09?-`*yBEyR1S))Q;^uCHNzQUz&HxYPbc- zEZ=}~Fi@kJS`>(75C}_73yfJ0L)pnQXf+PN%0;AhBJAiRU*~+t0@G}o+bX{ZXQ=?u zE#{bXsHQ~rFqIDCFI3Quc}BvBkwPQwE7UIlZp4iAgZjmK*XyB?s2MV&hdrmm#=O&^ z60BSFFzi|knsnl1)`5!l$ts5MMp4DAEevz1kP=kG8l(Yqn-AdoXJ&)$!8DD($Gi3LZv@2(xjgI8^^+WD^N-^ayPrV zgJ!edhPDDD%{f0t2_=X-6YXXb=A*-Gb|`Sp0>mQ+ARcLg8sQlTNLtXJohSoWNV7%8 zSf_Vg3!`zfPM<3@=!1o3x5jynRS!hw;gOaHTkgV)9hoQM6nTa?MZQJ(pk|1Ul~k{^ zR`qNl#?V?(G^i)cohHKmkn|vg{ENhF{R&YT2rbW<8*8zVtPeBXiusM{S8|4--nhwZ z-R?OZ*cTgVGuyD%-Adhp*=et8eX-e&d0Ar9@$IxtLc4dG?fO!ES;l)nyAxuh)7p_J z>Im!0?N#c~SB!L`rycg(YsSAWEigM|r2`{#3T@E%&VhmndvK)FR@O8@{qX1ZEO(*@ zam=yw)S17U`C@A;?bf=`QkUJ5&$!9#l0DI(Uxgho7d5Ri=L%fW^d8Kb&(O`lSf|-O z?q$3%$9V#WGY?Nt)|m6a&oE!RzS^8?cIs2l8nFfF(FSvYz`eQp0wInLj4Ujz#(K@`pKmVEHv&T~LauAfMUsoB zp^K;CF3z>@$QSO6`G)_SJ7ZP3W}7jTd#13!T%=!%+OIIL=wE2o>(?P3Gp`t1q;`qw zvwe=gVa8;S$8fqmr~UbznB~}5r@o1<6SDvO#=V%KZ<=%U>qoW9{7A0N80nQJR8N?3 zzcE@OUiOxZ?xC78>PDKbqyGerFmwzy@M8G|13V{g<^5Z$WqM4b#h7r z!%+0eDdp^KQTs>V>g1YjR&rhLTHd7A(#c=A!i?Fw!D}utmmUj@EJNOQeVe}BTz1S4 z2)B%I?{pC6rpr{$!#;W9S&ofesrDh)jaCzC1yx#qx48_v=VpC}3+-fmzZo|omzw9wP&6Va=<|=b3;vDt2^_`;;wOew} zb7n8ov)@#;L>OP)(ri8ZLskB-@7Z@Q?U}wp@2&L9438}#e6S&#g3Xs=AnkO>*sGwr zi-&H#2HT6TAM zxU&ieIi>cV@u_`YSUR>$PO*&8?AwW3f%K?seZ-ecih5*kWb>f)u!bU;OlGxbe8BIE+IyoK*ky{UMB*?lvW;tEYhv)6rxNBz?;)vE=J@oVKsR<^wW|{uLD?dwf9mOTuQ^k^qMe`}-sS*Nx68{{ z*mO$Q{uu?K8iz%FPj@^9FPoU#8WokfgDY0YS9P<$P?N7&jm2Zd_KFnAuwt|_9Gevs z^*ofvtEuUPG*Dz_Q|Ep;_1W=Nim_1-;9Xd(w6)HHD1ona{Uu8^|YfZ4KeCjQFs5sYb#7oz@n}_>t#)jOH#+HWC<@N&y(njsREE0TH zyNkjTllFced{n(Xv6F5<7a;&u@-8W5FFl3@`89eoYb_;z56a49Lh`NdgqVVo@azk4 z8+F$or%_4c{yFDBkcU`DsIjZlq1<5Z-Xd=|cjKA}m=Gz2B-C&lIJFeGz}}u)PnO;C zu7lLaoqwyj%Fk0~%lH%}U|`KVMs{UkaBV@vhCQmQhbX;f_u%H4UWg3w%J#3_kxpAJ zL)7MOgN4b#v{Exz^^g^04h(N2LKJ|YRvFtwIRmJkS>Cm!tK2nJXhumdD=4i8>bxGY zqw3yAeLcL4EFUa097KQ#pM2xV^2evtgkzGG#$oa^;v1rI+~M)r`IuNJ#gGK}CjbRG z%db2FMXtIYMxosDClBKWhxqb}*b7FN=|Yv@lj3{hK?ZL!a7CN5O3*|inr1!<->eYM zEc_@ADGPTW9Epqw)BUMJ!BCc?-(cqV8NA5gExr!r()Uw@Bl>%z#Pnkfw#iE+WXmgY zt4Lo({oqUKx|ohybj_t(FihsxD9Z+lbBtdw_$7l682kzWY*BIZQJsMS4<{Lorn0yV zMjy5%JmQ&4jp_jaDBWsvOzeg3K@qAZnr0+g4FjnMpqH?#6v?3#5h`K`J1Oe|-z3wl zNMW#mYiJl(1{f4FS|MscXdFY?Y@&JpAiTf^l(VXs&_t_K5-rtFqV`C*zR$8%rHtzx zElG(6`WMi3T0J)E0)>Rv>(DxL^U zGcqKi&QVGpNW&N?rS}(cje?ZOC+gsK2S>WTVjhC>6fTdV@Q)(#->^kOW#c9We}TYi z$ia+HrcPAekp1DXBta|8lnOS%P*>$sn`akggU=K2)wM!42uB4`@6h#tvO*;Fx z2>ECX)aY#vSG41PD2C|P0BJk&w|bW$?>y+uX(h~Ozb~Ts#Skg%>++)MA<8TEohDRxFMn&jYw@glBqNbHXG{BIv;mG9 z-tbp=`xRQoy*IT_vz0^MKSmnp1VSa58VB7z=;V%X^s8N-BHj|NJfR=*F4t&g^^64s zIzNTggNCNo;>dV}o8xH)KW88kecCuF;3aT|oEEQ>>MIz3%{LVZvc%>x?NJ1Ojr}14 zWZoweZi%c7cQ)3A8-icK9_%a0(T7|$A5z>~@R$E{1QpXF8Wbq8E_}3odUqQ3-7qKO zJ#oCLZgD!84(icSjUol4gz&xz@9E1;bE74Co8As{q&j_R+MkA*5%Nb-qH{DTUfluQ zmF3Yx2efn}-taB|Mer|({6T&0Xg%+bL(NSvQCfhSaf2LcZq}E%xsfj&#jSE73M-Mb zh4<9Nms@qR277TEoAGUo$=J!@I}Cam+=d_?u(a(rTiTA@mUi6}bo%UtLjPD>g@=F_^to80Jge zOWd~M`Uhjm6X%pIY5AQO%8!0XG$}qEU@->3a}2MFF+a6~t71cdBKHp(y2~iJBhC2wdKFHcgO8;;|{@DBTqyS z$foa0XKQ?2Spo5=OcZe#9SGnFq=``&e3W!vyaG>3XxPL{2?pfQ070T*`?ylerfge8 zrxWTmvZ%!h+`N1D?YoV`h=1X|yVSHVcDLI@#7o+~7<3?9BEw*iXTXjKmEh>b{tFZS zZw3PlD#wVkfNMJj4}OocK)%d_<4)jGYH-_GjrZIlyy#DyLuxdTjVMEcPDcKh=n32> zZi3kxHb}+;I~l0Q5r?)4rfiHsy9KQmWB!ADkMSc8Dy8%Rda?D>;tiA`PcMD*SwZEU8U;V^u2iHOrj0U>#s>gV}FA1NA)g zXgIc6|3HBLu6joyI2OX%h4oHch%-lTQ@N4H`PapRYSx=RI9B+0ISq6zYxxX0oCgQE zYn&HDu9ZH_mlhYCfgc$AqC>9CeEK4~VMuS;uPb3Ybja1{;#LuH^GHB8MmG<*Uys18p|k~Kh-RZB z4br#8a(&MdxN1a|21Q@WKJuL@{=Vv2bTZMA=z~${801@YGOBG28im@CL%&%)N@;1C z%);_BqT9?Z(pOYwq3V5Hy@$lwlzwZ&zp?whzoy?SRqr@sc8`6~y1b1%?kd_d!_=!P zZK;vk&#O2?kn~+LGOkLzr%1_+4Zo@&+Qkpg!>zV_>gQhv(cGf~zc%r*Qw*yMri@|K zjmryoqB6SJ_v1<&+k=b#nR%kq7^H2*Vf&=xAxv5T!-!4cjASq z@i%5uDu%hH1(13bsgdzNp*eyYv1Zyd%Z9ShiqmvXSh&#EO*I1D^xy8UuPrURn zgnSe?ybsUFr)lGI$#L=?DR$>F+r0iAujqNvL z1=XAg4ubpib*S9(?;jk@8h=1k-BS?+GfuBQS=d>ykrlOKYG}QZ?@dPmKEB{&6AWyxeHE% zc><9g`V0jPoS(&K!f z9W`+&MgBUy-K4q@cO{MEa*#8cpfWGaB<8TiLL*}=CGAFasJisIF!pUkA7K7~Q8bw_ zSTH`QY8$2qGE-IKM2=B4Qi-`^)#p1XN|awabDdJpf|;Yvbyd~B5Xj%1k6c*P)Y_4q zKyyUT%~0&G2byaZ^t?#-WLrjBr1TYL%UG-OFw|qtd=}bhvH|mGuH2REw;(Z;f3O+o zS-u55)0hi46yv_IX35*lyj%;Q%Kf+)L_(}34JCf8t5sMm#$HR5q4h{BdttV!nKgZd zb}?>v4$5WUW*AY^kQ#_`X|Iy4bJv#NI|Hr6#N*ErwAsLl#x}7P5S7N1s^lD=KMybw zDv`Ljl__Ng43x@`o|rgubmHm9CmeT~sn1@942_Bb?Y?X9w^4cP!NpjZ0p(#ME%7Ri zcYcifIg0Fwk}THrL_l11iVH#iKNPS9Z>N=5Sm_)lUp!y_^hc1!!OLABtUV?L@2m3w z*xRx_DMCTsm8cXFKwA_oT`V7eXX@RDrapVF{PIs!t;)GfluD{@l|}W8806WL<&U3J z)B_ycNXRSk>F8UNKYbNfT1>tBt{?zKQNXD{F+?JQjH&*ssc?IU$)@DJYK_=i3j6H* z5DbesvMPb%aJ3086n2&xd|e(4;G)Dm6)ztDiXoMkBoF^}!p6+2>j8c2&;OWn4@ z{efO9Qf2DhSJecqigzgaqhKFyt|~K6a(=?^TXlo*krQlVMRIANbTBcn>lBkg@;PGb z44W*(h|!b~G@vr2nIOo7m`VBBk;RF(*%r`_*pNgA9Pec(D&HyMD=P@f4L7h`5#|0a zH>?MB1B9CaTWX3M6*o!=sxb#dg%yVAbqJ0sFrOBWJ6d;JKJc4H2Vdig5Oh9i(<(~% zDE%WYn}P8RsKGtwi0Dkb^gsrrBw5`+Z}gf6a|aojU+zB+`YEr9!p%-(YrMz<$POO$ zKvi_KBN~JB38+xg5pPBsg(bk=2CEM%Y2dX??BX_E5$lt3Vu1 zC5VS4-XQU?#2Y1EC-Ek*nYiRhkHF~eklDm5M!>qV9Br?Gwen8`8v5X%LZetXsMzdW z6QCgOM#Ggfmy87&}v3dPn+2S90uEP;L4_v zR=s_sP45_KH#OjR@4lBtI)Ibw%r@MFS_hMn&Xaz?%q50k z$$g8Y955+Lb?AOzc9ANb#5E&u`+?)Dn>Jgj<+kuK0XgmEQH?E?!(@x&sx=2l*D z;>AChvpozP>@hopf$sz}=EUc~gzySr6tD4#NT)nzqw{V%U1Yj)QOqrJ%ba(WmSB8Q zv(@a7zWTwK!Ewe!EieS?J_%+VI5Gc#>^(u86sK{^u~UC<`xnNeP?nb$H`jw_lQD z7T$MLZ2IRq=}zU=^NJ{m1RP3RF`~C^QQc7s&h_C@w^E*x_0X z=ac(6Ah}V+YA36hq@8qi>H;@2ewaYC;?-}jv=#NXrlnF_62=muvQo<2UtoERc0g>G zg)Be%cKOtY>WZBiT)06xrMIG$V&{c}79xrq-^4jw=`#ic5@i~s=ASt9gV)NZ&cVE; z1vQYYQ1(MF{CfI@4}hDAk#|5?h;8XHczuxKyXG?nDU(O;dx$|*UVh>YHJ2`dGI{>l zi8J^O3tlB8gvefq3PZSvSBF+WIA#O3fF7l={(25s$sdG0?n4pxLw=HYeh>cgix7}i z+1EJ&S6cur4{loGw|Ct8tagNME;yFRBsyd8(Zuc$-fFAYTHeeITxmtFr*eVY;)d;h zkLSN4ucx%Kg0>tUjWfOadS29(&EK%PQYa1!K~B;KZ1C?G{E~sJ>aP&1=G{dC5;FjV z6|IRMWPr*SzPXr{sn31_6A3Qh^Y377j4xTsH3&X$M*wQ^;wNLA>7R_c^j9lhsA;#4 zx7-+{Y(h}c#q%KBXdb5az{L;WnSA~H^oy^+T}EpaBeqX47 z*|>ZXR%&a?gfC~Y6%67GRx*%T|AP4z@=-Q3w=hXGbvF`0lv*oUCazEwG1b9G2`KF{ z8c;NXO_6^PPo4+`1=at;qBU$6ZDbTzqk;AJk=BAv5A+j60-%|wC0l^Y&?qn|`P^P%gZOJ4mgI5QwMGJcTUlX!xnhd#J?LI@!P2^J+kHpTf2((wk}FO0e( zgm#*^oJWvn;Chf?BaQHhXu>r}@JkS~=7W)Dh%O-2hTJdSf zmn6E}EWlPbB4UGk3Y_D4?9q{XAT-hP33z~TFU*%!T5u)+-w5go+H9gr)*ocio%Z@K z6yhnOh$mi~@9ctoACEMbIcQk-dVWT*1@6Vf5`&FX? z>8Sc20C9v}Xp?hOv-L=3D^^8z$zA|?jGoRuJ0N}c!=tO+9moHPacq!!uDoOqi)IP? zrxkwc-S8v;$%%FKAAtZUHzuR>4})ZvQ9dShEWTuP&S*&L{mnnI8-2t71+{@;tlEw6 zFu7#kcRbi3`ySui_m>%|@5oAsn%cnqJFLWiu=hs* znpuHZ5NTeehrk3OMf$!|y-^M<}+`;Q2BiV_9P^!2J5Tcip-Q=6riT)`AgK zkZ@h~NwCw_SEpfZVZ#rG0lHBWUM^r8f-c(-IUN}OD|@FXNOSefopPB~#297InHcTI z_%o|kWP{Bp@aHTx7Q2B%Y8VBfS3sL6e{@A^RQQHVc?Kom*kl`oY!$cf^z@tWlV&{o zlZzLgtfAAZQF1NQpzf87-SO>JvF$gnitX4PgKg~0J0riIg&=Med5pulC~~@{1OGA> zL*!dEdK;N0c=2no6=FOdpJ}g5?jdGiF+Ilr4os_vZON*nrRwq)(Cmu-jTueMO5)F; zsMLU5SQ*2*QqtKac$BCq@6Su$gT@!$LCNU4kkhTKeBvC$fr=8PAW#U-sx+72>_jOg zN}SnaQ7B!KNR5=Oq*7$CTvB5XvPk((Oqn#Ib5vm|8+tZxmm;51kqEN+OC*9yt4L~D zEL@Sj(hYTYo!p0`MrRL=SLLV#cW7iPRKe;OYKo?h9>vu+!eQCcZRNK7)JM~g+77jf zB~>zRa2zkOI~<4Y;4Jq*I71a%PiGQHXF68As#aXG!$b+GCsCXY?b|_%Z^m>V~g4J*YjgyXdh5k`c2HP8dH1-G?k8Nx?*QN+_gYw9%CIh zER~jafwFKW@j2>ZDd9eZ=imlW8p9VEyP9S9GuFp|Vob$N+{edV4E|>XR;#+!23qlL zLe@hFTP3W0n)!atfE*5FsHq2xzvd%UES~s6#dQ43h~^3(LE|GUOu257GFoyPR-^K* zafP%HvsEz{R)c*Nsxl#x%LJ?j+vb+PS}95GBb`WuQp%fI z*?0AzI@tIG} z@)X2(MC%gqE;X89Tzrl=7%UH-S(>>i{%uCBWOkz7m1u+S76_};jCW$tC^>h4Nm2%k zer-WO8B^j)1c;@TfLipd|JVpkD&C{EpwO`pVyt0~^tFq$i=s_PdD5;--p*wWLKV&%$ANW4liuN7 zpfSMq3jG+so&Qj#+VtZBl@r!7$njurrCd=rGzdQ>=udwC_QzEC)ZdvT-DqUwHd zCdIbxie5oOST3$k+^6)1l2%%08@9wU`IvKIObi#R$3%J{CV;SEfIC?XqL?i0qDvc< zU_ne^{u#wO*QACrYk0zXOIac1 zq?ec5#;hQ;M{rvxE!ji!p4nys6Q-0%5S9KF`U{H_W!zF)dHFJuC5@jQ*%adhY%YaY zsbOs{#V=nOzF%jbuIzq&BL8rPRLUcP{8ASPGaV_fhlqik7v7;mMz z>(FWJT`e4-?-^NLtYkT7HV2D!M+gmqL$4SZ%z`Mg7kV1SyHyPmqm^ zg{&P3M(YmqT9h_vSz3ycdRq+-<60g%<3{(P?)fUXFxy}XWp4B!?Z?0^%4lQn*^ z5UH?SF-#}srouSXct%nYb5n8YobiUFBIc&T!UaH-bs^@aLbGT52T4WDO@&~__?@I8 z=BC2ldmJX1r~wympwCe!?&fHgbl6TH58`e*G=Ru|y`&@VrbED_w~aO)^g`(RgB!B4e$8?ZhLZKT6@i{x55g;@BkuEUV$LLH1uA&#To4k)P`w@EEN$ty#cZ;9E| zU+c;HPOM&YG5q$?0;jFcG#{ zP}2%QO<`PWfqDcrtsDnx!nm%Yl@d@C#Peb)^MTCkW!xG9&#mLgVMhhX!J4{e6z&RJLp&3L6Ai{#&J*+G?NXr_&o5*(2D zReSf2-8*fUclGQV6>VX6wlY|N%uoXs@MUac!d}LAeGIe^67j6 zYHX#>!q0mcyV>4O2LHX3#(HGF3a2j5{(7R#u;f_)>Vj558t91Xe>7_4zwqC}Bd(pE zWBB)vupRo!Uk4V^rb(#dYQ{fBnTWCM-v>kdHI5~uOHe=UggU*8zyLNv_f_hc^`!G! zYOk1y@z<68y}j_|L8Nu2-&l@Q_MaK-W+1C0%hAYL5U~OM#*7~`sAn2Ad14hN%(0MK zA`Ym6M-@Wswm|NcH0Zmw$$Hhw>{*MlFB_kR^l`M)IJ?EfNyIdHyo=0DdwcnG`ml6xg_S_4*B#w*Hz#-EisvSp0SCuf{?96LxU}1CxPl zhGmGA0vk50zItQAw{Gp)MCiMj+^)>PaH(#q^XuZJw)Jb*U(>U8L(lqaW9zQjwC>tX z8`cBlT+Le8Z}Iav`0xHLKC5%>UV>N(lazEr1x`Ex~F{q-q>g{(0+J}pPhh(I>$et#K zieM*DGDN*hF_AiUlrV|gu>9_-@+W?jX`E2C2d-yqGlLr#+{j=H0?P+np-lT^9V-FR zj1|5f9^d$F?i;WTJo(!Y*pxMdBK$`WP5Lx;XXw&A5JIQ*%d$Em;y>3E?LsBLQlSxQP9j808bi6C9m6jt3 z+uPlau>+U{Fq1+^zz{ouK+*svA&IfwFw;KuFKDJOjkW8Y>6Di~bZ8&?9cgV0YnZn3 ztj^In=ljlgznHJBt!Cia&~r=r%cBhQ1N~V3_~GMO_-WVSl?{lD$jVF?vzt*KaWj}5 ztYaDaC$e44uNZ}kG4=_ri-VDqU1@ih8+Iv_r^_QgguU1+y2m-uBYNNQbos>fbOm#J z{Gxx{C02>muv%rGs)17hvGyHzS2cXs-~bNvavKUAdca0w`9c7|Bfv)52{YFO4;gPhvAro+R|a z3>G+gzWn%Lqyp-MpY{p7bcUSMnLR8ym+j6m6P(D3+$0C1OLW^KFgD5MIngKjDLZ1# zxI6F4xh7mWR;+>@w;0H|&oE+bj)V8Av!1+%;uBYIU?$u-&m@oy!fkakx@T~lW%6E@ z$^KOLifeRV&O5@MVa{@twcQ|Yac$oFTdz{>j4=j;zZMu?XIuh83m<-8JU@dngZ;Q? zpM?8SY4Tg^+Hh&;bn)X0x8_D$iWlFvjvre%^o8~ArNXzP*7<9<<_=dQc(ktb06jC1QdksaN#H3B!B9s9 zTEJ6(7uuERq_p03C_->r-G}Q}K$x$%qGAEqwnoobvoj8>)|DI9N0%y2QHE{mmoq95 z%mlL6ub!NBt>D#~mociy|mIjvAXX1La$LR3c&$CcG#aS{!Yrl-&OYbs(&zcv0<- zqZpz{Y)mBC!`H_e?7v7ekeCfiiiii|sGU9?s8?0=uqI_OT>ao1()>WUUlR3H9JR)5 zvGfCh;eNt{oO(cCePO!Lfka8m$owD(QpP|sFH1=!3|yvx2?0zOlMa-mK#dejuu?-6 zG6X{^d^c;oJK?y$b?^Y#QpG81NNFwkdWKgXU`iTnuVhPQ$cPU1&`Y0rSYJl4f~!HiNyi=Yun zQ84+%u2){B{QT+E3d}4Wt?&xLAR0B(j4C;bTW&9H)FSPLek>(Z;37S$3~u%~S+pEn}=-s#(gJ==`;X>lfl^XUGrf-Kk+<0+CVe*GwP55WfU$x**+}HFzH{ z8xZ9ado;6Z`+$HmG)+efpt)8{ zsr?CC7v+Rs3n;WYcrm_emg63GbFBUMZ?8At;sV@1-0Qf%`!}v%3TGl7f@Bf&n{q} zg-H%dNRd5DOH?k$NNnCkOIKQt!>?Slj{Ea&T9oFvoGa%RYiJ#Q6bjXx2g=J;#-9O= z?HvnKBgGS!tdj>zznifRU0%4lzi{k=HTJ2!83%*s(`bp%I4U1JezbUT>ek#5YwDm= zeJhYMHE&(9u1 z5Cmm3KYh6{cHA2Kz(L@MBaR5(YhX>+BClaBqbeFk*3}ye*Cy>#*}5p7k)phqmXs(Z zHk{@aXbQ9_)Hfn{ti;QvpKj~~X=hyewLoekMk$KI!7k@g0x*ps%bUs1yX zFQjm`x)0+_81m{qoUOaBCZiC&A}KvBXVq8KtR%~Pv?UTl^}8K2M>}^x0*=Hw5G=HA z?mz>rn?q<@CL`nBxaTEFkG3>#i8QyO`j=?#Xh5>mhtZ2z=u<FrdU%u_?>qf)b1HQyV@DU zFY`*$0NG?~J1LW4nuCcdo7FH;uw7esd0!=bGR>R5*KjW;m}INp(7;u;B|((gHE)J@ z&>W@ka(I{8hm{vfKLulgQr>G@3pjQP^H5P~rgtAEQtzPY)18aFuO_KHqyI@J90MsY_uChlue#vtG^wzi+ z=PdUxua7jqNua|`>ksk-dBdh$CSj%Jc~`<`pd7E3*wwgOSjnHwI@&2q|!E0ko*;0H)Ef%J?8^HNgmI z1K^5~>4d=qgxyLh(SSsMwv;FW=%OJY(JngA>L8^NR&@2b2+}#xJ;DyNq9@NK8R((e z=b5*k$-8sz3D+b80m?n$fdBY#PxfOY)$^V8?&r@vUZe$krVZw<|XHXJ>GatiMqv_=mWMvpsZ z3g27-4S*gNWp9lQ!`Gd5dASIn1%~tkZSlmMH8%z-LUn%~{<5hl(z+RKLNEp2jMbs# z*Ma8297?CI&(B^!!A(JE(GHeQpMYhXVw!GOdJ0#^N+XxxtTlGE%+l;^;hiyuB``Cv zmcr-<*5RYYxuGaD|1d0auyFH)b>`e14s-*8%v-&(%Igi#B*5@?9O5gL5VggjIU0Q@ zXRMjA`RQXza&nB=Iy6%}2KAb=JG5}<`r<9t+^{u0edm^6LfXdL>AzzjJA5`=I5)lw z)lr9s!sSn`3x9B~cG!cffsKWs1M{=9^V37lB8~m0CJJAlbTWW7I_1#0c=c^|Q;B+O ziMpvlZFT7?>*j&d7Ya2VXnJ zkgat0Y5H2Ei55bMM3+}EXwWfT5dH~`z%;(4mkEFpP3%PA|9M&!4H-W}FV!fO9IzT- Xt6h|3ziZu#kDxVy$DZ&5`+oL6Ie*bY diff --git a/app/blueprints/__pycache__/__init__.cpython-39.pyc b/app/blueprints/__pycache__/__init__.cpython-39.pyc deleted file mode 100644 index dcd9ce286b12a3403926ba299da4cd357ce104c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 141 zcmYe~<>g`k0?DNJnY=*yF^Gc<7=auIATDMB5-AM944RC7D;bJF!U*D*k&9JKW^#T? zYD{ubVtGz#k#0dwX?kW}OkzPnOj1s1YC%zEUP*CGe0*kJW=VX!UP0w84x8Nkl+v73 LJCIqQftUdR1>qq6 diff --git a/app/blueprints/__pycache__/admin.cpython-39.pyc b/app/blueprints/__pycache__/admin.cpython-39.pyc deleted file mode 100644 index 1c1362aff9e1964aacf64a852955dbbee2619f0b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11768 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 diff --git a/app/brand_spider/__pycache__/main.cpython-39.pyc b/app/brand_spider/__pycache__/main.cpython-39.pyc deleted file mode 100644 index bdeec335aab54fabb18876cf45c2d01ac6c7dc22..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13429 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 diff --git a/app/tests/__pycache__/conftest.cpython-39-pytest-8.4.2.pyc b/app/tests/__pycache__/conftest.cpython-39-pytest-8.4.2.pyc deleted file mode 100644 index a909f63340abae776534d67a9ae3b3b2437c36f0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 136 zcmYe~<>g`kf>|3rWP<3&AOaaM0yz#qT+9L_QW%06G#UL?G8BP?5yUTD7ps`e znB=0w@|@Hn-GZFb^vt}N#DapDlGNgo;+W+8yfhF?ub}c4hfQvNN@-529mtr^K+FID Dx%nU6 diff --git a/app/tests/__pycache__/test_amazon_base.cpython-39-pytest-8.4.2.pyc b/app/tests/__pycache__/test_amazon_base.cpython-39-pytest-8.4.2.pyc deleted file mode 100644 index a1c8b9b96988403b335942f9141553f735b7db9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25106 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 NyBhawuvS|m{|`*0nHm59 diff --git a/app/tests/__pycache__/test_patrol_delete.cpython-39-pytest-8.4.2.pyc b/app/tests/__pycache__/test_patrol_delete.cpython-39-pytest-8.4.2.pyc deleted file mode 100644 index 23cddc00578fb886ee76c87081ea89e32dfb16c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44141 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 diff --git a/app/tool/__pycache__/devices.cpython-39.pyc b/app/tool/__pycache__/devices.cpython-39.pyc deleted file mode 100644 index 0eb1bc7ac6059c3974579b56383be22366fb15b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7285 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 From 824fa7b76c2b0e6f8d64e1d7683793cdc038098d Mon Sep 17 00:00:00 2001 From: koko Date: Tue, 28 Apr 2026 22:38:17 +0800 Subject: [PATCH 15/18] Remove tracked .rtk config --- app/.rtk/filters.toml | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 app/.rtk/filters.toml diff --git a/app/.rtk/filters.toml b/app/.rtk/filters.toml deleted file mode 100644 index d9bd43f..0000000 --- a/app/.rtk/filters.toml +++ /dev/null @@ -1,13 +0,0 @@ -# Project-local RTK filters — commit this file with your repo. -# Filters here override user-global and built-in filters. -# Docs: https://github.com/rtk-ai/rtk#custom-filters -schema_version = 1 - -# Example: suppress build noise from a custom tool -# [filters.my-tool] -# description = "Compact my-tool output" -# match_command = "^my-tool\\s+build" -# strip_ansi = true -# strip_lines_matching = ["^\\s*$", "^Downloading", "^Installing"] -# max_lines = 30 -# on_empty = "my-tool: ok" From a684fde472294eb675831c06315193a58f168b57 Mon Sep 17 00:00:00 2001 From: koko Date: Tue, 28 Apr 2026 22:39:38 +0800 Subject: [PATCH 16/18] Remove README from master --- README.md | 409 ------------------------------------------------------ 1 file changed, 409 deletions(-) delete mode 100644 README.md diff --git a/README.md b/README.md deleted file mode 100644 index df7cc03..0000000 --- a/README.md +++ /dev/null @@ -1,409 +0,0 @@ -# crawler-plugin - -## 这个仓库是什么 - -这个仓库不是一个“单体项目”,而是一个混合工作目录。当前更像是以下三层共同组成的一套系统: - -- `app/`:Python 桌面宿主、Flask 页面承载层、`pywebview` 本地桥接层、自动化任务入口 -- `backend-java/`:Java 业务后端,负责任务模型、文件处理、进度缓存、结果组装、落库、下载 -- `frontend-vue/`:Vue 多页面前端,负责工具页交互和任务发起 - -如果你是第一次接手这个仓库,不要先把它理解成: - -- 纯 Java 后端项目 -- 纯 Python 自动化项目 -- 纯前后端分离 Web 项目 - -它当前的真实形态更接近: - -`Vue 页面 -> Python 桌面桥接/Flask -> Java 任务系统 -> Redis / DB / OSS` - -同时,Python 自动化还会再去驱动本地紫鸟客户端和浏览器。 - -## 先看哪里 - -如果你的目标是理解当前主线,请按这个顺序读: - -1. `app/` -2. `backend-java/` -3. `frontend-vue/` - -原因很简单: - -- `app/` 决定了桌面端怎么承载页面、怎么暴露本地能力、怎么把任务推给 Python 自动化 -- `backend-java/` 决定了任务怎么创建、状态怎么缓存、结果怎么回传、文件怎么生成和下载 -- `frontend-vue/` 决定了用户是怎么触发这些链路的 - -以下目录不要默认当成当前主线: - -- `source_code/` -- `backend/` - -它们和 `app/` 有明显重叠,更像历史版本、迁移残留或中间态副本。阅读时要先带着“可能不是当前生效版本”的假设。 - -## 主线架构怎么分工 - -### Python 层:桌面壳 + 本地桥接 + 自动化执行 - -`app/` 不是单纯的业务后端。它更像一个桌面宿主,负责三件事: - -- 承载 Flask 页面和登录态 -- 通过 `pywebview` 暴露本地文件选择、保存文件、上传文件、任务入队等能力 -- 启动和调度 Python 自动化任务 - -这一层解决的是“本地能力”和“桌面壳”的问题,不是最终任务结果的权威存储。 - -### Java 层:任务系统 + 结果系统 - -`backend-java/` 是当前业务核心后端,负责: - -- 文件上传与临时文件管理 -- 任务创建、历史查询、批量轮询 -- Redis 进度缓存 -- 分片结果接收与聚合 -- 结果文件生成 -- OSS 上传 -- 下载接口输出 - -从模块名看,Java 端已经承接了大部分工具型任务,例如: - -- `brand` -- `dedupe` -- `split` -- `convert` -- `deletebrand` -- `productrisk` -- `shopmatch` -- `pricetrack` - -### Vue 层:多页面工具前端 - -`frontend-vue/` 不是单页应用,而是多入口页面工程。它的作用主要是: - -- 让用户选择文件或参数 -- 调用 Java API 创建任务或查询任务 -- 调用 `pywebview` 桥接拿本地能力 -- 在任务执行过程中轮询状态和下载结果 - -它构建后的产物输出到 `new_web_source/`,再由 Python/Flask 暴露出来供桌面端使用。 - -## 如何理解目录 - -### 当前最值得关注的目录 - -#### `app/` - -这是当前阅读优先级最高的 Python 目录,重点看这些角色: - -- `main.py`:创建 `pywebview` 窗口,暴露本地桥接 API -- `app.py`:Flask 应用入口 -- `blueprints/`:页面、登录、品牌、通信等 HTTP 层 -- `amazon/`:删除品牌、商品风险、匹配、跟价等自动化任务实现 - -#### `backend-java/` - -这是任务系统核心,重点关注: - -- controller:对外 API -- service:任务创建、进度、结果回传、组装 -- model / mapper:任务和结果模型 -- `application.yml`:后端依赖配置 - -#### `frontend-vue/` - -这是当前工具页前端源码,重点关注: - -- `src/shared/bridges/pywebview.ts`:前端如何调 Python 本地桥接 -- `src/shared/api/java-modules.ts`:前端如何调 Java API -- `src/pages/brand/components/`:各个具体工具页 - -### 不要误判成源码主线的目录 - -#### `new_web_source/` - -更像前端构建产物目录,不是首选手改源码位置。 - -#### `source_code/` - -和 `app/` 结构高度相似,但从当前仓库关系看,更像旧线或中间迁移副本。 - -#### `backend/` - -另一套 Python 后端实现,和当前主线职责不完全一致,更像旧后台线。 - -## 用“patrol-delete”看懂最近新增的自动化链路 - -从最近的提交看,`patrol-delete` 是当前最新落地的一条自动化模块。它同样同时经过: - -- 前端 -- Python 桌面桥接 -- Python 自动化执行 -- Java 任务系统 - -但它和“删除品牌”有一个关键差别: - -- `delete-brand` 更偏“本地 Excel 文件驱动” -- `patrol-delete` 更偏“店铺输入 + 任务模板 + 串行自动化执行” - -如果你想快速理解当前新增自动化功能的开发方式,优先看这条线更合适。 - -下面按职责来拆。 - -### 1. 用户先在前端输入店铺,并加入备选区 - -用户打开 `patrol-delete` 页面后,不是先选本地文件,而是: - -- 输入店铺名 -- 将店铺加入备选区 -- 勾选要处理的店铺 -- 点击“匹配店铺” - -这一阶段前端的核心职责是收集“要处理哪个店铺”。 - -### 2. 前端先让 Java 做店铺匹配 - -前端不会直接把“店铺名”交给 Python 执行,而是先调用 Java 的匹配接口。 - -Java 在这一阶段负责: - -1. 根据店铺名查索引 -2. 判断是否能命中店铺 -3. 返回 `shopId`、平台、公司、匹配状态等信息 - -这里要注意: - -- 这是 `frontend -> Java` -- 目的是先把“可执行店铺”筛出来 -- Python 还没有开始实际自动化 - -### 3. 前端要求 Java 创建“patrol-delete 任务” - -匹配通过后,前端调用 Java 的建任务接口。 - -Java 在这一阶段做的事情也不是“立刻去删商品”,而是: - -1. 接收店铺与模板结构 -2. 创建 `taskId` -3. 创建结果记录 -4. 返回当前任务项的初始数据给前端 - -这一阶段可以理解成: - -- Java 负责建模和建任务 -- Python 还没有开始自动化执行 - -### 4. 前端把“可执行项”推入 Python 本地队列 - -`patrol-delete` 不是由 Java 主动调用 Python,而是前端把任务 payload 推给 Python。 - -这一步通过 `pywebview` 暴露的 `enqueue_json()` 完成,前端会构造一个类似下面的 payload: - -- `type: patrol-delete-run` -- `taskId` -- `user_id` -- `items` -- `template_rows` -- `country_sections` -- `cart_ratios` - -然后交给 Python。 - -重要区分: - -- 这一步不是 Java 队列 -- 这是 Python 本地进程内队列 -- 当前仓库里对应的是 `JSON_TASK_QUEUE` - -### 5. Python 的任务监听器开始消费队列 - -Python 侧有一个任务监听器持续盯着 `JSON_TASK_QUEUE`。 - -按 `patrol-delete` 这条链路的设计,Python 拿到任务后会按店铺串行执行,再在店铺内部做页面自动化。 - -这一层的职责重点是: - -1. 根据 `taskId` 和店铺信息定位当前任务 -2. 串行执行当前店铺,避免多个店铺同时抢本地浏览器环境 -3. 按模板结构产出各国家的删除结果与购物车比例 -4. 在执行过程中持续回传 Java - -同时,Python 会在本地维护当前任务状态,例如: - -- 当前店铺 -- 当前步骤 -- 已完成/失败数量 -- 是否需要继续下一个店铺 - -这些状态主要服务于 Python 本地执行期,不是前端最终查询任务状态的权威来源。 - -### 6. Python 自动化驱动紫鸟客户端和浏览器 - -`patrol-delete` 的“真正执行动作”也发生在这里。 - -Python 不会直接操作普通浏览器,而是先和紫鸟客户端通信,再接管浏览器调试口。大致过程是: - -1. 连接或启动本机紫鸟客户端 -2. 打开指定店铺 -3. 进入需要巡店/删除的目标页面 -4. 根据模板中的国家块、状态和数量条件读取页面数据 -5. 找到符合删除条件的商品 -6. 执行删除并整理结果 - -所以这一段实际上又分两层: - -- `Python -> 紫鸟客户端`:本地 HTTP IPC -- `Python -> 浏览器`:通过调试口/自动化驱动执行页面操作 - -### 7. Python 一边执行,一边把结果分片回传给 Java - -这条链路的关键点在这里: - -- Python 不是等整个任务做完再一次性提交结果 -- 而是每处理完一部分,就立刻回传给 Java - -`patrol-delete` 这里是按“店铺结果分片”回传,更强调: - -- `shopName` -- `submissionId` -- `chunkIndex` -- `chunkTotal` -- `shopDone` -- `countrySections` -- `cartRatios` -- `error` - -回传方式: - -- `Python -> Java` -- `Content-Type: application/json` -- 接口:`/api/patrol-delete/tasks/{taskId}/result` - -回传的数据里会包含: - -- 当前店铺标识 -- `chunkIndex` -- `chunkTotal` -- 该店铺当前片段的国家结果 -- 购物车比例 -- 当前片段是否已结束 -- 失败时的错误信息 - -因此,`patrol-delete` 这条线里更核心的是一类传输: - -1. 执行结果回传:`application/json` - -它不依赖“先上传本地 Excel 文件”这个前置动作。 - -### 8. Java 负责接收分片、缓存进度、判断是否可以完结 - -Java 收到 Python 的结果分片后,不会简单地“收一条写一条最终结果”,而是会先做任务系统层面的处理: - -1. 校验 `taskId` -2. 按 `taskId + shopName` 聚合店铺结果 -3. 过滤重复分片 -4. 将结果分片缓存起来 -5. 更新实时进度 -6. 判断某个店铺是否已 `shopDone` -7. 判断整个任务是否达到 finalize 条件 - -这一步说明 Java 才是“任务状态和最终结果”的权威系统。 - -### 9. Java 在分片收齐后生成最终结果 - -当 Java 发现所有需要的结果分片都已收齐时,会执行最终组装: - -1. 合并分片 -2. 重建最终结果数据 -3. 生成结果 Excel -4. 上传 OSS -5. 更新任务状态 -6. 写入结果记录 - -如果这一步成功,任务会变成 `SUCCESS`;否则会进入 `FAILED`。 - -### 10. 前端轮询 Java,不轮询 Python - -前端展示任务状态时,查询对象是 Java,而不是 Python 本地队列。 - -前端主要关心的是: - -- 任务详情 -- 批量进度 -- 下载地址 - -也就是说: - -- Python 负责执行 -- Java 负责对前端提供任务状态与结果 - -### 11. 前端最终通过 Java 下载结果,再交给 Python 保存到本地 - -任务成功后,前端拿到 Java 下载地址,然后再通过 `pywebview` 调 Python 的保存能力,把文件落回用户本地磁盘。 - -所以最后一步仍然是混合协作: - -- 下载来源是 Java -- 本地保存能力来自 Python 桌面桥接 - -## 这条例子可以类比到哪些模块 - -`patrol-delete` 不是孤例,它更像当前仓库最近新增自动化模块的代表模式。 - -同类模式至少还能看到这些任务类型: - -- `patrol-delete-run` -- `delete-brand-run` -- `product-risk-resolve-run` -- `shop-match-run` -- `price-track` - -它们的共性通常是: - -1. 前端先建任务 -2. Python 负责本地自动化执行 -3. Java 负责任务状态、结果缓存和最终输出 - -其中: - -- `patrol-delete` 更适合理解“店铺驱动 + 模板驱动”的新链路 -- `delete-brand` 更适合理解“本地文件上传 + 文件解析驱动”的旧链路 - -理解这两条线之后,再看商品风险、店铺匹配、跟价等模块会容易很多。 - -## 接手时最容易踩的坑 - -### 不要把 `enqueue_json()` 当成 Java 队列 - -它是前端调 Python 的本地桥接,进入的是 Python 进程内队列,不是 Java 消息系统。 - -### 不要把 `new_web_source/` 当成首选源码目录 - -它更像构建产物输出,首选还是看 `frontend-vue/`。 - -### 不要默认 `source_code/` 和 `backend/` 仍是当前主线 - -这两个目录有参考价值,但从当前结构看,不应先于 `app/`、`backend-java/`、`frontend-vue/` 阅读。 - -### 不要把 Python 当成最终任务状态来源 - -Python 负责执行期状态;前端面向用户看到的任务状态、历史、下载结果,当前主权在 Java。 - -## 当前文档的边界 - -这份 README 基于当前仓库的静态分析整理,有几个边界需要明确: - -- 没有运行仓库程序做启动验证 -- 没有确认最终发布时到底启用哪一个入口 -- 对 `source_code/`、`backend/` 的判断是“更像旧线/残留”,不是运行态绝对结论 - -所以这份文档的目标不是提供启动手册,而是帮助接手开发者先建立正确的系统地图。 - -## 一句话结论 - -理解这个仓库最有效的方式不是按语言分开看,而是按职责看: - -- Python 负责桌面壳、本地桥接、自动化执行 -- Java 负责任务系统、结果系统、下载系统 -- Vue 负责工具页交互和任务发起 - -其中,“删除品牌自动化”更适合帮助你理解旧的文件驱动链路;当前最新落地的 `patrol-delete`,则更适合当作你理解新增自动化功能的第一条例子。 From fd2013b448ffdbb4db7f49c057bb86cad49feac2 Mon Sep 17 00:00:00 2001 From: koko Date: Tue, 28 Apr 2026 22:40:39 +0800 Subject: [PATCH 17/18] chore: update env --- app/.env | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/.env b/app/.env index 55dd269..152d342 100644 --- a/app/.env +++ b/app/.env @@ -11,8 +11,8 @@ zn_username=%E8%87%AA%E5%8A%A8%E5%8C%96_Robot client_name=ShuFuAI -# java_api_base=http://47.111.163.154:18080 +java_api_base=http://47.111.163.154:18080 # java_api_base=http://127.0.0.1:18080 -java_api_base=http://8.136.19.173:18080 +# java_api_base=http://8.136.19.173:18080 From 6ea3a960e7d771339b610299e283d12bb13fba18 Mon Sep 17 00:00:00 2001 From: koko Date: Tue, 28 Apr 2026 22:41:56 +0800 Subject: [PATCH 18/18] Remove ts script --- ts.py | 321 ---------------------------------------------------------- 1 file changed, 321 deletions(-) delete mode 100644 ts.py diff --git a/ts.py b/ts.py deleted file mode 100644 index 261d6a9..0000000 --- a/ts.py +++ /dev/null @@ -1,321 +0,0 @@ -import json -import os -import sys -import threading -import time -from pathlib import Path -from types import SimpleNamespace - -import requests - - -ROOT_DIR = Path(__file__).resolve().parent -APP_DIR = ROOT_DIR / "app" -sys.path.insert(0, str(APP_DIR)) - -from amazon.main import TaskMonitor # noqa: E402 -from amazon.patrol_delete import InventoryManage, PatrolDeleteTask # noqa: E402 -from config import ( # noqa: E402 - DELETE_BRAND_API_BASE, - JAVA_API_BASE, - JSON_TASK_QUEUE, - ZN_COMPANY, - ZN_PASSWORD, - ZN_USERNAME, - runing_task, -) -from main import WindowAPI # noqa: E402 - - -SHOP_NAME = "郭亚芳" -USER_ID = 1 -COUNTRIES = [item.strip() for item in os.environ.get("PATROL_COUNTRIES", "德国,西班牙,意大利").split(",") if item.strip()] -TS_MODE = os.environ.get("TS_MODE", "full").strip().lower() - - -class EventSlot: - def __iadd__(self, handler): - return self - - -class DummyWindow: - def __init__(self): - self.events = SimpleNamespace(maximized=EventSlot(), restored=EventSlot()) - - -def log(message, payload=None): - print(f"[ts] {message}", flush=True) - if payload is not None: - print(json.dumps(payload, ensure_ascii=False, indent=2), flush=True) - - -def unwrap(response): - log(f"HTTP {response.request.method} {response.url} -> {response.status_code}") - response.raise_for_status() - data = response.json() - if not data.get("success"): - raise RuntimeError(data.get("message") or data.get("error") or response.text) - return data.get("data") - - -def get_match_item(): - data = unwrap( - requests.post( - f"{JAVA_API_BASE}/api/patrol-delete/match-shops", - json={"user_id": USER_ID, "shop_names": [SHOP_NAME]}, - timeout=40, - ) - ) - items = data.get("items") or [] - if not items: - raise RuntimeError("match-shops did not return any items") - - item = items[0] - log("match result", item) - if not item.get("matched"): - raise RuntimeError(f"shop is not matched: {item}") - return item - - -def create_java_task(match_item): - country_sections = [ - { - "country": country, - "rows": [ - { - "status": "全部", - "quantity": "", - "deleteQuantity": "", - "processStatus": "", - } - ], - } - for country in COUNTRIES - ] - cart_ratios = [{"country": country, "ratio": ""} for country in COUNTRIES] - task_item = { - "shopName": match_item.get("shopName") or SHOP_NAME, - "matched": bool(match_item.get("matched")), - "shopId": match_item.get("shopId"), - "platform": match_item.get("platform"), - "companyName": match_item.get("companyName"), - "matchStatus": match_item.get("matchStatus"), - "matchMessage": match_item.get("matchMessage"), - "countrySections": country_sections, - "cartRatios": cart_ratios, - } - data = unwrap( - requests.post( - f"{JAVA_API_BASE}/api/patrol-delete/tasks", - json={"user_id": USER_ID, "items": [task_item]}, - timeout=40, - ) - ) - log("created task", data) - return data - - -def build_queue_payload(created_task): - task_id = created_task["taskId"] - created_item = (created_task.get("items") or [])[0] - sections = created_item.get("countrySections") or [] - ratios = created_item.get("cartRatios") or [] - payload = { - "type": "patrol-delete-run", - "ts": int(time.time() * 1000), - "data": { - "taskId": task_id, - "user_id": USER_ID, - "source": "ts-real-patrol-delete", - "items": [ - { - "shopName": created_item.get("shopName") or SHOP_NAME, - "shopId": created_item.get("shopId"), - "platform": created_item.get("platform"), - "companyName": created_item.get("companyName"), - "matched": created_item.get("matched"), - "matchStatus": created_item.get("matchStatus"), - "matchMessage": created_item.get("matchMessage"), - } - ], - "template_rows": [ - { - "shopName": created_item.get("shopName") or SHOP_NAME, - "countries": [ - { - "country": section.get("country"), - "status": (section.get("rows") or [{}])[0].get("status", ""), - "quantity": (section.get("rows") or [{}])[0].get("quantity", ""), - "deleteQuantity": (section.get("rows") or [{}])[0].get("deleteQuantity", ""), - "processStatus": (section.get("rows") or [{}])[0].get("processStatus", ""), - } - for section in sections - ], - "cartRatios": ratios, - } - ], - "country_sections": sections, - "cart_ratios": ratios, - }, - } - log("queue payload", payload) - return payload - - -def make_monitor_without_startup_kill(): - monitor = object.__new__(TaskMonitor) - monitor.running = True - monitor.user_info = { - "company": ZN_COMPANY, - "username": ZN_USERNAME, - "password": ZN_PASSWORD, - } - monitor.chunk_index = 1 - monitor.max_workers = 1 - monitor.executor = None - return monitor - - -def poll_java_task(task_id): - for _ in range(60): - try: - data = unwrap( - requests.post( - f"{JAVA_API_BASE}/api/patrol-delete/tasks/progress/batch", - json={"taskIds": [task_id]}, - timeout=40, - ) - ) - log("java progress", data) - items = data.get("items") or [] - if items and items[0].get("taskStatus") in {"SUCCESS", "FAILED", "COMPLETED"}: - return items[0] - except Exception as exc: - log(f"java progress poll failed: {exc}") - time.sleep(5) - return None - - -def drain_queue(): - while True: - try: - JSON_TASK_QUEUE.get_nowait() - except Exception: - return - - -def make_user_info(company_name=None): - return { - "company": company_name or ZN_COMPANY, - "username": ZN_USERNAME, - "password": ZN_PASSWORD, - } - - -def complete_draft_payload_rows(tags): - rows = [] - for item in tags: - rows.append( - { - "status": "补全草稿", - "tag": item.get("tag", ""), - "type": "completeDraft", - "quantity": str(item.get("quantity") if item.get("quantity") is not None else ""), - "deleteQuantity": str(item.get("quantity") if item.get("quantity") is not None else ""), - "processStatus": "已完成", - "raw_text": item.get("raw_text", ""), - } - ) - return rows - - -def run_complete_draft_real_browser(): - log("starting real complete-draft read test") - log("scope", {"shop": SHOP_NAME, "countries": COUNTRIES, "user_id": USER_ID}) - match_item = get_match_item() - driver = InventoryManage(make_user_info(match_item.get("companyName"))) - try: - browser = driver.open_shop(match_item.get("shopName") or SHOP_NAME) - if not browser or browser == "店铺不存在": - raise RuntimeError(f"open shop failed: {browser}") - if driver.need_login(): - raise RuntimeError("shop requires login; complete-draft read test cannot continue safely") - - normalized_sections = [] - for country in COUNTRIES: - log(f"switching country for complete-draft read: {country}") - if not driver.switch_to_country(country): - raise RuntimeError(f"switch country failed: {country}") - tags = driver.get_complete_draft_quick_view_tags(match_item.get("shopName") or SHOP_NAME, country) - payload_rows = complete_draft_payload_rows(tags) - normalized = PatrolDeleteTask._normalize_country_sections_for_result( - [{"country": country, "rows": payload_rows}] - )[0] - normalized_sections.append(normalized) - log( - "complete draft country result", - { - "country": country, - "rawTags": tags, - "payloadRowsBeforeNormalize": payload_rows, - "normalizedForSubmit": normalized, - }, - ) - - log("complete draft normalized sections", normalized_sections) - finally: - try: - driver.close_store() - except Exception as exc: - log(f"close store failed: {exc}") - - -def main(): - if TS_MODE == "complete-draft": - run_complete_draft_real_browser() - return - - log("starting real patrol-delete automation") - log("scope", {"shop": SHOP_NAME, "countries": COUNTRIES, "user_id": USER_ID}) - log("java api base", {"JAVA_API_BASE": JAVA_API_BASE, "DELETE_BRAND_API_BASE": DELETE_BRAND_API_BASE}) - log("ziniao env", {"company": bool(ZN_COMPANY), "username": bool(ZN_USERNAME), "password": bool(ZN_PASSWORD)}) - - drain_queue() - match_item = get_match_item() - created_task = create_java_task(match_item) - task_id = created_task["taskId"] - payload = build_queue_payload(created_task) - - monitor = make_monitor_without_startup_kill() - monitor_thread = threading.Thread(target=monitor.start, daemon=True) - monitor_thread.start() - time.sleep(0.5) - - enqueue_result = WindowAPI(DummyWindow()).enqueue_json(payload) - log("enqueue result", enqueue_result) - if not enqueue_result.get("success"): - raise RuntimeError(f"enqueue failed: {enqueue_result}") - - deadline = time.time() + 60 * 45 - last_status = None - while time.time() < deadline: - state = runing_task.get(task_id) - if state and state != last_status: - log("python task state", state) - last_status = dict(state) - if state and state.get("status") in {"completed", "failed", "stopped"}: - break - time.sleep(5) - - monitor.running = False - JSON_TASK_QUEUE.put({"type": "__stop__"}) - monitor_thread.join(timeout=10) - - log("python final state", runing_task.get(task_id)) - final_java = poll_java_task(task_id) - log("java final", final_java) - log("finished", {"taskId": task_id}) - - -if __name__ == "__main__": - main()