diff --git a/.claude/commands/oki/extract.md b/.claude/commands/oki/extract.md new file mode 100644 index 0000000..63fb55f --- /dev/null +++ b/.claude/commands/oki/extract.md @@ -0,0 +1,62 @@ +--- +name: "OKI: Extract" +description: 基于资料,进行思考、总结、提炼,生成知识点,搭建知识链接 +category: Knowledge +tags: [knowledge, wiki] +--- + +基于给予资料,或现有资料,进行思考、总结、提炼,生成知识点,搭建知识链接 + +## 指令参数 + +- 可指定为资料地址,**基于资料**提炼,例如:`/oki:extract references/paper.pdf`、`/oki:summary https://www.example.com/article.html` +- 也可以为知识点,**基于目标**从现有资料中提炼,例如:`/oki:extract 胶原蛋白` + +若未指定,则尝试从对话上下文自动推断;若表述模糊或存在歧义,必须提示列出可用变更项 + +## 知识库结构 + +```bash +openwiki +├── nodes/ # 知识点 - 从「资料记录」提取到的,描述某知识点的页面 +├── public/ # 静态资源 +├── scripts/ # 执行脚本 +├── sources/ # 资料记录 - 对单篇「原始资料」的总结、记录 +├── templates/ # 页面模板 +├── config.yaml # 配置文件 +├── index.md # 主页 - 知识库内容索引页 +├── log.md # 变更日志页 - 知识库改动的记录 +└── overview.md # 总览页 - 对知识库的总结 +``` + +## 知识点页面规范 + +- 根据模板(`templates/node.md`)构建页面 +- 以中文为主,专有名词、约定俗称可用英文 +- 正文内容按描述的对象,设多级标题分块表达 +- 「知识点」的正文内容,概览页的节点描述,都至少包含一个「知识链接」 +- 流程图使用 Mermaid +- `aliases`允许空格、特殊符号 +- `tags`大驼峰,不留空格,不用除,至少包含一个非数字字符 +- 链接使用 `[]()` ,而非`[[wiki-link]]` + +## 执行步骤 + +严格分步骤进行,不可跳步 + +1. **根据不同情况,准备相关的「资料记录」** + - 若基于资料,执行`/oki:summary`,为给定的原始资料创建或更新「资料记录」 + - 若基于目标,执行`/oki:query --source`,在知识库内部查找与目标相关的「资料记录」 + +2. **从「资料记录」中提取知识点,创建或更新「知识点」** + - 知识点可以是抽象的概念,如:现象、原理、分子、基因、解剖结构、物质、物种、方法、术语、说法等 + - 也可以是具体的实体,如:某人物、某公司、某产品、某项目、某课题、某案例等 + - **不要**基于现有任何「知识点」,仅通过「资料记录」 + +3. **搭建「知识链接」** + 从正文中寻找,与已有「知识点」相关的表述,创建链接,例如`[III型胶原蛋白](concepts/胶原蛋白.md)功能的核心结构基础,是由[三条α链](concepts/三螺旋结构.md)组成` + +4. **若有新页面,更新「总览页」** + +5. **页面格式化** + 执行`npx prettier --write entities/ concepts/ index.md overview.md log.md` diff --git a/.claude/commands/oki/lint.md b/.claude/commands/oki/lint.md new file mode 100644 index 0000000..2076845 --- /dev/null +++ b/.claude/commands/oki/lint.md @@ -0,0 +1,52 @@ +--- +name: "OKI: Lint" +description: 检查并修复知识库 +category: Knowledge +tags: [knowledge, wiki] +--- + +检查并修复知识库 + +## 指令参数 + +可指定范围(若不指定则全局),例如:`/oki:lint index.md`,`/oki:lint 资料记录`、`/oki:lint concepts` + +## 知识库结构 + +```bash +openwiki +├── nodes/ # 知识点 - 从「资料记录」提取到的,描述某知识点的页面 +├── public/ # 静态资源 +├── scripts/ # 执行脚本 +├── sources/ # 资料记录 - 对单篇「原始资料」的总结、记录 +├── templates/ # 页面模板 +├── config.yaml # 配置文件 +├── index.md # 主页 - 知识库内容索引页 +├── log.md # 变更日志页 - 知识库改动的记录 +└── overview.md # 总览页 - 对知识库的总结 +``` + +## 执行步骤 + +1. **检查页面规范** + 逐个读取所有「资料记录」、「知识点」内容,是否符合页面规范,并修复 + - 是否根据对应模板(存于`templates/`)构建页面? + - 是否以中文为主,英文为辅? + - 是否正文内容设多级标题分块表达? + - 是否「知识点」的正文内容,「总览页」的节点描述,都至少包含一个与其他页面的链接? + - 是否「资料记录」的正文内容,没有任何链接能到其他页面? + - 是否「资料记录」的文件名为`{类型/来源}_{正文标题}`,且不留空格,不用特殊符号? + - 是否`tags`仅包含分类标签,而没其他标签? + - 是否使用 Mermaid 绘制流程图? + - 是否使用规范的`tags`(大驼峰,不留空格,不用除,至少包含一个非数字字符)? + - 是否使用 `[]()` ,而不是`[[wiki-link]]` + +2. **合并重复的页面** + - 「资料记录」的`source`一致,才视为重复 + - 「知识点」描述主体相似,可视为重复 + - 需用户确认,才可执行 + +3. **检查链接和文件名** + 执行`node scripts/check-md.js sources/ nodes/ index.md overview.md log.md`,并修复 +4. **页面格式化** + 执行`npx prettier --write sources/ nodes/ index.md overview.md log.md` diff --git a/.claude/commands/oki/publish.md b/.claude/commands/oki/publish.md new file mode 100644 index 0000000..f7cc7ca --- /dev/null +++ b/.claude/commands/oki/publish.md @@ -0,0 +1,22 @@ +--- +name: "OKI: Publish" +description: 本地知识库查看、发布 +category: Knowledge +tags: [knowledge, wiki, publish] +--- + +本地知识库查看、发布 + +## 指令参数 + +- `--preview`、`-p`变为预览(默认发布) + +## 发布步骤 + +1. 执行`cd openwiki && pnpm build` +2. 若报错,修复错误 +3. 执行`bash scripts/deploy.sh` + +## 预览步骤 + +1. 执行`cd openwiki && pnpm dev` diff --git a/.claude/commands/oki/query.md b/.claude/commands/oki/query.md new file mode 100644 index 0000000..43d1d15 --- /dev/null +++ b/.claude/commands/oki/query.md @@ -0,0 +1,105 @@ +--- +name: "OKI: Query" +description: 查询有关的知识点,找到直接依据,返回对应「资料记录」 +category: Knowledge +tags: [knowledge, wiki] +--- + +查询有关的知识点,找到直接依据,返回对应「资料记录」 + +## 知识库结构 + +```bash +openwiki +├── nodes/ # 知识点 - 从「资料记录」提取到的,描述某知识点的页面 +├── public/ # 静态资源 +├── scripts/ # 执行脚本 +├── sources/ # 资料记录 - 对单篇「原始资料」的总结、记录 +├── templates/ # 页面模板 +├── config.yaml # 配置文件 +├── index.md # 主页 - 知识库内容索引页 +├── log.md # 变更日志页 - 知识库改动的记录 +└── overview.md # 总览页 - 对知识库的总结 +``` + +## 输入 + +- `[entry]`,查询目标可指定为知识点,例如:`/oki:query 胶原蛋白`,也可以为自然语言,如:`/oki:query 什么是胶原蛋白?`、`/oki:query 它是什么构成的?` +- `--from`、`-f`,则改为知识库外查询,其后填入查询来源,如:`/oki:query 胶原蛋白 --from 维基百科`,`/oki:query 胶原蛋白 --f https://pubmed.ncbi.nlm.nih.gov/` + +若未指定任何参数,则尝试从对话上下文自动推断;若表述模糊或存在歧义,必须提示列出可用变更项。 + +## 输出 + +按以下格式输出相关的「资料记录」(**不是「知识点」**) + +```markdown + + +## 相关资料 + +- [{资料记录}](../sources/{资料记录}.md):{和查询目标直接相关的原文节选} +- ... +``` + +## 知识库内查询步骤 + +逐层深入挖掘,查询直接证据 + +**从「知识点」中查询** +若有和查询目标直接关联的「知识点」,则从「知识点」中查询 + +1. 返回它在`## 相关资料`中的「资料记录」 +2. 在「资料记录」中找到和查询目标直接相关的原文节选 +3. 若查到,按格式输出报告 + +**从「资料记录」中查询** +若没直接关联的「知识点」,则从「资料记录」中查询 + +1. 找到可能相关的「资料记录」 +2. 读取「资料记录」内容,查询和目标直接相关的原文节选 +3. 若查到,按格式输出报告 +4. 若没找到,尝试**从「原始资料」中查询** + +**从「原始资料」中查询** +若「资料记录」内容中没有能作为直接依据的,推测可能其原始资料有,则从「原始资料」中查询 + +1. 执行`/oki:summary`重读「资料记录」`source`记录的原始资料 +2. 从「资料解析」中查询直接证据。若查到,更新「资料记录」,添加直接依据部分的内容 +3. 若查到,更新「资料记录」(添加直接依据部分的内容),按格式输出报告 +4. 若没查到,询问用户是否从外部查询 + +**重要** + +- **不要**查询除`nodes/`、`sources/`文件夹以外的页面 + +- **优先选择**强证据来源: + - 知识库中:「原始资料」 > 「资料记录」 > 「知识点」 + - 「资料记录」中:百科 > 论文 > 专利 > 会议 > 新闻 + +## 知识库外查询步骤 + +1. **从外部数据检索** + - 从`--from`、`-f`后的获取意图,寻找合适的外部数据库: + - 论文 `https://link.springer.com/search?query={查询内容}&content-type=Review` + - 论文 `https://pubmed.ncbi.nlm.nih.gov/?term={查询内容}&filter=pubt.review` + - 全百科 `https://en.wikipedia.org/w/index.php?search={查询内容}` + - 医学百科 `https://www.a-hospital.com/index.php?search={查询内容}` + - 专利 `https://patents.google.com/?q=({查询内容})` + - 若`--from`、`-f`后为空,则根据查询目标的类型来判断: + - 若为科学术语、专业名词,则从百科中查询 + - 若为医学概念,则从医学百科中查询 + - 若为编号`ZLxxxxx`、`CNxxxxx`,则可能为专利号 + - 若为研究相关,则从论文中查询 + + - 网站资料**优先选择**强证据来源: + - 百科 > 论文 > 专利 > 新闻 > ~~其他~~ + +2. **从参考资料中检索** + 若检索不到直接依据,尝试从网站页面提供的参考资料中寻找,**直到找到为止** + +3. **创建并返回「资料记录」** + 1. 若找到直接依据(可多篇),通过`/oki:summary`创建「资料记录」 + 2. 按格式输出报告 + +4. 若没查到,询问用户其他外部数据库。 diff --git a/.claude/commands/oki/summary.md b/.claude/commands/oki/summary.md new file mode 100644 index 0000000..4835e44 --- /dev/null +++ b/.claude/commands/oki/summary.md @@ -0,0 +1,72 @@ +--- +name: "OKI: Summary" +description: 读取原始资料,记录总结,返回对应「资料记录」 +category: Knowledge +tags: [knowledge, wiki] +--- + +读取原始资料,记录总结,返回对应「资料记录」 + +## 知识库结构 + +```bash +openwiki +├── nodes/ # 知识点 - 从「资料记录」提取到的,描述某知识点的页面 +├── public/ # 静态资源 +├── scripts/ # 执行脚本 +├── sources/ # 资料记录 - 对单篇「原始资料」的总结、记录 +├── templates/ # 页面模板 +├── config.yaml # 配置文件 +├── index.md # 主页 - 知识库内容索引页 +├── log.md # 变更日志页 - 知识库改动的记录 +└── overview.md # 总览页 - 对知识库的总结 +``` + +## 「资料记录」页面规范 + +- 根据模板(`templates/source.md`)构建页面 +- 以中文为主,专有名词、约定俗称可用英文 +- 正文内容按描述的对象,设多级标题分块表达 +- 文件名为`{类型/来源}_{正文标题}`,但不留空格,不用特殊符号 +- `tags`大驼峰,不留空格,不用特殊符号,至少包含一个非数字字符 +- 若原始资料存于本仓库,`source`使用相对仓库根目录的路径 +- 链接使用 `[]()` ,而非`[[wiki-link]]` + +**不要** + +- 正文中**不要**存在和「知识点」的链接 +- `tags`**不要**除分类标签以外的标签类型,如不要`- 胶原蛋白` + +## 输入 + +- `[entry]`,可指定为本地文件或者网址,可批量(用空格区分),如:`/oki:summary references/paper-1.pdf paper-2.pdf`、`/oki:summary https://www.example.com/article.html` + +若未指定任何参数,则尝试从对话上下文自动推断;若表述模糊或存在歧义,必须提示列出可用变更项。 + +## 输出 + +## 输出 + +按以下格式输出相关的「资料记录」 + +```markdown + + +## 资料记录 + +- [{资料记录}](../sources/{资料记录}.md):{摘要} +- ... +``` + +## 执行步骤 + +1. **把「原始资料」解析为「资料缓存」** + - 若是PDF,执行`opendataloader-pdf file1.pdf file2.pdf -f markdown -o ~/.cache/oki-summary` + - 若是网页,执行`npx defuddle parse [url] --markdown -o ~/.cache/oki-summary/[cache-name].md` + - 若是其他格式,则尝试自行选择方式转化为 markdown 并存于`~/.cache/oki-summary` + +2. **创建或更新「资料记录」** + 1. 执行`grep -rh "^source:" openwiki/sources/ --include="*.md" | sed 's/^source: *//'`,以获取目前所有「资料记录」的原始资料地址,进行比对 + - 若存在,则更新与之对应「资料记录」 + - 若不存在,则新建对应「资料记录」 + 2. 执行`cd openwiki && npx prettier --write sources/ log.md` diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..515cc62 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,19 @@ +{ + "permissions": { + "allow": [ + "WebSearch", + "WebFetch", + "Read(~/.cache/**/*)", + "Edit(~/.cache/**/*)", + "Bash", + "Bash(curl *)", + "Bash(wget *)", + "Bash(ls *)", + "Bash(cd *)", + "Bash(mkdir *)", + "Bash(* --version)", + "Bash(* --help *)", + "mcp__MiniMax__web_search" + ] + } +} diff --git a/.claude/skills/oflow/SKILL.md b/.claude/skills/oflow/SKILL.md index 038f1f6..118748c 100644 --- a/.claude/skills/oflow/SKILL.md +++ b/.claude/skills/oflow/SKILL.md @@ -51,6 +51,16 @@ description: 用 git 记录创作过程和团队协作的指令集,适用于 - 表中 git 相关的指令在正式执行前,汇总信息给用户,确认后再执行。 - 如果 git 遇到 Authentication failed,尝试再次执行,如果依然不行,报告用户 +### 获取仓库 + +触发词:`获取仓库`,`克隆仓库`,`下载仓库` + +执行步骤: + +1. 执行 `git clone [repo-url]` +2. 若项目`.lfsconfig`中发现`fetchexclude = *`,询问是否下载 LFS 文件 + - 若需要,执行`git lfs pull --exclude= --include [folder]`来下载指定文件夹,或执行`git lfs pull --exclude= --include *`来下载所有文件 + ### 创建个人分支 触发词:`创建时间线`,`创建个人分支` @@ -70,6 +80,7 @@ description: 用 git 记录创作过程和团队协作的指令集,适用于 1. 执行 `git pull origin main` 2. 如果遇到合并冲突,询问式地帮用户处理冲突 +3. 冲突解决提交后,若之前涉及大文件冲突,执行`git lfs pull --exclude= --include [folder]`来下载解决冲突后缺失的 LFS 文件 ### 提交 @@ -86,7 +97,6 @@ description: 用 git 记录创作过程和团队协作的指令集,适用于 执行步骤: -1. 执行 `git pull origin main` -2. 如果遇到合并冲突,询问式地帮用户处理冲突 -3. 执行 `git push` -4. 展示 PR 链接,并提供标题和内容建议,用户可复制内容到远程仓库页面 +1. 执行「更新」指令 +2. 执行 `git push` +3. 分别提供: PR 页面网址供用户访问,并提供标题、内容,可供用户复制到 PR 页面 diff --git a/.gitattributes b/.gitattributes index f0af54b..f471a1f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -83,8 +83,6 @@ # Executable/Installer *.apk lfs *.exe lfs -*.msi lfs -*.dmg lfs # Documents *.pdf lfs @@ -101,12 +99,12 @@ *.aep lfs *.prproj lfs *.spp lfs -*.abr lfs # Zbrush *.zbr lfs *.zpr lfs *.ztl lfs +*.c4d lfs # Autodesk *.max lfs @@ -115,8 +113,9 @@ *.3dm lfs *.3ds lfs -# Other DCC +# Blender *.blend lfs +*.blend1 lfs *.c4d lfs # Imaging @@ -128,4 +127,5 @@ *.mrc lfs # Others +*.abr lfs *.tpl lfs \ No newline at end of file diff --git a/.gitignore b/.gitignore index 63ef4f9..43336c0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,7 @@ -# thumbs.db -# Windows database files that cache folder -# thumbnails (images, videos, documents) for faster viewing in File Explorer -[Tt]humbs.db - # Tempary files temp sandbox.* +notes/ # Environments .env @@ -26,20 +22,26 @@ secrets/ SECRETS/ secrets.bak/ -# Claude +# Claude Code +.claude/settings.local.json .claudian -.obsidian/plugins/claudian/data.json -# Obsidian setting +# Obsidian .obsidian/* !.obsidian/snippets !.obsidian/app.json -!.obsidian/plugins/ +*.canvas + +# Keep odox for extract to openwiki +!.obsidian/plugins +.obsidian/plugins/* +!.obsidian/plugins/odox # Blender *.blend1 blender_assets.cats.txt~ +blendcache_* # Byte-compiled / optimized / DLL files __pycache__/ diff --git a/.obsidian/plugins/odox/data.json b/.obsidian/plugins/odox/data.json new file mode 100644 index 0000000..1876bc3 --- /dev/null +++ b/.obsidian/plugins/odox/data.json @@ -0,0 +1,8 @@ +{ + "docsPath": "openwiki/docs", + "assetsPath": "openwiki/public", + "nestInFolder": false, + "preserveFolderStructure": true, + "transparentCanvas": true, + "canvasEmbedTemplate": "" +} \ No newline at end of file diff --git a/.obsidian/plugins/odox/main.js b/.obsidian/plugins/odox/main.js new file mode 100644 index 0000000..f73e1d2 --- /dev/null +++ b/.obsidian/plugins/odox/main.js @@ -0,0 +1,6 @@ +/* +THIS IS A GENERATED/BUNDLED FILE BY ESBUILD +if you want to view the source, please visit the github repository of this plugin +*/ + +var B=Object.defineProperty;var et=Object.getOwnPropertyDescriptor;var st=Object.getOwnPropertyNames;var at=Object.prototype.hasOwnProperty;var nt=(f,t)=>{for(var e in t)B(f,e,{get:t[e],enumerable:!0})},it=(f,t,e,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of st(t))!at.call(f,s)&&s!==e&&B(f,s,{get:()=>t[s],enumerable:!(a=et(t,s))||a.enumerable});return f};var ot=f=>it(B({},"__esModule",{value:!0}),f);var rt={};nt(rt,{default:()=>E});module.exports=ot(rt);var g=require("obsidian");var x=require("obsidian"),V={docsPath:"docs",assetsPath:"docs/public",nestInFolder:!1,preserveFolderStructure:!1,transparentCanvas:!0,canvasEmbedTemplate:"![]({url})"},T=class extends x.PluginSettingTab{constructor(t,e){super(t,e),this.plugin=e}display(){let{containerEl:t}=this;t.empty(),new x.Setting(t).setName("Docs path").setDesc("Path to the docs directory (relative to vault root)").addText(e=>e.setPlaceholder("docs").setValue(this.plugin.settings.docsPath).onChange(async a=>{this.plugin.settings.docsPath=a,await this.plugin.saveSettings()})),new x.Setting(t).setName("Assets path").setDesc("Path to the assets directory (relative to vault root)").addText(e=>e.setPlaceholder("docs/public").setValue(this.plugin.settings.assetsPath).onChange(async a=>{this.plugin.settings.assetsPath=a,await this.plugin.saveSettings()})),new x.Setting(t).setName("Nest in folder").setDesc("Create a folder for each note (e.g., notes/some-note.md > docs/some-note/index.md)").addToggle(e=>e.setValue(this.plugin.settings.nestInFolder).onChange(async a=>{this.plugin.settings.nestInFolder=a,await this.plugin.saveSettings()})),new x.Setting(t).setName("Preserve folder structure").setDesc("Keep original folder structure (e.g., notes/some-note.md > docs/notes/some-note.md)").addToggle(e=>e.setValue(this.plugin.settings.preserveFolderStructure).onChange(async a=>{this.plugin.settings.preserveFolderStructure=a,await this.plugin.saveSettings()})),new x.Setting(t).setName("Transparent canvas background").setDesc("Export canvas with transparent background (hide dots pattern)").addToggle(e=>e.setValue(this.plugin.settings.transparentCanvas).onChange(async a=>{this.plugin.settings.transparentCanvas=a,await this.plugin.saveSettings()})),new x.Setting(t).setName("Canvas embed template").setDesc('Template for embedding canvas images. Use {url} as placeholder for the image path. Examples: ![]({url}) or ').addText(e=>e.setPlaceholder("![]({url})").setValue(this.plugin.settings.canvasEmbedTemplate).onChange(async a=>{this.plugin.settings.canvasEmbedTemplate=a,await this.plugin.saveSettings()}))}};var E=class extends g.Plugin{async onload(){await this.loadSettings(),this.addCommand({id:"export-to-docs",name:"Export current note to docs",callback:()=>{this.exportCurrentNote()}}),this.registerEvent(this.app.workspace.on("file-menu",(t,e)=>{(e.extension==="md"||e.extension==="canvas")&&t.addItem(a=>{a.setTitle("Export to docs").setIcon("upload").onClick(()=>{this.exportNote(e)})})})),this.addSettingTab(new T(this.app,this)),console.warn("Odox plugin loaded")}onunload(){console.warn("Odox plugin unloaded")}async loadSettings(){this.settings=Object.assign({},V,await this.loadData())}async saveSettings(){await this.saveData(this.settings)}async exportCurrentNote(){let t=this.app.workspace.getActiveFile();if(!t){new g.Notice("No active file found");return}if(t.extension!=="md"&&t.extension!=="canvas"){new g.Notice("Current file is not a Markdown or canvas file");return}await this.exportNote(t)}async exportNote(t){if(t.extension==="canvas"){await this.exportCanvasFile(t);return}if(t.path.startsWith(this.settings.docsPath)){new g.Notice(`File is already in docs: ${t.path}`);return}let{vault:e}=this.app,a=await e.readBinary(t),s=new TextDecoder().decode(a),d=await this.processAssets(s,t),o,l=t.name.replace(".md",""),r=t.path.replace(".md","");this.settings.preserveFolderStructure&&this.settings.nestInFolder?o=`${this.settings.docsPath}/${r}/index.md`:this.settings.preserveFolderStructure?o=`${this.settings.docsPath}/${t.path}`:this.settings.nestInFolder?o=`${this.settings.docsPath}/${l}/index.md`:o=`${this.settings.docsPath}/${t.name}`;let i=o.substring(0,o.lastIndexOf("/"));await e.adapter.mkdir(i);let n=new TextEncoder().encode(d);await e.adapter.writeBinary(o,n.buffer),console.warn(`Exported ${t.name} to ${o}`)}async exportCanvasFile(t){if(t.path.startsWith(this.settings.docsPath)){new g.Notice(`File is already in docs: ${t.path}`);return}let{vault:e}=this.app,a=await this.renderCanvas(t,t);if(!a){new g.Notice(`Failed to render canvas: ${t.name}`);return}let s=t.name+".png",d=`${this.settings.assetsPath}/${s}`;await e.adapter.mkdir(this.settings.assetsPath),await e.adapter.writeBinary(d,a.buffer);let o=t.name.replace(".canvas",""),l=t.path.replace(".canvas",""),r;this.settings.preserveFolderStructure&&this.settings.nestInFolder?r=`${this.settings.docsPath}/${l}.canvas/index.md`:this.settings.preserveFolderStructure?r=`${this.settings.docsPath}/${l}.canvas.md`:this.settings.nestInFolder?r=`${this.settings.docsPath}/${o}.canvas/index.md`:r=`${this.settings.docsPath}/${o}.canvas.md`;let i=r.substring(0,r.lastIndexOf("/"));await e.adapter.mkdir(i);let n=this.settings.canvasEmbedTemplate.replace("{url}",`/${s}`),c=new TextEncoder().encode(n);await e.adapter.writeBinary(r,c.buffer),console.warn(`Exported ${t.name} to ${r}`),new g.Notice(`Exported ${t.name} to ${r}`)}async processAssets(t,e){let{vault:a,metadataCache:s}=this.app,d=s.getCache(e.path);if(!d)return t;let o=new Map,l=new Set;if(d.embeds)for(let i of d.embeds){let n=s.getFirstLinkpathDest(i.link,e.path);n&&(n.extension==="canvas"?l.add(n.path):o.set(n.path,i.link))}if(d.links)for(let i of d.links){let n=s.getFirstLinkpathDest(i.link,e.path);n&&n.extension!=="md"&&(o.has(n.path)||o.set(n.path,i.link))}let r=new Map;for(let i of l)try{let n=a.getAbstractFileByPath(i);if(n instanceof g.TFile){let c=await this.renderCanvas(n,e);if(c){let m=n.name+".png",h=`${this.settings.assetsPath}/${m}`;await a.adapter.mkdir(this.settings.assetsPath),await a.adapter.writeBinary(h,c.buffer),r.set(i,m)}}}catch(n){console.error(`Failed to render canvas ${i}:`,n)}t=this.updateCanvasInContent(t,r,e);for(let[i,n]of o)try{let c=a.getAbstractFileByPath(i);if(c instanceof g.TFile){let m=await a.readBinary(c),h=c.name,S=`${this.settings.assetsPath}/${h}`;await a.adapter.mkdir(this.settings.assetsPath),await a.adapter.writeBinary(S,m),t=this.updateLinksInContent(t,n,h)}}catch(c){console.error(`Failed to copy asset ${i}:`,c)}return t}updateLinksInContent(t,e,a){let s=`/${encodeURIComponent(a)}`,o=e.replace(/^.*\//,"").replace(/ /g,"%20"),l=o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),r=new RegExp(`!\\[([^\\]]*)\\]\\([^)]*${l}\\)`,"g"),i=t.replace(r,`![](${s})`);i!==t&&console.log(`[Odox] Replaced markdown image link: ${o} -> ${s}`);let n=new RegExp(`!\\[\\[([^)]*${l})(\\|[^\\]]*)?\\]\\]`,"g");return i=i.replace(n,`![](${s})`),i}async renderCanvas(t,e=null){var o,l,r;let a=this.app.workspace.getLeaf();await a.openFile(t);let s=a.view.canvas;if(!s)return null;let d=1;try{let i=window,n=(o=i.electron)==null?void 0:o.remote,c=n==null?void 0:n.getCurrentWebContents(),m=(c==null?void 0:c.getZoomLevel())||0,h=Math.pow(1.2,m),S=i.devicePixelRatio||1,y=Math.round(S/h*1e5)/1e5,z=Array.from(s.nodes.values()),u=this.calculateBBox(z),A=u.maxX-u.minX,D=u.maxY-u.minY,q=Math.min(2,16284/y/A,16284/y/D),P=Math.min(d,q),w=s.wrapperEl;this.deselectAll(),w.addClass("is-screenshotting"),this.settings.transparentCanvas&&w.addClass("canvas-transparent-export"),s.screenshotting=!0;let R=[];this.settings.transparentCanvas&&(Array.from(document.body.children).forEach(p=>{p!==w&&p instanceof HTMLElement&&(p.classList.add("odox-hidden"),R.push(p))}),document.body.classList.add("odox-capturing")),document.body.appendChild(w);try{let p=5/h;w.setCssStyles({top:`${p}px`,left:`${p}px`,bottom:`${p}px`,right:`${p}px`,width:"auto",height:"auto"});let C=w.getBoundingClientRect(),G=Math.ceil(C.x*h+1),j=Math.ceil(C.y*h+1),L=Math.floor(C.width*h)-2,N=Math.floor(C.height*h)-2;s.zoom=Math.log2(P/h),s.tZoom=s.zoom,s.viewportChanged=!0,s.requestFrame(),await new Promise(v=>setTimeout(v,500)),await new Promise(v=>requestAnimationFrame(v));let I=L/P,M=N/P,O=Math.ceil((u.maxX-u.minX)/I),U=Math.ceil((u.maxY-u.minY)/M),H=u.minX+I/2,_=u.minY+M/2,b=document.createElement("canvas");b.width=Math.ceil(A*P*y),b.height=Math.ceil(D*P*y);let X=b.getContext("2d");if(!X)throw new Error("Failed to get 2d context");let Z=0,ct=O*U;for(let v=0;vsetTimeout(F,100)),await new Promise(F=>requestAnimationFrame(F));let Q=(await c.capturePage({x:G,y:j,width:L,height:N})).toPNG(),J=new Blob([Q],{type:"image/png"}),W=URL.createObjectURL(J),k=document.createElement("img");await new Promise((F,tt)=>{k.onload=()=>F(),k.onerror=tt,k.src=W}),X.drawImage(k,$*L*y,v*N*y),URL.revokeObjectURL(W),Z++}let Y=await new Promise(v=>b.toBlob(v,"image/png"));if(!Y)throw new Error("Failed to create PNG blob");let K=await Y.arrayBuffer();return new Uint8Array(K)}finally{this.settings.transparentCanvas&&(document.body.classList.remove("odox-capturing"),R.forEach(p=>{p.classList.remove("odox-hidden")})),(r=(l=this.app.workspace.getLeaf().view)==null?void 0:l.contentEl)==null||r.appendChild(w),w.removeClass("is-screenshotting"),w.removeClass("canvas-transparent-export"),w.setCssStyles({top:"",left:"",bottom:"",right:"",width:"",height:""}),s.screenshotting=!1,await new Promise(p=>requestAnimationFrame(p)),s.zoomToFitQueued=!0,s.onResize(),e&&await a.openFile(e)}}catch(i){return console.error("Canvas render failed:",i),null}}calculateBBox(t){let e=1/0,a=1/0,s=-1/0,d=-1/0;for(let o of t){let l=o.x,r=o.y,i=o.width,n=o.height;e=Math.min(e,l),a=Math.min(a,r),s=Math.max(s,l+i),d=Math.max(d,r+n)}return{minX:e,minY:a,maxX:s,maxY:d}}deselectAll(){var e;let t=(e=this.app.workspace.getLeaf().view)==null?void 0:e.canvas;t&&t.deselectAll()}updateCanvasInContent(t,e,a){let{metadataCache:s}=this.app,d=r=>`/${r}`,o=/!\[([^\]]*)\]\(([^)]+)\)/g;t=t.replace(o,(r,i,n)=>{let c=s.getFirstLinkpathDest(n,a.path);if(c&&e.has(c.path)){let m=e.get(c.path);return this.settings.canvasEmbedTemplate.replace("{url}",d(m))}return r});let l=/!\[\[([^\]]+)\]\]/g;return t=t.replace(l,(r,i)=>{let n=i.split("|")[0].trim(),c=s.getFirstLinkpathDest(n,a.path);if(c&&e.has(c.path)){let m=e.get(c.path);return this.settings.canvasEmbedTemplate.replace("{url}",d(m))}return r}),t}}; diff --git a/.obsidian/plugins/odox/manifest.json b/.obsidian/plugins/odox/manifest.json new file mode 100644 index 0000000..4635f0f --- /dev/null +++ b/.obsidian/plugins/odox/manifest.json @@ -0,0 +1,10 @@ +{ + "id": "odox", + "name": "Odox", + "version": "0.1.0", + "minAppVersion": "0.15.0", + "description": "Export Obsidian notes to static docs tools with asset management", + "author": "nan", + "authorUrl": "https://github.com/icrdr", + "isDesktopOnly": false +} diff --git a/.obsidian/plugins/odox/styles.css b/.obsidian/plugins/odox/styles.css new file mode 100644 index 0000000..7996a77 --- /dev/null +++ b/.obsidian/plugins/odox/styles.css @@ -0,0 +1,30 @@ +/* + +This CSS file will be included with your plugin, and +available in the app when your plugin is enabled. + +If your plugin does not need CSS, delete this file. + +*/ + +/* 透明导出模式:隐藏洞洞板背景 */ +.canvas-transparent-export .canvas-background { + display: none !important; +} + +/* 透明导出模式:确保 canvas 容器背景透明 */ +.canvas-transparent-export { + background-color: transparent !important; + background-image: none !important; +} + +/* 截图时隐藏页面其他元素 */ +.odox-hidden { + display: none !important; +} + +/* 截图时的 body 样式 */ +.odox-capturing { + background-color: transparent !important; + background-image: none !important; +} diff --git a/OMOOSPACE.md b/OMOOSPACE.md index efaf6b5..05a6912 100644 --- a/OMOOSPACE.md +++ b/OMOOSPACE.md @@ -1,3 +1,3 @@ --- -brief: An omoolab project +description: An omoolab project --- \ No newline at end of file diff --git a/openwiki/config.mts b/openwiki/config.mts new file mode 100644 index 0000000..9bfe12a --- /dev/null +++ b/openwiki/config.mts @@ -0,0 +1,158 @@ +import { defineConfig } from "vitepress"; +import { vitepressBeautifulMermaid } from "v-beautiful-mermaid"; +import { readdirSync, statSync, readFileSync } from "fs"; +import { join } from "path"; +import { load } from "js-yaml"; + +const siteConfig = load( + readFileSync(join(__dirname, "../config.yaml"), "utf8"), +) as { + title?: string; + description?: string; + logo?: string; + siteTitle?: false; + appearance?: false; + nav?: { text: string; link: string }[]; + footer?: { message: string; copyright: string }; +}; + +interface SidebarItem { + text: string; + link?: string; + items?: SidebarItem[]; +} + +function isDirectory(path: string): boolean { + try { + return statSync(path).isDirectory(); + } catch { + return false; + } +} + +function buildSidebarTree(root: string, basePath: string = ""): SidebarItem[] { + const items: SidebarItem[] = []; + const entries = readdirSync(root); + + // Separate files and directories + const files: string[] = []; + const dirs: string[] = []; + + for (const entry of entries) { + if (entry === "index.md") continue; + const fullPath = join(root, entry); + if (isDirectory(fullPath)) { + dirs.push(entry); + } else if (entry.endsWith(".md")) { + files.push(entry); + } + } + + // Add files first + for (const f of files.sort()) { + const name = f.replace(/\.md$/, ""); + const linkPath = `/${root}/${name}`; + items.push({ + text: name, + link: linkPath, + }); + } + + // Add directories as submenus + for (const d of dirs.sort()) { + const subRoot = join(root, d); + const subBasePath = basePath ? `${basePath}/${d}` : d; + const subItems = buildSidebarTree(subRoot, subBasePath); + if (subItems.length > 0) { + items.push({ + text: d, + items: subItems, + }); + } + } + + return items; +} + +function buildSidebarItems(root: string): SidebarItem[] { + return buildSidebarTree(root); +} + +const sidebar = { + "/": [ + { + items: [ + { + text: "主页", + link: "/", + }, + { + text: "概览", + link: "/overview", + }, + { + text: "变更日志", + link: "/log", + }, + ], + }, + { + items: [{}], + }, + ], + "/docs/": [ + { + text: "记录", + items: [{}], + }, + { + text: "工作空间", + items: [{}], + }, + ], + "/sources/": [ + { + items: [{}], + }, + ], +}; + +sidebar["/docs/"][0].items = buildSidebarItems("docs/notes"); +sidebar["/docs/"][1].items = buildSidebarItems("docs/subspaces"); +sidebar["/sources/"][0].items = buildSidebarItems("sources"); +sidebar["/"][1].items = buildSidebarItems("nodes"); + +// https://vitepress.dev/reference/site-config +export default defineConfig({ + title: siteConfig.title, + description: siteConfig.description, + lang: "zh-CN", + base: "/", // Replace with your repository name if deploying to GitHub Pages + srcDir: ".", + ignoreDeadLinks: true, + appearance: siteConfig.appearance, + themeConfig: { + logo: siteConfig.logo, + siteTitle: siteConfig.siteTitle, + nav: [ + { text: "知识库", link: "/overview" }, + { text: "资料库", link: "/sources/" }, + { text: "文档", link: "/docs/" }, + ], + sidebar, + footer: siteConfig.footer, + search: { + provider: "local", + }, + }, + markdown: { + config: (md) => { + md.use(vitepressBeautifulMermaid, { + colorMode: "auto", + renderOptions: { + font: "LXGW WenKai Mono", + }, + }); + }, + }, +}); diff --git a/openwiki/package.json b/openwiki/package.json new file mode 100644 index 0000000..ad2cec3 --- /dev/null +++ b/openwiki/package.json @@ -0,0 +1,15 @@ +{ + "devDependencies": { + "@types/js-yaml": "^4.0.9", + "@types/node": "^25.6.0", + "js-yaml": "^4.1.1", + "v-beautiful-mermaid": "^0.0.3", + "vitepress": "2.0.0-alpha.17" + }, + "scripts": { + "preinstall": "npx only-allow pnpm", + "dev": "vitepress dev", + "build": "vitepress build", + "preview": "vitepress preview" + } +} diff --git a/openwiki/pnpm-lock.yaml b/openwiki/pnpm-lock.yaml new file mode 100644 index 0000000..33155c3 --- /dev/null +++ b/openwiki/pnpm-lock.yaml @@ -0,0 +1,1967 @@ +lockfileVersion: "9.0" + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + .: + devDependencies: + "@types/js-yaml": + specifier: ^4.0.9 + version: 4.0.9 + "@types/node": + specifier: ^25.6.0 + version: 25.6.0 + js-yaml: + specifier: ^4.1.1 + version: 4.1.1 + v-beautiful-mermaid: + specifier: ^0.0.3 + version: 0.0.3(vitepress@2.0.0-alpha.17(@types/node@25.6.0)(postcss@8.5.10))(vue@3.5.33) + vitepress: + specifier: 2.0.0-alpha.17 + version: 2.0.0-alpha.17(@types/node@25.6.0)(postcss@8.5.10) + +packages: + "@babel/helper-string-parser@7.27.1": + resolution: + { + integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==, + } + engines: { node: ">=6.9.0" } + + "@babel/helper-validator-identifier@7.28.5": + resolution: + { + integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==, + } + engines: { node: ">=6.9.0" } + + "@babel/parser@7.29.2": + resolution: + { + integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==, + } + engines: { node: ">=6.0.0" } + hasBin: true + + "@babel/types@7.29.0": + resolution: + { + integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==, + } + engines: { node: ">=6.9.0" } + + "@docsearch/css@4.6.2": + resolution: + { + integrity: sha512-fH/cn8BjEEdM2nJdjNMHIvOVYupG6AIDtFVDgIZrNzdCSj4KXr9kd+hsehqsNGYjpUjObeKYKvgy/IwCb1jZYQ==, + } + + "@docsearch/js@4.6.2": + resolution: + { + integrity: sha512-qj1yoxl3y4GKoK7+VM6fq/rQqPnvUmg3IKzJ9x0VzN14QVzdB/SG/J6VfV1BWT5RcPUFxIcVwoY1fwHM2fSRRw==, + } + + "@docsearch/sidepanel-js@4.6.2": + resolution: + { + integrity: sha512-Pni85AP/GwRj7fFg8cBJp0U04tzbueBvWSd3gysgnOsVnQVSZwSYncfErUScLE1CAtR+qocPDFjmYR9AMRNJtQ==, + } + + "@esbuild/aix-ppc64@0.27.7": + resolution: + { + integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [aix] + + "@esbuild/android-arm64@0.27.7": + resolution: + { + integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [android] + + "@esbuild/android-arm@0.27.7": + resolution: + { + integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [android] + + "@esbuild/android-x64@0.27.7": + resolution: + { + integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [android] + + "@esbuild/darwin-arm64@0.27.7": + resolution: + { + integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [darwin] + + "@esbuild/darwin-x64@0.27.7": + resolution: + { + integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [darwin] + + "@esbuild/freebsd-arm64@0.27.7": + resolution: + { + integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [freebsd] + + "@esbuild/freebsd-x64@0.27.7": + resolution: + { + integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [freebsd] + + "@esbuild/linux-arm64@0.27.7": + resolution: + { + integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [linux] + + "@esbuild/linux-arm@0.27.7": + resolution: + { + integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==, + } + engines: { node: ">=18" } + cpu: [arm] + os: [linux] + + "@esbuild/linux-ia32@0.27.7": + resolution: + { + integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [linux] + + "@esbuild/linux-loong64@0.27.7": + resolution: + { + integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==, + } + engines: { node: ">=18" } + cpu: [loong64] + os: [linux] + + "@esbuild/linux-mips64el@0.27.7": + resolution: + { + integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==, + } + engines: { node: ">=18" } + cpu: [mips64el] + os: [linux] + + "@esbuild/linux-ppc64@0.27.7": + resolution: + { + integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==, + } + engines: { node: ">=18" } + cpu: [ppc64] + os: [linux] + + "@esbuild/linux-riscv64@0.27.7": + resolution: + { + integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==, + } + engines: { node: ">=18" } + cpu: [riscv64] + os: [linux] + + "@esbuild/linux-s390x@0.27.7": + resolution: + { + integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==, + } + engines: { node: ">=18" } + cpu: [s390x] + os: [linux] + + "@esbuild/linux-x64@0.27.7": + resolution: + { + integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [linux] + + "@esbuild/netbsd-arm64@0.27.7": + resolution: + { + integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [netbsd] + + "@esbuild/netbsd-x64@0.27.7": + resolution: + { + integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [netbsd] + + "@esbuild/openbsd-arm64@0.27.7": + resolution: + { + integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openbsd] + + "@esbuild/openbsd-x64@0.27.7": + resolution: + { + integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [openbsd] + + "@esbuild/openharmony-arm64@0.27.7": + resolution: + { + integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [openharmony] + + "@esbuild/sunos-x64@0.27.7": + resolution: + { + integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [sunos] + + "@esbuild/win32-arm64@0.27.7": + resolution: + { + integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==, + } + engines: { node: ">=18" } + cpu: [arm64] + os: [win32] + + "@esbuild/win32-ia32@0.27.7": + resolution: + { + integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==, + } + engines: { node: ">=18" } + cpu: [ia32] + os: [win32] + + "@esbuild/win32-x64@0.27.7": + resolution: + { + integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==, + } + engines: { node: ">=18" } + cpu: [x64] + os: [win32] + + "@iconify-json/simple-icons@1.2.79": + resolution: + { + integrity: sha512-aNyO7Fd1qej9oQfIyohYFRv0lhQLaZ+6UkK1c1qwax0MDPUOZOdq65MlU500kow97pD/W+b2u1And3e25eE24Q==, + } + + "@iconify/types@2.0.0": + resolution: + { + integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==, + } + + "@iconify/vue@5.0.1": + resolution: + { + integrity: sha512-aumwwooJlFJ5H5qYWB6ZTAyM0C8hpfcSVLB9/a3qnH1GGvIJ+FEbpEs4s/HfErYe/M5qZeLjwmESR5fFm3lXEw==, + } + peerDependencies: + vue: ">=3.0.0" + + "@jridgewell/sourcemap-codec@1.5.5": + resolution: + { + integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==, + } + + "@rolldown/pluginutils@1.0.0-rc.13": + resolution: + { + integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==, + } + + "@rollup/rollup-android-arm-eabi@4.60.2": + resolution: + { + integrity: sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==, + } + cpu: [arm] + os: [android] + + "@rollup/rollup-android-arm64@4.60.2": + resolution: + { + integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==, + } + cpu: [arm64] + os: [android] + + "@rollup/rollup-darwin-arm64@4.60.2": + resolution: + { + integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==, + } + cpu: [arm64] + os: [darwin] + + "@rollup/rollup-darwin-x64@4.60.2": + resolution: + { + integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==, + } + cpu: [x64] + os: [darwin] + + "@rollup/rollup-freebsd-arm64@4.60.2": + resolution: + { + integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==, + } + cpu: [arm64] + os: [freebsd] + + "@rollup/rollup-freebsd-x64@4.60.2": + resolution: + { + integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==, + } + cpu: [x64] + os: [freebsd] + + "@rollup/rollup-linux-arm-gnueabihf@4.60.2": + resolution: + { + integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==, + } + cpu: [arm] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-arm-musleabihf@4.60.2": + resolution: + { + integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==, + } + cpu: [arm] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-arm64-gnu@4.60.2": + resolution: + { + integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==, + } + cpu: [arm64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-arm64-musl@4.60.2": + resolution: + { + integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==, + } + cpu: [arm64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-loong64-gnu@4.60.2": + resolution: + { + integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==, + } + cpu: [loong64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-loong64-musl@4.60.2": + resolution: + { + integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==, + } + cpu: [loong64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-ppc64-gnu@4.60.2": + resolution: + { + integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==, + } + cpu: [ppc64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-ppc64-musl@4.60.2": + resolution: + { + integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==, + } + cpu: [ppc64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-riscv64-gnu@4.60.2": + resolution: + { + integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==, + } + cpu: [riscv64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-riscv64-musl@4.60.2": + resolution: + { + integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==, + } + cpu: [riscv64] + os: [linux] + libc: [musl] + + "@rollup/rollup-linux-s390x-gnu@4.60.2": + resolution: + { + integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==, + } + cpu: [s390x] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-x64-gnu@4.60.2": + resolution: + { + integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==, + } + cpu: [x64] + os: [linux] + libc: [glibc] + + "@rollup/rollup-linux-x64-musl@4.60.2": + resolution: + { + integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==, + } + cpu: [x64] + os: [linux] + libc: [musl] + + "@rollup/rollup-openbsd-x64@4.60.2": + resolution: + { + integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==, + } + cpu: [x64] + os: [openbsd] + + "@rollup/rollup-openharmony-arm64@4.60.2": + resolution: + { + integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==, + } + cpu: [arm64] + os: [openharmony] + + "@rollup/rollup-win32-arm64-msvc@4.60.2": + resolution: + { + integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==, + } + cpu: [arm64] + os: [win32] + + "@rollup/rollup-win32-ia32-msvc@4.60.2": + resolution: + { + integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==, + } + cpu: [ia32] + os: [win32] + + "@rollup/rollup-win32-x64-gnu@4.60.2": + resolution: + { + integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==, + } + cpu: [x64] + os: [win32] + + "@rollup/rollup-win32-x64-msvc@4.60.2": + resolution: + { + integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==, + } + cpu: [x64] + os: [win32] + + "@shikijs/core@3.23.0": + resolution: + { + integrity: sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==, + } + + "@shikijs/engine-javascript@3.23.0": + resolution: + { + integrity: sha512-aHt9eiGFobmWR5uqJUViySI1bHMqrAgamWE1TYSUoftkAeCCAiGawPMwM+VCadylQtF4V3VNOZ5LmfItH5f3yA==, + } + + "@shikijs/engine-oniguruma@3.23.0": + resolution: + { + integrity: sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==, + } + + "@shikijs/langs@3.23.0": + resolution: + { + integrity: sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==, + } + + "@shikijs/themes@3.23.0": + resolution: + { + integrity: sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==, + } + + "@shikijs/transformers@3.23.0": + resolution: + { + integrity: sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==, + } + + "@shikijs/types@3.23.0": + resolution: + { + integrity: sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==, + } + + "@shikijs/vscode-textmate@10.0.2": + resolution: + { + integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==, + } + + "@types/estree@1.0.8": + resolution: + { + integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==, + } + + "@types/hast@3.0.4": + resolution: + { + integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==, + } + + "@types/js-yaml@4.0.9": + resolution: + { + integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==, + } + + "@types/linkify-it@5.0.0": + resolution: + { + integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==, + } + + "@types/markdown-it@14.1.2": + resolution: + { + integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==, + } + + "@types/mdast@4.0.4": + resolution: + { + integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==, + } + + "@types/mdurl@2.0.0": + resolution: + { + integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==, + } + + "@types/node@25.6.0": + resolution: + { + integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==, + } + + "@types/unist@3.0.3": + resolution: + { + integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==, + } + + "@types/web-bluetooth@0.0.21": + resolution: + { + integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==, + } + + "@ungap/structured-clone@1.3.0": + resolution: + { + integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==, + } + + "@vitejs/plugin-vue@6.0.6": + resolution: + { + integrity: sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + peerDependencies: + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + vue: ^3.2.25 + + "@vue/compiler-core@3.5.33": + resolution: + { + integrity: sha512-3PZLQwFw4Za3TC8t0FvTy3wI16Kt+pmwcgNZca4Pj9iWL2E72a/gZlpBtAJvEdDMdCxdG/qq0C7PN0bsJuv0Rw==, + } + + "@vue/compiler-dom@3.5.33": + resolution: + { + integrity: sha512-PXq0yrfCLzzL07rbXO4awtXY1Z06LG2eu6Adg3RJFa/j3Cii217XxxLXG22N330gw7GmALCY0Z8RgXEviwgpjA==, + } + + "@vue/compiler-sfc@3.5.33": + resolution: + { + integrity: sha512-UTUvRO9cY+rROrx/pvN9P5Z7FgA6QGfokUCfhQE4EnmUj3rVnK+CHI0LsEO1pg+I7//iRYMUfcNcCPe7tg0CoA==, + } + + "@vue/compiler-ssr@3.5.33": + resolution: + { + integrity: sha512-IErjYdnj1qIupG5xxiVIYiiRvDhGWV4zuh/RCrwfYpuL+HWQzeU6lCk/nF9r7olWMnjKxCAkOctT2qFWFkzb1A==, + } + + "@vue/devtools-api@8.1.1": + resolution: + { + integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==, + } + + "@vue/devtools-kit@8.1.1": + resolution: + { + integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==, + } + + "@vue/devtools-shared@8.1.1": + resolution: + { + integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==, + } + + "@vue/reactivity@3.5.33": + resolution: + { + integrity: sha512-p8UfIqyIhb0rYGlSgSBV+lPhF2iUSBcRy7enhTmPqKWadHy9kcOFYF1AejYBP9P+avnd3OBbD49DU4pLWX/94A==, + } + + "@vue/runtime-core@3.5.33": + resolution: + { + integrity: sha512-UpFF45RI9//a7rvq7RdOQblb4tup7hHG9QsmIrxkFQLzQ7R8/iNQ5LE15NhLZ1/WcHMU2b47u6P33CPUelHyIQ==, + } + + "@vue/runtime-dom@3.5.33": + resolution: + { + integrity: sha512-IOxMsAOwquhfITgmOgaPYl7/j8gKUxUFoflRc+u4LxyD3+783xne8vNta1PONVCvCV9A0w7hkyEepINDqfO0tw==, + } + + "@vue/server-renderer@3.5.33": + resolution: + { + integrity: sha512-0xylq/8/h44lVG0pZFknv1XIdEgymq2E9n59uTWJBG+dIgiT0TMCSsxrN7nO16Z0MU0MPjFcguBbZV8Itk52Hw==, + } + peerDependencies: + vue: 3.5.33 + + "@vue/shared@3.5.33": + resolution: + { + integrity: sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ==, + } + + "@vueuse/core@14.2.1": + resolution: + { + integrity: sha512-3vwDzV+GDUNpdegRY6kzpLm4Igptq+GA0QkJ3W61Iv27YWwW/ufSlOfgQIpN6FZRMG0mkaz4gglJRtq5SeJyIQ==, + } + peerDependencies: + vue: ^3.5.0 + + "@vueuse/integrations@14.2.1": + resolution: + { + integrity: sha512-2LIUpBi/67PoXJGqSDQUF0pgQWpNHh7beiA+KG2AbybcNm+pTGWT6oPGlBgUoDWmYwfeQqM/uzOHqcILpKL7nA==, + } + peerDependencies: + async-validator: ^4 + axios: ^1 + change-case: ^5 + drauu: ^0.4 + focus-trap: ^7 || ^8 + fuse.js: ^7 + idb-keyval: ^6 + jwt-decode: ^4 + nprogress: ^0.2 + qrcode: ^1.5 + sortablejs: ^1 + universal-cookie: ^7 || ^8 + vue: ^3.5.0 + peerDependenciesMeta: + async-validator: + optional: true + axios: + optional: true + change-case: + optional: true + drauu: + optional: true + focus-trap: + optional: true + fuse.js: + optional: true + idb-keyval: + optional: true + jwt-decode: + optional: true + nprogress: + optional: true + qrcode: + optional: true + sortablejs: + optional: true + universal-cookie: + optional: true + + "@vueuse/metadata@14.2.1": + resolution: + { + integrity: sha512-1ButlVtj5Sb/HDtIy1HFr1VqCP4G6Ypqt5MAo0lCgjokrk2mvQKsK2uuy0vqu/Ks+sHfuHo0B9Y9jn9xKdjZsw==, + } + + "@vueuse/shared@14.2.1": + resolution: + { + integrity: sha512-shTJncjV9JTI4oVNyF1FQonetYAiTBd+Qj7cY89SWbXSkx7gyhrgtEdF2ZAVWS1S3SHlaROO6F2IesJxQEkZBw==, + } + peerDependencies: + vue: ^3.5.0 + + argparse@2.0.1: + resolution: + { + integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, + } + + beautiful-mermaid@1.1.3: + resolution: + { + integrity: sha512-TItrtrAyHp1vwFfFVYauWGrquouk/6SS21Aq3RsxindSYZODcN4xYrPZD6BiZRU+o5mKJzDPz9MUSMvELdylyg==, + } + + birpc@2.9.0: + resolution: + { + integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==, + } + + ccount@2.0.1: + resolution: + { + integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==, + } + + character-entities-html4@2.1.0: + resolution: + { + integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==, + } + + character-entities-legacy@3.0.0: + resolution: + { + integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==, + } + + comma-separated-tokens@2.0.3: + resolution: + { + integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==, + } + + csstype@3.2.3: + resolution: + { + integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==, + } + + dequal@2.0.3: + resolution: + { + integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==, + } + engines: { node: ">=6" } + + devlop@1.1.0: + resolution: + { + integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==, + } + + elkjs@0.11.1: + resolution: + { + integrity: sha512-zxxR9k+rx5ktMwT/FwyLdPCrq7xN6e4VGGHH8hA01vVYKjTFik7nHOxBnAYtrgYUB1RpAiLvA1/U2YraWxyKKg==, + } + + entities@7.0.1: + resolution: + { + integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==, + } + engines: { node: ">=0.12" } + + esbuild@0.27.7: + resolution: + { + integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==, + } + engines: { node: ">=18" } + hasBin: true + + estree-walker@2.0.2: + resolution: + { + integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==, + } + + fdir@6.5.0: + resolution: + { + integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==, + } + engines: { node: ">=12.0.0" } + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + focus-trap@8.0.1: + resolution: + { + integrity: sha512-9ptSG6z51YQOstI/oN4XuVGP/03u2nh0g//qz7L6zX0i6PZiPnkcf3GenXq7N2hZnASXaMxTPpbKwdI+PFvxlw==, + } + + fsevents@2.3.3: + resolution: + { + integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==, + } + engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } + os: [darwin] + + hast-util-to-html@9.0.5: + resolution: + { + integrity: sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==, + } + + hast-util-whitespace@3.0.0: + resolution: + { + integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==, + } + + hookable@5.5.3: + resolution: + { + integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==, + } + + html-void-elements@3.0.0: + resolution: + { + integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==, + } + + js-yaml@4.1.1: + resolution: + { + integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==, + } + hasBin: true + + magic-string@0.30.21: + resolution: + { + integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==, + } + + mark.js@8.11.1: + resolution: + { + integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==, + } + + mdast-util-to-hast@13.2.1: + resolution: + { + integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==, + } + + micromark-util-character@2.1.1: + resolution: + { + integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==, + } + + micromark-util-encode@2.0.1: + resolution: + { + integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==, + } + + micromark-util-sanitize-uri@2.0.1: + resolution: + { + integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==, + } + + micromark-util-symbol@2.0.1: + resolution: + { + integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==, + } + + micromark-util-types@2.0.2: + resolution: + { + integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==, + } + + minisearch@7.2.0: + resolution: + { + integrity: sha512-dqT2XBYUOZOiC5t2HRnwADjhNS2cecp9u+TJRiJ1Qp/f5qjkeT5APcGPjHw+bz89Ms8Jp+cG4AlE+QZ/QnDglg==, + } + + nanoid@3.3.11: + resolution: + { + integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==, + } + engines: { node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1 } + hasBin: true + + oniguruma-parser@0.12.2: + resolution: + { + integrity: sha512-6HVa5oIrgMC6aA6WF6XyyqbhRPJrKR02L20+2+zpDtO5QAzGHAUGw5TKQvwi5vctNnRHkJYmjAhRVQF2EKdTQw==, + } + + oniguruma-to-es@4.3.6: + resolution: + { + integrity: sha512-csuQ9x3Yr0cEIs/Zgx/OEt9iBw9vqIunAPQkx19R/fiMq2oGVTgcMqO/V3Ybqefr1TBvosI6jU539ksaBULJyA==, + } + + perfect-debounce@2.1.0: + resolution: + { + integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==, + } + + picocolors@1.1.1: + resolution: + { + integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==, + } + + picomatch@4.0.4: + resolution: + { + integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==, + } + engines: { node: ">=12" } + + postcss@8.5.10: + resolution: + { + integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==, + } + engines: { node: ^10 || ^12 || >=14 } + + property-information@7.1.0: + resolution: + { + integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==, + } + + regex-recursion@6.0.2: + resolution: + { + integrity: sha512-0YCaSCq2VRIebiaUviZNs0cBz1kg5kVS2UKUfNIx8YVs1cN3AV7NTctO5FOKBA+UT2BPJIWZauYHPqJODG50cg==, + } + + regex-utilities@2.3.0: + resolution: + { + integrity: sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==, + } + + regex@6.1.0: + resolution: + { + integrity: sha512-6VwtthbV4o/7+OaAF9I5L5V3llLEsoPyq9P1JVXkedTP33c7MfCG0/5NOPcSJn0TzXcG9YUrR0gQSWioew3LDg==, + } + + rollup@4.60.2: + resolution: + { + integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==, + } + engines: { node: ">=18.0.0", npm: ">=8.0.0" } + hasBin: true + + shiki@3.23.0: + resolution: + { + integrity: sha512-55Dj73uq9ZXL5zyeRPzHQsK7Nbyt6Y10k5s7OjuFZGMhpp4r/rsLBH0o/0fstIzX1Lep9VxefWljK/SKCzygIA==, + } + + source-map-js@1.2.1: + resolution: + { + integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==, + } + engines: { node: ">=0.10.0" } + + space-separated-tokens@2.0.2: + resolution: + { + integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==, + } + + stringify-entities@4.0.4: + resolution: + { + integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==, + } + + tabbable@6.4.0: + resolution: + { + integrity: sha512-05PUHKSNE8ou2dwIxTngl4EzcnsCDZGJ/iCLtDflR/SHB/ny14rXc+qU5P4mG9JkusiV7EivzY9Mhm55AzAvCg==, + } + + tinyglobby@0.2.16: + resolution: + { + integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==, + } + engines: { node: ">=12.0.0" } + + trim-lines@3.0.1: + resolution: + { + integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==, + } + + undici-types@7.19.2: + resolution: + { + integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==, + } + + unist-util-is@6.0.1: + resolution: + { + integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==, + } + + unist-util-position@5.0.0: + resolution: + { + integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==, + } + + unist-util-stringify-position@4.0.0: + resolution: + { + integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==, + } + + unist-util-visit-parents@6.0.2: + resolution: + { + integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==, + } + + unist-util-visit@5.1.0: + resolution: + { + integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==, + } + + v-beautiful-mermaid@0.0.3: + resolution: + { + integrity: sha512-tIuBLSmPnwfks7AZUIt8ARcf5tU3Mpzp3AzDoR/eM8ox5Fyc18DB4k0FMbh9VpL8kNCFyRQ64HS9LzTDsgJ/ew==, + } + peerDependencies: + vitepress: ">=1.0.0" + vue: ">=3.0.0" + peerDependenciesMeta: + vitepress: + optional: true + + vfile-message@4.0.3: + resolution: + { + integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==, + } + + vfile@6.0.3: + resolution: + { + integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==, + } + + vite@7.3.2: + resolution: + { + integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==, + } + engines: { node: ^20.19.0 || >=22.12.0 } + hasBin: true + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + 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 + + vitepress@2.0.0-alpha.17: + resolution: + { + integrity: sha512-Z3VPUpwk/bHYqt1uMVOOK1/4xFiWQov1GNc2FvMdz6kvje4JRXEOngVI9C+bi5jeedMSHiA4dwKkff1NCvbZ9Q==, + } + hasBin: true + peerDependencies: + markdown-it-mathjax3: ^4 + oxc-minify: "*" + postcss: ^8 + peerDependenciesMeta: + markdown-it-mathjax3: + optional: true + oxc-minify: + optional: true + postcss: + optional: true + + vue@3.5.33: + resolution: + { + integrity: sha512-1AgChhx5w3ALgT4oK3acm2Es/7jyZhWSVUfs3rOBlGQC0rjEDkS7G4lWlJJGGNQD+BV3reCwbQrOe1mPNwKHBQ==, + } + peerDependencies: + typescript: "*" + peerDependenciesMeta: + typescript: + optional: true + + zwitch@2.0.4: + resolution: + { + integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==, + } + +snapshots: + "@babel/helper-string-parser@7.27.1": {} + + "@babel/helper-validator-identifier@7.28.5": {} + + "@babel/parser@7.29.2": + dependencies: + "@babel/types": 7.29.0 + + "@babel/types@7.29.0": + dependencies: + "@babel/helper-string-parser": 7.27.1 + "@babel/helper-validator-identifier": 7.28.5 + + "@docsearch/css@4.6.2": {} + + "@docsearch/js@4.6.2": {} + + "@docsearch/sidepanel-js@4.6.2": {} + + "@esbuild/aix-ppc64@0.27.7": + optional: true + + "@esbuild/android-arm64@0.27.7": + optional: true + + "@esbuild/android-arm@0.27.7": + optional: true + + "@esbuild/android-x64@0.27.7": + optional: true + + "@esbuild/darwin-arm64@0.27.7": + optional: true + + "@esbuild/darwin-x64@0.27.7": + optional: true + + "@esbuild/freebsd-arm64@0.27.7": + optional: true + + "@esbuild/freebsd-x64@0.27.7": + optional: true + + "@esbuild/linux-arm64@0.27.7": + optional: true + + "@esbuild/linux-arm@0.27.7": + optional: true + + "@esbuild/linux-ia32@0.27.7": + optional: true + + "@esbuild/linux-loong64@0.27.7": + optional: true + + "@esbuild/linux-mips64el@0.27.7": + optional: true + + "@esbuild/linux-ppc64@0.27.7": + optional: true + + "@esbuild/linux-riscv64@0.27.7": + optional: true + + "@esbuild/linux-s390x@0.27.7": + optional: true + + "@esbuild/linux-x64@0.27.7": + optional: true + + "@esbuild/netbsd-arm64@0.27.7": + optional: true + + "@esbuild/netbsd-x64@0.27.7": + optional: true + + "@esbuild/openbsd-arm64@0.27.7": + optional: true + + "@esbuild/openbsd-x64@0.27.7": + optional: true + + "@esbuild/openharmony-arm64@0.27.7": + optional: true + + "@esbuild/sunos-x64@0.27.7": + optional: true + + "@esbuild/win32-arm64@0.27.7": + optional: true + + "@esbuild/win32-ia32@0.27.7": + optional: true + + "@esbuild/win32-x64@0.27.7": + optional: true + + "@iconify-json/simple-icons@1.2.79": + dependencies: + "@iconify/types": 2.0.0 + + "@iconify/types@2.0.0": {} + + "@iconify/vue@5.0.1(vue@3.5.33)": + dependencies: + "@iconify/types": 2.0.0 + vue: 3.5.33 + + "@jridgewell/sourcemap-codec@1.5.5": {} + + "@rolldown/pluginutils@1.0.0-rc.13": {} + + "@rollup/rollup-android-arm-eabi@4.60.2": + optional: true + + "@rollup/rollup-android-arm64@4.60.2": + optional: true + + "@rollup/rollup-darwin-arm64@4.60.2": + optional: true + + "@rollup/rollup-darwin-x64@4.60.2": + optional: true + + "@rollup/rollup-freebsd-arm64@4.60.2": + optional: true + + "@rollup/rollup-freebsd-x64@4.60.2": + optional: true + + "@rollup/rollup-linux-arm-gnueabihf@4.60.2": + optional: true + + "@rollup/rollup-linux-arm-musleabihf@4.60.2": + optional: true + + "@rollup/rollup-linux-arm64-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-arm64-musl@4.60.2": + optional: true + + "@rollup/rollup-linux-loong64-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-loong64-musl@4.60.2": + optional: true + + "@rollup/rollup-linux-ppc64-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-ppc64-musl@4.60.2": + optional: true + + "@rollup/rollup-linux-riscv64-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-riscv64-musl@4.60.2": + optional: true + + "@rollup/rollup-linux-s390x-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-x64-gnu@4.60.2": + optional: true + + "@rollup/rollup-linux-x64-musl@4.60.2": + optional: true + + "@rollup/rollup-openbsd-x64@4.60.2": + optional: true + + "@rollup/rollup-openharmony-arm64@4.60.2": + optional: true + + "@rollup/rollup-win32-arm64-msvc@4.60.2": + optional: true + + "@rollup/rollup-win32-ia32-msvc@4.60.2": + optional: true + + "@rollup/rollup-win32-x64-gnu@4.60.2": + optional: true + + "@rollup/rollup-win32-x64-msvc@4.60.2": + optional: true + + "@shikijs/core@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + hast-util-to-html: 9.0.5 + + "@shikijs/engine-javascript@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + oniguruma-to-es: 4.3.6 + + "@shikijs/engine-oniguruma@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + + "@shikijs/langs@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + + "@shikijs/themes@3.23.0": + dependencies: + "@shikijs/types": 3.23.0 + + "@shikijs/transformers@3.23.0": + dependencies: + "@shikijs/core": 3.23.0 + "@shikijs/types": 3.23.0 + + "@shikijs/types@3.23.0": + dependencies: + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + + "@shikijs/vscode-textmate@10.0.2": {} + + "@types/estree@1.0.8": {} + + "@types/hast@3.0.4": + dependencies: + "@types/unist": 3.0.3 + + "@types/js-yaml@4.0.9": {} + + "@types/linkify-it@5.0.0": {} + + "@types/markdown-it@14.1.2": + dependencies: + "@types/linkify-it": 5.0.0 + "@types/mdurl": 2.0.0 + + "@types/mdast@4.0.4": + dependencies: + "@types/unist": 3.0.3 + + "@types/mdurl@2.0.0": {} + + "@types/node@25.6.0": + dependencies: + undici-types: 7.19.2 + + "@types/unist@3.0.3": {} + + "@types/web-bluetooth@0.0.21": {} + + "@ungap/structured-clone@1.3.0": {} + + "@vitejs/plugin-vue@6.0.6(vite@7.3.2(@types/node@25.6.0))(vue@3.5.33)": + dependencies: + "@rolldown/pluginutils": 1.0.0-rc.13 + vite: 7.3.2(@types/node@25.6.0) + vue: 3.5.33 + + "@vue/compiler-core@3.5.33": + dependencies: + "@babel/parser": 7.29.2 + "@vue/shared": 3.5.33 + entities: 7.0.1 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + "@vue/compiler-dom@3.5.33": + dependencies: + "@vue/compiler-core": 3.5.33 + "@vue/shared": 3.5.33 + + "@vue/compiler-sfc@3.5.33": + dependencies: + "@babel/parser": 7.29.2 + "@vue/compiler-core": 3.5.33 + "@vue/compiler-dom": 3.5.33 + "@vue/compiler-ssr": 3.5.33 + "@vue/shared": 3.5.33 + estree-walker: 2.0.2 + magic-string: 0.30.21 + postcss: 8.5.10 + source-map-js: 1.2.1 + + "@vue/compiler-ssr@3.5.33": + dependencies: + "@vue/compiler-dom": 3.5.33 + "@vue/shared": 3.5.33 + + "@vue/devtools-api@8.1.1": + dependencies: + "@vue/devtools-kit": 8.1.1 + + "@vue/devtools-kit@8.1.1": + dependencies: + "@vue/devtools-shared": 8.1.1 + birpc: 2.9.0 + hookable: 5.5.3 + perfect-debounce: 2.1.0 + + "@vue/devtools-shared@8.1.1": {} + + "@vue/reactivity@3.5.33": + dependencies: + "@vue/shared": 3.5.33 + + "@vue/runtime-core@3.5.33": + dependencies: + "@vue/reactivity": 3.5.33 + "@vue/shared": 3.5.33 + + "@vue/runtime-dom@3.5.33": + dependencies: + "@vue/reactivity": 3.5.33 + "@vue/runtime-core": 3.5.33 + "@vue/shared": 3.5.33 + csstype: 3.2.3 + + "@vue/server-renderer@3.5.33(vue@3.5.33)": + dependencies: + "@vue/compiler-ssr": 3.5.33 + "@vue/shared": 3.5.33 + vue: 3.5.33 + + "@vue/shared@3.5.33": {} + + "@vueuse/core@14.2.1(vue@3.5.33)": + dependencies: + "@types/web-bluetooth": 0.0.21 + "@vueuse/metadata": 14.2.1 + "@vueuse/shared": 14.2.1(vue@3.5.33) + vue: 3.5.33 + + "@vueuse/integrations@14.2.1(focus-trap@8.0.1)(vue@3.5.33)": + dependencies: + "@vueuse/core": 14.2.1(vue@3.5.33) + "@vueuse/shared": 14.2.1(vue@3.5.33) + vue: 3.5.33 + optionalDependencies: + focus-trap: 8.0.1 + + "@vueuse/metadata@14.2.1": {} + + "@vueuse/shared@14.2.1(vue@3.5.33)": + dependencies: + vue: 3.5.33 + + argparse@2.0.1: {} + + beautiful-mermaid@1.1.3: + dependencies: + elkjs: 0.11.1 + entities: 7.0.1 + + birpc@2.9.0: {} + + ccount@2.0.1: {} + + character-entities-html4@2.1.0: {} + + character-entities-legacy@3.0.0: {} + + comma-separated-tokens@2.0.3: {} + + csstype@3.2.3: {} + + dequal@2.0.3: {} + + devlop@1.1.0: + dependencies: + dequal: 2.0.3 + + elkjs@0.11.1: {} + + entities@7.0.1: {} + + esbuild@0.27.7: + optionalDependencies: + "@esbuild/aix-ppc64": 0.27.7 + "@esbuild/android-arm": 0.27.7 + "@esbuild/android-arm64": 0.27.7 + "@esbuild/android-x64": 0.27.7 + "@esbuild/darwin-arm64": 0.27.7 + "@esbuild/darwin-x64": 0.27.7 + "@esbuild/freebsd-arm64": 0.27.7 + "@esbuild/freebsd-x64": 0.27.7 + "@esbuild/linux-arm": 0.27.7 + "@esbuild/linux-arm64": 0.27.7 + "@esbuild/linux-ia32": 0.27.7 + "@esbuild/linux-loong64": 0.27.7 + "@esbuild/linux-mips64el": 0.27.7 + "@esbuild/linux-ppc64": 0.27.7 + "@esbuild/linux-riscv64": 0.27.7 + "@esbuild/linux-s390x": 0.27.7 + "@esbuild/linux-x64": 0.27.7 + "@esbuild/netbsd-arm64": 0.27.7 + "@esbuild/netbsd-x64": 0.27.7 + "@esbuild/openbsd-arm64": 0.27.7 + "@esbuild/openbsd-x64": 0.27.7 + "@esbuild/openharmony-arm64": 0.27.7 + "@esbuild/sunos-x64": 0.27.7 + "@esbuild/win32-arm64": 0.27.7 + "@esbuild/win32-ia32": 0.27.7 + "@esbuild/win32-x64": 0.27.7 + + estree-walker@2.0.2: {} + + fdir@6.5.0(picomatch@4.0.4): + optionalDependencies: + picomatch: 4.0.4 + + focus-trap@8.0.1: + dependencies: + tabbable: 6.4.0 + + fsevents@2.3.3: + optional: true + + hast-util-to-html@9.0.5: + dependencies: + "@types/hast": 3.0.4 + "@types/unist": 3.0.3 + ccount: 2.0.1 + comma-separated-tokens: 2.0.3 + hast-util-whitespace: 3.0.0 + html-void-elements: 3.0.0 + mdast-util-to-hast: 13.2.1 + property-information: 7.1.0 + space-separated-tokens: 2.0.2 + stringify-entities: 4.0.4 + zwitch: 2.0.4 + + hast-util-whitespace@3.0.0: + dependencies: + "@types/hast": 3.0.4 + + hookable@5.5.3: {} + + html-void-elements@3.0.0: {} + + js-yaml@4.1.1: + dependencies: + argparse: 2.0.1 + + magic-string@0.30.21: + dependencies: + "@jridgewell/sourcemap-codec": 1.5.5 + + mark.js@8.11.1: {} + + mdast-util-to-hast@13.2.1: + dependencies: + "@types/hast": 3.0.4 + "@types/mdast": 4.0.4 + "@ungap/structured-clone": 1.3.0 + devlop: 1.1.0 + micromark-util-sanitize-uri: 2.0.1 + trim-lines: 3.0.1 + unist-util-position: 5.0.0 + unist-util-visit: 5.1.0 + vfile: 6.0.3 + + micromark-util-character@2.1.1: + dependencies: + micromark-util-symbol: 2.0.1 + micromark-util-types: 2.0.2 + + micromark-util-encode@2.0.1: {} + + micromark-util-sanitize-uri@2.0.1: + dependencies: + micromark-util-character: 2.1.1 + micromark-util-encode: 2.0.1 + micromark-util-symbol: 2.0.1 + + micromark-util-symbol@2.0.1: {} + + micromark-util-types@2.0.2: {} + + minisearch@7.2.0: {} + + nanoid@3.3.11: {} + + oniguruma-parser@0.12.2: {} + + oniguruma-to-es@4.3.6: + dependencies: + oniguruma-parser: 0.12.2 + regex: 6.1.0 + regex-recursion: 6.0.2 + + perfect-debounce@2.1.0: {} + + picocolors@1.1.1: {} + + picomatch@4.0.4: {} + + postcss@8.5.10: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + property-information@7.1.0: {} + + regex-recursion@6.0.2: + dependencies: + regex-utilities: 2.3.0 + + regex-utilities@2.3.0: {} + + regex@6.1.0: + dependencies: + regex-utilities: 2.3.0 + + rollup@4.60.2: + dependencies: + "@types/estree": 1.0.8 + optionalDependencies: + "@rollup/rollup-android-arm-eabi": 4.60.2 + "@rollup/rollup-android-arm64": 4.60.2 + "@rollup/rollup-darwin-arm64": 4.60.2 + "@rollup/rollup-darwin-x64": 4.60.2 + "@rollup/rollup-freebsd-arm64": 4.60.2 + "@rollup/rollup-freebsd-x64": 4.60.2 + "@rollup/rollup-linux-arm-gnueabihf": 4.60.2 + "@rollup/rollup-linux-arm-musleabihf": 4.60.2 + "@rollup/rollup-linux-arm64-gnu": 4.60.2 + "@rollup/rollup-linux-arm64-musl": 4.60.2 + "@rollup/rollup-linux-loong64-gnu": 4.60.2 + "@rollup/rollup-linux-loong64-musl": 4.60.2 + "@rollup/rollup-linux-ppc64-gnu": 4.60.2 + "@rollup/rollup-linux-ppc64-musl": 4.60.2 + "@rollup/rollup-linux-riscv64-gnu": 4.60.2 + "@rollup/rollup-linux-riscv64-musl": 4.60.2 + "@rollup/rollup-linux-s390x-gnu": 4.60.2 + "@rollup/rollup-linux-x64-gnu": 4.60.2 + "@rollup/rollup-linux-x64-musl": 4.60.2 + "@rollup/rollup-openbsd-x64": 4.60.2 + "@rollup/rollup-openharmony-arm64": 4.60.2 + "@rollup/rollup-win32-arm64-msvc": 4.60.2 + "@rollup/rollup-win32-ia32-msvc": 4.60.2 + "@rollup/rollup-win32-x64-gnu": 4.60.2 + "@rollup/rollup-win32-x64-msvc": 4.60.2 + fsevents: 2.3.3 + + shiki@3.23.0: + dependencies: + "@shikijs/core": 3.23.0 + "@shikijs/engine-javascript": 3.23.0 + "@shikijs/engine-oniguruma": 3.23.0 + "@shikijs/langs": 3.23.0 + "@shikijs/themes": 3.23.0 + "@shikijs/types": 3.23.0 + "@shikijs/vscode-textmate": 10.0.2 + "@types/hast": 3.0.4 + + source-map-js@1.2.1: {} + + space-separated-tokens@2.0.2: {} + + stringify-entities@4.0.4: + dependencies: + character-entities-html4: 2.1.0 + character-entities-legacy: 3.0.0 + + tabbable@6.4.0: {} + + tinyglobby@0.2.16: + dependencies: + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + + trim-lines@3.0.1: {} + + undici-types@7.19.2: {} + + unist-util-is@6.0.1: + dependencies: + "@types/unist": 3.0.3 + + unist-util-position@5.0.0: + dependencies: + "@types/unist": 3.0.3 + + unist-util-stringify-position@4.0.0: + dependencies: + "@types/unist": 3.0.3 + + unist-util-visit-parents@6.0.2: + dependencies: + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 + + unist-util-visit@5.1.0: + dependencies: + "@types/unist": 3.0.3 + unist-util-is: 6.0.1 + unist-util-visit-parents: 6.0.2 + + v-beautiful-mermaid@0.0.3(vitepress@2.0.0-alpha.17(@types/node@25.6.0)(postcss@8.5.10))(vue@3.5.33): + dependencies: + "@iconify/vue": 5.0.1(vue@3.5.33) + beautiful-mermaid: 1.1.3 + vue: 3.5.33 + optionalDependencies: + vitepress: 2.0.0-alpha.17(@types/node@25.6.0)(postcss@8.5.10) + + vfile-message@4.0.3: + dependencies: + "@types/unist": 3.0.3 + unist-util-stringify-position: 4.0.0 + + vfile@6.0.3: + dependencies: + "@types/unist": 3.0.3 + vfile-message: 4.0.3 + + vite@7.3.2(@types/node@25.6.0): + dependencies: + esbuild: 0.27.7 + fdir: 6.5.0(picomatch@4.0.4) + picomatch: 4.0.4 + postcss: 8.5.10 + rollup: 4.60.2 + tinyglobby: 0.2.16 + optionalDependencies: + "@types/node": 25.6.0 + fsevents: 2.3.3 + + vitepress@2.0.0-alpha.17(@types/node@25.6.0)(postcss@8.5.10): + dependencies: + "@docsearch/css": 4.6.2 + "@docsearch/js": 4.6.2 + "@docsearch/sidepanel-js": 4.6.2 + "@iconify-json/simple-icons": 1.2.79 + "@shikijs/core": 3.23.0 + "@shikijs/transformers": 3.23.0 + "@shikijs/types": 3.23.0 + "@types/markdown-it": 14.1.2 + "@vitejs/plugin-vue": 6.0.6(vite@7.3.2(@types/node@25.6.0))(vue@3.5.33) + "@vue/devtools-api": 8.1.1 + "@vue/shared": 3.5.33 + "@vueuse/core": 14.2.1(vue@3.5.33) + "@vueuse/integrations": 14.2.1(focus-trap@8.0.1)(vue@3.5.33) + focus-trap: 8.0.1 + mark.js: 8.11.1 + minisearch: 7.2.0 + shiki: 3.23.0 + vite: 7.3.2(@types/node@25.6.0) + vue: 3.5.33 + optionalDependencies: + postcss: 8.5.10 + transitivePeerDependencies: + - "@types/node" + - async-validator + - axios + - change-case + - drauu + - fuse.js + - idb-keyval + - jiti + - jwt-decode + - less + - lightningcss + - nprogress + - qrcode + - sass + - sass-embedded + - sortablejs + - stylus + - sugarss + - terser + - tsx + - typescript + - universal-cookie + - yaml + + vue@3.5.33: + dependencies: + "@vue/compiler-dom": 3.5.33 + "@vue/compiler-sfc": 3.5.33 + "@vue/runtime-dom": 3.5.33 + "@vue/server-renderer": 3.5.33(vue@3.5.33) + "@vue/shared": 3.5.33 + + zwitch@2.0.4: {} diff --git a/openwiki/templates/node.md b/openwiki/templates/node.md new file mode 100644 index 0000000..54252d1 --- /dev/null +++ b/openwiki/templates/node.md @@ -0,0 +1,21 @@ +--- +name: "{知识点}" +description: "{知识点描述}" +aliases: # 别名、同义词、缩写、全名、翻译名等 + - {别称-1} + - {别称-2} +tags: # 仅分类标签,如:解剖、蛋白、现象、机制、人物、公司、产品等 + - {分类-1} + - ... +created_at: {YYYY-MM-DD} # 页面创建时间 +updated_at: {YYYY-MM-DD} # 页面更新时间 +--- + +# {知识点} + + + +## 相关资料 + +- [{资料摘要}](../sources/{资料摘要}.md) +- ... diff --git a/openwiki/templates/overview.md b/openwiki/templates/overview.md new file mode 100644 index 0000000..a80ba66 --- /dev/null +++ b/openwiki/templates/overview.md @@ -0,0 +1,21 @@ +# 知识库概览 + +{知识库描述} + +{知识结构逻辑} + +## 知识地图 + +{mermaid流程图} + + + +- **节点-1** + - {描述-1} + - {描述-2} + - ... + +- **节点-2** + - {描述-1} + - {描述-2} + - ... diff --git a/openwiki/templates/source.md b/openwiki/templates/source.md new file mode 100644 index 0000000..1a0e257 --- /dev/null +++ b/openwiki/templates/source.md @@ -0,0 +1,22 @@ +--- +title: "{原始标题}" # 原始资料的原标题,不翻译。如:论文标题、网页文章标题 +abstract: "{原始摘要}" # 原始资料的原摘要、总结,不翻译。如:论文摘要、网页文章总结 +source: {原始地址} # 原始资料的文件路径或网址,并确保链接正常 +tags: # 仅分类标签,如:论文、专利、会议等 + - {分类-1} + - ... +created_at: {YYYY-MM-DD} # 页面创建时间 +updated_at: {YYYY-MM-DD} # 页面更新时间 +--- + +# {原始标题的中文翻译} + +{原始摘要的中文翻译} + +## 关键结论 + +- {结论-1} +- {结论-2} +- ... + + \ No newline at end of file diff --git a/openwiki/theme/Layout.vue b/openwiki/theme/Layout.vue new file mode 100644 index 0000000..d8890b0 --- /dev/null +++ b/openwiki/theme/Layout.vue @@ -0,0 +1,22 @@ + + + \ No newline at end of file diff --git a/openwiki/theme/components/DocMetaEx.vue b/openwiki/theme/components/DocMetaEx.vue new file mode 100644 index 0000000..0691792 --- /dev/null +++ b/openwiki/theme/components/DocMetaEx.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/openwiki/theme/components/DocTags.vue b/openwiki/theme/components/DocTags.vue new file mode 100644 index 0000000..e6a5691 --- /dev/null +++ b/openwiki/theme/components/DocTags.vue @@ -0,0 +1,90 @@ + + + + + diff --git a/openwiki/theme/components/Viewer.vue b/openwiki/theme/components/Viewer.vue new file mode 100644 index 0000000..9e5c590 --- /dev/null +++ b/openwiki/theme/components/Viewer.vue @@ -0,0 +1,1454 @@ + + + + + diff --git a/openwiki/theme/fonts.css b/openwiki/theme/fonts.css new file mode 100644 index 0000000..51fe9bb --- /dev/null +++ b/openwiki/theme/fonts.css @@ -0,0 +1,22 @@ +@import url("https://fontsapi.zeoseven.com/292/main/result.css"); +@import url("https://fontsapi.zeoseven.com/292/light/result.css"); +@import url("https://fontsapi.zeoseven.com/293/main/result.css"); +@import url("https://fontsapi.zeoseven.com/2/main/result.css"); +@import url("https://fontsapi.zeoseven.com/147/main/result.css"); + +:root { + --vp-font-family-base: "LXGW WenKai"; + --vp-font-family-mono: "LXGW WenKai Mono"; +} + +strong { + font-family: "LXGW ZhenKai GB"; +} + +em { + font-family: "LXGW WenKai Light"; +} + +h1 { + font-family: "JiangChengLvDongSong"; +} diff --git a/openwiki/theme/index.js b/openwiki/theme/index.js new file mode 100644 index 0000000..8765db0 --- /dev/null +++ b/openwiki/theme/index.js @@ -0,0 +1,16 @@ +import DefaultTheme from "vitepress/theme-without-fonts"; +import { installMermaid } from "v-beautiful-mermaid/client"; +import Viewer from "./components/Viewer.vue"; +import Layout from "./Layout.vue"; +import "v-beautiful-mermaid/style.css"; +import "./fonts.css"; + +/** @type {import('vitepress').Theme} */ +export default { + extends: DefaultTheme, + Layout, + enhanceApp({ app }) { + installMermaid(app); + app.component("Viewer", Viewer); + }, +};