diff --git a/abacus-static-framework/.gitignore b/abacus-static-framework/.gitignore new file mode 100644 index 0000000..7c35d30 --- /dev/null +++ b/abacus-static-framework/.gitignore @@ -0,0 +1,17 @@ +#需要过滤文件 +node_modules +.DS_Store +dist +dist-ssr +*.local + +#编辑器目录和文件 +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local + +pnpm-lock.yaml diff --git a/abacus-static-framework/.project.agents/AGENTS.md b/abacus-static-framework/.project.agents/AGENTS.md new file mode 100644 index 0000000..85fa8ed --- /dev/null +++ b/abacus-static-framework/.project.agents/AGENTS.md @@ -0,0 +1,55 @@ +# Repository Guidelines + +AGENTS.md is the cross-vendor contributor guide (Claude, Codex, and others read it). Keep it in English by convention. It overlaps CLAUDE.md on purpose — this is the canonical version for non-Claude agents. + +## Authority & Required Reading +Rules in `.project.agents/CLAUDE.md` apply to every agent working here. Direct user instructions still take precedence. + +The canonical contributor guide is `.project.agents/AGENTS.md`. Do not create or maintain a root-level `AGENTS.md` unless the user explicitly asks for one. + +Before any code-changing task, read `.project.agents/SELF_CONSTRAINTS.md` and `.project.agents/VIBECODING_GUIDE.md`, then run `git status --short`. For product work, also read the relevant sections of `PRD.md`, `ARCHITECTURE.md`, `ROADMAP.md`, and `CONVENTIONS.md` under `.project.agents/docs/context/`. Shared front-backend constraints live in the workspace-level `docs/` (see `../../../docs/coding-standards.md`) — read the referenced sections instead of duplicating them here. + +## Project Structure & Module Organization +`abacus-static-framework` is an enterprise Vue 3 + TypeScript microservice front-end base (menu framework) built with Vue 3.5, TypeScript 5, Vite 6, Element Plus, vxe-table, Pinia, axios. Business code lives in `src/subsystem/**` (reference template: the `sms` examples, copy-and-rewrite); `src/framework/**` is READ-ONLY shared framework. No automated tests. + +Target architecture is documented in `ARCHITECTURE.md`: framework (shared, read-only) / subsystem (business writable) / dynamic menu-permission routing. + +## Source-of-Truth Rules +`PRD.md` defines behavior and scope. +`UIUX.md` defines visual and interaction rules. +`ARCHITECTURE.md` is the authority for modules, dependencies, contracts, and directory layout. Derived documents follow upstream changes, not the other way around. + +Feature changes must update `PRD.md`. Module, dependency, entity, or invariant changes must update `ARCHITECTURE.md` in the same commit. Do not let code and architecture drift for more than 24 hours. + +## Build, Test, and Development Commands + +```sh +# Build (output goes straight to the target microservice's resources/html/vue//) +npm run build:prod + +# Run +npm run dev + +# Test +No automated tests (manual smoke only) +``` + +Environment: Node 18.20.7, npm mirror `https://registry.npmmirror.com`. Before local integration, adjust `vite.config.ts` (`build.outDir` → target service's `resources/html/vue//`; `server.proxy` → target backend) and `public/data/data.js` (`currentSubsystem`). After a framework upgrade, run `npm install`; never overwrite `public`, `vite.config.ts`, or `src/subsystem`. + +## Architecture & Coding Style +Use TypeScript, 2-space indentation. Kebab-case files, PascalCase component names (must equal the route `name`), `getXxx`/`saveXxx` API function names. Do not add modules that are not registered in `ARCHITECTURE.md`. Preserve the dependency DAG; no reverse dependencies and no cross-module private access. Avoid empty names such as `Manager`, `Helper`, `Util`, `Common`, `Misc`, or `Tools`. + +UI/presentation code should consume state and send intents only — business logic goes into hooks/services; keep data-model types thin. Data access must go through the `request` wrapper (`src/framework/utils/request.ts`) — never raw `axios`/`fetch`; the wrapper handles service-alias mapping, token refresh, commonParam header, and response unwrapping (see shared spec §6). + +## Testing Guidelines +No automated test framework. Required validation from `ARCHITECTURE.md`: manual smoke per page flow (list / query / create / edit / export). Multi-datasource routing, Kafka consumption, XXL-JOB scheduling, Nacos config pull, and real database migrations require real-environment validation; mock/simulator-only evidence is not enough for those claims. + +## Git, Logs, and PRs +Do not pile new work onto unrelated dirty changes without calling it out. Prefer Conventional Commits such as `feat: ...`, `fix: ...`, `docs: ...`. This repository is part of a single git repo rooted at the workspace (`D:\workBuddySpace\member`); commit scope should stay within this subproject unless the change is cross-project (docs/). + +Each independently verifiable feature, milestone, non-trivial fix, or refactor needs an execution log in `.project.agents/log/YYYY-MM-DD-.md` unless it is only a minor documentation edit. Logs must include what changed, relevant commits (or "uncommitted" with reason), verification performed, and next steps. + +Pull requests should include scope, linked issues, screenshots for UI changes, environment/device coverage, and any documentation updates. + +## Security & Configuration +Do not commit secrets, credentials, build output, or personal IDE files. Agent configuration and generated agent notes belong under `.project.agents/`, not the repository root, `.claude/`, or a global home directory. diff --git a/abacus-static-framework/.project.agents/CLAUDE.md b/abacus-static-framework/.project.agents/CLAUDE.md new file mode 100644 index 0000000..1e73441 --- /dev/null +++ b/abacus-static-framework/.project.agents/CLAUDE.md @@ -0,0 +1,59 @@ +# CLAUDE.md + +This file guides Claude Code (and other agents) when working in this repository. +**保持本文件最新**:它是项目级入口——项目是什么、怎么构建、门控一切变更的规则。 + +## Project + +`abacus-static-framework` 是企业级 **Vue 3 + TypeScript 微服务前端底座**(菜单框架),基于 Vue 3.5 / TypeScript 5 / Vite 6 / Element Plus / vxe-table / Pinia / axios。业务代码位于 `src/subsystem/**`(参考模板:`subsystem` 下的 sms 示例,供复制改写);`src/framework/**` 为**只读共享框架**,业务不得修改。 + +- Entry point: `src/main.ts` +- **只读/可写分区**:`src/framework/**` 只读;业务开发只写 `src/subsystem/**`(api / router / views / extend 及自建 components / hooks / store / styles / types / utils)。 +- **接口契约**(统一响应体、服务别名映射、token 自动刷新、commonParam)由 `src/framework/utils/request.ts` 强制实现,业务无感;共享约束详见 `../../../docs/coding-standards.md`(§6 接口契约、§4 前端规范)。 +- Known environment constraints: Node 18.20.7 + npm 淘宝镜像;`vite.config.ts` 的 `build.outDir` 与 `server.proxy` 需按目标微服务修改后才能联调/发布;`public/data/data.js` 的 `currentSubsystem`/`currentSubsystemName` 声明当前子系统。 + +## Common commands + +```sh +# Build(产物直出目标微服务 resources/html/vue/<应用名>/) +npm run build:prod + +# Run(本地开发,Vite 反代后端) +npm run dev + +# Test +无自动化测试(人工冒烟验证) +``` + +环境注意:首次使用需 `npm install --registry=https://registry.npmmirror.com`(或已配置镜像则 `npm install`)。框架升级后需重新 `npm install`;升级**不得覆盖** `public`、`vite.config.ts`、`src/subsystem`。 + +## Architecture + +实现遵循 `.project.agents/docs/context/ARCHITECTURE.md` 的模块边界;模块清单(职责一句话): + +- **framework/**(只读共享框架):api(框架级后端接口)、components/standard(标准组件:AbForm/AbQueryForm/vxe 表格等 10 项)、hooks(useVxeTableHandle 等通用组合式函数)、layout(菜单布局)、router(静态路由)、store(settings/permission/user 等 Pinia 状态)、styles、types、utils(standard 5 项 + request 请求管线)、views、directives(v-debounce/v-throttle)。 +- **subsystem/**(业务可写区):api/<服务别名>(按 Controller 分 ts)、router/dynamicRouter.ts(菜单路由唯一注册点)、views/<一级>/<二级>(页面)、extend(框架扩展钩子)、以及业务自建 components/hooks/store/styles/types/utils。 +- 动态权限:`permissionStore.filterAsyncRoutes` 按 `url === path` 匹配后端菜单与 dynamicRouter 后 `addRoute`。 + +## Project-level rules + +- **动手前必读两文件**——它们编码了本项目所有门控决策的经验: + - `.project.agents/VIBECODING_GUIDE.md` — 实践指南(为什么 & 怎么做) + - `.project.agents/SELF_CONSTRAINTS.md` — 硬约束(什么禁止、什么必须、何时停下) + + 任何非平凡任务,编辑前先跑 `SELF_CONSTRAINTS.md §A`(开工前自检)。 + +- **共享约束单一来源**:前后端共享的编码规范/接口契约/命名纪律,**只存在于工作区 `docs/`(`../../../docs/coding-standards.md`、`../../../docs/architecture.md`、`../../../docs/agent-guide.md`)**;本仓库 `.project.agents/docs/context/` 只写本仓库特有内容与指针,**禁止复制 docs/ 正文**。改共享内容先改 docs/ 再同步指针。 + +- **Agent 配置**一律写在 `.project.agents/` 下(或子目录),禁止写到仓库根、`.claude/` 或全局目录。 + +- **项目文档**位于 `.project.agents/docs/context/`(单层目录):`PRD.md`(行为权威)、`ARCHITECTURE.md`(模块/依赖/契约)、`ROADMAP.md`(里程碑)、`CONVENTIONS.md`(命名/风格/提交)、`UIUX.md`(视觉与交互)。 + +- **源真相层级**(冲突时上游优先): + ``` + PRD.md > ARCHITECTURE.md > UIUX.md > CONVENTIONS.md > 派生文档 + 仓库级 CONVENTIONS 再下接共享 docs/coding-standards.md(仅作全仓公共约定引用) + ``` + 上游变更须在同 commit 内回写受影响的派生文档;代码与架构漂移不得超过 24 小时。 + +- **路线图执行规则**:按 `.project.agents/docs/context/ROADMAP.md` 顺序推进,勾选与完成同 commit;milestone 级/多文件任务先写 plan/spec 再动手;每个 milestone 后按 `.project.agents/log/` 模板写执行日志。 diff --git a/abacus-static-framework/.project.agents/SELF_CONSTRAINTS.md b/abacus-static-framework/.project.agents/SELF_CONSTRAINTS.md new file mode 100644 index 0000000..7dad999 --- /dev/null +++ b/abacus-static-framework/.project.agents/SELF_CONSTRAINTS.md @@ -0,0 +1,130 @@ +# Agent 自我约束清单(本项目硬规则) + +> 这是 Agent 在本项目工作时必须遵守的硬约束。每次开工前自查本清单,违反任何一条都应**先停下**,与用户对齐后再继续。 +> 完整背景与原理请见 [`VIBECODING_GUIDE.md`](./VIBECODING_GUIDE.md)。本清单只列"不许做什么 / 必须做什么"。 +> +> 文档约定(本项目):上游文档位于 `.project.agents/docs/context`,依次为 +> `PRD.md`(行为与范围)、`ARCHITECTURE.md`(模块/依赖/契约/目录)、`CONVENTIONS.md`(命名/风格/提交)。 +> 派生文档不得反向修改上游。 + +--- + +## A. 开工前的强制自检(每个新会话开始时执行) + +在进行任何编辑动作之前,必须确认以下事项;任一项不满足则先暂停业务任务,处理掉再继续。 + +- [ ] **A1. 仓库是否在版本控制下?** 若否:立即停下,先初始化仓库 + 配置 ignore + 初始 commit。 +- [ ] **A2. 工作区是否干净?** 有未提交的旧改动?先与用户确认是否要先提交/暂存,**不允许在脏工作区上叠加新改动**。 +- [ ] **A3. 是否已有 `ARCHITECTURE.md`?** + - 若否,且本次任务**涉及写业务代码**:先停下,按 `VIBECODING_GUIDE` 的流程产出架构文档,再写代码。 + - 若否,且本次任务**只是文档/讨论**:可继续,但应主动提醒用户补架构文档。 +- [ ] **A4. 任务的归属模块清楚吗?** 我能否在 `ARCHITECTURE.md` 的模块清单里指出"这个改动属于哪个模块"?指不出来则停下补架构。 +- [ ] **A5. 上游文档是否已读?** `PRD.md` / `ARCHITECTURE.md` / `CONVENTIONS.md` 中与本任务相关的章节是否读过?没读过先读,不要凭印象动手。 + +--- + +## B. 写代码时的硬约束 + +### B1. 模块边界 +- ❌ 不允许新增**未在 `ARCHITECTURE.md` 中登记**的模块;要新增必须先更新架构文档。 +- ❌ 不允许引入**反向依赖**(低层模块依赖高层模块)。需要时改为接口/回调倒置。 +- ❌ 不允许跨模块**直接访问私有实现**;只能走该模块对外暴露的接口。 +- ❌ 不允许出现 `Manager` / `Helper` / `Util` / `Common` / `Misc` / `Tools` 这类语义为空的新模块名;用动词+名词描述真实职责。 + +### B2. 单一职责 +- ❌ 不允许在 UI/展示层写业务判断或副作用(仅消费状态、发送意图)。 +- ❌ 不允许在数据模型类里堆业务方法;模型保持瘦,逻辑放 Service / UseCase。 +- ❌ 不允许"顺手"修改不在任务范围内的模块;越界的改动走单独提交并明确告知用户。 + +### B3. 文档同步(与代码改动**同一个 commit** 内) +- 加/删/改功能 → 同步更新 `PRD.md` +- 加/删/改模块或依赖 → 同步更新 `ARCHITECTURE.md`(模块清单 + 依赖图) +- 派生文档发现与上游不一致 → 回去改上游,不能让派生文档自走 + +### B4. 注释与命名 +- 默认不写注释;只在 WHY 不明显时写一行。 +- 不写解释 WHAT 的注释(命名应自解释)。 +- 不写"为某 issue/任务而加"这类会随时间失效的注释。 +- 严格遵守 `CONVENTIONS.md` 中的命名规范(不存在则先补)。 + +### B5. 错误处理 +- 只在系统边界(用户输入、外部 API、文件 IO)做防御;内部模块互相信任。 +- 不为不可能发生的情况加 fallback。 +- 不引入向后兼容 shim,除非用户明确要求。 + +### B6. 实施日志(execution log) +- **每完成一个可独立验收的部分(milestone 或子任务),必须在 `.project.agents/log` 写日志**。格式与时机见 `VIBECODING_GUIDE`。 +- 日志内必须包含本段的版本控制提交列表;若本段未提交,明确写出"未提交"及原因。 +- 完成路线图任一 milestone → **必须**写日志,且与该 milestone 的提交同一会话完成。 +- 单次会话即将结束(用户表示收工 / 上下文将被压缩)→ **必须**写一份兜底日志记录当前状态与下一步。 +- ❌ 不允许只提交不写日志(除非属于豁免情况:纯文档微调 / 被回滚的实验性探索)。 +- ❌ 不允许写日志但跳过更新 `ARCHITECTURE.md` —— 若本段触发架构变更,先改架构、再提交、再写日志。 + +--- + +## C. 改动范围控制 + +- ❌ 一次任务一个目的。不要"既加功能又重构又改样式"。 +- ❌ 不允许在 bug 修复任务中做无关清理。 +- ❌ 不允许引入"为未来准备"的抽象(YAGNI);三处相似优于一处过度抽象。 +- ❌ 不允许半完成的实现(要么这次完成,要么不要开始)。 + +--- + +## D. 出问题时的排查纪律 + +bug 处理必须按下列顺序,**严禁跳步**: + +1. 复现现象(明确触发路径) +2. 在 `ARCHITECTURE.md` 上**圈出嫌疑模块** +3. 检查跨模块**接口契约** +4. 缩小到单模块后再读代码 +5. 修完后:若是架构问题,必须更新 `ARCHITECTURE.md` 或 `CONVENTIONS.md` + +**禁止行为**:bug 一来就全仓 grep、试改一行看效果、连续 try-fail 循环。出现这种倾向立刻停下,回到第 2 步。 + +--- + +## E. 与用户的协作约束 + +- ❌ 不替用户做架构决策。涉及模块拆分、依赖方向、命名规范这类**长期影响**的决定,必须明确询问。 +- ❌ 不在用户没要求的时候主动创建文档(除非本清单或 `CLAUDE.md` 已要求)。 +- ❌ 不在没看代码的情况下凭推测回答 "X 是怎么实现的"。 +- ✅ 每次涉及架构/文档/规范变更,先告知影响面,再动手。 +- ✅ 用户的明确指示永远高于本清单和任何 skill。冲突时遵循用户。 + +--- + +## F. 触发"全员停车"的红线 + +出现以下任一情况,**立即停止当前任务,与用户对齐后再决定下一步**: + +1. 发现自己在脏工作区上累积了大量未提交改动 +2. 发现自己正在新增一个"无处归属"的模块/文件 +3. 发现代码与 `ARCHITECTURE.md` 已经矛盾,且无法用小补丁同步 +4. 同一个 bug 连续 3 次尝试修复未果 +5. 用户的请求与本清单 / `CLAUDE.md` / 上游文档存在冲突 —— 必须先澄清,不能默默选边 +6. 即将做出"难以回滚"的动作(删除文件 / 重命名模块 / 调整目录结构 / 强制 push) + +--- + +## G. 文件路径合规 + +- Agent 的配置文件**只**写入 `.project.agents` 子树,禁止写入仓库根目录或其他非约定位置。 +- 项目文档**只**写入 `.project.agents/docs/context`(不允许再分子目录,除非用户明确要求)。 +- 本清单(`SELF_CONSTRAINTS.md`)与指南(`VIBECODING_GUIDE.md`)位于 `.project.agents` 根,与 `CLAUDE.md` 同级。 + +--- + +## H. 自查触发器(什么时候重读本清单) + +至少在以下时机重读本清单: + +- 新会话开始,且任务涉及代码改动 +- 用户要求"加新功能"/"修 bug"/"重构" +- 自己感到"差不多可以直接动手了" —— 这种感觉本身就是触发器 +- 即将创建超过 1 个新文件 +- 即将修改 3 个以上文件 +- 即将修改任何 `.project.agents/docs/context` 下的文档 +- **完成一个路线图 milestone 或子任务前**(确认是否需要按 §B6 写日志) +- **会话即将结束前**(确认兜底日志已写) \ No newline at end of file diff --git a/abacus-static-framework/.project.agents/VIBECODING_GUIDE.md b/abacus-static-framework/.project.agents/VIBECODING_GUIDE.md new file mode 100644 index 0000000..400f39e --- /dev/null +++ b/abacus-static-framework/.project.agents/VIBECODING_GUIDE.md @@ -0,0 +1,252 @@ +# 项目开发实践指南(VIBECODING GUIDE) + +> 本文档是基于"踩过的坑"沉淀下来的项目工作方式约定,适用于本仓库及后续所有同性质的项目。 +> 它的姊妹文件是 [`SELF_CONSTRAINTS.md`](./SELF_CONSTRAINTS.md) —— 那是 Agent 每次开工前必须自查的硬约束清单。 +> 本文回答 "为什么这么做";`SELF_CONSTRAINTS.md` 回答 "具体不许做什么"。 + +--- + +## 0. 三条核心教训(本指南的来由,优先级严格递减) + +1. **版本控制必须从第 0 天开始。** + 不是 "等做出点东西再说",是写第一行代码之前先初始化仓库、写好 ignore 规则、提交一个空骨架。 + 理由:高频改动 + 频繁推翻是 AI 协作的常态,没有版本控制兜底就等于在悬崖边裸奔。 + +2. **文档必须在写代码之前定下来。** + 需求、架构、路线图、开发规范、目录结构、命名规范、模块边界 —— 这些不是"做完之后补的",是"做之前定的"。 + 理由:一旦上下文被代码细节占满,后续每个新会话都只能 freestyle,项目会朝不可逆的方向漂移。 + +3. **架构 > UI > 用户体验。** + 最致命的不是界面丑、不是体验差,而是模块互相纠缠到无法定位问题。 + 一个出问题就能立刻指认 "是 X 模块的责任" 的项目,比一个好看但耦合一团的项目,存活率高一个数量级。 + 理由:耦合一旦发生,AI 协作模式会迅速放大它 —— 因为每次新会话都看不全全貌,只会在原有耦合上继续添乱。 + +> 这三条的优先级是严格递减的:先有版本控制,再有文档,再谈架构;架构稳了之后才轮到 UI 和体验。 + +--- + +## 1. 项目启动 Checklist(Day 0) + +下列每一项都必须在写第一行业务代码之前完成。顺序即优先级。 + +### 1.1 仓库与版本控制 +- [ ] 初始化版本控制并立即建立 ignore 规则(语言 / IDE / 系统三类至少齐全) +- [ ] 提交一个 **空骨架 commit**(README + ignore 规则 + 空目录结构),作为"零点参照系" +- [ ] 约定分支模型(最简:主干 + 短命的功能分支;不要等到分叉时才想) +- [ ] 约定 commit message 风格(推荐 Conventional Commits,至少要求动词开头 + 一句话原因) + +### 1.2 文档骨架(必须先于代码存在) +在 `.project.agents/docs/context` 下建立以下文件,**哪怕只有大纲也比没有强**: + +| 文件 | 角色 | 上下游关系 | +|---|---|---| +| `PRD.md` | 产品需求(要做什么) | 上游 | +| `ARCHITECTURE.md` | 架构(怎么拆) | 上游 | +| `ROADMAP.md` | 路线图(什么时候做哪一块) | 由需求 + 架构推导 | +| `CONVENTIONS.md` | 开发规范(命名、目录、提交、风格) | 上游 | +| `UIUX.md` | 视觉与交互细节(仅有 UI 的项目需要) | 上游(与需求并列) | +| 派生文档(实现 spec / 资产清单等) | 屏幕级实现 / 资产清单 | **派生**,由上游产生 | + +**判断标准**:如果一个新会话的 Agent 只读需求 + 架构 + 开发规范就能正确开始一个任务 —— 文档就算合格。 + +### 1.3 Agent 协作配置 +- [ ] 在 `CLAUDE.md` 写明项目级规则(已有,保持更新) +- [ ] 在本文件 + `SELF_CONSTRAINTS.md` 中固化经验 +- [ ] 在 `.project.agents/settings.json` 中配置必要的 hook / 权限(不要散落到根目录或全局) + +--- + +## 2. 架构原则 + +### 2.1 三条硬规则 + +1. **单一职责到模块级** + 每个模块只回答一个问题。 + 反例:"一个模块既管数据持久化,又管网络请求,又管 UI 状态" —— 这种模块必须拆。 + +2. **依赖方向单向** + 高层依赖低层,UI 依赖业务,业务依赖数据;**反向依赖一律禁止**,遇到就用接口/事件/回调倒置。 + 依赖关系必须能画成一张**有向无环图(DAG)**,且这张图要在 `ARCHITECTURE.md` 里画出来。 + +3. **跨模块只走"接口契约"** + 模块 A 想用模块 B 的能力,只能通过 B 暴露的接口/协议,不能 reach into B 的内部实现。 + 接口契约必须在 `ARCHITECTURE.md` 中显式声明(哪怕只是函数签名清单)。 + +### 2.2 判断架构是否健康的三个问句 + +随时可以用这三个问句自检: + +1. **指认问题**:现在出 bug 了,我能否在 30 秒内指出"这是哪个模块的责任"? +2. **替换实现**:如果要把模块 X 整体换掉(换数据库、换框架),改动是否能控制在 X 内部 + 一个接口适配层? +3. **新增功能归属**:用户要加一个新功能,我能否立刻说出它"属于哪个模块、或需要新增哪个模块"? + +任何一个回答不出来,架构就有问题,**先停下修架构,再写代码**。 + +### 2.3 反耦合纪律 + +- **不在新功能开发时顺手重构无关模块**(重构走单独 commit + 单独会话) +- **不在 UI 层做业务判断**(UI 只接收状态、发送意图) +- **不让数据模型自己跑业务逻辑**(模型类保持瘦,业务放 Service / UseCase) +- **不要"为了少写一个文件"把两个模块塞进同一个文件** + +--- + +## 3. 项目架构文档生成流程 + +这是从零到 `ARCHITECTURE.md` 的标准流程。每一步都有产出物,下一步必须基于上一步的产出物。 + +### Step 1 — 需求收敛(产出 `PRD.md`) +- 列功能清单,按 **核心 / 增强 / 可选** 三档分类 +- 每个核心功能写一句 "用户故事"("作为 X,我想 Y,以便 Z") +- **冻结 MVP 范围**:圈出 MVP 包含哪些核心功能,其余明确标 "Out of MVP" + +### Step 2 — 领域建模(产出 `ARCHITECTURE.md` §1 领域模型) +- 列出所有**名词实体**(用户、订单、会话…) +- 标注每个实体的字段、关系、生命周期 +- 标记哪些是**持久化实体**,哪些是**瞬态状态** + +### Step 3 — 模块划分(产出 `ARCHITECTURE.md` §2 模块清单) +对照领域模型与需求功能清单,拆分模块。每个模块写一张卡片: + +``` +## 模块名: +- 职责:一句话 +- 不负责:明确写出"不做什么"(防止职责蔓延) +- 输入:从哪些模块/外部来 +- 输出:暴露给谁 +- 关键类型/接口:列签名(不写实现) +- 持有状态:有没有自己的状态? +``` + +**经验**:如果一个模块的"不负责"写不出来,说明它的职责还没想清楚,回到 Step 2。 + +### Step 4 — 依赖图(产出 `ARCHITECTURE.md` §3 依赖图) +- 画出模块间依赖箭头(推荐 Mermaid,纯文本可 diff) +- **手动验证 DAG**:从任一节点 DFS 不应回到自己 +- 标出"接口边界":哪些依赖是接口注入,哪些是直接调用 + +### Step 5 — 路线图(产出 `ROADMAP.md`) +按依赖图的拓扑顺序排开发节奏: +- 先做被依赖最多的底层模块 +- 每个 milestone 必须能独立通过编译/构建并跑出某种"可见行为" +- 写明每个 milestone 完成的"验收标准"(不是"做完了",是"做完了之后能演示什么") + +### Step 6 — 开发规范(产出 `CONVENTIONS.md`) +- 命名(类型 / 文件 / 目录 / 资产) +- 代码风格(缩进 / 注释策略 / 错误处理边界) +- 提交规范 +- 测试策略(哪些必须有测试,哪些不要求) + +### Step 7 — 派生文档(产出实现 spec / 资产清单等) +**只有上面 6 步都齐了,才能开始写派生文档**。 +派生文档必须显式引用上游章节("对应 `ARCHITECTURE.md` §2.3 的 XxxService 模块"),方便后续 diff 校验。 + +--- + +## 4. 文档变更协议 + +文档不是写完就锁死的,但变更必须**沿着上下游传播**: + +| 变更点 | 必须同步更新 | +|---|---| +| 需求加/删/改功能 | 架构模块清单、路线图、派生文档 | +| 架构调整模块边界 | 依赖图、开发规范(如有命名调整)、派生文档 | +| UI/UX 改视觉 token | 派生文档(实现 spec / 资产清单),不影响架构 | +| 加新模块 | 架构 §2 + §3、路线图、开发规范(如新目录) | + +**权威链**:`PRD.md > ARCHITECTURE.md > UIUX.md > CONVENTIONS.md > 派生文档`。 +派生文档永远不能**反向**修改上游。如果在派生文档中发现矛盾,回去改上游,再让派生文档重新对齐。 +**代码与架构漂移 > 24 小时即违规。** + +--- + +## 5. 实施日志(execution log) + +写代码 / 执行路线图期间,**每完成一个可独立验收的"部分",必须在 `.project.agents/log` 写一份日志**。日志是给"下一个会话的我"看的 —— 让接手的会话能在不读所有代码的情况下知道:刚才完成了什么、哪些提交、下一步是什么。 + +### 5.1 何时写日志 +- 完成一个路线图 milestone +- 完成一个 milestone 内独立可验收的子任务 +- 完成一次非平凡的重构 / bug 修复 +- 当前会话即将结束时(兜底,把上下文沉淀下来) + +**判断标准**:如果这段工作下一个会话需要知道,就写。 + +### 5.2 日志文件命名 +`.project.agents/log/YYYY-MM-DD-.md` +- `` = 简短动词 + 范围,kebab-case +- 同日多份日志按写作顺序累积(不覆盖、不合并),文件名加序号后缀:`-1`、`-2`… + +### 5.3 日志内容模板 +```markdown +# <一句话标题:完成了什么> + +- **日期**:YYYY-MM-DD +- **关联**:路线图 M / 子任务名 / 关联文档 +- **会话上下文**:(可选)本会话从哪开始接手的 + +## 做了什么 +- bullet 1 +- bullet 2 + +## 提交 +- `` + +(若本段未提交:明确写"未提交,工作树状态:…"并说明原因) + +## 状态变更 +- 架构文档:是否动过?动了哪一节? +- 需求/UI 文档:是否触发回归? +- 测试:跑了什么,结果 + +## 下一步 +- 接下来要做的第一件事(具体到任务名) +- 已知阻塞 / 待澄清项 +``` + +### 5.4 与提交的关系 +日志**不替代** commit message,commit message 仍按 `CONVENTIONS.md` 写;日志是提交的**索引与解释**。 + +### 5.5 不写日志的情况 +- 还没完成一个"可独立验收"的部分 —— 不要"写日志凑数" +- 纯文档调整 —— commit 自身已足够说明 +- 实验性探索(最终被回滚的内容)—— 用 commit message 记录即可 + +--- + +## 6. 出问题时的排查流程 + +bug 来了不要直接钻进代码。按下列顺序: + +1. **复现并定位现象**:能在哪个入口 / 哪个调用稳定复现? +2. **回到架构图**:这个现象涉及哪些模块?沿着依赖图圈出可能责任方。 +3. **审查接口契约**:跨模块调用是否符合 `ARCHITECTURE.md` 中声明的接口?输入输出是否符合契约? +4. **缩小到单模块**:把嫌疑缩小到一个模块后,再读该模块代码。 +5. **修复并回写经验**:如果发现是架构层面的漏洞,修完代码后**必须更新 `ARCHITECTURE.md` 或 `CONVENTIONS.md`**。 + +**反模式**:bug 一来就 grep 关键字、改一行试一下、再改一行试一下 —— 这是死亡螺旋,必须用流程压下去。 + +--- + +## 7. 反模式清单("看到这些立刻警觉") + +- 出现语义为空的模块名(`Manager` / `Helper` / `Util` / `Common` / `Misc` / `Tools`)且行数 > 100 行 +- 一个文件 import 超过 10 个本地模块 +- 改一个 UI 改动需要动 3 个以上其他模块 +- 同一份业务逻辑在两个地方各写了一遍 +- PR 描述写"顺便修了 X" +- 新增功能时发现"无处归属",于是塞进入口文件或主组件 +- 文档与代码不一致超过 24 小时 +- 出现没有在 `ARCHITECTURE.md` 中登记的新模块/新依赖方向 + +任何一条出现,**先停下来回到本指南或架构文档,不要继续往前推**。 + +--- + +## 8. 本项目当前阶段 + +> 本节随项目演进,不是规则的一部分。由 Agent 在每个 milestone 后更新。 + + +- 当前状态:前端底座(`abacus-static-framework`)已完成治理落地(Retrofit),`src/framework/**` 只读、业务只写 `src/subsystem/**`;前后端共享约束单源化于工作区 `docs/`(`../../../docs/coding-standards.md`)。 +- 下一步合规动作:新业务子系统按 `docs/coding-standards.md §7`(AI 生成工作流)开发;任何新增模块、目录或依赖方向先回写本仓库 `ARCHITECTURE.md`,再写代码。 diff --git a/abacus-static-framework/.project.agents/assets/.gitkeep b/abacus-static-framework/.project.agents/assets/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/abacus-static-framework/.project.agents/bugs/.gitkeep b/abacus-static-framework/.project.agents/bugs/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/abacus-static-framework/.project.agents/docs/context/ARCHITECTURE.md b/abacus-static-framework/.project.agents/docs/context/ARCHITECTURE.md new file mode 100644 index 0000000..2fdb4a9 --- /dev/null +++ b/abacus-static-framework/.project.agents/docs/context/ARCHITECTURE.md @@ -0,0 +1,165 @@ +# abacus-static-framework — 架构文档(ARCHITECTURE) + +> 模块、依赖、契约、目录布局的**唯一权威**(本仓库视角)。新增/重命名/移动模块或调整依赖方向,必须先改本文,再改代码(同一个 commit)。 +> 上游:`PRD.md`(行为)。前后端共享约束见工作区 `docs/`(`../../../../docs/coding-standards.md`、`../../../../docs/architecture.md`),本文不复制其正文。 + +## 0. 阅读指引 + +本文描述前端底座的模块划分与依赖方向;§2 模块清单与 §6 目录一一对应,§3.2 是跨模块接口契约(写代码必须遵守)。新会话先读 §2 + §6 定位任务归属,再动手。 + +## 1. 领域模型(Domain Model) + +### 1.1 实体 + +前端无持久化实体;领域概念即运行时状态: + +| 实体 | 字段 | 关系 | 持久化? | +|---|---|---|---| +| 用户会话(userStore) | access_token/refresh_token/expires_dt/user_type | 全局单例 | 否(localStorage) | +| 菜单/路由(permissionStore) | routes(过滤后)、menuTree | 依赖后端菜单接口 | 否(内存) | +| 应用设置(settingsStore) | backendServices、loginType、loginAddress | 来自 window.frameBaseConfig | 否(运行时注入) | + +### 1.2 派生概念(非持久化) + +- `backendServices` 别名→真实服务名映射(`window.frameBaseConfig` 注入)。 +- 当前路由上下文(`currentRouter()`)用于组装 commonParam(menuName/moduleId/moduleName)。 + +### 1.3 不变量(任何模块都必须维护) + +- I1. `src/framework/**` 只读:业务代码不得 import 后修改框架文件;框架变更只能由框架负责人进行。 +- I2. 业务请求一律经 `framework/utils/request.ts`,禁止裸 `axios`/`fetch`。 +- I3. 服务别名首段必须是 `settingsStore.backendServices` 中已注册的键。 + +## 2. 模块清单 + +按依赖层级从低到高排列。 + +### Layer 0 — framework/utils(基础设施) +``` +## 模块名:framework/utils +- 职责:请求管线(request.ts)、标准工具(standard/*:vxe、dataHandleUtil、globalHandle、security、baiduMap) +- 不负责:业务逻辑、页面状态 +- 输入:各业务模块的请求配置 +- 输出:统一响应体解包后的数据 / Blob;标准工具函数 +- 关键类型/接口:request(config) -> Promise;gridDefaultProps(opts);useQueryParamsHandle(...) +- 持有状态:token 刷新队列(模块内闭包)、settingsStore 引用 +``` + +### Layer 0 — framework/components/standard(视觉基座) +``` +## 模块名:framework/components/standard +- 职责:标准 UI 组件(AbForm/AbQueryForm/AbSection/ClickCopy/FilePreviewDialog/ImportExcel/LogShow/RealTimeSearchSelect/SensitiveText/Text/BottomFloat) +- 不负责:业务特有布局(业务自建 components) +- 输入:props/插槽 +- 输出:统一风格组件 +- 持有状态:无(受控组件) +``` + +### Layer 1 — framework/store(有状态服务) +``` +## 模块名:framework/store +- 职责:全局 Pinia 状态(settings:backendServices/loginType;permission:菜单生成与过滤;user:token/业务域) +- 不负责:页面级状态(业务自建 store) +- 输入:window.frameBaseConfig、后端菜单接口 +- 输出:状态与 actions +- 持有状态:是 +``` + +### Layer 2 — framework/router + hooks + directives(路由与通用逻辑) +``` +## 模块名:framework/router + hooks + directives +- 职责:静态路由与动态路由装配支持;useVxeTableHandle 等通用组合式函数;v-debounce/v-throttle 指令 +- 不负责:业务菜单路由(subsystem/router/dynamicRouter.ts) +- 输入:permissionStore 过滤后的路由 +- 输出:可用路由表、表格查询联动能力 +- 持有状态:路由表(由 permissionStore 维护) +``` + +### Layer 3 — subsystem(业务可写区) +``` +## 模块名:subsystem +- 职责:业务子系统(api 封装、dynamicRouter 菜单路由、views 页面、extend 扩展、自建 components/hooks/store/styles/types/utils) +- 不负责:框架能力(一律复用 framework) +- 输入:后端接口、用户操作 +- 输出:业务页面与接口调用 +- 持有状态:业务自身状态(自建 store) +``` + +## 3. 依赖图(DAG) + +```mermaid +graph TD + subsystem --> framework_utils[framework/utils] + subsystem --> framework_components[framework/components/standard] + subsystem --> framework_hooks[framework/hooks] + subsystem --> framework_router[framework/router] + framework_router --> framework_store[framework/store] + framework_hooks --> framework_utils + framework_hooks --> framework_components + framework_store --> framework_utils + framework_utils --> framework_store +``` + +### 3.1 依赖方向规则 + +- 高层依赖低层;业务(subsystem)依赖框架(framework),框架各层按上图单向;**反向依赖一律禁止**(如 framework 不得 import subsystem)。 +- 例外:`framework/utils/request.ts` 依赖 `framework/store`(settingsStore)获取别名映射——两者同属 framework 层,允许。 + +### 3.2 跨模块接口契约(写代码时必须遵守的签名) + +``` +// module: framework/utils/request +// request(config: {url, method, params|data, headers?, custom?}) -> Promise // status===200 已解包 data;ArrayBuffer 返回整个 response +// url 首段 = 服务别名(I3),自动携带 token/commonParam(I2) + +// module: framework/utils/standard/vxe +// gridDefaultProps(opts: {params, rowConfig, pagerConfig, proxyConfig, columns}) -> VxeGridProps + +// module: framework/hooks/useVxeTableHandle +// useQueryParamsHandle(params, page, sorts, filters) -> query params // 分页契约 {data,total},见共享规范 §6.4 +// useTableQueryReload(...) / useInVxeGridSearch(...) +``` + +## 4. 持久化与边界 + +- 无后端式持久化;前端持久化仅 token(localStorage,由 userStore 管理)。 +- 外部边界:所有 HTTP 请求必须经 request.ts;开发期经 vite proxy;运行时经 Nginx 反代;`window.frameBaseConfig` 由宿主页面注入(含 backendServices)。 + +## 5. 测试边界 + +- 无自动化单测(PRD 已声明);每页面人工冒烟(列表/查询/新增/编辑/导出)。 +- 真机/真环境必验:多数据源路由、Kafka 消费、XXL-JOB 调度、Nacos 配置拉取、真实数据库迁移(属后端,但前端联调需一并验证)。 + +## 6. 目录结构(与 §2 模块清单一一对应) + +``` +src/ +├── framework/ # Layer 0~2(只读共享) +│ ├── api/ components/ hooks/ layout/ router/ store/ styles/ types/ utils/ views/ directives/ +│ └── utils/request.ts # 请求管线(契约见 §3.2) +├── subsystem/ # Layer 3(业务可写区) +│ ├── api/<服务别名>/ # 按 Controller 分 ts(如 sms/{index,applog,abnormal,config}.ts) +│ ├── router/dynamicRouter.ts # 菜单路由唯一注册点 +│ ├── views/<一级菜单>/<二级菜单>/index.vue +│ ├── extend/ # 框架扩展钩子 +│ └── (自建) components/ hooks/ store/ styles/ types/ utils/ +├── permission.ts # 全局路由守卫(生成/过滤动态路由) +└── main.ts # 入口 +``` + +## 7. 自检(架构健康度三问) + +1. 出 bug 了,能否 30 秒内指出是 framework 还是 subsystem、哪个子目录的责任? +2. 替换 UI 库/表格库,改动能否控制在 framework/components 与 utils/standard 内 + 适配层? +3. 加新业务页面,能否立刻说出落在 `subsystem/views/<一级>/<二级>/` 哪个位置? + +## 8. 待办与已知技术负债 + +- 前端 README 引用的 `docs/` 文档中心已补齐(`../../../../docs/`)。 +- 旧框架兼容入口 `externalOldERPIndex`(data.js)仅在需要兼容历史模块时配置。 + +## 9. 文档变更协议 + +- 加/删模块或改依赖方向 → 改本文 §2 + §3,同一 commit。 +- 改对外签名(request/gridDefaultProps 等)→ 先改 §3.2,再改代码。 +- 与 `PRD.md` 冲突 → 以 `PRD.md` 为准,回改本文;与共享 `docs/coding-standards.md` 冲突 → 以 docs/ 为准并回改本文。 diff --git a/abacus-static-framework/.project.agents/docs/context/CONVENTIONS.md b/abacus-static-framework/.project.agents/docs/context/CONVENTIONS.md new file mode 100644 index 0000000..3b54e59 --- /dev/null +++ b/abacus-static-framework/.project.agents/docs/context/CONVENTIONS.md @@ -0,0 +1,91 @@ +# abacus-static-framework — 开发规范(CONVENTIONS) + +> 命名、目录、提交、风格、测试的权威(本仓库视角)。前后端共享约束见工作区 `docs/coding-standards.md`(`../../../../docs/coding-standards.md`),本文只写前端特有内容 + 指针,**禁止复制 docs/ 正文**。 + +## 0. 阅读指引 + +- 适用范围:`src/subsystem/**` 业务开发(`src/framework/**` 只读)。 +- 分工:ARCHITECTURE 管"拆成什么模块";本文管"怎么命名/写";共享编码规范、接口契约、AI 生成工作流在 `docs/coding-standards.md`。 + +## 1. 命名 + +### 1.1 标识符 + +- 组件名:PascalCase,且**必须与路由 `name` 一致**(``)。 +- 文件/目录:kebab-case(如 `operationLog/index.vue`);views 目录按一级/二级菜单名组织。 +- API 函数:`getXxx` / `saveXxx` / `deleteXxx` / `exportXxx`。 +- Pinia store:`useStore`。 + +### 1.2 模块命名(语义禁区) + +- 禁止 `Manager` / `Helper` / `Util` / `Common` / `Misc` / `Tools` 这类语义为空的名字;用"动词+名词"(如 `useTableQueryReload`、`gridDefaultProps`)。 + +### 1.3 文件 / 1.4 目录 / 1.5 资产命名 + +- 文件按主类型命名:页面 `index.vue`(views 目录内)、API 按 Controller 分 `api/<服务别名>/<模块>.ts`、组合式函数 `use.ts`。 +- 目录:`api/<服务别名>/`、`views/<一级菜单>/<二级菜单>/`、`router/`、`extend/`;业务自建 `components/ hooks/ store/ styles/ types/ utils/`。 +- 资产:图标/图片放 `src/assets/` 或 `public/`(按是否需编译/保持原名选择)。 + +### 1.6 字符串与本地化 + +- 用户可见文案用中文;菜单标题在路由 `meta.title` 与后端菜单保持一致。 + +## 2. 代码风格 + +### 2.1 排版 + +- TypeScript / Vue:2 空格缩进;单行 ≤ 120 字符;` + + + + + + diff --git a/abacus-static-framework/package-lock.json b/abacus-static-framework/package-lock.json new file mode 100644 index 0000000..ddc9f50 --- /dev/null +++ b/abacus-static-framework/package-lock.json @@ -0,0 +1,5366 @@ +{ + "name": "abacus-static-framework", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "abacus-static-framework", + "version": "0.0.0", + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "@vue-office/docx": "^1.6.0", + "@vue-office/excel": "^1.7.2", + "@vue-office/pdf": "^1.6.5", + "@vueuse/core": "^10.2.1", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "axios": "^1.8.1", + "consola": "^3.2.3", + "crypto-js": "^4.2.0", + "element-china-area-data": "^6.1.0", + "element-plus": "^2.9.5", + "exceljs": "^4.4.0", + "fuse.js": "^6.6.2", + "js-base64": "^3.7.7", + "js-cookie": "^3.0.5", + "markdown-it": "^14.1.0", + "nprogress": "^0.2.0", + "path-browserify": "^1.0.1", + "path-to-regexp": "^6.2.1", + "pinia": "^3.0.1", + "sm-crypto": "^0.3.13", + "vue": "^3.5.13", + "vue-router": "^4.5.0", + "vxe-table": "^4.11.18", + "vxe-table-plugin-export-xlsx": "^4.0.7", + "xe-utils": "^3.7.3" + }, + "devDependencies": { + "@types/node": "^20.3.1", + "@types/nprogress": "^0.2.0", + "@vitejs/plugin-vue": "^5.2.1", + "sass": "^1.63.4", + "typescript": "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-vue-components": "^0.25.1", + "vite": "^6.0.0", + "vite-plugin-style-import": "^2.0.0", + "vue-tsc": "^1.4.2" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmmirror.com/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.26.9.tgz", + "integrity": "sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.26.9" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.26.9.tgz", + "integrity": "sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==", + "license": "MIT", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.9", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.26.9.tgz", + "integrity": "sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@element-plus/icons-vue": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/@element-plus/icons-vue/-/icons-vue-2.3.1.tgz", + "integrity": "sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==", + "license": "MIT", + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.0.tgz", + "integrity": "sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.0.tgz", + "integrity": "sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.0.tgz", + "integrity": "sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.0.tgz", + "integrity": "sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.0.tgz", + "integrity": "sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.0.tgz", + "integrity": "sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.0.tgz", + "integrity": "sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.0.tgz", + "integrity": "sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.0.tgz", + "integrity": "sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.0.tgz", + "integrity": "sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.0.tgz", + "integrity": "sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.0.tgz", + "integrity": "sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.0.tgz", + "integrity": "sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.0.tgz", + "integrity": "sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.0.tgz", + "integrity": "sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.0.tgz", + "integrity": "sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.0.tgz", + "integrity": "sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.0.tgz", + "integrity": "sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.0.tgz", + "integrity": "sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.0.tgz", + "integrity": "sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.0.tgz", + "integrity": "sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.0.tgz", + "integrity": "sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.0.tgz", + "integrity": "sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.0.tgz", + "integrity": "sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.0.tgz", + "integrity": "sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@fast-csv/format": { + "version": "4.3.5", + "resolved": "https://registry.npmmirror.com/@fast-csv/format/-/format-4.3.5.tgz", + "integrity": "sha512-8iRn6QF3I8Ak78lNAa+Gdl5MJJBM5vRHivFtMRUWINdevNo00K7OXxS2PshawLKTejVwieIlPmK5YlLu6w4u8A==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.isboolean": "^3.0.3", + "lodash.isequal": "^4.5.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0" + } + }, + "node_modules/@fast-csv/format/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, + "node_modules/@fast-csv/parse": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/@fast-csv/parse/-/parse-4.3.6.tgz", + "integrity": "sha512-uRsLYksqpbDmWaSmzvJcuApSEe38+6NQZBUsuAyMZKqHxH0g1wcJgsKUvN3WC8tewaqFjBMMGrkHmC+T7k8LvA==", + "license": "MIT", + "dependencies": { + "@types/node": "^14.0.1", + "lodash.escaperegexp": "^4.1.2", + "lodash.groupby": "^4.6.0", + "lodash.isfunction": "^3.0.9", + "lodash.isnil": "^4.0.0", + "lodash.isundefined": "^3.0.1", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/@fast-csv/parse/node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "license": "MIT" + }, + "node_modules/@floating-ui/core": { + "version": "1.6.9", + "resolved": "https://registry.npmmirror.com/@floating-ui/core/-/core-1.6.9.tgz", + "integrity": "sha512-uMXCuQ3BItDUbAMhIXw7UPXRfAlOAvZzdK9BWpE60MCn+Svt3aLn9jsPTi/WNGlRUu2uI0v5S7JiIUsbsvh3fw==", + "license": "MIT", + "dependencies": { + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.13", + "resolved": "https://registry.npmmirror.com/@floating-ui/dom/-/dom-1.6.13.tgz", + "integrity": "sha512-umqzocjDgNRGTuO7Q8CU32dkHkECqI8ZdMZ5Swb6QAM0t5rnlrN3lGo1hdpscRd3WS8T6DKYK4ephgIH9iRh3w==", + "license": "MIT", + "dependencies": { + "@floating-ui/core": "^1.6.0", + "@floating-ui/utils": "^0.2.9" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.9", + "resolved": "https://registry.npmmirror.com/@floating-ui/utils/-/utils-0.2.9.tgz", + "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", + "license": "MIT" + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@popperjs/core": { + "name": "@sxzz/popperjs-es", + "version": "2.11.7", + "resolved": "https://registry.npmmirror.com/@sxzz/popperjs-es/-/popperjs-es-2.11.7.tgz", + "integrity": "sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/popperjs" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.4", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.9.tgz", + "integrity": "sha512-qZdlImWXur0CFakn2BJ2znJOdqYZKiedEPEVNTBrpfPjc/YuTGcaYZcdmNFTkUj3DU0ZM/AElcM8Ybww3xVLzA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.9.tgz", + "integrity": "sha512-4KW7P53h6HtJf5Y608T1ISKvNIYLWRKMvfnG0c44M6In4DQVU58HZFEVhWINDZKp7FZps98G3gxwC1sb0wXUUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.9.tgz", + "integrity": "sha512-0CY3/K54slrzLDjOA7TOjN1NuLKERBgk9nY5V34mhmuu673YNb+7ghaDUs6N0ujXR7fz5XaS5Aa6d2TNxZd0OQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.9.tgz", + "integrity": "sha512-eOojSEAi/acnsJVYRxnMkPFqcxSMFfrw7r2iD9Q32SGkb/Q9FpUY1UlAu1DH9T7j++gZ0lHjnm4OyH2vCI7l7Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.9.tgz", + "integrity": "sha512-2lzjQPJbN5UnHm7bHIUKFMulGTQwdvOkouJDpPysJS+QFBGDJqcfh+CxxtG23Ik/9tEvnebQiylYoazFMAgrYw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.9.tgz", + "integrity": "sha512-SLl0hi2Ah2H7xQYd6Qaiu01kFPzQ+hqvdYSoOtHYg/zCIFs6t8sV95kaoqjzjFwuYQLtOI0RZre/Ke0nPaQV+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.9.tgz", + "integrity": "sha512-88I+D3TeKItrw+Y/2ud4Tw0+3CxQ2kLgu3QvrogZ0OfkmX/DEppehus7L3TS2Q4lpB+hYyxhkQiYPJ6Mf5/dPg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.9.tgz", + "integrity": "sha512-3qyfWljSFHi9zH0KgtEPG4cBXHDFhwD8kwg6xLfHQ0IWuH9crp005GfoUUh/6w9/FWGBwEHg3lxK1iHRN1MFlA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.9.tgz", + "integrity": "sha512-6TZjPHjKZUQKmVKMUowF3ewHxctrRR09eYyvT5eFv8w/fXarEra83A2mHTVJLA5xU91aCNOUnM+DWFMSbQ0Nxw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.9.tgz", + "integrity": "sha512-LD2fytxZJZ6xzOKnMbIpgzFOuIKlxVOpiMAXawsAZ2mHBPEYOnLRK5TTEsID6z4eM23DuO88X0Tq1mErHMVq0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.9.tgz", + "integrity": "sha512-dRAgTfDsn0TE0HI6cmo13hemKpVHOEyeciGtvlBTkpx/F65kTvShtY/EVyZEIfxFkV5JJTuQ9tP5HGBS0hfxIg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.9.tgz", + "integrity": "sha512-PHcNOAEhkoMSQtMf+rJofwisZqaU8iQ8EaSps58f5HYll9EAY5BSErCZ8qBDMVbq88h4UxaNPlbrKqfWP8RfJA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.9.tgz", + "integrity": "sha512-Z2i0Uy5G96KBYKjeQFKbbsB54xFOL5/y1P5wNBsbXB8yE+At3oh0DVMjQVzCJRJSfReiB2tX8T6HUFZ2k8iaKg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.9.tgz", + "integrity": "sha512-U+5SwTMoeYXoDzJX5dhDTxRltSrIax8KWwfaaYcynuJw8mT33W7oOgz0a+AaXtGuvhzTr2tVKh5UO8GVANTxyQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.9.tgz", + "integrity": "sha512-FwBHNSOjUTQLP4MG7y6rR6qbGw4MFeQnIBrMe161QGaQoBQLqSUEKlHIiVgF3g/mb3lxlxzJOpIBhaP+C+KP2A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.9.tgz", + "integrity": "sha512-cYRpV4650z2I3/s6+5/LONkjIz8MBeqrk+vPXV10ORBnshpn8S32bPqQ2Utv39jCiDcO2eJTuSlPXpnvmaIgRA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.9.tgz", + "integrity": "sha512-z4mQK9dAN6byRA/vsSgQiPeuO63wdiDxZ9yg9iyX2QTzKuQM7T4xlBoeUP/J8uiFkqxkcWndWi+W7bXdPbt27Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.9.tgz", + "integrity": "sha512-KB48mPtaoHy1AwDNkAJfHXvHp24H0ryZog28spEs0V48l3H1fr4i37tiyHsgKZJnCmvxsbATdZGBpbmxTE3a9w==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.9.tgz", + "integrity": "sha512-AyleYRPU7+rgkMWbEh71fQlrzRfeP6SyMnRf9XX4fCdDPAJumdSBqYEcWPMzVQ4ScAl7E4oFfK0GUVn77xSwbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@transloadit/prettier-bytes": { + "version": "0.0.7", + "resolved": "https://registry.npmmirror.com/@transloadit/prettier-bytes/-/prettier-bytes-0.0.7.tgz", + "integrity": "sha512-VeJbUb0wEKbcwaSlj5n+LscBl9IPgLPkHVGBkh00cztv6X4L/TJXK58LzFuBKX7/GAfiGhIwH67YTLTlzvIzBA==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/@types/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==", + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.16", + "resolved": "https://registry.npmmirror.com/@types/lodash/-/lodash-4.17.16.tgz", + "integrity": "sha512-HX7Em5NYQAXKW+1T+FiuG27NGwzJfCX3s1GjOa7ujxZa52kjJLOr4FUxT+giF6Tgxv1e+/czV/iTtBw27WTU9g==", + "license": "MIT" + }, + "node_modules/@types/lodash-es": { + "version": "4.17.12", + "resolved": "https://registry.npmmirror.com/@types/lodash-es/-/lodash-es-4.17.12.tgz", + "integrity": "sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==", + "license": "MIT", + "dependencies": { + "@types/lodash": "*" + } + }, + "node_modules/@types/node": { + "version": "20.17.23", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-20.17.23.tgz", + "integrity": "sha512-8PCGZ1ZJbEZuYNTMqywO+Sj4vSKjSjT6Ua+6RFOYlEvIvKQABPtrNkoVSLSKDb4obYcMhspVKmsw8Cm10NFRUg==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/nprogress": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/@types/nprogress/-/nprogress-0.2.3.tgz", + "integrity": "sha512-k7kRA033QNtC+gLc4VPlfnue58CM1iQLgn1IMAU8VPHGOj7oIHPp9UlhedEnD/Gl8evoCjwkZjlBORtZ3JByUA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/web-bluetooth": { + "version": "0.0.20", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", + "integrity": "sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==", + "license": "MIT" + }, + "node_modules/@uppy/companion-client": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/@uppy/companion-client/-/companion-client-2.2.2.tgz", + "integrity": "sha512-5mTp2iq97/mYSisMaBtFRry6PTgZA6SIL7LePteOV5x0/DxKfrZW3DEiQERJmYpHzy7k8johpm2gHnEKto56Og==", + "license": "MIT", + "dependencies": { + "@uppy/utils": "^4.1.2", + "namespace-emitter": "^2.0.1" + } + }, + "node_modules/@uppy/core": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/@uppy/core/-/core-2.3.4.tgz", + "integrity": "sha512-iWAqppC8FD8mMVqewavCz+TNaet6HPXitmGXpGGREGrakZ4FeuWytVdrelydzTdXx6vVKkOmI2FLztGg73sENQ==", + "license": "MIT", + "dependencies": { + "@transloadit/prettier-bytes": "0.0.7", + "@uppy/store-default": "^2.1.1", + "@uppy/utils": "^4.1.3", + "lodash.throttle": "^4.1.1", + "mime-match": "^1.0.2", + "namespace-emitter": "^2.0.1", + "nanoid": "^3.1.25", + "preact": "^10.5.13" + } + }, + "node_modules/@uppy/store-default": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/@uppy/store-default/-/store-default-2.1.1.tgz", + "integrity": "sha512-xnpTxvot2SeAwGwbvmJ899ASk5tYXhmZzD/aCFsXePh/v8rNvR2pKlcQUH7cF/y4baUGq3FHO/daKCok/mpKqQ==", + "license": "MIT" + }, + "node_modules/@uppy/utils": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/@uppy/utils/-/utils-4.1.3.tgz", + "integrity": "sha512-nTuMvwWYobnJcytDO3t+D6IkVq/Qs4Xv3vyoEZ+Iaf8gegZP+rEyoaFT2CK5XLRMienPyqRqNbIfRuFaOWSIFw==", + "license": "MIT", + "dependencies": { + "lodash.throttle": "^4.1.1" + } + }, + "node_modules/@uppy/xhr-upload": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/@uppy/xhr-upload/-/xhr-upload-2.1.3.tgz", + "integrity": "sha512-YWOQ6myBVPs+mhNjfdWsQyMRWUlrDLMoaG7nvf/G6Y3GKZf8AyjFDjvvJ49XWQ+DaZOftGkHmF1uh/DBeGivJQ==", + "license": "MIT", + "dependencies": { + "@uppy/companion-client": "^2.2.2", + "@uppy/utils": "^4.1.2", + "nanoid": "^3.1.25" + }, + "peerDependencies": { + "@uppy/core": "^2.3.3" + } + }, + "node_modules/@vitejs/plugin-vue": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-5.2.1.tgz", + "integrity": "sha512-cxh314tzaWwOLqVes2gnnCtvBDcM1UMdn+iFR+UjAn411dPT3tOmqrJjbMd7koZpMAmBM/GqeV4n9ge7JSiJJQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@volar/language-core": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@volar/language-core/-/language-core-1.11.1.tgz", + "integrity": "sha512-dOcNn3i9GgZAcJt43wuaEykSluAuOkQgzni1cuxLxTV0nJKanQztp7FxyswdRILaKH+P2XZMPRp2S4MV/pElCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/source-map": "1.11.1" + } + }, + "node_modules/@volar/source-map": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@volar/source-map/-/source-map-1.11.1.tgz", + "integrity": "sha512-hJnOnwZ4+WT5iupLRnuzbULZ42L7BWWPMmruzwtLhJfpDVoZLjNBxHDi2sY2bgZXCKlpU5XcsMFoYrsQmPhfZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "muggle-string": "^0.3.1" + } + }, + "node_modules/@volar/typescript": { + "version": "1.11.1", + "resolved": "https://registry.npmmirror.com/@volar/typescript/-/typescript-1.11.1.tgz", + "integrity": "sha512-iU+t2mas/4lYierSnoFOeRFQUhAEMgsFuQxoxvwn5EdQopw43j+J27a4lt9LMInx1gLJBC6qL14WYGlgymaSMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "1.11.1", + "path-browserify": "^1.0.1" + } + }, + "node_modules/@vue-office/docx": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/@vue-office/docx/-/docx-1.6.3.tgz", + "integrity": "sha512-Cs+3CAaRBOWOiW4XAhTwwxJ0dy8cPIf6DqfNvYcD3YACiLwO4kuawLF2IAXxyijhbuOeoFsfvoVbOc16A/4bZA==", + "hasInstallScript": true, + "license": "MIT", + "peerDependencies": { + "@vue/composition-api": "^1.7.1", + "vue": "^2.0.0 || >=3.0.0", + "vue-demi": "^0.14.6" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vue-office/excel": { + "version": "1.7.14", + "resolved": "https://registry.npmmirror.com/@vue-office/excel/-/excel-1.7.14.tgz", + "integrity": "sha512-pVUgt+emDQUnW7q22CfnQ+jl43mM/7IFwYzOg7lwOwPEbiVB4K4qEQf+y/bc4xGXz75w1/e3Kz3G6wAafmFBFg==", + "hasInstallScript": true, + "license": "MIT", + "peerDependencies": { + "@vue/composition-api": "^1.7.1", + "vue": "^2.0.0 || >=3.0.0", + "vue-demi": "^0.14.6" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vue-office/pdf": { + "version": "1.6.5", + "resolved": "https://registry.npmmirror.com/@vue-office/pdf/-/pdf-1.6.5.tgz", + "integrity": "sha512-3BePzeA5wji2JoZGJhdlc3XEXs6gMcSnBXrBXlGGfhZHjNijxcHa9V5Ibm8dDKoEwPPsfg+kf4TGP9/2GBR8jQ==", + "hasInstallScript": true, + "license": "MIT", + "peerDependencies": { + "@vue/composition-api": "^1.7.1", + "vue": "^2.0.0 || >=3.0.0", + "vue-demi": "^0.14.6" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/devtools-api": { + "version": "6.6.4", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-6.6.4.tgz", + "integrity": "sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==", + "license": "MIT" + }, + "node_modules/@vue/devtools-kit": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-kit/-/devtools-kit-7.7.2.tgz", + "integrity": "sha512-CY0I1JH3Z8PECbn6k3TqM1Bk9ASWxeMtTCvZr7vb+CHi+X/QwQm5F1/fPagraamKMAHVfuuCbdcnNg1A4CYVWQ==", + "license": "MIT", + "dependencies": { + "@vue/devtools-shared": "^7.7.2", + "birpc": "^0.2.19", + "hookable": "^5.5.3", + "mitt": "^3.0.1", + "perfect-debounce": "^1.0.0", + "speakingurl": "^14.0.1", + "superjson": "^2.2.1" + } + }, + "node_modules/@vue/devtools-shared": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-shared/-/devtools-shared-7.7.2.tgz", + "integrity": "sha512-uBFxnp8gwW2vD6FrJB8JZLUzVb6PNRG0B0jBnHsOH8uKyva2qINY8PTF5Te4QlTbMDqU5K6qtJDr6cNsKWhbOA==", + "license": "MIT", + "dependencies": { + "rfdc": "^1.4.1" + } + }, + "node_modules/@vue/language-core": { + "version": "1.8.27", + "resolved": "https://registry.npmmirror.com/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/language-core": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/shared": "^3.3.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@vue/language-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@vue/language-core/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT" + }, + "node_modules/@vueuse/core": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-10.11.1.tgz", + "integrity": "sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.20", + "@vueuse/metadata": "10.11.1", + "@vueuse/shared": "10.11.1", + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/metadata": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-10.11.1.tgz", + "integrity": "sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vueuse/shared": { + "version": "10.11.1", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-10.11.1.tgz", + "integrity": "sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==", + "license": "MIT", + "dependencies": { + "vue-demi": ">=0.14.8" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@vxe-ui/core": { + "version": "4.0.33", + "resolved": "https://registry.npmmirror.com/@vxe-ui/core/-/core-4.0.33.tgz", + "integrity": "sha512-TZS4CuIQ60Q5hmaglKP2+BC5/4Gc9exnRt5rMhDx9hY2f7DUMOpnfeVV70cevN0Ik+2T8hw38SP7sfNGUCmwgA==", + "license": "MIT", + "dependencies": { + "dom-zindex": "^1.0.6", + "xe-utils": "^3.7.2" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/@wangeditor/basic-modules": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/@wangeditor/basic-modules/-/basic-modules-1.1.7.tgz", + "integrity": "sha512-cY9CPkLJaqF05STqfpZKWG4LpxTMeGSIIF1fHvfm/mz+JXatCagjdkbxdikOuKYlxDdeqvOeBmsUBItufDLXZg==", + "license": "MIT", + "dependencies": { + "is-url": "^1.2.4" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/code-highlight": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@wangeditor/code-highlight/-/code-highlight-1.0.3.tgz", + "integrity": "sha512-iazHwO14XpCuIWJNTQTikqUhGKyqj+dUNWJ9288Oym9M2xMVHvnsOmDU2sgUDWVy+pOLojReMPgXCsvvNlOOhw==", + "license": "MIT", + "dependencies": { + "prismjs": "^1.23.0" + }, + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/core": { + "version": "1.1.19", + "resolved": "https://registry.npmmirror.com/@wangeditor/core/-/core-1.1.19.tgz", + "integrity": "sha512-KevkB47+7GhVszyYF2pKGKtCSj/YzmClsD03C3zTt+9SR2XWT5T0e3yQqg8baZpcMvkjs1D8Dv4fk8ok/UaS2Q==", + "license": "MIT", + "dependencies": { + "@types/event-emitter": "^0.3.3", + "event-emitter": "^0.3.5", + "html-void-elements": "^2.0.0", + "i18next": "^20.4.0", + "scroll-into-view-if-needed": "^2.2.28", + "slate-history": "^0.66.0" + }, + "peerDependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor": { + "version": "5.1.23", + "resolved": "https://registry.npmmirror.com/@wangeditor/editor/-/editor-5.1.23.tgz", + "integrity": "sha512-0RxfeVTuK1tktUaPROnCoFfaHVJpRAIE2zdS0mpP+vq1axVQpLjM8+fCvKzqYIkH0Pg+C+44hJpe3VVroSkEuQ==", + "license": "MIT", + "dependencies": { + "@uppy/core": "^2.1.1", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "^1.1.7", + "@wangeditor/code-highlight": "^1.0.3", + "@wangeditor/core": "^1.1.19", + "@wangeditor/list-module": "^1.0.5", + "@wangeditor/table-module": "^1.1.4", + "@wangeditor/upload-image-module": "^1.0.2", + "@wangeditor/video-module": "^1.1.4", + "dom7": "^3.0.0", + "is-hotkey": "^0.2.0", + "lodash.camelcase": "^4.3.0", + "lodash.clonedeep": "^4.5.0", + "lodash.debounce": "^4.0.8", + "lodash.foreach": "^4.5.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "lodash.toarray": "^4.4.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/editor-for-vue": { + "version": "5.1.12", + "resolved": "https://registry.npmmirror.com/@wangeditor/editor-for-vue/-/editor-for-vue-5.1.12.tgz", + "integrity": "sha512-0Ds3D8I+xnpNWezAeO7HmPRgTfUxHLMd9JKcIw+QzvSmhC5xUHbpCcLU+KLmeBKTR/zffnS5GQo6qi3GhTMJWQ==", + "license": "MIT", + "peerDependencies": { + "@wangeditor/editor": ">=5.1.0", + "vue": "^3.0.5" + } + }, + "node_modules/@wangeditor/list-module": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/@wangeditor/list-module/-/list-module-1.0.5.tgz", + "integrity": "sha512-uDuYTP6DVhcYf7mF1pTlmNn5jOb4QtcVhYwSSAkyg09zqxI1qBqsfUnveeDeDqIuptSJhkh81cyxi+MF8sEPOQ==", + "license": "MIT", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/table-module": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/@wangeditor/table-module/-/table-module-1.1.4.tgz", + "integrity": "sha512-5saanU9xuEocxaemGdNi9t8MCDSucnykEC6jtuiT72kt+/Hhh4nERYx1J20OPsTCCdVr7hIyQenFD1iSRkIQ6w==", + "license": "MIT", + "peerDependencies": { + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.isequal": "^4.5.0", + "lodash.throttle": "^4.1.1", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/upload-image-module": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/@wangeditor/upload-image-module/-/upload-image-module-1.0.2.tgz", + "integrity": "sha512-z81lk/v71OwPDYeQDxj6cVr81aDP90aFuywb8nPD6eQeECtOymrqRODjpO6VGvCVxVck8nUxBHtbxKtjgcwyiA==", + "license": "MIT", + "peerDependencies": { + "@uppy/core": "^2.0.3", + "@uppy/xhr-upload": "^2.0.3", + "@wangeditor/basic-modules": "1.x", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "lodash.foreach": "^4.5.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/@wangeditor/video-module": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/@wangeditor/video-module/-/video-module-1.1.4.tgz", + "integrity": "sha512-ZdodDPqKQrgx3IwWu4ZiQmXI8EXZ3hm2/fM6E3t5dB8tCaIGWQZhmqd6P5knfkRAd3z2+YRSRbxOGfoRSp/rLg==", + "license": "MIT", + "peerDependencies": { + "@uppy/core": "^2.1.4", + "@uppy/xhr-upload": "^2.0.7", + "@wangeditor/core": "1.x", + "dom7": "^3.0.0", + "nanoid": "^3.2.0", + "slate": "^0.72.0", + "snabbdom": "^3.1.0" + } + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "license": "MIT", + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/archiver-utils/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/archiver-utils/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "license": "Python-2.0" + }, + "node_modules/async": { + "version": "3.2.6", + "resolved": "https://registry.npmmirror.com/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "license": "MIT" + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.8.1.tgz", + "integrity": "sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/big-integer": { + "version": "1.6.52", + "resolved": "https://registry.npmmirror.com/big-integer/-/big-integer-1.6.52.tgz", + "integrity": "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==", + "license": "Unlicense", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/binary": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/binary/-/binary-0.3.0.tgz", + "integrity": "sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==", + "license": "MIT", + "dependencies": { + "buffers": "~0.1.1", + "chainsaw": "~0.1.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/birpc": { + "version": "0.2.19", + "resolved": "https://registry.npmmirror.com/birpc/-/birpc-0.2.19.tgz", + "integrity": "sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bluebird": { + "version": "3.4.7", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.4.7.tgz", + "integrity": "sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-indexof-polyfill": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/buffer-indexof-polyfill/-/buffer-indexof-polyfill-1.0.2.tgz", + "integrity": "sha512-I7wzHwA3t1/lwXQh+A5PbNvJxgfo5r3xulgpYDB5zckTu/Z9oUK9biouBKQUjEqzaz3HnAT6TYoovmE+GqSf7A==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/buffers": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/buffers/-/buffers-0.1.1.tgz", + "integrity": "sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/capital-case": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/capital-case/-/capital-case-1.0.4.tgz", + "integrity": "sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/chainsaw": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/chainsaw/-/chainsaw-0.1.0.tgz", + "integrity": "sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==", + "license": "MIT/X11", + "dependencies": { + "traverse": ">=0.3.0 <0.4" + }, + "engines": { + "node": "*" + } + }, + "node_modules/change-case": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/change-case/-/change-case-4.1.2.tgz", + "integrity": "sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/china-division": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/china-division/-/china-division-2.7.0.tgz", + "integrity": "sha512-4uUPAT+1WfqDh5jytq7omdCmHNk3j+k76zEG/2IqaGcYB90c2SwcixttcypdsZ3T/9tN1TTpBDoeZn+Yw/qBEA==", + "license": "MIT" + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==", + "license": "MIT" + }, + "node_modules/computeds": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/computeds/-/computeds-0.0.1.tgz", + "integrity": "sha512-7CEBgcMjVmitjYo5q8JTJVra6X5mQ20uTThdK+0kR7UEaDrAWEQcRiBtWJzga4eRpP6afNwwLsX2SET2JhVB1Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/consola": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/consola/-/consola-3.4.0.tgz", + "integrity": "sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==", + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/console": { + "version": "0.7.2", + "resolved": "https://registry.npmmirror.com/console/-/console-0.7.2.tgz", + "integrity": "sha512-+JSDwGunA4MTEgAV/4VBKwUHonP8CzJ/6GIuwPi6acKFqFfHUdSGCm89ZxZ5FfGWdZfkdgAroy5bJ5FSeN/t4g==", + "dev": true, + "license": "MIT" + }, + "node_modules/constant-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/constant-case/-/constant-case-3.0.4.tgz", + "integrity": "sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "node_modules/copy-anything": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-3.0.5.tgz", + "integrity": "sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==", + "license": "MIT", + "dependencies": { + "is-what": "^4.1.8" + }, + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", + "license": "MIT", + "dependencies": { + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==", + "license": "MIT" + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "license": "Apache-2.0", + "optional": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dom-zindex": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/dom-zindex/-/dom-zindex-1.0.6.tgz", + "integrity": "sha512-FKWIhiU96bi3xpP9ewRMgANsoVmMUBnMnmpCT6dPMZOunVYJQmJhSRruoI0XSPoHeIif3kyEuiHbFrOJwEJaEA==", + "license": "MIT" + }, + "node_modules/dom7": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/dom7/-/dom7-3.0.0.tgz", + "integrity": "sha512-oNlcUdHsC4zb7Msx7JN3K0Nro1dzJ48knvBOnDPKJ2GV9wl1i5vydJZUSyOfrkKFDZEud/jBsTk92S/VGSAe/g==", + "license": "MIT", + "dependencies": { + "ssr-window": "^3.0.0-alpha.1" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha512-asLFVfWWtJ90ZyOUHMqk7/S2w2guQKxUI2itj3d92ADHhxUSbCMGi1f1cBcJ7xM1To+pE/Khbwo1yuNbMEPKeA==", + "license": "BSD-3-Clause", + "dependencies": { + "readable-stream": "^2.0.2" + } + }, + "node_modules/duplexer2/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/duplexer2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/duplexer2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/element-china-area-data": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/element-china-area-data/-/element-china-area-data-6.1.0.tgz", + "integrity": "sha512-IkpcjwQv2A/2AxFiSoaISZ+oMw1rZCPUSOg5sOCwT5jKc96TaawmKZeY81xfxXsO0QbKxU5LLc6AirhG52hUmg==", + "license": "MIT", + "dependencies": { + "china-division": "^2.7.0" + } + }, + "node_modules/element-plus": { + "version": "2.9.5", + "resolved": "https://registry.npmmirror.com/element-plus/-/element-plus-2.9.5.tgz", + "integrity": "sha512-r+X79oogLbYq8p9L5f9fHSHhUFNM0AL72aikqiZVxSc2/08mK6m/PotiB9e/D90QmWTIHIaFnFmW65AcXmneig==", + "license": "MIT", + "dependencies": { + "@ctrl/tinycolor": "^3.4.1", + "@element-plus/icons-vue": "^2.3.1", + "@floating-ui/dom": "^1.0.1", + "@popperjs/core": "npm:@sxzz/popperjs-es@^2.11.7", + "@types/lodash": "^4.14.182", + "@types/lodash-es": "^4.17.6", + "@vueuse/core": "^9.1.0", + "async-validator": "^4.2.5", + "dayjs": "^1.11.13", + "escape-html": "^1.0.3", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "lodash-unified": "^1.0.2", + "memoize-one": "^6.0.0", + "normalize-wheel-es": "^1.2.0" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/element-plus/node_modules/@types/web-bluetooth": { + "version": "0.0.16", + "resolved": "https://registry.npmmirror.com/@types/web-bluetooth/-/web-bluetooth-0.0.16.tgz", + "integrity": "sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==", + "license": "MIT" + }, + "node_modules/element-plus/node_modules/@vueuse/core": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/core/-/core-9.13.0.tgz", + "integrity": "sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==", + "license": "MIT", + "dependencies": { + "@types/web-bluetooth": "^0.0.16", + "@vueuse/metadata": "9.13.0", + "@vueuse/shared": "9.13.0", + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/metadata": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/metadata/-/metadata-9.13.0.tgz", + "integrity": "sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/element-plus/node_modules/@vueuse/shared": { + "version": "9.13.0", + "resolved": "https://registry.npmmirror.com/@vueuse/shared/-/shared-9.13.0.tgz", + "integrity": "sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==", + "license": "MIT", + "dependencies": { + "vue-demi": "*" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "0.9.3", + "resolved": "https://registry.npmmirror.com/es-module-lexer/-/es-module-lexer-0.9.3.tgz", + "integrity": "sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmmirror.com/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/esbuild": { + "version": "0.25.0", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.0.tgz", + "integrity": "sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.0", + "@esbuild/android-arm": "0.25.0", + "@esbuild/android-arm64": "0.25.0", + "@esbuild/android-x64": "0.25.0", + "@esbuild/darwin-arm64": "0.25.0", + "@esbuild/darwin-x64": "0.25.0", + "@esbuild/freebsd-arm64": "0.25.0", + "@esbuild/freebsd-x64": "0.25.0", + "@esbuild/linux-arm": "0.25.0", + "@esbuild/linux-arm64": "0.25.0", + "@esbuild/linux-ia32": "0.25.0", + "@esbuild/linux-loong64": "0.25.0", + "@esbuild/linux-mips64el": "0.25.0", + "@esbuild/linux-ppc64": "0.25.0", + "@esbuild/linux-riscv64": "0.25.0", + "@esbuild/linux-s390x": "0.25.0", + "@esbuild/linux-x64": "0.25.0", + "@esbuild/netbsd-arm64": "0.25.0", + "@esbuild/netbsd-x64": "0.25.0", + "@esbuild/openbsd-arm64": "0.25.0", + "@esbuild/openbsd-x64": "0.25.0", + "@esbuild/sunos-x64": "0.25.0", + "@esbuild/win32-arm64": "0.25.0", + "@esbuild/win32-ia32": "0.25.0", + "@esbuild/win32-x64": "0.25.0" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT" + }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmmirror.com/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "node_modules/exceljs": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/exceljs/-/exceljs-4.4.0.tgz", + "integrity": "sha512-XctvKaEMaj1Ii9oDOqbW/6e1gXknSY4g/aLCDicOXqBE4M0nRWkUu0PTp++UPNzoFY12BNHMfs/VadKIS6llvg==", + "license": "MIT", + "dependencies": { + "archiver": "^5.0.0", + "dayjs": "^1.8.34", + "fast-csv": "^4.3.1", + "jszip": "^3.10.1", + "readable-stream": "^3.6.0", + "saxes": "^5.0.1", + "tmp": "^0.2.0", + "unzipper": "^0.10.11", + "uuid": "^8.3.0" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "node_modules/exsolve": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/exsolve/-/exsolve-1.0.2.tgz", + "integrity": "sha512-ZEcIMbthn2zeX4/wD/DLxDUjuCltHXT8Htvm/JFlTkdYgWh2+HGppgwwNUnIVxzxP7yJOPtuBAec0dLx6lVY8w==", + "dev": true, + "license": "MIT" + }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, + "node_modules/fast-csv": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/fast-csv/-/fast-csv-4.3.6.tgz", + "integrity": "sha512-2RNSpuwwsJGP0frGsOmTb9oUF+VkFSM4SyLTDgwf2ciHWTarN0lQTC+F2f/t5J9QjW+c65VFIAAu85GsvMIusw==", + "license": "MIT", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "deprecated": "This package is no longer supported.", + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuse.js": { + "version": "6.6.2", + "resolved": "https://registry.npmmirror.com/fuse.js/-/fuse.js-6.6.2.tgz", + "integrity": "sha512-cJaJkxCCxC8qIIcPBF9yGxY0W/tVZS3uEISDxhYIdtk8OL93pe+6Zj7LjCqVV4dzbqcriOZ+kQ/NE4RXZHsIGA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "license": "MIT", + "bin": { + "he": "bin/he" + } + }, + "node_modules/header-case": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/header-case/-/header-case-2.0.4.tgz", + "integrity": "sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/hookable": { + "version": "5.5.3", + "resolved": "https://registry.npmmirror.com/hookable/-/hookable-5.5.3.tgz", + "integrity": "sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==", + "license": "MIT" + }, + "node_modules/html-void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/html-void-elements/-/html-void-elements-2.0.1.tgz", + "integrity": "sha512-0quDb7s97CfemeJAnW9wC0hw78MtW7NU3hqtCD75g2vFlDLt36llsYD7uB7SUzojLMP24N5IatXf7ylGXiGG9A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/i18next": { + "version": "20.6.1", + "resolved": "https://registry.npmmirror.com/i18next/-/i18next-20.6.1.tgz", + "integrity": "sha512-yCMYTMEJ9ihCwEQQ3phLo7I/Pwycf8uAx+sRHwwk5U9Aui/IZYgQRyMqXafQOw5QQ7DM1Z+WyEXWIqSuJHhG2A==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "license": "MIT" + }, + "node_modules/immer": { + "version": "9.0.21", + "resolved": "https://registry.npmmirror.com/immer/-/immer-9.0.21.tgz", + "integrity": "sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/immutable": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/immutable/-/immutable-5.0.3.tgz", + "integrity": "sha512-P8IdPQHq3lA1xVeBRi5VPqUm5HDgKnx0Ru51wZz5mjxHr5n3RWhjIpOFU7ybkUxfB+5IToy+OLaHYDBIWsv+uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hotkey": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/is-hotkey/-/is-hotkey-0.2.0.tgz", + "integrity": "sha512-UknnZK4RakDmTgz4PI1wIph5yxSs/mvChWs9ifnlXsKuXgWmOkY/hAE0H/k2MIqH0RlRye0i1oC07MCRSD28Mw==", + "license": "MIT" + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "license": "MIT" + }, + "node_modules/is-what": { + "version": "4.1.16", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-4.1.16.tgz", + "integrity": "sha512-ZhMwEosbFJkA0YhFnNDgTM4ZxDRsS6HqTo7qsZM08fehyRYIYa0yHu5R6mgo1n/8MgaPBXiPimPD77baVFYg+A==", + "license": "MIT", + "engines": { + "node": ">=12.13" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", + "license": "BSD-3-Clause" + }, + "node_modules/js-cookie": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/js-cookie/-/js-cookie-3.0.5.tgz", + "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/js-tokens": { + "version": "9.0.1", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-9.0.1.tgz", + "integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "license": "MIT" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "license": "MIT", + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "license": "MIT", + "dependencies": { + "immediate": "~3.0.5" + } + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/listenercount": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/listenercount/-/listenercount-1.0.1.tgz", + "integrity": "sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==", + "license": "ISC" + }, + "node_modules/local-pkg": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, + "node_modules/lodash-unified": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/lodash-unified/-/lodash-unified-1.0.3.tgz", + "integrity": "sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==", + "license": "MIT", + "peerDependencies": { + "@types/lodash-es": "*", + "lodash": "*", + "lodash-es": "*" + } + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", + "license": "MIT" + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "license": "MIT" + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "license": "MIT" + }, + "node_modules/lodash.escaperegexp": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", + "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "license": "MIT" + }, + "node_modules/lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==", + "license": "MIT" + }, + "node_modules/lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha512-5dcWxm23+VAoz+awKmBaiBvzox8+RqMgFhi7UvX9DHZr2HdxHXM/Wrf8cfKpsW37RNrvtPn6hSwNqurSILbmJw==", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", + "deprecated": "This package is deprecated. Use require('node:util').isDeepStrictEqual instead.", + "license": "MIT" + }, + "node_modules/lodash.isfunction": { + "version": "3.0.9", + "resolved": "https://registry.npmmirror.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz", + "integrity": "sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==", + "license": "MIT" + }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" + }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==", + "license": "MIT" + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "license": "MIT" + }, + "node_modules/lodash.toarray": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz", + "integrity": "sha512-QyffEA3i5dma5q2490+SgCvDN0pXLmRGSyAANuVi0HQ01Pkfr9fuoKQW8wm1wGBnJITs/mS7wQvS6VshUEBFCw==", + "license": "MIT" + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "license": "MIT" + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "license": "MIT" + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmmirror.com/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "license": "MIT" + }, + "node_modules/memoize-one": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/memoize-one/-/memoize-one-6.0.0.tgz", + "integrity": "sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==", + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/mime-match/-/mime-match-1.0.2.tgz", + "integrity": "sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==", + "license": "ISC", + "dependencies": { + "wildcard": "^1.1.0" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==", + "license": "MIT" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/muggle-string": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/muggle-string/-/muggle-string-0.3.1.tgz", + "integrity": "sha512-ckmWDJjphvd/FvZawgygcUeQCxzvohjFO5RxTjj4eq8kw359gFF3E1brjfI+viLMxss5JrHTDRHZvu2/tuy0Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/namespace-emitter": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/namespace-emitter/-/namespace-emitter-2.0.1.tgz", + "integrity": "sha512-N/sMKHniSDJBjfrkbS/tpkPj4RAbvW3mr8UAzvlMHyun93XEm83IAvhWtJVHo+RHn/oO8Job5YN4b+wRjSVp5g==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "license": "ISC" + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-wheel-es": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/normalize-wheel-es/-/normalize-wheel-es-1.2.0.tgz", + "integrity": "sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==", + "license": "BSD-3-Clause" + }, + "node_modules/nprogress": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/nprogress/-/nprogress-0.2.0.tgz", + "integrity": "sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==", + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "license": "(MIT AND Zlib)" + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-browserify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-1.0.1.tgz", + "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", + "license": "MIT" + }, + "node_modules/path-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/path-case/-/path-case-3.0.4.tgz", + "integrity": "sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/perfect-debounce": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/perfect-debounce/-/perfect-debounce-1.0.0.tgz", + "integrity": "sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==", + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pinia": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/pinia/-/pinia-3.0.1.tgz", + "integrity": "sha512-WXglsDzztOTH6IfcJ99ltYZin2mY8XZCXujkYWVIJlBjqsP6ST7zw+Aarh63E1cDVYeyUcPCxPHzJpEOmzB6Wg==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^7.7.2" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "typescript": ">=4.4.4", + "vue": "^2.7.0 || ^3.5.11" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/@vue/devtools-api": { + "version": "7.7.2", + "resolved": "https://registry.npmmirror.com/@vue/devtools-api/-/devtools-api-7.7.2.tgz", + "integrity": "sha512-1syn558KhyN+chO5SjlZIwJ8bV/bQ1nOVTG66t2RbG66ZGekyiYNmRO7X9BJCXQqPsFHlnksqvPhce2qpzxFnA==", + "license": "MIT", + "dependencies": { + "@vue/devtools-kit": "^7.7.2" + } + }, + "node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/preact": { + "version": "10.26.4", + "resolved": "https://registry.npmmirror.com/preact/-/preact-10.26.4.tgz", + "integrity": "sha512-KJhO7LBFTjP71d83trW+Ilnjbo+ySsaAgCfXOXUlmGzJ4ygYPWmysm77yg4emwfmoz3b22yvH5IsVFHbhUaH5w==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/preact" + } + }, + "node_modules/prismjs": { + "version": "1.29.0", + "resolved": "https://registry.npmmirror.com/prismjs/-/prismjs-1.29.0.tgz", + "integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/quansync": { + "version": "0.2.8", + "resolved": "https://registry.npmmirror.com/quansync/-/quansync-0.2.8.tgz", + "integrity": "sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdir-glob": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/readdir-glob/-/readdir-glob-1.1.3.tgz", + "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.1.0" + } + }, + "node_modules/readdir-glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rollup": { + "version": "4.34.9", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.34.9.tgz", + "integrity": "sha512-nF5XYqWWp9hx/LrpC8sZvvvmq0TeTjQgaZHYmAgwysT9nh8sWnZhBnM8ZyVbbJFIQBLwHDNoMqsBZBbUo4U8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.34.9", + "@rollup/rollup-android-arm64": "4.34.9", + "@rollup/rollup-darwin-arm64": "4.34.9", + "@rollup/rollup-darwin-x64": "4.34.9", + "@rollup/rollup-freebsd-arm64": "4.34.9", + "@rollup/rollup-freebsd-x64": "4.34.9", + "@rollup/rollup-linux-arm-gnueabihf": "4.34.9", + "@rollup/rollup-linux-arm-musleabihf": "4.34.9", + "@rollup/rollup-linux-arm64-gnu": "4.34.9", + "@rollup/rollup-linux-arm64-musl": "4.34.9", + "@rollup/rollup-linux-loongarch64-gnu": "4.34.9", + "@rollup/rollup-linux-powerpc64le-gnu": "4.34.9", + "@rollup/rollup-linux-riscv64-gnu": "4.34.9", + "@rollup/rollup-linux-s390x-gnu": "4.34.9", + "@rollup/rollup-linux-x64-gnu": "4.34.9", + "@rollup/rollup-linux-x64-musl": "4.34.9", + "@rollup/rollup-win32-arm64-msvc": "4.34.9", + "@rollup/rollup-win32-ia32-msvc": "4.34.9", + "@rollup/rollup-win32-x64-msvc": "4.34.9", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/sass": { + "version": "1.85.1", + "resolved": "https://registry.npmmirror.com/sass/-/sass-1.85.1.tgz", + "integrity": "sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^4.0.0", + "immutable": "^5.0.2", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + }, + "optionalDependencies": { + "@parcel/watcher": "^2.4.1" + } + }, + "node_modules/saxes": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/saxes/-/saxes-5.0.1.tgz", + "integrity": "sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "license": "MIT", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, + "node_modules/scule": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/scule/-/scule-1.3.0.tgz", + "integrity": "sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sentence-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/sentence-case/-/sentence-case-3.0.4.tgz", + "integrity": "sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/slate": { + "version": "0.72.8", + "resolved": "https://registry.npmmirror.com/slate/-/slate-0.72.8.tgz", + "integrity": "sha512-/nJwTswQgnRurpK+bGJFH1oM7naD5qDmHd89JyiKNT2oOKD8marW0QSBtuFnwEbL5aGCS8AmrhXQgNOsn4osAw==", + "license": "MIT", + "dependencies": { + "immer": "^9.0.6", + "is-plain-object": "^5.0.0", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/slate-history": { + "version": "0.66.0", + "resolved": "https://registry.npmmirror.com/slate-history/-/slate-history-0.66.0.tgz", + "integrity": "sha512-6MWpxGQZiMvSINlCbMW43E2YBSVMCMCIwQfBzGssjWw4kb0qfvj0pIdblWNRQZD0hR6WHP+dHHgGSeVdMWzfng==", + "license": "MIT", + "dependencies": { + "is-plain-object": "^5.0.0" + }, + "peerDependencies": { + "slate": ">=0.65.3" + } + }, + "node_modules/sm-crypto": { + "version": "0.3.13", + "resolved": "https://registry.npmmirror.com/sm-crypto/-/sm-crypto-0.3.13.tgz", + "integrity": "sha512-ztNF+pZq6viCPMA1A6KKu3bgpkmYti5avykRHbcFIdSipFdkVmfUw2CnpM2kBJyppIalqvczLNM3wR8OQ0pT5w==", + "license": "MIT", + "dependencies": { + "jsbn": "^1.1.0" + } + }, + "node_modules/snabbdom": { + "version": "3.6.2", + "resolved": "https://registry.npmmirror.com/snabbdom/-/snabbdom-3.6.2.tgz", + "integrity": "sha512-ig5qOnCDbugFntKi6c7Xlib8bA6xiJVk8O+WdFrV3wxbMqeHO0hXFQC4nAhPVWfZfi8255lcZkNhtIBINCc4+Q==", + "license": "MIT", + "engines": { + "node": ">=12.17.0" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/snake-case/-/snake-case-3.0.4.tgz", + "integrity": "sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "deprecated": "Please use @jridgewell/sourcemap-codec instead", + "dev": true, + "license": "MIT" + }, + "node_modules/speakingurl": { + "version": "14.0.1", + "resolved": "https://registry.npmmirror.com/speakingurl/-/speakingurl-14.0.1.tgz", + "integrity": "sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssr-window": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/ssr-window/-/ssr-window-3.0.0.tgz", + "integrity": "sha512-q+8UfWDg9Itrg0yWK7oe5p/XRCJpJF9OBtXfOPgSJl+u3Xd5KI328RUEvUqSMVM9CiQUEf1QdBzJMkYGErj9QA==", + "license": "MIT" + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-literal": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/strip-literal/-/strip-literal-2.1.1.tgz", + "integrity": "sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^9.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/superjson": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/superjson/-/superjson-2.2.2.tgz", + "integrity": "sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==", + "license": "MIT", + "dependencies": { + "copy-anything": "^3.0.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/tiny-warning/-/tiny-warning-1.0.3.tgz", + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" + }, + "node_modules/tmp": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.2.3.tgz", + "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "license": "MIT", + "engines": { + "node": ">=14.14" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/traverse": { + "version": "0.3.9", + "resolved": "https://registry.npmmirror.com/traverse/-/traverse-0.3.9.tgz", + "integrity": "sha512-iawgk0hLP3SxGKDfnDJf8wTz4p2qImnyihM5Hh/sGvQ3K37dPi/w8sRhdNIxYA1TwFwc5mDhIJq+O0RsvXBKdQ==", + "license": "MIT/X11", + "engines": { + "node": "*" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmmirror.com/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "license": "ISC" + }, + "node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmmirror.com/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmmirror.com/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unimport": { + "version": "3.14.6", + "resolved": "https://registry.npmmirror.com/unimport/-/unimport-3.14.6.tgz", + "integrity": "sha512-CYvbDaTT04Rh8bmD8jz3WPmHYZRG/NnvYVzwD6V1YAlvvKROlAeNDUBhkBGzNav2RKaeuXvlWYaa1V4Lfi/O0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.1.4", + "acorn": "^8.14.0", + "escape-string-regexp": "^5.0.0", + "estree-walker": "^3.0.3", + "fast-glob": "^3.3.3", + "local-pkg": "^1.0.0", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "pathe": "^2.0.1", + "picomatch": "^4.0.2", + "pkg-types": "^1.3.0", + "scule": "^1.3.0", + "strip-literal": "^2.1.1", + "unplugin": "^1.16.1" + } + }, + "node_modules/unimport/node_modules/confbox": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.2.1.tgz", + "integrity": "sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==", + "dev": true, + "license": "MIT" + }, + "node_modules/unimport/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/unimport/node_modules/local-pkg": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/unimport/node_modules/local-pkg/node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, + "node_modules/unimport/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unplugin": { + "version": "1.16.1", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-1.16.1.tgz", + "integrity": "sha512-4/u/j4FrCKdi17jaxuJA0jClGxB1AvU2hw/IuayPc4ay1XGaJs/rbb4v5WKwAjNifjmXK9PIFyuPiaK8azyR9w==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/unplugin-auto-import": { + "version": "0.16.7", + "resolved": "https://registry.npmmirror.com/unplugin-auto-import/-/unplugin-auto-import-0.16.7.tgz", + "integrity": "sha512-w7XmnRlchq6YUFJVFGSvG1T/6j8GrdYN6Em9Wf0Ye+HXgD/22kont+WnuCAA0UaUoxtuvRR1u/mXKy63g/hfqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/utils": "^0.7.6", + "@rollup/pluginutils": "^5.0.5", + "fast-glob": "^3.3.1", + "local-pkg": "^0.5.0", + "magic-string": "^0.30.5", + "minimatch": "^9.0.3", + "unimport": "^3.4.0", + "unplugin": "^1.5.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@nuxt/kit": "^3.2.2", + "@vueuse/core": "*" + }, + "peerDependenciesMeta": { + "@nuxt/kit": { + "optional": true + }, + "@vueuse/core": { + "optional": true + } + } + }, + "node_modules/unplugin-auto-import/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/unplugin-auto-import/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/unplugin-vue-components": { + "version": "0.25.2", + "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-0.25.2.tgz", + "integrity": "sha512-OVmLFqILH6w+eM8fyt/d/eoJT9A6WO51NZLf1vC5c1FZ4rmq2bbGxTy8WP2Jm7xwFdukaIdv819+UI7RClPyCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/utils": "^0.7.5", + "@rollup/pluginutils": "^5.0.2", + "chokidar": "^3.5.3", + "debug": "^4.3.4", + "fast-glob": "^3.3.0", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "minimatch": "^9.0.3", + "resolve": "^1.22.2", + "unplugin": "^1.4.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/unplugin-vue-components/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/unplugin-vue-components/node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/unplugin-vue-components/node_modules/local-pkg": { + "version": "0.4.3", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-0.4.3.tgz", + "integrity": "sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/unplugin-vue-components/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/unplugin-vue-components/node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/unzipper": { + "version": "0.10.14", + "resolved": "https://registry.npmmirror.com/unzipper/-/unzipper-0.10.14.tgz", + "integrity": "sha512-ti4wZj+0bQTiX2KmKWuwj7lhV+2n//uXEotUmGuQqrbVZSEGFMbI68+c6JCQ8aAmUWYvtHEz2A8K6wXvueR/6g==", + "license": "MIT", + "dependencies": { + "big-integer": "^1.6.17", + "binary": "~0.3.0", + "bluebird": "~3.4.1", + "buffer-indexof-polyfill": "~1.0.0", + "duplexer2": "~0.1.4", + "fstream": "^1.0.12", + "graceful-fs": "^4.2.2", + "listenercount": "~1.0.1", + "readable-stream": "~2.3.6", + "setimmediate": "~1.0.4" + } + }, + "node_modules/unzipper/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/unzipper/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/unzipper/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/upper-case": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/upper-case/-/upper-case-2.0.2.tgz", + "integrity": "sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/upper-case-first/-/upper-case-first-2.0.2.tgz", + "integrity": "sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vite": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/vite/-/vite-6.2.0.tgz", + "integrity": "sha512-7dPxoo+WsT/64rDcwoOjk76XHj+TqNTIvHKcuMQ1k4/SeHDaQt5GFAeLYzrimZrMpn/O6DtdI03WUjdxuPM0oQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite-plugin-style-import": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/vite-plugin-style-import/-/vite-plugin-style-import-2.0.0.tgz", + "integrity": "sha512-qtoHQae5dSUQPo/rYz/8p190VU5y19rtBaeV7ryLa/AYAU/e9CG89NrN/3+k7MR8mJy/GPIu91iJ3zk9foUOSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^4.1.2", + "change-case": "^4.1.2", + "console": "^0.7.2", + "es-module-lexer": "^0.9.3", + "fs-extra": "^10.0.0", + "magic-string": "^0.25.7", + "pathe": "^0.2.0" + }, + "peerDependencies": { + "vite": ">=2.0.0" + } + }, + "node_modules/vite-plugin-style-import/node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", + "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/vite-plugin-style-import/node_modules/magic-string": { + "version": "0.25.9", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.25.9.tgz", + "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/vite-plugin-style-import/node_modules/pathe": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-0.2.0.tgz", + "integrity": "sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==", + "dev": true, + "license": "MIT" + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-demi": { + "version": "0.14.10", + "resolved": "https://registry.npmmirror.com/vue-demi/-/vue-demi-0.14.10.tgz", + "integrity": "sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-4.5.0.tgz", + "integrity": "sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==", + "license": "MIT", + "dependencies": { + "@vue/devtools-api": "^6.6.4" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "vue": "^3.2.0" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.7.16", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", + "integrity": "sha512-AYbUWAJHLGGQM7+cNTELw+KsOG9nl2CnSv467WobS5Cv9uk3wFcnr1Etsz2sEIHEZvw1U+o9mRlEO6QbZvUPGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.8.27", + "resolved": "https://registry.npmmirror.com/vue-tsc/-/vue-tsc-1.8.27.tgz", + "integrity": "sha512-WesKCAZCRAbmmhuGl3+VrdWItEvfoFIPXOvUJkjULi+x+6G/Dy69yO3TBRJDr9eUlmsNAwVmxsNZxvHKzbkKdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@volar/typescript": "~1.11.1", + "@vue/language-core": "1.8.27", + "semver": "^7.5.4" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, + "node_modules/vxe-pc-ui": { + "version": "4.4.4", + "resolved": "https://registry.npmmirror.com/vxe-pc-ui/-/vxe-pc-ui-4.4.4.tgz", + "integrity": "sha512-aBXXAsgWOk2fnIjPQfUnUa/e4I36wjy2DWPUttDKZXpwiGptM+X0oqxvpgMSQgcNME4VkHz6NiHIhbnJlN039Q==", + "license": "MIT", + "dependencies": { + "@vxe-ui/core": "^4.0.33" + } + }, + "node_modules/vxe-table": { + "version": "4.11.18", + "resolved": "https://registry.npmmirror.com/vxe-table/-/vxe-table-4.11.18.tgz", + "integrity": "sha512-hd5yBmKfsOwU0X5KCoGrHKKH3rp/GVBJvbW/gcq9EO/pfhezPM4Y3POlRgxVCd7QmbQtZzMFhmZcR17nhumo3g==", + "license": "MIT", + "dependencies": { + "vxe-pc-ui": "^4.4.2" + } + }, + "node_modules/vxe-table-plugin-export-xlsx": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/vxe-table-plugin-export-xlsx/-/vxe-table-plugin-export-xlsx-4.0.7.tgz", + "integrity": "sha512-Auulqo27h3gTZCRFUXO+FN4SSqYx4rtkLCDmvo13uJ8HDh07YvxRkquVLwyTA8hiWVaN0aEUP/VWJLNMLCxgyw==", + "license": "MIT", + "peerDependencies": { + "vxe-table": "^4.5.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/wildcard": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/wildcard/-/wildcard-1.1.2.tgz", + "integrity": "sha512-DXukZJxpHA8LuotRwL0pP1+rS6CS7FF2qStDDE1C7DDg2rLud2PXRMuEDYIPhgEezwnlHNL4c+N6MfMTjCGTng==", + "license": "MIT" + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/xe-utils": { + "version": "3.7.3", + "resolved": "https://registry.npmmirror.com/xe-utils/-/xe-utils-3.7.3.tgz", + "integrity": "sha512-GEBQy28TKjiQ2gMIc6wbNvoKWsNeNALh+QNH+cOp+qymXIsNpNrfaXA9U6Uv/ZezBIGUgFW4j2FBHph3Eoj/fQ==", + "license": "MIT" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "license": "MIT" + }, + "node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "license": "MIT", + "dependencies": { + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "license": "MIT", + "dependencies": { + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">= 10" + } + } + } +} diff --git a/abacus-static-framework/package.json b/abacus-static-framework/package.json new file mode 100644 index 0000000..63fffe6 --- /dev/null +++ b/abacus-static-framework/package.json @@ -0,0 +1,53 @@ +{ + "name": "abacus-static-framework", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build:prod": "vite build --mode production &&vue-tsc --noEmit", + "build:stage": "vite build --mode staging &&vue-tsc --noEmit", + "preview": "vite preview" + }, + "dependencies": { + "@element-plus/icons-vue": "^2.3.1", + "@vue-office/docx": "^1.6.0", + "@vue-office/excel": "^1.7.2", + "@vue-office/pdf": "^1.6.5", + "@vueuse/core": "^10.2.1", + "@wangeditor/editor": "^5.1.23", + "@wangeditor/editor-for-vue": "^5.1.12", + "axios": "^1.8.1", + "consola": "^3.2.3", + "crypto-js": "^4.2.0", + "element-china-area-data": "^6.1.0", + "element-plus": "^2.9.5", + "exceljs": "^4.4.0", + "fuse.js": "^6.6.2", + "js-base64": "^3.7.7", + "js-cookie": "^3.0.5", + "markdown-it": "^14.1.0", + "nprogress": "^0.2.0", + "path-browserify": "^1.0.1", + "path-to-regexp": "^6.2.1", + "pinia": "^3.0.1", + "sm-crypto": "^0.3.13", + "vue": "^3.5.13", + "vue-router": "^4.5.0", + "vxe-table": "^4.11.18", + "vxe-table-plugin-export-xlsx": "^4.0.7", + "xe-utils": "^3.7.3" + }, + "devDependencies": { + "@types/node": "^20.3.1", + "@types/nprogress": "^0.2.0", + "@vitejs/plugin-vue": "^5.2.1", + "sass": "^1.63.4", + "typescript": "^5.0.2", + "unplugin-auto-import": "^0.16.4", + "unplugin-vue-components": "^0.25.1", + "vite": "^6.0.0", + "vite-plugin-style-import": "^2.0.0", + "vue-tsc": "^1.4.2" + } +} diff --git a/abacus-static-framework/public/data/data.js b/abacus-static-framework/public/data/data.js new file mode 100644 index 0000000..cf3f68f --- /dev/null +++ b/abacus-static-framework/public/data/data.js @@ -0,0 +1,7 @@ +// 全局变量 +// 用于定义通用模拟数据 +let publicData={ + currentSubsystemName:'系统管理',//当前子系统中文名称,与后端菜单子系统名称保持一致 + currentSubsystem:'sms',//当前子系统名称,与后端菜单子系统编码保持一致 + externalOldERPIndex:'/sms/sms/',//子系统动静分离版本页面地址配置,用于兼容历史模块使用 +} \ No newline at end of file diff --git a/abacus-static-framework/public/favicon.ico b/abacus-static-framework/public/favicon.ico new file mode 100644 index 0000000..b0b8cfb Binary files /dev/null and b/abacus-static-framework/public/favicon.ico differ diff --git a/abacus-static-framework/public/templete/打印控件.zip b/abacus-static-framework/public/templete/打印控件.zip new file mode 100644 index 0000000..f99adde Binary files /dev/null and b/abacus-static-framework/public/templete/打印控件.zip differ diff --git a/abacus-static-framework/src/App.vue b/abacus-static-framework/src/App.vue new file mode 100644 index 0000000..25ab021 --- /dev/null +++ b/abacus-static-framework/src/App.vue @@ -0,0 +1,24 @@ + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/assets/img/403.png b/abacus-static-framework/src/assets/img/403.png new file mode 100644 index 0000000..0c5ec7c Binary files /dev/null and b/abacus-static-framework/src/assets/img/403.png differ diff --git a/abacus-static-framework/src/assets/img/404.png b/abacus-static-framework/src/assets/img/404.png new file mode 100644 index 0000000..2333586 Binary files /dev/null and b/abacus-static-framework/src/assets/img/404.png differ diff --git a/abacus-static-framework/src/assets/img/500.png b/abacus-static-framework/src/assets/img/500.png new file mode 100644 index 0000000..6f3b6bf Binary files /dev/null and b/abacus-static-framework/src/assets/img/500.png differ diff --git a/abacus-static-framework/src/assets/img/favicon.ico b/abacus-static-framework/src/assets/img/favicon.ico new file mode 100644 index 0000000..b0b8cfb Binary files /dev/null and b/abacus-static-framework/src/assets/img/favicon.ico differ diff --git a/abacus-static-framework/src/assets/img/head.jpg b/abacus-static-framework/src/assets/img/head.jpg new file mode 100644 index 0000000..fe8c45b Binary files /dev/null and b/abacus-static-framework/src/assets/img/head.jpg differ diff --git a/abacus-static-framework/src/assets/img/icon/fold-back.png b/abacus-static-framework/src/assets/img/icon/fold-back.png new file mode 100644 index 0000000..1295a55 Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/fold-back.png differ diff --git a/abacus-static-framework/src/assets/img/icon/fold.png b/abacus-static-framework/src/assets/img/icon/fold.png new file mode 100644 index 0000000..796fb5c Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/fold.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_date.png b/abacus-static-framework/src/assets/img/icon/ic_date.png new file mode 100644 index 0000000..2d77595 Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_date.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_manage.png b/abacus-static-framework/src/assets/img/icon/ic_manage.png new file mode 100644 index 0000000..641e234 Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_manage.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_organizations.png b/abacus-static-framework/src/assets/img/icon/ic_organizations.png new file mode 100644 index 0000000..d9a1477 Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_organizations.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_set.png b/abacus-static-framework/src/assets/img/icon/ic_set.png new file mode 100644 index 0000000..7f8845a Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_set.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_taxcenter.png b/abacus-static-framework/src/assets/img/icon/ic_taxcenter.png new file mode 100644 index 0000000..1a78e23 Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_taxcenter.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_user_bss.png b/abacus-static-framework/src/assets/img/icon/ic_user_bss.png new file mode 100644 index 0000000..0d53415 Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_user_bss.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_user_downloadcenter.png b/abacus-static-framework/src/assets/img/icon/ic_user_downloadcenter.png new file mode 100644 index 0000000..83059fb Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_user_downloadcenter.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_user_files.png b/abacus-static-framework/src/assets/img/icon/ic_user_files.png new file mode 100644 index 0000000..964fe2f Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_user_files.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_user_logout.png b/abacus-static-framework/src/assets/img/icon/ic_user_logout.png new file mode 100644 index 0000000..e479b13 Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_user_logout.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_user_switch.png b/abacus-static-framework/src/assets/img/icon/ic_user_switch.png new file mode 100644 index 0000000..0b6292e Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_user_switch.png differ diff --git a/abacus-static-framework/src/assets/img/icon/ic_user_usercenter.png b/abacus-static-framework/src/assets/img/icon/ic_user_usercenter.png new file mode 100644 index 0000000..c07c741 Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/ic_user_usercenter.png differ diff --git a/abacus-static-framework/src/assets/img/icon/id-card-front.png b/abacus-static-framework/src/assets/img/icon/id-card-front.png new file mode 100644 index 0000000..757484f Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/id-card-front.png differ diff --git a/abacus-static-framework/src/assets/img/icon/unfold-back.png b/abacus-static-framework/src/assets/img/icon/unfold-back.png new file mode 100644 index 0000000..0abc8e9 Binary files /dev/null and b/abacus-static-framework/src/assets/img/icon/unfold-back.png differ diff --git a/abacus-static-framework/src/assets/img/id-card-front.png b/abacus-static-framework/src/assets/img/id-card-front.png new file mode 100644 index 0000000..757484f Binary files /dev/null and b/abacus-static-framework/src/assets/img/id-card-front.png differ diff --git a/abacus-static-framework/src/assets/img/logo.png b/abacus-static-framework/src/assets/img/logo.png new file mode 100644 index 0000000..f590688 Binary files /dev/null and b/abacus-static-framework/src/assets/img/logo.png differ diff --git a/abacus-static-framework/src/assets/img/menu/coupon.png b/abacus-static-framework/src/assets/img/menu/coupon.png new file mode 100644 index 0000000..66d3ba7 Binary files /dev/null and b/abacus-static-framework/src/assets/img/menu/coupon.png differ diff --git a/abacus-static-framework/src/assets/img/menu/home.png b/abacus-static-framework/src/assets/img/menu/home.png new file mode 100644 index 0000000..a691d2a Binary files /dev/null and b/abacus-static-framework/src/assets/img/menu/home.png differ diff --git a/abacus-static-framework/src/assets/img/menu/member.png b/abacus-static-framework/src/assets/img/menu/member.png new file mode 100644 index 0000000..171104d Binary files /dev/null and b/abacus-static-framework/src/assets/img/menu/member.png differ diff --git a/abacus-static-framework/src/assets/vue.svg b/abacus-static-framework/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/abacus-static-framework/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/abacus-static-framework/src/auto-import.d.ts b/abacus-static-framework/src/auto-import.d.ts new file mode 100644 index 0000000..ef84c82 --- /dev/null +++ b/abacus-static-framework/src/auto-import.d.ts @@ -0,0 +1,297 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +export {} +declare global { + const EffectScope: typeof import('vue')['EffectScope'] + const ElMessage: typeof import('element-plus/es')['ElMessage'] + const asyncComputed: typeof import('@vueuse/core')['asyncComputed'] + const autoResetRef: typeof import('@vueuse/core')['autoResetRef'] + const computed: typeof import('vue')['computed'] + const computedAsync: typeof import('@vueuse/core')['computedAsync'] + const computedEager: typeof import('@vueuse/core')['computedEager'] + const computedInject: typeof import('@vueuse/core')['computedInject'] + const computedWithControl: typeof import('@vueuse/core')['computedWithControl'] + const controlledComputed: typeof import('@vueuse/core')['controlledComputed'] + const controlledRef: typeof import('@vueuse/core')['controlledRef'] + const createApp: typeof import('vue')['createApp'] + const createEventHook: typeof import('@vueuse/core')['createEventHook'] + const createGlobalState: typeof import('@vueuse/core')['createGlobalState'] + const createInjectionState: typeof import('@vueuse/core')['createInjectionState'] + const createReactiveFn: typeof import('@vueuse/core')['createReactiveFn'] + const createReusableTemplate: typeof import('@vueuse/core')['createReusableTemplate'] + const createSharedComposable: typeof import('@vueuse/core')['createSharedComposable'] + const createTemplatePromise: typeof import('@vueuse/core')['createTemplatePromise'] + const createUnrefFn: typeof import('@vueuse/core')['createUnrefFn'] + const customRef: typeof import('vue')['customRef'] + const debouncedRef: typeof import('@vueuse/core')['debouncedRef'] + const debouncedWatch: typeof import('@vueuse/core')['debouncedWatch'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const eagerComputed: typeof import('@vueuse/core')['eagerComputed'] + const effectScope: typeof import('vue')['effectScope'] + const extendRef: typeof import('@vueuse/core')['extendRef'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const ignorableWatch: typeof import('@vueuse/core')['ignorableWatch'] + const inject: typeof import('vue')['inject'] + const injectLocal: typeof import('@vueuse/core')['injectLocal'] + const isDefined: typeof import('@vueuse/core')['isDefined'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const makeDestructurable: typeof import('@vueuse/core')['makeDestructurable'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeRouteLeave: typeof import('vue-router')['onBeforeRouteLeave'] + const onBeforeRouteUpdate: typeof import('vue-router')['onBeforeRouteUpdate'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onClickOutside: typeof import('@vueuse/core')['onClickOutside'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onKeyStroke: typeof import('@vueuse/core')['onKeyStroke'] + const onLongPress: typeof import('@vueuse/core')['onLongPress'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onStartTyping: typeof import('@vueuse/core')['onStartTyping'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] + const pausableWatch: typeof import('@vueuse/core')['pausableWatch'] + const provide: typeof import('vue')['provide'] + const provideLocal: typeof import('@vueuse/core')['provideLocal'] + const reactify: typeof import('@vueuse/core')['reactify'] + const reactifyObject: typeof import('@vueuse/core')['reactifyObject'] + const reactive: typeof import('vue')['reactive'] + const reactiveComputed: typeof import('@vueuse/core')['reactiveComputed'] + const reactiveOmit: typeof import('@vueuse/core')['reactiveOmit'] + const reactivePick: typeof import('@vueuse/core')['reactivePick'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const refAutoReset: typeof import('@vueuse/core')['refAutoReset'] + const refDebounced: typeof import('@vueuse/core')['refDebounced'] + const refDefault: typeof import('@vueuse/core')['refDefault'] + const refThrottled: typeof import('@vueuse/core')['refThrottled'] + const refWithControl: typeof import('@vueuse/core')['refWithControl'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const resolveRef: typeof import('@vueuse/core')['resolveRef'] + const resolveUnref: typeof import('@vueuse/core')['resolveUnref'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const syncRef: typeof import('@vueuse/core')['syncRef'] + const syncRefs: typeof import('@vueuse/core')['syncRefs'] + const templateRef: typeof import('@vueuse/core')['templateRef'] + const throttledRef: typeof import('@vueuse/core')['throttledRef'] + const throttledWatch: typeof import('@vueuse/core')['throttledWatch'] + const toRaw: typeof import('vue')['toRaw'] + const toReactive: typeof import('@vueuse/core')['toReactive'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const toValue: typeof import('vue')['toValue'] + const triggerRef: typeof import('vue')['triggerRef'] + const tryOnBeforeMount: typeof import('@vueuse/core')['tryOnBeforeMount'] + const tryOnBeforeUnmount: typeof import('@vueuse/core')['tryOnBeforeUnmount'] + const tryOnMounted: typeof import('@vueuse/core')['tryOnMounted'] + const tryOnScopeDispose: typeof import('@vueuse/core')['tryOnScopeDispose'] + const tryOnUnmounted: typeof import('@vueuse/core')['tryOnUnmounted'] + const unref: typeof import('vue')['unref'] + const unrefElement: typeof import('@vueuse/core')['unrefElement'] + const until: typeof import('@vueuse/core')['until'] + const useActiveElement: typeof import('@vueuse/core')['useActiveElement'] + const useAnimate: typeof import('@vueuse/core')['useAnimate'] + const useArrayDifference: typeof import('@vueuse/core')['useArrayDifference'] + const useArrayEvery: typeof import('@vueuse/core')['useArrayEvery'] + const useArrayFilter: typeof import('@vueuse/core')['useArrayFilter'] + const useArrayFind: typeof import('@vueuse/core')['useArrayFind'] + const useArrayFindIndex: typeof import('@vueuse/core')['useArrayFindIndex'] + const useArrayFindLast: typeof import('@vueuse/core')['useArrayFindLast'] + const useArrayIncludes: typeof import('@vueuse/core')['useArrayIncludes'] + const useArrayJoin: typeof import('@vueuse/core')['useArrayJoin'] + const useArrayMap: typeof import('@vueuse/core')['useArrayMap'] + const useArrayReduce: typeof import('@vueuse/core')['useArrayReduce'] + const useArraySome: typeof import('@vueuse/core')['useArraySome'] + const useArrayUnique: typeof import('@vueuse/core')['useArrayUnique'] + const useAsyncQueue: typeof import('@vueuse/core')['useAsyncQueue'] + const useAsyncState: typeof import('@vueuse/core')['useAsyncState'] + const useAttrs: typeof import('vue')['useAttrs'] + const useBase64: typeof import('@vueuse/core')['useBase64'] + const useBattery: typeof import('@vueuse/core')['useBattery'] + const useBluetooth: typeof import('@vueuse/core')['useBluetooth'] + const useBreakpoints: typeof import('@vueuse/core')['useBreakpoints'] + const useBroadcastChannel: typeof import('@vueuse/core')['useBroadcastChannel'] + const useBrowserLocation: typeof import('@vueuse/core')['useBrowserLocation'] + const useCached: typeof import('@vueuse/core')['useCached'] + const useClipboard: typeof import('@vueuse/core')['useClipboard'] + const useClipboardItems: typeof import('@vueuse/core')['useClipboardItems'] + const useCloned: typeof import('@vueuse/core')['useCloned'] + const useColorMode: typeof import('@vueuse/core')['useColorMode'] + const useConfirmDialog: typeof import('@vueuse/core')['useConfirmDialog'] + const useCounter: typeof import('@vueuse/core')['useCounter'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVar: typeof import('@vueuse/core')['useCssVar'] + const useCssVars: typeof import('vue')['useCssVars'] + const useCurrentElement: typeof import('@vueuse/core')['useCurrentElement'] + const useCycleList: typeof import('@vueuse/core')['useCycleList'] + const useDark: typeof import('@vueuse/core')['useDark'] + const useDateFormat: typeof import('@vueuse/core')['useDateFormat'] + const useDebounce: typeof import('@vueuse/core')['useDebounce'] + const useDebounceFn: typeof import('@vueuse/core')['useDebounceFn'] + const useDebouncedRefHistory: typeof import('@vueuse/core')['useDebouncedRefHistory'] + const useDeviceMotion: typeof import('@vueuse/core')['useDeviceMotion'] + const useDeviceOrientation: typeof import('@vueuse/core')['useDeviceOrientation'] + const useDevicePixelRatio: typeof import('@vueuse/core')['useDevicePixelRatio'] + const useDevicesList: typeof import('@vueuse/core')['useDevicesList'] + const useDisplayMedia: typeof import('@vueuse/core')['useDisplayMedia'] + const useDocumentVisibility: typeof import('@vueuse/core')['useDocumentVisibility'] + const useDraggable: typeof import('@vueuse/core')['useDraggable'] + const useDropZone: typeof import('@vueuse/core')['useDropZone'] + const useElementBounding: typeof import('@vueuse/core')['useElementBounding'] + const useElementByPoint: typeof import('@vueuse/core')['useElementByPoint'] + const useElementHover: typeof import('@vueuse/core')['useElementHover'] + const useElementSize: typeof import('@vueuse/core')['useElementSize'] + const useElementVisibility: typeof import('@vueuse/core')['useElementVisibility'] + const useEventBus: typeof import('@vueuse/core')['useEventBus'] + const useEventListener: typeof import('@vueuse/core')['useEventListener'] + const useEventSource: typeof import('@vueuse/core')['useEventSource'] + const useEyeDropper: typeof import('@vueuse/core')['useEyeDropper'] + const useFavicon: typeof import('@vueuse/core')['useFavicon'] + const useFetch: typeof import('@vueuse/core')['useFetch'] + const useFileDialog: typeof import('@vueuse/core')['useFileDialog'] + const useFileSystemAccess: typeof import('@vueuse/core')['useFileSystemAccess'] + const useFocus: typeof import('@vueuse/core')['useFocus'] + const useFocusWithin: typeof import('@vueuse/core')['useFocusWithin'] + const useFps: typeof import('@vueuse/core')['useFps'] + const useFullscreen: typeof import('@vueuse/core')['useFullscreen'] + const useGamepad: typeof import('@vueuse/core')['useGamepad'] + const useGeolocation: typeof import('@vueuse/core')['useGeolocation'] + const useId: typeof import('vue')['useId'] + const useIdle: typeof import('@vueuse/core')['useIdle'] + const useImage: typeof import('@vueuse/core')['useImage'] + const useInfiniteScroll: typeof import('@vueuse/core')['useInfiniteScroll'] + const useIntersectionObserver: typeof import('@vueuse/core')['useIntersectionObserver'] + const useInterval: typeof import('@vueuse/core')['useInterval'] + const useIntervalFn: typeof import('@vueuse/core')['useIntervalFn'] + const useKeyModifier: typeof import('@vueuse/core')['useKeyModifier'] + const useLastChanged: typeof import('@vueuse/core')['useLastChanged'] + const useLink: typeof import('vue-router')['useLink'] + const useLocalStorage: typeof import('@vueuse/core')['useLocalStorage'] + const useMagicKeys: typeof import('@vueuse/core')['useMagicKeys'] + const useManualRefHistory: typeof import('@vueuse/core')['useManualRefHistory'] + const useMediaControls: typeof import('@vueuse/core')['useMediaControls'] + const useMediaQuery: typeof import('@vueuse/core')['useMediaQuery'] + const useMemoize: typeof import('@vueuse/core')['useMemoize'] + const useMemory: typeof import('@vueuse/core')['useMemory'] + const useModel: typeof import('vue')['useModel'] + const useMounted: typeof import('@vueuse/core')['useMounted'] + const useMouse: typeof import('@vueuse/core')['useMouse'] + const useMouseInElement: typeof import('@vueuse/core')['useMouseInElement'] + const useMousePressed: typeof import('@vueuse/core')['useMousePressed'] + const useMutationObserver: typeof import('@vueuse/core')['useMutationObserver'] + const useNavigatorLanguage: typeof import('@vueuse/core')['useNavigatorLanguage'] + const useNetwork: typeof import('@vueuse/core')['useNetwork'] + const useNow: typeof import('@vueuse/core')['useNow'] + const useObjectUrl: typeof import('@vueuse/core')['useObjectUrl'] + const useOffsetPagination: typeof import('@vueuse/core')['useOffsetPagination'] + const useOnline: typeof import('@vueuse/core')['useOnline'] + const usePageLeave: typeof import('@vueuse/core')['usePageLeave'] + const useParallax: typeof import('@vueuse/core')['useParallax'] + const useParentElement: typeof import('@vueuse/core')['useParentElement'] + const usePerformanceObserver: typeof import('@vueuse/core')['usePerformanceObserver'] + const usePermission: typeof import('@vueuse/core')['usePermission'] + const usePointer: typeof import('@vueuse/core')['usePointer'] + const usePointerLock: typeof import('@vueuse/core')['usePointerLock'] + const usePointerSwipe: typeof import('@vueuse/core')['usePointerSwipe'] + const usePreferredColorScheme: typeof import('@vueuse/core')['usePreferredColorScheme'] + const usePreferredContrast: typeof import('@vueuse/core')['usePreferredContrast'] + const usePreferredDark: typeof import('@vueuse/core')['usePreferredDark'] + const usePreferredLanguages: typeof import('@vueuse/core')['usePreferredLanguages'] + const usePreferredReducedMotion: typeof import('@vueuse/core')['usePreferredReducedMotion'] + const usePrevious: typeof import('@vueuse/core')['usePrevious'] + const useRafFn: typeof import('@vueuse/core')['useRafFn'] + const useRefHistory: typeof import('@vueuse/core')['useRefHistory'] + const useResizeObserver: typeof import('@vueuse/core')['useResizeObserver'] + const useRoute: typeof import('vue-router')['useRoute'] + const useRouter: typeof import('vue-router')['useRouter'] + const useScreenOrientation: typeof import('@vueuse/core')['useScreenOrientation'] + const useScreenSafeArea: typeof import('@vueuse/core')['useScreenSafeArea'] + const useScriptTag: typeof import('@vueuse/core')['useScriptTag'] + const useScroll: typeof import('@vueuse/core')['useScroll'] + const useScrollLock: typeof import('@vueuse/core')['useScrollLock'] + const useSessionStorage: typeof import('@vueuse/core')['useSessionStorage'] + const useShare: typeof import('@vueuse/core')['useShare'] + const useSlots: typeof import('vue')['useSlots'] + const useSorted: typeof import('@vueuse/core')['useSorted'] + const useSpeechRecognition: typeof import('@vueuse/core')['useSpeechRecognition'] + const useSpeechSynthesis: typeof import('@vueuse/core')['useSpeechSynthesis'] + const useStepper: typeof import('@vueuse/core')['useStepper'] + const useStorage: typeof import('@vueuse/core')['useStorage'] + const useStorageAsync: typeof import('@vueuse/core')['useStorageAsync'] + const useStyleTag: typeof import('@vueuse/core')['useStyleTag'] + const useSupported: typeof import('@vueuse/core')['useSupported'] + const useSwipe: typeof import('@vueuse/core')['useSwipe'] + const useTemplateRef: typeof import('vue')['useTemplateRef'] + const useTemplateRefsList: typeof import('@vueuse/core')['useTemplateRefsList'] + const useTextDirection: typeof import('@vueuse/core')['useTextDirection'] + const useTextSelection: typeof import('@vueuse/core')['useTextSelection'] + const useTextareaAutosize: typeof import('@vueuse/core')['useTextareaAutosize'] + const useThrottle: typeof import('@vueuse/core')['useThrottle'] + const useThrottleFn: typeof import('@vueuse/core')['useThrottleFn'] + const useThrottledRefHistory: typeof import('@vueuse/core')['useThrottledRefHistory'] + const useTimeAgo: typeof import('@vueuse/core')['useTimeAgo'] + const useTimeout: typeof import('@vueuse/core')['useTimeout'] + const useTimeoutFn: typeof import('@vueuse/core')['useTimeoutFn'] + const useTimeoutPoll: typeof import('@vueuse/core')['useTimeoutPoll'] + const useTimestamp: typeof import('@vueuse/core')['useTimestamp'] + const useTitle: typeof import('@vueuse/core')['useTitle'] + const useToNumber: typeof import('@vueuse/core')['useToNumber'] + const useToString: typeof import('@vueuse/core')['useToString'] + const useToggle: typeof import('@vueuse/core')['useToggle'] + const useTransition: typeof import('@vueuse/core')['useTransition'] + const useUrlSearchParams: typeof import('@vueuse/core')['useUrlSearchParams'] + const useUserMedia: typeof import('@vueuse/core')['useUserMedia'] + const useVModel: typeof import('@vueuse/core')['useVModel'] + const useVModels: typeof import('@vueuse/core')['useVModels'] + const useVibrate: typeof import('@vueuse/core')['useVibrate'] + const useVirtualList: typeof import('@vueuse/core')['useVirtualList'] + const useWakeLock: typeof import('@vueuse/core')['useWakeLock'] + const useWebNotification: typeof import('@vueuse/core')['useWebNotification'] + const useWebSocket: typeof import('@vueuse/core')['useWebSocket'] + const useWebWorker: typeof import('@vueuse/core')['useWebWorker'] + const useWebWorkerFn: typeof import('@vueuse/core')['useWebWorkerFn'] + const useWindowFocus: typeof import('@vueuse/core')['useWindowFocus'] + const useWindowScroll: typeof import('@vueuse/core')['useWindowScroll'] + const useWindowSize: typeof import('@vueuse/core')['useWindowSize'] + const watch: typeof import('vue')['watch'] + const watchArray: typeof import('@vueuse/core')['watchArray'] + const watchAtMost: typeof import('@vueuse/core')['watchAtMost'] + const watchDebounced: typeof import('@vueuse/core')['watchDebounced'] + const watchDeep: typeof import('@vueuse/core')['watchDeep'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchIgnorable: typeof import('@vueuse/core')['watchIgnorable'] + const watchImmediate: typeof import('@vueuse/core')['watchImmediate'] + const watchOnce: typeof import('@vueuse/core')['watchOnce'] + const watchPausable: typeof import('@vueuse/core')['watchPausable'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] + const watchThrottled: typeof import('@vueuse/core')['watchThrottled'] + const watchTriggerable: typeof import('@vueuse/core')['watchTriggerable'] + const watchWithFilter: typeof import('@vueuse/core')['watchWithFilter'] + const whenever: typeof import('@vueuse/core')['whenever'] +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, ComponentPublicInstance, ComputedRef, DirectiveBinding, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, MaybeRef, MaybeRefOrGetter, VNode, WritableComputedRef } from 'vue' + import('vue') +} diff --git a/abacus-static-framework/src/framework/api/acas/index.ts b/abacus-static-framework/src/framework/api/acas/index.ts new file mode 100644 index 0000000..a739a40 --- /dev/null +++ b/abacus-static-framework/src/framework/api/acas/index.ts @@ -0,0 +1,112 @@ +import request from '@/framework/utils/request'; +import { AxiosPromise } from 'axios'; +import { UserInfo } from './types'; + +function replaceAcasService(url){ + if(publicData.replaceAcasService){ + return url.replace('/acas/','/'+publicData.replaceAcasService+'/') + } + return url +} + + + +/** + * 获取路由列表 + */ +export function listRoutes(params: any = {}) { + return request({ + url: replaceAcasService('/acas/user/allowAccessMenuAndModules'), + method: 'get', + params + }); +} + + +/**获取key */ +export function getKey(params: any = {}) { + return request({ + url:replaceAcasService('/acas/pk'), + method: 'get', + params, + }); +} + + +/**刷新*/ +export function baseRefresh(url:string,data: any = {}) { + return request({ + headers: {'Content-Type': 'application/x-www-form-urlencoded'}, + url:replaceAcasService(url), + method: 'post', + data, + }); +} + +/**退出登录 */ +export function baseLogout(url:string,data: any = {}) { + return request({ + headers: {'Content-Type': 'application/x-www-form-urlencoded'}, + url:replaceAcasService(url), + method: 'post', + data, + }); +} + +/**登录后修改密码 */ +export function baseLoginUpdatePwd(url:string,data: any = {}) { + return request({ + headers: {'Content-Type': 'application/x-www-form-urlencoded'}, + url:replaceAcasService(url), + method: 'post', + data, + }); +} + + +/**获取key */ +export function getEmployee(params: any = {}) { + return request({ + url:replaceAcasService('/acas/employee/getEmployee'), + method: 'get', + params, + }); +} + + +/**获取员工管理业务域*/ +export function getBusinessDomain(params: any = {}) { + return request({ + url: replaceAcasService('/acas/user/loginUserdomain'), + method: 'get', + params + }); +} + +/**获取有权限的子系统*/ +export function getAllowAccessSubsystem(params: any = {}) { + return request({ + url: replaceAcasService('/acas/user/allowAccessSubsystem'), + method: 'get', + params + }); +} + +/**获取员工信息 */ +export function getUsermessage(params: any = {}) { + if (import.meta.env.MODE === 'development'){ + return new Promise((resolve) => { + resolve({"user":{"tenantId":"0000","tenantName":"奥博克","userId":"0","userName":"系统管理员","deptId":"01","deptName":"开发部","avatarUrl":""}}); + }); + }else{ + return request({ + url:'/acas/user/message', + method: 'get', + params, + }); + } + +} + + + diff --git a/abacus-static-framework/src/framework/api/acas/types.ts b/abacus-static-framework/src/framework/api/acas/types.ts new file mode 100644 index 0000000..1ae05cd --- /dev/null +++ b/abacus-static-framework/src/framework/api/acas/types.ts @@ -0,0 +1,9 @@ +/** + * 登录用户信息 + */ +export interface UserInfo { + dept: any; + employee: any; + roles: any; +} + diff --git a/abacus-static-framework/src/framework/api/sms/index.ts b/abacus-static-framework/src/framework/api/sms/index.ts new file mode 100644 index 0000000..6e40f53 --- /dev/null +++ b/abacus-static-framework/src/framework/api/sms/index.ts @@ -0,0 +1,13 @@ +import request from '@/framework/utils/request'; + +/**获取异步事件列表 */ +export function queryAsyncEvents(params: any = {}) { + return request({ + url:'/sms/asyncEvent/list', + method: 'get', + params, + }); +} + + + diff --git a/abacus-static-framework/src/framework/components/Breadcrumb/index.vue b/abacus-static-framework/src/framework/components/Breadcrumb/index.vue new file mode 100644 index 0000000..13d5a84 --- /dev/null +++ b/abacus-static-framework/src/framework/components/Breadcrumb/index.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/abacus-static-framework/src/framework/components/ErrorMessage/403.vue b/abacus-static-framework/src/framework/components/ErrorMessage/403.vue new file mode 100644 index 0000000..7dbb240 --- /dev/null +++ b/abacus-static-framework/src/framework/components/ErrorMessage/403.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/abacus-static-framework/src/framework/components/ErrorMessage/404.vue b/abacus-static-framework/src/framework/components/ErrorMessage/404.vue new file mode 100644 index 0000000..ba7edd2 --- /dev/null +++ b/abacus-static-framework/src/framework/components/ErrorMessage/404.vue @@ -0,0 +1,21 @@ + + + + + diff --git a/abacus-static-framework/src/framework/components/ErrorMessage/500.vue b/abacus-static-framework/src/framework/components/ErrorMessage/500.vue new file mode 100644 index 0000000..0429e74 --- /dev/null +++ b/abacus-static-framework/src/framework/components/ErrorMessage/500.vue @@ -0,0 +1,20 @@ + + + + + diff --git a/abacus-static-framework/src/framework/components/ErrorMessage/index.scss b/abacus-static-framework/src/framework/components/ErrorMessage/index.scss new file mode 100644 index 0000000..7a788b4 --- /dev/null +++ b/abacus-static-framework/src/framework/components/ErrorMessage/index.scss @@ -0,0 +1,32 @@ +.not-container { + display: flex; + align-items: center; + justify-content: center; + width: 100%; + height: 100%; + .not-img { + margin-right: 120px; + } + .not-detail { + display: flex; + flex-direction: column; + h2, + h4 { + padding: 0; + margin: 0; + } + h2 { + font-size: 60px; + color: var(--el-text-color-primary); + } + h4 { + margin: 30px 0 20px; + font-size: 19px; + font-weight: normal; + color: var(--el-text-color-regular); + } + .el-button { + width: 100px; + } + } +} diff --git a/abacus-static-framework/src/framework/components/Hamburger/index.vue b/abacus-static-framework/src/framework/components/Hamburger/index.vue new file mode 100644 index 0000000..e70ed47 --- /dev/null +++ b/abacus-static-framework/src/framework/components/Hamburger/index.vue @@ -0,0 +1,44 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/ImgIcon/index.vue b/abacus-static-framework/src/framework/components/ImgIcon/index.vue new file mode 100644 index 0000000..8f337ee --- /dev/null +++ b/abacus-static-framework/src/framework/components/ImgIcon/index.vue @@ -0,0 +1,28 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/ImportExcel/index.vue b/abacus-static-framework/src/framework/components/ImportExcel/index.vue new file mode 100644 index 0000000..b4b490c --- /dev/null +++ b/abacus-static-framework/src/framework/components/ImportExcel/index.vue @@ -0,0 +1,101 @@ + + + + diff --git a/abacus-static-framework/src/framework/components/Pagination/index.vue b/abacus-static-framework/src/framework/components/Pagination/index.vue new file mode 100644 index 0000000..37f1e05 --- /dev/null +++ b/abacus-static-framework/src/framework/components/Pagination/index.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/abacus-static-framework/src/framework/components/SearchLocalSelect/index.vue b/abacus-static-framework/src/framework/components/SearchLocalSelect/index.vue new file mode 100644 index 0000000..1a73375 --- /dev/null +++ b/abacus-static-framework/src/framework/components/SearchLocalSelect/index.vue @@ -0,0 +1,93 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/SearchRemoteSelect/index.vue b/abacus-static-framework/src/framework/components/SearchRemoteSelect/index.vue new file mode 100644 index 0000000..73057f2 --- /dev/null +++ b/abacus-static-framework/src/framework/components/SearchRemoteSelect/index.vue @@ -0,0 +1,98 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/Title/index.vue b/abacus-static-framework/src/framework/components/Title/index.vue new file mode 100644 index 0000000..f045e33 --- /dev/null +++ b/abacus-static-framework/src/framework/components/Title/index.vue @@ -0,0 +1,28 @@ + + + + + + diff --git a/abacus-static-framework/src/framework/components/standard/AbSection/index.vue b/abacus-static-framework/src/framework/components/standard/AbSection/index.vue new file mode 100644 index 0000000..32801ef --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/AbSection/index.vue @@ -0,0 +1,77 @@ + + + + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/standard/ClickCopy/index.vue b/abacus-static-framework/src/framework/components/standard/ClickCopy/index.vue new file mode 100644 index 0000000..93d55e5 --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/ClickCopy/index.vue @@ -0,0 +1,23 @@ + + + + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/standard/FilePreviewDialog/index.vue b/abacus-static-framework/src/framework/components/standard/FilePreviewDialog/index.vue new file mode 100644 index 0000000..e032b3c --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/FilePreviewDialog/index.vue @@ -0,0 +1,75 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/standard/FormDynamic/abForm.vue b/abacus-static-framework/src/framework/components/standard/FormDynamic/abForm.vue new file mode 100644 index 0000000..c84a6a2 --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/FormDynamic/abForm.vue @@ -0,0 +1,103 @@ + + + + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/standard/FormDynamic/abFormItem.vue b/abacus-static-framework/src/framework/components/standard/FormDynamic/abFormItem.vue new file mode 100644 index 0000000..5d37589 --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/FormDynamic/abFormItem.vue @@ -0,0 +1,86 @@ + + + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/standard/FormDynamic/abQueryForm.vue b/abacus-static-framework/src/framework/components/standard/FormDynamic/abQueryForm.vue new file mode 100644 index 0000000..799bef7 --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/FormDynamic/abQueryForm.vue @@ -0,0 +1,104 @@ + + + + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/standard/ImportExcel/index.vue b/abacus-static-framework/src/framework/components/standard/ImportExcel/index.vue new file mode 100644 index 0000000..22f8bc2 --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/ImportExcel/index.vue @@ -0,0 +1,152 @@ + + + + + diff --git a/abacus-static-framework/src/framework/components/standard/Layout/BottomFloat.vue b/abacus-static-framework/src/framework/components/standard/Layout/BottomFloat.vue new file mode 100644 index 0000000..297b96f --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/Layout/BottomFloat.vue @@ -0,0 +1,60 @@ + + + + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/standard/LogShow/index.vue b/abacus-static-framework/src/framework/components/standard/LogShow/index.vue new file mode 100644 index 0000000..46079d6 --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/LogShow/index.vue @@ -0,0 +1,52 @@ + + + + + + diff --git a/abacus-static-framework/src/framework/components/standard/RealTimeSearchSelect/index.vue b/abacus-static-framework/src/framework/components/standard/RealTimeSearchSelect/index.vue new file mode 100644 index 0000000..ced7a6d --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/RealTimeSearchSelect/index.vue @@ -0,0 +1,102 @@ + + + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/components/standard/SensitiveText/index.vue b/abacus-static-framework/src/framework/components/standard/SensitiveText/index.vue new file mode 100644 index 0000000..fdd5f4d --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/SensitiveText/index.vue @@ -0,0 +1,36 @@ + + + + + + diff --git a/abacus-static-framework/src/framework/components/standard/Text/index.vue b/abacus-static-framework/src/framework/components/standard/Text/index.vue new file mode 100644 index 0000000..d9c9b34 --- /dev/null +++ b/abacus-static-framework/src/framework/components/standard/Text/index.vue @@ -0,0 +1,17 @@ + + + + + + diff --git a/abacus-static-framework/src/framework/directives/debounce.ts b/abacus-static-framework/src/framework/directives/debounce.ts new file mode 100644 index 0000000..7b80ba0 --- /dev/null +++ b/abacus-static-framework/src/framework/directives/debounce.ts @@ -0,0 +1,35 @@ +/** + * 防抖:在连续的操作中,无论进行了多长时间,只有某一次的操作后在指定的时间内没有再操作,这一次才被判定有效。 + * 使用: + * 按钮防抖 + * 按钮防抖传参 + */ +import { ObjectDirective } from 'vue' +interface DebounceEl extends HTMLElement { + debounceEvent: () => void +} +// 防抖指令封装 +const debounceDirective: ObjectDirective = { + beforeMount(el: DebounceEl, binding: any) { + let timer: number + let delay: number = 1000 + const keys = Object.keys(binding.modifiers) + if (keys) { + const key: string | undefined = keys.find((key) => key.includes('delay'))?.toString() + const value = (key ?? '').match(/(?<=\[).*?(?=\])/) + if (value) delay = parseInt(value[0]) + } + el.debounceEvent = () => { + clearTimeout(timer) + timer = window.setTimeout(() => { + binding.value() + }, delay) + } + el.addEventListener(binding.arg, el.debounceEvent) + }, + beforeUnmount(el: DebounceEl, binding: any) { + el.removeEventListener(binding.arg, el.debounceEvent) + }, +} + +export default debounceDirective diff --git a/abacus-static-framework/src/framework/directives/index.ts b/abacus-static-framework/src/framework/directives/index.ts new file mode 100644 index 0000000..d4d1acd --- /dev/null +++ b/abacus-static-framework/src/framework/directives/index.ts @@ -0,0 +1,18 @@ +import { App, Directive } from "vue"; +import debounce from "./debounce"; +import throttle from "./throttle"; + +const directivesList: { [key: string]: Directive } = { + debounce, + throttle, +}; + +const directives = { + install: function (app: App) { + Object.keys(directivesList).forEach(key => { + app.directive(key, directivesList[key]); + }); + } +}; + +export default directives; \ No newline at end of file diff --git a/abacus-static-framework/src/framework/directives/throttle.ts b/abacus-static-framework/src/framework/directives/throttle.ts new file mode 100644 index 0000000..073050e --- /dev/null +++ b/abacus-static-framework/src/framework/directives/throttle.ts @@ -0,0 +1,43 @@ + +/** + *节流:规定时间内,只触发一次。比如我们设定500ms,在这个时间内,无论点击按钮多少次,它都只会触发一次。 + * 使用: + * 按钮节流 + * el-button v-throttle:click.delay[2000]="()=>testThrottle('throttle')">按钮节流传参 + * + */ +import { ObjectDirective } from 'vue' + +interface ThrottleEl extends HTMLElement { + throttleEvent: () => void +} + +// 节流指令封装 +const throttleDirective: ObjectDirective = { + beforeMount(el: ThrottleEl, binding: any) { + let throttled = false + let delay: number = 1000 + const keys = Object.keys(binding.modifiers) + if (keys) { + const key: string | undefined = keys.find((key) => key.includes('delay'))?.toString() + const value = (key ?? '').match(/(?<=\[).*?(?=\])/) + if (value) delay = parseInt(value[0]) + } + el.throttleEvent = () => { + if (!throttled) { + binding.value() + throttled = true + setTimeout(() => { + throttled = false + }, delay) + } + } + el.addEventListener(binding.arg, el.throttleEvent) + }, + beforeUnmount(el: ThrottleEl, binding: any) { + el.removeEventListener(binding.arg, el.throttleEvent) + }, +} + +export default throttleDirective + diff --git a/abacus-static-framework/src/framework/hooks/useCopy.ts b/abacus-static-framework/src/framework/hooks/useCopy.ts new file mode 100644 index 0000000..4ae8ed8 --- /dev/null +++ b/abacus-static-framework/src/framework/hooks/useCopy.ts @@ -0,0 +1,7 @@ +import { useClipboard } from '@vueuse/core' +const { copy } = useClipboard({ legacy: true }); + +export function useCopy(data: string){ + copy(data) + ElMessage({type: 'success',message: '复制成功' }) +} \ No newline at end of file diff --git a/abacus-static-framework/src/framework/hooks/useCrossPageSelect.ts b/abacus-static-framework/src/framework/hooks/useCrossPageSelect.ts new file mode 100644 index 0000000..2d4a094 --- /dev/null +++ b/abacus-static-framework/src/framework/hooks/useCrossPageSelect.ts @@ -0,0 +1,87 @@ +/** + * 跨页全选 + * @param multipleTableRef 多选的表格 + * @param showData 显示的数据 + * @param idKey 选中的id名称 + * @param tableFilterData 过滤掉不能选择数据后的全部数据,如果没有不能选中的数据,则为全部数据 + * @returns checkAll: 跨页全选状态 + * checkedIds 选中的所有行的id + * initTableRowCheckStatus 初始化选中行 + * handlMultipageSelect 跨页全选状态操作 + * handleRowSelect 操作行选中 + * handleAllSelect 操作当前页选中 + */ +export function useCrossPageSelect(multipleTableRef: any, showData: any, idKey: string, tableFilterData: any) { + + const checkAll = ref(false) // 跨页全选转态 + const checkedIds = ref([]) // 选中的ids + + // 初始化行选中状态 + const initTableRowCheckStatus = () => { + nextTick(() => { + showData.value.forEach((item: any) => { + if (checkedIds.value.includes(item[idKey])) { + multipleTableRef.value!.toggleRowSelection(item, true) + return + } + multipleTableRef.value!.toggleRowSelection(item, false) + }) + }) + } + + watch(() => showData.value, () => { + initTableRowCheckStatus() + }) + watch([checkedIds, tableFilterData], ([ids, tableData]) => { + ids.length === tableData.length ? (checkAll.value = true) : (checkAll.value = false) + }, { deep: true }) + + // 跨页全选 + const handlMultipageSelect = (status: boolean) => { + if (status) { + checkedIds.value = tableFilterData.value.map((item: any) => item[idKey]) + // checkedIds.value = tableData.value.filter(val => val.channel == "渠道销售").map(item => item.icapplynum) + } else { + checkedIds.value = [] + } + initTableRowCheckStatus() + } + + // 切换选中行 + const handleRowSelect = (selection: any, row: any) => { + const id = row[idKey] + const item = selection.find((item: any) => item[idKey] === id) + + if (item) { + if (!checkedIds.value.includes(id)) { + checkedIds.value.push(id) + } + return + } + const index = checkedIds.value.indexOf(id) + if (index !== -1) { + checkedIds.value.splice(index, 1) + } + checkAll.value = false + } + // 单页全选 + const handleAllSelect = (selection: any) => { + if (selection.length > 0) { + selection.forEach((item: any) => { + if (!checkedIds.value.includes(item[idKey])) { + checkedIds.value.push(item[idKey]) + } + }); + return + } + showData.value.forEach((item: any) => { + const index = checkedIds.value.indexOf(item[idKey]) + if (index != -1) { + checkedIds.value.splice(index, 1) + } + }); + checkAll.value = false + } + + return { checkAll, checkedIds, initTableRowCheckStatus, handlMultipageSelect, handleRowSelect, handleAllSelect } +} \ No newline at end of file diff --git a/abacus-static-framework/src/framework/hooks/useInTableSearch.ts b/abacus-static-framework/src/framework/hooks/useInTableSearch.ts new file mode 100644 index 0000000..74d0bfc --- /dev/null +++ b/abacus-static-framework/src/framework/hooks/useInTableSearch.ts @@ -0,0 +1,108 @@ + +import { refDebounced } from '@vueuse/core' +import XEUtils from 'xe-utils' + +/** + * 表内检索,用于假分页时进行表内搜索 + * @param tableData 全部数据 + * @param keys 需要检索的key + * @returns 检索后的数据,检索关键词,总数,分页对象 + */ +export function useInTableSearchAndPaging(tableData: any, keys: Array = []){ + + const tableKeyword = ref('') + const debounceTableKeyword = refDebounced(tableKeyword, 500) + const total = ref(0); + const paging = ref({ + page: 1, + pageSize: 10 + }) + + const showData = computed(()=>{ + const filterData = tableData.value.filter((item: any) => { + if (keys.length > 0) { + const values = [] + for (const key in item) { + if (keys.includes(key)) { + values.push(item[key]) + } + } + return values.some(val => String(val).includes(debounceTableKeyword.value)) + } + return Object.values(item).some(val => String(val).includes(debounceTableKeyword.value)) + }) + + const data = filterData.slice((paging.value.page - 1) * paging.value.pageSize, (paging.value.page - 1) * paging.value.pageSize + paging.value.pageSize) + total.value = filterData.length + return data + }) + + return {tableKeyword, showData, total, paging} +} + +/** + * VxeGrid表内检索,用于真分页时进行表内搜索 + * @param filterName 关键字对象 + * @param grid 表格对象 + * @param tableData 全部数据对象 + * @param searchProps 需要检索的key + * @param options 选项,{children: 'children'}是否作为子节点展示 + * @param allTreeExpand 是否展开树形结构子节点 + */ +export function useInVxeTableSearch(filterName:any, grid:any, tableData: any, searchProps: Array = [],options:any,allTreeExpand:boolean=false){ + const filterVal = XEUtils.toValueString(filterName.value).trim().toLowerCase() + const $table = grid.value + if(!$table) + return false + if (filterVal) { + if(searchProps.length==0){ + searchProps=Object.keys(tableData.value[0]) + } + const rest = XEUtils.searchTree(tableData.value, item => searchProps.some(key => String(item[key]).toLowerCase().indexOf(filterVal) > -1), options) + grid.value.loadData(rest) + if(allTreeExpand){ + // 搜索之后默认展开所有子节点 + nextTick(() => { + $table.setAllTreeExpand(true) + }) + } + }else { + $table.loadData(tableData.value) + } +} + +/** + * VxeGrid表内检索,用于真分页时进行表内搜索 + * @param filterName 关键字对象 + * @param grid 表格对象 + * @param tableData 全部数据对象 + * @param searchProps 需要检索的key + * @param options 选项,{children: 'children'}是否作为子节点展示 + * @param allTreeExpand 是否展开树形结构子节点 + */ +export function useInVxeTableSearchAndPageing(filterName:any, grid:any, tableData: any, searchProps: Array = [],options:any,allTreeExpand:boolean=false, + page:number,size:number){ + const filterVal = XEUtils.toValueString(filterName.value).trim().toLowerCase() + const $table = grid.value + if(!$table) + return false + if (filterVal) { + if(searchProps.length==0){ + searchProps=Object.keys(tableData.value[0]) + } + const rest = XEUtils.searchTree(tableData.value, item => searchProps.some(key => String(item[key]).toLowerCase().indexOf(filterVal) > -1), options) + grid.value.loadData(rest.slice((page - 1) * size, page * size))//重新加载表格数据 + if(allTreeExpand){ + // 搜索之后默认展开所有子节点 + nextTick(() => { + $table.setAllTreeExpand(true) + }) + } + }else { + grid.value.loadData(tableData.value.slice((page - 1) * size, page * size)) + } +} + +export function useTableDataPageing(tableData: any,page:number,size:number){ + return tableData.slice((page - 1) * size, page * size) +} \ No newline at end of file diff --git a/abacus-static-framework/src/framework/hooks/useRenderHeader.ts b/abacus-static-framework/src/framework/hooks/useRenderHeader.ts new file mode 100644 index 0000000..aa471e9 --- /dev/null +++ b/abacus-static-framework/src/framework/hooks/useRenderHeader.ts @@ -0,0 +1,14 @@ +import { h } from 'vue' + +export function useRenderHeader(node: any) { + const { column } = node + let realWidth = 0; + let span = document.createElement('span'); + span.innerText = column.label; + document.body.appendChild(span); + realWidth = span.getBoundingClientRect().width; + column.minWidth = realWidth+16; // 可能还有边距/边框等值,需要根据实际情况加上 + document.body.removeChild(span); + + return h('span', column.label) +} \ No newline at end of file diff --git a/abacus-static-framework/src/framework/hooks/useVxeTableHandle.ts b/abacus-static-framework/src/framework/hooks/useVxeTableHandle.ts new file mode 100644 index 0000000..2772580 --- /dev/null +++ b/abacus-static-framework/src/framework/hooks/useVxeTableHandle.ts @@ -0,0 +1,204 @@ +import XEUtils from 'xe-utils' + + +/**表格相关数据查询重置 */ +export async function useTableQueryReload(tableRef:any){ + const params = tableRef.params + if(params&¶ms.tableDataCache) params.tableDataCache=[] //重置表格数据缓存 + if(params&¶ms.filterNameRef) params.filterNameRef='' //重置表内搜索内容 + if(!XEUtils.isUndefined(tableRef.proxyConfig)){ + tableRef.commitProxy('reload') //重置表格相关数据 + } + +} + +/** + * vxe代理请求参数处理 + * @param tableData 表所有数据 + * @param page 第几页 + * @param size 每页多少条 + * @returns + */ +export function useQueryParamsHandle(queryFrom:{},page: any, sorts:any, filters:any){ + const queryParams: any = Object.assign({}, queryFrom) + // 处理分页条件 + if (page) { + queryParams.page = page.currentPage + queryParams.size = page.pageSize + } + // 处理排序条件 + const firstSort = sorts[0] + if (firstSort) { + queryParams.sort = firstSort.field + queryParams.order = firstSort.order + } + // 处理筛选条件 + filters.forEach(({ field, values }) => { + queryParams[field] = values.join(',') + }) + return queryParams +} + +/** + * 数据过滤 + * @param $table 表格引用 + * @param tableData 需要过滤的数据 + * @param filterEvent 过滤成功事件 + * @param resetEvent 重置过滤数据事件 + * @returns + */ +function dataFilter($table:any,tableData:[],filterEvent:undefined,resetEvent:undefined){ + let tableParams=$table.params + const filterVal = XEUtils.toValueString(tableParams.filterNameRef).trim().toLowerCase() + if (filterVal) { + let searchProps=tableParams.searchProps + /**如需要检索的key不存在,则从表格对象中获取全部列字段名 */ + if(XEUtils.isUndefined(searchProps)||searchProps.length==0){ + searchProps=$table.getTableColumn().visibleColumn.map(function(vcolumn) { + return vcolumn.field; + }); + } + let options={children: (XEUtils.isUndefined(tableParams.children)||!tableParams.children)?'no':''} + const filterData = XEUtils.searchTree(tableData, item => searchProps.some(key => String(item[key]).toLowerCase().indexOf(filterVal) > -1), options) + if(!XEUtils.isUndefined(filterEvent)&&'function'===typeof filterEvent){ + filterEvent(filterData) + } + return filterData + }else { + if(!XEUtils.isUndefined(resetEvent)&&'function'===typeof resetEvent){ + resetEvent(tableData) + } + return tableData + } +} + + +/** + * VxeTable表内检索 + * @param tableRef 表格对象 + */ +export function useInVxeTableSearch($table:any){ + let tableParams=$table.params + const filterVal = XEUtils.toValueString(tableParams.filterNameRef).trim().toLowerCase() + if (filterVal) { + let searchProps=tableParams.searchProps + /**如需要检索的key不存在,则从表格对象中获取全部列字段名 */ + if(XEUtils.isUndefined(searchProps)||searchProps.length==0){ + searchProps=$table.getTableColumn().visibleColumn.map(function(vcolumn) { + return vcolumn.field; + }); + } + let options={children: (XEUtils.isUndefined(tableParams.children)||!tableParams.children)?'no':''} + const filterData = XEUtils.searchTree(tableParams.tableDataCache, item => searchProps.some(key => String(item[key]).toLowerCase().indexOf(filterVal) > -1), options) + return filterData + }else { + return tableParams.tableDataCache + } +} + +/** + * VxeGrid表内检索 + * 服务端分页(params.clientPage不配置或者配置为false),不会修改当前分页数据 + * @param tableRef 表格对象 + */ +export function useInVxeGridSearch(tableRef:any){ + const $table = tableRef + + if(!$table) { + console.error('表格对象tableRef不存在'); + return false + } + if(!$table.params) { + console.error('自定义参数配置params不存在'); + return false + } + let tableParams=$table.params + /**客户端分页并且使用了代理配置,直接重新加载表格,通过useQueryAndClientPaging方法执行筛选操作 */ + if(tableParams.clientPage&&!XEUtils.isUndefined($table.proxyConfig)){ + $table.commitProxy('reload') + return; + } + let tableData=[] //默认获取表格data中信息 + if(!XEUtils.isUndefined($table.data)){ + $table.data.forEach(function(o) { + tableData.push(o) + }); + } + if(!XEUtils.isUndefined($table.getProxyInfo())&&null!=$table.getProxyInfo()) + tableData=$table.getProxyInfo().data //从表格代理信息中获取当前全量数据 + /**如tableDataRef不存在,则从表格对象中初始化全量数据-----已从表格代理信息中获取当前全量数据,该逻辑暂不使用*/ + // let tableData=tableParams.tableDataCache //待处理数据 + // if(null==tableData||tableData.length==0){ + // let visibleData=$table.getTableData().visibleData + // tableData=new Array() + // visibleData.forEach(function(v,k) { + // tableData.push(v) + // v.children.forEach(function(cv,ck) { + // tableData.push(cv) + // }); + // }); + // tableParams.tableDataCache=tableData + // } + dataFilter($table,tableData, + function(filterData){ + $table.loadData(filterData) + if(tableParams.allTreeExpand){ + // 搜索之后默认展开所有子节点 + nextTick(() => { + $table.setAllTreeExpand(true) + }) + } + },function(resetData){ + $table.loadData(resetData) + } + ) +} + +/** + * 查询数据,并由客户端分页 + * @param tableRef 表格对象 + * @param page 分页信息 + * @param sorts 排序信息 + * @param requestMethod 执行查询的方法 + * @returns + */ +export async function useQueryAndClientPaging(tableRef:any,page: any, sorts:any, requestMethod:any){ + const $table = tableRef.value + if(!$table) { + console.error('表格对象tableRef不存在'); + return false + } + if(!$table.params) { + console.error('自定义参数配置params不存在'); + return false + } + if(!$table.params.clientPage){ + console.error('自定义参数配置params.clientPage应该设置为true'); + return false + } + let cdata=$table.params.tableDataCache + /**缓存中不存在数据,则发起请求,并初始化缓存 */ + if(cdata.length==0){ + let dataPromise= await requestMethod() + $table.params.tableDataCache=dataPromise + cdata=dataPromise + } + /**排序*/ + cdata=XEUtils.orderBy(cdata, sorts.map((sort:any) => [sort.field, sort.order])) + /**如表内搜索存在关键字,则首先过滤数据 */ + cdata=dataFilter($table,cdata) + return new Promise((resolve) => { + resolve({ + total:cdata.length, + data:cdata.slice((page.currentPage - 1) * page.pageSize, page.currentPage * page.pageSize) + }); + }); +} + + + + + + + + diff --git a/abacus-static-framework/src/framework/layout/components/AppMain.vue b/abacus-static-framework/src/framework/layout/components/AppMain.vue new file mode 100644 index 0000000..6ed409f --- /dev/null +++ b/abacus-static-framework/src/framework/layout/components/AppMain.vue @@ -0,0 +1,31 @@ + + + + + diff --git a/abacus-static-framework/src/framework/layout/components/Header/Center.vue b/abacus-static-framework/src/framework/layout/components/Header/Center.vue new file mode 100644 index 0000000..edab762 --- /dev/null +++ b/abacus-static-framework/src/framework/layout/components/Header/Center.vue @@ -0,0 +1,54 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout/components/Header/Left.vue b/abacus-static-framework/src/framework/layout/components/Header/Left.vue new file mode 100644 index 0000000..5a92d4a --- /dev/null +++ b/abacus-static-framework/src/framework/layout/components/Header/Left.vue @@ -0,0 +1,77 @@ + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout/components/Header/Right.vue b/abacus-static-framework/src/framework/layout/components/Header/Right.vue new file mode 100644 index 0000000..2d0ef49 --- /dev/null +++ b/abacus-static-framework/src/framework/layout/components/Header/Right.vue @@ -0,0 +1,47 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout/components/Header/Search.vue b/abacus-static-framework/src/framework/layout/components/Header/Search.vue new file mode 100644 index 0000000..66b9be3 --- /dev/null +++ b/abacus-static-framework/src/framework/layout/components/Header/Search.vue @@ -0,0 +1,175 @@ + + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout/components/Header/index.vue b/abacus-static-framework/src/framework/layout/components/Header/index.vue new file mode 100644 index 0000000..285ea2a --- /dev/null +++ b/abacus-static-framework/src/framework/layout/components/Header/index.vue @@ -0,0 +1,39 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout/components/MessageNotify/index.vue b/abacus-static-framework/src/framework/layout/components/MessageNotify/index.vue new file mode 100644 index 0000000..fcda1d6 --- /dev/null +++ b/abacus-static-framework/src/framework/layout/components/MessageNotify/index.vue @@ -0,0 +1,126 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout/components/Sidebar/index.vue b/abacus-static-framework/src/framework/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..7dc0924 --- /dev/null +++ b/abacus-static-framework/src/framework/layout/components/Sidebar/index.vue @@ -0,0 +1,126 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout/components/TagsView/ScrollPane.vue b/abacus-static-framework/src/framework/layout/components/TagsView/ScrollPane.vue new file mode 100644 index 0000000..ab447b8 --- /dev/null +++ b/abacus-static-framework/src/framework/layout/components/TagsView/ScrollPane.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/abacus-static-framework/src/framework/layout/components/TagsView/index.vue b/abacus-static-framework/src/framework/layout/components/TagsView/index.vue new file mode 100644 index 0000000..223632c --- /dev/null +++ b/abacus-static-framework/src/framework/layout/components/TagsView/index.vue @@ -0,0 +1,336 @@ + + + + + + diff --git a/abacus-static-framework/src/framework/layout/index.vue b/abacus-static-framework/src/framework/layout/index.vue new file mode 100644 index 0000000..b58166c --- /dev/null +++ b/abacus-static-framework/src/framework/layout/index.vue @@ -0,0 +1,55 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout1/components/AppMain.vue b/abacus-static-framework/src/framework/layout1/components/AppMain.vue new file mode 100644 index 0000000..e78d3be --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/components/AppMain.vue @@ -0,0 +1,69 @@ + + + + + diff --git a/abacus-static-framework/src/framework/layout1/components/Header/Center.vue b/abacus-static-framework/src/framework/layout1/components/Header/Center.vue new file mode 100644 index 0000000..a2904e0 --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/components/Header/Center.vue @@ -0,0 +1,56 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout1/components/Header/Left.vue b/abacus-static-framework/src/framework/layout1/components/Header/Left.vue new file mode 100644 index 0000000..07cb7a2 --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/components/Header/Left.vue @@ -0,0 +1,36 @@ + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout1/components/Header/Right.vue b/abacus-static-framework/src/framework/layout1/components/Header/Right.vue new file mode 100644 index 0000000..c9dd520 --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/components/Header/Right.vue @@ -0,0 +1,28 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout1/components/Header/Search.vue b/abacus-static-framework/src/framework/layout1/components/Header/Search.vue new file mode 100644 index 0000000..ba64c7c --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/components/Header/Search.vue @@ -0,0 +1,175 @@ + + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout1/components/Header/index.vue b/abacus-static-framework/src/framework/layout1/components/Header/index.vue new file mode 100644 index 0000000..90b367b --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/components/Header/index.vue @@ -0,0 +1,37 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout1/components/MessageNotify/index.vue b/abacus-static-framework/src/framework/layout1/components/MessageNotify/index.vue new file mode 100644 index 0000000..fcda1d6 --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/components/MessageNotify/index.vue @@ -0,0 +1,126 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout1/components/Sidebar/index.vue b/abacus-static-framework/src/framework/layout1/components/Sidebar/index.vue new file mode 100644 index 0000000..4396fa1 --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/components/Sidebar/index.vue @@ -0,0 +1,173 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layout1/components/TagsView/ScrollPane.vue b/abacus-static-framework/src/framework/layout1/components/TagsView/ScrollPane.vue new file mode 100644 index 0000000..ab447b8 --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/components/TagsView/ScrollPane.vue @@ -0,0 +1,121 @@ + + + + + diff --git a/abacus-static-framework/src/framework/layout1/components/TagsView/index.vue b/abacus-static-framework/src/framework/layout1/components/TagsView/index.vue new file mode 100644 index 0000000..4c5c6a9 --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/components/TagsView/index.vue @@ -0,0 +1,353 @@ + + + + + + diff --git a/abacus-static-framework/src/framework/layout1/index.vue b/abacus-static-framework/src/framework/layout1/index.vue new file mode 100644 index 0000000..7026a3c --- /dev/null +++ b/abacus-static-framework/src/framework/layout1/index.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layoutpublic/DownloadCenter/index.vue b/abacus-static-framework/src/framework/layoutpublic/DownloadCenter/index.vue new file mode 100644 index 0000000..cc4fa8a --- /dev/null +++ b/abacus-static-framework/src/framework/layoutpublic/DownloadCenter/index.vue @@ -0,0 +1,123 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layoutpublic/NewUserDropDown/index.vue b/abacus-static-framework/src/framework/layoutpublic/NewUserDropDown/index.vue new file mode 100644 index 0000000..d96b5cb --- /dev/null +++ b/abacus-static-framework/src/framework/layoutpublic/NewUserDropDown/index.vue @@ -0,0 +1,336 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layoutpublic/PersonalCenter/index.vue b/abacus-static-framework/src/framework/layoutpublic/PersonalCenter/index.vue new file mode 100644 index 0000000..9882130 --- /dev/null +++ b/abacus-static-framework/src/framework/layoutpublic/PersonalCenter/index.vue @@ -0,0 +1,216 @@ + + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layoutpublic/SubSystemSwitch/index.vue b/abacus-static-framework/src/framework/layoutpublic/SubSystemSwitch/index.vue new file mode 100644 index 0000000..e3b7458 --- /dev/null +++ b/abacus-static-framework/src/framework/layoutpublic/SubSystemSwitch/index.vue @@ -0,0 +1,114 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/layoutpublic/WebsiteInfo/index.vue b/abacus-static-framework/src/framework/layoutpublic/WebsiteInfo/index.vue new file mode 100644 index 0000000..6d4d760 --- /dev/null +++ b/abacus-static-framework/src/framework/layoutpublic/WebsiteInfo/index.vue @@ -0,0 +1,59 @@ + + + + + \ No newline at end of file diff --git a/abacus-static-framework/src/framework/router/dynamicRouter.ts b/abacus-static-framework/src/framework/router/dynamicRouter.ts new file mode 100644 index 0000000..50e861b --- /dev/null +++ b/abacus-static-framework/src/framework/router/dynamicRouter.ts @@ -0,0 +1,23 @@ +import { dynamicRouter } from "@/subsystem/router/dynamicRouter"; +import pinia from "@/framework/store"; +import {useSettingsStore } from "@/framework/store/modules/settings"; + +const layout=useSettingsStore(pinia).currentLayout + +/**生成动态路由 */ +export const generateDynamicRouter = (menu:any) => { + menu.component=layout + menu.children.forEach(c => { + //c.component=() => import('@/framework/views/ext/index.vue') + }); + return menu +} + +/**获取子系统路由 */ +export const getSubSystemRouter = () => { + dynamicRouter.forEach(o => { + o.component=layout + }); + return dynamicRouter +} + diff --git a/abacus-static-framework/src/framework/router/index.ts b/abacus-static-framework/src/framework/router/index.ts new file mode 100644 index 0000000..f7188c7 --- /dev/null +++ b/abacus-static-framework/src/framework/router/index.ts @@ -0,0 +1,30 @@ +// src/router/index.ts +import { createRouter, createWebHashHistory, RouteRecordRaw,useRouter } from 'vue-router'; +import { staticRouter, errorRouter } from './staticRouter'; + +/** + * 创建路由 + */ +const router = createRouter({ + history: createWebHashHistory(), + routes: [ ...staticRouter, ...errorRouter] as RouteRecordRaw[], + // 刷新时,滚动条位置还原 + scrollBehavior: () => ({ left: 0, top: 0 }) +}); + +/** + * 重置路由 + */ +export function resetRouter() { + router.replace({ path: '/login' }); + location.reload(); +} + +/** + * 获取当前路由 + */ +export function currentRouter() { + return router.currentRoute +} + +export default router; diff --git a/abacus-static-framework/src/framework/router/staticRouter.ts b/abacus-static-framework/src/framework/router/staticRouter.ts new file mode 100644 index 0000000..d1bd07c --- /dev/null +++ b/abacus-static-framework/src/framework/router/staticRouter.ts @@ -0,0 +1,57 @@ +import { RouteRecordRaw } from "vue-router"; +import pinia from "@/framework/store"; +import {useSettingsStore } from "@/framework/store/modules/settings"; + +const layout=useSettingsStore(pinia).currentLayout +/** + * staticRouter (静态路由) + */ +export const staticRouter: RouteRecordRaw[] = [ + { + path: '/redirect', + component: layout, + meta: { hidden: true }, + children: [ + { + path: '/redirect/:path(.*)', + component: () => import('@/framework/views/redirect/index.vue'), + meta: { title: '重定向' }, + } + ] + } +]; + +/** + * errorRouter (错误页面路由) + */ +export const errorRouter = [ + { + path: "/403", + name: "403", + component: () => import("@/framework/components/ErrorMessage/403.vue"), + meta: { + title: "403页面" + } + }, + { + path: "/404", + name: "404", + component: () => import("@/framework/components/ErrorMessage/404.vue"), + meta: { + title: "404页面" + } + }, + { + path: "/500", + name: "500", + component: () => import("@/framework/components/ErrorMessage/500.vue"), + meta: { + title: "500页面" + } + }, + // Resolve refresh page, route warnings + { + path: "/:pathMatch(.*)*", + component: () => import("@/framework/components/ErrorMessage/404.vue") + } +]; diff --git a/abacus-static-framework/src/framework/store/index.ts b/abacus-static-framework/src/framework/store/index.ts new file mode 100644 index 0000000..1f8292d --- /dev/null +++ b/abacus-static-framework/src/framework/store/index.ts @@ -0,0 +1,8 @@ +import { createPinia } from "pinia"; +// import piniaPluginPersistedstate from "pinia-plugin-persistedstate"; + +// pinia persist +const pinia = createPinia(); +// pinia.use(piniaPluginPersistedstate); + +export default pinia; diff --git a/abacus-static-framework/src/framework/store/modules/app.ts b/abacus-static-framework/src/framework/store/modules/app.ts new file mode 100644 index 0000000..42049f4 --- /dev/null +++ b/abacus-static-framework/src/framework/store/modules/app.ts @@ -0,0 +1,86 @@ +import { defineStore } from "pinia"; +// import { useStorage } from "@vueuse/core"; +// import defaultSettings from "@/settings"; + +// 导入 Element Plus 中英文语言包 +// import zhCn from "element-plus/es/locale/lang/zh-cn"; +// import en from "element-plus/es/locale/lang/en"; + +// setup +export const useAppStore = defineStore("app", () => { + // state + // const device = useStorage("device", "desktop"); + // const size = useStorage("size", defaultSettings.size); + // const language = useStorage("language", defaultSettings.language); + + // const sidebarStatus = useStorage("sidebarStatus", "closed"); + const sidebar = reactive({ + moduleNumber: 0, + opened: true, + withoutAnimation: false, + }); + + // /** + // * 根据语言标识读取对应的语言包 + // */ + // const locale = computed(() => { + // if (language?.value == "en") { + // return en; + // } else { + // return zhCn; + // } + // }); + + // actions + function toggleSidebar(withoutAnimation: boolean) { + sidebar.opened = !sidebar.opened; + sidebar.withoutAnimation = withoutAnimation; + // if (sidebar.opened) { + // sidebarStatus.value = "opened"; + // } else { + // sidebarStatus.value = "closed"; + // } + } + + function closeSideBar(withoutAnimation: boolean) { + sidebar.opened = false; + sidebar.withoutAnimation = withoutAnimation; + // sidebarStatus.value = "closed"; + } + + function openSideBar(withoutAnimation: boolean) { + sidebar.opened = true; + sidebar.withoutAnimation = withoutAnimation; + // sidebarStatus.value = "opened"; + } + + // function toggleDevice(val: string) { + // device.value = val; + // } + + // function changeSize(val: string) { + // size.value = val; + // } + /** + * 切换语言 + * + * @param val + */ + // function changeLanguage(val: string) { + // language.value = val; + // } + + return { + // device, + sidebar, + // language, + // locale, + // size, + // toggleDevice, + // changeSize, + // changeLanguage, + toggleSidebar, + closeSideBar, + openSideBar, + }; +}); diff --git a/abacus-static-framework/src/framework/store/modules/permission.ts b/abacus-static-framework/src/framework/store/modules/permission.ts new file mode 100644 index 0000000..cf21cc0 --- /dev/null +++ b/abacus-static-framework/src/framework/store/modules/permission.ts @@ -0,0 +1,196 @@ +import { RouteRecordRaw } from "vue-router"; +import { defineStore } from "pinia"; +import { getSubSystemRouter,generateDynamicRouter } from "@/framework/router/dynamicRouter"; + +import pinia from "@/framework/store"; +import { listRoutes,getBusinessDomain } from "@/framework/api/acas"; +import { Menu } from "@element-plus/icons-vue"; +import { useSettingsStore } from "@/framework/store/modules/settings"; +import { setCurrentBusinessDomain,getCurrentBusinessDomain } from "@/framework/store/modules/user"; + +interface Menu { + id: string; + name: string; + url: string; + modules: Menu[]; +} + +/** + * 匹配一级菜单路由 + * @param menu 一级菜单 + * @param menuRouter 一级菜单路由 + * @returns + */ +const matchMenu = (menu:Menu,menuRouter: RouteRecordRaw[]) => { + const url = menu.url + let temp = null + for (const route of menuRouter) { + if (url === route.path) { + temp = route + temp.meta.title = menu.name + break + } + } + return temp +} + +/** + * 匹配二级菜单路由 + * @param module 二级菜单 + * @param moduleRouter 二级菜单路由 + * @returns + */ +const matchModule = (module:Menu,moduleRouter: RouteRecordRaw[]) => { + let temp=null; + for (const children of moduleRouter) { + if (module.url === children.path) { + children.meta.id = module.id + children.meta.title = module.name + temp=children; + break + } + } + return temp; +} + +/** + * 创建一级菜单路由 + * @param params + */ +const createMenuRouter = (menu:Menu) => { + if(undefined===menu.modules||menu.modules.length==0) + return null + let menuRouter= { + path: '/'+menu.id, + name: menu.id, + // redirect: '/document/dataDictionary', + meta: {title: menu.name}, + } + let children=[] + menu.modules.forEach(m => { + let externalOldERP=false + if('html'===m.url.substring(m.url.length-4,m.url.length)) + externalOldERP=true + children.push({ + path: m.id, + name: m.id, + meta: { + title: m.name, + external: true, //是否引入外部应用,默认false + externalOldERP: externalOldERP, //外部应用是否是老ERP页面,默认false + externalOldERPIndex: publicData.externalOldERPIndex, //老ERP页面主页面,用于提前加载框架js、css等等 + externalUrl: m.url, //外部应用地址,如果是老ERP页面,地址会是:externalOldERPIndex+externalUrl + } + }) + }); + menuRouter.children=children + menuRouter.redirect=menuRouter.path+'/'+menuRouter.children[0].path + return generateDynamicRouter(menuRouter) +} + + +/** + * 递归过滤有权限的异步(动态)路由 + * + * @param routes 接口返回的异步(动态)路由 + * @param roles 用户角色集合 + * @returns 返回用户有权限的异步(动态)路由 + */ +const filterAsyncRoutes = (menus: Menu[], dynamicRouter: RouteRecordRaw[]) => { + const asyncRoutes: RouteRecordRaw[] = []; + menus.forEach(item => { + let cmenu = matchMenu(item,dynamicRouter) + if (cmenu) { + const children = [] + for (const module of item.modules) { + let cmodule=matchModule(module,cmenu.children) + if(cmodule){ + children.push(cmodule) + } + } + cmenu.children = children + if (cmenu.children.length>0) { + cmenu.redirect = cmenu.path+'/'+children[0].path + asyncRoutes.push(cmenu) + } + }else{ + let newmenu=createMenuRouter(item) + if(null!=newmenu) + asyncRoutes.push(newmenu) + } + }) + const route = dynamicRouter.filter(val => val.path==='/')[0] + route.redirect = asyncRoutes[0] ? asyncRoutes[0].redirect : '/404' + asyncRoutes.unshift(route); + return asyncRoutes; +}; + +// setup +export const usePermissionStore = defineStore("permission", () => { + // state + const routes = ref([]); + + // actions + function setRoutes(newRoutes: RouteRecordRaw[]) { + routes.value = getSubSystemRouter().concat(newRoutes); + } + + /** + * 获取并设置当前业务域 + * @returns + */ + function setAndGetBusinessDomain() { + return new Promise((resolve, reject) => { + getBusinessDomain().then((data: any) => { + if(data.length>0){ + let cbd=getCurrentBusinessDomain(); + for (const bd of data) { + if(bd.defstatus&&1===bd.defstatus&&!cbd.id) + setCurrentBusinessDomain(bd) + } + } + resolve(data); + }).catch((error) => { + reject(error); + }); + }); + } + + /** + * 生成动态路由 + * + * @param roles 用户角色集合 + * @returns + */ + function generateRoutes(dynamicRouter: RouteRecordRaw[]) { + return new Promise((resolve, reject) => { + //使用外部本地菜单配置 + if(publicData.extLocalRouter&&publicData.extLocalRouter.length>0){ + const accessedRoutes = filterAsyncRoutes(publicData.extLocalRouter, dynamicRouter); + setRoutes(accessedRoutes); + resolve(accessedRoutes); + }else{ //接口获取授权路由 + let params={subsystem:publicData.currentSubsystem} + const settingsStore = useSettingsStore(pinia); + if(settingsStore.backendServices[publicData.currentSubsystem]) + params.subsystem=settingsStore.backendServices[publicData.currentSubsystem] + listRoutes(params).then(data => { + const menus = data.filter((item: Menu) => item.modules.length>0) + // 根据角色获取有访问权限的路由 + const accessedRoutes = filterAsyncRoutes(menus, dynamicRouter); + setRoutes(accessedRoutes); + resolve(accessedRoutes); + }).catch((error) => { + reject(error); + }); + } + }); + } + routes.value = getSubSystemRouter() + return { routes, setRoutes, generateRoutes,setAndGetBusinessDomain }; +}); + +// 非setup +export function usePermissionStoreHook() { + return usePermissionStore(pinia); +} diff --git a/abacus-static-framework/src/framework/store/modules/routes.ts b/abacus-static-framework/src/framework/store/modules/routes.ts new file mode 100644 index 0000000..279ba1e --- /dev/null +++ b/abacus-static-framework/src/framework/store/modules/routes.ts @@ -0,0 +1,18 @@ +import { defineStore } from 'pinia' +import { ref, reactive, computed } from 'vue' + + +export const useRoutesStore = defineStore('routes', () => { + const hasRoutes = ref(false) + const routes = reactive([]) + + // const getSubRoutes = computed((path: string) => routes.find((item: any) => { + // console.log('哈哈', path); + + // if (item.path === path) { + // return item.children + // } + // })); + + return { hasRoutes, routes } +}) \ No newline at end of file diff --git a/abacus-static-framework/src/framework/store/modules/settings.ts b/abacus-static-framework/src/framework/store/modules/settings.ts new file mode 100644 index 0000000..9d80fe4 --- /dev/null +++ b/abacus-static-framework/src/framework/store/modules/settings.ts @@ -0,0 +1,201 @@ +import { defineStore } from "pinia"; +import { getAssetsImages } from '@/framework/utils/index' +export const Layout = () => import('@/framework/layout/index.vue');//顶部菜单布局 +export const Layout1 = () => import('@/framework/layout1/index.vue');//顶部一级菜单、左侧二级菜单局部 + +declare var window: any +/** + * 菜单配色 + * navrbarBackgroundColor(顶部导航栏背景颜色) + * menuFontTextColor(默认菜单名称颜色) + * activeMenuFontTextColor(活动菜单名称颜色)#2467e8 + * + * */ + +const layoutColorBlue={navrbarBackgroundColor:'#428bca',menuFontTextColor:'#ffffff',activeMenuFontTextColor:'#ffffff',activeMenuBackgroundColor:'#5FA8E7', + userBackgroundColor:'#3399CC',userChooseColor:'#5FA8E7',systemChooseColor:'#5FA8E7',} +const layoutColorDarkBlue={navrbarBackgroundColor:'#071635',menuFontTextColor:'#ffffff',activeMenuFontTextColor:'#4D7FE0',activeMenuBackgroundColor:'', + userBackgroundColor:'#10234A',userChooseColor:'rgba(36,103,232,0.2)',systemChooseColor:'#0D2758'} +//菜单布局处理 +const layoutHandle = (realSetting:object,currentLayout:string) => { + if('layout'===currentLayout){ + realSetting.currentLayout = Layout + } +} +//菜单配色处理 +const layoutColorHandle = (realSetting:object,currentLayoutColor:string) => { + if('DarkBlue'===currentLayoutColor){ + realSetting.currentLayoutColor.value = layoutColorDarkBlue + } +} + + +/**获取自定义配置 */ +const getCustConfig = (realSetting:object) => { + if(!publicData.extConfigName) return; + let extConfig=window[publicData.extConfigName] + if(!extConfig||typeof extConfig !== "object") return; + for (let key in realSetting) { + if(extConfig[key]!==undefined){ + if('currentLayout'===key){ + layoutHandle(realSetting,extConfig[key]) + }else if('currentLayoutColor'===key){ + layoutColorHandle(realSetting,extConfig[key]) + }else + realSetting[key].value =extConfig[key] + } + } +} +/**获取默认配置 */ +const getDefaultConfig = (realSetting:object) => { + if (window.frameBaseConfig) { + if(window.frameBaseConfig.tokenKey!==undefined){ + realSetting.tokenKey.value =window.frameBaseConfig.tokenKey + } + if(window.frameBaseConfig.loginResultKey!==undefined){ + realSetting.loginResultKey.value =window.frameBaseConfig.loginResultKey + } + if(window.frameBaseConfig.currentLayout!==undefined){ + if('layout'===window.frameBaseConfig.currentLayout){ + realSetting.currentLayout = Layout + } + } + if(window.frameBaseConfig.currentLayoutColor!==undefined){ + if('DarkBlue'===window.frameBaseConfig.currentLayoutColor){ + realSetting.currentLayoutColor.value = layoutColorDarkBlue + } + } + + if(window.frameBaseConfig.backendServices!==undefined){ + realSetting.backendServices.value =window.frameBaseConfig.backendServices + } + if(window.frameBaseConfig.logoutRemoveToken!==undefined){ + realSetting.logoutRemoveToken.value =window.frameBaseConfig.logoutRemoveToken + } + if(window.frameBaseConfig.loginAddress!==undefined){ + realSetting.loginAddress.value =window.frameBaseConfig.loginAddress + } + if(window.frameBaseConfig.skipLoginAddressTime!==undefined){ + realSetting.skipLoginAddressTime.value =window.frameBaseConfig.skipLoginAddressTime + } + if(window.frameBaseConfig.loginType!==undefined){ + realSetting.loginType.value =window.frameBaseConfig.loginType + } + if(window.frameBaseConfig.navrbarBackgroundColor!==undefined){ + realSetting.navrbarBackgroundColor.value =window.frameBaseConfig.navrbarBackgroundColor + } + if(window.frameBaseConfig.menuFontTextColor!==undefined){ + realSetting.menuFontTextColor.value =window.frameBaseConfig.menuFontTextColor + } + if(window.frameBaseConfig.activeMenuFontTextColor!==undefined){ + realSetting.activeMenuFontTextColor.value =window.frameBaseConfig.activeMenuFontTextColor + } + if(window.frameBaseConfig.showLogo!==undefined){ + realSetting.showLogo.value =window.frameBaseConfig.showLogo + } + if(window.frameBaseConfig.logoAddress!==undefined){ + realSetting.logoAddress.value =window.frameBaseConfig.logoAddress + } + if(window.frameBaseConfig.headAddress!==undefined){ + realSetting.headAddress.value =window.frameBaseConfig.headAddress + } + if(window.frameBaseConfig.showSubSystemTags!==undefined){ + realSetting.showSubSystemTags.value =window.frameBaseConfig.showSubSystemTags + } + if(window.frameBaseConfig.showPersonalCenter!==undefined){ + realSetting.showPersonalCenter.value =window.frameBaseConfig.showPersonalCenter + } + if(window.frameBaseConfig.showDownloadCenter!==undefined){ + realSetting.showDownloadCenter.value =window.frameBaseConfig.showDownloadCenter + } + if(window.frameBaseConfig.showMessageNotify!==undefined){ + realSetting.showMessageNotify.value =window.frameBaseConfig.showMessageNotify + } + if(window.frameBaseConfig.tagsView!==undefined){ + realSetting.tagsView.value =window.frameBaseConfig.tagsView + } + if(window.frameBaseConfig.fixedHeader!==undefined){ + realSetting.fixedHeader.value =window.frameBaseConfig.fixedHeader + } + if(window.frameBaseConfig.fixedTags!==undefined){ + realSetting.fixedTags.value =window.frameBaseConfig.fixedTags + } + if(window.frameBaseConfig.maxTags!==undefined){ + realSetting.maxTags.value =window.frameBaseConfig.maxTags + } + if(window.frameBaseConfig.extModuleSendToken!==undefined){ + realSetting.extModuleSendToken.value =window.frameBaseConfig.extModuleSendToken + } + if(window.frameBaseConfig.websiteInfo!==undefined){ + realSetting.websiteInfo.value =window.frameBaseConfig.websiteInfo + } + } +} + +export const useSettingsStore = defineStore("setting", () => { + //令牌key + const tokenKey=ref('abacus_emp_token') + //登录信息key + const loginResultKey=ref('abacus_login_result' ) + //菜单布局类型 + let currentLayout = Layout1 + //菜单配色类型 layoutColorDarkBlue + const currentLayoutColor=ref(layoutColorBlue) + //后台服务配置{"acas":"example"} + const backendServices=ref({}) + //退出登录是否清理登录令牌 + const logoutRemoveToken = ref(false); + //应用登录地址 + const loginAddress = ref('/abacus/index.html'); + //跳转登录页面延迟时间 + const skipLoginAddressTime = ref(3000); + //登录类型相关配置,acas员工登录默认放第一个 + const loginType = ref([{"id":"employee","name":"员工","prefixUrl":"/acas/user"}]); + //顶部导航栏背景颜色 + const navrbarBackgroundColor = ref('#071635'); + //默认菜单名称颜色 + const menuFontTextColor=ref('#ffffff'); + //活动菜单名称颜色 + const activeMenuFontTextColor=ref('#4D7FE0'); + //是否显示顶部导航栏左侧logo + const showLogo = ref(true); + //左侧logo地址 + const logoAddress= ref(''); + //头像地址 + const headAddress= ref(getAssetsImages('head.jpg')); + //是否显示顶部导航栏左侧子系统选择功能 + const showSubSystemTags = ref(true); + //是否显示个人中心 + const showPersonalCenter = ref(true); + //是否显示下载中心 + const showDownloadCenter = ref(true); + //是否显示顶部导航栏右侧消息通知 + const showMessageNotify = ref(false); + //是否显示多标签导航 + const tagsView = ref(true); + //是否固定头部 + const fixedHeader = ref(true); + //是否固定tags + const fixedTags = ref(true); + //最大标签数量,默认8,配置0代表不限制 + const maxTags = ref(8); + //外部模块发送Token + const extModuleSendToken = ref(false); + //网站相关信息配置 + const websiteInfo=ref({ + //是否显示 + show:false, + //排列规则,不配置:左;center:居中;end:靠右 + //justify:"center", + //党政机关事业单位网站标识 + //conacUrl:{"url":"","size":"30"}, + //其他信息,版本信息、导航与链接等等 + //otherInfo:[{"name":"xxx公司","url":""},{"name":"示例名称","url":"完整链接地址,不配置,则不跳转"},], + }) + + const realSetting={tokenKey,loginResultKey,currentLayout, backendServices, logoutRemoveToken, loginAddress, skipLoginAddressTime, loginType, navrbarBackgroundColor, menuFontTextColor, activeMenuFontTextColor, showLogo, logoAddress, headAddress, showSubSystemTags,showPersonalCenter,showDownloadCenter, showMessageNotify,tagsView,fixedHeader,fixedTags,maxTags,extModuleSendToken,currentLayoutColor,websiteInfo} + getDefaultConfig(realSetting) + getCustConfig(realSetting) + return realSetting + +}); diff --git a/abacus-static-framework/src/framework/store/modules/tagsView.ts b/abacus-static-framework/src/framework/store/modules/tagsView.ts new file mode 100644 index 0000000..9bfc82c --- /dev/null +++ b/abacus-static-framework/src/framework/store/modules/tagsView.ts @@ -0,0 +1,260 @@ +import { defineStore } from "pinia"; +import { RouteLocationNormalized } from "vue-router"; +import { useSettingsStore } from "@/framework/store/modules/settings"; +import { removeSlashes } from "@/framework/utils/standard/dataHandleUtil"; + +export interface TagView extends Partial { + title?: string; +} + +// setup +export const useTagsViewStore = defineStore("tagsView", () => { + // state + const visitedViews = ref([]); + const cachedViews = ref([]); + const externalViews=reactive(new Set()); + const settingsStore = useSettingsStore(); + + // actions + function addVisitedView(view: TagView) { + if (visitedViews.value.some((v) => v.path === view.path)) return; + + if(settingsStore.maxTags===visitedViews.value.length){ + visitedViews.value.shift() + } + if (view.meta && view.meta.affix) { + visitedViews.value.unshift( + Object.assign({}, view, { + title: view.meta?.title || "no-name", + }) + ); + } else { + visitedViews.value.push( + Object.assign({}, view, { + title: view.meta?.title || "no-name", + }) + ); + } + } + + function findExternalViewsByPrefix(prefix: String) { + for (const view of externalViews) { + if (view.startsWith(prefix)) { + return view + } + } + return null + } + + function delExternalViews(view: TagView) { + let url=view.meta.externalUrl + if(view.meta.externalOldERP){ + url = "/"+removeSlashes(view.meta.externalOldERPIndex)+'/vindex.html?mUrl=' + +"/"+removeSlashes(view.meta.externalOldERPIndex)+"/"+removeSlashes(view.meta.externalUrl) as string; + let oldErpUrl=findExternalViewsByPrefix(url); + if(oldErpUrl){ + url=oldErpUrl; + } + } + return new Promise((resolve) => { + externalViews.delete(url) + resolve([...externalViews]); + }); + } + + function addCachedView(view: TagView) { + const viewName = view.name as string; + if (cachedViews.value.includes(viewName)) return; + if (view.meta?.keepAlive) { + cachedViews.value.push(viewName); + } + } + + function delVisitedView(view: TagView) { + return new Promise((resolve) => { + for (const [i, v] of visitedViews.value.entries()) { + if (v.path === view.path) { + visitedViews.value.splice(i, 1); + break; + } + } + resolve([...visitedViews.value]); + }); + } + function delCachedViewByName(name: String) { + return new Promise((resolve) => { + const index = cachedViews.value.indexOf(name); + index > -1 && cachedViews.value.splice(index, 1); + resolve([...cachedViews.value]); + }); + } + function delCachedView(view: TagView) { + const viewName = view.name as string; + return new Promise((resolve) => { + const index = cachedViews.value.indexOf(viewName); + index > -1 && cachedViews.value.splice(index, 1); + resolve([...cachedViews.value]); + }); + } + + function delOtherVisitedViews(view: TagView) { + return new Promise((resolve) => { + visitedViews.value = visitedViews.value.filter((v) => { + return v.meta?.affix || v.path === view.path; + }); + resolve([...visitedViews.value]); + }); + } + + function delOtherCachedViews(view: TagView) { + const viewName = view.name as string; + return new Promise((resolve) => { + const index = cachedViews.value.indexOf(viewName); + if (index > -1) { + cachedViews.value = cachedViews.value.slice(index, index + 1); + } else { + // if index = -1, there is no cached tags + cachedViews.value = []; + } + resolve([...cachedViews.value]); + }); + } + + function updateVisitedView(view: TagView) { + for (let v of visitedViews.value) { + if (v.path === view.path) { + v = Object.assign(v, view); + break; + } + } + } + + function addView(view: TagView) { + addVisitedView(view); + addCachedView(view); + } + + function delView(view: TagView) { + return new Promise((resolve) => { + delVisitedView(view); + delCachedView(view); + resolve({ + visitedViews: [...visitedViews.value], + cachedViews: [...cachedViews.value], + }); + }); + } + + function delOtherViews(view: TagView) { + return new Promise((resolve) => { + delOtherVisitedViews(view); + delOtherCachedViews(view); + resolve({ + visitedViews: [...visitedViews.value], + cachedViews: [...cachedViews.value], + }); + }); + } + + function delLeftViews(view: TagView) { + return new Promise((resolve) => { + const currIndex = visitedViews.value.findIndex( + (v) => v.path === view.path + ); + if (currIndex === -1) { + return; + } + visitedViews.value = visitedViews.value.filter((item, index) => { + // affix:true 固定tag,例如“首页” + if (index >= currIndex || (item.meta && item.meta.affix)) { + return true; + } + + const cacheIndex = cachedViews.value.indexOf(item.name as string); + if (cacheIndex > -1) { + cachedViews.value.splice(cacheIndex, 1); + } + return false; + }); + resolve({ + visitedViews: [...visitedViews.value], + }); + }); + } + function delRightViews(view: TagView) { + return new Promise((resolve) => { + const currIndex = visitedViews.value.findIndex( + (v) => v.path === view.path + ); + if (currIndex === -1) { + return; + } + visitedViews.value = visitedViews.value.filter((item, index) => { + // affix:true 固定tag,例如“首页” + if (index <= currIndex || (item.meta && item.meta.affix)) { + return true; + } + + const cacheIndex = cachedViews.value.indexOf(item.name as string); + if (cacheIndex > -1) { + cachedViews.value.splice(cacheIndex, 1); + } + return false; + }); + resolve({ + visitedViews: [...visitedViews.value], + }); + }); + } + + function delAllViews() { + return new Promise((resolve) => { + const affixTags = visitedViews.value.filter((tag) => tag.meta?.affix); + visitedViews.value = affixTags; + cachedViews.value = []; + resolve({ + visitedViews: [...visitedViews.value], + cachedViews: [...cachedViews.value], + }); + }); + } + + function delAllVisitedViews() { + return new Promise((resolve) => { + const affixTags = visitedViews.value.filter((tag) => tag.meta?.affix); + visitedViews.value = affixTags; + resolve([...visitedViews.value]); + }); + } + + function delAllCachedViews() { + return new Promise((resolve) => { + cachedViews.value = []; + resolve([...cachedViews.value]); + }); + } + + return { + visitedViews, + cachedViews, + externalViews, + addVisitedView, + addCachedView, + delVisitedView, + delCachedView, + delCachedViewByName, + delOtherVisitedViews, + delOtherCachedViews, + updateVisitedView, + addView, + delView, + delOtherViews, + delLeftViews, + delRightViews, + delAllViews, + delAllVisitedViews, + delAllCachedViews, + delExternalViews, + findExternalViewsByPrefix, + }; +}); diff --git a/abacus-static-framework/src/framework/store/modules/user.ts b/abacus-static-framework/src/framework/store/modules/user.ts new file mode 100644 index 0000000..656b6ae --- /dev/null +++ b/abacus-static-framework/src/framework/store/modules/user.ts @@ -0,0 +1,199 @@ +import { defineStore } from "pinia"; +import pinia from "@/framework/store"; +import Cookies from 'js-cookie' +import { ref } from "vue"; +import { useSettingsStore } from "@/framework/store/modules/settings"; +import {currentRouter} from "@/framework/router"; +import { getUsermessage } from '@/framework/api/acas/index' + +const settingsStore = useSettingsStore(pinia); +const USER_KEY='abacus_user'; +const TOKEN_KEY=settingsStore.tokenKey +const BUSINESS_DOMAIN_KEY='abacus_business_domain' + +/**开发环境初始化 */ +function devDataInit(){ + if (import.meta.env.MODE === 'development'){ + const expires = new Date(new Date() * 1 + 86400000); + Cookies.set(TOKEN_KEY, JSON.stringify({"access_token":"666666","refresh_token":"666666","user_type":"employee","scope":"scope","token_type":"token_type","expires_dt":expires.getTime()}), { expires: expires }); + Cookies.set(USER_KEY, "0", { expires: expires }); + } +} + +/**设置当前业务域 */ +export function setCurrentBusinessDomain(businessDomain:Object){ + sessionStorage.setItem(BUSINESS_DOMAIN_KEY, JSON.stringify(businessDomain)) + return businessDomain +} +/**获取当前业务域 */ +export function getCurrentBusinessDomain(){ + let obj=JSON.parse(sessionStorage.getItem(BUSINESS_DOMAIN_KEY)) + if(null===obj||undefined===obj) return {} + return obj +} +/**获取令牌Header信息 */ +export function getTokenHeader(){ + const obj = Cookies.get(TOKEN_KEY); + if (obj) { + return {'Authorization':'Bearer '+JSON.parse(obj).access_token} + } + return null +} + + +/**获取Header公共参数 */ +function getHeaderCommonParam(){ + let commonParam={} + /**获取菜单、模块名称 */ + const cr=currentRouter() + if(undefined!==cr.value.matched){ + if(undefined!==cr.value.matched[0]){ + commonParam.menuName=encodeURI(cr.value.matched[0].meta.title) + } + if(undefined!==cr.value.matched[1]){ + commonParam.moduleName=encodeURI(cr.value.matched[1].meta.title) + } + } + /**获取业务域 */ + const cbd=getCurrentBusinessDomain() + if(undefined!==cbd.id){ + commonParam.businessDomain=cbd.id + } + if(undefined!==cbd.id){ + commonParam.businessDomainName=encodeURI(cbd.name) + } + + return JSON.stringify(commonParam) +} + +/**获取所有需要发送给后端的header信息 */ +export function getAllHeader(){ + const header = getTokenHeader(); + header.commonParam=getHeaderCommonParam(); + return header +} + +/**获取令牌 */ +export function getToken(){ + let obj = Cookies.get(TOKEN_KEY); + if (obj) { + obj=JSON.parse(obj) + if('string'===typeof obj){ + obj=JSON.parse(obj) + } + return obj + } + return null +} +/**删除令牌 */ +export function removeToken(){ + Cookies.remove(TOKEN_KEY) + Cookies.remove(USER_KEY) +} +/**设置令牌 */ +export function setToken(token){ + const exp=token.expires_in*1-10;//提前10秒过期,保证前端存储token先于后台token过期 + const expires = new Date(new Date() * 1 + exp * 1000); + token.expires_dt=expires.getTime() + delete token.expires_in + Cookies.set(TOKEN_KEY, JSON.stringify(token), { expires: expires }) + return token +} +/**用户变化检查 */ +const userChangeCheck=setInterval(function(){ + let userId=Cookies.get(USER_KEY); + let currentUserId=useUserStoreHook().userId; + if(userId&¤tUserId!=userId){ + location.reload(); + } +},5000); + +export const useUserStore = defineStore("user", () => { + devDataInit() + // state + const tenantId = ref(''); + const tenantName = ref(''); + const userId = ref(''); + const userName = ref(''); + const dept = ref(''); + const deptName = ref(''); + const avatarUrl=ref('') + const token = ref(''); + const refreshToken = ref(''); + const tokenExpiredTime = ref(0); + + function handleInfo(alr){ + let userInfo=null; + if(undefined!==alr&&null!==alr&&undefined!==alr.user&&null!==alr.user){ + tenantId.value = alr.user.tenantId; + tenantName.value = alr.user.tenantName; + userId.value = alr.user.userId; + userName.value = alr.user.userName; + dept.value = alr.user.deptId; + deptName.value = alr.user.deptName; + avatarUrl.value=alr.user.avatarUrl; + userInfo={userId:userId.value,userName:userName.value,dept:dept.value,deptName:deptName.value,avatarUrl:avatarUrl} + }else{ + console.error("无登录用户信息") + userInfo={userId:'',userName:'',dept:'',deptName:'',avatarUrl:''} + } + if(!userInfo.avatarUrl.value){ + userInfo.avatarUrl.value=settingsStore.headAddress + } + } + + // 获取登录用户信息 + async function getInfo() { + let userInfo=null; + await getUsermessage().then((data: any) => { + userInfo=handleInfo(data); + }); + return new Promise((resolve, reject) => { + resolve(userInfo); + }); +} + +// 注销 +function logout() { + if(settingsStore.logoutRemoveToken){ + removeToken(); + } + resetToken(); + window.close();//先尝试关闭标签页 + //不能关闭标签页,跳转登录页面 + window.location.href = settingsStore.loginAddress +} + +// 重置 +function resetToken() { + token.value = ""; + tenantId.value = ""; + tenantName.value = ""; + userId.value = ""; + userName.value = ""; + avatarUrl.value=""; + dept.value = ''; + token.value = ''; +} +return { + tenantId, + tenantName, + userId, + userName, + dept, + deptName, + avatarUrl, + token, + refreshToken, + tokenExpiredTime, + + getInfo, + logout, + resetToken, +}; +}); + +// 非setup +export function useUserStoreHook() { + return useUserStore(pinia); +} diff --git a/abacus-static-framework/src/framework/styles/base.scss b/abacus-static-framework/src/framework/styles/base.scss new file mode 100644 index 0000000..498256a --- /dev/null +++ b/abacus-static-framework/src/framework/styles/base.scss @@ -0,0 +1,114 @@ + +// 自定义class样式 + +// 1-80(可以等于80)之间的偶数(双数) +// 能被5除尽的1-80之间的数,如5,10,15,35等 +// 定义内外边距,历遍1-80 +@for $i from 0 through 80 { + + // 能被5除尽的数只要双数和 + @if $i % 2==0 or $i % 5==0 { + + // 得出:ab-margin-30或者ab-m-30 + .ab-margin-#{$i}, + .ab-m-#{$i} { + margin: $i + px !important; + } + + // 得出:ab-padding-30或者ab-p-30 + .ab-padding-#{$i}, + .ab-p-#{$i} { + padding: $i + px !important; + } + + @each $short, + $long in l left, + t top, + r right, + b bottom { + + // 缩写版,结果如: ab-m-l-30 + // 定义外边距 + .ab-m-#{$short}-#{$i} { + margin-#{$long}: $i + px !important; + } + + // 定义内边距 + .ab-p-#{$short}-#{$i} { + padding-#{$long}: $i + px !important; + } + + // 完整版,结果如:ab-margin-left-30 + // 定义外边距 + .ab-margin-#{$long}-#{$i} { + margin-#{$long}: $i + px !important; + } + + // 定义内边距 + .ab-padding-#{$long}-#{$i} { + padding-#{$long}: $i + px !important; + } + } + } +} +// 字体加粗 +.ab-font-bold { + font-weight: 600; +} +// 字体居左 +.ab-text-left { + text-align: left; +} +// 字体居中 +.ab-text-center { + text-align: center; +} +// 字体居右 +.ab-text-right { + text-align: right; +} + +/* start--文本行数限制--start */ +.ab-line-1 { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; +} + +.ab-line-2 { + -webkit-line-clamp: 2; +} + +.ab-line-3 { + -webkit-line-clamp: 3; +} + +.ab-line-4 { + -webkit-line-clamp: 4; +} + +.ab-line-5 { + -webkit-line-clamp: 5; +} + +.ab-line-2, .ab-line-3, .ab-line-4, .ab-line-5 { + overflow: hidden; + word-break: break-all; + text-overflow: ellipsis; + display: -webkit-box; // 弹性伸缩盒 + -webkit-box-orient: vertical; // 设置伸缩盒子元素排列方式 +} +/* end--文本行数限制--end */ + +// 鼠标手指样式 +.ab-cursor-pointer:hover{ + cursor: pointer; +} + +// 基础边框弧度 +.ab-border-radius-base{ + border-radius: 16px; +} +.ab-b-r-base{ + border-radius: 16px; +} \ No newline at end of file diff --git a/abacus-static-framework/src/framework/styles/config/elmentplus-reset-abacus.scss b/abacus-static-framework/src/framework/styles/config/elmentplus-reset-abacus.scss new file mode 100644 index 0000000..d922b5f --- /dev/null +++ b/abacus-static-framework/src/framework/styles/config/elmentplus-reset-abacus.scss @@ -0,0 +1,44 @@ +// 覆盖主题色 +:root { +} + +.el-descriptions__title::before { + content: "| "; + font-weight: 900; + color: var(--el-color-primary); +} +.el-descriptions__header{ + background-color: #fafafa; +} + + + +/*vxetable相关样式*/ +//解决可拖拽列不对齐问题 +.vxe-header--column{ + line-height:0 !important; +} +//去掉表头拖拽竖线 +.vxe-cell--col-resizable::before { + background-color:#fff !important; +} +//去掉表头 +.vxe-cell{ + padding: 0 !important; +} +//标题栏row样式 +.ab-vxetable-header-row{ + background-color: #fff; +} +//标题栏cell样式 +.ab-vxetable-header-cell{ + //padding: 1px 0 !important; + //height: 38px; + color: #555 !important; + border-top: 1px solid #E4E7ED; +} +//内容row样式 +.ab-vxetable-row{ + height: 38px; +} + diff --git a/abacus-static-framework/src/framework/styles/config/elmentplus-reset-hz.scss b/abacus-static-framework/src/framework/styles/config/elmentplus-reset-hz.scss new file mode 100644 index 0000000..b24cb92 --- /dev/null +++ b/abacus-static-framework/src/framework/styles/config/elmentplus-reset-hz.scss @@ -0,0 +1,74 @@ +// 覆盖主题色 +:root { + --el-color-primary: #2467E8; + // --el-menu-active-color: green; + // --active-color: green; + } + + //修改弹出框样式 + .el-dialog{ + border-radius: 10px !important; + } + + // 修改框架抽屉样式 + .el-drawer__header{ + border-bottom: 1px solid #e4e7ed; + padding-bottom: 10px !important; + margin-bottom: 0 !important; + } + .el-descriptions__title::before { + content: "| "; + font-weight: 900; + color: var(--el-color-primary); + } + .el-descriptions__header{ + background-color: #fafafa; + } + + // 修改框架input样式 + .el-input__wrapper{ + background: #F2F4F7 !important; + border-radius: 10px !important; + box-shadow: none !important; + } + + + // 修改框架button样式 + .el-button{ + border-radius: 10px !important; + } + + /*vxetable相关样式修改*/ + //解决可拖拽列不对齐问题 + .vxe-header--column{ + line-height:0 !important; + } + //去掉表头拖拽竖线 + .vxe-cell--col-resizable::before { + background-color:#fff !important; + } + //去掉表头 + .vxe-cell{ + padding: 0 !important; + height: 40px; + } + //标题栏row样式 + .ab-vxetable-header-row{ + padding-top: 12px; + background-color: #fff; + } + //标题栏cell样式 + .ab-vxetable-header-cell{ + border-top: 1px solid #E4E7ED; + color: #555 !important; + font-size: 14px; + font-weight: 400; + font-family: Microsoft YaHei UI, Microsoft YaHei UI; + } + //内容row样式 + .ab-vxetable-row{ + height: 56px; + color: #222; + font-size: 14px; + } + diff --git a/abacus-static-framework/src/framework/styles/config/style-abacus.scss b/abacus-static-framework/src/framework/styles/config/style-abacus.scss new file mode 100644 index 0000000..9e05c9e --- /dev/null +++ b/abacus-static-framework/src/framework/styles/config/style-abacus.scss @@ -0,0 +1,30 @@ + + +.form-container { + padding: 16px 12px 0 0px; + margin-top: 8px; + background-color: #fff; + position: relative; + + .more-filter{ + position: absolute; + right: 0; + top: 0; + z-index: 5; + font-size: 13px; + display: flex; + align-items: center; + padding: 6px 12px; + background-color: #EAF0FD; + color: #2467E8; + cursor: pointer; + user-select: none; + } + +} + +.table-container{ + padding: 12px 20px; + margin-top: 8px; + background-color: #fff; +} \ No newline at end of file diff --git a/abacus-static-framework/src/framework/styles/config/style-hz.scss b/abacus-static-framework/src/framework/styles/config/style-hz.scss new file mode 100644 index 0000000..c369503 --- /dev/null +++ b/abacus-static-framework/src/framework/styles/config/style-hz.scss @@ -0,0 +1,63 @@ +// APP容器样式 +.app-main-content-container{ + border-top-left-radius: 24px; + border-top-right-radius: 24px; +} +// 侧边栏样式 +.sidebar-container{ + border-radius: 16px; + .el-menu-item{ + border-radius: 12px; + } + .el-menu-item:hover{ + border-radius: 12px; + } + .el-menu-item.is-active{ + border-radius: 12px; + } +} + +// 多标签页样式 +.tags-view-container{ + border-radius: 16px; + + .tags-item{ + border-radius: 12px; + } +} + +.form-container { + padding: 16px 12px 0 0px; + margin-top: 16px; + background-color: #fff; + border-radius: 16px; + position: relative; + .el-tag{ + background-color: #fff; + } + + .more-filter{ + position: absolute; + right: 0; + top: 0; + z-index: 5; + font-size: 13px; + display: flex; + align-items: center; + padding: 6px 12px; + background-color: #EAF0FD; + border-bottom-left-radius: 10px; + border-top-right-radius: 16px; + color: #2467E8; + cursor: pointer; + user-select: none; + } + +} + +.table-container{ + padding: 12px 20px; + margin-top: 8px; + border-radius: 16px; + background-color: #fff; +} \ No newline at end of file diff --git a/abacus-static-framework/src/framework/styles/index.scss b/abacus-static-framework/src/framework/styles/index.scss new file mode 100644 index 0000000..4da178e --- /dev/null +++ b/abacus-static-framework/src/framework/styles/index.scss @@ -0,0 +1,21 @@ +@use "./base"; +@use "./variables"; +@use "./reset"; + + +.app-container { + position: relative; + overflow: hidden; + background-color: #f4f4f4; + // padding: 16px; + padding-bottom: 0; + + + + +} + + + + + diff --git a/abacus-static-framework/src/framework/styles/reset.scss b/abacus-static-framework/src/framework/styles/reset.scss new file mode 100644 index 0000000..ee3164f --- /dev/null +++ b/abacus-static-framework/src/framework/styles/reset.scss @@ -0,0 +1,94 @@ +*, +::before, +::after { + box-sizing: border-box; + border-color: currentcolor; + border-style: solid; + border-width: 0; +} + +#app { + width: 100%; + height: 100%; +} + +html { + box-sizing: border-box; + width: 100%; + height: 100%; + line-height: 1.5; + tab-size: 4; + text-size-adjust: 100%; +} + +body { + width: 100%; + height: 100%; + margin: 0; + font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB", + "Microsoft YaHei", "微软雅黑", Arial, sans-serif; + line-height: inherit; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizelegibility; +} + +a { + color: inherit; + text-decoration: inherit; +} + +img, +svg { + display: inline-block; +} + +svg { + vertical-align: -0.15em; //因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果 +} + +ul, +li { + padding: 0; + margin: 0; + list-style: none; +} + +*, +*::before, +*::after { + box-sizing: inherit; +} + +a, +a:focus, +a:hover { + color: inherit; + text-decoration: none; + cursor: pointer; +} + +a:focus, +a:active, +div:focus { + outline: none; +} + + +/* 去掉input尾部上下小箭头 start */ +input::-webkit-outer-spin-button,input::-webkit-inner-spin-button{ + -webkit-appearance: none !important; + -moz-appearance: none !important; + -o-appearance: none !important; + -ms-appearance: none !important; + appearance: none !important; + margin: 0; +} +input[type="number"]{ + -webkit-appearance:textfield; + -moz-appearance:textfield; + -o-appearance:textfield; + -ms-appearance:textfield; + appearance:textfield; +} +/* 去掉input尾部上下小箭头 end */ diff --git a/abacus-static-framework/src/framework/styles/variables.module.scss b/abacus-static-framework/src/framework/styles/variables.module.scss new file mode 100644 index 0000000..769947b --- /dev/null +++ b/abacus-static-framework/src/framework/styles/variables.module.scss @@ -0,0 +1,4 @@ +:export { + sideBarWidth: $sideBarWidth; + sideBarHideWidth: $sideBarHideWidth; +} \ No newline at end of file diff --git a/abacus-static-framework/src/framework/styles/variables.scss b/abacus-static-framework/src/framework/styles/variables.scss new file mode 100644 index 0000000..be5cd57 --- /dev/null +++ b/abacus-static-framework/src/framework/styles/variables.scss @@ -0,0 +1,6 @@ +$bg-color:red; + +// 侧边栏展开的宽度 +$sideBarWidth: 216px; +$sideBarHideWidth: 64px; + diff --git a/abacus-static-framework/src/framework/types/env.d.ts b/abacus-static-framework/src/framework/types/env.d.ts new file mode 100644 index 0000000..18fd4b0 --- /dev/null +++ b/abacus-static-framework/src/framework/types/env.d.ts @@ -0,0 +1,5 @@ +declare module "*.vue" { + import { DefineComponent } from "vue" + const component: DefineComponent<{}, {}, any> + export default component + } \ No newline at end of file diff --git a/abacus-static-framework/src/framework/types/global.d.ts b/abacus-static-framework/src/framework/types/global.d.ts new file mode 100644 index 0000000..43c3a94 --- /dev/null +++ b/abacus-static-framework/src/framework/types/global.d.ts @@ -0,0 +1,68 @@ +declare global { + + /** + * VxeTable自定义参数 + */ + interface VxeTableParam { + clientPage?:boolean; //是否客户端分页 + filterNameRef?:any; //表内搜索引用 + tableDataCache?:any;//表格数据缓存 + searchProps?: Array;//表内需要检索列的key + children?: boolean;//树形表格场景,表内搜索筛选后的数据,是否作为子节点展示,默认否 + allTreeExpand?: boolean;//树形表格场景,表内搜索筛选后的数据,是否自动展开子节点,默认否 + } + + /** + * 分页查询参数 + */ + interface PageQuery { + pageNum: number; + pageSize: number; + } + + /** + * 分页响应对象 + */ + interface PageResult { + /** + * 数据列表 + */ + list: T; + /** + * 数据总数 + */ + total: number; + } + + /** + * 弹窗属性 + */ + interface DialogOption { + /** + * 弹窗标题 + */ + title?: string; + /** + * 是否显示 + */ + visible: boolean; + } + /** + * 组件数据源 + */ + interface OptionType { + /** + * 值 + */ + value: number; + /** + * 文本 + */ + label: string; + /** + * 子列表 + */ + children?: OptionType[]; + } +} +export {}; diff --git a/abacus-static-framework/src/framework/utils/excel.ts b/abacus-static-framework/src/framework/utils/excel.ts new file mode 100644 index 0000000..8f61bbb --- /dev/null +++ b/abacus-static-framework/src/framework/utils/excel.ts @@ -0,0 +1,345 @@ +import ExcelJS from 'exceljs' + +// 导入参数数据类型 +export interface importExcelType { + // 第 i 张工作表 + i?: number; + // 表格表头字段数组 + header: readonly any[]; +} + +// 导出参数数据类型 +export interface exportExcelType { + // 数据 + data: { [key: string]: any }[]; + // 文件名 + name: string; + // 表头字段 + header: string[]; + // 表头字段对应中文 + customHeader: string[]; + // 工作表名 + sheetName?: string; + // 标题 + title?: string; + // 小标题 + subTitle?: string; + // 工作表保护密码 + password?: string; + // 对齐方式 + alignment?: Partial; + // 合并单元格 + mergeList?: mergeListType[]; + // 标题样式 + titleStyle?: Partial; + // 小标题样式 + subTitleStyle?: Partial; + // 表头样式 + headerStyle?: Partial; + // 单元格统一样式 + cellStyle?: Partial; +} + +// 合并单元格数据类型 +export interface mergeListType { + startRow: number; + startColumn: number; + endRow: number; + endColumn: number; +} + +// exceljs相关方法 +export class Excel { + blob?: Blob; // 导入的blob文件 + worksheet?: ExcelJS.Worksheet; // 当前工作表 + header: string[]; // 表头字段数组 + constructor(blob?: Blob) { + this.blob = blob; + this.worksheet = undefined; + this.header = []; + } + // blob转ArrayBuffer(用于后续生成文件数据) + private readFile(): Promise { + return new Promise((resolve, reject) => { + let reader = new FileReader(); + if (!this.blob) { + reject('上传文件异常!'); + } else { + reader.readAsArrayBuffer(this.blob); + reader.onload = (ev) => { + resolve(ev.target!.result as ArrayBuffer); + }; + } + + }); + } + // 导入excel文件获取workbook(workbook属性方法参考exceljs文档) + public async getWorkBook(): Promise { + let buffer = await this.readFile(); + const workbook = new ExcelJS.Workbook(); + return await workbook.xlsx.load(buffer); + } + + // 获取第i张工作表 i 工作表序号 + public async getWorkSheet(i: number = 0): Promise { + const workbook = await this.getWorkBook(); + return workbook.getWorksheet(i); + } + + + // 将 excel 第i张工作表的数据转为对象数据 + // {Promise[]>}传入表头作为字段的对象数组(每个元素对象对应每一行) + public async importExcel(options: importExcelType): Promise[]> { + const { i = 1, header } = options; + const workbook = await this.getWorkBook(); + const worksheet = workbook.getWorksheet(i); + // excel导入后返回的数组 + const excelList: Record<(typeof header)[number], string>[] = []; + worksheet.getSheetValues().filter(temp => !!temp?.length).forEach(item => { + // 移除空行 + // 移除每行首个空元素 + (item as string[]).shift(); + // 定义临时对象存储每一行内容 + let tempObj: Record<(typeof header)[number], string> = {}; + (item as string[]).forEach((item2, index2) => { + tempObj[header[index2]] = item2; + }) + excelList.push(tempObj); + }) + return excelList + } + + // 导出excel,参数信息参考exceljs + // data 数据 + // name 文件名 + // header 表头字段 + // customHeader 表头字段对应中文 + // sheetName 工作表名 + // title 标题 + // subTitle 副标题(日期) + // password 冻结表格密码 + // mergeList 合并单元格数组 + // titleStyle 标题样式(按需补充方法) + // subTitleStyle 小标题样式(按需补充方法) + // headerStyle 表头字段样式(按需补充方法) + // cellStyle 单元格样式(按需补充方法) + + public async exportExcel(options: exportExcelType): Promise { + const { + data, + name, + header, + customHeader, + sheetName = 'sheet1', + title = '', + subTitle = '', + password = '', + mergeList = [], + titleStyle, + subTitleStyle, + headerStyle, + cellStyle } = options; + // 创建工作簿 + const workbook = new ExcelJS.Workbook(); + workbook.creator = '侃侃'; + workbook.created = new Date(); + // 添加sheet + this.worksheet = workbook.addWorksheet(sheetName, { properties: { tabColor: { argb: 'FF00FF00' } } }); + this.header = header; + // 表头行序号 + let headerRowId = 1; + if (!!title) headerRowId++; + if (!!subTitle) headerRowId++; + // 插入单元格数据 + this.setCells(data, customHeader, cellStyle); + // 插入大标题 + this.getTitle(title, titleStyle); + // 插入小标题 + this.getSubTitle(subTitle, subTitleStyle); + // 处理表头 + this.setHeaderStyle(headerRowId, data, headerStyle); + // 更多处理 + this.handleDealExcel(password, mergeList, headerRowId); + // 导出excel(此处也可用file-saver将blob导出到excel文件 fs.saveAs(blob, name+'.xlsx');) + workbook.xlsx.writeBuffer().then((data) => { + let blob = new Blob([data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' }); + const a = document.createElement('a'); + a.href = URL.createObjectURL(blob); + a.download = name + '.xlsx'; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + window.URL.revokeObjectURL(a.href); + }); + } + + // 合并单元格数组 + // merge1 需要合并的行/列起止对象数组1 + // 例:[{ startRow: 1, endRow: 1},{ startRow: 10, endRow: 10}] + // merge2 需要合并的列/行起止对象数组2 + // 例:[{ startColumn: 1, endColumn: 2 }] + // mergeArr 合并后数组 + // 例:[{ startRow: 1, endRow: 1, startColumn: 1, endColumn: 2},{ startRow: 10, endRow: 10, startColumn: 1, endColumn: 2}] + public merge(merge1: Partial[], merge2: Partial[]): mergeListType[] { + const mergeArr: any[] = []; + merge1.forEach(item1 => { + mergeArr.push(...merge2.map(item2 => { + return { ...item2, ...item1 }; + })) + }) + return mergeArr; + } + + // 单元格数据处理 + // data 表格数据 + // customHeader 表头中文字段 + + private setCells(data: exportExcelType['data'], customHeader: string[], style?: Partial): void { + // 设置列,插入中文表头 + const column: Partial[] = []; + this.header.forEach((item, index) => { + column.push({ + header: customHeader[index], + key: item, + width: style?.width || 25, + }) + }) + this.worksheet!.columns = column; + // 设置行,添加数据 + this.worksheet?.addRows(data); + // 设置行高 + this.worksheet?.eachRow({ includeEmpty: true }, (row, rowNumber) => { + row.height = style?.height || 20; + }) + // 获取每一列数据,再依次对齐 + this.worksheet!.columns.forEach(column => { + column.alignment = style?.alignment || { vertical: 'middle', horizontal: 'center', wrapText: true } + }) + } + + // 添加大标题 + // title 标题 + // style 标题样式 + private getTitle(title: string, style?: Partial): void { + if (!!title) { + // 插入标题 + this.worksheet?.spliceRows(1, 0, [title]); + this.worksheet?.mergeCells(1, 1, 1, this.header.length); + // 调整标题样式 + const titleRow = this.worksheet!.getRow(1); + // 高度 + titleRow.height = style?.height || 40; + // 字体设置 + titleRow.font = style?.font || { + size: 20, + bold: true + } + // 背景色 + titleRow.fill = style?.fill || { + bgColor: { + 'argb': 'FFFFFF00' + }, + type: 'pattern', + pattern: 'none' + } + // 对齐方式 + titleRow.alignment = style?.alignment || { + horizontal: "center", + vertical: "middle" + }; + } + } + + // 添加小标题 + // subTitle 标题 + // style 小标题样式 + + private getSubTitle(subTitle: string, style?: Partial): void { + if (!!subTitle) { + this.worksheet?.spliceRows(2, 0, [subTitle]); + this.worksheet?.mergeCells(2, 1, 2, this.header.length); + // 调整标题样式 + const subtitleRow = this.worksheet!.getRow(2); + // 高度 + subtitleRow.height = style?.height || 20; + // 字体设置 + subtitleRow.font = style?.font || { + size: 14, + } + // 背景色 + subtitleRow.fill = style?.fill || { + bgColor: { + 'argb': 'FFFFFF00' + }, + type: 'pattern', + pattern: 'none' + } + // 对齐方式 + subtitleRow.alignment = style?.alignment || { + horizontal: "right", + vertical: "middle" + }; + } + } + + // 设置表头样式 + // num 表头在第几行 + // data 总数据 + // style 表头样式 + + private setHeaderStyle(num: number, data: any, style?: Partial): void { + if(undefined===style) + return + // 自动筛选器 + this.worksheet!.autoFilter = { + from: { + row: num, + column: 1 + }, + to: { + row: data.length, + column: this.header.length + } + } + // 给表头添加背景色 + let headerRow = this.worksheet!.getRow(num); + headerRow!.height = style?.height || 30; + // 通过 cell 设置背景色,更精准 + headerRow?.eachCell((cell) => { + cell.fill = style?.fill || { + type: 'pattern', + pattern: 'solid', + fgColor: { argb: 'dde0e7' }, + } + cell.font = style?.font || { + size: 12 + } + }) + } + + // 其他内容处理 + // password 密码 + // mergeList 合并行列数组 + // headerRowId 表头行序号 + + private handleDealExcel(password: string, mergeList: mergeListType[], headerRowId: number) { + // 添加工作表保护 + if (!!password) { + this.worksheet?.protect(password, { + autoFilter: true, + selectLockedCells: false, + }); + } + // 合并单元格 + mergeList.forEach(item => { + // 行数为表格数据所在行行数+表头行序号headerRowId + const startRow = item.startRow + headerRowId; + const endRow = item.endRow + headerRowId; + this.worksheet?.mergeCells(startRow, item.startColumn, endRow, item.endColumn); + }) + // 冻结前几行 + this.worksheet!.views = [ + { state: 'frozen', xSplit: 0, ySplit: headerRowId } + ]; + } +} \ No newline at end of file diff --git a/abacus-static-framework/src/framework/utils/index.ts b/abacus-static-framework/src/framework/utils/index.ts new file mode 100644 index 0000000..33b5c69 --- /dev/null +++ b/abacus-static-framework/src/framework/utils/index.ts @@ -0,0 +1,57 @@ +/** +* 获取本地图 +* @param name // 文件名 如 doc.png +* @returns {*|string} +*/ +export function getAssetsImages(name: string, path: string = '') { + return new URL(`/src/assets/img${path}/${name}`, import.meta.url).href; +} + +/** + * 是否外部路径 + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path: string) { + const isExternal = /^(https?:|http?:|mailto:|tel:)/.test(path); + return isExternal; +} + +/** + * + * @param value + * @param data + * @returns + */ +export function formatLabel(value: string | number, data: Array